blog

cvデータの拡張方法とimgaugの使用法

1.データ拡張型ミックスアップ:近傍リスク最小化の原理に基づく、すなわち、モデルの汎化能力を向上させるために、先験的知識によって学習サンプルの領域値を構成すること。 ミックスアップとは、簡単に言うと、...

Mar 3, 2020 · 4 min. read
シェア

データ拡張タイプ

古典的なイメージデータ拡張タイプ

幾何変換クロップ、フリップ、回転、スケール、歪み変形1. テストセットとトレーニングセットの間で起こりうる位置のずれに対処するため。

2. イメージ分類のような方向の影響を受けないタスクのための回転、反転操作

色の変化ノイズ、ぼかし、色変換、消去、塗りつぶし1.ノイズ一般的なガウスノイズ

2.消去と塗りつぶしは、特定の面積サイズの矩形ブロックを選択し、黒または他のランダムに分布する色で置き換えることができます。

3. カラーパーターベーションは、特定のカラースペースにカラーコンポーネントを追加または減算したり、カラーチャンネルの順序を変更することができます。

ランダム消去効果イメージ

ディープラーニングにおけるデータ拡張手法の追加

ここでは主に、合成手法に基づくデータ増強、ニューラルネットワーク自体に基づくデータ生成、強化学習に基づく増強手法の戦略的選択などがあります。

マルチサンプル合成

  • つまり、モデルの汎化能力を向上させるために、先験的な知識によって訓練サンプルの領域値を構築します。
  • remix: Rebalanced Mixup

要するに、mixupは、2つのサンプルの入力とラベルを線形補間して、新しいサンプルを得ることです。remixは、重みがサンプルの少ないカテゴリに偏るカテゴリ補間で、主にカテゴリ分類のロングテール効果を持つデータ用に設計されています。

  • SMOTE合成マイノリティオーバーサンプリング手法

新しいサンプルを人工的に合成することで、サンプルの不均衡に対処します。

GAN

  • モデルを通してデータの分布を学習し、学習データの分布と一致するイメージをランダムに生成します。

Autoaugmentation

  • AutoAugmentは、Googleによって提案された最適なデータエンハンスメントスキームの自動選択です。基本的な考え方は、エンハンスメント学習を使用して、データ自体から最適なイメージ変換ストラテジーを見つけることであり、異なるタスクに対して異なるエンハンスメント方法を学習するため、一般的な検索空間は大きく、ハードウェアリソースの要件が高くなります。

transfer learning

  • 転移学習は、暗黙のうちにデータを強化する効果があります。

imgaug

共通上位インタフェース

from imgaug import augmenters as iaa

iaa.Sequential(children,random_order)一連のサブオーグメンテーションオペレーションを行う際に、random_orderをbool型とすることで、異なるバッチイメージがランダムな順序で並んでいるかどうかを決定します。この操作の基本的で最も一般的な使い方は、サブエンハンスメントのリストを選択することです。
iaa.someOf(n,children,random_order)nはタプルで、例えば1~3を表します。これらのサブオペレーションからn個を選択します。
iaa.OneOf(children)サブ操作のいずれかを選択します。
iaa.WithColorspace()イメージをある色空間から別の色空間に変換し、次に別の色空間でイメージを変換し、最後に元の色空間に戻します。
iaa.Noop()変換は行われません。場合によっては、単にプレースホルダとして Augmenter を使いたいだけで、実際には変換せずに augment_image() 関数を呼び続けたいこともあるでしょう。たとえば、テストのために次のように使用できます。
iaa.Lambda()いくつかの変換関数をカスタマイズします。

共通サブオペレーションインタフェース

iaa.Crop(),iaa.ContrastNormalization(),iaa.Affine(),iaa.Sharpen(),iaa.Emboss(),iaa.AddToHueAndSaturation(),iaa.Add()ここでいう子エンハンスメント操作には、トリミング、コントラスト、ピクセルパーターベーションなどが含まれ、子要素としてエンハンスメントパイプラインに参加することができます。 具体的なインターフェイスについては、公式サイトを参照してくださいimgaug.readthedocs.io/ja/latest/s...コアコードディレクトリ

データ強化のための選択課題

データ強化の選択は複雑な問題であり、異なるデータセット、シナリオ、データ強化要件のアルゴリズムモデルが異なっている、上記の、Googleの自動補強は、サブセット内の最適解を選択する方法の順列と組み合わせの検索空間を介して、ソリューションのアイデアですが、グローバルな最適解から、まだギャップがあります。次の原則:

  1. まず、データの多様性の強化と同時に、強化されたデータとアプリケーションのシナリオは、より一貫性のある分布を持っていることを確認するためのデータの強化、つまり、非関連データを増加させない、それ以外の場合は、必ずしもパフォーマンスの向上につながることはありません。

  2. もう1つの原則は、エンハンスメントメソッドは、元のタスクの目標に干渉してはならないということです。たとえば、目標はカラーカテゴリを決定することですが、エンハンスメントメソッドはまた、元のデータ分布に影響を与える色空間を変更するために行く、イメージのテクスチャを強化するために行くに比べて、より合理的になります。

  3. 複数の強化を組み合わせて使用するようにすると、1つだけを使用するよりも良い結果が得られます。

いくつかの点

imgaugは、ランダムモードと決定論的モードの2つの拡張モードに分かれており、特定のアプリケーションのニーズに応じて使い分けることができます。決定論的モードでは、random_order=Trueのシーケンスであっても、各バッチのイメージは同じ拡張処理を行うことに注意してください。次の図は、最初のバッチと2番目のバッチを次のようにオーグメントした場合の効果を示しています。

import imgaug as ia
import imgaug.augmenters as iaa
import cv2
image = cv2.imread("/data/ckp/Zyo9WaMSjCrzVCfst0Qm6Q==.jpg")
batches = [[image] * 3, [image] * 3] # two batches of each three images
 
aug = iaa.Sequential([
		iaa.Affine(translate_px=(-50, 50), rotate=(-40, 40), cval=255),
		iaa.Emboss(alpha=(0, 1.0), strength=(0, 1.0)),
		iaa.ContrastNormalization((0.75, 1.5),per_channel=True),
		],random_order=True
		)
 
aug_det = aug.to_deterministic()
images_deterministic = [aug_det.augment_images(batch) for batch in batches]

Read next

レディスセット

1.はじめに javaのsetと同じように、setは重複を許さない==リストです。setは重複を許さないので、同じものを複数回追加すると...。

Mar 3, 2020 · 6 min read