PINTOさんの「TensorflowLite-bin」を使ってみる
最速にして、最狂。ビルドジャンキーのPINTOさん。最速を目指して、日夜TensorFlowのビルドに励んで、バイナリをみんなに提供し続ける素晴らしい方です。いつも凄いなと思ってみていたものの、Qiitaの記事を読んだだけで震えてしまい、ほとんどその恩恵にあずかれていませんでした。
そんなPINTOさんの凄さを少しでも感じるために、PINTOさんが作ってくださった成果物を簡単に試してみる方法をまとめました。この凄さを広めないのは、世の中の損失と思い使命感(?)をもって記事書きました。
今回使用するのは、PINTOさん謹製のリポジトリ「TensorflowLite-bin」です。Raspberry Piにお手軽に「TensorFlowLite」をインストールして、軽量化された爆速したモデルを動かせる素晴らしいリポジトリです。
正直、最初はRaspberry PiでTensorFlowLiteが動くかどうかすらわかってなかったのですが、優しいフォロワーさんに教えていただきました。
はい。TensorFlow Lite動きます。@PINTO03091さんが公開しているTensorflow Lite binをインストールするのがいいと思います。https://t.co/H6D39u58ck
— nb.o (@Nextremer_nb_o) December 3, 2019
経験上、物体検出やSegmentation(Deepab)がそれなりに動作します。
(IFがTF-Lite専用のモデルの種類があったりとややこしいですが...)
Raspberry Piで「TensorFlowLite-bin」を動かす方法
Raspberry Piセットアップ
Raspberry Pi 4を使っていますが、3でも動くと思います。セットアップは以下記事を参照ください。
Raspberry Pi 4のディープラーニングで画像認識する環境をゼロから1時間で構築する方法
上記記事のRaspbian初期設定までを完了させて下さい。TensorFlowのインストールは不要です(この後、TensorFlowLiteをインストールするので)。
カメラでディープラーニングを楽しみたい場合は、Raspberrypi カメラモジュールかUSBカメラを用意して下さい(とりあえず試すだけならカメラ無しでもOKです)。
TensorFlow Liteセットアップ
PINTOさんのリポジトリのREADME通りです。以下実行しましょう。
$ sudo apt update
$ sudo apt install -y swig libjpeg-dev zlib1g-dev python3-dev python3-numpy unzip wget python3-pip curl git cmake make
$ wget https://github.com/PINTO0309/TensorflowLite-bin/raw/master/1.15.0/tflite_runtime-1.15.0-cp37-cp37m-linux_armv7l.whl
$ sudo pip3 install --upgrade tflite_runtime-1.15.0-cp37-cp37m-linux_armv7l.whl
Open CVセットアップ
Python3用のOpenCVをインストールします。私が自作したセットアップスクリプトを使用するのが比較的簡単です。以下コマンド実行して下さい。数分でセットアップされます。
$ git clone https://github.com/karaage0703/raspberry-pi-setup
$ cd raspberry-pi-setup
$ ./setup-opencv-raspbian-buster.sh
物体検出の動作確認
これでセットアップは完了です。以下コマンドで動作確認をしてみましょう。今回は、この後Raspberry Piカメラモジュールで動かす関係上、PINTOさんのリポジトリをforkした私のリポジトリをcloneします。 PRがマージされたのでPINTOさんのリポジトリを使います。
$ cd && git clone https://github.com/PINTO0309/TensorflowLite-bin
$ cd ~/TensorflowLite-bin
$ python3 mobilenetv2ssd.py
以下のように検出結果が表示されればOKです。
time: 0.11018490791320801
[[(124, 231), (315, 544), 0.97265625, 'dog'], [(114, 132), (564, 429), 0.953125, 'bicycle'], [(461, 81), (696, 172), 0.87890625, 'car']]
coordinates: (124, 231) (315, 544). class: "dog". confidence: 0.97
coordinates: (114, 132) (564, 429). class: "bicycle". confidence: 0.95
coordinates: (461, 81) (696, 172). class: "car". confidence: 0.88
実行したディレクトリに、以下のようなresult.jpg
という画像が生成されます。確認してみましょう。
ワンちゃんと自転車が正しく検出されていますね。
カメラでの物体検出
いよいよカメラでの物体検出です。USBカメラの場合は、以下コマンドでカメラによる物体検出が動きます。
$ cd ~/TensorflowLite-bin
$ python3 mobilenetv2ssd-sync-usbcam.py
複数のUSBカメラがある場合は、以下のようにオプションでデバイスのナンバーを変えてみましょう。
$ cd ~/TensorflowLite-bin
$ python3 mobilenetv2ssd-sync-usbcam.py --usbcamno=1
Raspberry Piカメラモジュールで試す場合は、以下のオプションを設定してコマンド実行して下さい。
$ python3 mobilenetv2ssd-sync-usbcam.py --camera_type="raspi_cam"
まとめ
Raspberry PiでPINTOさん謹製「TensorFlowLite-bin」を使った爆速のエッジコンピューティングを試してみました。
PINTOさんのおかげで、試すだけなら楽々です!是非Raspberry Pi上での異次元スピードを体感してみて下さい。本当はモデルの軽量化までチャレンジしたかったのですが、環境・難易度・かかる時間含めて挫折いたしました…チャレンジしたい猛者は是非!
Raspberry Piでの応用例などは、ブログで公開していますので興味ある方はこちらもどうぞ!
追記
本記事の続きの記事です。
最速のディープラーニングモデルを求めて「PINTO_model_zoo」を探検してみる
PINTOさん記事・リポジトリ
RaspberryPi4/3のCPUで爆速DeepLearning (レアデバイスもあるよ)