You only look once (YOLO V3) 기능

인공지능 관련 연구를 하며 YOLO를 많이 접하게 됩니다.

이때 사용하는 기능은 객체 인식 후 바운더리 박스의 좌표 값, 정확도 임계값 또는 특정 클래스만 인식 등이 있습니다.

어떤 소스를 고쳐야 하는지 알아봅니다.

참고: L = 줄 번호

환경은 Ubuntu 18.04 LTS, C++ 버전입니다.

먼저 darknet.c L400 에 있는 main 함수를 보겠습니다.

실행시킬때 넘겨받는 옵션들을 처리하게 됩니다.

일반적인 테스트 프로세스는 yolo를 실행할 때 detect 옵션을 줍니다.

따라서 main 함수에서 detector.c L562 test_detector 함수로 들어갑니다.

test_detector

L 577~585: 파일 경로가 옵션으로 주어졌으면 해당 파일이 input image, 아니라면 입력할 수 있도록 함
L 597: 객체 인식
L 600: 객체 인식 결과 변수 할당
L 604: 박스 그리기
L 605: 메모리 해제
L 606~615: 이미지 저장

이 부분에서 dets라는 변수는 YOLO 네트워크의 결과물이라고 할 수 있습니다.

이러한 dets 변수를 파라미터로 갖고 draw_detections 함수로 들어갑니다.

draw_detections는 image.c L239 에 정의되어있습니다.

이 함수에서 앞서 언급한 작업을 진행할 수 있습니다.

dets[i].prob : 정확도
names[j] : 클래스
L 294 : label 입력 제거한다면 label이 결과물에 표시되지 않습니다.
draw_box_width(): 바운더리 박스 그리는 함수 마찬가지로 제거하면 박스가 그려지지 않습니다.
left, top, right, bot: 인식된 객체의 바운더리 박스 좌표

위 변수들을 적당히 조합한다면 그림 1과 같이 원하는 객체만 박스를 그릴 수 있습니다.


댓글

이 블로그의 인기 게시물

Versatile video coding Test Model(VTM) Build

이미지 캡셔닝 Show and Tell 리뷰

Image Super-Resolution Using Deep Convolutional Networks 논문리뷰