U-Net再理解

U-Net再理解🍎

谈一谈UNet图像分割🍉

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

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

  1. 上采样+下采样作为整体的网络结构(Encoder-Decoder)
  2. 多尺度的特征融合
  3. 信息流通的方式
  4. 获得像素级别的segment map

1. UNet网络的技巧和思想

UNet最初的设计也是使用在医学影像的分割,通过经典的编解码结构、卷积、池化、ReLU激活函数,进行设计

UNet的技巧

  • 不用Padding,防止位置发生偏移
  • 上采样使用插值法+conv,而不使用转置卷积等上采样方法,让特征图保持着均匀的色差
  • 使用skip connection更好的进行信息融合

2. UNet++

从UNet++开始,网络的设计就开始注意原始图像的位置信息,还有就是整个网络的信息融合的能力。

所以,UNet++通过一系列尝试,最终设计成稠密连接,同时有长连接和短连接,并且将UNet中间空心的位置填满;

可以抓取不同层次的特征/不同大小的感受野。UNet++横向看可以看做一个稠密结构的DenseNet。

3. UNet3+

UNet++只是针对于同一尺度的稠密连接,而UNet3+则是跨尺度的稠密连接

UNet3+横纵信息互相交融,像极了国内高铁的“八横八纵”的高铁网,可以获得更大范围的信息融合与流通。又一次感觉很多算法上的设计思想都有异曲同工之妙,亦或者说是源于生活。

当然,UNet3+效果在医疗图像上分割有着不俗的效果,还有一部分是来源于其精心设计的损失函数MS-SSIM,其作为UNet3+组合损失函数的一部分,也会在提点上有着一定的作用(算法除了模型设计,当然还逃脱不了损失的设计)。

4. U2Net

这个网络的设计,给我的一个感觉就是很飘逸了,这是UNet系列改进的另一条路(我个人觉得,作者对于卷积、池化的使用达到了一个很高的水平,这是在一些常规的设计中还是比较难看到的,用简单的组件设计出一个很优秀的算法)。

嵌套UNet的方式,不可谓不是一种天秀的方法;同时通过膨胀卷积的使用,在不增加计算量的情况下,获得了很大的感受野,整个网络看起来变得很深,但是在参数量上的控制,已经达到了一种炉火纯青的地步。

不过,这篇论文的实验的数据集不在是针对医疗图像,也没有去做实验去比较;但是,U2Net为了获得更大的感受野,个人觉得在位置信息上丢失的还是比较多的,在对于位置信息的表现力,可能是有所欠缺的。

U-Net 3+: 全尺度的跳跃连接的 UNet🍉

来源公众号:AI约读社
来源标题:U-Net 3+: 全尺度的跳跃连接的 UNet
来源标题:https://mp.weixin.qq.com/s/M2y2LuPjOEzsol6-v61iVQ
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

本文是关于UNet+++的简要回顾。通过增强U-Net架构,在多个数据集上U-NET 3+性能优于Attention UNET,PSPNet,DeepLabV2,DeepLabV3和DeepLabv3 +。这是发表2020 ICASSP的一篇论文,UNet++使用嵌套和密集跳过连接,但它没有从全尺度探索足够的信息。在 UNet 3+ 中,使用了全面的跳跃连接和深度监督:

  • 全尺度跳跃连接:将来自不同尺度特征图的低级细节与高级语义结合起来。
  • 全尺度的深度监督:从全尺度聚合特征图中学习分层表示。
  • 进一步提出了混合损失函数分类引导模块(CGM)

UNet 3+提供更少的参数,但可以产生更准确的位置感知和边界增强的分割图。

论文:UNet 3+: A Full-Scale Connected UNet for Medical Image Segmentation

论文链接:https://arxiv.org/abs/2004.08790

代码链接:https://github.com/ZJUGiveLab/UNet-Version

01 全尺度跳跃连接

U-Net,U-Net++, U-Net3+ 结构图:

  • 无论是普通的连接U-Net还是密集连接的U-Net ++都缺乏从全尺度探索足够信息的能力,因此不能明确地得知器官的位置和边界。
  • U-Net 3+ 中的每个解码器层都融合了来自编码器的较小和相同尺度的特征图以及来自解码器的较大尺度的特征图,它们捕获了全尺度下的细粒度语义和粗粒度语义。
  • 为了构建 \(X_{D e}^{3}\) 特征图,类似于U-NET,直接接收来自相同尺度编码器层的特征图 \(X_{E n}^{3}\)
  • 与U-Net 相比,一组编码器-解码间跳跃连接通过非重叠最大池化操作将来自较小尺度编码器层 \(X_{E n}^{1}\)\(X_{E n}^{2}\)进行池化下采样,以便传递底层的低级语义信息。
  • 通过一系列内部解码器跳跃连接利用双线性插值传输来自大尺度解码器层\(X_{D e}^{4}\) 和 层\(X_{D e}^{5}\)高级语义信息
  • UNet 3+ 中的参数少于UNet和UNet++ 中的参数。(这里有数学证明,有兴趣的可以阅读论文。)

全尺度的深度监督

2.1 深度监督

  • UNet 3+ 从每个解码器阶段(Sup1 到 Sup5)产生一个切分侧边输出,由真实的分类结果监督。
  • 为了实现深度监督,每个解码器阶段的最后一层被送入一个普通的 3 × 3 卷积层,然后是一个双线性上采样和一个 sigmoid 函数。

2.2 损失函数

  • 多尺度结构相似性指数 (MM-SSIM) 损失用于为模糊边界分配更高的权重。

\[\ell_{m s-s \operatorname{sim}}=1-\prod_{m=1}^{M}\left(\frac{2 \mu_{p} \mu_{g}+C_{1}}{\mu_{p}^{2}+\mu_{g}^{2}+C_{1}}\right)^{\beta_{m}}\left(\frac{2 \sigma_{p g}+C_{2}}{\sigma_{p}^{2}+\sigma_{g}^{2}+C_{2}}\right)^{\gamma_{m}} \]

  • Focal loss起源于RetinaNet,用于处理类不平衡问题。

  • 使用标准IoU 损失。

  • 因此,开发了一种混合损失用于在三级层次结构(像素级、补丁级和图片级)中进行分割,它能捕获大尺度的和精细结构清晰的边界,混合分割损失被定义为:

\[\ell_{\mathrm{seg}}=\ell_{f l}+\ell_{m s-s s i m}+\ell_{i o u} \]

2.3. 分类引导模块 (CGM)

  • 非器官图像中存在误报。这可能是由于来自背景的噪声信息保留在较浅层中,导致过度分割现象。

  • 为了解决这个问题,增加了一个额外的分类任务,用于预测输入图像是否有器官。如在上面的图所示,经过一系列的操作包括dropout,卷积,maxpooling,sigmoid, 最后有两个值代表有/没有器官的概率,最深层次的二维张量 \(X_{E n}^{5}\),其中每一个代表的有/无器官的概率。

  • 在argmax 函数的帮助下,二维张量被转换为 {0,1} 的单个输出,表示有/无器官。

  • 随后,单分类输出与侧分割输出相乘。由于二值分类任务的简单性,该模块通过优化二值交叉熵损失函数,轻松获得准确的分类结果,实现了对非器官图像过分割的指导。

FCN、Unet、Unet++:医学图像分割网络一览 🍉

来源公众号:机器学习实验室
来源标题:FCN、Unet、Unet++:医学图像分割网络一览
来源标题:https://mp.weixin.qq.com/s/fUCqMCyYmmkPB5uPEyZpZA
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

一、相关知识点解释

1、图像分割中几种定义的区别

语义分割(Semantic Segmentation):就是对一张图像上的所有像素点进行分类。(eg: FCN/Unet/Unet++/...)

实例分割(Instance Segmentation):可以理解为目标检测语义分割的结合。(eg: Mask R-CNN/...)相对目标检测的边界框,实例分割可精确到物体的边缘;相对语义分割,实例分割需要标注出图上同一物体的不同个体。

全景分割(Panoptic Segmentation):可以理解为语义分割实例分割的结合。实例分割只对图像中的object进行检测,并对检测到的object进行分割;全景分割是对图中的所有物体包括背景都要进行检测和分割。

图像分类:图像中的气球是一个类别。[1]
语义分割:分割出气球和背景。
目标检测:图像中有7个目标气球,并且检测出每个气球的坐标位置。
实例分割:图像中有7个不同的气球,在像素层面给出属于每个气球的像素。

2. CNN特征学习的优势

  • 高分辨率特征(较浅的卷积层)感知域较小,有利于feature map和原图进行对齐的,也就是我说的可以提供更多的位置信息。
  • 低分辨率信息(深层的卷积层)由于感知域较大,能够学习到更加抽象一些的特征,可以提供更多的上下文信息,即强语义信息,这有利于像素的精确分类。

3. 上采样

上采样(upsampling)一般包括2种方式:

  • Resize,如双线性插值直接对图像进行缩放(这种方法在原文中提到)

  • Deconvolution(反卷积)[2],也叫Transposed Convolution(转置卷积),可以理解为卷积的逆向操作。

4. 医学影像语义分割的几个评估指标

1)Jaccard(IoU)

用于比较有限样本集之间的相似性与差异性。Jaccard值越大,样本相似度越高

\[I O U=\frac{T P}{F P+T P+F N} \]

2)Dice相似系数

一种集合相似度度量指标,通常用于计算两个样本的相似度,值的范围0~1 ,分割结果最好时值为1 ,最差时值为0 。Dice相似系数对mask的内部填充比较敏感

\[\operatorname{Dice}(P, T)=\frac{\left|P_{1} \wedge T_{1}\right|}{\left(\left|P_{1}\right|+\left|T_{2}\right|\right) / 2} \Leftrightarrow \operatorname{Dice}=\frac{2 T P}{F P+2 T P+F N} \]

3)Hausdorff 距离(豪斯多夫距离)

描述两组点集之间相似程度的一种量度,对分割出的边界比较敏感。

\[d_{H}(X, Y)=\max \left\{d_{X Y}, d_{Y X}\right]=\max \left\{\max _{x \in X} \min _{y \in Y} d(x, y), \max _{y \in Y} \min _{x \in X} d(x, y)\right\} \]

4)F1-score

用来衡量二分类模型精确度的一种指标,同时考虑到分类模型的准确率和召回率,可看做是准确率和召回率的一种加权平均

\[F_{1}=2 \cdot \frac{\text { precision } \cdot \text { recall }}{\text { precision }+\text { recall }} \]

二、FCN网络的理解

FCN将一般的经典的分类网络模型(VGG16...)的最后一层的FC层(全连接)换成卷积,这样可以通过二维的特征图,后接softmax获得每个像素点的分类信息,从而解决了分割问题。

核心思想:

  • 不含全连接层(fc)的全卷积(fully conv)网络。可适应任意尺寸输入。
  • 增大数据尺寸的反卷积(deconv)层。能够输出精细的结果。
  • 结合不同深度层结果的跳级(skip)结构。同时确保鲁棒性和精确性。
  1. 对于FCN-32s,直接对pool5 feature进行32倍上采样获得32x upsampled feature,再对32x upsampled feature每个点做softmax prediction获得32x upsampled feature prediction(即分割图)。

  2. 对于FCN-16s,首先对pool5 feature进行2倍上采样获得2x upsampled feature,再把pool4 feature和2x upsampled feature逐点相加,然后对相加的feature进行16倍上采样,并softmax prediction,获得16x upsampled feature prediction。

  3. 对于FCN-8s,首先进行pool4+2x upsampled feature逐点相加,然后又进行pool3+2x upsampled逐点相加,即进行更多次特征融合。

FCN缺点:

  1. 结果不够精细。进行8倍上采样虽然比32倍的效果好了很多,但是上采样的结果还是比较模糊和平滑,对图像中的细节不敏感。
  2. 对各个像素进行分类,没有充分考虑像素与像素之间的关系。忽略了在通常的基于像素分类的分割方法中使用的空间规整(spatial regularization)步骤,缺乏空间一致性。

三、U-net网络的理解

整个U-Net网络结构类似于一个大型的字母U,与FCN都是很小的分割网络,既没有使用空洞卷积,也没有后接CRF,结构简单。

  1. 首先进行Conv+Pooling下采样;
  2. 然后反卷积进行上采样,crop之前的低层feature map,进行融合;
  3. 再次上采样。
  4. 重复这个过程,直到获得输出388x388x2的feature map,
  5. 最后经过softmax获得output segment map。总体来说与FCN思路非常类似。

UNet的encoder下采样4次,一共下采样16倍,对称地,其decoder也相应上采样4次,将encoder得到的高级语义特征图恢复到原图片的分辨率。

它采用了与FCN不同的特征融合方式:

  1. FCN采用的是逐点相加,对应tensorflow的tf.add()函数
  2. U-Net采用的是channel维度拼接融合,对应tensorflow的tf.concat()函数

四、Unet++网络的理解

文章对Unet改进的点主要是skip connection,作者认为skip connection 直接将unet中encoder的浅层特征与decoder的深层特征结合是不妥当的,会产生semantic gap。

文中假设:当所结合的浅层特征与深层特征是semantically similar时,网络的优化问题就会更简单,因此文章对skip connection的改进就是想bridge/reduce 这个semantic gap。

附Unet++论文地址:https://arxiv.org/pdf/1807.10165.pdf

代码地址:https://github.com/MrGiovanni/UNetPlusPlus

五、Unet+++算法的理解 [5]

为了弥补UNet和UNet++的缺陷,UNet 3+中的每一个解码器层都融合了来自编码器中的小尺度和同尺度的特征图,以及来自解码器的大尺度的特征图,这些特征图捕获了全尺度下的细粒度语义和粗粒度语义

附U-net+++论文地址:https://arxiv.org/abs/2004.08790

六、DeepLab v3+算法简阅 [6]

Encoder部分

Encoder就是原来的DeepLabv3,需要注意点:

  1. 输入尺寸与输出尺寸比(output stride = 16),最后一个stage的膨胀率rate为2。
  2. Atrous Spatial Pyramid Pooling module(ASPP)有四个不同的rate,额外一个全局平均池化。

Decoder部分

先把encoder的结果上采样4倍,然后与resnet中下采样前的Conv2d特征concat一起,再进行3x3的卷积,最后上采样4倍得到最终结果。
需要注意点:融合低层次信息前,先进行1x1的卷积,目的是降通道(例如有512个通道,而encoder结果只有256个通道)

附DeepLab v3+论文地址:https://arxiv.org/pdf/1802.02611.pdf

七、Unet在医学图像上的适用与CNN分割算法的简要总结

1. Unet结构特点

UNet相比于FCN和Deeplab等,共进行了4次上采样,并在同一个stage使用了skip connection,而不是直接在高级语义特征上进行监督和loss反传,这样就保证了最后恢复出来的特征图融合了更多的low-level的feature,也使得不同scale的feature得到了的融合,从而可以进行多尺度预测和DeepSupervision。4次上采样也使得分割图恢复边缘等信息更加精细。

2. 为什么适用于医学图像?

  1. 因为医学图像边界模糊、梯度复杂,需要较多的高分辨率信息。高分辨率用于精准分割。
  2. 人体内部结构相对固定,分割目标在人体图像中的分布很具有规律,语义简单明确,低分辨率信息能够提供这一信息,用于目标物体的识别。
  3. UNet结合了低分辨率信息(提供物体类别识别依据)和高分辨率信息(提供精准分割定位依据),完美适用于医学图像分割。

3. 分割算法改进总结:

  1. 下采样+上采样:Convlution + Deconvlution/Resize
  2. 多尺度特征融合:特征逐点相加/特征channel维度拼接
  3. 获得像素级别的segement map:对每一个像素点进行判断类别

八、参考

  1. 实例分割理解
  2. 可以参考一下卷积运算的几种操作
  3. 分割常用评价指标
  4. 周纵苇的研习Unet
  5. UNet+++论文解读
  6. DeepLab系列理解
  7. Unet神经网络为什么会在医学图像分割表现好?
posted @ 2022-03-03 14:53  梁君牧  阅读(2164)  评论(0编辑  收藏  举报