视网膜血管分割数据集详解:DRIVE、STARE等五大公开基准对比与预处理实践
2026/9/17 8:31:37 网站建设 项目流程

糖尿病视网膜病变筛查是眼科影像分析里最“卷”也最实用的方向之一,而视网膜血管分割几乎是所有下游分析的第一步。血管的粗细、弯曲度、分叉形态,直接关系到对高血压、动脉硬化、糖尿病视网膜病变的判断。做这个方向绕不开几个公开数据集:DRIVE、STARE、CHASE_DB1、DiaRetDB1、REFUGE。这篇文章把这几个数据集的使用场景、细节差异、预处理思路和常见坑一次性讲清楚。

1. 必须搞懂的底层背景:为什么血管分割先于疾病诊断

先看一张眼底图,人眼能认出血管、视盘、黄斑这些结构,但计算机要分析视网膜图像,最基础的任务就是先把血管从背景里“抠”出来。血管分割的精度直接决定后续血管宽度测量、动静脉比计算、分叉角度分析是否可靠。

这几个数据集之所以被反复引用,原因有三:第一,它们提供了高质量的专家手工标注,是监督学习的基准;第二,图像来源和拍摄设备不同,覆盖了不同人群、不同病变程度、不同分辨率,天然适合做泛化测试;第三,所有公开文献都在这几个数据集上报指标,不跑这几个数据集等于没法跟同行对比。

需要特别提醒一句,标题里常见的“视网膜血管分割数据集”通常是泛指,但REFUGE数据集严格意义上不是血管分割数据集,它主要用于视盘与视杯分割,属于青光眼筛查方向。很多人第一次接触REFUGE会误以为它也是做血管分割的,这里需要明确区分。本文把REFUGE放进来对比,是因为它在视网膜图像分割的整体框架中经常被同时提及,且很多代码库会把它和血管数据集放在一个pipeline里做预处理和评估。

从应用场景来说,DRIVE和STARE是最早被用于血管分割模型验证的两个基准,几乎所有经典论文都能在这两个数据集上找到数值。CHASE_DB1则是儿童眼底图像,标注难度更大,分布也更复杂。DiaRetDB1的亮点在于它来自糖尿病视网膜病变患者,本身带病变标注,适合研究病变干扰下的血管分割。REFUGE则是从整个视网膜图像分析中抽出来的另一个分支,专注视盘视杯结构切分。

2. 五大数据集逐一拆解

2.1 DRIVE:血管分割事实上的“基准中的基准”

DRIVE全称是Digital Retinal Images for Vessel Extraction,来源是荷兰的糖尿病视网膜病变筛查项目。它包含40张视网膜图像,分辨率为565×584,使用Canon CR5非散瞳相机拍摄,视场45°(实际有效视场为7mm左右)。其中7张图像存在早期糖尿病视网膜病变的轻度表现。

DRIVE官方划分了20张训练集和20张测试集。每张训练图都有一份手工标注;测试集则有两份手工标注。注意,这两份标注不是简单重复,而是由不同专家独立完成,所以存在细微差异。官方推荐的评估方式是:用训练集中的单套标注训练模型,在测试集中使用第一套标注(文件名通常以1st_manual结尾)作为Ground Truth,第二套标注用于衡量人类标注者之间的差异。

DRIVE还提供了掩码(mask),表示视场内的有效图像区域。这个掩码非常关键,因为眼底相机的视场是圆形的,视场之外是黑色背景,如果不去除这部分,模型很容易学到“边界效应”,在视场边缘产生虚线状伪影。

DRIVE的标注风格在四套数据集中属于相对“干净”的,细血管的标注比较完整,任务难度中等偏低。但正因为它简单,很多论文在DRIVE上都能到0.95以上的AUC,导致这个数据集的边际收益已经很小,更适合用来做基础验证而不是炫技。

2.2 STARE:病理图像占比高,挑战性更强

STARE全称是STructured Analysis of the Retina,1987年前后由美国加州大学圣迭戈分校构建,包含20张眼底图像,分辨率为700×605。这些图像使用Topcon TRV-50眼底相机拍摄,35°视场,每张图像都标注了视盘中心和血管结构。

STARE的独特之处在于它包含10张正常图像和10张病理图像,这些病理图像多来自全身性疾病的眼底表现,比如糖尿病、高血压、视网膜静脉阻塞等。正因如此,STARE图像中的血管形态变化非常大,光照不均、病灶遮挡、出血点干扰都要比DRIVE严重得多。

STARE的标注由两位专家完成——一位叫Adam Hoover,另一位叫Valerie Kouznetsova,标注结果分别保存为im####.1.ppm和im####.2.ppm,也就是第一标注者标注文件和第二标注者标注文件。标准评估协议一般使用第一标注作为Ground Truth,但很多论文也习惯报告两个标注下的结果。

由于STARE图像只有20张,通常没有官方训练测试划分,大部分研究者直接采用两种策略:留一法交叉验证,或者自行按照固定比例划分。部分工作将前10张作为训练集,后10张作为测试集,但这种划分并不统一,论文里需要自己说明清楚。

STARE上的血管分割难度明显高于DRIVE,尤其是在病变遮挡区域,模型常犯两类错误:把出血点边缘当成血管,或者漏掉被硬性渗出遮挡的细血管。很多在DRIVE上表现不错的模型,到了STARE都会有一个小幅下降。

2.3 CHASE_DB1:面向儿童眼底图像的专项数据

CHASE_DB1来自伦敦大学城市学院(City, University of London)的儿童心脏健康研究。数据集包含28张视网膜图像,分辨率为999×960,拍摄对象是14名儿童,每名儿童取左眼和右眼各一张。拍摄设备为Nidek NM-200-D手持式眼底相机,30°视场。

CHASE_DB1的数据更多样化,因为儿童图像中血管更细,对比度可能不如成人图像。而且该数据集中的图像包含新生儿和学龄儿童不同年龄段的样本,血管发育情况存在个体差异。

CHASE_DB1的官方标注由两位观察者完成,为每张图像提供两套标注。不过官方并未明确划分训练集和测试集,大多数论文采用两种常见方式:第一种是前14张图像(7个受试者)作为训练集,后14张作为测试集;第二种是随机划分,为了保证论文可复现,通常建议注明受试者ID而不是图像ID,防止同一受试者的左右眼同时出现在训练和测试集中造成数据泄漏。

在CHASE_DB1上分割血管的主要难点在于:儿童血管更细,标注者的标注一致性相对成人图像更低;图像边缘存在明显的渐晕和光照衰减,掩码的覆盖面积比DRIVE小;并且手持式相机拍摄会产生微小的运动模糊,这些都给血管分割算法带来额外压力。

2.4 DiaRetDB1:糖尿病视网膜病变场景下的血管与病灶混杂

DiaRetDB1由芬兰奥卢大学构建,原始版本称为DiaRetDB1_v1_1,包含89张彩色眼底图像,分辨率为1500×1152,拍摄设备为Zeiss FF450+眼底相机,50°视场。这89张图像中,部分来自健康人,但更多来自不同程度糖尿病视网膜病变患者,病变等级从轻度到重度增生性病变都有覆盖。

DiaRetDB1的专家标注与DRIVE不同:它标注的内容不只包括血管,还包括微动脉瘤、出血点和硬性渗出。标注格式由四位眼科医生独立标注,共收集四套标注。这就意味着,如果只做血管分割,需要先过滤出血管标注部分。

DiaRetDB1的最大价值在于:它能让研究者看到在病灶干扰下血管分割模型的鲁棒性。实际临床场景中,单纯的血管分割没有意义,医生想看的是血管形态改变与病灶的关系。所以如果想开发实用工具,DiaRetDB1是比DRIVE、STARE都更接近临床复杂度的数据集。

但由于DiaRetDB1的标注存在“多位专家标注不一致”的问题,使用它做定量评测时需要格外小心。很多论文在DiaRetDB1上报指标时,只选择其中一部分图像(比如去掉没有血管标注的图像),导致不同论文的数据集实际使用规模并不一致,对比效果时会打折扣。

2.5 REFUGE:不是血管,别搞混了

REFUGE数据集来自2018年的ISBI视网膜相关挑战赛,全称是Retinal Fundus Glaucoma Challenge。它提供400张视盘视杯分割标注的眼底图像,来自新加坡的医院筛查项目,图像尺寸为2124×2056(原始拍摄为Zeiss Visucam 500),分为训练集、验证集和测试集三部分,各自包含80、80和240张图像。部分图像包含青光眼病变,所以它的任务重点是自动分割视盘和视杯,从而计算杯盘比(CDR),辅助青光眼诊断。

很多人之所以把REFUGE和血管分割数据集放在一起,是因为在“视网膜图像分割”这个大类目录下,它属于最知名的公共benchmark之一。如果你需要做视盘、视杯的定位或分割,REFUGE几乎是必跑的基线数据集;但在做血管分割时,请不要把REFUGE当作血管标注来使用。

有时候在一些论文或者开源仓库里,会发现有人把REFUGE和DRIVE/STARE一起出现在“segmentation”相关的table中,但那通常是因为这些论文统一报告了视网膜图像分割的所有子任务,而不是因为REFUGE提供了血管标注。

3. 数据集参数对比与选型建议

3.1 核心参数一览

数据集图像数量分辨率拍摄设备视场标注内容官方划分适合任务
DRIVE40565×584Canon CR545°血管(两套标注)20训练/20测试血管分割基准
STARE20700×605Topcon TRV-5035°血管(两套标注)无官方划分病理图像血管分割
CHASE_DB128999×960Nidek NM-200-D30°血管(两套标注)无官方划分儿童血管分割
DiaRetDB1891500×1152Zeiss FF450+50°血管+病灶(四套标注)无官方划分病变干扰下的血管分割
REFUGE4002124×2056Zeiss Visucam 500综合视场视盘+视杯80/80/240视盘视杯分割

这里需要解释一个容易困惑的点:为什么有些数据集标注有“两套”而有的有“四套”?这不是因为专家数量越多越好,而是因为不同数据集设计的评估目标不同。DRIVE和STARE用两套标注是为了衡量标注者之间的随机误差,从而给算法结果一个可比较的区间。DiaRetDB1用四套标注是因为图像本身病变复杂,单套标注很难覆盖全部细节,取多套标注的融合结果反而可以作为更稳定的参考。

3.2 按场景选择数据集

如果是第一次跑血管分割模型,首选DRIVE。原因很简单:图像数量虽少,但官方已经切成训练集和测试集,标注规范,评估标准成熟,网上可参考的代码和指标最多,能够快速验证自己的pipeline有没有问题。

如果目标是处理复杂病变图像,STARE和DiaRetDB1是更好的选择。STARE里有大量明显的出血灶和渗出,DiaRetDB1则有更系统的病变分级标注,前者像素级对比度差异大,后者标注层面更丰富。

如果用户场景面向儿科或儿童眼健康,CHASE_DB1是唯一公开的儿童视网膜血管分割基准,没有更合适的选择。用其他数据集预训练,再用CHASE_DB1微调,是这类任务的常用路线。

如果研究方向是青光眼而不是血管,那就直接转向REFUGE,别再把时间花在血管数据集的筛选上。

4. 数据预处理与训练细节全记录

4.1 图像尺寸与统一化处理

五套数据集的分辨率差别很大,从565×584到2124×2056都有。直接用原始分辨率训练,显卡显存根本扛不住,所以通常都要统一缩放到合适尺寸。

我常用的做法是训练时统一缩放到512×512或1024×1024,推理时再把结果resize回原分辨率再算指标。缩放到512时,DRIVE里的细血管会明显变细,有些直径只有1-2像素的细分支可能会断掉;缩放到1024时,显存占用会大幅增加,两难。 实测在常用U-Net结构下,分辨率768×768是一个比较稳妥的折中,既能保留细血管细节,又能在RTX 3090级别的显卡上跑起来。

但要注意,数据集的原始标注是根据原始图像手工勾画的,缩放后再计算分割指标,肯定会有一定误差。论文里一般不会太纠结这一点,因为所有方法都做了相同的预处理,公平即可。但在实际项目中,如果要求极高精度,建议按原始分辨率推理,再用torchvision的Resize或者opencv的插值方式统一处理。

4.2 掩码处理与视场裁剪

DRIVE、STARE、CHASE_DB1、DiaRetDB1的血管分割任务通常都要使用眼底视场掩码来限制损失函数的作用范围。DRIVE官方提供掩码文件,STARE则可以从图像背景中通过阈值法生成,CHASE_DB1的掩码一般通过二值化获得,DiaRetDB1虽然没有统一掩码,但背景区域较大,也可以用同样方法生成。

建议在损失函数中,对掩码外的像素直接设为忽略区域。最常见的做法是计算交叉熵时,只统计掩码内的像素;在边缘区域,不要用零填充,否则模型会在边界处产生淡黑色/淡白色伪影。

如果你使用torch的CrossEntropyLoss,可通过设置ignore_index=255,然后把掩码外的像素标签置为255,即可有效屏蔽无关区域。

4.3 数据增强策略

血管分割数据量本身不大,DRIVE和STARE都只有几十张图,不足以支撑纵深较大的网络训练。数据增强是必须的,但增强策略要克制。

常用的增强手段有:

  • 随机旋转:0°~360°。眼底图像中的血管方向没有优先取向,全角度旋转是安全的。
  • 水平/垂直翻转:对称性强,可用。
  • 随机缩放:0.9~1.1倍,注意如果缩得太小,细血管会消失。
  • 颜色扰动:亮度、对比度、饱和度的轻微调整,模拟不同光照条件。
  • 弹性形变:对血管这种管状结构非常有效,但幅度不能太大。

不建议在血管分割任务中使用过强的颜色增强,比如随机HSV范围过大,会让红绿色通道失衡,破坏血管与背景的对比度关系。另外,如果原始图像是RGB,使用灰度训练往往会更好,因为眼底图的主要对比度集中在绿色通道,红色通道和蓝色通道噪声较多。

这里分享一个经验:在DRIVE上,绿色通道单独作为输入,效果通常比RGB三通道更好;在STARE和DiaRetDB1上,由于病灶本身带有黄色或红色信息,RGB输入反而更适合,因为模型需要区分渗出的黄色和血管的红色。所以具体用单通道还是三通道,跟数据集的特点强相关,值得单独做几组对比实验。

4.4 评估指标详解

血管分割的评估一般使用以下指标:

  • ACC(准确率):预测正确的像素占比,但类别不平衡严重时,Acc虚高。
  • SEN(灵敏度/召回率):真实血管像素中被正确预测的比例。
  • SPE(特异度):真实背景像素中被正确预测的比例。
  • AUC(ROC曲线下面积):综合反映分类阈值对灵敏度与特异度的影响。
  • F1-score:血管类别的Dice相似性,在分割任务中更关键。
  • 尤其是DRIVE、STARE的官方文献中,普遍报告SEN、SPE和AUC,而在近年的深度学习方法中则更强调AUC和F1。

在报告中,应避免单独强调Acc,因为眼底图像中血管像素仅占约10%左右,甚至更少。如果模型全部预测为背景,Acc也能到90%以上,显然没有意义。真正的关键指标是SEN和SPE的平衡,以及AUC。

5. 模型实现与实验记录

5.1 从U-Net开始

U-Net是血管分割的入门基础和常见baseline。一个标准的U-Net结构,编码器使用4次下采样,基础通道数设为64,输出层使用sigmoid激活,损失函数选Dice Loss结合BCE。对于DRIVE数据集,在512×512分辨率、epoch=100、batch_size=8、Adam学习率1e-4的条件下,AUC基本可达0.97以上。

我用一套固定的pipeline跑过多组实验,具体流程如下:预处理时,读取原图后先做绿色通道抽取,再进行CLAHE(限制对比度自适应直方图均衡化)。CLAHE在血管分割中效果显著,它能让细长暗色血管与背景的对比度提升,推荐参数是clipLimit=2.0,tileGridSize=(8,8)。GT标注则统一转为二值图,血管为1,背景为0。

训练时,每个epoch随机采样96个256×256的patch作为训练样本,batch_size=16。这个patch策略基于经验:眼底图像中的血管分布具有局部性,256的patch能捕捉到足够的上下文,又不会过度依赖全局信息。验证时则用全尺寸图推理并计算指标。

5.2 跨数据集与迁移学习

很多人的目标是训练一个模型同时跑通DRIVE和STARE。但我在实验中有一个很明显的观察:在DRIVE上训练的模型,直接在STARE上测试的AUC大概会在0.94左右;在STARE上训练的模型,直接测试DRIVE,其AUC可能更低。这并非模型能力问题,而是两个数据集的领域分布差异很大——拍摄设备、人群、图像对比度、病理状态都存在显著不同。

解决思路有两条:

第一条是用多数据集混合训练,同时输入DRIVE和STARE训练,这样会让模型的泛化性提高。缺点是两个数据集的标注规范略有差异,尤其是视场边缘、细血管的处理方式并不一致,混合训练可能会把这种差异带给模型。

第二条是用一种测试时增强策略:预测时,将图像分别做水平和垂直翻转,得到三次预测结果(原图、水平翻转、垂直翻转再加水平翻转),取平均,可以让模型的预测边界更加稳定,尤其是在对比度较低的区域。实测在DRIVE测试集上,使用测试时增强比不使用TTA能提升AUC约0.005-0.01,对于已经接近饱和的DRIVE指标来说已算可观。

5.3 细血管分割的优化技巧

视网膜血管分割中最难的是细血管,尤其是直径只有1-2像素的分支。常见优化手段有三种:引入形态学后处理、多尺度特征融合、以及使用距离图作为辅助监督。

形态学后处理通常用于去掉预测结果中的孤立噪声点,比如先做一个中值滤波,再使用面积小于阈值(例如30像素)的连通域去除。这种方法在模型输出较干净时有效,但如果细血管本身断裂较多,形态学操作会进一步磨掉这些断裂的血管分支。

多尺度特征融合是更通用的策略,其思路是把不同分辨率下的特征图合并,比如同时输入原始分辨率的图像和两倍下采样的图像,让模型既能学到粗大的主干血管,也能捕捉微小的分支血管。

距离图辅助监督的做法是在分割头的旁边增加一个回归头,让网络预测每个像素到最近血管边缘的距离。这可以让网络学习到血管的形态结构和连续性,减少断裂。

在我实际测试中,最有效的还是损失函数层面的调整——在Dice损失中加入对血管类别像素的权重,增加细血管在前景损失中的占比。但注意不要过度加权,否则会造成假阳性增多。

6. 常见问题与排查技巧

6.1 指标上不去,先查掩码

最常见的“AUC死活不到0.95”的原因,不是模型不行,而是没有考虑掩码。眼底图像视场外的黑色区域,如果被当成背景参与损失计算,模型会倾向于把视场外黑色也预测为背景,这对Acc影响不大,但对SEN和SPE有影响。更严重的情况是,部分数据集的标注文件范围并不是全图,如果直接拿全图GT和全图预测来算Dice,Dice会被视场外背景大量稀释。

排查方法:将输入图像、GT标注和掩码三者在同一个画面上可视化,检查标注是否只存在于视场内部。

6.2 预测结果出现视场边缘伪影

眼底图像视场边缘通常会有弧形高亮区域或渐晕效应,如果训练时没有对边缘区域做特殊处理,模型在推理时经常在边缘产生一条弧形细线,与真实血管形态极为相似,严重干扰视觉判读。

解决方式:在损失中使用掩码忽略视场外区域,同时在训练数据增强中,对图像边缘做半径遮罩,将边缘外像素全部置为背景,这样模型不会学到边缘特征。

6.3 训练集和验证集的数据泄漏

DRIVE和STARE没有受试者层面的身份区分,但CHASE_DB1是有受试者ID的,同一受试者的左右眼图像高度相似。如果随机划分,很容易把同一受试者的左眼划入训练集、右眼划入验证集,导致模型“作弊”,指标虚高。最好的做法是严格按受试者ID划分,而不是按图像ID划分。

DiaRetDB1也存在类似问题,因为没有固定的评测协议,论文最好能说明自己使用的是哪些图像文件,方便其他人复现。

6.4 backbone效果对比与误区

不少开源代码在血管分割上习惯直接载入ImageNet预训练的ResNet作为编码器。对于DRIVE这类数据量极少的任务,这往往比从头训练的U-Net效果还好,原因是ImageNet预训练权重真正带来了底层纹理和形状的泛化能力。

但也有陷阱。ImageNet预训练模型默认接受的是三通道输入,输入是绿色通道时,需要把单通道复制成三通道以适应模型输入。然而绿色通道与自然图像的色彩分布差异很大,有时反而会因为特征分布偏移导致效果变差。实际测试中,在DRIVE上,用单通道从头训练的轻量模型,并不亚于使用ImageNet权重的ResNet34。

6.5 locating病灶对血管分割的干扰

当图像中存在硬性渗出时,渗出区域的边缘呈亮黄色弧线,在绿色通道中的纹理与血管早期分支非常相似,模型容易把渗出的边界误判为血管。STARE和DiaRetDB1中尤其常见。

经验策略:训练时对病灶区域的预测结果单独统计错误类型。如果发现模型容易在病灶区域产生假阳性,可以在数据增强中加入对病灶区域的局部对比度扰动,或者引入对抗式学习思路,让模型的血管分支更依赖于拓扑连续性而不是局部强度边缘。

7. 模型在公开数据集上的表现参考

近几年各类SOTA方法在这几套数据集上的数值已经比较饱和。以下是常见范围内的参考数据,具体数值会因预处理、训练划分和损失函数的不同而有所浮动:

数据集常用指标范围(U-Net级别)SOTA参考范围
DRIVEAUC 0.96~0.98AUC 0.987以上
STAREAUC 0.96~0.98AUC 0.991以上
CHASE_DB1AUC 0.95~0.97AUC 0.985以上
DiaRetDB1指标报告较少,通常报告DiceDice 0.80~0.85

如果你复现的模型达不到上述区间的下界,不用急着怀疑模型结构,更应优先排查预处理、损失函数、掩码和评估方式。很多论文的“微小提升”本质上来自训练细节,而不是结构创新。

8. 最后分享一点个人体会

我在做视网膜血管分割时,最大的感受是:数据集的标注细节对最终效果的影响,往往比模型结构的影响更大。DRIVE和STARE虽然被反复用了十几年,但每套标注在细血管、交叉点、病灶遮挡处的处理方式都存在差异,盲目混用不同数据集的标注规范,会导致模型学到错误的“标注风格”而不是真正的血管形态。

建议读到这里的你,无论用哪个数据集,第一件事永远是可视化标注。把图片、GT、掩码叠加在一起保存下来,循环翻看几十张图,你会比直接训练模型更快地理解这个数据集的“脾气”。后面再调模型、调指标、调损失函数,都有了明确的感知方向。

另外一个锦囊是:如果想在小数据集上快速得到可展示的效果,不要一上来就训练端到端网络,先做一个经典图像处理pipeline试试——绿色通道加CLAHE,再配合Gabor滤波或Frangi滤波,能在DRIVE上拿到一个比全背景预测好得多的分割结果。这个结果不是用来提交论文的,而是用来确认自己的评估代码、可视化流程是否正确。很多细小但影响全局的bug,都能在这个环节暴露出来。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询