UNet3+阅读笔记

Paper:https://arxiv.org/pdf/2004.08790
Code:https://github.com/ZJUGiveLab/UNet-Version

以前和大家分享过UNet和UNet++,UNet是一种编码器解码器结构的卷积神经网络,常用于医学图像分割;而UNet++是在UNet的基础上添加嵌套和密集跳过连接的卷积神经网络。这次给大家分享UNet系列的一篇新作UNet3+,它使用全尺度的跳跃连接把不同尺度的特征图相融合,并且通过深度监督从多尺度聚合的特征图中学习特征表达,还提出了一种混合损失函数,将分类任务和分割任务相结合可以增强器官边界和减少非器官图像的过度分割,从而获得更准确的分割结果。
UNet3+网络结构如下图1所示,通过重新设计跳跃连接来融合多尺度特征,并利用全面的深度监督,提供更少的参数,从而产生更准确的分割结果。
图1 UNet3+网络模型图1 UNet3+网络模型

  1. 全尺度连接
    为了弥补UNet和UNet++不能精确分割图像中器官的位置和边界,UNet3+中每一个解码器都结合了全部编码器的特征,这些不同尺度的特征能够获取细粒度的细节和粗粒度的语义。比如,下图2展示了第三个解码器 X D e 3 X_{De}^3 XDe3的特征图构造,它不仅直接接收来自相同尺度编码器层的特征图 X E n 3 X_{En}^3 XEn3,还对上面两层进行不同尺度的最大池化操作,将 X E n 1 X_{En}^1 XEn1 X E n 2 X_{En}^2 XEn2进行下采样,保证下采样后特征图的尺寸和 X E n 3 X_{En}^3 XEn3的大小一样;同时还对下面两层进行不同尺度的上采样操作,将 X E n 4 X_{En}^4 XEn4 X E n 5 X_{En}^5 XEn5进行上采样,确保上采样后的特征图的尺寸和 X E n 3 X_{En}^3 XEn3的大小一样。最后,作者发现采用64个3x3的卷积核进行卷积效果较好,那么在编码器和解码器之间构建的全尺度连接采用的就是64个3x3的卷积核进行卷积,在对应的解码器模块进行连接时,先采用320个(64x5=320)3x3的卷积核进行卷积,然后在经过BN和ReLU层就得到 X D e 3 X_{De}^3 XDe3
    图2 X_De^3的全尺度连接特征图
    图2 X E n 3 X_{En}^3 XEn3的全尺度连接特征图

  2. 全尺度监督
    为了从全尺度的聚合特征图中学习层次表达,UNet3+进一步采用了全尺度的深度监督。与UNet++对每个嵌套的子网络进行监督不同的是,在UNet3+中每一个解码器模块都有一个输出,与GT(ground truth)进行比较计算loss,从而实现全尺度的监督。具体的流程是,每一个解码器模块的最后一层被送入一个3x3的卷积层,然后是一个双线性上采样得到和GT一样大小的特征图,再使用sigmoid函数得到分割结果。
    为了实现器官边界的精确分割,作者提出了一个多尺度结构相似指数损失函数(MS-SSIM,如公式1所示)来给予模糊边界更高的权重。因此,UNet3+将更加关注模糊边界,区域分布差异越大,损失函数值(MS-SSIM)越大。
     (1)
    其中,M表示尺度的总数量(为了和UNet、UNet++保持一致,作者将M设置为5), μ p {μ}_{p} μp, μ g {μ}_{g} μg σ p {σ}_{p} σp, σ g {σ}_{g} σg分别是p、g的均值和方差, σ p g {σ}_{pg} σpg表示它们的协方差。 β m {β}_{m} βm, γ m {γ}_{m} γm定义每个尺度中这两个部分的相对重要性, C 1 = 0.0 1 2 {C}_{1}=0.01^2 C1=0.012 C 2 = 0.0 3 2 {C}_{2}=0.03^2 C2=0.032是避免被0除。
    结合Focal loss, MS-SSIM loss和IOU loss,作者提出一种混合损失函数用于三个不同层次的分割任务(像素分割、块分割和图像分割)中,它能获取不同尺度目标的清晰的边界。混合损失函数的公式如公式2所示。
     (2)

  3. 分类引导模块
    为了防止非器官图像的过度分割,和提高模型的分割精度,作者通过添加一个额外的分类任务来预测输入图像是否有器官,从而实现更精准的分割。如图3所示,对不同尺度的解码器模块的结果进行一系列的操作,包括Dropout,1x1的卷积,max pooling和 sigmoid函数,就可以得到一个分类结果(0表示没有器官,1表示有器官)。然后,将分类结果和分割结果相乘,这样就可以抑制对非器官图像的过度分割,从而提高模型的分割精度,实现精准分割。
    分类引导模块示意图
    图3 分类引导模块示意图

  4. 实验结果
    图4展示了UNet、UNet++和UNet3+在肝脏和脾脏数据集上面的分割结果,我们可以看出UNet3+表现最好;图5展示了UNet3+和5个SOTA分割模型在肝脏和脾脏数据集上面的分割结果,我们可以看出UNet3+也表现的很好。

图4
图4 UNet、UNet++和UNet3+在肝脏和脾脏数据集上面的分割结果
图5
图5 UNet3+和5个SOTA在肝脏和脾脏数据集上面的分割结果

训练自己的数据集可以通过搭建自己的Unet语义分割平台来实现。首先,你需要准备自己的数据集,包括训练集和验证集。可以参考引用中的博客文章和引用中的代码,根据自己的数据集生成相应的txt文件。txt文件的内容是模型训练和测试过程中读入图像数据的名称。 接下来,你可以使用PyTorch来搭建Unet语义分割模型。可以参考引用中的博客文章,其中介绍了如何使用PyTorch搭建自己的Unet语义分割平台。你可以根据自己的需求进行模型的修改和优化。 在训练过程中,你可以使用自己准备的数据集进行模型训练。可以参考引用中的博客文章和引用中的代码,利用生成的txt文件读取图像数据并进行训练。 训练自己的数据集需要一定的时间和计算资源,同时还需要进行适当的参数调整和优化。建议在训练过程中监控模型的性能指标,如损失函数和准确率,并根据需要进行调整和改进。 通过以上步骤,你就可以训练自己的数据集并应用Unet模型进行语义分割任务了。祝你成功!<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [学习笔记Unet学习及训练自己的数据集](https://blog.youkuaiyun.com/Qingkaii/article/details/124474485)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 50%"] - *2* *3* [SwinUnet官方代码训练自己数据集(单通道灰度图像的分割)](https://blog.youkuaiyun.com/qq_37652891/article/details/123932772)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论 26
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值