본문 바로가기
Object Dectect

Yolo_Mark를 통한 학습 데이터 만들기1(Darknet)

by 양초털이범 2020. 3. 2.

Yolo_Mark


Yolo_Mark는 이미 학습되어있는 자료인 YoloV3가 아닌 직접 이미지 학습을 시키기 위한 프로그램입니다 Yolo_Mark만으로 이미지를 학습시킬 수 있는 건 아니지만 학습을 시키기 위해서 꼭 필요한 전처리 단계라고 생각하면 좋을 것 같습니다.

 

설치


우선 Yolo_Mark를 다운로드해 줍니다.

설치 링크: https://github.com/AlexeyAB/Yolo_mark

 

AlexeyAB/Yolo_mark

GUI for marking bounded boxes of objects in images for training neural network Yolo v3 and v2 - AlexeyAB/Yolo_mark

github.com

다운을 완료하게 되면 다음과 같은 파일들이 있을 것이고 Yolo_Mark를 실행해 줍니다.

 

실행 시 다음과 같은 Visual Studio 창이 뜨게 되고

프로젝트명(yolo_mark)을 오른쪽 클릭하여 속성으로 들어가 주고 OpenCV의 라이브러리를 추가해줘야 합니다.

OpenCV의 라이브러리를 추가하는 법은 https://candletheif.tistory.com/2에 올려놓았으니 그대로 따라 해 주시면 됩니다.

설정을 모두 끝내고 Release 모드로 빌드를 해주시면 모든 설정이 끝나게 됩니다.

 

실행


Yolo_mark-master\x64\Release에 들어가시면 Yolo_mark 파일이 2개가 보일 것입니다. 그중 cmd파일을 실행시켜 주세요

 

실행을 시키면

이렇게 사전에 설정한 Mark값이 들어가 있게 됩니다.

 

원하는 이미지 Marking 하기


Yolo_mark-master\x64\Release\data에 들어가시면 다음과 같은 폴더 및 파일들이 있습니다.

위에서부터 설명을 해드리면

img: 학습할 이미지를 넣는 폴더

obj.data: Class(학습할 Object)의 개수 Train정보, 이름 정보, 학습한 데이터(.wrights)의 저장 경로를 명시해 놓는 파일

obj.naems: 학습할 Object의 이름을 저장해 놓는 곳

train: 이미지의 경로가 저장되어 있는 곳

입니다.

 

이제 Marking을 위한 작업을 해줘야 합니다.

 

1. 이미지 파일 넣기

Yolo_mark-master\x64\Release\data\img에 들어가셔서 안에 있는 파일들을 다 지워주시고 원하시는 이미지를 넣으시면 됩니다. 저는 문재인 대통령님의 사진을 학습시키기 위해서 사진을 넣도록 하겠습니다.

 

정확한 학습을 위해선 1000장 이상의 사진을 Mark 해주는게 좋습니다. 하지만 1000장 이상의 사진을 직접 다운받기엔 많은 시간이 걸리므로 이미지 크롤링을 구현하시는게 가장 좋습니다.

밑 링크에 이미지 크롤링 구현하기 글의 링크를 남겨드리니 참고하셔서 사진을 다운 받으시는걸 추천드립니다.

https://candletheif.tistory.com/5

2. Class의 개수 설정

obj.data를 Notepad로 열면 다음과 같은 정보들이 있습니다.

2~5줄은 필요한 txt 파일과 weights파일을 저장할 경로를 지정해주는 곳이므로 신경 쓸 필요 없고 첫 번재 줄의 classes의 값을 정해줘야 합니다. 저는 인식할 object가 하나 이므로 1로 설정해 주겠습니다.

 

3. object의 이름 설정해주기

obj.names를 notepad로 실행시켜 주면 다음과 같은 값들이 들어가 있습니다.

여기에 object의 이름을 적어주시면 됩니다. 저는 지정해 줄 object가 한 개 이므로 하나의 object명 president_moon을 써 주겠습니다.

 

4. yolo-obj.cfg 설정해주기

Yolo_mark-master\x64\Release에 yolo-obj.cfg파일을 notepad로 열어 맨 밑으로 가시면

[convolutional][region]가 있습니다.

[convolutional]에 filters를 보시면 35로 설정이 되어 있는데 이를

5 * (classes+5)의 값으로 설정해 줍니다. 저는 classes(object의 개수)가 한 개 이므로

5 * (1+5) = 30이 나오므로 30으로 수정해 줍니다.

 

다음은 [region]의 classes를 2에서 본인이 설정한 classes(object의 개수)로 설정해 줍니다. 저는 object의 개수가 한 개 이므로 1로 수정해 줍니다.

잘 수정된 fileters 값과 classes 값

5. Marking 해주기

이 과정을 모두 끝내고 다시 한번 yolo_mark를 실행해주면

자기가 넣은 이미지를 확인할 수 있고

상단의 슬라이드 바를 확인하면 이미지의 index object의 id를 설정할 수 있게 됩니다.

 

마우스로 자신이 원하는 object를 지정해 주면

위의 사진과 같이 Marking이 됩니다. 제 경우엔 object가 하나여서 object id를 일일이 설정해주지 않아도 되지만 object를 2개 이상으로 설정하신 분들은 위의 슬라이드바로 설정하면서 어떤 oject인지 지정해 주시면 됩니다.

 

Yolo_mark는 다양한 단축키도 지원하는데 h키를 누르면 단축기의 종류가 뭐뭐 있는지 확인할 수 있습니다. 단축기의 종류는 다음과 같습니다.

<- 전 이미지
-> 다음 이미지
c 지정한 Mark 지우기
n 한 이미지에 한 object 지정
0~9 objet id 지정
m 코드 표시
ESC 프로세스 종료
w Mark선 강조
k object의 이름 숨기기
p Mark를 다음 이미지에 복사
o 객체 추적
r 마우스로 선택한 mark 제거
h 단축기 종류 표시

 

이제 직접 Marking을 해주고 img파일을 다시 확인해 보면

 

다음과 같이 사용자가 직접 marking 한 mark의 좌표가 txt 파일로 저장되게 되고 이로써 marking 작업은 끝나게 됩니다.

댓글