NGMsoftware

NGMsoftware
로그인 회원가입
  • 매뉴얼
  • 학습
  • 매뉴얼

    학습


    딥러닝 OpenCV와 Darknet Yolo 설치하기.

    페이지 정보

    본문

    안녕하세요. 엔지엠소프트웨어입니다. 이전 시간에 도커와 CentOS까지 설치를 완료했습니다. 몇가지 테스트하다보니 CentOS에서 systemd를 사용할 수 없어서 OpenCV를 설치할 수 없더라구요^^; 문제점을 해결하려고 찾다보니 init 데몬에서 systemd로 변경되었나봅니다. 아무튼, 문제는 systemctl을 사용해서 locale를 변경해야 yum으로 OpenCV를 설치할 수 있습니다. 그런데 이전 글에서 설명한 Clean CentOS로는 systemd를 실행할 수 없었습니다. 데몬서비스를 직접 추가하면 가능할텐데... 귀찮군요. 그래서 도커 허브에서 CentOS systemd 이미지가 있는지 검색해봤습니다.

    ulX7S7b.png

     

     

    다행스럽게도... 있네요-_-; centos/systemd 이미지를 다운로드 받은 후 진행하도록 하겠습니다. Windows의 CMD를 실행하세요. 그리고 도커 허브 사이트에서 검색한 이미지를 다운로드 해줍니다. 아래 그림처럼요~

    docker pull centos/systemd

    IjVrdWQ.png

     

     

    다운로드가 완료되었으면 아래 명령으로 실행하세요. 현재는 이미지를 만드는 작업이기 때문에 --rm 옵션은 제거했습니다.

    docker run -it --name NGMsoftware centos/systemd /bin/bash

    Q7U7MqO.png

     

     

    컨테이너가 정상적으로 실행되었는지 확인해보세요. 아래 그림과 같이 트레이의 도커에서 대쉬보드를 클릭하세요.

    0lAuwKU.png

     

     

    아래와 같이 NGMsoftware 컨테이너가 실행중인걸 알 수 있습니다.

    lotTxw5.png

     

     

    개발에 필요한 그룹 패키지를 설치하세요.

    yum groupinstall "Development Tools" -y

     

    yum은 CentOS에서 패키지 설치 및 종속성을 관리해주는 프로그램입니다. 보통 rpm(Redhat Package Manager)을 사용하고 있을테고요. CentOS에서는 yum(Yellodog Updater Modified)을 사용합니다. 아무튼~ 패키지를 설치하고 종속성을 관리한다고 생각하면 됩니다. 윈도우의 Nuget도 이와 같은 방식이므로 윈도우 개발자도 Nuget 생각하면 쉽게 이해할 수 있을겁니다. 위 커멘드에서 -y 옵션은 패키지를 설치하면서 사용자에게 묻는 질문을 모두 yes로 하겠다는 뜻입니다. 따라서 패키지 설치가 완료될때까지 자동으로 넘어가게 됩니다.

    9GXJIoT.png

     

     

    디펜던시(종속성)까지 정상적으로 처리가 되었습니다. 이제 cpp를 리눅스 환경에서 컴파일할 수 있는 패키지를 설치해야 합니다. 보통 따로 하나씩해도 되지만, 한번에 묶어서 설치해도 문제는 없습니다. git에서 받은 소스를 빌드해주는 cmake와 gcc(g++가 추가로 필요할수도 있음), gtk2-devel가 설치됩니다. 그리고 numby(다차원 배열을 처리할 수 있도록 지원하는 파이썬 패키지)와 설치한 패키지들의 가상 공유 경로를 관리하는 pkconfig도 설치해야 합니다. 이외에도 필요한 여러가지 것들이 더 있지만, 추가하지는 않도록 합니다.

    yum install cmake gcc gtk2-devel numpy pkconfig -y

    bamBGAK.png

     

     

    wget를 설치하세요. wget은 http 또는 ftp 통신을 사용해 서버에서 파일 또는 콘텐츠를 다운로드할 때 사용하는 프로그램입니다.

    yum install wget -y

    DaCOpf4.png

     

     

    사용자의 홈 디렉토리로 이동하세요. 그리고 opencv 3.4 버전을 다운로드 후 압축을 풀어줍니다.

    cd

    wget https://github.com/opencv/opencv/archive/3.4.0.zip

    unzip 3.4.0.zip

    rhirFaJ.png

     

     

    OpenCV 3.4를 설치하고 컴파일하세요~

    cd opencv-3.4.0

    mkdir build

    cd build

    cmake -D CMAKE_BUILD_TYPE=DEBUG -D CMAKE_INSTALL_PREFIX=/usr/local ..

    AX3eV4D.png

     

     

    컴파일은 시간이 좀 오래 걸립니다. 잠시 기다리면 아래와 같은 화면을 볼 수 있습니다.

    make

    make install

    b9WcfXQ.png

     

     

    패키지 콘피그를 수정해서 필수 변수를 구성해야 합니다.

    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

    mBhvSJ1.png

     

     

    여기까지해서 CentOS에 OpenCV설치가 완료되었습니다. 이제 YOLO를 설치해야합니다. 다크넷에서 클론받은 후 해당 폴더로 이동합니다. 그리고, darknet폴더안에 Makefile을 수정해주세요. "OPENCV=0"을 "OPENCV=1"로 변경 후 저장하세요.

    cd

    git clone https://github.com/pjreddie/darknet

    cd darknet

    vi Makefile

    jt2f9tt.png

     

     

    다크넷을 컴파일 합니다. (뒤에 -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

    a9UHuRE.png 

     

     

    원본 이미지는 아래 그림입니다. 강아지와 자전거 그리고 트럭이 하나 있네요.

    zHB7IkE.jpg

     

     

    인식한 결과 이미지입니다.

    flVsyPo.jpg

     

     

    다음에는 원하는 이미지로 학습하는 방법에 대해 알아보도록 하겠습니다. 이렇게해서 docker에 CentOS를 설치하고, OpenCV와 Darknet의 YOLO까지 셋팅했습니다. 혹시라도 이 예제를 테스트하고 싶으신분은 아래 이미지 파일을 다운로드 받고 테스트 해보시기 바랍니다.

    감사합니다.

    [ NGMsoftware - centos/yolo docker image download ]

    • 네이버 공유하기
    • 페이스북 공유하기
    • 트위터 공유하기
    • 카카오스토리 공유하기
    추천0 비추천0

    댓글목록

    profile_image

    레밍님의 댓글

    no_profile 레밍 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 작성일 Date

    ㅠㅠ 엄청 복잡하고 어렵네요  대단하십니다

    profile_image

    엔지엠소프트웨어님의 댓글

    엔지엠소프트웨어 쪽지보내기 메일보내기 홈페이지 자기소개 아이디로 검색 전체게시물 작성일 Date

    하나씩 따라하다보면... 잘 될거에요^^;

    profile_image

    문해님의 댓글

    no_profile 문해 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 작성일 Date

    재미있네요 좋은 정보 감사합니다