【Unet系列】Unet & Unet++

本文详细介绍了U-Net及其改进版U-Net++在网络结构、解决的问题和应用上的特点。U-Net主要用于医学图像分割,采用对称结构与Skip connection结合,解决了高层语义和低层细节信息融合的问题。U-Net++通过引入DenseNet思想,增强了特征融合,提高了分割性能。文章展示了在不同生物医学图像分割任务中的实验结果,并探讨了深度监督的作用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在这里插入图片描述

U-net

U-Net是一篇基本结构非常好的论文,主要是针对生物医学图片的分割,而且,在今后的许多对医学图像的分割网络中,很大一部分会采取U-Net作为网络的主干。

概述

博客都将用一个概述对论文进行一个很简介的概述:

  • 解决什么问题?
    • 医学图像的分割
  • 使用的方法?
    • 继承FCN的思想,继续进行改进。但是相对于FCN,有几个改变的地方,U-Net是完全对称的,且对解码器(应该自Hinton提出编码器、解码器的概念来,即将图像->高语义feature map的过程看成编码器,高语义->像素级别的分类score map的过程看作解码器)进行了加卷积加深处理,FCN只是单纯的进行了上采样。
    • Skip connection:两者都用了这样的结构,虽然在现在看来这样的做法比较常见,但是对于当时,这样的结构所带来的明显好处是有目共睹的,因为可以联合高层语义和低层的细粒度表层信息,就很好的符合了分割对这两方面信息的需求。
    • 联合:在FCN中,Skip connection的联合是通过对应像素的求和,而U-Net则是对其的channel的concat过程。
  • Innovation:
    • overlap-tile策略
    • 随机弹性变形进行数据增强
    • 使用了加权loss
  • result
    • 相对于当年的,在EM segmentation challenge at ISBI 2012上做到比当时的best更好。而且速度也非常的快。其有一个很好的优点,就是在小数据集上也是能做得比较好的。就比如EM 2012这个数据集就只是30个果蝇第一龄幼虫腹侧神经所索的连续部分透射电子显微镜图。
  • 还存在的问题
    • 这个得看其后面的论文,要说的话,可以将其网络的深度到底取多深的问题作为一个点。

细节部分

以下是整体的结构图(对于这两篇论文,我比较关注的是他们的结构,同样论文也是把他们的结构作为卖点,论文中其余的很多细节都没有很详细的说明):
在这里插入图片描述

1、结构的解析

整体结构就是先编码(下采样), 再解码(上采样),回归到跟原始图像一样大小的像素点的分类。

  • 首先是输入图像的大小,这个是根据再高层的大小来进行反推的,最后取的一个比较合适的方便计算的输入大小。
  • 下采样是通过max pool 2x2来进行1/2下采样的,下采样之间是两个conv卷积层,这里的卷积是使用valid卷积。所以在卷积过程中图像的大小是会减小的。这会造成一个问题,就是造成了在skip connection部分concat时候大小不一致,因为在上面有一个copy & crop操作,crop就是为了将大小进行裁剪的操作。
  • 虽然上面有说到crop操作,但若是在卷积的时候使用的是same,就无需这个操作,至于这其中的影响,我觉得应该是不会造成太大的影响的,而且还会方便计算操作。这是same的代码。
  • 上采样,相对于FCN的转置卷积进行上
### UNetUNet++UNet3+ 模型架构及其特点 #### UNet 架构 UNet 是一种用于生物医学图像分割的经典卷积神经网络模型。其核心特点是编码器-解码器结构加上跳跃连接,使得低级特征可以直接传递到高级特征层面,从而保留更多细节信息[^1]。 ```python class UNet(nn.Module): def __init__(self, n_channels, n_classes): super(UNet, self).__init__() # 编码路径 (Contracting path) ... # 解码路径 (Expansive path) with skip connections ... def forward(self, x): # 实现前向传播逻辑 pass ``` #### UNet++ 架构 相比于原始的UNetUNet++通过增加更多的密集跳过连接来增强特征重用和融合能力。这种设计不仅加深了网络层次间的交互,而且允许更灵活地调整网络深度以适应不同类型的数据集需求[^2]。 ```python class UNetPlusPlus(nn.Module): def __init__(self, n_channels, n_classes, depth=4): super(UNetPlusPlus, self).__init__() # 更复杂的嵌套跳跃连接机制 ... def forward(self, x): # 前向传播实现 pass ``` #### UNet3+ 架构 作为进一步的发展,UNet3+专注于提高边界的精确定位精度。该版本在网络内部引入了额外的设计元素,比如更深的监督(Deep Supervision),即在整个网络的不同阶段提供多个辅助输出分支来进行联合训练,以此提升整体性能并改善最终预测的质量[^3]。 ```python class UNetThreePlus(nn.Module): def __init__(self, n_channels, n_classes): super(UNetThreePlus, self).__init__() # 添加 deep supervision layers ... def forward(self, x): outputs = [] # 计算各个级别的输出 for i in range(num_levels): out_i = ... # 各级别输出计算 outputs.append(out_i) final_output = torch.sum(outputs, dim=0) # 或者采用其他聚合策略 return final_output ``` #### 区别总结 - **UNet**: 提供基础框架,具有简单有效的编码器-解码器结构以及必要的跳跃链接。 - **UNet++**: 在此基础上增加了复杂度更高的跳跃连接模式,支持自定义层数配置优化特定应用场景下的表现。 - **UNet3+**: 集成了上述两种变体的优点,并特别强调了边界检测准确性方面的改进措施,如deep supervision等技术的应用。
评论 31
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值