본문 바로가기

프로젝트 기록

YOLO Object Detector 쓰기 (2)

구현체 사용 준비

Darknet을 사용하기로 하고, 여기저기 Tutorial과 문서들을 찾아봤다. 일단 Darknet을 사용하기 위해서 컴파일을 하기로 했다. 저번 글에서도 말했듯, 코드 기반 구현체를 거른 이유는 한번의 컴파일로 유사한 환경에서 쓸 수 있기 때문이었다.
후다닥 컴파일을 하고 팀원들에게 배포하려고 작업에 착수했다.

컴파일을 하기 위해서 일단 Python, Git, CMAKE, VS, CUDA와 CUDNN이 깔려 있어야 한다.

  1. Python - python version이 3.8보다 낮아야 한다. 3.8이후부터는 DLL을 로드하는 방식이 달라져 추후 darknet dll을 로드할때 에러가 발생한다.

  2. Git - 깔면 된다.

  3. CMAKE - 깔면 된다. (최근 작동확인한 버전은 3.18.3)

  4. Visual Studio - 깔면 된다. Python Development, Desktop Development with C++ 포함해서 설치한다.

  5. CUDA, CUDNN - GPU드라이버를 최신으로 올리고, Cuda Toolkit 10.2를 받아 설치한다. CUDNN의 경우, Nvidia Developers 계정을 생성하고 다운로드 받을 수 있다. CUDNN v7.6.5 for CUDA 10.2를 받아 bin\ 의 내용을

     C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.2\bin

    에 복사해둔다.


컴파일 삽질 시작 - OpenCV

본격적으로 Darknet을 컴파일 하기 전, Darknet에서 사용될 OpenCV를 컴파일/설치해야 한다.

  1. OpenCV의 코드를 받아(v.4.1.0) 특정 Dir에 풀어둔다(여기선 opencv)
  2. 추가 확장에 대한 코드도 받아 같은 Dir에 풀어둔다.
  3. opencv Dir안에 build Dir를 생성한다.
  4. CMAKE 실행 후, Code Dir에 opencv 압축 풀린 dir(opencv\opencv-4.1.0), build dir에 3)에서 생성한 dir(opencv\build)를 선택한다.
  5. Configure에서 VScode 선택, 플랫폼은 x64 선택후 finish
  6. 주르륵 플래그들 뜨는데 BUILD_opencv_world 체크해준다.
  7. Generate!
  8. opencv\build 폴더에 보면 ALL_BUILD.vcxproj가 있다. 열어준다.
  9. 상단의 환경을 Debug가 아닌 Relese, x64로 설정한다.
  10. Solution Explorer에서 CmakeTargets-ALL_BUILD를 빌드해준다.
  11. 다 되면 그 뒤 INSTALL도 Build.
  12. (정상적으로 된다면) Python에서 opencv가 된다!

Step이 많지만 별거없다. 받아서 빌드만 할 뿐...
빌드 시간이 꽤 걸리더라... 말로만 듣던 "큰 프로젝트" 라서 그런지 신기했다...