使用深度学习从分段图生成图像GydF4y2Ba

此示例显示如何使用PIX2PIXHD条件生成对冲网络(CGAN)从语义分段图生成场景的合成图像。GydF4y2Ba

PIX2PIXHD [GydF4y2Ba1GydF4y2Ba]由两个网络同时培训,以最大化两者的性能。GydF4y2Ba

  1. 发电机是一种编码器 - 解码器样式神经网络,其生成来自语义分段图的场景图像。一个Cgan网站列车发电机生成鉴别者将索拉的场景图像产生真实。GydF4y2Ba

  2. 鉴别器是一种完全卷积的神经网络,其比较生成的场景图像和相应的真实图像,并尝试分别将它们分类为假雄。一个Cgan网络列举鉴别器以正确区分生成和真实的图像。GydF4y2Ba

发电机和鉴别器网络在训练期间相互竞争。训练均不会进一步改善。GydF4y2Ba

下载Camvid数据集GydF4y2Ba

本示例使用GydF4y2BaCamvid数据集GydF4y2Ba[GydF4y2Ba2GydF4y2Ba]来自剑桥大学进行培训。该数据集是包含在驾驶时获得的街道级视图的701张图像的集合。数据集提供了32个语义课程的像素标签,包括汽车,行人和道路。GydF4y2Ba

从这些URL下载Camvid数据集。下载时间取决于您的Internet连接。GydF4y2Ba

imageurl =.GydF4y2Ba“http://web4.cs.ucl.ac.uk/staff/g.brostow/MotionSegRecData/files/701_StillsRaw_full.zip”GydF4y2Ba;LabelURL =.GydF4y2Ba“http://web4.cs.ucl.ac.uk/staff/g.brostow/MotionSegRecData/data/LabeledApproved_full.zip”GydF4y2Ba;datadir = fullfile(tempdir,GydF4y2Ba'camvid'GydF4y2Ba);downloadcamviddata(datadir,imageurl,labelURL);imgdir = fullfile(datadir,GydF4y2Ba“图片”GydF4y2Ba那GydF4y2Ba“701_stillsraw_full”GydF4y2Ba);labeldir = fullfile(Datadir,GydF4y2Ba'标签'GydF4y2Ba);GydF4y2Ba

预处理培训数据GydF4y2Ba

创建一个GydF4y2BaimageageAtastore.GydF4y2Ba将图像存储在Camvid数据集中。GydF4y2Ba

IMDS = IMAGEDATASTORE(IMGDIR);图像= [576 768];GydF4y2Ba

使用帮助函数定义Camvid数据集中的32类的类名称和像素标签IDGydF4y2Badefinecamvid32classesandpixellabelid.GydF4y2Ba.使用辅助功能获取用于Camvid数据集的标准颜色图GydF4y2BaCamvid32ColorMap.GydF4y2Ba.GydF4y2Bahelper函数作为支持文件附加到示例中。金宝appGydF4y2Ba

numclasses = 32;[课程,labelids] = defilecamvid32classesandpixellabelids;CMAP = CAMVID32COLORMAP;GydF4y2Ba

创建一个GydF4y2BaPixellabeldAtastore.GydF4y2Ba存储像素标签图像。GydF4y2Ba

PXDS = PixellabeldAtastore(Labeldir,类,标签ID);GydF4y2Ba

预览像素标签图像和相应的地面真理场景图像。通过使用通过使用的分类标签将标签转换为RGB颜色GydF4y2Balabel2RGB.GydF4y2Ba功能,然后在蒙太奇中显示像素标签图像和地面真相图像。GydF4y2Ba

我=预览(imd);px =预览(pxds);px = label2rgb (px,提出);蒙太奇({px, im})GydF4y2Ba

使用辅助功能将数据分区为培训和测试集GydF4y2Bapartitioncamvidforpix2pixhd.GydF4y2Ba.此函数附加到示例作为支持文件。金宝app辅助功能将数据分成648个培训文件和32个测试文件。GydF4y2Ba

[IMDStrain,IMDSTEST,PXDStrain,PXDSTEST] = partitionCamvidforpix2pixhd(IMDS,PXD,类,LabelIds);GydF4y2Ba

使用GydF4y2Ba结合GydF4y2Ba将像素标记图像和地面真理图像组合成单个数据存储的功能。GydF4y2Ba

dstrain =组合(Pxdstrain,Imdstrain);GydF4y2Ba

通过使用使用培训数据来增加培训数据GydF4y2Ba转变GydF4y2Ba使用辅助功能指定的自定义预处理操作GydF4y2Bapreprocesscamvidforpix2pixhd.GydF4y2Ba.此辅助功能将附加到示例作为支持文件。金宝appGydF4y2Ba

这GydF4y2Bapreprocesscamvidforpix2pixhd.GydF4y2Ba函数执行这些操作:GydF4y2Ba

  1. 将地面真实数据缩放到范围[-1,1]。此范围与决赛的范围匹配GydF4y2BatanhLayerGydF4y2Ba(深度学习工具箱)GydF4y2Ba在发电机网络中。GydF4y2Ba

  2. 使用双臂和最近的邻沿下采样分别将图像和标签调整到网络的输出大小,576×768像素。GydF4y2Ba

  3. 将单通道分段映射转换为32通道单热编码的分段图使用GydF4y2Baonehotencode.GydF4y2Ba(深度学习工具箱)GydF4y2Ba函数。GydF4y2Ba

  4. 在水平方向上随机翻转图像和像素标记对。GydF4y2Ba

dstrain =变换(dstrain,@(x)preprocesscamvidforpix2pixhd(x,图像化));GydF4y2Ba

预览蒙太奇中单热编码分段图的通道。每个通道表示对应于唯一类的像素的单热图。GydF4y2Ba

地图=预览(Dstrain);蒙太奇(地图{1},GydF4y2Ba'尺寸'GydF4y2Ba,[4 8],GydF4y2Ba'毗邻'GydF4y2Ba,5,GydF4y2Ba'背景颜色'GydF4y2Ba那GydF4y2Ba'B'GydF4y2Ba)GydF4y2Ba

创建生成器网络GydF4y2Ba

定义生成器网络,该生成器网络从深度明智的单热编码分段图生成场景图像。此输入具有与原始分割图的高度和宽度相同,以及与类相同的通道数。GydF4y2Ba

generatorInputSize = [iconesize numclasses];GydF4y2Ba

创建初始子网的图层。GydF4y2Ba反射Pad2dlayer.GydF4y2Ba是专门为此示例实现的自定义层。该层附加到示例作为支持文件。金宝appGydF4y2Ba

numfiltersfirstconvlayergenerator = 64;filtersize = [7 7];initialLayers = [GydF4y2Ba......GydF4y2BaimageInputLayer(GeneratorInputSize,GydF4y2Ba'正常化'GydF4y2Ba那GydF4y2Ba“没有”GydF4y2Ba那GydF4y2Ba'姓名'GydF4y2Ba那GydF4y2Ba'InputLayer'GydF4y2Ba)GydF4y2Ba......GydF4y2BareflectionPad2dlayer(3,GydF4y2Ba'ipad'GydF4y2Ba)GydF4y2Ba......GydF4y2BaConvolution2dlayer(过滤,numfiltersfirstconvlayergenerator,GydF4y2Ba'姓名'GydF4y2Ba那GydF4y2Ba'iconv'GydF4y2Ba)GydF4y2Ba......GydF4y2BaGroupnormalizationLayer(GydF4y2Ba'渠道 - 明智'GydF4y2Ba那GydF4y2Ba'姓名'GydF4y2Ba那GydF4y2Ba'IGN'GydF4y2Ba)GydF4y2Ba......GydF4y2BaRululayer(GydF4y2Ba'姓名'GydF4y2Ba那GydF4y2Ba'Irelu'GydF4y2Ba)];GydF4y2Ba

添加下采样子网的层。使用四个下采样卷积层。每个下采样层具有作为先前卷积层的过滤器数量的两倍。GydF4y2Ba

numfilters = numfiltersfirstconvlayeringerator;numdownsamplinglayers = 4;filtersize = [3 3];DownSamplingLayers = [];GydF4y2Ba为GydF4y2BaIDX = 1:NUMDOWNSAMPLINGLAYERSGydF4y2Ba%计算下一个卷积层中的过滤器数量GydF4y2Banumfilters = numfilters * 2;s = int2str(IDX);DownSamplingLayers = [DownSamplingLayersGydF4y2Ba......GydF4y2BaConvolution2Dlayer(过滤,NumFilters,GydF4y2Ba“姓名”GydF4y2Ba,Strcat(GydF4y2Ba“dConv”GydF4y2Ba,s),GydF4y2Ba......GydF4y2Ba“步幅”GydF4y2Ba2,GydF4y2Ba“填充”GydF4y2Ba1)GydF4y2Ba......GydF4y2BaGroupnormalizationLayer(GydF4y2Ba“渠道明智”GydF4y2Ba那GydF4y2Ba'姓名'GydF4y2Ba,Strcat(GydF4y2Ba“DGN”GydF4y2Ba,s))GydF4y2Ba......GydF4y2BaRululayer(GydF4y2Ba'姓名'GydF4y2Ba,Strcat(GydF4y2Ba'德利'GydF4y2Ba,s));GydF4y2Ba结束GydF4y2Ba

从初始子网和下采样子网创建图层图。GydF4y2Ba

Generator = LayerGraph([initialLayers DownSamplingLayers]);GydF4y2Ba

创建残留子网的层。在生成器中指定9个剩余块。第一个残差块中的残差连接位于第一个块的附加层与下采样网络的最后ReLU层之间。后续残留块中的残留连接位于当前块的添加层与前块的添加层之间。GydF4y2Ba

残余卷积层中的过滤器的数量等于最后一个下采样卷积层1024中的滤波器的数量。GydF4y2Ba

numresidualblocks = 9;GydF4y2Ba为GydF4y2Baidx = 1:numresidualblocksGydF4y2Ba%获取充当残差连接源的图层的名称GydF4y2Bares = generator.Layers(END).name;GydF4y2Ba%指定残差块的图层名称GydF4y2Bas = int2str(IDX);convlayer1name = strcat(GydF4y2Ba“rconv”GydF4y2Ba,s,GydF4y2Ba“_1”GydF4y2Ba);convlayer2name = strcat(GydF4y2Ba“rconv”GydF4y2Ba,s,GydF4y2Ba“_2”GydF4y2Ba);gnLayer1Name = strcat (GydF4y2Ba“RGN”GydF4y2Ba,s,GydF4y2Ba“_1”GydF4y2Ba);gnlayer2name = strcat(GydF4y2Ba“RGN”GydF4y2Ba,s,GydF4y2Ba“_2”GydF4y2Ba);pad1name = strcat(GydF4y2Ba“RPAD”GydF4y2Ba,s,GydF4y2Ba“_1”GydF4y2Ba);pad2name = strcat(GydF4y2Ba“RPAD”GydF4y2Ba,s,GydF4y2Ba“_2”GydF4y2Ba);ResidualBlockLayers = [ReflectionPad2Dlayer(1,Pad1name)GydF4y2Ba......GydF4y2BaConvolution2Dlayer(过滤,NumFilters,GydF4y2Ba“姓名”GydF4y2Ba,convlayer1name)GydF4y2Ba......GydF4y2BaGroupnormalizationLayer(GydF4y2Ba'渠道 - 明智'GydF4y2Ba那GydF4y2Ba'姓名'GydF4y2BagnLayer1Name)GydF4y2Ba......GydF4y2BaReflectionPad2dlayer(1,pad2name)GydF4y2Ba......GydF4y2BaConvolution2Dlayer(过滤,NumFilters,GydF4y2Ba“姓名”GydF4y2BaconvLayer2Name)GydF4y2Ba......GydF4y2BaGroupnormalizationLayer(GydF4y2Ba'渠道 - 明智'GydF4y2Ba那GydF4y2Ba'姓名'GydF4y2BagnLayer2Name)GydF4y2Ba......GydF4y2BaRululayer(GydF4y2Ba“姓名”GydF4y2Ba,Strcat(GydF4y2Ba“rrelu”GydF4y2Ba,s))GydF4y2Ba......GydF4y2Ba另外还是(2,GydF4y2Ba'姓名'GydF4y2Ba,Strcat(GydF4y2Ba“radd”GydF4y2Ba,s));GydF4y2Ba%将图层添加到图层图中GydF4y2Balg = addLayers(发电机、residualBlockLayers);发电机= connectLayers (lg、generator.Layers(结束). name, residualBlockLayers (1) . name);GydF4y2Ba%链接残差连接GydF4y2BaGenerator = ConnectLayers(Generator,Res,Strcat(GydF4y2Ba“radd”GydF4y2Ba,s,GydF4y2Ba“/ In2”GydF4y2Ba));GydF4y2Ba结束GydF4y2Ba

创建上采样子网的图层。使用四个上采样的卷积层,与下层层数相同。每个上采样卷积层具有作为先前卷积层的过滤器数量的一半。GydF4y2Ba

为GydF4y2BaIDX = 1:NUMDOWNSAMPLINGLAYERSGydF4y2Ba%计算下一个卷积层中的过滤器数量GydF4y2Banumfilters = numfilters / 2;s = int2str(IDX);UpsamplingLayers = [TransposedConv2dlayer(过滤,NumFilters,GydF4y2Ba“姓名”GydF4y2Ba,Strcat(GydF4y2Ba“uConv”GydF4y2Ba,s),GydF4y2Ba......GydF4y2Ba“步幅”GydF4y2Ba2,GydF4y2Ba“裁剪”GydF4y2Ba那GydF4y2Ba“相同的”GydF4y2Ba)GydF4y2Ba......GydF4y2BaGroupnormalizationLayer(GydF4y2Ba'渠道 - 明智'GydF4y2Ba那GydF4y2Ba'姓名'GydF4y2Ba,Strcat(GydF4y2Ba“uGn”GydF4y2Ba,s))GydF4y2Ba......GydF4y2BaRululayer(GydF4y2Ba'姓名'GydF4y2Ba,Strcat(GydF4y2Ba'Ulelu'GydF4y2Ba,s));];GydF4y2Ba%将上采样层添加到图层图GydF4y2Balg = addlayers(发电机,upsamplinglayers);Generator = ConnectLayers(LG,Generator.Layers(END).name,UpsamplingLayers(1).name);GydF4y2Ba结束GydF4y2Ba

创建最终子网的图层。指定发电机最终卷积层的过滤器大小和滤波器数。最终层是一种双曲线切线层,它在范围内产生激活[-1,1]。GydF4y2Ba

filtersize = [7 7];numfilters = 3;finAllayers = [反射Pad2dlayer(3,GydF4y2Ba'fpad'GydF4y2Ba)GydF4y2Ba......GydF4y2BaConvolution2Dlayer(过滤,NumFilters,GydF4y2Ba'姓名'GydF4y2Ba那GydF4y2Ba“fConv”GydF4y2Ba)GydF4y2Ba......GydF4y2BaTanhlayer(GydF4y2Ba'姓名'GydF4y2Ba那GydF4y2Ba'ftanh'GydF4y2Ba)];GydF4y2Ba

将最终的子网络层添加到层图中。GydF4y2Ba

lg = addlayers(发电机,finallayers);Lggraphenerator = ConnectLayers(LG,Generator.Layers(END).name,finAllayers(1).name);GydF4y2Ba

在绘图中可视化发电机网络。GydF4y2Ba

绘制(LgropGenerator)标题(GydF4y2Ba“发电机”GydF4y2Ba)GydF4y2Ba

要使用自定义训练循环训练网络并启用自动分化,将图层图转换为aGydF4y2Badlnetwork.GydF4y2Ba(深度学习工具箱)GydF4y2Ba目的。GydF4y2Ba

dlnetgenerator = dlnetwork(lgropgenerator);GydF4y2Ba

控件可视化网络架构GydF4y2Ba深网络设计师GydF4y2Ba(深度学习工具箱)GydF4y2Ba应用程序。GydF4y2Ba

DeepNetWorkDesigner(LgropGenerator)GydF4y2Ba

创建鉴别器网络GydF4y2Ba

定义一个鉴别器网络,该网络将输入图像分类为真实(1)或假(0)。GydF4y2Ba

对鉴别器的输入是一个热编码分割图的深度明智的级联和要分类的场景图像。指定输入到鉴别器的通道数量为标记类和图像颜色通道的总数。GydF4y2Ba

NumimageChannels = 3;numchannelsdiscriminator = numclasses + numimagechels;isciminatorinputsize = [图像化NumChannelsDiscriminator];GydF4y2Ba

指定鉴别器的第一个卷积层中的过滤器大小和滤波器数。GydF4y2Ba

filtersize = [4 4];numfilters = 64;GydF4y2Ba

定义鉴别器的层。GydF4y2Ba

discriminator = [imageInputLayer(discriminatorInputSize,GydF4y2Ba“姓名”GydF4y2Ba那GydF4y2Ba“InputLayer”GydF4y2Ba那GydF4y2Ba“归一化”GydF4y2Ba那GydF4y2Ba“没有任何”GydF4y2Ba)卷积2dlayer(过滤,numfilters,GydF4y2Ba“姓名”GydF4y2Ba那GydF4y2Ba“iconv”GydF4y2Ba那GydF4y2Ba......GydF4y2Ba“填充”GydF4y2Ba2,GydF4y2Ba“步幅”GydF4y2Ba,2)漏滤泡(0.2,GydF4y2Ba“姓名”GydF4y2Ba那GydF4y2Ba“lrelu1”GydF4y2Ba)卷积2dlayer(过滤,numfilters * 2,GydF4y2Ba“姓名”GydF4y2Ba那GydF4y2Ba“dconv1”GydF4y2Ba那GydF4y2Ba......GydF4y2Ba“填充”GydF4y2Ba2,GydF4y2Ba“步幅”GydF4y2Ba,2)GroupnormalizationLayer(GydF4y2Ba'渠道 - 明智'GydF4y2Ba那GydF4y2Ba“姓名”GydF4y2Ba那GydF4y2Ba“dgn1”GydF4y2Ba) leakyReluLayer (0.2,GydF4y2Ba“姓名”GydF4y2Ba那GydF4y2Ba“lrelu2”GydF4y2Ba)卷积2dlayer(过滤,numfilters * 4,GydF4y2Ba“姓名”GydF4y2Ba那GydF4y2Ba“dconv2”GydF4y2Ba那GydF4y2Ba......GydF4y2Ba“填充”GydF4y2Ba2,GydF4y2Ba“步幅”GydF4y2Ba,2);GroupnormalizationLayer(GydF4y2Ba'渠道 - 明智'GydF4y2Ba那GydF4y2Ba“姓名”GydF4y2Ba那GydF4y2Ba“DGN2”GydF4y2Ba) leakyReluLayer (0.2,GydF4y2Ba“姓名”GydF4y2Ba那GydF4y2Ba“lrelu3”GydF4y2Ba)卷积2dlayer(过滤,numfilters * 8,GydF4y2Ba“姓名”GydF4y2Ba那GydF4y2Ba“dconv3”GydF4y2Ba那GydF4y2Ba......GydF4y2Ba“填充”GydF4y2Ba,2)GroupnormalizationLayer(GydF4y2Ba'渠道 - 明智'GydF4y2Ba那GydF4y2Ba“姓名”GydF4y2Ba那GydF4y2Ba“dgn3”GydF4y2Ba) leakyReluLayer (0.2,GydF4y2Ba“姓名”GydF4y2Ba那GydF4y2Ba“lrelu4”GydF4y2Ba)卷积2dlayer(过滤,1,GydF4y2Ba“姓名”GydF4y2Ba那GydF4y2Ba“fconv”GydF4y2Ba那GydF4y2Ba......GydF4y2Ba“填充”GydF4y2Ba, 2)];GydF4y2Ba

创建图层图。GydF4y2Ba

LgranceIscriminator = LayerGraph(鉴别器);GydF4y2Ba

可视化图中的鉴别器网络。GydF4y2Ba

plot(Lgraphdiscriminator)标题(GydF4y2Ba“鉴别者”GydF4y2Ba)GydF4y2Ba

要使用自定义训练循环训练网络并启用自动分化,将图层图转换为aGydF4y2Badlnetwork.GydF4y2Ba目的。GydF4y2Ba

dlnetdiscriminator = dlnetwork(lgraphdiscriminator);GydF4y2Ba

控件可视化网络架构GydF4y2Ba深网络设计师GydF4y2Ba(深度学习工具箱)GydF4y2Ba应用程序。GydF4y2Ba

DeepNetWorkDesigner(Lgraphdiscriminator)GydF4y2Ba

定义模型渐变和损耗函数GydF4y2Ba

辅助功能GydF4y2BaMapicalGRADENTERS.GydF4y2Ba计算发电机和鉴别器的梯度和对抗性损失。该功能还计算生成器的特征匹配损耗和VGG损耗。此功能已定义GydF4y2Ba金宝app支持功能GydF4y2Ba这个例子的一部分。GydF4y2Ba

发电机损失GydF4y2Ba

发电机的目的是生成鉴别器将其作为Real(1)分类的图像GydF4y2Ba.GydF4y2Ba发电机损耗包括三个损耗。GydF4y2Ba

  • 对侵害丢失计算为在生成图像的矢量和鉴别器预测之间的平方差异。GydF4y2Ba yGydF4y2Ba 人GydF4y2Ba GGydF4y2Ba E.GydF4y2Ba NGydF4y2Ba E.GydF4y2Ba rGydF4y2Ba 一种GydF4y2Ba tGydF4y2Ba E.GydF4y2Ba D.GydF4y2Ba 是发电机生成的图像上的鉴别器预测。这种损失是使用部分实施的GydF4y2BaPIX2PIXHDADEARIALLOSS.GydF4y2Ba辅助功能定义GydF4y2Ba金宝app支持功能GydF4y2Ba这个例子的一部分。GydF4y2Ba

L.GydF4y2Ba O.GydF4y2Ba 年代GydF4y2Ba 年代GydF4y2Ba 一种GydF4y2Ba D.GydF4y2Ba vGydF4y2Ba E.GydF4y2Ba rGydF4y2Ba 年代GydF4y2Ba 一种GydF4y2Ba rGydF4y2Ba 一世GydF4y2Ba 一种GydF4y2Ba L.GydF4y2Ba GGydF4y2Ba E.GydF4y2Ba NGydF4y2Ba E.GydF4y2Ba rGydF4y2Ba 一种GydF4y2Ba tGydF4y2Ba O.GydF4y2Ba rGydF4y2Ba =GydF4y2Ba (GydF4y2Ba 1GydF4y2Ba -GydF4y2Ba yGydF4y2Ba 人GydF4y2Ba GGydF4y2Ba E.GydF4y2Ba NGydF4y2Ba E.GydF4y2Ba rGydF4y2Ba 一种GydF4y2Ba tGydF4y2Ba E.GydF4y2Ba D.GydF4y2Ba )GydF4y2Ba 2GydF4y2Ba

  • 特征匹配损失受到惩罚GydF4y2Ba L.GydF4y2Ba 1GydF4y2Ba 从鉴别器网络获得的真实特征图与生成特征图之间的距离作为预测。GydF4y2Ba T.GydF4y2Ba 是鉴别器特征层的总数。GydF4y2Ba yGydF4y2Ba rGydF4y2Ba E.GydF4y2Ba 一种GydF4y2Ba L.GydF4y2Ba 和GydF4y2Ba yGydF4y2Ba 人GydF4y2Ba GGydF4y2Ba E.GydF4y2Ba NGydF4y2Ba E.GydF4y2Ba rGydF4y2Ba 一种GydF4y2Ba tGydF4y2Ba E.GydF4y2Ba D.GydF4y2Ba 是地面真理图像和生成的图像。使用该损失使用GydF4y2BaPIX2PIXHDFEATUREMATCHINGLOSS.GydF4y2Ba辅助功能定义GydF4y2Ba金宝app支持功能GydF4y2Ba这个例子的一部分GydF4y2Ba

L.GydF4y2Ba O.GydF4y2Ba 年代GydF4y2Ba 年代GydF4y2Ba FGydF4y2Ba E.GydF4y2Ba 一种GydF4y2Ba tGydF4y2Ba uGydF4y2Ba rGydF4y2Ba E.GydF4y2Ba mGydF4y2Ba 一种GydF4y2Ba tGydF4y2Ba CGydF4y2Ba HGydF4y2Ba 一世GydF4y2Ba NGydF4y2Ba GGydF4y2Ba =GydF4y2Ba σ.GydF4y2Ba 一世GydF4y2Ba =GydF4y2Ba 1GydF4y2Ba T.GydF4y2Ba |GydF4y2Ba |GydF4y2Ba yGydF4y2Ba rGydF4y2Ba E.GydF4y2Ba 一种GydF4y2Ba L.GydF4y2Ba -GydF4y2Ba yGydF4y2Ba 人GydF4y2Ba GGydF4y2Ba E.GydF4y2Ba NGydF4y2Ba E.GydF4y2Ba rGydF4y2Ba 一种GydF4y2Ba tGydF4y2Ba E.GydF4y2Ba D.GydF4y2Ba |GydF4y2Ba |GydF4y2Ba 1GydF4y2Ba

  • 感知损失受到惩罚GydF4y2Ba L.GydF4y2Ba 1GydF4y2Ba 从特征提取网络获得的真实和生成的特征映射之间的距离。GydF4y2Ba T.GydF4y2Ba 为特征层的总数。GydF4y2Ba yGydF4y2Ba V.GydF4y2Ba GGydF4y2Ba GGydF4y2Ba R.GydF4y2Ba E.GydF4y2Ba 一种GydF4y2Ba L.GydF4y2Ba 和GydF4y2Ba yGydF4y2Ba 人GydF4y2Ba V.GydF4y2Ba GGydF4y2Ba GGydF4y2Ba GGydF4y2Ba E.GydF4y2Ba NGydF4y2Ba E.GydF4y2Ba rGydF4y2Ba 一种GydF4y2Ba tGydF4y2Ba E.GydF4y2Ba D.GydF4y2Ba 是用于地面真理图像和生成图像的网络预测。使用该损失使用GydF4y2BaPIX2PIXHDVGGLOSS.GydF4y2Ba辅助功能定义GydF4y2Ba金宝app支持功能GydF4y2Ba这个例子的一部分。特征提取网络是创建的GydF4y2Ba负载特征提取网络GydF4y2Ba.GydF4y2Ba

L.GydF4y2Ba O.GydF4y2Ba 年代GydF4y2Ba 年代GydF4y2Ba V.GydF4y2Ba GGydF4y2Ba GGydF4y2Ba =GydF4y2Ba σ.GydF4y2Ba 一世GydF4y2Ba =GydF4y2Ba 1GydF4y2Ba T.GydF4y2Ba |GydF4y2Ba |GydF4y2Ba yGydF4y2Ba V.GydF4y2Ba GGydF4y2Ba GGydF4y2Ba R.GydF4y2Ba E.GydF4y2Ba 一种GydF4y2Ba L.GydF4y2Ba -GydF4y2Ba yGydF4y2Ba 人GydF4y2Ba V.GydF4y2Ba GGydF4y2Ba GGydF4y2Ba GGydF4y2Ba E.GydF4y2Ba NGydF4y2Ba E.GydF4y2Ba rGydF4y2Ba 一种GydF4y2Ba tGydF4y2Ba E.GydF4y2Ba D.GydF4y2Ba |GydF4y2Ba |GydF4y2Ba 1GydF4y2Ba

发电机的总损失是所有三种损失的加权和。GydF4y2Ba λ.GydF4y2Ba 1GydF4y2Ba 那GydF4y2Ba λ.GydF4y2Ba 2GydF4y2Ba , 和GydF4y2Ba λ.GydF4y2Ba 3.GydF4y2Ba 是对抗性损失,特征匹配损失和感知损失的重量因素。GydF4y2Ba

L.GydF4y2Ba O.GydF4y2Ba 年代GydF4y2Ba 年代GydF4y2Ba GGydF4y2Ba E.GydF4y2Ba NGydF4y2Ba E.GydF4y2Ba rGydF4y2Ba 一种GydF4y2Ba tGydF4y2Ba O.GydF4y2Ba rGydF4y2Ba =GydF4y2Ba λ.GydF4y2Ba 1GydF4y2Ba *GydF4y2Ba L.GydF4y2Ba O.GydF4y2Ba 年代GydF4y2Ba 年代GydF4y2Ba 一种GydF4y2Ba D.GydF4y2Ba vGydF4y2Ba E.GydF4y2Ba rGydF4y2Ba 年代GydF4y2Ba 一种GydF4y2Ba rGydF4y2Ba 一世GydF4y2Ba 一种GydF4y2Ba L.GydF4y2Ba GGydF4y2Ba E.GydF4y2Ba NGydF4y2Ba E.GydF4y2Ba rGydF4y2Ba 一种GydF4y2Ba tGydF4y2Ba O.GydF4y2Ba rGydF4y2Ba +GydF4y2Ba λ.GydF4y2Ba 2GydF4y2Ba *GydF4y2Ba L.GydF4y2Ba O.GydF4y2Ba 年代GydF4y2Ba 年代GydF4y2Ba FGydF4y2Ba E.GydF4y2Ba 一种GydF4y2Ba tGydF4y2Ba uGydF4y2Ba rGydF4y2Ba E.GydF4y2Ba mGydF4y2Ba 一种GydF4y2Ba tGydF4y2Ba CGydF4y2Ba HGydF4y2Ba 一世GydF4y2Ba NGydF4y2Ba GGydF4y2Ba +GydF4y2Ba λ.GydF4y2Ba 3.GydF4y2Ba *GydF4y2Ba L.GydF4y2Ba O.GydF4y2Ba 年代GydF4y2Ba 年代GydF4y2Ba P.GydF4y2Ba E.GydF4y2Ba rGydF4y2Ba CGydF4y2Ba E.GydF4y2Ba P.GydF4y2Ba tGydF4y2Ba uGydF4y2Ba 一种GydF4y2Ba L.GydF4y2Ba

注意,为两个不同的尺度计算发电机的对抗性丢失和特征匹配损耗。GydF4y2Ba

鉴别者损失GydF4y2Ba

鉴别者的目的是正确地区分地面真理图像和生成的图像。鉴别者损失是两个组件的总和:GydF4y2Ba

  • 在真实图像上的鉴别器与鉴别器的预测之间的平方差异GydF4y2Ba

  • 零矢量与生成图像上鉴别器的预测之间的平方差GydF4y2Ba

L.GydF4y2Ba O.GydF4y2Ba 年代GydF4y2Ba 年代GydF4y2Ba D.GydF4y2Ba 一世GydF4y2Ba 年代GydF4y2Ba CGydF4y2Ba rGydF4y2Ba 一世GydF4y2Ba mGydF4y2Ba 一世GydF4y2Ba NGydF4y2Ba 一种GydF4y2Ba tGydF4y2Ba O.GydF4y2Ba rGydF4y2Ba =GydF4y2Ba (GydF4y2Ba 1GydF4y2Ba -GydF4y2Ba yGydF4y2Ba rGydF4y2Ba E.GydF4y2Ba 一种GydF4y2Ba L.GydF4y2Ba )GydF4y2Ba 2GydF4y2Ba +GydF4y2Ba (GydF4y2Ba 0.GydF4y2Ba -GydF4y2Ba yGydF4y2Ba 人GydF4y2Ba GGydF4y2Ba E.GydF4y2Ba NGydF4y2Ba E.GydF4y2Ba rGydF4y2Ba 一种GydF4y2Ba tGydF4y2Ba E.GydF4y2Ba D.GydF4y2Ba )GydF4y2Ba 2GydF4y2Ba

鉴别器损耗采用部分GydF4y2BaPIX2PIXHDADEARIALLOSS.GydF4y2Ba辅助功能定义GydF4y2Ba金宝app支持功能GydF4y2Ba这个例子的一部分。注意,为两个不同的尺度计算鉴别器的对抗丧失损失。GydF4y2Ba

负载特征提取网络GydF4y2Ba

此示例修改佩带的VGG-19深神经网络以在各个层中提取真实和生成的图像的特征。这些多层特征用于计算发电机的感知损失。GydF4y2Ba

获取佩带的VGG-19网络,安装GydF4y2Bavgg19.GydF4y2Ba(深度学习工具箱)GydF4y2Ba.如果您没有安装所需的支持包,则软件提供了下载链接。金宝appGydF4y2Ba

netvgg = vgg19;GydF4y2Ba

控件可视化网络架构GydF4y2Ba深网络设计师GydF4y2Ba(深度学习工具箱)GydF4y2Ba应用程序。GydF4y2Ba

DeepNetWorkDesigner(NetVGG)GydF4y2Ba

为了使适用于特征提取的VGG-19网络,将图层保持为“池5”并从网络中删除所有完全连接的图层。得到的网络是完全卷积的网络。GydF4y2Ba

netvgg = layergraph(netvgg.layers(1:38));GydF4y2Ba

创建一个没有归一化的新图像输入层。用新图层替换原始图像输入层。GydF4y2Ba

INP = ImageInputLayer([象限3],GydF4y2Ba“归一化”GydF4y2Ba那GydF4y2Ba“没有任何”GydF4y2Ba那GydF4y2Ba“姓名”GydF4y2Ba那GydF4y2Ba“输入”GydF4y2Ba);netvgg = replaceLayer(netvgg,GydF4y2Ba“输入”GydF4y2Ba,输入);netVGG = dlnetwork (netVGG);GydF4y2Ba

指定培训选项GydF4y2Ba

指定ADAM优化选项。火车60时代。为生成器和鉴别器网络指定相同选项。GydF4y2Ba

  • 指定平等的学习率为0.0002。GydF4y2Ba

  • 初始化尾随平均梯度和尾随平均梯度平方衰减率GydF4y2Ba[]GydF4y2Ba.GydF4y2Ba

  • 使用0.5的梯度衰减率和平方梯度衰减因子为0.999。GydF4y2Ba

  • 使用1个小批量进行培训。GydF4y2Ba

numepochs = 60;学会= 0.0002;trailingavggenerator = [];trailingavgsqgenerator = [];trailingavgdiscriminator = [];trailingavgsqdiscriminator = [];梯度Dayfactor = 0.5;squaredgradientdecayfactor = 0.999;minibatchsize = 1;GydF4y2Ba

创建一个GydF4y2Ba小公子GydF4y2Ba(深度学习工具箱)GydF4y2Ba在自定义训练循环中管理迷你批次观察的对象。GydF4y2Ba这GydF4y2Ba小公子GydF4y2Ba对象还将数据强制转换为GydF4y2BadlarrayGydF4y2Ba(深度学习工具箱)GydF4y2Ba在深度学习应用程序中实现自动差异的对象。GydF4y2Ba

指定迷你批量数据提取格式为GydF4y2BaSSCB.GydF4y2Ba(空间,空间,频道,批量)。设定GydF4y2BaDisparctinBackground.GydF4y2Ba名称 - 值对参数作为布尔返回的GydF4y2BacanUseGPUGydF4y2Ba.如果支持的金宝appGPU可用于计算,那么GydF4y2Ba小公子GydF4y2Ba对象在训练期间,在并行池中的背景中预处理迷你批次。GydF4y2Ba

mbqtrain = minibatchqueue(Dstrain,GydF4y2Ba“迷你atchsize”GydF4y2Ba,小匹马,GydF4y2Ba......GydF4y2Ba“minibatchformat”GydF4y2Ba那GydF4y2Ba“SSCB”GydF4y2Ba那GydF4y2Ba“disparctinbackground”GydF4y2Ba,canusegpu);GydF4y2Ba

训练网络GydF4y2Ba

默认情况下,示例通过使用帮助函数下载PIX2PIXHD网络的PIX2PIXHD网络的预磨版本GydF4y2Badownloadtraindroudpix2pixhdnet.GydF4y2Ba.helper函数作为支持文件附加到示例中。金宝app预先训练过的网络使您无需等待训练完成就可以运行整个示例。GydF4y2Ba

要训练网络,设置GydF4y2BadoTrainingGydF4y2Ba以下代码中的变量GydF4y2Ba真的GydF4y2Ba.在自定义训练循环中训练模型。每一次迭代:GydF4y2Ba

  • 使用该数据读取当前迷你批次的数据GydF4y2Ba下一个GydF4y2Ba(深度学习工具箱)GydF4y2Ba函数。GydF4y2Ba

  • 使用该评估模型梯度GydF4y2Badlfeval.GydF4y2Ba(深度学习工具箱)GydF4y2Ba功能和GydF4y2BaMapicalGRADENTERS.GydF4y2Ba帮手功能。GydF4y2Ba

  • 使用GydF4y2Baadamupdate.GydF4y2Ba(深度学习工具箱)GydF4y2Ba函数。GydF4y2Ba

  • 更新每次迭代的培训进度图并显示各种计算损耗。GydF4y2Ba

强烈建议使用具有计算能力3.0或更高的CUDA的NVIDIA™GPU进行培训(需要并行计算工具箱™)。NVIDIA™Titan RTX培训大约需要22小时,具体取决于您的GPU硬件。如果您的GPU设备具有较少的内存,请尝试通过指定输入图像的大小GydF4y2Ba图片尺寸GydF4y2Ba变量为[480 640]GydF4y2Ba预处理培训数据GydF4y2Ba该示例的部分。GydF4y2Ba

dotraining = false;GydF4y2Ba如果GydF4y2Badotrain nutrained fig =图;WordPlotter = ConfiguretringProgressplotter(图);迭代= 0;GydF4y2Ba%循环epochsGydF4y2Ba为GydF4y2Baepoch = 1:numepochsGydF4y2Ba%重置并抽沙抖动数据GydF4y2Ba重置(MBQTrain);洗牌(MBQTrain);GydF4y2Ba%循环遍历每个图像GydF4y2Ba尽管GydF4y2BaHasdata(MBQTrain)迭代=迭代+ 1;GydF4y2Ba%读取数据来自当前迷你批处理GydF4y2Ba[dlinputsegmap,dlrealimage] =下一个(mbqtrain);GydF4y2Ba%使用Model梯度和发电机状态进行评估GydF4y2Ba%dlfeval和ganloss函数在结束时列出GydF4y2Ba% 例子GydF4y2Ba[GradParamsg,GradParamsd,Lockgan,损失,损失,损失] = DLFeval(GydF4y2Ba......GydF4y2Ba@ Maposgradients,Dlinputsegmap,DlRealimage,DlnetGenerator,DLNetDiscriminator,NetVGG);GydF4y2Ba%更新生成器参数GydF4y2Ba[dlnetgenerator,trailingavggenerator,trailingavgsqgenerator] = adamupdate(GydF4y2Ba......GydF4y2BaDlnetgenerator,GradParamsg,GydF4y2Ba......GydF4y2BaTrailighavggenerator,trailighavgsqgenerator,迭代,GydF4y2Ba......GydF4y2Ba学会,梯度Dayfactor,SquaredgradientDecayfactor);GydF4y2Ba%更新鉴别器参数GydF4y2Ba[dlnetdiscriminator,trailingavgdiscriminator,trailingavgsqdiscriminator] = adamupdate(GydF4y2Ba......GydF4y2BadlnetDiscriminator gradParamsD,GydF4y2Ba......GydF4y2BatrailingAvgDiscriminator trailingAvgSqDiscriminator,迭代,GydF4y2Ba......GydF4y2Ba学会,梯度Dayfactor,SquaredgradientDecayfactor);GydF4y2Ba%绘图并显示各种损失GydF4y2BaWordplotter = UpdateTrousingProgressplotter(导热器,迭代,GydF4y2Ba......GydF4y2Baepoch,numochs,lossggan,损失,损失,损失);GydF4y2Ba结束GydF4y2Ba结束GydF4y2Ba保存(GydF4y2Ba'trouspix2pixhdnet.mat'GydF4y2Ba那GydF4y2Ba'dlnetgenerator'GydF4y2Ba);GydF4y2Ba其他的GydF4y2Batrouspix2pixhdnet_url =.GydF4y2Ba“https://ssd.mathworks.com/金宝appsupportfiles/vision/data/trainedPix2PixHDNet.zip”GydF4y2Ba;netdir = fullfile(tempdir,GydF4y2Ba'camvid'GydF4y2Ba);downloadTrainedPix2PixHDNet (trainedPix2PixHDNet_url netDir);负载(fullfile (netDirGydF4y2Ba'trouspix2pixhdnet.mat'GydF4y2Ba));GydF4y2Ba结束GydF4y2Ba

评估生成的测试数据的图像GydF4y2Ba

此培训的PIX2PIXHD网络的性能受到限制,因为CAMVID训练图像的数量相对较小。另外,一些图像属于图像序列,因此与训练集中的其他图像相关联。为了提高PIX2PIXHD网络的有效性,使用具有较大数量的训练图像而没有相关的数据集训练网络。GydF4y2Ba

由于限制,该PIX2PIXHD网络为某些测试图像产生比其他特定图像更现实的图像。为了展示结果的差异,比较第一和第三测试图像的所生成的图像。第一测试图像的相机角度具有罕见的有利位置,其面上比典型的训练图像更垂直于道路。相反,第三种测试图像的相机角度具有沿着道路面向的典型的有利点,并显示两个带有车道标记的车道。该网络具有显着更好的性能,为第三测试图像产生比对于第一测试图像的现实图像。GydF4y2Ba

从测试数据中获取第一个地面真理场景图像。使用Bicubic插值调节图像大小。GydF4y2Ba

iDxtotest = 1;gtimage = ReadImage(IMDSTEST,IDXTOTEST);gtimage = imresize(gtimage,图像,GydF4y2Ba“双方”GydF4y2Ba);GydF4y2Ba

从测试数据中获取相应的像素标签图像。使用最近邻插值调整像素标签图像的大小。GydF4y2Ba

segmap = ReadImage(PXDSTEST,IDXTOTEST);segmap = imresize(segmap,imagesize,GydF4y2Ba“最近”GydF4y2Ba);GydF4y2Ba

通过使用“将像素标签图像转换为多声道单个热分段映射GydF4y2Baonehotencode.GydF4y2Ba(深度学习工具箱)GydF4y2Ba函数。GydF4y2Ba

segMap1Hot = onehotencode (segMap 3GydF4y2Ba'单身的'GydF4y2Ba);GydF4y2Ba

创建一个GydF4y2BadlarrayGydF4y2Ba将数据输入到生成器的对象。如果支持的金宝appGPU可用于计算,则通过将数据转换为GPU对GPU进行推断GydF4y2BaGPUArray.GydF4y2Ba目的。GydF4y2Ba

dlsegmap = dlarray(segmap1hot,GydF4y2Ba'SSCB'GydF4y2Ba);GydF4y2Ba如果GydF4y2Bacanusegpu dlsegmap = gpuarray(dlsegmap);GydF4y2Ba结束GydF4y2Ba

从生成器生成一个场景图像和一个热分割地图使用GydF4y2Ba预测GydF4y2Ba(深度学习工具箱)GydF4y2Ba函数。GydF4y2Ba

dlgeneratedImage =预测(Dlnetgenerator,Dlsegmap);ConsigationImage = ExtractData(收集(DLGeneratedImage));GydF4y2Ba

发电机网络的最后一层产生范围为[- 1,1]的激活。为了显示,重新缩放激活到范围[0,1]。GydF4y2Ba

babledimage = Rescale(ConsigationImage);GydF4y2Ba

要显示,请通过使用该标签将标签从分类标签转换为RGB颜色GydF4y2Balabel2RGB.GydF4y2Ba函数。GydF4y2Ba

COMORYSEGMAP = LABEL2RGB(SEGMAP,CMAP);GydF4y2Ba

在蒙太奇中显示RGB像素标签图像,生成的场景图像和地面真理场景图像。GydF4y2Ba

图蒙太奇({ColorigSegMap DightageImage GTImage},GydF4y2Ba'尺寸'GydF4y2Ba3[1])标题([GydF4y2Ba'测试像素标签图像'GydF4y2Ba,num2str(iDxtotest),GydF4y2Ba'与生成和地面真相场景图像'GydF4y2Ba])GydF4y2Ba

从测试数据中获取第三个地面真理场景图像。使用Bicubic插值调节图像大小。GydF4y2Ba

iDxtotest = 3;gtimage = ReadImage(IMDSTEST,IDXTOTEST);gtimage = imresize(gtimage,图像,GydF4y2Ba“双方”GydF4y2Ba);GydF4y2Ba

要从测试数据中获得第三个像素标签图像并生成相应的场景图像,可以使用helper函数GydF4y2BaevaluatePix2pixhd.GydF4y2Ba.此辅助功能将附加到示例作为支持文件。金宝appGydF4y2Ba

这GydF4y2BaevaluatePix2pixhd.GydF4y2Ba函数执行与第一个测试图像的评估相同的操作:GydF4y2Ba

  • 从测试数据获取像素标签图像。使用最近邻插值调整像素标签图像的大小。GydF4y2Ba

  • 将像素标签图像转换为多通道单个热分段图。GydF4y2Ba

  • 创建一个GydF4y2BadlarrayGydF4y2Ba对象将数据输入到生成器。对于GPU推理,将数据转换为aGydF4y2BaGPUArray.GydF4y2Ba目的。GydF4y2Ba

  • 从生成器生成一个场景图像和一个热分割地图使用GydF4y2Ba预测GydF4y2Ba(深度学习工具箱)GydF4y2Ba函数。GydF4y2Ba

  • 将激活重新归类为范围[0,1]。GydF4y2Ba

[ConsigationImage,SegMap] = EvaluePix2PixHD(PXDSTEST,IDXTOT,ImageIze,DLNETGENERATOR);GydF4y2Ba

要显示,请通过使用该标签将标签从分类标签转换为RGB颜色GydF4y2Balabel2RGB.GydF4y2Ba函数。GydF4y2Ba

COMORYSEGMAP = LABEL2RGB(SEGMAP,CMAP);GydF4y2Ba

在蒙太奇中显示RGB像素标签图像,生成的场景图像和地面真理场景图像。GydF4y2Ba

图蒙太奇({ColorigSegMap DightageImage GTImage},GydF4y2Ba'尺寸'GydF4y2Ba3[1])标题([GydF4y2Ba'测试像素标签图像'GydF4y2Ba,num2str(iDxtotest),GydF4y2Ba'与生成和地面真相场景图像'GydF4y2Ba])GydF4y2Ba

评估自定义像素标签图像的生成的图像GydF4y2Ba

为了评估网络对CamVid数据集之外的像素标签图像的推广效果,可以从自定义像素标签图像生成场景图像。属性创建的像素标签图像GydF4y2Ba图像贴标器GydF4y2Ba像素标签图像作为支持文件附加到示例中。金宝app没有地面真实图像可用。GydF4y2Ba

创建一个像素标签数据存储,读取并处理当前示例目录中的像素标签图像。GydF4y2Ba

cpxds = pixellabeldataStore(pwd,classes,labelids);GydF4y2Ba

对于数据存储中的每个像素标签图像,使用辅助功能生成场景图像GydF4y2BaevaluatePix2pixhd.GydF4y2Ba.GydF4y2Ba

为GydF4y2Baidx = 1:长度(cpxds.files)GydF4y2Ba%得到像素标签图像和生成的场景图像GydF4y2Ba[CONACTIANTIMAGE,SEGMAP] = EVALUEDPIX2PIXHD(CPXD,IDX,图像,DLNETGENERATOR);GydF4y2Ba%为了显示,将标签从分类标签转换为RGB颜色GydF4y2BaCOMENTSGMAP = LABEL2RGB(SEGMAP);GydF4y2Ba%显示像素标签图像并在蒙太奇中生成的场景图像GydF4y2Ba图蒙太奇({coloredsgmap生成agage})标题([GydF4y2Ba'自定义像素标签图像'GydF4y2Ba,num2str(IDX),GydF4y2Ba'和生成的场景图像'GydF4y2Ba])GydF4y2Ba结束GydF4y2Ba

金宝app支持功能GydF4y2Ba

模型梯度函数GydF4y2Ba

这GydF4y2BaMapicalGRADENTERS.GydF4y2Ba辅助功能计算发电机和鉴别器的梯度和对抗性损失。该功能还计算生成器的特征匹配损耗和VGG损耗。GydF4y2Ba

功能GydF4y2Ba[GradParamsg,GradParamsd,LockGan,损失,损失,亏损] = ModelGRADENTERS(InputseGMAP,Realimage,Generator,鉴别器,NetVGG)GydF4y2Ba在给定输入语义地图给出由发电机生成的图像计算GydF4y2Ba生成icage =前进(生成器,Inputsegmap);GydF4y2Ba%定义了损耗重量GydF4y2Balambdadiscriminator = 1;lambdagenerator = 1;lambdafeaturematching = 5;lambdavgg = 5;GydF4y2Ba%连接到分类的图像和语义地图GydF4y2BaInpdiscriminatorreal =猫(3,Inputsegmap,Temimage);InpdIscriminatorgenerated = CAT(3,Inputsegmap,DigationImage);GydF4y2Ba%计算鉴别器和发电机的对抗性损失。GydF4y2Ba[DLOSSSCALE1,GLOSSSCALE1,REALPREDSCALE1D,FakePREDSCale1G] = PIX2PIXHDADERIALLOSS(INPDISCRIMINATORELAL,INPDISCRIMININATORGERATED,鉴别器);GydF4y2Ba%将生成的图像、真实图像和输入的语义映射进行缩放GydF4y2Ba% 一半大小GydF4y2Baresizedrealimage = dlresize(真实真期,GydF4y2Ba'规模'GydF4y2Ba,0.5,GydF4y2Ba'方法'GydF4y2Ba那GydF4y2Ba“线性”GydF4y2Ba);调整大小的generatedImage = dlresize(生成模拟,GydF4y2Ba'规模'GydF4y2Ba,0.5,GydF4y2Ba'方法'GydF4y2Ba那GydF4y2Ba“线性”GydF4y2Ba);resizeIzputsegmap = dlresize(Inputsegmap,GydF4y2Ba'规模'GydF4y2Ba,0.5,GydF4y2Ba'方法'GydF4y2Ba那GydF4y2Ba“最近”GydF4y2Ba);GydF4y2Ba%连接到分类的图像和语义地图GydF4y2BaInpdiscriminatorreal = Cat(3,ResizeIzputsegmap,Resizedrealimage);Inpdiscriminatorgenerated =猫(3,ResizeIzputsegmap,ResizGeneratedImap);GydF4y2Ba%计算鉴别器和发电机的对抗性损失GydF4y2Ba[DlossScale2,GlossScale2,RealPredScale2D,FakePredscale2g] = PIX2PIXHDADERIALLOSS(INPDISCRIMINATORELAL,INPDISCRIMININATORGERATED,鉴别者);GydF4y2Ba%计算规模1的特征匹配丢失GydF4y2Bafmlossscale1 = PIX2PIXHDFEATUREMATCHINGLOSS(RealPredscale1d,fakepredscale1g);fmlossscale1 = fmlossscale1 * lambdafeaturematching;GydF4y2Ba%计算规模2的特征匹配损失GydF4y2Bafmlossscale2 = PIX2PIXHDFEATUREMATCHINGLOSS(RealPredScale2D,FakePredscale2g);fmlossscale2 = fmlossscale2 * lambdafeaturematching;GydF4y2Ba%计算VGG丢失GydF4y2Bavggloss = PIX2PIXHDVGGLOSS(Realimage,ConsigationImage,NetVGG);vggloss = vggloss * lambdavgg;GydF4y2Ba%计算组合的发电机损耗GydF4y2BalossGCombined = GLossScale1 + GLossScale2 + FMLossScale1 + FMLossScale2 + VGGLoss;lossGCombined = lossGCombined * lambdaGenerator;GydF4y2Ba%为生成器计算梯度GydF4y2BagradParamsG = dlgradient (lossGCombined generator.Learnables);GydF4y2Ba%计算组合鉴别器损耗GydF4y2BalossDCombined = (DLossScale1 + DLossScale2)/2 * lambdadiscriator;GydF4y2Ba鉴别器的%计算梯度GydF4y2BaGradParamsd = Dlgradient(LockDcombined,鉴别者.Learnables);GydF4y2Ba%记录这些值,以便稍后显示GydF4y2BalossD =收集(extractdata (lossDCombined));lossGGAN = gather(extractdata(GLossScale1 + GLossScale2));lossGFM = gather(extractdata(FMLossScale1 + FMLossScale2));lossGVGG =收集(extractdata (VGGLoss));GydF4y2Ba结束GydF4y2Ba

敌对的损失函数GydF4y2Ba

辅助功能GydF4y2BaPIX2PIXHDADVERSLOSS.GydF4y2Ba计算发电机和鉴别器的对抗性损失梯度。该函数还返回真实图像和合成图像的特征映射。GydF4y2Ba

功能GydF4y2Ba[DLOSS,GLOSS,REALPREDFTRSD,GENPREDFTRSG] = PIX2PIXHDADERIALLOSS(INPREAL,INPGENERATED,鉴别器)GydF4y2Ba%包含特征映射的标识符层名称GydF4y2BaFeatureNames = {GydF4y2Ba'lrelu1'GydF4y2Ba那GydF4y2Ba'lrelu2'GydF4y2Ba那GydF4y2Ba'lrelu3'GydF4y2Ba那GydF4y2Ba'lrelu4'GydF4y2Ba那GydF4y2Ba“fConv”GydF4y2Ba};GydF4y2Ba%从鉴别器获取真实图像的特征映射GydF4y2Barealpredftrsd = cell(size(featureNames));[realpredftrsd {:}] =前进(鉴别器,inpreal,GydF4y2Ba“产出”GydF4y2Ba, featureNames);GydF4y2Ba%从鉴别器获取生成的图像的特征映射GydF4y2BaGenpredFtrsd = Cell(大小(特色名称));[GenpredFtrsd {:}] =前进(鉴别器,inpenerated,GydF4y2Ba“产出”GydF4y2Ba, featureNames);GydF4y2Ba%从最终图层获取要素映射以计算丢失GydF4y2Barealpredd = realpredftrsd {end};Genpredd = GenPredFtrsd {END};GydF4y2Ba%计算鉴别器损耗GydF4y2Badloss =(1  -  RealPredd)。^ 2 +(Genpredd)。^ 2;dloss =卑鄙(dloss,GydF4y2Ba“全部”GydF4y2Ba);GydF4y2Ba%计算发电机丢失GydF4y2Bagenpredftrsg = cell(size(featureNames));[GenpredFtrsg {:}] =前进(鉴别器,inpenerated,GydF4y2Ba“产出”GydF4y2Ba, featureNames);genpredg = genpredftrsg {end};光泽=(1  -  Genpredg)。^ 2;gloss =意思(光泽,GydF4y2Ba“全部”GydF4y2Ba);GydF4y2Ba结束GydF4y2Ba

功能匹配损耗功能GydF4y2Ba

辅助功能GydF4y2BaPIX2PIXHDFEATUREMATCHINGLOSS.GydF4y2Ba计算真实图像和发电机生成的合成图像之间的特征匹配丢失。GydF4y2Ba

功能GydF4y2Bafeaturematchingloss = pix2pixhdfeaturematchingloss(realpredftrs,genpredftrs)GydF4y2Ba%的功能数量GydF4y2Banumftrsmaps = numel(realpredftrs);GydF4y2Ba%初始化特征匹配丢失GydF4y2Bafeaturematchingloss = 0;GydF4y2Ba为GydF4y2Bai = 1:numftrsmapsGydF4y2Ba%获取真实图像的特征映射GydF4y2Baa =提取数据(RealPredFtrs {i});GydF4y2Ba%获取合成图像的特征映射GydF4y2Bab = genpredftrs {i};GydF4y2Ba%计算功能匹配损失GydF4y2Bafeaturematchingloss = featurematchingloss +意思(abs(a  -  b),GydF4y2Ba“全部”GydF4y2Ba);GydF4y2Ba结束GydF4y2Ba结束GydF4y2Ba

感知VGG损失功能GydF4y2Ba

辅助功能GydF4y2BaPIX2PIXHDVGGLOSS.GydF4y2Ba计算真实图像和由发电机生成的合成图像之间的感知VGG丢失。GydF4y2Ba

功能GydF4y2Bavggloss = PIX2PIXHDVGGLOSS(Realimage,ConsigationImage,NetVGG)功能重量= [1.0 / 32 1.0 / 16 1.0 / 8 1.0 / 4 1.0];GydF4y2Ba%初始化VGG丢失GydF4y2Bavggloss = 0;GydF4y2Ba%指定具有所需特征映射的图层的名称GydF4y2BaFeatureNames = [GydF4y2Ba“relu1_1”GydF4y2Ba那GydF4y2Ba“relu2_1”GydF4y2Ba那GydF4y2Ba“relu3_1”GydF4y2Ba那GydF4y2Ba“relu4_1”GydF4y2Ba那GydF4y2Ba“relu5_1”GydF4y2Ba];GydF4y2Ba%提取真实图像的特征图GydF4y2Baactivreal = cell(size(featureNames));[activreal {:}] =前进(netvgg,treemage,GydF4y2Ba“产出”GydF4y2Ba, featureNames);GydF4y2Ba%提取合成图像的特征映射GydF4y2BaActivGeerated = Cell(大小(特色));[activenerated {:}] =前进(netvgg,digationImage,GydF4y2Ba“产出”GydF4y2Ba, featureNames);GydF4y2Ba%计算VGG丢失GydF4y2Ba为GydF4y2Bai = 1:numel(featureNames)vggloss = vggloss + featuge重量(i)*均值(abs(accreal {i}  -  activgenerated {i}),GydF4y2Ba“全部”GydF4y2Ba);GydF4y2Ba结束GydF4y2Ba结束GydF4y2Ba

参考GydF4y2Ba

[1]王,廷春,明宇刘,朱艳朱,安德鲁陶,Jan Kautz和Bryan Catanzaro。“用条件GANS的高分辨率图像合成和语义操作。”在GydF4y2Ba2018年IEEE / CVF计算机视觉和模式识别GydF4y2Ba, 8798 - 8807年,2018年。https://doi.org/10.1109/CVPR.2018.00917。GydF4y2Ba

[2]荆棘,加布里埃尔J.,Julien Fauuaryur和Roberto Cipolla。“视频中的语义对象类:高清地面真相数据库。”GydF4y2Ba模式识别字母GydF4y2Ba.卷。30,第2,2009号,第88-97页。GydF4y2Ba

另请参阅GydF4y2Ba

|GydF4y2Ba|GydF4y2Ba|GydF4y2Ba|GydF4y2Ba(深度学习工具箱)GydF4y2Ba|GydF4y2Ba(深度学习工具箱)GydF4y2Ba|GydF4y2Ba(深度学习工具箱)GydF4y2Ba

相关话题GydF4y2Ba