[YOLO - darknet] Window 10에서 YOLO_MARK로 YOLO 학습(Custom) - 19.8.26. 수정 완료
※ Windows 10 x64 환경을 사용하고 있습니다.
※ 본 포스팅은 아래 페이지를 참고하여 작성되었습니다.
1) 개발자 이상현님 블로그 : https://pgmrlsh.tistory.com/4?category=766787
2) 다크 프로그래머님 블로그 : https://darkpgmr.tistory.com/170
3) 쌍둥아범님 블로그 : https://m.blog.naver.com/gorillamoon/221185312341
4) Blue-Moon님 블로그 : https://bluemoon-1st.tistory.com/5
0. Window10에서 YOLO 학습을 위한 환경 구성하기
※ 이전 포스팅을 참고하여 테스트가 되는 환경에서 다음으로 넘어갑니다. →
2019/05/03 - [Laboratory/인공지능] - [YOLO - darknet] Window 10에서 YOLO 빌드 및 실행하기 (visual studio 2015)
1. YOLO Mark 실행
1-1. YOLO Mark 다운
- YOLO Mark GitHub : https://github.com/AlexeyAB/Yolo_mark
- Darknet GitHub : https://github.com/AlexeyAB/darknet#how-to-train-to-detect-your-custom-objects
- YOLO Mark GitHub에서 YOLO Mark를 다운받아 압축을 풀어준다.
- 압축을 풀면 "Yolo_mark-master"라는 폴더를 얻을 수 있다.
1-2. Visual Studio 2015를 이용하여 YOLO Mark 빌드
- Visual Studio 2015를 이용하여 Yolo_mark.sln 솔루션 파일을 연다.
- 프로젝트 속성의 Release x64를 확인하면 $(OPENCV_DIR)으로 설정되어있다.
앞 포스팅에서 환경변수를 설정해줬기때문에 수정없이 진행 가능하다.
- Release x64로 빌드하여 빌드가 성공하면 x64/Release 폴더에 yolo_mark.exe가 생성된 것을 확인할 수 있다.
1-2. yolo_mark.cmd를 클릭하여 YOLO Mark 실행
- yolo_mark.cmd를 클릭하면 YOLO Mark를 이용하여 Labeling 작업을 할 수 있다.
- 본 포스팅은 이상현님 티스토리를 참고하였으며, 자세한 설명은 이상현님(링크)의 내용을 참고하시기 바랍니다.
2. YOLO Mark를 이용한 Labeling 작업
2-1. YOLO Mark class 분류 설정
- data 폴더에 라벨링할 이미지를 집어넣는다.
- obj.data 파일을 열어 classes를 분류할 갯수만큼 적어준다. (여기에서는 head, body, tail 3가지로 설정하였음)
- obj.names 파일을 열어 분류 명칭을 입력하고 저장한다.
- yolo-obj.cfg를 열어 맨 끝의 [region]에서 classes를 찾고, 분류할 갯수로 수정한다. (여기에서는 3 class)
- [region]의 윗부분 [convolutional] 의 filters를 5 * (classes+5)에 맞게 설정하기위해 5*(3+5) = 40으로 변경하였다.
* 다른 [convolutional]은 수정하지 않았습니다.
2-2. YOLO Mark를 이용한 라벨링 작업
- image num : data에 들어가있는 이미지 수
- object id : 분류명 (obj.names에 입력한 분류명이 0, 1, 2 순으로 매칭된다.)
- 위에 있는 바(bar)를 이동시키며 해당 분류명으로 라벨링한다.
h 단축키를 입력하면 이동, 전체삭제, 삭제 등의 단축키를 볼 수 있다.
- 라벨링이 완료 된 후, data 폴더를 보면 txt 파일이 생기며, 객체 아이디(obj id)와 라벨링(사각형) 좌표가 찍힌다.
- train.txt를 열어보면 라벨링을 위해 저장된 이미지 데이터의 정보를 확인 할 수 있다.
2-3. 학습 준비
- convolution layer를 darknet/data에 받는다.
최근 버전은 darknet53.conv.74인 것 같아서 해당 모델을 받았다.
* 다이렉트 링크 : https://pjreddie.com/media/files/darknet53.conv.74
- yolo-obj.cfg , yolo_mark/x64/Release/data 경로 내의 image 폴더, obj.names, obj.data, train.txt
를 darknet/data 경로로 이동시킨다.
※ Yolo Windows v2-master를 이용할 경우, 아래 폴더에 넣는다.
- yolo-obj.cfg와 darknet53.conv.74 는 yolo-for-windows-v2-master\build\darknet\x64 폴더에 넣는다.
- img, obj.data, obj.names, train.txt 는 yolo-for-windows-v2-master\build\darknet\x64\data 폴더에 넣는다.
2-4. 데이터 훈련(Yolo Windows v2)
- darknet 폴더에 들어가 훈련을 시킨다.
- 여기서는 이전 포스팅(링크)에서 사용했던 yolo-for-windows-v2-master 을 이용하여 학습하였다.
darknet detector train data/obj.data yolo-obj.cfg darknet53.conv.74 |
- 훈련이 끝나면 backup 폴더에 아래 이미지와 같이 가중치 모델이 저장된다.
훈련된 해당 가중치 모델을 이용하여 검출을 진행하면 된다. (이전 포스팅 3-3 참조 링크)
2-5. 학습 가중치를 이용한 검출 확인 (Yolo Windows v2)
- 훈련한 가중치 모델과 옮겨온 data, cfg 파일의 경로를 넣어주고 detector를 돌려본다.
yolo-for-windows-v2-master\build\darknet\x64>darknet detector test data/obj.data yolo-obj.cfg yolo1000.weights data/cat_y.jpg |
- 최대한 고양이의 모습을 잡아보기위해 조각조각내서 분류하였다.
- 구글 웹서핑에서 '얼룩고양이'를 검색하여 테스트한 결과이다.
- 동영상도 잘 되는 것을 볼 수 있다.
darknet detector demo data/obj.data yolo-obj.cfg yolo1000.weights data/cat2.mp4 |
※ 오류가 나는 경우
"cublas64_80.dll이 없어 코드 실행을 진행할 수 없습니다. 프로그램을 다시 설치하면 이 문제가 해결될 수 있습니다."
- CUDA 8과 cuDNN 6.0버전을 깔지않아 생기는 문제이다.
- no_gpu 버전으로는 잘 동작하는걸로 봐선, CUDA 8 (링크)과 cuDNN 6.0 (링크)버전을 깔아서 실행시키자.
- CUDA 8.0을 깔고, cuDNN 6.0으로 덮어씌운 뒤에 cuDNN 환경변수 경로를 8.0 주소로 변경해주고, 다시 실행해보았다.
- 잘 된다 ^ㅅ^!