728x90

 

yolo란 특정 Object detection을 통해 사진에 있는 물체를 찾아내는 알고리즘을 말합니다.

 

다양한 프로젝트에 CNN 기반의 대표적인 알고리즘 중 하나이며, 최적화가 매우 잘되어 있어서 GPU를 사용하면 실시간 물체 인식도 가능합니다.

 

윈도우 버전의 yolo를 설치하기 전에 먼저 밑의 프로그램들이 설치되어 있어야 합니다.

제가 사용한 버전은 아래와 같습니다.

  • Visual studio 2017
  • CUDA 11.0
  • cuDNN v8.0.2
  • OpenCV 4.40

위에서 설치해야 하는 프로그램중에 CUDA와 cuDNN은 서로 호환이 되는 버전으로 잘보고 설치해주셔야 합니다.

 

YOLO 알고리즘 소스코드가 들어있는 프로젝트를 Darknet이라고 부르는데요. 이를 받아줍니다.

 

Darknet 다운로드 링크 Darknet.zip 또는 원본 위치 github darknet에서 소스코드를 다운로드 받습니다.

(https://github.com/AlexeyAB/darknet)

 

 

1. CUDA Path를 자신의 환경에 맞게 설정

 

darknet-master\darknet-master\build\darknet 에 들어가 보시면 darknet.vcxproj 파일을 메모장 프로그램으로 여시면 수정하실 수 있습니다. 

 

 -메모장 프로그램인 notepad++ 추천드립니다.(notepad++ 공식사이트)-

 

ToolsVersion="14.0" 라고 쓰인 부분을 찾아서 본인의 VS toolset 버전을 입력합니다.

 

 

toolsversion visual studio 버전에 맞게 설정

그 후 

 

$(VCTargetsPath)\BuildCustomizations\CUDA 10.0.props

 

$(VCTargetsPath)\BuildCustomizations\CUDA 10.0.targets

 

을 CUDA toolkit 경로로 바꿔주셔야 합니다. 저의 경우는 밑의 경로 대로 설정 해주었습니다.

 

C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.0\extras\visual_studio_integration\MSBuildExtensions\CUDA 11.0.props

 

C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.0\extras\visual_studio_integration\MSBuildExtensions\CUDA 11.0.targets

 

2. OpenCV, cuDNN, GPU 아키텍쳐 설정

 

2.1 프로젝트 property -> C/C++ -> general -> additional include directories의 include 경로중 opencv, cuDNN, CUDA 경로가 본인이 설치한 경로로 맞게 설정

 

1 $(OPENCV_DIR)\include;

2 C:\opencv_3.0\opencv\build\include;

3 ..\..\include;

4 ..\..\3rdparty\stb\include;

5 ..\..\3rdparty\pthreads\include;

6 %(AdditionalIncludeDirectories);

7 $(CudaToolkitIncludeDir);

8 $(CUDNN)\include;

9 $(cudnn)\include

 

                  V

 

D:\opencv\build\include;(1,2을 대체 opencv 경로의 include 폴더)

..\..\include;

..\..\3rdparty\stb\include;

..\..\3rdparty\pthreads\include;

%(AdditionalIncludeDirectories);(3, 4, 5, 6은 공통 경로이므로 수정 x)

C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v9.0\include;(7 대체 CUDA toolkit include 경로, 매크로 설정이 되어있으면 안바꿔도됨)

D:\cudnn\include(8, 9 대체 cuDNN 경로의 include 폴더)

똑같이 치지 마시고 본인 설치 경로를 입력해야됩니다.

 

2.2 프로젝트 설정 페이지 -> CUDA C/C++ -> device -> code generation에서 본인의 architecture에 맞는 값 입력

 

compute_30,sm_30;compute_75,sm_75

 

               V

 

compute_61,sm_61

 

제 GPU는 GTX 1060이었기 때문에 61로 적었고 본인의 GPU에 맞는 값을 입력합니다.

 

GPU Compute Capability 정보 페이지

 

CUDA GPUs

Recommended GPU for Developers NVIDIA TITAN RTX NVIDIA TITAN RTX is built for data science, AI research, content creation and general GPU development. Built on the Turing architecture, it features 4608, 576 full-speed mixed precision Tensor Cores for accel

developer.nvidia.com

 

2.3 프로젝트 설정 페이지 -> Linker -> general -> Additional Library Directories 를 본인이 설치한 폴더의 라이브러리 폴더로 변경

 

1 C:\opencv_2.4.9\opencv\build\x86\vc14\lib;

2 C:\opencv_2.4.9\opencv\build\x86\vc12\lib;

3 $(CUDA_PATH)lib\$(PlatformName);

4 $(cudnn)\lib\x64;

5 ..\..\3rdparty\pthreads\lib;

6 %(AdditionalLibraryDirectories)

 

               V

D:\opencv\build\x64\vc14\lib;(1,2 대체)

C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v9.0\lib\$(PlatformName);

(3 대체)

D:\cudnn\lib\x64; (4 대체)

..\..\3rdparty\pthreads\lib; (5는 바꿀필요 없음)

%(AdditionalLibraryDirectories)

 

2.4 darknet.exe가 생성되는 경로에 dll파일을 미리 복사해서 넣어야합니다. 저같은 경우에는 x64 Release 였기 때문에 

darknet-master\darknet-master\build\darknet\x64 에

 

opencv_world440.dll

opencv_videoio_ffmpeg440_64.dll

cusolver64_10.dll

curand64_10.dll

cudart64_110.dll

cublas64_11.dll

 

를 복사해서 넣었습니다. 자신의 버전의 맞는 dll 파일을 복사해야 합니다 .

 

드디어 경로 설정 및 로컬 GPU 설정으로 변경을 완료하였습니다. 이제 darknet.sln 파일을 열어 밑의 사진과 같이 설정을 해준뒤 darknet 빌드를 하시면 됩니다.

그전에 논문에서 사용된 Yolo의 파라미터들을 불러올 수 있는데요. 이걸 그대로 사용해서 object detection을 해보겠습니다.

 

우선 미리 훈련된 weight 값을 받아와야합니다.

 

 

여기서 본인이 원하는 weights 파일을 받습니다. GPU 환경이나 맞는 weights값을 받아서 darknet.exe가 생기는 경로에 넣어줍니다.

 

전 darknet-master\darknet-master\build\darknet\x64 에 넣었습니다.

 

기본 테스트는 파워쉘에서 진행하시면 됩니다.

yolo명령어(WIN).txt
0.00MB

 

 

728x90

+ Recent posts