コンピュータビジョンモデルのテスト方法#
はじめに#
モデルテストは、キュレーションされたベンチマークではなく、動いているオブジェクト、光量不足のオブジェクト、または部分的に隠れたオブジェクトなど、これまでに見られていない実世界のデータに対して訓練済みモデルがどのように機能するかを確認します。モデル評価がラベル付きデータセットのメトリクスを測定する一方で、テストは、デプロイ前にモデルの学習済み動作がアプリケーションの目標と一致していることを検証します。このガイドでは、テストデータの準備、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曲線 |
| 予測 | 新しいラベルなしデータでのモデル動作の検査 | いいえ | アノテーション付き画像と予測結果、メトリクスはなし |
テスト結果の分析方法#
予測とメトリクスが得られたら、モデルがどこで、なぜ失敗しているかを掘り下げて分析します。
- 誤分類された画像:モデルが誤分類した画像を特定・レビューし、問題の原因を理解します。
- エラー分析:エラーの種類(例:偽陽性 vs 偽陰性)とその潜在的な原因を理解するために徹底的なエラー分析を行います。
- バイアスと公平性:モデルの予測にバイアスがないか確認します。特に人種、性別、年齢などの機密属性が含まれる場合、データの異なるサブセット間でモデルが等しく機能することを確認します。
機械学習における過学習と学習不足#
機械学習モデル、特にコンピュータビジョンモデルをテストする場合、過学習と未学習に注意することが重要です。これらの問題は、新しいデータに対するモデルの動作に大きな影響を与える可能性があります。
| 問題 | 一般的な兆候 | 対処方法 |
|---|---|---|
| 過学習 | 学習精度は高いが検証精度が低い。画像内のわずかな変化や無関係な詳細に対する過敏反応。 | ドロップアウトなどの正則化を適用し、トレーニングデータセットのサイズを大きくし、モデルアーキテクチャを単純化する |
| 学習不足 | 学習セットですら精度が低い。明らかな特徴やオブジェクトの認識で一貫した失敗。 | より複雑なモデルを使用し、より関連性の高い特徴を提供し、トレーニングエポックを増やす |
重要なのは、学習データセットと検証データセットの両方で良好に機能するようにバランスを取ることです。テスト中にメトリクスを定期的に監視し、予測結果を視覚的に検査することで、両極端への偏りを防ぐことができます。
コンピュータビジョンにおけるデータ漏洩とその回避方法#
データ漏洩は、学習データセット外の情報が誤ってモデルの学習に使用されたときに発生します。学習中はモデルが非常に高精度に見えるかもしれませんが、データ漏洩が発生していると、未知のデータに対してはうまく機能しません。
漏洩は特定が難しく、学習データに含まれる隠れたバイアスから発生することがよくあります。
| バイアスの種類 | 外見的な兆候 |
|---|---|
| カメラバイアス | 異なる角度、照明、影、カメラの動きが不要なパターンをもたらす |
| オーバーレイバイアス | ロゴ、タイムスタンプ、その他の画像内のオーバーレイがモデルを誤導する |
| フォントとオブジェクトのバイアス | 特定のクラスに頻繁に現れる特定のフォントやオブジェクトがモデルの学習を歪める |
| 空間バイアス | 前景と背景の不均衡、バウンディングボックスの分布、およびオブジェクトの位置がトレーニングに影響を与える |
| ラベルとドメインのバイアス | 不正確なラベルやデータ型のシフトが漏洩を招く |
データ漏洩の検知と回避方法#
データ漏洩を見つけるには、モデルの結果が驚くほど良すぎないかを確認し、特定の1つの特徴量が他より重要視されていないか調べ、モデルの決定が直感的に理にかなっているかを確認し、データが処理前に正しく分割されていたかを再確認します。
これを防ぐには、異なるカメラや環境で撮影された画像やビデオを含む多様なデータセットを使用し、特定の時間帯にのみポジティブサンプルが採取されているといった隠れたバイアスがないかデータを注意深く見直します。データ漏洩を回避することで、実環境でのコンピュータビジョンモデルの信頼性が向上します。
モデルテストの次のステップ#
モデルのテスト後、次のステップは結果によって異なります。モデルが良好に機能する場合は、実際の環境にデプロイできます。結果が満足のいくものでない場合は、改善を行う必要があります。これには、エラーの分析、より多くのデータの収集、データ品質の向上、ハイパーパラメータの調整、およびモデルの再トレーニングが含まれる場合があります。
結論#
ホールドアウトテスト分割での検証、実際の画像での予測、過学習やデータリークのチェックなどの厳密なモデルテストこそが、十分に評価されたモデルを信頼性の高いものに変えるものです。デプロイ前にテストで浮き彫りになった問題に対処すれば、本番環境で意図したとおりにモデルが動作する確率がはるかに高くなります。途中で質問が生じた場合は、Ultralytics GitHubリポジトリまたはUltralytics Discordサーバーのコミュニティにお尋ねください。
よくある質問 (FAQ)#
モデル評価はラベル付きデータセットのメトリクスでパフォーマンスを測定し、モデルテストはデプロイ条件に似た新しく未確認のデータでモデルがどのように動作するかを確認します。評価は制御されたデータセットから適合率やmAPなどの数値を生成し、テストは照明、動き、オクルージョンが変化しても学習された動作が維持されるかどうかを明らかにします。実際の例については、モデルテストとモデル評価を参照してください。
予測モードを使用してフォルダパスを
sourceとして渡します。YOLO26はフォルダ内のすべての画像で実行され、確認用にアノテーション付きの結果を保存できます。予測モードではメトリクスは計算されません。ラベル付きセットでパフォーマンスを定量化するには、代わりに検証モードを使用してください。両方のワークフローがYOLO26モデルのテスト方法に示されています。検出モデルの場合、検証では適合率、再現率、mAP50、およびmAP50-95が報告され、混同行列や適合率-再現率曲線などのプロットが保存されます。デフォルトの
val分割ではなく専用のテスト分割で検証するには、データセットYAMLでtest:を定義し、split="test"を渡します。各メトリクスの解釈方法については、パフォーマンスメトリクスガイドを参照してください。過学習に対しては、ドロップアウトなどの正則化手法を適用するか、トレーニングデータセットのサイズを増やすか、モデルアーキテクチャを単純化します。未学習に対しては、より複雑なモデルを使用するか、より関連性の高い特徴を提供するか、より多くのエポックでトレーニングします。各問題の兆候とそれに対応する修正方法は、機械学習における過学習と未学習にまとめられています。
テストパフォーマンスが驚くほど良好に見える場合、単一の特徴が予測を支配している場合、またはモデルの決定が直感的な意味をなさない場合は、データリークを疑ってください。異なるカメラや環境からの多様なデータセットを使用し、隠れたバイアスがないかデータを見直し、処理の前にtrain/test分割が行われたことを検証することで、これを防ぎます。一般的なバイアスの種類については、コンピュータビジョンにおけるデータリークを参照してください。
結果がプロジェクトの目標を満たしている場合はモデルをデプロイし、そうでない場合はデプロイする前に改善します。これには、エラーの分析、より多様なデータの収集、データ品質の向上、ハイパーパラメータのチューニング、および再トレーニングが含まれます。修正が機能したことを確認するために、変更の各ラウンドの後にテストを繰り返します。