基于深度学习的脑部肿瘤检测系统

温馨提示:文末有 CSDN 平台官方提供的学长 QQ 名片 :) 

1. 项目简介

        当大脑中形成异常细胞时,就会发生脑肿瘤。肿瘤主要有两种类型:癌性(恶性)肿瘤和良性肿瘤。恶性肿瘤可分为原发性肿瘤和继发性肿瘤,前者始于大脑,后者从其他地方扩散,称为脑转移瘤。所有类型的脑肿瘤都可能产生不同的症状,这取决于所涉及的大脑部分。这些症状可能包括头痛、癫痫发作、视力问题、呕吐和精神变化。头痛通常在早上更严重,并伴随呕吐而消失。其他症状可能包括走路、说话或感觉困难。随着疾病的发展,可能会出现无意识状态。

        本项目利用 TensorFlow、Keras 等深度学习工具包构建 VGG16、RestNet、InceptionV3 等神经网络,实现对脑部肿瘤 MRI 扫描影像的识别。首先在 Jupyter Notebook 平台实现模型的训练、验证和存储,利用 Flask + Bootrap + Ajax 搭建交互式分析框架,实现脑部 MRI 扫描影像上传和在线预测,模型给出是否包含脑部肿瘤及肿瘤类型,整体准确率达到93.9%

2. 脑部肿瘤MRI扫描数据读取

        利用 ImageDataGenerator 从文件夹中加载脑部肿瘤MRI扫描图像数据,并利用图像的旋转、放大、剪切、对调等方式,实现对图像数据集的扩充。

data_dir = 'dataset'
class_map = {'无肿瘤': 0, '胶质瘤': 1, '垂体瘤': 2, '脑膜瘤': 3}
class_name_dict = {0: '无肿瘤', 1: '胶质瘤', 2: '垂体瘤', 3: '脑膜瘤'}def image_generator(height,width):datagen = ImageDataGenerator(rescale=1./255.,validation_split=0.2,rotation_range=10,width_shift_range=0.05,height_shift_range=0.05,# shear_range=0.05,brightness_range=[0.5, 1.5],)train_ds = datagen.flow_from_directory(data_dir,batch_size=batch_size,subset="training",#color_mode = 'grayscale',shuffle=True,class_mode='categorical',target_size=(height, width),classes=class_map)val_ds = datagen.flow_from_directory(data_dir,subset="validation",#seed=123,#color_mode = 'grayscale',class_mode='categorical',target_size=(height, width),batch_size=batch_size,classes=class_map)return train_ds, val_dstrain_ds, val_ds = image_generator(height,width)

        数据集样例数据可视化:

3. 基于迁移学习的脑部肿瘤检测

3.1  VGG16 Base Model

        VGG(Visual Geometry Group)是一个视觉几何组在2014年提出的深度卷积神经网络架构。VGG在2014年ImageNet图像分类竞赛亚军,定位竞赛冠军;VGG网络采用连续的小卷积核(3x3)和池化层构建深度神经网络,网络深度可以达到16层或19层,其中VGG16和VGG19最为著名。

        VGG16和VGG19网络架构非常相似,都由多个卷积层和池化层交替堆叠而成,最后使用全连接层进行分类。两者的区别在于网络的深度和参数量,VGG19相对于VGG16增加了3个卷积层和一个全连接层,参数量也更多。

        VGG网络被广泛应用于图像分类、目标检测、语义分割等计算机视觉任务中,并且其网络结构的简单性和易实现性使得VGG成为了深度学习领域的经典模型之一。

        利用 TensorFlow、Keras 深度学习工具包,构建基于 VGG16 基础 Base 模型的卷积神经网络:

input_shape = (height, width, 3)
base_model = tf.keras.applications.vgg16.VGG16(weights='./pretrained_models/vgg16_weights_tf_dim_ordering_tf_kernels_notop.h5', include_top=False,input_shape=input_shape
)
base_model.trainable = Falsemodel_vgg16 = tf.keras.Sequential()
model_vgg16.add(base_model)
model_vgg16.add(tf.keras.layers.Flatten())model_vgg16.add(tf.keras.layers.Dense(4, activation='softmax'))model_vgg16.compile(loss='categorical_crossentropy', optimizer=tf.keras.optimizers.Adam(0.001),metrics=['acc'])
model_vgg16.summary()

        模型训练:

Epoch 1/25
88/88 [==============================] - ETA: 0s - loss: 0.6459 - acc: 0.7654
Epoch 1: acc improved from -inf to 0.76544, saving model to save_models\vgg16_best.h5
88/88 [==============================] - 789s 9s/step - loss: 0.6459 - acc: 0.7654 - val_loss: 0.4368 - val_acc: 0.8355......Epoch 25: acc improved from 0.98754 to 0.98950, saving model to save_models\vgg16_best.h5
88/88 [==============================] - 1244s 14s/step - loss: 0.0384 - acc: 0.9895 - val_loss: 0.1704 - val_acc: 0.9338

        训练 Loss 和 Acc 结果可视化:

        模型评估:

train_result = model_vgg16.evaluate(train_ds)
val_result = model_vgg16.evaluate(val_ds)vgg16_eval_result = pd.DataFrame(zip(train_result,val_result),columns=['Train','Val'],index=['Loss','Acc'])ypred_val = model_vgg16.predict(val_ds[0][0])
ypred_val = np.argmax(ypred_val, axis=1)true_val = np.argmax(val_ds[0][-1], axis=1)print("混淆矩阵:")
print(confusion_matrix(true_val, ypred_val))
print("详细评估指标:")
print('\n',classification_report(ypred_val, true_val))
TrainVal
Loss0.0619260.161204
Acc0.9754400.939459

3.2 InceptionV3 Base Model

        深度神经网络(Deep Neural Networks, DNN)或深度卷积网络中的Inception模块是由Google的Christian Szegedy等人提出,包括Inception-v1、Inception-v2、Inception-v3、Inception-v4及Inception-ResNet系列。

参考文章:经典神经网络 | 从Inception v1到Inception v4全解析

        以 InceptionV3 为 Base model 构建脑部肿瘤识别模型

        模型训练:

checkpoint = tf.keras.callbacks.ModelCheckpoint('save_models/inceptionv3_best.h5', monitor='acc', verbose=1, mode='max',save_best_only=True)
early = tf.keras.callbacks.EarlyStopping(monitor="acc", mode="max",restore_best_weights=True, patience=5)
callbacks_list = [checkpoint,early]history = model_inceptionv3.fit(train_ds,validation_data=val_ds,epochs=25, shuffle=True, verbose=True,callbacks=callbacks_list)

        可以看出,InceptionV3模型训练的验证集 Loss 与准确率变化曲线抖动较大,性能不是很稳定。

        模型评估:

TrainVal
Loss0.6382191.358395
Acc0.9248980.888889

3.3 模型性能对比

labels = ['LOSS', 'ACC']
vgg16_evals = [vgg16_eval_result['Loss'], vgg16_eval_result['Acc']]
inceptionv3_evals = [inceptionv3_eval_result['Loss'], inceptionv3_eval_result['Acc']]x = np.arange(len(labels))  # the label locations
width = 0.35  # the width of the barsfig, ax = plt.subplots(figsize=(8, 6), dpi=100)
rects1 = ax.bar(x - width/2, vgg16_evals, width, label='VGG16')
rects2 = ax.bar(x + width/2, inceptionv3_evals, width, label='Inception-V3')# Add some text for labels, title and custom x-axis tick labels, etc.
ax.set_ylabel('Loss/Acc')
ax.set_title('VGG16 与 Inception-V3 的脑部肿瘤检测性能对比')
ax.set_xticks(x, labels)
ax.legend()ax.bar_label(rects1, padding=3)
ax.bar_label(rects2, padding=3)fig.tight_layout()plt.show()

        可以看出,在脑部肿瘤检测任务上,VGG16 的性能相比 Inception-V3 的预测准确率较高,性能较好,但预测推理时间较长,时效性不如 Inception-V3。

4. 基于深度学习的脑部肿瘤检测系统

4.1 首页简介与注册登录

4.2 脑部肿瘤在线检测

        通过上传待测试脑部MRI扫描影像,选择预测模型 VGG16 或 Inception-V3 不同模型,点击提交预测,后台模型加载图像,进行预测,给出是否包含脑部肿瘤及肿瘤类型:

5. 总结

        本项目利用 TensorFlow、Keras 等深度学习工具包构建 VGG16、RestNet、InceptionV3 等神经网络,实现对脑部肿瘤 MRI 扫描影像的识别。首先在 Jupyter Notebook 平台实现模型的训练、验证和存储,利用 Flask + Bootrap + Ajax 搭建交互式分析框架,实现脑部 MRI 扫描影像上传和在线预测,模型给出是否包含脑部肿瘤及肿瘤类型,整体准确率达到93.9%。

 欢迎大家点赞、收藏、关注、评论啦 ,由于篇幅有限,只展示了部分核心代码。技术交流、源码获取认准下方 CSDN 官方提供的学长 QQ 名片 :)

精彩专栏推荐订阅:

1. Python数据挖掘精品实战案例

2. 计算机视觉 CV 精品实战案例

3. 自然语言处理 NLP 精品实战案例

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

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

相关文章

全国产化无风扇嵌入式车载电脑农耕车辆/钢厂天车行业应用

农耕车辆行业应用 背景介绍 当前农耕车车载电脑主要的功能,是要实现农耕车的精确的定位和导航,更加先进的系统则要实现农耕车自动驾驶,与农耕车上相关传感器的通讯(例如耕土深度的传感器, 油量存量传感器…)来实现更多的自动化、信息化的功能…

NASA数据集——TANSO-FTS 运行前 11 年收集的测量数据中得出二氧化碳(CO2)干空气摩尔分数(XCO2)的估计值

ACOS GOSAT/TANSO-FTS Level 2 bias-corrected XCO2 and other select fields from the full-physics retrieval aggregated as daily files V7.3 (ACOS_L2_Lite_FP) at GES DISC 简介 ACOS Lite 文件包含经过偏差校正的 XCO2 以及其他选定字段的每日汇总文件。ACOS 2 级标准…

【Node.js】02 —— Path模块全解析

🌟Node.js之Path模块探索🌈 📚引言 在Node.js的世界中,path模块就像一把万能钥匙🔑,它帮助我们理解和操作文件与目录的路径。无论你是初入Node.js殿堂的新手,还是久经沙场的老兵,理…

深度Q-Learning在算法交易中的应用

一、说明 在《华尔街的随机漫步》一书中,作者伯顿马尔基尔(Burton G. Malkiel)声称:“一只蒙着眼睛的猴子向报纸的财经版面投掷飞镖,可以选择一个与专家精心挑选的投资组合一样好的投资组合。 如果我们让巴甫洛夫的狗接…

[卷积神经网络]YoloV8

一、YoloV8 1.网络详解 ①backbone部分:第一次卷积的卷积核缩小(由3变为6);CSP模块的预处理卷积从3次变为2次;借鉴了YoloV7的多分支堆叠结构(Multi_Concat_Block)。 所小第一次卷积的卷积核尺寸会损失部分感受野&#…

2024年 10 款最佳免费数据恢复软件您值得收藏

免费的数据恢复软件或工具是最重要的工具之一,在我们的生活中发挥着非常重要和关键的作用,尽管现在您可以找到数十种,但事实是它们非常重要。 由于设备故障、勒索软件攻击或意外擦除数据而从设备中丢失数据可能会成为一个真正的头痛问题。 …

专题【二分查找】刷题日记

题目列表 4. 寻找两个正序数组的中位数 33. 搜索旋转排序数组 34. 在排序数组中查找元素的第一个和最后一个位置 35. 搜索插入位置 69. x 的平方根 167. 两数之和 II - 输入有序数组 209. 长度最小的子数组 222. 完全二叉树的节点个数 287. 寻找重复数 2023.04.14 4. 寻找两…

自然语言处理基础面试

文章目录 TF-IDFbag-of-wordsBert 讲道理肯定还得有Transformer,我这边先放着,以后再加吧。 TF-IDF TF(全称TermFrequency),中文含义词频,简单理解就是关键词出现在网页当中的频次。 IDF(全称…

spring boot: 使用MyBatis从hive中读取数据

一、hive表&#xff1a; 启动hiveserver2 二、添加mybatis starter和hive依赖 <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instan…

力扣HOT100 - 24. 两两交换链表中的节点

解题思路&#xff1a; 递归 class Solution {public ListNode swapPairs(ListNode head) {if (head null || head.next null) {return head;}ListNode newHead head.next;head.next swapPairs(newHead.next);newHead.next head;return newHead;} }

案例实践 | InterMat:基于长安链的材料数据发现与共享系统

案例名称&#xff1a;InterMat-基于区块链的材料数据发现与共享系统 ■ 建设单位 北京钢研新材科技有限公司 ■ 用户群体 材料数据上下游单位 ■ 应用成效 已建设10共识节点、50轻节点&#xff0c;1万注册用户 案例背景 材料是构成各种装备和工程的物质载体&#xff0c…

驱动开发-windows驱动设计目标

驱动程序和应用程序不一样的&#xff0c;由于其直接运行于windows r0级&#xff0c;故对于开发有更多和更严格的标准&#xff0c;一般会有以下一些常见的设计目标: 安全性、可移植性、可配置性、 可被中断、多处理器安全、可重用 IRP、 支持异步 I/O这些是基本目标。 1. 安全…

高频前端面试题汇总之Vue篇

1. Vue的基本原理 当一个Vue实例创建时&#xff0c;Vue会遍历data中的属性&#xff0c;用 Object.defineProperty&#xff08;vue3.0使用proxy &#xff09;将它们转为 getter/setter&#xff0c;并且在内部追踪相关依赖&#xff0c;在属性被访问和修改时通知变化。 每个组件实…

Flutter 之 HTTP3/QUIC 和 Cronet 你了解过吗?

虽然 HTTP3/QUIC 和 cronet 跟 Flutter 没太大关系&#xff0c;只是最近在整理 Flutter 相关资料时发现还挺多人不了解&#xff0c;就放到一起聊聊。 本篇也是主要将现有资料做一些简化整合理解。 前言 其实为什么会有 HTTP3/QUIC &#xff1f;核心原因还是现有协议已经无法满…

机器学习周记(第三十五周:语义分割)2024.4.15~2024.4.21

目录 摘要 ABSTRACT 1 语义分割基本概念 1.1 数据集格式 ​编辑 1.2 语义分割评价指标 1.3 语义分割标注工具 2 转置卷积 3 FCN网络结构基本原理 摘要 本周主要学习了语义分割的基本概念及其在计算机视觉领域中的应用。了解了语义分割的几种经典网络&#xff0c;如全卷…

linux系统密码重置的方法

在linux系统中忘记密码&#xff0c;重置&#xff08;重启&#xff1a;shutdown -r now&#xff09; 1、在启动 Linux 时&#xff0c;按键盘上的上下左右键来止 Linux 的正常启动。 2、按下e鍵进入安全模式 3、找到首行是linux16&#xff0c;末尾是UTF-8的段落&#xff0c;在后门…

Python中的设计模式与最佳实践

&#x1f47d;发现宝藏 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。【点击进入巨牛的人工智能学习网站】。 Python中的设计模式与最佳实践 在软件开发中&#xff0c;设计模式是一种解决常见问题的经过…

【Django】调用django的pbkdf2_sha256加密算法测试

基于django搭建的系统中&#xff0c;用到pbkdf2_sha256&#xff08;&#xff08;Password-Based Key Derivation Function 2&#xff09;&#xff09;加密算法&#xff0c;这里做些代码测试、总结。 PBKDF2简介 PBKDF2是一种基于密码的密钥派生函数&#xff0c;用于从用户提供的…

2024-4-狼道

2024-4-狼道 2024-4-9 宋犀堃&#xff08;堃通坤&#xff0c;多用于人名&#xff09; fatux&#xff1a; 做人当如狗&#xff0c;和蔼可亲&#xff1b;做事当如狼&#xff0c;专注果决。 狼道 智慧生存的强者法则 走向卓越的成功之道 狼道&#xff0c;是追求卓越的野心&am…

C++_特殊类的设计和单例模式

文章目录 学习目标&#xff1a;1.请设计一个类&#xff0c;不能被拷贝2. 请设计一个类&#xff0c;只能在堆上创建对象3. 请设计一个类&#xff0c;只能在栈上创建对象4. 请设计一个类&#xff0c;不能被继承5. 请设计一个类&#xff0c;只能创建一个对象(单例模式) 特殊类的设…