본문 바로가기
딥러닝 with Python

[딥러닝 with Python] Segment Anything / Segment Anything Model(SAM)

by CodeCrafter 2024. 11. 8.
반응형

 

이번에는 Image Segmentation에서 Foundation 모델로 각광을 받고 있는 Segment Anything 논문에 대해서 리뷰해보겠습니다.

 

본 포스팅은 "Segment Anything" 논문을 참고하였습니다.

 

 

1. Segment Anything Model (SAM)

- 해당 논문은 Image Segmentation에서 활용할 수 있는 Foundation model을 만들고자 하는 생각으로 시작하였습니다.

 

- 이때 3가지의 Main question이 있는데

 1) 어떤 작업을 통해 Foundation 모델을 학습 시켰을때, 일반화된 Zero shot이 가능한가?

 2) 모델의 아키텍처는 어떻게 구성해야 할 것인가?

 3) 어떤 데이터를 활용해야 할 것인가? 

입니다.

 

- 먼저 Task로는 Prompt Segmetation을 선정하였습니다. 

 * 이때 Prompt는 다양한 형태의 입력을 의미하며, Point prompt, Box prompt, Text prompt 등 을 활용했습니다.

 * 이때 Prompt들이 Segmentation mask에 대한 일부 정보를 가지고 있기에 Weak Supervision으로 작용합니다.

 

- 다음으로 모델의 아키텍처로는, 2개의 인코더와 1개의 경량화 되었으며 마스킹을 활용하는 디코더를 선정했습니다.

 

 

- 데이터 셋으로는 1,100만개의 인풋 이미지의 10억개의 object mask를 활용했습니다.

 

- 이때, Input은 이미지와 Prompt(Foreground / Background Points, Approximate boxes or masks, Free-form text)이고, Output은 원하는 형태의 Segmentation이 되겠습니다.

 

- 이때 SAM의 경우 실생활에서의 유용한 활용성을 위해

 1) Flexible한 prompts를 사용가능하도록 지원해야 됨

 2) Real time으로 결과를 제공하기 위해 미리 계산된 정보를 활용해 효율적으로 마스크를 생성할 수 있어야 함

 3) 입력의 모호성을 인식할 수 있어야 함

 

이라는 제약 조건을 걸어 더 활용도가 높은 모델을 만들고자 했습니다.

 

 

- 이를 통해 제시하고자하는 SAM의 최종 아키텍처는 아래와 같습니다.

 

 

* 인코더는 scalability와 pretraining에서 좋은 성과를 보여준  Masked Auto Encoder를 활용했습니다.

* 그리고 Prompt Encoder에는 Dense한 인풋인 Masks와 Sparse한 인풋인 points, boxes, text가 사용될 수 있게 했습니다.

* 디코더는 Light weight Decoder를 활용했으며, Self attention과 Corss Attention 을 활용 후 MLP가 이어지는 아래와 같은 구조를 택하였습니다.

 

 

* Mask Decoder는 아래와 같이 모호한 상황을 처리 하기 위해 3개의 마스크를 생성하고, 그 중 가장 예측된 IOU가 높은 마스크를 선택하게 만듭니다.  이를 활용하는 Loss Function을 구현하고 사용했습니다.

 

반응형

댓글