Object Detection: Darknet을 이용한 YoLoV3 학습하기 본문

ML & DL/이것저것..

Object Detection: Darknet을 이용한 YoLoV3 학습하기

eremo2002 2019. 11. 25. 15:21

1. git clone https://github.com/pjreddie/darknet.git

 

pjreddie/darknet

Convolutional Neural Networks. Contribute to pjreddie/darknet development by creating an account on GitHub.

github.com

2. 다운로드 후 Makefile을 열어서 GPU, CUDNN =1로 체크해준다.(동영상 테스트할 때 opencv가 필요한데 설치 오류로인해 opecnv는 잠시 제외함)

2.1 본인 그래픽카드에 따라 ARCH 부분 수정, RTX2070 사용 중이므로

ARCH= -gencode arch=compute_75,code=[sm_75,compute_75] \ 로 수정함

https://github.com/tpruvot/ccminer/wiki/Compatibility

https://arnon.dk/matching-sm-architectures-arch-and-gencode-for-various-nvidia-cards/

 

3. 변경 후 cmd창에서 make

 

 

training 

./darknet detector train .data파일위치 .cfg파일위치 weight파일위치

 

드라마 미생 주연배우 6인을 인식하기 위해 라벨링하여 데이터셋을 만들었으며 darknet 학습에 필요한 파일은 3가지가 있다.

.data 파일 

.txt파일

.names파일

 

 

.data파일은 클래스 개수, .txt파일의 경로, .names 파일의 경로, weight파일 저장할 경로 등을 저장한 파일입니다.

valid set을 따로 사용하지 않아 해당 부분은 주석처리함

 

 

 

 

 

.txt파일은 이미지 파일이 저장된 경로를 기록한 파일입니다.

한줄에 이미지 파일 1개에 대한 절대경로를 기록하였습니다.

실제 이미지가 저장된 폴더에는 이미지파일 1개와 해당 이미지의 라벨링 정보가 들어간 txt파일이 같이 저장되어 있습니다.

 

 

.names 파일의 경우 자기가 사용하는 데이터셋의 클래스명을 한줄씩 기입합니다.

저는 아래 6명만 인식하기 때문에 클래스가 6개입니다.

 

 

 

 

 

자신의 데이터셋에 맞춰 트레이닝에 필요한 파일들을 준비했으면 yolo 모델의 구조 또한 이에 맞게 변경해야합니다.

cfg 폴더에 가보면 다양한 데이터셋에 맞게 정의된 cfg파일을 사용할 수 있습니다. 여기서 자기가 원하는 걸 가져와서 사용하거나 변경하면 됩니다.

 

저는 yolov3 모델을 사용할 것이기 때문에 yolov3.cfg란 파일을 열어 수정합니다.

.cfg파일을 열어 변경해야 하는 부분은 classes 입니다. 해당 모델은 ms coco 데이터셋을 사용하는 구조이기 때문에 classes 수가 80입니다. 이 값을 자신이 사용하는 데이터셋의 class 수에 맞게 변경합니다. 

ctrl+F를 사용하여 classes 값을 총 3번 바꿔야 합니다.

 

 

 

 

 

클래스 수를 바꿨으면 filter 수 또한 변경해야 합니다. 여기서 '[yolo]' 바로 위에 있는 [convolutional]레이어의 필터 수만 바꿔줍니다. 총 3개 바꿔주면 됩니다.

yolov3의 경우  filters=(classes + 5)x3 이 됩니다. ms coco 데이터셋이 80개 클래스였기 때문에 기존의 값이 255입니다.

 

 

 

 

여기 까지 변경한 뒤 cmd 창에서 make 해주고 학습하면 정상적으로 학습됩니다.

만약, 학습 시 메모리 부족 오류 발생하면 cfg파일에서 배치사이즈 낮추면 됩니다.

weight파일 저장하는 횟수는 examples 폴더에서 detector.c 파일의 138 line 수정하면 됩니다.

 

 

 

training 

./darknet detector train .data파일위치 .cfg파일위치 weight파일위치

학습 시 사용하는 weight는 기존의 웨이트 파일 불러와서 사용하는 거라서 사용하지 않아도 지장 없음

 

 

test 

./darknet detector test data파일위치 cfg파일위치 weight파일위치 test이미지

Comments