Model Soups
Ultralytics YOLOモデルの重みを平均化することで、Model Soupsがどのように精度と堅牢性を向上させるかを紹介します。推論レイテンシを増加させずにパフォーマンスを向上させる方法を学びましょう。
Model Soupsは、同一の事前学習済みベースモデルから異なるハイパーパラメータを使用してファインチューニングされた複数のニューラルネットワークの重みを平均化し、単一のより堅牢なモデルを作成する機械学習手法です。このアプローチにより、開発者は推論時の計算コストを増加させることなく、全体的な精度と汎用性を向上させることができます。
モデルのファインチューニングを行う際、実務者は通常、最適な設定を見つけるために広範なhyperparameter tuningスイープを実行します。従来は、単一の最良モデルが選択され、残りは破棄されていました。しかし、Model Soupsを作成することで、スイープ内のすべてのモデルが学習した多様な特徴を活用できます。そのmodel weightsを直接平均化することで、得られるネットワークは多くの場合、単一の最良モデルを上回り、overfittingを最小限に抑えながら各モデルの強みを効果的に組み合わせます。このプロセスは非常に効率的で、Ultralytics Platformのようなコラボレーティブな環境内で簡単に管理できます。
Link to this section実際の応用例#
Model Soupsは、計算リソースが制限されている一方で、高い精度と堅牢性が求められるシナリオにおいて非常に効果的です。
- 自律走行車のビジョン: 自動運転車にobject detectionシステムを導入する場合、モデルは多様な照明や気象条件に汎化する必要があります。様々なデータ拡張と学習率でトレーニングされた複数のモデルを平均化することで、エンジニアは低いinference latencyを維持する非常に堅牢なスープを作成できます。これにより、autonomous navigationに不可欠なリアルタイムの処理速度が影響を受けないことが保証されます。
- モバイル医療診断: 皮膚科の初期スクリーニングのためにスマートフォンでimage classificationを実行するようなエッジAIアプリケーションでは、計算能力が厳しく制限されます。Model Soupsは、臨床的な信頼性のために必要な向上した精度を提供すると同時に、最終的なフットプリントをバッテリーを消耗させたりクラウド接続を必要としたりすることなく、mobile edge devicesに簡単に収まるようにします。
Link to this section関連する概念の区別#
deep learning optimizationの領域を理解する上で、Model Soupsを類似の手法と区別することが重要です。
- Model Ensemble: アンサンブルは、複数の独立したモデルの予測(出力)を組み合わせる手法です。これは精度を向上させますが、推論時にすべてのモデルを実行する必要があり、計算コストが増大します。Model Soupsは推論前に重みを平均化するため、計算コストは単一モデルと同じままです。
- Model Merging: これは、全く異なるタスクやデータセットでトレーニングされた可能性のあるモデルを組み合わせるためのより広範な用語です。Model Soupsはマージの特定のサブセットであり、すべてのモデルが全く同じpre-trained base architectureに由来し、同じターゲットタスクでファインチューニングされている必要があります。
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.






