본문 바로가기
졸업 작품 (Capstone)/Theft Chaser (YOLO)

[11] YOLOv3 데이터(이미지) 학습하기

by Late Bloomer Lee 2019. 6. 22.
728x90

현재 글은 [10] 번 게시물과 이어지는 글입니다!

[10] 번 글 보러 가기 ▶▶ https://developer-thislee.tistory.com/18

 

[10] Yolo_mark labeling(라벨링) & 경로 설정

먼저, 지금까지 제 글을 보며 따라와 주신 분들 일단 감사합니다. 현재 많은 것을 해왔는데, 드디어 YOLO를 제대로 활용할 때가 왔습니다. 다시 한번 말씀드리자면, 저희의 작품 이름은 Theft Chaser입니다. 학습..

developer-thislee.tistory.com


바로 설명 들어가겠습니다.

 

(1) darknet 폴더로 돌아온 후, 아래 코드를 입력해주세요. ( 현재 최신 버전입니다. )

 

wget https://pjreddie.com/media/files/darknet53.conv.74

 

 

(2) 일전에 제가 한번 말했었던, darknet/examples 폴더 안에 있는 detector.c 를 수정할 겁니다. detector.c를 열어주세요.

 

 

- 위의 138번째 줄을 어떻게 수정하느냐에 따라, 가중치 데이터가 저장되는 단위가 달라진다.

 

- 가중치 데이터란 몇 번 학습을 했는지 일정 단위로 끊어서 backup 폴더에 자동으로 생성되는 학습 데이터입니다.

 

- 본인은 블로그 포스팅을 위해, 빠른 결과를 보여주어야 하므로 i%10000==0 을 i%2==0 로 바꿔주었다.

 

- 저렇게 바꿔주면 학습을 진행할 때, darknet/backup 폴더에 weights 데이터(파일)가 2 단위씩 생성된다.

 

- 수 만 번의 학습을 여러 번 시도해본 결과, 가중치 데이터는 300, 100 단위로 저장을 하는 게 효율이 좋다.

 

- 사진에 동그란 박스 내부의 i%2==0'2' 부분을 원하는 수로 수정해보자. ( default 값은 i%10000==0 이다 )


* 본인은 학습을 위해 학교에 있는 최신 GPU가 2개 달린 컴퓨터를 사용했다. 

* 사용하는 GPU가 늘어날수록 저 값과 주변 코드 값을 변경해주어야 하는 것 같다. 

* 본인은 300으로 수정했는데, 1000번의 학습까지는 200 단위로 저장되다가, 1000이 넘어가고부터는 600 단위로 저장되었다.

* 이유는 아직도 모르겠다. 코드 수정을 해봐야 하지만 600 단위로 저장되어도 별 탈이 없기 때문에 일단 넘어갔다.

 

* 대표적인 예시를 아래 사진을 통해 보여주겠다. 최근에 학습하고 있는 최신 가중치 데이터다. 

* 10 단위로 저장되게 만들었는데, 아래 사진을 보면 알겠지만 10, 30을 반복하면서 저장된다;; ( 엥... )

 

 

 

(3) 위의 과정을 마쳤으면, darknet 폴더로 돌아와 make 명령어를 입력해준다.

 

 

(4) 학습을 위해 아래 명령어를 입력해준다.

 

./darknet detector train data/obj.data cfg/yolov3.cfg darknet53.conv.74 -gpu 0     // ( -gpu 0 은 꼭 붙이자 )

 

gpu가 2개일 경우는 -gpus 0,1 을 써줘야 함! 중요한 건, gpus 0, 1 에서 0과 1을 띄어쓰기하면 안 됨 )

- 더욱 자세한 정보는 개발자 사이트에서 확인해보자 https://pjreddie.com/darknet/yolo/

 

* 실행 도중 아래와 같은 오류가 난다면,

CUDA Error: out of memory
darknet: ./src/cuda.c:36: check_error: Assertion `0' failed.


* cfg/yolov3.cfg 파일에서 subdivision 값과 height, width를 적절히 수정해주면 된다.

 

 

(5) 학습이 진행되면 가중치 데이터(학습 데이터)가 2 단위씩 저장이 되었다고 사진처럼 나온다.

 

 

- 빨간 박스를 자세히 보자.

 

- 2: 1115. 470825, 1114.144653 avg 라고 나와있다.

- 여기서 2: 는 2번 학습을 진행했다는 소리이며, 1114.144653 avg는 손실률을 의미한다.

 

- 세 번째 줄을 보면, backup 폴더에 yolov3_2.weights 파일이 저장되었다고 나온다.

 

- 한 개의 클래스(classes) 당, 2000번씩 학습해주는 것이 가장 좋습니다.

- 손실률이 일정 학습 이후에도 더 이상 떨어지지 않는다면 학습을 중지시켜 주세요. 

- 손실률이 오히려 증가하면 Over Fitting 이 된 것이므로, 학습을 중지시켜 주세요.

( 학습 중지는 Ctrl+c 를 입력 )

 

* 필수는 아니지만 안전을 위해 그래픽 카드 온도를 틈틈이 체크해주도록 하자.

 

노트북 쿨링 패드를 설치해서 그나마 저 정도다. 80도 이상을 가는 경우가 많다.

 

 

(6) darknet 폴더에서 backup 폴더로 이동해주면, 아래 사진과 같이 가중치(.weights) 데이터(파일)가 저장되어있다.

 

 

- 최신 가중치 데이터는 yolov3_4.weights 이다.

 

 

(7) 최신 가중치(weights) 파일로 학습을 진행하고 싶다면, 실행 명령어는 다음과 같다.

 

./darknet detector train data/obj.data cfg/yolov3.cfg backup/[ 최신 가중치 데이터 ] -gpu 0

                                                                 ▼▼▼

./darknet detector train data/obj.data cfg/yolov3.cfg backup/yolov3_4.weights -gpu 0 

 

 

(8) 학습한 데이터를 아래와 같이 테스트할 수 있다. 아래 명령어를 참고하세요!

 

이미지 파일 테스트는, 아래처럼 실행하면 됩니다. ( 세 번째 줄이 최종 명령어 )

설명을 위해, 세줄로 나눴습니다.

./darknet detector test data/obj.data cfg/yolov3.cfg backup/(가중치 파일) (이미지 경로)/(이미지파일.jpg)
./darknet detector test data/obj.data cfg/yolov3.cfg backup/(yolov3_16800.weights) (data/img)/(sample_image.jpg)
./darknet detector test data/obj.data cfg/yolov3.cfg backup/yolov3_16800.weights data/img/sample_image.jpg

 

동영상 파일 테스트는,
./darknet detector demo data/obj.data cfg/yolov3.cfg backup/(가중치 파일) (동영상 경로)/(동영상 파일)
( 동영상 확장자도 잊지 말고 같이 써주자. ex) .mp4 )
./darknet detector demo data/obj.data cfg/yolov3.cfg backup/(yolov3_16800.weights) (data/media)/(example.mp4)
./darknet detector demo data/obj.data cfg/yolov3.cfg backup/yolov3_16800.weights data/media/example.mp4

 

테스트 웹캠은,
./darknet detector demo data/obj.data cfg/yolov3.cfg backup/(가중치 파일)
./darknet detector demo data/obj.data cfg/yolov3.cfg backup/(yolov3_16800.weights)
./darknet detector demo data/obj.data cfg/yolov3.cfg backup/yolov3_16800.weights

 

 

 

이상입니다! 따라와 주신 분들 수고하셨습니다!

다음 포스팅에는 데이터 학습 최종 결과에 대해 다루겠습니다!

728x90

댓글