본문 바로가기
기타/GPU set

[CUDA&OpenCV] Python 환경 OpenCV GPU 연동 (CUDA backend in OpenCV) - 2. 빌드 & 테스트

by hotelshoe 2022. 2. 21.
반응형

지난 포스팅에서 빌드를 위한 파일들을 모두 설치하였고 이제 직접 빌드하여 테스트를 진행하겠습니다.

 


2.1 빌드 프로젝트 파일 생성

설치하였던 CMake를 실행합니다. 그 후 첫 번째 'Where is the source code:' 는 Browse Source... 를 클릭하여 opencv가 설치된 폴더를 지정합니다. 두 번째 'Where to build the binaries:' 는 Browse Build... 를 클릭하여 미리 생성해둔 build 폴더를 지정합니다. 그 후 Configure 를 클릭합니다.

 

 

Configure 클릭 후 다음과 같은 창이 뜨는데 project의 경우 설치해둔 Visual Studio 2017로 설정하며, 64비트의 환경이므로 x64를 선택해줍니다. 밑의 옵션은 건드리지 않고 Finish를 클릭합니다.

 

Finish 클릭 후 다음과 같은 화면을 볼 수 있으며 이제 빌드에 필요한 부가적인 옵션을 선택합니다. 다양한 개발에 앞서 본인 환경에 맞게 추가적으로 구성해볼 수 있겠으나 이번 포스팅에선 필수적인 요소만 체크하도록 하겠습니다.

 

먼저 다음 항목들의 Value를 체크합니다. (상단의 Search를 활용하면 빠르게 찾을 수 있습니다)

WITH_CUDA

OPENCV_DNN_CUDA

ENABLE_FAST_MATH

INSTALL_PYTHON_EXAMPLES

 

다음으로 OPENCV_EXTRA_MODULES_PATH 항목의 Value 값을 opencv-contrib의 modules 폴더의 경로로 지정해줍니다. (Value 오른쪽 끝의 ... 클릭하여 경로 선택 가능)

그 후 Configure를 클릭합니다.

 

Configure 후

WITH_CUDNN

WITH_CUBLAS

CUDA_FAST_MATH

항목을 체크합니다.

 

다음으로 자신의 그래픽카드에 맞는 Compute capability를 찾아야 하는데 아래의 링크를 통해 알 수 있습니다.

https://en.wikipedia.org/wiki/CUDA

 

CUDA - Wikipedia

From Wikipedia, the free encyclopedia Jump to navigation Jump to search Parallel computing platform and programming model CUDA (or Compute Unified Device Architecture) is a parallel computing platform and application programming interface (API) that allows

en.wikipedia.org

링크 접속 후 스크롤을 내리면 다음과 같이 Compute capability와 그래픽카드 모델명이 나열되어 있습니다. 자신의 그래픽카드 모델에 맞는 번호를 찾으면 되겠습니다. 저의 경우 2080 Ti 이므로 7.5가 되겠습니다.

 

그 후 CUDA_ARCH_BIN 항목을 찾아 Value를 방금 찾아두었던 Compute capability 번호로 수정합니다.

 

이제 마지막으로 python 설치 경로를 변경해 줍니다. 첫 포스팅에서처럼 미리 설치한 가상환경의 경로로 지정해 줄 것이며 저의 경우 아나콘다의 'opencvgpu' 라는 가상환경으로 지정할 것입니다. 자신이 설치한 아나콘다 가상환경 경로의 경우 보통 'C드라이브 -> 사용자 -> anaconda3 -> envs' 의 항목에 존재합니다. 첨부된 사진을 참고하여 다음 항목들의 경로를 변경합니다.

 

PYTHON3_EXECUTABLE 의 항목은 가상환경에 설치된 python.exe 파일을 지정합니다.

PYTHON3_INCLUDE_DIR 의 항목은 지정한 가상환경의 include 폴더를 지정합니다.

PYTHON3_LIBRARY 의 항목은 가상환경 libs 폴더의 python3x.lib 파일로 지정합니다.

PYTHON3_LIBRARY_DEBUG 의 항목 역시 lib 파일로 지정합니다. 
PYTHON3_NUMPY_INCLUDE_DIRS 의 항목은 가상환경에 설치된 numpy 패키지의 core -> include 폴더를 지정합니다. numpy가 설치되어 있지 않을 시 해당 폴더가 존재하지 않습니다.

PYTHON3_PACKAGES_PATH 의 항목은 가상환경의 Lib -> site-packages 폴더를 지정합니다.

 

경로 지정이 마무리 되면 전체적인 항목 체크를 확인하고 Configure를 클릭합니다.

 

Configure가 마무리 된 후 'Configuring done' 이라는 메시지가 확인되면 Generate를 클릭하여 빌드 프로젝트 파일을 생성합니다.


2.2 빌드 프로젝트 파일 실행

 

이제 build 폴더를 들어가면 파일들이 설치되어 있는데 이 중 OpenCV.sln 파일을 실행시킵니다.

 

실행 후 먼저 상단의 콤보 박스에서 Debug 항목을 Release로 변경합니다.

그 후 오른쪽의 CMakeTargets의 하위 항목 중 ALL_BULD(빨간 박스)를 우 클릭 후 빌드를 클릭하여 빌드를 진행합니다.

보통 이 작업은 30분 ~ 2시간 정도 걸린다고 합니다. 

(※주의할 점은 반드시 해당 가상환경에서 opencv-python 패키지가 설치되어 있지 않은 상태에서 진행해야 합니다※)

 

빌드 완료 메시지가 출력되면 CMakeTargets의 하위 항목 중 INSTALL(빨간박스)을 우 클릭 후 빌드를 클릭합니다. 이 작업은 20분 내외 정도 걸린듯합니다.

 

마찬가지로 빌드 완료 메시지가 출력된 후 사진과 같이 가상환경의 Lib -> site-packages 폴더에 cv2 폴더가 생성되어 있으면 빌드가 마무리 됐습니다.

 

이제 cv2 폴더의 python-3.x 폴더에 cv2.cp37-win_amd64.pyd 파일(설치된 환경에 따라 파일명이 조금 다를 수 있습니다)을 가상환경 폴더의 Lib -> site-packages 폴더에 복사하면 빌드는 마무리가 됩니다. 


2.3 환경변수 지정

최종적인 마무리 작업으로 환경변수를 지정합니다. 이 작업을 실시해야만 임포트가 정상적으로 진행됩니다.

윈도우 검색창에 '고급 시스템 설정 보기' 를 검색하거나 '제어판 -> 시스템 및 보안 -> 시스템 -> 고급 시스템 설정' 으로 찾을 수 있습니다.

 

환경 변수를 클릭하여 밑의 시스템 변수에서 새로만들기를 클릭하면 새 사용자 변수를 입력하는 창이 나옵니다.

여기에 변수 이름은 OPENCV_DIR

변수 값은 OpenCV를 빌드한 폴더의 install 폴더의 경로를 지정해 줍니다.

 

그 다음 시스템 변수의 path 항목을 눌러 편집을 클릭하면 환경 변수를 편집할 수 있습니다.

새로 만들기를 클릭하여 아래와 같이 입력해 줍니다.

%OPENCV_DIR%\x64\vc15\bin

이제 확인을 눌러 마무리 합니다.


2.4 테스트

먼저 해당 코드로 opencv가 정상적으로 임포트 되는지 확인합니다.

import cv2
print(cv2.__version__)

출력 예시

설치한 4.5.1 버전으로 정상적으로 임포트가 되는 것을 확인한 뒤 아래의 예제 코드로 테스트를 진행해 보겠습니다.

 

 

https://prlabhotelshoe.tistory.com/25?category=1005609 

 

[OpenPose] 영상 손가락 마디&관절 인식

사진 혹은 영상 속 인물들의 스켈레톤 검출에 대표적으로 쓰이는 OpenPose의 모델과 OpenCV를 활용하여 영상에서의 손가락 관절과 마디를 검출하도록 하겠습니다. 1. 모델파일 설치 필요한 파일은 'p

prlabhotelshoe.tistory.com

해당 OpenCV 샘플 코드를 이용하여 테스트를 진행해보았습니다.

GPU 적용전

GPU 미적용 테스트 결과

GPU를 적용하지 않은 다른 가상 환경에서 해당 코드의 GPU 연동 코드의 주석을 해제한 뒤 실시하였습니다.

끊김현상과 더불어 매우 느린 출력을 볼 수 있습니다. 또한 cv::dnn::dnn4_v20211220::Net::Impl::se::setUpNet DNN module was not built with CUDA backend; switching to CPU 의 오류가 발생하여 정상적인 GPU 연동이 되지 않아 CPU로 전환하여 코드를 실행함을 볼 수 있습니다.

 

GPU 적용 테스트 결과

GPU를 연동한 가상환경에서 예제 코드를 작동해 보았습니다.

적용전과 비교하여 월등하게 빠른 인식과 프레임 출력을 볼 수 있습니다. 


컴퓨터 비전을 공부하며 많이 접하게 되는 OpenCV에 GPU를 연동하는 방법을 소소하게나마 알아보았습니다. 기회가 되면 다른 여러 딥러닝 모듈에 GPU를 연동하는 방법을 공부해볼 계획입니다.

반응형

댓글