前の章では、データ拡張を、同じものの、少し違う見え方を学ばせる工夫として見てきました。
ここでは、画像データでよく使われる代表的なデータ拡張手法を見ていきます。
どの方法もしていることは少しずつ違いますが、目指しているのは共通しています。
それは、モデルが「ちょっと条件が変わっても、同じものは同じとわかる」ようにすることです。
たとえば、りんごの絵を練習するときも、
・少し傾いたりんご
・少し暗い場所のりんご
・一部だけ見えているりんご
を見ておくと、本番で少し違う見え方をしていても対応しやすくなりますよね。
画像のデータ拡張も、まさにそれと同じです。
Crop
Cropは、画像の一部を切り取って使う方法です。
たとえば一枚の猫の写真があったとして、その全体を毎回そのまま見せるのではなく、
・少し左側を中心に切り取る
・少し上寄りに切り取る
・少し拡大したように切り取る
というふうに、見せ方を変えます。
これは、絵の練習帳で先生が「今日はこのあたりだけ見てごらん」と、一部を切り出して見せるようなものです。
Cropのよいところは、モデルが対象物が画像のど真ん中に、きれいに収まっていなくても大丈夫になりやすいことです。
現実の写真では、いつも対象が中央にあるとは限りません。
少し端に寄っていたり、一部が切れていたりもします。
Cropを使うと、そうした状況にも強くなりやすいのです。
Random Flip
Random Flipは、画像を左右反転、あるいは上下反転する方法です。
ただし実際には、画像では左右反転がよく使われます。
たとえば猫が右を向いている写真を、左右反転して左向きにしてみる。
人が絵を学ぶときも、同じポーズでも向きが逆になるだけで印象が変わることがありますよね。
でも本質的には、やはり同じ猫です。
Random Flipを使うと、モデルは、右向きでも左向きでも、本質は同じと学びやすくなります。
ただし、Random Flipはどんなデータにも使えるわけではありません。
たとえば文字認識では、左右反転すると意味が変わってしまうことがあります。
英字の b と d、p と q はその代表例で、左右を反転すると別の文字に見えてしまいます。
そのため、Random Flipは「向きが変わっても意味が変わらないデータ」に向いている手法です。
Rotate
Rotateは、画像を少し回転させる方法です。
たとえば、
・5度だけ傾ける
・少し右に回す
・少し左に回す
といった変化を加えます。
これは、机の上に置いた写真を、少し傾けて見てみる感じに近いです。
現実の世界では、対象物がいつもまっすぐ写るとは限りません。
少し斜めになっていたり、カメラの角度で傾いて見えたりします。
Rotateを使うと、モデルはそうした小さな傾きにも強くなりやすくなります。
ただし、Rotateもやりすぎには注意が必要です。
たとえば数字の 6 を大きく回転させると、9 に見えてしまうことがあります。
文字や数字の認識では、回転によって意味そのものが変わる場合があるため、「少し傾くくらいなら同じもの」と言える範囲で使うことが大切です。
Brightness
Brightnessは、画像の明るさを変える方法です。
たとえば同じ写真でも、
・少し明るくする
・少し暗くする
ことで、見え方が変わります。
これは、晴れた日の写真と、曇りの日の写真の違いに少し似ています。
同じ猫でも、明るい部屋で撮った写真、夕方の少し暗い部屋で撮った写真では印象が違いますよね。
でも私たちは、それでも同じ猫だとわかります。
Brightnessを使うと、モデルも明るさが違っても、本質は同じと学びやすくなります。
つまりBrightnessは、光の条件の違いに強くするための拡張だと言えます。
Contrast
Contrastは、画像の明るい部分と暗い部分の差、つまり濃淡のはっきり具合を変える方法です。
コントラストが高い画像は、輪郭や明暗の差がくっきり見えます。
逆にコントラストが低い画像は、全体が少しぼんやりした印象になります。
たとえば、同じ景色でも、日差しが強くてくっきり見える日、霧がかかって少しやわらかく見える日では、印象が違いますよね。
Contrastを変えるデータ拡張は、そうした見え方の違いを練習させるものです。
これによってモデルは、輪郭がはっきりしている画像にも、少しぼやけた画像にも対応しやすくなります。
Brightnessが「明るさそのもの」を変えるのに対して、
Contrastは明るい部分と暗い部分の差の強さを変えるところが違います。
noising
noisingは、画像にノイズを加える方法です。
ノイズとは、ざらつきや細かな乱れのようなものです。
たとえば、
・カメラのざらつき
・通信の乱れ
・画像の細かな汚れ
のようなものを少し足してみる。
これは、絵の練習帳に、少しだけ紙のしわやインクのにじみがある状態で見本を見るようなものです。
現実のデータは、いつも完璧にきれいとは限りません。
少しぼやけていたり、ざらついていたり、雑音が混じっていたりします。
noisingを使うと、モデルは、少し汚れや乱れがあっても、対象を見失わないように学びやすくなります。
つまりnoisingは、現実の「きれいすぎないデータ」に強くするための拡張です。
まとめ
Crop
→ 一部を切り取って見せる
→ 対象の位置のずれに強くなる
Random Flip
→ 左右反転して見せる
→ 向きが変わっても対応しやすくなる
Rotate
→ 少し回転させて見せる
→ 傾きに強くなる
Brightness
→ 明るさを変える
→ 光の条件の違いに強くなる
Contrast
→ 濃淡の差を変える
→ はっきりした画像にも、やわらかい画像にも対応しやすくなる
noising
→ ノイズを加える
→ 少し乱れた画像にも強くなる
こうして見てみると、データ拡張の基本的な手法は、どれも現実の世界で起こりそうな変化を、少し先回りして練習させていることがわかります。
・位置がずれる
・向きが変わる
・傾く
・明るさが変わる
・見え方がぼやける
・ノイズが混じる
現実のデータは、いつもきれいで整った形では現れません。
だから学習の中でも、その揺れを経験しておいたほうが、モデルは本番でしなやかに対応しやすくなるのです。
next ▶ 発展的なデータ拡張手法