基于深度学习的眼部疾病检测识别系统

news2024/9/20 18:35:09

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

1. 项目简介

      眼部疾病的早期诊断对于防止视力下降乃至失明至关重要。然而,专业的医疗资源分布不均,尤其是在偏远地区,人们很难获得专业的眼科医生提供的及时诊断服务。本系统利用 TensorFlow、Keras 等深度学习框架构建卷积神经网络(CNN),利用眼部疾病影像数据进行模型训练与验证,预测AUC达到 94.9%,使用Flask框架结合Bootstrap前端技术搭建了一个交互式的分析预测平台,该系统可以大大提高疾病诊断的准确性和效率,为临床决策提供支持,同时也能缓解医疗资源紧张的问题。

        B站系统演示视频:基于深度学习的眼部疾病检测识别系统_哔哩哔哩_bilibili

2. 眼部疾病数据集读取与预处理

        使用 Tensorflow 框架的 tf.keras.preprocessing.image_dataset_from_directory 函数从数据集文件夹中加载眼部图片数据,同时进行训练集和验证集的切分:

train_ds = tf.keras.preprocessing.image_dataset_from_directory(
    "./dataset/",  #数据集目录
    label_mode="categorical",  #标签模式,根据目录生成
    validation_split=0.2,  # 验证集比例为20%
    subset="training",   #这是个训练集
    seed=42 ,     #随机种子,保证划分一致  
    image_size=(img_size, img_size),  #图像大小
    batch_size=batch_size
)

val_ds = tf.keras.preprocessing.image_dataset_from_directory(
    "./dataset/",
    label_mode="categorical",
    validation_split=0.2,
    subset="validation",
    seed=42 ,     #随机种子,保证划分一致 
    image_size=(img_size, img_size),
    batch_size=batch_size)

        对加载的数据集进行样本的可视化:

        共包含四种类别: 白内障(Cataract)、糖尿病视网膜病变(Diabetic Retinopathy)、青光眼(Glaucoma)、正常(Normal),各类别样本数量分布如下:

3. 卷积神经网络模型构建

        卷积神经网络(Convolutional Neural Networks, CNN)是一种专门用于处理具有类似网格结构的数据的深度学习模型,例如图像。CNN在计算机视觉领域取得了巨大的成功,尤其是在图像识别、目标检测和图像生成等方面。

        关键特点:

  • 局部感受野:CNN通过卷积层捕捉输入数据的局部特征,每个神经元只与输入数据的一个局部区域相连接;
  • 权重共享:在卷积层中,同一个卷积核的权重在整个输入数据上共享,这减少了模型参数的数量,提高了训练效率;
  • 池化层:CNN通常在卷积层之后使用池化层来降低特征维度,减少计算量,同时保持特征的不变性;
  • 层次结构:CNN通过多个卷积和池化层的堆叠,逐渐提取从低级到高级的特征。

        Tensorflow是一个开源的机器学习框架,而Keras是一个高级API,它可以运行在Tensorflow之上,使得构建和训练神经网络变得更加简单。

model = models.Sequential([
    layers.experimental.preprocessing.Rescaling(1./255, input_shape=(img_size, img_size, 3)),
    layers.Conv2D(32, (3, 3), activation='relu', input_shape=(img_size, img_size, 3)), # 卷积层1,卷积核3*3  
    layers.MaxPooling2D((2, 2)),               # 池化层1,2*2采样
    
    
    # ......
    
    layers.Dropout(0.2),  
    
    layers.Flatten(),                       # Flatten层,连接卷积层与全连接层
    layers.Dense(128, activation='relu'),   # 全连接层,特征进一步提取
    layers.Dense(len(class_names))               # 输出层,输出预期结果
])

model.summary()  # 打印网络结构

        完成卷积神经网络模型构建后,进行模型的编译:

initial_learning_rate = 1e-3

lr_schedule = tf.keras.optimizers.schedules.ExponentialDecay(
        initial_learning_rate, #设置初始学习率
        decay_steps=64,      #每隔多少个step衰减一次
        decay_rate=0.94,     #衰减系数
        staircase=True
)

# 将指数衰减学习率送入优化器
optimizer = tf.keras.optimizers.Adam(learning_rate=lr_schedule)
 
model.compile(optimizer=optimizer,
              loss=tf.keras.losses.CategoricalCrossentropy(from_logits=True),
              metrics=['accuracy'])

4. 模型训练与验证

        结合 EarlyStopping 与 ModelCheckpoint,在模型训练过程中保存性能最好的模型权重,同时根据验证集的预测准确率进行模型训练的早停。

from tensorflow.keras.callbacks import ModelCheckpoint, EarlyStopping
 
epochs = 100
 
# 保存最佳模型参数
checkpointer = ModelCheckpoint('best_model.h5',
                                monitor='val_accuracy',
                                verbose=1,
                                save_best_only=True)
 
# 设置早停
earlystopper = EarlyStopping(monitor='val_accuracy', 
                             min_delta=0.001,
                             patience=10, 
                             verbose=1)

history = model.fit(train_ds,
                    validation_data=val_ds,
                    epochs=epochs,
                    callbacks=[checkpointer, earlystopper]
)
Epoch 1/100
106/106 [==============================] - ETA: 0s - loss: 0.9847 - accuracy: 0.5560
Epoch 1: val_accuracy improved from -inf to 0.68565, saving model to best_model.h5

......
Epoch 9/100
106/106 [==============================] - ETA: 0s - loss: 0.3543 - accuracy: 0.8586
Epoch 9: val_accuracy improved from 0.85409 to 0.87663, saving model to best_model.h5
106/106 [==============================] - 9s 88ms/step - loss: 0.3543 - accuracy: 0.8586 - val_loss: 0.3334 - val_accuracy: 0.8766
Epoch 10/100
106/106 [==============================] - ETA: 0s - loss: 0.3179 - accuracy: 0.8743
Epoch 10: val_accuracy improved from 0.87663 to 0.88375, saving model to best_model.h5
106/106 [==============================] - 10s 90ms/step - loss: 0.3179 - accuracy: 0.8743 - val_loss: 0.3191 - val_accuracy: 0.8837

......
Epoch 20: early stopping

         模型完成训练后,保存验证集中预测准确率最高的模型权重,进行模型的性能评估:

# 获取疾病标签名称列表
# 创建一个范围,表示 x 轴上每个标签的位置
x = np.arange(len(class_names))
# 设置柱状图的宽度
width = 0.80
fig, ax = plt.subplots(figsize=(8, 6), dpi=80)
rects = ax.bar(x, cate_auc, width, color='#EEC900')
ax.set_ylabel('AUC Score')
ax.set_xlabel('标签')
ax.set_title('不同类型眼病模型预测 AUC Score 分布')
ax.set_xticks(x, class_names)
ax.bar_label(rects, padding=3)
fig.tight_layout()
plt.show()

        可以看出, 白内障(Cataract)预测 AUC=97.21%、糖尿病视网膜病变(Diabetic Retinopathy)的预测 AUC=99.99%、青光眼(Glaucoma)的预测 AUC=86.82%、正常(Normal)的预测 AUC=95.67%

5. 眼部疾病检测识别系统

        利用 Flask + Bootstrap 框架搭建响应式布局的交互分析 web 系统,利用 keras load_model 加载训练好的性能最佳的模型,提供标准化 rest api,提供眼部疾病的在线识别功能。

5.1 系统首页

5.2 卷积神经网络介绍

5.3 眼部疾病在线检测

        (1)糖尿病视网膜病变(Diabetic Retinopathy)的预测样例

        (2)青光眼(Glaucoma)的预测样例 

        (3)白内障(Cataract)的预测样例 

        (4)眼部正常(Normal)的预测样例 

6. 结论 

        本系统利用 TensorFlow、Keras 等深度学习框架构建卷积神经网络(CNN),利用眼部疾病影像数据进行模型训练与验证,预测AUC达到 94.9%,使用Flask框架结合Bootstrap前端技术搭建了一个交互式的分析预测平台,该系统可以大大提高疾病诊断的准确性和效率,为临床决策提供支持,同时也能缓解医疗资源紧张的问题。

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

精彩专栏推荐订阅:

1. Python-数据挖掘实战案例

2. Python-深度学习实战案例

3. Python-管理系统实战案例

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

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

相关文章

【devops】devops-gitlab之部署与日常使用

本站以分享各种运维经验和运维所需要的技能为主 《python零基础入门》:python零基础入门学习 《python运维脚本》: python运维脚本实践 《shell》:shell学习 《terraform》持续更新中:terraform_Aws学习零基础入门到最佳实战 《k8…

XTuner 微调个人小助手认知任务

基础任务 使用 XTuner 微调 InternLM2-Chat-1.8B 实现自己的小助手认知,如下图所示(图中的伍鲜同志需替换成自己的昵称),记录复现过程并截图。 创建虚拟环境 在安装 XTuner 之前,我们需要先创建一个虚拟环境。使用 A…

八戒农场小程序V2最新源码

一.介绍 八戒农场V2小程序源码,前端工具上传,包更新、这个是源码,覆盖即可升级版(修复很多问题);

在Python中快速获取HTML中<span>标签的内容

在Python中&#xff0c;要获取HTML中<span>标签的内容&#xff0c;通常我们会使用像BeautifulSoup这样的库&#xff0c;它提供了方便的方法来解析HTML和XML文件&#xff0c;并从中提取数据。下面是一个使用BeautifulSoup来获取<span>标签内容的简单示例。 首先&am…

分布式光伏发电站数据采集设备管理硬件解决方案

随着全球能源结构的转型和可再生能源的快速发展&#xff0c;光伏发电作为重要的清洁能源之一&#xff0c;在能源市场中占据了越来越重要的位置。AcrelCoud-1200分布式光伏运维云平台通过监测光伏站点的逆变器设备&#xff0c;气象设备以及摄像头设备&#xff0c;帮助用户管理分…

解决mac下 Android Studio gradle 下载很慢,如何手动配置

抓住人生中的一分一秒&#xff0c;胜过虚度中的一月一年! 小做个动图开篇引题 前言 平时我们clone git 上项目&#xff0c;项目对应gradle版本本地没有&#xff0c;ide编译会自动下载&#xff0c;但是超级慢可能还下载失败&#xff0c;下面讲解下此问题如 如下图所示&#xff…

Java笔试面试题AI答之单元测试JUnit(6)

文章目录 31. 如果将JUnit测试方法声明为“私有”会发生什么&#xff1f;1. 测试方法不会被JUnit执行2. 违反JUnit的设计原则3. 潜在的测试覆盖率问题4. 解决方案 32. 如果声明JUnit测试方法返回“String”会发生什么&#xff1f;编译错误运行时行为正确的做法结论 33. 可以使用…

排序篇(七大基于比较的排序算法)

目录 插入排序 直接插入排序 希尔排序(缩小增量排序) 选择排序 选择排序 堆排序 交换排序 冒泡排序 快速排序 1.挖坑法 2.Hoare版 3.前后指针 快速排序优化 三数取中法 选基准数 2.递归到小的子区间时 可以考虑使用插入排序 非递归快速排序 归并排序 归并排序…

「C++系列」异常处理

【人工智能教程】&#xff0c;前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。 点击跳转到网站&#xff1a;【人工智能教程】 文章目录 一、异常处理1. 基本概念2. 示例代码3. 注意事项 二、常见的异常类…

如何使用宝塔面板安装中间件

如何快速安装中间件&#xff0c;宝塔镇河妖非常简单。 使用 SSH 连接工具&#xff0c;如堡塔SSH终端连接到您的 Linux 服务器后&#xff0c;挂载磁盘&#xff0c;根据系统执行相应命令开始安装&#xff08;大约2分钟完成面板安装&#xff09;&#xff1a; Centos安装脚本 yum…

分布式光伏发电系统如何确保电能质量达到并网要求?

随着全球对可再生能源的日益重视&#xff0c;光伏发电已成为推动能源转型的重要力量。特别是在应对气候变化、提升能源安全方面&#xff0c;光伏发电的潜力被广泛认同。然而&#xff0c;光伏电站的运营与维护面临许多挑战&#xff0c;如发电效率监测、故障诊断和数据管理等。因…

react hooks--useContext

概述 ◼ 在之前的开发中&#xff0c;我们要在组件中使用共享的Context有两种方式&#xff1a;  类组件可以通过 类名.contextType MyContext方式&#xff0c;在类中获取context&#xff1b; 多个Context或者在函数式组件中通过 MyContext.Consumer 方式共享context&…

基于云计算和大数据技术的传感器数据存储与分析系统

传感器被广泛用于监测环境参数&#xff0c;如温度、压力、湿度和特定气体的浓度。这些数据通常被收集并保存在数据存储系统中&#xff0c;随后进行分析以识别异常模式。在数据量巨大的情况下&#xff0c;传统的关系型数据库可能在性能上遇到瓶颈&#xff0c;使得处理和分析来自…

知道什么是热key吗?如何排查和处理?

目录标题 一、什么是热Key&#xff1f;二、热点key危害&#xff1f;三、如何发现热点 key&#xff1f;四、热点key应对措施 一、什么是热Key&#xff1f; 热 key 问题就是突然有几十万的请求去访问 redis 上的某个特定 key&#xff0c;那么这样会造成流量过于集中&#xff0c;…

Docker安装 ▎Docker详细讲解 ▎数据卷挂载 ▎Nginx安装理解

前言 Docker是一种容器化技术&#xff0c;简化软件的部署和管理。文章详细解释了Docker的架构、安装步骤和常用命令&#xff0c;帮助用户快速启动和管理容器。还介绍了Docker镜像命令和数据卷挂载的实例&#xff0c;增强对持久化存储的理解&#xff0c;并涵盖了Nginx的安装方法…

npm切换为淘宝镜像源

要切换 npm 的镜像源&#xff0c;您可以使用以下几种方法&#xff1a; 前言 然而&#xff0c;由于众所周知的网络环境问题&#xff0c;直接使用npm官方源下载依赖包时&#xff0c;常常会遇到速度慢甚至下载失败的情况。因此&#xff0c;使用更稳定、更快速的国内镜像源就显得尤…

C++ (进阶) ─── 多态

目录 1. 多态的概念 1.1 概念 2. 多态的定义及实现 2.1多态的构成条件 2.2 虚函数 2.3虚函数的重写 2.4 C11 override 和 final 2.5 重载、覆盖(重写)、隐藏(重定义)的对比 3. 抽象类 3.1 概念 3.2 接口继承和实现继承 试题&#xff1a; 1. 多态的概念 1.1 概念 …

计算机人工智能前沿进展-大语言模型方向-2024-09-18

计算机人工智能前沿进展-大语言模型方向-2024-09-18 1. The Application of Large Language Models in Primary Healthcare Services and the Challenges W YAN, J HU, H ZENG, M LIU, W LIANG - Chinese General Practice, 2024 人工智能大语言模型在基层医疗卫生服务中的应…

【算法】堆与优先级队列

【ps】本篇有 4 道 leetcode OJ。 目录 一、算法简介 二、相关例题 1&#xff09;最后一块石头的重量 .1- 题目解析 .2- 代码编写 2&#xff09;数据流中的第 K 大元素 .1- 题目解析 .2- 代码编写 3&#xff09;前K个高频单词 .1- 题目解析 .2- 代码编写 4&#xf…

什么是泛在智能?应用在哪些场景?

泛在智能是一个融合了多种技术概念和应用场景的综合性概念&#xff0c;其核心在于通过广泛嵌入的感知和计算设备&#xff0c;以及智能的人机交互界面&#xff0c;实现对环境、人和物的全面感知与智能响应。 定义与背景 泛在智能&#xff08;Ambient Intelligence&#xff09;是…