基于ResNet50和VGG16深度学习模型的阿尔茨海默病MRI图像分类与早期诊断研究

阿尔茨海默病(AD)是目前全球范围内最常见的神经退行性疾病之一,早期诊断对延缓疾病进程和改善患者生活质量至关重要。随着医学影像学的进步,基于MRI图像的阿尔茨海默病检测成为一种重要的研究方向。本文提出了一种基于深度学习的MRI图像分类方法,利用ResNet50和VGG16两种深度卷积神经网络模型,进行阿尔茨海默病的早期诊断。数据集包括来自100名、70名、28名和2名患者的四个分类:无损伤、非常轻度损伤、轻度损伤和中度损伤。每位患者的大脑被切割成32个水平轴向的MRI图像切片。

我们首先对ResNet50和VGG16模型进行了预训练,并在该数据集上进行微调。实验结果显示,ResNet50在特征提取能力和分类性能上优于VGG16,尤其是在识别中度损伤类别时表现出色。此外,针对数据不平衡问题,本文还采用了数据增强和加权损失函数等技术,进一步提高了模型的分类准确率和鲁棒性。

本研究为阿尔茨海默病的早期诊断提供了一种基于深度学习的高效解决方案,通过MRI图像自动分类,不仅能够提高诊断效率,还为临床提供了可靠的辅助决策支持。最终的实验结果表明,深度学习方法能够显著提升阿尔茨海默病的诊断精度,具有广泛的应用前景和临床价值。

本研究的创新之处在于结合了深度学习与医学影像分析,提出了一种新的、基于ResNet50和VGG16模型的阿尔茨海默病早期诊断方案。通过自动化MRI图像分类,本研究不仅提升了诊断效率,减少了医生的工作负担,还为临床提供了辅助决策支持工具。实验结果表明,深度学习方法,特别是ResNet50模型,能够显著提高阿尔茨海默病早期诊断的准确性,具有较高的应用潜力。未来,结合更多数据集以及更先进的网络结构,本研究有望为阿尔茨海默病的早期检测提供更为精确和广泛的解决方案,并推动其在临床中的实际应用。

算法流程

项目数据

传统的机器学习算法对图像进行识别等研究工作时,只需要很少的图像数据就可以开展工作。而在使用卷积神经网络解决研究的阿尔茨海默病识别问题的关键其一在于搭建合适的神经网络,其更需要具备大量优质的训练数据集,在大量的有标签数据不断反复对模型进行训练下,神经网络才具备我们所需要的分类能力,达到理想的分类效果。因此有一个质量较好的图像数据集至关重要。

数据集介绍:
本研究使用的阿尔茨海默病图像数据集是专门阿尔茨海默诊断任务设计的,包含了数据集包含四个分类:无认知障碍、非常轻度认知障碍、轻度认知障碍和中度认知障碍,每个类别的样本数量分别为100名、70名、28名和2名患者。每位患者的大脑被切成32个水平轴向的MRI图像。数据集中的图像是从临床病人样本中获取,经过专业的病理学家标注,确保数据的准确性和可靠性。每一张图像代表了阿尔茨海默病的不同病理特征,包括细胞密度、结节大小、形状不规则性等,能够为深度学习模型提供丰富的特征信息。

数据集已被预先标注,每个类别的图像数量基本均衡,为训练和验证提供了稳定的基准。数据集被划分为训练集和测试集,其中每类图像的数量分别如下:
(1)训练集:Mild Impairment类2560张图像,Moderate Impairment类2560张图像,No Impairment类2560张图像,Very Mild Impairment类2560张图像共10240张图像。

(2)测试集:Mild Impairment类176张图像,Moderate Impairment类12张图像,No Impairment类640张图像,Very Mild Impairment类448张图像共1279张图像。

这种划分方式保证了数据的多样性和代表性,同时通过验证集和测试集的独立性,能够有效评估模型的泛化能力。

数据预处理
为了提高模型的泛化能力并防止过拟合,我们对数据集进行了数据预处理。具体步骤如下:
(1)尺寸标准化:所有图像被调整为统一的224×224像素,以适配VGG16和ResNet50等模型的输入要求。
(2)归一化:对图像进行归一化处理,标准化RGB通道的像素值,使其均值为[0.485, 0.456, 0.406],标准差为[0.229, 0.224, 0.225]。这些参数是基于ImageNet数据集计算得出的,适用于VGG16和ResNet50的预训练模型。

数据增强
1.训练集增强:
(1)随机裁剪:随机裁剪图像并调整为224×224的尺寸,增加数据的多样性,帮助模型更好地学习到不同的尺度和视角。
(2)随机水平翻转:随机对训练图像进行水平翻转,进一步增加数据集的变异性,提高模型的鲁棒性。

2.验证集增强:
(1)Resize和CenterCrop:将验证图像的长边调整为256像素,然后从中心裁剪224×224区域,确保数据统一性。

通过数据增强和标准化处理,能有效提高模型对各种变换的适应能力,从而提升其在不同场景下的分类效果。

数据集划分
数据集已预先划分为两个部分:训练集和测试集,具体如下:
(1)训练集:Mild Impairment类2560张图像,Moderate Impairment类2560张图像,No Impairment类2560张图像,Very Mild Impairment类2560张图像共10240张图像,用于模型训练,通过最小化损失函数优化参数。
(2)测试集:Mild Impairment类176张图像,Moderate Impairment类12张图像,No Impairment类640张图像,Very Mild Impairment类448张图像共1279张图像,用于评估模型在未见数据上的表现

这种数据集划分方式有助于保证模型训练和评估的可靠性,确保各数据集独立,避免数据泄露和过拟合。

实验硬件
本实验的硬件环境设置如下:
(1)计算平台:NNVIDIA GeForce RTX 3070 Ti。(8GB显存),支持CUDA加速
(2)CPU:12th Gen Intel(R) Core(TM) i9-12900H 2.50 GHz 14核处理器
(3)内存:32GB RAM
(4)存储:1TB SSD,用于存储数据集和模型权重

该硬件环境提供了足够的计算资源,能够支持大规模图像数据的训练和高效计算,尤其在使用GPU进行加速时,训练时间得到了显著缩短。

实验超参数设置
本实验中的主要超参数设置如下:
(1)学习率:0.0001,使用Adam优化器,能够自适应调整学习率,表现较好。
(2)批次大小:训练时为32,验证时为64,较小的批次大小有助于稳定训练并提高计算效率。
(3)优化器:使用Adam优化器,适用于稀疏数据和非凸问题。
(4)损失函数:采用交叉熵损失函数(CrossEntropyLoss),适用于多分类任务。
(5)训练轮数:设定为15轮,帮助模型逐渐收敛。
(6)权重初始化:使用预训练的VGG16和ResNet50权重进行迁移学习,加速收敛并提高分类性能。

这些超参数设置经过反复调试,以确保模型在验证集上表现良好。

实验过程与结果分析

分析VGG16和ResNet50两种模型在甲状腺结节分类任务中的实验结果。包括训练过程中的损失与准确率变化、模型性能对比、混淆矩阵(热力图)分析、过拟合与欠拟合的讨论,以及计算效率的分析。

训练过程中的损失与准确率变化
为了评估模型在训练过程中的表现,我们记录了每个epoch的训练损失、训练准确率以及验证损失、验证准确率。通过这些指标,我们可以观察到模型是否能够有效收敛,以及是否存在过拟合或欠拟合的情况。

1.1 VGG16模型训练过程
VGG16模型在训练过程中的损失和准确率曲线如下所示:


(1)训练损失:训练损失从 0.85 平稳下降至 0.3左右,显示模型在训练数据上逐渐优化并提高性能。
(2)训练准确率:训练准确率从 60% 提升到 90%左右,表明模型在训练数据上的学习能力逐渐增强,能够较好地拟合训练数据。
(3)验证损失与验证准确率:验证损失在第6个epoch出现波动峰值后逐渐稳定在0.5左右,验证准确率从60%回升至80%左右,显示模型在验证集上的泛化能力较弱,与训练准确率存在约10%的差距。

1.2 ResNet50模型训练过程
ResNet50模型在训练过程中的损失和准确率曲线如下所示:


(1)训练损失:逐步下降,说明模型在训练数据上的误差不断减少,训练过程稳定。
(2)训练准确率:稳步上升,最终接近 93%,表明模型在训练数据上的性能提升良好。
(3)验证损失与验证准确率:虽然存在波动,但整体表现良好,验证准确率最终也达到了 93%,证明模型有较强的泛化能力。

这些结果表明ResNet50模型在训练和验证集上都表现出了良好的学习能力,没有明显的过拟合或欠拟合问题,并且随着训练的进行,模型的泛化能力逐步得到提升。

模型性能对比
1.VGG16与ResNet50的准确率比较
在训练和验证过程中,ResNet50模型表现出了更高的准确率,尤其是在验证集上的表现更为突出。
(1)训练准确率:ResNet50略优于VGG16,最终达到了更高的准确率(93% vs 90%)。
(2)验证准确率:ResNet50的验证准确率更为稳定,并且接近训练准确率(约93%),而VGG16的验证准确率较低,且有较大的波动,显示出泛化能力较弱。

ResNet50相较于VGG16在准确率和泛化能力上表现更优,尤其在验证集上的表现更为稳定。VGG16虽然在训练集上表现不错,但其在验证集上的波动较大,可能需要进一步优化。

2.损失函数与准确率曲线分析
(1)ResNet50的损失曲线平滑且准确率较高,验证集表现稳定,显示了较好的学习和泛化能力。
(2)VGG16在训练集上表现较好,但验证集的损失和准确率波动较大,说明其存在过拟合现象,泛化能力较差。

混淆矩阵分析(热力图)
为了更全面地分析模型的分类性能,我们生成了混淆矩阵并将其可视化为热力图,帮助我们直观地了解模型在哪些类别上表现较好,在哪些类别上存在误分类。

1.VGG16的热力图:VGG16在大多数类别上表现较好,但对于轻度障碍和极轻度障碍的识别精度仍有提升空间。

2.ResNet50的热力图:RResNet50模型在认知障碍的分类任务中表现非常好,尤其是在区分明显程度的障碍类型时,尽管极轻度障碍的识别还需要进一步优化。

通过混淆矩阵的分析,ResNet50在细微差别的分类任务中表现更好,特别是在轻度障碍和极轻度障碍的区分上,VGG16则需要更多的优化来提高识别精度。

过拟合与欠拟合分析
(1)过拟合:VGG16出现了明显的过拟合现象,尤其是在训练和验证准确率之间存在较大的差距,训练集上表现较好,但验证集上的表现不理想。ResNet50表现良好,没有明显的过拟合现象,训练和验证准确率趋于一致。
(2)欠拟合:VGG16表现出一定的欠拟合,特别是在极轻度障碍和轻度障碍类别的预测上,模型未能有效学习到这两类的细节差异。ResNet50没有明显的欠拟合现象,模型能够较好地拟合训练数据,且验证集上也有良好的表现。

ResNet50的性能优于VGG16,特别是在处理较复杂任务时具有更好的泛化能力和稳定性,而VGG16需要进一步优化,尤其是在正则化和数据增强方面,以提升其泛化能力。

计算效率分析
(1)ResNet50 在计算效率方面明显优于 VGG16。ResNet50 的参数量较小,计算资源需求更低,训练和推理速度更快。特别是在深层网络的训练中,ResNet50 更能够高效地进行学习。
(2)VGG16 的计算效率较低,主要是由于其庞大的参数量和复杂的全连接层,导致训练和推理时的时间和内存消耗较大。

如果计算效率是项目的关键考虑因素,ResNet50 更适合用于大规模训练任务,尤其是在时间有限的情况下。

运行效果

– 运行 MainProgram.py
1.ResNet50模型运行:
(1)主界面

(2)轻度认知障碍

(3)中度认知障碍

(4)无认知障碍

(5)非常轻度认知障碍

2.VGG16模型运行:
(1)主界面

(2)轻度认知障碍

(3)中度认知障碍

(4)无认知障碍

(5)非常轻度认知障碍

3.检测结果保存

点击保存按钮后,会将当前选择的图检测结果进行保存。
检测的结果会存储在save_data目录下。

图片文件保存的csv文件内容如下:

– 运行 train_resnet50.py
这段代码的主要目的是在直接运行该脚本时,加载指定路径下的训练集和测试集,初始化一个 MainProcess 实例并训练模型(ResNet50),设置训练的轮数为 15 轮。

数据集路径设置:
(1)train_dir = r”D:\Dataset\train”:设置训练集数据的路径。
(2)test_dir = r”D:\Dataset\test”:设置测试集数据的路径。

模型路径设置:
(1)model_name0 = r”models/resnet50.pth”:指定训练模型的文件路径,这里是 resnet50.pth 模型的路径,用于加载预训练的 ResNet50 权重或保存训练后的模型。

实例化MainProcess类:
(1)cnn = MainProcess(train_dir, test_dir, model_name0):通过传入训练集路径、测试集路径和模型路径,创建 MainProcess 类的实例 cnn,这个类负责数据加载、模型训练、验证等操作。

调用主函数main进行训练:
(1)cnn.main(epochs=15):调用 cnn 对象的 main 方法,开始训练模型。epochs=15 表示模型训练将进行50轮(每轮遍历整个训练集一次)。该方法将包括模型的训练过程、损失计算、验证等步骤

训练日志结果
ResNet50日志结果

这张图展示了使用ResNet50进行模型训练的详细过程和结果。

配置信息:
(1)模型在训练了15轮后,总共耗时约21分钟。
(2)本次训练使用了GPU设备,具体是CUDA设备0。

训练过程:
训练过程记录了15个 epoch,每个 epoch 的训练损失和验证准确率都有输出:
(1)训练损失(train_loss)在每个epoch结束时有所下降(从0.604下降到0.181)。
(2)验证准确率(val_accuracy)从0.621提升到0.968,说明模型的性能在不断提高。

训练速度:
训练速度:
训练的速度在4.77到5.09 it/s之间,表示每秒钟处理大约4.77到5.09个批次。
(1)每个epoch的训练时间约为63秒到67秒。
(2)每个验证批次的处理时间大约是19秒到23秒。

完成信息:
(1)Process finished with exit code 0:表示整个验证过程顺利完成,没有报错。

总结:
ResNet50在训练过程中通常表现出较好的平稳性和较快的收敛速度。通过调整超参数、应用正则化方法和确保充足的计算资源,能够进一步提升其训练和验证性能。

– 运行 train_vgg16.py
这段代码的主要目的是在直接运行该脚本时,加载指定路径下的训练集和测试集,初始化一个 MainProcess 实例并训练模型(VGG16),设置训练的轮数为 15 轮。

数据集路径设置:
(1)train_dir = r”D:\ZodiacDataset\train”:设置训练集数据的路径。
(2)test_dir = r”D:\ZodiacDataset\test”:设置测试集数据的路径。

模型路径设置:
(1)model_name0 = r”models/vgg16.pth”:指定训练模型的文件路径,这里是 vgg16.pth 模型的路径,用于加载预训练的 VGG16 权重或保存训练后的模型。

实例化 MainProcess 类:
(1)cnn = MainProcess(train_dir, test_dir, model_name0):通过传入训练集路径、测试集路径和模型路径,创建 MainProcess 类的实例 cnn,这个类负责数据加载、模型训练、验证等操作。

调用主函数main进行训练:
(1)cnn.main(epochs=15):调用 cnn 对象的 main 方法,开始训练模型。epochs=15 表示模型训练将进行15轮(每轮遍历整个训练集一次)。该方法将包括模型的训练过程、损失计算、验证等步骤

训练日志结果
VGG16日志结果

这张图展示了使用VGG16进行模型训练的详细过程和结果。

配置信息:
(1)模型在训练了15轮后,总共耗时36分钟。
(2)本次训练使用了GPU设备,具体是CUDA设备0。

训练过程:
训练过程记录了50个epoch,每个epoch的训练损失和验证准确率都有输出:
(1)训练损失(train_loss)在每个epoch结束时有所下降(从0.847下降到0.260)。
(2)验证准确率(val_accuracy)从0.589提升到0.816,说明模型的性能在不断提高。

训练速度:
训练的速度为2.47到2.90it/s之间,表示每秒钟处理大约2.47到2.90个批次。
(1)每个epoch的训练时间约为110秒到130秒。
(2)每个验证批次的处理时间大约是21.5秒到25.9秒。

完成信息:
(1)Process finished with exit code 0:表示整个验证过程顺利完成,没有报错。

总结:
VGG16模型在50个训练周期中表现出良好的学习能力和逐步提升的验证准确率,尽管初期存在一定的波动,但通过训练能够有效提高性能。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/929417.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【日常记录-Mybatis】PageHelper导致语句截断

1. 简介 PageHelper是Mybatis-Plus中的一个插件,主要用于实现数据库的分页查询功能。其核心原理是将传入的页码和条数赋值给一个Page对象,并保存到本地线程ThreadLocal中,接下来,PageHelper会进入Mybatis的拦截器环节,…

MFC实现全屏功能

之前全屏都是参考: MFC单文档(SDI)全屏程序的实现 主要思路就是将各种菜单工具栏隐藏恢复。 随着MFC的升级,MFC框架本身就具备了全屏的功能。 微软有一个全屏实现类: CFullScreenImpl Class managing full-screen mod…

nn.RNN解析

以下是RNN的计算公式,t时刻的隐藏状态H(t)等于前一时刻隐藏状态H(t-1)乘以参数矩阵,再加t时刻的输入x(t)乘以参数矩阵,最后再通过激活函数,等到t时刻隐藏状态。 下图是输出input和初始化的隐藏状态,当参数batch_first True时候&…

运算符重载(五)

目录 const成员函数const对象不可以调用非const成员函数非const对象可以调用const成员函数const成员函数内不可以调用其它的非const成员函数非const成员函数内可以调用其它的const成员函 取地址及const取地址操作符重载const补充场景1场景2场景3场景4 const成员函数 将const修…

redis之RedisTemplate和StringRedisTemplate的区别

1.RedisTemplate和StringRedisTemplate的区别 StringRedisTemplate继承RedisTemplate 两者的数据是不共通的(默认的序列化机制导致key不一样) StringRedisTemplate默认采用的是String的序列化策略 RedisTemplate默认采用的是JDK的序列化策略&#xf…

浅探 Windows 上获取磁盘信息的几种方式(一)

获取磁盘信息是一个常见需求,如检查磁盘预留空间,开发磁盘碎片整理工具,系统性能优化等工具等。 Windows 为此提供了各种接口,今天我们主要讲讲常用相关的三个API : GetDiskFreeSpaceGetDiskFreeSpaceExGetDiskSpaceI…

通信综合—8.通信网络安全

一、信息系统安全概述 1.信息系统的构成和分类 信息系统是将用于收集、处理、存储和传播信息的部件组织在一起而成的相关联的整体,般是由计算机硬件、网络和通信设备、计算机软件、信息资源和信息用户组成。它是以处理信息流为目的的人机一体化系统。信息系统主要…

语言的艺术:探秘基于GPT模型的文本生成与优化之美

语言的艺术:探秘基于GPT模型的文本生成与优化之美 在人工智能蓬勃发展的今天,语言模型如同文字艺术的魔术师,赋予了计算机以“书写”的能力。基于GPT(Generative Pre-trained Transformer)模型的文本生成技术&#xf…

微服务篇-深入了解 XA 模式与 AT 模式、分布式事务(部署 TC 服务、微服务集成 Seata )

🔥博客主页: 【小扳_-CSDN博客】 ❤感谢大家点赞👍收藏⭐评论✍ 文章目录 1.0 分布式事务 1.1 认识 Seata 2.0 部署 TC 服务 2.1 准备数据库表 2.2 准备配置文件 2.3 Docker 部署 3.0 微服务集成 Seata 3.1 引入依赖 3.2 改造配置 3.3 添加数…

王道考研编程题总结

我还在完善中,边复习边完善(这个只是根据我自身总结的) 一、 线性表 1. 结构体 #define MaxSize 40 typedef struct{ElemType data[MaxSize];int length; }SqList 2. 编程题 1. 删除最小值 题意 :从顺序表中删除…

原生html+css+ajax实现二级下拉选择的增删改及树形结构列出

<?php $db_host localhost; $db_user info_chalide; $db_pass j8c2rRr2RnA; $db_name info_chalide; /* 数据库结构SQL CREATE TABLE categories ( id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(255) NOT NULL, parent_id INT DEFAULT 0 ); */ try { $pdo new PD…

微信小程序介绍-以及写项目流程(重要)

前言&#xff1a;本篇文章介绍微信小程序以及项目介绍&#xff1a; 文章介绍&#xff1a;介绍了微信小程序常用的指令、组件、api。tips&#xff1a;最好按照官方文档来进行学习&#xff0c;大致可以我的目录来学习&#xff0c;对于写项目是没有问题的 微信小程序官方文档https…

Data Uncertainty Learning in Face Recognition 论文阅读

Data Uncertainty Learning in Face Recognition 论文阅读 Abstract1. Introduction2. Related Work3. Methodology3.1. Preliminaries3.2. Classification-based DUL for FR3.3. Regression-based DUL for FR3.4. Discussion of Related Works 4. Experiments4.1. Datasets an…

汽车产业数字化转型:协同创新破解挑战,平衡安全与流通

在数字经济时代的浪潮中&#xff0c;数据资源和数据信息已成为驱动各行各业转型升级的“新石油”。汽车产业&#xff0c;作为国民经济的重要支柱&#xff0c;正经历着前所未有的变革。随着数字化创新和转型的深入&#xff0c;数据在汽车全产业链中的作用和价值日益凸显。在这个…

vulnhub kioptirx1.2 超详细wp

探测 nmap --min-rate 10000 -p- 192.168.128.134 最小速率10000 nmap -sT -sV -sC -O 192.168.128.134 web打点 无弱口令 暴露cms寻找exp searchsploit LotusCMS -m 16982 [输入id号和参数m可以直接把东西复制到当前目录] 查看txt里面发现 都是xss没有rce github搜索到一个…

扫二维码进小程序的指定页面

草料二维码解码器 微信开发者工具 获取二维码解码的参数->是否登陆->跳转 options.q onLoad: function (options) {// console.log("options",options.q)if (options && options.q) {// 解码二维码携带的链接信息let qrUrl decodeURIComponent(optio…

mysql基础学习1

useradd -r -g mysql -s /bin/false mysql (-r)系统用户 不能登录 A temporary password is generated for rootlocalhost: d>#jT7rfoaz) 看是否启动 看进程 端口 直接连接 看日志 varchar (20) char(20)更耗空间 create table student_info(id int,name varchar(20),s…

Echarts使用平面方法绘制三维立体柱状图表

目录 一、准备工作 1.下载引入ECharts库 2.创建容器 二、绘制基本柱状 三、绘制立体柱状方法一 1.定义立方体形状 2.注册立方体形状 3.配置custom系列 4.设置数据 5.渲染图表 四、绘制立体柱状方法二 1.画前知识 2.计算坐标renderItem 函数 &#xff08;1&#x…

基于 MindQuantum 实现对 “天衍” 量子云平台真机的比特映射

MindQuantum 目前只支持量子模拟器&#xff0c;如果需要获得量子算法在真机上的实测数据&#xff0c;可以借助“天衍”量子云平台提供的真机。本文将介绍如何基于 MindQuantum 绘制“天衍”真机的拓扑图&#xff0c;并进而实现比特映射。 关于 MindQuantum 涉及比特映射的教程…

OpenBayes贝式计算创始人受邀参加第九届中国开源年会,分享 AI4S 前沿洞察

Open Source&#xff0c;Open Life&#xff0c;开源新生活&#xff01; 由开源社主办的第九届中国开源年会 (COSCon24) 于 2024 年 11 月 3 日在北京圆满落幕。本届大会为期 2 天&#xff0c;以 「开源新生活 - Open Source, Open Life 」 为主题&#xff0c;汇聚了来自全国各…