铺垫

在图像分割领域,全卷积网络 FCN 是非常经典的网络,而 U-Net 在医学图像分割方面表现的更加突出;

FCN vs U-Nnet

相同点:二者都采用了 encode 和 decode 的经典思路,也就是 AutoEncode 的思路;

这种思路起初被用于 图像压缩和去噪,后来被用到图像分割,是不是很厉害呢?所以别看他简单,重要的是思想;

不同点

1. U-Net 是一种完全对称的结构,网络的 decode 部分仍然是卷积结构,而 FCN 的 decode 相对简单,只是 deconvolution 反卷积操作;

2. skip connection 的使用,U-Net 是叠操作,FCN 是加操作;

叠操作:1,2 ==> [1, 2]

加操作:1, 2 ==> 3

一个 decode 被玩出这么多花,是不是很厉害?所以,别觉得简单;

 

学习 U-Net 的重点是掌握 网络结构的思想,而非 U-Net 本身; 

FCN 和 U-Net 都是非常经典的基础网络结构,事实上,他们已经被多次引用,扩展后的网络屡次发表顶会;

 

U-Net

下面我们认识一下主角

看起来稍微有些乱;

 

我们把它的 拓扑结构 抽取出来,这样更接近它的实质,排除细节的干扰;

这就是 大部分 分割网络 的拓扑结构; 

分为三部分:

下采样:增加 对输入微小噪声 的鲁棒性,也就是关注主要矛盾,提取特征,增加感受野大小;

上采样:对特征进行还原;

skip connection:把浅层特征 叠加到 深层特征上,同时关注了浅层和深层特征;

 

扩展

思考一下,U-Nnet 把这个拓扑结构扩展成它的模样,如果让你去扩展,你会如何?

 

思考-网络深度

这是网络设计时必须要考虑的问题;

首先,我要明确的告诉你,模型的深浅 并不是 作者设计多少就是多少;

 

U-Net 的重点就是 同时利用了 深浅层特征,那为什么 它 4 层就最深了呢?

有人在 他自己的数据集上 训练了不同深度 的 U-Net 并测试,结果如下

实验证明,并不是越深越好,也不是 4 层最好; 

实验折射出这样的结论:不同层次(深浅)的特征的重要性 在不同数据集上 表现不同;U-Net 作者设计 4 层,只能说 4 层适合他的数据集;

 

灵魂之问:到底要多深? 

最笨的办法是 挨个试,训练不同深度的模型,看看测试效果,显然不是很高大上;

回到 U-Net 网络的思想,即 同时使用浅层和深层特征,在这个思想的前提下探讨网络深度,脑洞开一下;

把 4 种不同深度的网络强行叠加起来;

这么做的思想是,我不管哪个层次的特征最重要,都给你算上,让模型自己去学习

可惜的是这个网络中的红色区域无法进行反向传播,因为网络是断开的;

怎么解决呢?这才是本文的核心,即如何设计一个网络;

 

网络设计

针对上面的问题,给出几套方案

1.  修改网络结构

把长连接全部改成短连接;

这样做虽然可反向传播,但是长连接的作用是更好的利用浅层特征,改成短连接后,浅层特征被反卷积后的特征代替,显然信息丢失很多;

 

虽然说这个设计不是很完美,但注意,这个设计也发表在 CVPR 上了哦,所以搞起来吧;

 

2. U-Net++

很简单,把长连接全部加上,这就 CVPR 了 

 

3. deep supervision,深监督

深监督是一种思想,它把 不同深度的 模型 的 输出 用一定的方法 统计起来,这样可以观测到不同 深度 的输出,从而更好的设计网络的深度;

再次强调,它只是一种思想,没有具体形式;

下图就是 把 深监督 套到了 U-Net++ 上;

深监督最大的意义在于 剪枝 

剪枝在移动端的作用十分明显;

在训练时 我们训练不同深度融合的网络,如果 浅层网络的结果已经满足需求,那么深层网络的权重将置零,也就等于没了,在测试时,速度会大大提升;

 

 

 

参考资料:

https://zhuanlan.zhihu.com/p/44958351  大神之作,坚决只看这一篇