2022.05.23.-2022.06.02.
본 프로젝트는 YOLO v4
를 사용하여 강아지 데이터를 학습하여 강아지를 검출하는 프로젝트이다.
본 프로젝트는 yolo-mark
를 사용하여 직접 라벨링 과정을 거쳐 학습 데이터 4000장, 테스트 데이터 1000장으로 데이터셋을 구축하였고 15000번의 학습을 진행하였다.
CUDA
와 cuDNN
은 학습을 CPU가 아닌 GPU를 사용하여 실행하기 위한 프로그램이다.
Darknet Yolov4 프로젝트
는 다음 주소에서 공유되는 오픈 소스를 다운 받는다.
이후, darknet
에서 자신의 개발환경에 맞게 수정한다.
여기서 말하는 개발환경은 OpenCV
와 CUDA
, cuDNN
에 대한 경로
를 설정해주는 과정을 말한다.
여러 과정을 거치면 YOLO
를 실행할 수 있는 세팅을 마칠 수 있다.
OS : Windows 10
CPU : Intel(R) Core(TM) i7-6700 CPU @ 3.40GHz 3.40 GHz
RAM : 16GB
GPU : RTX 2060
CUDA : 10.1
cuDnn : 7.6.4
opencv : 3.4.8
Visual Studio 2017
라벨링 도구 : Yolo-mark
학습 모델 : Yolo v4
학습 데이터 4000장 이미지
Yolo-mark
를 이용하여 이미지에 객체를 인식시켜 학습 데이터를 만드는 방법은 다음과 같다.
img
폴더에는 우리가 학습시킬 이미지 4천장이 들어있는 파일이다.
학습과 트레이닝 데이터를 정의하는 data
파일
obj.names
는 classes의 종류
가 담긴 네임파일이다.우리가 검출할 classes의 이름은
dog
로 설정한다. (obj.names)
obj.data
classes : 비행기, 자동차, 강아지, 고양이 등을 감지할 데이터 종류의 수이다.
우리는 강아지를 검출하기 위해 classes의 값을 1로 작성하였다.
train : 학습할 이미지의 경로가 담긴 리스트 파일이다.
names : 클래스 이름이 들어있는 리스트 파일이다.
backup : 학습된 가중치 파일인 weights 파일이 저장되는 폴더이다.
train.txt
라벨링하는 과정
yolo-mark.cmd
를 실행하여 강아지 객체를 직접 라벨링하면 된다.
dog1.txt
이렇게 라벨링하면 라벨링 좌표가 txt 파일
에 작성이 되어 저장된다.
dog1.txt
에 들어있는 내용이 강아지 객체를 라벨링한 좌표값에 대한 내용이다.
cmd에서 영상을 입력하여 출력결과를 확인
할 수 있는 명령어는 다음과 같다.
//첫 학습
darknet.exe detector train data\obj.data testcfg\yolov4-custom.cfg data\yolov4.conv.137 -gpu 0
//이어서 학습
darknet.exe detector train data\obj.data testcfg\yolov4-custom.cfg backup\yolov4-custom_2000.weights -gpu 0
//테스트
darknet.exe detector test data\obj.data testcfg\yolov4-custom.cfg backup\yolov4-custom_final.weights -i 0 data\testimg\dog.4001.jpg
//성능확인
darknet.exe detector map data\obj.data testcfg\yolov4-custom.cfg backup\yolov4-custom_final.weights
위의 명령어들은 YOLO
를 학습시키기 위한 내용이다.
학습에 필요한 파일은 obj.data
, yolov4-custom.cfg
, 다크넷인 yolov4.conv.137
가 필요하다.
우리는 총 4천장
의 데이터를 15000
번 학습을 진행시켰고,
가중치 파일
인 .weights
파일은 1000장 단위로 저장
되게 했다.
chart yolov4_custom
학습의 손실율을 나타내는 그래프이다.
학습을 진행할수록 손실율이 안정되는 것을 확인할 수 있다.
cmax_batches
는 학습횟수를 의미하므로 15000이라 써져있는 것을 확인할 수 있다.
데이터셋 성능
위의 명령어를 실행하면 우리가 학습시킨 모델이 데이터셋의 성능을 파악할 수 있다.
우리는 학습 데이터셋과 테스트 데이터셋의 성능을 비교해 보았다.
15000번을 학습한 결과 정확도 87%
의 결과를 보여주며
테스트 데이터가 아닌 확인 데이터를 넣어본 결과 인식하는 것 확인 가능
[1] https://ultrakid.tistory.com/25
//CUDA 버전 및 cuDNN 버전 확인
[2] https://jjjhong.tistory.com/24
//darknet 빌드를 위한 visual studio 환경변수 세팅
[3] https://github.com/AlexeyAB/darknet
//다크넷 다운 및 yolov4 기본 테스트 용 yolov4.weights 다운, 인공지능 학습을 위해 사전 훈련된 가중치 파일 yolov4.conv.137 다운
[4] https://jjeamin.github.io/darknet_book/part1_paper/yolov4.html
//Yolov4 논문 리뷰