4.7 モデルエクスポートとエッジデプロイ

なぜこれが重要か

前章では、カスタム YOLO モデルの訓練方法と、Jetson 上で推論を成功させる方法について説明しました。その段階では、モデルはまだ .pt 形式 で保存されていました。これは PyTorch エコシステムで一般的に使用されるネイティブ形式です。これは良い出発点です。なぜなら、訓練結果が正しいこと、そしてモデルがすでにターゲットデバイス上で物体検出を実行できることを示しているからです。

image-20260402114356086

しかし、Jetson 上でモデルを実行できるからといって、そのモデルがすでに最適なデプロイ形態にあるとは限りません。.pt ファイルは主に訓練、検証、開発のために設計されており、そこでは実行効率よりも柔軟性のほうが重要です。実際のエッジデプロイ、特に Jetson のような組み込みプラットフォームでは、モデルが動くかどうか以上に多くのことを気にする必要があります。動作の速さ、メモリ消費量、スループットの安定性、そしてデバイスの電力・熱的制約にうまく収まるかどうかも重要です。

image-20260402114750724

言い換えると、訓練済みのチェックポイントはデプロイパイプラインの一部にすぎません。YOLO モデルを実際の Jetson アプリケーションに本当に適したものにするには、通常はよりデプロイに適した形式に変換し、組み込み推論向けにさらに最適化する必要があります。これは コンピュータビジョン開発エッジエンジニアリング の間のギャップを埋める重要なステップです。

したがって、モデルを訓練した後の重要な問いは、単に 「動くか?」 ではなく、「Jetson 上で効率的に動かせるか?」 です。その問いに答えるためには、なぜモデル最適化が必要なのかを理解する必要があります。


なぜモデル最適化が必要なのか?

モデル最適化が必要なのは、もともと訓練されたモデルは通常、組み込みハードウェアの制約を考慮して設計されていないためです。訓練中の主な目標は、良い精度と収束を達成することです。しかしデプロイ時には目標が変わります。モデルには、高速な推論、低レイテンシ、高スループット、低メモリ使用量、優れた電力効率 が求められます。

image-20260402115153469

これは Jetson デバイスにおいて特に重要です。デスクトップ GPU やクラウドサーバーと比べると、Jetson プラットフォームは計算リソース、メモリ帯域、電力予算がより限られています。ロボティクス、スマートカメラ、産業検査、自律システムなど、多くのエッジ AI シナリオでは、モデルはデータをリアルタイムに処理しなければなりません。推論が遅すぎると、システムはフレームを取りこぼしたり、応答が遅れたり、アプリケーション要件を満たせなくなったりします。

YOLO モデルを .pt 形式のまま直接実行すると、PyTorch ランタイムからの不要なオーバーヘッドが入りやすくなります。テストやプロトタイピングには便利ですが、Jetson ハードウェアから最大の性能を引き出すには理想的とは言えません。モデルは正しく動作するかもしれませんが、GPU を可能な限り効率的に使えていない可能性があります。その結果、レイテンシが高いままで、スループットも制限され、リソース使用量も必要以上に大きくなる場合があります。

モデル最適化はこれらの問題の解決に役立ちます。モデルをエクスポートし、推論用に最適化することで、ターゲットハードウェア上でのネットワーク実行方法を改善できます。これには、冗長な演算の削減、レイヤー融合、より効率的なカーネルの選択、FP32 から FP16 や INT8 への精度の引き下げ、メモリ使用量の改善 などが含まれます。これらの最適化は、モデル全体のタスクを変えることなく、デプロイ性能を大幅に向上させることができます。

Jetson デプロイにおいて、最適化は次のようないくつかの実用的な利点をもたらします。

1. 低レイテンシ

モデルが高速になると、各入力フレームをより素早く処理できます。これは物体検出や追跡などのリアルタイムタスクで重要です。

2. 高スループット

最適化により、システムは 1 秒あたりにより多くのフレームを処理できるようになります。これは映像解析やマルチストリームアプリケーションで重要です。

3. 低メモリ使用量

組み込みデバイスはメモリリソースが限られています。最適化されたモデルはメモリフットプリントを削減し、システムの安定性を向上させます。

4. 優れた電力効率

Jetson デバイスは消費電力が重要となるエッジ環境でしばしば使用されます。より効率的なモデルは、システムをより長く、より信頼性高く動作させるのに役立ちます。

5. ハードウェアのより良い活用

最適化により、モデルは汎用フレームワークの実行に大きく依存するのではなく、NVIDIA GPU アクセラレーションをより活用できるようになります。

これらの理由から、モデル最適化はオプションの改善ではなく、訓練済みの YOLO モデルを実際のデプロイ条件下で効率的に動作する実用的なエッジ AI ソリューションへと変えるための必須ステップです。


TensorRT とは何か?

image-20260402181431191

TensorRT は NVIDIA の高性能ディープラーニング推論フレームワーク兼ランタイムです。訓練済みのニューラルネットワークを最適化し、Jetson デバイスを含む NVIDIA ハードウェア上で効率的に実行するために特別に設計されています。

簡単に言えば、TensorRT は訓練済みのモデルをデプロイにより適した形式に変換するためのツールです。汎用のディープラーニングフレームワークでモデルを実行するのではなく、TensorRT はターゲットの NVIDIA GPU に合わせた 最適化された推論エンジン を構築します。これにより、モデルはより高速かつ効率的に動作します。

img

Jetson においては、NVIDIA 組み込み GPU の能力を最大限引き出すように設計されているため、TensorRT はデプロイの中心的な役割を担います。次のような様々な最適化を実施します。

  • レイヤー融合:複数の演算をより効率的な実行パスに統合します
  • カーネルの自動選択:ハードウェアに最適な実装を選びます
  • 精度の最適化:FP16 や INT8 アクセラレーションなど
  • メモリ最適化:不要なメモリ移動を減らし、ランタイム効率を高めます

その結果、TensorRT は元の .pt モデルを直接実行するのに比べて、YOLO モデルの推論性能を大幅に向上させることができます。

image-20260402182425008

一般的な Jetson デプロイのワークフローは次のようになります。

PyTorch .pt モデル → ONNX モデル → TensorRT エンジン → Jetson 推論

このワークフローでは:

  • .pt モデル は訓練の成果物です
  • ONNX モデル は中間交換フォーマットとして機能します
  • TensorRT エンジン は Jetson 上での推論に使用される最適化されたデプロイ用成果物です

このプロセスは、TensorRT が単なるコンバータではなく、組み込み AI デプロイにおける鍵となる最適化・実行レイヤーであることを示しています。

エンジニアリングの観点から、TensorRT が重要なのは、単に 訓練・テスト可能 なモデルを、本当に デプロイ可能で効率的 なものに変えるからです。Jetson ユーザーにとって、TensorRT は実用的なリアルタイム性能を達成する上で最も重要なステップとなることが多いです。

主なモデルフォーマット

フォーマット主な役割
PyTorch checkpoint訓練と実験に柔軟
ONNX可搬性のある中間フォーマット
TensorRT engineNVIDIA ハードウェア向けに最適化されたランタイムフォーマット

精度 vs 速度 vs 電力

精度の高いモデルはしばしば 大きく、遅く、より多くの電力を消費 し、一方で高速なモデルはしばしば 軽量だが精度はやや低い ものになります。実デプロイでは、デバイスとタスクに合ったバランスを見つけなければなりません。エッジデプロイは常にトレードオフです。

しばしば次の項目間でバランスを取ります。

  • モデル精度
  • 推論速度
  • メモリ使用量
  • 熱と電力の制約

精度モード

モデル精度とは、モデル内部で重みやアクティベーションなどの数値を保存するために使用するビット数 のことです。FP32 のような高精度はより多くの数値詳細を保持し、FP16INT8 のような低精度はより少ないビット数を使用します。低精度は推論を より速く し、より少ないメモリ で済むため、Jetson のようなエッジデバイスで非常に有用です。しかし、精度を下げすぎるとモデルの精度が低下する可能性があるため、速度と信頼性のバランスを取る必要があります。

前提条件: 必要な依存関係をインストールしてください:

bash
pip install ultralytics opencv-python torch

コード例

注意: yolo26s.pt は、第 4.6 章で訓練した自身のモデルのパスに置き換えるか、yolo26s.pt のような事前学習済みモデルを使用してください。

ONNX へのエクスポート

bash
yolo export model=yolo26s.pt format=onnx imgsz=640

Jetson 上で TensorRT にエクスポート

bash
yolo export model=yolo26s.pt format=engine imgsz=640 half=True device=0

便利な Jetson ランタイムコマンド

bash
#turn on max mode
sudo nvpmodel -m 0
#turn on jetson clocks
sudo jetson_clocks

注意: このスクリプトには yolo26s.ptyolo26s.engine のモデルファイルが必要です。上記のエクスポートコマンドであらかじめ生成するか、--pt-model--engine-model 引数で自身のモデルパスを指定してください。

試してみる

bash
cd 4-Computer-Vision/4.7-Model-Export-and-Edge-Deployment/code
python compare_yolo26_pt_vs_engine.py --video ./cat.mp4

🚀 最適化されたモデルの推論遅延の変化を観察してください

apr3 デモ

よくある誤解

  • 「モデルのエクスポートに成功すれば、デプロイは解決したことになる。」
    • エクスポートは 1 つのステップにすぎません。ランタイムでの検証は依然として重要です。
  • 「最も速いモデルが常に最良のモデルだ。」
    • 重要なケースを見落とすなら、速いモデルは役に立ちません。
  • 「INT8 は常に FP16 より優れている。」
    • INT8 は強力ですが、精度が許容範囲内に保たれている場合に限ります。

演習 / 振り返り

  1. 訓練済みのモデルを 1 つ ONNX にエクスポートし、コマンドを記録してください。
  2. checkpointONNXTensorRT engine のそれぞれが何に最も適しているかを文章で比較してください。
  3. モデルが正確だが遅すぎる場合を想定し、デプロイをより実用的にする方法を 3 つ挙げてください。
  4. エッジデバイスにおいて電源モードがなぜ重要なのかを説明してください。

TensorRT モデル予測

モデルを TensorRT 形式にエクスポートした後(上記参照)、リアルタイム推論に使用できます。

bash
cd 4-Computer-Vision/4.7-Model-Export-and-Edge-Deployment/code
python yolo_predict_tensorrt.py

カスタムモデルの予測

注意: このスクリプトには、上記のエクスポートコマンドで生成された yolo26s.engine ファイルが必要です。まだ持っていない場合は、先にエクスポートを実行してください。

まとめ

モデルエクスポートとエッジデプロイは後付けのものではありません。それらはコンピュータビジョンの完全なワークフローの一部です。データ、訓練、評価を理解した学習者にとって、次の課題はそのモデルを実ハードウェア向けの実用的な形に変換することです。

推奨される次のステップ

4.8 リアルタイムビジョンパイプラインフレームワーク に進んでください。

参考資料