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(ナノ)用に設計およびベンチマークされています。他のアーキテクチャやモデルスケールはサポートされていません。
Link to this section使用例#
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パッケージは、実行時に追加のエクスポート依存関係をインストールします。エクスポートコマンドを初めて実行する際、正常に動作させるためにコンソールの再起動が必要になる場合があります。
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 sectionIMX500エクスポートをデプロイメントで使用する#
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)のようなレイヤーを先行レイヤーに畳み込むことで、モデルをより効率的なバージョンに変換します。
- 量子化パラメータ検索: 平均二乗誤差(MSE)、No-Clipping、平均絶対誤差(MAE)などの指標を使用して量子化ノイズを最小化します。
- 高度な量子化アルゴリズム:
- 負の値のシフト補正: 対称的なアクティベーション量子化によるパフォーマンスの問題に対処します。
- 外れ値フィルタリング: zスコアを使用して外れ値を検出し除去します。
- クラスタリング: 分布の一致を改善するために、不均一な量子化グリッドを活用します。
- 混合精度検索: 感度に基づいて、レイヤーごとに異なる量子化ビット幅を割り当てます。
- 視覚化: TensorBoardを使用して、モデルのパフォーマンスに関するインサイト、量子化フェーズ、およびビット幅構成を観察します。
Link to this section量子化#
MCTは、モデルサイズを縮小し推論速度を向上させるために、いくつかの量子化手法をサポートしています:
- 学習後量子化 (PTQ):
- KerasおよびPyTorchのAPIを通じて利用可能です。
- 複雑度: 低
- 計算コスト: 低 (CPU数分)
- 勾配ベースの学習後量子化 (GPTQ):
- KerasおよびPyTorchのAPIを通じて利用可能です。
- 複雑度: 中
- 計算コスト: 中程度 (GPU数時間)
- 量子化対応トレーニング (QAT):
- 複雑度: 高
- 計算コスト: 高 (GPU 12-36時間)
MCTは、重みとアクティベーションに対してさまざまな量子化スキームもサポートしています:
- 2のべき乗(ハードウェアフレンドリー)
- 対称
- 一様
Link to this section構造的プルーニング#
MCTは、特定のハードウェアアーキテクチャ向けに設計された、構造的かつハードウェアを意識したモデルプルーニングを導入しています。この技術は、ターゲットプラットフォームのSIMD(Single Instruction, Multiple Data)機能を活用してSIMDグループをプルーニングします。これにより、重みのメモリフットプリントの目標とするリソース活用に向けて、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は画像あたり58.82msの推論時間を達成
- COCO128データセットでmAP50-95が0.517
- 量子化後のモデルサイズはわずか2.2MB
これは、IMX500形式がエッジAIアプリケーションにおいて、優れた精度を維持しつつ効率的なリアルタイム推論を提供できることを示しています。