眼底疾病智能辅助诊断系统
1. 项目概述
本项目是一个基于深度学习的眼底疾病智能辅助诊断系统。系统利用计算机视觉技术(主要是 YOLOv11-cls 图像分类模型)对眼底相机拍摄的图像进行自动分析,识别包括正常眼底、糖尿病视网膜病变、青光眼、白内障、老年性黄斑变性(AMD)、高血压视网膜病变、高度近视及其他异常在内的多种眼部状况。
项目旨在为医生提供快速、客观的辅助诊断参考,减轻医疗工作负担,并帮助患者进行初步的眼健康筛查。
2. 技术栈
本项目采用了前后端分离的架构设计,使用了目前主流的开发技术:
后端 (Backend)
- 语言: Python 3.12
- 框架: Django 5.2.9 + Django REST Framework (DRF)
- 深度学习框架: PyTorch, Ultralytics YOLO
- 图像处理: OpenCV, Pillow (PIL)
- 数据库: SQLite3 (开发环境) / 可扩展至 PostgreSQL 或 MySQL
前端 (Frontend)
- 框架: Vue 3 (Composition API)
- 构建工具: Vite
- UI 组件库: Element Plus
- 图表库: ECharts (用于数据可视化)
- HTTP 客户端: Axios
3. 数据集与算法
3.1 数据集 (Dataset)
数据集来源于公开的眼科医疗影像数据库(如 ODIR 等),经过清洗和标注,主要包含以下类别:
- Normal (N): 正常眼底
- Diabetes (D): 糖尿病视网膜病变
- Glaucoma (G): 青光眼
- Cataract ©: 白内障
- 以及 AMD, Hypertension, Myopia, Other 等补充类别。
图解: 上图展示了数据集中各类眼底疾病的样本数量分布情况。了解样本分布对于评估模型的平衡性和泛化能力至关重要。
3.2 核心算法与模型 (Algorithm & Model)
本项目主要使用的核心模型是YOLOv11-cls(You Only Look Once - Classification)。YOLO 系列通常以目标检测闻名,但其分类头(Classification Head)在特征提取方面同样表现优异,具有推理速度快、精度高的特点,非常适合实时性要求较高的医疗辅助诊断场景。
此外,系统架构还支持扩展其他经典卷积神经网络模型,如:
- MobileNetV2: 轻量级网络,适合移动端部署。
- EfficientNet-B3: 在参数量和精度之间取得了极佳的平衡。
训练过程可视化
在模型训练过程中,我们通过 Batch(批次)输入图像进行特征学习。
图解: 以上三张图片展示了模型训练过程中,输入到神经网络中的一个 Batch 的图像数据。这些图像经过了预处理(如 Resize、归一化),包含了对应的标签(如 Normal, Cataract 等),模型通过不断学习这些样本来更新权重。
4. 训练与评估 (Training & Evaluation)
4.1 训练结果曲线
图解: 该图展示了模型在训练过程中的各项指标变化曲线:
- train/loss & val/loss: 训练集和验证集的损失值,随 Epoch 增加而下降,表明模型正在收敛。
- metrics/accuracy_top1: Top-1 准确率,随训练进行逐渐上升,最终趋于稳定,代表模型预测最可能的类别与真实标签一致的概率。
4.2 混淆矩阵 (Confusion Matrix)
图解: 混淆矩阵是评估分类模型性能的重要工具。
- 横轴: 预测类别 (Predicted)。
- 纵轴: 真实类别 (True)。
- 对角线: 颜色越深数值越大,表示模型预测正确的数量越多。
- 非对角线: 表示模型预测错误的数量(误判)。例如,如果“Normal”行的“Diabetes”列有数值,说明将正常眼底误判为了糖尿病病变。
5. 数据库设计 (Database Design)
系统使用关系型数据库存储图像记录、诊断结果、训练日志和用户信息。以下是核心数据表的详细设计。
5.1 眼底图像记录表 (api_eyeimage)
用于存储用户上传的眼底图像及其诊断结果。
| 字段名 | 类型 | 长度 | 非空 (Null) | 唯一 (Unique) | 说明 |
|---|---|---|---|---|---|
| id | Integer | - | No | Yes | 主键,自增 ID |
| image | Varchar | 100 | No | No | 图像文件的存储路径 (media/eye_images/…) |
| uploaded_at | DateTime | - | No | No | 记录创建/上传时间,自动生成 |
| predicted_label | Varchar | 50 | Yes | No | 模型预测的疾病名称 (如 ‘Diabetes’) |
| confidence | Float | - | Yes | No | 预测置信度 (0.0 - 1.0) |
| true_label | Varchar | 50 | Yes | No | 真实标签 (用于后续人工校对或半监督学习) |
5.2 训练日志表 (api_traininglog)
用于记录模型训练过程中的性能指标,用于前端可视化训练进度。
| 字段名 | 类型 | 长度 | 非空 (Null) | 唯一 (Unique) | 说明 |
|---|---|---|---|---|---|
| id | Integer | - | No | Yes | 主键,自增 ID |
| model_name | Varchar | 50 | No | No | 模型名称 (如 ‘mobilenet_v2’) |
| epoch | Integer | - | No | No | 当前训练轮次 |
| loss | Float | - | No | No | 损失值 |
| accuracy | Float | - | No | No | 准确率 |
| timestamp | DateTime | - | No | No | 日志记录时间 |
5.3 用户表 (auth_user)
Django 内置的用户认证表,用于管理管理员和普通用户。
| 字段名 | 类型 | 长度 | 非空 (Null) | 唯一 (Unique) | 说明 |
|---|---|---|---|---|---|
| id | Integer | - | No | Yes | 用户 ID |
| username | Varchar | 150 | No | Yes | 用户名,登录凭证 |
| password | Varchar | 128 | No | No | 加密后的密码哈希值 |
| Varchar | 254 | No | No | 电子邮箱 | |
| is_superuser | Boolean | - | No | No | 是否为超级管理员 |
| is_staff | Boolean | - | No | No | 是否允许登录后台 |
| date_joined | DateTime | - | No | No | 注册时间 |
6. 系统界面与功能 (System Interface & Functions)
6.1 登录与注册
功能:
- 提供用户身份认证入口,保障系统数据安全。
- 用户可以通过注册创建新账号,或直接登录进入系统。
- 支持 Token 认证机制,登录成功后获取访问令牌。
6.2 系统仪表盘 (Dashboard)
功能:
- 数据概览: 展示系统总样本数、已诊断数量等关键指标。
- 疾病分布图: 使用 ECharts 饼图/柱状图直观展示当前数据库中各类眼底疾病的比例。
- 快捷入口: 提供快速跳转至诊断、历史记录等核心功能的卡片。
6.3 智能诊断 (Model View)
功能:
- 图像上传: 用户可上传本地眼底图像。
- 实时预测: 后端模型实时处理图像,返回预测结果。
- 结果展示:
- 显示预测的疾病类别(如“糖网病变”)。
- 显示置信度条(Confidence),直观反映模型的确信程度。
- 提供针对性的医疗建议(Suggestion)。
- 可视化: 同时展示模型训练的混淆矩阵和训练结果图,增强用户对模型性能的信任。
6.4 历史诊断记录
功能:
- 记录归档: 自动保存每一次诊断的图像、结果、置信度和时间。
- 多维筛选: 支持按疾病类型(如只看“青光眼”)、日期范围进行筛选。
- 视图切换: 提供“列表视图”和“卡片视图”两种展示方式。
- 数据管理: 支持单条删除和批量删除操作。
6.5 个人中心
功能:
- 展示当前登录用户的基本信息(用户名、邮箱、角色)。
- 提供修改密码功能。
- 显示用户的最后登录时间。
6.6 用户管理 (管理员专属)
功能:
- 仅管理员权限可见。
- 用户列表: 查看系统中所有注册用户的信息。
- 权限控制: 可以将普通用户提升为管理员,或禁用违规账号。
- 账号维护: 支持删除用户或重置用户信息的后台操作。
7. 总结
本系统通过整合先进的深度学习算法与现代化的 Web 开发技术,构建了一个功能完备、交互友好的眼底疾病辅助诊断平台。从底层的数据库设计到前端的可视化交互,再到后端的模型推理,各环节紧密配合,能够有效地辅助医生进行筛查工作,具有较高的实用价值和扩展潜力。