컴퓨터공학/YOLO

[YOLO - darknet] Window 10에서 YOLO_MARK로 YOLO 학습(Custom) - 19.8.26. 수정 완료

Upupa epops 2019. 8. 26. 19:00

 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"라는 폴더를 얻을 수 있다.

     

 

YOLO Mark 다운로드

 

 

1-2. Visual Studio 2015를 이용하여 YOLO Mark 빌드

   - Visual Studio 2015를 이용하여 Yolo_mark.sln 솔루션 파일을 연다.

 

프로젝트 열기 - yolo_mark.sln

   - 프로젝트 속성의 Release x64를 확인하면 $(OPENCV_DIR)으로 설정되어있다.

     앞 포스팅에서 환경변수를 설정해줬기때문에 수정없이 진행 가능하다. 

 

C/C++ 및 링커 디렉터리 확인

 

-  Release x64로 빌드하여 빌드가 성공하면 x64/Release 폴더에 yolo_mark.exe가 생성된 것을 확인할 수 있다.

 

Release x64로 빌드한다.

 

생성된 exe 파일과 cmd 파일

 

 

  1-2. yolo_mark.cmd를 클릭하여 YOLO Mark 실행

   - yolo_mark.cmd를 클릭하면 YOLO Mark를 이용하여 Labeling 작업을 할 수 있다.

   - 본 포스팅은 이상현님 티스토리를 참고하였으며, 자세한 설명은 이상현님(링크)의 내용을 참고하시기 바랍니다.

 

YOLO Mark 실행 화면

 

 

2. YOLO Mark를 이용한 Labeling 작업

 

yolo_mark 구성

 

  2-1. YOLO Mark class 분류 설정

   - data 폴더에 라벨링할 이미지를 집어넣는다.

   - obj.data 파일을 열어 classes를 분류할 갯수만큼 적어준다. (여기에서는 head, body, tail 3가지로 설정하였음) 

 

classes에 원하는 분류 수를 적음

 

- obj.names 파일을 열어 분류 명칭을 입력하고 저장한다.

 

분류 명칭 입력

 

- yolo-obj.cfg를 열어 맨 끝의 [region]에서 classes를 찾고, 분류할 갯수로 수정한다. (여기에서는 3 class)

 

- [region]의 윗부분 [convolutional] 의 filters를  5 * (classes+5)에 맞게 설정하기위해 5*(3+5) = 40으로 변경하였다.

 

  * 다른 [convolutional]은 수정하지 않았습니다.

 

yolo-obj.cfg를 수정한다.

 

  2-2. YOLO Mark를 이용한  라벨링 작업

   - image num :  data에 들어가있는 이미지 수

   - object id : 분류명 (obj.names에 입력한 분류명이 0, 1, 2 순으로 매칭된다.)

   - 위에 있는 바(bar)를 이동시키며 해당 분류명으로 라벨링한다.

     h 단축키를 입력하면 이동, 전체삭제, 삭제 등의 단축키를 볼 수 있다.

 

 

- 라벨링이 완료 된 후, data 폴더를 보면 txt  파일이 생기며, 객체 아이디(obj id)와 라벨링(사각형) 좌표가 찍힌다.

 

yolo_mark를 이용한 라벨링 후 data 폴더 상태

 

 

data폴더에 있는 각 이미지별 id, 좌표값 데이터 txt파일

 

- train.txt를 열어보면 라벨링을 위해 저장된 이미지 데이터의 정보를 확인 할 수 있다.

 

 

yolo_mark 라벨링 후 train.txt에 저장된 데이터

 

 

  2-3. 학습 준비

 

- convolution layer를 darknet/data에 받는다.

  최근 버전은 darknet53.conv.74인 것 같아서 해당 모델을 받았다.

  

   * 다이렉트 링크 : https://pjreddie.com/media/files/darknet53.conv.74

 

 

https://pjreddie.com/darknet/yolo/에서 밑으로 쭉 내리다보면 받을 수 있다.

 

 

- yolo-obj.cfg , yolo_mark/x64/Release/data 경로 내의 image 폴더, obj.names, obj.data, train.txt

  를 darknet/data 경로로 이동시킨다.

 

yolo mark 폴더의 yolo-obj.cfg / image 폴더 / obj.names / obj.data / train.txt 를 darknet/data 폴더로 옮긴다.

 

 

※ Yolo Windows v2-master를 이용할 경우, 아래 폴더에 넣는다.

  - yolo-obj.cfgdarknet53.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

 

 

 - 최대한 고양이의 모습을 잡아보기위해 조각조각내서 분류하였다.

 - 구글 웹서핑에서 '얼룩고양이'를 검색하여 테스트한 결과이다.

 

테스트 결과
테스트 결과 2

 

- 동영상도 잘 되는 것을 볼 수 있다.

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 주소로 변경해주고, 다시 실행해보았다.

 

- 잘 된다 ^ㅅ^!

 

 

SMALL