개발 관련/SW, App 관련
Darknet을 통한 Yolov3-tiny 훈련
소서리스25
2024. 10. 7. 11:39
반응형
Darknet을 통한 Yolo v3 tiny훈련
지난번에 Darknet을 이용하여 Yolov2-tiny로 커스텀데이터셋을 결국에는 Unity에 인식하는데 어느 정도 성공을 해서 이번에는 Yolov3-tiny를 시도해 보았다.
참고적으로 Unity의 Barracuda는 Yolov3을 지원한다. 지원하는 Barracuda의 버전은 살펴봐야 하겠지만 상위버전이면 지원할 것이다. Barracuda 매뉴얼에 나와 있다. 다만, Yolov3-tiny는 확인이 필요하다.
따라서 이번에는 이전보다 성능? 좋은 Yolov3-tiny로 훈련하여 인식해 보기로 했다. 이게 더 좋으면 이걸 써야되지 않겠는가..
기본적인 cfg 설정은 기존의 Yolov3-tiny를 알맞게 수정해 준다.
특히 filters부분이 이전 버전과 다르다
Yolov2-tiny
filters=30 (5 + class 수) * 5
classes = 1
Yolov3-tiny
filters=18 (5 + class 수) * 3
classes = 1
이제 이것을 기준으로 Darknet 훈련을 통해 weight 파일을 6시간만에 끝냈다.
그리고 기존의 컨버팅 도구인 coreml 로 기존 셋팅으로 컨버팅 했으나 바로 오류가 났다.
오류의 원인은 생각보다 쉽게 찾았다.
이전에 keras로 컨버팅 했던 yolov3-tiny 파일을 살펴보면 output이 2개로 출력된다. 기존 yolov2-tiny의 셋팅은 1개로 출력된다.
따라서 coreml도 2개로 출력하면 되는 것이다.
그러면 convert2CoreML.py에서 주석으로 달아두었던 output 부분을 2개의 출력으로 변경해 주면 된다.
coreml_model = coremltools.converters.keras.convert(
model,
input_names='input1', image_input_names='input1', output_names=['output1', 'output2'], image_scale=1/255.,
add_custom_layers=True,custom_conversion_functions={ "Mish": convert_mish })
coreml_model.input_description['input1'] = 'Input image'
coreml_model.output_description['output1'] = 'The 13x13 grid (Scale1)'
coreml_model.output_description['output2'] = 'The 26x26 grid (Scale2)'
#me coreml_model.output_description['output3'] = 'The 52x52 grid (Scale3)'
coreml_model.save(output_path)
그러면 정상적으로 모델이 출력된다.
이제 Yolov3-tiny를 Unity에서 돌려서 확인할 차례이다. (다음 포스팅 예정)
반응형