Link to this sectionUltralytics YOLO11向けSony IMX500エクスポート#
本ガイドでは、Ultralytics YOLO11モデルをSony IMX500センサーを搭載したRaspberry Pi AI Cameraにエクスポートおよびデプロイする方法を解説します。
Raspberry Pi AI Cameraのように計算能力が限られたデバイスでコンピュータビジョンモデルをデプロイするのは困難な場合があります。より高速なパフォーマンスに向けて最適化されたモデルフォーマットを使用することで、大きな違いが生まれます。
IMX500モデルフォーマットは、ニューラルネットワークの高速なパフォーマンスを実現しながら、消費電力を最小限に抑えるよう設計されています。Ultralytics YOLO11モデルを高速かつ低消費電力の推論向けに最適化することが可能です。本ガイドでは、モデルをIMX500フォーマットへエクスポートしてデプロイする手順を案内し、Raspberry Pi AI Camera上でモデルが容易に高いパフォーマンスを発揮できるようにします。
Link to this sectionIMX500へのエクスポートを行う理由#
SonyのIMX500 Intelligent Vision Sensorは、エッジAI処理における画期的なハードウェアです。これは、オンチップAI機能を備えた世界初のインテリジェントビジョンセンサーです。このセンサーは、データ処理のボトルネック、プライバシーの懸念、パフォーマンスの制限など、エッジAIにおける多くの課題を克服するのに役立ちます。 他のセンサーが画像やフレームを単に転送するのに対し、IMX500は完全なストーリーを伝えます。センサー上で直接データを処理するため、デバイスはリアルタイムでインサイトを生成できるようになります。
Link to this sectionYOLO11モデル向けのSony IMX500エクスポート#
IMX500は、クラウドにデータを送信して処理することなく、センサー上で直接データを処理する方法を変革するために設計されています。
IMX500は量子化モデルに対応しています。量子化により、精度を大きく損なうことなく、モデルをより小さく高速にすることができます。これはエッジコンピューティングの限られたリソースにとって理想的であり、レイテンシを削減し、クラウドに依存することなくローカルで迅速なデータ処理を行うことで、アプリケーションの即時応答を可能にします。また、ローカル処理はデータをリモートサーバーに送信しないため、ユーザーのプライバシーとセキュリティを維持します。
IMX500の主な特徴:
- メタデータ出力: IMX500は、画像のみを送信する代わりに、画像とメタデータ(推論結果)の両方を出力できるほか、メタデータのみを出力してデータサイズを最小化し、帯域幅とコストを削減することも可能です。
- プライバシーの懸念への対応: デバイス上でデータを処理することで、IMX500はプライバシーの懸念に対応し、人数カウントや占有状況のトラッキングといった人間中心のアプリケーションに最適です。
- リアルタイム処理: 高速なセンサー内処理はリアルタイムの意思決定をサポートし、自律システムなどのエッジAIアプリケーションに最適です。
始める前に: 最良の結果を得るために、モデルトレーニングガイド、データ準備ガイド、およびハイパーパラメータチューニングガイドに従い、YOLO11モデルがエクスポートに向けて準備されていることを確認してください。
Link to this sectionサポートされているタスク#
現在、IMX500フォーマットへエクスポートできるのは、以下のタスクを含むモデルのみです。
IMXエクスポートは、YOLOv8nおよびYOLO11n(nano)向けに設計およびベンチマークされています。他のアーキテクチャやモデルスケールはサポートされていません。
Link to this section使用例#
Ultralytics YOLO11モデルをIMX500フォーマットにエクスポートし、エクスポートされたモデルで推論を実行します。
IMX500フォーマットはExport、Predict、およびValidateモードをサポートしています。推論とバリデーションはRaspberry Pi AI Camera (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") from ultralytics import YOLO
# Load the exported IMX500 model
model = YOLO("yolo11n_imx_model")
# Validate accuracy on the COCO8 dataset
metrics = model.val(data="coco8.yaml")Ultralyticsパッケージは、実行時に追加のエクスポート依存関係をインストールします。エクスポートコマンドを初めて実行する際は、正しく動作させるためにコンソールの再起動が必要になる場合があります。
Link to this sectionエクスポートの引数#
| 引数 | タイプ | デフォルト | 説明 |
|---|---|---|---|
format | str | 'imx' | エクスポートするモデルのターゲット形式。さまざまなデプロイ環境との互換性を定義します。 |
imgsz | intまたはtuple | 640 | モデル入力用の希望する画像サイズ。正方形画像の場合は整数、特定の寸法の場合はタプル(height, width)を指定できます。 |
int8 | bool | True | INT8量子化を有効にし、モデルをさらに圧縮して、主にエッジデバイス向けに精度を最小限の損失に抑えつつ推論を高速化します。 |
data | str | 'coco8.yaml' | データセット構成ファイルへのパス(デフォルト: coco8.yaml)。量子化に不可欠です。 |
fraction | float | 1.0 | INT8量子化キャリブレーションに使用するデータセットの割合を指定します。フルデータセットのサブセットでキャリブレーションを行えるため、実験やリソースが限られている場合に便利です。INT8が有効で指定されていない場合、フルデータセットが使用されます。 |
nms | bool | False | エクスポートされたモデルにNMS(Non-Maximum Suppression)を追加します。Trueの場合、conf、iou、agnostic_nmsも受け入れられます。 |
device | str | None | エクスポート用のデバイスを指定します: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.pbtxtLink to this sectionデプロイにおけるIMX500エクスポートの使用#
Ultralytics YOLO11nモデルをIMX500フォーマットにエクスポートした後、推論のためにRaspberry Pi AI Cameraにデプロイできます。
Link to this sectionハードウェアの前提条件#
以下のハードウェアがあることを確認してください:
- Raspberry Pi 5 または Raspberry Pi 4 Model B
- Raspberry Pi AI Camera
Raspberry Pi AI CameraをRaspberry Piの15ピンMIPI CSIコネクタに接続し、Raspberry Piの電源を入れます。
Link to this sectionソフトウェアの前提条件#
本ガイドは、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 application module libraryをインストールします。
pip install git+https://github.com/SonySemiconductorSolutions/aitrios-rpi-application-module-library.gitステップ 5: aitrios-rpi-application-module-library examplesで利用可能な以下のスクリプトを使用して、YOLO11のオブジェクト検出、ポーズ推定、分類、およびセグメンテーションを実行します。
これらのスクリプトを実行する前に、環境に合わせて model_file および labels.txt のディレクトリを必ず置き換えてください。
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 FPS 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()Link to this sectionベンチマーク#
以下のYOLOv8n、YOLO11n、YOLOv8n-pose、YOLO11n-pose、YOLOv8n-clsおよびYOLO11n-clsのベンチマークは、UltralyticsチームがRaspberry Pi AI Camera上で imx モデルフォーマットを使用して速度と精度を測定したものです。
| モデル | 形式 | サイズ (ピクセル) | packerOut.zip のサイズ (MB) | mAP50-95(B) | 推論時間 (ms/im) |
|---|---|---|---|---|---|
| YOLOv8n | imx | 640 | 2.1 | 0.470 | 58.79 |
| YOLO11n | imx | 640 | 2.2 | 0.517 | 58.82 |
| YOLOv8n-pose | imx | 640 | 2.0 | 0.687 | 58.79 |
| YOLO11n-pose | imx | 640 | 2.1 | 0.788 | 62.50 |
| モデル | 形式 | サイズ (ピクセル) | packerOut.zip のサイズ (MB) | acc (top1) | acc (top5) | 推論時間 (ms/im) |
|---|---|---|---|---|---|---|
| YOLOv8n-cls | imx | 224 | 2.3 | 0.25 | 0.5 | 33.31 |
| YOLO11n-cls | imx | 224 | 2.3 | 0.25 | 0.417 | 33.31 |
上記のベンチマークのバリデーションは、検出モデルにはCOCO128データセット、ポーズ推定モデルにはCOCO8-Poseデータセット、分類モデルにはImageNet10データセットを使用して行われました。
Link to this section内部構造はどうなっていますか?#
Link to this sectionSony Model Compression Toolkit (MCT)#
Sony's Model Compression Toolkit (MCT)は、量子化とプルーニングを通じてディープラーニングモデルを最適化するための強力なツールです。さまざまな量子化手法をサポートし、精度を大幅に犠牲にすることなくモデルサイズと計算の複雑さを軽減するための高度なアルゴリズムを提供します。MCTは、リソースが制限されたデバイスへのモデルデプロイに特に有用であり、効率的な推論とレイテンシの削減を保証します。
Link to this sectionMCTのサポート機能#
SonyのMCTは、ニューラルネットワークモデルを最適化するために設計されたさまざまな機能を提供します:
- グラフ最適化: バッチ正規化(Batch Normalization)などのレイヤーを先行レイヤーに統合するなど、モデルをより効率的なバージョンに変換します。
- 量子化パラメータ検索: 平均二乗誤差(Mean-Square-Error)、No-Clipping、平均絶対誤差(Mean-Average-Error)などのメトリクスを使用して、量子化ノイズを最小限に抑えます。
- 高度な量子化アルゴリズム:
- シフト負値補正(Shift Negative Correction): 対称アクティベーション量子化によるパフォーマンスの問題に対処します。
- 外れ値フィルタリング(Outliers Filtering): zスコアを使用して外れ値を検出および除去します。
- クラスタリング: より良い分布マッチングのために、非一様な量子化グリッドを利用します。
- 混合精度検索(Mixed-Precision Search): 感度に基づいて、レイヤーごとに異なる量子化ビット幅を割り当てます。
- 可視化: TensorBoardを使用して、モデルパフォーマンスのインサイト、量子化フェーズ、およびビット幅構成を観察します。
Link to this section量子化#
MCTは、モデルサイズを削減し推論速度を向上させるために、いくつかの量子化手法をサポートしています:
- Post-Training Quantization (PTQ):
- KerasおよびPyTorch API経由で利用可能です。
- 複雑さ: 低
- 計算コスト: 低 (CPU数分)
- Gradient-based Post-Training Quantization (GPTQ):
- KerasおよびPyTorch API経由で利用可能です。
- 複雑さ: 中
- 計算コスト: 中程度 (GPUで2~3時間)
- Quantization-Aware Training (QAT):
- 複雑さ: 高
- 計算コスト: 高 (GPUで12~36時間)
MCTは、ウェイトおよびアクティベーションに対するさまざまな量子化スキームもサポートしています:
- Power-of-Two (ハードウェアフレンドリー)
- 対称 (Symmetric)
- 一様 (Uniform)
Link to this section構造的プルーニング#
MCTは、特定のハードウェアアーキテクチャ向けに設計された、ハードウェアを意識した構造的モデルプルーニングを導入しています。この技術は、SIMDグループをプルーニングすることでターゲットプラットフォームのSIMD(Single Instruction, Multiple Data)機能を活用します。これにより、モデルのサイズと複雑さが削減されると同時に、SIMDアーキテクチャに合わせてチャネル利用率が最適化され、重みのメモリフットプリントがターゲットのリソース利用量に合わせて調整されます。KerasおよびPyTorch APIを通じて利用可能です。
Link to this sectionIMX500コンバーターツール(コンパイラ)#
IMX500コンバーターツールはIMX500ツールセットに不可欠な要素であり、SonyのIMX500センサー(Raspberry Pi AI Cameraなど)にデプロイするためのモデルのコンパイルを可能にします。このツールは、Ultralyticsソフトウェアで処理されたUltralytics YOLO11モデルの移行を促進し、指定されたハードウェアとの互換性と効率的なパフォーマンスを保証します。モデル量子化後のエクスポート手順では、必須データとデバイス固有の設定をカプセル化したバイナリファイルが生成され、Raspberry Pi AI Cameraへのデプロイプロセスが効率化されます。
Link to this section実際のユースケース#
IMX500フォーマットへのエクスポートは、さまざまな業界で幅広く適用可能です。以下にいくつかの例を示します。
- エッジAIとIoT: 低電力デバイスでのリアルタイム処理が不可欠なドローンや監視カメラでの物体検出を実現します。
- ウェアラブルデバイス: 健康モニタリングウェアラブル向けの小規模AI処理に最適化されたモデルをデプロイします。
- スマートシティ: より高速な処理と最小限のレイテンシを実現し、交通監視や安全分析にIMX500でエクスポートされたYOLO11モデルを使用します。
- 小売分析: 最適化されたモデルをPOSシステムやスマートシェルフにデプロイすることで、店舗内の監視を強化します。
Link to this section結論#
Ultralytics YOLO11モデルをSonyのIMX500フォーマットにエクスポートすることで、IMX500ベースのカメラで効率的な推論を行うためにモデルをデプロイできます。高度な量子化技術を活用することで、精度を著しく低下させることなく、モデルサイズを削減し、推論速度を向上させることが可能です。
詳細情報およびガイドラインについては、SonyのIMX500ウェブサイトを参照してください。
Link to this sectionよくある質問 (FAQ)#
Link to this sectionYOLO11モデルを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を含む、デプロイに必要なファイル一式が保存されたディレクトリが作成されます。
Link to this sectionエッジAIデプロイメントにIMX500フォーマットを使用する主な利点は何ですか?#
IMX500フォーマットは、エッジデプロイメントにおいていくつかの重要な利点を提供します。
- オンチップAI処理によるレイテンシと消費電力の削減
- 画像のみならず、画像とメタデータ(推論結果)の両方を出力可能
- クラウドに依存せずデータをローカルで処理することによるプライバシーの強化
- 時間的制約のあるアプリケーションに最適なリアルタイム処理能力
- リソースが制限されたデバイス上での効率的なモデルデプロイを実現する最適化された量子化
Link to this sectionIMX500デプロイメントにはどのようなハードウェアおよびソフトウェアの前提条件が必要ですか?#
IMX500モデルをデプロイするには、以下が必要です。
ハードウェア:
- Raspberry Pi 5 または Raspberry Pi 4 Model B
- IMX500センサー搭載のRaspberry Pi AI Camera
ソフトウェア:
- Raspberry Pi OS Bookworm
- IMX500ファームウェアおよびツール (
sudo apt install imx500-all)
Link to this sectionIMX500上でYOLO11モデルからどのようなパフォーマンスが期待できますか?#
Raspberry Pi AI CameraにおけるUltralyticsのベンチマークに基づく結果は以下の通りです。
- YOLO11nは画像1枚あたり58.82msの推論時間を達成
- COCO128データセットでmAP50-95 0.517を達成
- 量子化後のモデルサイズはわずか2.2MB
これは、IMX500フォーマットがエッジAIアプリケーションにおいて、優れた精度を維持しつつ効率的なリアルタイム推論を提供することを示しています。