Computer Science/DL, ML

우분투(18.04 기준)에서 AlexeyAB/darknet, YOLOv3 설치해서 활용하기

TwinParadox 2020. 4. 22. 11:45
728x90

YOLOv3를 구현해놓은 darknet은 크게 두 개의 프로젝트로 나뉜다.

 

https://pjreddie.com/darknet/

 

Darknet: Open Source Neural Networks in C

Nightmare Use Darknet's black magic to conjure ghosts, ghouls, and wild badgermoles. But be warned, ye who enter here: no one is safe in the land of nightmares.

pjreddie.com

 

https://github.com/AlexeyAB/darknet

 

AlexeyAB/darknet

Windows and Linux version of Darknet Yolo v3 & v2 Neural Networks for object detection (Tensor Cores are used) - AlexeyAB/darknet

github.com

 

 

전자의 프로젝트는 YOLOv3의 원 저자가 만든 프로젝트고, 후자의 경우 다른 운영체제(윈도우)에서 쉽게 활용할 수 있으면서, 여러 가지 설정을 변경할 수 있고, Loss와 mAP를 그래프로 확인할 수 있다. 그냥 간단히 돌려만 보는 것에 초점을 둔다면 전자의 프로젝트를 사용해도 무방하다. 하지만, 피드백이나 사용 편의성, 특히 이런저런 설정을 편하게 바꿔주고 싶다면 AlexeyAB의 darknet을 추천한다. 이 글 역시 AlexeyAB의 darknet을 기준으로 작성했다.

 

두 프로젝트 모두 설정 방법이나 이런 것들이 자세하게 명시되어 있어서 따로 설명할 필요가 없지만, 환경이 익숙하지 않은 사람과 나 자신을 위해서 글을 정리해둔다. 세부적인 사항들에 대해 설명하기보다는 설치해야 하는 순서나 관련 내용만 정리해둔 것이라, 경로 설정 등에 대한 내용은 하단의 Reference나 다른 글들을 참고하는 것이 좋다.

 

 

Requirement

Requirement

기본적인 환경 설치에 필요한 부분이다. MSVC 2019를 지원할 정도로, 최신 버전에 대한 업데이트가 잘 이뤄지고 있음을 알 수 있다. 관련 내용은 상단에 첨부한 AlexeyAB/darknet repository의 README.md에 잘 정리되어 있으니, 필요한 링크는 해당 링크를 참조하면 된다.

 

 

사전 설치

기본적인 우분투 환경과 CMake에 대한 업데이트 및 설치를 진행한다.

 

 

SUDO APT-GET UPDATE
SUDO APT-GET UPGRADE
SUDO APT-GET INSTALL CMAKE

 

 

CUDA 설치

CUDA Toolkit 10.0과 그 버전에 맞는 cuDNN을 설치해준다. CUDA Toolkit 버전은 GPU 스펙에 맞게 선정하면 되고, 직접 설치하면서 10.0이 가장 안정적으로 문제 없이 설치할 수 있었기 때문에 10.0을 추천한다. 권장 사항은 CUDA>=10.0, cuDNN >= 7이므로, 이에 따라 알맞게 설치해주도록 한다. CUDA 관련 설치는 Google에 많이 있으니 생략한다.

 

 

OpenCV 설치

필자는 OpenCV 4.0.0을 설치해서 동작시켰다. 대부분의 경우 잘 동작하는 편이지만, 이 과정에서 꼬이면 상당히 골치가 아파지므로, 안정적으로 동작하는 OpenCV 3.4.0 설치를 권장한다. OpenCV를 설치하기 앞서, 관련 라이브러리를 설치하는 사전 작업이 필요하다.

 

라이브러리 설치

sudo apt-get install libjpeg-dev libpng-dev libtiff-dev 

sudo apt-get install libavcodec-dev libavformat-dev libswscale-dev libv4l-dev v4l-utils libxvidcore-dev libx264-dev libxine2-dev 

sudo apt-get install libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev 

sudo apt-get install libgtk-3-dev 

sudo apt-get install mesa-utils libgl1-mesa-dri libgtkgl2.0-dev libgtkglext1-dev 

sudo apt-get install libatlas-base-dev gfortran libeigen3-dev

 

 

OpenCV 설치

mkdir opencv
cd opencv
wget -O opencv.zip https://github.com/opencv/opencv/archive/3.4.0.zip
wget -O opencv_contrib.zip https://github.com/opencv/opencv_contrib/archive/3.4.0.zip

unzip opencv.zip
unzip opencv_contrib.zip

 

 

cmake로 컴파일

cd opencv-3.4.0
mkdir build
cd build
더보기

cmake -D CMAKE_BUILD_TYPE=RELEASE \
-D CMAKE_INSTALL_PREFIX=/usr/local \
-D WITH_TBB=OFF \
-D WITH_IPP=OFF \
-D WITH_1394=OFF \
-D BUILD_WITH_DEBUG_INFO=OFF \
-D BUILD_DOCS=OFF \
-D INSTALL_C_EXAMPLES=ON \
-D INSTALL_PYTHON_EXAMPLES=ON \
-D BUILD_EXAMPLES=OFF \
-D BUILD_TESTS=OFF \
-D BUILD_PERF_TESTS=OFF \
-D WITH_QT=OFF \
-D WITH_GTK=ON \
-D WITH_OPENGL=ON \
-D OPENCV_EXTRA_MODULES_PATH=../../opencv_contrib-3.4.0/modules \
-D WITH_V4L=ON  \
-D WITH_FFMPEG=ON \
-D WITH_XINE=ON \
-D BUILD_NEW_PYTHON_SUPPORT=ON \
-D PYTHON2_INCLUDE_DIR=/usr/include/python2.7 \
-D PYTHON2_NUMPY_INCLUDE_DIRS=/usr/lib/python2.7/dist-packages/numpy/core/include/ \
-D PYTHON2_PACKAGES_PATH=/usr/lib/python2.7/dist-packages \
-D PYTHON2_LIBRARY=/usr/lib/x86_64-linux-gnu/libpython2.7.so \
-D PYTHON3_INCLUDE_DIR=/usr/include/python3.6m \
-D PYTHON3_NUMPY_INCLUDE_DIRS=/usr/lib/python3/dist-packages/numpy/core/include/  \
-D PYTHON3_PACKAGES_PATH=/usr/lib/python3/dist-packages \
-D PYTHON3_LIBRARY=/usr/lib/x86_64-linux-gnu/libpython3.6m.so \

../

make -j4

sudo make install
sudo sh -c echo '/usr/local/lib/' > sudo /etc/ld.so.conf.d/opencv.conf
sudo ldconfig

 

make에서 오류가 발생하면 make VERBOSE=1를 시도해보면 해결할 수도 있다.

 

 

Make를 통한 컴파일

make를 통해서 darknet을 컴파일하기 전에 작업할 것이 있다. 먼저, darknet 내부에 있는 Makefile에서 옵션을 변경해줘야 한다. GPU를 사용하는 경우 관련 설정들을 변경해줘야 하는데, 통상적으로 아래 옵션으로 지정해주면 잘 동작한다.

 

 

GPU=1
CUDNN=1
OPENCV=1
OPENMP=0
DEBUG=0

 

 

Makefile 설정 완료 후

mkdir build-release
cd build-release
cmake ..
make
make install

 

make를 통한 컴파일

이외의 설정들이 있긴 하지만, 해당되는 경우에 활용하면 되고, 컴파일까지 진행이 완료가 되면, AlexeyAB의 darkent을 활용해 YOLO를 이용할 수 있다. README.md에 사용 방법이나 pretrained model 다운로드 및 활용 방법, 클래스 수에 따른 학습 횟수에 대한 세부 사항들이 잘 명시되어 있으니 이를 충분히 활용하도록 하자.

 

 

 

[Reference]

더보기
728x90