主要内容

深网络设计师的图像到图像回归

此示例显示如何使用深网络设计器构建和培训用于超分辨率的图像到图像回归网络。

空间分辨率是用于构造数字图像的像素数。具有高空间分辨率的图像由更大量的像素组成,因此图像包含更详细的图像。超级分辨率是作为输入低分辨率图像并将其提升为更高分辨率图像的过程。使用图像数据时,您可能会降低空间分辨率以减少数据的成本,以降低数据的大小。要恢复此丢失的信息,您可以培训深度学习网络以预测图像的缺失细节。在此示例中,您从被压缩到7×7像素的图像中恢复28乘28像素图像。

加载数据

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

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

datafolder = fullfile(toolboxdir('nnet'),'nndemos''nndatasets''digitdataset');imds = imagedataStore(DataFolder,......'upplyubfolders',真的,......'labelsource''foldernames');

使用洗牌在培训之前将数据进行洗牌。

IMDS = Shuffle(IMDS);

使用spliteachlabel.函数将图像数据存储划分为包含图像以进行培训,验证和测试的图像的三个图像数据存储。

[IMDStrain,IMDSVAL,IMDSTEST] = SpliteachLabel(IMDS,0.7,0.15,0.15,'随机');

将每个图像中的数据标准化到范围[0,1]。标准化有助于使用梯度下降稳定和加速网络培训。如果您的数据缩放得差,则损耗可以成为NaN,网络参数在训练期间可以发散。

IMDStrain =变换(IMDStrain,@(x)Rescale(x));IMDSVAL =变换(IMDSVAL,@(x)RESCALE(X));IMDSTEST =变换(IMDSTEST,@(x)RESCALE(x));

生成培训数据

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

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

使用辅助功能生成输入数据Upsamplowres.,它使用imresize产生更低的分辨率图像。

imdsinputtrain =变换(Imdstrain,@ upsamplowres);imdsinputval = transform(imdsval,@ upsamplowres);IMDSInputtest = Transform(IMDStest,@ Upsamplowres);

使用结合功能将低分辨率和高分辨率图像组合成单个数据存储。输出结合功能是A.ConventDatastore.目的。

dstrain =组合(Imdsinputtrain,Imdstrain);dsval =组合(IMDSInputval,IMDSVal);dstest =组合(Imdsinputtest,Indstest);

创建网络架构

使用该创建网络架构单层计算机Vision Toolbox™功能。该函数提供适合于语义分割的网络,其可以很容易地适应图像到图像回归。

创建具有输入大小28-28×1像素的网络。

层=未凝固([28,28,1],2,'ercoderdepth',2);

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

DeepNetWorkDesigner(层);

在里面设计师窗格,用来自的回归层替换Softmax和像素分类图层图书馆库

选择最终的卷积层并设置numfilters.财产1

网络现在已准备好进行培训。

进口数据

将培训和验证数据导入深网络设计师。

在里面数据选项卡,单击进口数据>导入数据存储并选择Dstrain作为培训数据和dsval.作为验证数据。单击导入两个数据存储进口

深度网络设计器显示组合数据存储中的图像对。左侧上升的低分辨率输入图像,原始高分辨率响应图像右侧。网络了解如何在输入和响应图像之间映射。

火车网络

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

在里面训练选项卡,选择培训选择。来自求解器列表,选择亚当。放Maxepochs.10.。点击确认培训选项关闭

点击培训在组合数据存储上的网络火车

由于网络了解如何在两个图像之间映射验证根均方误差(RMSE)减小。

一旦培训完成,请单击出口将培训的网络导出到工作区。训练有素的网络存储在变量中训练网络_1.

测试网络

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

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

Ypred =预测(训练网络_1,dstest);为了i = 1:8 I(1:2,i)=读(DSTEST);i(3,i)= {ypred(:,:,:,i)};结尾

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

子图(1,3,1)imshow(imtile(i(1,:),'gridsize',[8,1]))标题('输入')子图(1,3,2)imshow(imtile(i(3,:),'gridsize',[8,1]))标题('预测')子图(1,3,3)imshow(imtile(i(2,:),'gridsize',[8,1]))标题('回复'的)

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

在此示例中的网络非常简单且高度定制到数字数据集。有关用于为日常图像创建更复杂的图像到图像回归网络的示例,请参阅单幅图像超分辨率使用深度学习

金宝app支持功能

功能dataout = upsamplowres(数据)temp =日期;temp = imresize(temp,[7,7],'方法''双线性');dataout = {imresize(temp,[28,28],'方法''双线性')};结尾

也可以看看

|

相关话题