基于深度学习和卷积神经网络的乳腺癌影像自动化诊断系统(PyQt5界面+数据集+训练代码)

乳腺癌是全球女性中最常见的恶性肿瘤之一,早期准确诊断对于提高生存率具有至关重要的意义。传统的乳腺癌诊断方法依赖于放射科医生的经验,然而,由于影像分析的复杂性和人类判断的局限性,准确率和一致性仍存在挑战。近年来,卷积神经网络(CNN)等深度学习技术在医学影像分析中的应用取得了显著突破,尤其在乳腺癌影像的自动化诊断领域,展现出了优异的性能。

本文设计并实现了一个基于深度学习和卷积神经网络(CNN)的乳腺癌影像自动化诊断系统。通过采用经典的卷积神经网络模型(如VGG16和ResNet-50),对乳腺癌的影像数据进行训练与分类,自动判别乳腺癌影像中的良性和恶性肿瘤。首先,构建了一个包含大量乳腺癌影像的标注数据集,经过数据预处理和增强处理,提升了模型的训练效果和泛化能力。然后,针对卷积神经网络进行网络结构的优化与超参数的调节,以提高模型的分类精度。

实验结果表明,所设计的系统在乳腺癌影像分类中取得了较高的准确率。VGG16和ResNet-50在训练集和验证集上的表现均优异,尤其在恶性肿瘤的识别上,模型表现出较高的敏感性和准确度。此外,本研究还分析了卷积神经网络在乳腺癌影像诊断中的优势与局限,并讨论了深度学习技术在医疗影像分析中的未来发展方向。

本研究表明,基于卷积神经网络的深度学习方法在乳腺癌影像自动化诊断中具有巨大的潜力。通过不断优化网络模型和数据集,深度学习技术有望在乳腺癌的早期筛查和诊断中提供更加高效、准确的支持,为临床医学提供强有力的辅助工具。

算法流程

项目数据

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

数据集介绍:
本研究使用的乳腺癌图像数据集是专门为乳腺癌早期诊断任务设计的,包含了良性(benign)和恶性(malignant)乳腺癌肿瘤的组织切片图像。数据集中的图像是从临床病人样本中获取,经过专业的病理学家标注,确保数据的准确性和可靠性。每一张图像代表了乳腺癌肿瘤的不同病理特征,包括细胞密度、肿瘤大小、形状不规则性等,能够为深度学习模型提供丰富的特征信息。

数据集已被预先标注,每个类别的图像数量基本均衡,为训练和验证提供了稳定的基准。数据集被划分为训练集和测试集,其中每类生肖图像的数量分别如下:
(1)训练集:良性类2222张图像,恶性类486张图像,共7084张图像。

(2)测试集:良性类247张图像,恶性类557张图像,共804张图像。

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

数据预处理
为了提高模型的泛化能力并防止过拟合,我们对数据集进行了数据预处理。具体步骤如下:
(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)训练集:每类600张图像,共7200张图像,用于模型训练,通过最小化损失函数优化参数。
(2)测试集:每类55张图像,共660张图像,用于评估模型在未见数据上的表现

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

实验硬件
本实验的硬件环境设置如下:
(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)训练损失:显示出良好的下降趋势,训练损失在后期趋于稳定,说明模型逐渐收敛并且拟合训练数据。
(2)训练准确率:训练准确率持续提高,逐步接近97%,最终表现非常好,表明模型在训练数据上的拟合能力较强。
(3)验证损失与验证准确率:验证损失的波动较小,说明模型的泛化能力很强;验证准确率虽然在第12轮有所下降,但最后恢复至98%左右,说明模型在实际应用中的预测能力非常稳定。

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


(1)训练损失:训练损失在训练过程中呈现快速下降趋势,特别是在初期阶段,随着训练的深入,下降速度逐渐放缓,最终稳定在一个较低的水平(0.05-0.07之间)。
(2)训练准确率:训练准确率从92%快速上升,并在训练后期稳步提高至98%左右,最终保持在该水平,波动幅度非常小。
(3)验证损失与验证准确率:验证损失从0.225迅速下降,并在训练中期稳定在0.075附近,最终保持在0.05-0.07之间。这表明模型在验证集上的预测误差较小且趋于稳定。

从损失和准确率的曲线来看,ResNet50在训练过程中的收敛速度和稳定性都优于VGG16,表明其更适合处理复杂的分类任务。

模型性能对比
1.VGG16与ResNet50的准确率比较
在训练和验证过程中,ResNet50模型表现出了更高的准确率,尤其是在验证集上的表现更为突出。VGG16的最终训练准确率为0.97,验证准确率为0.98,而ResNet50的训练准确率为0.98,验证准确率为0.98。
(1)训练准确率:ResNet50的训练准确率更稳定,并且在处理复杂任务时具有更强的学习能力和稳定性,而VGG16的表现则相对较为波动。
(2)验证准确率:ResNet50在验证准确率上的稳定性和最终表现优于VGG16,其更能有效地避免过拟合,并展现出较强的泛化能力,适合处理复杂的分类任务。

虽然两者在训练集和验证集上的最终准确率都很接近(ResNet50和VGG16的验证准确率都是98%),ResNet50在训练准确率上稍有优势,且其表现更加稳定,特别是在验证集上的波动较小,说明其泛化能力和稳定性更强。

2.损失函数与准确率曲线分析
(1)ResNet50的损失和准确率曲线显示出更加平稳的下降和上升趋势,验证集上的性能波动较小,说明其在训练过程中的学习能力更强且泛化性较好,适合处理复杂的分类任务。
(2)VGG16虽然表现不错,但在训练过程中存在一定的不稳定性,尤其是在后期的几轮训练中,训练和验证准确率出现波动,这可能表明模型对数据的学习过程受到了干扰或局部最优解的影响。

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

1.VGG16的热力图:VGG16表现出色,特别是在恶性肿瘤的诊断中几乎没有错误,并且在良性肿瘤的识别上也非常精准。虽然存在少量误诊,但整体精度非常高,足以在实际医疗应用中发挥重要作用。继续优化模型后,VGG16有潜力达到更高的准确率。

2.ResNet50的热力图:ResNet50在乳腺癌良恶性分类任务中表现优秀,尤其在减少漏诊恶性肿瘤的方面,给出了非常可靠的结果。在实际应用中,只有很小的几率出现错误,模型已经接近临床诊断的要求。

通过混淆矩阵的分析,ResNet50在混淆矩阵中展示了非常高的诊断准确性,能够有效地区分良性和恶性肿瘤,尤其在恶性肿瘤的识别上具有显著优势。

过拟合与欠拟合分析
(1)过拟合:存在轻微的过拟合现象,尤其是在训练过程中出现波动,可能是模型过于依赖训练数据的某些特定特征。欠拟合的风险较小,模型有足够的学习能力来处理任务,但在泛化方面还有提升空间。
(2)欠拟合:表现出较好的平衡,训练和验证准确率都呈现平稳上升的趋势,过拟合和欠拟合的现象较轻。ResNet50在处理复杂任务时通常能够更好地避免过拟合,同时也不容易发生欠拟合。

ResNet50能够有效避免过拟合问题,并在多次训练中保持较高的验证准确率,而VGG16则需要进一步优化,可能通过增加正则化(如Dropout)来缓解过拟合问题。

计算效率分析
(1)ResNet50 在计算效率上表现更优,尤其是在训练速度和每个epoch的训练时间上,适合处理大规模数据集和更快速的训练需求。
(2)VGG16 虽然在准确率和模型表现上有其优势,但其训练速度相对较慢,计算资源消耗较大,可能需要更长时间来完成相同规模的训练任务。

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

运行效果

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

(2)乳腺癌良性

(3)乳腺癌恶性

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

(2)乳腺癌良性

(3)乳腺癌恶性

– 运行 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 表示模型训练将进行 15 轮(每轮遍历整个训练集一次)。该方法将包括模型的训练过程、损失计算、验证等步骤

训练日志结果
ResNet50日志结果

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

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

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

训练速度:
训练的速度在3.91it/s到4.26it/s之间,表示每秒钟处理大约4个批次。
(1)每个epoch的训练时间约为53秒到56秒。
(2)每个验证批次的处理时间大约是20秒到30秒。

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

总结:
ResNet50模型表现出色,在训练过程中,损失逐步下降且验证准确率持续上升,表明它具有较强的学习能力和较好的泛化能力。训练时间合理,且计算效率较高。尽管在某些轮次(如epoch 9-12)验证准确率有所波动,最终模型能够达到98.6%的验证准确率,显示了其优异的分类性能。

– 运行 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轮后,总共耗时28分钟。
(2)本次训练使用了GPU设备,具体是CUDA设备0。

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

训练速度:
训练的速度在2.40it/s到2.63it/s之间,表示每秒钟处理大约2.40到2.63个批次。
(1)每个epoch的训练时间约为1分24秒到1分32秒。
(2)每个验证批次的处理时间大约是21秒到27秒。

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

总结:
VGG16模型在15个epoch的训练过程中表现出了稳定的学习曲线,尽管验证准确率没有达到ResNet50的高水平,但模型的训练效果和准确性逐步提高。未来可以考虑通过调整模型结构、优化器或增加正则化(如Dropout)来进一步提升模型性能。

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【IMF靶场渗透】

文章目录 一、基础信息 二、信息收集 三、flag1 四、flag2 五、flag3 六、flag4 七、flag5 八、flag6 一、基础信息 Kali IP:192.168.20.146 靶机IP:192.168.20.147 二、信息收集 Nmap -sP 192.168.20.0/24 Arp-scan -l nmap -sS -sV -p- -…

MySQL 复合查询

实际开发中往往数据来自不同的表,所以需要多表查询。本节我们用一个简单的公司管理系统,有三张表EMP,DEPT,SALGRADE 来演示如何进行多表查询。表结构的代码以及插入的数据如下: DROP database IF EXISTS scott; CREATE database IF NOT EXIST…

理解Java集合的基本用法—Collection:List、Set 和 Queue,Map

本博文部分参考 博客 ,强烈推荐这篇博客,写得超级全面!!! 图片来源 Java 集合框架 主要包括两种类型的容器,一种是集合(Collection),存储一个元素集合(单列…

【看海的算法日记✨优选篇✨】第三回:二分之妙,寻径中道

🎬 个人主页:谁在夜里看海. 📖 个人专栏:《C系列》《Linux系列》《算法系列》 ⛰️ 一念既出,万山无阻 目录 📖一、算法思想 细节问题 📚左右临界 📚中点选择 📚…

[CTF/网络安全] 攻防世界 upload1 解题详析

[CTF/网络安全] 攻防世界 upload1 解题详析 考察文件上传&#xff0c;具体原理及姿势不再赘述。 姿势 在txt中写入一句话木马<?php eval($_POST[qiu]);?> 回显如下&#xff1a; 查看源代码&#xff1a; Array.prototype.contains function (obj) { var i this.…

网络安全运行与维护 加固练习题

1. 提交用户密码的最小长度要求。 输入代码: cat /etc/pam.d/common-password 提交答案: flag{20} 2.提交iptables配置以允许10.0.0.0/24网段访问22端口的命令。 输入代码: iptables -A INPUT -p tcp -s 10.0.0.0/24 --dport 22 -j ACCEPT 提交答案: flag{iptables -A I…

PID模糊控制算法(附MATLAB仿真程序)

一、基本原理 PID模糊控制算法是一种将传统PID控制与模糊逻辑相结合的控制策略。它利用模糊逻辑处理不确定性和非线性问题的能力&#xff0c;以提高控制系统的性能。以下是PID模糊控制算法的基本原理&#xff1a; 1.1. **误差和误差变化率的计算**&#xff1a; - 首先&…

【leetcode100】螺旋矩阵

1、题目描述 给你一个 m 行 n 列的矩阵 matrix &#xff0c;请按照 顺时针螺旋顺序 &#xff0c;返回矩阵中的所有元素。 示例 1&#xff1a; 输入&#xff1a;matrix [[1,2,3],[4,5,6],[7,8,9]] 输出&#xff1a;[1,2,3,6,9,8,7,4,5] 2、初始思路 2.1 思路 定义上下左右…

2024.11.29(单链表)

思维导图 声明文件 #ifndef __LINKLIST_H__ #define __LINKLIST_H__#include <myhead.h>typedef char datatype; //数据元素类型 //定义节点类型 typedef struct Node {union{int len; //头节点数据域datatype data; //普通节点数据域};struct Node *next; //指针域…

第六届金盾信安杯-SSRF

操作内容&#xff1a; 进入环境 可以查询网站信息 查询环境url https://114.55.67.167:52263/flag.php 返回 flag 就在这 https://114.55.67.167:52263/flag.php 把这个转换成短连接&#xff0c;然后再提交 得出 flag

【Linux】进程控制,手搓简洁版shell

⭐️个人主页&#xff1a;小羊 ⭐️所属专栏&#xff1a;Linux 很荣幸您能阅读我的文章&#xff0c;诚请评论指点&#xff0c;欢迎欢迎 ~ 目录 1、进程创建2、进程终止3、进程等待4、进程程序替换5、手写简洁版shell 1、进程创建 fork函数&#xff1a;从已经存在的进程中创…

逆向攻防世界CTF系列42-reverse_re3

逆向攻防世界CTF系列42-reverse_re3 参考&#xff1a;CTF-reverse-reverse_re3&#xff08;全网最详细wp&#xff0c;超4000字有效解析&#xff09;_ctfreverse题目-CSDN博客 64位无壳 _int64 __fastcall main(__int64 a1, char **a2, char **a3) {int v4; // [rsp4h] [rbp-…

安装 RabbitMQ 服务

安装 RabbitMQ 服务 一. RabbitMQ 需要依赖 Erlang/OTP 环境 (1) 先去 RabbitMQ 官网&#xff0c;查看 RabbitMQ 需要的 Erlang 支持&#xff1a;https://www.rabbitmq.com/ 进入官网&#xff0c;在 Docs -> Install and Upgrade -> Erlang Version Requirements (2) …

ECharts柱状图-交错正负轴标签,附视频讲解与代码下载

引言&#xff1a; 在数据可视化的世界里&#xff0c;ECharts凭借其丰富的图表类型和强大的配置能力&#xff0c;成为了众多开发者的首选。今天&#xff0c;我将带大家一起实现一个柱状图图表&#xff0c;通过该图表我们可以直观地展示和分析数据。此外&#xff0c;我还将提供…

Scala关于成绩的常规操作

score.txt中的数据&#xff1a; 姓名&#xff0c;语文&#xff0c;数学&#xff0c;英语 张伟&#xff0c;87&#xff0c;92&#xff0c;88 李娜&#xff0c;90&#xff0c;85&#xff0c;95 王强&#xff0c;78&#xff0c;90&#xff0c;82 赵敏&#xff0c;92&#xff0c;8…

【机器学习】入门机器学习:从理论到代码实践

我的个人主页 我的领域&#xff1a;人工智能篇&#xff0c;希望能帮助到大家&#xff01;&#xff01;&#xff01;点赞❤ 收藏❤ 机器学习&#xff08;Machine Learning&#xff09;是人工智能的一个分支&#xff0c;它通过算法从数据中学习规律&#xff0c;并基于这些规律进行…

Spring Web开发(请求)获取JOSN对象| 获取数据(Header)

大家好&#xff0c;我叫小帅今天我们来继续Spring Boot的内容。 文章目录 1. 获取JSON对象2. 获取URL中参数PathVariable3.上传⽂件RequestPart3. 获取Cookie/Session3.1 获取和设置Cookie3.1.1传统获取Cookie3.1.2简洁获取Cookie 3. 2 获取和存储Session3.2.1获取Session&…

[Deep Learning] 深度学习中常用函数的整理与介绍(pytorch为例)

文章目录 深度学习中常用函数的整理与介绍常见损失函数1. L2_loss | nn.MSELoss()公式表示&#xff1a;特点&#xff1a;应用&#xff1a;缺点&#xff1a;主要参数&#xff1a;示例用法&#xff1a;注意事项&#xff1a; 2. L1 Loss | nn.L1Loss数学定义&#xff1a;特点&…

0017. shell命令--tac

目录 17. shell命令--tac 功能说明 语法格式 选项说明 实践操作 注意事项 17. shell命令--tac 功能说明 Linux 的 tac 命令用于按行反向输出文件内容&#xff0c;与 cat 命令的输出顺序相反。非常有趣&#xff0c;好记。也就是说&#xff0c;当我们使用tac命令查看文件内…

SpringBoot整合Retry详细教程

问题背景 在现代的分布式系统中&#xff0c;服务间的调用往往需要处理各种网络异常、超时等问题。重试机制是一种常见的解决策略&#xff0c;它允许应用程序在网络故障或临时性错误后自动重新尝试失败的操作。Spring Boot 提供了灵活的方式来集成重试机制&#xff0c;这可以通过…