本文及其它机器学习、深度学习算法的全面系统讲解可以阅读《机器学习与应用》,清华大学出版社,雷明著,由SIGAI公众号作者倾力打造,自2019年1月出版以来已重印3次。
摘要:
随着深度学习的发展,图像语义分割任务取得了很大的突破,然而视频语义分割仍然是一个十分具有挑战性的任务,本文将会介绍视频语义分割最近几年顶会上的一些工作。
1、基本任务介绍:
语义分割任务要求给图像上的每一个像素赋予一个带有语义的标签,视频语义分割任务是要求给视频中的每一帧图像上的每一个像素赋予一个带有语义的标签。
近些年来随着卷积神经网络的发展,尤其是全卷积网络(Fully Convolution Network)的产生,语义分割这个任务在各个数据集上取得了很大的突破.这个任务本身有很多应用场景,强调计算机对场景进行感知和理解,因此在机器人视觉,自动驾驶等应用中有着很重要的地位。然而实际上,相比于单张图像,我们更容易获取视频数据,而视频数据本身有很强的帧冗余性和不确定性,如果我们把视频直接一帧一帧地送入图像分割的模型中,必然会带来很大的计算开销,并且由于场景中运动物体的变化,也会导致分割结果不稳定性,比如一个物体前一帧是类别A,而到中间的几帧的时候突然变成的类别B,或者物体的内部出现语义类别不一致的现象。所以目前视频语义分割主要研究的重点大致有两个方向:第一个是如何利用视频帧之间的时序信息来提高图像分割的精度,第二个是如何利用帧之间的相似性来减少模型计算量,提高模型的运行速度和吞吐量。
任务的评估指标和图像语义分割相同均为mIOU(mean Intersection-over-Union),由于是video数据,同时会测试模型的FPS作为video加速方向的一个平衡.目前主流的数据集是Cityscape, Cityscape 数据集是目前主流的基于自动驾驶场景的语义分割的数据集,此外还有部分文章还使用了Camvid数据集。
2、 方法介绍
2.1 图像语义分割简要回顾
这里我将会简单地回顾下几个经典的图像语义分割模型。目前的大多数state-of-the-art的模型都是采用特征网络(backbone)加上下文模块(context modeling)。其中特征网络一般是较深的分类网络,比如resnet系列,这一部分的主要目标为了获取更好的特征表示。而上下文模块的目标是让每个像素的特征之间建立关系,进而获取整个图像的场景信息,让分割的结果的语义一致性更强,这个也是目前研究的一个热点。
图1: PSP net
PSP-net使用了resnet101作为网络的backbone, 提出了使用pyramid pooling module即特征网络金子塔结构作为context modeling来获取不同尺度的信息,具体操作为把resnet的最后一个block的输出做了4种不同尺度的average pooling操作再上采样回原来尺度,最终再把这些不同的尺度的信息进行融合,这样可以更好地捕获不同尺度的context信息。
图2:ASPP模块
Deeplabv3同样使用resnet101作为网络的backbone, 提出了ASPP的结构, 通过不同dilation rate的卷积操作来获取不同尺度的context的信息以及结合全局的context(图中Image Pooling)的融合进一步地提高特征的表征能力。
视频语义分割的很多基本模型都是源自图像的语义分割模型,其工作的重点是在于如何有效地建模时间维的信息。
2.2利用时序信息提高精度方向:
这个方向主要工作是利用视频的时序信息进而获得语义信息一致性更强的特征来做分割.
2.2.1 Semantic Video CNNs through Representation Warping(ICCV 2017)
图3:Netwarp 架构
这篇文章提出了一个叫做Netwarp的结构,它的主要作用是利用光流把前一帧的特征搬移到当前帧,进而起到一定程度上特征增强的作用,其中光流定义为两张图像之间对应像素移动的向量,这个结构可以插入到video 的帧与帧之间(如图3所示)。
图4: Netwarp模块
模块的具体操作如图4所示,模型的输入是两张连续的帧,(t-1)代表前一帧,t代表当前帧,第一步是计算两帧之间的光流F(t),这里的光流计算是采用offline的形式,即每个光流是提前计算好的,具体的光流的计算方法为Dis-Flow。接着把光流和两帧图像送入到一个叫做Transform Flow的模块中,这个模块是有小的全卷积网络模块组成,其设计目的是用图像信息来补充光流信息(如下图5,可以看出transflow除了运动信息之外还包含了物体的细节信息),之后用transform的flow再把前一帧的特征warp到当前帧(warp的具体实现是采用双线性差值操作是根据当前帧的特征点由光流信息找到对应的前一帧的特征点,再把特征点拿过来,之后介绍很多工作都会用到这种操作)。最后结合当前帧和之前帧的信息得到最终的特征表示。最终的实验结果在以PSP net上为基础网络的基础上可以提高一定的性能。
图5:DIS Flow 和Transformed Flow
2.2.2 Semantic Video Segmentation by Gated Recurrent Flow Propagation
前一篇文章主要是结合两帧之间的特征信息,这篇工作是结合多帧未标注的信息来提高分割的性能。文章提出一个叫做Spatio-Temporal Transformer GRU 的模块,如下图6。不同于前面的工作对特征进行操作,这里作者只是对分割后的结果进行操作,通过结合不同时间维度上的结果来指导图像分割网络的学习。
图6:GRFP结构
图6中的Spatio-Temporal Transformer GRU(STGRU)本质上也是通过光流信息把前面后面的label map结合到当前帧t。考虑到前面帧的一些信息对当前帧的分割并没有太大的帮助,比如一些车的部位在前几帧并没有出现,即使用光流把它移动到当前帧,这些信息对于当前帧的分割是没有帮助的。 所以作者使用了gate的思想让网络学习去combine不同的语义图,这里他使用了convolution GRU 来融合不同时间点的信息,convolution GRU是具体操作是利用卷积来学习临近帧的局部信息,所以它可以更好融合不同的位置的语义表示.这里光流产生网络采用了flownet2,是一种online计算光流的方式,这样整个frame work可以进行端到端地训练和学习。
STGPU的具体计算过程如下:首先对于临近的两帧计算出其光流,和两个不同的语义分割的结果图,然后用光流把前一帧的结果warp 到当前时刻,然后在把warp后的结果和当前帧的分割信息一同送入到GRU的模块中,得到一个输出作为当前帧的分割结果。如图中所示,前帧的路灯(灰色)通过STGRU的之后把信息传递到了当前帧,这样就弥补了当前帧分割不准的情况。
图7: STGRU 训练框架
整个框架就是把STGRU插入到图像语义分割网络中,对于当前帧,会考虑把前面后面的多个帧作为输入,从前后各sample一帧,计算sample的帧和当前帧的光流(cityscapes上是第20帧),并把多帧的语义分割图通过Convolution GRU从前向后以及从后向前地传递到当前帧(此时会有两个STGRU模块,图7中的gf和gb),最终得到一个融合具有双向temporal信息的特征表示,这时再去计算Loss进行反传。在训练的时候,作者首先会去训练图像语义分割网络,之后把Flownet的参数固定后,再去fine tune STGRU和语义分割网络,作者这里尝试了几种不同的分割网络,包括PSP, Dilation10等等,性能均有一定程度提高,从某种意义上讲,这个框架就是学习如何把时序上多帧信息融合的更好。
上述的工作中都用到了没有标注的video数据,都是用光流信息来把特征或者语义图进行融合获取更好的特征表示。
2.3降低视频冗余计算量方向:
由于在视频中帧和帧之间的相似度极高,如果让图像一帧一阵地送入神经网络中势必会带来很多冗余的计算量,而在一些具体的应用中,比如自动驾驶任务上,模型运行的速度也是一个重要因素,因此近些年来有很多工作在研究视频分割加速。
2.3.1 Deep Feature Flow for Video Recognition (CVPR 2017)
Deep Feature Flow是近些年来视频任务的代表作之一,文章的出发点是在video中deep feature的帧间差异性比较小,而对于每一帧而言,获取deep feature的时间和计算的成本特别地大(尤其是一些深度网络),作者考虑用光流来来把前面的特征给warp到当前帧,进而减少计算量。
图8: DFF framework
具体的框架如上图,首先会选取一个帧叫做关键帧(key frame),这里key frame的意思是让当前的帧通过整个网络获取深度特征(deep feature),则对于不是key frame的帧,会去计算它与key frame之间的光流(这里通过flownet-s),然后再用光流把关键帧的deep feature warp到当前帧,得到当前帧的分割结果,进而求得loss进行反传。这里key frame的选取是固定的,每隔k个选择一个作为key frame。由于光流网络比较浅并且计算量上远小于分割网络,所以这样可以大大提高分割的速度。DFF 还能处理其他的video task比如视频目标检测(video object detection),因为这个操作是在特征的传播的层次上,和后面的具体的任务无关。
DFF作为视频语义分割加速方面的一个开山之作,后面有很多工作都是基于这个框架展开的。
2.3.2 Low-Latency Video Semantic Segmentation(CVPR 2018)
DFF的关键帧选择是固定的,那么如何更加自适应地选择关键帧呢?这篇文章给出的答案低层特征(low level feature)。这篇文章的出发点是low level features的变化一定程度地代表了是否要选择key frame,因为如果帧的内容发生巨大的变化的话,底层特征比如边缘位置信息的差异性一定会很大,为此作者还做了实验来分析,作者在Cityscape和Camvid上观察发现底层特征的差异性越大,帧的内容的差异性就会变大。第二个创新点是在warp deep feature的时候不用光流而是用卷积的形式把之前的deep feature给移动当前帧,并且同时结合当前帧的low-level feature。这里的Base Network选择的是PSP net。
整个框架如下图所示:
图9: Low Latency frame work
S(l)代表网络抽出底层特征(low level feature),S(h)代表获得深度特征(deep feature),在实现上可以认为是同一个网络的两个不同的阶段,对于每一张新进来的帧,都会通过S(l)获取底层特征,然后把当前帧的底层特征和之前key frame的底层特征送入到一个小的FCN网络来预测一个值(文章中叫做weight predictor,下图),这个值代表当前帧是否为key frame的可能性,如果超过一个阈值的话就会输出1,表示当前帧的内容和之前的差距比较大,选择为关键帧,否则输出为0,代表不是关键帧,这个小的FCN可以自适应地学习出来每一帧做为关键帧的重要性。
图10:特征传播方式
对于关键帧,会像DFF那样把底层特征继续经过S(h)得到deep feature。对于非关键帧,作者用另一个小的FCN(图10中的Weight Predictor)来把预测一个权重,这个权重W是一个K*K*w*h的tensor,代表对于key frame上每一点到当前帧都有一个K*K的卷积核,之后通过卷积的方式把之前的deep feature给wrap过来,从图10中可以看到Weight Predictor可以把深度语义特征很好地移动到下一帧。最后再把当前帧的low level feature和warp后的deep feature进行融合作为当前帧的输出。
相比于DFF,这篇工作考虑了low level feature,显著地提高分割的结果,并且在速度上提出一种Low latency的调度的策略来进一步加速,这个策略是在计算关键帧的特征时候,可以先用一个进程用feature warp的方式计算一个fake的deep feature,另一个进程仍然计算关键帧的deep feature,之后非关键帧是用这个fake的deep feature进行计算,但是当真的进程计算完毕后会把这个fake的deep feature 替换掉,让接下来的非关键帧使用这个真正的deep feature 得到输出结果,这种策略以牺牲一定精度的形式换取速度上的提升。
总结
本文简要介绍了视频语义分割的两个不同方向的代表方法,相信未来研究方向也会逐渐由图像转移到视频领域。
参考文献:
(1) Semantic Video CNNs through Representation Warping. In ICCV 2017
(2) T. Kroeger, R. Timofte, D. Dai, and L. V. Gool. Fast optical flow using dense inverse search. In European Conference on Computer Vision 2016.
(3) Semantic Video Segmentation by Gated Recurrent Flow Propagation. In CVPR 2018
(4) E. Ilg, N. Mayer, T. Saikia, M. Keuper, A. Dosovitskiy, andT. Brox. Flownet 2.0: Evolution of optical flow estimation with deep networks. In CVPR, 2017.
(5) Low-Latency Video Semantic Segmentation. In CVPR 2018
(6) Deep Feature Flow for Video Recognition (CVPR 2017)