논문:https://arxiv.org/abs/2304.02643
Segment Anything
We introduce the Segment Anything (SA) project: a new task, model, and dataset for image segmentation. Using our efficient model in a data collection loop, we built the largest segmentation dataset to date (by far), with over 1 billion masks on 11M license
arxiv.org
이번 포스팅에서는 Meta(페이스북)에서 2023년 4월 공개한
강력한 CV 모델인 SegmentAnything 논문을 리뷰하겠습니다.
해당 글을 참조했습니다.
Segment Anything 논문 리뷰
오늘은 Meta AI의 Segment Anything논문을 리뷰합니다. 논문 이름이 목적과 내용을 뜻하는 논문이네요. 아래 사진과 같이 어떤 이미지든(zero-shot) segment할 수 있다는 것을 의미합니다. Zero-shot transfer이
da2so.tistory.com
https://artgor.medium.com/paper-review-segment-anything-96d9838fd569
Paper Review: Segment Anything
Foundation model for image segmentation
artgor.medium.com
Introduction
근래의 LLM의 가장 강력한 모델인 GPT 모델은
추가 훈련(fine - tuning)되지 않은 문장에 대한 예측을 가능하게 하는 zero-shot이나
약간의 샘플 데이터를 입력해서 task의 결과를 도출하는 few-shot 기능을 제공하고 있습니다.
GPT의 이러한 기능들의 성능은 fine-tuning을 능가할 정도로 뛰어납니다.
또한 여러 특징을 가진 hand-crafted(수제, 사람이 직접 정하는) 질문에 대해서
유연하고 적절한 response를 즉각적으로 출력해주는 prompt engineering이 가능합니다.
이러한 특징을 가진 LLM 모델을 foundation model이라고 하며
전체적인 학습 과정은 이전 포스팅에서 다뤘던 GPT,BERT의 모델 구조인
pre-trained 된 모델을 downstream task에서 fine-tuning하는 방식으로 진행합니다.
해당 SegmentAnything 모델은 이런 아이디어를 Computer Vision에 적용하고자 합니다.
"image segmentation 용 foundation model을 만들어보자"
아래와 같은 3가지 방법론을 통해 진행합니다.
1. zero-shot generalization이 가능한 task.
2. model architecture.
3. task와 model에 적합한 data.
해당 방법론을 설명하겠습니다.
1. Task
LLM에서 사용하는 방식과 비슷한 promptable segmentation task를 제안합니다.
즉 다양한 방식의 prompt를 받아 segmentation mask를 출력합니다.
prompt의 종류에는 points, boxes, segment mask, text가 있습니다.
points : 객체를 점으로 선택해서 valid mask를 얻어냄.
boxes : bounding box 영역을 선택해서 valid mask 얻어냄.
segment mask: 마스크 영역을 선택해서 valid mask를 얻어냄.
text: 객체 종류 text를 제공해 valid mask를 얻어냄.
해당 Segentation prompt가 segment할 객체의 일부분을 선택하거나
애매한 text가 입력되는 등 ambiguitry(모호한)특성의 prompts가 들어와도 하나 이상의 valid mask를 뽑아냅니다.
아래의 사진을 보면 하나의 prompt라도 사용자의 의도에 따라 여러 마스크가 정답일 수 있음을 나타냅니다.
논문에서는 한 prompt에 대해 총 3가지의 output masks를 예측하도록 했습니다.
훈련시에는 masks에 대해 mininum loss 만 역전파를 진행합니다.
3개의 masks에 대해 confidence score를 예측해서 순위를 매겨줍니다.
모델의 Pre-training은 image와 prompts(points, boxes, masks,text)을 입력으로 해서 나온 model output인
예측된 mask와 ground truth의 차이를 최소화 하도록 학습됩니다.
2. Model
모델은 3가지의 constraints(제약사항)을 만족해야합니다.
1. Flaxible prompts를 지원함.
2. 상호적으로(image와 prompt가), 실시간으로 segmentation mask를 출력할 수 있어야함.
3. ambiguitry(모호한) 특성의 prompt에 대해서도 하나 이상의 mask를 출력하는 처리가 가능해야함.
SAM(Segment Anything)은 해당 제약사항을 모두 만족시키기 위해
아래와 같은 image encoder, prompt encoder, mask decoder로 구성됩니다.
Image encoder : image를 입력으로 image embedding 출력.
Prompt encoder: prompt를 입력으로 prompt embedding 출력.
Mask decoder : 위에서 얻어낸 Image embedding, Prompt embedding을 입력으로 segmentation mask 출력
구조적으로 위 제약사항을 만족하게 됩니다.
1. prompt는 point, box, mask, text를 받을 수 있음.
2. Input image는 같고 prompt를 달리 처리할 수 있고, 이 경우 image embedding을 재사용할 수 있음.
3. prompt 입력에 대해 반드시 segmentation mask를 출력.
아래는 좀 더 자세한 모델 구조 이미지입니다.
해당 구조의 각 부분에 대해 설명하겠습니다.
2-1) ImageEncoder
CV에서의 Encoder는 모델이 이미지의 특성을 잘 파악하는 것을 진행하는 부분입니다.
SAM의 ImageEncoder는 Pre-trained Vision Transformer(ViT)중 하나인
Masked autoencoders(MAE)의 encoder를 사용하여 구성합니다.
위의 ViT의 MAE 구조에서
입력 이미지는 여러개의 작은 패치로 분할되며 각 패치의 일부는 가려져 있습니다.
가려진 패치들이 모델이 예측해야할 대상이 됩니다.
인코더는 가려지지 않은 패치(25%)만을 입력으로 받아들이며
ViT의 Self attention을 거쳐 중요한 정보를 추출해서 고차원적인 표현을 생성합니다.
인코딩 후에 디코더가 복원할 마스크 토큰이 가려진 부분의 위치에 채워지고
디코더에서는 해당 부분을 복원합니다.
Pre-train 후에는 디코더 부분이 제거되며, 인코더만 해당 모델에 사용됩니다.
2-2) Prompt encoder
Prompt 자체를 Sparse(points, boxes, text)와 Dense(mask) prompt로 나눠서 정의합니다.
Sparse prompt중 points와 boxes는 learned embeddings(embedding vector 변환)를 거쳐 positional encoding과 합쳐져 입력으로 들어가며, text는 CLIP text encoder를 사용해 입력으로 들어가게 됩니다.
Dense prompt는 Convolution을 사용해 embeding되며 image embedding된 데이터와 element-wise로 합쳐지게 됩니다.
element-wise: 두 텐서간의 같은 위치의 요소들끼리의 연산.여기에서는 summation element-wise 진행.
2-3) Mask Decoder
Mask decoder은 image embbeding, prompt embedding과 output token을 mask에 매핑해
segment mask를 생성해서 출력해줍니다.
Mask Decoder는
transformer의 decoder 블록과 dynamic mask prediction head 구조를 사용합니다.
image embedding는 이미지 추출 vector는 256x64x64의 차원입니다.
즉 64x64크기의 256채널의 feature maps를 의미합니다(Pytorch 측면)
output tokens는 Sparse prompt에 적용된 learnde embeddings의 결과인 듯 합니다.
각 token들은 입력된 prompt들을 의미합니다.
해당 블록들은 transformer의 decoder 구조입니다.
prompt- self attention을 사용했고
cross-attention을 token -> image , image -> token 2가지 방향으로 사용했습니다.
아래에서 부터 보면
self attension에서는 토큰간의 정보를 교환하며 서로의 관계를 파악할 수 있게 합니다.
token to image attension에서는 각 토큰에서 추출된 정보가 이미지에 통합되어 이미지 처리에
필요한 정보를 강화시킵니다.
token to image attension의 출력 값은 차원 변경과 특성 통합 등을 해주기 위해 mlp를 거치게 되고,
image to token attension에 들어가 이미지 임베딩에서 추출된 정보와 결합되어
이미지와 토큰에 대한 관계정보를 가질 수 있게 합니다.
해당 Decoder는 2개의 계층으로 이루어집니다.
해당 구조는 dynamic mask prediction head 구조이며,
2xConvolutional Transformations는 이미지 임베딩이 두번의 컨볼루션 변환을 거치고
업샘플링을 통해 이미지의 특성을 정제하고 세부적인 부분을 강조하게 합니다.
최종적인 마스크 생성을 하는데 필요한 데이터를 만듭니다.
Token to Image Attention에서는 이미지의 각 위치에 추가적인 정보를 제공하며 마스크의 정확도를 높입니다.
해당 데이터는 MLP를 거쳐 mask foreground probabilty (마스크가 관심객체에 속할 확률)를 구해 각 이미지의 앞의 2x Conv trans의 출력결과와 내적하고 최종적인 mask를 출력합니다.
또 IoU점수를 계산하기 위한 MLP에 들어가 IoU 점수를 계산합니다.
3. Data engine
SAM은 해당 모델을 훈련시키기 위해서 방대한 dataset이 필요합니다.
하지만 데이터를 라벨링 하는게 무척이나 어렵고 시간이 오래걸리게 되며,
때문에 많은 segment mask의 훈력 데이터를 얻을 수 없었습니다.
논문의 저자는 이를 위해 Data engine을 구축했습니다.
Data engine은 아래의 3가지 전략으로 구성됩니다.
1. Assisted-manual stage(보조 수동 단계): 기존 데이터셋인 LVISv1, MS COCO, ADE20, Open Images 으로 학습된 모델이 추론한 mask 결과에 대해서 사람(annotator)이 개체를 지정해 레이블을 수정하거나 추가함. (430만개의 마스크 데이터 수집)
2. Semi-automatic stage(반자동 단계): "1." 단계에서 모은 데이터 셋으로 SAM 학습. 모델이 추론한 mask 결과에 대해
사람(annotator)이 빠진 레이블을 추가. (590만개 마스크 데이터 추가)
3. Fully-automatic stage(완전 자동 단계): "1." "2." 단계에서 모은 마스크 데이터 1020만개로 SAM 모델 학습.
해당 모델로 여러 point 밀집된 regualr grid를 prompt로 줘서 이미지 1100만장에 대해 11억개의 마스크 라벨을 생성.
4. Dataset
해당 방식을 통해 SAM에서는 11억개의 maak로 구성된 SA-1B라는 데이터셋을 얻어낼 수 있었습니다.
SA-1B Image는 모두 license가 있고 기존 데이터 세트보다 해상도가 높고 얼굴과 차량 번호판은 블러처리를 했다고 합니다.
SA-1B Mask는 99.1%가 fully-automatic으로 생성되었으며, 사람이 직접 라벨링한 annotate한 결과와 비슷한 정확도를 보인다고 합니다.
또한, 다른 데이터셋과 비교해볼때 데이터의 mask가 이미지에 골고루 분포된 형태를 띄고 있습니다.
아래의 기존 마스크 라벨 데이터셋들과의 비교를 보면
Number of masks per image(이미지당 마스크 개수) : SA-1B의 이미지당 마스크 개수가 51-100, 101-200, 200초과의 개수가다른 데이터보다 많을 것을 확인할 수 있습니다.
Relative segmentation mask size(마스크 사이즈 연관성) : SA-1B의 마스크 크기가 더 세분화 되었다는것을 나타냅니다.
Concavity(마스크 복잡성) : 마스크의 형태가 단순할수록 낮은 Concavity를 보입니다. SA-1B는 다른 데이터들과 비슷한 복잡성을 띄는 것을 볼 수 있습니다.