Ultralytics YOLO27:

Ultralytics YOLO11向けSony IMX500エクスポート#

このガイドでは、Sony IMX500センサーを搭載したRaspberry Pi AI CameraへのUltralytics YOLO11モデルのエクスポートとデプロイについて説明します。

Raspberry Pi AI Cameraのような計算能力に制限のあるデバイスでコンピュータービジョンモデルをデプロイするのは、簡単ではありません。より高速なパフォーマンスに最適化されたモデル形式を使うと、大きな違いが生まれます。

IMX500モデル形式は、ニューラルネットワークの高速なパフォーマンスを実現しながら、消費電力を最小限に抑えるよう設計されています。Ultralytics YOLO11モデルを最適化し、高速かつ低消費電力で推論できます。このガイドでは、モデルの性能をRaspberry Pi AI Camera上で十分に発揮できるようにしながら、モデルをIMX500形式にエクスポートしてデプロイする手順を説明します。

Raspberry Pi AI Camera with Sony IMX500 sensor

IMX500にエクスポートする理由#

SonyのIMX500インテリジェントビジョンセンサーは、エッジAI処理に革新をもたらすハードウェアです。オンチップAI機能を備えた、世界初のインテリジェントビジョンセンサーです。このセンサーは、データ処理のボトルネック、プライバシーの懸念、性能上の制約など、エッジAIにおける多くの課題の解決に役立ちます。 画像やフレームを送信するだけの他のセンサーとは異なり、IMX500はデータ全体を処理します。センサー上でデータを直接処理するため、デバイスはリアルタイムで分析結果を生成できます。

YOLO11モデル向けSony IMX500エクスポート#

IMX500は、処理のためにクラウドへデータを送信することなく、センサー上でデータを直接処理する方法を変革するよう設計されています。

IMX500は量子化モデルに対応しています。量子化すると、精度をほとんど損なわずにモデルを小型化し、高速化できます。エッジコンピューティングの限られたリソースに最適です。レイテンシーを削減し、クラウドに依存せずにローカルでデータを迅速に処理できるため、アプリケーションの応答性が向上します。また、ローカル処理ではデータをリモートサーバーに送信しないため、ユーザーデータのプライバシーと安全性も保たれます。

IMX500の主な特長:

  • メタデータ出力: IMX500は画像だけでなく、画像とメタデータ(推論結果)の両方を出力できます。また、データサイズ、帯域幅、コストを削減するために、メタデータのみを出力することもできます。
  • プライバシーの懸念に対応: IMX500はデバイス上でデータを処理するため、プライバシーに関する懸念に対応できます。人数カウントや在席状況の追跡など、人を中心とするアプリケーションに最適です。
  • リアルタイム処理: センサー上での高速処理によりリアルタイムの意思決定を支援します。自律システムなどのエッジAIアプリケーションに最適です。

始める前に: 最良の結果を得るには、モデルのトレーニングガイド、データ準備ガイド、ハイパーパラメーター調整ガイドに従って、YOLO11モデルをエクスポート用に適切に準備してください。

対応タスク#

IMX500エクスポートは、7つあるUltralyticsタスクのうち4つに対応しており、対象はYOLOv8nとYOLO11nのみです。それ以外のモデルファミリー、スケール、アーキテクチャはサポートされていません。また、セマンティックセグメンテーション、OBB、深度推定モデルをエクスポートするとエラーが発生します。

タスクYOLOv8YOLO11YOLO26
検出✅✅❌
セグメンテーション✅✅❌
セマンティック❌❌❌
深度❌❌❌
分類✅✅❌
姿勢推定✅✅❌
OBB❌❌❌

使用例#

Ultralytics YOLO11モデルをIMX500形式にエクスポートし、エクスポートしたモデルで推論を実行します。

IMX500形式は、エクスポート、予測、検証の各モードに対応しています。推論と検証はRaspberry Pi AI Camera(IMX500)上で実行されます。

注

ここでは、モデルが想定どおりに動作することを確認するために推論を実行します。ただし、Raspberry Pi AI Cameraへのデプロイと推論については、デプロイでのIMX500エクスポートの使用セクションに進んでください。

物体検出
from ultralytics import YOLO

# YOLO11n PyTorchモデルを読み込みます
model = YOLO("yolo11n.pt")

# モデルをエクスポートする
model.export(format="imx", data="coco8.yaml")  # デフォルトでPTQ量子化を使ってエクスポートします

# エクスポートしたモデルを読み込みます
imx_model = YOLO("yolo11n_imx_model")

# 推論を実行
results = imx_model("https://ultralytics.com/images/bus.jpg")
姿勢推定
from ultralytics import YOLO

# YOLO11n-pose PyTorchモデルを読み込みます
model = YOLO("yolo11n-pose.pt")

# モデルをエクスポートする
model.export(format="imx", data="coco8-pose.yaml")  # デフォルトでPTQ量子化を使ってエクスポートします

# エクスポートしたモデルを読み込みます
imx_model = YOLO("yolo11n-pose_imx_model")

# 推論を実行
results = imx_model("https://ultralytics.com/images/bus.jpg")
分類
from ultralytics import YOLO

# YOLO11n-cls PyTorchモデルを読み込みます
model = YOLO("yolo11n-cls.pt")

# モデルをエクスポートする
model.export(format="imx", data="imagenet10")  # デフォルトでPTQ量子化を使ってエクスポートします

# エクスポートしたモデルを読み込みます
imx_model = YOLO("yolo11n-cls_imx_model")

# 推論を実行
results = imx_model("https://ultralytics.com/images/bus.jpg", imgsz=224)
インスタンスセグメンテーション
from ultralytics import YOLO

# YOLO11n-seg PyTorchモデルを読み込みます
model = YOLO("yolo11n-seg.pt")

# モデルをエクスポートする
model.export(format="imx", data="coco8-seg.yaml")  # デフォルトでPTQ量子化を使ってエクスポートします

# エクスポートしたモデルを読み込みます
imx_model = YOLO("yolo11n-seg_imx_model")

# 推論を実行
results = imx_model("https://ultralytics.com/images/bus.jpg")
検証
from ultralytics import YOLO

# エクスポートしたIMX500モデルを読み込みます
model = YOLO("yolo11n_imx_model")

# COCO8データセットで精度を検証します
metrics = model.val(data="coco8.yaml")
警告

IMXエクスポートは、Python 3.9以降を搭載したLinuxでのみサポートされ、Java 17以降が必要です。Ultralyticsパッケージは、実行時にエクスポート用の依存関係を追加でインストールします。エクスポートコマンドを初めて実行するときは、正しく動作するようにコンソールの再起動が必要な場合があります。

エクスポート引数#

引数種類デフォルト説明
formatstr'imx'エクスポートしたモデルのターゲットフォーマットです。さまざまなデプロイ環境との互換性を定義します。
imgszintまたはtuple640モデル入力の画像サイズです。正方形画像の場合は整数、特定のサイズの場合はタプル(height, width)を指定できます。
quantizeintまたはstr8/自動量子化の精度。IMX500では8(INT8/PTQ)が必須で、自動的に有効になります。FP32のみ、またはFP16のみのエクスポートには対応していません。非推奨のhalf/int8フラグに代わるものです。
datastrNone量子化に必須となるデータセットのYAMLファイルへのパスです。分類の場合は、データセットディレクトリまたは組み込みデータセット名を指定します。省略すると、Ultralyticsはモデルのタスクに応じたデフォルトのキャリブレーションデータセットを選択します。
fractionfloat、int、またはlist1.0キャリブレーション用サブセットを、比率、画像数、または[train, val, test]の比率/件数として指定します。2項目のリストではtestがすべて含まれ、0では除外されます。
nmsbool、省略可None生の出力(デフォルトのNone)、NMS組み込み(True)、またはNMSフリーヘッド(False)を選択します。IMXではdetect、segment、poseにnms=Trueが必要で、自動的に選択されます。
devicestrNoneエクスポートに使用するデバイスを指定します。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へデプロイできます。

ハードウェアの前提条件#

次のハードウェアがあることを確認してください。

  1. Raspberry Pi 5またはRaspberry Pi 4 Model B
  2. 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アプリケーションモジュールライブラリをインストールします

pip install git+https://github.com/SonySemiconductorSolutions/aitrios-rpi-application-module-library.git

手順5: aitrios-rpi-application-module-libraryのサンプルで提供されている次のスクリプトを使って、YOLOによる物体検出、姿勢推定、分類、セグメンテーションを実行します。

注

これらのスクリプトを実行する前に、環境に合わせて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 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)
YOLOv8nimx6402.10.47058.79
YOLO11nimx6402.20.51758.82
YOLOv8n-poseimx6402.00.68758.79
YOLO11n-poseimx6402.10.78862.50
モデル形式サイズ(ピクセル)packerOut.zipのサイズ(MB)精度(top1)精度(top5)推論時間(ms/im)
YOLOv8n-clsimx2242.30.250.533.31
YOLO11n-clsimx2242.30.250.41733.31
注

上記のベンチマークの検証には、検出モデルにCOCO128データセット、姿勢推定モデルにCOCO8-Poseデータセット、分類モデルにImageNet10を使用しました。

内部の仕組み#

Sony IMX500 YOLO model deployment workflow

Sonyモデル圧縮ツールキット(MCT)#

Sonyのモデル圧縮ツールキット(MCT)は、量子化とプルーニングによってディープラーニングモデルを最適化する強力なツールです。さまざまな量子化手法に対応しており、精度を大きく損なうことなく、モデルサイズと計算量を削減する高度なアルゴリズムを提供します。MCTは、リソースが限られたデバイスにモデルをデプロイする際に特に有用で、効率的な推論とレイテンシの低減を実現します。

MCTがサポートする機能#

SonyのMCTには、ニューラルネットワークモデルを最適化するためのさまざまな機能が用意されています。

  1. グラフ最適化: バッチ正規化などのレイヤーを前段のレイヤーに統合し、モデルをより効率的な形式に変換します。
  2. 量子化パラメーターの探索: 平均二乗誤差、クリッピングなし、平均絶対誤差などの指標を使用して、量子化ノイズを最小限に抑えます。
  3. 高度な量子化アルゴリズム:
    • 負の値のシフト補正: 対称活性化量子化による性能上の問題に対処します。
    • 外れ値のフィルタリング: zスコアを使用して外れ値を検出し、除去します。
    • クラスタリング: 非一様な量子化グリッドを利用して、分布の一致度を高めます。
    • 混合精度探索: 感度に基づいて、レイヤーごとに異なる量子化ビット幅を割り当てます。
  4. 可視化: TensorBoardを使用して、モデル性能に関する情報、量子化フェーズ、ビット幅の設定を確認します。

量子化#

MCTは、モデルサイズを縮小して推論速度を向上させるため、複数の量子化手法に対応しています。

  1. 学習後量子化(PTQ):
    • KerasおよびPyTorch APIから利用できます。
    • 複雑さ: 低
    • 計算コスト: 低(CPUで数分)
  2. 勾配ベースの学習後量子化(GPTQ):
    • KerasおよびPyTorch APIから利用できます。
    • 複雑さ: 中
    • 計算コスト: 中程度(GPUで2~3時間)
  3. 量子化対応学習(QAT):
    • 複雑さ: 高
    • 計算コスト: 高(GPUで12~36時間)

MCTは、重みと活性化に対するさまざまな量子化方式にも対応しています。

  1. 2のべき乗(ハードウェアに適した形式)
  2. 対称
  3. 一様

構造化プルーニング#

MCTでは、特定のハードウェアアーキテクチャ向けに設計された、構造化されたハードウェア対応モデルプルーニングを導入しています。この手法では、SIMDグループをプルーニングすることで、ターゲットプラットフォームの単一命令複数データ(SIMD)機能を活用します。これにより、チャネル利用率を最適化し、対象リソースの重みメモリ使用量に合わせて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ウェブサイトを参照してください。

よくある質問#

  • YOLO11モデルをIMX500形式でエクスポートするには、Python APIまたはCLIコマンドを使用します。

    from ultralytics import YOLO
    
    model = YOLO("yolo11n.pt")
    model.export(format="imx")  # デフォルトではPTQ量子化でエクスポートします

    エクスポート処理により、デプロイに必要なファイル(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アプリケーションに十分な精度を維持しながら、効率的なリアルタイム推論を実現することを示しています。

コメント