딥러닝 OpenCV와 Darknet Yolo 설치하기.
페이지 정보
본문
안녕하세요. 엔지엠소프트웨어입니다. 이전 시간에 도커와 CentOS까지 설치를 완료했습니다. 몇가지 테스트하다보니 CentOS에서 systemd를 사용할 수 없어서 OpenCV를 설치할 수 없더라구요^^; 문제점을 해결하려고 찾다보니 init 데몬에서 systemd로 변경되었나봅니다. 아무튼, 문제는 systemctl을 사용해서 locale를 변경해야 yum으로 OpenCV를 설치할 수 있습니다. 그런데 이전 글에서 설명한 Clean CentOS로는 systemd를 실행할 수 없었습니다. 데몬서비스를 직접 추가하면 가능할텐데... 귀찮군요. 그래서 도커 허브에서 CentOS systemd 이미지가 있는지 검색해봤습니다.
다행스럽게도... 있네요-_-; centos/systemd 이미지를 다운로드 받은 후 진행하도록 하겠습니다. Windows의 CMD를 실행하세요. 그리고 도커 허브 사이트에서 검색한 이미지를 다운로드 해줍니다. 아래 그림처럼요~
docker pull centos/systemd
다운로드가 완료되었으면 아래 명령으로 실행하세요. 현재는 이미지를 만드는 작업이기 때문에 --rm 옵션은 제거했습니다.
docker run -it --name NGMsoftware centos/systemd /bin/bash
컨테이너가 정상적으로 실행되었는지 확인해보세요. 아래 그림과 같이 트레이의 도커에서 대쉬보드를 클릭하세요.
아래와 같이 NGMsoftware 컨테이너가 실행중인걸 알 수 있습니다.
개발에 필요한 그룹 패키지를 설치하세요.
yum groupinstall "Development Tools" -y
yum은 CentOS에서 패키지 설치 및 종속성을 관리해주는 프로그램입니다. 보통 rpm(Redhat Package Manager)을 사용하고 있을테고요. CentOS에서는 yum(Yellodog Updater Modified)을 사용합니다. 아무튼~ 패키지를 설치하고 종속성을 관리한다고 생각하면 됩니다. 윈도우의 Nuget도 이와 같은 방식이므로 윈도우 개발자도 Nuget 생각하면 쉽게 이해할 수 있을겁니다. 위 커멘드에서 -y 옵션은 패키지를 설치하면서 사용자에게 묻는 질문을 모두 yes로 하겠다는 뜻입니다. 따라서 패키지 설치가 완료될때까지 자동으로 넘어가게 됩니다.
디펜던시(종속성)까지 정상적으로 처리가 되었습니다. 이제 cpp를 리눅스 환경에서 컴파일할 수 있는 패키지를 설치해야 합니다. 보통 따로 하나씩해도 되지만, 한번에 묶어서 설치해도 문제는 없습니다. git에서 받은 소스를 빌드해주는 cmake와 gcc(g++가 추가로 필요할수도 있음), gtk2-devel가 설치됩니다. 그리고 numby(다차원 배열을 처리할 수 있도록 지원하는 파이썬 패키지)와 설치한 패키지들의 가상 공유 경로를 관리하는 pkconfig도 설치해야 합니다. 이외에도 필요한 여러가지 것들이 더 있지만, 추가하지는 않도록 합니다.
yum install cmake gcc gtk2-devel numpy pkconfig -y
wget를 설치하세요. wget은 http 또는 ftp 통신을 사용해 서버에서 파일 또는 콘텐츠를 다운로드할 때 사용하는 프로그램입니다.
yum install wget -y
사용자의 홈 디렉토리로 이동하세요. 그리고 opencv 3.4 버전을 다운로드 후 압축을 풀어줍니다.
cd
wget https://github.com/opencv/opencv/archive/3.4.0.zip
unzip 3.4.0.zip
OpenCV 3.4를 설치하고 컴파일하세요~
cd opencv-3.4.0
mkdir build
cd build
cmake -D CMAKE_BUILD_TYPE=DEBUG -D CMAKE_INSTALL_PREFIX=/usr/local ..
컴파일은 시간이 좀 오래 걸립니다. 잠시 기다리면 아래와 같은 화면을 볼 수 있습니다.
make
make install
패키지 콘피그를 수정해서 필수 변수를 구성해야 합니다.
export PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/lib64/pkgconfig/
echo '/usr/local/lib64/' >> /etc/ld.so.conf.d/opencv.conf
ldconfig
마지막으로 OpenCV가 정상적으로 컴파일되고 설치되었는지 테스트합니다. 테스트는 건너뛰어도 되고, 확인이 되면 Ctrl+C를 눌러서 취소할 수 있습니다.
cd
git clone https://github.com/opencv/opencv_extra.git
export OPENCV_TEST_DATA_PATH=/root/opencv_extra/testdata
cd /root/opencv-3.4.0/build/bin
ls
./opencv_test_photo
여기까지해서 CentOS에 OpenCV설치가 완료되었습니다. 이제 YOLO를 설치해야합니다. 다크넷에서 클론받은 후 해당 폴더로 이동합니다. 그리고, darknet폴더안에 Makefile을 수정해주세요. "OPENCV=0"을 "OPENCV=1"로 변경 후 저장하세요.
cd
git clone https://github.com/pjreddie/darknet
cd darknet
vi Makefile
다크넷을 컴파일 합니다. (뒤에 -j2의 숫자는 프로세스의 개수입니다. 이 숫자는 grep -c processor /proc/cpuinfo 명령으로 최대 개수를 알 수 있습니다.)
make -j2
YOLO에서 제공하는 학습이 완료된 weight파일을 이용해서 테스트를 해봅니다.
wget https://pjreddie.com/media/files/yolov3.weights
이제 다크넷을 실행해보세요. 아래 그림과 같이 샘플 이미지에서 dog, truck, bicycle이 검출 되었습니다.
./darknet detect cfg/yolov3.cfg yolov3.weights data/dog.jpg
원본 이미지는 아래 그림입니다. 강아지와 자전거 그리고 트럭이 하나 있네요.
인식한 결과 이미지입니다.
다음에는 원하는 이미지로 학습하는 방법에 대해 알아보도록 하겠습니다. 이렇게해서 docker에 CentOS를 설치하고, OpenCV와 Darknet의 YOLO까지 셋팅했습니다. 혹시라도 이 예제를 테스트하고 싶으신분은 아래 이미지 파일을 다운로드 받고 테스트 해보시기 바랍니다.
감사합니다.
- 이전글Docker Image 사용하기. (NGMsoftware YOLO) 20.07.31
- 다음글docker에 CentOS 설치하기. 20.07.29