怎么使用MATLAB完成,深度学习的超分辨率图像重建,我目前代码运行老是显示有问题。后续的目标是放入GUI按钮下,但是在单独运行的情况下也跑不出来。
同时也还有一个问题,如果要把深度学习的代码放入GUI可视化界面的话,需要新加一个按钮吗(实现神经网络训练)
代码1
I = im2double(I); % 归一化处理
Y = rgb2ycbcr(I); % 转换到YCbCr颜色空间
Y = Y(:,:,1); % 提取Y通道
layers = [ ...
imageInputLayer([64 64 1])
convolution2dLayer(9,64,'Padding',[4 4])
reluLayer()
convolution2dLayer(1,32,'Padding',[0 0])
reluLayer()
convolution2dLayer(5,1,'Padding',[2 2])
];
net = trainNetwork(Y, layers); % 训练神经网络
Y_resized = imresize(Y,4); % 放大低分辨率图像
Y_pred = predict(net,Y_resized); % 使用神经网络进行预测
Y_pred = squeeze(Y_pred); % 删除单维度条目
Y_pred = im2uint8(Y_pred); % 将预测结果转换为图像
I_pred = YCbCr2rgb(cat(3, Y_pred, imresize(Y,4,'CbCr','bicubic'))); % 将预测结果转换回RGB颜色空间
代码2
% 数据准备
imds = imageDatastore('data/train', 'IncludeSubfolders', true, 'FileExtensions', '.png', 'LabelSource', 'foldernames');
imds.ReadFcn = @(loc)imresize(imread(loc), [256, 256]); % 图像统一缩放到256x256
[imdsTrain, imdsTest] = splitEachLabel(imds, 0.8, 'randomized');
% 网络设计
inputLayer = imageInputLayer([256, 256, 1]);
middleLayer1 = convolution2dLayer(3, 64, 'Padding', 'same');
middleLayer1.BatchNormalization = true;
middleLayer1.Activation = 'relu';
middleLayer2 = convolution2dLayer(3, 64, 'Padding', 'same');
middleLayer2.BatchNormalization = true;
middleLayer2.Activation = 'relu';
middleLayer3 = convolution2dLayer(3, 64, 'Padding', 'same');
middleLayer3.BatchNormalization = true;
middleLayer3.Activation = 'relu';
middleLayer4 = convolution2dLayer(3, 64, 'Padding', 'same');
middleLayer4.BatchNormalization = true;
middleLayer4.Activation = 'relu';
middleLayer5 = convolution2dLayer(3, 64, 'Padding', 'same');
middleLayer5.BatchNormalization = true;
middleLayer5.Activation = 'relu';
middleLayer6 = convolution2dLayer(3, 64, 'Padding', 'same');
middleLayer6.BatchNormalization = true;
middleLayer6.Activation = 'relu';
middleLayer7 = convolution2dLayer(3, 64, 'Padding', 'same');
middleLayer7.BatchNormalization = true;
middleLayer7.Activation = 'relu';
middleLayer8 = convolution2dLayer(3, 64, 'Padding', 'same');
middleLayer8.BatchNormalization = true;
middleLayer8.Activation = 'relu';
middleLayer9 = convolution2dLayer(3, 64, 'Padding', 'same');
middleLayer9.BatchNormalization = true;
middleLayer9.Activation = 'relu';
middleLayer10 = convolution2dLayer(3, 64, 'Padding', 'same');
middleLayer10.BatchNormalization = true;
middleLayer10.Activation = 'relu';
middleLayer11 = convolution2dLayer(3, 64, 'Padding', 'same');
middleLayer11.BatchNormalization = true;
middleLayer11.Activation = 'relu';
middleLayer12 = convolution2dLayer(3, 64, 'Padding', 'same');
middleLayer12.BatchNormalization = true;
middleLayer12.Activation = 'relu';
middleLayer13 = convolution2dLayer(3, 64, 'Padding', 'same');
middleLayer13.BatchNormalization = true;
middleLayer13.Activation = 'relu';
middleLayer14 = convolution2dLayer(3, 64, 'Padding', 'same');
middleLayer14.BatchNormalization = true;
middleLayer14.Activation = 'relu';
middleLayer15 = convolution2dLayer(3, 64, 'Padding', 'same');
middleLayer15.BatchNormalization = true;
middleLayer15.Activation = 'relu';
middleLayer16 = convolution2dLayer(3, 64, 'Padding', 'same');
middleLayer16.BatchNormalization = true;
middleLayer16.Activation = 'relu';
middleLayer17 = convolution2dLayer(3, 64, 'Padding', 'same');
middleLayer17.BatchNormalization = true;
middleLayer17.Activation = 'relu';
middleLayer18 = convolution2dLayer(3, 64, 'Padding', 'same');
middleLayer18.BatchNormalization = true;
middleLayer18.Activation = 'relu';
middleLayer19 = convolution2dLayer(3, 64, 'Padding', 'same');
middleLayer19.BatchNormalization = true;
middleLayer19.Activation = 'relu';
middleLayer20 = convolution2dLayer(3, 64, 'Padding', 'same');
middleLayer20.BatchNormalization = true;
middleLayer20.Activation = 'relu';
middleLayer21 = convolution2dLayer(3, 64, 'Padding', 'same');
middleLayer21.BatchNormalization = true;
middleLayer21.Activation = 'relu';
middleLayer22 = convolution2dLayer(3, 64, 'Padding', 'same');
middleLayer22.BatchNormalization = true;
middleLayer22.Activation = 'relu';
middleLayer23 = convolution2dLayer(3, 64, 'Padding', 'same');
middleLayer23.BatchNormalization = true;
middleLayer23.Activation = 'relu';
middleLayer24 = convolution2dLayer(3, 64, 'Padding', 'same');
middleLayer24.BatchNormalization = true;
middleLayer24.Activation = 'relu';
middleLayer25 = convolution2dLayer(3, 64, 'Padding', 'same');
middleLayer25.BatchNormalization = true;
middleLayer25.Activation = 'relu';
middleLayer26 = convolution2dLayer(3, 64, 'Padding', 'same');
middleLayer26.BatchNormalization = true;
middleLayer26.Activation = 'relu';
middleLayer27 = convolution2dLayer(3, 64, 'Padding', 'same');
middleLayer27.BatchNormalization = true;
middleLayer27.Activation = 'relu';
middleLayer28 = convolution2dLayer(3, 64, 'Padding', 'same');
middleLayer28.BatchNormalization = true;
middleLayer28.Activation = 'relu';
outputLayer = convolution2dLayer(3, 1, 'Padding', 'same');
outputLayer.Activation = 'tanh';
outputLayer.Scale = 25;
layers = [
inputLayer
middleLayer1
middleLayer2
middleLayer3
middleLayer4
middleLayer5
middleLayer6
middleLayer7
middleLayer8
middleLayer9
middleLayer10
middleLayer11
middleLayer12
middleLayer13
middleLayer14
middleLayer15
middleLayer16
middleLayer17
middleLayer18
middleLayer19
middleLayer20
middleLayer21
middleLayer22
middleLayer23
middleLayer24
middleLayer25
middleLayer26
middleLayer27
middleLayer28
outputLayer];
lgraph = layerGraph(layers);
% 网络训练
options = trainingOptions('adam', ...
'InitialLearnRate', 0.0001, ...
'MaxEpochs', 150, ...
'MiniBatchSize', 16, ...
'Shuffle', 'every-epoch', ...
'ValidationData', imdsTest, ...
'ValidationFrequency', 5, ...
'Plots', 'training-progress');
net = trainNetwork(imdsTrain, lgraph, options);
% 图像重建
img_low = imread('data/test/1.png');
img_high = predict(net, double(img_low));
% 输出重建后的高分辨率图像
imshow(uint8(img_high*255));
其中代码2老是显示BatchNormalization = true;这个属性不存在,求指教