Raspberry Pi AI Cameraを買ってみた

Amazonで購入しました。翌日には届いて学習を開始できたので助かります。なぜなら、明後日にはAITRIOSの関西コミュニティ勉強会があります。それに間に合ってよかったです。

Raspberrypi AI Camera ラズベリーパイ AI カメラ

https://www.raspberrypi.com/documentation/accessories/ai-camera.html

まずは、上のwww.raspberrypi.comの記事を参考にセットアップをしましょう。

セットアップと簡単な動作確認は以前の記事で行いました。

それでは、今日は引き続き、ポーズ推定を行ってみます。

ポーズ推定

$ rpicam-hello -t 0s --post-process-file /usr/share/rpi-camera-assets/imx500_posenet.json --viewfinder-width 1920 --viewfinder-height 1080 --framerate 30
[3:42:34.603390634] [1202097]  INFO Camera camera_manager.cpp:326 libcamera v0.5.0+59-d83ff0a4
[3:42:34.610517023] [1202100]  INFO RPI pisp.cpp:720 libpisp version v1.2.1 981977ff21f3 29-04-2025 (14:13:50)
[3:42:34.630610617] [1202100]  INFO RPI pisp.cpp:1179 Registered camera /base/axi/pcie@1000120000/rp1/i2c@88000/imx500@1a to CFE device /dev/media1 and ISP device /dev/media0 using PiSP variant BCM2712_D0
Made X/EGL preview window
IMX500: Unable to set absolute ROI
Reading post processing stage "imx500_posenet"

------------------------------------------------------------------------------------------------------------------
NOTE: Loading network firmware onto the IMX500 can take several minutes, please do not close down the application.
------------------------------------------------------------------------------------------------------------------

Reading post processing stage "plot_pose_cv"
Mode selection for 1920:1080:12:P(30)
    SRGGB10_CSI2P,2028x1520/30.0219 - Score: 2467.7
    SRGGB10_CSI2P,4056x3040/9.9987 - Score: 43357.3
Stream configuration adjusted
[3:42:34.918696425] [1202097]  INFO Camera camera.cpp:1205 configuring streams: (0) 1920x1080-YUV420 (1) 2028x1520-RGGB_PISP_COMP1
[3:42:34.918775110] [1202100]  INFO RPI pisp.cpp:1483 Sensor: /base/axi/pcie@1000120000/rp1/i2c@88000/imx500@1a - Selected sensor format: 2028x1520-SRGGB10_1X10 - Selected CFE format: 2028x1520-PC1R
Network Firmware Upload: 100% (1624/1624 KB)
Bash

imx500_posenet.json で指定された AI モデル(姿勢推定)がカメラモジュールにロードされ、推論が有効になります。

初回実行時やモデル切り替え時には、IMX500上のニューラルネットワークをフラッシュメモリにアップロードするため数分かかることがあります。そのため、再実行時はキャッシュが効いて高速になります。

このように、PoseNetのモデル(約1.6MB)がIMX500に正常にアップロードされたことを示しています。さて、ここまで進めばほぼ準備完了です。

$ cat /usr/share/rpi-camera-assets/imx500_posenet.json
{
    "imx500_posenet":
    {
        "max_detections" : 5,
        "threshold" : 0.4,
        "offset_refinement_steps": 5,
        "nms_radius": 10.0,
        "network_file": "/usr/share/imx500-models/imx500_network_posenet.rpk",

        "save_input_tensor":
        {
            "filename": "/home/pi/posenet_input_tensor.raw",
            "num_tensors": 10
        },

        "temporal_filter":
        {
            "tolerance": 0.3,
            "factor": 0.3,
            "visible_frames": 8,
            "hidden_frames": 2
        }
    },

    "plot_pose_cv":
    {
        "confidence_threshold" : 0.2
    }    
}
Bash

plot_pose_cv ステージにより、推定されたキーポイント(目、肩、肘、膝など)がビジュアルに表示されるはずです。

もちろん、人が写っていないと推定できないので、人物が写るようにカメラを向けてください

また、imx500_posenet ステージはさまざまな方法で設定できます。たとえば、max_detections は同時に検出する人物の最大数を指定します。threshold は「人物」とみなすために必要な信頼度の下限値を指定します。

Picamera2

Picamera2 は、Raspberry Pi 向けの 新しい公式 Python カメラライブラリ です。従来の picamera(古いAPI)の後継であり、libcamera をベースに設計されています。

特徴

  • Raspberry Pi カメラモジュール(v1, v2, HQ, IMX500など)に対応
  • Python から手軽に静止画・動画・プレビュー制御が可能
  • OpenCVやNumPyと連携しやすい(カメラ画像を即座に処理可能)
  • 複数ストリーム(プレビュー用と処理用)を同時に扱える
  • GUI統合やAI処理との連携が簡単

画像分類、物体検出、物体セグメンテーション、姿勢推定の例については、Picamera2 の GitHub リポジトリを参照してください。

OpenCVのインストール

ほとんどの例では、OpenCV を使った追加処理が含まれています。そのため、OpenCV を実行するために必要な依存パッケージは、次のコマンドでインストールできます

$ sudo apt -y install python3-opencv python3-munkres
Bash

Picamera2のサンプル

その後、Picamera2 のリポジトリを Raspberry Pi にダウンロードして、各種サンプルを実行します。また、ルートディレクトリにサンプルファイルがあり、README.md に詳しい説明があります。

GitHub: https://github.com/raspberrypi/picamera2
ここに各種サンプルコード、APIドキュメント、AI連携の実例などが豊富に掲載されています。

YOLOv8 による物体検出を実行するには、リポジトリ内で以下のスクリプトを実行します:

$ cd
$ git clone https://github.com/raspberrypi/picamera2.git
$ cd picamera2/examples/imx500/
$ python imx500_object_detection_demo.py --model /usr/share/imx500-models/imx500_network_ssd_mobilenetv2_fpnlite_320x320_pp.rpk
[4:46:23.129211076] [1546040]  INFO Camera camera_manager.cpp:326 libcamera v0.5.0+59-d83ff0a4
[4:46:23.136338152] [1546044]  INFO RPI pisp.cpp:720 libpisp version v1.2.1 981977ff21f3 29-04-2025 (14:13:50)
[4:46:23.146841303] [1546044]  INFO RPI pisp.cpp:1179 Registered camera /base/axi/pcie@1000120000/rp1/i2c@88000/imx500@1a to CFE device /dev/media1 and ISP device /dev/media0 using PiSP variant BCM2712_D0

------------------------------------------------------------------------------------------------------------------
NOTE: Loading network firmware onto the IMX500 can take several minutes, please do not close down the application.
------------------------------------------------------------------------------------------------------------------

[4:46:23.186504721] [1546040]  INFO Camera camera.cpp:1205 configuring streams: (0) 640x480-XBGR8888 (1) 2028x1520-RGGB_PISP_COMP1
Network Firmware Upload: 0.00bytes [00:00, ?bytes/s][4:46:23.187511184] [1546044]  INFO RPI pisp.cpp:1483 Sensor: /base/axi/pcie@1000120000/rp1/i2c@88000/imx500@1a - Selected sensor format: 2028x1520-SRGGB10_1X10 - Selected CFE format: 2028x1520-PC1R
Network Firmware Upload: 100%|█████████████████████████████████████████████████████████████████████████████████████████████████████| 3.78M/3.78M [00:03<00:00, 1.13Mbytes/s]
Bash

それでは次に、Picamera2 で姿勢推定を試すには、以下のスクリプトを実行してください:

$ python imx500_pose_estimation_higherhrnet_demo.py
[4:48:34.095037606] [1551834]  INFO Camera camera_manager.cpp:326 libcamera v0.5.0+59-d83ff0a4
[4:48:34.102250404] [1551838]  INFO RPI pisp.cpp:720 libpisp version v1.2.1 981977ff21f3 29-04-2025 (14:13:50)
[4:48:34.112114222] [1551838]  INFO RPI pisp.cpp:1179 Registered camera /base/axi/pcie@1000120000/rp1/i2c@88000/imx500@1a to CFE device /dev/media1 and ISP device /dev/media0 using PiSP variant BCM2712_D0

------------------------------------------------------------------------------------------------------------------
NOTE: Loading network firmware onto the IMX500 can take several minutes, please do not close down the application.
------------------------------------------------------------------------------------------------------------------

[4:48:34.146355639] [1551834]  INFO Camera camera.cpp:1205 configuring streams: (0) 640x480-XBGR8888 (1) 2028x1520-RGGB_PISP_COMP1
[4:48:34.146820102] [1551838]  INFO RPI pisp.cpp:1483 Sensor: /base/axi/pcie@1000120000/rp1/i2c@88000/imx500@1a - Selected sensor format: 2028x1520-SRGGB10_1X10 - Selected CFE format: 2028x1520-PC1R
Network Firmware Upload: 100%|█████████████████████████████████████████████████████████████████████████████████████████████████████| 2.01M/2.01M [00:21<00:00, 97.8kbytes/s]
Bash

このように、IMX500上での姿勢推定(Pose Estimation)スクリプトが正常に起動し、ネットワークモデルのロードも完了しています。それでは以下に、実行ログのポイントを整理して説明します。

imx500_pose_estimation_higherhrnet_demo.py です。これはPicamera2ベースで IMX500 + HigherHRNet による姿勢推定を行うPythonデモです。

次に、使用モデルは、人物の関節位置(骨格キーポイント)を高精度で検出する HigherHRNet 系のPose Estimationモデルです。

このように、実行後、人物の映像に関節(目・肩・肘・膝など)の骨格ラインがオーバーレイ表示されているはずです。

OpenCVでframe.detectionsまたはpose keypointsを受け取り、データとして活用できます。

複数人の同時検出や特定ポーズのトリガー動作も実装可能です。

裏側ではどうなっているのか

概要(Overview)

Raspberry Pi AI Camera は、以下の図に示すように、従来のAIベースのカメラ画像処理システムとは異なる動作をします。

出展:https://www.raspberrypi.com/documentation/accessories/ai-camera.html

この図は「従来型AIカメラシステム」と「IMX500搭載AIカメラシステム」のアーキテクチャの違いを示したものです。以下に、図の左側・右側をそれぞれ詳しく解説し、その中で出てくる用語(Input Tensor、ROI、Output Tensor)についても説明します。

従来型AIカメラシステム(左側)

画像のAI処理はすべて Raspberry Pi側で実行

そのため、AI処理が重いため、外部アクセラレータ(Coral, Movidiusなど)が必要なケースも。

IMX500搭載AIカメラシステム(右側)

CPU負荷・電力消費が大きく、処理のタイムラグが出やすい。

IMX500搭載AIカメラシステム(右側)

カメラ単体でAI推論まで完結(Raspberry Piは結果を受け取るだけ)。

外部アクセラレータ不要・CPU負荷もほぼゼロ

低レイテンシ・低消費電力・プライバシー保護(画像データをクラウドに送らない)。

従来型 vs IMX500搭載AIカメラシステム

左側は、従来のAIカメラシステムのアーキテクチャを示しています。このようなシステムでは、カメラが画像を Raspberry Pi に送信し、Raspberry Pi 側で画像処理を行い、さらにAI推論を実行します。従来のシステムでは、外部AIアクセラレータ(図中のようなもの)を使うか、CPUのみで処理する場合があります。

右側は、IMX500 を使用したシステムのアーキテクチャです。このカメラモジュールには小型の 画像信号プロセッサ(ISP) が内蔵されており、生のカメラ画像データを 入力テンソル(Input Tensor) に変換します。カメラモジュールはこのテンソルをカメラ内のAIアクセラレータに直接送信し、AIアクセラレータが 出力テンソル(Output Tensor) を生成します。これには推論結果が含まれます。出力テンソルは Raspberry Pi に送信されます。外部アクセラレータも、Raspberry Pi 上のニューラルネットワークソフトウェアも不要です。

入力テンソル(Input Tensor)

AI推論に渡される、センサー画像の一部です。オンボードの小型ISPによって生成され、カメラ画像をニューラルネットワークの期待するサイズに切り出し・スケーリングして作られます。通常、この入力テンソルはアプリケーションに直接公開されませんが、デバッグ目的ではアクセス可能です。

関心領域(ROI:Region of Interest)

センサー画像のうち、ニューラルネットワークに渡すために切り出される範囲を定義します。アプリケーションから参照・設定可能で、単位は常にセンサーのフル解像度におけるピクセルです。デフォルトでは、センサーから受信した画像全体が使用され、データのトリミングは行われません。

出力テンソル(Output Tensors)

ニューラルネットワークによって生成される推論結果です。出力テンソルの数と形(形状)は、使用するニューラルネットワークによって異なります。アプリケーション側では、これらのテンソルの扱い方を理解している必要があります。

システムアーキテクチャ(System architecture)

以下の図は、Raspberry Pi AI Camera モジュールのハードウェア(赤)と、推論・画像処理に使用されるカメラソフトウェアの各コンポーネント(緑)を示しています。

出展:https://www.raspberrypi.com/documentation/accessories/ai-camera.html

この図は、Raspberry Pi AI Camera モジュール(IMX500搭載)を用いた画像取得〜AI推論までの全体アーキテクチャを示しています。ハードウェアからアプリケーションまでのソフトウェアスタックの流れが、非常に分かりやすく構成されています。

全体構成の概要

図は大きく5つの層に分かれています:

  1. ハードウェア層(下段・赤色):実際のAIカメラモジュールとその構成部品
  2. Linuxカーネルドライバ層(緑):センサーを制御するカーネルレベルのドライバ群
  3. libcamera層(中心):カメラ制御のミドルウェア。推論結果や画像の管理もここで行う
  4. アプリケーション層(上段):ユーザーが操作するアプリ(rpicam-appsPicamera2など)
  5. ファームウェア層:IMX500専用のニューラルネットワークモデル等を格納・ロードするための領域

一番下:Raspberry Pi AI Camera モジュールハードウェア

  • 128Mbit Flash:IMX500向けのファームウェアやAIモデルを保存
  • RP2040(マイコン):SPI/I2C経由でIMX500との通信を中継(設定、制御、ファームウェアの読み出し)
  • IMX500 Sensor:撮像およびAI推論を担うソニー製インテリジェントビジョンセンサー

Linux Kernel Drivers

  • IMX500 sensor driver:IMX500センサーとのやり取り(画像取得、メタデータ取得)を行う
  • RP2040 SPI driver:RP2040とSPI通信で接続し、ファームウェアや制御信号を受け渡します。この転送は RP2040 マイコンを使って行われ、SPI 経由で I2C 転送を橋渡しします。また、RP2040 はオンボードのストレージにファームウェアファイルをキャッシュします。これにより、既に使ったファームウェアの再読み込み時には、I2C経由で全ファイルを転送する必要がなくなり、大幅な高速化が可能になります。
  • CSI2 RX:カメラ画像(生データ)をRaspberry Piの映像処理パイプラインに取り込むためのインターフェース。受信機を構成し、画像データストリームをフレームバッファに、組み込みデータと推論データストリームを別のメモリバッファに書き込みます。

libcamera 層(カメラ制御の心臓部)

libcamera は、カーネルから画像と推論データのバッファを取得した後、libcamera内の Raspberry Pi IPA(Image Processing Algorithm)にある IMX500 cam-helper ライブラリが、推論バッファを解析し、入力/出力テンソルにアクセスします。

これらのテンソルは、Raspberry Pi 特有の libcamera コントロールとして提供され、以下のような制御が可能になります。

コントロール名説明
CnnOutputTensor出力テンソル(浮動小数点配列)
CnnInputTensor入力テンソル(浮動小数点配列)
CnnOutputTensorInfo出力テンソルの構造に関するネットワーク固有パラメータ
CnnInputTensorInfo入力テンソルの構造に関するネットワーク固有パラメータ
  • Core:libcamera の基本処理ロジック
  • Raspberry Pi IPA(Image Processing Algorithm):Pi専用の画像処理パイプライン
  • IMX500 cam-helper:IMX500特有の処理(推論メタデータの抽出、ROI制御など)を担う

libcameraは、画像データだけでなくAI推論結果(inference metadata)も取り扱うのが大きな特徴です。

rpicam-apps

rpicam-apps は、IMX500 用のポストプロセス処理ステージの基底クラスIMX500PostProcessingStage)を提供します。これを継承して、任意のニューラルネットワークモデルに合わせた独自のポスト処理ステージを定義できます。

Picamera2

Picamera2 における IMX500 の統合は rpicam-apps とほぼ同様の構成です。

まとめ

この仕組みにより、IMX500はハードウェア内でAI推論を行い、rpicam-appsPicamera2 は推論結果を簡単に扱えるようになります。

  • 開発者は Python または C++ で 最小限のコードで高度なビジョン処理を実装可能。
  • ROI設定や座標変換などもヘルパー関数で簡単に制御。
  • ユーザーは画像上の物体検出・姿勢推定・分類などをリアルタイムかつ軽量に実装できます。

Brain Builder for AITRIOS(100万超え!)

IMX500のようなエッジAIカメラで動作するニューラルネットワークモデルを、専門知識なしでも簡単に作成・管理・展開するための統合開発環境です。「Brain Builder for AITRIOS」には、ユーザーのニーズに応じた2つのバージョンが用意されています。それぞれの特徴を理解し、目的に合ったバージョンを選択することが重要です。

まずはお値段。100万円超えですね。

主な機能

機能内容
データ収集エッジカメラからリアルタイムで画像を収集(クラウドにアップロード)
アノテーションWebブラウザ上で画像にラベル付け(バウンディングボックスや分類)
モデル学習アノテーション済みデータを使って、分類/検出モデルを学習(クラウドGPUで自動)
精度評価モデルの精度(F1スコア、リコール等)を可視化。誤認識ケースも分析可能
エクスポート学習済みモデルを .rpk 形式でエクスポートし、IMX500カメラに直接デプロイ可能
プロジェクト管理データセット、モデル、デバイスごとにプロジェクト単位で管理可能

対象ユーザー

  • AI初心者やノーコード開発者
    • Pythonコードを書かずに、ドラッグ&ドロップ操作だけでエッジAIカメラ用モデルを作成できる
  • 製造業・小売業などの現場担当者
    • 「この異物を検出してほしい」「特定の動作を認識したい」といった現場ニーズに即応

実現できるユースケース例

  • 不良品検出
  • 商品棚の空き検知
  • 来客カウント・行動分析
  • 指定領域への侵入検知
  • ごみ/異物検出 → ロボットアームへ連携

注意点

  • 学習・推論モデルの形式は .rpk(Sony独自)で、IMX500センサーと互換性があります。
  • 現在は分類・物体検出系タスクが中心(姿勢推定などは手動開発が必要)。

バージョン比較

Brain Builder – Classifier/Detector for AITRIOS

  • 主な機能: 分類(Classifier)と物体検出(Detector)モデルの作成に特化しています。
  • 対象ユーザー: AI開発の初心者や、特定のタスクに集中したいユーザーに適しています。
  • 利用可能なモデルタイプ:
    • Classifier: 画像全体または特定の領域を事前定義されたクラスに分類します。
    • Detector: 画像内の特定の物体を検出し、その位置を特定します。
  • 特徴:
    • ノーコード対応: プログラミング不要で、GUIを通じて操作可能です。
    • 少量データ対応: クラスごとに約50枚の画像からモデルを構築できます。
    • トライアル利用: 10日間の無料トライアルライセンスが提供されています。

Brain Builder for AITRIOS(フルバージョン)

  • 主な機能: 分類、物体検出に加え、高精度異常検知(Anomaly Hi-Fi)モデルの作成が可能です。
  • 対象ユーザー: 製造業や品質管理など、高度な異常検知が求められる業務用途に適しています。
  • 利用可能なモデルタイプ:
    • Classifier
    • Detector
    • Anomaly Hi-Fi: 微細な異常や欠陥を高精度で検出します。
  • 特徴:
    • 高度なモデル作成: 異常検知モデルにより、微細な不良や欠陥の検出が可能です。
    • エンタープライズ向け: 業務用途に特化した機能とサポートが提供されます。
    • ライセンス購入: 利用には正規ライセンスの購入が必要です。
項目Classifier/Detector(6ヶ月)フルバージョン(1年)
製品名Brain Builder – Classifier/Detector for AITRIOSBrain Builder for AITRIOS
利用可能なモデル分類(Classifier)、物体検出(Detector)分類、物体検出、高精度異常検知(Anomaly Hi-Fi)
ライセンス期間6ヶ月1年
対象ユーザー評価用、短期プロジェクト業務導入、エンタープライズ用途
ノーコード対応ありあり
価格(税込)¥144,917¥1,004,950
無料トライアルあり(10日間)なし(要ライセンス購入)

AIビジョンアプリケーションの開発(Brain Builderなしで自力開発)

Brain Builder for AITRIOSは面白そうだけど1年で100万円もかかると個人プロダクトでは支払うことはできません。そこで、TensorflowとPyTorchで学習していきましょう。

出展: https://developer.aitrios.sony-semicon.com/en/raspberrypi-ai-camera/develop/get-started

この図は、TensorFlowやPyTorchで学習したAIモデルを、IMX500搭載エッジAIカメラ(Raspberry Pi AI Camera)で動かすまでのワークフローを表しています。

IMX500 で動作するモデルは?

IMX500は、PyTorch(ONNX)またはTensorFlow(Keras)ベースの単一画像認識ニューラルネットワークをサポートします。

現在はフィードフォワードモデルのみサポートされています。RNN(Recurrent Neural Network:再帰型ニューラルネットワーク)は将来のソフトウェアリリースでサポートされる予定です。

IMX500にモデルをデプロイする際の主な互換性問題

特性要件コメント
モデルアーキテクチャ分岐(if)やループなどの「フロー演算」を含まない静的モデルのみがIMX500上で実行可能です。対応可否は、サポートされているレイヤーとそのパラメータ制限によって決まります。モデルが対応しているかどうかは、レイヤーとパラメータの構成のみに依存し、タスクの種類や構造には依存しません。IMX500のレイヤー/パラメータの対応範囲は寛容であり、ソフトウェアのバージョンが上がるたびに拡大しています。最新の対応レイヤー一覧は、IMX500 Converter Manual を参照してください。
入力テンソルのサイズ固定(定数)でなければなりません(動的サイズは不可)
最大入力解像度:
– RGB:640×640
– モノクロ:1024×1024
モデルサイズ(メモリ)モデルはIMX500の内部メモリに収まる必要がありますモデルサイズの制限は、モデルの構造や解像度によりますが、おおよそ3〜10メガウェイト(百万パラメータ)程度です。構造的プルーニング(不要な重みの削除)を行った場合は、プルーニング後のサイズが基準となります。

ワークフローとソフトウェアツール(Workflow and software tools)

IMX500 は、畳み込みニューラルネットワーク(CNN)トランスフォーマー(Transformer)多層パーセプトロン(MLP) など、さまざまな種類のディープニューラルネットワークを実行することができます。

浮動小数点モデル(The floating point model)

まずは、ディープラーニングフレームワーク上で動作する浮動小数点モデルを使用することが推奨されます。これは、一般公開されている学習済みモデルや、独自に構築したカスタムモデルが該当します。

⚠️ 量子化済みモデルや偽量子化モデル(Fake-quantized)から始めると、エラーや量子化の重複が発生し、精度が大きく低下する可能性があります。

このようなモデルの準備や再学習、あるいは公開モデルへの軽微な修正であっても、ディープラーニングフレームワークでのスキルと経験が求められます。

モデルが通るステップ(A working model goes through the steps)

Optimize(最適化)
  • モデルを圧縮・最適化する処理です。
  • 使用ツールは Model Compression Toolkit(MCT)
    • Sonyが提供するオープンソースのPythonパッケージです。
    • 主に量子化と圧縮により、ハードウェア制約のある環境(IMX500など)に適したモデルに変換します。
Compile(コンパイル)
  • 最適化・量子化されたモデルを、IMX500で実行可能な形式に変換(コンパイル)します。
  • 使用ツールは IMX500 Converter

これらのステップの結果として得られるのが、IMX500向けの変換済みモデルです。

メモリ最適化

IMX500には、AIの動作に使用されるメモリが8MBあります。これは、モデルのパラメータと特徴マップテンソルに使われます。

数値表現と量子化

IMX500は、さまざまな数値表現(ビット幅)に対応しています。
通常、Model Compression Toolkit(MCT)はモデルを8ビットに量子化し、コンパイル時にSDSPコンバータがIMX500のメモリに収まるようにモデルを生成しようとします。

高度な圧縮技術

IMX500コンバータでメモリに収まらないモデルに対しては、MCTが追加の圧縮オプションを提供します。
これにより、精度への影響を最小限に抑えつつ、メモリ要件をさらに削減できます。
この処理では、**混合精度量子化(MPQ)**などの高度な圧縮技術を自動で適用し、圧縮率も手動で設定できます。

実践的なガイドライン

目安として、400万パラメータ(4MParams)未満の浮動小数点モデルであれば、8ビット量子化(4倍圧縮)によってIMX500上にデプロイ可能です。
それより大きいモデルは、より積極的な圧縮が必要になることがあります。
800万〜1200万パラメータのモデルは、IMX500では実用的でないことが多いです。

出展:https://developer.aitrios.sony-semicon.com/en/raspberrypi-ai-camera/develop/ai-tutorials/compatibility-and-optimization-tutorial?version=2024-11-21&progLang=

圧縮レベルの可視化(図の解説)

  • 左端(緑):MobileNetV2 → 4倍圧縮でOK
  • 中央(黄):EfficientNetV2 B2 → 7倍圧縮(混合精度)で対応可
  • 右端(赤):EfficientNetV2 B3 → 10.5倍圧縮が必要。非現実的

モデル別の具体例

モデル名元のモデルサイズ特徴マップ使用メモリ (MB)8ビット量子化時の重みメモリ (MB)(4x圧縮)8MB超過分 (MB)必要な最小圧縮率
MobileNetV23.5(3.6 MB)1.44.904倍(OK)
EfficientNetV2 B210.2(11.6 MB)1.212.84.87倍(6.8 MB)
EfficientNetV2 B314.5(16.3 MB)1.818.110.110.5倍(6.2 MB)※実用的でない

このように、IMX500では軽量モデルの利用が推奨されます。
「MobileNet」や「EfficientNetV1」などは比較的向いていますが、「B3」以上のサイズになると実用は難しいと考えられます。

続きはまた明日、

https://developer.aitrios.sony-semicon.com/en/raspberrypi-ai-camera/develop/ai-tutorials/prepare-and-deploy-ai-models-tutorial?version=2024-11-21&progLang=

を読み進めたいと思います。

コメントする

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)

上部へスクロール