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

第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.  unetmodel = 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博客 

相关文章:

第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 transformerSE 3.3 transformerCBAM 4. 结果分析 5. 推理 6. 下载 1. 项目需求 本文需要做的工作是基于CNN和Transformer的心脏左心室…...

云上 Redis 迁移至本地机房

文章目录 摘要在 IDC 搭建读写分离 redis 集群一、环境准备二、部署主从架构1. 安装Redis2. 配置主节点3. 配置从节点4. 所有 Redis 节点设置开机自启动三、部署代理层(读写分离)1. 安装Twemproxy2. 配置Twemproxy3. 配置开机自启动四、高可用配置(哨兵模式)1. 配置哨兵节点…...

zabbix数据库溯源

0x00 背景 zabbix数据库如果密码泄露被登录并新增管理员如何快速发现?并进行溯源? 本文介绍数据库本身未开启access log的情况。 0x01 实践 Mysql 数据库查insert SELECT * FROM sys.host_summary_by_statement_type where statement like %insert% 查…...

ZYNQ的cache原理与一致性操作

在Xilinx Zynq SoC中,Cache管理是确保处理器与外部设备(如FPGA逻辑、DMA控制器)之间数据一致性的关键。Zynq的ARM Cortex-A9处理器包含L1 Cache(指令/数据)和L2 Cache,其刷新(Flush/Invalidate&…...

React 中useMemo和useCallback Hook 的作用,在什么场景下使用它们?

大白话React 中useMemo和useCallback Hook 的作用,在什么场景下使用它们? 在 React 里,useMemo 和 useCallback 这两个 Hook 可有用啦,能帮咱优化组件性能,避免不必要的计算和渲染。下面咱就来详细聊聊它们的作用和使…...

Android笔记之项目引用第三方库(如:Github等)

前言:原生Android开发时引用github上的仓库内容,故出此文。 方式一:使用 JitPack(推荐) 步骤 1:在项目的 build.gradle 文件中添加 JitPack 仓库 打开项目根目录下的 build.gradle 文件,在 a…...

Linux 系统性能优化高级全流程指南

Linux 系统性能优化高级全流程指南 一、系统基础状态捕获 1. 系统信息建档 除了原有的硬件、内核和存储拓扑信息收集,还增加 CPU 缓存、网络设备详细信息等。 # 硬件信息 lscpu > /opt/tuning/lscpu.origin dmidecode -t memory > /opt/tuning/meminfo.or…...

SQL Server——表数据的插入、修改和删除

目录 一、引言 二、表数据的插入、修改和删除 (一)方法一:在SSMS控制台上进行操作 1.向表中添加数据 2.对表中的数据进行修改 3.对表中的数据进行删除 (二)方法二:使用 SQL 代码进行操作 1.向表中添…...

WPF 布局中的共性尺寸组(Shared Size Group)

1. 什么是共性尺寸组? 在 WPF 的 Grid 布局中,SharedSizeGroup 允许多个 Grid 共享同一列或行的尺寸,即使它们属于不同的 Grid 也能保持大小一致。这样可以保证界面元素的对齐性,提高布局的一致性。 SharedSizeGroup 主要用于需…...

deepSeek-SSE流式推送数据

1、背景 DeepSeek作为当前最火的AI大模型, 使用的时候用户在输入框输入问题,大模型进行思考回答你,然后会有一个逐步显示的过程效果,而不是一次性返回整个答案给前端页面进行展示,为了搞清楚其中的原理,我们…...

【北京迅为】iTOP-RK3568开发板OpenHarmony系统南向驱动开发UART接口运作机制

瑞芯微RK3568芯片是一款定位中高端的通用型SOC,采用22nm制程工艺,搭载一颗四核Cortex-A55处理器和Mali G52 2EE 图形处理器。RK3568 支持4K 解码和 1080P 编码,支持SATA/PCIE/USB3.0 外围接口。RK3568内置独立NPU,可用于轻量级人工…...

Leetcode 3495. Minimum Operations to Make Array Elements Zero

Leetcode 3495. Minimum Operations to Make Array Elements Zero 1. 解题思路2. 代码实现 题目链接:3495. Minimum Operations to Make Array Elements Zero 1. 解题思路 这一题的话核心就是统计对任意自然数 n n n,从 1 1 1到 n n n当中所有的数字对…...

C#实现自己的Json解析器(LALR(1)+miniDFA)

C#实现自己的Json解析器(LALR(1)miniDFA) Json是一个用处广泛、文法简单的数据格式。本文介绍如何用bitParser(拥有自己的解析器(C#实现LALR(1)语法解析器和miniDFA词法分析器的生成器)迅速实现一个简单高效的Json解析器。 读者可在&#xf…...

机器学习——KNN数据均一化

在KNN(K-近邻)算法中,数据均一化(归一化)是预处理的关键步骤,用于消除不同特征量纲差异对距离计算的影响。以下是两种常用的归一化操作及其核心要点: 质押 一 、主要思想 1. 最值归一化&#…...

异步编程与流水线架构:从理论到高并发

目录 一、异步编程核心机制解析 1.1 同步与异步的本质区别 1.1.1 控制流模型 1.1.2 资源利用对比 1.2 阻塞与非阻塞的技术实现 1.2.1 阻塞I/O模型 1.2.2 非阻塞I/O模型 1.3 异步编程关键技术 1.3.1 事件循环机制 1.3.2 Future/Promise模式 1.3.3 协程(Cor…...

哈尔滨工业大学DeepSeek公开课人工智能:大模型原理 技术与应用-从GPT到DeepSeek|附视频下载方法

导 读INTRODUCTION 今天继续哈尔滨工业大学车万翔教授带来了一场主题为“DeepSeek 技术前沿与应用”的报告。 本报告深入探讨了大语言模型在自然语言处理(NLP)领域的核心地位及其发展历程,从基础概念出发,延伸至语言模型在机器翻…...

制作Oracle11g Docker 镜像

基于Linux系统&#xff0c;宿主主机要设置如下环境变量&#xff0c;oracle为64位版本 dockerfile中需要的数据库安装包可从csdn下载内找到 #!/bin/bash # 在宿主机上运行以设置Oracle所需的内核参数 # 这些命令需要root权限cat > /etc/sysctl.d/99-oracle.conf << EO…...

Excel处理控件Spire.XLS系列教程:C# 在 Excel 中添加或删除单元格边框

单元格边框是指在单元格或单元格区域周围添加的线条。它们可用于不同的目的&#xff0c;如分隔工作表中的部分、吸引读者注意重要的单元格或使工作表看起来更美观。本文将介绍如何使用 Spire.XLS for .NET 在 C# 中添加或删除 Excel 单元格边框。 安装 Spire.XLS for .NET E-…...

MAC-在使用@Async注解的方法时,分布式锁管理和释放

在使用 @Async 注解的异步方法中管理分布式锁时,需要特别注意 ​锁的获取、释放与异步执行的生命周期匹配。以下是结合 Spring Boot 和 Redis 分布式锁的实践方案: 1. 为什么需要分布式锁? 异步方法可能被多个线程/服务实例并发执行,若访问共享资源(如数据库、缓存),需…...

Flink启动任务

Flink 以本地运行作为解读&#xff0c;版本1.16.0 文章目录 Flink前言StreamExecutionEnvironmentLocalExecutorMiniCluster启动MiniCluster TaskManagerTaskExecutor提交Task(submitTask) StreamGraph二、使用步骤1.引入库2.读入数据 总结 前言 提示&#xff1a;这里可以添加…...

「低延迟+快速集成:Amazon IVS如何重塑实时互动视频体验?」

引言&#xff1a;实时视频的爆发与开发痛点 随着直播电商、在线教育、云游戏的兴起&#xff0c;实时视频互动成为用户体验的核心。但自建视频服务面临高成本、高延迟、运维复杂等挑战。Amazon IVS&#xff08;Interactive Video Service&#xff09;作为亚马逊云科技推出的全托…...

Web开发-JS应用NodeJS原型链污染文件系统Express模块数据库通讯

知识点&#xff1a; 1、安全开发-NodeJS-开发环境&功能实现 2、安全开发-NodeJS-安全漏洞&案例分析 3、安全开发-NodeJS-特有漏洞 node.js就是专门运行javascript的一个应用程序&#xff0c;区别于以往用浏览器解析原生js代码&#xff0c;node.js本身就可以解析执行js代…...

描述@keyframes规则在 CSS 动画中的原理及作用,如何创建一个简单的动画

大白话描述keyframes规则在 CSS 动画中的原理及作用&#xff0c;如何创建一个简单的动画&#xff1f; 嘿&#xff0c;朋友&#xff01;咱来聊聊 CSS 里超酷的 keyframes 规则。这玩意儿就像是动画的剧本&#xff0c;能让网页元素动起来&#xff0c;就像给它们施了魔法一样&…...

国产达梦(DM)数据库的安装(Linux系统)

目录 一、安装前的准备工作 1.1 导包 1.2 创建用户和组 1.3 修改文件打开最大数 1.4 目录规划 1.5 修改目录权限 二、安装DM8 2.1 挂载镜像 2.2 命令行安装 2.3 配置环境变量 2.4 启动图形化界面 三、配置实例 四、注册服务 五、启动 停止 查看状态 六、数据库客…...

AI日报 - 2025年3月24日

&#x1f31f; 今日概览&#xff08;60秒速览&#xff09; ▎&#x1f916; AGI突破 | Lyra生物序列建模架构效率惊人 在100生物任务中达最优&#xff0c;推理速度提升高达12万倍 ▎&#x1f4bc; 商业动向 | OpenAI用户破4亿&#xff0c;Meta与Reliance探讨AI合作 生态扩展与全…...

git的底层原理

git的底层原理 三段话总结git&#xff0c; 1. 工作原理&#xff1a;git管理是一个DAG有向无环图&#xff0c;HEAD指针指向branch或直接指向commit&#xff0c;branch指向commit&#xff0c;commit指向tree&#xff0c;tree指向别的tree或直接指向blob。 2. git所管理的一个目录…...

【Spring】Spring框架介绍

在 Java 企业级应用开发领域&#xff0c;Spring 框架凭借强大功能、高度灵活性与卓越扩展性&#xff0c;成为众多开发者构建大型应用系统的首选。接下来为大家深入剖析 Spring 框架的核心特性、架构设计及实际项目应用。​ 一、Spring 框架简介​ Spring 框架由 Rod Johnson …...

MATLAB+Arduino利用板上的按键控制板上Led灯

几年不使用&#xff0c;之前的知识都忘掉了。需要逐步捡起来。 1 熟悉按键的使用 2熟悉灯的控制 1 电路 我们将通过 MATLAB 的 Arduino 支持包与 Arduino 板通信&#xff0c;读取按键状态并控制 LED 灯的亮灭。 按键&#xff1a;连接到 Arduino 的数字引脚&#xff08;例如…...

AI比人脑更强,因为被植入思维模型【21】冯诺依曼思维模型

定义 冯诺依曼思维模型是一种基于数理逻辑和系统分析的思维方式&#xff0c;它将复杂的问题或系统分解为若干个基本的组成部分&#xff0c;通过建立数学模型和逻辑规则来描述和分析这些部分之间的关系&#xff0c;进而实现对整个系统的理解和优化。该模型强调从整体到局部、再…...

【QA】Qt中有哪些命令模式的运用?

在 C/Qt 中&#xff0c;命令模式&#xff08;Command Pattern&#xff09;的实现通常用于封装操作请求、支持撤销/重做&#xff08;Undo/Redo&#xff09;或解耦调用者与接收者。以下是几种常见的实现方式及示例&#xff1a; 1. Qt 的 QUndoCommand 和 QUndoStack&#xff08;内…...