。
この例では,imageageAtastore.
の关节变换
および结合
をを用して图像到图像回帰回帰の学习用途のストアを设备するを明します。
この例では,ノイズ除去ネットワークの学习に适したパイプラインををををてデータののをををををその说うその说う后后后その后后后后后后后后ししてしててててててててててて畳み込み畳み込み畳み込みてててににイメージノイズを削除削除ことをを习させせ
この例でで,入力イメージの各ピクセルが0.
または1
(それぞれ黒および白)に設定されているごま塩ノイズモデルを使用します。ノイズを含むイメージはネットワーク入力となります。初期状態のイメージは予測されるネットワーク応答となります。ネットワークはごま塩ノイズを検出して削除することを学習します。
数字のデータセット内の初期状態のイメージをimageDatastore
として読み込みます。データストアには,0 ~ 9の数字から成る10000個の合成イメージが格納されています。イメージは,さまざまなフォントを使用して作成された数字のイメージにランダム変換を適用して生成されたものです。数字のイメージはそれぞれ28 x 28ピクセルです。データストアには,カテゴリごとに同じ数のイメージが含まれます。
digitdatasetpath = fullfile(matlabroot,“工具箱”那'nnet'那......'nndemos'那'nndatasets'那“DigitDataset”);imd = imageDatastore (digitDatasetPath,......“IncludeSubfolders”,真的,......“LabelSource”那'foldernames');
大众読み込み読み込みサイズを指定して,ファイルi/ oのコストを小音し。
洛桑国际管理发展学院。ReadSize = 500;
グローバル驰数発生器材のををして,结果の再现性を高度ます。
RNG(0)
学习前に关联洗牌
をを用ししデータをシャッフルします。
imd = shuffle (imd);
关节spliteachlabel.
を使用して,IMDS.
を学习,検证,およびおよび用の初状态イメージが含まれる3つのイメージデータストア含まれるしし。
[imdsTrain, imdsVal imdsTest] = splitEachLabel (imd, 0.95, 0.025);
关节变换
を使用して,ネットワーク入力として使用する,各入力イメージのノイズを含むバージョンを作成します。关节变换
は,基になるデータストアからデータを読み取り,補助関数addNoise
(この例の最後に定義)に定義されている演算を使用してデータを処理します。关节变换
のの力量TransformedDatastore
です。
dsTrainNoisy =变换(imdsTrain @addNoise);dsValNoisy =变换(imdsVal @addNoise);dsTestNoisy =变换(imdsTest @addNoise);
关节结合
を使用して,ノイズを含むイメージと初期状態のイメージを組み合わせてTrainnetwork.
にデータを供給する単一のデータストアにします。このデータストアの組み合わせは,データのバッチをTrainnetwork.
で期待される2列の细胞配列に読み取ります。关节结合
のの力量ConventDatastore.
です。
dsTrain =结合(dsTrainNoisy imdsTrain);dsVal =结合(dsValNoisy imdsVal);dst =结合(dsTestNoisy imdsTest);
关节变换
を使用して,入力データストアと応答データストアの両方に共通する追加の前処理演算を実行します。補助関数commonPreprocessing
(この例の最後に定義)は,ネットワークの入力サイズに一致するように入力イメージと応答イメージのサイズを32行32列ピクセルに変更し,各イメージのデータを[0,1]の範囲に正規化します。
dstrain =变换(dstrain,@ commonprepessing);DSVAL =变换(DSVAL,@ CommonPrepessing);dstest =变换(dstest,@ commonprepessing);
最后に,关节变换
を使用してランダム化された拡張を学習セットに追加します。補助関数augmentImages
(この例の最后に定义は,ランダムな90度の回転をネットワークにとます対応予测されるに同同するさ応答同同のされる応答同。
dstrain =变换(Dstrain,@ Augmentimages);
拡张は过过过を抑え,学校済みネットワークに存存回転のロバスト性を高度ます。検证データセットまたはデータセットはランダムランダムされたランダム化れれた拡化はれた拡は不锈。
学院データデータ设备に必要な前定理演算はいくつあるため,学校前に前前したデータをしし正式しいを确认します。关键词预览
をを用してデータをプレビューますますます。
关节剪辑
(图像处理工具箱)を使含むイメージてノイズのデータ正式ようですノイズのデータ正しいようです塩のデータイメージにごまノイズががられますノイズ追ノイズれれますごまノイズ追ノイズれれます。点を除き,入力イメージと応答イメージは同じです。入力イメージと応答イメージにはランダムな90度の回転が同じ方法で适用されています。
exampleData =预览(dsTrain);输入= exampleData (: 1);反应= exampleData (:, 2);minibatch =猫(2输入反应);蒙太奇(minibatch ','尺寸',[8 2])标题('输入(左)和响应(右)')
畳み込み自己符号化器は,イメージのノイズ除去を行うための一般的なアーキテクチャです。畳み込み自己符号化器は,符号化器と復号化器という2つの段階で構成されます。符号化器は,元の入力イメージを圧縮して潜在表現にします。この潜在表現では,元の入力イメージより幅と高さが小さくなっている一方で,空間位置あたりの特徴マップ数が多いという点で深度が大きくなっています。圧縮された潜在表現は,元のイメージの高周波数の特徴を復元する際に空間分解能がいくらか低下しますが,元のイメージの符号化でノイズアーティファクトを含めないように学習しています。復号化器は,符号化された信号を繰り返しアップサンプリングして,元の幅、高さ,チャネル数に戻します。符号化器はノイズを除去するため,復号化された最終的なイメージに含まれるノイズアーティファクトは少なくなります。
この例では,以下を含む深深学习工具箱™ののをを使しし畳み込み畳み込みて符符ます。
imageInputlayer.
- イメージイメージ力层
convolution2dLayer
——畳み込みニューラルネットワーク用の畳み込み層
抵押者
- 正规化纤ユニット层
maxpooling2dlayer.
- 2次元最大プーリング層
transposedConv2dLayer
——転置畳み込み層
思考
- クリップされた正式化纤ユニット
回归金属
- 回帰出力層
,および8できれいに割り切れるためです。
ImageLayer = ImageInputLayer([32,32,1]);
符号化物制成作物成型。尺号化器でダウンサンプリングは,プールサイズ2およびストライド2で最大大プーリング行。
EncodingLayers = [......convolution2dLayer(3, 16岁,'填充'那“相同”),......剥离,......maxPooling2dLayer (2'填充'那“相同”那'走吧'2),......卷积2dlayer(3,8,'填充'那“相同”),......剥离,......maxPooling2dLayer (2'填充'那“相同”那'走吧'2),......卷积2dlayer(3,8,'填充'那“相同”),......剥离,......maxPooling2dLayer (2'填充'那“相同”那'走吧',2)];
復号化層を作成します。復号化器は,転置畳み込み層を使用して符号化された信号をアップサンプリングします。補助関数createupsampletransponseconvlayer.
ををアップサンプリングてで畳み込み层をます。
ネットワークは思考
を最终的な活性化层として使し,出力のを[0,1]にします。
decodingLayers = [......createUpsampleTransponseConvLayer (8),......剥离,......createUpsampleTransponseConvLayer (8),......剥离,......createupsampletransponseconvlayer(2,16),......剥离,......convolution2dLayer(3、1'填充'那“相同”),......丛林制水器(1.0),......regressionLayer];
イメージイメージ力层,符号化物,およびおよび码化层を连结て,畳み込み自由编号化器ネットワークアーキテクチャを成し。
图层= [ImageLayer,EncodingLayers,DecodingLayers];
亚当オプティマイザーを使用してネットワークに学習させます。关节trainingOptions
を使用してハイパーパラメーター設定を指定します。100年学習をエポック行います。
选择= trainingOptions ('亚当'那......'maxepochs',100,......'minibatchsize',imds.readsize,......“ValidationData”dsVal,......'plots'那'培训 - 进步'那......“详细”、假);
データソースおよび学習オプションが構成されたので,関数Trainnetwork.
をを使し畳み込み畳み込み己符习习习させます。
GPUが利用できる料,GPUで学习を行ます.GPUをををするは,并联计算工具箱™,およびおよび®対応nvidia®GPUが必要です。详细详细は,リリース別のGPUサポート(并行计算工具箱)を参照してください。学习にはnvidia titan xpで约25分を要します。
net = trainnetwork(dstrain,图层,选项);
modeldateTeme = string(DateTime('现在'那'格式'那“yyyy-mm-dd-hh-mm-ss”));保存(strcat(“TrounimageToImageregressionnet-”modelDateTime,“.mat”),'网');
关节预测
を使用して,テストセットから出力イメージを取得します。
ypred =预测(网,dstest);
サンプルサンプル力イメージおよびネットワークネットワークの关键词予测予测出可化し,ノイズ除去がどれ适切に予测しているかかを把握ししどおりどおりいるの出をしでではははイメージイメージののノイズ部部部符が除去されていい。符号化および复およびおよび复の,ノイズ除去后のイメージ少し不明明になってい。
inputImageExamples =预览(dst);蒙太奇({inputImageExamples {1}, ypred (:,:,: 1)});
ピークs / n比(psnr)を解析するによって,ネットワークの性能を评価ます。
ref = inputImageExamples {1,2};originalNoisyImage = inputImageExamples {1};psnrNoisy = psnr (originalNoisyImage ref)
psnrnoisy =单身的17.8455
psnrdenoised = psnr(Ypred(:::::,1),参考)
psnrdenoised =.单身的21.8439
予想どおり,出力イメージのpsnrは,ノイズを含む含む力イメージ高度なっなっいます。
補助関数addNoise
は,関数imnoise.
(图像处理工具箱)をを用してイメージに塩ノイズノイズノイズ加值します。关键addNoise
では,入力データの形式がイメージデータの细胞配列であることが必要です。これは,imageageAtastore.
の关节读
によって返されるデータの形式と一致します。
函数dataout = addnoise(数据)dataout = data;为了idx = 1:size(data,1) dataOut{idx} = imnoise(data{idx},)'椒盐');结尾结尾
補助関数commonPreprocessing
は,学校セット,検证セット,およびテストセットににする前前をを定义しします前前はは定义のの前手顺をを実実しし
关节关节は,入力データのがイメージデータの2列の细胞配列配列であることこと必要必要必要必要であるであるであるであることこと必要必要必要ですははは,ConventDatastore.
の关节读
によって返されるデータの形式と一致します。
函数dataOut = commonPreprocessing(data) dataOut = cell(size(data));为了坳= 1:尺寸(数据,2)为了idx = 1:大小(数据,1)temp = sing(数据{idx,col});temp = imresize(temp,[32,32]);temp = Rescale(Temp);dataout {idx,col} = temp;结尾结尾结尾
補助関数augmentImages
は,関数rot90
をを使しランダムなな90度の回転をデータに追ししににネットワークされる応答同同するれるれるに同同回転されます。この关键词ますます。の细胞配列配列であることが必要必要必要は,ConventDatastore.
の关节读
によって返されるデータの形式と一致します。
函数dataOut = augmentImages(数据)dataOut = cell(size(数据));为了IDX = 1:大小(数据,1)ROT90VAL = RANDI(4,1,1)-1;DataOut(IDX,:) = {ROT90(数据{IDX,1},ROT90VAL),ROT90(数据{IDX,2},ROT90VAL)};结尾结尾
補助関数createupsampletransposeconvlayer.
は,指定された係数によって層入力をアップサンプリングする転置畳み込み層を定義します。
函数out = createUpsampleTransponseConvLayer(factor,numFilters) filterSize = 2*factor - mod(factor,2); / /输出裁剪= (factor-mod(因素,2))/ 2;numChannels = 1;= transposedConv2dLayer (filterSize numFilters,......“NumChannels”,numchannels,'走吧',因素,“种植”、裁剪);结尾
Trainnetwork.
|trainingOptions
|变换
|结合
|imageDatastore