본문 바로가기

catechaser

[2]YOLO custom training 학습시켜보기

YOLO (You Only Look Once)는 딥러닝을 공부하고 있는 분들이 많이 사용하고 있는 툴입니다.

그만큼 이미 많은 데이터들이 학습되어 있기도 합니다. 예를들면, YOLO9000은 9000가지의 물체를 빠르고 정확하게 Detection할 수 있도록 학습되어있습니다.


저는 직접 고양이판다를 학습시켜 보았습니다.


준비한 데이터는 약 1700장이고 고양이 1000장 판다 700장을 준비해 보았습니다.


처음 훈련을 시킬 때 , 하나의 클래스당 200장 가량의 이미지를 가지고 했었는데, 정확도가 최대 22%정도밖에 나오지 않아서 데이터셋을 5배정도 늘려보았습니다.


일단, https://github.com/AlexeyAB/darknet#how-to-train-to-detect-your-custom-objects 사이트를 보면 yolov3.cfg라는 파일을 가지고 변형 시켜서 학습을 시켰는데, 저는 yolo9000.cfg를 변형시켜서 yolo9000과 같은 convolutional layer 구성으로 학습을 시켜보았습니다.

 

1. yolo9000.cfg를 복사하여 다음괴 같이 수정시킵니다.(batch와 subdivision은 꼭 64로 하지 않아도 되고, 학습이 잘 되는 방향으로 알아서 설정 하셔도 됩니다.)

-batch=64

-subdivisions=8

-classes =? Detection하고 싶은 물체의 개수를 입력합니다.

-filters = 255라고 설정이 되있는데, yolov3를 사용하신다면, filters=(classes+5)*3 으로 입력해주시고, yolov2를 이용하여 훈련을 하실 경우 filters = (classes +5)*5로 설정해줍니다.


2. obj.data라는 파일을 만들어 줍니다.

ex)    classes= 2

train  = ./opencv/data/train.txt

valid  = ./opencv/data/valid.txt

names = ./opencv/data/obj.names

backup = backup/

                

2-1. obj.names 라는 파일만들어 주고 Detect 하고 싶은 물체를 차례대로 입력해줍니다.

 예를 들면 ex) cat

     panda


3.  (.jpg)파일을 /Desktop/opencv/Yolo_mark/x64/Release/data/img 폴더 안에 넣어줍니다.

     이 폴더 안에는 jpg 파일 그리고 YOLO_MARK를 통해 labeling 한 .txt 파일도 함께 적어줍니다.

     YOLO_MARK로 라벨링 하는 방법은   https://github.com/AlexeyAB/Yolo_mark를 통해 할 수 있습니다.



이런식으로 라벨링을 하게됩니다.


4. 다음으로 train.txt파일을 만들어줍니다. 

    train.txt 파일안에는


/Desktop/opencv/Yolo_mark/x64/Release/data/img/110.jpg

/Desktop/opencv/Yolo_mark/x64/Release/data/img/111.jpg

/Desktop/opencv/Yolo_mark/x64/Release/data/img/112.jpg

/Desktop/opencv/Yolo_mark/x64/Release/data/img/113.jpg

/Desktop/opencv/Yolo_mark/x64/Release/data/img/114.jpg

/Desktop/opencv/Yolo_mark/x64/Release/data/img/115.jpg

/Desktop/opencv/Yolo_mark/x64/Release/data/img/116.jpg

/Desktop/opencv/Yolo_mark/x64/Release/data/img/117.jpg

/Desktop/opencv/Yolo_mark/x64/Release/data/img/118.jpg

/Desktop/opencv/Yolo_mark/x64/Release/data/img/119.jpg

/Desktop/opencv/Yolo_mark/x64/Release/data/img/11.jpg

/Desktop/opencv/Yolo_mark/x64/Release/data/img/120.jpg


이렇게 학습시킬 이미지 파일의 경로를 담고 있습니다.


5. pre-trained 된 convolutional layers 를 다운받아 줍니다.

     wget https://pjreddie.com/media/files/darknet53.conv.74 


6. command line : ./darknet detector train data/obj.data yolo9000.cfg darknet53.conv.74 

     로 학습을 시켜줍니다.





7. 학습이 끝나면 Backup 디렉토리 안에 yolo9000.weights 등의 weight 파일이 생깁니다.  


 

8. 학습시킨  weight 파일을 이용하여 잘 학습이 되었는지 테스트 해보면 

 

command line :  ./darknet detector test opencv/data/obj.data ./opencv/yolo9000.cfg opencv/yolo9000_40000.weights 5.jpg




저는 두가지 classes 판다, 고양이를 학습해 보았는 데, 판다 사진 700장, 고양이 사진 1000장으로 학습시킨 모델을 가지고 위의 두 그림을 테스트 해보았을 때, 87%라는 확률로 찾아낼 수가 있었습니다.


'catechaser' 카테고리의 다른 글

[3]아두이노 연결하기  (2) 2018.06.26
[1]Jetson TX2 환경설정  (0) 2018.06.26