コンテンツにスキップ

データ拡張

キーワード:画像のデータ拡張、ノイズ付与、Random Flip・Erase・Crop・Contrast・Brightness・Rotate、RandAugment、MixUp、自然言語のデータ拡張、EDA、音声のデータ拡張、ボリューム変更、ピッチシフト、SpecAugment、CutMix、Cutout

要点

  • 訓練データにラベルを保つ変換(反転・切り抜き・ノイズなど)を加えて、データを人工的に増やす。過学習を抑え、変換に対する頑健性を上げる、データ側の正則化。
  • どの変換が許されるかは、タスクの「不変性」で決まる(文字認識で上下反転は不可、など)。
  • 発展形が、2つのデータを混ぜる Mixup / CutMix(ラベルも混ぜる)と、一部を隠す Cutout / Random Erasing。
  • 自然言語(EDA・逆翻訳)、音声(ノイズ・ピッチ変更・SpecAugment)にも同じ考え方がある。

画像の基本的な変換

  • 変換の式は「出力の画素 \(I'(x,y)\) を、入力 \(I\) のどこから持ってくるか」で書く(変換後の座標から元の座標を引く)。\(W,H\):画像の幅と高さ、座標は \(0,\dots,W-1\) と \(0,\dots,H-1\)。
\[ \begin{aligned} &\text{水平反転} && I'(x,y)=I(W-1-x,\ y) \\[2mm] &\text{垂直反転} && I'(x,y)=I(x,\ H-1-y) \\[2mm] &\text{回転} && I'(\mathbf{p})=I\bigl(\mathbf{R}(\theta)^{-1}(\mathbf{p}-\mathbf{c})+\mathbf{c}\bigr),\quad \theta\in[-\theta_{\max},\theta_{\max}] \\[2mm] &\text{拡大・縮小} && I'(\mathbf{p})=I\bigl((\mathbf{p}-\mathbf{c})/s+\mathbf{c}\bigr),\quad s\in[s_{\min},s_{\max}] \\[2mm] &\text{平行移動} && I'(x,y)=I(x-\Delta x,\ y-\Delta y) \\[2mm] &\text{切り抜き(Crop)} && I'=I[y_1{:}y_2,\ x_1{:}x_2]\ \ (\text{のち元の大きさにリサイズ}) \\[2mm] &\text{明るさ・コントラスト} && I'=\alpha I+\beta\quad(\alpha:\text{コントラスト},\ \beta:\text{明るさ}) \\[2mm] &\text{ガウスノイズ} && I'=I+\boldsymbol{\varepsilon},\quad \boldsymbol{\varepsilon}\sim\mathcal{N}(\mathbf{0},\sigma^2\mathbf{I}) \end{aligned} \]
  • \(\mathbf{p}=(x,y)\):画素の座標、\(\mathbf{c}\):回転・拡大の中心(画像の中心)、\(\mathbf{R}(\theta)\):回転行列。\(\alpha I+\beta\) は 0〜255 などの範囲にクリップする。
  • 毎エポック、ランダムにパラメータ(角度・倍率・切り抜き位置など)を決めて適用する。各エポックで別の画像が見えるため、実質的にデータが増える。
  • テスト時には通常、拡張しない。例外が Test-Time Augmentation(TTA)で、変換した複数の入力の予測を平均して精度を上げる(アンサンブルの一種)。
  • ラベルを変える変換は避ける:数字の 6 と 9(180° 回転)、文字の左右反転、医用画像の左右(臓器の位置が意味を持つ)など。

隠す・混ぜる変換

Cutout と Random Erasing

\[ \tilde{\mathbf{x}}=\mathbf{M}\odot\mathbf{x}+(\mathbf{1}-\mathbf{M})\odot\mathbf{v} \]
  • \(\mathbf{M}\in\{0,1\}^{H\times W}\):隠す領域が 0 のマスク。\(\mathbf{v}\):埋める値。ラベルは変えない。
  • Cutout:固定の大きさの正方形を、ランダムな位置で定数(0、正規化後は平均)で埋める。Random Erasing:面積と縦横比をランダムにした長方形を、ランダムな値(ノイズや画素の平均)で埋める。
  • 一部が隠れても認識できるようにして、特定の局所特徴に頼り切るのを防ぐ。遮蔽(オクルージョン)への頑健性も上がる。

Mixup

\[ \tilde{\mathbf{x}}=\lambda\,\mathbf{x}_i+(1-\lambda)\,\mathbf{x}_j,\qquad \tilde{\mathbf{y}}=\lambda\,\mathbf{y}_i+(1-\lambda)\,\mathbf{y}_j,\qquad \lambda\sim\mathrm{Beta}(\alpha,\alpha) \]
  • 2 つのサンプルを画素ごとに線形補間し、ラベル(one-hot)も同じ比率で混ぜる。クラス間では出力も線形に変化する、という仮定を入れる効果があり、決定境界がなめらかになる。
  • \(\alpha=1\) なら \(\lambda\) は一様分布。\(\alpha<1\) では 0 か 1 に寄る(元のサンプルに近い)。\(\alpha\) が大きいと \(\lambda\approx0.5\) の強い混合が増える。
  • 交差エントロピーは \(\tilde{\mathbf{y}}\) について線形なので、損失は \(\lambda\,\mathrm{CE}(f(\tilde{\mathbf{x}}),\mathbf{y}_i)+(1-\lambda)\,\mathrm{CE}(f(\tilde{\mathbf{x}}),\mathbf{y}_j)\) と同じ。
  • 画像に限らず、音声や表形式、言語の埋め込み空間でも使える。

CutMix

\[ \tilde{\mathbf{x}}=\mathbf{M}\odot\mathbf{x}_i+(\mathbf{1}-\mathbf{M})\odot\mathbf{x}_j,\qquad \tilde{\mathbf{y}}=\lambda\,\mathbf{y}_i+(1-\lambda)\,\mathbf{y}_j,\qquad \lambda=1-\frac{\text{貼り付けた面積}}{WH} \]
  • 画像 \(j\) の長方形領域を切り取って画像 \(i\) に貼る。ラベルは面積の比で混ぜる。貼る長方形の幅と高さは \(W\sqrt{1-\lambda},\ H\sqrt{1-\lambda}\)(面積が \((1-\lambda)WH\))で、位置は一様乱数。画像からはみ出した分は切り落とし、\(\lambda\) は実際の面積から計算し直す。
  • Mixup と違って画素が不自然に重ならず、局所的な特徴が保たれる。Cutout と違って隠した部分に別の情報が入るので、学習に使える画素が減らない。
  • Mosaic:4 枚の画像を 1 枚に並べる(YOLOv4 など物体検出で使用)。

動かしてみる

  • Mixup で \(\lambda\) を動かすと、画像のバツ印と枠の濃さが逆向きに変わり、ラベルも同じ比率で混ざります。
  • CutMix では、貼る正方形の一辺が \(\lambda\) から決まり、ラベルの比は貼った面積に一致します(一辺 6 なら貼った面積は 36 で、\(\tilde\lambda=0.64\))。
  • Cutout は同じ形で隠すだけで、ラベルは \((1,0)\) のままです。

自動で選ぶ方法

  • AutoAugment:変換の組合せ(方策)を強化学習で探索。探索コストが大きい。
  • RandAugment:変換の候補からランダムに \(K\) 個選び、共通の強さで適用する。探索すべきパラメータは「個数」と「強さ」の 2 つだけで、探索コストが小さい。
  • 手作業で変換を決めずにすむ反面、データセットごとに強さの調整は必要。

自然言語のデータ拡張

  • EDA(Easy Data Augmentation):次の 4 操作を文にランダムに適用する。
    • 同義語置換(Synonym Replacement):語を同義語に置き換える。
    • ランダム挿入(Random Insertion):同義語を文中のどこかに挿入する。
    • ランダム入れ替え(Random Swap):2 語の位置を入れ替える。
    • ランダム削除(Random Deletion):語を確率的に削除する。
  • 逆翻訳(Back Translation):別の言語に翻訳してから元の言語に戻し、言い換え文を得る。自然な文になりやすいが、翻訳モデルを動かすので計算コストが高い。
  • Mixup:単語や文の埋め込みベクトルの段階で混ぜる(離散的な語そのものは混ぜられない)。
  • 文の意味が変わらないことが前提。語の削除や入れ替えをやりすぎると、ラベルが変わってしまう。

音声のデータ拡張

手法 操作 狙い
ノイズ付与 背景雑音やガウスノイズを加える 雑音環境への頑健性
ボリューム変更 振幅を定数倍する(ゲイン) 音量・マイク距離の差
時間シフト・ストレッチ 波形を前後にずらす・速度を変える 発話位置・話速の差
ピッチシフト 音の高さを変える(速さは保つ) 話者の声の高さの差
Mixup 2 つの音声(波形)を混ぜる 画像と同じく境界をなめらかに
SpecAugment スペクトログラム上で、時間方向・周波数方向の帯を隠す 音声認識の標準的な拡張
  • SpecAugment:対数メルスペクトログラム(周波数 × 時間)に対し、時間ワーピング(時間軸を局所的に歪める)、周波数マスク(連続する周波数チャネルを 0 にする)、時間マスク(連続する時間フレームを 0 にする)を行う。Cutout の音声版と見ればよい。波形でなくスペクトログラム上の操作なので軽い。→ 音声処理

手法の比較

手法 データ種類 計算コスト ラベルを変えるか 主な用途
幾何変換(反転・回転・Crop) 画像 低 しない 画像分類・物体検出
色の変換(明るさ・コントラスト) 画像 低 しない 画像分類
Cutout / Random Erasing 画像 低 しない 画像分類、人物再識別
Mixup 画像・音声・埋め込み 低 する(比率で混合) 分類全般
CutMix 画像 低 する(面積比で混合) 画像分類
AutoAugment 画像 高(探索時) しない 画像分類
RandAugment 画像 低 しない 画像分類
同義語置換・EDA テキスト 低 しない テキスト分類
逆翻訳 テキスト 高 しない 自然言語処理全般
SpecAugment 音声 低 しない 音声認識

試験の着眼点

  • データ拡張の目的は、データ量の水増し → 過学習の抑制・頑健性の向上。ラベルを保つ変換が基本で、保てない変換は使わない。
  • 学習時だけ適用し、推論時は適用しない(TTA は例外)。
  • Mixup は画素とラベルの両方を \(\lambda\) で線形補間(\(\lambda\sim\mathrm{Beta}(\alpha,\alpha)\))。CutMix は領域を貼り替え、ラベルは面積比。Cutout はラベルを変えず隠すだけ。
  • Cutout=定数で埋める、Random Erasing=ランダム値で埋める。
  • AutoAugment(強化学習で方策探索)と RandAugment(個数と強さの 2 パラメータ)の違い。
  • EDA の 4 操作(同義語置換・挿入・入れ替え・削除)。逆翻訳は計算コストが高い。
  • SpecAugment はスペクトログラムに対して時間・周波数のマスクと時間ワーピング。
  • 関連:正則化として働く(正則化)。ノイズ付与は入力に対する L2 正則化と似た効果を持つ。

参考