一、整体结构
虽然说是几年前的产品,但是现在还在用,因为深度学习很多时候越是简单的网络用起来效果越好,而且一般是目标比较小的时候产生的分割问题。u-net的优势就是网络结构简单,适合小目标分割,所以一直用到现在,在此基础上进行升级。
概述就是编码解码过程,如上图所示,我们可以把每一步当做一层,比如这样:
现在比如有一张图片的数据,首先使用卷积层提取特征,把输入数据x到网络中,走几个卷积层,然后越来越扁越来越矮,左边的一半就是编码。假设输入是64*64,那么输出大小也是64*64,大小得一直,虽然上图不同,但在后续改进中是相同的。那么在左边降采样之后我们想得到相同大小的输出,我们就得上采样回去,也就是解码层。
总体来说就是编码再解码。
那么中间从左向右的灰色箭头是干嘛的呢,我们现在深度学习做任何任务的时候都强调特征融合,那么比如第一层表示浅层特征,那么往后就是更高层的特征,我们可以通过加法来融合,也可以通过拼接融合,也就是首尾拼接,现在来说使用拼接的效果更好,虽然维度更高,但是也是可以用降采样,相比于直接加法来说有加权。
二、U-net++
如图所示, 下采样卷积步长为2,那么每次减少一半,升采样反之;对于上图的特征融合,比如拿X0,0和X1,0融合得到X0,1,不光如此,每一个都这样去融合,对于X0,2来说,不光和X0,1 1,1融合,还和X0,0融合,也就是跟前面所有的都进行拼接,这就是U-net++的结构。
U-net++ 在编码器与解码器之间构建了多级嵌套的子网络,通过密集的跳跃连接逐步融合不同层次的特征,减少了语义差距。
-
嵌套子网络:每个解码层通过密集连接与所有更浅的编码层相连,形成类似“网格”的结构。
-
桥接模块:跳跃连接中插入卷积块(Conv+BN+ReLU),对特征进行细化后再融合,而非直接拼接。
U-net++的优点:
如果训练模型觉得不用最后一层也能很好,那么就算剪枝也是完整的模型。