基于MatConvNet的全卷积神经网络(FCN) SegmentationLoss代码解析

在MatConvNet框架下,FCN是由DAG结构实现的,主要利用Matlab的OOP编程,下面是SegmentationLoss类的实现代码:



下面对上述代码行讲解:

classdef SegmentationLoss < dagnn.Loss

第一行此句表示定义一个类,类名为SegmentationLoss,该类继承自类dagnn.Loss,这里均与C++类的创建与继承类似。接着从line 3(第三行)到 line 26 (methods ... end)创建类方法,也就是在类内定义的普通函数(function ... end)。

line 24 到 line 26是类构造函数方法,因其方法名与类名一致,所以是类构造函数:A constructor method is a special function that creates an instance of the class. Typically, constructor methods accept input arguments to assign the data stored in properties and return an initialized object.

值得注意的是,该类构造函数并没有实现什么代码,而是调用了一个函数(确切地说应该是类方法,因为调用它的是一个类实例obj):obj.load(varargin) ,而该类方法在当前类SegmentationLoss中并没有被实现,而是来源于继承。这个类方法load(注意与Matlab built-in的load函数相区别)。该类方法load在类Layer中定义,注意这里的继承顺序:

SegmentationLoss < dagnn.Loss < dagnn.ElementWise < dagnn.Layer < handle

下面是在Layer类中类方法load的实现代码:


由此可见,SegmentationAccuracy类构造函数方法载入输入的varargin参变量用来初始化SegmentationAccuracy类的properties,相当于C++中的类成员变量:


在上述代码中,properties (Transient)表示:property value is not saved when object is saved to a file,具体参考Property Attributes。

下面重点讲解语义分割的评价标准,其定义在Line 04的类方法forward函数中。若要完全理解该评价指标的计算及代码实现,需要先熟悉分类器模型评价指标之ROC曲线机理。ROC曲线相关概念如下图所示:



注意ROC曲线也用于多分类中分类器的评价指标,理解上图相关概念后,下面来看FCN相关评价指标的定义及计算公式


下面对其代码实现进行解析:


上述代码Line 12中inputs{1}为384x384x21的数据,其中384x384为Scores的size,21表示通道数,也表示类别数。Line 21表示取出每个通道对应的spatial location处的最大值答应的通道索引即表示类别标签。Line 13表示把得到的预测标签为384x384 gpuArray收集到内存中,变为384x384 double。Line 14表示取出Ground Truth label,并且忽略背景标签,即labels为0的标签。Line 18表示有效标签数,也就是像素数,Line 19计算混淆矩阵,这里需要理解混淆矩阵和accumarray函数。将 accumarray 与 val = 1 结合使用可计算 subs 中相同下标的数目。得到混淆矩阵后,便可得到相关的统计数据。下面是obj.confusion示例:


上图中的TP,FN和FP是相对第一类而言的,其他类与之类似。在上式中,pii就表示TP,Pij(j=1...N)若i不等于j,即为FN;Pji(j=1...N)若j不等于i,即为FP。

Line 23 表示获取每一类Ground Truth标注的像素数,其值等于(TP+FN);

Line 24 表示获取被预测为每一类的像素数,其值等于(TP+FP);

Line 25 表示获取每一类被正确预测的像素数,其值等于(TP);

根据pixelAccuracy的定义可知,Line 27 即表示每类的TP之和,即被正确分累的像素数之和与所有类的像素数之和的比值;

根据meanAccuracy的定义可知,Line 28 即表示每类的分类正确率取平均;

根据meanIntersectionUnion的定义可知,Line 29 即表示预测区域与Ground Truth区域重合的区域(交集)占预测区域与Ground Truth区域并集之比,完美分割的话,其值为1。根据下图可知:


可知meanIntersectionUnion等于:TP/[(FN+TP)+(TP+FP)-TP] ;

至此,关于全卷积神经网络(FCN) SegmentationLoss代码解析及语义分割的评价标准讲解完毕。



评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值