实时语义分割

而针对于实时语义分割的方法,近年来也越来越受到研究者的关注。像FCN、PSPNet这种方法虽然能获得非常高的准确度,但是运算速度上并不能令人满意,也就是说,这类方法能让计算机“看得准”,但是没办法让计算机“看得快”。而什么方法能够让计算机既能够“看得准”,又能“看得快”,就是一个非常值得研究的问题了。因此,本文主要综述现有的一些语义分割方法,试图将实时语义分割的发展脉络丛几个角度梳理出来展现给大家。
 

  1. 实时语义分割的关键问题

 首先,实时语义分割说到底也还是一个语义分割问题,语义分割目标是在给定图像或者图像序列中,给每个像素划分该像素对应的类别。由于相当于要给每一个像素都要给出一个类别判断,所以也被看作是一种稠密估计(Dense Prediction)问题。

同样是数据上,由于语义分割需要大量的精细化图像来对场景产生更为准确的理解和判断,所以一般语义分割的图像都是非常大的,就算小图一般也有几百乘几百,大到1024*2048,甚至在遥感领域做分割的几千乘几千的图像都有。为了保证效果,一般都会尽量减少其中的降采样操作以免图像质量变差,但是这样一来在训练的时候计算资源的消耗会增长的非常厉害,训练的时候一张11G的显卡可能只能放得下两张图像,batchsize过小导致BN层更新的时候均值和方差计算非常不准,进而影响训练效果。这也是为什么高精度语义分割近年来很少出现轰动性的研究成果,一方面因为数据集的效果基本上刷到极限了,另一方面就是大家都逐渐开始玩不起了(指硬件条件不够)。针对这个问题,也有一部分研究成果,比如Kaiming He的Global Normalization,或者一些其他的训练手段,这里也不细讲了。

实时

首先实时的定义是什么,虽然很多文章标榜自己能够做到实时,甚至标题名字中包含了Real-Time这个词,但是这些文章中并没有给出实时的具体解释。就目前的文章里面看到的,一般大家会在30FPS的位置画一条虚线,如图 4所示为ICNet中给出的Inference time和Accuracy的对比图。
 

此外就是,怎样才能做到实时?为什么以前的一些高精确度的网络做不到实时?这里面我觉得有几方面的问题:

1)首先是现有的高精度语义分割网络,大多是基于一个Encoder-Decoder架构,即前面通过Encoder编码图像内的有效信息,然后通过Decoder来进行解码,如图 5所示。而在选取Encoder编码器的时候,一般都会选择像是AlexNet,VGG,ResNet等在ImageNet上预训练好的分类网络,而这些网络为了能够有更好的特征提取的效果,会把网络设计的很深,网络参数设计的很多,以此提升网络的非线性拟合能力。而这种网络参数和层数一旦上去,计算操作就会大大增加,进而影响到处理一张图像的速度。

 2)第二个就是现有语义分割网络要处理的图像大小比较大,动不动几千乘几千的大小,对于基于卷积操作的CNN是一个不小的负担。因此,怎样能在不损失精度情况下,降低待处理图像的分辨率也是加速的一种有效手段。

3)最后就是,如果只采用一个浅层网络,自然效果不会好到哪里去,但是相对而言,运算速度上由于参数更少操作更少,所以运算速度会相对比较快。而是用一个深层网络的话,操作就会成倍增加然后拖慢运行时间,但是准确度会提升很多。那么,有没有一个办法取两者的优点,得到一个运算很快效果也很好的网络呢?这也是第三种方法,从两个分支的角度出发来考虑问题。

  1. 实时语义分割解决方案:从特征提取角度思考

 第一种就是从特征提取的角度思考问题。这种方式非常直接也很简单,直接二话不说,换一个更简单的BackBone用以特征提取就好了。VGG19,ResNet50,ResNet101参数量太大?那我就换个小点的,ResNet18?不行再换成专用的Xception18,MobileNetv2?这种直截了当的方式,能取得非常明显的效果,代表性的有ENet,SQ,ESPNet等
 

       2.实时语义分割解决方案:从多分支角度思考

利用更好的backbone能够取得更好的特征提取也就是Encoder的效果,但是相对而言计算所需要的代价就越高。浅层网络运算速度快但是特征提取效果很差,这两者怎么进行一个权衡呢?这就是多分支这一类方法主要考虑到的问题。

不同分辨率下的图像,经过相同的网络层,计算速度同样也是不一样的,更大的图像意味着更多的计算代价,而小图像就算经过相同的网络,相同的参数运算,也能够以一个较快的速度计算完成,但是得到的图像很小,在上采样过程中可能在边界处会引入大量误差。同时,我们也知道,一张图像经过浅层网络,一般保存下来的是边缘等空间结构信息。那么,我们能不能一方面通过原图像来经过浅层网络提取空间信息,另一方面用深层网络和经过降采样的图像提取空间上下文信息,然后将两者进行融合得到一个既有空间上下文又有图像细节的融合预测结果呢?答案是肯定的,

总的来说,这种方法应该是最近几年针对实时语义分割特别有效的一个方法,不管是效果上还是运算速度上都还算是挺令人满意,但是单纯这种方式目前很难去做出新意。

  

      3.实时语义分割解决方案:从分辨率角度思考

语义分割有一个非常严重的问题就是分辨率,如果输入图像一直保持是原图像大小,那么训练用的计算资源一定会吃不消,要么就是batchsize太小影响训练效果。所以大多数情况下,不管是训练还是最后的前向Inference的时候,都会采用1/4大小的图像进行推导,最后采用双线性插值等方式来进行上采样到原图大小。这样就会引入一个很严重的问题,在Encoder阶段通过pooling丢失的一些位置,边界等信息,丢失了就是丢失了,网络是没有办法从这些已经丢失了的信息中将其恢复出来的。因此,怎样设计一个高精度的上采样模块就是非常关键的了,也就是怎样设计一个好的Decoder。


 

猜你喜欢

转载自blog.csdn.net/weixin_45912366/article/details/127539978