关于图像语义分割
1、图像分割与图像语义分割的区别
传统的图像分割算法基于无监督学习,不知道分割出来的对象的类别。图像语义分割一般基于深度学习,主要是用CNN,也有个别会用到RNN的;此外,图像语义分割属于监督学习的任务,即在训练时会给出每个像素的类别。
2、图像的密集分类问题
语义分割是个密集分类问题,需给每个像素分类,故语义分割和图像分类的目标有较大差异。为了适应这种差异,人们提出了带洞卷积。带洞卷积在语义分割中很受欢迎,因为带洞卷积可以在不扩大滤波器维度的情况下有效地增大感知域。
3、带洞卷积的起源与变异
带洞卷积(dilated convolution),也叫atrous convolution。语义分割中的带洞卷积起源于图像小波分解中的补零滤波器,但语义分割中的带洞卷积不存储零值以减少参数和计算量。
相比于普通的卷积,相同核大小的空洞卷积能有效地扩大感知域(conception field)。dilation rate为1时,等同于普通卷积;dilation rate大于1时,带洞卷积核两点之间间隔dilation rate减1(即下图WaveNet中的Dilation)。
如上图WaveNet所示,卷积核大小不变,当dilation随指数数列增长时,feature map上某一点的感知域也随指数数列增长。
当然空洞卷积可能导致栅格效应:
栅格效应可以通过在后续叠加卷积层缓解,如deeplib v3;另一种方法是图森科技的PDC(hybird dilated conv)。
4、全卷积网络可以输入任意分辨率的图像?
虽然FCN的论文中说可以输入可以是任意分辨率的图像,但在一些特定的语义分割网络中,输入图像维度会受到网络结构的限制,不是任意的分辨率的输入都可以。
5、SPP (spatial pyramid pooling)
很多语义分割模型都使用了SPP结构。SPP结合了不同分辨率的输入feature map,可以综合全局和各个scale的局部信息,增强网络的表达能力。
SPP有两种,一种是PSPnet中使用双线性插值将pooling操作得到的不同分辨率的feature map放大不同的倍数到相同分辨率然后concat;另一种是deeplib v2中使用的aspp (atrous spatial pooling pyramid):
从上图可以看到,它没有通过不同stride的pooling操作生成不同大小的feature map然后放大到相同分辨率,而是用不同rate的空洞卷积来汇聚不同尺度的信息,同时使得多路的feature map分辨率相同。
6、语义分割的loss
语义分割中最常用的loss为softmax,但也有其他类型的loss:
1、加权softmax loss,log(xi)除以训练样本中对应的类别概率;
2、softmax + GAN loss。这里的GAN loss是生成对抗网络在判别生成的mask是不是ground truth。GAN loss可以稍微提高一点点mIoU。