Ultralytics YOLO27:

DeepStream SDKとTensorRTを使用したNVIDIA Jetson上のUltralytics YOLO26#



Watch: How to use Ultralytics YOLO26 models with NVIDIA Deepstream on Jetson Orin NX 🚀

この包括的なガイドでは、NVIDIA JetsonデバイスにDeepStream SDKとTensorRTを使用してUltralytics YOLO26をデプロイする手順を詳しく説明します。ここでは、Jetsonプラットフォームで推論性能を最大化するためにTensorRTを使用します。

このガイドでは、YOLO26向けDeepStream設定INT8キャリブレーションマルチストリーム設定、およびベンチマーク結果について説明します。

NVIDIA DeepStream SDK on Jetson platform
注記

このガイドは、JP6.1の最新安定版JetPackリリースを実行するNVIDIA Jetson Orin Nano Super Developer Kit、NVIDIA Jetson Orin NX 16GBをベースとし、JP5.1.3のJetPackリリースを実行するSeeed Studio reComputer J4012、およびNVIDIA Jetson Nano 4GBをベースとし、JP4.6.4のJetPackリリースを実行するSeeed Studio reComputer J1020 v2でテストされています。最新モデルからレガシーモデルまで、すべてのNVIDIA Jetsonハードウェアシリーズで動作すると見込まれます。

NVIDIA DeepStreamとは何ですか?#

NVIDIAのDeepStream SDKは、AIベースのマルチセンサー処理、動画、音声、画像理解向けの、GStreamerを基盤とする包括的なストリーミング分析ツールキットです。ビジョンAI開発者、ソフトウェアパートナー、スタートアップ、IVA(インテリジェントビデオ分析)アプリやサービスを構築するOEMに適しています。ニューラルネットワークや、トラッキング、動画のエンコード/デコード、動画レンダリングなどの複雑な処理タスクを組み込んだストリーム処理パイプラインを作成できます。これらのパイプラインにより、動画、画像、センサーデータのリアルタイム分析が可能になります。DeepStreamのマルチプラットフォーム対応により、オンプレミス、エッジ、クラウドでビジョンAIアプリケーションとサービスを、より迅速かつ容易に開発できます。

前提条件#

このガイドを開始する前に、次の操作を行ってください。

ヒント

このガイドでは、JetsonデバイスへのDeepStream SDKのインストールにDebianパッケージ方式を使用しました。レガシーバージョンのDeepStreamにアクセスするには、Jetson上のDeepStream SDK(アーカイブ)も参照できます。

YOLO26向けDeepStream設定#

ここでは、YOLOモデル向けのNVIDIA DeepStream SDKサポートを含むmarcoslucianops/DeepStream-Yolo GitHubリポジトリを使用します。貢献してくださったmarcoslucianopsの尽力に感謝します。

  1. 必要な依存関係とともにUltralyticsをインストールします

    pip install ultralytics onnx onnxslim
  2. DeepStream-Yoloリポジトリをクローンします

    cd ~
    git clone https://github.com/marcoslucianops/DeepStream-Yolo
  3. YOLO26プロジェクトから、任意のUltralytics YOLO26検出モデル(.pt)をダウンロードします。ここではyolo26s.ptを使用します。

    wget https://github.com/ultralytics/assets/releases/download/v8.4.0/yolo26s.pt
注記
  1. モデルをONNXに変換し、DeepStreamがクラス名を読み込む labels.txt ファイルを作成します。

    from ultralytics import YOLO
    
    model = YOLO("yolo26s.pt")
    model.export(format="onnx", nms=False, agnostic_nms=True)  # creates 'yolo26s.onnx'
    with open("labels.txt", "w") as f:
        f.write("\n".join(model.names.values()))
エクスポート引数

nms=False はNMSフリーのヘッドをエクスポートし、agnostic_nms=True は検出ごとに1つのクラスを維持するため、DeepStream設定の cluster-mode=4(クラスタリングなし)がボックスを二重に描画しません。推論サイズ(デフォルト: 640)を変更するには imgsz=1280 を、バッチサイズ4(エクスポートされたバッチは静的なため、DeepStream設定の batch-size と一致させる必要があります)にするには batch=4 を、TensorRT 8.2以前(DeepStream 6.0.1以前)にするには opset=12 を追加します。完全なリストについては、エクスポート引数を参照してください。

  1. 生成された.onnxモデルファイルとlabels.txtファイルをDeepStream-Yoloフォルダーにコピーします

    cp yolo26s.onnx labels.txt ~/DeepStream-Yolo
    cd ~/DeepStream-Yolo
  2. インストールされているJetPackのバージョンに応じてCUDAのバージョンを設定します

    JetPack 4.6.4の場合:

    export CUDA_VER=10.2

    JetPack 5.1.3の場合:

    export CUDA_VER=11.4

    JetPack 6.1の場合:

    export CUDA_VER=12.6

    JetPack 7.1の場合:

    export CUDA_VER=13.0
  3. ライブラリをコンパイルします

    make -C nvdsinfer_custom_impl_Yolo clean && make -C nvdsinfer_custom_impl_Yolo
  4. モデルに応じてconfig_infer_primary_yolo26.txtファイルを編集します(80クラスのYOLO26sの場合)

    [property]
    ...
    onnx-file=yolo26s.onnx
    ...
    num-detected-classes=80
    ...
    parse-bbox-func-name=NvDsInferParseYolo
    ...
YOLO26の精度設定

YOLO26は入力を中央パディング付きでリサイズし、NMSなしで実行します。最高の精度を得るには、config_infer_primary_yolo26.txt[property]セクションに次の内容を追加します。

[property]
...
maintain-aspect-ratio=1
symmetric-padding=1
cluster-mode=4
...
  1. deepstream_app_configファイルを編集します

    ...
    [primary-gie]
    ...
    config-file=config_infer_primary_yolo26.txt
  2. deepstream_app_configファイルで動画ソースを変更することもできます。ここでは、デフォルトの動画ファイルが読み込まれます

    ...
    [source0]
    ...
    uri=file:///opt/nvidia/deepstream/deepstream/samples/streams/sample_1080p_h264.mp4

推論を実行します#

deepstream-app -c deepstream_app_config.txt
注記

推論を開始する前にTensorRTエンジンファイルの生成に時間がかかります。しばらくお待ちください。

YOLO26 with deepstream
ヒント

モデルをFP16精度に変換する場合は、config_infer_primary_yolo26.txt内のmodel-engine-file=model_b1_gpu0_fp16.enginenetwork-mode=2を設定するだけです

INT8キャリブレーション#

推論でINT8精度を使用する場合は、次の手順に従う必要があります。

注記

現在、INT8はTensorRT 10.xでは動作しません。このガイドのこのセクションはTensorRT 8.xでテストされており、動作すると見込まれます。

  1. OPENCV環境変数を設定します

    export OPENCV=1
  2. ライブラリをコンパイルします

    make -C nvdsinfer_custom_impl_Yolo clean && make -C nvdsinfer_custom_impl_Yolo
  3. COCOデータセットの場合は、val2017をダウンロードして展開し、DeepStream-Yoloフォルダーに移動します

  4. キャリブレーション画像用の新しいディレクトリを作成します

    mkdir calibration
  5. 次のコマンドを実行して、COCOデータセットからランダムに1000枚の画像を選択し、キャリブレーションを実行します

    for jpg in $(ls -1 val2017/*.jpg | sort -R | head -1000); do
      cp ${jpg} calibration/
    done
注記

NVIDIAは、十分な精度を得るために、少なくとも500枚の画像を推奨しています。この例では、より高い精度を得るために1000枚の画像を選択しています(画像が多いほど精度が高くなります)。head -1000で設定できます。たとえば、2000枚の画像の場合はhead -2000とします。この処理には時間がかかる場合があります。

  1. 選択したすべての画像を含むcalibration.txtファイルを作成します

    realpath calibration/*jpg > calibration.txt
  2. 環境変数を設定します

    export INT8_CALIB_IMG_PATH=calibration.txt
    export INT8_CALIB_BATCH_SIZE=1
注記

INT8_CALIB_BATCH_SIZEの値を大きくすると、精度が向上し、キャリブレーション速度も速くなります。GPUメモリに応じて設定してください。

  1. config_infer_primary_yolo26.txtファイルを更新します

    変更前

    ...
    model-engine-file=model_b1_gpu0_fp32.engine
    #int8-calib-file=calib.table
    ...
    network-mode=0
    ...

    変更後

    ...
    model-engine-file=model_b1_gpu0_int8.engine
    int8-calib-file=calib.table
    ...
    network-mode=1
    ...

INT8推論を実行します#

同じコマンドを実行してINT8エンジンをビルドし、推論を開始します。

deepstream-app -c deepstream_app_config.txt

マルチストリーム設定#



Watch: How to Run Multi-Stream Inference with Ultralytics YOLO26 using NVIDIA DeepStream on Jetson Orin 🚀

単一のDeepStreamアプリケーションで複数のストリームを設定するには、deepstream_app_config.txtファイルに次の変更を加えます。

  1. 使用するストリーム数に応じて行と列を変更し、グリッド表示を構築します。たとえば、4ストリームの場合は、2行2列を追加します。

    [tiled-display]
    rows=2
    columns=2
  2. 各ストリームに個別の[sourceN]グループを追加し、それぞれに独自のurinum-sources=1を設定します。

    [source0]
    enable=1
    type=3
    uri=file:///path/to/video1.mp4
    num-sources=1
    
    [source1]
    enable=1
    type=3
    uri=file:///path/to/video2.mp4
    num-sources=1
    
    [source2]
    enable=1
    type=3
    uri=file:///path/to/video3.mp4
    num-sources=1
    
    [source3]
    enable=1
    type=3
    uri=file:///path/to/video4.mp4
    num-sources=1

マルチストリーム推論を実行します#

同じコマンドを実行して、タイル表示ですべてのストリームを起動します。

deepstream-app -c deepstream_app_config.txt
DeepStream multi-camera streaming configuration

ベンチマーク結果#

以下のベンチマークは、NVIDIA Jetson Orin NX 16GB上で入力サイズ640x640を使用した場合の、異なるTensorRT精度レベルにおけるYOLO11モデルの性能をまとめたものです。YOLO26では、上記で説明したものと同じDeepStreamのエクスポートおよび推論ワークフローを使用します。

比較グラフ#

NVIDIA Jetson DeepStream performance benchmarks

詳細比較表#

性能
形式ステータス推論時間(ms/画像)
TensorRT(FP32)8.64
TensorRT(FP16)5.27
TensorRT(INT8)4.54

謝辞#

このガイドは、当社の友人であるSeeed StudioのLakshantha氏とElaine氏によって最初に作成されました。

FAQ#

  • NVIDIA JetsonデバイスでUltralytics YOLO26をセットアップするには、まずJetPackのバージョンに対応するDeepStream SDKをインストールする必要があります。クイックスタートガイドの手順に従って、YOLO26のデプロイ用にNVIDIA Jetsonを設定してください。

  • YOLO26でTensorRTを使用すると、モデルが推論向けに最適化され、NVIDIA Jetsonデバイス上でレイテンシが大幅に低減し、スループットが向上します。TensorRTは、レイヤー融合、精度キャリブレーション、カーネルの自動チューニングにより、高性能かつ低レイテンシのディープラーニング推論を実現します。これにより、より高速で効率的な実行が可能になり、動画分析や自律型マシンなどのリアルタイムアプリケーションに特に有用です。

  • はい、DeepStream SDKとTensorRTを使用してUltralytics YOLO26をデプロイするためのこのガイドは、NVIDIA Jetsonシリーズ全体に対応しています。これには、JetPack 5.1.3を搭載したJetson Orin NX 16GBや、JetPack 4.6.4を搭載したJetson Nano 4GBなどのデバイスが含まれます。詳細な手順については、YOLO26向けDeepStream設定セクションを参照してください。

  • Ultralyticsエクスポート機能を使用してNMSフリーヘッドを持つモデルをエクスポートし、DeepStreamがクラス名を読み込む labels.txt ファイルを作成します。

    from ultralytics import YOLO
    
    model = YOLO("yolo26s.pt")
    model.export(format="onnx", nms=False, agnostic_nms=True)  # creates 'yolo26s.onnx'
    with open("labels.txt", "w") as f:
        f.write("\n".join(model.names.values()))

    TensorRT 8.2以前(DeepStream 6.0.1以前)の場合は opset=12 を追加します。モデル変換の詳細については、モデルのエクスポートセクションをご覧ください。

  • INT8推論を実行するには、代表的な画像セットでモデルをキャリブレーションし、DeepStreamの設定をINT8モードに切り替えます。COCOのval2017画像をダウンロードし、約1000枚のキャリブレーション画像を選択して、INT8_CALIB_IMG_PATHINT8_CALIB_BATCH_SIZEの環境変数を設定し、model-engine-file=model_b1_gpu0_int8.engineint8-calib-file=calib.tablenetwork-mode=1を指定してconfig_infer_primary_yolo26.txtを更新します。完全な手順については、INT8キャリブレーションセクションを参照してください。INT8には現在TensorRT 8.xが必要です。

  • 単一のDeepStreamアプリケーションで複数のストリームを処理するには、deepstream_app_config.txtファイルを編集してタイル表示グリッドを追加し、各ソースURIを列挙します。[tiled-display]の下にrowscolumnsを設定してグリッドを構築し、ストリームごとに独立した[sourceN]グループを追加し、それぞれに独自のurinum-sources=1を設定して、ストリーム数に合わせてグリッドを調整します。完全な例については、マルチストリーム設定セクションを参照してください。

  • NVIDIA Jetson Orin NX 16GB上でのYOLO11モデルの性能は、TensorRTの精度レベルによって異なります。たとえば、YOLO11sモデルでは次の結果が得られます。

    • FP32精度:14.53 ms/im、68.8 FPS
    • FP16精度:7.91 ms/im、126 FPS
    • INT8精度:6.05 ms/im、165 FPS

    これらのベンチマークは、NVIDIA Jetsonハードウェア上でTensorRTにより最適化されたYOLO11モデルを使用する効率性と性能を示しています。詳細については、ベンチマーク結果セクションを参照してください。

コメント