Ultralytics YOLO11向けSony IMX500エクスポート#
本ガイドでは、Ultralytics YOLO11モデルをSony IMX500センサーを搭載したRaspberry Pi AI Cameraにエクスポートおよびデプロイする方法を解説します。
計算能力が限られたデバイス(Raspberry Pi AI Cameraなど)へのコンピュータビジョンのモデルのデプロイは難しい場合があります。より高速なパフォーマンスに向けて最適化されたモデルフォーマットを使用することで、大きな違いが生まれます。
IMX500モデルフォーマットは、ニューラルネットワークの高速なパフォーマンスを実現しながら電力を最小限に抑えるように設計されています。Ultralytics YOLO11モデルを高速かつ低電力の推論向けに最適化できます。このガイドでは、モデルをIMX500フォーマットにエクスポートしてデプロイする手順を説明し、Raspberry Pi AI Camera上でモデルが適切に動作しやすくします。
IMX500へのエクスポートを行う理由#
SonyのIMX500 Intelligent Vision Sensorは、エッジAI処理におけるゲームチェンジャーとなるハードウェアです。これは、オンチップAI機能を備えた世界初のインテリジェントビジョンセンサーです。このセンサーは、データ処理のボトルネック、プライバシーの懸念、パフォーマンスの制限など、エッジAIにおける多くの課題を克服するのに役立ちます。 他のセンサーが単に画像やフレームを渡すだけであるのに対し、IMX500は完全なストーリーを伝えます。センサー上で直接データを処理するため、デバイスがリアルタイムでインサイトを生成できるようになります。
YOLO11モデル向けのSony IMX500エクスポート#
IMX500は、クラウドにデータを送信して処理することなく、センサー上で直接データを処理する方法を変革するために設計されています。
IMX500は量子化されたモデルで動作します。量子化により、精度をほとんど失うことなく、モデルをより小さく高速にすることができます。エッジコンピューティングの限られたリソースに最適であり、レイテンシを削減してローカルでの迅速なデータ処理を可能にすることで、クラウドに依存せずにアプリケーションが迅速に応答できるようになります。また、リモートサーバーに送信されないため、ローカル処理によってユーザーデータのプライバシーとセキュリティが維持されます。
IMX500の主な特徴:
- メタデータ出力: IMX500は、画像のみを送信する代わりに、画像とメタデータ(推論結果)の両方を出力できるほか、メタデータのみを出力してデータサイズを最小化し、帯域幅とコストを削減することも可能です。
- プライバシーの懸念への対応: デバイス上でデータを処理することで、IMX500はプライバシーの懸念に対応し、人数カウントや占有状況のトラッキングといった人間中心のアプリケーションに最適です。
- リアルタイム処理: 高速なセンサー内処理はリアルタイムの意思決定をサポートし、自律システムなどのエッジAIアプリケーションに最適です。
開始する前に: 最良の結果を得るために、モデルトレーニングガイド、データ準備ガイド、およびハイパーパラメータチューニングガイドに従って、YOLO11モデルがエクスポートに向けて十分に準備されていることを確認してください。
サポートされているタスク#
IMX500 エクスポートは、7つの Ultralytics タスクのうち 4 つをサポートし、YOLOv8n および YOLO11n でのみ利用可能です。その他のモデルファミリ、スケール、アーキテクチャはサポートされておらず、セグメンテーション、OBD、または深度推定モデルのエクスポートを実行するとエラーが発生します。
使用例#
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パッケージは、実行時に追加のエクスポート依存関係をインストールします。エクスポートコマンドを初めて実行する際は、正しく動作させるためにコンソールの再起動が必要になる場合があります。
エクスポートの引数#
| 引数 | タイプ | デフォルト | 説明 |
|---|---|---|---|
format | str | 'imx' | エクスポートするモデルのターゲット形式。さまざまなデプロイ環境との互換性を定義します。 |
imgsz | int または tuple | 640 | モデル入力の希望する画像サイズ。正方形の画像の場合は整数、特定の寸法の指定にはタプル (height, width) を使用できます。 |
quantize | int または str | 8/auto | 量子化精度。8 (INT8/PTQ) は IMX500 に対して自動有効化されます。"w8a16" は FP16 アクティベーションを持つ INT8 重みをエクスポートします。FP32 および FP16 のみのエクスポートはサポートされていません。非推奨となった half および int8 フラグを置き換えます。 |
data | str | None | データセット YAML へのパスであり、量子化に不可欠です。分類の場合は代わりにデータセットディレクトリまたは組み込みデータセット名を指定します。quantize=8 または 'w8a16' で省略した場合、Ultralytics はモデルタスクのデフォルトのキャリブレーションデータセットを選択します。 |
fraction | float、int、または list | 1.0 | 較正サブセットを比率、画像数、または [train, val] の比率/数として指定します。リストを使用すると train または val が制限されますが、test はフルのままになります。 |
nms | bool | False | エクスポートされたモデルに非最大値抑制 (NMS) を追加します。True、conf、iou、および agnostic_nms も受け入れられます。 |
device | str | None | エクスポートするデバイスを指定します: GPU (device=0)、CPU (device=cpu)。 |
CUDA をサポートする GPU でエクスポートする場合は、より高速なエクスポートのために引数 device=0 を渡してください。
エクスポートプロセスの詳細については、Ultralytics documentation page on exporting をご覧ください。
エクスポートプロセスでは、量子化検証用の 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にデプロイできます。
ハードウェアの前提条件#
以下のハードウェアがあることを確認してください:
- Raspberry Pi 5 または Raspberry Pi 4 Model B
- Raspberry Pi AI Camera
Raspberry Pi AI Cameraを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 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()ベンチマーク#
以下の 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データセットを使用して行われました。
内部構造はどうなっていますか?#
Sony Model Compression Toolkit (MCT)#
Sony's Model Compression Toolkit (MCT) は、量子化とプルーニングを通じてディープラーニングモデルを最適化するための強力なツールです。さまざまな量子化方法をサポートし、精度を大幅に犠牲にすることなくモデルサイズと計算量を削減するための高度なアルゴリズムを提供します。MCT は、リソースが制限されたデバイスへのモデルのデプロイに特に役立ち、効率的な推論とレイテンシの削減を保証します。
MCTのサポート機能#
SonyのMCTは、ニューラルネットワークモデルを最適化するために設計されたさまざまな機能を提供します:
- グラフ最適化: バッチ正規化(Batch Normalization)などのレイヤーを先行レイヤーに統合するなど、モデルをより効率的なバージョンに変換します。
- 量子化パラメータ検索: 平均二乗誤差(Mean-Square-Error)、No-Clipping、平均絶対誤差(Mean-Average-Error)などのメトリクスを使用して、量子化ノイズを最小限に抑えます。
- 高度な量子化アルゴリズム:
- シフト負値補正(Shift Negative Correction): 対称アクティベーション量子化によるパフォーマンスの問題に対処します。
- 外れ値フィルタリング(Outliers Filtering): zスコアを使用して外れ値を検出および除去します。
- クラスタリング: より良い分布マッチングのために、非一様な量子化グリッドを利用します。
- 混合精度検索(Mixed-Precision Search): 感度に基づいて、レイヤーごとに異なる量子化ビット幅を割り当てます。
- 可視化: TensorBoardを使用して、モデルパフォーマンスのインサイト、量子化フェーズ、およびビット幅構成を観察します。
量子化#
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)
構造的プルーニング#
MCTは、特定のハードウェアアーキテクチャ向けに設計された、ハードウェアを意識した構造的モデルプルーニングを導入しています。この技術は、SIMDグループをプルーニングすることでターゲットプラットフォームのSIMD(Single Instruction, Multiple Data)機能を活用します。これにより、モデルのサイズと複雑さが削減されると同時に、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 website を参照してください。
よくある質問 (FAQ)#
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を含む、デプロイに必要なファイルが含まれるディレクトリが作成されます。IMX500フォーマットは、エッジデプロイメントにおいていくつかの重要な利点を提供します。
- オンチップAI処理によるレイテンシと消費電力の削減
- 画像のみならず、画像とメタデータ(推論結果)の両方を出力可能
- クラウドに依存せずデータをローカルで処理することによるプライバシーの強化
- 時間的制約のあるアプリケーションに最適なリアルタイム処理能力
- リソースが制限されたデバイス上での効率的なモデルデプロイを実現する最適化された量子化
IMX500モデルをデプロイするには、以下が必要です。
ハードウェア:
- Raspberry Pi 5 または Raspberry Pi 4 Model B
- IMX500センサー搭載のRaspberry Pi AI Camera
ソフトウェア:
- Raspberry Pi OS Bookworm
- IMX500 ファームウェアおよびツール (
sudo apt install imx500-all)
Raspberry Pi AI CameraにおけるUltralyticsのベンチマークに基づく結果は以下の通りです。
- YOLO11nは画像1枚あたり58.82msの推論時間を達成
- COCO128データセットでmAP50-95 0.517を達成
- 量子化後のモデルサイズはわずか2.2MB
これは、IMX500フォーマットがエッジAIアプリケーションにおいて、優れた精度を維持しつつ効率的なリアルタイム推論を提供することを示しています。