深層学習のための Image Data Augmentation（1：基本的な手法）

## 0. 本記事の概要
Deep Convolutional Neural Networkは多くのComputer Visionのタスクにおいて非常に優れた性能を示しています。しかし時折、Over fitting（過学習）が問題として挙げられます。また、医療画像をはじめとする特定の分野においては、大量の学習データを集めることができない現状が散見されます。新型コロナウイルスへの感染を肺のX線画像からAIの力で診断しようという取り組みは世界で行わておりますが、日本においては特に、学習データとなる画像不足が問題点として挙げられています。


そのように、学習データが不足している（または多様でない）場合に、「**Data Augmentation**」を行い、その問題の解決を目指します。「Augmentation」 とは「増加・増強」という意味になりますが、その意味通り、「**Data Augmentation**」とは、データのサイズや品質を向上させ、それらを用いてより優れたDeep Learningモデルを学習できるようにする一連の技術のことを指します。


そんな「**Data Augmentation**」の体系についてまとめた論文が2019年に発表されております。

|       　|   　    |    
|:-----------------|------------------:|
|題名|A survey on Image Data Augmentation for Deep Learning|
|著者|Connor Shorten and Taghi M. Khoshgoftaar|
|出版|Journal of Big Data| 
|発行日|2019.06.06|
|URL|[Springer](https://link.springer.com/article/10.1186/s40537-019-0197-0)|

私自身も「**Data Augmentation**」をデータに適用する必要があり、この論文をもとに調査を行ない、私が感じたことを含めて、備忘録としてまとめたいと思います。これから本記事で説明する内容は、こちらの論文に従い、図表なども引用させていただきます。とてもボリューミーな論文ですので、以下の3回に分けてまとめていきたいと思っています．

- 深層学習のための Image Data Augmentation（1：基本的な手法）**←本記事**
- [深層学習のための Image Data Augmentation（2：深層学習を用いた手法）](https://qiita.com/syezo/items/b5ccb95c99d9663a496e)
- 深層学習のための Image Data Augmentation（3：メタ学習を用いた手法）**（準備中...）**

本記事は、**深層学習のための Image Data Augmentation（1：基本的な手法）**となります。

## 1. 導入
近年、Convolutinoal Neural Network（CNN）を用いたDeep Learningの発展が著しくあります。CNNを用いて得られる特徴は、ハンドクラフトな特徴と比べて高次元で表現能力の高い特徴であることが知られています。このCNN特徴を用いてDeep Larningを行うことで、画像分類や物体検出の精度が著しく向上しており、Compute Visionの発展に欠かせない技術となっています。一般的に、Deep Learningを行う上で、より大きなデータセットはより優れたモデルを学習可能であることが知られています[[23](https://ieeexplore.ieee.org/abstract/document/4804817), [24](http://openaccess.thecvf.com/content_iccv_2017/html/Sun_Revisiting_Unreasonable_Effectiveness_ICCV_2017_paper.html)]。


上でも述べた様に、医療画像をはじめとする特定の分野においては、大量の学習データを集めることができない現状が散見されます。これらの問題の解決のために、「**Data Augmentation**」という技術が種々提案されています。


また、本論文では、過学習の問題にも言及がなされています。過学習は、学習モデルの汎化能力の不足を意味し、言い換えれば学習データとテストデータに大きな差があるとき生じる問題の1つです。
<img width="548" alt="コメント 2020-06-17 154301.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/642312/ce1f2c47-d1b0-d2ce-719c-538708d6e288.png">
過学習を発見する1つの方法は、学習中の各エポックでの学習精度と検証精度をプロットすることです。上のグラフは、これらの精度を学習エポックで可視化したときの過学習の様子を示しています。左側のプロットは、学習エポックが増加するにつれてテストデータの誤差が増加し始める変曲点を示しています。対照的に、右のプロットは、学習データとテストデータの誤差が望ましい関係を保ったままモデルの学習が進んでいます。


この差を埋めるために、学習データを増強する「**Data Augmentation**」は有効な手段であると考えられます。過学習を抑制するための「**Data Augmentation**」以外の基本的な手法がいくつか紹介されています。


|       |       |    
|:-----------------|------------------:|
|Dropout [[7](https://dl.acm.org/doi/abs/10.5555/2627435.2670313)]|学習中にニューロンの活性化をランダムで0にする|
|Batch Normalication [[9](https://arxiv.org/abs/1502.03167)]|各活性化からバッチ平均を減算し、バッチ標準偏差で除算する|
|Transfer Learning [[10](https://ieeexplore.ieee.org/abstract/document/5288526/), [11](https://ieeexplore.ieee.org/abstract/document/6847217/)]|他のデータセットで学習して得られた重みの1部を新しい分類タスクの初期重みとして用いる| 
|Pretraining [[15](http://www.jmlr.org/papers/v11/erhan10a.html)]|ネットワークを最初に定義し、他のデータセットで学習を行う|
|Zero/One Shot Learning [[16](http://papers.nips.cc/paper/3650-zero-shot-learning-with-semantic-output-codes), [17](https://ieeexplore.ieee.org/abstract/document/8413121/)]|学習データに含まれないクラスに対しても分類を可能にする|

以上のような手法とは対照的に、「**Data Augmentation**」は学習データ自体にメスを入れ、良いモデルを学習させようという考え方です。


「**Data Augmentation**」の手法は様々存在しますが、大きく2つに分けられます。
**1. Data Warping Augmentation : データのラベルを保持しつつ加工を行うことで増強**
**2. Oversampling Augmentation : データから新しいデータを生成することで増強**

「**加工**」するか「**生成**」するかで分けられています。それぞれの例をいくつか例を紹介します。

|   Data Warping Augmentation    |   Oversampling Augmentation    |    
|:-----------------|:------------------|
|Geometric Transformations|Mixing Images|
|Color Space Transformations|Feature Space Augmentations|
|Kernel Filters|Generative Adversarial Networks (GANs)| 
|Random Erasing|-|
|Adversarial Training|-|
|Neural Style Transfer|-|

さらに、**Data Augmentation**を適用する最適な手法を学習する**meta-learning**というものもいくつかあり、そちらは以下のようになっています。

|   Meta-learning Method    |
|:-----------------|
|Neural Augmentation|
|AutoAugment|
|Smart Augmentation|

これらのmeta-learning methodは、Neural Architecture Search [[33](https://arxiv.org/abs/1611.01578)]の概念を取り入れたものです。

本論文では、これらをまとめて「**Data Augmentation**」の体系を表す図が示されています。

<img width="550" alt="コメント 2020-06-17 170929.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/642312/eb1e9cae-ef30-aa9c-43ff-6ef9544d5522.png">

今回は、上の図のBasic Image Manipulationsの手法をピックアップして、説明をしていきます。

|   Data Warping Augmentation    |   Oversampling Augmentation    |    
|:-----------------|:------------------|
|<font color="HotPink">**Geometric Transformations**</font>|<font color="HotPink">**Mixing Images**</font>|
|<font color="HotPink">**Color Space Transformations**</font>|Feature Space Augmentations|
|<font color="HotPink">**Kernel Filters**</font>|Generative Adversarial Networks (GANs)| 
|<font color="HotPink">**Random Erasing**</font>|-|
|Adversarial Training|-|
|Neural Style Transfer|-|

今回Basic Image Manipulationsとして扱う手法は、「**加工**」からは<font color="HotPink">**Geometric Transformations**</font>、<font color="HotPink">**Color Space Transformations**</font>、<font color="HotPink">**Kernel Filters**</font>、<font color="HotPink">**Random Erasing**</font>、「**生成**」からは<font color="HotPink">**Mixing Images**</font>となります。



## 2. Data Augmentation 手法
ここからは様々な**Data Augmentation**手法について説明をしていきます。
自分でも簡単にできそうな**Data Augmentation**は友人A君の画像を用いて行ってみています。
### 2.1 Geometric Tranformations
Geometric Transformationsすなわち幾何学的な変換についていくつかの例を紹介します。

|   Data Warping Augmentation    |   Oversampling Augmentation    |    
|:-----------------|:------------------|
|<font color="HotPink">**Geometric Transformations**</font>|Mixing Images|
|Color Space Transformations|Feature Space Augmentations|
|Kernel Filters|Generative Adversarial Networks (GANs)| 
|Random Erasing|-|
|Adversarial Training|-|
|Neural Style Transfer|-|

#### 2.1.1 Flipping（反転）
横軸に対する反転（Horizontal axis flipping）の方が縦軸に対する反転（Vertical axis flipping）よりも一般的です。

|   Original    | Horizontal axis flipping | Vertical axis flipping |
|:-----------------:|:------------------:|:------------------:|
<img width="100" alt="コメント 2020-06-17 170929.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/642312/ada08945-8720-02bd-0451-1ce68f190e19.jpeg">|<img width="100" alt="コメント 2020-06-17 170929.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/642312/32141dd9-d39f-5d4f-76c0-3c8c20f810ba.jpeg">|<img width="100" alt="コメント 2020-06-17 170929.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/642312/cb29af4a-0436-e338-8f02-6148df7123d5.jpeg">|

ImageNetやCIFER-10での有効性が確認されています。ただし、MNISTやSVHNのデータに適用した場合、安全性が保証されない場合があります。例えば、MNISTにおいて6をVertical axis flippingすると9になります。

#### 2.1.2 Color Space（色空間）
カラーチャネル（RGB）の各要素の抽出、コントラスト調整、カラーヒストグラム調整など、色空間を操作することで**Data Augmentation**を行います。

|   Original    | R | G | B |
|:-----------------:|:------------------:|:------------------:|:------------------:|
<img width="100" alt="コメント 2020-06-17 170929.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/642312/ada08945-8720-02bd-0451-1ce68f190e19.jpeg">|<img width="100" alt="コメント 2020-06-17 170929.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/642312/9bb2e7fc-032d-5a09-8c49-4aff17c9aecc.jpeg">|<img width="100" alt="コメント 2020-06-17 170929.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/642312/76871486-57b9-f1fc-c87d-95657d3aae88.jpeg">|<img width="100" alt="コメント 2020-06-17 170929.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/642312/6bfcbca1-82ef-0b0b-93f8-b5211bc81d26.jpeg">|

#### 2.1.3 Cropping（くり抜き）
画像のClippingを行うことで**Data Augmentation**を行います。中央のClipping（Center）の場合は、様々なサイズの画像が含まれるデータセットに有効といえます。また、ランダムでClipping（random）を行う場合は、サイズによって、特に、小さすぎると安全性が保証されないことがあります。

|   Original    | center | random | 
|:-----------------:|:------------------:|:------------------:|
<img width="100" alt="コメント 2020-06-17 170929.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/642312/ada08945-8720-02bd-0451-1ce68f190e19.jpeg">|<img width="100" alt="コメント 2020-06-17 170929.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/642312/f8722f56-2a0b-8921-7eda-e95c0148cb48.jpeg">|<img width="108" alt="コメント 2020-06-17 170929.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/642312/31650993-b556-dac8-0375-869b84500058.jpeg">|

#### 2.1.4 Rotation（回転）
Rotationによる**Data Augmentation**の安全性はその回転角度によって変化します。例えば、上のFlippingでも述べたように、MNISTにおいて6をVertical axis flippingすると9になります。

|   Original    | 30° | 120° | 270° | 
|:-----------------:|:------------------:|:------------------:|:------------------:|
<img width="100" alt="コメント 2020-06-17 170929.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/642312/ada08945-8720-02bd-0451-1ce68f190e19.jpeg">|<img width="100" alt="コメント 2020-06-17 170929.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/642312/26c037ff-a070-178c-8fea-32dd817cff05.jpeg">|<img width="100" alt="コメント 2020-06-17 170929.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/642312/aa83a38d-aa45-1b58-2c8f-faec762deebe.jpeg">|<img width="100" alt="コメント 2020-06-17 170929.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/642312/31650993-b556-dac8-0375-869b84500058.jpeg">|

#### 2.1.5 Translation（平行移動）
Translationによる**Data Augmentation**は、データの位置的な偏りに対して効果を示します。例えば、顔画像のデータセットの画像は、一般的には中央に顔が配置されています。このままでは、テスト画像も中央である必要がある為、様々な位置の顔の検出・分類を行うためには、Translationによる**Data Augmentation**が効果的です。

|   Original    | Translation 1 | Translation 2 | Translation 3 | 
|:-----------------:|:------------------:|:------------------:|:------------------:|
<img width="100" alt="コメント 2020-06-17 170929.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/642312/ada08945-8720-02bd-0451-1ce68f190e19.jpeg">|<img width="100" alt="コメント 2020-06-17 170929.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/642312/a0187e82-0386-cc18-1b4e-dbb7601d9eb0.jpeg">|<img width="100" alt="コメント 2020-06-17 170929.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/642312/38e52735-0f1f-9e9c-f6bc-fa9c014ad57a.jpeg">|<img width="100" alt="コメント 2020-06-17 170929.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/642312/686f7a00-d061-313b-2a06-7e1bbe81916a.jpeg">|

実際、顔画像の**Data Augmentation**をしようとした時、Translation 3のように顔画像が切れるTranslationをしてしまうと、安全性は保証されないと思います。

#### 2.1.6 Noise Injection（ノイズ注入）
Noise Injectionによる**Data Augmentaion**では、通常はガウス分布により生成されたランダムなノイズを画像に注入します。Noise Injectionでは、CNNがよりロバストな特徴を学習するのに役立つことが知られています。

|   Original    | Noise |
|:-----------------:|:------------------:|
<img width="100" alt="コメント 2020-06-17 170929.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/642312/ada08945-8720-02bd-0451-1ce68f190e19.jpeg">|<img width="100" alt="コメント 2020-06-17 170929.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/642312/ad5dd867-ccd0-3c0a-eed4-2eeaaef09be8.jpeg">|

#### 2.1.7 Geometric Transformationsのまとめ
ここまでで、いくつかのGeometric Transformationsの例を紹介しました。Geometric Transformationsは、学習データの位置的な偏りに対して有効です。また、実装も簡単にできることも利点として挙げられます。しかし、RotationやTranslationによる**Data Augmentation**では対象物の場所を毎回確認する必要もあるため、労力を要することもあります。計算コストが高いこともあり、こちらも問題点です。

### 2.2 Color Space Transformationsの概要
#### 2.2.1 Color Space Transformations
Color Space Transformations（Photometric Tranformations）について説明します。

|   Data Warping Augmentation    |   Oversampling Augmentation    |    
|:-----------------|:------------------|
|Geometric Transformations|Mixing Images|
|<font color="HotPink">**Color Space Transformations**</font>|Feature Space Augmentations|
|Kernel Filters|Generative Adversarial Networks (GANs)| 
|Random Erasing|-|
|Adversarial Training|-|
|Neural Style Transfer|-|

Geometric Transformationsで説明したColor Spaceとの大きな違いは分かりませんが、論文中では分けて説明がされていました。Color Space Transformationsでは、RGBや明るさ（コントラスト）を調整することにより**Data Augmentation**を行います。画像の色分布を変更することは、画像編集アプリケーションでも簡単に行うことができます。

<img width="469" alt="コメント 2020-06-18 121927.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/642312/5df79d8b-724d-90b5-37a3-0d8baca1ccd9.png">

上の図では、悪性黒色腫（melanoma）のColor Space Transformationsのコントラスト調整、ヒストグラム調整などを行い、それらの分類精度の向上を目指しています。

<img width="457" alt="コメント 2020-06-18 121947.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/642312/1389b208-f1bf-659c-4989-c428b9153abd.png">

また、こちらの図では、各RGB要素の強調やVignette（画像の中心よりも周囲のほうが暗くなること）による**Data Augmentation**を行っています。その他にも、Gray Scaleを用いたり、RGB空間をYUV空間、CMY空間、HSV空間に変換する**Data Augmentation**もよく行われる手法です。

#### 2.2.2 Color Space Transformationsのまとめ
Color Space Transformationsでは、色の変換により**Data Augmentation**を行いました。Color Space Transformationsは実装が簡単ですが、学習コストが大きいことが問題点として挙げられています。また、特定の色の操作を行うことで、物体が消えてしまったりすることもあり、必ずしも安全性が保証される**Data Augmentation**ではありません。

#### 2.3 Geometric Transformations と Color Space Transformations の比較
文献 [[63](https://arxiv.org/abs/1708.06020)]では、Geometric TransformationsとColor Space Transformationsの比較を行っています。

<img width="550" alt="コメント 2020-06-18 140632.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/642312/793e99ba-ce9b-9bf9-f657-12e16994ebd2.png">

Caltech101データセットを用いて、各Augmentation手法が精度にどの程度寄与しているかを示した表です。一番上がBaselineで、Augmentationをしていないときの結果です。2番目から4番目（Flipping、Rotation（-30°、30°）、Cropping）がGeometric Transformationsの手法です。5番目から7番目（Color Jittering、Edge Enhancement、Fancy PCA）がColor Space Transformationsの手法です。この表からは、Croppingが他の手法と比較して群を抜いて精度が良いことがわかります。

### 2.4 Kernel Filters
Kernel Filtersによる**Data Augmentation**について説明します。


|   Data Warping Augmentation    |   Oversampling Augmentation    |    
|:-----------------|:------------------|
|Geometric Transformations|Mixing Images|
|Color Space Transformations|Feature Space Augmentations|
|<font color="HotPink">**Kernel Filters**</font>|Generative Adversarial Networks (GANs)| 
|Random Erasing|-|
|Adversarial Training|-|
|Neural Style Transfer|-|

ここでは、Kernel Filtersとして、Gaussian Blur Filter、Edge Filter、PatchShuffle Regularization [[64](https://arxiv.org/abs/1707.07103)]について説明をします。

#### 2.4.1 Gaussian Blur Filter
Gaussian Blur Filiterでは、ガウス分布を利用して「注目画素からの距離に応じて近傍の画素値に重みをかける」という処理を行い、自然な平滑化を実現します。
つまり、Blur（ぼかし）を与えるような処理になります。

|   Original    | Gaussian Blur Filter |
|:-----------------:|:------------------:|
<img width="100" alt="コメント 2020-06-17 170929.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/642312/ada08945-8720-02bd-0451-1ce68f190e19.jpeg">|<img width="100" alt="コメント 2020-06-17 170929.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/642312/045ed7e4-02a4-a73c-e270-79d9281db68e.jpeg">|

このようなBlur（ぼかし）を与えることで、モーションブラー（手振れ）などにロバストな**Data Augmentation**が実現します。

#### 2.4.2 Edge Filter

Edge Filiterでは、隣り合う画素値の変化を微分により検知し、その変化が大きい部分をEdgeとして強調する処理を行います。

|   Original    | Edge Filter | Sobel Filter | Laplacian Filter | 
|:-----------------:|:------------------:|:------------------:|:------------------:|
<img width="100" alt="コメント 2020-06-17 170929.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/642312/ada08945-8720-02bd-0451-1ce68f190e19.jpeg">|<img width="100" alt="コメント 2020-06-17 170929.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/642312/7b24b9b1-5629-3bd2-6155-a51df0a6fa8a.jpeg">| <img width="100" alt="コメント 2020-06-17 170929.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/642312/0dbc1534-3917-aa3b-1779-a549b83d1827.jpeg">| <img width="100" alt="コメント 2020-06-17 170929.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/642312/a1732e69-f6dc-5b49-812f-b5b489e18130.jpeg">|

若干ですが、Edge Filterによってくっきりしていることが分かります。輪郭抽出の手法として、Sobel FilterとLaplacian Filterを適用してみましたが、こちらは多くの情報が失われる可能性が高く、このような自然画像に対しての適用は不向きのように感じます。Edge Filterによって対象の物体をよりカプセル化（際立たせること）できるような**Data Augmentation**が実現します。

#### 2.4.3 PatchShuffle Regularization [[64](https://arxiv.org/abs/1707.07103)]
[[64](https://arxiv.org/abs/1707.07103)] では、下の図のようにn×nのスライドウィンドウ内の画素値をランダムに入れ替えるカーネルフィルタを用いて実験を行っています。

<img width="600" alt="コメント 2020-06-18 144301.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/642312/652e6098-ed22-9c89-1437-614786aad620.png">

CIFAR-10データセットを用いて、nを2、4、6、8と変化させたときの結果が示されています。実験よりerror rateが6.33%から5.66%に低下したことが報告されています。

#### 2.4.4 Kernel Filtersのまとめ
Kernel Filtersの研究は未開拓な分野のようです。
なぜかというと、CNNがその代わりやそれ以上の性能を持っているからです。
CNNは、Kernel Filterを学習データに合わせて最適化する仕組みです。
そのため、上記で紹介したような固定のKernel Filterを適用するまでもないことが多いということです。

### 2.5 Mixing Images

Mixing Imagesでは、複数の画像を混ぜ合わせることで**Data Augmentation**を行います。

|   Data Warping Augmentation    |   Oversampling Augmentation    |    
|:-----------------|:------------------|
|Geometric Transformations|<font color="HotPink">**Mixing Images**</font>|
|Color Space Transformations|Feature Space Augmentations|
|Kernel Filters|Generative Adversarial Networks (GANs)| 
|Random Erasing|-|
|Adversarial Training|-|
|Neural Style Transfer|-|

本論文では、SamplePairing、Non-linear Methods、Random Image Cropping and Patching (RICAP)が取り上げられていました。
これらの手法について説明をしていきます。

#### 2.5.1 SamplePairing [[65](https://arxiv.org/abs/1801.02929)]
SamplePairning [[65](https://arxiv.org/abs/1801.02929)] では、対象とするデータセットの中からランダムで抽出した二枚の画像の平均画像を生成することで**Data Augmentation**を行います。生成された画像に付与するラベルは、片方に揃えます。ランダムに抽出しているので、どっちのラベルにするべきか考えなくてよいということだと思います。

|   Image 1    | Image 2 | Mixing Images | 
|:-----------------:|:------------------:|:------------------:|
<img width="100" alt="コメント 2020-06-17 170929.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/642312/ada08945-8720-02bd-0451-1ce68f190e19.jpeg">|<img width="100" alt="コメント 2020-06-17 170929.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/642312/f65a7fac-10db-e567-df44-3d021a60cdde.jpeg">|<img width="100" alt="コメント 2020-06-17 170929.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/642312/671644a7-9a04-01b2-2b7e-21f8cfde59fe.jpeg">|

下の図はSamplePairning [[65](https://arxiv.org/abs/1801.02929)]の概要ですが、Croppingを挟んでから平均画像の生成を行っています。

<img width="460" alt="コメント 2020-06-18 172404.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/642312/51731303-32f5-040e-b0cc-265f38e5d558.png">

CIFAR-10データセットを用いた実験では、この**Data Augmentation**によってerror rateが8.22%から6.93%へ減少したことが報告されています。また、CIFAR-10において各クラスの画像総数を100枚に減らしたところ、error rateは43.1%から31.0%に減少したことが報告されています。

さらに、下の図では、2枚の画像の選び方によるerror rateのぶれを示しています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/642312/c62e978b-9a0e-f61f-94d8-7362ab0728d8.png)

全てのクラスから抽出する場合がクラスを絞って抽出するよりも結果が良いことが分かります。SamplePairingは、他の**Data Augmentation**手法とも組み合わせて使うことができることも良い点であると述べられています。

#### 2.5.2 Non-linear Methods [[66](https://ieeexplore.ieee.org/abstract/document/8659168/)]
SamplePairingでは線形的な合成を行いましたが、Non-linear method [[66](https://ieeexplore.ieee.org/abstract/document/8659168/)]のように非線形的な合成を行う**Data Augmentation**手法も存在します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/642312/e666c4a2-37bc-c5cd-42f8-24a5821ad101.png)

#### 2.5.3 Random Image Cropping and Patching (RICAP) [[68](https://ieeexplore.ieee.org/abstract/document/8795523/)]

Random Image Cropping and Patching (RICAP) [[68](https://ieeexplore.ieee.org/abstract/document/8795523/)]では、まず、データセット内からランダムに4枚の画像を抽出します。次に、ランダムに領域をCroppingして、合成します。合成された画像が下の図の真ん中の画像です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/642312/02cf775e-e5ba-4d29-4f44-545143377c0c.png)

ラベルは、元画像に基づいて各領域の面積に従って付与されます。この画像だと、[Airplane, Pengin, Flower, Ship]が[0.4, 0.25, 0.25, 0.25]くらいでラベル付けされていることになります。

#### 2.5.4 Mixing Imagesのまとめ
Mixing Imagesの欠点は、人間が合成された画像を見たときに、ほとんど意味が分からないことです。画像を合成することで得られる精度の向上は、理解や説明が非常に難しいものです。これは、データセットのサイズが大きくなったことで、線や辺などの低レベルの特徴をよりロバストに表現できるようになったことが1つの説明として考えられます。

その他にも、Mixing Imagesの手法として、[mixup](https://arxiv.org/pdf/1710.09412.pdf)などの有名な**Data Augmentation**手法が存在します。mixupに関しては、[こちら](https://qiita.com/syezo/items/c55106de37e53562386f)で解説をします。

### 2.6 Random Eracing [[70](https://www.aaai.org/Papers/AAAI/2020GB/AAAI-ZhongZ.1572.pdf)]

Random Eracing [[70](https://www.aaai.org/Papers/AAAI/2020GB/AAAI-ZhongZ.1572.pdf)]では、画像の一部分をランダムに消したり（輝度値を0もしくは255に変換する）、ごま塩ノイズに変更する**Data Augmentation**です。画像内で、オクルージョン（物体が重なり合っている時など）に有効とされています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/642312/47dfddbd-3743-4709-a781-0da50d94dc30.png)


上の図では、消す領域もランダムですが、Cutout [[71](https://arxiv.org/abs/1708.04552)]という手法では、その領域と比率を固定しており、精度向上が確認されています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/642312/099cc795-580e-d06a-75f8-0a40d44c7e50.png)

これらの手法で注意しなければいけない点としては、データセットによっては人手の処理が必要になるということです。たとえば、手書き数字のMNISTデータセットでは、6と8の一部分は同一であり、消す領域によっては違う数字であっても同じような画像を作ってしまいます。また、Stanford Carsデータセットでは、車のロゴマークなどを消してしまうと，直接的に精度低下を引き起こしてしまいます．

#### 2.6 Data Augmentationの組み合わせに関して
今までで紹介してきた**Data Augmentation**手法を組み合わせることで、データ量を飛躍的に増加させることが可能となる．しかし、組み合わせればよいというわけではなく、データをよく観察し、適切な**Data Augmentation**手法を選択していく必要は不可欠となります．

### 3 まとめ
本記事では、**深層学習のための Image Data Augmentation（1：基本的な手法）**と題して、[A survey on Image Data Augmentation for Deep Learning](https://link.springer.com/article/10.1186/s40537-019-0197-0)で紹介されている**基本的なData Augmentation手法**を中心に説明を行いました。**深層学習を用いたData Augmentation手法**、**メタ学習を用いたData Augmentation手法**は以下の続きの記事で紹介しています。気になる方は是非ご覧ください。

- 深層学習のための Image Data Augmentation（1：基本的な手法）**←本記事**
- [深層学習のための Image Data Augmentation（2：深層学習を用いた手法）](https://qiita.com/syezo/items/b5ccb95c99d9663a496e)
- 深層学習のための Image Data Augmentation（3：メタ学習を用いた手法）**（準備中...）**