개발자로서 살아남기/YOLO - Colab 이용해서 Custom 학습하기

YOLO - Colab 이용해서 Custom 학습하기 (2)

코드 살인마 2020. 11. 25. 17:46
728x90

YOLO를 훈련시키려면 필요한 3가지 데이터가 있다.

 

1. data

 

2. cfg

 

3. weight

 

1. data 만들기

 

data는 이런 형식을 가진다.

food100.data

classes는 훈련하려는 객체 개수

train은 훈련에 사용되는 이미지의 경로

valid는 평가에 사용되는 이미지의 경로

names는 객체의 이름

backup은 훈련된 weight를 저장하는 경로이다.

 

좀더 자세히 살펴보자면 data의 하위폴더에 txt와 names 파일이 존재한다. 이 파일들의 형식은 다음과 같다.

train.txt
food100.names

 

여기서 주의할 사항은 폴더경로를 잘 설정해줘야한다. train.txt에서 경로/번호/음식사진.jpg 로 설정되있다.

 

즉 번호에 names의 index와 같은 음식 사진이 들어가야한다.

 

위를 예로 들자면 names의 첫번째 index가 밥 -> 경로/1/밥사진.jpg로 표현하면 된다.

 

같은 방법으로 valid.txt도 만들어 주면 된다.

 

더 자세히 들어가 '1'폴더 안에 내용을 살펴보자

 

 

1 폴더

 

'1' 폴더 안에는 사진과 텍스트 폴더가 존재한다. 여기서 텍스트 폴더는 사진에서 밥의 좌표를 나타낸다.('1'폴더는 밥 사진의 집합)

 

좌표를 설정하는 방법은 프로그램을 이용해 사용자가 일일히 사진을 보며 좌표를 찾아줘야한다.

---> 오랜시간이 걸림, 훈련하려는 객체에 대한 데이터를 구글링 해보는 것이 우선

 

위 과정을 통해 data를 완성하였다.

 

 

2. cfg 만들기

먼저 github.com/AlexeyAB/darknet 사이트에서 사용하려는 YOLO 버전.cfg를 다운로드 받는다.

 

YOLO 버전마다 cfg 설정하는 방법이 약간씩 다르다. (지금 사용하는 모델은 YOLOv4)

 

[net]
batch=64
subdivisions=16
# Training
#width=512
#height=512
width=416      ->메모리 오류가 난다면 더 줄여준다
height=416
channels=3
momentum=0.949
decay=0.0005
angle=0
saturation = 1.5
exposure = 1.5
hue=.1

learning_rate=0.0013
burn_in=1000
max_batches = 60000 -> class 개수 * 2000
policy=steps
steps=48000,54000 -> max_batch의 80~90% 수치 입력
scales=.1,.1

 

이후에는[convolutional]와 [yolo] 부분을 모두 수정한다.

 

[convolutional]
size=1
stride=1
pad=1
filters=105 -> filters 개수는 (classes+5) * 3  필자는 30개의 class 사용
activation=linear


[yolo]
mask = 0,1,2
anchors = 12, 16, 19, 36, 40, 28, 36, 75, 76, 55, 72, 146, 142, 110, 192, 243, 459, 401
classes=30 -> 훈련 하려는 class 개수 수정
num=9
jitter=.3
ignore_thresh = .7
truth_thresh = 1
scale_x_y = 1.2
iou_thresh=0.213
cls_normalizer=1.0
iou_normalizer=0.07
iou_loss=ciou
nms_kind=greedynms
beta_nms=0.6
max_delta=5

 

이 과정을 마친다면 cfg 파일을 완성했다.

 

3. weight 파일 다운로드

 github.com/AlexeyAB/darknet 에서 제공하는 yolov4의 pretrain 모델을 다운받으면 된다.

 

 

4. 훈련 및 실행

 

훈련하기 위한 준비를 끝마쳤다. colab에 접속한다. ( colab 설정 부분은 1편에)

 

!./darknet detector train data경로 cfg경로 weight경로 -dont_show

 

명령어로 실행하면된다. 여기서 weight 경로를 가장 최근에 훈련된 weight를 사용하면 이어서 훈련이 시작된다.

 

!./darknet detector data경로 cfg경로 weight경로 검출하려는 이미지 경로 -dont_show

imShow('predictions.jpg') ---> predictions.jpg에는 결과로 나온 이미지가 출력된다.