/Create-Custom-Dataset-for-YOLOv5

Pycharm과 labelImg 툴을 이용하여 YOLOv5용 Custom Dataset을 만들어 보자.

Pycharm과 labelImg 툴을 이용하여 YOLOv5용 Custom Dataset을 만들어 보자.
이미지가 안 보일 경우 클릭해서 크게 볼 것을 권장한다.
사용된 이미지는 저작권과 관계 없는 본인 사진임을 밝힙니다.

Pycharm Project 생성

원하는 폴더에 영어 이름으로 된 프로젝트를 생성한다.

labelImg 설치

pip install labelImg

labelImg 실행

labelImg


Terminal창에 labelImg라고 입력하면 labelImg가 실행된다.

Dataset 폴더 지정하기

save format을 'YOLO'로 변경한 후, Open Dir을 클릭해 Dataset을 만들 폴더를 지정한다.

각 사진마다 Bounding Box를 지정하기

각 사진에서 YOLO가 탐지하길 원하는 객체에 Bounding Box를 지정한다.
Create\nRectBox 버튼을 클릭하면 사진처럼 경계선을 표시할 수 있고, 인식하려는 객체(위 경우에는 남자 얼굴)에 최대한 가까이 경계선을 지정한다.

인식하려는 Class의 첫 번째 객체인 경우, Class이름을 정해 주어야 한다.
위 경우는 '남자 얼굴'이므로, 'Man'이라 지정하였다.
Bounding Box를 저장하기 위해 Save버튼을 누른 후, Next Image버튼을 눌러 다음 사진으로 넘어간다.

다음 사진에는 인식하고자 하는 두 개의 객체(남자 얼굴, 스마트폰)이 존재한다.
남자 얼굴에 Bounding Box를 설정하면, 이전 사진에서 생성한 Class인 Man을 클릭하여 지정할 수 있다.
스마트폰의 경우는, 새로운 Class인 'Smart Phone'을 생성해서 지정해주어야 한다.
이런식으로 새로운 Class는 해당 사진에서 직접 생성하여 지정할 수 있다.

데이터셋에 있는 모든 사진들에 대해 Bounding Box작업을 마치고 해당폴더에 가보면 이런 식으로 Classes파일과, 사진파일, 사진파일과 이름이 같은 txt파일이 존재하는 것을 확인할 수 있다.

Classes파일

Classes파일에는 한 행에 'Class가 등록된 순서'대로 Classs이름이 지정되어 있다.

txt파일

한 줄에 각 객체마다 (txt파일과 이름이 같은 사진 지정한 객체의 Classes 파일안에서의 순서)    (사진에서의 Bounding Box의 4꼭지점의 좌표)로 이루어진 정보가 기록된다.

마치며

운이 좋으면 프로젝트에서 원하는 Data Set을 Google에서 제공하는 Open Image Dataset을 이용할 수도 있고, 혹은 구글링을 통해 얻을 수 있다.
나 역시 프로젝트를 위해 필요한 이미지들 (남자, 여자얼굴 / 스마트폰) Open Image Dataset에서 구할 수 있었으나, 대부분의 사진이 백인으로 이루어져 있어, 학습시킨 YOLOv3가 동아시아 사람들을 인식할 때 정확도가 매우 낮았기 때문에, 약 20000장의 이미지를 Instagram과 Google에서 크롤링 하여 직접 Dataset을 만들 수 밖에 없었다. 하루 날잡고 5~6시간?정도 걸린 것 같았다.
Data Set의 경우, 초상권 침해의 문제로 이어질 수 있기 때문에 프로젝트를 마친 후 전량 폐기하였다.
건승을 빈다.