JETSON TX2 Yolo 설치 및 Onboard camera 사용하기

반갑습니다. 이번글에서는 Jetson  Jetson 보드에 YOLO(v3)를 설치하고 관련 데모영상을 Onboard camera로 실행하는 방법까지 가장 쉽게 설명해보도록 하겠습니다.

 


YOLO 설치

 

 

 

YOLO는 Object Detection 모델로, CNN 기반의 실시간 객체인식을 장점으로 나타내고 있습니다.

 

참조 : https://pjreddie.com/darknet/yolo/

 

 

먼저 Jetson TX2를 켜서 터미널에 다음과 같이 입력합니다.

 

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

 

 

다음으로는 YOLO 자체에서 제공하는 Weights 파일이 존재하는데, YOLO는 두가지의 버전을 제공하고 있습니다. Weights는 YOLO로 사전 훈련된 가중치를 의미합니다. 다음과 같은 명령어를 입력하여 Weights 파일을 다운로드 합니다.

 

# 일반 YOLO weights 파일
wget https://pjreddie.com/media/files/yolov3.weights

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

 

 

YOLO 설치는 이것으로 매우 간단합니다. 하지만 CUDA, CUDNN 적용 및 onborad camera를 사용하기 위해서는 다음과 같이 추가적인 설정이 필요합니다.

 

 


 

OPENCVtx2 설치

 

https://like-edp.tistory.com/entry/Jetson-tx2-%EC%B4%88%EA%B8%B0-OS-%EC%84%A4%EC%B9%98-%EB%B0%A9%EB%B2%95

 

Jetson tx2 초기 OS 설치 방법

반갑습니다. 이번 글에서는 Jetson tx2 보드에 대해서 초기에 설치하는 방법을 소개해드리려 합니다. 이 방법은 문제가 생겨서 공장초기화를 하려고 할때도 똑같이 적용이 가능하기 때문에 참고하시면 좋을 것 같..

like-edp.tistory.com

 

 

이전 글에서 설명드렸던 것처럼, SDK manager를 사용하여 jetpack 설치를 하셨던 분들이라면 기존 opencv 파일이 설치되어 있을겁니다.

 

 

하지만 기존에 설치되어 있는 버전은 사용하지 않을 것이기 때문에 제거하거나 그대로 두고 새로운 opencv 파일을 설치해보겠습니다.

 

 

다음과 같은 명령어를 사용하여 opencvtx2 를 설치합니다. opencvtx2는 Onboard camera를 사용할 수 있게끔 비디오 형식을 지원하게 수정해놓은 것으로 보입니다. 이 opencv 버전은 3.4.0으로 되어있습니다.

 

git clone https://github.com/Alro10/OpenCVTX2

설치가 다 되면 Downloads 폴더에 저장된 파일을 압축해제 시킵니다.

 

 

이후 다음과 같은 명령어를 입력하여 opencv를 빌드합니다.

 

cd OpenCVTX2

./buildOpenCV.sh

 

 

혹시 bash 파일이 실행되지 않고 문제가 발생한다면, buildOpenCV.sh 파일을 다음과 같이 설정합니다.

 

1. buildOpenCV.sh 파일 우클릭하여 properties 진입.

2. permissions 탭에서 Execute 체크

 

 

 

 

sh 파일이 진행이 완료 되면 다음과 같은 명령어를 입력하여 진행합니다.

 

cd opencv/build

make -j4

 

 

이렇게하면 opencvtx2를 설치를 완료했습니다. 나중에 새롭게 빌드할 경우는 다음과 같은 명령어를 추가적으로 진행하면 됩니다.

 

cd opencv/build

sudo make install

 

 

이제 opencv 설치 버전을 확인해 보겠습니다. 명령어는 다음과 같습니다.

 

# 일반적인 opencv 버전확인 명령어
pkg-config --modversion opencv
# or
pkg-config --libs --cflags opencv

 

 

그러나 opencv version을 확인하려 pkg-config 명령어를 사용하면, 인식이 안되고 다음과 같은 말이 나옵니다.

 

 

Package opencv was not found in the pkg-config search path. Perhaps you should add the directory containing `opencv.pc' to the PKG_CONFIG_PATH environment variable No package 'opencv' found

 

 

이는 opencvtx2가 pkg-config에 설정되어 있지 않기 때문인데, 이 부분을 해결해야 YOLO 설치 시 Opencv 를 사용하여 make 할 수 있기 때문에 다음과 같은 부분을 추가적으로 진행합니다.

 

opencv.pc 파일의 위치를 찾아야 합니다. 이 위치는 opencvtx2가 설치되어 있는 위치를 찾아야 하므로, 일반적인 opencv 설치 경로와는 다릅니다. 

 

 

 

 

가장 중요한 부분입니다. 다음과 같은 명령어로 pkg-config에 환경변수를 설정해줍니다. 본 포스팅대로 진행했다면 /home/opencv/build/unix-install/opencv.pc 에 있습니다. 보드에서 GUI로 확인하면 찾기 쉽습니다.

 

export PKG_CONFIG_PATH=/path/to/the/file

# 사용 예시
export PKG_CONFIG_PATH=/home/opencv/build/unix-install/opencv.pc

 

 

다시 opencv 버전 확인 명령어를 치면 문제없이 확인이 됩니다.

 

 

 

 

참고로 opencv 4 버전부터는 pkg-config를 지원하지 않게끔 기본적인 설정이 되어 있습니다. 4 이상의 버전을 사용하고 싶다면 make 시에 OPENCV_GENERATE_PKGCONFIG=ON 이라는 옵션을 추가적으로 사용해서 빌드하시는걸 추천드립니다. 이런 옵션들은 CMakeLists.txt 에 저장되어 있습니다.

 

 

이제 다시 처음으로 돌아가서, darknet 폴더로 진입하여 Makefile을 수정합니다.

 

$ cd ~/Downloads
$ git clone https://github.com/pjreddie/darknet.git
$ cd darknet
$ vim Makefile

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

ARCH= -gencode arch=compute_53,code=[sm_53,compute_53] \
      -gencode arch=compute_62,code=[sm_62,compute_62]

#ARCH= -gencode arch=compute_30,code=sm_30 \
#      -gencode arch=compute_35,code=sm_35 \
#      -gencode arch=compute_50,code=[sm_50,compute_50] \
#      -gencode arch=compute_52,code=[sm_52,compute_52]
...

 

편집기를 사용하여 수정하거나 파일을 직접 열어서 수정하고 저장하셔도 됩니다.

GPU를 사용할것이라면 GPU=1 CUDNN=1 로 설정하고, 설치한 opencvtx2 버전을 사용할 것이라면 OPENCV=1로 설정합니다.

 

 

ARCH 부분은 tx2에 최적화 하기 위해서 수정합니다.

 

 

 

 

모두 수정해서 저장했으면 다음과 같이 make 합니다.

 

make -j4

 

 

이것으로 Onboard camera를 사용할 수 있는 YOLO 설치가 완료되었습니다.

 

 

일반적으로 YOLO가 잘 설치되었는지 확인해보려면 다음과 같이 데모를 실행해볼 수 있습니다. opencv는 감지되는 객체를 표시하는 것에 사용됩니다.

 

./darknet detector test cfg/coco.data cfg/yolov3.cfg yolov3.weights data/dog.jpg

 

 

다음으로 YOLO 모델을 실시간으로 Onboard camera를 사용하여 열어보는 방법은 다음과 같습니다.

 

# 일반 YOLO 데모 실행
./darknet detector demo cfg/coco.data cfg/yolov3.cfg yolov3.weights "nvarguscamerasrc ! video/x-raw(memory:NVMM), width=(int)1280, height=(int)720,format=(string)I420, framerate=(fraction)30/1 ! nvvidconv flip-method=0 ! video/x-raw, format=(string)BGRx ! videoconvert ! video/x-raw, format=(string)BGR ! appsink"
# Tiny 실행
./darknet detector demo cfg/coco.data cfg/yolov3-tiny.cfg yolov3-tiny.weights "nvarguscamerasrc ! video/x-raw(memory:NVMM), width=(int)1920, height=(int)1080, format=(string)NV12, framerate=(fraction)30/1 ! nvvidconv flip-method=0 ! video/x-raw, format=(string)BGRx ! videoconvert ! appsink"

 

 

tiny를 실행했을 때 약 12fps 정도 나오는 듯 하다.

 

 

카메라 형식은 명령어를 잘 읽어보면 수정할 수 있는 부분이 존재합니다. (출력화면 크기 조절 등). 지금까지 TX2 보드에서 Onboard camera를 사용해 YOLO를 실행해 봤습니다. 

 

 

 

TAGS.

Comments