请问,如果是你,如何去解决这个问题?

其实既然已经把结构盘成这样了,还是很自然能想到的吧,我这里提供有两个候选的解决方案。

第一个是用deep supervision,强行加梯度是吧,关于这个,我待会儿展开来说。

第二个解决方案是把结构改成这样子:

在这里插入图片描述

如果没有我上面说的那一堆话来盘逻辑,这个结构可能不那么容易想到,但是如果顺着思路一步一步的走,这个结构虽然不能说是显而易见,也算是顺理成章的。我的故事还没有讲完,但是我提一句,这个结构由UC Berkeley的团队提出,发表在今年的CVPR上,是一个oral的论文,题目是"Deep Layer Aggregation"。

可能就有小伙伴惊呆了,就这样吗,就发了CVPR!?是,也不是。。。这只是他们在论文中给出的关于分割网络结构的改进,他们还做了其他的工作,包括分类,和边缘检测。但是主要的思路就是刚刚盘的那些,目标就是取整合各个不同层次的特征。

这只是一个题外话哦,我们继续来看这个结构,请问,你觉得有什么问题?

为了回答这个问题,现在我们和上面那个结构对比一下,不难发现这个结构强行去掉了U-Net本身自带的长连接。取而代之的是一系列的短连接。那么我们来看看U-Net引以为傲的长连接到底有什么优点。

在这里插入图片描述

我们认为,U-Net中的长连接是有必要的,它联系了输入图像的很多信息,有助于还原降采样所带来的信息损失,在一定程度上,我觉得它和残差的操作非常类似,也就是residual操作,x+f(x)。我不知道大家是否同意这一个观点。因此,我的建议是最好给出一个综合长连接和短连接的方案。请问,这个方案在你的脑海中是什么样的呢?此处可暂停。

在这里插入图片描述

基本上就是这样一个结构没跑了是么。我们来对比一下一开始的U-Net,它其实是这个结构的一个子集。这个结构,就是我们在MICCAI中发表的UNet++。热心的网友可能会问哦,你的UNet++和刚刚说的那个CVPR的论文结构也太像了吧,我说一下这个工作和UC Berkeley的研究是完全两个独立的工作,也算是一个美丽的巧合。UNet++在今年年初时思路就已经成型了,CVPR那篇是我们今年七月份开会的时候看到的,当时UNet++已经被录用了,所以相当于同时提出。另外,和CVPR的那篇论文相比,我还有一个更精彩的点埋在后面说,刚刚也留了一个伏笔。

好,当你现在盯着UNet++的时候,不知道会不会冷不丁会冒出来一个问题:

这个网络比U-Net效果好,但是这个网络增加了多少的参数,加粗的参数可都是比U-Net多出来的啊?

这个问题非常的尖锐,实际上是需要设计实验来回答的,如何设计这个实验呢?我们的做法是强行增加U-Net里面的参数量,让它变宽,也就是增加它每个层的卷积核个数。由此,我们设计了一个叫wide U-Net的参考结构,先来看看UNet++的参数数量是9.04M,而U-Net是7.76M,多了差不多16%的参数,所以wide U-Net我们在设计时就让它的参数比UNet++差不多,并且还稍微多一点点,来证明并不是无脑增加参数量,模型效果就会好。

在这里插入图片描述

我本人是认为这个回击力度并不大,因为这样增加参数说心里话有点敷衍,应该能找到更好的对比方法。尽管有不足,我们先来看看结果。

在这里插入图片描述

根据现有的结果,我的总结是,单纯的把网络变宽,把参数提上去对效果的提升并不大,如何能把参数用在刀刃上是很重要的。那么UNet++这种设计就是将参数用在刀刃上的一个方案。

在这里插入图片描述

我们在回来看这个UNet++,对于这个主体结构,我们在论文中给出了一些点评,说白了就是把原来空心的U-Net填满了,优势是可以抓取不同层次的特征,将它们通过特征叠加的方式整合,不同层次的特征,或者说不同大小的感受野,对于大小不一的目标对象的敏感度是不同的,比如,感受野大的特征,可以很容易的识别出大物体的,但是在实际分割中,大物体边缘信息和小物体本身是很容易被深层网络一次次的降采样和一次次升采样给弄丢的,这个时候就可能需要感受野小的特征来帮助。另一个解读就是如果你横着看其中一层的特征叠加过程,就像一个去年很火的DenseNet的结构,非常的巧合,原先的U-Net,横着看就很像是Residual的结构,这个就很有意思了,UNet++对于U-Net分割效果提升可能和DenseNet对于ResNet分类效果的提升,原因如出一辙,因此,在解读中我们也参考了Dense Connection的一些优势,比方说特征的再利用等等。

这些解读都是很直观的认识,其实在深度学习里面,某某结构效果优于某某结构的理由,或者你加这个操作比不加操作要好,很多时候是有玄学的味道在里头,也有大量的工作也在探索深度网络的可解释性。关于UNet++的主体结构,我不想花时间赘述了。

  1. 高潮

接下来我要说的这部分,非常的有意思,如果这次分享就给我三分钟,我可能就会花两分半钟在这里。刚刚在讲这里的时候留了一个伏笔,说这个结构在反向传播的时候中间部分会收不到过来的梯度,如果只用最右边的一个loss来做的话。

刚才说了,一个非常直接的解决方案就是深监督,也就是deep supervision。这个概念不是新的,有很多对U-Net对改进论文中也有用到,具体的实现操作就是在图中 [公式] , [公式] , [公式] , [公式] 后面加一个1x1的卷积核,相当于去监督每个level,或者每个分支的U-Net的输出。

我给大家提供三个用Deep Supervision的结构来比较,一个就是这个,第二个是加在UC Berkeley提出的结构上,最后一个是加在UNet++上,请问是你认为哪个会更棒?这是一个开放问题,我这里不做展开讨论,我们论文中使用的是最后一个。

因为deep supervision具体应该套在哪个结构上面不是我想说的重点,deep supervision的优点也在很多论文中有讲解,我这里想着重讨论的是当它配合上这样一个填满的U-Net结构时,带来其中一个非常棒的优势。此处强烈建议暂停,想一想,如果我在训练过程中在各个level的子网络中加了这种深监督,可以带来怎样的好处呢?

在这里插入图片描述

两个字:剪枝。

同时引出三个问题:

为什么UNet++可以被剪枝

如何剪枝

好处在哪里

在这里插入图片描述

我们来看看为什么可以剪枝,这张图特别的精彩。关注被剪掉的这部分,你会发现,在测试的阶段,由于输入的图像只会前向传播,扔掉这部分对前面的输出完全没有影响的,而在训练阶段,因为既有前向,又有反向传播,被剪掉的部分是会帮助其他部分做权重更新的。这两句话同样重要,我再重复一遍,测试时,剪掉部分对剩余结构不做影响,训练时,剪掉部分对剩余部分有影响。这意味什么?

因为在深监督的过程中,每个子网络的输出都其实已经是图像的分割结果了,所以如果小的子网络的输出结果已经足够好了,我们可以随意的剪掉那些多余的部分了。

来看一下这个动图,为了定义的方便起见,我们把每个剪完剩下的子网络根据它们的深度命名为UNet++ L1,L2,L3,L4,后面会简称为L1~L4。最理想的状态是什么?当然是L1喽,如果L1的输出结果足够好,剪完以后的分割网络会变得非常的小。

这里我想问两个问题:

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

怎么去决定剪多少?

对于为什么要在测试的时候剪枝,而不是直接拿剪完的L1,L2,L3训练,我们的解释其实上一页ppt上面写了,剪掉的部分在训练时的反向传播中是有贡献的,如果直接拿L1,L2,L3训练,就相当于只训练了不同深度的U-Net,最后的结果会很差。

第二个问题,如何去决定剪多少,还是比较好回答的。因为在训练模型的时候会把数据分为训练集,验证集和测试集,训练集上是一定拟合的很好的,测试集是我们不能碰的,所以我们会根据子网络在验证集的结果来决定剪多少。所谓的验证集就是一开始从训练集中分出来的数据,用来监测训练过程用的。

好,讲完了思路,我们来看结果。

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Python工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Python开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
img
img



既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Python开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新

如果你觉得这些内容对你有帮助,可以添加V获取:vip1024c (备注Python)
img

最后

不知道你们用的什么环境,我一般都是用的Python3.6环境和pycharm解释器,没有软件,或者没有资料,没人解答问题,都可以免费领取(包括今天的代码),过几天我还会做个视频教程出来,有需要也可以领取~

给大家准备的学习资料包括但不限于:

Python 环境、pycharm编辑器/永久激活/翻译插件

python 零基础视频教程

Python 界面开发实战教程

Python 爬虫实战教程

Python 数据分析实战教程

python 游戏开发实战教程

Python 电子书100本

Python 学习路线规划

一个人可以走的很快,但一群人才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
img

ZG4ubmV0L2ZlaTM0Nzc5NTc5MA==,size_16,color_FFFFFF,t_70)

一个人可以走的很快,但一群人才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
[外链图片转存中…(img-0ZLFCNlY-1712585652199)]

Logo

技术共进,成长同行——讯飞AI开发者社区

更多推荐