④ YOLO Custom
≫ 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에 저장
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%의 정확도로 결과가 나왔습니다.