收录:AAAI2018 (AAAI Conference on Artificial Intelligence)git
原文地址:SCNNgithub
论文提出了一个新颖网络Spatial CNN,在图片的行和列上作信息传递。能够有效的识别强先验结构的目标。论文提出了一个大型的车道检测数据集,用于进一步推进自动驾驶发展。算法
代码:网络
现今的CNN模型一般是由卷积块堆叠构建,虽然CNN有强大的特征提取能力,但现存CNN架构没有足够充分探索图像行和列上的空间关系能力。这些关系对于学习强先验形状的对象很重要,尤为是外观(图像像素)连贯性很弱。例如交通线,车道常常会被遮挡,或者压根就没在路上画车道线。以下图所示:架构
本文提出了Spatial CNN(CNN),它将传统的卷积层接层(layer-by-layer)的链接形式的转为feature map中片连片卷积(slice-by-slice)的形式,使得图中像素行和列之间可以传递信息。这特别适用于检测长距离连续形状的目标或大型目标,有着极强的空间关系可是外观线索较差的目标,例如交通线,电线杆和墙。论文在车道检测挑战和CityScapes上评估了SCNN的表现,同时SCNN在TuSimple Benchmark lane Detection challenge得到了第一名,准确率为96.53%。函数
自动驾驶中最具挑战的任务之一是交通场景理解,包括计算机视觉任务下的车道检测和语义分割。车道检测帮助指导车辆,语义分割提供更多关于周围环境目标的细节位置。但在实际状况下,由于有许多恶劣条件,这些任务可能很是具备挑战性。对于交通场景理解的另外一个挑战是,在许多状况下须要在有强结构先验知识下处理外形线索很少的目标,例如交通线,杆状物等,这些具备长距离连续的形状,经常有很大部分被遮挡。性能
得益于强大的学习表示能力,CNN将视觉理解推向了一个新的高度。可是这依然不能很好地处理外形线索很少的有强结构先验的目标,而人类能够推断它们的位置并填充遮挡的部分。学习
为了解决这个问题,论文提出了SCNN,将深度卷积神经网络推广到丰富空间层次。测试
传统的CNN,任意层接收上层的数据做输入,再做卷积并加激活传给下一层,这个过程是顺序执行的。与之相似的是,SCNN将feature map的行或列也当作layer,也使用卷积加非线性激活,从而实现空间上的深度神经网络。这使得空间信息可以在同层的神经元上传播,加强空间信息进而对于识别结构化对象特别有效。优化
相关工做:
对于车道检测任务,大多数现有的算法都是依赖于低级手工特征,这让模型难以在恶劣条件下工做。2015年有工做尝试使用深度学习方案用于车道检测,但苦于没有大的普遍的数据集(说这个的缘由是论文创建了一个大的数据集~)。对于语义分割,基于CNN的方案的已经成为主流并取得了巨大的成功。
对于在深度神经网络中使用空间信息:有工做使用RNN按每列和行传递信息,但每一个像素只能接收同一行或列的信息。也有工做使用LSTM变体探索语义分割的上下文信息,但计算消耗较大。也有工做尝试结合CNN和图模型(例如MRF或CRF),经过大卷积核传递信息。
与上述方案相比,SCNN有以下几个优点:
本文提出了一个关于交通车道检测的大规模数据集。之前的车道检测数据集(KITTI,CamVid)要不就是太简单,要不就是数据过小。最近的(Caltech,TuSimple)数据集是在交通受限状态下创建的,这样的数据车流量少且路标较为清晰。这些数据集没有包括一些车道线模糊,条件恶劣的状况,而这些状况人类能够推断出来,且这具备很高的实用价值。
论文提出的数据集是由六辆车在北京不一样时间录制的,超过55个小时共收集了133,235 张图片,这超过TuSimple 数据集20倍了。论文分红88880张做为训练集, 9675做为验证集,34680作测试集。图像的大小为1640×590。下图是示例和简介:
数据集内包括城市、农村和高速公路等场景,北京做为世界上最大和最拥挤的城市之一,对应的车道检测数据提供了不少具备挑战性的交通场景。论文将测试集分为正常和8个具备挑战性的类别,这对应上图 (a)的9个示例状况。图(b)显示的是挑战性的场景站数据集的比例(共72.3%)。
对于每一张图片,使用三条线注释车道,如前面所述,许多状况下车道是被遮挡的或看不见的。而这在实际状况下是很重要的,车道检测算法须要可以在这种状况下工做。对此,标注工做根据上下文也作了标注,如图(2)(4)所示。对于图(1)的状况咱们不对障碍的另外一边作标注,将精力集中于最受关注的部分。
传统的关于空间关系的建模方法是基于几率图模型的,例如马尔科夫随机场(MRF)或条件随机场(CRF)。最近有工做将几率图与CNN相结合,如图 3(a)所示:
CRF可化为平均场,算法能够用神经网络来实现,具体来讲,过程分为:
能够看到传统方法在传递信息时,每一个像素点接受来自全图其余像素的信息,这在计算上是很是昂贵的,难以应用于实时系统。且对于MRF的大卷积核权重很难学。这些方法是应用在CNN的输出上的,论文认为CNN的隐藏层,包含了丰富的空间关系,可更好的用于处理空间关系。
论文提出了Spatial CNN,这里的Spatial不是指Spatial Convolution,而是CNN经过特征的设计架构传递空间信息。SCNN更有效的学习空间关系,能平滑的找出连续的有强先验的结构目标。SCNN的总体架构以下:
(图中SCNN的下标有D,U,R,L
,这在结构上是相似的,方向上分别表示为向下,向上,向右,向左)
先以SCNN_D
分析:
考虑到SCNN应用在三维张量C×H×W上,C,H,W分别表明通道数,长和宽。为了实现空间信息传递,将张量切分红H片(slice),先将第一片送到尺寸为C×w的卷积层(w为卷积核的宽度)。传统的CNN是将这层的输出传递给下一层,而这里是将这片输出相加到下一片做为新的一片。接着下一片继续应用卷积(这里卷积核共享),直处处理完全部片。
具体来说,假设咱们有一个三维的张量K,其中Ki,j,k记为最后一片中通道i的元素和当前片中通道j的元素之间的权重,这两个元素之间偏移为k列。一样的将Xi,j,k记录为张量X的元素,其中i,j,k分别指代通道,行,列.
则SCNN的前向计算为:
其中f是非线性激活函数ReLU。X加′′表示更新后的值,注意全部的片共享一组卷积核,SCNN是一种RNN。
SCNN相比于传统方法,有三个优点:
SCNN与传统的Dense MRF/CRF相比,在信息传递方向不一样,示意图以下所示:
假设张量有H行W列,对于密集的MRF/CRF来说,在每两个HW像素之间都存在信息传递,对于niter次迭代,传递了niterW2H2次信息。在SCNN中,每一个像素只接受来自w个像素的信息,共传递了nderWH次,其中der指代传递信息的方向的数量,w为卷积核宽度。
niter范围在10到100之间,在本文中ndir设置为4,对应着四个方向。w设置一般不超过10(图中设置为3)。对于一张有上千行和列的图片来讲,SCNN可大幅度减小计算量,而每一个像素点依旧可以接收来全部其余像素传递的信息(4个方向的信息传递)。
密集的MRF/CRF内是经过全部加权像素相加,这样的计算花费很大。而RNN是经过梯度来优化的, 考虑到这么多层和列,依据残差网络的经验,论文也采用残差的方式来学习(计算公式描述的残差学习)。这种残差可认为是对原始神经元的修正。实验证实这样的消息传递比基于LSTM的要好。
归功于SCNN的计算效率,它能够很方便的集成到CNN的任何部分。一般 top hidden layer 包含了丰富的语义信息,这是应用SCNN的理想位置。在完整的SCNN模型中咱们在顶层的 feature map上用了四个方向的SCNN引入空间信息传递。
论文在自发布的lane detection dataset 和 CityScapes数据集作了评估。
采用标准的SGD训练器,学习率采用”poly”策略,初始学习率为0.01,power为0.9。batchsize设置为12,动量为0.9,权重衰减为0.0001。迭代次数为60K。模型架构在LargeFOV(DeepLabv2)基础上修改,初始的13层采用的是在ImageNet上预训练的VGG16层。全部的实验使用的工做是Torch7.
普通的目标识别只要划分边界,而车道检测须要精准的预测曲线,一个天然的想法是模型输出曲线的几率图,以像素级目标来训练网络,这相似于语义分割任务。咱们但愿网络可以直接区分不一样车道标记,这样鲁棒性更好。共有4中类型的车道线。输出的几率图通过一个小网络预测车道标记是否存在。
在测试期间,一样须要从几率图转为曲线,模型大体示意以下图(b)所示:
对于存在值大于0.5的车道标记,在对应的几率图每20行搜索以得到最高的响应位置,而后经过三次样条函数链接这些点(cubic splines)。这就是最终的预测。
上图(a)显示了baseline和LargeFOV之间的差别:
fc7
输出通道为128fc6
扩张卷积的扩张率为4训练时,输入和输出的图片分辨率设置为800×288(约为原图的二分之一)。目标线的宽度设置为16.考虑背景和车道标记之间的不平衡标签,背景损失乘以0.4。
为了判断车道标记是否正确的检测到,论文将车道标记视为宽度为30像素的线,计算ground truth和预测值之间的IoU.若是预测的IoU大于某个阈值,则认为是true positives (TP). 以下图6所示,这里设置了0.3和0.5做为阈值,分别对应松散和严格的评估。
而后使用
最为最终评价指标,其中Precision=TPTP+FP,Recall=TPTP+FN。设置β=1表示调和平均值。
首先探究了SCNN里信息传递方向的有效性。对比实验以下表:
SCNN的核宽度w=5,能够看到随着方向的增长,性能也逐渐增长。 为了证实性能是来源于多方向,而不是参数的增长,在baseline的基础上添加了一个额外的5×5的卷积层,能够看到性能只有微弱的提高。
论文在SCNN_DURL
的基础上测试了不一样核宽度对性能的影响,核宽度表示像素能够接收其余像素的信息数量,结果以下:
能够看到较大的w表现出的性能较好(计算量也一直上升)
SCNN能够添加到模型的任何地方,在图3中,将SCNN_DURL
应用于output上或top hidden layer:
能够看到放置在top hidden layer后效果要出色,这是由于top hidden layer包含更丰富的信息。
在SCNN中,信息时连续方式传递的,SCNN的一片不会传递信息给下一片,知道它接收到别的片传来的信息。与此作对比的时,使用平行策略(parallel),即每一个片在更新前将信息传递给一下片,一块儿更新,结果以下:
能够看到顺序传递的优点较大,这代表在SCNN中,像素不只受到邻近像素的影响,也受到更远距离的像素影响。
论文将SCNN与几个先进模型对比结果以下:
能够看到SCNN的效果很出色~
可视化结果以下:
能够看到SCNN要比大型的ResNet101要好,虽然ResNet101参数多,可是在这种具备挑战性的状况下会产生杂乱或不连续的输出,SCNN相比可以保持平滑性。这代表SCNN相比于传统CNN可以更好的捕捉强先验结构的目标。
同时论文给出了与其余模型时间效率上的对比。注意计算时间没有包括网络主干。都是在CPU上跑的。
能够看到SCNN比CRF要快不少,这是由于传递信息策略的改变。
论文同时也在CityScapes上作了测试,使用DeepLabv2的LargeFOV和ResNet101做为baseline,在LargeFOV上添加BN层,对于两个模型,top hidden layer的通道数改成128.
配置SCNN的是SCNN_DURL在w=9w=9,结果以下:
能够看到配置了SCNN的模型,在墙、杆等类别有着显著的提高,这是由于SCNN可以捕捉这些长距离连续物体。
可视化结果以下:
有一个有意思的地方,汽车的底部在训练期间是不作标记的,在LargeFOV上是缺失的,由于SCNN的信息传递,被分类成道路。
论文也将SCNN方法与其余方法作了对比,也使用了VGG16为网络主干,结果以下:
能够看到SCNN效果仍是能够的
论文提出了Spatial CNN,在空间层上实现信息的有效传递。SCNN易于融入到其余深度神经网络中作end-2-end训练。论文在车道检测和语义分割上测试了SCNN,结果表现SCNN能够有效的保持长距离连续结构,在语义分割其扩散效应对识别大型物体有利。
此外,论文提出了一个车道检测的数据集,但愿可以推进自动驾驶进一步发展。