현재 얼굴 피부 이미지에서 색소침착, 홍조, 주름, 여드름과 같은 피부 특징을 검출하는 프로젝트를 진행하고 있다.

 

Instance Segmentation 방법을 활용할 예정이므로 학습 데이터셋에 Annotation 작업이 필요하다.

 

Annotation Tool중에 하나인 Labelme에 대한 사용방법을 정리한다.


참고 사이트 : https://github.com/wkentaro/labelme

 

1. Labelme 설치

  - Anaconda에서 Annotation을 위한 가상환경을 따로 만들자. 관리하기 편하니까.

    : Install Anaconda

    : 관리자 권한으로 anaconda prompt를 열자.

    : 관리자 권한은 앱 아이콘을 오른쪽 마우스 클릭하면 '관리자 권한으로 실행'이라는 메뉴가 있다.

    : conda create --name=labelme python=3.6

    : conda activate labelme (가상환경을 나오고 싶으면 conda deactivate)

anaconda 가상환경 설치

    : pip install labelme

labelme 설치

설치가 엄청 쉽다!

 

물론 이렇게 설치가 잘 되면 좋겠지만 windows 환경에서는 조금 까다로울수 있다.

 

Git을 설치하고 VS2015 빌드툴을 깔고 뭐 pycocotool을 업데이트하고 그럴수도 있는데

 

과정을 못남겨서 여기서는 생략(...)하기로 한다.

 

2. Labelme 실행

  - anaconda prompt에서 lableme 치면 labelme 창이 뜨면서 실행된다. (참 쉽죠?)

labelme 실행 화면

3. Annotation을 수행할 이미지 혹은 이미지 폴더를 선택한다.

  - 여기서는 labelme 예제 이미지를 이용했다.

  - 왼쪽 메뉴에서 Create Polygons 선택

  - 마우스 클릭을 통해 객체 분할

  - 확대 및 축소를 이용하자.

  - 처음 시작 지점으로 Polygon을 찍으면 class를 넣는 창이 뜬다.

  - class 이름을 입력해주자.

person 이라는 이름으로 OK
person이라는 객체 영역이 설정됨

4. File 탭에서 Save를 눌러 json파일로 저장하자.

 

5. coco 스타일로 변환하려면 labelme2coco.py를 통해 변환해야 한다.

(참고 사이트 : https://github.com/wkentaro/labelme/tree/master/examples/instance_segmentation)

  - ./labelme2coco.py input_folder output_folder --labels labels.txt 이런 입력 파라미터 구조

  - labels.txt는 따로 생성해서 label 이름을 다 넣어줘야 한다.

  - __ignore__ 도 넣어주자 없으면 에러난다.

  - 코드가 무사히 돌아가면 coco스타일의 annotations.json 파일이 생성된다.

  - JPEGImages 및 Visualization 폴더도 생성되며 annotation 결과를 확인할 수 있다.

위의 annotation 작업을 visualization한 결과

 

Tips

  - File 탭에서 Save With Image Data는 체크 해제하자.

    : 체크하게되면 이미지 파일 없이 json 파일로만 학습이 가능하겠지만, 확인도 해야되고 편의상 raw 데이터는 있는게 낫다.

    : json 용량도 엄청 커진다.

  - Group ID는 occulusion 등으로 동일 객체가 나눠진다거나 할때 동일 객체임을 표기하는 용도이다.

    : 위의 오른쪽 물병을 들고 있는 손에서 손이 물병 때문에 분리되어져버림

    : 그래서 따로 분리된 손가락과 사람이 같은 객체라고 같은 Group ID를 부여함

  - labelme2coco.py 소스 코드를 살펴보니 __ignore__ 에 해당되는 영역은 무시되는듯하다.

    : 위의 그림에서 옆구리와 팔 사이의 빈 공간을 __ignore__ 영역으로 해주면 될듯? (확인 필요)

'머신러닝 > Annotation' 카테고리의 다른 글

VGG Image Annotator  (0) 2020.08.31

2018년도에 Instance Segmentation 방법을 기반으로 조기 위암 영역을 검출하는 프로젝트를 진행했었다.

 

학습 데이터셋에 Annotation 작업이 필요했는데,

 

VGG Image Annotator를 활용했었다.

 

(현재는 Labelme를 활용하고 있음)

 

1.0.6 버전을 기준으로 사용방법을 정리해본다.

 

오랜만에 홈페이지 들어가서 찾아보니 버전업이 많이 됐다. -_-;

 

아마 많은 기능이 업데이트 됐으리라고 본다.

 

기본적인 구조는 비슷하기에 최신버전을 받아서 해도 무방할듯하다.


1. 다운로드 링크

  - http://www.robots.ox.ac.uk/~vgg/software/via/

  - 하단에 Downloads 링크가 있다.

  - 1.0.6 버전을 받아주자. via-1.0.6.zip

 

2. 압축을 풀고 via.html 실행 (google chrome 활용)

via.html 더블클릭

3. Image -> Load or Add Images 선택

Image탭에 Load or Add Images 선택

4. Annotation 하려는 이미지 열기

  - shift or ctrl 키를 이용하여 여러 장 선택 가능

Annotation하려는 이미지 선택

5. Region Shape에서 Polygon Region Shape 선택

Instance Segmentation을 위한 Polygon Annotation

6. 마우스 클릭을 통해 영역 분할

확대/축소(+,-) 버튼을 활용해서 디테일하게 작업하자

7. Region Attributes에 class 필드를 추가하고 class를 입력

Class 필드 추가 및 Polyp Class 입력

8. 하나의 이미지에 여러 class 가능

Adenoma Class 추가

9. 나머지 이미지들에 대해 동일한 방법을 통해 영역 분할 수행

다른 이미지에서의 Annotation

10. 불러온 모든 이미지에 대한 작업을 마치고 저장

  - Annotation -> Save as Json

Json 파일로 저장


엄청 쉽지만 많은 시간과 디테일이 요구된다.

 

Annotation은 정답에 해당되는 정보이기 때문에

 

수작업으로 정교하게 수행하는게 가장 좋지만,

 

비용이 많이 소요되기에 전략을 잘 세워야한다.

 

위의 의료영상같은 경우는 일반인이 Annotation 작업을 진행해도 문제가 될 소지가 있다.

 

전문가가 보는 시각과 다르기 때문이다.

 

그래서 의사가 Annotation을 정밀하게 하는게 맞지만

 

그렇게할 의사가 있을지... -_-;

 

해당 프로젝트는 전공의들이 진행했었는데 Annotation을 깍두기처럼 해놔서 (20각형 정도를 5각형으로..)

 

결과가 디테일하지 않았던 기억이 있다.

 

(위의 그림은 본인이 예시로 수행한 것임)

'머신러닝 > Annotation' 카테고리의 다른 글

Labelme  (0) 2020.08.31

+ Recent posts