블로그 이미지
devtang
Instagram : @taebr0 devtaehyeong@gmail.com

calendar

1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30

Notice

2020. 2. 28. 23:57 Jetson Nano

현재 Jetson nano에 깔려있는 CUDA 10.0 , JetPack 4.3 , OpenCV 3.4 버전을 기준으로 작성하였습니다.

 

 

 

YOLO ?

YOLO(You Only Look Once)는 이미지 내의 bounding box와 class probability를 single regression problem으로 간주하여, 이미지를 한 번 보는 것으로 객체의 종류와 위치를 추측합니다. 아래와 같이 single convolutional network를 통해 multiple bounding box에 대한 class probablility를 계산하는 방식입니다.

YOLO의 대한 자세한 원리와 설명은 아래 사이트를 참조해주세요.

 

https://github.com/zeuseyera/darknet-kr/blob/master/2_YOLO/yolo.md

 

 

zeuseyera/darknet-kr

:kr: 다크넷(darknet): C로 작성한 신경망 공개소스. Contribute to zeuseyera/darknet-kr development by creating an account on GitHub.

github.com

 

 

우선 YOLO 버전으로는 크게 두가지가 있습니다.

 

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

라즈베리파이나 젯슨 나노 보드에서 AlexeyAB 버전이 원활히 구동되는 것을 확인했습니다. 

두 버전의 차이는 알아보니 pjreddie버전이 원래 yolo v3의 저자가 만든 버전이고, AlexeyAB버전은 

아직까지도 활발한 업데이트를 하고 있으며 연구 목적(학습할때 mapping,손실율 등) 을 알 수 있습니다.

저는 AlexeyAB버전으로 설치하였습니다.

 

우선 기본적으로 업데이트를 한번 진행해줍니다.

sudo apt-get update
sudo apt-get upgrade

또한 YOLO는 실시간 객체인식 시스템 중 하나로 꽤 무겁기 때문에 GPU를 이용하여 돌려야 합니다.

Jetson nano는 초기 OS설치시에 CUDA가 기본적으로 설치가 되어 있기 때문에 설치할 필요가 없으며

경로만 export해줍니다. 

export PATH=/usr/local/cuda-10.0/bin${PATH:+:${PATH}}

export LD_LIBRARY_PATH=/usr/local/cuda-10.0/lib64${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}

 

darknet 을 받아줍니다.

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

cd darknet

wget https://pjreddie.com/media/files/yolov3.weights

darknet에서는 coco data(COCO: Common Object in COntext)와 학습해 놓은 weights 파일을 제공하고 있는데, 

약 80개정도 사물을 학습해놓았습니다. 기본 제공해주는 데이터 파일로써, YOLO를 처음 접했을때 돌려보는 가장 기본적인 demo정도로 생각하면 됩니다. 추가적으로 Tensorflow Lite버전처럼 경량화된 샘플인 yolov3-tiny.weights 파일도 설치해주면 좋습니다.

wget https://pjreddie.com/media/files/yolov3-tiny.weights

이제 YOLO를 build하기 위해 Makefile을 vi 명령어를 통해 약간 수정해줍니다.

sudo vi Makefile

들어가면

GPU=1
CUDNN=1
OPENCV=1

이 세개부분이 원래 0으로 되어있으므로, 위에 사진처럼 1로 바꿔줍니다. 0쪽으로 방향키버튼을 통해 이동후 

s 버튼을 눌러 1로 변경후 ESC, 방향키버튼으로 이동후 s 버튼을 눌러 1로 변경후 ESC를 해줍니다.

 

*vi 명령어 

 

 

변경이 완료됬으면 Shift + ; ( : 콜론)누르고 wq! (쓰고 나가기) 를통해 vi창을 나갑니다.

명령어창으로 돌아와서 컴파일을 진행합니다.

make

이제 YOLO 설치는 끝이 났습니다. 정상적으로 설치되었는지 구동해보도록 하겠습니다.

 

간단한 사진예제 먼저 구동해보겠습니다.

./darknet detect cfg/yolov3.cfg yolov3.weights data/dog.jpg

tiny 버전으로 구동하고 싶다면 아래 명령어를 입력해줍니다. lite한 버전이라 위의 명령어보다 처리속도가 빨라요.

./darknet detect cfg/yolov3-tiny.cfg yolov3-tiny.weights data/dog.jpg

개와 자전거,트럭이 인식이 잘되는 것을 볼 수 있습니다.

사진이 정상적으로 인식 되는것으로 보아 YOLO가 잘 설치된 것 같습니다.

 

YOLO는 웹캠을 통해 출력되는 영상을 실시간으로 인식할 수 있습니다.

숫자 0으로 실행이 안되면 1로 바꿔서 해주시면 됩니다.

./darknet detector demo cfg/coco.data cfg/yolov3.cfg yolov3.weights -c 0

마찬가지로 tiny 버전으로 구동하고 싶으면 아래 명령어를 입력해줍니다. 

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

웹캠으로 실시간 인식한 구동 영상입니다.

 

tiny 버전으로 구동

위의 동영상은 tiny버전으로 GPU사용하여 구동하였습니다. 13~14 프레임으로

평균 10프레임 초중반대를 뽑아내줍니다. 일반yolov3.weight파일로 진행시 1~4프레임 정도밖에 안나오는데

라즈베리파이에서는 엄두도 못내는 실시간 인식을 꽤 괜찮은 성능으로 구동시켜주네요..

 

지금까지 YOLO의 기본 설정방법 및 예제 실행에 대해 글을 작성해 보았습니다.

서투른 글 읽어주셔서 감사합니다.

 

참고사이트)

*YOLO를 처음 접할때 어려웠던 부분이 많은데 몇년전 게시물임에도 불구하고 꾸준히 댓글로 질문들에 답변해주시고 계십니다. 

https://pgmrlsh.tistory.com/

 

개발자 이상현

Instagram:sh_lee77 머신비전, YOLO, 영상처리, Deep Learning, 딥러닝

pgmrlsh.tistory.com

 

'Jetson Nano' 카테고리의 다른 글

[OpenCV] Jetson nano에 OpenCV 3.4 설치  (0) 2020.02.28
[NVIDIA]Jetson nano OS 설치  (8) 2020.02.28
posted by devtang
2020. 2. 28. 16:51 Jetson Nano

제 나노 보드에 설치된 Jetson Nano Developer Kit image, CUDA 10.0, Jetpack 4.3 버전 기준으로 작성하였습니다.

 

우선 OpenCV 설치 전에 필요한 라이브러리 들을 설치해줍니다.

 

(참고) - pkg-config나 unzip 또는 cmake 같은 기본 도구들은 설치가 되어있는 상태에서 진행하였습니다.

위와 같은 문제는 구글 검색하면 쉽게 찾을수 있어요.

필요한 라이브러리

·pkg-config

·unzip

·cmake

·build-essential

 

버전 업데이트 및 업그레이드 설치를 해줍시다.

sudo apt-get update
sudo apt-get upgrade

OpenCV는 C++에비해 비교적 간결한 코드를 사용할 수 있는 python 을 지원합니다.

기본적으로 2.7이 설치되어있지만, numpy와 3버전대를 설치해줬습니다.

sudo apt-get install python2.7-dev python3-dev python-numpy python3-numpy

  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 
sudo apt-get install 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

한번에 설치하면 안되는 경우도 있어서 혹시나 오류가 발생하면 

sudo apt-get install libjpeg-dev

sudo apt-get install libpng-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

opencv라는 폴더를 만들고 폴더안에 opencv.zip 과 opencv_contrib.zip 을 다운받아줍니다.

중요한것은 opencv 와 opencv_contrib 버전이 동일해야 합니다. (3.4.0)

 

설치가 완료되면 압축을 풀기위해 아래와 같은 명령어를 입력해줍니다.

unzip opencv.zip
unzip opencv_contrib.zip

이제 빌드 및 설치를 위해 build폴더를 생성하여 빌드 준비를 합니다.

cd opencv-3.4.0
mkdir build
cd build

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 를 해줘야되는데 -j숫자(원하는 코어사용갯수)를 입력해줍니다.

-j4를 입력하게되면 코어4개를 다사용하므로 발열이 상당히 심합니다. (오류가 날 수도 있음)

쿨러나 보드를 식힐 수 있는 선풍기가 있을때 사용하는걸 추천합니다.

make -j4
make -j2

이과정에서 꽤 걸립니다!! 저는 -j4로 코어 다사용해서 돌렸는데도 50분정도 걸렸습니다.

발열도 심하고 굉장히 오래걸리니까, opencv 빌드중에는 보드 사용을 자제하는게 좋을것 같아요.

물론 엄청 느려져서 원활한 구동도 어렵습니다.

 

OpenCV 컴파일 결과물

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

이렇게 해서 OpenCV가 설치가 완료됬습니다.

다음 게시물은 YOLO설치 및 구동을 올릴 예정입니다.

posted by devtang
2020. 2. 28. 14:43 Jetson Nano

NVIDIA에서 수백만개의 지능형 시스템 구축을 할수 있는 초소형 컴퓨터 Jetson nano를 출시했습니다.

Jetson nano

 

Bringing the Power of AI to Millions of Devices

NVIDIA Jetson Nano enables the development of millions of new small, low-cost, low-power AI devices.

www.nvidia.com

가격은 99달러로 우리나라에서 약 12~13만원에 구매가 가능합니다.

학생들이나, 개발자, 발명가들이 합리적인 가격으로 최신 AI를 구동할 수 있게 됬습니다.

 

라즈베리파이와 마찬가지로 SD카드에 이미지를 구워 구동시킬 수 있으며,

기본적인 사양은 라즈베리파이보단 성능이 조금 뛰어납니다.

사양은 1.4GHz 쿼드 코어 ARM A57 CPU, 128 코어 NVIDIA Maxwell GPU 및 4GB RAM를 갖추고 있습니다.

 

 

또한 Jetson nano에는 40개의 GPIO핀이 있어서 LED,모터,센서 등과 연결할 수 있습니다.

단점으로는 와이파이가 지원이 안되서 동글을 사용하거나 랜카드를 사용해야합니다.

라즈베리파이와 마찬가지로 sd카드에 os를 갖추어 꽂아서 사용하게 되어있습니다.

OS를 설치하기 위해서는, 아래 사이트에서 Jetson Nano Developer Kit SD Card Image 를 설치해야합니다.

https://developer.nvidia.com/embedded/downloads

 

Jetson Download Center

Get downloadable documentation, software, and other resources for the NVIDIA Jetson ecosystem.

developer.nvidia.com

이미지 파일을 다운받아서 압축을 풀고 난후, Win32DiskImager를 이용하여 os 세팅을 해줍니다.

sd-blob-b01.img 

sd 카드리더기를 이용하여 Write 버튼을 눌러줍니다.

100%될때까지 기다려줍니다.

끝나고 완료되고 나면 왼쪽하단에 Done. 표시와 함께 디스크를 사용하기 전에 포맷해야 한다는 문구가 열개이상 뜨는데

이때 모두 취소버튼을 눌러줍니다.

 

이렇게 하면 SD카드에 우분투가 세팅이 완료됩니다. 이제 SD카드를 Jetson nano에 부착시켜줍시다.

 

마이크로 USB로도 전원 연결을 할 수 있지만, 전력이 낮아 꺼지게 될 가능성이 높습니다.

저는 무선 마우스,키보드, 와이파이 동글을 이용하고 있으므로 전력소모가 커 5V DC어댑터를 전원으로 연결시켰습니다.

 

초록색 NVIDIA 문구와 함께 부팅이 시작됩니다.

우분투 기본 환경 설정중입니다.

자 모든설정이 완료가되고 정상적으로 Jetson nano에 OS를 깔았습니다.

다음엔 OpenCV를 설치하는 포스팅을 게시하겠습니다.  

posted by devtang
prev 1 next