Ultralytics YOLO11用 Sony IMX500 エクスポート

本ガイドでは、Ultralytics YOLO11 モデルを、Sony IMX500 センサーを搭載した Raspberry Pi AI Camera にエクスポートおよびデプロイする方法を解説します。

Raspberry Pi AI Camera のような計算能力に制限のあるデバイスでコンピュータービジョンモデルをデプロイするのは難しい場合があります。パフォーマンスを高速化するために最適化されたモデルフォーマットを使用することは、大きな違いを生みます。

IMX500 モデルフォーマットは、ニューラルネットワークにおいて最小限の電力で高速なパフォーマンスを発揮するように設計されています。Ultralytics YOLO11 モデルを、高速かつ低電力の推論用に最適化できます。本ガイドでは、Raspberry Pi AI Camera 上でモデルが容易に動作するように、モデルを IMX500 フォーマットにエクスポートおよびデプロイする手順を説明します。

Raspberry Pi AI Camera with Sony IMX500 sensor

なぜ IMX500 にエクスポートするのか?

Sony の IMX500 Intelligent Vision Sensor は、エッジ AI 処理における画期的なハードウェアです。これは、オンチップ AI 機能を備えた世界初のインテリジェントビジョンセンサーです。このセンサーは、データ処理のボトルネック、プライバシーの懸念、パフォーマンスの制限など、エッジ AI における多くの課題を克服するのに役立ちます。 他のセンサーが単に画像やフレームを渡すだけであるのに対し、IMX500 は全体像を把握します。データをセンサー上で直接処理するため、デバイスがリアルタイムでインサイトを生成することを可能にします。

YOLO11 モデル用 Sony IMX500 エクスポート

IMX500 は、クラウドに送信して処理することなく、デバイス上で直接データを処理する方法を刷新するように設計されています。

IMX500 は量子化モデルと連携します。量子化により、精度をほとんど損なうことなく、モデルをより小さく、より高速にできます。これは、エッジコンピューティングの限られたリソースにとって理想的であり、レイテンシを削減し、クラウドに依存せずローカルで高速なデータ処理を可能にすることで、アプリケーションの迅速な応答を実現します。ローカル処理は、ユーザーデータがリモートサーバーに送信されないため、プライバシーとセキュリティを維持します。

IMX500 の主な特徴:

  • メタデータ出力: IMX500 は、画像のみを送信する代わりに、画像とメタデータ(推論結果)の両方を出力したり、メタデータのみを出力したりすることで、データサイズを最小化し、帯域幅を削減してコストを低減できます。
  • プライバシーの懸念への対応: デバイス上でデータを処理することで、IMX500 はプライバシーの懸念に対処し、人数カウントや占有トラッキングといった人間中心のアプリケーションに最適です。
  • リアルタイム処理: 高速なセンサー内処理はリアルタイムの判断をサポートしており、自律システムなどのエッジ AI アプリケーションに最適です。

始める前に: 最良の結果を得るために、モデルトレーニングガイドデータ準備ガイド、およびハイパーパラメータチューニングガイドに従って、YOLO11 モデルがエクスポートに向けて適切に準備されていることを確認してください。

サポートされているタスク

現在、IMX500 フォーマットにエクスポートできるのは、以下のタスクを含むモデルのみです。

サポートされているモデルバリアント

IMX エクスポートは、YOLOv8n および YOLO11n (nano) 向けに設計およびベンチマークされています。他のアーキテクチャやモデルスケールはサポートされていません。

使用例

Ultralytics YOLO11 モデルを IMX500 フォーマットにエクスポートし、エクスポートしたモデルで推論を実行します。

注意

ここでは、モデルが期待通りに動作することを確認するために推論を実行します。ただし、Raspberry Pi AI Camera でのデプロイと推論については、Using IMX500 Export in Deployment セクションにスキップしてください。

物体検出
 from ultralytics import YOLO

 # Load a YOLO11n PyTorch model
 model = YOLO("yolo11n.pt")

 # Export the model
 model.export(format="imx", data="coco8.yaml")  # exports with PTQ quantization by default

 # Load the exported model
 imx_model = YOLO("yolo11n_imx_model")

 # Run inference
 results = imx_model("https://ultralytics.com/images/bus.jpg")
姿勢推定
 from ultralytics import YOLO

 # Load a YOLO11n-pose PyTorch model
 model = YOLO("yolo11n-pose.pt")

 # Export the model
 model.export(format="imx", data="coco8-pose.yaml")  # exports with PTQ quantization by default

 # Load the exported model
 imx_model = YOLO("yolo11n-pose_imx_model")

 # Run inference
 results = imx_model("https://ultralytics.com/images/bus.jpg")
分類
 from ultralytics import YOLO

 # Load a YOLO11n-cls PyTorch model
 model = YOLO("yolo11n-cls.pt")

 # Export the model
 model.export(format="imx", data="imagenet10")  # exports with PTQ quantization by default

 # Load the exported model
 imx_model = YOLO("yolo11n-cls_imx_model")

 # Run inference
 results = imx_model("https://ultralytics.com/images/bus.jpg", imgsz=224)
インスタンスセグメンテーション
 from ultralytics import YOLO

 # Load a YOLO11n-seg PyTorch model
 model = YOLO("yolo11n-seg.pt")

 # Export the model
 model.export(format="imx", data="coco8-seg.yaml")  # exports with PTQ quantization by default

 # Load the exported model
 imx_model = YOLO("yolo11n-seg_imx_model")

 # Run inference
 results = imx_model("https://ultralytics.com/images/bus.jpg")
警告

Ultralytics パッケージは、実行時に追加のエクスポート依存関係をインストールします。エクスポートコマンドを最初に実行するときは、正しく機能するようにコンソールを再起動する必要がある場合があります。

エクスポート引数

引数タイプデフォルト説明
formatstr'imx'エクスポートされたモデルのターゲットフォーマット。さまざまなデプロイ環境との互換性を定義します。
imgszint または tuple640モデル入力に希望する画像サイズ。正方形の画像の場合は整数、特定の寸法のタプル (height, width) で指定できます。
int8boolTrueINT8量子化をアクティブにし、主にエッジデバイス向けに、精度の損失を最小限に抑えながらモデルをさらに圧縮し、推論を高速化します。
datastr'coco8.yaml'データセット構成ファイルへのパス(デフォルト: coco8.yaml)。量子化に不可欠です。
fractionfloat1.0INT8 量子化キャリブレーションに使用するデータセットの割合を指定します。フルデータセットの一部を使用してキャリブレーションを行うことができ、実験時やリソースが限られている場合に便利です。INT8 を有効にして指定されていない場合は、フルデータセットが使用されます。
nmsboolFalseエクスポートされたモデルに Non-Maximum Suppression (NMS) を追加します。True の場合、confiou、および agnostic_nms も受け付けられます。
devicestrNoneエクスポート用のデバイスを指定します: GPU (device=0)、CPU (device=cpu)。
ヒント

CUDA をサポートする GPU 上でエクスポートを行う場合は、高速化のために引数 device=0 を渡してください。

エクスポートプロセスの詳細については、エクスポートに関するUltralyticsドキュメントページをご覧ください。

エクスポートプロセスにより、量子化検証用の ONNX モデルと、<model-name>_imx_model というディレクトリが作成されます。このディレクトリには、IMX500 ハードウェアへのデプロイ用にモデルをパッケージ化するために不可欠な packerOut.zip ファイルが含まれます。さらに、<model-name>_imx_model フォルダには、モデルに関連付けられたすべてのラベルをリストしたテキストファイル (labels.txt) が含まれます。

フォルダ構成
yolo11n_imx_model
├── dnnParams.xml
├── labels.txt
├── packerOut.zip
├── model_imx.onnx
├── model_imx_MemoryReport.json
└── model_imx.pbtxt

デプロイでの IMX500 エクスポートの使用

Ultralytics YOLO11n モデルを IMX500 フォーマットにエクスポートした後、推論のために Raspberry Pi AI Camera にデプロイできます。

ハードウェアの前提条件

以下のハードウェアがあることを確認してください:

  1. Raspberry Pi 5 または Raspberry Pi 4 Model B
  2. Raspberry Pi AI Camera

Raspberry Pi AI カメラを Raspberry Pi の 15 ピン MIPI CSI コネクタに接続し、Raspberry Pi の電源を入れます。

ソフトウェアの前提条件

注意

このガイドは、Raspberry Pi 5 上で実行される Raspberry Pi OS Bookworm でテストされています。

ステップ 1: ターミナルウィンドウを開き、次のコマンドを実行して Raspberry Pi ソフトウェアを最新バージョンに更新します。

sudo apt update && sudo apt full-upgrade

ステップ 2: IMX500 センサーを動作させるために必要な IMX500 ファームウェアをインストールします。

sudo apt install imx500-all

ステップ 3: 変更を有効にするために Raspberry Pi を再起動します。

sudo reboot

ステップ 4: Aitrios Raspberry Pi アプリケーションモジュールライブラリ をインストールします。

pip install git+https://github.com/SonySemiconductorSolutions/aitrios-rpi-application-module-library.git

ステップ 5: aitrios-rpi-application-module-library の例 で利用可能な以下のスクリプトを使用して、YOLO11 の物体検出、姿勢推定、分類、およびセグメンテーションを実行します。

注意

これらのスクリプトを実行する前に、環境に合わせて model_filelabels.txt のディレクトリを必ず置き換えてください。

Python スクリプト
import numpy as np
from modlib.apps import Annotator
from modlib.devices import AiCamera
from modlib.models import COLOR_FORMAT, MODEL_TYPE, Model
from modlib.models.post_processors import pp_od_yolo_ultralytics

class YOLO(Model):
    """YOLO model for IMX500 deployment."""

    def __init__(self):
        """Initialize the YOLO model for IMX500 deployment."""
        super().__init__(
            model_file="yolo11n_imx_model/packerOut.zip",  # replace with proper directory
            model_type=MODEL_TYPE.CONVERTED,
            color_format=COLOR_FORMAT.RGB,
            preserve_aspect_ratio=False,
        )

        self.labels = np.genfromtxt(
            "yolo11n_imx_model/labels.txt",  # replace with proper directory
            dtype=str,
            delimiter="\n",
        )

    def post_process(self, output_tensors):
        """Post-process the output tensors for object detection."""
        return pp_od_yolo_ultralytics(output_tensors)

device = AiCamera(frame_rate=16)  # Optimal frame rate for maximum DPS of the YOLO model running on the AI Camera
model = YOLO()
device.deploy(model)

annotator = Annotator()

with device as stream:
    for frame in stream:
        detections = frame.detections[frame.detections.confidence > 0.55]
        labels = [f"{model.labels[class_id]}: {score:0.2f}" for _, score, class_id, _ in detections]

        annotator.annotate_boxes(frame, detections, labels=labels, alpha=0.3, corner_radius=10)
        frame.display()

ベンチマーク

以下の YOLOv8n、YOLO11n、YOLOv8n-pose、YOLO11n-pose、YOLOv8n-cls、および YOLO11n-cls のベンチマークは、Ultralytics チームが Raspberry Pi AI Camera 上で imx モデルフォーマットを使用して速度と精度を測定したものです。

モデル形式サイズ (ピクセル)packerOut.zip のサイズ (MB)mAP50-95(B)推論時間 (ms/im)
YOLOv8nimx6402.10.47058.79
YOLO11nimx6402.20.51758.82
YOLOv8n-poseimx6402.00.68758.79
YOLO11n-poseimx6402.10.78862.50
モデル形式サイズ (ピクセル)packerOut.zip のサイズ (MB)acc (top1)acc (top5)推論時間 (ms/im)
YOLOv8n-clsimx2242.30.250.533.31
YOLO11n-clsimx2242.30.250.41733.31
注意

上記のベンチマークの検証は、検出モデルには COCO128 データセット、姿勢推定モデルには COCO8-Pose データセット、分類モデルには ImageNet10 を使用して行われました。

仕組みの解説

Sony IMX500 YOLO model deployment workflow

Sony Model Compression Toolkit (MCT)

Sony's Model Compression Toolkit (MCT) は、量子化と枝刈り(プルーニング)を通じてディープラーニングモデルを最適化するための強力なツールです。様々な量子化手法をサポートし、精度を大幅に犠牲にすることなくモデルサイズと計算量を削減するための高度なアルゴリズムを提供します。MCT は、リソースが限られたデバイスへのモデルデプロイに特に有効であり、効率的な推論とレイテンシの短縮を保証します。

MCT がサポートする機能

Sony の MCT は、ニューラルネットワークモデルを最適化するために設計された様々な機能を提供します:

  1. グラフ最適化: バッチ正規化層を先行する層に折り畳むなど、モデルをより効率的なバージョンに変換します。
  2. 量子化パラメータ検索: 平均二乗誤差 (MSE)、No-Clipping、平均絶対誤差 (MAE) などの指標を使用して量子化ノイズを最小化します。
  3. 高度な量子化アルゴリズム:
    • 負値シフト補正: 対称的な活性化量子化によるパフォーマンスの問題に対処します。
    • 外れ値フィルタリング: zスコアを使用して外れ値を検出し、除去します。
    • クラスタリング: より良い分布マッチングのために、非均一な量子化グリッドを利用します。
    • 混合精度検索: 感度に基づいて、層ごとに異なる量子化ビット幅を割り当てます。
  4. 可視化: TensorBoard を使用して、モデルのパフォーマンス、量子化フェーズ、ビット幅の構成に関するインサイトを観察します。

量子化

MCT は、モデルサイズを削減し、推論速度を向上させるためのいくつかの量子化手法をサポートしています:

  1. 学習後量子化 (PTQ):
    • Keras および PyTorch API を通じて利用可能。
    • 複雑さ: 低
    • 計算コスト: 低 (CPU 分単位)
  2. 勾配ベース学習後量子化 (GPTQ):
    • Keras および PyTorch API を通じて利用可能。
    • 複雑さ: 中
    • 計算コスト: 中程度 (2〜3 GPU 時間)
  3. 量子化認識トレーニング (QAT):
    • 複雑さ: 高
    • 計算コスト: 高 (12〜36 GPU 時間)

MCT は、重みと活性化に関する様々な量子化スキームもサポートしています:

  1. Power-of-Two (ハードウェアフレンドリー)
  2. 対称 (Symmetric)
  3. 均一 (Uniform)

構造的プルーニング

MCT は、特定のハードウェアアーキテクチャ向けに設計された構造的かつハードウェア認識型のモデルプルーニングを導入しています。この手法は、SIMD グループをプルーニングすることで、ターゲットプラットフォームの単一命令複数データ (SIMD) 機能を活用します。これにより、モデルのサイズと複雑さが削減されると同時に、重みメモリフットプリントのターゲットを絞ったリソース利用に向けて SIMD アーキテクチャに適合したチャネル利用が最適化されます。Keras および PyTorch API を通じて利用可能です。

IMX500 コンバーターツール (コンパイラ)

IMX500 コンバーターツールは IMX500 ツールセットに不可欠なものであり、Sony の IMX500 センサー(Raspberry Pi AI Camera など)へのデプロイ用にモデルをコンパイルできます。このツールは、Ultralytics ソフトウェアで処理された Ultralytics YOLO11 モデルの変換を容易にし、指定されたハードウェアとの互換性を確保して効率的に動作するようにします。モデル量子化後のエクスポート手順には、必須データとデバイス固有の設定をカプセル化するバイナリファイルの生成が含まれ、Raspberry Pi AI Camera でのデプロイプロセスを効率化します。

実際のユースケース

IMX500 フォーマットへのエクスポートは、業界全体で幅広い適用可能性を持っています。いくつか例を挙げます:

  • エッジ AI と IoT: ドローンや防犯カメラでの物体検出を可能にします。ここでは、低電力デバイスでのリアルタイム処理が不可欠です。
  • ウェアラブルデバイス: 健康監視ウェアラブル上で、小規模な AI 処理用に最適化されたモデルをデプロイします。
  • スマートシティ: IMX500向けにエクスポートしたYOLO11モデルを使用することで、交通監視や安全分析における処理速度を向上させ、レイテンシを最小限に抑えることができます。
  • リテールアナリティクス: 最適化されたモデルをPOSシステムやスマートシェルフにデプロイし、店舗内の監視を強化します。

結論

Ultralytics YOLO11モデルをSonyのIMX500フォーマットにエクスポートすることで、IMX500ベースのカメラ上で効率的な推論を行うモデルをデプロイできます。高度な量子化技術を活用することで、精度を大きく損なうことなくモデルサイズを削減し、推論速度を向上させることが可能です。

詳細な情報やガイドラインについては、SonyのIMX500ウェブサイトを参照してください。

FAQ

YOLO11モデルをRaspberry Pi AI Camera用のIMX500フォーマットにエクスポートするにはどうすればよいですか?

YOLO11モデルをIMX500フォーマットにエクスポートするには、Python APIまたはCLIコマンドを使用します。

from ultralytics import YOLO

model = YOLO("yolo11n.pt")
model.export(format="imx")  # Exports with PTQ quantization by default

エクスポート処理を行うと、packerOut.zipを含む、デプロイに必要なファイルが格納されたディレクトリが作成されます。

エッジAIデプロイメントでIMX500フォーマットを使用する主な利点は何ですか?

IMX500フォーマットには、エッジデプロイメントにおいていくつかの重要な利点があります。

  • オンチップAI処理によるレイテンシと消費電力の低減
  • 画像だけでなく、画像とメタデータ(推論結果)の両方を出力可能
  • クラウドに依存せずデータをローカルで処理することによるプライバシーの強化
  • 時間的制約のあるアプリケーションに最適なリアルタイム処理能力
  • リソースが制限されたデバイス上での効率的なモデルデプロイに向けた最適化された量子化

IMX500デプロイメントにはどのようなハードウェアおよびソフトウェアの前提条件が必要ですか?

IMX500モデルをデプロイするには、以下が必要です:

ハードウェア:

  • Raspberry Pi 5 または Raspberry Pi 4 Model B
  • IMX500センサー搭載のRaspberry Pi AI Camera

ソフトウェア:

  • Raspberry Pi OS Bookworm
  • IMX500ファームウェアおよびツール (sudo apt install imx500-all)

IMX500上でYOLO11モデルを使用した場合、どのようなパフォーマンスが期待できますか?

Raspberry Pi AI CameraにおけるUltralyticsのベンチマーク結果に基づくと、以下の通りです:

  • YOLO11nは画像1枚あたり62.50msの推論時間を達成
  • COCO128データセットでmAP50-95が0.492
  • 量子化後のモデルサイズはわずか3.2MB

これは、IMX500フォーマットがエッジAIアプリケーションにおいて、優れた精度を維持しながら効率的なリアルタイム推論を提供することを示しています。

コメント