현재 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
우선 YOLO 버전으로는 크게 두가지가 있습니다.
https://github.com/AlexeyAB/darknet
라즈베리파이나 젯슨 나노 보드에서 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버전으로 GPU사용하여 구동하였습니다. 13~14 프레임으로
평균 10프레임 초중반대를 뽑아내줍니다. 일반yolov3.weight파일로 진행시 1~4프레임 정도밖에 안나오는데
라즈베리파이에서는 엄두도 못내는 실시간 인식을 꽤 괜찮은 성능으로 구동시켜주네요..
지금까지 YOLO의 기본 설정방법 및 예제 실행에 대해 글을 작성해 보았습니다.
서투른 글 읽어주셔서 감사합니다.
참고사이트)
*YOLO를 처음 접할때 어려웠던 부분이 많은데 몇년전 게시물임에도 불구하고 꾸준히 댓글로 질문들에 답변해주시고 계십니다.
'Jetson Nano' 카테고리의 다른 글
[OpenCV] Jetson nano에 OpenCV 3.4 설치 (0) | 2020.02.28 |
---|---|
[NVIDIA]Jetson nano OS 설치 (8) | 2020.02.28 |