https://jjoh4803.tistory.com/62
지난 번 올린 글을 이어 작성하는 중..
궁극적인 목표 - YOLO OBB 학습 라벨링 데이터를 만들 때, 4개 Point를 가진 Polygon 좌표 생성을 직접 만들기엔 귀찮아서 SAM을 통해 생성.
SAM2 (Segment Anything Model 2)에서 포인트를 이용한 세그멘테이션의 원리
1. 프롬프트 인코더
- 사용자가 이미지에서 객체의 특징적인 두 점을 선택 (포인트 뿐만 아니라 Box, Mask 사용 가능)
- 보통 객체의 중심부나 경계를 잘 나타내는 위치를 선택
- 이 두 점은 positive point로 작용하여 "이 부분은 객체에 포함된다"라는 정보를 제공
2. 이미지 인코딩
- 입력 이미지는 ViT(Vision Transformer) 구조를 통해 이미지 임베딩으로 변환
- 이미지의 전역적인 특징과 지역적인 특징이 모두 추출
3. 프롬프트 처리
- 선택된 두 점의 좌표는 positional encoding을 통해 임베딩
- 이 점들의 위치 정보는 어텐션 메커니즘을 통해 이미지 특징과 결합
4. 마스크 생성 과정
- 두 점을 중심으로 어텐션 맵이 생성
- 이 어텐션 맵은 선택된 점들과 비슷한 특징을 가진 영역을 강조
- 디코더는 이 정보를 바탕으로 객체의 전체 영역을 예측
5. 마스크 정제
- 초기 마스크는 반복적인 정제 과정을 거침
- 경계 부분을 더 정확하게 구분하기 위해 IoU 예측 헤드가 사용
- 최종적으로 이진 마스크가 생성
이러한 과정을 통해 두 개의 점만으로도 객체 세그멘테이션을 수행할 수 있으며, 특히 두 점을 통해 객체의 대략적인 범위와 특징을 파악하고, 이를 바탕으로 가장 최소 넓이를 가진 방향성 상자(OBB: Oriented Bounding Boxes)를 그려 학습 데이터셋을 만들 예정
'Development > SAM' 카테고리의 다른 글
[SAM to OBB] Generate Point coord Tool (0) | 2024.11.11 |
---|---|
[SAM to OBB] Generate Point coord Tool (0) | 2024.11.10 |
SegmentAnyRGBD (0) | 2024.11.08 |
Oriented Bounding Boxes Label Editor (0) | 2024.11.08 |
SAM (OBB) 객체 추출 (0) | 2024.10.19 |