基于卷积神经网络的眼疾识别系统,resnet50,efficentnet(pytorch框架,python代码)
更多图像分类、图像识别、目标检测、图像分割等项目可从主页查看
功能演示:
眼疾识别系统resnet50,efficentnet,卷积神经网络(pytorch框架,python代码)_哔哩哔哩_bilibili
(一)简介
基于卷积神经网络的眼疾识别系统是在pytorch框架下实现的,项目中有2个模型,resnet50,efficentnet,两个模型都在项目中,随便用一个模型即可,也可以两个都用,做模型对比,增加工作量。
该系统涉及的技术:python + pyqt5 + opencv
该项目是可在pycharm和anaconda搭建的虚拟环境 或者 vscode和anaconda搭建的虚拟环境中执行,
pycharm和anaconda安装和配置可观看教程:
超详细的pycharm+anaconda搭建python虚拟环境_pycharm配置anaconda虚拟环境-CSDN博客
pycharm+anaconda搭建python虚拟环境_哔哩哔哩_bilibili
vscode和anaconda安装和配置可观看教程:
超详细的vscode+anaconda搭建python虚拟环境_vscode anaconda-CSDN博客
(二)项目介绍
1. 项目结构

2. 数据集

部分数据展示:

3.GUI界面初始界面

4.GUI识别界面

5. Web端初始界面

6.Web端识别界面

7. 核心代码
class MainProcess:def __init__(self, train_path, test_path, model_name):self.train_path = train_pathself.test_path = test_pathself.model_name = model_nameself.device = torch.device("cuda:0" if torch.cuda.is_available() else "cpu")def main(self, epochs):# 记录训练过程log_file_name = './results/vgg16训练和验证过程.txt'# 记录正常的 print 信息sys.stdout = Logger(log_file_name)print("using {} device.".format(self.device))# 开始训练,记录开始时间begin_time = time()# 加载数据train_loader, validate_loader, class_names, train_num, val_num = self.data_load()print("class_names: ", class_names)train_steps = len(train_loader)val_steps = len(validate_loader)# 加载模型model = self.model_load() # 创建模型# 网络结构可视化x = torch.randn(16, 3, 224, 224) # 随机生成一个输入model_visual_path = 'results/vgg16_visual.onnx' # 模型结构保存路径torch.onnx.export(model, x, model_visual_path) # 将 pytorch 模型以 onnx 格式导出并保存# netron.start(model_visual_path) # 浏览器会自动打开网络结构# load pretrain weights# download url: https://download.pytorch.org/models/vgg16-397923af.pthmodel_weight_path = "models/vgg16-pre.pth"assert os.path.exists(model_weight_path), "file {} does not exist.".format(model_weight_path)model.load_state_dict(torch.load(model_weight_path, map_location='cpu'))# 更改Vgg16模型的最后一层model.classifier[-1] = nn.Linear(4096, len(class_names), bias=True)# 将模型放入GPU中model.to(self.device)# 定义损失函数loss_function = nn.CrossEntropyLoss()# 定义优化器params = [p for p in model.parameters() if p.requires_grad]optimizer = optim.Adam(params=params, lr=0.0001)train_loss_history, train_acc_history = [], []test_loss_history, test_acc_history = [], []best_acc = 0.0for epoch in range(0, epochs):# 下面是模型训练model.train()running_loss = 0.0train_acc = 0.0train_bar = tqdm(train_loader, file=sys.stdout)# 进来一个batch的数据,计算一次梯度,更新一次网络for step, data in enumerate(train_bar):images, labels = data # 获取图像及对应的真实标签optimizer.zero_grad() # 清空过往梯度outputs = model(images.to(self.device)) # 得到预测的标签train_loss = loss_function(outputs, labels.to(self.device)) # 计算损失train_loss.backward() # 反向传播,计算当前梯度optimizer.step() # 根据梯度更新网络参数# print statisticsrunning_loss += train_loss.item()predict_y = torch.max(outputs, dim=1)[1] # 每行最大值的索引# torch.eq()进行逐元素的比较,若相同位置的两个元素相同,则返回True;若不同,返回Falsetrain_acc += torch.eq(predict_y, labels.to(self.device)).sum().item()train_bar.desc = "train epoch[{}/{}] loss:{:.3f}".format(epoch + 1,epochs,train_loss)# 下面是模型验证model.eval() # 不启用 BatchNormalization 和 Dropout,保证BN和dropout不发生变化val_acc = 0.0 # accumulate accurate number / epochtesting_loss = 0.0with torch.no_grad(): # 张量的计算过程中无需计算梯度val_bar = tqdm(validate_loader, file=sys.stdout)for val_data in val_bar:val_images, val_labels = val_dataoutputs = model(val_images.to(self.device))val_loss = loss_function(outputs, val_labels.to(self.device)) # 计算损失testing_loss += val_loss.item()predict_y = torch.max(outputs, dim=1)[1] # 每行最大值的索引# torch.eq()进行逐元素的比较,若相同位置的两个元素相同,则返回True;若不同,返回Falseval_acc += torch.eq(predict_y, val_labels.to(self.device)).sum().item()train_loss = running_loss / train_stepstrain_accurate = train_acc / train_numtest_loss = testing_loss / val_stepsval_accurate = val_acc / val_numtrain_loss_history.append(train_loss)train_acc_history.append(train_accurate)test_loss_history.append(test_loss)test_acc_history.append(val_accurate)print('[epoch %d] train_loss: %.3f val_accuracy: %.3f' %(epoch + 1, train_loss, val_accurate))if val_accurate > best_acc:best_acc = val_accuratetorch.save(model.state_dict(), self.model_name)# 记录结束时间end_time = time()run_time = end_time - begin_timeprint('该循环程序运行时间:', run_time, "s")# 绘制模型训练过程图self.show_loss_acc(train_loss_history, train_acc_history,test_loss_history, test_acc_history)# 画热力图self.heatmaps(model, validate_loader, class_names)
该系统可以训练自己的数据集,训练过程也比较简单,只需指定自己数据集中训练集和测试集的路径,训练后模型名称和指定训练的轮数即可

训练结束后可输出以下结果:
a. 训练过程的损失曲线

b. 模型训练过程记录,模型每一轮训练的损失和精度数值记录

c. 模型结构

模型评估可输出:
a. 混淆矩阵

b. 测试过程和精度数值

c. 准确率、精确率、召回率、F1值

(三)总结
以上即为整个项目的介绍,整个项目主要包括以下内容:完整的程序代码文件、训练好的模型、数据集、UI界面和各种模型指标图表等。
整个项目包含全部资料,一步到位,省心省力。
项目运行过程如出现问题,请及时交流!
相关文章:
基于卷积神经网络的眼疾识别系统,resnet50,efficentnet(pytorch框架,python代码)
更多图像分类、图像识别、目标检测、图像分割等项目可从主页查看 功能演示: 眼疾识别系统resnet50,efficentnet,卷积神经网络(pytorch框架,python代码)_哔哩哔哩_bilibili (一)简介…...
基于srpingboot智慧校园管理服务平台的设计与实现(源码+文档+部署讲解)
技术范围:SpringBoot、Vue、SSM、HLMT、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、小程序、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容:免费功能设计、开题报告、任务书、中期检查PPT、系统功能实现、代码编写、论文编写和辅导、论…...
【力扣hot100题】(026)合并两个有序链表
可以创建一个新链表记录答案: /*** Definition for singly-linked list.* struct ListNode {* int val;* ListNode *next;* ListNode() : val(0), next(nullptr) {}* ListNode(int x) : val(x), next(nullptr) {}* ListNode(int x, ListNode *…...
TCP网络编程与多进程并发实践
一、引言 在网络编程中,TCP(传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层通信协议。而多进程并发则是一种提高服务器处理能力的有效手段,允许服务器同时处理多个客户端的请求。本文将详细介绍如何使用 TCP 协议进…...
【前端】一文掌握 Vue 3 指令用法(vue3 备忘清单)
文章目录 入门介绍创建应用应用实例通过 CDN 使用 Vue使用 ES 模块构建版本模板语法文本插值原始 HTMLAttribute 绑定布尔型 Attribute动态绑定多个值使用 JavaScript 表达式仅支持表达式(例子都是无效)调用函数指令 Directives参数 Arguments绑定事件动态参数动态的事件名称修…...
visio导出pdf公式变形
情况描述导出为pdf后,mathtype写的公式就变形了 但是导出为png和jpg就是正常 解决方法就是 需要下载一个Adobe Acrobat...
【学习笔记】计算机网络(六)
第6章应用层 文章目录 第6章应用层6.1 域名系统DNS6.1.1 域名系统概述6.1.2 互联网的域名结构6.1.3 域名服务器域名服务器的分区管理DNS 域名服务器的层次结构域名服务器的可靠性域名解析过程-两种查询方式DNS 高速缓存机制 6.2 文件传送协议6.2.1 FTP 概述6.2.2 FTP 的基本工作…...
做一个多级动态表单,可以保存数据和回显数据
<template> <div class"two"> <button class"save" click"saveBtn">保存数据</button> <button class"sd" click"showBtn">回显数据</button> <div class"all" click&quo…...
量子退火与机器学习(2):少量实验即可找到新材料,黑盒优化➕量子退火
使用量子退火和因子分解机设计新材料 这篇文章是东京大学的一位博士生的毕业论文中的主要贡献。 结合了黑盒优化和量子退火,是融合的非常好的一篇文章,在此分享给大家。 https://journals.aps.org/prresearch/abstract/10.1103/PhysRevResearch.2.0133…...
WPF中的Adorner基础用法详解与实例
WPF中的Adorner基础用法详解与实例 Adorner(装饰器)是WPF中一个强大的功能,它允许开发者在现有UI元素之上叠加额外的视觉效果或交互功能,而不会影响原有布局系统。本文将详细介绍Adorner的基础概念、核心用法以及实际应用示例。 …...
【React】基于 React+Tailwind 的 EmojiPicker 选择器组件
1.背景 React 写一个 EmojiPicker 组件,基于 emoji-mart 组件二次封装。支持添加自定义背景 、Emoji 图标选择!并在页面上展示! 2.技术栈 emoji-mart/data 、emoji-mart : emoji 图标库、元数据 tailwindcss: 原子化 CSS 样式库 antd : 组…...
02-Docker 使用
docker:快速构建、运行、管理应用的工具,可以帮助我们下载应用镜像,创建并运行镜像的容器,从而快速部署应用 1、部署mysql 先停掉虚拟机中的MySQL,确保你的虚拟机已经安装Docker,且网络开通的情况下,执行下面命令即可安装MySQL(注意:若服务器上已经有mysql 占用了330…...
html5时钟升级!支持切换深浅模式 Canvas实现现代化动态时钟
HTML5 Canvas实现现代化动态时钟 这里写目录标题 HTML5 Canvas实现现代化动态时钟项目介绍技术实现1. 项目架构2. Canvas绘图实现2.1 表盘绘制2.2 刻度绘制2.3 指针绘制 3. 动画效果4. 主题切换 项目亮点技术要点总结项目收获改进方向结语 项目介绍 本项目使用HTML5 Canvas技术…...
MOE-1 基本认识
解读一下MOE架构,部分内容图片参考自油管。 首先来简单了解一下什么是MoE(Mixture of Experts,专家混合) MoE(Mixture of Experts)是一种深度学习架构,其核心思想是通过**多个专家网络…...
【C++接入大模型】WinHTTP类封装:实现对话式大模型接口访问
一、类设计概述 近期准备用C做一些大预言模型方面的开发,先期计划实现C调用公共的大模型Web接口,因为之前没做过C的Web开发,经验少,所以对比了一些主流的框架,包括实际测试验证。以下是Windows平台下主流C HTTP库的对…...
MaxEnt物种分布建模全流程;R+ArcGIS+MaxEnt模型物种分布模拟、参数优化方法、结果分析制图与论文写作
融合R语言的MaxEnt模型具有以下具体优势: 数据处理高效便捷 📊强大的数据预处理功能:R语言提供了丰富的数据处理工具,能够轻松完成数据清洗、筛选、转换等操作,为MaxEnt模型提供高质量的输入数据。 🌐自动…...
【银河麒麟高级服务器操作系统 】虚拟机运行数据库存储异常现象分析及处理全流程
更多银河麒麟操作系统产品及技术讨论,欢迎加入银河麒麟操作系统官方论坛 https://forum.kylinos.cn 了解更多银河麒麟操作系统全新产品,请点击访问 麒麟软件产品专区:https://product.kylinos.cn 开发者专区:https://developer…...
python leetcode简单练习(2)
20 有效括号 方法思路 要判断一个仅由括号组成的字符串是否有效,可以使用栈这一数据结构。核心思路是遍历字符串中的每个字符,遇到左括号时压入栈中,遇到右括号时检查栈顶的左括号是否匹配。若匹配则弹出栈顶元素,否则返回false。…...
Android BottomNavigationView 完全自定义指南:图标、文字颜色与选中状态
1. 核心功能概述 通过 Material Design 的 BottomNavigationView,你可以轻松实现以下自定义: ✅ 动态切换选中/默认图标 ✅ 自定义选中与默认文字颜色 ✅ 控制文字显示模式(始终显示/仅选中显示/自动隐藏) ✅ 添加动画和高级样…...
Kafka 偏移量
在 Apache Kafka 中,偏移量(Offset)是一个非常重要的概念。它不仅用于标识消息的位置,还在多种场景中发挥关键作用。本文将详细介绍 Kafka 偏移量的核心概念及其使用场景。 一、偏移量的核心概念 1. 定义 偏移量是一个非负整数…...
【NLP】15. NLP推理方法详解 --- 动态规划:序列标注,语法解析,共同指代
动态规划 (Dynamic Programming) 动态规划(Dynamic Programming,简称 DP)是一种通过将问题分解为较小子问题来优化计算效率的技术。它特别适用于优化最优解问题,比如序列标注(sequence tagging)这类任务。…...
文件分享系统--开源的可视化文件共享管理工具
家里有公网,经常要发文件给别人,文件几个G发送还要云盘或者倒手一次才行,所以弄了个文件分享系统,这个是用字节的 AI Trae 写的,反正反复折腾还是弄出来了。东西挺好用,可以拖拽多个文件上传也可以手动添加…...
【力扣刷题实战】寻找数组的中心下标
大家好,我是小卡皮巴拉 文章目录 目录 力扣题目:寻找数组的中心下标 题目描述 解题思路 问题理解 算法选择 具体思路 解题要点 完整代码(C) 兄弟们共勉 !!! 每篇前言 博客主页&#…...
LearnOpenGL小练习(QOpenGLWidget版本)
你好,三角形 1.绘制两个彼此相连的三角形 画两个独立的三角形,给出两个三角形顶点,使用GL_TRIANGLES绘图即可。 关键代码 void MyOpenglWgt::initializeGL() {initializeOpenGLFunctions(); // 1. 创建ShaderProgram着色器:加…...
【Easylive】SpringBoot启动类——EasyLiveWebRunApplication
【Easylive】项目常见问题解答(自用&持续更新中…) 汇总版 这段代码是 Spring Boot 应用的 主启动类,包含了多个关键注解,用于配置和启动整个应用程序。以下是各个部分的详细解析: 1. SpringBootApplication Spri…...
2025 年前端新趋势:拥抱 Web Component 与性能优化
在技术飞速发展的今天,前端开发领域也在持续演进,新的技术和理念不断涌现。2025 年,Web Component 和性能优化无疑是前端开发中值得关注的两大重点,本文将带你深入了解这两大趋势。 Web Component:构建可复用组件的未…...
计算机网络 用deepseek帮助整理的复习资料(一)
### 计算机网络基础知识整理 --- #### **一、网络类型** 1. **局域网 (LAN)** - **定义**:覆盖小范围(如家庭、教室、公司)。 - **特点**:高带宽、低延迟,设备通过交换机互联。 - **示例**࿱…...
基于OpenCV+MediaPipe手部追踪
一、技术栈 1. OpenCV(Open Source Computer Vision Library) 性质:开源计算机视觉库(Library) 主要功能: 图像/视频的基础处理(读取、裁剪、滤波、色彩转换等) 特征检测…...
美甲预约管理系统基于Spring Boot SSM
目录 摘要 1. 引言 1.1 研究背景与意义 1.2 国内外研究现状 2. 系统需求分析 2.1 功能需求 2.2 非功能需求 3. 系统设计与实现 3.1 系统架构设计 3.2 关键技术实现 3.3 系统模块实现 3.3.1店铺管理 3.3.2商品管理 3.3.3用户管理 3.3.4订…...
XXX软件系统研发技术手册模板
《XXX软件系统研发技术手册》 1. 引言 1.1 编写目的 说明手册的编写背景、目标读者及核心价值,例如: 本文档为开发团队提供完整的技术实现指南,涵盖系统设计、开发规范、部署方案等内容 。 1.2 术语定义 微服务:一种架构风格&a…...
