본문 바로가기
Research/Python

[Labelimg] 이미지 라벨링 하기

by RIEM 2021. 11. 8.

labelimg

작성일 : 2021-11-08

문서버전 : 1.0

 

README

해당 문서는 labelimg를 활용한 이미지 라벨링 작업 과정을 정리한 게시글입니다.

레퍼런스

 

배경

팀원들과 프로젝트를 진행하고 있다. 사진을 업로드하면 사진 내 항공기 내 반입불가 물품들을 자동으로 detect하는 시스템(웹 어플리케이션)을 구축중이다. 이를 위해 프로그램에 미리 반입불가 물품들이 무엇인지 학습을 해주어야 한다. 구체적으로 한 이미지에서 위험 물건이 무엇인지 네모박스를 그려주고 그 물건의 이름이 무엇인지 입력한다. 그렇게 되면 컴퓨터는 이 물건이 위험물품 XX이구나 라고 이해하게 된다. 이를 데이터레이블링 작업이라 한다. 사람이 직접 하나하나 표기를 해주어야 하는데, 이를 도와주는 대표적인 파이썬 모듈은 ‘labelimg’가 있다.

 

설치 및 실행

1.CMD에 아래와 같이 pip으로 labelimg를 설치한다.

Pip install labelimg

 

2.모듈명을 입력한다.

 

labelimg

 

그럼 아래와 같은 프로그램이 실행된다.

 

 

레이블링

파일 열기

Open Dir로 레이블링할 이미지들이 있는 폴더를 열어주자. 위 이미지들은 구글img에서 크롤링해온 e-cigarette(전자담배) 이미지들이다. 

 

세팅

우선 우리팀은 YOLO를 활용할 것이기 때문에 YOLO로 세팅을 해주었다.

 

단축키

Labelimg에는 효율적인 레이블링 작업을 위해 단축키를 제공한다. 특히, 박스를 만드는 W, 다음/이전 사진을 불러오는 D,A 단축키는 유용하다.

 

https://github.com/tzutalin/labelImg#Hotkeys

Ctrl + u Load all of the images from a directory
Ctrl + r Change the default annotation target dir
Ctrl + s Save
Ctrl + d Copy the current label and rect box
Ctrl + Shift + d Delete the current image
Space Flag the current image as verified
w Create a rect box
d Next image
a Previous image
del Delete the selected rect box
Ctrl++ Zoom in
Ctrl-- Zoom out
↑→↓← Keyboard arrows to move selected rect box

 

레이블링 작업

아래와 같이 박스 생성(단축키 W)으로 이미지에 레이블링을 진행해주자.

 

다른 이미지들도 동일한 방법으로 이미지 레이블링을 해준다.

 

저장

레이블링 작업을 하고 저장을 하면 아래와 같이 txt 파일이 형성된다. YOLO로 세팅했기 때문에 txt파일로 저장되는 것으로 판단된다. 

 

폴더 내 classes.txt과 이미지별 *.txt, 총 2개 형식의 파일이 생성된 것을 알 수 있다. 각 txt파일에는 어떤 내용들이 저장되어 있을까?

> Classess.txt 파일

Label명이 저장되는 것으로 보인다.


> *.txt 파일

 이미지 파일당 하나씩 생기는 레이블 txt파일을 열어보면 위와 같은 데이터가 저장되어 있다. 각 레이블 박스들의 위치정보를 나타내는 것으로 추정된다. 



이미지에 레이블링할 때마다 매번 저장을 해야하는데 비효율적이다. 이를 자동화해주는 Auto-save mode를 활용하면 번거롭게 저장할 필요가 없다. 상단 창의 View - Auto save mode를 선택하면 자동 저장 모드를 사용할 수 있다.



Annotation 규칙

작업을 하다 겹치는 객체들은 어디까지 네모를 지정해줘야 하는지 궁금해졌다. 선박해양플랜트연구소에서 작성한 인공지능 데이터 구축·활용 가이드라인(URL)을 보니 아래와 같이 가이드한다.


규칙1) 객체의 이미지를 모두 포함하되 빈틈은 20픽셀 이하 최소화시킨다

규칙2) 겹침 현상 발생할 경우 객체 전체 범위를 추정하여 지정


궁금한 내용은 객체 전체 범위를 추정하여 네모 박스를 지정한다는 규칙2로 해결되었다.

 

인사이트

최초 수집한 이미지의 수는 총 617개다. 그중 레이블링 작업이 어려운 이미지 243개를 제외한 나머지 374개의 레이블 작업을 진행했다. 소요시간은 총 2시간 30분(150분)으로 분당 약 2.5개의 이미지를 라벨링했다. 이미지 1개의 레이블링 작업에 약 25초가 소요되었다.

 

레이블링을 할 수 없을 만큼의 퀄리티가 낮거나 사진이 아닌 일러스트레이션 이미지 등 레이블 작업이 어려운 이미지들은 사전에 제거한 뒤에 레이블링 작업을 하면 훨씬 수월할 것이다.

 

댓글