VISION / LESSON 13

画像を変形して学習例を増やす

画像を反転・回転するなど、正解が変わらない範囲で学習例を増やそう。

図から学ぶ
画像を変形して学習例を増やすを表すキャラクターと学習内容のイラスト
TODAY'S GOAL

この回でつかむこと

データ拡張の利点と、ラベルが変わる危険を説明できる。

ことばの窓
01 / SEE THE IDEA

画像を変形して学習例を増やすって何だろう?

Data Augmentation(データ拡張)は、学習画像の見え方を変えて例を増やす方法です。ただし、数字の6を180度回すなど、意味が変わる変形は使えません。

あおい

ROBORONが少し傾いたら、別のロボットだと思われちゃう?

AI先生

同じものなら、角度や明るさが少し違っても分かるように練習できるんだよ。

はる

ただし、変形で正解ラベルが変わる場合は避けます。

変形でラベルは変わる?。位置を変えても縦線。90度回すと横線。正解が保てる変形を選ぶ。
図13 変形でラベルは変わる?。位置を変えても縦線。90度回すと横線。正解が保てる変形を選ぶ。

あおい わっ、縦線を回したら横線! 正解の名前も変わるね。

図を読むと

変形しても正解が保たれるか、題材ごとに確認する。 Data Augmentation(データ拡張)は、学習画像の見え方を変えて例を増やす方法です。ただし、数字の6を180度回すなど、意味が変わる変形は使えません。

小さなコードで確かめるまず結果を予想しよう
import torch
image = torch.zeros(5,5)
image[:,1] = 1
print(image)
print(torch.flip(image,dims=[1]))
実行結果左寄りの線が右寄りへ反転

なぜそうなる? 横方向を反転させています。線の位置は変わりますが、線であることは同じです。

02 / GO ONE STEP FURTHER

学習側だけに適用する

評価用画像までランダムに変形すると、比較の条件が揺れます。まずは学習用のみに拡張を適用しましょう。

torch.manual_seed(2)
augmented = torch.flip(image,dims=[1]) if torch.rand(()) < 0.5 else image
print(augmented.shape)
実行結果torch.Size([5, 5])

ここに注目 形は同じでも位置が変わります。乱数のシードを固定すると再現しやすくなります。

03 / YOUR TURN

予想して、理由を話そう

答えを選んで、説明を確かめよう。外れても発見が一つ増えるよ。

数字6の画像を上下反転して学習する前に?

答えを選ぶと理由が表示されます。

04 / TRY ON COLAB

Colabで試してみよう

コードの実行はColaboratoryの実行環境で行います。まずノートブックを保存し、Colabで「ファイル → ノートブックをアップロード」から開いてください。上から順に実行し、最後に値を変えてみましょう。

保存ボタンを押しても画面は切り替わりません。通常はブラウザの「ダウンロード」フォルダに .ipynb が保存されます。見つからない場合はダウンロード履歴を確認してください。Colabの実習は小さな例から始められます。

COFFEE BREAK

身近な技術とつなげてみよう

AI先生

AI先生:自転車の写真を少し明るくしても自転車。でも左右反転が危険な標識もあるよ。

KEY TERMS

この回の重要な用語

本文で出会った言葉を、ここで意味と一緒に振り返ろう。上の「ことばの窓」からも説明を開けるよ。

データ拡張
学習データへ意味を保つ変形を加え、見え方を増やす方法です。
ラベル
学習例につけた正解の種類です。
シード
乱数の出方を再現するための初期値です。