主要内容

深度网络设计器中的图像到图像回归

这个例子展示了如何使用深度网络设计器来构造和训练一个超分辨率的图像到图像回归网络。

空间分辨率是用来构建数字图像的像素数。具有高空间分辨率的图像由更多的像素组成,因此图像包含更多的细节。超分辨率是将低分辨率图像作为输入,并将其升级为更高分辨率图像的过程。在处理图像数据时,可能会降低空间分辨率以减小数据的大小,而代价是丢失信息。为了恢复这些丢失的信息,你可以训练一个深度学习网络来预测图像中丢失的细节。在本例中,将从压缩为7 × 7像素的图像中恢复28 × 28像素的图像。

加载数据

本例使用数字数据集,该数据集由10,000个手写数字的合成灰度图像组成。每张图像都是28 × 28 × 1像素。

加载数据并创建映像数据存储。

dataFolder = fullfile(toolboxdir(“nnet”),“nndemos”“nndatasets”“DigitDataset”);imds = imageDatastore(数据文件夹,“IncludeSubfolders”,真的,“LabelSource”“foldernames”);

使用洗牌函数在训练前对数据进行洗牌。

Imds = shuffle(Imds);

使用splitEachLabel函数将图像数据存储划分为三个图像数据存储,其中包含用于训练、验证和测试的图像。

[imdsTrain,imdsVal,imdsTest] = splitEachLabel(imds,0.7,0.15,0.15,“随机”);

将每个图像中的数据归一化到范围[0,1]。标准化有助于稳定和加速网络训练使用梯度下降。如果你的数据比例不好,那么损失就会变成NaN,并且网络参数在训练过程中会发散。

imdsTrain = transform(imdsTrain,@(x) rescale(x));imdsVal = transform(imdsVal,@(x) rescale(x));imdsTest = transform(imdsTest,@(x) rescale(x));

生成培训数据

通过生成由上采样的低分辨率图像和相应的高分辨率图像组成的图像对来创建训练数据集。

为了训练网络执行图像到图像回归,图像需要是由输入和响应组成的对,其中两个图像大小相同。通过将每张图像向下采样到7 × 7像素,然后向上采样到28 × 28像素来生成训练数据。使用转换后的图像和原始图像对,该网络可以学习如何在两种不同分辨率之间进行映射。金宝搏官方网站

使用helper函数生成输入数据upsampLowRes,使用imresize产生较低分辨率的图像。

imdsInputTrain = transform(imdsTrain,@upsampLowRes);imdsInputVal =变换(imdsVal @upsampLowRes);imdsInputTest = transform(imdsTest,@upsampLowRes);

使用结合函数将低分辨率和高分辨率图像组合到单个数据存储中。的输出。结合函数是CombinedDatastore对象。

dsTrain = combine(imdsInputTrain,imdsTrain);dsVal = combine(imdsInputVal,imdsVal);dsTest = combine(imdsInputTest,imdsTest);

创建网络架构

属性创建网络体系结构unetLayers功能从计算机视觉工具箱™。该函数提供了一个适合于语义分割的网络,可以很容易地用于图像到图像的回归。

创建一个输入大小为28 × 28 × 1像素的网络。

= unetLayers([28,28,1],2,“encoderDepth”2);

使用深度网络设计器编辑图像到图像回归的网络。

deepNetworkDesigner(层);

设计师窗格中,将softmax和像素分类层替换为回归层层的图书馆

选择最后的卷积层并设置NumFilters财产1

网络现在已经准备好进行训练了。

导入数据

将训练和验证数据导入Deep Network Designer。

数据选项卡上,单击导入数据>导入数据存储并选择dsTrain作为训练数据和dsVal作为验证数据。通过单击导入两个数据存储进口

深度网络设计器显示组合数据存储中的图像对。左边是放大后的低分辨率输入图像,右边是原始的高分辨率响应图像。网络学习如何在输入图像和响应图像之间进行映射。

列车网络的

选择训练选项并训练网络。

培训选项卡上,选择培训方案.从解算器列表中,选择亚当.集MaxEpochs10.单击,确认培训选项关闭

通过单击在组合数据存储上训练网络火车

当网络学习如何在两张图像之间进行映射时,验证均方根误差(RMSE)会降低。

培训完成后,单击出口将训练过的网络导出到工作区。训练好的网络存储在变量中trainedNetwork_1

测试网络

使用测试数据评估网络的性能。

使用预测,您可以测试网络是否可以从训练集中不包括的低分辨率输入图像生成高分辨率图像。

ypred = predict(trainedNetwork_1,dsTest);i (1:2,i) = read(dsTest);I(3, I) = {ypred(:,:,:, I)};结束

比较输入、预测和响应图像。

次要情节(1、3、1)imshow (imtile(我(1:)“GridSize”,[1]))标题(“输入”) subplot(1,3,2) imshow(imtile(I(3,:),“GridSize”,[1]))标题(“预测”) subplot(1,3,3) imshow(imtile(I(2,:)“GridSize”,[1]))标题(“响应”)

该网络成功地从低分辨率输入生成高分辨率图像。

本例中的网络非常简单,并且高度适合数字数据集。有关演示如何为日常图像创建更复杂的图像到图像回归网络的示例,请参见使用深度学习提高图像分辨率

金宝app支持功能

函数dataOut = upsampLowRes(dataIn) temp = dataIn;Temp = imresize(Temp,[7,7],“方法”双线性的);dataOut = {imresize(temp,[28,28],“方法”双线性的)};结束

另请参阅

|

相关的话题