ラズパイでYOLOモデルによる物体検出を行うためにLiteRTの環境を準備します。
LiteRTを利用することでラズパイ5のみ(AI HATなど追加装置なし)で60fpsぐらいの
高速物体検出ができるようになります。
OpenCVの時と同様にソースコードを自分でビルドする方法で対応します。
※実験中につき内容を変更する可能性があります。
まえおき
以前、ラズパイのC++向けにOpenCVの環境を準備して顔検出を行いました。
顔検出に使用するカスケード分類器のファイルを変更すれば顔以外にも色々なものを
検出できるようになりますが、対象物が傾いていると検出できません。
最近では物体検出にYOLOというアルゴリズム/ライブラリが使われる機会が多く、
You Only Look Onceの名の通り検出モデルをかなり簡単です。しかし、推論(検出)には
ある程度高スペックなPCが必要なのでラズパイで動かすのは少々厳しいです。
これに対してラズパイ等で実行可能なTensorFlowLiteというライブラリがあります。
これはラズパイ等でも高速に実行できる反面、検出モデルの作成方法がよく分かりません。
その界隈では有名なPINTO0309様が検出モデルやモデル間の変換等を公開しており、
これらを利用することでYOLOで自作したモデルをラズパイ上で高速推論できるように
なります。
LiteRTとは
TensorFlowというGoogleが開発した数値計算や大規模なニューラルネットを行う
ライブラリ/フレームワークがあります。TensorFlowは主に高性能なPC向けですが、
モバイル端末向けのTensorFlow Liteがあります。TensorFlow Liteは2024年9月に
LiteRTへと名称が変更されました。
TensorFlow Lite 2.18ぐらいでLiteRT 1.0へ移行したようです。
TensorFlow Lite 2.17とLiteRT2.1.6で比較を行っていますが、ラズパイ5において
320×320の量子化モデル推論に対して
TensorFlow Lite:33ms(CPU使用率60%)
LiteRT:7ms(CPU使用率40%)
とLiteRTの方が明らかに高速かつ軽量で動きます。
ただ、TensorFlow LiteからLiteRTへ移行してそれほど時間が経っていないので、
特にC++向けのLiteRTの情報はそこまで多くありません。ChatGPTおよびGemminiで
基本プログラムを作成した場合、TensorFlow Liteであればそれほど苦労せずコードが
生成されます。これに対してLiteRTはAPIに関する情報が見つからないのでヘッダ
ファイルを読んでいく必要があります。私はlitert/tools/run_model.ccを起点として
run_modelが使用している機能の確認、不足している機能の確認をChatGPTを使って
実施しました。
物体検出を行うためのプログラムについては別途説明予定です。
python向けのインストールはpip等数行で終わるはずなので今回は省略します。
ChatGPT等を使えばpython向けのインストール方法はすぐ分かると思います。
ラズパイで環境作成
まずcmakeの環境を確認しておきます
cmake --version
g++ --version
python3 --version
ラズパイ4 buster の場合
----------------------------------------------------------------------------------------------------------
v2.1.6だとCMakeのバージョンが3.20以上でなければconfigureが実行できません。
ラズパイ4でOSがbuster等だと条件に合わない場合があります。
既存のcmakeは維持したまま追加で別バージョンを入れることもできるので、
状況に合わせて対応が必要です。
また、g++およびgccのバージョンが10未満だとビルドでエラーになります。
Security: XNNPACK doesn't support BTI control flow integrity with GCC.
と出て、gccは一部機能が使えない様なので、Clang (バージョン11ぐらい)を
導入するという方法もありますがbusterだと色々制約が出てきます。
gcc10のソースをダウンロードして自分でビルドしたり等の作業が必要です。
一度cmakeを実行するとコンパイラの設定が固定されてしまうようなので、
gccを標準とは異なるフォルダにインストールした場合は、cmakeを新規に
実行する際に
CC=/opt/gcc-10/bin/gcc CXX=/opt/gcc-10/bin/g++ cmake-gui
等と指定する必要がある様です。
また、Binutilsのバージョンが合わないからソースからgcc10でビルドするとか
修正が多岐にわたるので、素直にbookwormを使った方が簡単です。
----------------------------------------------------------------------------------------------------------
本題です。
LiteRTフォルダで12GBぐらいになるので、ストレージ容量には注意が必要です。
※不要ダウンロードを修正すれば4.5GBぐらい
基本的に
・ソースコードをタウンロード
・cmakeで設定
・ビルド
と単純です。
ただし、2026年8月時点ではCMakeListsの設定がおかしいらしく、cmakeを行うたびに
既にダウンロード済みの大容量ファイルを毎回ダウンロードして展開する
という謎の挙動をするのでCMakeListsを修正した方が良さそうです。
今回はシェルを起動した時点のディレクトリで実行することを前提とします。
ディレクトリを変更する場合は各個対応してください。
ソースコードのダウンロードしてフォルダ移動
git clone https://github.com/google-ai-edge/LiteRT.git
cd LiteRT
ステータス確認
git status
タグ一覧
git tag
色んなバージョンがあるのでバージョンを指定します。
git checkout v2.1.6
今回は2026年8月5日時点で最新のv2.1.6を指定しました。
再度ステータスを表示すると
git status
HEAD detached at v2.1.6
nothing to commit, working tree clean
等と表示されてバージョンがv2.1.6に固定されたことが分かります
cmakeでConfigureを行うたびに大容量ファイルを無駄にダウンロード&展開するので
今のうちにCmakeListsを修正しておきます。
今回はソースコードにLiteRT/litertを指定しますが、その中にある
LiteRT / litert / vendors / CMakeLists.txt
が諸悪の根源なので修正します。
・QUALCOMM
・SAMSUNG
の2つは強制的にダウンロードが行われるほか設定をOFFにしても勝手にONになるので
修正することを推奨します。
特にQUALCOMMはラズパイで使わないのに8GBぐらい占拠します。
gitから取得したタイミングでCmakeListsが変わる可能性が有るので、
修正内容についてはChatGPT等で確認するのが良いでしょう。
ダウンロードしたタイミングで内容が異なる可能性があるので、ファイルの内容を
ChatGPT等に提示して修正案を生成してください。
※修正しなくてもcmakeとbuildは実行可能ですCMakeの設定
cmakeでビルド項目を設定します。
ディレクトリ移動してビルドフォルダを作成
cd ~/LiteRT
mkdir build
cd build
ChatGPTが回答する設定項目が怪しいのでcmake-guiで設定項目を確認しながら進めます。
cmake-gui
ソース:LiteRT/litert
ビルド:LiteRT/build
LiteRT直下にCMakeListsが無いのでlitertまたはtfliteのどちらかを指定します。
今回はLiteRTをビルドするのでソースに「LiteRT/litert」を設定します。
ソースフォルダとビルドフォルダを設定したら
Configure
UnixMakefiles
Use default native cmopilers
を選択して
Finish
必要なファイルをダウンロード&展開するので10分ぐらいかかります。
本来は時間がかかるのは初回だけのはずですが、先の説明の通り修正しておかないと
Configureするだけで毎回10分かかります
Configure中に赤文字で警告が出ます。
CMake Warning at /home/pi/LiteRT/build/xnnpack/CMakeLists.txt:434 (MESSAGE):
Security: XNNPACK doesn't support BTI control flow integrity with GCC.
Continuing.
GCCだとXNNPACKのBTI機能がサポートされないとの事です。
GCCの代わりにClangを指定するといい?(要調査)
初回のConfigureが通ったらその他オプションを設定します。
CMAKE_BUILD_TYPE:Release
標準だと何も表示されずRelease扱いっぽいが一応明示的に指定しておく
LITERT_DISABLE_KLEIDIAI:ON
KLEIDIAI関連は無効にしておかないとビルドでエラーになるかも
LITERT_ENABLE_GPU:OFF
LITERT_ENABLE_NPU:OFF
LITERT_ENABLE_QUALCOMM:OFF
LITERT_ENABLE_SAMSUNG:OFF
この辺はラズパイと関係ないのでついでにOFFにしておく
※ただしCMakeListsを修正しないと強制的にONに戻される可能性あり
XNNPACK_ENABLE_KLEIDIAI:OFF
KLEIDIAI関連でこれをOFFにしておかないとビルドエラーになる。
上記Clangを指定すると解消するかも。
Configure
Generate
この時点でbuildフォルダが10GB程度になります。
Generateが完了したら念のためフォルダ移動してビルド
cd ~/LiteRT/build
make -j3
ラズパイ5でj4(並列)だと電流不足で落ちるかも
j3でビルド完了まで45分ぐらい
j3でメモリ消費は瞬間最大3.3GBぐらい。4GB以上のモデルならJ3可?
2GBモデルなどの場合は並列数を減らすなど。
これでビルド完了。
OpenCV等と違い、共有ライブラリはほぼ生成されないのでinstallを実行しても意味がなさそう。