SCNN(Spatial As Deep: Spatial CNN for Traffic Scene Understanding)论文笔记
论文地址:Spatial As Deep: Spatial CNN for Traffic Scene Understanding
代码:SCNN
摘要:
卷积神经网络通常是逐层堆叠的卷积操作构成,虽然有强大的特征提取能力,从像素中提取语义信息,但是跨行列提取图像的空间信息的能力并没有完全被利用。这些信息对像车道线和电线杆这种有很强的外观先验很弱的外观线索的目标是很重要的,这些目标经常会被遮挡或没画出来,如图一所示。作者提取出了空间卷积神经网络(SCNN),将传统的逐层卷积替换为特征图内的切片卷积操作,这可以使得信息可以在图像的行列之间传递。作者还公布了一个车道线检测数据集,并用SCNN在这个数据集上做了测试取得了很好的效果。而且作者用这个SCNN取得了图森举办的车道线检测大赛第一名。
思路:
论文主要的动机是为了解决特征图上空间信息传递问题,也就是所说的建立像素点之间的空间关系,之前的方法有基于RNN的,有基于MRF/CRF后处理的,基于RNN的由于信息传递范围有限导致性能不是很好,基于MRF/CRF的因为计算代价太大,而且性能也有待提高。
还有就是,作者公布了一个很大的车道线检测数据集CULane,有88880张标注好的训练图像,9675张验证图像,34680张测试图像。其中训练集合验证集都标注了,测试集没有标注,标注方法是对车道线进行像素级标注,标注当前车道和相邻车道车道线,对于遮挡部分,也标注出来了。总共有九个场景,具体可参见下图:
SCNN结构:
如下图:
从图b中可以看出,SCNN首先对四维的卷积层进行切分,切分方向分为两个,分别是沿
和
方向,信息传递方向有四个,分别是沿
方向顺序传播和逆序传播,
方向也是。也就是图中的从上往下,从下往上,从左往右和从右往左。将卷积层切分为
片,然后用一个卷积核从第一片开始执行卷积操作,将第一片卷积后的结果逐像素加到第二片上,再用这个卷积核对相加后的切片上执行卷积,一直到第
片;此时完成了一个方向的操作,剩下的三个方向也是类似,要注意的是每个方向的卷积操作都共享一个卷积核,所以总共有四个卷积核,我见过一些复现的代码,出现了
个卷积核,每个切片的卷积操作都使用不同的卷积核,网络训练起来很。计算方式如下:
具体操作是顺序操作,而不是逆序,也就是上面说的,在逐个切片上执行卷积,信息逐行逐列传播,作者说相比于MRF/CRF方式效率高,因为MRF/CRF方法中,每一个像素的信息同时和其它所有像素建立联系,而SCNN每次只和前一行或列的像素建立联系。相比于RNN方式不存在梯度消失问题,因为这种将卷积结果加到下一层一起卷积的方式和ResNet的思想一样,跨层连接,只是SCNN跨的层更密集。而且在网络中添加的位置比较灵活,通常是添加在网络的顶部,因为那里有丰富的语义信息,传播方式如下:
车道线检测网络:
车道线检测网络是在LargeFOV上修改过来的,如下图:
作者先提出了一个基准模型(Baseline),这个Baseline模型和LargeFOV的主要区别有四点:
- LargeFOV的'fc7'层输出通道数由1024变成了128。
- 'f6'层的膨胀率(空洞卷积)由12变成了4.
- 每ReLU操作之前都添加了BN操作。
- 额外添加了一个小网络,用来预测相应的车道线是否存在,可以说是一个多任务学习,不仅分割出车道线,同时也预测有几条车道线,两个任务同时做。
网络训练时,采用SGD优化器,momentum为0.9,批次大小为12,基础学习率是0.01,采用”poly”方式衰减,衰减率为0.0001,衰减指数为0.9,总共训练6万次。还有就是主干网络的前面13层是从已在 ImageNet数据集上训练好的的VGG16网络中的前13层中复制过来。
评价指标:
很认同作者这一点,之前看过见多车道线检测的论文,评价都是很主观的去认为认定一条车道线是否被检测出,说实话,这不是很合理。作者采用计算预测出的车道线和真是标注的作为评价一条车道线是否真确检测出,这就很客观了。最终作者采用了综合准确率和召回率的评价指标:
论文中β=1.简称
实验结果:
验证不同的方向对性能的影响:
验证不同的卷积核尺寸对性能的影响:
验证SCNN放在网络不同位置对性能的影响:
验证不同的信息的传播顺序对性能的影响,顺序传播和平行传播:
和其他方法的比较:
计算效率比较:
在Cityscapes数据集上的实验结果:
个人对这篇论文的评价:
公布了一个很大的车道线检测数据集 ,非常有意义;提出了SCNN,有效的解决了传递特征图上的空间关系,方法很有创新;还有就是实验结果很依赖调参,作者好像是把调参最好的结果放上去,个人觉得这有很大的偶然性,应该多次实验,取平均值比较客观。