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

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

댓글 수: 3

Kenta
Kenta 2019년 10월 18일
こんにちは。ご質問に関して聞きたい点があるので質問させてください。
「出来ることが限られているため」とありますが、具体的にはどのような操作を画像に施したいのでしょうか。画像どうしを張り合わせる、などそのような類でしょうか。教えていただけると幸いです。
naoki etori
naoki etori 2019년 10월 18일
こんにちは. 回答ありがとうございます. 具体的にはノイズ付与とマスクの2つをしようと考えてます.
Kenta
Kenta 2020년 5월 26일
こちら、マスクをしてaugmentationをするコードです。参考になれば幸いです。

댓글을 달려면 로그인하십시오.

 채택된 답변

Kenta
Kenta 2019년 10월 18일

2 개 추천

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

naoki etori
naoki etori 2019년 10월 21일
返信ありがとうございます.
上記の方法でData Augmentationができました.
ありがとうございます.
ただ一点お聞きしたいことがあります.
Data Augmentationをする前の画像とした後の画像を同時に訓練させたいのですが,その場合はどうすればいいのでしょうか.
Data Augmentationをする前とした後のImageDatastoreを結合すればいいと考えたのですが,うまくいかないです.
ご回答の程よろしくお願い致します.
Kenta
Kenta 2019년 10월 21일
こんにちは、よかったです。
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
naoki etori 2019년 10월 21일
回答ありがとうございます.
とりあえず2番目の方法で実装できました.ありがとうございます.
Data Augmentationの手法の一つとして部分マスクというものがあります.
google scholarで部分マスクを行った論文がいくつかありました.
Kenta
Kenta 2019년 10월 21일
教えていただきありがとうございます。

댓글을 달려면 로그인하십시오.

추가 답변 (0개)

카테고리

도움말 센터File Exchange에서 Read, Write, and Modify Image에 대해 자세히 알아보기

질문:

2019년 10월 18일

댓글:

2020년 5월 26일

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!