python基于轻量级卷积神经网络模型开发构建眼疾识别系统

news2025/1/10 10:31:49

常见的眼疾包括但不限于以下几种:

  1. 白内障:白内障是眼睛晶状体变得模糊或不透明,导致视力下降。它通常与年龄相关,但也可以由其他因素引起,如遗传、外伤、糖尿病等。

  2. 青光眼:青光眼是一组引起视神经损伤的眼病,常常由眼内压升高引起。如果不及时治疗,青光眼可能导致永久性视力损失。

  3. 视网膜疾病:视网膜是眼睛内的感光层,负责传输视觉信号到大脑。视网膜疾病包括视网膜脱落、黄斑变性等,可以导致中心视力丧失或视野缺损。

  4. 糖尿病视网膜病变:糖尿病患者可能会出现糖尿病视网膜病变,这是由于高血糖引起的视网膜损伤。如果不及时治疗,糖尿病视网膜病变可能导致严重的视力问题。

  5. 干眼症:干眼症是眼睛表面缺乏足够的泪液或泪液质量不良,导致眼睛干燥、疼痛、疲劳和视力模糊。

  6. 斜视:斜视是眼睛的位置或方向异常,导致双眼无法同时对准同一个物体。这可能会导致视觉模糊、眼睛疲劳和深度感知问题。

传统的眼疾大都是基于专业的医生和特殊的医疗设备来进行诊断分析的,而眼球的诊断拍摄图像本身就是可以用于构建识别模型的,这里本文的核心思想就是考虑来基于卷积神经网络模型来构建专用于眼疾诊断识别的辅助模型,首先看下效果图:

这里使用人工构建的数据集来模拟真实的医疗场景,共包含六种常见的眼疾类型,如下所示:

["cataract", "diabetic_retinopathy", "glaucoma", "high", "normal", "pathological"]

接下来依次简单看下各类眼疾的数据,如下所示:

【白内障】

【糖尿病视网膜病变】

【青光眼】

【高度近视】

【正常眼球】

【病理性近视】

对原始数据集特性分布进行可视化如下所示:

在我前面的文章中已经有不少相关的实践了,这里就不再详细的讲述整个处理流程了,为了便于使用,经过后面几个版本的迭代开发,这里我构建了一个轻量级 卷积神经网络模型开发训练框架,整体项目结构如下所示:

项目文件详情如下所示:

文件名称文件说明
data原始数据集目录
results结果目录
createDataset数据集处理模块
dataset.h5数据集
dataset.json数据集文件
guiAPP可视化系统模块
inference离线推理模块
labels.json标签类别清单
trainCNN模型开发模块
main.py总入口模块

之前有些伙伴反映,不同环境下容易出现代码或者是模块不匹配不兼容等问题,这里专门做了处理,最终形成了:

createDataset
trainCNN
inference
guiAPP

四个基础组件,我提供了完整的方法可供使用,只需要编写简单的业务代码即可实现完整的建模流程,main.py即为自己需要编写的文件,如下所示:

import os
import createDataset
import trainCNN


#参数配置
dataDir="data/"
saveDir="results/"


#构建数据集
createDataset.randomSplit(dataDir=dataDir)
createDataset.buildH5Dataset()


#训练模型
if not os.path.exists(saveDir + "model.h5"):
    trainCNN.trainModel(saveDir=saveDir)


#启动系统
import guiAPP

只需要不到10行的代码就可以构建属于自己的图像识别系统了,这里dataDir是自己的数据集目录,saveDir是自己指定的用于存储模型结果文件的目录,不需要自己创建,程序会自动创建,文完整的结果文件如下所示:

不仅会存储得到模型文件、权重等数据,还会对训练过程的loss和准确率进行自动的可视化,如下所示:

【准确率曲线】

【损失值曲线】

当然了,也可以自行绘制混淆矩阵,如下所示:

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

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

相关文章

HTTP 协议的定义,工作原理,Fiddler的原理和使用,请求的内容

文章目录 一. HTTP协议是什么?1.HTTP工作原理2.HTTP协议格式2.1抓包工具的原理2.2抓包工具的使用2.3 HTTP协议的内容请求首行请求头(header)空行正文(body) 一. HTTP协议是什么? HTTP (全称为 “超文本传输协议”) 是一种应用非常广泛的 应用层协议. "超文本"是指…

异步电机直接转矩控制学习

导读:本期文章对异步电机直接转矩控制进行梳理。DTC包括转速外环、磁链观测器、滞环和电压矢量离线开关表。离线电压矢量开关表共分为两种:添加零矢量和未添加零矢量。 如果需要文章种的仿真模型,关注微信公众号:浅谈电机控制&am…

同城配送商城小程序的作用是什么

本地生活服务如餐饮、服装、鲜花、百货等产品都具备同城经营属性,在产品销售方面普遍是以实体店为主做三公里生意,而随着互联网线上深入,很多商家会通过进驻外卖平台获得生意,当然也有越来越多的商家选择自建商城完成品牌的配送平…

机器学习第十四课--神经网络

总结起来,对于深度学习的发展跟以下几点是离不开的: 大量的数据(大数据)计算资源(如GPU)训练方法(如预训练) 很多时候,我们也可以认为真正让深度学习爆发起来的是数据和算力,这并不是没道理的。 由于神经网络是深度学习的基础,学…

AIGC(生成式AI)试用 6 -- 桌面小程序

生成式AI,别人用来写作,我先用来写个桌面小程序。 桌面小程序:计算器 需求 Python开发图形界面,标题:计算器 - * / 基本运算计算范围:-999999999 ~ 999999999** 乘方计算(例,2*…

c==ubuntu+vscode debug redis7源码

新建.vscode文件夹,创建launch.json和tasks.json {"version": "0.2.0","configurations": [{"name": "C/C Launch","type": "cppdbg","request": "launch","prog…

人工智能轨道交通行业周刊-第61期(2023.9.18-9.24)

本期关键词:焊线机器人、智能综合运维管理系统、信号平面图、铁路部门架构、书生浦语大模型 1 整理涉及公众号名单 1.1 行业类 RT轨道交通人民铁道世界轨道交通资讯网铁路信号技术交流北京铁路轨道交通网上榜铁路视点ITS World轨道交通联盟VSTR铁路与城市轨道交通…

确知波束形成matlab仿真

阵列信号处理中的导向矢量 假设一均匀线性阵列,有N个阵元组成,满足:远场、窄带假设。 图1. 均匀线性阵模型 假设信源发射信号,来波方向为 θ \theta θ,第一个阵元接收到的信号为 x ( t ) x(t) x(t),则第…

mybatsi-MyBatis的逆向工程

mybatsi-MyBatis的逆向工程 一、前言二、创建逆向工程的步骤1.添加依赖和插件2.创建MyBatis的核心配置文件3.创建逆向工程的配置文件4.执行MBG插件的generate目标 一、前言 正向工程:先创建Java实体类,由框架负责根据实体类生成数据库表。 Hibernate是支…

Nitrux 3.0 正式发布并全面上市

导读乌里-埃雷拉(Uri Herrera)近日宣布 Nitrux 3.0 正式发布并全面上市,它是基于 Debian、无 systemd、不可变的 GNU/Linux 发行版的最新安装媒体,利用了 KDE 软件。 Nitrux 3.0 由带有 Liquorix 味道的 Linux 6.4.12 内核提供支持…

每日一题~把二叉搜索树转换为累加

原题链接:538. 把二叉搜索树转换为累加树 - 力扣(LeetCode) 题目描述: 思路分析: 通过描绘二叉搜索树转换累加树的过程,我们发现转换的过程是从右往左依次相加的,新节点的值 右边节点的值的和 …

HTML怎么使用角度代码调节一个角的角度

文章目录 概要整体架构流程 概要 我们在用代码做图形的时候,用的矩形和圆形比较多,如果遇到只改变其中一个角的角度,这时又该怎么做呢 整体架构流程 如图,这是建立的一个正圆的代码,其调节角度的属性代码是border-ra…

Leetcode | 560. 和为 K 的子数组

560. 和为 K 的子数组 文章目录 [560. 和为 K 的子数组](https://leetcode.cn/problems/subarray-sum-equals-k/)题目解法1:暴力枚举解法2:前缀和解法3:[官方题解](https://leetcode.cn/problems/subarray-sum-equals-k/solutions/238572/he-…

成都直播基地火热招商中,天府蜂巢成都直播基地招商政策汇总

随着直播产业的发展,四川天府新区也在逐步形成成熟的直播产业链。近日,记者采访到成都天府蜂巢直播产业基地即将竣工,正式进入运营阶段,作为成都科学城兴隆湖高新技术服务产业园的主打新一代成都直播基地,正积极招商中!引领大规模的平台聚合发…

关于POM声明为provided的依赖,运行程序时报错NoClassDefFoundError

问题叙述 我在编写flink程序时,将flink相关依赖声明为provided(目的是项目打包时不会将flink依赖打入包最终jar包中,减少内存占用) 但是如果在IDEA本地中执行程序会报错java.lang.NoClassDefFoundError,如下所示 解…

静态资源的动态引入

有常用的2种方式: 1、css中的静态路径 2、img中的src静态路径 运行的环境是打包后的图片路径,而打包后的图片通常会生成一个文件指纹,而我们在写代码时,写的是源码中的路径和文件名,如果是静态路径,则会自动…

leetcodetop100(18) 螺旋矩阵

给你一个 m 行 n 列的矩阵 matrix ,请按照 顺时针螺旋顺序 ,返回矩阵中的所有元素。 示例 1: 输入:matrix [[1,2,3],[4,5,6],[7,8,9]] 输出:[1,2,3,6,9,8,7,4,5]示例 2: 输入:matrix [[1,2,3…

SpringBoot启用禁用员工/员工分页查询/编辑员工 --苍穹外卖day3

启用禁用员工 Controller 路径参数前面加上Path~注解来获取参数 PostMapping("/status/{status}") ApiOperation("启用禁用员工") public Result StartOrStop(PathVariable("status") Integer status, Long id){log.info("启用禁用")…

你需要知道DDD基本知识

0 概述 2004 年埃里克埃文斯(Eric Evans)发表了《领域驱动设计》(Domain-Driven Design –Tackling Complexity in the Heart of Software)这本书,从此领域驱动设计(Domain Driven Design,简称…

马尔可夫链预测 (Markov Chain)

一、人寿保险案例(两状态) 人寿保险公司把人的健康状态分为健康和疾病两种,以一年为一个时段,研究健康状态的转变。假设对某一年龄段的人来说,今年健康,明年继续保持健康的概率为0.8,即明年转为疾病的概率…