카테고리 없음

windows 에서 c++ 을 이용한 YOLO V3 물체인식(Dataset 만들기)

둥H 2020. 9. 23. 21:14
반응형

모든 내용은  blog.naver.com/hyunmonn/222085247469 님의 자료를 토대로 실행한 과정입니다.

 

 

 

사전 준비로

* VisualStudio 2019

* https://github.com/AlexeyAB/darknet 여기의 링크에서 zip파일을 다운로드받고

* cmake.org/download/ 여기의 링크에서 최신버전의 .msi 파일을 다운받는다.

그리고 물체인식을 위한 이미지파일들이 필요하다.

(나는 비행기 사진들과 새 사진들을 사용하였다.)

 

CMake 프로그램을 실행시킨 후 상단의

"Where is the source code" 부분에 zip파일로 다운받은 내용인 폴더의 경로를 넣어주고

"Where to build the binaries" 부분에 해당 파일안의 build 폴더 경로를 지정해준다.

 

그리고 프로그램 하단의 configure을 눌러 진행하게 되면 아래와 같은 창이 뜨게되는데

본인의 PC환경에 맞추어 작성해준다.  나는 VS2019 버전과 64bit 환경에서 작업하므로

아래와 같이 입력해주었다.

그 결과 아래와 같이 출력됨을 확인할 수 있다.

 

openCV_DIR에 경로가 NOTFOUND로 되어있으면 opencv경로의 build/x64xvc15/lib 폴더로 지정해주어

아래와 같이 설정한다.

 

아래와 같이 설치 경로를 변경해준다.

 

CUDA가 인식되었는지 확인한다.

CMAKE_CUDA_COMPILER가 NOTFOUND로 되어있으면

C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.1\bin\nvcc.exe    로 지정해주자.

(CMAKE_CUDA_COMPILER가 안보이면 search부분 우측의 "Advanced"가 체크되어있는지 확인해보자.)

이제 아래와 같이 설정하여 하단의 configure 버튼을 클릭한다.

 

 

그런데 하단과 같은 에러가 출력되게 된다.

CUDA toolset을 제대로 찾지 못한 것으로 보인다.

 

 

 

많이 찾아봤는데 버전 문제로 보인다.

게시물 상단에 링크한 블로거님의 게시물에는 Cuda Toolkit을 10.2로 진행할때 오류가 발생할 수 있어

10.1 의 설치를 권장하셨지만 나의 경우 10.1에서 오류가 발생하고 혹시나하는 마음에 10.2를 설치하여 진행한 결과

아래와 같이 정상적으로 configure 되는 것을 확인할 수 있다.

 

 

Configuring done 이 출력됨을 확인하였으면 generate를 눌러 실행한다.

 

 

Generating done 이 출력되지만 상당히 많은 Warning가 뜨는 것을 확인할 수 있다.

(무시하고 아래 Build과정을 진행해보자.  나의 경우 Warning이 뜨긴 하였지만 Build 는 이상없이 잘 되었다.)

 

 

다시 git에서 다운받은 darknet-master 폴더로 들어가 build폴더 안에있는 솔루션 파일을 열어

Build를 진행해준다.

 

과정은 아래와 같다.

 

프로젝트 파일을 열면 위와 같이 프로젝트들의 목록을 확인할 수 있다.

이 부분을 우클릭하여 빌드해준다.(아래 사진처럼)

 

그럼 이제 이미지들을 yolo에서 인식할 수 있게 이미지에서 물체의 범위를 추출해보자.

 

https://github.com/AlexeyAB/Yolo_mark

 

위의 링크에서 zip파일을 다운받은 후 압축을 풀어준다.

 

Yolo_mark-master 폴더에 솔루션파일이 있다.

 

위의 이미지와 같이 나타날텐데 상단에서 모드를 Release모드로 설정해준 후 프로그램을 컴파일 및 실행시켜보자.

 

그럼  x64 폴더의 Release폴더에 yolo_mark 라는 이름의 실행파일이 생성된다.

 

yolo_mark.exe 의 실행파일은 이미지들의 경로와 txt파일을 저장할 이름, 그리고 label 될 이름을 파라미터로 필요로한다.

 

 

Release 폴더에서 상단의 주소 부분에 cmd를 입력하여 실행시켜보자.

주소 부분에 cmd 입력

그럼 위와 같은 cmd창이 나타나게 된다.

 

경로\Yolo_mark-master\x64\Release>yolo_mark.exe

 

yolo_mark.exe를 입력하면 필요한 파라미터들이 출력된다.

 

그럼 Release 폴더의 data, img 폴더에 이미지들을 모두 넣어주자.

 

여기까지 진행되었다면 앞의 img폴더로 다시 돌아와 obj이름의 텍스트파일을 생성해주자.

 

그리고 텍스트파일에 사진들을 구분할 label을 입력하여준다.

나는 비행기와 새를 구분할 것이므로 plane과 bird를 라벨링할것이다.

 

각각의 물체에 대해 각각 다른 줄로 작성해준다.

 

그 후 아래처럼 해당 텍스트파일을 다른이름으로 저장하면서

파일형식은 '모든 파일' 로 선택하고 파일 이름 뒤에 .names 를 붙여 names형식의 파일을 만들어준다.

 

 

그리고 기존의 obj.txt 파일은 삭제해준다.

 

 

그럼 아까와 같이 Release 경로에서 주소창에 cmd를 입력하여 아래 명령어를 입력해준다.

 

경로>yolo_mark.exe data\img data\train.txt data\obj.names

 

그럼 위와같이 각각의 사진에 대해 물체의 영역을 지정해줄 수 있는 프로그램이 실행된다.

 

마우스로 해당 물체를 선택해주자.

하나의 이미지에 대해 물체가 선택되었다면 아래와 같이 보이게 된다.

 

그럼 키보드의 -> 화살표를 이용하여 다음 이미지로 넘어가고 다시 물체영역을 지정해주자.

 

한장에 여러개의 물체가 있는 경우 위와 같이 따로따로 선택해주자.

 

비행기가 끝나고 새 사진이 나오게 되면 object를 변경해주어야 한다.

 

상단의 스크롤을 옮겨 Object id가 변경됨을 확인하고 다시 객체의 영역을 지정해주자.

 

완료되었으면 ESC를 눌러 종료

 

 

data폴더의 image폴더에서 각각의 이미지에 대한 데이터가 담긴 txt파일이 생성되었음을 확인할 수 있다.

 

또한 data폴더의 train.txt 파일에 데이터가 입력되었음을 확인할 수 있다.

 

여기서 train 이미지들에 대한 정보들이 train.txt 폴더에 저장되었는데 test이미지들 역시 이와 같은

방식으로 진행하여 test.txt 파일을 저장해주자.

 

 

 

이렇게 데이터셋  준비가 끝났다.

반응형