
前回記事「vol22【エッジAI】Raspi5+SONY IMX500で30FPS物体検出チャンレンジ!~検出実行編」で30FPSを達成できましたと報告しましたが、それ以前にやったことを今回ご紹介します。
| PCIe HATとNVMe SSD |
![]() |
| ヒートパイプと5インチタッチディスプレイ |
![]() |
Bookworm必須です!※よこしまな考え(YOLOの最新やpytorchをゴリゴリ動かしたい!モデルのコンバートもRaspi上でやりたい!)は捨てて、
「エッジAIとしての専用機で割り切るべし」・・です。
※後日別環境で同じようにセットアップしたら、32ビットよりも64ビットの方が楽でした。
| ImagerでBookworm環境を選択 |
![]() |
当初(前回のUSBカメラでの検証で使った)Ubuntu 24 Server LTS上ではダメで、かつその次にやったRaspiOS64ビットでもダメ※、最終的にIMXで動作検証が取れているとされるRaspiOS32ビット(Bookworm)での環境構築でようやく動作しました。
※前述の通り、64ビット(Python3.13)でセットアップできました。
「モデルのコンバートもRaspi上でやりたい(ptをそのまま渡されてもOK)」と思いましたが、
こちらもYOLOが要求するPytorchのインストールに失敗してNGでした。
結局モデルのコンバートはWSL2(Windows上のUbuntu24)で実行し、コンバート済のモデルのパッケージ化のみをRaspiで実行するようフローに落ち着きました。
結果的には、モデルの学習や生成を行うWindowsPC(with GPU)で、NASの動画や膨大な静止画に高速アクセスでき、最後にIMX用のモデルを作るというワークフローからするとWindows上にLunuxというのはとても良い構成に思います。
参考として、@yokoyan_pwsさんの下記記事に詳しくやり方が書かれています。
https://qiita.com/yokoyan_pws/items/00d6fe0448ae329c7715
最初にこの記事に出会えていれば良かったのですが、私の場合は(猪突猛進で)、picamera2やimx500のgithubやCopilotさんのアドバイスで同様のことをしました。
遠回りになりましたが、色々と知ることが出来て良かったです。
・OSの準備
BookwormでRaspiを構成し、NVMeSSDでブート
sudo apt update
・Python環境の準備
Python3.11をインストールしvenv311を設定
・パッケージのインストール
sudo apt install -y imx500-all imx500-tools
sudo apt install -y python3-picamera2 rpicam-apps git python3-venv python3-pip
既存のYOLOモデルをIMX形式に変換する処理は、自由にOSを選択でき、超高速なWindows仮想マシン上のUbuntuで実行しました。
WSL2はUbuntu24.04.3LTSです。
途中、YOLOが要求するpytorchが上手く入らなくて、一度アンインストールしてからtorch==2.0.1+cu118 torchvision==0.15.2+cu118 を新たに入れたら変換が上手くいったという結末です。
コンバートはultralytics社が用意したYOLOのexportコマンドを実行するのですが、IMX形式にコンバートする際に、校正(最適化)をする都合上、モデル作成時に使ったtrain/valのイメージデータとクラスを定義したyamlデータが必要です。※
yolo export model=models/yolo11n.pt format=imx data=models/coco8.yaml
yolo export model=models/makuragi.pt format=imx data=models/makuragi.yaml
※「ptファイルだけあれば良い?」と思っていましたが、量子化時のモデル精度を担保するために必要なようです。(推測)
・コマンド履歴
sudo apt update
sudo apt install software-properties-common
sudo add-apt-repository ppa:deadsnakes/ppa
sudo apt update
sudo apt install python3.11 python3.11-venv python3.11-dev
python3.11 -m venv venv311
source venv311/bin/activate
pip install onnxruntime numpy
pip install --upgrade pip
cd venv311
mkdir src
sudo nano src/test.py
python src/test.py
pip install ultralytics
yolo export model=yolo11n.pt format=imx data=coco8.yaml
yolo predict model=yolo11n_imx_model source='https://ultralytics.com/images/bus.jpg'
yolo export model=yolo11n.pt format=imx data=coco8.yaml
yolo export model=models/yolo11n.pt format=imx data=models/coco8.yaml
cd data
wget https://raw.githubusercontent.com/ultralytics/ultralytics/main/ultralytics/datasets/coco8.yaml -P models/
yolo export model=models/yolo11n.pt format=imx data=models/coco8.yaml
cd ..
yolo export model=models/yolo11n.pt format=imx data=models/coco8.yaml
pip install onnxscript
yolo export model=models/yolo11n.pt format=imx data=models/coco8.yaml
pip uninstall torch
pip install torch==2.0.1+cu118 torchvision==0.15.2+cu118 -f https://download.pytorch.org/whl/torch_stable.html
yolo export model=models/yolo11n.pt format=imx data=models/coco8.yaml
yolo export model=models/makuragi.pt format=imx data=models/makuragi.yaml
・パッケージの生成
WSL上のUbuntuで生成したモデルのディレクトリとymlファイルを作業ディレクトリにコピーしておきます。
次に。生成されているpackerOut.zipに対してimx500-packageコマンドを掛けます。
cd ~/models/makuragi_model/
imx500-package -i packerOut.zip -o out
正常にコンバートが完了すると
out/netowork.rpk
というファイルが生成されるので、名前を変えておきます。(yolov11n.rpkだとかmakuragi.rpkだとか)
・配置
パッケージ化したrpkファイルと、list.txtをモデル置き場(~/edgeai/models/yolo11n_imx)に置きます。
※格納ディレクトリ名は適当です。(私が使っている環境)
・サンプルのダウンロード
picamera2のサンプルをリネームして~/edgeai/srcにコピーします。
cd ~
git clone https://github.com/raspberrypi/picamera2.git
cd ~/picamera2/examples/imx500
cp imx500_object_detection_demo.py ~/edgeai/src/detector.py
・検出の実行
edgeai/src/detector.pyを実行します。
せっかくなので、コンバートしたてのyolov11nモデルを使ってみましょう。
source venv311/bin/activate
cd ~/edgeai/src/
python3 detector.py --model ~/edgeai/models/yolo11n_imx/yolo11n.rpk --labels ~/edgeai/models/yolo11n_imx/labels.txt --threshold 0.15 --bbox-normalization --bbox-order xy
モデルをカメラに転送するのに数十秒かかります。
暫くするとビューア(Qtベース)が起動して検出が実行されます。
(閾値を0.15で実行しているので過敏に反応することと思います。)
コンバートしたモデルで上手く検出しない場合は、https://github.com/raspberrypi/picamera2.gitのREADME.mdなどを参照してModelZOOのモデルとlistファイルを使うと良いです。
引数として渡す--modelと--labelsの部分を切り替えるだけです。
サンプルプログラムを実行させると、「動画上で検出するだけかい!」「静止画を保存できんのかい?」「ログは出せんのかい?」などと欲望がふつふつを湧いてくることと思います。
・・というのが次の記事での内容になります。
次は
・検出結果を静止画保存する!
・静止画保存するクラスを限定したい
・検出ログを書きだしたい
・FPSを知りたい
といった内容を実現します。
今回サンプルとして保存したdetector.pyをVSCode上でモリモリを変更していきますよ。
▼この記事を書いたひと

R&Dセンター 松井 良行
R&Dセンター 技術戦略担当部長。コンピュータと共に35年。そしてこれからも!
●富士見事務所 TEL : 052-228-8733 FAX : 052-323-3337
〒460-0014 愛知県名古屋市中区富士見町13−22 ファミール富士見711 地図
交通部 R&Dセンター


