블로그 이미지
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 31

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. 25. 20:54 AI/TensorFlow Lite

*참고한 사이트는 게시글 하단에 남겨놓겠습니다.

 

 

Tensor Processing Unit

구글에서 Coral Edge TPU 라는 제품을 냈습니다.

 

Google Coral USB Accelerator

구글 코랄 USB 액셀레이터 / 컴퓨터에 꽂아 Google Edge TPU 보조프로세서로 기능하는 제품 / USB 3.0 C타입 / Google 클라우드와 호환 / 로컬 인공지능

www.devicemart.co.kr

 

USB 형식으로 컴퓨터에 꽂아 뉴럴 네트워크의 연산속도를 가속화 해주는 제품입니다.

컴퓨터 제품에 간단하게 꽂아서 쓸수 있어서 좋은점도 있지만, USB형식이라 라즈베리파이와 같은

싱글보드 컴퓨터에 호환이되는것이 흥미롭습니다.

 

되게 아담합니다. ( 소프트 점보 지우개 수준 )

Tensorflow Lite 버전밖에 지원이 되지 않지만 그래도 라즈베리파이에서 실시간 사물 인식을

꽤 높은 프레임으로 실행할 수 있어서 괜찮은 제품인 것 같습니다.

라즈베리파이에 USB를 꽂으면 기계에서 LED가 켜집니다.

 

라즈베리파이에 이용하려면 아래 3가지가 설치 되어있어야합니다.

(라즈베리파이가 지원되지만 Coral 공식 홈페이지에서는 3B+ 모델과 4 모델에만 테스트 했다고 합니다.)

 

1. Python 3.5 이상 설치

2. Edge TPU Runtime 설치

3. TensorFlow Lite 설치

 

1. Python 3.5 이상 설치

라즈베리파이 스트레치 버전(제 기준)에는 파이썬이 2.7.x 버전대로 설치되어 있으므로 아래와 같은 명령어로 파이썬을 설치해줍니다. 

sudo apt-get update
sudo apt-get install python3

 

2. Edge TPU Runtime 설치

coral에서 제공하는 클라우드 패키지를 라즈베리에 저장합니다.

echo "deb https://packages.cloud.google.com/apt coral-edgetpu-stable main" | sudo tee /etc/apt/sources.list.d/coral-edgetpu.list

curl https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -

sudo apt-get update

이제 TPU runtime을 설치합니다. 

표준 클럭으로 설치하려면 아래의 명령어를 입력하세요.

sudo apt-get install libedgetpu1-std

클럭을 최대로 높이고 설치하려면 아래의 명령어를 입력하세요. (라즈베리파이에 쿨러가 없다면 왠만하면 비추입니다.)

sudo apt-get install libedgetpu1-max

설치가  완료되면 Coral USB Accelerator를 라즈베리파이에 꼽고 Tensorflow Lite 설치를 합니다.

 

3. TensorFlow Lite 설치

 

라즈베리파이3 파이썬3.7.x 버전 이므로 아래와 같은 명령어를 입력하여 다운로드 합니다.

wget https://dl.google.com/coral/python/tflite_runtime-2.1.0.post1-cp37-cp37m-linux_armv7l.whl

다운로드 받은다음 pip 명령어로 설치합니다.

pip3 install https://dl.google.com/coral/python/tflite_runtime-2.1.0.post1-cp37-cp37m-linux_armv7l.whl

 

다른 버전의 TensorFlow Lite를 원하시면 아래 사이트를 참조하세요.

https://www.tensorflow.org/lite/guide/python

 

Python quickstart  |  TensorFlow Lite

Using TensorFlow Lite with Python is great for embedded devices based on Linux, such as Raspberry Pi and Coral devices with Edge TPU, among many others. This page shows how you can start running TensorFlow Lite models with Python in just a few minutes. All

www.tensorflow.org

 

이제 모든 설치가 완료되었으면, 정상적으로 구동이 되는지 확인해봅시다!

 

coral이라는 폴더를 생성하고 github에서 예제 코드를 받아옵니다.

mkdir coral &&  cd coral git clone https://github.com/google-coral/tflite.git

새(bird)를 분류하는 텐서플로우 기본 예제를 다운 받아옵니다.

cd tflite / python / examples / classification bash install_requirements.sh

parrot.jpg

파이썬으로 예제 그림을 추론할 수 있는지 돌려봅니다.

python3 classify_image.py \ 
--model models / mobilenet_v2_1.0_224_inat_bird_quant_edgetpu.tflite \ 
--labels models / inat_bird_labels.txt \ 
--input images / parrot.jpg

아래와 같이 나오면 TensorFlow Lite 가 정상적으로 설치됬습니다.

INFO: Initialized TensorFlow Lite runtime.
----INFERENCE TIME----
Note: The first inference on Edge TPU is slow because it includes loading the model into Edge TPU memory.
15.3ms
3.0ms
2.8ms
2.9ms
2.9ms
-------RESULTS--------
Ara macao (Scarlet Macaw): 0.76562

Ara macao가 무엇인고 찾아봤더니

금강앵무새라고 하네요. 사진보니 위의 예제 사진과 동일한 새입니다.

 

올바르게 설치된 것 같으니 이제는 사물인식 코드를 이용해서 실시간 웹캠으로 사물인식을 해보겠습니다.

 

https://github.com/google-coral/edgetpu/blob/master/examples/object_detection.py

 

google-coral/edgetpu

Source code for the Edge TPU API library. Contribute to google-coral/edgetpu development by creating an account on GitHub.

github.com

 

Lite버전임에도 불구하고 은근 정확도가 높습니다.

 

0  person
1  bicycle
2  car
3  motorcycle
4  airplane
5  bus
6  train
7  truck
8  boat
9  traffic light
10  fire hydrant
12  stop sign
13  parking meter
14  bench
15  bird
16  cat
17  dog
18  horse
19  sheep
20  cow
21  elephant
22  bear
23  zebra
24  giraffe
26  backpack
27  umbrella
30  handbag
31  tie
32  suitcase
33  frisbee
34  skis
35  snowboard
36  sports ball
37  kite
38  baseball bat
39  baseball glove
40  skateboard
41  surfboard
42  tennis racket
43  bottle
45  wine glass
46  cup
47  fork
48  knife
49  spoon
50  bowl
51  banana
52  apple
53  sandwich
54  orange
55  broccoli
56  carrot
57  hot dog
58  pizza
59  donut
60  cake
61  chair
62  couch
63  potted plant
64  bed
66  dining table
69  toilet
71  tv
72  laptop
73  mouse
74  remote
75  keyboard
76  cell phone
77  microwave
78  oven
79  toaster
80  sink
81  refrigerator
83  book
84  clock
85  vase
86  scissors
87  teddy bear
88  hair drier
89  toothbrush

89개의 객체가 학습되어있습니다. 가지고 놀다보면 꽤 재밌어요 ㅎㅎ

아래는 실시간 웹캠 영상입니다.

TensorFlow Lite를 이용한 사물 인식 영상으로 마무리 짓겠습니다.

 

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

 

참고사이트

https://coral.ai/docs/edgetpu/multiple-edgetpu/

https://coral.ai/docs/accelerator/get-started#2-install-the-tensorflow-lite-library

https://www.tensorflow.org/lite/guide/python

 

Python quickstart  |  TensorFlow Lite

Using TensorFlow Lite with Python is great for embedded devices based on Linux, such as Raspberry Pi and Coral devices with Edge TPU, among many others. This page shows how you can start running TensorFlow Lite models with Python in just a few minutes. All

www.tensorflow.org

 

Get started with the USB Accelerator | Coral

Learn how to set up the Coral USB Accelerator and run some demo code.

coral.ai

 

Run multiple models with multiple Edge TPUs | Coral

 

coral.ai

 

posted by devtang
prev 1 next