キャンセル
次の結果を表示 
次の代わりに検索 
もしかして: 
DataRobot コミュニティ

【DataRobot JAM】Data Augmentationについて

YuyaYamamoto
データロボット同窓生

【DataRobot JAM】Data Augmentationについて

* DataRobot JAM: このコーナーではDataRobot社内でのデータサイエンスに関する雑談からちょっとした小ネタを投下するコーナーです。

Data Augmentationは画像ではおなじみのデータをズラしたりひっくり返したり、回転させてデータを水増しする手法ですが、その本質はデータ数を増やすことではなく、「とある変換操作がターゲットラベルを変化させない」というドメイン知識をモデルに注入することに相当のではないかと言われています。その理解に立つと画像以外のセンサーデータやテーブルデータでも応用が効いてきます。例えば、以下のように3軸加速度センサーの方向をランダムに入れ替える事例があるかと思います。

https://arxiv.org/pdf/1706.00527.pdf

皆さんはどんなアイデアやクエスチョンがあるでしょうか?もし面白いAugmentationの仕方が思いついたらシェアしていただけるととても嬉しいです。

10件の返信10
IJICHI_DR
データサイエンティスト
データサイエンティスト

医療AI関連の研究で、昨年下記論文が論争を巻き起こしたそうです。
https://arxiv.org/pdf/1909.01940.pdf この論文での指摘「ドメインシフトをカバーできるようにドメイン知識に基づき賢くAugumentationを行わないと、良いモデルにならない」は重要な示唆を与えていると感じました。

Isao
データロボット同窓生

山本さんが話してくれた過去のKaggleコンペのソリューションで、仮説を元にデータをランダムにdropし、似て非なる別のデータとしてAugmentationするという話が非常に面白かったです。色々な応用が効きそうですね。

詳しくはこちら!

https://www.kaggle.com/c/recruit-restaurant-visitor-forecasting/discussion/49328

YusukeK
データサイエンティスト
データサイエンティスト

さっきは勉強になりました!

 

そのリンク先の3軸加速度センサのように(https://arxiv.org/pdf/1706.00527.pdf)、センサデータでも確かに使えますね。実験データのサンプル数が少ないお客様にいいアドバイスできないかと考えてます。「ターゲットラベルを変えない」が重要ですね。

Miogawa
データサイエンティスト
データサイエンティスト

感覚として、生の状態としては単一の特徴量だけど情報量が多いものでうまく適用できそうですね。

  • 画像
  • テキスト
  • センサー

ここで出てないですが、GPS位置情報とかもいいかもしれませんね。

画像と無理やりくくることもできるかもですが、ある程度の曲がりかたや別のルート通ってもそこに向かったという事実は変わらないというような変化を加えて増幅させられるかも。

0 件の賞賛
senkin
データサイエンティスト
データサイエンティスト

kaggleのjigsaw toxic classficationコンペで、textデータが本来長文なら、短文に分割、Head のみ、Tailのみ、そういうaugmentation手法もあります。

AkiraI
青色LED

少しそれますが、疑似ラベルの付与も Augmentation ですよね。

クレジットスコアリングにおける Reject Inference にはいくつかの Augmentation がありますが、Fuzzy Augmentation を知ったときに「こんなやり方もあるんだ」と思った記憶があります。
reject_inference7.gif
https://scorto.com/credit-scoring-article/

Kei
データサイエンティスト
データサイエンティスト

2つの画像をベータ分布を使用して混ぜたり、一部をあえて欠損というのもありましたね。

フリップや回転の話でいくと、字はフリップしたり回転させてもあまり精度が上がらなかったという事例が好きです。確かにフリップされた字は人間でも非常に読みづらいので、そういった予測対象の特性がAugmentationでは重要になってきそうですね。

Miogawa
データサイエンティスト
データサイエンティスト

文字とかフリップしたら漢字なんて意味が変わってしまうものもありますしね。カタカナとかもそうですかね。メとナとか。

大事なのはやはり増幅させても本質を見失わないというところです。マルチラベルならその物体の組み合わせ全てで増幅させていくとどの場所に何があってもそのものの定義は変わらないというのは行けそう。

ShinichiroOhno
リニアアクチュエータ

熟慮せずにオーグメンテーションして昔痛い目を見たことがありますww

  • dlibのsimple_object_detector(HOG+SVM)が学習画像の枚数も少なく、そこそこ動くのでお気に入りです。
  • データのオーグメンテーション(左右対称フリップ)もオプション一つで指定※できるので楽です。
  • ただ、左右対称性が無いターゲット(文字列等)で利用すると、まずいですよね。
  • 熟慮せず、思いつきでTrueを指定して、苦い思い出がありますww

※具体的には、★をTrueにするだけで増幅ができてしまう。

 

# Now let's do the training.  The train_simple_object_detector() function has a
# bunch of options, all of which come with reasonable default values.  The next
# few lines goes over some of these options.
options = dlib.simple_object_detector_training_options()
# Since faces are left/right symmetric we can tell the trainer to train a
# symmetric detector.  This helps it get the most value out of the training
# data.
options.add_left_right_image_flips = True #★

 

やはり、

  • (標本集合)現状、サンプル済みのデータはどういった特性で
  • (母集合) 想定しうる全領域にはどういった構成要素があり
  • (補集合) 全領域に対し、足りていない要素は何で、どういった増幅でそれを補うか?

といった議論が必要なんですよね。例えば、店舗や倉庫でのカメラ画像の物体検出等では、

  • (標本集合)利用できるのは数店舗、数倉庫で撮影した画像
  • (母集合) 実際の環境では、カメラの解像度、照明の色温度、西日等で様々
  • (補集合) 標本を解像度、色温度、日照影響を考慮し、増幅する。

といった感じで、補集合を意識するのが重要なのかもしれません。

Kei
データサイエンティスト
データサイエンティスト

実例や具体的な実例についてご紹介ありがとうございます!