【UNet++】UNet++到底在做什么?

文章介绍了U-Net在医学图像分割中的应用,探讨了其编码解码结构的本质,以及为何使用该结构。作者提出了关于U-Net深度、降采样意义的思考,并引出了U-Net++模型,该模型通过短连接整合不同层次特征,利用深监督实现模型剪枝,提高了精度并减少了参数量。
摘要由CSDN通过智能技术生成

0.说在前面

大家好,在过去的一年中,我在实验室做的主要工作是以U-Net为基础,对医学图像数据集进行图像分割。在不断的实验中,我渐渐了解了U-Net以及U-Net相关模型的一些本质,接下来我将会带着大家一步一步的探寻U-Net以及U-Net++背后的本质,希望大家跟着我的思路一起往下。

1.前言

在计算机视觉领域的医学图像处理方向,U-Net可以说是一个炙手可热的网络,基本上所有的分割问题,我们都会拿U-Net来先看一下基本的结果,然后进行修改。

U-Net和FCN有点像,它比FCN稍晚提出,但是都发表在2015年。尽管这两个模型的细节各不相同,但是它们的结构都用了一个比较经典的思路:编码和解码(encoder-decoder)。这个思路早在2006年就已经被提出。

这种思路当时被提出的主要作用其实并不是为了分割,而是压缩图像和去噪。比如输入一幅图,经过下采样编码,得到一串比原先更加小的特征,相当于压缩,然后再经过一个解码,就可以还原得到原图,假如这样可以实现,那我们存一幅图仅仅需要存它的特征和它的解码器既可,这其实是一个很棒的做法。同理,这个思路也可以用于原图像去噪,如果你在一张图片加上噪声,经过这个结构训练,其实还原出来的图片噪声是消失的(原理在于下采样只关注特征而图片的其它方面会被忽略,在下采样这个过程中由于噪声不是特征,所以自然被忽略了)。

后来把这种思路用在了图像分割的问题上,也就是现在我们所看到的U-Net结构。在2015年被提出后,有很多的论文讲如何去改进U-Net,但是U-Net的本质,也就是它的拓扑结构,并没有改动。

我们先简单的了解一下U-Net的结构,由于大家可能是第一次接触这个结构,为了排除一些细节的干扰,我们先提取了它的拓扑结构,这样便于初学者理解。

输入是一幅图,输出是目标的分割结果。简化来说就是:输入图片,编码(降采样),解码(升采样),输出分割结果。根据结果和真实分割的差异,反向传播来训练这个分割网络。

2.展开

基本的铺垫都已经完成了,大家应该对U-Net这个结构有基本的了解,一个比较大问题是:

这个三年都没有一点改动的拓扑结构真的没有毛病吗?

在这三年的接近2500次的引用中,大家的改进在哪些方面呢?你又会关注于U-Net的哪些方面呢?

首先一个问题是:U-Net要多深才合适?

很多论文给出了他们建议的结构,其中包含非常多的细节,比如用什么卷积,用几层,怎么降采样,学习率多少等等,这些都是比较直观的参数,事实上关注于这些内容意义并不大,一个网络的结构,我们应该关注的是它的设计传达了什么信息。就拿U-Net来说,原论文用了4次降采样和4次上采样得到了分割结果。为什么是4次?因为作者喜欢!就是这样子!或者你可以这样子理解,当时作者使用的数据集4次的降采样效果更好,或者4次降采样刚好适合输入图片的尺寸。反正就是4次就行了。你们信吗?反正我是不信。我在看很多的之后的论文里,它们其实用的不一定是4次降采样升采样,比如像这个“提拉米苏”模型:

这个模型也算是U型结构,但却只用了3次降采样。所以到底应该有多深呢?这是一个开放性的问题。

在这里,我顺便来分享一下我的感受:关注论文所传递的大方向,不要被论文中的细节局限了你的创造力。

OK,继续回到我们所要聊的那个到底有多深的问题,其实这个是非常灵活的,涉及到了特征提取器。U-Net就是给了你一个框架,具体用什么特征提取器随便,所以之后就有一大批论文在特征提取器方面入手,发了文章。这种算是从1到10的递进本质上是不如U-Net这种从0到1的递进的,因为它不自觉的就局限了自己的扩展空间,这种创新是很局限的。

关于 到底有多深这个问题,还有一个引申问题就是:降采样的意义在于哪里呢?既然输入和输出都是相同大小的图,为什么要折腾一下去降采样再升采样呢?

我的理解是,在特征提取阶段,浅层结构可以抓住图像的一些简单的特征,比如边界,颜色这些,而深层的话,经过很多卷积操作,抓住的这些特征是越来越抽象,越来越玄学,总之,浅有浅的侧重,深有深的优势。既然浅层和深层都很重要,那为什么一定是4层才返回呢?

3.主体

如果你对这个问题有思路的话,其实你也许会想到这样一张图:

对于这幅图,它们的深度不一。为了搞清楚是不是越深越好,我们应该要对它们都做一次实验,看看各自的分割表现。U-Net ++的作者周纵苇就做了这样子的一个实验,我们来看一下这张图:

周纵苇发现,对于不同的数据集,可以看出不同深度的 U-Net表现。如果你前面还没听懂为什么不一定是4层,现在你应该懂了!这幅图所传达出的信息就是,不同层次特征的重要性对于不同的数据集是不一样的,不一定说我设计了4层的U-Net,这个U-Net就对所有数据集都最优。那现在我们想一想,要是你,你会去怎么利用这些不同深度的,各自抓取不同特征的U-Net呢?

是不是就像上图一样,把1~4层的U-Net全都连在一起了。上面这张图包含了1,2,3,4层的U-Net,这种思路的好处就是我不管你哪个深度有效,我干脆所有层都给你,让你这个网络自己去学习不同深度的特征重要性,而且这个网络还共享一个特征提取器,我不需要训练一堆的U-Net,只需要训练一个encoder,它的不同层次的特征由不同的decoder路径还原。

不过很可惜,这个网络结构并不能被训练,因为不会有任何梯度经过这个红色这个区域,它在和算loss function的地方在反向传播时断开了。你想想是不是。

现在,如果问题给到你,那你需要怎么去解决这个问题?

如果我刚刚没有说了这么多来帮助你理解,那你不一定能够想得到,但是如果你听懂了我刚刚说的,那这个结构即使不是显而易见,那也是顺理成章的。

 我们来看一下这个结构,请问这个结构问题在哪里呢?

我们对比上一个结构,可以发现这个结构将之前的长连接变成了短连接。长连接的优点在哪里呢?

我们认为,长连接是很有必要的,它联系了输入图像的很多信息,有助于还原降采样所带来的缺失。所以,在我看来,我们应该要想到一个综合长连接和短连接的方案?这个方案在你的脑海里是什么样的呢?

是不是这样子?这其实就是U-Net++模型。在U-Net++的论文里,作者周纵苇说到,这个模型是把原来U-Net的空心给填满了,优势是可以抓取不同层次的特征,将它们通过特征叠加的方式进行整合。比如,感受野很大的特征,可以很容易识别出大物体,当在实际分割中,大物体的边缘信息和小物体本身是很容易被一层层的降采样和升采样弄丢的,这时候就需要感受野小的特征来帮助。

4.高潮

接下来我所要讲的非常有意思,希望大家可以反复观看,理解我所讲的内容。我刚刚在讲的时候留了一点伏笔,说这个结构在反向传播的过程中,如果只用最右边的一个loss来做的话,中间部分会收不到过来的梯度。

在这里,我们引入了深监督(deep supervision)。其实这个概念并不是新概念,,有很多对于U-Net改进的论文里其实也有用到,具体实现就是在X0.1,X0.2,X0.3 的后面加一个1*1的卷积核,去监督每个level,或者是每个分支U-Net的输出。大家想一想,如果我在训练的过程中加入了这种深监督,可以带来什么样的好处呢?

两个字:剪枝!

同时,带着三个问题去阅读接下来的内容:

1)为什么 U-Net++可以被剪枝

2)如何剪枝

3)剪枝的好处在哪里

我们来看一下上面这幅图,上面这幅图非常的精彩,关注被剪掉的部分,你会发现,在测试的时候,由于图像只会前向传播,扔掉的这部分对输出是没有影响的,而在训练阶段,因为不仅有前向传播,还会有反向传播,反向传播过程中如果你剪掉某一部分,那部分是会帮助其他部分做权重更新的。刚刚这段话非常非常重要,这也是U-Net++的超级核心!我再重复一遍:测试时,剪掉的部分对剩余结构没有影响,训练时,剪掉的部分对剩余部分有影响。这意味着什么?

意味着,深监督的过程中,每个子网络的输出都已经是图像的分割结果了,如果小的子网络输出足够好的话,我们可以随便剪掉多余的部分。

接下来考大家两个问题,看看大家是不是真正理解了。

1)为什么要在测试的时候剪枝,而不是直接拿剪完的L1,L2,L3训练?

2)怎么决定减多少?

对于第一个问题,其实刚刚已经解释了,剪掉的部分在训练时是对其余部分有贡献的,如果拿剪完的L1,L2,L3训练,拿实际上就是单纯的训练了3个不同深度的U-Net模型,最后的效果并不好。

对于第二个问题,其实也很简单。我们的数据集分为训练集,验证集和测试集,训练集的拟合效果肯定很好,测试集是我们不能碰的,我们会根据子网络在验证集的结果来决定剪多少。

5.总结 

再次放上我们的U-Net++结构:

对于U-Net++模型,我认为是对原先U-Net模型的一个比较大的创新,原来的U-Net模型太过于死板,并没有很好的利用不同层级的特征。总体来讲,U-Net++相比较与U-Net有两个很明显的提升,一是精度的提升,这个是因为它整合了不同层次的特征,所以精度才会提升这么大。二是这个灵活的网络搭配了深监督,让参数量巨大的深度网络可以在可接受的范围内大幅度缩减参数量。

6.说在后面

这篇文章我足足写了4个小时,与平时一般的写作不同,这次的写作让我感觉十分的兴奋。我带着大家从U-Net开始,了解U-Net的背景,然后通过问题去引导大家思考,一步一步的引出U-Net++,又不断通过对比来向大家阐述了U-Net++对比于U-Net的优势。其实这也是学习的一种方法,学习一个新知识前需要知道我们为什么要学习这个知识,它改善了旧知识的哪些缺点。希望大家可以认真的反复阅读我的这篇文章,仔细揣摩其中的细节,谢谢大家!

  • 6
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值