SAM을 적용한 이미지 데이터 라벨링
SAM을 이용하여 이미지 데이터 학습에 사용할 라벨 데이터를 편하게 만들어보자 (instance segmentation)

모델링 - 지난 글




참고 링크:
Github

segment-anything-annotator

Object Detection 모델을 학습하기 위해서는 Bounding Box나 Polygon 형태의 라벨 데이터가 필요하다. 기존에 이러한 라벨 데이터를 수집하기 위해서는 사람이 일일히 수작업으로 수집해야 했는데, segment-anything-annotator이 우리의 수고를 덜어줄 수 있을 것 같아서 소개하고자 한다.

기존 labelme 프로그램에 SAM을 접합하여, polygon을 자동으로 생성해주기 때문에 하나하나 클릭하여 polygon 데이터를 수집해야하는 끔찍한 노가다를 보다 줄일 수 있을 것으로 보인다.

설치 및 사용 방법은 다음과 같다.

준비

로컬에서 SAM 테스트를 위해서는 다른 딥러닝 알고리즘과 마찬가지로 약간의 준비가 필요하다. 본인은 Anaconda 가상환경에서 테스트하였으며, Anaconda 가상환경 세팅 방법 부터 Pytorch와 Cuda 설치 및 버전 컨트롤까지 다루어 보도록 하겠다.


Anaconda 가상환경 생성

Anaconda 가상환경을 만드는 방법은 다음과 같다.

SAM의 경우 python>=3.8이상의 버전을 요구한다. 따라서 본인은 3.9버전을 통해 테스트를 진행하였다.
Windows의 경우 Anaconda Prompt, Mac의 경우 터미널에서 진행한다.

conda create -n 가상환경이름 python=3.9

여기서 y를 타이핑하고 생성을 진행한다.


가상환경이 잘 생성되었는 지 확인해보자.

conda env list

다음처럼 생성되었으면 성공이다.

생성된 가상환경을 적용해보자.

conda activate 가상환경 이름

다음처럼 (base)가 (내가 만든 가상환경 이름)으로 바뀌었으면 성공이다.


Pytorch 설치


Pytorch는 최근 2.0으로 업데이트 되었다. 따라서 홈페이지에 접속시 Pytorch 2.0을 기본으로 설치하게 되어있을 것이다. 하지만 본인은 이전 버전을 이용하여 테스트를 진행할 것이다. 이유는 최신 버전은 대체로 하위버전도 지원하지만 불안정하거나 실행시 오류가 발생하는 경우가 있기 때문에 안전하게 하위 버전으로 진행하는 것이 좋다는 개인적인 경험에 의한 것이기 때문이다…


Pytorch 이전 버전은 다음 사이트에서 설치 가능하다. 본인은 v1.13.1 버전을 설치 및 테스트 하였다.

만약 그래픽 카드 없이 CPU로만 테스트 할 경우 다음 명령어를 입력하여 설치할 수 있다.

# CPU Only
conda install pytorch==1.13.1 torchvision==0.14.1 torchaudio==0.13.1 cpuonly -c pytorch


git 설치

anaconda prompt에서 다음 코드 실행

conda install git pip


segment-anything-annotator 설치

  1. https://github.com/haochenheheda/segment-anything-annotator에 접속후 다음 화면에서 code 클릭 후 URL 복사

image

  1. 다시 anaconda prompt로 돌아가 아래 코드를 이용하여 C 드라이브 루트로 이동
cd C:\code

git clone 뒤에 복사한 URL 붙여넣기

git clone https://github.com/haochenheheda/segment-anything-annotator.git
  1. 2번까지 실행했으면 segment-anything-annotator 폴더가 생성되어야 정상

새로 생성된 폴더로 이동

cd segment-anything-annotator

실행에 필요한 라이브러리 설치를 위해 아래 코드 실행

pip install -r requirements.txt
  1. 모두 성공적으로 설치하였다면, 아래 코드 실행하여 segment-anything-annotator 실행
python annotator.py --app_resolution 1000,1600 --model_type vit_h --keep_input_size True --max_size 1280

정상 실행 시 아래 GUI 출력됨

image



사용법

  1. 상단에 Image Directory 클릭 후 이미지가 있는 폴더로 이동후 폴더 선택

정상 실행 시 다음과 같은 화면 출력

image

  1. 상단에 Save Directory 클릭 후 작업 파일을 저장할 폴더 선택 (저장 파일은 확장자 .json으로 저장됨)

  2. 상단에 Load SAM 클릭 시 SAM 모델이 다운로드 되면 정상 다운로드 시 Load SAM 버튼이 흐려짐.

  3. Manual Polygon 클릭 시 수동으로 polygon 점을 찍을 수 있음.

  4. Point Prompt 클릭 후 특정 개채를 클릭 시 SAM이 실행되어 자동으로 객체 polygon 자동 생성 + 하단 Proposal을 통해 여러 버전 추천

image

  1. Box Prompt 클릭 후 개체가 있는 부분의 좌측 상단과 우측 하단을 차례로 클릭시 박스가 생성되며, SAM이 실행되어 자동으로 박스 내부에 있는 객체에 대한 polygon 자동 생성

image

  1. 작업 중 틀린 부분 발생 시 R을 누르면 초기화할 수 있고, 완료시 A를 누르면 우측 하단에 라벨 박스가 출력됨.
상태 라벨
aphid (진딧물) 1
Bemisia tabaci (immature)(가루이) 2
Bemisia tabaci (mature)(가루이) 3

다음 표에 맞게 라벨을 입력하고 OK클릭 시 다음과 같이 적용됨.

image

  1. Edit Polygon 클릭 후 위에서 부터 차례로 내려가며 잘못된 부분이 있는지 체크

다음과 같이 잘못된 부분 발견시 Delete Polyton 클릭하여 삭제

image

  1. 검토까지 완료 시 S를 누르면 위에서 지정한 폴더에 저장됨.

image



용어 설명 및 단축키

Manual Polygons: 라벨미와 마찬가지로 개체의 경계를 클릭하여 마스크를 수동으로 추가합니다 (오른쪽 버튼을 누르고 드래그하면 원를 쉽게 그릴 수 있습니다).

Point Prompt: 클릭으로 마스크를 생성합니다. 마우스 왼쪽 버튼/오른쪽 버튼은 각각 양수/음수 클릭을 나타냅니다. 아래 상자에서 여러 마스크 제안을 볼 수 있습니다: Proposal 1-4를 클릭하거나 단축키 1, 2, 3, 4를 눌러 하나를 선택할 수 있습니다.

Box Prompt: 상자가 있는 마스크 제안을 생성합니다.

Accept(단축키: a): 선택한 제안을 수락하고 주석 도크에 추가합니다.

Reject(단축키: r): 제안을 거부하고 작업 공간을 정리합니다.

Save(단축키: s): 파일에 주석을 저장합니다. 각 이미지에 대한 주석을 저장하는 것을 잊지 마세요. 그렇지 않으면 다음 이미지로 전환할 때 주석이 손실됩니다.

Edit Polygons: 이 모드에서는 주석 도크에서 개체 항목을 두 번 클릭하여 범주 레이블이나 ID를 변경하는 등 주석이 달린 개체를 수정할 수 있습니다. 주석 도크. 또한 경계에 있는 점을 드래그하여 경계를 수정할 수 있습니다.

Delete(단축키: d): Edit Mod에서 주석 도크에서 선택/강조된 개체를 삭제합니다.

Reduce Point: Edit Mod에서 다각형이 너무 빽빽해서 편집할 수 없는 경우 이 버튼을 사용하여 선택한 다각형의 포인트를 줄일 수 있습니다. 하지만 이렇게 하면 주석 품질이 약간 떨어집니다.

Zoom in/out: ‘CTRL’을 누르고 마우스의 스크롤 휠을 사용합니다.

Class On/Off: 클래스가 켜져 있으면 카테고리와 ID를 기록할 마스크를 수락한 후 대화 상자가 표시되거나 기본값인 “Object”로 설정됩니다.



Box Prompt 클릭 후 좌측 최상단과 우측 최하단 클릭 시 다음과 같이 전체가 선택됨.

image

대부분의 객체들에 대한 폴리곤이 형성되기 때문에 보다 수월하게 작업이 가능할 것. 이후 첫번째 라벨은 삭제하면 됨.