라벨이 Object detection인 게시물 표시

YOLO custom dataset으로 학습

이미지
YOLO는 많은 사람들이 사용하고 있는 객체 인식 오픈소스입니다. 이미 선행학습 (Pre-trained)된 데이터도 있지만, 제가 원하는 클래스는 송전탑 (Transmission tower) 클래스입니다. 따라서 해당 클래스만 학습해보도록 하겠습니다. 환경: Ubuntu 18.04 LTS 데이터 셋을 구하기 위해 먼저 크롤링을 해줍니다. 구글 크롬 드라이버를 이용할 것입니다. 크롬 드라이버를 본인의 크롬 버전에 맞게 다운로드 받습니다. Link: https://chromedriver.chromium.org/downloads 크롬 버전 확인 방법은 그림 1과 같습니다. 그림 1 크롬 버전 확인 크롤러 프로그램은 google-images-download를 사용했습니다. Link: https://github.com/ultralytics/google-images-download Readme에 적힌대로 진행하면 크롤링을 진행할 수 있습니다. 다음은 레이블링을 해야합니다. 이미지 내에 객체의 좌표를 로깅하는 것입니다. 본 포스팅에선 YOLO mark를 사용했습니다. Link: https://github.com/AlexeyAB/Yolo_mark git clone https://github.com/AlexeyAB/Yolo_mark cd Yolo_mark cmake . make chmod u+x ./linux_mark.sh ./linux_mark.sh 위 커맨드들을 입력해주시면 그림 2와 같은 창이 팝업됩니다. 그림 2 Yolo mark 저는 이미 송전탑 이미지들을 넣어놔서 다음과 같은 이미지가 나오지만, 처음에는 비행기 그림이 나옵니다. 크롤링한 이미지들을 다음 경로에 넣어주면 그림 2와 같아집니다. Path: Yolo_mark/x64/Release/data/img 레이블링 하는 법은 마우스 드래그로 합니다. 다른 상세한 단축키들은 h키를 눌러 확인할 수 있습니다...

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과 같이 원하는 객체만 박스를 그릴 수 있습니다.