Coral USB Accelerator 셋업 및 테스트

Updated:

지난 글에서 구글의 머신러닝 용 Edge TPU를 장착한 Coral Dev Board와 USB Accelerator 출시 뉴스와 개봉기를 소개했습니다.

지난 글에서 이어서 Coral USB Accelerator를 라즈베리파이에 연결하고 초기 설정을 해보겠습니다. 설정이 완료되면 라즈베리파이에서 구글이 제공한 머신 러닝 모델을 구동해서 결과를 확인할 수 있습니다.

  • 호스트 환경 : Raspberry Pi 3 Model B+ (OS는 Raspbian)
  • Edge TPU 장치 : Coral USB Accelerator

그럼 초기 설정과 샘플 모델 구동을 하나씩 살펴보겠습니다.

1. Coral USB Accelerator 셋업하기

라즈베리파이에서 Coral USB Accelerator를 사용하기 위한 셋업을 진행합니다. 많은 부분이 스크립트로 자동화되어 있기 때문에 사용자가 신경쓸 부분이 많지 않습니다.

먼저, wget 명령어를 사용하여 Edge TPU용 런타임 및 파이썬 라이브러리 압축파일을 다운로드 합니다. 파일 다운로드가 완료되면, 압축 해제 후에 해당 폴더로 이동해봅니다.

#!/bin/bash
pi@raspberrypi:~ $ wget http://storage.googleapis.com/cloud-iot-edge-pretrained-models/edgetpu_api.tar.gz
pi@raspberrypi:~ $ tar xzf edgetpu_api.tar.gz
pi@raspberrypi:~ $ cd python-tflite-source

그리고 설치 스크립트를 실행합니다. 스크립트를 실행하면 최대 동작주파수를 사용할 것인지에 대한 물음이 나옵니다. 워닝을 대충 읽어보면 계산 로드에 따라서 TPU Accelerator가 뜨거워질 수 있으니 조심하라고 나옵니다. 보통 동작주파수로 사용하려면 주위온도가 35도 이하인 곳에서 사용하고, 최대 동작주파수로 사용하려면 온도가 25도 이하인 곳에서 사용하라고 권고합니다. 아마도 Coral USB Accelerator 자체에 발열 제어(Thermal management) 기능이 없는 것 같입니다. 최대 동작주파수를 사용하려면 y를 누르고, 아니면 n으로 응답합니다.

#!/bin/bash
pi@raspberrypi:~/python-tflite-source $ bash ./install.sh
./platform_recognizer.sh: line 13: warning: command substitution: ignored null byte in input
Recognized as Raspberry Pi 3 B+!
Warning: During normal operation, the Edge TPU Accelerator may heat up, depending
on the computation workloads and operating frequency. Touching the metal part of the
device after it has been operating for an extended period of time may lead to discomfort
and/or skin burns. As such, when running at the default operating frequency, the device is
intended to safely operate at an ambient temperature of 35C or less. Or when running at
the maximum operating frequency, it should be operated at an ambient temperature of
25C or less.

Google does not accept any responsibility for any loss or damage if the device is operated
outside of the recommended ambient temperature range.
.............................................................
Would you like to enable the maximum operating frequency? Y/Ny
Using maximum operating frequency.
...
Using /usr/lib/python3/dist-packages
Finished processing dependencies for edgetpu==1.2.0
pi@raspberrypi:~

Edge TPU를 사용할 준비를 모두 마쳤습니다. 이제 Coral USB Accelerator를 USB 케이블로 연결합니다. 이미 케이블을 연결해둔 상태였다면 해체했다가 다시 연결합니다. udev 인식이 필요하기 때문에 설치가 종료되고 난 후에 USB 케이블을 연결해야 합니다.

이제 테스트 삼아 샘플 모델을 구동해 볼 차례입니다.

2. 테스트-샘플 모델 구동하기

Edge TPU를 사용을 위해 미리 구글에서 사전 컴파일(pre-compiled)한 샘플 모델을 공개해두었습니다. 이 모델들을 사용하면 바로 Edge TPU를 사용해 볼 수 있습니다. 모델들은 모두 Quantized 타입의 TensorFlow Lite 모델입니다.

구글에서 공개한 사전 컴파일 모델의 전체 데이터는 Coral - Models 페이지에서 확인할 수 있습니다.

2.1 샘플 모델-분류(Classification) 구동하기

첫번째 테스트할 샘플 모델은 MobileNet V2를 사용한 새 분류입니다. 아래는 사전 컴파일(pre-compiled) 모델에 대한 정보입니다. label 파일을 확인해보니 964개의 새 종류가 학인되네요.

MobileNet V2 (iNat birds)
Recognizes 900+ types of birds
Dataset: iNaturalist
Input size: 224x224

이제 설치를 진행한 edgetpu 폴더를 이용해서 아래처럼 model과 label 그리고 분류 테스트를 할 새 사진을 인자로 classify_image.py를 호출합니다.

#!/bin/bash
pi@raspberrypi:~ $ cd python-tflite-source/edgetpu
pi@raspberrypi:~ $ python3 demo/classify_image.py \
--model test_data/mobilenet_v2_1.0_224_inat_bird_quant_edgetpu.tflite \
--label test_data/inat_bird_labels.txt \
--image test_data/parrot.jpg
W0330 13:47:41.392675     839 package_registry.cc:65] Minimum runtime version required by package (5) is lower than expected (10).
---------------------------
Ara macao (Scarlet Macaw)
Score :  0.613281
---------------------------
Platycercus elegans (Crimson Rosella)
Score :  0.152344
pi@raspberrypi:~ $

Ara macao (Scarlet Macaw)가 Socre가 제일 높게 나왔네요. 사전을 찾아보니 Ara macao (Scarlet Macaw)는 금강앵무라고 하네요. 실행 시 나오는 Warning은 아래 3.3 Warning 메시지 출력을 참고하세요.

테스트에 사용된 parrot.jpg는 테스트용 사진으로 test_data 폴더안에 있습니다.

앵무새를 제대로 인식했네요. 이번에는 인터넷에서 구해본 새 사진으로 테스트를 해보겠습니다.

출처 : https://wikimedia.org

#!/bin/bash
pi@raspberrypi:~ $ cd python-tflite-source/edgetpu
pi@raspberrypi:~ $ python3 demo/classify_image.py \
--model test_data/mobilenet_v2_1.0_224_inat_bird_quant_edgetpu.tflite \
--label test_data/inat_bird_labels.txt \
--image test_data/test.jpg
W0331 09:38:46.778857    1036 package_registry.cc:65] Minimum runtime version required by package (5) is lower than expected (10).
---------------------------
Numida meleagris (Helmeted Guineafowl)
Score :  0.902344
pi@raspberrypi:~

Numida meleagris가 나왔습니다. 뭔지 모르겠지만, 사진을 구한 쪽의 소개를 보니까 정답이 맞네요. 새 종류는 호로새라고 합니다.

2.2 샘플 모델-얼굴 인식(Object Detection) 구동하기

두번째 테스트할 샘플 모델은 MobileNet SSD V2를 사용한 Obeject detection, 세부적으로 얼굴 인식입니다. 아래는 사전 컴파일(pre-compiled) 모델에 대한 정보입니다.

MobileNet SSD v2 (Faces)
Detects the location of human faces
Dataset: Open Images v4
Input size: 320x320
(Does not require a labels file)

이제 설치를 진행한 edgetpu 폴더를 이용해서 아래처럼 model과 분류 테스트를 할 사진을 인자로 object_detection.py를 호출합니다. 이 경우는 label 정보는 없습니다.

#!/bin/bash
pi@raspberrypi:~ $ cd python-tflite-source/edgetpu
pi@raspberrypi:~ $ python3 demo/object_detection.py \
--model test_data/mobilenet_ssd_v2_face_quant_postprocess_edgetpu.tflite \
--input test_data/face.jpg \
--output ~/detection_results.jpg
W0330 14:06:28.399533    1317 package_registry.cc:65] Minimum runtime version required by package (5) is lower than expected (10).
-----------------------------------------
score =  0.996094
box =  [474.22854804992676, 38.03488787482766, 738.8013491630554, 353.5309683683231]
-----------------------------------------
score =  0.992188
box =  [205.4297697544098, 110.28378465056959, 487.75309658050537, 439.73802454331343]
-----------------------------------------
score =  0.832031
box =  [6.2277887016534805, 182.35811898071842, 127.13575917482376, 326.5376813379348]
-----------------------------------------
score =  0.5
box =  [859.8422718048096, 213.5472493581642, 1008.978108882904, 383.9367261515483]
pi@raspberrypi:~ $

실행 결과로 인식된 얼굴 영역을 좌표로 보여줍니다. output 옵션을 지정하면 결과를 이미지 파일로 저장하여 줍니다. 테스트에 사용한 face.jpg 파일은 date_data 폴더안에 있습니다. 얼굴을 인식한 이미지를 결과를 보면 아래와 같습니다.

개인 사진으로도 추가 테스트를 해보니 상당히 인식을 잘하고 있습니다.

3. 설치 에러 해결

3.1 Coral USB Accelerator 인식 불가

Coral USB Accelerator 설치를 완료하고 실행했는데, TPU context를 찾지 못하면 USB 장치 인식을 하지 못한 경우입니다.

#!/bin/bash
pi@raspberrypi:~ $ python3 demo/classify_image.py \
--model test_data/mobilenet_v2_1.0_224_inat_bird_quant_edgetpu.tflite \
--label test_data/inat_bird_labels.txt \
--image test_data/parrot.jpg
ERROR: Failed to retrieve TPU context.
ERROR: Node number 0 (edgetpu-custom-op) failed to prepare.

Failed in Tensor allocation, status_code: 1
Aborted
pi@PI3-BP-LAB:~/samba/python-tflite-source/edgetpu $

USB 장치 연결을 다시하거나 재부팅을 시도해보세요. 그래도 문제가 해결되지 않으면 사용자 계정에 plugdev system group에 대한 권한이 있나 확인해보세요. 권한이 없어서 USB 장치에 대한 접근을 못하는 경우인지 점검해봐야 합니다.

3.2 라즈베리파이 feh 명령어 미설치

object_detection.py의 경우 결과 이미지를 보여주게 되어 있는데, 라즈베리파이의 경우는 feh 명령어를 사용합니다. 그래서 라즈베리파이에 feh가 설치되어 있지 않으면 에러가 발생합니다.

No such file or directory: 'feh'

아래처럼 feh 명령어를 apt로 실행한 후에 다시 시도해봅니다.

#!/bin/bash
pi@raspberrypi:~ $ sudo apt install feh

3.3 Warning 메시지 출력

edgetpu_api를 사용하면 아래 Warning 메시지가 출력되는 경우가 있는데, 결과물에 영향을 주는 심각한 에러는 아닌 것으로 보입니다. 테스트 결과 결과물이 잘 나오고 있는 상태입니다.

W0330 13:47:41.392675     839 package_registry.cc:65] Minimum runtime version required by package (5) is lower than expected (10).

향후 구글 측에 관련 정보 업데이트가 있을지 모니터링 해보겠습니다.

이렇게 Coral USB Accelerator를 셋업해보고 구글에서 제공하는 사전 모델들을 사용해서 테스트를 진행해보았습니다. 설치 과정이 편하게 되어 있어서 만약 산업 현장에서 사용한다고 하면 큰 무리가 없이 설치를 할 수 있지 않을까 싶습니다. 사용처에 맞는 학습 데이터만 다시 트레이닝을 진행하면, 제품 분류나 배송 분류 같은 사용처에 사용하기는 무리가 없지 않을까 싶습니다. 이런 분류 작업에는 머신 러닝을 사용하는 산업 현장이 곧 나올꺼 같습니다. 물론, 대기업 현장에서는 많이 사용하고 있지만 영세한 업체들도 적은 비용과 노력으로 머신 러닝을 할 수 있는 시대가 왔다는 의미입니다.

본 글의 내용은 Coral 튜토리얼 페이지를 참고하였습니다.


더 많은 라즈베리파이 이야기 Pi Guide 보러가기


Leave a Comment