Help us understand the problem. What is going on with this article?

MacでCoral USB Acceleratorを動かす

Edge TPUで推論

イントロ

Coral USB AcceleratorはUSB 3.0のポートに挿す事で機械学習処理の推論処理をオフロードできるアクセラレーターです。

Google Reserachにより提供されており、DesktopCPU比でも10倍程度の速度向上が見込めるのでM1 Macを持っていなくても機械学習の推論処理を高速化できます。

初期はDebian系のOSしかサポートしていなかったのですが、既存モデルを使うだけならMacやWindowsでも動くようになっており、手元のMacで動かしてみます。

unnamed.jpg

基本

公式docに従ってサンプルを動かしていきます。
https://coral.ai/docs/accelerator/get-started/

Edge TPU Runtimeのインストール

curl -O https://dl.google.com/coral/edgetpu_api/edgetpu_runtime_20201204.zip
unzip edgetpu_runtime_20201204.zip
cd edgetpu_runtime
sudo bash install.sh
cd ..

pathにEdge TPU Runtimeのlocationを追加。shellを再起動

# ~/.bashrcに追加
# libedgetpu.1.dylibの読み込み
export LD_LIBRARY_PATH=/usr/local/lib:$LD_LIBRARY_PATH

アクセラレーターをUSBポートに挿します。

TnesorFlowのインストール

# virtualenvの作成. 3.8系はサポートしていない
pyenv local 3.7.4
python -m venv coral_accelerator
source coral_accelerator/bin/activate

pip install --upgrade pip
pip install tensorflow
pip install https://github.com/google-coral/pycoral/releases/download/release-frogfish/tflite_runtime-2.5.0-cp37-cp37m-macosx_10_15_x86_64.whl

分類のサンプルを動かします。

mkdir coral && cd coral
git clone https://github.com/google-coral/tflite.git
bash install_requirements.sh
python 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
----INFERENCE TIME----
Note: The first inference on Edge TPU is slow because it includes loading the model into Edge TPU memory.
14.4ms
4.4ms
4.3ms
4.7ms
4.4ms
-------RESULTS--------
Ara macao (Scarlet Macaw): 0.77734

無事インコをインコとして認識しました。

PyCoralで推論

2020/11の更新でPyCoral APIが発表されています。それに伴いEdge TPU Python libraryの使用は非推奨。

PyCoralも独立したrepositoryがあるのでそのサンプルも動かしてみます。

https://coral.ai/software/#pycoral-api

# macOS 10.15 Python 3.7
pip install https://github.com/google-coral/pycoral/releases/download/release-frogfish/pycoral-1.0.0-cp37-cp37m-macosx_10_15_x86_64.whl
git clone --recurse-submodules https://github.com/google-coral/pycoral
cd pycoral
git submodule init && git submodule update
$ python3 examples/detect_image.py   --model test_data/ssd_mobilenet_v2_coco_quant_postprocess_edgetpu.tflite   --labels test_data/coco_labels.txt   --input test_data/grace_hopper.bmp   --output ${HOME}/grace_hopper_processed.bmp
----INFERENCE TIME----
Note: The first inference is slow because it includes loading the model into Edge TPU memory.
32.00 ms
14.98 ms
15.08 ms
16.18 ms
16.02 ms
-------RESULTS--------
tie
  id:     31
  score:  0.83984375
  bbox:   BBox(xmin=227, ymin=419, xmax=292, ymax=541)
person
  id:     0
  score:  0.8046875
  bbox:   BBox(xmin=0, ymin=9, xmax=519, ymax=590)

grace_hopper_processed.jpg

$ python3 examples/semantic_segmentation.py \
>   --model test_data/deeplabv3_mnv2_pascal_quant_edgetpu.tflite \
>   --input test_data/bird.bmp \
>   --keep_aspect_ratio \
>   --output ${HOME}/segmentation_result.jpg

segmentation_result.jpg

所感

似たようなアクセラレーターとしてIntelのNeural Compute Stick 2があります. そちらはラズパイのような組み込み用のCPU比だと十分速度向上が見込めるようなのですが、Desktop CPU比だと負けるという話もあります。またNCS2で使用するのはマイナーなOpenVINOというIntel製の機械学習ライブラリー(複数backend選択できるラッパー)です。

一方Coral USB AcceleratorはTFLiteベースなので慣れ親しんだTensorFlowですね。発熱の問題もあるので全ての場合にEdge TPUの方がいいというわけではないのですが、組み込みでない汎用PC向けのアクセラレーターとしてはCoralの方が向いている気はしました。

hiromichinomata
スタートアップや上場企業で技術顧問をしています。ギター初心者
https://ja.algonote.com
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away