流れ
-
Yoloのモデルを準備する
【準備中】別記事にデータセットとモデル -
モデル量子化してonnxのモデルに変換する(Colab上で実施)
→躓く#1
(提供されているColab notebookを参考にしつつバグがあったため、mctバージョンを2.1.0を利用する。https://github.com/sony/model_optimization/issues/1236)
【準備中】修正したColabをアップする
参考
https://github.com/sony/model_optimization/tree/v2.1.0/tutorials/notebooks/imx500_notebooks
github上でmainから消えていたりするから注意。過去のを探す。 -
コンバーターツールで圧縮する(ローカルPCで実施)
→躓く#2
Windowsでは動かないため、WSLで実行。
仮想環境で切り分けたほうがよい。pip install model_compression_toolkit #pytorchの場合 pip install imx500-converter[pt] imxconv-pt -i <compressed ONNX model> -o <output folder>
これでoutput folder内にpackerOut.zipができるため、これをRPiに転送する。
参考
https://www.raspberrypi.com/documentation/accessories/ai-camera.html#quantisation-and-compression
https://developer.aitrios.sony-semicon.com/en/raspberrypi-ai-camera/documentation/imx500-converter?version=3.14.1&progLang= -
RPi AI Cameraに乗せるためにパッケージ化する(RPi上で実行)
→躓く#3
(パッケージツールにバグがあり公開されてなく待っていたが、最近リリース
当時ここまで来てこの記事を見つけて絶望した。
https://forums.raspberrypi.com/viewtopic.php?t=377842)sudo apt-get install jq=1.6-2.1 sudo apt-get install libarchive-dev=3.4.3-2+deb11u1 sudo apt-get install libarchive-dev sudo apt install imx500-tools #imx500-package.sh -i <path to packerOut.zip> -o <output folder> imx500-package -i <path to packerOut.zip> -o <output folder>
-
RPi上で実行する
参考:https://www.raspberrypi.com/documentation/accessories/ai-camera.html#picamera2python imx500_object_detection_demo.py --model /usr/share/imx500-models/imx500_network_yolov8n_pp.rpk
【準備中】つづく
一通り終わってオリジナルモデルで実行できるところまで確認できたため一安心。
RPiオフィシャルカメラで簡単に使えると思ってたら棘道だった...
サンプルのコードとデータセット、モデルも公開予定。
YOLOレベルも30fpsで回るので、物体検知+αや、カメラに走行推論を任せてRPiでは統合とか上位の判断するロジックを考えてみたい。
参考
箱から空けて使うまで
https://qiita.com/daiki0321/items/4223611adb453d6c7aa2