U-Net++粗略解释

Paper:UNet++: A Nested U-Net Architecture for Medical Image Segmentation

u-net网络的基本拓扑结构
image

目前最先进的图像分割模型是各种个同样的 encoder-decoder架构,他们具有一个关键的相似性:skip connections,它可以将编码器子网络的深度、语义、粗粒度的特征映射与来自编码器子网络的浅层、低级、细粒度的特征映射相结合。

在恢复目标对象的细粒度细节方面,skip connections时非常有用的。
U-NET++网络是为了解决医学图像分割的精确性问题,从而提出的一种新的基于嵌套密集跳跃连接的分割体系结构。

image

上图为U-NET++网络结构的基本模型图
图a 表示U-NET++网络的基本架构,我们可以看出U-Net++网络也是由编码器和解码器组成,与U-NET不同的是U-Net++的由编码器和解码器通过一系列嵌套的密集卷积块连接,也就是图中绿色代表的区域。UNet++背后的主要思想是在融合之前弥合编码器和解码器的特征映射之间的语义鸿沟。例如,(X0,0,X1,3)之间的语义鸿沟是使用一个具有三个卷积层的密集卷积块来桥接的。另外,在图形摘要中,黑色表示原始的U-NET网络,绿色和蓝色表示在跳跃路径上有密集的卷积块,红色表示deep supervision。红色、绿色和蓝色的组件将UNet++与U-Net区分开来。

图b详细分析了UNet++的第一个skip pathway

图C展示了在深度监督情况下U-NET++的剪枝

接下来说一下U-NET++网络中的Re-designed skip pathways,也就是在图a中绿色的区域。它主要用于转换编码器和解码器之间的连通性。在之前的U-NET网络中,编码器和解码器是通过长连接直接进行特种映射的,而在U-NET++中,作者通过一个密集的卷积块将编码器与解码器连接了起来。

形式上,我们可以表示为以下结构,令 x i , j x^{i,j} xi,j的输出,其中i为沿编码器向下采样层的索引,j为沿skip pathways的稠密块卷积层的索引。由 x i , j x^{i,j} xi,j表示的特征映射的堆栈计算为
image

其中函数H(·)为激活函数后的卷积运算,U(·)为上采样层,[]为级联层。
具体实例我们可以看图b。

U-NET++在深度监督下能够运行两种模式:
1)精确模式,对所有分割分支的输出求平均值
2)快速模式,最终的分割图只从一个分割分支中选择,其选择决定了模型修剪的程度和速度增益。图1c显示了快速模式下分割分支的选择是如何导致不同复杂度的架构的。

另外,作者给出了一个损失函数公式,如下图:
image

其中 Y ^ b \widehat{Y}_b Y b是预测概率, Y b Y_b Yb是真实数据。 N代表 the batch size。

U-NET++与最初的U-Net在三个方面有所不同:
1)在 skip pathways 上有卷积层(绿色表示),连接编码器和解码器特征图之间的语义鸿沟;
2)在 skip pathways 上有密集的 skip connections (如蓝色所示),提高了梯度流动性;
3)有 deep supervision (红色表示),它支持模型修剪和改进。

效果对比:
image
上图为 U-Net, wide U-Net and UNet++ with and without deep supervision (DS) UNET++的分割结果(IoU: %)

image

上图为对剪枝后的UNet++的复杂性、速度和准确性进行的测试结果,其中(a)代表细胞核(b)代表结肠息肉©代表肝脏(d)代表肺结节。
可以看到剪枝过后的网络推演速度变快了,但是准确率会相应的降低。

code :https://github.com/MrGiovanni/UNetPlusPlus

### 级联U-Net架构及其应用 级联U-Net是一种基于卷积神经网络(CNN)的结构设计,主要用于医学图像分割和其他复杂的视觉任务。它通过串联多个U-Net模型来逐步细化特征表示和预测结果[^1]。 #### 架构概述 级联U-Net通常由两个或更多个标准U-Net组成,其中第一个U-Net负责初步提取全局上下文信息并生成粗略的分割图;后续的U-Net则利用前一阶段的结果进一步优化细节部分。这种分层处理方式能够显著提高最终输出的质量,尤其是在复杂背景下的目标检测场景中表现优异[^2]。 以下是Python实现的一个简单版本: ```python import torch.nn as nn class UNetBlock(nn.Module): def __init__(self, in_channels, out_channels): super(UNetBlock, self).__init__() self.conv = nn.Sequential( nn.Conv2d(in_channels, out_channels, kernel_size=3), nn.ReLU(inplace=True), nn.Conv2d(out_channels, out_channels, kernel_size=3), nn.ReLU(inplace=True) ) def forward(self, x): return self.conv(x) class CascadeUNet(nn.Module): def __init__(self, num_classes): super(CascadeUNet, self).__init__() # First U-Net self.unet1_encoder = UNetBlock(3, 64) self.unet1_decoder = UNetBlock(64, num_classes) # Second U-Net self.unet2_encoder = UNetBlock(num_classes, 64) self.unet2_decoder = UNetBlock(64, num_classes) def forward(self, x): # Pass through first U-Net enc1 = self.unet1_encoder(x) dec1 = self.unet1_decoder(enc1) # Use output from first U-Net as input to second one enc2 = self.unet2_encoder(dec1) dec2 = self.unet2_decoder(enc2) return dec2 ``` 此代码片段定义了一个双阶段的级联U-Net框架,适用于二分类或多类别分割问题[^3]。 #### 应用领域 该技术广泛应用于医疗影像分析,如肿瘤边界界定、器官轮廓描绘等领域。此外,在遥感数据解析以及自动驾驶环境感知等方面也有出色的表现。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值