アノテーション済みコンピュータービジョンデータのデータ前処理技術#
データ前処理は、生のアノテーション済み画像を、コンピュータービジョンモデルが適切に学習するために必要な、クリーンで一貫した入力に変換します。Ultralytics YOLO26では、RGB変換、[0, 1]へのスケーリング、リサイズといった基本的なピクセル操作がトレーニングパイプライン内で自動的に実行されるため、残る作業はデータセットの正しい分割、クラスのバランス調整、オーグメンテーションの選択です。このガイドでは、リサイズ、正規化、データセット分割、データオーグメンテーション、探索的データ分析(EDA)という重要な技術を解説します。
Watch: How to Use Data Preprocessing and Augmentation to Improve Model Accuracy in Real-World Scenarios 🚀
このステップは、プロジェクトの目標を定義し、データを収集してアノテーションした後に行い、コンピュータービジョンプロジェクトのワークフローの早い段階に位置します。
前処理が重要な理由#
前処理によって、計算負荷を軽減し、モデルの性能を向上させる形式にデータを整えます。生データに見られる、次の3つの一般的な問題に対処します。
- ノイズ: データに含まれる無関係またはランダムな変動です。
- 不整合: 画像のサイズ、形式、品質のばらつきです。
- 不均衡: データセット全体におけるクラスまたはカテゴリの分布の偏りです。
前処理技術#
主な技術は、リサイズ、正規化、データセット分割、オーグメンテーションです。YOLO26では前者2つが自動的に実行されるため、分割とオーグメンテーションにおける選択が特に重要です。
画像のリサイズ#
多くのモデルでは一貫した入力サイズが必要なため、リサイズによって画像を統一し、計算の複雑さを軽減します。一般的な補間方法は次の2つです。
- バイリニア補間: 最も近い4つのピクセルの重み付き平均を取って、ピクセル値を滑らかにします。
- 最近傍補間: 平均化せずに最も近いピクセル値をコピーします。より高速ですが、画像がよりブロック状になります。
OpenCVやPIL(Pillow)などのライブラリはこれらの関数を提供しますが、YOLO26では通常、手動でリサイズする必要はありません。imgsz引数が処理します。固定サイズの正方形パスでは、検証と推論でアスペクト比を維持し、グレー(値114)でパディングしながら、画像をimgsz × imgsz入力(640 × 640など)に向けてレターボックス化します。大きな画像は収まるように縮小されますが、スケールアップが無効な場合、小さな画像は拡大されません。デフォルトのトレーニングパスでは、mosaic=1.0が代わりに4枚の画像を大きなキャンバス上にタイル配置し、imgszに戻るようにクロップします。最後のエポックでclose_mosaicがモザイクを無効にすると、画像はレターボックス化された後もランダム変換され、何も変更せずにそのまま渡されることはありません。矩形バッチ(rect=True)とmulti_scaleでは異なる入力形状が使用されます。
ピクセル値の正規化#
正規化はピクセル値を標準的な範囲にスケーリングし、トレーニング中のモデルの収束を速めます。一般的な手法は次の2つです。
- Min-Maxスケーリング: ピクセル値を0から1の範囲にスケーリングします。
- Zスコア正規化: 平均と標準偏差に基づいてピクセル値をスケーリングします。
YOLO26は前処理パイプラインの一部として正規化を自動的に処理します。画像をRGBに変換し、255で割ることでピクセル値を[0, 1]の範囲にスケーリングします(Min-Maxスケーリング)。YOLOはデフォルトでImageNet形式の平均・標準偏差(Zスコア)正規化を適用しないため、手動の正規化ステップは必要ありません。
データセットの分割#
データをトレーニング、検証、テストセットに分割すると、未知のデータでモデルを評価し、その汎化性能を測定できます。一般的な分割比率は、トレーニング70%、検証20%、テスト10%です。scikit-learnやTensorFlowなどのツールを使えば、簡単に実行できます。
分割時には、次の点に注意してください。
- クラス分布を維持する: トレーニング、検証、テストセット全体で、各クラスが比例して含まれるようにします。
- クラスのバランスを調整する: 不均衡なデータセットでは、少数クラスのオーバーサンプリングや多数クラスのアンダーサンプリングを検討します。ただし、トレーニングセット内でのみ行ってください。
オーグメンテーションやその他の前処理を適用する前にデータセットを分割し、それらの変換はトレーニングセットにのみ適用します。分割前にオーグメンテーションを行うと、検証画像やテスト画像の情報がトレーニングに影響し、実世界のデータで大幅に低下する、誤解を招くほど高いスコアが生成されます。
データセットのオーグメンテーション#
データオーグメンテーションは、既存の画像を変更したバージョンを作成することで、データセットのサイズを人工的に増やします。過学習の抑制や汎化性能の向上に役立ち、次のような利点があります。
- より堅牢なモデル: 照明、向き、スケールの変化により、モデルが実世界の歪みに強くなります。
- 費用対効果が高い: 新しいデータを収集してラベル付けすることなく、トレーニングセットを拡張できます。
- データをより有効に活用できる: アノテーション済みの各画像から、複数のトレーニングバリエーションを生成できます。
YOLO26では、オーグメンテーションの強度は、model.train()に渡すトレーニング引数または同等のCLIフラグで制御します。データセットのパス、クラス名、分割などのメタデータを定義するデータセットYAMLを編集して設定するのではありません。唯一の例外はflip_idxです。ポーズデータセットでは、左右のキーポイントペアを対応付けるためにデータセットYAMLでこれを宣言します。これがない場合、YOLOはfliplrとflipudを完全に無効にします。組み込みのオーグメンテーションには次のものがあります。
- Mosaic、MixUp、CutMix(
mosaic、mixup、cutmix): 複数の画像を1つのトレーニングサンプルに組み合わせます。 - 反転(
fliplr、flipud): 画像を水平方向または垂直方向に反転します。 - 幾何変換(
degrees、translate、scale、shear、perspective): 画像を回転、移動、ズーム、ワープします。 - HSVカラージッター(
hsv_h、hsv_s、hsv_v): 色相、彩度、明度を変化させます。 - Copy-paste(
copy_paste): セグメント化されたオブジェクトのコピーを追加で貼り付けます。デフォルトでは同じ画像内で反転して貼り付けますが、copy_paste_mode=mixupを使用すると別の画像から取得できます。 - Channel swap(
bgr): RGBチャンネルの順序をBGRに入れ替えます。 - 分類変換(
auto_augment、erasing): 分類器のトレーニング時に、自動オーグメンテーションポリシーとランダム消去を適用します。
from ultralytics import YOLO
model = YOLO("yolo26n.pt")
# Augmentation is configured with training arguments, not the dataset YAML
model.train(data="coco8.yaml", epochs=10, hsv_h=0.015, fliplr=0.5, mosaic=1.0, degrees=10.0)オーグメンテーション引数とそのデフォルト値の完全な一覧については、オーグメンテーション設定リファレンスと専用のYOLOデータオーグメンテーションガイドを参照してください。なお、albumentationsパッケージがインストールされている場合、YOLOはAlbumentationsベースの組み込みオーグメンテーションも自動的に有効にします。
ケーススタディ: 車両検出の前処理#
バウンディングボックスとラベルが付いた画像から始め、YOLO26で交通画像内の車両を検出・分類するプロジェクトを考えます。各前処理の判断は次のようになります。
- リサイズ: 手動作業は不要です。YOLO26がトレーニング中に
imgszへリサイズします。 - 正規化: 手動作業は不要です。YOLO26がピクセル値を
[0, 1]へ自動的にスケーリングします。 - 分割: クラス分布を各分割で一貫させながら、データセットをトレーニング70%、検証20%、テスト10%に分割します。
- オーグメンテーション: 交通シーンに適したトレーニング引数を設定します。たとえば、方向不変性には
fliplr、昼夜の照明にはhsv_v、さまざまなオブジェクト密度にはmosaicを使用します。
これらの判断を行うと、データセットは探索的データ分析(EDA)の準備が整います。
探索的データ分析(EDA)#
EDAでは統計と可視化を使用して、データ内のパターンや分布を明らかにし、トレーニング前にクラス不均衡や外れ値などの問題を発見しやすくします。
統計的EDAの手法#
統計的EDAは、平均、中央値、標準偏差、範囲といった基本的な指標から始まり、ピクセル強度分布などの特性について計算します。これらにより、データセットの品質をすばやく把握し、不規則性を早期に明らかにできます。
視覚的EDAの手法#
可視化によって、クラス不均衡や外れ値など、要約統計では見落とされるパターンを明らかにできます。一般的なツールには次のものがあります。
- ヒストグラムと箱ひげ図: ピクセル値の分布を示し、強度または特徴量分布における外れ値を検出します。
- 棒グラフ: 各クラスのサンプル数を比較して、クラス不均衡を明らかにします。
- 散布図: 画像の特徴量またはアノテーション間の関係を調べます。
- ヒートマップ: ピクセル強度の分布や、画像全体におけるアノテーションの空間分布を可視化します。
EDAのためのUltralytics Platform#
コード不要でEDAを行うには、データセットをUltralytics Platformにアップロードします。データセットのChartsタブは、分割分布、上位クラスの件数、画像の幅・高さのヒストグラム、アノテーション位置と画像寸法の2Dヒートマップなど、主要なEDA可視化を自動的に生成します。Imagesタブでは、アノテーションオーバーレイ付きでグリッド、コンパクト、テーブル表示からデータを閲覧できるため、コードを書かずに誤ったラベルの例や不均衡なクラスを簡単に見つけられます。
まとめ#
適切に分割、正規化、オーグメンテーションされたデータはノイズを減らし、汎化性能を向上させ、生の画像の集合を信頼性の高いトレーニングセットに変えます。データセットの前処理が完了したら、次のステップはモデルをトレーニングすることです。途中で疑問が生じた場合は、Ultralytics GitHubリポジトリまたはUltralytics Discordサーバーでコミュニティに質問してください。
FAQ#
前処理によって、データがクリーンで一貫性があり、トレーニングに最適化された形式になります。生データのノイズ、不整合、クラス不均衡に対処することで、リサイズ、正規化、オーグメンテーション、データセット分割などの手順が計算負荷を軽減し、モデルの性能を向上させます。より広範なワークフローにおける位置付けについては、コンピュータービジョンプロジェクトの手順を参照してください。
データセットYAMLではなく、トレーニング引数でオーグメンテーションを設定します。
fliplr、mosaic、hsv_h、degreesなどの引数をmodel.train()(または同等のCLIフラグ)に渡して、各変換の確率と強度を設定します。これらはオーグメンテーション設定で定義され、YOLOデータオーグメンテーションガイドで説明されています。例外はポーズデータセットです。ポーズデータセットのflip_idxキーポイントマッピングはデータセットYAMLに記述され、これがない場合は反転が無効になります。最も一般的な手法は、Min-Maxスケーリング(ピクセルを0から1の範囲に再スケーリング)とZスコア正規化(平均と標準偏差に基づいて再スケーリング)です。YOLO26はMin-Maxスケーリングを自動的に適用し、画像をRGBに変換してピクセル値を255で割るため、手動の正規化ステップは必要ありません。デフォルトではZスコア正規化を適用しません。
一般的には、トレーニング70%、検証20%、テスト10%に分割します。3つの分割すべてでクラス分布を維持し、分割後にオーグメンテーションをトレーニングセットにのみ適用して、データリーケージを回避してください。scikit-learnやTensorFlowなどのツールを使えば、分割を効率的に実行できます。上流のデータセット準備については、データ収集とアノテーションのガイドを参照してください。
はい。
imgsz引数によって、手動作業なしで目標入力サイズを制御できます。固定サイズの正方形パスでは、アスペクト比を維持しながら、指定された形状に向けて検証と推論の画像をレターボックス化します。大きな画像は収まるように縮小されますが、スケールアップが無効な場合、小さな画像は拡大されません。トレーニング中は、デフォルトのモザイクオーグメンテーションにより、4枚の画像をタイル配置してクロップすることで目標サイズに合わせます。矩形バッチ(rect=True)とmulti_scaleでは異なる入力形状が使用されます。詳細については、モデルのトレーニングドキュメントを参照してください。