kentaPtの日記

主に画像解析のことなどの勉強記録として投稿します。もし何かございましたら、github (https://github.com/KentaItakura)などからご連絡いただけると幸いです。

CNNのためのデータ拡張法を勉強&簡単に実装してみた (RandomErasing, CutOut, MixUp, Sample Pairing)

qiita.com

この記事はMATLAB/Simulink Advent Calendar 2021の9日目の記事として書かれています。

また、過去の記事はこちらのブログトップからアクセスいただけると幸いです。

kentapt.hatenablog.com

はじめに

本記事では、畳み込み込みニューラルネットワーク(CNN)に役立つ、データ拡張の手法を勉強したので、簡単にまとめ、実装の例を示したいと思います。間違いなどがあれば教えていただけますと幸いです。

データ拡張では、分類や物体検出をする際に、回転や、反転、移動、せん断、色味の変更などを加えることで、訓練データのバリエーションを高め、認識精度を高めるために行います。

以下のページでは、その例が画像と共に紹介されているのでイメージがつきやすいです。

jp.mathworks.com

また、上のような多種多様なデータ拡張も、そのオプションを1行書き加えるだけで実行可能な場合が多く(以下の記事はMATLABの例)、非常に簡単にデータ拡張も試せるようになっています。

jp.mathworks.com

それ以外のデータ拡張の手法の例

上で述べたシンプルな方法に加えて、その他にも有効なデータ拡張の手法が知られています。ここでは、

1) random erasing や CutOut 2) Mix-upやSamplePairing の2つを紹介したいと思います。

Random Erasing について

ここで紹介する私の実装のコードについては、以下のページからダウンロードできます。

github.com

MATLABで行う場合、公式からも関数が提供されています。 jp.mathworks.com

Random Erasingの論文は以下のとおりです。

Zhong, Z., L. Zheng, G. Kang, S. Li, and Y. Yang. "Random erasing data augmentation. arXiv 2017." arXiv preprint arXiv:1708.04896.

cutoutの論文は以下の通りです。

DeVries, Terrance, and Graham W. Taylor. "Improved regularization of convolutional neural networks with cutout." arXiv preprint arXiv:1708.04552 (2017).

Random Erasingのイメージは、以下の論文の図がわかりやすいです。画像にグレーのマスクや、ランダムな色のマスクがかかっていますね。

rectangle region in the image and erase its pixels with random values or the ImageNet mean pixel value

ランダムな値や、ImageNet内の画像のピクセル値の平均値(おそらくグレーにちかい)でマスクをすると論文中にも書いています。 f:id:kentaPt:20211228213722p:plain

図出展:Zhongら (2017) [1] より

また、動画にすると以下のようなイメージです。

f:id:kentaPt:20211228215959g:plain

また、cutoutについても同様で、以下の図が論文中にあります。ひとまずこの記事では、特にrandom erasingとcutoutの区別はせず、訓練画像にマスクをかけてデータ拡張を行う方法を試します。

f:id:kentaPt:20211228213808p:plain

ここでのパラメータとしては、マスクをかけるときのマスクの大きさや縦横比の範囲、マスクの色(例:ランダムか、白か、グレーか黒か)、マスクの数(もしそのようなカスタマイズをしたい場合は)などが考えられます。論文中でも、そのような条件を変えて実験をしているので、詳しいパラメータと精度やデータセットの関係はもとの論文を参照いただけますと幸いです。

 以下に、私の方で実装したコードで、CIFAR-10を用いて比較したときの結果です。左がRandom Erasingを行った場合、右がそうでない場合です。左のRandom Erasingがある場合は、テストデータによる分類精度は77.6%で、ない場合は73.1%と、確かに精度が高まりました。今回は非常にシンプルなネットワークで行っているということもあり、論文よりはずいぶんと精度が低いです。

f:id:kentaPt:20211228213827p:plain

random erasing/cutoutの効果について

 論文中にもあるとおり、確かにこれらの方法を用いることで精度の向上を確認することができました。例えばcutoutの論文には、

cutoutの主なモチベーションは、物体が隠れてしまう(オクルージョン)問題への対処です。オクルージョンは物体認識、物体追跡、姿勢推定など、多くのコンピュータビジョンのタスクにおいて発生する問題です。マスクをかけて新しい画像を生成することで(データ拡張をすることで)、より多くの画像の文脈(規則性や連続性など)を考慮するよう学習させることができます。

とあります。

 また、random erasingの論文でも、オクルージョンのあるテストデータには、CNNがうまく機能しないことが考えられ、オクルージョンは非常に悩ましいことである、との記述があります。実際に本文中で、テストデータにもマスクをかけて(オクルージョンを作って)分類精度を確認したところ、random erasingを用いて学習したモデルがうまく機能すると確認されています。

 実際にオクルージョンがある画像セットを用意して、random erasing/cutoutの有無でどのようなテスト結果になるかを比べるとオクルージョン対策が成功し、分類精度が向上したのかどうかの確認につながりそうな気がしました。

f:id:kentaPt:20211228213848p:plain

Mix-up / SamplePairingについて

次に、Mix-up や SamplePairingについて紹介します。

もととなる論文は以下のとおりです。

Zhang, Hongyi, Moustapha Cisse, Yann N. Dauphin, and David Lopez-Paz. "mixup: Beyond empirical risk minimization." arXiv preprint arXiv:1710.09412 (2017).

Inoue, Hiroshi. "Data augmentation by pairing samples for images classification." arXiv preprint arXiv:1801.02929 (2018).

私のほうで簡単に実装したコードはこちらになります。混ぜる比率を単純に一様分布からランダムに決めています。

github.com

これらの方法では、マスクをして一部を隠すのではなく、以下のように、画像どうしをブレンドします。以下の例では、自動車と梨の画像がブレンドされていることがわかります。そして、例えば色味を1:1でブレンドした場合は、正解データを0.5ずつ分け与えます。例えば、その分類では、犬、猫、牛を扱っていて、犬と猫の画像をブレンドした場合、正解ラベルは [0.5, 0.5, 0] とします。ブレンドする比率を変えることも可能です。

I1=imread('car2.jpg');
I2=imread('pears.png');
Iblend=imfuse(I1,imresize(I2,[size(I1,1),size(I1,2)]),'blend');
figure;montage({I1,I2,Iblend});

f:id:kentaPt:20211228214211p:plain

また、Inoue (2018) [4] から以下の図を引用しています。SamplePairingがある場合とない場合では、ある場合のほうが誤差が低く、分類の問題に対して効果的であると示されています。また、SamplePairingにおける、設定を複数試していますが、どの場合もbaselineの方法よりも性能がいいことがわかります。

f:id:kentaPt:20211228214437p:plain

図出展:Inoue (2018) [4] より

以下の右側の図(mixup)にあるとおり、画像どうしを混ぜ合わせて、それに応じてラベルの値も0と1の間を取るので、クラスどうしの境界面にグラデーションができていることがわかります。これにより、正則化の効果がうまれ、認識精度が向上するようです。正則化に関しては、dropoutとの比較も本文中にありました。

f:id:kentaPt:20211228214454p:plain

出展:Zhang, Hongyi et al. (2017) [3] より.

mix-upに関する考察に関してはこちらの記事が参考になりました。 www.inference.vc

次に読みたい論文

このmix-upと関連する論文の中で、特に次に読みたい論文と参考になる記事を挙げます。

  • BC-learning: Mixupはただ2枚の異なる画像を混ぜるだけなのに対して、BC-Learningは異なるクラスの異なる2枚の画像を混ぜるのだそうです

Tokozume, Y., Ushiku, Y. and Harada, T., 2018. Between-class learning for image classification. In Proceedings of the IEEE Conference on Computer Vision and Pattern Recognition (pp. 5486-5494).

qiita.com

Berthelot, D., Carlini, N., Goodfellow, I., Papernot, N., Oliver, A. and Raffel, C., 2019. Mixmatch: A holistic approach to semi-supervised learning. arXiv preprint arXiv:1905.02249.

www.slideshare.net

  • Cutmix: cutoutとmixupを合わせたような方法

Yun, S., Han, D., Oh, S.J., Chun, S., Choe, J. and Yoo, Y., 2019. Cutmix: Regularization strategy to train strong classifiers with localizable features. In Proceedings of the IEEE/CVF International Conference on Computer Vision (pp. 6023-6032).

qiita.com

  • Manifold mixup: Manifold Mixuでは、より特徴量が整理された中間層で混ぜるMIXUPを行うデータ拡張手法だそうです。

Verma, V., Lamb, A., Beckham, C., Najafi, A., Mitliagkas, I., Lopez-Paz, D. and Bengio, Y., 2019, May. Manifold mixup: Better representations by interpolating hidden states. In International Conference on Machine Learning (pp. 6438-6447). PMLR.

akichan-f.medium.com

その他参考にさせていただいたWEBの記事

nonbiri-tereka.hatenablog.com

wazalabo.com

qiita.com

参考文献

[1] Zhong, Z., L. Zheng, G. Kang, S. Li, and Y. Yang. "Random erasing data augmentation. arXiv 2017." arXiv preprint arXiv:1708.04896.

[2] DeVries, Terrance, and Graham W. Taylor. "Improved regularization of convolutional neural networks with cutout." arXiv preprint arXiv:1708.04552 (2017).

[3] Zhang, Hongyi, Moustapha Cisse, Yann N. Dauphin, and David Lopez-Paz. "mixup: Beyond empirical risk minimization." arXiv preprint arXiv:1710.09412 (2017).

[4] Inoue, Hiroshi. "Data augmentation by pairing samples for images classification." arXiv preprint arXiv:1801.02929 (2018).