-
모두팝-SAM과 친해지기공부/AI 2023. 10. 17. 21:15728x90
SAM?
Segment Anything Model
1. SAM의 이론적 배경 :
SAM이 Segmentation 태스크에서 Foundation 모델로 학습되기 위해 사용된
기법 소개
Motivation
최근 Large Language Model(LLM)이 높은 Zero-shot/Few-shot Generalization 성능을 보이고 있다->학습을 하지 않거나 적게 해도 성능이 잘 나온다
LLM과 같이 대량의 데이터셋을 pre-train하고, downstream task에 대해 높은 zero-shot generalization성능을 보이는 모델을 Foundation Moel이라고 부름
컴퓨터 비전 분야에서도 CLIP, ALIGN같이 Visiong-Language Dataset으로 Foundation Model을 만들려는 시도가 있었음
Downstram task에 대한 높은 zero-shot generalization?
ex)gpt는 다음 단어를 예측하는 학습
트랜스포머를 굉장히 많이 쌓고 성능을 확인했더니 좋은 생성모델이 나오더라
추가적인 학습X->zero-shot heneralization
비전분야에는 Vision-Language task를 제외하고도 풀어야하는 다양한 task가 존재
ex)Image Segmentation, 3D reconstruction, ...등
목표 => Image Segmentation을 위한 Foundation Model을 만들자!
Foundation Model for Image Segmentation
파운데이션 모델에서는 어떤 태스크를 학습해야지 전반적으로 잘 풀릴수 있는 모델이 중요해짐
LLM에서는 다음 단어를 예측하는 모델을 학습
Promptable Segmentation Task->이미지와 어떤 "Prompt"가 주어졌을 때 "유효한 Mask"를 반환
Prompt??
이미지에서 분할할 대상을 지정하는 것
points, BBox, Mask, 심지어는 Text가 될 수도 있음
유효한 Mask?
모호한 prompt가 주어졌을 때도 합리적인 mask를 출력해야함
ex) 사람이 가방을 메고 있는 사진이 주어졌을 때 포인트를 사람으로 찍었을시 segmentation할 대상이 애매함->사람?가방?가방의 주머니?
Segment Anything Data Engine&Dataset
NLP에서는 모든 넷상의 모든 데이터를 긁어와서 써야해서 라벨링할 필요도 별로 없었음
Promptable Segmentation task학습을 위한 " Segmentation Mask"는 구하기 어렵다
대규모 Mask data(1.1B)를 획득하기 위한 3가지 stage
1. Assisted- manual stage
공개된 Segmentation dataset을 이용해 SAM을 초기학습
전문 annotator들이 웹기반의 인터페이스에서 초기 학습된 SAM을 이용해 데이터 생성
새로 취득한 Data로만 점진적 모델 학습 진행(6회 추가 학습)
120k이미지로부터 4.3M mask취득
2.Semi-automatic stage
Mask의 종류를 다양화하는 것을 목표로 함
1단계에서 학습된 SAM을 이용해 신뢰도 높은 Mask를 작업화면에 표시
Annotator들은 그 외 Object를 작업
새로 취득한 Data로 점진적 모델 학습(5회 추가 학습)
180k이미지로부터 5.9M mask취득
3. Fully automatic stage
완전 자동화된 Annotation단계
2단계까지 학습된 모델에 32*32 Regular Grid Point를 입력하여 mask획득
IoU값이 높은 mask만 남김
중복된 mask제거 등 후처리 작업수행
11m이미지로부터 1.1B mask취득
=>SA-1B데이터셋
Annotator가 만들지 않고 SAM이 자동으로 만든 데이터만 포함
데이터셋으로써 충분히 의미가 있다는 것을 논문내에서 검증을 함
목표
1.Promptable Segmentation Task
2.Real-world에서 Interactivce하게 사용가능(속도)
목표를 위한 모델의 제약 조건
1. 유연한 prompt 지원
2.프롬프트의 모호함에 대한 대처
3.마스크를 리얼타임으로 연산
=>SAM : image encoder + mask encoder + prompt encoder
강력한 Image encoder가 image embedding을 계산
prompt encoder가 prompt의 embedding을 계산
두 embedding을 결합하여 LightweightMaskdecoder에서결합하여 mask 예측
Image encoder
고해상도 이미지를 처리하기 위해
Masked Autoencoder(MAE)로 Pre-training한 Vision Transformer(ViT)구조를 사용
동일한 이미지에 대한 embedding은 다른 prompt에 재사용할 수 있다
->하나의 이미지에 대해서 한번만 embedding을 계산함
Prompt encoder
Sparse prompt : points, boxes, text
이미지에서 segment할 대상을 지정할 정보
Dense prompt : masks
이미지와 공간적으로 대응되는 정보
Image embedding과 Element-wise로 더해짐
Mask decoder
Image embedding과 prompt embedding을 받아 mask를 출력
Prompt encoder+Mask decoder는 50ms이내에 mask를 예측
모호성에 대응하기 위해 여러개의 mask를 예측하도록 설계함(Whole, Part, Sub-part에 대한 각각의 점수를 매김)
2. SAM 사용 사례 소개 : 컴퓨터 비전 및 영상 분야 중심으로
Applications : One click Segmentation, Everything
Everything
1. 1024개의 지점을 64개씩 16번 배치 수행
2. mask와 iou_prediction추론
3. mask를 필터링
- threshold 이하의 mask를 제거
- 겹쳐지는 mask들을 제거
4. 각 mask의 hole과 island를 제거
=>즉, Everything은 One click Segmentation을 여러번한거라고 생각하면 됨
여기서부턴 SAM을 이용한 오픈소스 Applications :
SAM with CLIP(프롬프트에 맞는 것만 마스크를 찾는 것)
Grounded Segment Anything(Grounding-Dino+SAM, 텍스트들을 넣었을 때 해당 텍스트들을 전부 BBox로 detection을 해주고 BBox내에서 다시 SAM을 수행)
Inpaint Anything(원하는 부분을 찍고 바꾸고싶은 프롬프트를 넣어주면 바꿔줌, SAM+Stable Diffusion)
SAM-Track(영상에서 SAM segment를 추적하는 것, DeAOT로 다음 Frame의 Mask를 예측)
Applications : Awesome Segment Anything에 많은 프로젝트가 들어있음
3. SAM 간단 실습 : Colab 환경에서 SAM 오픈소스 예제 실습
4. Q&A
SAM은 세밀한 부분에 대해서까진 잡아내진 못한다->SAM high quality가 나옴
의료영상같은 경우에는 파인튜닝이 추가로 되면 잘됨(아마 데이터셋에 의료영상이 적지 않았을까?)->의료이미지를 파인튜닝한 오픈소스 프로젝트도 있기 때문에 이런 특수 도메인은 파인튜닝해주는 게 좋음
데이터셋은 소프트라벨링 후, 델타값만 하드라벨링이미지정보들이 펼쳐져있다, 입력정보들이 공간안에 존재하는 느낌오픈소스 프로젝트에 instance segmentation인 것이 존재
재밌다!
'공부 > AI' 카테고리의 다른 글
프롬프트 엔지니어링 가이드 (1) 2024.03.28 여러 인공지능 관련 정의 (0) 2024.01.21 Numpy 정리 (0) 2023.03.07 object detection 성능지표 (0) 2021.09.25