主要内容

自定义像素分类层和特沃斯基的损失

这个例子显示了如何定义和创建一个自定义像素分类层使用特沃斯基的损失。

这一层可以使用语义分割训练网络。想要了解更多关于创建自定义深度学习层,明白了定义定制的深度学习层(深度学习工具箱)

特沃斯基损失

特沃斯基损失是基于Tversky指数测量两个分割图像重叠(1]。特沃斯基指数 “透明国际” c 在一个图像 Y 和相应的地面实况 T 是由

“透明国际” c = = 1 Y 厘米 T 厘米 = 1 Y 厘米 T 厘米 + α = 1 Y 厘米 T c + β = 1 Y c T 厘米

  • c 对应于类和 c 对应于在课堂上不是 c

  • 是在前两个维度的元素数量的 Y

  • α β 权重因素控制假阳性和假阴性的贡献使每个类的损失。

损失 l 类的数量 C 是由

l = c = 1 C 1 - - - - - - “透明国际” c

分类层模板

分类层模板复制到一个新文件在MATLAB®。这个模板轮廓的结构分类层和包含功能定义层的行为。其他的例子显示了如何完成tverskyPixelClassificationLayer

classdeftverskyPixelClassificationLayer < nnet.layer.ClassificationLayer属性%可选属性结束方法函数损失= forwardLoss(层,Y, T)%层转发损失函数结束结束结束

声明层属性

默认情况下,自定义输出层有以下属性:

  • 的名字——层名称,指定为一个特征向量或字符串标量。包括这一层一层图,您必须指定一个非空的独特的层的名字。如果你训练一系列网络与这一层的名字被设置为,然后在训练时软件自动分配一个名称。

  • 描述——一行的描述层,指定为一个特征向量或字符串标量。这个描述层显示在一个时出现数组中。如果你不指定层的描述,然后软件显示层的类名。

  • 类型层类型,指定为一个特征向量或字符串标量。的价值类型当层显示在一个出现数组中。如果你不指定层类型,那么软件显示“分类层”“回归层”

自定义分类层也有以下属性:

  • 类的输出层,指定为一个分类向量,字符串数组,单元阵列的特征向量,或“汽车”。如果“汽车”,然后在训练时软件自动设置类。如果您指定一个字符串数组或单元阵列的特征向量str,然后输出层的软件设置类分类(str, str)。默认值是“汽车”

如果层没有其他属性,那么您可以省略的属性部分。

特沃斯基损失需要防止除零小恒定值。指定属性,ε,这个值。还需要两个变量属性lphaβ控制假阳性和假阴性的权重,分别。

classdeftverskyPixelClassificationLayer < nnet.layer.ClassificationLayer属性(常量)%小防止除零常数。ε= 1 e-8;结束属性%假阳性和假阴性的默认权重系数α= 0.5;β= 0.5;结束结束

创建构造函数

创建的函数结构层和初始化层属性。指定任何变量需要创建构造函数作为输入层。

指定一个可选的输入参数名称来分配的的名字属性在创建。

函数层= tverskyPixelClassificationLayer(名称、α,β)% = tverskyPixelClassificationLayer层创建一个特沃斯基(名字)%像素分类层与指定的名称。%设置图层名称层。的名字=name;%设置层属性层。α=α;层。β=beta;%设置层描述层。描述=“特沃斯基损失”;结束

创建向前损失函数

创建一个函数命名forwardLoss返回加权预测之间的交叉熵损失由网络和训练目标。的语法forwardLoss损失= forwardLoss(层,Y, T),在那里Y前一层的输出和吗T代表的培训目标。

为语义分割问题,的尺寸T匹配的尺寸Y,在那里Y是一个四维数组的大小H——- - - - - -W——- - - - - -K——- - - - - -N,在那里K类的数量,N是mini-batch大小。

的大小Y依赖于前一层的输出。以确保Y一样的尺寸吗T,你必须包括一层输出层之前,输出正确的大小。例如,以确保Y是一个四维数组的预测成绩K类,您可以包括一个完全连接层的大小K或一个回旋的层K过滤器softmax层之前输出层。

函数损失= forwardLoss(层,Y, T)% = forwardLoss损失(层,Y, T)返回Tversky损失之间%预测T Y和培训目标。Pcnot = 1 y;Gcnot = 1 - t;TP =总和(总和(y * T, 1), 2);FP =总和(总和(y * Gcnot, 1), 2);FN =总和(总和(Pcnot。* T, 1), 2);号码= TP + layer.Epsilon;分母项= TP +层。α* FP +层。β*FN + layer.Epsilon;%计算Tversky指数lossTIc = 1 - numer. /分母项;lossTI = (lossTIc, 3)之和;%返回平均Tversky指数损失N =大小(Y, 4);损失= (lossTI) / N;结束

落后的损失函数

随着forwardLoss功能完全支持自动分化,不需要创金宝app建一个函数的落后的损失。

一个功能列表,支持自动分化,明白了金宝app与dlarray支持函数的列表金宝app(深度学习工具箱)

完成一层

提供了完整的层tverskyPixelClassificationLayer.m,这是附加到例子作为支持文件。金宝app

classdeftverskyPixelClassificationLayer < nnet.layer.ClassificationLayer%这一层实现了Tversky损失函数进行训练%的语义分割网络。%的引用%萨利希,赛义德Sadegh穆赫辛尼经常,Deniz Erdogmus,阿里Gholipour。%”Tversky损失函数完全使用3 d图像分割%卷积网络。”International Workshop on Machine%的学习在医学成像。施普林格,可汗,2017。% - - - - - - - - - - -属性(常量)%小防止除零常数。ε= 1 e-8;结束属性%默认的假阳性和假权重系数%底片α= 0.5;β= 0.5;结束方法函数层= tverskyPixelClassificationLayer(名称、α,β)% = tverskyPixelClassificationLayer层(名称、α,β)创建了一个特沃斯基%像素分类层α和β与指定的名称和属性。%设置图层名称。层。的名字=name; layer.Alpha = alpha; layer.Beta = beta;%设置层描述。层。描述=“特沃斯基损失”;结束函数损失= forwardLoss(层,Y, T)% = forwardLoss损失(层,Y, T)返回Tversky损失之间%预测T Y和培训目标。Pcnot = 1 y;Gcnot = 1 - t;TP =总和(总和(y * T, 1), 2);FP =总和(总和(y * Gcnot, 1), 2);FN =总和(总和(Pcnot。* T, 1), 2);号码= TP + layer.Epsilon;分母项= TP +层。α* FP +层。β*FN + layer.Epsilon;%计算tversky指数lossTIc = 1 - numer. /分母项;lossTI = (lossTIc, 3)之和;%返回平均tversky指数损失。N =大小(Y, 4);损失= (lossTI) / N;结束结束结束

GPU的兼容性

MATLAB函数中使用forwardLosstverskyPixelClassificationLayer所有的支金宝app持gpuArray输入层是GPU兼容。

检查输出层有效性

创建一个实例的层。

层= tverskyPixelClassificationLayer (“特沃斯基”,0.7,0.3);

检查层使用的有效性checkLayer(深度学习工具箱)。指定有效输入尺寸大小的单个观察典型的输入层。层预计H——- - - - - -W——- - - - - -K——- - - - - -N数组的输入,K类的数量,Nmini-batch是观测的数量。

numClasses = 2;validInputSize = 4 numClasses [4];validInputSize checkLayer(层,“ObservationDimension”4)
跳过GPU测试。不兼容的GPU设备发现。跳过代码生成的兼容性测试。检查代码生成层的有效性,指定“CheckCodegenCompatibility”和“ObservationDimension”选项。nnet.checklayer运行。TestOutputLayerWithoutBackward ........ Done nnet.checklayer.TestOutputLayerWithoutBackward __________ Test Summary: 8 Passed, 0 Failed, 0 Incomplete, 2 Skipped. Time elapsed: 0.56419 seconds.

测试总结报告通过,失败了,不完整,并跳过测试。

使用自定义层语义分割网络

创建一个语义分割网络使用tverskyPixelClassificationLayer

32 32层= [imageInputLayer ([1]) convolution2dLayer (64,“填充”1)batchNormalizationLayer reluLayer maxPooling2dLayer (2“步”,2)convolution2dLayer (64,“填充”64年,1)reluLayer transposedConv2dLayer(4日,“步”2,“种植”1)convolution2dLayer (1、2) softmaxLayer tverskyPixelClassificationLayer (“特沃斯基”,0.3,0.7);

负荷训练数据的语义分割使用imageDatastorepixelLabelDatastore

dataSetDir = fullfile (toolboxdir (“愿景”),“visiondata”,“triangleImages”);imageDir = fullfile (dataSetDir,“trainingImages”);labelDir = fullfile (dataSetDir,“trainingLabels”);imd = imageDatastore (imageDir);一会= [“三角形”“背景”];labelIDs = (255 0);一会,pxds = pixelLabelDatastore (labelDir labelIDs);

把图像和像素标签数据通过数据存储结合

ds =结合(imd, pxds);

设置培训方案和培训网络。

选择= trainingOptions (“亚当”,“InitialLearnRate”1 e - 3,“MaxEpochs”,100,“LearnRateDropFactor”,5 e 1,“LearnRateDropPeriod”,20岁,“LearnRateSchedule”,“分段”,“MiniBatchSize”,50);网= trainNetwork (ds、层、期权);
培训在单CPU。初始化输入数据规范化。| = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = | | | |时代迭代时间| Mini-batch | Mini-batch |基地学习| | | | (hh: mm: ss) | | |损失精度率| | = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = | | 1 | 1 | 00:00:02 | 50.32% | 1.2933 | 0.0010 | | 13 | 50 | 00:00:23 | 98.83% | 0.0990 | 0.0010 | | 25 | 100 | 00:00:42 | 99.32% | 0.0550 | 0.0005 | | | 150 | 00:01:02 | 99.38% | 0.0461 | 0.0005 | | 200 | | 00:01:21 | 99.48% | 0.0397 | 0.0003 | 63 | 250 | | 00:01:41 | 99.47% | 0.0380 | 0.0001 | 75 | 300 | | 00:02:00 | 99.54% | 0.0344 | 0.0001 | 88 | 350 | | 00:02:20 | 99.51% | 0.0352 | 6.2500 e-05 | | 100 | 400 | 00:02:39 | 99.56% | 0.0330 | 6.2500 e-05 | | = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = |培训完成:马克思时代完成。

评估由分段训练网络的测试图像和显示分割结果。

我= imread (“triangleTest.jpg”);[C分数]= semanticseg(我,净);B = labeloverlay (C);蒙太奇({B}我)

图包含一个坐标轴对象。坐标轴对象包含一个类型的对象的形象。

引用

[1]萨利希,赛义德Sadegh穆赫辛尼经常Deniz Erdogmus,阿里Gholipour。“特沃斯基损失函数图像分割使用3 d完全卷积深度网络。”国际研讨会在医学成像机器学习。施普林格,可汗,2017。