コンピュータビジョンモデルのテスト方法#
はじめに#
モデルテストでは、キュレーションされたベンチマークではなく、動いている、照明が不十分な、または一部が隠れている物体など、これまで見たことのない実世界データに対して訓練済みモデルがどのように機能するかを確認します。モデル評価がラベル付きデータセット上のメトリクスを測定するのに対し、テストではデプロイ前に、モデルが学習した挙動がアプリケーションの目標と一致しているかを検証します。このガイドでは、テストデータの準備、Ultralytics YOLO26モデルのテスト、過学習、未学習、データリーケージの検出について説明します。
Watch: How to Test Machine Learning Models | Avoid Data Leakage in Computer Vision 🚀
モデルテストとモデル評価の違い#
モデルテストとモデル評価は、コンピュータビジョンプロジェクトにおける2つの異なるステップです。評価ではラベル付きデータセット上のメトリクスによって性能を測定し、テストではデプロイ環境に似た条件でもモデルが学習した挙動を維持できるかを確認します。
猫と犬を認識するようにコンピュータビジョンモデルを訓練し、そのモデルをペットショップで動物の監視に利用するとします。モデル評価の段階では、ラベル付きデータセットを使用して、正解率、適合率、再現率などのメトリクスを計算します。たとえば、特定のデータセットで猫と犬を見分ける際のモデルの正解率が98%になる場合があります。
評価後、ペットショップで撮影した画像を使ってモデルをテストし、より多様で現実的な条件において猫と犬をどの程度正確に識別できるかを確認します。猫と犬が動いている場合、照明条件が異なる場合、またはおもちゃや家具などの物体に部分的に隠れている場合でも、正しくラベル付けできるかを確認します。モデルテストでは、管理された評価環境の外でもモデルが期待どおりに動作するかを確認します。
モデルテストの準備#
コンピュータビジョンのデータセットは通常、実世界の条件をシミュレートするために訓練セットとテストセットに分けられます。訓練データはモデルに学習させ、テストデータはモデルが一度も見たことのない例に対する挙動を検証します。Ultralytics Platformでは、データセットの整理とアノテーションを1か所で管理できるため、ラベル付きテストセットの構築に役立ちます。
- 現実的な再現性: これまで見たことのないテストデータは、デプロイ後にモデルが処理するデータと類似している必要があります。これにより、モデルの能力を現実的に把握できます。
- 十分なサイズ: テストデータセットは、モデルの性能について信頼できる洞察を得られる十分な大きさである必要があります。
YOLO26モデルのテスト方法#
訓練済みYOLO26モデルのテストには、相補的な2つのワークフローがあります。定量的なメトリクスを得るためにラベル付きテスト分割で検証する方法と、定性的に挙動を確認するために新しい画像で予測する方法です。
ラベル付きテスト分割での検証#
検証モードでは、モデルの予測を正解ラベルと比較し、検出モデルについて適合率、再現率、mAP50、mAP50-95を報告します。また、混同行列や適合率-再現率曲線などの視覚的な補助資料も保存されるため、モデルの性能が十分でない具体的な領域を見つけるのに役立ちます。
from ultralytics import YOLO
# Load a pretrained model or your own trained checkpoint, e.g. "path/to/best.pt"
model = YOLO("yolo26n.pt")
# Validate; add split="test" if your dataset YAML defines a test split
metrics = model.val(data="coco8.yaml")
print(metrics.box.map) # mAP50-95デフォルトでは、検証はデータセットのval分割で実行されます。分離して保持したテストセットで性能を測定するには、データセットYAMLでtest:分割を定義し、split="test"を渡します。
新しい画像での予測#
予測モードでは、ラベルを必要とせずに新しい未確認データでモデルを実行します。性能メトリクスは生成されませんが、アノテーション付きの出力を保存することで、実世界の画像に対するモデルの挙動を確認できます。たとえば、テスト画像のフォルダー全体を一度に処理できます。
from ultralytics import YOLO
# Load a pretrained model or your own trained checkpoint, e.g. "path/to/best.pt"
model = YOLO("yolo26n.pt")
# Run predictions on a folder of test images and save annotated results
results = model.predict(source="path/to/test_images", save=True)カスタム訓練に投資する前にYOLO26がアプリケーションに適しているか確認するには、事前訓練済みチェックポイントを使って自分の画像に対して予測モードを実行します。モデルはCOCOなどのデータセットで事前訓練されているため、結果から特定のコンテキストでのモデルの性能を素早く把握できます。
検証モードと予測モードの比較#
| モード | 目的 | ラベルが必要 | 出力 |
|---|---|---|---|
| 検証 | 正解データに対する性能を定量化 | はい | 適合率、再現率、mAP50、mAP50-95、混同行列、PR曲線 |
| 予測 | 新しいラベルなしデータに対するモデルの挙動を確認 | いいえ | アノテーション付き画像と予測結果、メトリクスなし |
テスト結果の分析方法#
予測とメトリクスが得られたら、モデルがどこで、なぜ失敗するのかを詳しく分析します。
- 誤分類画像: モデルが誤分類した画像を特定して確認し、どこで問題が起きているかを理解します。
- エラー分析: 徹底的なエラー分析を行い、エラーの種類(例: 偽陽性と偽陰性)と考えられる原因を理解します。
- バイアスと公平性: モデルの予測にバイアスがないか確認します。特に人種、性別、年齢などのセンシティブ属性が含まれる場合は、データの異なるサブセット間でモデルが同等に機能することを確認します。
機械学習における過学習と未学習#
機械学習モデル、特にコンピュータビジョンモデルをテストする際は、過学習と未学習に注意することが重要です。これらの問題は、新しいデータに対するモデルの性能に大きな影響を与える可能性があります。
| 問題 | 一般的な兆候 | 対処方法 |
|---|---|---|
| 過学習 | 訓練時の正解率は高いが検証時の正解率が低い。画像内のわずかな変化や無関係な詳細に過敏に反応する | 正則化(ドロップアウトなど)を適用し、訓練データセットのサイズを増やし、モデルアーキテクチャを簡素化します |
| 未学習 | 訓練セットでも正解率が低い。明らかな特徴や物体を一貫して認識できない | より複雑なモデルを使用し、より関連性の高い特徴を与え、訓練エポック数を増やします |
重要なのは、訓練データセットと検証データセットの両方でモデルが適切に機能するバランスを見つけることです。テスト中にメトリクスを定期的に監視し、予測を視覚的に確認することで、いずれかの極端な状態への移行を検出できます。
コンピュータビジョンにおけるデータリーケージとその回避方法#
データリーケージは、訓練データセット外の情報が誤ってモデルの訓練に使用された場合に発生します。データリーケージがあると、訓練中はモデルの正解率が非常に高く見えても、新しく未知のデータでは十分に機能しません。
リーケージは見つけにくい場合があり、多くの場合、訓練データに潜む隠れたバイアスが原因です。
| バイアスの種類 | 現れる特徴 |
|---|---|
| カメラバイアス | 異なるアングル、照明、影、カメラの動きによって不要なパターンが生じる |
| オーバーレイバイアス | 画像内のロゴ、タイムスタンプ、その他のオーバーレイがモデルを誤らせる |
| フォントおよび物体バイアス | 特定のクラスに頻繁に現れる特定のフォントや物体が、モデルの学習を偏らせる |
| 空間バイアス | 前景と背景の不均衡、バウンディングボックスの分布、物体の位置が訓練に影響する |
| ラベルおよびドメインバイアス | 不正確なラベルやデータタイプの変化によってリーケージが生じる |
データリーケージの検出と回避方法#
データリーケージを見つけるには、モデルの結果が不自然に良すぎないかを確認し、1つの特徴が他の特徴よりはるかに重要になっていないかを調べ、モデルの判断が直感的に妥当かを再確認し、処理を行う前にデータが正しく分割されていたことを検証します。
これを防ぐには、異なるカメラや環境から得た画像または動画を含む多様なデータセットを使用し、特定の時刻にすべての陽性サンプルが撮影されているといった隠れたバイアスがないかデータを慎重に確認します。データリーケージを回避することで、実世界の状況におけるコンピュータビジョンモデルの信頼性が高まります。
モデルテスト後のステップ#
モデルのテスト後に取るべき次のステップは、結果によって異なります。モデルの性能が良好であれば、実世界の環境にデプロイできます。結果が満足できない場合は、改善が必要です。エラーの分析、データの追加収集、データ品質の改善、ハイパーパラメーターの調整、モデルの再訓練などを行う場合があります。
まとめ#
分離して保持したテスト分割での検証、実世界の画像での予測、過学習とデータリーケージの確認を含む厳密なモデルテストによって、十分に評価されたモデルが信頼できるモデルになります。テストで明らかになった問題にデプロイ前に対処すれば、モデルが本番環境で意図どおりに動作する可能性が大幅に高まります。途中で疑問が生じた場合は、Ultralytics GitHubリポジトリまたはUltralytics Discordサーバーでコミュニティに質問してください。
FAQ#
モデル評価ではラベル付きデータセット上のメトリクスで性能を測定するのに対し、モデルテストではデプロイ条件に似た新しい未知のデータに対するモデルの挙動を確認します。評価では管理されたデータセットから適合率やmAPなどの数値が得られ、テストでは多様な照明、動き、オクルージョンの下でも学習した挙動を維持できるかが明らかになります。実例については、モデルテストとモデル評価の違いを参照してください。
予測モードを使用し、フォルダーのパスを
sourceとして渡します。YOLO26はフォルダー内のすべての画像で実行され、確認用にアノテーション付きの結果を保存できます。予測モードではメトリクスは計算されません。ラベル付きセットで性能を定量化するには、代わりに検証モードを使用してください。両方のワークフローはYOLO26モデルのテスト方法で説明しています。検出モデルの場合、検証では適合率、再現率、mAP50、mAP50-95が報告され、混同行列や適合率-再現率曲線などのプロットが保存されます。デフォルトの
val分割ではなく専用のテスト分割で検証するには、データセットYAMLでtest:を定義し、split="test"を渡します。各メトリクスの解釈方法については、性能メトリクスガイドを参照してください。過学習の場合は、ドロップアウトなどの正則化手法を適用する、訓練データセットのサイズを増やす、またはモデルアーキテクチャを簡素化します。未学習の場合は、より複雑なモデルを使用する、より関連性の高い特徴を与える、またはエポック数を増やして訓練します。それぞれの問題の兆候と対応する対策は、機械学習における過学習と未学習にまとめています。
テスト性能が不自然に良すぎる、単一の特徴が予測を支配している、またはモデルの判断が直感的に妥当でない場合は、データリーケージを疑ってください。異なるカメラや環境から得た多様なデータセットを使用し、隠れたバイアスがないかデータを確認し、処理前に訓練/テスト分割が行われたことを検証することで防止できます。一般的なバイアスの種類については、コンピュータビジョンにおけるデータリーケージを参照してください。
結果がプロジェクトの目標を満たしていればモデルをデプロイし、満たしていなければデプロイ前に改善します。エラーの分析、より多様なデータの収集、データ品質の改善、ハイパーパラメーターの調整、再訓練などを行います。変更を加えるたびにテストを繰り返し、修正が機能したことを確認してください。