论文名称:Spatial As Deep: Spatial CNN for Traffific Scene Understanding
发表时间:2017年
作者:Xingang Pan1 , Jianping Shi2 , Ping Luo1 , Xiaogang Wang1, and Xiaoou Tang1
一.概念
1.softmax:归一化指数函数,目的是将多分类的结果以概率的形式展现出来。
例如:假如模型对三分类问题的预测结果为-3,1.5,2.7
- 将预测结果转化为非负数:y1=exp(x1)=exp(-3)=0.05;y2=exp(x2)=exp(1.5)=4.48;y3=exp(x3)=exp(2.7)=14.88
- 各种预测结果概率之和为:z1=y1/(y1+y2+y3)=0.05/(0.05+4.48+14.88)=0.0026;z2=y2/(y1+y2+y3)=4.48/(0.05+4.48+14.88)=0.2308;z3=y3/(y1+y2+y3)=14.88/(0.05+4.48+14.88)=0.7666;
2.深度学习中的mask:掩膜。表示分割的结果。分类的结果:lable。
3.通道channels: (1)RGB,channels=3。(2)每个卷积层中卷积核的数量。
4.检测评价函数(IOU):重叠部分除以集合
相关的:
(1)被检测到 tp:true positive 有用的信息。
(2)没有被检测到 fn:false negative.
不相关的:
(1)被检测到 fp:false positive 无用的信息
(2)没有被检测到 tn
Precision=TP/(TP+FP)
Recall=TP/(TP+FN)
IOU=TP/(FN+TP+FP)
论文中:
所以 F-measure=2/(1/Precision+1/Recall),if β=1.
5.VGG16结构图:
论文中:作者在VGG16的基础上。在VGG16的fc6全连接层采用空洞卷积,并将fc7和fc8改为1x1的全卷积,命名为DeepLab-LargeFOV。同时在VGG16的fc6-fc8层用四路采用不同卷积率的空洞卷积作用于每个fc6,在fc7和fc8同样采用全卷积策略,命名为DeepLab-ASPP。根据空洞卷积的卷积率的不同组合,r={2,4,8,12}的称为DeepLab-ASPP-S;r={6,12,18,24}的称为DeepLab-ASPP-L。下图分别为VGG16上的DeepLab-LargeFOV和DeepLab-ASPP示意图:
6.LargeFOV(空洞卷积又名膨胀卷积)。
7.ASPP:(rate:卷积率)卷积率不断变大为此增加了感受野。
来自论文:DeepLab: Semantic Image Segmentation with Deep Convolutional Nets, Atrous Convolution, and Fully Connected CRFs
时间:2017
8.三次样条曲线:其基本思想是由两相邻节点所构成的每一个小区间内用低次多项式来逼近,并且在各结点的连接处又保证是光滑的(即导数连续)。
9.空间交叉熵损失函数(spatial cross entropy loss):一般情况下,最后一个输出层的节点个数与分类任务的目标数相等。假设最后的节点数为N,那么对于每一个样例,神经网络可以得到一个N维的数组作为输出结果,数组中每一个维度会对应一个类别。在最理想的情况下,如果一个样本属于k,那么这个类别所对应的的输出节点的输出值应该为1,而其他节点的输出都为0,即[0,0,1,0,….0,0],这个数组也就是样本的Label,是神经网络最期望的输出结果,交叉熵就是用来判定实际的输出与期望的输出的接近程度。
原理:交叉熵刻画的是实际输出(概率)与期望输出(概率)的距离,也就是交叉熵的值越小,两个概率分布就越接近。
参考博客:交叉熵作为损失函数在神经网络中的作用_fu6543210的博客-CSDN博客
二.
在本SCNN论文中,作者在主干网络结束后,得到了一个C*H*W的特征矩阵。
(a)为传统的CNN+CRF框架。(b)中的中间四个模块为SCNN,是嵌入到主干网络中的结构。
SCNN_D:为四个模块之一,其模块内部从上到下卷积时共享同一个卷积核。首先切成H片,在第一片上面用C*w大小的卷积核卷积,由于有C个通道,所以要用C个C*w的卷积核,第一片经过卷积,非线性等操作后加到下一片上(一般这个w是个较大的卷积核,作者实验证明w=9结果最理想),直到最后一片也被更新。
切片的处理过程公式化:
等号左边为更新后的值,右边f为非线性激活函数,K(i,j,k ):最后一片中通道i的元素和当前片中通道j的元素之间的权重,这两个元素之间偏移为k列。
经过四个SCNN模块处理后,特征矩阵(C*H*W)经过再一次卷积操作,输出为n个通道的分割结果。由于主干网络中对原图有下采样操作,最后进行像素级别的损失函数计算前,作者对图像进行了对应倍数的上采样放大操作。
在本SCNN论文中:
(a)图上半部分为LargeFOV。softmax标准化之后得到的是一个矩阵。下半部分左边spatial cross entropy loss为空间交叉熵损失(见上面概念9)。右半部分--Avgpool:对特征矩阵进行平均池化。sigmoid函数作用:对于预测问题想要得到一个0或1的答案。
FC:全连接层(fully connected)全连接层的每一个节点都与上一层的所有节点相连。
Interp:一维线性插值函数,例如下图为sin函数的插值。(文中在此对像素点进行了处理)
(b)图为原图像通过在上述模型的基础上,添加了一个分支,即右边的部分用来预测4条车道线存在的概率。左边输出的概率图经过这个分支网络预测车道线是否存在。
对于存在值大于0.5的车道标记,在对应的概率图每20行搜索找到最大值位置的点(argmax),然后通过三次样条函数连接这些点(cubic splines),就得到了最终的预测。
最终效果:数据集CULane
数据集:CityScapes
附:在使用tensorflow跑此代码时,请将所有文件移动到tools文件夹下,否则会出现找不到文件路径等等问题。