たった2行で画像認識モデルの精度向上!?新しいDataAugmentation自動最適化手法「RandAugment」解説!

3つの要点

✔️ その1  ランダムにData Augmentationの手法を選択するRandAugmentを提案

✔️ その2  従来のAutoAugmentと比べ探索空間を1030にも削減し計算量を激減させたことで実践で使えるようにしただけでなく、CIFAR-10/100やImageNet, COCOなどのデータセットにおいて有用性が確認できた

✔️ その3  ImageNetのSoTAであるNoisyStudentにも使われており、関数は2行で実装できるため読者の方も容易に使うことができる。

RandAugment: Practical automated data augmentation with a reduced search space
written by Ekin D. CubukBarret ZophJonathon ShlensQuoc 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つの致命的な欠点があることが指摘されています。

  1. 強化学習を必要とするため計算量が膨大(探索空間1032)すぎて使いづらい
  2. 小さいタスクに対して最適だからといってそれが本来のタスクにおいても最適とは限らない

この膨大な探索空間を削減(102)することで計算量をはるかに抑え、上記2つの欠点を解決したものこそがRandAugmentです。下の表を見てもRandAugment探索空間の小ささ性能の高さがわかります(ここでBaselineとは”flip left-right”および”random translation”だけを適用して学習させたモデルです)。

本記事ではこのRandAugmentの仕組みおよび実験結果を解説していきます。

RandAugment Result

(AA: AutoAugment, PBA: Population Based Augmentation, RA: RandAugment,
WRN: Wide-ResNet, E. Net: EfficientNet(解説))

本記事の構成は以下になります。

  1. RandAugment解説
  2. RandAugment実験結果
  3. 結論

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)の例はこちらがわかりやすいです。

Augmentation

1.2 パラメータM

続いて、パラメータMですが、これはAugmentationをどれだけ強くかけるかということを表しています。具体的にShearXとAutoContrastの2つを用いて説明すると、以下の図のようになります。Mが大きくなるとAugmentationが強くかかり、逆に小さくなるとAugmentationがあまりかかっていないことがわかります。

RandAugment Magnitude Example

各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つあります。

  1. モデルサイズおよびデータサイズに対するDAの依存性
  2. 各データセットでの性能評価
  3. 各transformationの性能
  4. 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は異なることがわかります。

RandAugment model size dependency

2.1.2 データサイズに対する依存性

横軸にデータセットサイズ、縦軸に最適なパラメータMをそれぞれプロットすると、以下の図になります。ここで点線はAutoAugmentにおける最適なMを表しています(=データサイズに限らず一定)。この図からデータセットのサイズによっても最適なパラメータMが異なることがわかります。

RandAugment data size dependency

 

これらの実験から、AutoAugmentの前提である「小さいタスクで最適なDAは大きいタスクでも最適である」は間違っているため、各タスクで最適なDAを見つけてくるRandAugmentの有意性が示されました。

2.2 各データセットでの性能評価

続いてCIFAR-10/100、SVHNデータセット、ImageNetそしてCOCO物体検出データセットに対して先行手法たちと比較が行われています。

2.1.1 CIFAR-10/100およびSVHNデータセットに対する性能評価

まずCIFAR-10/100およびSVHNデータセットに対する性能を見ます。下表のようにそれぞれのデータセットでRandAugmentが先行手法よりも良いまたは匹敵する精度を叩き出していることがわかります。

RandAugment for CIFAR and SVHN

(PBA: Population Based Augmentation, AA: AutoAugment, RA: RandAugment)

2.1.2 ImageNetに対する性能評価

次にmageNetに対するTop-1/Top-5精度の比較です。RandAugmentがしっかりと先行手法を上回っていますね。

RandAugment ImageNet comparison

2.1.3 COCO物体検出データセットに対する性能評価

そして物体検出のCOCOに対する精度の比較です。Baselineを上回っていますが、AutoAugmentには一歩及ばずです。ただ、AutoAugmentと比べて探索空間が圧倒的に小さいことを加味するとRandAugmentは十分健闘できていると言えそうです。

RandAugment COCO comparison

2.3 各transformationの性能

ここでは各transformationについてもう少し掘り下げます。まず、各transformationそれぞれによる精度向上を調べると以下の表のようになります。左上から右下にかけてゲインの降順になっています。

RandAugment each transformation performance

これを見るとrotateによるゲインが一番大きく、posterizeに至っては逆に性能劣化を招いてしまっています。ここでtransformationに関して一気に4つほど実験します。モデルは全てWide-ResNet-28-2を使用しています。

  1. transformationの数に対する精度
  2. 実験aでrotateを必ず含める/含めない場合の精度
  3. 実験aでtranslate-xを必ず含める/含めない場合の精度
  4. 実験aでposterizeを必ず含める/含めない場合の精度

実験a-dまでの結果はそれぞれ以下です。

RandAugment transformation ablation test

ダッシュ線はDAなしでの結果を表しています。この結果から以下のことが言えます。

  1. 個別では性能劣化させてしまうtransformationでも全部込みだと結果として精度が上がる。(実験a)
  2. rotateは精度向上だけでなく、精度の分散も抑えてくれる。(実験b)

2.4 RandAugmentの発展形

これまでRandAugmentでは各transformationを完全にランダムにピックアップしていました。つまり、各transformationはいずれも同じ確率(=114)で選ばれます。各transformationごとに異なる最適な確率を学習させるようにした場合精度はどうなるのでしょうか。結果からいうと精度向上につながりました(下表の+1st)。ただ、データサイズが大きくなると計算量が膨大になってしまうためこの計算量を解決するのがRandAugmentの発展形(Future Work)としています。

RandAugment performance for probability learning

 3. 結論

画像認識の分野では欠かせないData Augmentationですが、それを自動でかつ小さい計算量で選択してくれるRandAugmentは幅広いデータセットで既存のモデルの精度を上げてくれることがわかりました。コードもたったの2行で実現できるなど、少ない労力で精度が向上できそうです。こちらの実装(非公式)も使って試してみてはいかがでしょうか。

この記事をシェアする