ラズパイでYOLOモデルによる物体検出を行うためにLiteRTの環境を準備します。
LiteRTを利用することでラズパイ5のみ(AI HATなど追加装置なし)で60fpsぐらいの
高速物体検出ができるようになります。
OpenCVの時と同様にソースコードを自分でビルドする方法で対応します。
今回はbookwormで標準インストールされていたGCCでビルドします。
LiteRTの機能をフルに使用するには
Clangでビルドします。
※実験中につき内容を変更する可能性があります。まえおき
以前、ラズパイの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で比較を行っていますが、320×320の量子化モデル推論に対して
ラズパイ5の場合
TensorFlow Lite:33ms(CPU使用率60%)
LiteRT:
7ms(CPU使用率
40%)※3スレッド(4以上は電力不足で動かせなかった)
とLiteRTの方が明らかに高速かつ軽量で動きます。
ラズパイ4の場合
LiteRT:53ms(CPU使用率56%)※4スレッド
といった速度で動きます。
OpenCVのカスケード分類器による検出の
ラズパイ5で7ms(CPU使用率60%)
ラズパイ4で23ms(CPU使用率70%)
と比べても問題ない性能を発揮します。
ただ、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 --versiong++ --versionpython3 --version※機能を全て使用する場合はg++の代わりに
Clangを使用します。
LiteRTをClangでビルド------------------------------------ ラズパイ4 buster の場合 ------------------------------------
busterは開発が終了しているのでupdate等を行うことができません。
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でビルドするとか
、ビルドするたびにg++のバージョンを指定する必要があるとか修正が多岐にわたります。
busterでもビルド可能なことは確認しましたが、素直にbookwormを使った方が簡単です。
----------------------------------------------------------------------------------------------------------
本題です。
LiteRTフォルダで12GBぐらいになるので、ストレージ容量には注意が必要です。
※不要ダウンロードを修正すれば4.0GBぐらい
ストレージは不要ダウンロードを修正すればOS等込みで16GBでギリギリ収まるぐらいです。
SDカードまたはeMMCは32GB以上を選定するのが無難でしょう。
基本的に
・ソースコードをタウンロード
・cmakeで設定
・ビルド
と単純です。
ただし、2026年8月時点ではLiteRT/litert/vendorsの
CMakeListsの設定がおかしいらしく、
cmakeを行うたびに
既にダウンロード済みの大容量ファイルを毎回ダウンロードして展開するという謎の挙動をするのでCMakeListsを修正した方が良さそうです。
今回はシェルを起動した時点のディレクトリで実行することを前提とします。
ディレクトリを変更する場合は各個対応してください。
ソースコードのダウンロードしてフォルダ移動
git clone https://github.com/google-ai-edge/LiteRT.gitcd LiteRTステータス確認
git statusタグ一覧
git tag色んなバージョンがあるのでバージョンを指定します。
git checkout v2.1.6今回は2026年8月5日時点で最新のv2.1.6を指定しました。
再度ステータスを表示すると
git statusHEAD detached at v2.1.6
nothing to commit, working tree clean
等と表示されてバージョンがv2.1.6に固定されたことが分かります
vendors の CmakeLists 修正
cmakeでConfigureを行うたびに大容量ファイルを無駄にダウンロード&展開するので
今のうちにCmakeListsを修正しておきます。
今回はソースコードにLiteRT/litertを指定しますが、その中にある
LiteRT / litert / vendors / CMakeLists.txtが諸悪の根源なので修正します。
・QUALCOMM
・SAMSUNG
の2つは
強制的にダウンロードが行われるほか
設定をOFFにしても勝手にONになるので
修正することを推奨します。使う機能と関係ないのにオンラインにしないとcmakeが通ら
ない+自プロジェクトの設定を変えるとcmakeが実行されてオンラインじゃないとビルド
できないとか色々影響があります。
特にQUALCOMMはラズパイで使わないのに
8GBぐらい占拠します。
gitから取得したタイミングでCmakeListsが変わる可能性が有るので、
修正内容についてはChatGPT等で確認するのが良いでしょう。
ダウンロードしたタイミングで内容が異なる可能性があるので、ファイルの内容を
ChatGPT等に提示して修正案を生成してください。
※修正しなくてもcmakeとbuildは実行可能です
CMakeの設定
cmakeでビルド項目を設定します。
ディレクトリ移動してビルドフォルダを作成
cd ~/LiteRTmkdir buildcd buildChatGPTが回答する設定項目が怪しいのでcmake-guiで設定項目を確認しながら進めます。
cmake-guiソース:LiteRT/litert
ビルド:LiteRT/build
LiteRT直下にCMakeListsが無いので
litertまたは
tfliteのどちらかを指定します。
今回はLiteRTをビルドするのでソースに「LiteRT/litert」を設定します。
ソースフォルダとビルドフォルダを設定したら
ConfigureUnixMakefiles
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が通ったらその他オプションを設定します。
Clangを使用しない場合はKLEIDIAI関連を停止しないとビルド時にエラーになります。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関連でGCCでビルドする場合はこれをOFFにしておかないとエラーになる。
ConfigureGenerateこの時点でbuildフォルダが10GB程度になります。
※不要ファイルを修正している場合は3.5GB
Generateが完了したら念のためフォルダ移動してビルド
cd ~/LiteRT/buildmake -j3OpenCVのビルドと同様に空きメモリや放熱には要注意。
ラズパイ5でj4(4並列)だと電流不足で落ちるかも
ラズパイ5のj3でビルド完了まで45分ぐらい
j3でメモリ消費は瞬間最大3.3GBぐらい。4GB以上のモデルならJ3可?
2GBモデルなどの場合は並列数を減らすなど。
電力を潤沢に供給できている場合やラズパイ4ならj4でもOK。
これでビルド完了。
OpenCV等と違い、共有ライブラリはほぼ生成されないのでinstallを実行しても意味がなさそう。