原文链接:https://arxiv.org/abs/1712.06080
github链接:https://github.com/XingangPan/SCNN
CNN没有充分探索其捕捉图像行和列的像素空间关系的能力,这些关系对于学习具有强形状先验但具弱外观(图像像素)连贯性的语义对象非常重要,例如交通车道,如图1(a)所示,这些交通车道经常被遮挡或甚至不涂在路面上。
在本文中,提出了Spatial CNN(SCNN),它将传统的深层逐层(layer-by-layer)卷积推广到特征映射中的逐片(slice-by-slice)卷积,从而实现层中行和列之间的像素之间的消息传递。这种SCNN特别适用于长的连续形状结构或大型物体,具有强烈的空间关系但外观线索较少,例如交通车道,电线杆和墙壁。
虽然基于CNN的方法通过强大的表现学习能力将场景理解推向了一个新的水平。对于具有长结构区域并且可以被遮挡的物体,它仍然表现不佳,例如图1中红色边界框中所示的车道标记和杆子。然而,人类可以容易地从上下文(即可视部分)推断它们的位置并填充在被遮挡的部分中。
为了解决这个问题,我们提出了空间CNN(SCNN),即深度卷积神经网络向丰富空间层次的推广。在逐层CNN中,卷积层接收来自前一层的输入,应用卷积运算和非线性激活,并将结果发送到下一层。该过程按顺序完成。类似地,SCNN将feature map的行或列视为层,并顺序地应用卷积,非线性激活和求和操作,形成了一个空间上的深度神经网络。以这种方式,信息可以在同一层中的神经元之间传播。它对于具有遮挡的结构物体(例如车道,杆或卡车)特别有用,因为空间信息可以通过层间传播来加强。如图1所示,在CNN不连续或杂乱的情况下,SCNN可以很好地保持车道标记和杆的平滑性和连续性。在我们的实验中,SCNN明显优于其他基于RNN或MRF / CRF的方法,并且比更深层次的ResNet-101结果更好。
有一些其他尝试在神经网络中利用空间信息:使用递归神经网络沿每行或每列传递信息,因此在一个RNN层中,但每个像素位置只能从同一行或列接收信息。有工作使用LSTM的变体以在语义对象解析中利用上下文信息,但是这样的模型在计算上是昂贵的。研究人员还尝试将CNN与MRF或CRF等图形模型结合起来,其中消息传递通过与大内核的卷积来实现。
SCNN相对于上述方法有三个优点:
(1)顺序消息传递方案比传统的密集MRF / CRF具有更高的计算效率,
(2)消息传递使用的是残差,使得SCNN易于训练,
(3)SCNN是灵活的,可以应用于任何级别的深度神经网络。
Caltech Lanes Dataset和最近发布的TuSimple Benchmark Dataset(TuSimple 2017)由1224和6408个图像组成,分别带有带注释的车道标记,而交通则处于受限情景中,具有轻便的交通和清晰的车道标记。此外,这些数据集中没有一个注释被遮挡或由于磨损而看不见的车道标记,而这种车道标记可以由人推断并且在实际应用中具有高价值。
论文提出的数据集是由六辆车在北京不同时间录制的,共收集了133,235 张图片,超过TuSimple 数据集20倍。论文分成88880张作为训练集, 9675作为验证集,34680做测试集。图像的大小为1640×590。将测试集分为正常类和8个具有挑战性的类别,这些类别对应于图2(a)中的9个示例。图2(b)显示了每种情况的比例。可以看出,8个具有挑战性的场景占据了数据集的大部分(72.3%):
对于每个帧,我们使用三次线手动注释交通车道。如前所述,在许多情况下,车道标记被车辆遮挡或看不见。在实际应用中,重要的是车道检测算法即使在频繁发生的这些挑战性场景中也可以从上下文估计车道位置。因此,我们仍然根据上下文做了标注,如图2(a)(2)(4)所示。我们也希望我们的算法可以区分道路障碍,如图2(a)(1)所示。因此,屏障另一侧的车道没有标注。
传统的空间关系建模方法基于概率图模型的,如马尔可夫随机场(MRF)或条件随机场(CRF)。最近的工作将概率图与CNN结合起来,都遵循图3(a)的流程,CRF可化为平均场,算法可以用神经网络来实现,具体来说,过程分为:
可以看出,在传统方法的消息传递过程中,每个像素接收来自所有其他像素的信息,非常耗费计算并且难以用于实时任务。对于MRF,大卷积核很难学习,并且通常需要仔细初始化。此外,这些方法应用于CNN的输出,而包含更丰富信息的顶部隐藏层也许可以更好的建模空间关系。
论文提出了Spatial CNN,这里的Spatial不是指Spatial Convolution,而是通过特殊设计的CNN架构传递空间信息。SCNN更有效的学习空间关系,能平滑的找出连续的有强先验的结构目标。
如图3(b)的“SCNN_D”模块所示,考虑应用于尺寸为 C × H × W C \times H \times W C×H×W的3-D张量的SCNN,其中C,H和W分别表示通道,行和列的数量。张量将被分割成H个切片,然后将第一个切片发送到尺寸为 C × ω C \times \omega C×ω的有C个卷积核的卷积层,其中 ω \omega ω是卷积核宽度。在传统的CNN中,卷积层的输出然后被馈送到下一层,而此处输出被添加到下一个片以作为新的片。然后将新切片发送到下一个卷积层(这里卷积核共享),此过程将继续,直到更新最后一个切片。
具体地说,假设我们有一个3-D卷积核张量K,元素 K i , j , k {K_{i,j,k}} Ki,j,k表示最后一个切片的通道 i i i中的元素与当前切片的通道 j j j中的元素之间的权重,两个元素之间偏移为 k k k列。还将输入3-D张量X的元素表示为 X i , j , k {X_{i,j,k}} Xi,j,k,其中 i i i, j j j和 k k k分别表示通道,行和列的索引。那么SCNN的前向计算是:
其中 f f f是ReLU的非线性激活函数。带有上标 ′ ' ′的X表示更新后的元素。注意,卷积核权重在所有切片之间共享,因此SCNN是一种RNN。另请注意,SCNN有方向。在图3(b)中,具有下标’D’,‘U’,‘R’,'L’的四个’SCNN’模块分别表示向下,向上,向右和向左的SCNN。
与传统方法相比,Spatial CNN有三个主要优点:
(a) Dense MRF / CRF:每个像素直接从所有其他像素接收消息(大卷积核实现),可能具有很多冗余(图4)
(b) SCNN:消息传递是顺序传递
假设张量有H行和W列,然后Dense MRF / CRF中,在每两个WH像素之间存在消息传递。对于 n i t e r {n_{iter}} niter次迭代,消息传递的数量是 n i t e r W 2 H 2 {n_{iter}}{W^2}{H^2} niterW2H2。在SCNN中,每个像素仅接收来自 ω \omega ω个像素的信息,因此消息传递的数量是 n d i r W H ω {n_{dir}}WH\omega ndirWHω,其中 n d i r {n_{dir}} ndir和$\omeg $分别表示SCNN中的传递方向的数量和SCNN的卷积核宽度。
n i t e r {n_{iter}} niter的范围可以从10到100,而在本文中, n d i r {n_{dir}} ndir设置为4,对应于4个方向,w通常不大于10(在图4(b)中 ω = 3 \omega = 3 ω=3)。可以看出,对于具有数百行和列的图像,SCNN可以节省大量计算,而每个像素仍然可以从所有其他像素接收消息,其中消息沿4个方向传播。
在MRF / CRF中,通过所有像素的加权和来实现消息传递,其是计算上昂贵的。RNN是通过梯度来优化的,考虑到如此多的行或列,基于递归神经网络的方法可能会受到梯度下降的影响。然而,深度残差学习已经证明了它能够轻松训练非常深的神经网络。类似地,在我们的深度SCNN中,消息作为残差传播,即方程(1)中的ReLU的输出。这种残差也可以被视为对原始神经元的一种修改。我们的实验所示,这种消息传递方案比基于LSTM的方法获得更好的结果。
由于SCNN的计算效率,它可以很容易地整合到CNN的任何部分,而不仅仅是输出。通常,top hidden layer包含丰富且高语义的信息,因此是应用SCNN的理想位置。通常,图3显示了我们在LargeFOV模型上实现SCNN,在顶部隐藏层('fc7’层)之后依次添加四个空间方向上的SCNN以引入空间信息传递。
我们在车道检测数据集和Cityscapes上评估SCNN。在这两个任务中,我们使用标准SGD训练模型,batch size为12,初始学习率为0.01,power为0.9,重量衰减为0.0001。学习率策略是“poly”,动量和迭代次数分别设置为0.9和60K。基于LargeFOV模型进行了修改。从ImageNet训练的VGG16复制了前13个卷积层的初始权重。所有实验都在Torch7框架上实施。
车道检测模型与仅需要边界框的常见物体检测任务不同,车道检测需要精确预测曲线。一个自然的想法是模型应该输出这些曲线的概率图(probmaps),因此我们生成像素级目标来训练网络,就像在语义分割任务中一样。我们希望神经网络能够区分不同的车道标记,而不是将不同的车道标记视为一个类并在之后进行聚类,这样鲁棒性更好。有4种类型的车道线。输出的概率图经过一个小网络预测车道标记是否存在。
在测试期间,我们仍然需要从概率图转到曲线。如图5(b)所示,对于存在值大于0.5的每个车道标记,我们每隔20行搜索相应的概率图,以获得响应最高的位置。然后通过三次样条函数连接这些位置,这是最终的预测
如图5(a)所示,baseline模型和LargeFOV之间的差异是:
(1) 'fc7’层的输出通道数设置为128,
(2) 'fc6’扩展卷积的扩张率设置为4,
(3) 在每个ReLU层之前添加批量标准化(BN层),
(4) 添加小网络以预测车道标记的存在。
在训练期间,目标的线宽设置为16像素,输入和目标图像重新调整为 800 × 288 800 \times 288 800×288(约为原图的二分之一)。考虑到背景和车道标记之间的不平衡标签,背景损失乘以0.4。
为了判断是否成功检测到车道标记,我们将车道标记视为宽度等于30像素的线,并计算ground truth和预测值之间的交并比(IoU),其IoU大于特定阈值的预测被视为true positives (TP),,如图6所示。
我们设置0.3和0.5阈值对应松散和严格的评估,然后使用
F − m e a s u r e = ( 1 + β 2 ) Pr e c i s i o n   R e c a l l β 2 Pr e c i s i o n + R e c a l l F - measure = (1 + {\beta ^2})\frac{{\Pr ecision{\kern 1pt} {\kern 1pt} \,{\mathop{\rm Re}\nolimits} call}}{{{\beta ^2}\Pr ecision + {\mathop{\rm Re}\nolimits} call}} F−measure=(1+β2)β2Precision+RecallPrecisionRecall
作为评价指标,其中 Pr e c i s i o n = T P T P + F P \Pr ecision = \frac{{TP}}{{TP + FP}} Precision=TP+FPTP, R e c a l l = T P T P + F N {\mathop{\rm Re}\nolimits} call = \frac{{TP}}{{TP + FN}} Recall=TP+FNTP,设置 β = 1 \beta = 1 β=1表示调和平均值(F1-measure)。
(1)Effectiveness of multidirectional SCNN
首先,我们研究了SCNN中方向的影响。我们尝试有不同方向实现的SCNN,结果如表1所示
SCNN的卷积宽度 ω \omega ω设置为5.可以看出,随着更多方向的增加,性能也会提高。为了证明改进不是来自参数增加,而是来自SCNN带来的消息传递方案,我们在baseline模型的顶部隐藏层之后添加了一个额外的卷积层和 5 × 5 5 \times 5 5×5卷积核宽度。从结果我们可以看出,额外的卷积层只能带来很小的改进,这证明了SCNN的有效性。
(2) Effects of kernel width ω \omega ω
进一步测试了基于“SCNN DURL”模型的不同核宽度的影响,如表2所示。这里核宽度表示像素可以从中接收消息的像素数, ω = 1 \omega = 1 ω=1情况类似于(Visin等人2015; Bell等人2016)中的方法。结果表明较大的[\omega ]表现出的性能较好(计算量也一直上升)
(3)Spatial CNN on different positions
SCNN可以添加到神经网络的任何位置。这里我们考虑将SCNN DURL模型应用于(1)输出和(2)顶部隐藏层。结果见表3,表明包含比输出更丰富的信息的顶部隐藏层被证明是应用SCNN的更好位置。
(4) Effectiveness of sequential propagation
在SCNN中,信息以顺序方式传递,即片不将信息传递到下一个片,直到它从前片接收到信息。为了验证该方案的有效性,我们将其与并行传播进行比较,即每个片在更新之前同时将信息传递给下一个片。对于这种并行情况,方程(1)右侧的 ’ 被删除。如表4所示,顺序信息传递方案明显优于并行方案。该结果表明,在SCNN中,像素不仅仅受到附近像素的影响,而且确实从更远位置接收信息。
(5) Comparison with state-of-the-art methods
与最先进的方法进行比较。为了进一步验证SCNN在车道检测中的有效性,我们将其与几种方法进行比较:基于rnn的ReNet,基于MRF的MRFNet,DenseCRF,以及非常深的残留网络。
基于LSTM的ReNet:用两个ReNet层替换图3中的“SCNN”层:一层传递水平信息,另一层传递垂直信息。
DenseCRF:使用Dense CRF作为后处理,并采用10个平均场迭代
MRFNet:使用图3(a)中的实现,迭代次数和消息传递内核大小分别设置为10和20。
这里的MRF与CRF的主要区别在于信息传递内核的权重是在训练期间学习而不是依赖于图像。
ResNet:基于与DeepLabv2相同,只是不使用ASPP模块。
SCNN:将SCNN DULR模块添加到baseline,卷积核宽度[\omega ]为9。不同情况下的测试结果如表5所示,可视化如图7所示。
从结果中我们可以看出,ReNet的性能甚至与SCNN DULR与 ω = 1 \omega = 1 ω=1 无法比较,表明我们的残差信息传递方案的有效性。有趣的是,DenseCRF在这里导致更糟糕的结果,因为车道标记通常具有较少的外观线索,因此Dense CRF无法区分车道标记和背景。相比之下,从数据中学习核心权重,MRFNet可以在一定程度上平滑结果并改善性能,但仍然不是很令人满意。此外,我们的方法甚至优于更深层次的ResNet-50和ResNet-101。尽管ResNet-101有超过一百层和非常大的感受野,但在具有挑战性的情况下它仍会产生混乱或不连续的输出,而我们的方法只有16个卷积层和4个SCNN层,可以保持通道的平滑性和连续性,线条更好。这表明SCNN相比于传统CNN能够更好的捕捉强先验结构的目标。
(6) Computational efficiency over other methods
通过实验比较它们的运行时间。结果如表6,这里运行时不包括网络主干的运行时间。对于SCNN,我们使用与Dense CRF相同的设置测试实际案例和案例。在实际情况中,SCNN应用于顶层隐藏层,因此输入具有更多通道但较少高度和宽度。在公平比较的情况下,输入大小被修改为与Dense CRF中的大小相同,并且两种方法都在CPU上进行测试。结果表明,SCNN比Dense CRF快4倍。这是因为SCNN显着减少了消息传递中的冗余,如图4所示。此外,SCNN比LSTM更有效,LSTM的门机制需要更多的计算。
为了证明我们方法的一般性,我们还评估了Cityscapes上的SCNN。Cityscapes包含5000个带注释的图像,包括2975个用于训练,500个用于验证,1525个用于测试,定义了19个类别。我们使用两个经典模型,LargeFOV和DeepLab中的ResNet-10作为baseline。Batch normalization层被添加到LargeFOV以实现更快的收敛。对于这两种模型,顶部隐藏层的通道数被修改为128以使其更加紧凑。
我们以与车道检测相同的方式将SCNN添加到baseline模型中。表7中显示了baseline与那些结合了核宽度为 ω = 9 \omega = 9 ω=9的SCNN DURL模型的比较。随着SCNN的加入,所有类别的IoU至少与baseline相当,而“墙”,“杆”,“卡车”,“公共汽车”,“火车”和“摩托”类别实现了显着改善。这是因为对于像火车和杆这样的长形物体,SCNN可以捕获其连续结构并连接断开的部分,如图8所示。对于可能占据大图像区域的墙壁,卡车和公共汽车,SCNN的扩散效果可以根据上下文纠正错误分类的部分。这表明SCNN不仅适用于长薄结构,而且适用于需要对全局信息进行正确分类的大型对象。另一个有趣的现象是,在训练期间忽略标签的图像底部的车辆头部在LargeFOV中处于混乱状态,而在添加SCNN时,它被分类为道路。这也是由于SCNN的信息传递,其将道路信息传递到车辆头部区域。
为了将我们的方法与其他基于MRF / CRF的方法进行比较,我们在Cityscapes测试集上评估LargeFOV + SCNN,并与也使用VGG16作为骨干网络的方法进行比较。结果如表8所示。这里LargeFOV,DPN和我们的方法分别使用密集CRF,Dense MRF和SCNN,并且共享几乎相同的基本CNN部分。结果表明,我们的方法取得了显着的更好的性能。
在本文中,我们提出了spatial CNN,一种CNN-like的方案,以在空间层面实现有效的信息传播。SCNN可以很容易地融入其他深度神经网络并进行端到端训练。它在交通场景理解中的两个任务进行评估:车道检测和语义分割。结果表明,SCNN可以有效地保持长薄结构的连续性,而在语义分割中,其扩散效应也被证明对大型物体有利。具体而言,通过将SCNN引入LargeFOV模型,我们的20层网络在路径检测方面优于ReNet,MRF和非常深的ResNet-101。最后但同样重要的是,我们认为我们提出的大型挑战车道检测数据集将推动自动驾驶的研究。