機械学習・AI【エッジAI】Raspi5+SONY IMX500で30FPS物体検出チャレンジ!~検出実行編 vol.22

【エッジAI】Raspi5+SONY IMX500で30FPS物体検出チャレンジ!~検出実行編 vol.22

前回、【エッジAI】Raspi5でYOLOリアルタイム物体検出チャレンジ!~検出実行編 vol.20
https://www.nakasha.co.jp/future/ai/vol20_raspi5_yolo11.html
【エッジAI】Raspi5でYOLOリアルタイム物体検出チャレンジ!~環境整備編 vol.21
https://www.nakasha.co.jp/future/ai/vol21_raspi5_yolo11.html

でRaspi5とUSBカメラを使ったYOLOv11nモデルで2FPSの処理速度だったことを受け、今度はSONYのエッジAIカメラ"IMX500"を用いて「目指せ30FPS!」のチャレンジを実施しました。

環境をIMX500(AIRaspiCamera)にマッチさせる部分が若干難儀ではあったものの、結果的に、独自モデルをIMX形式に量子化したモデルで30FSを達成することが出来ました。

難儀だった環境構築面は後日別の記事にするとして、今回は、結果をお知らせします。

最初に、今回の結論です。

 

「IMX500上に独自モデルを置いて、30FPSで動作しました」
・YOLOモデルからIMX形式への変換はWSL2上のUbuntu24LTS環境で実施
・IMX形式からrpkへパッケージはRaspi側で実行
・rpkモデルを指定した物体検出で30FPSを確認
・Raspi5のCPU負荷はわずかに35%

 

 

■SONY IMX500とは

 

・エッジAIカメラ

 

物体検出や区分、セグメンテーション、ポーズ推定などのAIタスクを、Raspiなどのコンピュータを使わずにカメラ内部で実行するインテリジェントなカメラです。画像と一緒に検出結果テキスト(配列)を出力するので、検出結果のみを転送すれば、超軽量なエッジAIを構成できます。
※カメラなので、イメージをストリーミングとして出力します。当然、動画保存も静止画保存も可能です。

 

RasPicamera2(IMX500)
01.png

 

 

・IMX500の処理パイプライン

 

前述のように、IMX500内部でAIタスクを実行するので、出力はイメージと検出結果です。
Raspi側はIMXから受け取ったレスポンスの表示や整形のみとなり、CPU負荷が非常に抑制されます。

IMX500の処理
02.png

 

 

・Raspi全モデル対応

 

Raspiに対応したカメラモジュールでは、従来からSONY製のセンサーが用いられてきました。
今回のRaspberryPiAICameraは、Raspi全モデルに対応※したエッジAIカメラとして2024年秋にリリースされました。

スイッチサイエンス
https://www.switch-science.com/products/9813?

※CSIケーブルは片方が細くなっている22pinで、OSやソフトウェアはIMXに合わせて構築する必要があります。(既存の仕組みの上に構築しようとしてもダメ。例えばUbuntu24LTSとかRaspiOS64ビットとか)

 

 

■検出結果

 

・aitriosのデモプログラムの場合

 


SONY セミコンダクターソリューションズが提供するSDKとサンプルです。
https://www.aitrios.sony-semicon.com/

modlibとしてパッケージングされたライブラリのAiCameraを使います。

Detectionサンプルの実行
03.png
セグメンテーションサンプルの実行
04.png

 

aitrios-rpi-application-module-library/examples/aicam/detector.py
aitrios-rpi-application-module-library/examples/aicam/segment.py

物体検出で30FPS、セグメンテーションで15FPS程度の速度が出ます。※
その際、CPUパワーはhtopでの計測で15%程度と非常に軽量です。

※モデルにはModelZoo内の非常に軽量なモデルを使っている点に注意です。

 

 

・picamera2のデモプログラムの場合

 

picamera2としてまとめられているライブラリを使います。

Detectorの実行
05.png


aitriosの場合と同様に、物体検出で30FPSの速度が出ます。※
picamera2/examples/imx500_object_detection_demo.py

※モデルにはModelZoo内の非常に軽量なモデルを使っている点に注意です。

 

 

・デモプログラムを改良した独自プログラム"detector.py"の場合

 


Youtubeの動画を再生しながら、YOLO11nモデルで飛行機、静止画を使ってオリジナルの枕木検出モデルで検出を実行して見ました。

yolo11nモデルでYoutubeLive動画の検出
08.png
yolo8独自モデル(枕木検出モデル)でPDFの静止画を検出
09.png

RaspiCamera2のデモプログラムに対して、静止画書き出し、ログ保存、FPS計測の機能を追加した"detector.py"で、物体検出で30FPSの速度が出ました。

その際のCPU負荷は35%でした。それでも随分軽いです。

Picamera2サンプルの場合との違いとして、YOLOv11n、YOLO8の独自モデルをIMX形式にコンバートしたモデルを使っており、サンプルよりも重いモデルになっています。

※サンプルにはマルチスレッド対応したプログラムもあるので、そちらをカスタマイズすればもっと効率的に動作すると思われます。(CPU負荷は増えるかもしれない)

 

 

■蛇足:ちょっと嫌なこととその対策

 

フォーカスリングでちまちま設定する
10.png
CSIケーブルが千切れそう
11.png

PiCameraの宿命ですが、フォーカスを付属のプラスチックのリングで手動であったり、CSIケーブルが短く、取り回しもしにくいのが嫌なところです。

やわらかいCSIケーブルだとか、長いケーブルだとか、インタフェースの変換なんかもあるようですので、ちょっと何とかしたいなぁと思っています。

 

・対策例

 

  • CSI⇔イーサネット変換
  • カメラ架台
  • レンズの交換(望遠、フォーカスリング付き)
  • 屋外用ハウジング

※これらのやりたいことはほぼ、インタニヤさんがカバーしてくれそうです。

https://entaniya.shop-pro.jp/?pid=179120092

 

 

■次回予告

 

次回の記事では、Raspi5の環境構築や、モデルコンバートのための環境構築について紹介します。

 

 

■まとめ(再掲)

 

「IMX500上に独自モデルを置いて、30FPSで動作しました」
・YOLOモデルからIMX形式への変換はWSL2上のUbuntu24LTS環境で実施
・IMX形式からrpkへパッケージはRaspi側で実行
・rpkモデルを指定した物体検出で30FPSを確認
・Raspi5のCPU負荷はわずかに35%

 

 

▼この記事を書いたひと

001@2x.png

R&Dセンター 松井 良行

R&Dセンター 技術戦略担当部長。コンピュータと共に35年。そしてこれからも!

 

 

おすすめの関連記事


機械学習・AIの最新記事


お問い合わせ

ご意見・ご質問などお気軽にお問い合わせ下さい。
ナカシャクリエイテブ株式会社

●富士見事務所 TEL : 052-228-8733 FAX : 052-323-3337
〒460-0014 愛知県名古屋市中区富士見町13−22 ファミール富士見711  地図
交通部 R&Dセンター

Email:メールでのお問い合わせ