当前位置: 首页 > news >正文

第16章:基于CNN和Transformer对心脏左心室的实验分析及改进策略

目录

1. 项目需求

2. 网络选择

2.1 UNet模块

2.2 TransUnet

2.2.1 SE模块

2.2.2 CBAM

2.3 关键代码

3 对比试验

3.1 unet

3.2 transformer+SE

3.3 transformer+CBAM

4. 结果分析

5. 推理

6. 下载


1. 项目需求

本文需要做的工作是基于CNN和Transformer的心脏左心室分割,需要在Transformer网络中进行改进,以求期待更好的分割结果

数据集的样式如下:

这里的标签是这样的:

因为是二值的分割任务,这里心脏的左心室标签全部标记为1,看起来是全黑的,可以可视化看看

2. 网络选择

本文选择的网络是UNet和TransUnet,并且在TransUnet中加入注意力模块

2.1 UNet模块

Unet网络是一种用于图像分割任务的深度学习架构,由Ronneberger等人于2015年提出。Unet的结构类似于自编码器,采用对称的结构,分为编码器和解码器两部分。

编码器部分由卷积层和池化层构成,用于提取图像的特征并逐渐减小空间分辨率。解码器部分则由反卷积层和卷积层构成,用于将编码器提取的特征映射回原始分辨率,并生成分割结果。

在训练过程中,Unet通过将输入图像与对应的标签图像一起输入网络,利用损失函数计算网络输出与标签之间的差异,并通过反向传播算法调整网络参数,使得网络输出能够尽可能地接近标签图像。

Unet网络在图像分割任务中表现出色,尤其在医学图像分割等领域取得了很好的效果。其优点包括较小的参数数量、对少量训练样本的高效利用,以及良好的分割精度。

2.2 TransUnet

TransUNet是一种基于Transformer的图像分割模型,它结合了Transformer的自注意力机制和UNet的编码-解码结构。这个模型由微软研究院提出,旨在应用于医学图像分割任务。

TransUNet模型的架构主要分为两部分:Encoder部分和Decoder部分。Encoder部分主要利用Transformer的自注意力机制来提取图像的全局特征,而Decoder部分则类似于UNet的解码器,用于将特征映射回原始图像的分辨率并生成分割结果。

相较于传统的卷积神经网络,TransUNet模型在处理长程依赖关系和全局特征提取方面具有优势。它可以学习到更加细致和全局的特征表示,有助于提升图像分割的准确性和性能。

总的来说,TransUNet模型是一种结合了Transformer和UNet特点的先进图像分割模型,适用于医学图像等领域的任务。

2.2.1 SE模块

SE模块(Security Enhancement Module)是一种用于增强系统安全性的软件或硬件模块。它通常被用于加固系统的安全性,提高系统的防护能力,防止恶意攻击和数据泄露。SE模块可以实现诸如数据加密、访问控制、身份认证等功能,从而确保系统和数据的安全。在当今信息安全日益重要的环境下,SE模块成为许多系统和应用程序的重要组成部分,帮助用户保护其重要信息和资产不受损害。

2.2.2 CBAM

CBAM模块是一种用于解决关注机制(Attention Mechanism)的问题的模块。它结合了通道注意(Channel Attention)和空间注意(Spatial Attention)的方法,从而能够更加有效地捕捉输入特征图中的重要信息。通过CBAM模块,神经网络可以学习到更加具有区分度的特征表示,从而提升模型在各种视觉任务中的性能表现。CBAM模块已经在许多计算机视觉领域得到了成功的应用,成为提升模型性能的重要工具之一。

2.3 关键代码

代码部分,这里放了三个代码,分别是unet、transformer+SE、transformer+CBAM,可以自行选择

    # 1. cbam  注意力机制
    # model =TransUnet(in_channels=3,img_dim=224,vit_blocks=1,
    #              vit_dim_linear_mhsa_block=512, classes=nc)

    # 添加模块代码
    # model.vit.mlp_head.add_module('cbam', CBAM(1024))
    # model.vit.transformer.layers[0].mhsa.to_qvk.add_module('cbam', CBAM(1024))
    # model.vit.transformer.layers[0].mhsa.W_0.add_module('cbam', CBAM(1024))
    #
    #2.  unet
    model = U_Net(img_ch=3,output_ch=nc)

    # # # 3. se
    # model =TransUnet(in_channels=3,img_dim=224,vit_blocks=1,
    #              vit_dim_linear_mhsa_block=512, classes=nc)
    #
    # # 添加模块代码
    # model.vit.mlp_head.add_module('se', SE_Block(1024))
    # model.vit.transformer.layers[0].mhsa.to_qvk.add_module('se', SE_Block(1024))
    # model.vit.transformer.layers[0].mhsa.W_0.add_module('se', SE_Block(1024))

3 对比试验

因为对比试验,其他的参数都是一样的,如下所示:

    "train parameters": {
        "batch size": 4,
        "lr": 0.001,
        "lrf": 0.01,
        "ct": false,
        "epochs": 100,
        "num classes": 2,
        "best epoch": 96

3.1 unet

最好epoch 

    "epoch:97": {
        "train log:": {
            "info": {
                "pixel accuracy": [
                    0.9996318221092224
                ],
                "Precision": [
                    "0.9721"
                ],
                "Recall": [
                    "0.9731"
                ],
                "F1 score": [
                    "0.9726"
                ],
                "Dice": [
                    "0.9726"
                ],
                "IoU": [
                    "0.9466"
                ],
                "mean precision": 0.9721232056617737,
                "mean recall": 0.9730567932128906,
                "mean f1 score": 0.9725897908210754,
                "mean dice": 0.9725897908210754,
                "mean iou": 0.9466421008110046
            }
        },
        "val log:": {
            "info": {
                "pixel accuracy": [
                    0.9994057416915894
                ],
                "Precision": [
                    "0.9563"
                ],
                "Recall": [
                    "0.9568"
                ],
                "F1 score": [
                    "0.9566"
                ],
                "Dice": [
                    "0.9566"
                ],
                "IoU": [
                    "0.9168"
                ],
                "mean precision": 0.9563419818878174,
                "mean recall": 0.9568029046058655,
                "mean f1 score": 0.956572413444519,
                "mean dice": 0.956572413444519,
                "mean iou": 0.916759729385376
            }

3.2 transformer+SE

最好的epoch:

       "train log:": {
            "info": {
                "pixel accuracy": [
                    0.9997045397758484
                ],
                "Precision": [
                    "0.9780"
                ],
                "Recall": [
                    "0.9780"
                ],
                "F1 score": [
                    "0.9780"
                ],
                "Dice": [
                    "0.9780"
                ],
                "IoU": [
                    "0.9569"
                ],
                "mean precision": 0.9780052900314331,
                "mean recall": 0.9779714941978455,
                "mean f1 score": 0.9779884219169617,
                "mean dice": 0.9779884219169617,
                "mean iou": 0.9569249749183655
            }
        },
        "val log:": {
            "info": {
                "pixel accuracy": [
                    0.9994567036628723
                ],
                "Precision": [
                    "0.9588"
                ],
                "Recall": [
                    "0.9619"
                ],
                "F1 score": [
                    "0.9604"
                ],
                "Dice": [
                    "0.9604"
                ],
                "IoU": [
                    "0.9237"
                ],
                "mean precision": 0.9588128328323364,
                "mean recall": 0.9618959426879883,
                "mean f1 score": 0.9603518843650818,
                "mean dice": 0.9603519439697266,
                "mean iou": 0.9237278699874878
            }
        }
    },

 

3.3 transformer+CBAM

最好的epoch:

    "epoch:96": {
        "train log:": {
            "info": {
                "pixel accuracy": [
                    0.9996169209480286
                ],
                "Precision": [
                    "0.9724"
                ],
                "Recall": [
                    "0.9705"
                ],
                "F1 score": [
                    "0.9714"
                ],
                "Dice": [
                    "0.9714"
                ],
                "IoU": [
                    "0.9445"
                ],
                "mean precision": 0.9724175333976746,
                "mean recall": 0.9704613089561462,
                "mean f1 score": 0.9714384078979492,
                "mean dice": 0.971438467502594,
                "mean iou": 0.9444631338119507
            }
        },
        "val log:": {
            "info": {
                "pixel accuracy": [
                    0.9994094967842102
                ],
                "Precision": [
                    "0.9582"
                ],
                "Recall": [
                    "0.9554"
                ],
                "F1 score": [
                    "0.9568"
                ],
                "Dice": [
                    "0.9568"
                ],
                "IoU": [
                    "0.9171"
                ],
                "mean precision": 0.9581836462020874,
                "mean recall": 0.9553713798522949,
                "mean f1 score": 0.9567754864692688,
                "mean dice": 0.956775426864624,
                "mean iou": 0.9171327948570251
            }
        }

4. 结果分析

指标如下:

unettransformer+setransformer+cbam
0.95660.96040.9568
        0.9168        0.92370.9171

上述的指标均为验证集上的指标

其中第一行为dice、第二行为iou

可以发现,transformer+se的效果是最好的

5. 推理

运行命令:streamlit run infer.py

6. 下载

关于本项目代码和数据集、训练结果的下载:【更换数据集进行训练的话,参考readme文件,pip requirements文件就行了】

基于transformer和unet卷积神经网络对心脏左心室分割的研究、已经训练完成资源-CSDN文库

包含数据集、完整代码、和训练结果:


关于神经网络的改进:图像分类网络改进_听风吹等浪起的博客-CSDN博客 

相关文章:

  • Kotlin的 noinline和crossinline关键字
  • k8s的核心组件整理
  • 多阶段构建实现 Docker 加速与体积减小:含文件查看、上传及拷贝功能的 FastAPI 应用镜像构建
  • Android 接 Twitter Share ,常见问题及解决方案
  • 流畅如丝:利用requestAnimationFrame优化你的Web动画体验
  • 基于Web大学生创新服务平台(源码+lw+部署文档+讲解),源码可白嫖!
  • 摄影工作室预约管理系统基于Spring BootSSM
  • Sympy入门之微积分基本运算
  • 【中间件】Rabbit离线部署操作
  • windows单节点验证victoriametrics结合AlertManger实现告警推送webhook
  • 对接马来西亚、印度、韩国、越南等全球金融数据示例
  • 个人作品集模板!除了Figma还可以选择什么软件?
  • neo4j-如何让外部设备访问wsl中的neo4j
  • Python 类与对象概念全解析:从零到实战
  • Ubuntu上安装Docker
  • 统计哲学的频率学派和贝叶斯学派
  • Redis的大Key问题如何解决?
  • 基于单片机的农作物自动灌溉系统
  • sougou AI close
  • Milvus WeightedRanker 对比 RRF 重排机制
  • 世界数字教育大会发布“数字教育研究全球十大热点”
  • 六省会共建交通枢纽集群,中部六省离经济“第五极”有多远?
  • 金融月评|尽早增强政策力度、调整施策点
  • 思想史家陈谷嘉逝世,曾为岳麓书院当代复兴奠定重要基础
  • 4月新增社融1.16万亿,还原地方债务置换影响后信贷增速超过8%
  • 因操纵乙烯价格再遭诉讼,科莱恩等四家企业被陶氏索赔60亿