Spatial as Deep: Spatial CNN for Traffic Scene Understanding
AAAI 2018
https://github.com/cardwing/Codes-for-Lane-Detection
https://github.com/harryhan618/SCNN_Pytorch
https://github.com/XingangPan/SCNN
数据库问题
Caltech Lanes Dataset (Aly 2008) and the recently released TuSimple Benchmark Dataset (TuSimple 2017) consists of 1224
and 6408 images with annotated lane markings respectively
自建的数据库 北京市区采集,图像做了畸变矫正
133,235 frames , 88880 for training set, 9675 for validation set, and 34680 for test set,We divided the test set into normal and
8 challenging categories
这里我们将缺失或遮挡的车道线也标记出来,对于Figure 2 (a) 1 中 栅栏左侧的车道线就不标记了,即栅栏以外的车道线不标记。本文只关注四类车道线,其他类型的车道线就不检测了。
Spatial CNN
对空间关系建模的传统方法是基于 Markov Random Fields (MRF) or Conditional Random Fields (CRF)。最近有人讲 CRF 和 CNN 结合起来使用。
mean field algorithm 可以通过 CNN网络实现。流程如下:1)归一化:CNN的输出看做 unary potentials,使用 Softmax operation 归一化; 2)信息传递:通过 使用 大 kernels 的 channel wise convolution 来实现;3)Compatibility Transform,通过 一个 1×1 convolution layer 实现;4) Adding unary potentials。整个过程迭代 N 次给出最终的结果。
上面这个信息传递过程中,每个像素从其他所有像素接收信息,这样做计算量很大,很难满足实时应用场景。对于 MRF,大的卷积核很难学习,需要很小心的初始化。而且这个过程是其CNN的输出进行处理的,可能对 CNN 网络中的 top hidden layer 输出信息处理更合适。
这里我们提出 Spatial CNN 来解决上面的问题
假定 SCNN 的输入是 一个 3D tensor, 其尺寸为 C × H × W,其中 C, H, and W denote the number of channel, rows, and
columns respectively。 这里我们将 tensor 切分为 H 个 slices,第一个 slice 被输入到一个卷积层,该卷积层有 C个 kernels, 每个kernel 的宽度为 w。 传统CNN网络中 该卷积层的输出被送到第二个卷积层进行卷积。这里不一样,第一个 slice 的卷积输出 加上 第二个 slice 作为第二个卷积层的 输入,以此类推,知道最后一个 slice 被处理。 下面这个公式描述的就是上面这个过程。
上面描述的是一个 SCNN_D 模块,还有 SCNN_U, SCNN_R, SCNN_L。 the four ’SCNN’ module with suffix ’D’, ’U’, ’R’, ’L’ denotes SCNN that is downward, upward, rightward, and leftward respectively.
前一个 slice 卷积输出和 当前 slice 相加 按照一定方向进行: 从上到下、从下向上、从左到右、从右到左
Analysis : Spatial CNN 的优势
(1) Computational efficiency 计算量变小,每个像素相关联的像素表少很多
(2) Message as residual.
前一个 slice 卷积输出和 当前 slice 相加 可以看做一个 residual,deep SCNN messages are propagated as residual
(3) Flexibility
SCNN 可以嵌入到 CNN 网络的任何位置
这个视角不包括 CNN提取特征的时间