モデルの評価とファインチューニングに関する知見#
YOLOモデルの学習後は、性能を測定し、課題を解消するためにファインチューニングする必要があります。評価ではmAPやIoUなどの指標を使って精度を定量化します。一方、ファインチューニングでは学習パラメーターを調整して弱点を補強し、モデルがプロジェクトの目標を達成できるようにします。このガイドでは、主要な評価指標とその読み取り方、指標から得られた情報を活用する方法を説明します。
視聴: モデル評価とファインチューニングの知見 | 平均適合率を改善するヒント
評価とファインチューニングは、学習が始まり、モデルの精度と効率を検証してデプロイの準備が整っていることを確認するコンピュータービジョンプロジェクトのワークフローの終盤に位置します。
主要な評価指標#
モデルの性能を測る指標はさまざまです。これらの性能指標は明確な数値に基づく知見を提供し、モデルが意図した目標を達成できるよう改善を導きます。
信頼度スコア#
信頼度スコアは、検出した対象物が特定のクラスに属するとモデルが判断する確信度を表します。値は0から1の範囲で、高いほど確信度が高いことを示します。信頼度スコアを使って予測をフィルタリングし、指定したしきい値を超える信頼度スコアの検出結果だけを有効とします。
推論の実行時に予測結果が表示されず、ほかの点もすべて確認済みの場合は、信頼度のしきい値を下げてみてください。しきい値が高すぎると、モデルが有効な予測を無視することがあります。しきい値を下げると、モデルがより多くの可能性を考慮するようになります。これは最終的なプロジェクトの目標に合わない場合もありますが、モデルの能力を確認し、ファインチューニングの方法を検討するうえで有効です。
Intersection over Union#
Intersection over Union(IoU)は、物体検出で使用される指標で、予測されたバウンディングボックスと正解のバウンディングボックスの重なり具合を測定します。IoUの値は0から1までの範囲で、1は完全な一致を表します。IoUは、予測された境界と実際の対象物の境界がどれだけ一致しているかを測定するため、重要です。
平均適合率#
平均適合率(mAP)は、物体検出モデルの全体的な性能を測定します。各クラスの対象物をどれだけ正確に検出できるかを調べ、そのスコアを平均して、モデルが対象物をどれだけ正確に識別・分類できるかを示す単一の数値を算出します。
一般的に報告されるmAP指標は、主に2つあります。
- mAP@.5: 単一のIoUしきい値0.5における平均適合率を測定します。この指標は、精度要件を比較的緩やかにした場合に、モデルが対象物を正しく検出できるかを確認します。対象物が概ね正しい位置にあるかに焦点を当て、完璧な位置合わせは求めないため、モデルが全般的に対象物を適切に検出できているかを把握できます。
- mAP@.5:.95: 0.5から0.95まで0.05刻みで設定した複数のIoUしきい値におけるmAP値を平均します。この指標はより詳細で厳格です。厳しさの異なる条件でモデルが対象物をどれだけ正確に検出できるかを包括的に示し、正確な物体検出が必要な用途で特に役立ちます。
その他のmAP指標には、より厳しいIoUしきい値0.75を使うmAP@0.75や、大きさの異なる対象物に対する適合率を評価するmAP@small、medium、largeがあります。
YOLO26モデルの評価#
学習済みのYOLO26モデルは、検証モードで評価できます。各指標の計算方法と解釈を詳しく知りたい場合は、YOLO26の性能指標のガイドを参照してください。
画像サイズの違いへの対応#
さまざまなサイズの画像でモデルを評価すると、多様なデータセットに対する性能を理解できます。検証では、デフォルトで長方形バッチ処理が使用されます(rect=True in model.val())。アスペクト比に基づいて画像をグループ化し、各バッチを収められる最小の形状にパディングするため、長方形の画像を正方形に無理に変換せず評価できます。
imgsz パラメーターは、検証に使用する画像サイズを正方形として設定します。明示的に設定しない場合、YOLO26はモデルの設定に保存された値(公式の事前学習済みモデルでは640、カスタムチェックポイントでは学習時に使用したサイズ)を再利用します。rect=true を指定すると、YOLO26は長辺を imgsz に制限し、アスペクト比を維持しながら短辺をストライドの倍数までパディングします。データセットの寸法と利用可能なGPUメモリに応じて imgsz を調整してください。
YOLO26の指標へのアクセス#
モデルの性能を詳しく把握するには、数行のPythonコードで個別の評価指標にアクセスできます。次のスニペットは、モデルを読み込み、検証を実行して、最も役立つ指標を出力します。
from ultralytics import YOLO
# モデルを読み込む
model = YOLO("yolo26n.pt")
# データセットの検証を実行します
results = model.val(data="coco8.yaml")
# 全体指標
print("mAP50-95:", results.box.map) # IoU 0.50:0.95でのmAP
print("mAP50:", results.box.map50) # IoU 0.50でのmAP
print("mAP75:", results.box.map75) # IoU 0.75でのmAP
print("Mean precision:", results.box.mp)
print("Mean recall:", results.box.mr)
print("Fitness:", results.box.fitness()) # モデル選択に使用する重み付きスコア
# クラスごとのメトリクス
print("Class indices evaluated:", results.box.ap_class_index)
print("Per-class mAP50-95:", results.box.maps)
# 画像ごとの適合率、再現率、F1、TP、FP、FN
print("Per-image metrics:", results.box.image_metrics)
# 画像あたりのミリ秒単位で示すステージ別の処理時間内訳
print("Timing breakdown (ms/image):", results.speed)fitness()はメソッドなので、かっこを付けて呼び出す必要があります。一方、map、map50、mpなどのメトリクスは、プロパティとして直接アクセスします。
results.box.image_metrics属性は画像ファイル名をキーとする画像ごとの辞書で、各画像についてIoU 0.5でのprecision、recall、f1、tp、fp、fnを格納します。前処理、推論、損失、後処理の処理時間は、results.speed辞書で個別に報告されます。これらを組み合わせることで、モデルが苦手とする画像を特定し、それに応じて微調整できます。
モデルのファインチューニング#
ファインチューニングでは、事前学習済みモデルのパラメーターを調整し、特定のタスクやデータセットでのパフォーマンスを向上させます。モデルの再学習とも呼ばれ、実際のアプリケーションで遭遇するデータをモデルがより適切に理解し、予測できるようにします。評価結果に基づいて、自分のデータでモデルを再学習し、ファインチューニングガイドで説明されている学習引数を調整します。
小さな物体に対する画像のタイル分割#
画像のタイル分割は、小さな物体の検出精度を向上させるのに役立ちます。大きな画像を複数の小さなセグメントに分割することで、たとえば1280x1280の画像を複数の640x640セグメントに分割し、元の解像度を維持したまま、高解像度の画像片からモデルを学習できます。Ultralyticsは推論時にSAHIによるタイル推論をサポートしています。タイル分割した画像で学習する場合は、新しい各セグメントに合わせてラベルを正しく調整してください。
結論#
評価とファインチューニングによって、学習済みモデルは信頼性が高くデプロイ可能なモデルになります。mAPやIoUなどのメトリクスで弱点を明らかにし、パラメーターを適切に変更して対処します。まず検証モードでモデルのベンチマークを行い、次にファインチューニングガイドで説明されている引数を使って再学習し、新しいパラメーター、手法、データセットで反復を続けます。途中で疑問が生じた場合は、Ultralytics GitHubリポジトリまたはUltralytics Discordサーバーでコミュニティに質問してください。
よくある質問#
YOLO26モデルのパフォーマンス評価では、信頼度スコア、Intersection over Union (IoU)、平均適合率 (mAP)などの重要なメトリクスを使用します。信頼度スコアは、検出された各物体クラスに対するモデルの確信度を測定します。IoUは、予測されたバウンディングボックスが正解データとどの程度重なっているかを評価します。平均適合率 (mAP)は、クラス全体の適合率スコアを集約します。IoUのしきい値を変えて評価する一般的な種類として、mAP@.5とmAP@.5:.95があります。これらのメトリクスの詳細は、YOLO26パフォーマンスメトリクスガイドをご覧ください。
事前学習済みYOLO26モデルのファインチューニングでは、特定のタスクやデータセットでのパフォーマンス向上を目指してパラメーターを調整します。まずメトリクスを使ってモデルを評価し、次に事前学習済みの重みから自分のデータセットで再学習します。評価中は、
rect=trueなどのパラメーターが、さまざまな画像サイズへの効果的な対応に役立ちます。調整する学習引数については、ファインチューニングガイドをご覧ください。評価時にさまざまな画像サイズに対応するには、矩形検証(
rect=True、model.val()のデフォルト)を使用します。この方法では、すべての画像を正方形に強制的に変換する代わりに、アスペクト比に基づいて画像をグループ化し、各バッチにパディングを適用します。imgszパラメーターは検証時の画像サイズを設定します。上書きしない場合、YOLO26はモデルに保存された値(公式の事前学習済みモデルでは640)を再利用します。データセットとGPUメモリに合わせてimgszを調整してください。詳細については、さまざまな画像サイズへの対応に関するセクションをご覧ください。YOLO26モデルの平均適合率 (mAP)を向上させるには、いくつかの手順があります。
- ハイパーパラメーターの調整:さまざまな学習率、バッチサイズ、画像拡張を試します。
- データ拡張:MosaicやMixUpなどの手法を使って、多様な学習サンプルを作成します。
- 画像のタイル分割:大きな画像を小さなタイルに分割し、小さな物体の検出精度を向上させます。
手順1と2に関する学習引数については、ファインチューニングガイドをご覧ください。手順3については、画像のタイル分割で説明しています。
検証を実行した後、Pythonを使ってYOLO26モデルの評価メトリクスにアクセスできます。
使用方法from ultralytics import YOLO # モデルを読み込む model = YOLO("yolo26n.pt") # 検証を実行 results = model.val(data="coco8.yaml") # 主要なメトリクスにアクセス print("Mean average precision at IoU=0.50:", results.box.map50) print("Mean average precision at IoU=0.50:0.95:", results.box.map) print("Mean recall:", results.box.mr) print("Class indices evaluated:", results.box.ap_class_index)これらのメトリクスを分析すると、YOLO26モデルのファインチューニングと最適化に役立ちます。詳しくは、YOLOパフォーマンスメトリクスのガイドをご覧ください。