Darknet YOLO 모델 Keras 모델로 변환하기 본문
Darknet은 C, Cuda로 만들어진 프레임워크로 뉴럴넷 모델을 만들 수 있는 오픈소스이다.
우분투 환경에서 오류로 인해 OpenCV가 설치가 안 되는 문제가 계속 발생하였다. 따라서 파이썬의 OpenCV를 사용하기 위해 Darknet 모델을 Keras 모델로 변환한다.
예전에 자동차번호판 인식 프로젝트를 할 때 Darknet으로 만든 모델을 Keras 모델로 변환해본 경험이 도움이 되었다.
이전 포스팅에서 미생 주연 인물 6명을 인식하기 위한 YOLOv3 모델을 Darknet을 사용하여 만들었다.
해당 Darknet 모델을 keras 모델로 변환해보고 테스트해본다.
github에서 yad2k라는 키워드로 검색하면 쉽게 찾을 수 있다. 대부분이 YOLOv2 모델을 변환하는 코드였고 해당 코드를 이용했을 때 anchor_box 정보와 class 정보가 일치하지 않는다는 둥 오류가 발생하였다. 아마 YOLOv2가 아닌 YOLOv3 모델을 사용했기 때문에 혹은 쿠다 환경이 맞지 않은 것으로 보이는데 정확히는 모르겠다.
(작성자 환경 Cuda 10.0, cudnn 7.6.4, tf 1.14, keras2.3.1)
딱 하나 돌아가는 경우가 있었는데 keras 모델로 변환한 뒤 테스트 했을 때 인물을 아예 인식하지 못할만큼 정확도가 떨어지는 문제가 발생했다. 아래 사진은 그 중에서 유일하게 인식한 케이스로 왼쪽이 기존에 darknet을 사용했을 때 결과이고 오른쪽이 keras 모델로 변환한 뒤 테스트한 결과이다.
여기서 그만둘까 하다가 YOLOv3 모델도 변환해주는 코드를 찾아서 재시도 하였다.
깃헙에서 아래 레포를 참고하였다.
https://github.com/qqwweee/keras-yolo3
Keras 모델로 변환하기 위해 필요한 준비물은 아래와 같다.
- 모델 구조를 나타내는 cfg파일
- weight 파일
변환하는 과정은 그냥 cfg, weight 파일만 가지고 컨버팅 해주면 .h5 파일을 생성할 수 있다.
이후 test 코드에서 model, anchor box, class 파일 등을 잘 잡아주고 실행하였더니 아래와 같이 잘 인식되는 결과를 보여주었다.
darknet 모델을 keras 모델로 변환하고 나서 성능이 떨어질 수 있는 문제가 발생하는 것 같다.
한가지 특이한 점은 darknet모델에서는 오른쪽 이미지의 오상식을 인식하지 못 했는데 변환된 keras 모델에서는 인식하는 결과를 보여주었다. 인물들의 예측 정확도가 darknet의 결과와 비슷하거나 조금 떨어지는 거 같긴 한데 darknet에서 인식하지 못한 인물을 오히려 keras 모델에서 인식한다는 게 좀 특이했다.
'ML & DL > 이것저것..' 카테고리의 다른 글
Sigmoid, Softmax in semantic segmentation (0) | 2021.02.09 |
---|---|
Object Detection: Darknet을 이용한 YoLoV3 학습하기 (3) | 2019.11.25 |
CNN feature visualization (0) | 2019.10.25 |
RetinaNet을 이용한 Object Detection (0) | 2019.10.23 |
Keras에서 tensorflow 함수 사용하기 (0) | 2019.02.26 |