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 |