Model Soups
Model Soups が Ultralytics YOLO モデルのウェイトを平均化することで、精度と堅牢性をどのように向上させるかを発見してください。レイテンシを増やさずにパフォーマンスを高める方法を学びましょう。
Model Soupsとは、同一の事前学習済みベースモデルから異なるハイパーパラメータを用いてファインチューニングされた複数のニューラルネットワークの重みを平均化し、単一のより堅牢なモデルを作成する機械学習手法のことです。このアプローチにより、推論時の計算コストを増加させることなく、全体的な精度と汎化性能を向上させることができます。
モデルのファインチューニングを行う際、実務者は通常、最も優れた性能を発揮する構成を見つけるために広範なハイパーパラメータチューニングスイープを実行します。従来は、最も優れた単一のモデルのみを選択し、残りは破棄されていました。しかし、Model Soupを作成することで、スイープ内のすべてのモデルが学習した多様な特徴を活用できます。それらのモデル重みを直接平均化することで、生成されたネットワークは多くの場合、単一のベストモデルを上回る性能を発揮し、各モデルの長所を効果的に組み合わせると同時に過学習を最小限に抑えます。このプロセスは非常に効率的であり、Ultralytics Platformのようなコラボレーティブ環境内で容易に管理できます。
Link to this section実社会での応用#
Model Soupsは、計算リソースが制限されている一方で、高い精度と堅牢性が求められるシナリオにおいて極めて有効です。
- 自動運転車のビジョン: 自動運転車に物体検出システムをデプロイする場合、モデルは多様な照明条件や天候条件下で汎化できなければなりません。エンジニアは、さまざまなデータ拡張や学習率で訓練された複数のモデルを平均化することで、低い推論レイテンシを維持する非常に堅牢なSoupを作成します。これにより、自動運転に不可欠なリアルタイムの処理速度を損なうことがなくなります。
- モバイル医療診断: 皮膚科の初期スクリーニングのためにスマートフォンで画像分類を実行するようなエッジAIアプリケーションでは、計算能力が著しく制限されます。Model Soupは、臨床的な信頼性のために必要な精度向上を実現しつつ、最終的なフットプリントをモバイルエッジデバイスに収め、バッテリーを消耗させたりクラウド接続を必要としたりすることなく動作させることができます。
Link to this section関連する概念との違い#
ディープラーニングの最適化の領域において、Model Soupsと類似の手法を区別することは重要です。
- モデルアンサンブル: アンサンブルは、複数の独立したモデルの予測(出力)を組み合わせる手法です。これは精度を向上させますが、推論時にすべてのモデルを実行する必要があり、計算コストが倍増します。Model Soupsは推論前に重みを平均化するため、計算コストは単一モデルと同等に保たれます。
- モデルマージング: これは、全く異なるタスクやデータセットで訓練された可能性のあるモデルを組み合わせるための、より広い概念を指す用語です。Model Soupsはマージングの特定のサブセットであり、すべてのモデルが全く同じ事前学習済みベースアーキテクチャから派生し、同一のターゲットタスクでファインチューニングされている必要があります。
Link to this section実装例#
Creating a uniform model soup involves accessing the PyTorch state dictionary of multiple trained models and mathematically averaging their tensors. Below is a concise example of how this can be achieved using an Ultralytics YOLO26 workflow natively backed by the PyTorch framework.
import torch
# Load the PyTorch state dictionaries from two fine-tuned YOLO26 models
model1 = torch.load("yolo26_run1.pt")["model"].state_dict()
model2 = torch.load("yolo26_run2.pt")["model"].state_dict()
# Create a uniform model soup by averaging the model weights
soup_dict = {key: (model1[key] + model2[key]) / 2.0 for key in model1.keys()}
# The resulting soup_dict can now be loaded into a new YOLO26 instanceBy leveraging this technique, computer vision practitioners can easily boost performance metrics like zero-shot learning capabilities and general robustness without sacrificing the deployment speed required for modern, edge-first AI architectures.






