Skip to main content

TensorRT を使用した YOLOv8 のデプロイ

note

この文書は AI によって翻訳されています。内容に不正確な点や改善すべき点がございましたら、文書下部のコメント欄または以下の Issue ページにてご報告ください。
https://github.com/Seeed-Studio/wiki-documents/issues

TensorRT を使用して NVIDIA Jetson 上で YOLOv8 をデプロイ

このウィキガイドでは、YOLOv8 モデルを NVIDIA Jetson プラットフォームにデプロイし、TensorRT を使用して推論を実行する方法を説明します。ここでは、Jetson プラットフォーム上で推論性能を最大化するために TensorRT を使用します。

以下のようなさまざまなコンピュータビジョンタスクがここで紹介されます:

  • オブジェクト検出
  • 画像セグメンテーション
  • 画像分類
  • ポーズ推定
  • オブジェクト追跡

前提条件

  • Ubuntu ホスト PC(ネイティブまたは VMware Workstation Player を使用した仮想マシン)
  • reComputer Jetson または JetPack 5.1.1 以上を実行しているその他の NVIDIA Jetson デバイス
note

このウィキは、NVIDIA Jetson Orin NX 16GB モジュールを搭載した reComputer J4012 および reComputer Industrial J4012[https://www.seeedstudio.com/reComputer-Industrial-J4012-p-5684.html] でテストおよび検証されています。

Jetson に JetPack をフラッシュする

まず、Jetson デバイスに JetPack システムがフラッシュされていることを確認する必要があります。JetPack をデバイスにフラッシュするには、NVIDIA SDK Manager またはコマンドラインを使用できます。

Seeed の Jetson 搭載デバイスのフラッシュガイドについては、以下のリンクを参照してください:

note

JetPack バージョン 5.1.1 をフラッシュしてください。このウィキではそのバージョンで検証されています。

1 行のコードで Jetson に YOLOv8 をデプロイ!

Jetson デバイスに JetPack をフラッシュした後、以下のコマンドを実行するだけで YOLOv8 モデルを実行できます。このコマンドは、必要なパッケージや依存関係をダウンロードしてインストールし、環境をセットアップし、YOLOv8 から事前学習済みモデルをダウンロードして、オブジェクト検出、画像セグメンテーション、ポーズ推定、画像分類タスクを実行します!

wget files.seeedstudio.com/YOLOv8-Jetson.py && python YOLOv8-Jetson.py
note

上記スクリプトのソースコードは こちら で確認できます。

事前学習済みモデルの使用

YOLOv8を使用する最も簡単な方法は、YOLOv8が提供する事前学習済みモデルを使用することです。ただし、これらはPyTorchモデルであるため、Jetsonで推論を行う際にはCPUのみを使用します。JetsonでGPUを使用してこれらのモデルを最高のパフォーマンスで実行したい場合は、このWikiのセクションに従ってPyTorchモデルをTensorRTにエクスポートしてください。

YOLOv8はCOCOデータセットで学習された、入力画像サイズ640x640の物体検出用の5つの事前学習済みPyTorchモデルウェイトを提供しています。以下にそれらを示します。

モデルサイズ
(ピクセル)
mAPval
50-95
速度
CPU ONNX
(ms)
速度
A100 TensorRT
(ms)
パラメータ
(M)
FLOPs
(B)
YOLOv8n64037.380.40.993.28.7
YOLOv8s64044.9128.41.2011.228.6
YOLOv8m64050.2234.71.8325.978.9
YOLOv8l64052.9375.22.3943.7165.2
YOLOv8x64053.9479.13.5368.2257.8

参考: https://docs.ultralytics.com/tasks/detect

上記の表から希望するモデルを選択してダウンロードし、以下のコマンドを実行して画像に対して推論を行うことができます。

yolo detect predict model=yolov8n.pt source='https://ultralytics.com/images/bus.jpg' show=True

ここで、モデルをyolov8s.pt、yolov8m.pt、yolov8l.pt、yolov8x.ptに変更すると、関連する事前学習済みモデルがダウンロードされます。

また、ウェブカメラを接続して以下のコマンドを実行することもできます。

yolo detect predict model=yolov8n.pt source='0' show=True
note

上記のコマンドを実行してエラーが発生した場合は、コマンドの最後に「device=0」を追加してみてください。

note

上記はreComputer J4012/ reComputer Industrial J4012で実行され、640x640入力で学習されたYOLOv8sモデルを使用し、TensorRT FP16精度を使用しています。


TensorRTを使用して推論速度を向上させる

前述の通り、Jetson上でYOLOv8モデルを実行する際に推論速度を向上させたい場合は、まず元のPyTorchモデルをTensorRTモデルに変換する必要があります。

以下の手順に従って、YOLOv8 PyTorchモデルをTensorRTモデルに変換してください。

note

これは、前述した4つのコンピュータビジョンタスクすべてに対応しています。

  • ステップ1. モデルパスを指定してエクスポートコマンドを実行します。
yolo export model=<path_to_pt_file> format=engine device=0

例:

yolo export model=yolov8n.pt format=engine device=0
note

cmakeに関するエラーが発生した場合は無視してください。TensorRTのエクスポートが完了するまで数分かかる場合がありますので、しばらくお待ちください。

TensorRTモデルファイル(.engine)が作成されると、以下のような出力が表示されます。

  • ステップ2. 追加の引数を渡したい場合は、以下の表を参照してください。
キー説明
imgsz640スカラーまたは(h, w)リストとしての画像サイズ、例:(640, 480)
halfFalseFP16量子化
dynamicFalse動的軸
simplifyFalseモデルの簡略化
workspace4ワークスペースサイズ(GB)

例えば、PyTorchモデルをFP16量子化でTensorRTモデルに変換したい場合は、以下を実行します。

yolo export model=yolov8n.pt format=engine half=True device=0

モデルが正常にエクスポートされると、yolopredictコマンド内のmodel=引数にこのモデルを直接置き換えることができます。これにより、検出、分類、セグメンテーション、ポーズ推定の4つのタスクすべてを実行できます。

例えば、オブジェクト検出の場合:

yolo detect predict model=yolov8n.engine source='0' show=True

独自のAIモデルを持ち込む

データ収集とラベリング

特定のAIアプリケーションを持ち、アプリケーションに適した独自のAIモデルを使用したい場合は、独自のデータセットを収集し、それにラベルを付けた後、YOLOv8を使用してトレーニングを行うことができます。

自分でデータを収集したくない場合は、すぐに利用可能な公開データセットを選ぶこともできます。COCOデータセットPascal VOCデータセットなど、多くの公開データセットをダウンロードできます。Roboflow Universeは、幅広いデータセットを提供する推奨プラットフォームであり、90,000以上のデータセットと6,600万以上の画像がコンピュータビジョンモデルの構築に利用可能です。また、Googleでオープンソースのデータセットを検索し、利用可能なさまざまなデータセットから選ぶこともできます。

独自のデータセットを持っていて画像に注釈を付けたい場合は、Roboflowが提供する注釈ツールを使用することをお勧めします。詳細については、このWikiの部分を参照してください。また、Roboflowの注釈に関するこのガイドも参考にしてください。

トレーニング

ここでは、モデルをトレーニングするための3つの方法を紹介します。

  1. 最初の方法は、Ultralytics HUBを使用することです。RoboflowをUltralytics HUBに簡単に統合できるため、すべてのRoboflowプロジェクトがトレーニングにすぐに利用可能になります。ここでは、Google Colabノートブックを使用してトレーニングプロセスを簡単に開始し、リアルタイムでトレーニングの進行状況を確認できます。

  2. 2番目の方法は、トレーニングプロセスを簡単にするために作成されたGoogle Colabワークスペースを使用することです。ここでは、Roboflow APIを使用してRoboflowプロジェクトからデータセットをダウンロードします。

  3. 3番目の方法は、ローカルPCを使用してトレーニングプロセスを実行することです。この場合、十分に強力なGPUを持っていることを確認し、データセットを手動でダウンロードする必要があります。

ここでは、Ultralytics HUBを使用してRoboflowプロジェクトを読み込み、Google Colabでトレーニングを行います。

  • ステップ1. このURLにアクセスしてUltralyticsアカウントにサインアップします。

  • ステップ2. 新しく作成したアカウントでサインインすると、以下のダッシュボードが表示されます。

  • ステップ3. このURLにアクセスしてRoboflowアカウントにサインアップします。

  • ステップ4. 新しく作成したアカウントでサインインすると、以下のダッシュボードが表示されます。

  • ステップ5. 新しいワークスペースを作成し、このWikiガイドに従ってワークスペース内に新しいプロジェクトを作成します。また、公式のRoboflowドキュメントからこちらを参照してさらに学ぶこともできます。

  • ステップ6. ワークスペース内にいくつかのプロジェクトがある場合、以下のように表示されます。

  • ステップ7. Settingsに移動し、Roboflow APIをクリックします。
  • ステップ8. Private API Keyをコピーするためにコピーボタンをクリックします。
  • ステップ9. Ultralytics HUBダッシュボードに戻り、Integrationsをクリックし、先ほどコピーしたAPIキーを空欄に貼り付けてAddをクリックします。
  • ステップ10. ワークスペース名がリストに表示されている場合、統合が成功したことを意味します。
  • ステップ11. Datasetsに移動すると、すべてのRoboflowプロジェクトがここに表示されます。
  • ステップ12. プロジェクトをクリックしてデータセットの詳細を確認します。ここでは、健康なリンゴと損傷したリンゴを検出できるデータセットを選択しました。
  • ステップ13. Train Modelをクリックします。
  • ステップ14. Architectureを選択し、Model name (optional)を設定してからContinueをクリックします。ここでは、モデルアーキテクチャとしてYOLOv8sを選択しました。
  • ステップ15. Advanced optionsで設定を好みに応じて構成し、Colabコードをコピーして(後でColabワークスペースに貼り付けます)、Open Google Colabをクリックします。
  • ステップ16. まだGoogleアカウントにサインインしていない場合は、サインインします。
  • ステップ 17 Runtime > Change runtime type に移動します。
  • ステップ 18 Hardware accelerator の下で GPU を選択し、GPU type で利用可能な最高のものを選び、Save をクリックします。
  • ステップ 19 Connect をクリックします。
  • ステップ 20 RAM, Disk ボタンをクリックして、ハードウェアリソースの使用状況を確認します。
  • ステップ 21 最初のコードセルを実行するために Play ボタンをクリックします。
  • ステップ 22 以前に Ultralytics HUB からコピーしたコードセルを Start セクションの下に貼り付け、それを実行してトレーニングを開始します。
  • ステップ 23 Ultralytics HUB に戻ると、Connected というメッセージが表示されます。Done をクリックします。
  • ステップ 24 Google Colab 上でモデルがトレーニングされている間、リアルタイムで Box Loss, Class Loss, Object Loss を確認できます。
  • ステップ 25 トレーニングが終了すると、Google Colab 上で以下のような出力が表示されます。
  • ステップ 26 Ultralytics HUB に戻り、Preview タブに移動してテスト画像をアップロードし、トレーニング済みモデルのパフォーマンスを確認します。
  • ステップ 27 最後に Deploy タブに移動し、推論に使用する形式でトレーニング済みモデルをダウンロードします。ここでは PyTorch を選択しています。

これで、このダウンロードしたモデルを以前にこの Wiki で説明したタスクで使用できます。モデルファイルを自分のモデルに置き換えるだけです。

例えば:

yolo detect predict model=<your_model.pt> source='0' show=True

パフォーマンスベンチマーク

準備

YOLOv8 がサポートするすべてのコンピュータビジョンタスクについて、NVIDIA Jetson Orin NX 16GB モジュールを搭載した reComputer J4012 / reComputer Industrial J4012 上でパフォーマンスベンチマークを実施しました。

サンプルディレクトリには trtexec というコマンドラインラッパーツールが含まれています。trtexec は、独自のアプリケーションを開発することなく TensorRT を使用するためのツールです。trtexec ツールには以下の3つの主な目的があります:

  • ランダムまたはユーザー提供の入力データを使用したネットワークのベンチマーク。
  • モデルからのシリアライズされたエンジンの生成。
  • ビルダーからのシリアライズされたタイミングキャッシュの生成。

ここでは、trtexec ツールを使用して、異なるパラメータでモデルを迅速にベンチマークできます。しかし、まず ONNX モデルが必要であり、この ONNX モデルは ultralytics yolov8 を使用して生成できます。

  • ステップ 1. ONNX をビルドする:
yolo mode=export model=yolov8s.pt format=onnx
  • ステップ 2. trtexec を使用してエンジンファイルをビルドする:
cd /usr/src/tensorrt/bin
./trtexec --onnx=<path_to_onnx_file> --saveEngine=<path_to_save_engine_file>

例えば:

./trtexec --onnx=/home/nvidia/yolov8s.onnx --saveEngine=/home/nvidia/yolov8s.engine

これにより、以下のようなパフォーマンス結果が出力され、.engine ファイルが生成されます。デフォルトでは、ONNX を FP32 精度の TensorRT 最適化ファイルに変換し、以下のような出力が表示されます。

FP16 精度を使用したい場合(FP32 よりも優れたパフォーマンスを提供)、以下のように上記のコマンドを実行できます:

./trtexec --onnx=/home/nvidia/yolov8s.onnx --fp16 --saveEngine=/home/nvidia/yolov8s.engine 

さらに、INT8 精度を使用したい場合(FP16 よりも優れたパフォーマンスを提供)、以下のように上記のコマンドを実行できます:

./trtexec --onnx=/home/nvidia/yolov8s.onnx --int8 --saveEngine=/home/nvidia/yolov8s.engine 

結果

以下に、reComputer J4012 / reComputer Industrial J4012 上で実行された4つのコンピュータビジョンタスクから得られた結果をまとめます。

ボーナスデモ:YOLOv8 を使用したエクササイズ検出およびカウンター

YOLOv8-Pose モデルを使用して、エクササイズ検出およびカウントのためのポーズ推定デモアプリケーションを構築しました。このデモについて詳しく知り、自分の Jetson デバイスにデプロイするには、こちら をご覧ください!

NVIDIA Jetson 用 YOLOv8 の手動セットアップ

前述のワンラインスクリプトにエラーがある場合は、以下の手順を一つずつ実行して、Jetson デバイスを YOLOv8 に対応させることができます。

Ultralytics パッケージのインストール

  • ステップ 1. Jetson デバイスのターミナルにアクセスし、pip をインストールしてアップグレードします。
sudo apt update
sudo apt install -y python3-pip -y
pip3 install --upgrade pip
  • ステップ 2. Ultralytics パッケージをインストールします。
pip3 install ultralytics
  • ステップ 3. numpy のバージョンを最新にアップグレードします。
pip3 install numpy -U
  • ステップ 4. デバイスを再起動します。
sudo reboot

Torch と Torchvision のアンインストール

上記の Ultralytics のインストールにより Torch と Torchvision がインストールされます。しかし、pip 経由でインストールされたこれらの 2 つのパッケージは、ARM aarch64 アーキテクチャに基づく Jetson プラットフォームでは互換性がありません。そのため、事前にビルドされた PyTorch の pip ホイールを手動でインストールし、Torchvision をソースからコンパイル/インストールする必要があります。

pip3 uninstall torch torchvision

PyTorch と Torchvision のインストール

こちらのページ を訪問して、すべての PyTorch と Torchvision のリンクを確認してください。

以下は JetPack 5.0 以上でサポートされているバージョンの一部です。

PyTorch v2.0.0

JetPack 5.1 (L4T R35.2.1) / JetPack 5.1.1 (L4T R35.3.1) と Python 3.8 に対応

ファイル名: torch-2.0.0+nv23.05-cp38-cp38-linux_aarch64.whl
URL: https://nvidia.box.com/shared/static/i8pukc49h3lhak4kkn67tg9j4goqm0m7.whl

PyTorch v1.13.0

JetPack 5.0 (L4T R34.1) / JetPack 5.0.2 (L4T R35.1) / JetPack 5.1 (L4T R35.2.1) / JetPack 5.1.1 (L4T R35.3.1) と Python 3.8 に対応

ファイル名: torch-1.13.0a0+d0d6b1f2.nv22.10-cp38-cp38-linux_aarch64.whl
URL: https://developer.download.nvidia.com/compute/redist/jp/v502/pytorch/torch-1.13.0a0+d0d6b1f2.nv22.10-cp38-cp38-linux_aarch64.whl

  • ステップ 1. 以下の形式で、JetPack バージョンに応じた torch をインストールします。
wget <URL> -O <file_name>
pip3 install <file_name>

例えば、JP5.1.1 を使用している場合、PyTorch v2.0.0 を選択します。

sudo apt-get install -y libopenblas-base libopenmpi-dev
wget https://nvidia.box.com/shared/static/i8pukc49h3lhak4kkn67tg9j4goqm0m7.whl -O torch-2.0.0+nv23.05-cp38-cp38-linux_aarch64.whl
pip3 install torch-2.0.0+nv23.05-cp38-cp38-linux_aarch64.whl
  • ステップ 2. インストールした PyTorch のバージョンに応じて torchvision をインストールします。例えば、PyTorch v2.0.0 を選択した場合、Torchvision v0.15.2 を選択します。
sudo apt install -y libjpeg-dev zlib1g-dev
git clone https://github.com/pytorch/vision torchvision
cd torchvision
git checkout v0.15.2
python3 setup.py install --user

以下は、PyTorch バージョンに応じた対応する torchvision バージョンのリストです:

  • PyTorch v2.0.0 - torchvision v0.15
  • PyTorch v1.13.0 - torchvision v0.14

より詳細なリストについては、こちらのリンク を確認してください。

ONNX のインストールと Numpy のダウングレード

PyTorch モデルを TensorRT に変換したい場合のみ必要です。

  • ステップ 1. 必須要件である ONNX をインストールします。
pip3 install onnx
  • ステップ 2. エラーを修正するために Numpy を低いバージョンにダウングレードします。
pip3 install numpy==1.20.3

リソース

技術サポート & 製品ディスカッション

弊社製品をお選びいただきありがとうございます!製品をご利用いただく際に、できる限りスムーズな体験を提供するため、さまざまなサポートをご用意しております。異なる好みやニーズに対応するため、複数のコミュニケーションチャネルを提供しています。

Loading Comments...