Ultralytics YOLO11用Sony IMX500エクスポート
このガイドでは、Ultralytics YOLO11モデルを、Sony IMX500センサーを搭載したRaspberry Pi AIカメラにエクスポートおよびデプロイする方法について説明します。
Raspberry Pi AI Cameraなど、計算能力が限られているデバイスにコンピュータビジョンモデルをデプロイするのは難しい場合があります。より高速なパフォーマンスに最適化されたモデル形式を使用すると、大きな違いが生じます。
IMX500モデル形式は、ニューラルネットワークに高速なパフォーマンスを提供しながら、消費電力を最小限に抑えるように設計されています。これにより、Ultralytics YOLO11モデルを最適化して、高速かつ低電力の推論を実現できます。このガイドでは、モデルをエクスポートしてIMX500形式でデプロイし、モデルがRaspberry Pi AI Cameraで適切に実行できるようにする方法について説明します。
IMX500 へのエクスポートの利点は何ですか?
ソニーのIMX500インテリジェントビジョンセンサーは、エッジAI処理における画期的なハードウェアです。オンチップAI機能を備えた世界初のインテリジェントビジョンセンサーです。このセンサーは、データ処理のボトルネック、プライバシーに関する懸念、パフォーマンスの制限など、エッジAIにおける多くの課題を克服するのに役立ちます。
他のセンサーは画像とフレームを単に渡すだけですが、IMX500は全体像を伝えます。センサー上で直接データを処理し、デバイスがリアルタイムで洞察を生成できるようにします。
YOLO11モデル用Sony IMX500エクスポート
IMX500 は、デバイスがデータを処理するためにクラウドに送信する必要なく、センサー上で直接データを処理する方法を変換するように設計されています。
IMX500 は量子化されたモデルで動作します。量子化により、精度をあまり損なうことなく、モデルを小型化および高速化できます。エッジコンピューティングの限られたリソースに最適であり、遅延を減らし、クラウドへの依存なしにローカルで迅速なデータ処理を可能にすることで、アプリケーションが迅速に応答できるようにします。ローカル処理では、リモートサーバーに送信されないため、ユーザーデータのプライバシーとセキュリティも維持されます。
IMX500の主な機能:
- メタデータ出力: IMX500は、画像のみを送信する代わりに、画像とメタデータ(推論結果)の両方を出力でき、データサイズを最小限に抑え、帯域幅を削減し、コストを削減するために、メタデータのみを出力できます。
- プライバシーの懸念に対処: デバイス上でデータを処理することにより、IMX500はプライバシーの懸念に対処し、人物カウントや占有追跡などの人間中心のアプリケーションに最適です。
- リアルタイム処理: 高速なオンセンサー処理がリアルタイムの意思決定をサポートし、自律システムなどのエッジAIアプリケーションに最適です。
Before You Begin: 最良の結果を得るためには、モデルのトレーニングガイド、データ準備ガイド、およびハイパーパラメータ調整ガイドに従って、YOLO11モデルのエクスポートの準備が整っていることを確認してください。
サポートされているタスク
現在、IMX500形式にエクスポートできるのは、次のタスクを含むモデルのみです。
使用例
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")
# Export a YOLO11n PyTorch model to imx format with Post-Training Quantization (PTQ)
yolo export model=yolo11n.pt format=imx data=coco8.yaml
# Run inference with the exported model
yolo predict model=yolo11n_imx_model source='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")
# Export a YOLO11n-pose PyTorch model to imx format with Post-Training Quantization (PTQ)
yolo export model=yolo11n-pose.pt format=imx data=coco8-pose.yaml
# Run inference with the exported model
yolo predict model=yolo11n-pose_imx_model source='https://ultralytics.com/images/bus.jpg'
警告
Ultralytics パッケージは、実行時に追加のエクスポート依存関係をインストールします。エクスポートコマンドを初めて実行するときは、正しく動作するようにコンソールを再起動する必要がある場合があります。
エクスポート引数
引数 | 種類 | デフォルト | 説明 |
---|---|---|---|
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を有効にして指定しない場合、データセット全体が使用されます。 |
device |
str |
None |
エクスポート先のデバイス(GPU(device=0 )、CPU (device=cpu )。 |
ヒント
CUDAサポート付きのGPUでエクスポートする場合は、引数を渡してください。 device=0
エクスポートを高速化します。
エクスポートプロセスの詳細については、エクスポートに関するUltralyticsドキュメントページをご覧ください。
エクスポートプロセスでは、量子化検証用のONNXモデルが作成され、という名前のディレクトリも作成されます。 <model-name>_imx_model
。このディレクトリには、以下が含まれます。 packerOut.zip
IMX500ハードウェアへのデプロイメント用にモデルをパッケージ化するために不可欠なファイル。さらに、 <model-name>_imx_model
フォルダーにはテキストファイル(labels.txt
)モデルに関連付けられたすべてのラベルをリスト表示します。
フォルダ構造
yolo11n_imx_model
├── dnnParams.xml
├── labels.txt
├── packerOut.zip
├── yolo11n_imx.onnx
├── yolo11n_imx_MemoryReport.json
└── yolo11n_imx.pbtxt
yolo11n-pose_imx_model
├── dnnParams.xml
├── labels.txt
├── packerOut.zip
├── yolo11n-pose_imx.onnx
├── yolo11n-pose_imx_MemoryReport.json
└── yolo11n-pose_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アプリケーションモジュールライブラリをインストールします
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
これらのスクリプトを実行する前に、環境に合わせてディレクトリを設定してください。
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()
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_yolo_pose_ultralytics
class YOLOPose(Model):
"""YOLO pose estimation model for IMX500 deployment."""
def __init__(self):
"""Initialize the YOLO pose estimation model for IMX500 deployment."""
super().__init__(
model_file="yolo11n-pose_imx_model/packerOut.zip", # replace with proper directory
model_type=MODEL_TYPE.CONVERTED,
color_format=COLOR_FORMAT.RGB,
preserve_aspect_ratio=False,
)
def post_process(self, output_tensors):
"""Post-process the output tensors for pose estimation."""
return pp_yolo_pose_ultralytics(output_tensors)
device = AiCamera(frame_rate=17) # Optimal frame rate for maximum DPS of the YOLO-pose model running on the AI Camera
model = YOLOPose()
device.deploy(model)
annotator = Annotator()
with device as stream:
for frame in stream:
detections = frame.detections[frame.detections.confidence > 0.4]
annotator.annotate_keypoints(frame, detections)
annotator.annotate_boxes(frame, detections, corner_length=20)
frame.display()
ベンチマーク
YOLOv8n、YOLO11n、YOLOv8n-pose、YOLO11n-poseのベンチマークは、UltralyticsチームがRaspberry Pi AI Cameraで実行しました。 imx
速度と精度を測定するモデル形式。
モデル | 形式 | ステータス | サイズ packerOut.zip (MB) |
mAP50-95(B) | 推論時間 (ms/im) |
---|---|---|---|---|---|
YOLOv8n | imx | ✅ | 2.1 | 0.470 | 58.79 |
YOLO11n | imx | ✅ | 2.2 | 0.517 | 58.82 |
YOLOv8n-pose | imx | ✅ | 2.0 | 0.687 | 58.79 |
YOLO11n-pose | imx | ✅ | 2.1 | 0.788 | 62.50 |
注
上記のベンチマークの検証は、検出モデルには COCO128 データセット、姿勢推定モデルには COCO8-Pose データセットを使用して行われました。
内部構造
Sony Model Compression Toolkit(MCT)
SonyのModel Compression Toolkit (MCT)は、量子化と枝刈りを通じて深層学習モデルを最適化するための強力なツールです。さまざまな量子化方法をサポートし、精度を大幅に犠牲にすることなく、モデルサイズと計算の複雑さを軽減するための高度なアルゴリズムを提供します。MCTは、リソースが限られたデバイスにモデルをデプロイするのに特に役立ち、効率的な推論とレイテンシの削減を保証します。
MCT のサポートされている機能
ソニーのMCTは、ニューラルネットワークモデルを最適化するために設計されたさまざまな機能を提供します。
- グラフの最適化: バッチ正規化のようなレイヤーを先行するレイヤーに畳み込むことで、モデルをより効率的なバージョンに変換します。
- 量子化パラメータの探索: 平均二乗誤差、No-Clipping、平均絶対誤差などの指標を使用して、量子化ノイズを最小限に抑えます。
- 高度な量子化アルゴリズム:
- シフト負の補正: 対称アクティベーション量子化によるパフォーマンスの問題に対処します。
- 外れ値フィルタリング: zスコアを使用して外れ値を検出し、削除します。
- クラスタリング: より良い分布マッチングのために、非均一な量子化グリッドを利用します。
- 混合精度検索:感度に基づいて、レイヤーごとに異なる量子化ビット幅を割り当てます。
- 可視化: TensorBoardを使用して、モデルのパフォーマンスに関する洞察、量子化フェーズ、およびビット幅の構成を観察します。
量子化
MCTは、モデルサイズを削減し、推論速度を向上させるために、いくつかの量子化方法をサポートしています。
- 訓練後の量子化(PTQ):
- KerasおよびPyTorch API経由で利用可能です。
- 複雑さ: 低
- 計算コスト: 低 (CPU 分単位)
- Gradient-based Post-Training Quantization (GPTQ):
- KerasおよびPyTorch API経由で利用可能です。
- 複雑さ: 中
- 計算コスト: 中程度 (2-3 GPU 時間)
- 量子化対応トレーニング(QAT):
- 複雑さ: 高
- 計算コスト: 高 (12-36 GPU 時間)
MCTは、重みとアクティベーションのために、さまざまな量子化スキームもサポートしています。
- 2の累乗(ハードウェアフレンドリー)
- 対称
- 一様
構造化された枝刈り
MCTは、特定のハードウェアアーキテクチャ向けに設計された、構造化されたハードウェア対応のモデル枝刈りを導入します。この手法は、SIMDグループを枝刈りすることにより、ターゲットプラットフォームのSingle Instruction, Multiple Data(SIMD)機能を利用します。これにより、モデルのサイズと複雑さが軽減されるとともに、チャネルの使用率が最適化され、重みのメモリフットプリントのターゲットリソース使用率に合わせてSIMDアーキテクチャと連携します。KerasおよびPyTorch API経由で利用できます。
IMX500コンバーターツール(コンパイラー)
IMX500 Converter Toolは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ウェブサイトをご覧ください。
よくある質問
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モデルはどの程度の性能が期待できますか?
UltralyticsのRaspberry Pi AIカメラでのベンチマークに基づく:
- YOLO11nは、画像1枚あたり62.50msの推論時間を達成します。
- COCO128データセットでのmAP50-95は0.492
- 量子化後のモデルサイズはわずか3.2MB
これは、IMX500形式が、エッジAIアプリケーションに適した精度を維持しながら、効率的なリアルタイム推論を提供することを示しています。