# Image Augmentation

画像拡張とは、データセット内で「Train」とマークされた既存の画像に拡張を適用するステップです。このプロセスは、モデルの汎化能力を高め、未知の画像に対してより効果的に動作するのに役立ちます。

{% hint style="success" %}
拡張なしでプロジェクトを開始することをおすすめします。これにより、元のデータセットの品質を評価できます。拡張を追加してデータセットの性能が期待ほど出ない場合、モデル性能と比較できるベースラインがなくなります。

拡張なしでモデルの性能が良くない場合は、クラスバランス、データの表現、データセットサイズを調査する必要があるかもしれません。拡張なしでモデルの学習に成功したデータセットがある場合は、拡張を追加してモデル性能のさらなる改善に役立てられます。
{% endhint %}

拡張は、いくつかの重要な理由から、学習時ではなくデータセットのバージョン（「offline augmentation」）を通じて適用されます:

1. **モデルの再現性が向上する**。Roboflowでは、各画像がどのように拡張されたかのコピーが保持されます。たとえば、暗い画像よりも明るい画像のほうがモデルの性能が良いことが分かる場合、低照度の学習データをより多く収集すべきです。
2. **学習時間が短縮される**。拡張はCPU制約のある処理です。GPUで学習しながらオンザフライで拡張を行うと、各epochでGPUがCPUから拡張済みデータが提供されるのを待つことがよくあります。それは積み重なります。
3. **学習コストが削減される**。拡張はCPU制約のある処理のため、高価なレンタルGPUが学習用の画像を受け取るのを待っていることがよくあります。

## 拡張の適用方法

拡張は常に学習画像に対して [前処理ステップの後に](https://docs.roboflow.com/roboflow/roboflow-jp/datasets/dataset-versions/image-preprocessing)適用されます。選択した拡張はまとめて適用され、拡張設定と各設定の値はランダム化され、各拡張画像に適用されます。この処理中に重複として現れた画像は、作成されたバージョンから除外されます。

たとえば、「左右反転」と「salt and pepper noise」を選択すると、ある画像はランダムに左右反転され、ランダムな salt and pepper noise が付与されます。

### 拡張の制限

拡張ありでデータセットバージョンを作成する際は、「Maximum Version Size」オプションで含める拡張画像の最大数を選択できます。

たとえば、3x を選択すると、最終的なデータセットバージョンには各学習元画像に [前処理ステップの後に](https://docs.roboflow.com/roboflow/roboflow-jp/datasets/dataset-versions/image-preprocessing) が適用され、さらに選択した設定に基づく各画像のランダムな拡張が2つ含まれます。

データセットに100枚の画像があり、train/valid/test の分割が70/20/10で、3xの拡張を選択した場合、最終的なデータセットはおおよそ210/20/10の分割になります。

<figure><img src="https://3740591140-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-M6S9nPJhEX9FYH6clfW%2Fuploads%2Fgit-blob-6e1eab9e86e8e1271b32261c1f214c503ed7afc7%2Fimage.png?alt=media" alt=""><figcaption></figcaption></figure>

{% hint style="info" %}
重複画像の除去や、一部のオプション（「Filter Null」など）により出力から画像が削除されるため、バージョン内の最終的な画像数はこの推定値より少なくなる場合があります。
{% endhint %}

## 拡張オプション

Roboflowの拡張は「Basic」または「Enhanced」のいずれかで、2つの異なるレベルで適用できます。

### 画像レベルの拡張

画像レベルの拡張は、個々のオブジェクトや領域ではなく画像全体に変換を適用することで、新しい学習データを作成します。画像全体を変更することで、開発者はより広い範囲の視覚条件をシミュレートでき、モデルが新しいデータにうまく汎化するのを助けます。

### バウンディングボックスレベルの拡張

バウンディングボックスレベルの拡張は、ソース画像のバウンディングボックスの内容だけを変更して、新しい学習データを作成します。これにより、開発者は問題の条件により適した学習データを、より細かく制御して作成できます。

A [2019年の論文](https://arxiv.org/pdf/1906.11172.pdf) Googleの研究者によるものでは、モデルに最適なデータを作成するためにバウンディングボックスのみの拡張を使うという考え方が紹介されています。この論文では、特に小規模データセットで学習されたモデルにおいて、バウンディングボックスのみの変更が体系的な改善を生むことが示されました。

{% hint style="info" %}
Enhanced Augmentations と Bounding Box Augmentations は **premium** 機能です。

プランとそれに関連する機能の最新情報については、 [料金ページ](https://roboflow.com/pricing).
{% endhint %}

<table><thead><tr><th></th><th data-type="checkbox">画像レベルの拡張</th><th data-type="checkbox">バウンディングボックス拡張</th><th>拡張タイプ<select><option value="Z8F06MhppTfn" label="Enhanced" color="blue"></option><option value="sdEDfdaf9Z03" label="Basic" color="blue"></option></select></th></tr></thead><tbody><tr><td><a href="image-augmentation/augmentation-types/flip-augmentation">Flip Augmentation</a></td><td>true</td><td>true</td><td><span data-option="sdEDfdaf9Z03">Basic</span></td></tr><tr><td><a href="image-augmentation/augmentation-types/90o-rotate-augmentation">90ª Rotate Augmentation</a></td><td>true</td><td>true</td><td><span data-option="sdEDfdaf9Z03">Basic</span></td></tr><tr><td><a href="image-augmentation/augmentation-types/crop-augmentation">Crop Augmentation</a></td><td>true</td><td>true</td><td><span data-option="sdEDfdaf9Z03">Basic</span></td></tr><tr><td><a href="image-augmentation/augmentation-types/rotation-augmentation">Rotation Augmentation</a></td><td>true</td><td>true</td><td><span data-option="sdEDfdaf9Z03">Basic</span></td></tr><tr><td><a href="image-augmentation/augmentation-types/shear-augmentation">Shear Augmentation</a></td><td>true</td><td>true</td><td><span data-option="sdEDfdaf9Z03">Basic</span></td></tr><tr><td><a href="image-augmentation/augmentation-types/grayscale-augmentation">Grayscale Augmentation</a></td><td>true</td><td>false</td><td><span data-option="sdEDfdaf9Z03">Basic</span></td></tr><tr><td><a href="image-augmentation/augmentation-types/hue-augmentation">Hue Augmentation</a></td><td>true</td><td>false</td><td><span data-option="sdEDfdaf9Z03">Basic</span></td></tr><tr><td><a href="image-augmentation/augmentation-types/saturation-augmentation">Saturation Augmentation</a></td><td>true</td><td>false</td><td><span data-option="sdEDfdaf9Z03">Basic</span></td></tr><tr><td><a href="image-augmentation/augmentation-types/brightness-augmentation">Brightness Augmentation</a></td><td>true</td><td>true</td><td><span data-option="sdEDfdaf9Z03">Basic</span></td></tr><tr><td><a href="image-augmentation/augmentation-types/exposure-augmentation">Exposure Augmentation</a></td><td>true</td><td>true</td><td><span data-option="sdEDfdaf9Z03">Basic</span></td></tr><tr><td><a href="image-augmentation/augmentation-types/blur-augmentation">Blur Augmentation</a></td><td>true</td><td>true</td><td><span data-option="sdEDfdaf9Z03">Basic</span></td></tr><tr><td><a href="image-augmentation/augmentation-types/noise-augmentation">Noise Augmentation</a></td><td>true</td><td>true</td><td><span data-option="sdEDfdaf9Z03">Basic</span></td></tr><tr><td><a href="image-augmentation/augmentation-types/camera-gain-augmentation">Camera Gain Augmentation</a></td><td>true</td><td>true</td><td><span data-option="sdEDfdaf9Z03">Basic</span></td></tr><tr><td><a href="image-augmentation/augmentation-types/motion-blur-augmentation">Motion Blur Augmentation</a></td><td>true</td><td>true</td><td><span data-option="sdEDfdaf9Z03">Basic</span></td></tr><tr><td><a href="image-augmentation/augmentation-types/cutout-augmentation">Cutout Augmentation</a></td><td>true</td><td>false</td><td><span data-option="Z8F06MhppTfn">Enhanced</span></td></tr><tr><td><a href="image-augmentation/augmentation-types/mosaic-augmentation">Mosaic Augmentation</a></td><td>true</td><td>false</td><td><span data-option="Z8F06MhppTfn">Enhanced</span></td></tr></tbody></table>

## 詳細を見る

* [データ拡張の究極ガイド](https://blog.roboflow.com/data-augmentation/)
* [物体検出用に画像を拡張する方法](https://blog.roboflow.com/object-detection-augmentation/)
