最全语义分割概览

程序员大白

共 4532字,需浏览 10分钟

 ·

2022-01-22 16:19


点击上方“程序员大白”,选择“星标”公众号

重磅干货,第一时间送达

来自 | 知乎    作者丨Mr.Ma
编辑 | 深度学习算法与计算机视觉公众号
来源丨https://zhuanlan.zhihu.com/p/51313586
仅作学术交流,如有侵权,请联系删文


语义分割是指对图片中的像素进行类别上的分类,有别于实例分割,不能区分同一类别的不同个体。本文对从FCN开始的语义分割网络进行了一些总结,有没写到的网络还希望大家留言给我。

借鉴自 https://zhuanlan.zhihu.com/p/27794982


一、FCN:CNN语义分割的开山之作

结构

简单来说,FCN在网络上的改变就是基于当时最好的图像分类模型,将最后的全连接层替换成了卷积层,这样最后汇聚到一个点的网络结构,变成了汇聚成缩小一定比例的分类图,并且最后一层的21个通道代表着最后的21个分类结果。同时也揭示了伴随着端到端语义分割的一个主流矛盾:既需要全局的感受野来完成分类任务,又需要在边缘部位,用局部信息和低层的低级视觉信息来达到准确的边缘分割。

特点

  •  用全卷积替代了全连接

  • 为了弥补下采样操作造成的损失,使用了反转卷积的操作来恢复信息

  • 单纯地使用反转卷积无法得到好的效果,用下采样之前的特征图与上采样之后的图片进行融合这样可以指引上采样过程恢复到比较好的效果。即高低通道特征融合。恢复低级视觉信息

使用全卷积网络做语义分割的矛盾就在于,图片中的语义信息在大的感受野条件下,可以得到很好的分类结果。但是过大的感受野会丢失细节信息,丢失边缘,局部信息,又不利于局部分割信息的恢复,如何设计网络平衡这个矛盾是个比较重要的问题。毫无疑问,FCN提过了一个很不错的方法和方向。即Encoder-Decoder并强调高低通道特征的融合。


二、Deeplab_v1

空洞卷积

因为主流的网络为了获取较大的感受野(理论上来说大的感受野有助于分类),都采用了conv中加上stride,或者采用pool(池化)来让神经网络高层获得的感受野更大,这样分类结果会更准确,但带来的缺点就是图像分辨率会下降,同时maxpool这个操作会丢失图像的部分细节信息,不利于分割任务,所以在deeplab中大范围用空洞卷积来扩大感受野,同时也尽量避免降低图像分辨率的操作,这样更容易恢复到原始分辨率大小。


特点:

  • 空洞卷积,就是上图这个东西,不损失分辨率和边缘信息的情况下增大感受野

CRF(条件随机场)
  • 条件随机场,虽然使用空洞卷积,但仍然存在着池化操作,并且卷积本身就会让边缘信息弱化一些,使用传统的CRF条件随机场能让模糊的边界信息更清晰,使图像更加精细化,相当于网络中的Decoder部分的功能。实际实验中,CRF对于Deeplab的准确率提升非常显著。

在deeplab中对于缩小后的图像并没有使用神经网络实现和fcn一样的解码器结构,而是使用了上头的条件随机场这个偏向传统视觉处理的方法。后续的deeplabv3版本中已经不使用该方法。

三、U-Net

特点

  • U-net的结构非常对称,优雅,清晰。作者论文中的图片简明易懂,画的真是太好看了好吧!!!

  • 该网络结构强化了FCN中特征融合的思想,很明显,每一层中都加入了低级通道的特征图,并且,采用了通道叠加,而不是直接加和的思想,这样给了网络充足的能力去选择不同的区域叠加不同的通道,而不是暴力加和,这个应该是改进比较好的地方。

  • U-net在loss中引入了加权权重的思想,这个想法是很好的,因为由于感受野的问题,最后的特征图的边缘信息会弱一些,因为感受野捕获到的边界背景信息与主体信息几乎是一半一半可以说,边缘信息会弱化,那么增大边缘部分的loss权重,会促使网络在边缘部分多留意,这样会让边缘效果稍好一些。嗯就这样。这也是大的感受野,与细分边缘之间的矛盾。

可以看到这个网络结构还是比较浅的,不想其他主流网络堆得很深,目前在医疗图像分割领域用U-net的非常多,分割效果也很不错,但在分类任务很复杂的的语义分割数据集中表现的并不是很好,这跟网络本身比较浅也有关系。同时,正是由于U-net本身比较浅,很多低层视觉信息很重要,被保存了下来,所以在医疗图像分割上可以达到很精准的边缘提取,等等分割任务。

四、Seg-Net

特点

  • 在上采样步骤那,进行了一个所谓的坐标上采样功能,这样恢复后的上采样特征图会将像素恢复在之前的坐标处,然后再结合低层的特征图,得到比之前直接上采样的效果会好一些,实际上这样做性能是大幅提升了,速度快了很多,计算量和参数都少了很多,不过准确率只能说一般吧。



五、Deeplab_v2

ASPP模块

特点

  • 用了新的Resnet结构,并将卷积替换成了空洞卷积部分。

  • ASPP模块,也就是使用不同扩张率的空洞卷积来获取最终特征图上的不同大小的物体,还是关于感受野的问题,作者认为之前一味地提高感受野也不是好事,因为毕竟有大的物体,和小的物体,不能通过一个固定不变的感受野来解决问题,所以不同尺度的感受野很重要,所以大概设计了四种不同大小的感受野来找到对应的物体。这个想法很不错,很work,并且之前大家似乎都没有提到,也没有改进。

  • 还是传统的CRF,没怎么看。。。


最大的改进就是ASPP模块了,之前提到扩大感受野对于正确的分类有很大的好处,但是也不是一味地提升感受野,这样必然会导致泛化能力太弱,图片中的物体大小自然是不一样的,用相同的感受野只能说对于某个大小的物体识别比较准确,一旦有比较大的,或者很小的自然效果很差,作者考虑到这个问题,在特征图的最后加入了ASPP,简单理解就是通过不同大小的空洞卷积模块来达到不同的感受野的目的,这样就可以对不同大小的物体都能做到比较准确地检测,进而提高准确率,事实也证明这个网络模块非常有效!!


Fcis:基于实例分割的分割,其实实例分割有很多好处,实例分割,可以将分类和分割两件事分离开来,正如何凯明在论文中提到的类间竞争,分割的时候只负责分割,然后类的事交给专门的分类网络判断,这样可以减少相互之间的干扰,分类可以有较大的感受野,分割可以去获得低层的视觉信息。也是种不错的选择吧。

特点

没仔细看,觉得实例分割改善分割效果应该会有帮助。最终语义分割也是要走向实例分割的(个人觉得),并且实例分割带来的分类和分割准确度的提升应该很大,具体可以看mask-rcnn中对这一问题的阐述,我觉得何凯明大神的观察真是非常透彻!!


六、RefineNet

特点

  • 整个网络都是用Res-Net结构的参差思想设计每个模块,这是个很不错的想法,如果某个地方学不到有用的信息,那就不要添乱嘛,直接映射原来的信息,可以让网络的信息流传递更加健康。

  • 基本思路还是高低特征融合,也就加了点自己的pool链在里头,还是根据何凯明的那个参差思想做的一个最大池化操作,这个操作还是比较有用的,增大了整个特征图的感受野,有助于正确的分类结果

  • 在每一个stage阶段都进行了conv3的卷积操作,可能对于任务过渡也有一定的好处,这样可以使网络更加平滑地过渡到下一个功能阶段。

  • 附加loss是个不错的决定,这样加强了对网络内部层的监督,这样可能会导致更有效的结果,并能加快网络的收敛吧。


七、Large Kernel Matters

网络结果

特点

  •  对于large kernel 的卷积模块做了具体地解释,尽管卷积操作能够理论上到来较高的感受野,但实际上由于卷积的反向传播,不重要的偏向边缘信息由于在逐层的卷积和连接过程中,会慢慢地被削弱,这就涉及到文中提及的有效感受野问题,具体在一片论文中专门研究了实际有效感受野的问题。

  • 当然直接在某一层使用大的感受野的卷积核,是一个非常直接、有效的扩充感受野的方法,但直接用大内核会带来很大的计算量。实际上之前googlenet中也介绍了这个问题,使用小的卷积核堆叠很多层来近似为一个大内核的来达到这样的效果。

  • 在分类任务上,文中专门对如何设计大的内核做了大量的详细实验,包括kxk,kx1与1xk相结合,3x3 的堆叠,实际上证明只有1xk-kx1是work的,甚至直接kxk的这样的结构效果都不够好,这个和xception中提到的想法类似,都是讲两个操作分离化,这样既减少了计算量,同时甚至带来了效果上的提升,至于为什么会带来很大的提升,作者说的都是我们猜,我们假设,神经网络本来很多东西都是基于经验,基于实验嘛,哈哈,大家自己想一想吧。

  • 同时网络中为了细化边缘还引入了一个叫BR的边缘定义模块,其实就是一个普通的参差模块吗,可能这个模块放在底高层的特征图融合后,能够刚好配合反向传播学到一些对边缘细化有用的信息,也就是大家都在做的对decoder模块的各种各样的小改进,有效果就好。个人觉得不是太重要的东西。


八、deeplabv3

网络结构

特点

  • 加入了像素级别的特征图以及原始的图片信息在ASPP模块中,实际上没改什么东西,也就是把特征融合地更多了,这有点显而易见,必然结合的特征越多,对于效果的提升越来越大。

空洞卷积级联的尝试
  • 尝试了级联空洞卷积模块,实际应用中发现是不work得,从res的四个模块加到了7个模块后没有发现较大的性能提升。当然这样一味地增大感受野没有ASPP那样对不同层次,和不同大小的有效感受野从理论上和实践上有效果。

  • 去掉了CRF模块,证明网络已经基本上与其他的end to end网络达到了同样性能,没有CRF这样的黑科技的加成下,哈哈。

本来个人认为,语义分割就是用神经网络来实习端到端的分割结果,来找出每个像素的分类结果,尽可能保留主要语音信息,边缘稍微有些混乱,也是正常现象,通过各种各样传统视觉算法中的trick当然可以细化这个边缘结果,让效果更好,不过既然大家主要都是研究神经网络,那就只用神经网络这块的性能提升来比较客观、公正一些。


九、deeplabv3+

左1 depplabv3 中间 主流的编码-解码结构 右边 deeplabv3+的改进后的编码结构

特点

  • 主干网络采取了Xception,并融入了他的空洞卷积操作

  • 采用了Decoder模块,那为什么没有像其他网络一样经过了很多个低级特征到高级特征的融合呢?在4倍到原始分辨率的时候,我猜这是因为可能再低级的信息缺乏价值???可能我看的不够仔细吧,明明我觉得中间的解码结构是很好的,没有看到作者介绍(可能我没仔细看--)。或者对于deeplab这样的结构来说两次解码已经可以达到很好的效果,再多的信息可能没有什么提升吧。

13个你一定要知道的PyTorch特性

解读:为什么要做特征归一化/标准化?

一文搞懂 PyTorch 内部机制

张一鸣:每个逆袭的年轻人,都具备的底层能力




西[]


浏览 63
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报