-
Yolo v3 커스텀 모델 학습Darknet 2018. 11. 16. 17:07데이터 라벨링
학습을 하기 위해서는 라벨링 된 이미지들이 필요합니다.
LabelImg : https://tzutalin.github.io/labelImg/
위 링크에서 LabelImg 프로그램을 다운로드받습니다.
압축을 푼 후 windows_v1.8.0\data 폴더의 predefined_classes.txt 파일을 연 후 자신이 인식하고자 하는 객체의 이름을 적습니다.
객체들의 사진을 data 폴더에 넣습니다.
이미지가 많을수록 모델의 성능이 좋아집니다.
LabelImg.exe 프로그램을 실행하고 roi style 을 yolo로 변경합니다.
OpenDir 버튼을 클릭한 후 data 폴더 위치를 등록합니다.
Change Save Dir 버튼을 클릭한 후 data 폴더 위치를 등록합니다.
Create RectBox 버튼을 클릭해 라벨링 작업을 합니다.
이미지에 해당하는 roi 파일이 생성됩니다.
이미지가 있지만 roi 파일이 없을 경우 에러가 발생합니다.
학습에 필요한 파일 준비
darknet-master\build\darknet\x64
먼저 위 경로에 train 폴더를 생성합니다.
data.data 파일을 만들어줍니다.
classes= 클래스 갯수
train = list.txt의 경로
valid = list.txt의 경로
names = classes.names의 경로
backup = weight 파일을 backup할 경로
darknet.exe detector calc_anchors train/data.data -num_of_clusters 9 -width 320 -height 320
darknet.exe가 있는 경로에서 위 명령어를 실행해 anchor을 계산해줍니다.
width 와 height 옵션은 cfg 의 width, height와 같게 맞춰주면 됩니다.
(굵은 글씨는 사용자 설정에 따라 달라질 수 있습니다.)
darknet-master\build\darknet\x64\cfg
yolov3 네트워크를 사용할 경우 위 경로의 yolov3.cfg를 train폴더로 복사한 후 수정합니다.
수정목록 (Yolo v3 network 기준)
맨 위 #Testing 아래 2줄을 주석처리 하고, #Training 아래 2줄을 주석 해제 합니다.
max_batches를 변경합니다.
max_batches = 4000 * 클래스 갯수
(수식으로 넣으시면 안되고 계산한 값을 넣으셔야 합니다.)
[yolo] 레이어의 classes를 자신의 클래스 갯수로 변경합니다. (총 3개)
classes = 클래스 갯수
anchors 값도 계산해 둔 anchors 값으로 변경 해 줍니다. (총 3개)
[yolo] 레이어 바로 위 [convolutional] 의 filters를 변경해 줍니다. (총 3개)
filters = (클래스 갯수 + 5) * 3
(수식으로 넣으시면 안되고 계산한 값을 넣으셔야 합니다.)
만약 out of memory 에러가 뜨며 학습이 되지 않을 경우 batch와 subdivisions를 변경합니다.
Batch는 4의 배수로, subdivisions는 2의 배수로 맞춰줍니다.
(batch는 클 수록, subdivisions는 작을 수록 정확도가 높아지지만 학습이 느리고 그래픽 메모리가 많이 필요합니다)
train 폴더에 학습 데이터의 목록을 담은 list.txt 파일을 만들어줍니다.
이미지 파일에 해당하는 roi 파일이 없을 경우 학습 도중 에러가 발생합니다.
(list파일을 자동으로 생성하는 파이썬 코드를 첨부합니다.)
이미지 파일과 roi 파일이 있는 경로에서 실행하면 list.txt가 만들어집니다.
라벨링에 사용했던 predefined_classes.txt 파일을 train폴더로 복사한 후 이름을 classes.names로 변경합니다.
darknet53.conv.74 : http://pjreddie.com/media/files/darknet53.conv.74
pre-trained 모델을 다운로드 받아 train 폴더로 옮깁니다.
학습
darknet.exe detector train train\data.data train\yolov3.cfg train\darknet53.conv.74
모든 파일이 준비가 되면 darknet.exe가 있는 경로에서 위 명령어로 학습을 시작합니다.
(굵은 글씨는 자신의 파일 경로에 따라 달라질 수 있습니다.)
Not found 종류의 Error가 발생할 경우 파일 경로를 확인 해 봅니다 (data.data 파일 내 경로, 명령어로 입력한 경로)
학습은 100회마다 data 파일에서 설정한 backup 경로에 weight가 저장됩니다.
과대적합을 막기 위해 loss가 더이상 줄어들지 않으면 학습을 중단하는 것이 좋습니다.
(위 이미지는 정상적인 학습곡선입니다.)
테스트
darknet.exe detector demo train/data.data train/yolov3.cfg train/backup/yolov3_final.weights -c 0
학습이 끝나게 되면 final.weight 파일과 cfg 파일로 yolo를 사용할 수 있습니다.
명령어에서 weight, cfg, data 경로를 자신의 경로에 맞게 수정 해 줍니다.
정확도를 높이는 방법
클래스당 2000개 이상의 이미지가 필요합니다.
이미지 속 객체들의 크기, 밝기, 위치, 회전, 배경이 다양할 수록 정확도가 높아집니다.
검출하지 않으려는 객체들의 사진도 필요합니다. (이 사진들은 빈 txt 파일을 가져야 합니다.)
roi 파일이 없는 이미지들의 roi를 파일을 만들어 주는 파이썬 코드를 첨부합니다.
'Darknet' 카테고리의 다른 글
Yolo v3 사용 (1) 2018.11.15 Darknet 설치 (3) 2018.11.15 댓글