CUDA 8.0 + openCV 3.4.0으로 darknet YOLO 실행

2019. 10. 26. 09:56드론

[실행환경] ubuntu 16.04 LTS

 

CUDA 연동을 하지 않으면 1을 상회하는 FPS를 얻는다. 즉 실시간은 어렵다는 의미다. 따라서 GPU 연동을 통해 실시간성을 구현해보고자 한다

 

1. Nvidia 드라이버를 설치

Nvidia 설치는 기본적으로 설치되어 있는 드라이버를 설정했다. 최대한 있는 것 중 높은 버전으로 설정했다. 나중에 CUDA 호환에서도 영향을 미친다고 한다.

 

Application 중 Additional Driver를 실행시킨다. 아래는 기본 화면이다

$ echo options nouveau modeset=0 | sudo tee -a /etc/modprobe.d/nouveau-kms.conf

기본 커널 모듈이 nouveau로 잡혀있으면 문제가 많다고 한다. 따라서 맨 위로 설정한다. 따라서 환경설정 파일을 수정하고 커널 컴파일을 다시 한 후 재부팅을 한다. 명령어는 아래 사이트를 참고하도록 한다

 

[참고] https://askubuntu.com/questions/841876/how-to-disable-nouveau-kernel-driver

 

 

설치한 후 드라이버가 잘 설치되었는지 확인해본다

$ lspci -k 

 

필자 GPU는 GT 750M으로 잡힌 것을 확인할 수 있다

 

2. CUDA 8.0 설치

구글에 CUDA 8.0을 검색한다

 

계정 로그인을 하고 운영체제에 맞게 설정한 후 cuda_8.0.61_375.26_linux.run 파일을 받았다

$ chmod +x cuda_8.0.61_375.26_linux.run 
$ sudo ./cuda_8.0.61_375.26_linux.run

 

실행 이후의 선택과정은 다음 링크에서 확인했다

[참고] https://juni-94.tistory.com/6, https://yunsangq.github.io/articles/2017-02/Ubuntu-16.04(64bit),-CUDA-8.0,-cuDNN-5.1-Install

 

3. openCV-3.4.0, openCV-contrib 3.4.0 설치하기

대략적인 과정은 다음 링크에서 확인했다

 

https://www.pytorials.com/how-to-install-opencv340-on-ubuntu1604/

 

4. Darknet 실행하기

현재 GPU 메모리는 2G로 아쉽게 기본 cfg 파일은 실행시킬 수 없는 환경이다. 따라서 4G 메모리가 필요한 파일을 실행시키면 메모리 dump 에러가 발생한다. 그래서 tiny 파일만 실행이 가능하다

 

[출처] https://jusths.tistory.com/33

 

GPU, OPENCV, CUDNN을 모두 1로 설정하고 빌드를 한 후, Tiny 파일을 받고 실시간 웹 캠 예제를 실행한다. 약 FPS 20을 상회하는 주기로 이미지 검출이 가능해졌다는 것을 확인할 수 있다

 

$ ./darknet detector demo cfg/coco.data cfg/yolov3-tiny.cfg cfg/yolov3-tiny.weights