图像分割的理解

图像分割的理解

知乎回答

为什么深度学习中的图像分割要先编码再解码?💻

问题描述:如FCN, U-NET等结构,都有编码,解码的过程(降采样,上采样),为什么不能直接用全卷积,不pooling,一直保持相同的特征图大小进行分割呢?

回答作者:张良怀
链接:https://www.zhihu.com/question/294617103/answer/634142274
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

可以不用降采样,降采样是手段不是目的!!(可参考下文的HighRes3DNet)

降采样有以下几个目的:

  1. 降低显存和计算量,图小了占内存也就小了,运算量也少了。
  2. 增大感受野,使同样3*3的卷积能在更大的图像范围上进行特征提取。大感受野对分割任务很重要,小感受野是做不了多类分割的,而且分割出来的掩膜边界很粗糙!!
  3. 多出几条不同程度下采样的分支,可以很方便进行多尺度特征的融合。多级语义融合会让分类很准。如果不需要考虑计算和显存,你当然可以不做下采样,用膨胀卷积也是可以增大感受野的。

大家可能觉得做了下采样,会导致底层特征损失,但只要留下一条没有做下采样的分支,底层特征就不会损失。所以unet提出用skip connection保留细节。

但unet的缺陷是是底层特征都没做什么变换就直接融合了,网络会不会非线性不够学习能力不行?所以问题的基础目的是,如何增大特征提取感受野并实现多尺度特征融合。进阶目的是,如何保证各尺度信息变换充分。

下面举几个很好的例子说明以上几点:

  1. HRNet

    核心思想就是充分变换并融合三条不同分辨率支路的特征。这个网络在分割,目标检测和姿态检测三个任务上都达到STOA。网络思路明确,做法粗暴,效果好,但是性能要求不低。github link

  2. unet改进系列,unet++DLANet

    • 这两个网络的细节可见周纵苇-研习U-Net
    • 这些网络改善了unet浅层特征可能变换不充分的缺点。更像HRNet,但性能上要求低一些。

图像语义分割中 【语义】 体现在哪里?🌍

回答作者:张良怀
链接:https://www.zhihu.com/question/294617103/answer/634142274
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

语义提取, 就是编码、浓缩的过程。

分类问题是一个纯语义提取问题,所以网络是一个不断编码浓缩的过程,最终网络的输出也就是一个是与否的二值信息(两分类)。

分割,依托于解码重建的过程。需要给网络补充足够的细节。

语义和分割是两个需要权衡的矛盾体。需要更广的语义必然需要压缩的很厉害(池化或stride大于1的卷积),而压缩太厉害又会导致细节丢失严重。所以如何做到在不丢失细节的情况下提取更多的语义,是语义分割一直以来着重解决的问题。

通过deconv的方式搭建的decoder结构,相当于是通过训练,在deconv的权值中存储恢复目标轮廓特征的统计信息,用来为重建过程提供细节指导。既然是统计信息,必然是平均的情况,因此重建出来的目标会呈现出一种平滑或平均的效果。遇到一些特别一点的输入,分割效果就会相差很大(这种平滑的特性也可以用来做去噪,或者图像的超分辨,图像的复原)。

unet网络采用一种跳线的方式,将encoder中更高分辨率的特征送入到decoder为其提供细节。

deeplab 网络提出膨胀卷积,可以在不使用池化的情况下,增大语义范围,避免了细节的丢失。

它们还提出assp,小范围语义,大范围语义,都对分割有贡献。

目标结构有多大,就尽量给网络多大的感受野,它才能够识别出目标的语义,辅助完成准确的分割。

回答作者:匿名
来源:知乎

用卷积做下采样可能可以减少信息的损失,但是我觉得应该不会完全没有损失。你想要让一个feature map上同时存储高层信息和低层信息,这就涉及到网络如何去统一存储这些信息,这对卷积网络是不直观的,我觉对网络来说,为它在网络设计的层面上就给它分层规划好,哪些层的卷积存高维信息语义,哪些存低维细节信息,网络会更容易训练,有限资源下也能达到更好的效果。

为什么逻辑回归对样本分布不均衡比较敏感,为什么树模型没有线性模型那么敏感?

回答作者:张良怀
链接:https://www.zhihu.com/question/294617103/answer/634142274
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

任何通过计算样本的Loss然后反向传播更新权值的算法,都会对正负样本的数量是否平衡很敏感。哪一类样本多,权重调整时就更倾向于调整到使该类样本错分率更低。不管是逻辑回归,还是深度学习。

树模型不属于上一类,它是通过计算信息熵来选择特征划分样本的,划分后熵增最大。这个计算过程对于样本的数量的多少是不敏感的,因为熵的计算和样本数量无直接关系。

再说下,SVM,他不是算最小Loss,是算最大间隔(样本到决策边界的垂直距离),它的表述更直观。而因为它只算支持向量到分割平面的间隔,所以事实上他对于样本的不平衡不敏感,只要支持向量平衡就行了。

有哪些「魔改」loss函数,曾经拯救了你的深度学习模型?

我来谈谈分割任务的Loss函数。首先想要解释一下,Loss函数的目的是为了评估网络输出和你想要的输出(Ground Truth,GT)的匹配程度。我们不应该把Loss函数限定在Cross-Entropy和他的一些改进上面,应该更发散思维,只要满足两点:

  1. 能够表示网络输出和待分割目标的相似程度

  2. Loss的计算过程是可导的,可以进行误差反传。

仍然从Cross-Entropy和它的一些改进说起,这一类Loss函数可以叫做Pixel-Level的Loss,因为他们都是把分割问题看做对每个点的分类,这一类包括:

  1. CE(cross-entropy)。
  2. wCE(weighted cross-entropy)。可以看UNet原论文,对边界像素这些难学习的像素加大权重(pixel-weight)
  • 当然还可以做类层面的加权(class-weight),比如对前景像素加大权重,背景像素减小权重,或者不同的类别按照其所占像素的比例,分配权重,占比小的权重大一些,占比大的权重小一些,解决样本不平衡的问题。
  1. focal loss。很巧妙又简洁的一种方式。它使难分类样本权重大,易分类样本权重小。至于哪些是难分类样本哪些是易分类样本,都由网络的输出和真实的偏差决定。这就实现了网络自适应调整。类比我们学知识,难学习的内容,我们同样时间学的不好自己知道,我就会自觉的花更多精力去学习。以前的神经网络没有识别难易任务自动分配精力的方式,focal loss带来了这种自适应反馈。同样能够实现这种自适应方式的还有在线难样本挖掘(Online Hard Example Mining,OHEM)。

2016年的VNet论文首次提出了Dice Loss,应该是Class-Level的Loss的代表。Dice系数是分割效果的一个评判指标,其公式相当于预测结果区域和ground truth区域的交并比,所以它是把一个类别的所有像素作为一个整体去计算Loss的。因为Dice Loss直接把分割效果评估指标作为Loss去监督网络,不绕弯子,而且计算交并比时还忽略了大量背景像素,解决了正负样本不均衡的问题,所以收敛速度很快。类似的Loss函数还有IoU Loss。

如果说DiceLoss是一种区域面积匹配度去监督网络学习目标的话,那么我们也可以使用边界匹配度去监督网络的Boundary Loss。我们只对边界上的像素进行评估,和GT的边界吻合则为0,不吻合的点,根据其距离边界的距离评估它的Loss。这一类论文可以搜关键词Boundary aware,Boundary Loss等。

不管是逐像素、区域,还是边界,它们都是低维特征,我们还可以考虑使用预测结果和GT的高维特征的匹配度去监督网络,高维特征即Mask的一些形状特征,这样的监督方式就能够让网络学会去学习目标结构的形状先验(Shape Prior)。如何提取高维特征,有的论文使用PCA对输出和GT进行降维,也有使用自编码器(AutoEncoder)的Encoder端进行编码的(需先使用Mask训练一个自编码器),然后对降维后的编码计算距离,作为最终的Loss。这一类论文可以搜关键词Shape Prior,Shape Constrained...,Anatomically Constrained等等。以上所有的Loss都是用Mask去监督网络的输出,如果我们的Mask标注的并不够好呢,我们是不是可以考虑引入一些原图的信息作为辅助,丰富Loss函数,监督网络,这种思路叫做Weakly-supervise/Semi-supervise,弱监督。
上述大多都是结合自己的工作和文献阅读的总结。如果有不恰当的地方,欢迎交流讨论。

skip connection的原理是什么?为什么U-net中要用到skip connection?🔪

知乎作者:SuperMHP@知乎

针对unet的skip connection

1.对于分割这个任务,空间域信息非常重要。而网络的encoder部分,通过各个pooling层已经把特征图分辨率降得非常小了,这一点不利于精确的分割mask生成,通过skip-connection可以把较浅的卷积层特征引过来,那些特征分辨率较高,且层数浅,会含有比较丰富的low-level信息,更利于生成分割mask。

针对resnet里的skip connection:

1.从Resnet最早引入skip-connection的角度看,这种跳跃连接可以有效的减少梯度消失和网络退化问题,使训练更容易。直观上理解可以认为BP的时候,深层的梯度可以更容易的传回浅层,因为这种结构的存在,对神经网络层数的设定可以更随意一些。不带skip connection的网络层数深了非凸性暴增。

2.从微分方程角度看,skip-connection的加入会使得具体一层可以替代为差分预测机,这种理解对于resnet已经被一定数量的工作阐明 [2, 3],至于unet这种,链接方式不是相加,且所跨层数不固定的,是否可以和微分方程建立联系,还需要想一想。

xiehousen@github

github链接:https://github.com/xiehousen/Dense-Unet

研一的时候研究过U-Net,简单说一下自己的理解,如有错误还望指正!

U-Net是一种典型的编码-解码结构,编码器部分利用池化层进行逐级下采样,解码器部分利用反卷积进行逐级上采样,原始输入图像中的空间信息与图像中的边缘信息会被逐渐恢复,由此,低分辨率的特征图最终会被映射为像素级的分割结果图。而为了进一步弥补编码阶段下采样丢失的信息,在网络的编码器与解码器之间,U-Net算法利用Concat拼接层来融合两个过程中对应位置上的特征图,使得解码器在进行上采样时能够获取到更多的高分辨率信息,进而更完善地恢复原始图像中的细节信息,提高分割精度。

而增加了skip connection结构的U-Net,能够使得网络在每一级的上采样过程中,将编码器对应位置的特征图在通道上进行融合。通过底层特征与高层特征的融合,网络能够保留更多高层特征图蕴含的高分辨率细节信息,从而提高了图像分割精度。

我们也在U-Net上面做了一些工作。

我们在网络中引入邻层特征重建和跨层特征重建增强层与层之间特征信息传递的同时,进一步对高层卷积特征层中丰富的细节信息进行了利用,从而最大化地提高了网络各层中的特征信息的利用率。

跨层特征重建:跨层特征重建模块建立在编码器-解码器结构的基础上,旨在将语义信息更丰富的高层卷积特征层和低层卷积特征进行融合。因为在网络传播的过程中,随着网络越来越深,相应特征图的感受野会越来越大,但是保留的细节信息会越来越少,而对于语义分割任务,高层卷积所保留的丰富的细节信息是非常有利用价值的,基于编码器-解码器对称式的结构,利用Concat拼接层将编码器过程中下采样提取出来的特征图与解码器过程中上采样得到的新特征图一一对应进行通道维度拼接。凭借跨层特征重建模块,可以更大程度地保留高层卷积中的一些重要特征信息,有利于实现更精细的分割效果。

邻层特征重建:邻层特征重建是在整个网络中除主干路之外的每一对具有相同尺寸特征图的相邻卷积层之间搭建了支路,即利用Concat拼接层将上一层卷积与下一层卷积得到的特征图进行通道维度的拼接。Concat拼接完成后再回到网络主干路,执行原有的计算并传递给下一层。凭借邻层特征重建模块,网络的整体结构变得更密集,网络中每一层都可以从其上一层的输入中最大化地利用其之前所有层中的特征信息。

公众号文章

来源公众号:GiantPandaCV
来源标题:谈一谈UNet图像分割
来源标题:https://mp.weixin.qq.com/s/eQgA1OYozKLXx-gbJjDpnw
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

图像分割结构设计的一些套路:

  1. 上采样+下采样作为整体的网络结构(Encoder-Decoder)

  2. 多尺度的特征融合

  3. 信息流通的方式

  4. 获得像素级别的segment map

应该说很多人,其实都喜欢在UNet进行改进,换个优秀的编码器,然后自己在手动把解码器对应实现一下。至于为什么要选择UNet上进行改进,可能是因为UNet网络的结构比较简单,还是比较好进行改进的,而且UNet的效果,在很多场景下的表现力可能都是差强人意的。

但是,直接对UNet进行简单的替换编解码器,效果应该也是差强人意或者效果就是很差的;之前也有一些同事,在对UNet进行改进的时候,也会遇到效果不好的问题。直接对UNet改进,个人认为有一个本质的原因会影响网络的效果。

  • 首先,原始的UNet在编码器的网路结构是很浅的,同时没有加padding,使得解码器获取编码器的信息时,位置信息丢失的不会很严重;但是一旦选择一个比较深的网络作为编码器(一般的特征提取的网络会加padding),使得位置信息丢失的相对来说是很严重的,在解码器获取到对应编码器的信息时,就已经产生了很大的偏移,再经过一个同样深的解码器,那么位置偏移就会变得更加严重,效果不好就可以解释的通了。

个人认为,UNet上的改进一定要认识到最原始的设计思路,以及它相对于后面系列的一个劣势,就是信息融合、位置不偏移

其实,信息融合、位置偏移在yolov4、v5中也得到了体现,v4和v5对于网络的改进思路也是紧紧抓住了这两个点(当然也有其他非常重要或者新颖的点,但是这两点一定是核心的),后期对于UNet进行改进的网络都是在对信息融合上有着独到的理解,这也是后面改进的网络比较难以再进行优化的一个原因,要想对UNet有着非常独到的新颖的改进,还是比较有难度的(Swin-UNet是Transformer在图像上的表现,我也不太好评价)。

如果非要在UNet上通过替换编解码器的方式(用现有的优秀的特征提取器)进行改进时,可以借鉴UNet++和UNet3+的思想,横纵信息的流通,还有就是padding上的特殊处理、能不能更好的进行反向传播、位置偏移上的特殊处理、不要选择太深的网络、卷积核的大胆设计这几个方面出发。

最后,其实分割网络可以尝试其他的分割模型,Deeplab系列也是一个比较好的选择,对主干的修改也相对容易。

posted @ 2022-03-03 14:55  梁君牧  阅读(800)  评论(0编辑  收藏  举报