云计算百科
云计算领域专业知识百科平台

数据集38-青光眼检测数据集,适合医学影像分析、深度学习图像分类、计算机视觉和计算机毕业设计

【深度学习数据集推荐】青光眼检测数据集,包含眼底图像与650条标注记录,附Python代码及毕设题目

今天分享一个适合医学影像分析、深度学习图像分类、计算机视觉和计算机毕业设计的公开数据集

该数据集主要用于青光眼相关影像识别研究,包含ACRIMA、ORIGA等数据目录,以及记录图像名称、视杯盘比和青光眼标签的CSV文件。

对于计算机、人工智能、医学信息工程、生物医学工程等专业的同学,可以围绕青光眼图像分类、迁移学习、多模型性能对比、视杯盘比辅助分析和医学影像识别系统开展毕业设计。

一、数据集基本介绍

1.1 数据集概况

项目内容
中文名称 青光眼检测数据集
数据大小 454.78MB
页面文件总数 2,662个
数据目录 ACRIMA、Fundus_Train_Val_Data、ORIGA
标签文件 glaucoma.csv
CSV记录数量 650条
CSV字段数量 5列
主要任务 青光眼二分类
扩展任务 ExpCDR指标分析、模型对比
推荐算法 ResNet、DenseNet、EfficientNet、MobileNet

1.2 什么是青光眼?

青光眼是一组可能造成视神经损伤的眼部疾病,是不可逆视力损伤的重要原因之一。

在眼底影像分析中,视盘、视杯等结构可以为青光眼风险评估提供一定参考。

深度学习模型可以学习眼底图像中的视觉特征,开展青光眼相关分类研究。

但需要强调,图像分类结果不能直接替代临床青光眼诊断。真实诊断还需要结合眼压、视野检查、视神经评估等临床信息。
在这里插入图片描述

二、数据集包含哪些内容?

根据提供的Kaggle目录信息,主要包含以下内容:

Detection/
├── ACRIMA/
├── Fundus_Train_Val_Data/
├── ORIGA/
└── glaucoma.csv

不同目录可能具有不同的图像组织方式、标签形式和数据来源。

因此,建议先完成目录检查,再确定采用哪个子集进行训练。

2.1 glaucoma.csv字段说明

CSV包含5个字段:

字段含义用途
Filename 图像文件名称 关联图像
ExpCDR 专家评估的杯盘比相关数值 辅助特征分析
Eye 左眼或右眼标识 数据统计
Set 数据集分组标识 数据分组分析
Glaucoma 青光眼标签 分类目标

例如:

FilenameExpCDREyeSetGlaucoma
001.jpg 0.7097 OD A 0
002.jpg 0.6953 OS A 0
036.jpg 0.5097 OD A 1
041.jpg 0.6131 OD B 1

以上记录来自提供的数据预览。

其中:

  • OD:右眼。
  • OS:左眼。
  • ExpCDR:视杯盘比相关指标。
  • Glaucoma:二分类标签,0和1。

这里的Set字段出现A、B两种取值,但仅凭预览不能确认其具体划分含义,需要查看原始数据说明。

三、青光眼标签分布

根据glaucoma.csv提供的统计:

标签含义样本数量占比
0 非青光眼 482 74.15%
1 青光眼 168 25.85%
合计 650 100%

可以看出,非青光眼样本数量明显多于青光眼样本。

因此,训练模型时不能只关注Accuracy,还应重点评价青光眼类别的Recall、Precision、F1-score和ROC-AUC。

尤其是医学影像分类任务,漏检与误检的实际影响不同,需要结合研究目标合理选择评价指标。

四、ExpCDR指标有什么作用?

ExpCDR是这份数据集比较有研究价值的字段。

CDR通常指杯盘比(Cup-to-Disc Ratio),用于描述视杯与视盘之间的相对比例。

数据预览中的ExpCDR取值大约分布在0.16至0.96之间。

可以围绕该指标开展以下分析:

  • 青光眼与非青光眼样本的ExpCDR分布对比。
  • ExpCDR与青光眼标签之间的关联分析。
  • 不同ExpCDR区间的样本数量统计。
  • 单独使用ExpCDR构建机器学习分类基线。
  • 比较图像模型与图像加ExpCDR融合模型的表现。
  • 需要注意:

    ExpCDR不能单独作为青光眼诊断的绝对标准。

    此外,CSV中已经提供的是专家评估数值,不等于数据集提供了视盘、视杯的像素级分割标注。

    如果希望训练U-Net自动分割视盘和视杯,需要额外确认是否有可用分割掩膜。

    五、适合使用哪些深度学习算法?

    模型主要特点推荐用途
    自定义CNN 结构简单 基础分类模型
    ResNet18 参数量适中 基线模型
    ResNet50 特征提取能力较强 模型对比
    DenseNet121 特征复用充分 医学影像分类对比
    EfficientNet-B0 兼顾性能和模型规模 优化实验
    MobileNetV3 轻量化网络 部署实验
    ViT Transformer视觉模型 扩展研究

    本科毕业设计建议采用:

    ResNet18作为基线,DenseNet121和EfficientNet-B0作为对比模型。

    如果希望增加研究内容,可以进一步研究类别不平衡处理、数据增强、注意力机制以及Grad-CAM可解释性分析。

    六、使用该数据集可以做哪些毕业设计?

    推荐以下8个方向:

    序号毕设题目推荐算法难度
    1 基于ResNet的青光眼眼底图像识别系统设计与实现 ResNet18 ★★★
    2 基于DenseNet的青光眼眼底图像分类研究 DenseNet121 ★★★
    3 基于迁移学习的青光眼图像分类模型对比研究 ResNet、EfficientNet ★★★
    4 基于注意力机制的青光眼眼底图像识别研究 ResNet+CBAM ★★★★
    5 基于MobileNetV3的轻量化青光眼图像分类研究 MobileNetV3 ★★★★
    6 基于Grad-CAM的青光眼分类模型可解释性研究 ResNet+Grad-CAM ★★★★
    7 融合视杯盘比特征的青光眼辅助分类方法研究 CNN+MLP ★★★★
    8 基于深度学习的青光眼眼底图像分析与可视化系统 PyTorch+Flask+Vue ★★★

    推荐题目1:基于ResNet的青光眼眼底图像识别系统设计与实现

    推荐指数:★★★★★

    适合本科计算机、软件工程和人工智能专业。

    主要研究内容:

  • 数据集整理与图像标签匹配。
  • 眼底图像预处理。
  • ResNet18迁移学习。
  • ResNet50模型对比。
  • 青光眼二分类性能评价。
  • Grad-CAM结果可视化。
  • Web图像识别系统开发。
  • 最终实现上传眼底图片,系统输出模型预测类别、分类置信度及可视化结果。

    推荐题目2:基于注意力机制的青光眼眼底图像分类研究

    推荐指数:★★★★☆

    如果希望增加算法研究内容,可以考虑这个方向。

    研究目标:

    在ResNet模型中加入注意力模块,研究不同特征提取方式对青光眼图像分类效果的影响。

    实验设计:

    实验模型
    Baseline ResNet18
    实验1 ResNet18+SE
    实验2 ResNet18+CBAM
    实验3 ResNet18+ECA

    重点比较Accuracy、Recall、F1-score和ROC-AUC。

    推荐题目3:融合视杯盘比特征的青光眼辅助分类方法研究

    推荐指数:★★★★★

    这个方向可以利用数据集中提供的ExpCDR字段,区别于普通的图像分类项目。

    研究目标:

    结合眼底图像特征和ExpCDR数值,构建多模态特征融合分类模型。

    技术流程:

    眼底图像 ──→ ResNet ──→ 图像特征 ──┐
    ├──→ 特征融合 ──→ 二分类
    ExpCDR数值 ──→ MLP ──→ 数值特征 ───┘

    推荐对比实验:

    实验模型方案
    实验1 仅使用ExpCDR+逻辑回归
    实验2 仅使用眼底图像+ResNet
    实验3 图像特征+ExpCDR融合
    实验4 图像特征+ExpCDR+注意力模块

    需要注意,融合模型依赖ExpCDR作为额外输入。如果实际系统没有专家提供的ExpCDR数值,就不能直接使用这一融合模型完成预测,除非另行开发可靠的杯盘比估计方法。

    七、Python代码:分析CSV标签分布

    首先对glaucoma.csv进行基础统计。

    7.1 安装依赖

    pip install pandas numpy matplotlib seaborn scikit-learn

    7.2 读取数据

    import pandas as pd

    df = pd.read_csv("glaucoma.csv")

    print("数据形状:", df.shape)
    print(df.head())

    print("\\n缺失值:")
    print(df.isnull().sum())

    print("\\n标签分布:")
    print(df["Glaucoma"].value_counts())

    print("\\nExpCDR统计:")
    print(df["ExpCDR"].describe())

    7.3 可视化青光眼标签分布

    import matplotlib.pyplot as plt

    counts = df["Glaucoma"].value_counts().sort_index()

    plt.figure(figsize=(6, 4))

    plt.bar(
    ["Non-Glaucoma", "Glaucoma"],
    [counts.get(0, 0), counts.get(1, 0)]
    )

    plt.xlabel("Class")
    plt.ylabel("Count")
    plt.title("Glaucoma Class Distribution")

    plt.tight_layout()
    plt.show()

    7.4 ExpCDR与青光眼标签分析

    import seaborn as sns
    import matplotlib.pyplot as plt

    sns.boxplot(
    data=df,
    x="Glaucoma",
    y="ExpCDR"
    )

    plt.title("ExpCDR by Glaucoma Label")
    plt.xlabel("Glaucoma")
    plt.ylabel("ExpCDR")

    plt.show()

    通过箱线图可以观察不同类别的ExpCDR分布差异。

    但这种差异只能说明数据中的统计关联,不能直接证明因果关系或临床诊断价值。

    八、Python代码:使用ExpCDR建立机器学习分类基线

    除了图像分类,还可以先利用CSV中的数值特征构建一个简单的机器学习模型。

    这里使用Logistic Regression。

    import pandas as pd

    from sklearn.model_selection import train_test_split
    from sklearn.preprocessing import StandardScaler
    from sklearn.linear_model import LogisticRegression
    from sklearn.pipeline import Pipeline
    from sklearn.metrics import classification_report, roc_auc_score

    df = pd.read_csv("glaucoma.csv")

    df = df.dropna(
    subset=["ExpCDR", "Glaucoma"]
    )

    X = df[["ExpCDR"]]
    y = df["Glaucoma"].astype(int)

    X_train, X_test, y_train, y_test = train_test_split(
    X,
    y,
    test_size=0.2,
    random_state=42,
    stratify=y
    )

    model = Pipeline([
    ("scaler", StandardScaler()),
    ("classifier", LogisticRegression(
    max_iter=1000,
    class_weight="balanced"
    ))
    ])

    model.fit(X_train, y_train)

    y_pred = model.predict(X_test)
    y_prob = model.predict_proba(X_test)[:, 1]

    print(classification_report(
    y_test,
    y_pred,
    digits=4,
    zero_division=0
    ))

    print("ROC-AUC:", roc_auc_score(y_test, y_prob))

    这个实验可以作为后续深度学习图像分类模型的辅助对照。

    但需要注意,如果同一受试者存在双眼数据,应尽可能按患者分组划分,而不是直接随机划分记录。当前CSV预览未提供明确的患者ID,正式研究需要核对数据来源和关联信息。

    九、Python代码:ResNet18青光眼图像分类训练

    对于图像分类,可以使用PyTorch中的ResNet18。

    但由于数据集包含多个目录,首先需要将图片与对应标签匹配。

    以下示例假设已经根据原始标签整理为:

    Project/
    ├── dataset/
    │ ├── train/
    │ │ ├── normal/
    │ │ └── glaucoma/
    │ ├── val/
    │ │ ├── normal/
    │ │ └── glaucoma/
    │ └── test/
    │ ├── normal/
    │ └── glaucoma/
    └── train.py

    这里的normal和glaucoma是整理后的示例目录名称,并非断言原始Kaggle数据就是这一结构。

    9.1 安装依赖

    pip install torch torchvision scikit-learn pillow

    9.2 ResNet18训练代码

    import copy
    import torch
    import torch.nn as nn

    from torchvision import datasets, transforms, models
    from torch.utils.data import DataLoader
    from sklearn.metrics import classification_report

    DATA_DIR = "dataset"
    EPOCHS = 20
    BATCH_SIZE = 16
    LR = 1e-4

    device = torch.device(
    "cuda" if torch.cuda.is_available() else "cpu"
    )

    train_transform = transforms.Compose([
    transforms.Resize((224, 224)),
    transforms.RandomHorizontalFlip(),
    transforms.RandomRotation(10),
    transforms.ToTensor(),
    transforms.Normalize(
    [0.485, 0.456, 0.406],
    [0.229, 0.224, 0.225]
    )
    ])

    eval_transform = transforms.Compose([
    transforms.Resize((224, 224)),
    transforms.ToTensor(),
    transforms.Normalize(
    [0.485, 0.456, 0.406],
    [0.229, 0.224, 0.225]
    )
    ])

    train_dataset = datasets.ImageFolder(
    f"{DATA_DIR}/train",
    transform=train_transform
    )

    val_dataset = datasets.ImageFolder(
    f"{DATA_DIR}/val",
    transform=eval_transform
    )

    test_dataset = datasets.ImageFolder(
    f"{DATA_DIR}/test",
    transform=eval_transform
    )

    assert train_dataset.classes == val_dataset.classes
    assert train_dataset.classes == test_dataset.classes

    classes = train_dataset.classes

    train_loader = DataLoader(
    train_dataset,
    batch_size=BATCH_SIZE,
    shuffle=True
    )

    val_loader = DataLoader(
    val_dataset,
    batch_size=BATCH_SIZE,
    shuffle=False
    )

    test_loader = DataLoader(
    test_dataset,
    batch_size=BATCH_SIZE,
    shuffle=False
    )

    model = models.resnet18(
    weights=models.ResNet18_Weights.DEFAULT
    )

    model.fc = nn.Linear(
    model.fc.in_features,
    2
    )

    model = model.to(device)

    criterion = nn.CrossEntropyLoss()

    optimizer = torch.optim.Adam(
    model.parameters(),
    lr=LR
    )

    best_acc = –1
    best_state = None

    for epoch in range(EPOCHS):

    model.train()

    train_loss = 0

    for images, labels in train_loader:

    images = images.to(device)
    labels = labels.to(device)

    optimizer.zero_grad()

    outputs = model(images)
    loss = criterion(outputs, labels)

    loss.backward()
    optimizer.step()

    train_loss += loss.item()

    model.eval()

    correct = 0
    total = 0

    with torch.no_grad():
    for images, labels in val_loader:

    images = images.to(device)
    labels = labels.to(device)

    outputs = model(images)
    preds = outputs.argmax(dim=1)

    correct += (preds == labels).sum().item()
    total += labels.size(0)

    val_acc = correct / total

    print(
    f"Epoch {epoch+1}/{EPOCHS} "
    f"Loss={train_loss/len(train_loader):.4f} "
    f"Val Acc={val_acc:.4f}"
    )

    if val_acc > best_acc:
    best_acc = val_acc
    best_state = copy.deepcopy(
    model.state_dict()
    )

    torch.save(
    {
    "model_state_dict": best_state,
    "classes": classes
    },
    "best_resnet18.pth"
    )

    model.load_state_dict(best_state)
    model.eval()

    y_true = []
    y_pred = []

    with torch.no_grad():
    for images, labels in test_loader:

    images = images.to(device)

    outputs = model(images)
    preds = outputs.argmax(dim=1)

    y_true.extend(labels.numpy().tolist())
    y_pred.extend(preds.cpu().numpy().tolist())

    print(classification_report(
    y_true,
    y_pred,
    target_names=classes,
    digits=4,
    zero_division=0
    ))

    上述代码用于完成基础图像二分类实验。

    正式实验应重点保证图像标签正确、患者级数据隔离,以及训练集、验证集和测试集之间不存在重复样本。
    在这里插入图片描述
    在这里插入图片描述

    十、毕业设计可以增加哪些优化实验?

    10.1 多模型对比

    模型AccuracyRecallF1-scoreROC-AUC
    ResNet18 待实验 待实验 待实验 待实验
    ResNet50 待实验 待实验 待实验 待实验
    DenseNet121 待实验 待实验 待实验 待实验
    EfficientNet-B0 待实验 待实验 待实验 待实验
    MobileNetV3 待实验 待实验 待实验 待实验

    10.2 类别不平衡优化

    针对CSV中青光眼样本较少的问题,可以比较:

    • 普通交叉熵。
    • 加权交叉熵。
    • Focal Loss。
    • WeightedRandomSampler。

    10.3 数据增强实验

    可以比较:

    • 基础预处理。
    • 随机翻转。
    • 小角度旋转。
    • 亮度和对比度调整。
    • 不同增强组合。

    医学影像增强应尽量保留真实解剖结构,避免不合理变换影响研究结果。

    10.4 Grad-CAM可解释性分析

    通过Grad-CAM生成模型关注区域热力图,分析模型是否关注视盘附近区域或其他图像特征。

    需要注意,热力图仅表示模型关注区域,不能直接作为临床病灶定位依据。
    在这里插入图片描述
    在这里插入图片描述

    十一、如果开发Web系统,可以设计哪些功能?

    推荐技术架构:

    PyTorch + ResNet18 + Flask + Vue + ECharts

    功能模块功能说明
    系统首页 展示数据集和模型信息
    图像上传 上传眼底图像
    青光眼分类 输出模型预测结果
    置信度展示 展示分类概率
    批量识别 批量处理多张图片
    ExpCDR分析 展示杯盘比数值与统计
    模型切换 切换ResNet、DenseNet等模型
    模型评价 展示Accuracy、Recall、F1、AUC
    训练结果 展示Loss和Accuracy曲线
    Grad-CAM 展示模型关注区域
    历史记录 保存识别结果
    数据可视化 展示标签和指标分布

    系统工作流程:

    眼底图像上传
    ↓
    图像预处理
    ↓
    ResNet / DenseNet分类模型
    ↓
    青光眼二分类预测
    ↓
    预测概率与热力图展示
    ↓
    结果保存与可视化

    如果选择ExpCDR融合方向,则需要增加数值输入和特征融合模块。

    赞(0)
    未经允许不得转载:网硕互联帮助中心 » 数据集38-青光眼检测数据集,适合医学影像分析、深度学习图像分类、计算机视觉和计算机毕业设计
    分享到: 更多 (0)

    评论 抢沙发

    评论前必须登录!