1.はじめに
Raspberry PiでAI推論をするとき、モデルの量子化と64bitOS化が良く効くと聞いていたので、Bullseyeで64Bit TFLite環境を作るぞー、おーーーー!
64bit化が良く効く例
その1 Raspberry Pi4 単体で TensorFlow Lite はどれくらいの速度で動く?
その2 Raspberry Pi4 単体で TensorFlow Lite はどれくらいの速度で動く?【2020年12月版】
※この記事を書き終えて、、、32bit版で環境を作った前回記事と全く同じやりかたで出来てしまいました。もったいないので成功した記録として公開しますが、代わり映えの無い内容です。
※2 タイトルを「Raspberry Pi OS Bullseye 64bitでTFLite環境高速化」から「Raspberry Pi OS Bullseye 64bitでTFLite環境構築」に変更しました。高速化したいから64bit環境作ったのは確かですが、高速化の検証を載せてなかったので。
2.Bullseye 64bitのSDを作る
2022/1/12現在、こちらに64bit版OS(2021-10-30-raspios-bullseye-arm64.zip)がありますのでダウンロードして解凍してRaspberry Pi ImagerでMicroSDに書き込みます。
初期設定等は32bit版と同様に済ませられます。
64bitで動いてることを確認。
$ getconf LONG_BIT
64
$ uname -a
Linux raspberrypi 5.10.63-v8+ #1459 SMP PREEMPT Wed Oct 6 16:42:49 BST 2021 aarch64 GNU/Linux
パッケージも取り合えず最新版にしておきます。
$ sudo apt update
$ sudo apt upgrade
3.OpenCVのインストール
OpenCVとTFLiteのruntimeはこの記事で紹介した方法で入れておきます。まずはOpenCV。
$ git clone https://github.com/luxonis/depthai.git
$ cd depthai
$ python3 install_requirements.py
Warningがちょこちょこ出ていたので心配ですが、とりあえずインポートして様子を見ます。
$ python
Python 3.9.2 (default, Feb 28 2021, 17:03:44)
[GCC 10.2.1 20210110] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import cv2
>>>
インポートできたので、USBカメラの画像も読めるか確認しておきます。
標準でThonnyが入っていたのでこのコードをコピペですぐ動きます。
import cv2
import time
capture = cv2.VideoCapture(0)
if capture.isOpened() is False:
raise IOError
start_time = time.time()
while(True):
try:
ret, frame = capture.read()
if ret is False:
raise IOError
elapsed_time = time.time() - start_time
start_time = time.time()
cv2.putText(frame,
"Elapsed Time : " + '{:.1f}'.format(elapsed_time * 1000) + "ms" + " / " + '{:.1f}'.format(1 / elapsed_time) + "fps" ,
(10, 30), cv2.FONT_HERSHEY_SIMPLEX, 1.0, (0, 255, 0), 2,
cv2.LINE_AA)
cv2.imshow('frame',frame)
cv2.waitKey(1)
except KeyboardInterrupt:
# 終わるときは CTRL + C を押す
break
capture.release()
動きました。
4.TFLiteも入れてみる
pip3 install --extra-index-url https://google-coral.github.io/py-repo/ tflite_runtime
$ git clone https://github.com/PINTO0309/TensorflowLite-bin
$ cd TensorflowLite-bin
$ python3 mobilenetv2ssd.py
time: 0.06339740753173828
[[(128, 223), (320, 542), 0.96484375, 'dog'], [(114, 135), (564, 432), 0.953125, 'bicycle'], [(459, 80), (694, 173), 0.87890625, 'car']]
coordinates: (128, 223) (320, 542). class: "dog". confidence: 0.96
coordinates: (114, 135) (564, 432). class: "bicycle". confidence: 0.95
coordinates: (459, 80) (694, 173). class: "car". confidence: 0.88
動いた。
というわけで、32bitと同じ手順で問題なく動いてしまいました。あれ?
5.まとめ
Qiitaの記事は覚書目的が8割で、書きながら作業を進めるのですが、今回は何のトラブルもなく32bitと同じ方法で動いてしまいました。もったいないので公開しますが、冒頭で書いた通りあまり意味のない記事になってしまいました。