3つの要点
その1 ランダムにData Augmentationの手法を選択するRandAugmentを提案
その2 従来のAutoAugmentと比べ探索空間をにも削減し計算量を激減させたことで実践で使えるようにしただけでなく、CIFAR-10/100やImageNet, COCOなどのデータセットにおいて有用性が確認できた
その3 ImageNetのSoTAであるNoisyStudentにも使われており、関数は2行で実装できるため読者の方も容易に使うことができる。
RandAugment: Practical automated data augmentation with a reduced search space
written by Ekin D. Cubuk, Barret Zoph, Jonathon Shlens, Quoc V. Le
(Submitted on 30 Sep 2019 (v1), last revised 14 Nov 2019 (this version, v2))
Subjects: Computer Vision and Pattern Recognition (cs.CV)
実装はこちら(非公式)にありました。本記事で使用している画像は本論文のものです。
導入
画像認識の分野では、画像データを少し回転させたり左右反転させたりなどの操作をすることで画像データ数を増やすData Augmentation(以下、DA)が広く使われています。ただ、どの操作を行うのかというのは試行錯誤で見つけるしかなく時間がかかります。そこで強化学習を使うことで自動的にDAを選択してくれるというAutoAugmentが提案されました。AutoAugmentは膨大な計算量から実際のタスクよりも小さいタスクに対して最適なDAを探し、その結果を実際のタスクにも使うという戦略を使っています。しかし、本論文では既存手法であるAutoAugmentに対して以下の2つの致命的な欠点があることが指摘されています。
- 強化学習を必要とするため計算量が膨大(探索空間)すぎて使いづらい
- 小さいタスクに対して最適だからといってそれが本来のタスクにおいても最適とは限らない
この膨大な探索空間を削減()することで計算量をはるかに抑え、上記2つの欠点を解決したものこそがRandAugmentです。下の表を見てもRandAugmentの探索空間の小ささと性能の高さがわかります(ここでBaselineとは”flip left-right”および”random translation”だけを適用して学習させたモデルです)。
本記事ではこのRandAugmentの仕組みおよび実験結果を解説していきます。
(AA: AutoAugment, PBA: Population Based Augmentation, RA: RandAugment,
WRN: Wide-ResNet, E. Net: EfficientNet(解説))
本記事の構成は以下になります。
- RandAugment解説
- RandAugment実験結果
- 結論
1. RandAugment
RandAugmentは名前からもわかるように、ランダムにN個のAugmentation手法(=transformation)を選ぶだけです。パラメータは2つだけです。その2つとは、
- N: 選択するtransformationの数
- M: Augmentationをどれだけ強くかけるか
最適なNとMはグリッドサーチで見つけてきます。RandAugmentにおいて大切なのはこの2つのパラメータなのでもう少しだけ詳しく説明します。
1.1 パラメータN
RandAugmentはN個のtransformationをランダムに選んでくることはすでに説明しました。具体的にどの選択肢からN個選ぶのかということですが、論文中では以下のtransformation(14個)からN個選んでいます。直感でわかりづらいtransformation(posterizeやsolarize)の例はこちらがわかりやすいです。
1.2 パラメータM
続いて、パラメータMですが、これはAugmentationをどれだけ強くかけるかということを表しています。具体的にShearXとAutoContrastの2つを用いて説明すると、以下の図のようになります。Mが大きくなるとAugmentationが強くかかり、逆に小さくなるとAugmentationがあまりかかっていないことがわかります。
各transformationが独自の強さの度合いの最小値と最大値(例えばShereXであれば最小値0, 最大値0.3)を持ち、その区間を10分割します。そのうち最小値がM=0で最大値がM=10に対応しています。つまり、Mは0から10のいずれかの整数を取り、実際の強さは処理によって異なるということです。またMはそれぞれのtransformationごとに決めるのではなく、全transformationに一貫して同じMを使うことで探索空間をさらに減らしています。
1.3 RandAugmentのソースコード
PythonコードでRandAugmentを表すと、以下のようになります。DAの選択肢を持つtransforms
リストをまず定義します。
関数はNとMを引数として、(transformation, M)
のペアを要素としてN個持つリストを返します。関数部分は2行だけです。
transforms = [’Identity’, ’AutoContrast’, ’Equalize’, ’Rotate’, ’Solarize’, ’Color’, ’Posterize’, ’Contrast’, ’Brightness’, ’Sharpness’, ’ShearX’, ’ShearY’, ’TranslateX’, ’TranslateY’] def randaugment (N, M): """ Generate a set of distortions. Args:N: Number of augmentation transformations to apply sequentially. M: Magnitude for all the transformations. """ sampled_ops = np.random.choice(transforms, N) return [(op, M) for op in sampled_ops]
探索空間を極端に減らしたおかげでNとMの値はグリッドサーチで十分探索可能です。これがRandAugmentのすごいところです。
2.実験
ここからはRandAugmentを用いた実験結果について説明していきます。実験は大きく4つあります。
- モデルサイズおよびデータサイズに対するDAの依存性
- 各データセットでの性能評価
- 各transformationの性能
- RandAugmentの発展形
2.1 モデルサイズおよびデータサイズに対するDAの依存性
ここでは導入でも紹介したAutoAugmentの2つ目の欠点である「小さいタスクで最適なDAは大きいタスクでも最適である、という前提が間違っている」ということを実験的に示しています。モデルサイズとデータサイズそれぞれに対するパラメータの依存性をCIFAR-10を使って実験を行なっています。
2.1.1 モデルサイズに対する依存性
横軸にWide-ResNet-28-nの異なるn(=Wide-ResNetのwideningパラメータ)、縦軸に最適なパラメータM(=DAのかかる強さ)をそれぞれプロットすると、以下の図になります。ここで点線はAutoAugmentにおける最適なMを表しています(=モデルサイズに限らず一定)。この図からモデルサイズによって最適なパラメータMは異なることがわかります。
2.1.2 データサイズに対する依存性
横軸にデータセットサイズ、縦軸に最適なパラメータMをそれぞれプロットすると、以下の図になります。ここで点線はAutoAugmentにおける最適なMを表しています(=データサイズに限らず一定)。この図からデータセットのサイズによっても最適なパラメータMが異なることがわかります。
これらの実験から、AutoAugmentの前提である「小さいタスクで最適なDAは大きいタスクでも最適である」は間違っているため、各タスクで最適なDAを見つけてくるRandAugmentの有意性が示されました。
2.2 各データセットでの性能評価
続いてCIFAR-10/100、SVHNデータセット、ImageNetそしてCOCO物体検出データセットに対して先行手法たちと比較が行われています。
2.1.1 CIFAR-10/100およびSVHNデータセットに対する性能評価
まずCIFAR-10/100およびSVHNデータセットに対する性能を見ます。下表のようにそれぞれのデータセットでRandAugmentが先行手法よりも良いまたは匹敵する精度を叩き出していることがわかります。
(PBA: Population Based Augmentation, AA: AutoAugment, RA: RandAugment)
2.1.2 ImageNetに対する性能評価
次にmageNetに対するTop-1/Top-5精度の比較です。RandAugmentがしっかりと先行手法を上回っていますね。
2.1.3 COCO物体検出データセットに対する性能評価
そして物体検出のCOCOに対する精度の比較です。Baselineを上回っていますが、AutoAugmentには一歩及ばずです。ただ、AutoAugmentと比べて探索空間が圧倒的に小さいことを加味するとRandAugmentは十分健闘できていると言えそうです。
2.3 各transformationの性能
ここでは各transformationについてもう少し掘り下げます。まず、各transformationそれぞれによる精度向上を調べると以下の表のようになります。左上から右下にかけてゲインの降順になっています。
これを見るとrotateによるゲインが一番大きく、posterizeに至っては逆に性能劣化を招いてしまっています。ここでtransformationに関して一気に4つほど実験します。モデルは全てWide-ResNet-28-2を使用しています。
- transformationの数に対する精度
- 実験aでrotateを必ず含める/含めない場合の精度
- 実験aでtranslate-xを必ず含める/含めない場合の精度
- 実験aでposterizeを必ず含める/含めない場合の精度
実験a-dまでの結果はそれぞれ以下です。
ダッシュ線はDAなしでの結果を表しています。この結果から以下のことが言えます。
- 個別では性能劣化させてしまうtransformationでも全部込みだと結果として精度が上がる。(実験a)
- rotateは精度向上だけでなく、精度の分散も抑えてくれる。(実験b)
2.4 RandAugmentの発展形
これまでRandAugmentでは各transformationを完全にランダムにピックアップしていました。つまり、各transformationはいずれも同じ確率(=)で選ばれます。各transformationごとに異なる最適な確率を学習させるようにした場合精度はどうなるのでしょうか。結果からいうと精度向上につながりました(下表の)。ただ、データサイズが大きくなると計算量が膨大になってしまうためこの計算量を解決するのがRandAugmentの発展形(Future Work)としています。
3. 結論
画像認識の分野では欠かせないData Augmentationですが、それを自動でかつ小さい計算量で選択してくれるRandAugmentは幅広いデータセットで既存のモデルの精度を上げてくれることがわかりました。コードもたったの2行で実現できるなど、少ない労力で精度が向上できそうです。こちらの実装(非公式)も使って試してみてはいかがでしょうか。