코딩하고자용 블로그

Yolo를 이용해서 마스크 판독 시스템을 만들어보자! (1) 본문

개발 일기

Yolo를 이용해서 마스크 판독 시스템을 만들어보자! (1)

코딩하고자용 2020. 9. 4. 16:30

마스크 판별을 위한 시스템을 만들기 위해서 Yolo를 이용하였다.

 

우선 만드는데 도움을 주신 감사한 분들의 블로그이다.

 

wiserloner.tistory.com/1187?category=825446

 

Yolov4 TensorFlow로 다루기(응용 개발법)

- 이전에 darknet에서 제공하는 yolov4를 다루어봤는데, 그 후속 글입니다. 저번 글의 경우에는 실제 모델이라기보다는, yolo를 이용한 간편한 영상 분석 프로그램을 사용하는 정도였죠... 이번엔 Tenso

wiserloner.tistory.com

wiserloner.tistory.com/1181

 

Colab을 사용한 YOLOv4 커스텀 객체 탐지 모델 학습 (컴퓨터에 눈을 달아보자!)

- 클라우드 컴퓨팅으로, 구글에서 제공해주는 GPU를 사용해 객체 탐지 모델을 학습시키고 응용하는 방법을 정리합니다. 로컬 컴퓨터가 성능이 좋다면 그것을 사용하시면 되고, 아니라면 여기서 �

wiserloner.tistory.com

 

keyog.tistory.com/22

 

 

YOLO v4 custom데이터 훈련하기

이전에 YOLO v4를 설치해서 example실행 까지 잘 마쳤다면, 이제 본인의 데이터를 훈련시키고 응용하는 것까지 알아보도록 하자. YOLO v4 설치에 관해서는 이전글 참조. 2020/05/19 - [Computer Vision/Object det.

keyog.tistory.com

이전에 python이 아닌 c로 구현된 darknet을 이용해서 만든 weights 파일이 버전을 v3에서 v4로 바꾸면서인지는 모르겠는데  python에서 활용이 되지 않길래 결국 다시 학습을 하는 것을 택했다.

 

학습에 필요한 핵심 파일들로는

cfg 파일

obj.names

obj.data

학습 이미지 파일

정도가 있겠다.

 

cfg 파일의 경우 수정해야 할 것들이 있다.

[yolo]에서 class의 개수를 자기가 학습시키려는 class의 개수로 설정하여야한다. 필자의 경우 마스크를 쓴 사람과 안 쓴 사람 총 2개이므로 class=2로 설정하였다. 

 

그리고 [yolo] 바로 위에 있는 [convolutional] (총 3개가 있을 것이다.)에서 filter의 값을 (5+ class 갯수) * 3의 값으로 바꾸어준다.

필자의 경우 class 갯수가 2이므로 (5+2)  * 3 = 21로 값을 바꾸어주었다.

 

obj.names와 obj.data도 자신이 커스텀하려는 식으로 변환해주고 학습시켜주면 된다.

 

그렇게 학습을 마치고 weights 파일을 tf로 변환하려는 찰나..

 

utils.load_weights(model, FLAGS.weights, FLAGS.model, FLAGS.tiny) File "E:\tensorflow-yolov4-tflite\core\utils.py", line 64, in load_weights conv_weights = conv_weights.reshape(conv_shape).transpose([2, 3, 1, 0]) ValueError: cannot reshape array of size 595992 into shape (256,384,3,3)

 

위의 오류가 생겼다. 

 

정신 나갈꺼 같았지만 열심히 구글링 한 결과 이유를 알아냈다.

 

이유는 즉 tf 파일로 변환할 때 config.py에서 names 파일을 재참조하는데 이 값이 coco.names로 되어 있어서 obj.names 파일을 참조하도록 값을 아래와 같이 바꿔주었다. 

 

그 후 웹캠을 틀어보니 정상적으로 object detection이 작동하였다.

이제 QR코드를 인식할 수 있도록 추가 개발을 할 것이다.

 

자세한 설명을 하지 않았는데 위의 블로그들에서 잘 정리되어있다.

 

tf 파일 변경 명령어 : python save_model.py --weights ./data/yolov4-custom_best.weights --output ./checkpoints/yolov4-416 --input_size 416 --model yolov4

웹캠 실행 명령어 : python detect_video.py --weights ./checkpoints/yolov4-416 --size 416 --model yolov4 --video 0