#1.はじめに
AIってなにかしら憧れますよね。私もそろそろAIの勉強でも始めようかと思っています。
しかしAIを勉強する方法にもいろいろあって、よく使われる学習環境の筆頭といえばGoogle Colaboratoryです。ウェブブラウザさえあれば、重要な計算はクラウドで実行してくれるし、面倒な開発環境構築も不要とあって、もっともすぐれた学習環境だと思います。
しかし、今回はあえてRPiでやってみます。
というのも、最終的に目指すのがコンパクトなedge AI端末の制御だからです。
将来、5Gやそれ以上の高速なネットワーク環境が広く普及すれば、多くのAIはクラウド上で動作し端末がその結果を享受する、という使われ方が増えると思いますが、それまでの過渡期では端末側で推論を行うニーズも発生すると思われます。
それに、チープな計算能力しか持たないエッヂ環境で自律動作するロボットって格好いいとおもいませんか?
参考にさせていただくのは次の2つのサイトです。
PINTO様のgitではtensorflowliteのをRPi版にビルドしてくださっています。まさに神。
karaage様は本やblogで私の様なサルにもわかるようにAI実施事例を紹介していくださっています。まさに神。
神様が二人もいるのでサルも人に進化できそうなものですが、私はあまりもにサル過ぎて何もないたいらな平野でさえ躓きいてしまうよぼよぼじいさんなので、躓いた内容含めて覚書き。これを機にAIという輝かしいフロンティアへ歩き出せるといいな。
#2.早速やってく
OSは公式イメージャで焼いたRaspbianです。バージョンは次の通り。
$ uname -a
Linux raspberrypi 5.10.60-v7l+ #1449 SMP Wed Aug 25 15:00:44 BST 2021 armv7l GNU/Linux
まずは、パッケージの更新と作業用フォルダ作成です。Workspaceフォルダ配下で作業を進めます。venvとか使った方が良いかもだけど、raspiならmicrosdごと使い分けた方が楽かな。
$ sudo apt update
$ sudo apt upgrade
$ mkdir Workspacce
$ cd Workspace
次に画像処理のためのOpen CV(python版)をインストールします。
モジュールのほか、必要なライブラリファイルも併せてインストールしています。
$ sudo pip3 install opencv-python
$ sudo apt install libatlas-base-dev libjasper-dev libqt4-test
次に、ビルド済みのTFliteをダウンロードし、必要なモジュール類と合わせてインストールします。
$ sudo apt install swig libjpeg-dev zlib1g-dev python3-dev \
unzip wget python3-pip curl git cmake make
$ sudo pip3 install numpy==1.20.3
$ wget "https://raw.githubusercontent.com/PINTO0309/TensorflowLite-bin/main/2.5.0/download_tflite_runtime-2.5.0-cp37-none-linux_armv7l.whl.sh"
$ chmod 755 download_tflite_runtime-2.5.0-cp37-none-linux_armv7l.whl.sh
$ ./download_tflite_runtime-2.5.0-cp37-none-linux_armv7l.whl.sh
$ sudo pip3 install --upgrade tflite_runtime-2.5.0-cp37-none-linux_armv7l.whl
最後に、PINTO様のリポジトリをクローンしてデモを実行してみます。
$ git clone https://github.com/PINTO0309/TensorflowLite-bin
$ cd TensorflowLite-bin
$ python3 mobilenetv2ssd.py
うまく動くと/TensorflowLite-binの中にresult.jpgが作成されています。
ちなみに、次のエラーがが出ることがありますがnumpyのバージョンが合っていないためです。
RuntimeError: module compiled against API version 0xe but this version of numpy is 0xd
Traceback (most recent call last):
File "mobilenetv2ssd.py", line 4, in <module>
import cv2
File "/usr/local/lib/python3.7/dist-packages/cv2/__init__.py", line 5, in <module>
from .cv2 import *
ImportError: numpy.core.multiarray failed to import
2021/9/29時点でopencv-pythonのバージョンは4.5.3.56です。このバージョンをインストールするとnumpyの1.19がセットで入りますが、TFliteはnumpyのバージョン1.20.3を要求しています。
次のコマンドでnumpyを入れなおしてください。
$ sudo pip3 install numpy==1.20.3
#3.最後に
今回は神様お二人の言う通り実行しただけでした。
しかし、実行環境も関連するモジュールのバージョンアップなどでどんどん風化していくので、エラーを読んで解決するなかでいろいろ学ぶことが多くあります。
次はデモを動かすだけでなく、他のモデルをTFLiteに変換したり、自分でモデルを作成したりしてさらに理解を深めたいと思います。
※追記 なんとなんとkaraage神にこのエントリーを発見されてPINTO神の名前を間違えていたことを指摘されるという。。。神よ鎮まりたまへ orz