2024. 9. 24. 17:11ㆍ논문리뷰/Etc
최근 연구로 인해 시간이 좀처럼 나지 않아 이제야 논문 리뷰 글을 작성하게 되었다....
사실 세미나나 수업에서 정리해놓은 자료들이 몇 개 쌓여있는데 시간이 날 때마다 글로 올리도록 노력...
이번에 리뷰해볼 논문은 "Segment Anything" 이라는 제목을 내세우고 나온 만큼 Segmentation 관련된 여러 task에 대해서 공통적으로 사용될 수 있는 Foundation 모델을 만드는 것을 목표로 가지고 있다. 최근은 아니고 1-2년 정도에 압도적인 성능과 범용성으로 화제가 되었던 논문이기도 하다!
https://openaccess.thecvf.com/content/ICCV2023/papers/Kirillov_Segment_Anything_ICCV_2023_paper.pdf
1. Introduction
1-1. Vision Tasks
논문 내용을 살펴보기 전에 먼저 간단하게 segmentation이라는 task가 무엇인지 알아보자!
위의 이미지가 여러 vision tasks를 잘 표현하고 있는데, 먼저 딥러닝을 설명할 때 가장 많이 나오는 Classification은 말 그대로 해당 object가 무엇인지 또는 어떤 종류인지 분류하는 작업을 말한다. 위 그림에서는 추가적으로 Localization이란 단어도 붙어있는데 이는 object의 위치까지 출력으로 내보내주는 것을 말한다.
두번 째로, Object Detection은 Classification+Localization과 비슷한데, 다만 여러 object가 있을 시 그들을 구별하고 각 위치를 출력으로 내보내주는 task를 말한다.
세번 째는, Semantic Segmentation과 Instance Segmentation인데 한마디로 정리하자면 pixel-wise classification이다. 즉, 픽셀 별로 어떤 클래스에 속하는지 분류하는 task를 말한다. 다만, Semantic과 Instance의 차이는 객체를 뭉텅이로 보느냐 구별을 해주느냐의 차이이다.
[정리]
- Classificaiton and Localization: Object의 위치와 그 class를 예측.
- Object Detection: 객체를 구분하여 각 각의 위치와 class를 예측.
- Semantic Segmentation: pixel-level로 class를 예측.
- Instance Segmentation: 객체를 구분하여 pixel-level로 class를 예측.
1-2. Segmentation
Segmentaiton이라는 task를 딥러닝은 일반적으로 어떻게 학습할까?
Classification task를 딥러닝으로 학습시키는 과정을 알고 있는 사람들이라면, 생각보다 쉽게 이해할 것이다.
위에서도 말했듯이 단지 Classification이라는 과정을 pixel-wise로 해주면 된다.
1. 이미지를 네트워크 (딥러닝 모델)의 입력으로 주고,
2. 네트워크는 입력 이미지와 같은 크기의 출력을 생성한다 (pixel-wise classification을 해야하므로)
3. 해당 출력과 사전에 준비된 segmentation label 간의 차이를 Objective function으로 backpropagation을 통해 학습을 진행.
여기서 주목해야 할 점은 바로 Segmentation label이다.
1-3. Segmentation Label
쉬운 비교를 위해 Classificaiton task의 label을 살펴보자. 가장 공통적으로 사용되는 ImageNet은 총 1000개의 class를 가지는데, 네트워크는 이 task를 학습할 때 단지 전체 이미지가 어떤 클래스에 속하는지만 보면 된다.
하지만 segmentation label은 어떨까? 위 그림에서 볼 수 있듯이 픽셀마다의 클래스 정보를 ground truth로써 제공해주어야 한다....
즉, 당신이 원하는 이미지들을 가지고 segmentaiton을 학습시키고 싶고...그 이미지들이 256x256 크기를 가지고 있다면 256x256 차원의 segmentation map을 만들어줘야 한다는 이야기이다...듣기만 해도 답이 없다.
물론 픽셀 하나 하나 클래스를 정해주는 작업은 아니고 여러 labeling tool을 통해 영역을 설정하고 해당 영역에 대한 클래스를 정해주게 되지만, 여러 이미지들에 대해서 그 작업을 반복하는 것은 고난의 길이 될 것이다...(그래서 labeling 회사가 많이 생긴 이유기도..).
1-4. Type of Semantic Segmentation
이러한 Segmentation label에 대한 문제를 이 논문에서 처음 다룬 것은 아니다. 이전에도 많은 연구가 이루어졌으며 그 큰 갈래는 다음과 같다.
간단하게 설명해서 Supervised는 위에서 설명한 것과 같이 이미지마다 label을 모두 만들어주어서 학습시키는 것을 말하고, Semi-supervised는 일부만 label이 존재하고 다수의 이미지에 대해서 label이 없을 때의 학습 방법, Weakly-supervised는 Segmentation label은 만들기 너무 힘드니 point나 bounding box, class label등을 사용하는 것을 말한다. 마지막으로, unsupervised는 label이 없는 상태에서 학습하는 방법이다.
해당 논문에서는 Weakly Supervised와 비슷한 개념을 사용하고 있으니 이것만 이해하면 충분하다. 그림에서 보이듯이, 일반적인 Semantic segmentation은 모든 픽셀에 대한 클래스 정보를 label로 사용하지만, Weakly-supervised는 bounding box와 point, class label을 사용하여 학습을 한다.
2. Segment Anything (ICCV 2023, Alexander Krillov et al, Plotr Dollar, Ross Girshick)
드디어 본 논문 리뷰로 들어가보자!!
그 전에 TMI로 "Segment Anything"의 저자 중 Plotr Dollar와 Ross Girshick을 따로 제목에 써놓았는데 그 이유는 이들이 Segmentation, Detection 분야에서 여러 유명한 논문을 쓴 능력자들이시기 때문이다 ㅎㅎ.. 대표작으로는 Mas-RCNN과 Focal Loss등이 있다...
2-1. ChatGPT
여기서 갑자기 ChatGPT가 나와서 어리둥절 할 수도 있다. 그렇다..세상은 모두 ChatGPT인 것이다...이 논문은 시작하기에 앞서 다음과 같은 질문을 던진다.
Segmentation이라는 분야에서 ChatGPT와 같은 Foundation 모델을 만들 수 있을까?
그리고 이러한 질문에 대한 답을 만들기 위해서 이를 하위 3개의 질문으로 나누어 출발을 한다.
- What task will enable zero-shot generalization?
- What is the corresponding model architecture?
- What data can power this task and model?
2-2. What task will enable zero-shot generalization?
이 질문에는 Large Language Model (LLM)에서 자주 사용되는 Prompt라는 개념을 가져온다.
Prompt란 일종의 형식이라고 생각하면 된다. 종종 광고 또는 유튜브로 "ChatGPT 잘 사용하는 법"이라는 글을 본 적이 있을 것이다. 그 이유가 바로 이 Prompt에 있다. LLM은 정말 엄청나게 거대한 데이터셋을 기반으로 하기 때문에 어떤 task에 대해서 적절한 prompt (형식)을 잘 정의해주기만 해도 성능이 큰 폭으로 상승한다!
여기서는 그 prompt로 위와 같이 point, bounding box, mask, text등을 사용한다. 즉, 이미지와 함께 해당 prompt를 네트워크의 입력으로 주면 그에 맞는 segmentation mask를 출력으로 내보내는 task를 정의한다.
2-3. What is the corresponding model architecture?
Prompt라는 새로운 개념을 도입했기 때문에 모델의 구조 또한 새롭게 정의를 해주어야 한다.
구조는 간단히 입력 이미지와 prompt에 대한 특징을 추출하는 2개의 encoder와 그로부터 나온 representation vector로부터 원하는 객체의 mask를 추출하는 decoder로 이루어져있다.
구조를 더 자세히 들여다보면 위와 같다. 먼저 각 prompt들에 대한 처리 법이 다른데,
Prompt Encoder
mask는 convolution을 통해서 차원만 image embedding과 맞춘 다음 단순히 pixel-wise summation을 한다. point와 bounding box는 positional encoding으로 embedding 되어서 다른 prompt의 embedding에 더해진다. 이와 관련된 설명은 해당 논문에는 나와 있지 않고 다음 논문을 참고해야한다.
https://arxiv.org/abs/2006.10739
이 논문은 자세하게 다루지는 않을 거지만, 간단하게 말해서 좌표 정보를 바로 사용하지 말고 positional encoding과 같은 Fourier feature mapping을 통해서 한번 매핑 해주면 high-frequency 정보를 훨씬 잘 복원한다는 이야기이다. 정말 단순한 방법이지만 성능이 많이 상승되어서 이 논문에서도 차용한게 아닌가 싶다...
Image Encoder
이미지 인코더는 "Masked Autoencoders are Scalable Vision Learners" 논문의 pre-trained 인코더를 그대로 사용한다. Masked Autoencoder (MAE)는 self-supervision task에서 좋은 성능을 보이며 최근에도 많이 사용되는 기법이다. zero-shot에. 범용적인 모델로 사용을 해야하기 때문에 학습된 MAE를 사용한 것이 아닌가 싶다.
*이도 간단히만 설명하자면, 1) 이미지에 랜덤으로 zero-mask를 준 후에 mask되지 않은 부분들만으로 encoder를 통한 representation을 만들고 2) 해당 벡터에, mask된 부분들에 해당하는 mask token을 concat해준 후 3) decoder를 통해 원래 이미지를 복원하는 과정을 반복한다. 보통 다른 task의 pre-training 모델로서 많이 사용되며 decoder는 제거하고 encoder만을 사용한다.
Text Encoder
그렇다...text encoder도 "Learning Transferable Visual Models from Natural Language Supervision"이라는 논문의 CLIP모델의 pre-trained text encoder를 사용한다.
*이도 매우 유명한 논문인데 간단히 말하자면 Text encoder로부터 나오는 embedding vector와 Image encoder로부터 나오는 embedding vector를 동일한 representation space에 매핑하고자 하는 것이다. 즉, 의미가 비슷한 text 뿐만 아니라 이미지들도 서로 뭉치게 되고, 반대로 의미적으로 관련이 별로 없는 text와 이미지들은 서로 떨어지도록 학습이 되는 것이다.
Mask Decoder
마지막으로 segmentation mask를 출력해주는 Mask decoder 부분을 살펴보자.
구조가 복잡해보이지만, 두 encoder로부터 나온 image embedding과 prompt embedding들의 attention (self-attention과 양방향 cross-attention)을 해서 두 정보들을 잘 섞어주는 과정을 거치고 masks와 IOU scores라는 두 출력 값을 내보낸다는 것만 알면 된다.
Ambuiguity
여기서 segmentation mask외에 IoU scores도 출력해야 하는 이유는 "ambuiguity"라는 문제 때문인데,
내가 prompt를 줄 때 어떠한 의도로 주었는지가 모호하다는 문제를 말한다. 위의 예를 보면 prompt로 선택한 point가 사람 전체를 가르키고 싶은건지, 아니면 가방만을 가르키고 싶은건지, 그것도 아니면 가방의 작은 지퍼부분만을 가르키는 건지 네트워크가 그 의도까지 파악해주기를 바라는 것은....인공지능을 너무 과신하는 것이다..
따라서 IoU scores를 계산해 여러 mask 후보 중 그나마 가장 가능성이 높은 mask를 출력으로 내보내 주는 것이다.
2-4. What data can power this task and model?
쓰다 보니 글이 길어졌는데 드디어 마지막 파트이다...상대적으로 어려운 방법론은 끝났으니 부담없이 보면 된다!
ChatGPT로부터 영감을 받아 시작한 연구이기 때문에 (?) 매우 큰 데이터셋을 사용하여 학습하는 것을 가정으로 한다. 하지만 위에서도 언급했듯이 segmentation label을 만드는 것은 엄청난 시간과 자원을 요구하는데, 논문에서는 자신들이 어떻게 효율적으로 대용량의 segmentation 데이터셋을 만들었는지를 설명한다.
먼저 그 데이터셋의 크기를 말하자면, 1100만장의 이미지와 이미지내 객체에 대한 10억장의 mask...이게 얼마나 큰 지 다른 segmentation 데이터셋과 비교해보면 다음과 같다.
Process
데이터셋을 만드는 과정은 위와 같이 3단계로 나뉘어져있다.
첫번 째 단계는, 기존 데이터셋으로 먼저 segment anything 모델을 학습시킨 후에 추론 과정을 거치고, 나온 mask들에 대해서 전문가들이 수정 및 추가하는 과정을 거친다.
두번 째 단계는, 첫번 째 단계를 거쳐서 얻은 마스크 430만 장을 사용하여 다시 모델을 학습 시키고, 추론 과정을 거쳐서 mask를 만들어낸다. 여기서도 전문가가 투입되는데 첫번 째 단계와 다른 점은 수정은 하지 않고 빠진 부분에 해당하는 label만 추가해준다는 것이다. 즉, segment anything 모델이 이제는 segmentation mask를 대체로 잘 만들어낸다는 것을 가정하고 있다.
마지막으로, 두번 째 단계까지 거쳐서 모은 마스크 1020만개를 사용하여 모델을 학습시키고, 전문가를 통해 수집한 1100만장의 이미지들에 대해서 segmentation mask를 만들어내도록 한다. 이 단계에서는 전문가들이 없고 온전히 모델이 만들어내는 mask를 사용한다.
segment anything 모델이 위 과정을 거쳐 정말 mask를 잘 만들어낼 까 생각이 들 수 있지만, 실제로 잘 만든다 ㅎㅎ..
생각보다 작은 물체까지 디테일하게 segmentation mask를 잘 만들어내는 것을 볼 수 있다...
3. Experiments
최종적으로 학습된 segment anything 모델이 어디까지 할 수 있는가? 를 보여주는 섹션이다. 논문에서는 실험 tasks를 위 다섯 개로 정해놓았는데 하나씩 살펴보자.
Zero-shot Segmentation
Single-point Segmentation에 대한 실험으로, point 하나만 정보로 주었을 때 object의 mask를 얼마나 잘 생성해내는지에 대한 task이다. 기존의 SOTA인 RITM과 비교를 하는 그래프로 70% 이상의 데이터셋에서 SAM이 좋은 성능을 보이고 ambiguity 특성까지 고려하였을 때는 (주황색 점선) SAM이 모든 데이터셋에서 높은 성능을 보여준다.
Edge Detection
object들의 edge를 검출해내는 task이다. Soble filter와 Canny 같은 고전 computer vision 방식의 detector보다는 높은 성능을 보여주지만 딥러닝 기반의 다른 방법보다는 성능이 낮다. 다만, 그 차이가 크지 않아 reasonable하게 잘 된다고 말할 수 있다.
이러한 edge detection과 같은 task를 진행할 때는 프롬프트로써 일정 간격의 포인트들을 입력으로 준다.
Object Proposal
Object Proposal은 객체가 있을 법한 영역을 예측하는 task를 말하고, RCNN과 같은 object detection 모델에서 사용되는 개념이다.
이것도 마찬가지로 SOTA보다는 못하지만 어느 정도 잘 한다는 것을 의의로 두고 있다...ㅎㅎ
Instance Segmentation
이하 동일..다만, 정성적인 측면에서 SAM이 상대적으로 smooth한 mask를 만들어낸다고 한다 (비행기 예제).
Text to mask
Text만을 입력으로 받고 해당 text에 맞는 부분의 segmentation mask를 만들어내는 task이다. 매우 어려운 문제라 text만 주었을 때는 잘 되지 않고, 추가 prompt (e.g. point)를 주었을 때 어느 정도 되는 것을 볼 수 있다.
Demo
아래 공식 페이지에서 여러 데모를 체험해 볼 수 있으니 기회가 되면 해보길 추천!
Reference
해당 리뷰는 DSBA 연구실의 유튜브 자료를 많이 참조하였습니다. 더 자세한 설명이 듣고 싶다면 아래 링크로!!
https://www.youtube.com/watch?v=7wITg-SkM3M
'논문리뷰 > Etc' 카테고리의 다른 글
[논문 리뷰] Matching Networks for one shot learning (0) | 2022.03.15 |
---|---|
[논문리뷰] Attention is All you need (0) | 2022.02.20 |
[논문리뷰] Deep Image Prior(2) (6) | 2021.10.31 |
[논문리뷰] Deep Image Prior(1) (0) | 2021.10.28 |
[논문리뷰] SRCNN (2) | 2021.05.07 |