웬디의 기묘한 이야기

글 작성자: WENDYS
반응형

젯슨 나노 (jetson nano) darknet 신경망 오픈소스 프로젝트 YOLO v3 설치하기

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

 

해당 프로젝트는 Joseph Redmon이라는 개발자에 의해서 만들어진 오픈소스 신경망 프레임워크 프로젝트입니다.

공식 사이트는 위와 같으며, Github를 통하여 오픈소스 프로젝트를 확인할 수 있습니다.

그렇지만 업데이트가 된지 1년이 되었네요 그래서 아래 AlexeyAB Github를 추천드립니다. 아래의 AlexeyAB Github는 최근까지도 활발하게 개발이 진행되고 있으며, Windows 버전까지 포팅되어 다방면으로 매우 유용한 Github입니다.

 

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

 

자 이제 시작합니다.

 

젯슨 나노 (jetson nano) darknet YOLO v3 Install

터미널, PuTTY 등을 이용하여 젯슨 나노(jetson nano)에 darknet project를 설치하도록 하겠습니다.

원격보단 PuTTY를 이용한 SSH가 속도도 빠르고 편하여 저는 PuTTY를 이용하여 설치합니다.

 

현재 보고있는 환경은 JetPack 4.2.2 버전에서 진행 되었습니다.

JetPack의 최신버전 사용시 CUDA의 PATH, OpenCV 버전 등 설정이 다를 수 있습니다.

https://wendys.tistory.com/141

 

1. library 목록을 update 합니다.

sudo apt-get update

 

2. 기본으로 설치되어있는 CUDA Path를 export 합니다.

//
// ls /usr/local/ 명령어를 이용하여 cuda의 경로를 확인합니다.
// JetPack 4.2.2은 cuda-10.0 으로 나옴
//

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}}


//
// 최신버전은 cuda로 변경됨
//

export PATH=/usr/local/cuda/bin${PATH:+:${PATH}}
export LD_LIBRARY_PATH=/usr/local/cuda/lib64${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}

젯슨 나노(jetson nano)는 기본적으로 NVIDIA GPU를 사용하기 때문에 CUDA가 설치되어있습니다.

그렇기에 YOLO 사용 시 CUDA를 사용하기 위해 path를 export 처리합니다.

CUDA의 설치 버전이 다를 수 있기때문에 /usr/local/ 경로에서 cuda의 설치된 버전 정보를 확인 후 다른경우 해당 버전값으로 입력을 하면 됩니다.

저같은경우엔 cuda-10.0이 설치되어있기때문에 위와같이 설정을 했습니다.

 

3. git을 이용하여 darknet 프로젝트 YOLO를 다운로드합니다.

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

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

위에서 설명한것처럼 원본 프로젝트를 사용하지 않고 AlexeyAB의 프로젝트를 다운받도록 하겠습니다.

해당 Github에는 darknet yolo에 대한 다양하고 간편한 프로젝트들이 있습니다.

 

 

 

 

4. darknet yolo v3 build를 위한 Makefile 설정하기

sudo vi Makefile

GPU=1
CUDNN=1
OPENCV=1

sudo vi Makefile 입력 시 대소문자를 꼭 구분해야 합니다!

리눅스를 몇 번 다루어보셨다면 vi에 익숙하시겠지만 처음인 분들은 조금 헷갈릴 수 있습니다.

 

vi에서 방향키는 hjkl <-- 네 개를 사용하지만 일반 방향키도 동작하니 문제없습니다.

해당 파일은 기본값이 모두 0으로 설정되어있기 때문에 사용하는 기능이 있다면 0 -> 1로 수정을 해주면 됩니다.

GPU=0 이 있으면 0에 커서를 대고 s를 누르면 값을 수정할 수 있습니다. 해당 값을 1로 수정하고 esc 키를 누릅니다.

해당 방법으로 다른 값도 수정을 하면 됩니다.

 

리눅스 VI 단축키 TIP

s : 해당 위치에 있는 값 변경

i : 해당 위치에 값 삽입 (insert)

a : 해당 위치 다음에 값 삽입 (append)

u : 작업 취소 (undo)

 

모든 변경이 완료되었으면 : (colon)를 누르고 wq! 입력 후 엔터! 를 입력합니다 (write, quit, !묻지않음)을 의미합니다.

: (colon)을 누르면 화면 제일 하단에 입력할 수 있도록 변경됩니다. 이때 입력하면 됩니다.

 

 

 

 

5. darknet yolo build

make

이제 진짜 빌드가 시작됩니다!

warning level 메시지는 신경 쓰지 않아도 됩니다.

 

 

 

 

 

 

 

빌드가 완료되었다면 ls를 치면 darknet이라는 binary 파일이 생성되어있을 겁니다.

준비가 완료되었다면! 이제 샘플을 한번 돌려보겠습니다.

 

6. 젯슨 나노(jetson nano) darknet YOLO v3 sample

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

YOLO에 기본 샘플들이 제공됩니다. 그중 가장 많이들 보셨을법한 댕댕이와 트럭 자전거를 검출하는 샘플을 돌려보도록 하겠습니다. 가장 흔하게 볼 수 있는 샘플이며, 이미지는 전혀 연관없는 다른 이미지로 해도 상관없습니다.

다른 이미지에서는 다른 Object를 검출할 것 입니다.

아까 다운받은 yolov3.weights는 샘플로 학습된 데이터이며, 실제 작업할때는 직접 학습을 진행한 후 작업을 해야 인식률을 높힐 수 있습니다.

 

 

 

 

 

 

 

결과를 보게 되면 검출 시간은 547.471000 ms가 걸렸고

bicycle, dog, truck 각각에 대한 score가 검출된 것을 확인하실 수 있습니다.

이 정확도는 샘플이기 때문에 이 정도로 높지 실제 내가 원하는 데이터를 돌려보면 오탐률이 좀 있습니다.

 

UI가 있는 화면에서 보시게 되면 아래와 같이 Round Box가 표시됩니다.

 

 

 

 

* 젯슨 나노(jetson nano) YOLO v3 sample을 동작시키는데 전원이 꺼진다면?!

저도 처음에 샘플만 돌리면 전원이 꺼져버리는 현상을 겪었습니다.

USB를 많이 꼽은 것도 아니고 모니터를 꼽은것도 아닌데 말이죠...

문제는 다름 아닌 전원이었습니다!

 

처음엔 Micro USB 5V 2.1A를 가지고 사용을 했는데, YOLO v3 Tiny라는 경량화 샘플은 괜찮은데 기본 샘플을 돌리면 전원이 꺼져버리는 현상이 있었습니다.

 

결국 동그란 단자 DC 5V 4A짜리로 변경했습니다. 4A의 기준은 기판 뒤를 보니 MAX 4A라고 써져있습니다.

젯슨 나노(jetson nano) 설명서에는 Micro USB 2.0A 이상이면 동작 가능하다고 되어있으나 그건 기본 동작 얘기고 YOLO 등 헤비 한 작업을 진행하게 되면 일반적으로 최소 2.5A이상은 되어야 한다고 합니다.

 

 

최대 성능으로 더욱 빠른 사용을 위해선 아래 글을 읽어주세요~

https://wendys.tistory.com/167

 

[AI] 젯슨 나노(Jetson Nano) 명령어 하나로 최대 성능으로 사용하기

젯슨 나노 전원모드 변경하여 최대 성능으로 사용하기 젯슨 나노(Jetson Nano)에는 두가지 전원 모드가 존재합니다. Micro USB 전원을 이용한 5W 모드와 5V 아답타를 이용한 10W모드를 각각 설정할 수 있습니다...

wendys.tistory.com

 

반응형