Ultralytics YOLO27:
Get Started

NVIDIA JetsonでDeepStream SDKとTensorRTを使用するUltralytics YOLO26#



視聴: Jetson Orin NXでNVIDIA Deepstreamを使ってUltralytics YOLO26モデルを使用する方法 🚀

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

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

NVIDIA DeepStream SDK on Jetson platform
注

このガイドは、NVIDIA Jetson Orin Nano Super Developer KitでJetPackリリースのJP6.1を実行した環境、NVIDIA Jetson Orin NX 16GBをベースとしJetPackリリースのJP5.1.3を実行するSeeed Studio reComputer J4012、およびNVIDIA Jetson Nano 4GBをベースとしJetPackリリースのJP4.6.4を実行するSeeed Studio reComputer J1020 v2でテストされています。最新および旧世代を含む、すべてのNVIDIA Jetsonハードウェアで動作することが期待されます。

NVIDIA DeepStreamとは何ですか?#

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

前提条件#

このガイドに従って作業を始める前に:

ヒント

このガイドでは、DeepStream SDKをJetsonデバイスにインストールする際に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)  # 作成 '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(クラスタリングなし)を指定した場合に、同じボックスが2回描画されるのを防ぎます。推論サイズ(デフォルト: 640)を変更するにはimgsz=1280を、バッチサイズを4にするにはbatch=4を追加します(エクスポートされたバッチは固定のため、DeepStreamの設定のbatch-sizeと一致させる必要があります)。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.engineとnetwork-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

マルチストリームのセットアップ#



視聴: Jetson OrinでNVIDIA DeepStreamを使用し、Ultralytics YOLO26によるマルチストリーム推論を実行する方法 🚀

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

  1. ストリーム数に応じて、行数と列数を変更し、グリッド表示を構成します。たとえば4つのストリームの場合は、行数と列数をそれぞれ2に設定します。

    [tiled-display]
    rows=2
    columns=2
  2. 各ストリームに個別の[sourceN]グループを追加し、それぞれに独自のuriとnum-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/im)
TensorRT(FP32)✅8.64
TensorRT(FP16)✅5.27
TensorRT(INT8)✅4.54

謝辞#

このガイドは、Seeed Studioの友人であるLakshanthaとElaineが最初に作成しました。

よくある質問#

  • 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)  # 作成 '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_PATHとINT8_CALIB_BATCH_SIZEの環境変数を設定します。次に、config_infer_primary_yolo26.txtをmodel-engine-file=model_b1_gpu0_int8.engine、int8-calib-file=calib.table、network-mode=1で更新します。手順の詳細は、INT8キャリブレーションのセクションをご覧ください。現在、INT8にはTensorRT 8.xが必要です。

  • 1つのDeepStreamアプリケーションで複数のストリームを処理するには、deepstream_app_config.txtファイルを編集して、タイル表示グリッドを追加し、各ソースURIを指定します。グリッドを構成するため、[tiled-display]の下にrowsとcolumnsを設定します。各ストリームに個別の[sourceN]グループを追加し、それぞれ独自のuriとnum-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モデルを使用する効率性と性能を示しています。詳細については、ベンチマーク結果セクションをご覧ください。

コメント