Ultralytics YOLO11向けSony IMX500エクスポート#
このガイドでは、Sony IMX500センサーを搭載したRaspberry Pi AI CamerasにUltralytics YOLO11モデルをエクスポートしてデプロイする方法を説明します。
Raspberry Pi AI Cameraのような計算能力に制限のあるデバイスにコンピュータービジョンモデルをデプロイするのは、難しい場合があります。より高速なパフォーマンスに最適化されたモデル形式を使用すると、大きな違いが生まれます。
IMX500モデル形式は、ニューラルネットワークで高速なパフォーマンスを実現しながら、消費電力を最小限に抑えるように設計されています。Ultralytics YOLO11モデルを高速かつ低消費電力の推論向けに最適化できます。このガイドでは、モデルがRaspberry Pi AI Camera上で適切に動作しやすくなるように、モデルをIMX500形式へエクスポートしてデプロイする手順を説明します。
IMX500にエクスポートする理由#
SonyのIMX500 Intelligent Vision Sensorは、エッジAI処理に革新をもたらすハードウェアです。オンチップAI機能を備えた世界初のインテリジェントビジョンセンサーです。このセンサーは、データ処理のボトルネック、プライバシー上の懸念、パフォーマンスの制約など、エッジAIにおける多くの課題の解決に役立ちます。 他のセンサーが単に画像やフレームを送信するだけであるのに対し、IMX500はデータ全体を処理します。センサー上でデータを直接処理するため、デバイスはリアルタイムにインサイトを生成できます。
SonyのYOLO11モデル向けIMX500エクスポート#
IMX500は、処理のためにデータをクラウドへ送信することなく、センサー上でデバイスのデータ処理方法を変革するように設計されています。
IMX500は量子化モデルに対応しています。量子化により、精度を大きく損なうことなく、モデルを小型化して高速化できます。エッジコンピューティングの限られたリソースに適しており、レイテンシを削減し、クラウドに依存せずローカルでデータを迅速に処理することで、アプリケーションが素早く応答できるようになります。ローカル処理ではユーザーデータをリモートサーバーへ送信しないため、データのプライバシーと安全性も維持できます。
IMX500の主な機能:
- メタデータ出力: IMX500は画像だけでなく、画像とメタデータ(推論結果)の両方を出力できます。また、データサイズ、帯域幅、コストを削減するために、メタデータのみを出力することもできます。
- プライバシー上の懸念に対応: デバイス上でデータを処理することで、IMX500はプライバシー上の懸念に対応します。人物カウントや占有状況の追跡など、人を中心としたアプリケーションに適しています。
- リアルタイム処理: 高速なセンサー上処理によりリアルタイムの意思決定をサポートし、自律システムなどのエッジAIアプリケーションに最適です。
開始する前に: 最良の結果を得るには、モデル学習ガイド、データ準備ガイド、ハイパーパラメータチューニングガイドに従い、YOLO11モデルをエクスポートに向けて適切に準備してください。
サポートされるタスク#
IMX500エクスポートは、7つあるUltralyticsのタスクのうち4つに対応していますが、YOLOv8nとYOLO11nに限られます。他のモデルファミリー、スケール、アーキテクチャには対応しておらず、セマンティックセグメンテーション、OBB、深度推定モデルをエクスポートするとエラーが発生します。
使用例#
Ultralytics YOLO11モデルをIMX500形式にエクスポートし、エクスポートしたモデルで推論を実行します。
IMX500形式は、Export、Predict、Validateモードに対応しています。推論と検証はRaspberry Pi AI Camera(IMX500)上で実行されます。
ここでは、モデルが期待どおりに動作することを確認するために推論を実行します。ただし、Raspberry Pi AI Cameraでのデプロイと推論については、デプロイでIMX500エクスポートを使用するセクションに進んでください。
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, test] の比率/枚数として指定します。2項目のリストでは、test はすべて使用され、0 はスキップされます。 |
nms | bool、オプション | None | 生出力(None、デフォルト)、組み込み NMS(True)、または NMS フリーヘッド(False)を選択します。IMX は検出、セグメンテーション、ポーズに nms=True を必要とし、自動的にそれを選択します。 |
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.pbtxtデプロイでIMX500エクスポートを使用する#
Ultralytics YOLO11nモデルをIMX500形式にエクスポートした後、推論用にRaspberry Pi AI Cameraへデプロイできます。
ハードウェア要件#
以下のハードウェアを用意してください。
- Raspberry Pi 5またはRaspberry Pi 4 Model B
- 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 application module libraryをインストールします。
pip install git+https://github.com/SonySemiconductorSolutions/aitrios-rpi-application-module-library.gitステップ5: aitrios-rpi-application-module-libraryのサンプルで利用できる以下のスクリプトを使用して、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のベンチマークは、imxモデル形式を使用し、速度と精度を測定して、UltralyticsチームがRaspberry Pi AI Camera上で実行しました。
| モデル | 形式 | サイズ(ピクセル) | packerOut.zipのサイズ(MB) | mAP50-95(B) | 推論時間(ms/画像) |
|---|---|---|---|---|---|
| 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/画像) |
|---|---|---|---|---|---|---|
| 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のModel Compression Toolkit(MCT)は、量子化とプルーニングによってディープラーニングモデルを最適化する強力なツールです。さまざまな量子化手法に対応し、精度を大きく損なうことなくモデルサイズと計算の複雑さを削減する高度なアルゴリズムを提供します。MCTは、リソースに制約のあるデバイスへのモデルのデプロイに特に有用で、効率的な推論とレイテンシの削減を実現します。
MCTの対応機能#
SonyのMCTには、ニューラルネットワークモデルを最適化するために設計されたさまざまな機能があります。
- グラフ最適化: バッチ正規化などのレイヤーを前のレイヤーに折り込むことで、モデルをより効率的な形式に変換します。
- 量子化パラメータ検索: 平均二乗誤差、クリッピングなし、平均絶対誤差などの指標を使用して、量子化ノイズを最小化します。
- 高度な量子化アルゴリズム:
- シフト負補正: 対称アクティベーション量子化によるパフォーマンスの問題に対応します。
- 外れ値フィルタリング: zスコアを使用して外れ値を検出し、除去します。
- クラスタリング: 分布のマッチングを改善するために、不均一量子化グリッドを利用します。
- 混合精度検索: 感度に基づいて、レイヤーごとに異なる量子化ビット幅を割り当てます。
- 可視化: TensorBoardを使用して、モデルパフォーマンスのインサイト、量子化フェーズ、ビット幅の構成を確認します。
量子化#
MCTは、モデルサイズを削減し、推論速度を向上させるための複数の量子化手法に対応しています。
- 学習後量子化(PTQ):
- KerasおよびPyTorch APIから利用できます。
- 複雑さ: 低
- 計算コスト: 低(CPUで数分)
- 勾配ベースの学習後量子化(GPTQ):
- KerasおよびPyTorch APIから利用できます。
- 複雑さ: 中
- 計算コスト: 中程度(GPUで2~3時間)
- 量子化認識トレーニング(QAT):
- 複雑さ: 高
- 計算コスト: 高(GPUで12~36時間)
MCTは、重みとアクティベーション向けのさまざまな量子化スキームにも対応しています。
- 2のべき乗(ハードウェアフレンドリー)
- 対称
- 均一
構造化プルーニング#
MCTは、特定のハードウェアアーキテクチャ向けに設計された、構造化されたハードウェア対応モデルプルーニングを導入します。この手法では、SIMDグループをプルーニングすることで、対象プラットフォームの単一命令・複数データ(SIMD)機能を活用します。これにより、モデルサイズと複雑さを削減しながら、チャネル利用率を最適化し、対象リソースで重みのメモリフットプリントを効率的に利用できるようSIMDアーキテクチャに適合させます。KerasおよびPyTorch APIから利用できます。
IMX500 Converter Tool(コンパイラー)#
IMX500 Converter ToolはIMX500ツールセットの重要な構成要素であり、SonyのIMX500センサー(Raspberry Pi AI Camerasなど)へのデプロイ用にモデルをコンパイルできます。このツールにより、Ultralyticsソフトウェアで処理したUltralytics YOLO11モデルを、指定したハードウェアで互換性を持たせ、効率的に動作させることができます。モデル量子化後のエクスポート手順では、重要なデータとデバイス固有の構成を格納したバイナリファイルが生成され、Raspberry Pi AI Cameraへのデプロイプロセスが効率化されます。
実世界でのユースケース#
IMX500形式へのエクスポートは、さまざまな業界で幅広く利用できます。以下に例を示します。
- エッジAIとIoT: 低消費電力デバイス上でのリアルタイム処理が不可欠なドローンやセキュリティカメラで、物体検出を可能にします。
- ウェアラブルデバイス: ヘルスモニタリング用ウェアラブル上で、小規模なAI処理向けに最適化されたモデルをデプロイします。
- スマートシティ: IMX500にエクスポートしたYOLO11モデルを交通監視や安全分析に使用し、処理を高速化してレイテンシを最小限に抑えます。
- リテール分析: POSシステムやスマートシェルフに最適化モデルをデプロイすることで、店舗内の監視を強化します。
まとめ#
Ultralytics YOLO11モデルをSonyのIMX500形式にエクスポートすると、IMX500ベースのカメラ上で効率的な推論を行うためにモデルをデプロイできます。高度な量子化技術を活用することで、精度を大きく損なうことなく、モデルサイズを削減して推論速度を向上させられます。
詳しい情報とガイドラインについては、SonyのIMX500ウェブサイトを参照してください。
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アプリケーションで高い精度を維持しながら、効率的なリアルタイム推論を実現できることを示しています。