AI/딥러닝

yolov3 커스텀 학습

비비디바비비부 2021. 1. 12. 20:10

공부한 것을 다시 정리하기 위해서 작성했습니다 참고해주세요

 

 

 

참고 주소

- #011 TF YOLO V3 Object Detection in TensorFlow 2.0 (datahacker.rs)

 

1. 무료 GPU사용을 위한 Colab 설정하기

colab.research.google.com/

 

Google Colaboratory

 

colab.research.google.com

새 노트만든 뒤 런타임 -> 런타임유형 변경 후 GPU 설정

런타임 유형 설정

2. Train하기 위한 준비

!git clone https://github.com/AlexeyAB/darknet.git
%cd darknet
!ls
!sed -i 's/OPENCV=0/OPENCV=1/' Makefile
!sed -i 's/GPU=0/GPU=1/' Makefile    
!make

!sed -i 's/OPENCV=0/OPENCV=1', !sed -i 's/GPU=0/GPU=1/'는 각 OPENCV 사용 및 GPU 사용하기 위한 설정입니다.

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

사전학습모델 다운로드 명령어

 

!./darknet partial cfg/yolov3-tiny.cfg yolov3-tiny.weights yolov3-tiny.conv.15 15

yolov3-tiny 사전학습모델 구하는 법

3. 전처리 단계 및 다크넷 콘픽 수정

전처리 하기 전 라벨링 작업을 해서 학습할 데이터셋을 만들거나 데이터셋을 구해야합니다.

참고주소

- Create Labels and Annotations for Custom YOLOv3 Google Images Dataset | LabelImg Tutorial - YouTube

 

 

from glob import glob
img_list = glob('/content/darknet/data/custom_label/*.jpg')

from sklearn.model_selection import train_test_split
train_img_list, val_img_list = train_test_split(img_list,test_size=0.2,random_state=200)

with open('/content/darknet/data/train.txt','w') as f:
  f.write('\n'.join(train_img_list)+'\n')
with open('/content/darknet/data/val.txt','w') as f:
  f.write('\n'.join(val_img_list)+'\n')

train -> 80% test -> 20%

 

콘픽수정

1. darknet/cfg에서 yolov3.cfg의 내용을 복사해서 yolov3_custom.cfg 또는 아무이름.cfg로 저장

- 혹시 tiny를 사용하신다면 yolov3-tiny.cfg를 사용해주세요

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

training을 위해서는 batch=64, subdivisions=16으로 설정

#max_batches = class * 2000 + 200
max_batches = 8200

#steps = max_batches * 0.8, 0.9
steps=6400,7200

max_batches는 클래스 갯수 * 2000 + 200

steps은 max_batches * 0.8, 0.9입니다.

 

그 후 [yolo]를 검색해서 다음과 같이 변경해주세요 (총 3번해야합니다. tiny같은 경우는 2개 잇습니다.)

[convolutional]
...
# filters = class + 5 * 3
filters=27
...
[yolo]
...
# classes = 4
classes=4
...

다 끝나셧으면 저장

darknet/data폴더로 이동 후 .names와 .data 파일을 찾아서 복사합니다. (아무 파일이나 복사해주세요 내용 다 변경예정)

classes= 4
train  = data/train.txt
valid  = data/val.txt
names  = data/drink.names
backup = content/drive/MyDrive/

.data파일입니다. classes는 학습할 클래스 갯수, train은 전처리한 train의 위치, valid는 전처리한 test의 위치 names는 복사한 names의 위치 backup은 학습시 가중치를 백업할 곳의 위치

chilsung_can
sprite_can
chilsung_bottle
sprite_bottle

.names파일입니다. 라벨링할 때 사용한 classes를 넣어주세요

4. 학습시작

%cd /content/darknet/
!make
!./darknet detector train data/drink.data cfg/yolov3_Custom.cfg darknet53.conv.74 -map -show_img

.data, cfg, weight파일은 여러분이 지정한 이름으로 넣어주세요

 

 

 

 

5. 테스트

!./darknet detector test data/drink.data cfg/yolov3_Custom_test.cfg yolov3_Custom_best.weights test.jpg
from IPython.display import Image
Image('predictions.jpg')

테스트확인 전 yolov3_Custom.cfg파일에서 batch 및 subdivisions을 모두 1로 설정해주세요

커스텀 트레인한 결과값