일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- filebeat
- 호스팅
- python3 #동적계획법 #permutations
- 벽부수고이동하기
- kibana
- github
- GIT
- 정보처리기사실기
- container
- 계정 여러 개 동시 사용
- COLAB
- KT
- docker
- 백준
- 개발자로드맵
- 2206
- logstash
- HAXM
- tensorflow2
- YOLO
- javascript #콜백함수 #비동기
- image
- java
- KT인턴
- 안드로이드스튜디오
- elasticsearch
- Today
- Total
코딩하고자용 블로그
Yolo를 이용해서 마스크 판독 시스템을 만들어보자! (1) 본문
마스크 판별을 위한 시스템을 만들기 위해서 Yolo를 이용하였다.
우선 만드는데 도움을 주신 감사한 분들의 블로그이다.
wiserloner.tistory.com/1187?category=825446
이전에 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