自动驾驶入门日记-6-视频语义分割
在自动驾驶任务中,实时性一直是急需解决的一个问题,也是极其具有挑战性的一个问题。一方面,现阶段一辆装满所有传感器的自动驾驶汽车每秒收集的数据量高达1-4GB(数据来自网络,不一定准确),另一方面,为保证汽车长时间的续航能力,自动驾驶汽车应尽可能的保证节省电力,同时大功率的计算部件其散热也是一个必须解决的问题。
因此,如何在减少计算量的同时保证得到的结果准确鲁棒就是计算机视觉科学家应该审慎思考的一个问题了,目前针对降低自动驾驶视频语义分割延迟的相关工作已经发表了很多,我选取其中的几篇进行简答介绍。
1.SegNet: A Deep Convolutional Encoder-Decoder Architecture for Robust Semantic Pixel-Wise Labelling
SegNet使剑桥大学机器智能实验室提出的在FCN的基础上修改的一种比较优美的网络结构,由于其官网上提供了很详尽的学习资料,因此在其基础上也衍生出了很多优秀工作。
网络结构网络结构的细节感兴趣的可以看论文,由于篇幅问题这里比详细阐述了。SegNet的架构可以看作一个Encoder-Decoder模型,前一半可以看作一个使用CNN和polling的编码器,后一部分使用upsampling与deconvolution组成对应的解码器。
值得注意的是,相比于其他网络结构的pooling层,SegNet中的pooling层多了一个index的功能,即记录最大池化时所选取的数值的位置信息,以便在上采样过程中进行恢复。、
unpoolingBayesian SegNet
在SeNet中最后每个像素都会对每一类的概率进行计算,再通过Softmax输出概率最大的一个,然后这个像素点就认为是这一类别,对应的概率就是这一像素属于该类的概率。这种由原因到结果的推导,可以称为先验概率,任何先验概率使用都会出现一个问题,不能知道这一结果的可靠性,即便先验概率非常大,但是对于不同的样本,先验概率无法保证一定正确。正是如此,才需要有从结果寻找原因的贝叶斯概率,即后验概率,它能给出结果的可信程度,即置信度。Bayesian SegNet正是通过后验概率,告诉我们图像语义分割结果的置信度是多少。
Bayesian SegNet可见,在网络中加入一层Dropout即可得到语义分割图像的不确定性灰度图,具体的原理参考Dropout as a Bayesian approximation: Representing model uncertainty in deep learning。
高斯过程是指任意有限个随机变量都服从联合高斯分布,同时只需要知道均值与协防差就能够确定一个高斯过程,所以高斯过程可以用于从有限维到无限维的回归问题,从已知高斯分布,增加新的随机变量分布可以求出新的高斯分布,根据新的分布可以求出其均值与方差。
如何确定一个高斯分布?需要多次采样才能确定一个分布。蒙特卡罗抽样告诉我们可以通过设计一个试验方法将一个事件的频率转化为概率,因为在足够大的样本中,事件发生的频率会趋向事件发生的概率,因此可以很方便地求出一个未知分布。通过蒙特卡罗抽样,就可以求出一个新分布的均值与方差,这样使用方差大小就可以知道一个分布对于样本的差异性,方差越大差异越大。
在Bayesian SegNet中通过DropOut层实现多次采样,多次采样的样本值为最后输出,方差最为其不确定度,方差越大不确定度越大,多次采样后就可以得到不确定性的灰度图。
可以看到,不确定性灰度图很像图像的边界提取,这也直观的表明了在语义分割问题中边界的不确定性较大的问题。
2.Low-Latency Video Semantic Segmentation
参考资料:CVPR 2018 | 商汤科技Spotlight论文详解:极低延迟性的视频语义分割
算法核心思想
本文算法使用视频分割中经典的基于关键帧调度的模式来有效平衡计算量和精度。具体来说,如果当前处理帧为关键帧,则使用整个分割网络来获得语义分割的标签,如图2左部分所示;如果当前帧不为关键帧,则变换分割网络高层历史帧特征为当前帧高层特征,再使用分割网络的语义分类操作获得当前帧的语义标签,如图2右部分所示。关键帧的选择和特征跨帧传播两个操作均基于同样的网络低层特征,具体操作在之后章节详述。在划分分割网络结构时,算法尽量保证低层网络的运行时间远小于高层网络,(如图2所示)低层网络耗时61ms,而高层网络耗时300ms。这样考虑的出发点在于:因低层网络的计算代价很小,算法可以基于低层网络提取的特征,增加少部分额外的计算来完成关键帧选择和特征跨帧传播;当前帧的低层特征同样包含当前帧的信息,可以互补来自不同时间的传播特征;所有的操作均复用了逐帧模型的结构,算法整体模型更加简洁。
由于实现过程中涉及到一种关键帧调度的问题,而以往的关键帧选取方法要么简化为固定时间间隔选取,要么计算高层特征差异,根据设定阈值选取。前者无法适应视频帧内容变化,容易错过关键帧或者浪费计算资源,后者由于特征变化较大,阈值难以确定。因此作者使用当前帧语义标签和前一个关键帧语义标签的差异值来作为视频内容变化程度的判断依据,当差值超过某个阈值的时候,则选择该帧作为关键帧。但是直接计算这样一个差异值较为困难,作者在Cityscapes和Camvid两个数据集上发现低层特征和语义标签的变化值有很大的关联,因而利用低层特征来预测这样该差值,即输入历史帧低层特征和当前帧低层特征到一个回归器来回归该差异值。
自适应关键帧选择 整体框架当视频的序列帧不断输入时,在第一帧时刻,进行初始化操作,即输入图片帧给整个网络,获得低层特征和高层特征。在接下来的时刻t进行自适应的计算,首先计算低层特征:输入和上一个关键帧低层特征至自适应关键帧选择模块,判断当前帧是否为关键帧。若为关键帧,则输入底层特征至高层网络获得高层特征;否则输入底层特征至自适应特征传播模块获得当前帧高层特征,进而通过语义分类获得当前帧语义标签。
本文在牺牲较小精度的条件下极大的降低了系统延迟,这种低延迟调度策略可将延迟由360ms降低到119ms。但是本文方法在场景变化剧烈的条件下(即关键帧采样比较密集)仍然无法有效降低延迟,因此论文作者希望在未来工作中在模型压缩和模型设计方面进一步降低算法的总体延迟和计算量。
祝好!愿与诸君一起进步。