自定义像素分类层和特沃斯基的损失
这个例子显示了如何定义和创建一个自定义像素分类层使用特沃斯基的损失。
这一层可以使用语义分割训练网络。想要了解更多关于创建自定义深度学习层,明白了定义定制的深度学习层。
特沃斯基损失
特沃斯基损失是基于Tversky指数测量两个分割图像重叠(1]。特沃斯基指数 在一个图像 和相应的地面实况 是由
对应于类和 对应于在课堂上不是 。
是在前两个维度的元素数量的 。
和 权重因素控制假阳性和假阴性的贡献使每个类的损失。
损失 类的数量 是由
分类层模板
分类层模板复制到一个新文件在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
。
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函数中使用forwardLoss
在tverskyPixelClassificationLayer
所有的支金宝app持gpuArray
输入层是GPU兼容。
检查输出层有效性
创建一个实例的层。
层= tverskyPixelClassificationLayer (“特沃斯基”,0.7,0.3);
检查层使用的有效性checkLayer
。指定有效输入尺寸大小的单个观察典型的输入层。层预计H
——- - - - - -W
——- - - - - -K
——- - - - - -N
数组的输入,K
类的数量,N
mini-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.31452 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);
负荷训练数据的语义分割使用imageDatastore
和pixelLabelDatastore
。
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:01 | 50.32% | 1.2933 | 0.0010 | | 13 | 50 | 00:00:20 | 98.83% | 0.0991 | 0.0010 | | 25 | 100 | 00:00:37 | 99.33% | 0.0549 | 0.0005 | | | 150 | 00:00:53 | 99.37% | 0.0465 | 0.0005 | | 200 | | 00:01:07 | 99.48% | 0.0400 | 0.0003 | 63 | 250 | | 00:01:20 | 99.47% | 0.0385 | 0.0001 | 75 | 300 | | 00:01:31 | 99.54% | 0.0349 | 0.0001 | 88 | 350 | | 00:01:42 | 99.51% | 0.0353 | 6.2500 e-05 | | 100 | 400 | 00:01:53 | 99.56% | 0.0331 | 6.2500 e-05 | | = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = |培训完成:马克思时代完成。
评估由分段训练网络的测试图像和显示分割结果。
我= imread (“triangleTest.jpg”);[C分数]= semanticseg(我,净);B = labeloverlay (C);蒙太奇({B}我)
引用
[1]萨利希,赛义德Sadegh穆赫辛尼经常Deniz Erdogmus,阿里Gholipour。“特沃斯基损失函数图像分割使用3 d完全卷积深度网络。”国际研讨会在医学成像机器学习。施普林格,可汗,2017。
另请参阅
checkLayer
|trainingOptions
|trainNetwork
|pixelLabelDatastore
(计算机视觉工具箱)|semanticseg
(计算机视觉工具箱)
相关的话题
- 定义定制的深度学习层
- 开始使用语义分割使用深度学习(计算机视觉工具箱)
- 语义分割使用深度学习