主要内容

이번역최신을있지않습니다않습니다。최신내용으로보려면를하십시오하십시오하십시오。

图像到图像회귀회귀데이터저장소하기하기

图像到图像회귀회귀회귀회귀신경망을훈련위해위해成像转换함수와结合함수를데이터저를준비하는을줍니다줍니다줍니다。

이예제잡음신경망훈련적합한라인을하여데이터를를전처리하는방법방법을줍니다줍니다줍니다。그런다음데이터를사용영상을제거하도록한컨벌루션오토인코더신경망을훈련시킵니다훈련시킵니다。

전처리파이프을사용하여하기하기

이예제는입력영상일부가일부가0또는1(각각검은색흰색)로설정모델합니다합니다합니다。잡음이은입력값기능합니다합니다。잡음이영상예상신경망응답로합니다합니다합니다。신경망은점잡음하고하는것학습합니다합니다。

숫자데이터에있는원본을을成像로서불러옵니다。이데이터저에는에는에는9까지까지숫자를나타내는합성10,000개있습니다있습니다있습니다。이영상다른만들어진숫자영상무작위을적용생성됩니다됩니다됩니다。28×28픽셀입니다입니다입니다입니다입니다。이데이터저범주당한개수의이되어있습니다있습니다있습니다。

digitdatasetpath = fullfile(matlabroot,'工具箱',,,,'nnet',,,,...'nndemos',,,,'nndatasets',,,,“ digitdataset”);imds = imagedatastore(digitdatasetpeth,...“包括橡皮folders”,真的,...“ Labelsource”,,,,“折叠式”);

I/o/o비용최소화수있도록를큰으로하십시오하십시오하십시오。

imds.ReadSize = 500;

결과의높이기전역난수생성기시드을설정합니다합니다。

RNG(0)

훈련에앞서洗牌함수를하여데이터섞습니다섞습니다。

IMDS = Shuffle(IMDS);

SpliteachLabel함수를사용하여IMD를,검증및를원래영상을하는개의의데이터저데이터저나눕니다나눕니다나눕니다。

[imdstrain,imdsval,imdstest] = spliteachlabel(IMDS,0.95,0.025);

转换함수를각영상에잡음추가영상을만듭니다만듭니다。이영상신경망값됩니다됩니다。转换함수기본장소데이터를읽어들인후(이예제부분에에정의)헬퍼addnoise에정의을하여데이터처리합니다합니다。转换함수의출력은变换的达塔斯托尔입니다。

dstrainnoisy = transform(imdstrain,@addnoise);dsvalnoisy = transform(imdsval,@addnoise);dstestnoisy = transform(imdstest,@addnoise);

结合함수를잡음있는영상원래그대로영상을데이터저데이터저로로로결합결합하는데하는데하는데하는데하는데하는데火车网에데이터입력됩니다됩니다。이결합데이터저장소는를를火车网2열같이열열셀형배열로읽어들입니다입니다입니다입니다。结合함수의출력은组合的datastore입니다。

dstrain = combine(dstrainnoisy,imdstrain);dsval = combine(dsvalnoisy,imdsval);dstest = combine(dstestnoisy,imdstest);

转换함수를입력장소응답데이터저양쪽공통적인전처리연산을추가로합니다합니다합니다。이예제끝부분에된된常见的过程32×32×32픽셀로픽셀로픽셀로크기와와입력입력을크기크기크기크기조정조정조정조정한한후후각각영상영상의를[​​0,1]범위범위로

dstrain = transform(dstrain,@commonPreProcessing);dsval = transform(dsval,@commonPreProcessing);dstest = transform(dstest,@commonPreProcessing);

마지막,转换함수를훈련에증대증대합니다합니다합니다。이예제끝부분에된된增强图90도회전적용합니다합니다합니다합니다합니다합니다합니다。신경망입력이대응하는예상에동일한적용됩니다됩니다됩니다。

dstrain = transform(dstrain,@augmentImages);

증대는줄이고된신경망에회전에강인성해줍니다줍니다줍니다。검증데이터데이터에는무작위증대필요않습니다않습니다않습니다。

전처리된데이터보기

훈련데이터하려면가지전처리필요하므로된데이터를미리봄으로써훈련훈련에앞서앞서데이터가가올바른지확인합니다합니다합니다。预览함수를하여를봅니다봅니다。

잡음이영상원래의영상으로쌍의예를剪辑(图像处理工具箱)함수를하여화합니다。훈련데이터올바르게보입니다。왼쪽열입력에서점이보입니다보입니다。잡음이것에는입력영상응답이동일합니다합니다。90도회전이동일동일되었습니다되었습니다되었습니다되었습니다되었습니다되었습니다되었습니다되었습니다되었습니다。

exampledata = preview(dstrain);inputs = exypledata(:,1);响应= exampledata(:,2);minibatch = cat(2,输入,响应);蒙太奇(Minibatch','尺寸',[8 2])标题(“输入(左)和响应(右)”

컨벌루션오토인코더신경망하기

컨벌루션오토인영상제거를위해사용아키텍처입니다입니다입니다。컨벌루션오토인인코더디코더라는두로됩니다됩니다됩니다。인코더는영상너비와줄어들었으나줄어들었으나에비해공간위치당특징맵맵이많다는점점에서에서보다심층심층적적적인인인기저기저의의표현으로으로압축압축기저표현원본영상에있는고주파을을복원능력어느정도정도의의공간공간공간공간분해능분해능되지만되지만되지만되지만되지만되지만되지만되지만되지만되지만되지만한편한편한편한편한편한편한편한편한편한편한편한편한편으로으로는는원본원본영상을을인코딩인코딩인코딩할할할때이이이있는있는아티팩트아티팩트아티팩트아티팩트아티팩트아티팩트아티팩트아티팩트아티팩트아티팩트아티팩트디코더는신호반복적으로업샘하여의의,높이,채널,채널개수로놓습니다놓습니다。인코더가제거때문에디코딩영상에는잡음줄어들어있습니다있습니다있습니다。

深度学习工具箱™의의의계층을하여컨벌루션오토인코더신경망정의합니다

영상입력을만듭니다。2배로및업샘플링생기는채우기문제단순화하기위해입력32×32로합니다합니다합니다합니다합니다합니다32 는2、4、8로떨어지기입니다입니다。

Imagelayer = ImageInputlayer([[32,32,1]);

인코딩계층만듭니다。인코더에서다운샘풀크기크기를를를로로스트라이드를를를로로최댓값풀링을을통해집니다집니다집니다。

encodinglayers = [...卷积2Dlayer(3,16,,'填充',,,,'相同的'),...救济者,...maxpooling2dlayer(2,'填充',,,,'相同的',,,,“大步”,2),...卷积2Dlayer(3,8,'填充',,,,'相同的'),...救济者,...maxpooling2dlayer(2,'填充',,,,'相同的',,,,“大步”,2),...卷积2Dlayer(3,8,'填充',,,,'相同的'),...救济者,...maxpooling2dlayer(2,'填充',,,,'相同的',,,,“大步”,2)];

디코딩계층만듭니다。디코더는인코딩신호를계층을하여업샘합니다합니다합니다。createupsampletransponseconeconvlayer헬퍼함수하여업샘플링로전치컨벌루션계층만듭니다만듭니다만듭니다。이함수예제끝에에있습니다있습니다있습니다。

신경망은剪辑器를마지막계층사용하여출력값[0,1]범위내에오도록강제합니다。

解码器= [...createupsampletransponseconvlayer(2,8),...救济者,...createupsampletransponseconvlayer(2,8),...救济者,...createupsampletransponseconvlayer(2,16),...救济者,...卷积2Dlayer(3,1,'填充',,,,'相同的'),...ClippedRululayer(1.0),...回归层];

영상입력,인코딩계층디코딩을하여오토인코더아키텍처를형성합니다합니다。

layers = [Imagelayer,编码layers,解码器];

훈련옵션정의하기

亚当최적함수사용하여훈련시킵니다훈련시킵니다훈련시킵니다。训练함수를하이퍼파라미터을합니다합니다합니다。훈련을时期100회합니다합니다。

选项=训练('亚当',,,,...“ maxepochs”,100,...“ MINIBATCHSIZE”,imds.readsize,...'验证data',dsval,...“绘图”,,,,“训练过程”,,,,...“冗长”,错误的);

신경망훈련시키기

이제데이터와훈련옵션이되었으니되었으니火车网함수를하여오토인코더을훈련시킵니다훈련시킵니다。

사용가능gpu가있으면있으면있으면에서훈련시킵니다。GPU를하려면하려면平行计算工具箱™와cuda®NVIDIA®GPU가필요합니다。자세한내용은릴리스별gpu지원(并行计算工具箱)항목을하십시오。훈련은nvidia titan xp에서25분걸립니다걸립니다。

net = trainnetwork(dstrain,层,选项);

modelDateTime = string(dateTime(DateTime)('现在',,,,'格式',,,,“ Yyyy-MM-DD-HH-MM-SS”);保存(strcat(strcat)(“训练有素的Imagetoageregressionnet-”,模仿时间,“。垫”),'网');

잡음제거의성능평가하기

预测함수를테스트에서출력을얻습니다얻습니다。

ypred =预测(net,dstest);

잡음제거잘하는지해수있도록입력영상과이에연관된신경망신경망의예측출력출력을을시각시각화합니다합니다。예상과의영상에서는의잡음아티팩트제거되었습니다되었습니다되었습니다。잡음제거은및디코딩과정결과약간흐릿합니다합니다。

InputiMageExamples = Preview(dstest);montage({inputimageExamples {1},ypred(:,::,,:::,1)});

피크(PSNR)를를신경망성능합니다합니다합니다합니다합니다합니다합니다。

ref = inputimageExamples {1,2};OriginalNoisyImage = inputimageExamples {1,1};psnrnoisy = psnr(原始noisyimage,ref)
psnrnoisy =单身的17.8455
psnrdenoised = psnr(ypred(:,::,::,1),ref)
psnrdenoised =单身的21.8439

psnr이이이이있는입력보다높습니다높습니다높습니다높습니다높습니다높습니다높습니다

지원함수

addnoise헬퍼함수는imnoise(图像处理工具箱)함수를영상에을합니다합니다합니다。addnoise함수를입력의형식이데이터로된셀형이어야합니다합니다합니다。이는成像함수가반환데이터형식일치합니다합니다。

功能dataout = addnoise(data)dataout = data;为了idx = 1:size(data,1)dataout {idx} = imnoise(data {idx},'椒盐');结尾结尾

常见的过程헬퍼함수훈련,검증및세트공통인를합니다합니다합니다。헬퍼함수의전처리를합니다합니다합니다。

  1. 영상데이터를单身的데이터형으로합니다。

  2. 精加工함수를영상의크기가의크기와조정합니다합니다합니다。

  3. 恢复함수를하여[0,1]범위정규화합니다합니다。

헬퍼함수하려면입력의형식이영상구성구성구성된된열열열배열이어야합니다。이는组合的datastore함수가반환데이터형식일치합니다합니다。

功能dataOut = commonPreProcessing(data)dataout = cell(size(data));为了col = 1:大小(数据,2)为了idx = 1:size(data,1)temp = single(data {idx,col});temp = imresize(temp,[32,32]);温度=恢复(临时);dataout {idx,col} = temp;结尾结尾结尾

增强图헬퍼함수는rot9090도을적용합니다합니다합니다합니다합니다합니다합니다합니다。신경망입력이대응하는예상에동일한적용됩니다됩니다됩니다。이함수하려면입력의형식이영상구성구성구성된된열열열배열이어야합니다。이는组合的datastore함수가반환데이터형식일치합니다합니다。

功能dataout = augmentImages(data)dataout = cell(size(data));为了idx = 1:size(数据,1)rot90val = randi(4,1,1)-1;dataout(idx,:) = {rot90(data {idx,1},rot90val),rot90(data {idx,2},rot90val)};结尾结尾

CreateUpsAmpleTransPoseConvlayer헬퍼함수입력을된인자사용업샘플링하는전치된컨벌루션계층을합니다합니다합니다。

功能out = createupsampletransponseconeconvlayer(factor,numfilters)filtersize = 2*factor -mod(factor,2);裁剪=(因子模式(因子,2))/2;numchannels = 1;out = transposedconv2dlayer(filtersize,numfilters,...“数字”,numchannels,“大步”,因素,“种植”,裁剪);结尾

참고항목

||||

관련예제

세부정보