MATLAB Answers

0

imageDataA​ugmenterを使​わないData Augmentationについて

Asked by naoki etori on 18 Oct 2019 at 10:35
Latest activity Commented on by Kenta Itakura on 21 Oct 2019 at 10:55
CNNを使って画像の分類を行っています.
分類精度を上げるためにData Augmentationを行うことを考えています.
そこでimageDataAugmenterを使用してData Augmentationを行おうと考えましたが,
出来ることが限られているため,この関数を使わずにData Augmentationをしたいです.
現在は,transformを使ってData Augmentationを行おうと試みましたが,ImageDatastoreがTransformedDatastoreに変換されると学習ができないようです.
解決策がありましたらご回答の程よろしくお願い致します.

  2 Comments

Kenta Itakura on 18 Oct 2019 at 11:59
こんにちは。ご質問に関して聞きたい点があるので質問させてください。
「出来ることが限られているため」とありますが、具体的にはどのような操作を画像に施したいのでしょうか。画像どうしを張り合わせる、などそのような類でしょうか。教えていただけると幸いです。
naoki etori on 18 Oct 2019 at 14:19
こんにちは. 回答ありがとうございます. 具体的にはノイズ付与とマスクの2つをしようと考えてます.

Sign in to comment.

1 Answer

Answer by Kenta Itakura on 18 Oct 2019 at 15:51
 Accepted Answer

function I_noise = img_aug(filename)
% load images
I = imread(filename);
I_noise = imnoise(I,'salt & pepper',0.02);
x = randi(size(I,1),1);
y = randi(size(I,2),1);
h = randi(size(I,1)-x,1);
w = randi(size(I,2)-y,1);
I_noise(x:x+h,y:y+w,:)=128;
end
ご返信ありがとうございます。確かに、マスクやカスタムした形のノイズは、
イメージストアでは直接的にはできないかもしれません。ただ、上のように、補助関数を同じパスに保存したうえで、
下のコード例を実行すると、画像のように、ノイズおよびマスクの入った画像が取得できます。
上では、まず、ノイズを入れる。そして、マスクの左上のx、y座標をランダムに発生させ、さらに、縦横の長さも画像に入る範囲でランダムに決定します。そのルールに従って、イメージデータストアから読みだすように定義すると、下のような、マスクとノイズがある画像を生成、訓練データとして入力することができます。
ノイズやマスクの設定は、質問者様の設定によると思うので、適宜変更してご使用いただければと思います。
よろしくお願いいたします。
imds = imageDatastore({'street1.jpg','street2.jpg','peppers.png','corn.tif'});
imds.ReadFcn = @(filename)img_aug(filename);
allimgs = readall(imds);
montage(allimgs)
imgs.png

  4 Comments

Show 1 older comment
Kenta Itakura on 21 Oct 2019 at 3:57
こんにちは、よかったです。
2通りあって、
1)functionの中身に0/1の乱数とif文を加えて、if 0ならマスク&ノイズ、1なら何もしないつまりI_noise=I
とすればよさそうです
2)うえのデータストアから関数readallで読み取ってしまって保存する。それをもとの手持ちの画像のファイルに保存して、訓練データとしてそのファイルを読み取る
1)では、だいたいマスクと加工なし画像が1:1で生成されますが、完全に同じ割合ではなさそうです。ただおそらく大きな問題にはならないと思います。比率を変えたければ乱数を0, 1, 2で0のときのみマスクとすれば、1:2の比率で加工した画像を混ぜこめます。
2)画像が確認できるので直感的にはわかりやすいです。ただ、交差検証をしたい、という場合は1)のほうがよさそうです。
最後に一点気になったことがあるのですが、ノイズを加えて学習させるとよい、とは聞いたことがあるのですが、マスクをするとよいというのは初めて聞きました。ただ、マスクをして学習させるのも効果がありそうです。私の不勉強で申し訳ないのですが、なにかそういう報告があったりするものなのでしょうか。
naoki etori on 21 Oct 2019 at 7:50
回答ありがとうございます.
とりあえず2番目の方法で実装できました.ありがとうございます.
Data Augmentationの手法の一つとして部分マスクというものがあります.
google scholarで部分マスクを行った論文がいくつかありました.
Kenta Itakura on 21 Oct 2019 at 10:55
教えていただきありがとうございます。

Sign in to comment.