Capstone/2018-2 Capstone

④ YOLO Custom

Jeongmin Lee 2018. 12. 14. 21:30
YOLO Custom

저번에 이미 학습된 weight를 가지고 테스트를 해봤다면, 이번에는 갖고 있는 데이터를 가지고 학습시키고 테스트까지 해보겠습니다.

yolov3로 이미지를 학습하고 테스트해보겠습니다.

1. darknet에 들어갑니다.

2. darknet의 cfg폴더 안에 있는 yolov3.cfg 파일을 vi를 사용해서 열어줍니다. 

 ≫ batch를 설정하는 라인을 찾아 batch=64로 변경

 ≫ subdivisions를 설정하는 라인을 찾아 subdividions=8로 변경 (저는 16으로 변경했습니다.)

[net]
# Testing
# batch=1
# subdivisions=1
# Training
batch=64
subdivisions=16
width=608
height=608
channels=3
momentum=0.9
decay=0.0005
angle=0
saturation = 1.5
exposure = 1.5
hue=.1
cs

 ≫ [yolo] 레이어를 설정하는 라인을 찾아 각각 classes를 해당하는 클래스 수로 설정(spider하나의 클래스로 classes=1로 수정)

607 [yolo]
608 mask = 6,7,8
609 anchors = 10,13,  16,30,  33,23,  30,61,  62,45,  59,119,  116,90,  156,198,  373,326
610 classes=1
611 num=9
612 jitter=.3
613 ignore_thresh = .7
614 truth_thresh = 1
615 random=1
 
693 [yolo]
694 mask = 3,4,5
695 anchors = 10,13,  16,30,  33,23,  30,61,  62,45,  59,119,  116,90,  156,198,  373,326
696 classes=1
697 num=9
698 jitter=.3
699 ignore_thresh = .7
700 truth_thresh = 1
701 random=1
 
780 [yolo]
781 mask = 0,1,2
782 anchors = 10,13,  16,30,  33,23,  30,61,  62,45,  59,119,  116,90,  156,198,  373,326
783 classes=1
784 num=9
785 jitter=.3
786 ignore_thresh = .7
787 truth_thresh = 1
788 random=1
cs

 ≫ [yolo] 레이어 바로 위 [convolution] 레이어의 filter를 filter=(classes+5)*3으로 수정(classes가 1인 경우 filter=18로 수정)

599 [convolutional]
600 size=1
601 stride=1
602 pad=1
603 filters=18
604 activation=linear
 
685 [convolutional]
686 size=1
687 stride=1
688 pad=1
689 filters=18
690 activation=linear
 
772 [convolutional]
773 size=1
774 stride=1
775 pad=1
776 filters=18
777 activation=linear
cs

3. darknet의 data폴더 안에 있는 coco.names에 자신이 사용하는 class의 이름으로 수정

spider
cs

4. darknet의 cfg폴더 안에 있는 coco.data에 자신의 classes의 수, train.txt, coco.names의 위치 수정

classes= 1
train  = data/train.txt
valid  = data/train.txt
#valid = data/coco_val_5k.list
names = data/coco.names
backup = backup/
cs

5. Yolo_mark를 통해 이미지의 Bounding Box의 좌표 txt파일, 이미지를 darknet/data/img에 저장

 ≫ ⑤ Yolo_mark로 따로 기재


6. darknet에 convolution layer 다운


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

7. gpu를 사용하기 위해서 Makefile를 수정합니다.

GPU=1
CUDNN=1
OPENCV=1
OPENMP=0
DEBUG=0
cs

8. 학습 실행 

./darknet detector train cfg/coco.data cfg/yolov3.cfg darknet53.conv.74 -gpu 0,1,3
cs

실행 화면 

 


실행이 끝나면 backup폴더에 weight 파일이 생깁니다.

이를 가지고 test를 실행하면 됩니다.




training이 다될때 까지 기다리면 시간 낭비입니다. 중간에 생성되는 weight파일로 테스트를 해보면 됩니다.

하지만 컴퓨터의 성능따라 weight이 생성되는게 매우 느리기 때문에 저는 파일을 수정해서 300번 마다 weight파일이 생성되도록 만들었습니다.

darknet/examples/detector.c로 들어갑니다.

136 행의  if(i%10000==0 || (i < 1000 && i%100 == 0))를 수정하시면 됩니다.




다음은 test를 실행해 보겠습니다.

./darknet detect cfg/yolov3.cfg backup/yolov3_1500.weights data/spider.jpg
cs



중간 yolov3_1500.weights결과로는 85%의 정확도로 결과가 나왔습니다.




반응형