做医疗AI最折磨人的往往不是模型,而是数据。这两年我帮不少开发者和学生搭过医疗AI的基线实验,几乎每个人都会在数据集下载这一步卡住——要么找不到合适的免费数据,要么找到了却因为注册审批流程不熟悉,硬生生拖上一周。所以我把这些年实际用过的、对个人研究和教学开放的医疗AI开源数据集整理成一份清单,附上获取路径和注册指南,覆盖医学影像、医疗文本、生理信号和药物化学几个主要方向。适合正在找baseline数据集的在校研究生、想入行医疗AI的工程师,以及做大模型医疗评测的算法同学。
先说清楚,这篇不是简单的链接剪报。医疗数据集和普通CV数据集最大的区别在于:大多数都不能像街景数据集那样匿名直接下载,必须先过一道申请审批。我见过有人把时间全耗在找链接上,结果下载下来后才发现任务类型完全不匹配、类别分布严重不平衡、标注格式读不懂。所以我会把每个数据集适合什么任务、文件怎么组织、标注怎么解析都讲清楚,拿到手就能直接进训练流程。
1. 先想清楚:你的任务类型决定数据选型
1.1 不同医疗AI任务对应不同数据形态
很多人第一步就走错了,不是找不到数据集,而是拿着一个分类任务的数据集硬做检测,或者反过来。医疗AI听起来范围窄,实际上内部差异非常大,至少可以分成下面几类:
- 医学影像分类:判断一张X光片有没有肺炎、一张病理图是不是癌变。需要的数据是图像文件加类别标签,最常见,也最容易上手。
- 目标检测与定位:在CT序列里框出肺结节位置。需要边界框标注,通常是XML或JSON格式,数据量要求比分类高很多。
- 语义分割:把MRI图像中的肿瘤区域逐像素标出来。需要像素级掩码,标注成本最高,数据量通常也最小。
- 医疗文本NLP:电子病历、医学问答、检查报告。需要结构化文本和对应的标签或问答对。
- 时序生理信号:心电图、脑电图这类一维信号。需要原始波形数据和节拍标注。
- 多模态:比如用胸片图像加文本报告做跨模态检索或自动报告生成,这种数据集最稀缺,也最值得提前占坑。
我把这几种任务形态列在前面,是因为下载数据之前,你最好先写一行伪代码确认输入输出长什么样。见过某开发者花了三天下载一个大型病理数据集,结果他做的是检测任务,病理数据集只提供patch分类标签,最后只能自己写代码把patch重新拼接,整个过程痛苦到怀疑人生。
1.2 判断数据集可用性的四个维度
同样的病种、差不多的数据量,实际用起来差距可能非常大。我已经习惯在下单下载前,先用四个维度给数据集打个分。
| 评估维度 | 看什么 | 为什么重要 |
|---|---|---|
| 数据规模 | 样本数、病例数还是图片数 | 很多数据集宣称几万张,实际只有几百个病人,训练时数据高度相关 |
| 标注质量 | 标注人数、是否有专家复核、标注一致性指标 | 医疗标注门槛高,众包标注结果经常噪音大 |
| 类别分布 | 正负样本比例、是否有亚型细分 | 类别不平衡会直接毁掉你的损失函数 |
| 格式与合规 | 文件格式、是否有DICOM头信息、使用协议限制 | 格式决定预处理工作量和能否商用、能否发表 |
这四个维度里,我最看重新旧版本和病例数。医疗图像数据集特别容易出现“一人多图”的情况,一个病人的几十张切片全部落在同一个训练集里,模型会严重过拟合到这个病人的设备噪声和扫描参数上。下载前仔细看数据说明里有没有按病人划分训练集,没有的话一定要自己做。
2. 十大免费开源医疗AI数据集速查清单
这里先说明一个务实的选择:我为什么不直接贴出一堆下载链接。做过医疗AI的人都知道,这些数据集基本都采用动态审批制,同一份数据在不同时期会更换申请入口、调整协议版本,链接存活周期短则几个月长则一两年,整理成一篇“永久链接”没有任何意义。我按照数据方向给出检索关键词和标准获取方式,你在对应学术数据平台或官方Challenge页面输入关键词,永远能找到最新入口。
2.1 胸部影像:分类与检测方向的两个常用数据集
清单1:公开胸部X光肺炎分类数据集(检索关键词:pneumonia chest x-ray dataset)
这个数据集几乎是医疗影像入门的第一个数据集,已经成了很多公开课的默认作业数据。图像本身是便携式胸片,分为正常和肺炎两类,颗粒感很重,但正因为有噪声,训练出来的模型在真实场景里不容易过拟合。文件是标准PNG格式,类别信息在CSV里,读起来零负担。
获取方式比较友好,不需要提交复杂的研究计划,只需要在数据集主页填一个简单的申请表单,说明用途是教学或研究,基本当天就能拿到下载权限。适合用来跑通完整的分类pipeline,也适合做数据增强对比实验。缺点也很明显:类别分布不均衡,而且来源单一,模型很容易记住特定设备的成像风格。
清单2:胸部CT结节检测数据集(检索关键词:lung nodule CT dataset / CT screening)
做检测任务绕不开这个方向,CT序列里标注肺结节的边界框和良恶性属性。数据量通常标注为“包含数千个CT扫描”,但实际使用时要注意,很多扫描是完全正常的阴性样本,真正带结节标注的占比不算高。文件格式几乎都是医学影像标准格式DICOM,标签存在单独的CSV或XML里,坐标系和原始图像的对应关系需要花时间理清。
申请流程比胸片严格,通常需要提供机构邮箱、个人主页、研究机构名称,并签署一份数据使用协议。审批周期短的几天,长的两周,建议注册时就把研究目的写具体,后面会细说。这块数据做检测任务时,负样本挖掘非常关键,我建议把未标记结节但扫描正常的CT层也纳入训练,否则模型容易把血管截面误判成结节。
2.2 病理与皮肤:面向分割和多分类的数据集
清单3:病理组织切片数据集(检索关键词:histopathology patch dataset / WSI dataset)
病理是医疗AI里标注成本最高的方向之一。公开可用的数据主要集中在几种常见癌种的病理切片上,有patch级别的分类标注,也有部分像素级分割标注。数据量看起来很大,一个切片就能裁出几万个patch,但要注意:同一张切片切出来的patch高度相关,必须按切片来源划分训练集和验证集,否则指标会虚高得离谱。
获取路径通常是申请一个数据集访问权限,有的要求填写具体研究课题名称,有的还会在批准后给你一个下载脚本而不是直链。标注格式常见的是JSON或专门的病理标注格式,读之前最好先看官方文档里坐标系是像素坐标还是归一化坐标。
清单4:皮肤病变多分类数据集(检索关键词:skin lesion classification dataset / dermoscopic images)
皮肤镜图像在公开数据集里算是比较“干净”的,因为拍摄条件相对统一,背景干扰少,类别覆盖了色素痣、黑色素瘤、基底细胞癌等常见病变。很多版本还提供了皮肤镜图像和对应病理诊断的映射,适合做多分类和置信度校准。
多数皮肤数据集可以直接下载,不需要复杂审批,有些甚至提供了API供程序批量拉取。文件组织一般是images目录加一个CSV元数据文件,包含病变类别、定位信息、肤色等属性。我用这个数据集做实验时最大的体会是:类别极度不平衡,恶性样本占比常常只有百分之几,训练时要用加权采样或Focal Loss,光改损失函数就想解决远远不够。
2.3 脑影像与眼底:面向分割和定位的数据集
清单5:脑肿瘤MRI分割数据集(检索关键词:brain tumor MRI segmentation dataset)
脑肿瘤MRI数据几乎是医学影像分割入门必须跑一遍的数据。模态上通常包含T1、T1增强、T2、FLAIR四种序列,标注把肿瘤区域细分为水肿、增强肿瘤和坏死核心三个子区域,这也是很多分割比赛的标准设定。数据格式是NIfTI,后缀为nii或nii.gz,需要专门的医学影像库读取,不能直接用OpenCV打开。
获取方式通常是申请制,上传签署好的使用协议后,系统会通过邮件发送下载凭证。NIfTI文件的原始像素方向和坐标信息很复杂,我在4.2节会详细说容易踩的坑。
清单6:眼底视网膜血管数据集(检索关键词:retinal vessel segmentation dataset)
视网膜眼底图像主要来自糖尿病视网膜病变筛查项目,标注内容一般是血管分割的像素级掩码,有的版本还附带视盘定位和病变分级。图像是标准格式,分辨率不低,标注掩码大多数是二值图,适合做语义分割的练习和网络结构对比。
申请难度不高,多数只需要注册账户并同意协议即可,部分数据集需要填写用途说明。这个数据集的坑在预处理:眼底图像经常有黑色边框、光照不均、血管对比度在不同区域差异大,跑分割网络之前建议先做CLAHE增强和视野裁剪,能直接提升好几个点的Dice。
2.4 医疗文本与多模态:面向NLP和大模型的数据集
清单7:医疗问答与电子病历数据集(检索关键词:medical Q&A dataset / clinical notes dataset)
如果你在做医疗大模型或信息抽取,这类文本数据比影像更稀缺。公开的医学问答数据主要来源于医学考试题整理、医生问答社区脱敏数据,电子病历数据则有严格的隐私限制,通常只能申请到已经去标识化的版本。文本格式以JSON或CSV为主,字段包括问题、答案、主题类别、难度等级。
这方向的数据集获取两极分化:问答数据很多可以直接下载,电子病历数据则需要更长的审批链,有的还要通过远程桌面方式在数据所有方的服务器上完成实验,不能把数据带走。收到这种约束条件不要意外,这是医疗文本数据的常态。
清单8:医学影像报告多模态数据集(检索关键词:chest x-ray report generation dataset / image-text medical dataset)
这类数据集是最近两年医疗多模态研究的热点,内容包括胸部X光片和对应的放射科报告文本,可以做图像到文本的自动报告生成、文本到图像的检索,也可以拿来做跨模态预训练。数据规模从几千到几十万对不等,质量差距主要看报告是不是完整结构化的,有些报告只有结论句,有些包含完整的影像所见。
这类数据一般申请周期长、协议条款细,很多明确禁止用于商业产品,只允许非商业学术研究。报告文本里有大量缩写和专业表达,比如“无明显实变”“请结合临床”,这些术语一致性很高,预处理时做术语归一化对后续模型效果影响显著。
2.5 时序生理信号与药物化学:面向信号处理和AI制药的数据集
清单9:心电信号分类数据集(检索关键词:ECG arrhythmia dataset / ECG classification dataset)
心电信号数据以一维时序波形的形式存在,常见的是12导联或单导联记录,采样频率从几百Hz到上千Hz不等。标注包含心律类型,如正常、房颤、房早、室早等,数据集规模从几千条到十几万条记录不等,是目前免费心电数据里覆盖最广的方向之一。
获取路径通常也是申请制,但审批速度比影像数据快,有些只需要登记邮箱即可。时序数据的坑主要在于导联顺序不统一、采样率不一致,训练前务必重采样到统一频率,并确认所有样本的导联顺序一致,否则模型学到的可能是导联顺序相关的假特征。
清单10:药物分子性质数据集(检索关键词:molecular property dataset / drug discovery dataset)
AI制药方向需要的是分子结构数据和对应理化性质、毒性、靶点活性标签,最常见的分子表示是SMILES字符串,可以通过分子指纹或图神经网络建模。数据规模比较大,但性质预测任务的标签来自不同实验条件,存在较大噪声,直接端到端训练容易过拟合到实验批次效应。
这类公开数据一般不需要复杂审批,网页注册后直接下载,适合做分子性质预测、分子生成模型的预训练和评估。我建议拿到数据后先看数据来源和实验条件列,做特征分析时把来源信息也作为辅助特征,能有效提升泛化性。
3. 从注册到下载:医疗数据集申请的完整流程
3.1 申请前要准备的四个材料
很多数据集卡在申请环节,不是因为资质不够,而是资料没备齐。我每次申请前都会先准备好四样东西:
- 机构邮箱:绝大多数医疗数据集不接受个人邮箱注册,这是最容易被卡住的地方。可以用学校或单位的教育邮箱,申请通过率完全不一样。
- 个人主页或研究介绍:不一定要求是个人网站,实验室的介绍页页可以。目的是让审核人员确认你确实是研究背景。
- 研究方向说明:一句话到一段话都行,但必须写清楚你要用数据做什么任务,比如“使用胸部CT数据训练肺结节检测模型,并评估在不同设备上的泛化能力”。
- 签署好的使用协议:有些数据集在申请时就要上传签名版,下载之后还会让你再签一次,提前把PDF签名准备好能省两三天。
3.2 标准申请七步流程
医疗数据集的申请流程虽然各家细节不同,但框架高度一致,照着下面七步走基本不会错:
- 在官方数据主页用机构邮箱注册账号。
- 进入数据集申请页面,选择研究用途或非商业用途。
- 填写申请表,包括研究机构、职位、研究内容摘要、预估使用时长。
- 下载并签署数据使用协议,扫描或电子签名后上传。
- 有些平台会要求导师或实验室负责人确认背书,转给他签字即可。
- 提交后等待审批,正常周期在3到10个工作日。
- 获批后收到下载地址或需要生成API令牌,按文档下载。
注意第3步,研究内容摘要不要只写“研究医疗AI”这种空话。审核人员每天看大量申请,写得越具体、越符合他们数据集的设计目标,通过率越高,处理速度也越快。
3.3 审批邮件模板与提速技巧
这是我用了很多次的高通过率申请模板,可以直接套用。不要出现任何编造的具体机构名,把括号里的内容换成你自己的真实信息就行:
标题:Dataset Access Application for [肺癌结节检测研究]
正文: Dear data access committee,
I am a researcher from a university-affiliated medical imaging lab, focusing on computer-aided diagnosis. I would like to request access to the chest CT dataset for the following non-commercial research purpose: developing and evaluating a deep learning model for pulmonary nodule detection and false positive reduction.
I have read and agreed to the data use agreement. I confirm that I will not redistribute the data, not attempt to re-identify any patient, and only use the data within the approved research scope.
My institutional email is [你的邮箱],and my research profile can be found at [你的主页链接].
Best regards
提速技巧有两个。第一,如果申请系统里能选“所属研究组”,优先填导师或团队负责人的名字,有学术背书的申请处理速度明显更快。第二,提交后如果三个工作日还没动静,可以在工作日的上午给对方发一封礼貌的英文邮件询问进度,多数情况下当天就会得到回复。
4. 数据拿到手之后,先别急着训练
4.1 解压后的目录结构怎么读
下载下来的数据集通常是一个压缩包加一份PDF说明文档。打开压缩包前,先把文档通读一遍,重点看三块:数据目录树、字段说明、引用要求。很多新手跳过文档直接解压,然后发现文件命名规则看不懂。
我习惯在解压后先画一张目录树,把每一个子目录的用途标注出来。医疗数据集常见的组织方式有两种:按病人分文件夹,或者按类别分文件夹。前者的好处是方便做病人级别划分,后者看似简单,实际容易在划分训练集时混入同一病人的多张影像。
4.2 DICOM、NIfTI、PNG这些格式怎么处理
不同格式的处理方式差别很大,提前确认格式能避免浪费大半天时间。
- DICOM:医学影像的标准格式,后缀通常是.dcm,一个文件夹代表一个序列。读取时要用专用库,比如pydicom或SimpleITK。DICOM文件里除了像素,还有病人体重、扫描参数、设备信息等大量元数据,训练前要确认是否做了去标识化。
- NIfTI:神经影像和CT领域常用,后缀是.nii或.nii.gz,一个文件封装了整个三维体数据。读取推荐nibabel,要注意里面的affine矩阵决定体素坐标和物理坐标的映射关系,测试时经常因为忽略方向信息导致预测结果翻转。
- PNG/JPEG:经过预处理的平面图像,直接用图像库读取即可,但要注意保存时是否做了归一化。有些数据集的像素范围是0到255,有些是0到1,还有的做了标准化,看文档确认,否则可视化时一片黑很容易误判。
一个非常容易被忽略的细节是灰度图通道数。很多胸片和CT导出图看起来是灰白图像,实际上保存成三通道RGB,数值转换时如果没有灰度化,模型会额外学到通道间完全冗余的信息,参数量和计算效率都会受影响。
4.3 快速可视化脚本:测试集前只用一张图
拿到数据后,我建议先不写训练代码,先写一个极简的可视化脚本,确认三件事:图像能正常读取、形状和数值范围合理、标注与图像内容对应得上。下面是我常用的DICOM检查脚本,改了路径就能直接跑。
import pydicom import matplotlib.pyplot as plt dcm = pydicom.dcmread("sample.dcm") arr = dcm.pixel_array print("shape:", arr.shape, "dtype:", arr.dtype) print("value range:", arr.min(), "-", arr.max()) print("Modality:", dcm.Modality) print("PatientSex:", dcm.get("PatientSex", "unknown")) plt.imshow(arr, cmap="gray") plt.axis("off") plt.savefig("preview.png", dpi=120, bbox_inches="tight")如果读的是分割掩码,还需要检查标注里有没有值。我以前遇到过一个数据集,下载下来十几个病人的掩码全是空的,查了才发现是切片索引对错了层,模型在空掩码上训练,分割指标直接归零。
from PIL import Image import numpy as np mask = np.array(Image.open("mask.png")) print("mask shape:", mask.shape) print("unique values:", np.unique(mask)) if mask.sum() == 0: print("全空掩码,先检查配准或切片顺序")4.4 别踩的隐私与伦理红线
医疗数据集的协议往往比技术细节更影响你的项目存活。我从几个踩过坑的案例中总结了四条绝对不能做的事:
- 不能在公开仓库里上传原始数据:哪怕数据集允许下载,也不代表你有权再分发,GitHub上因为误传医疗数据被要求下架的先例很多。
- 不能尝试重新识别病人身份:有的数据集虽然做了去标识化,但理论上某些稀有疾病加上年龄性别就能定位到个人。任何时候都不要做数据关联匹配。
- 不要把训练结果直接用于临床决策:很多数据集的协议明确写了“供科研用途,不用于诊断”,在论文里也要注明这一点,避免伦理审查问责。
- 不要跨数据混合后宣称原始版权:不同数据集的使用协议互相独立,混合使用时要保留各自的引用和许可声明。
5. 数据集实操中的常见坑与排查方法
5.1 注册申请提交后长期不通过
我遇到过的最长一次审批拖了一个月。后来分析原因,是研究摘要里写了太多泛泛的套话,审核方不确定数据会不会被滥用。解决办法是把研究目标改成“在胸部CT上开发肺结节检测模型,使用交叉验证评估模型在不同CT设备上的鲁棒性”,目标越明确,对方越放心。另外确认一下邮件是不是进了垃圾箱,很多批准通知会被邮箱误判。
5.2 下载中断或文件损坏
医疗数据集动辄几十GB,用浏览器直接下载非常容易断。优先用官方提供的命令行下载脚本,配合断点续传工具。下载完成后必须校验文件哈希值,和官网提供的MD5或SHA256核对。我见过有人在数据下载阶段就解压失败,重新下载了两次才发现是网络中途截断导致文件不完整。
5.3 标注格式读不出来
标注解析问题几乎每个数据集都会碰到一次。常见的原因有三个:坐标是归一化的,你当像素直接用了;多类别掩码是RGB编码,你二值化了;肿瘤边界在DICOM坐标系里定义,和图像像素坐标系需要转换矩阵。先看标注文件头部,能用脚本打印一条记录,对照文档理解字段含义,不要靠猜。
5.4 训练集和测试集划分不明确
有些数据集只给了全部数据,没有官方划分。这时候最忌讳的是随便随机划分,必须按病人ID分组。同一人的多张影像出现在训练和测试里,会让指标变得异常高,论文审稿人一眼就能看出来。我一般是先按病人ID排序,再对病人做stratified split,保证不同类别比例在训练集和测试集一致。
5.5 不同来源数据混用导致的Domain Gap
很多项目会同时用两三个数据集凑训练数据。这看起来省事,实际上每个数据集来自不同医院、不同设备、不同扫描协议,图像风格差异可能大于真实病变差异。我常用的缓解手段有三个:先做直方图匹配或对比度归一化;训练时每个数据集按比例采样,避免大数据集主导梯度;验证集单独保留每个数据集的子集,分别报告指标,便于定位性能瓶颈。
| 常见问题 | 可能原因 | 排查与解决 |
|---|---|---|
| 申请被驳回 | 研究方向不清晰、邮箱非机构 | 重写申请摘要,换机构邮箱 |
| 下载后解压失败 | 传输中断、文件损坏 | 校验哈希,使用断点续传 |
| CT图像显示方向翻转 | NIfTI affine矩阵未处理 | 读取时使用nibabel的get_fdata并检查qform |
| 分割掩码全空 | 掩码与图像切片顺序不匹配 | 逐层可视化,核对层号 |
| 指标虚高 | 同病人影像跨数据集划分 | 按病人ID而非图片ID划分数据 |
最后聊一点个人体会。公开数据集无论整理得多干净,和真实临床数据之间都隔着一条深沟——公开数据经过筛选和清洗,噪声模式、设备分布都和你在医院实际会遇到的情况不一样。我用这些数据集跑通pipeline后,一般还会再找本地医院的小样本做二次验证,哪怕只有几十例,也能暴露出大量在公开数据上看不到的泛化问题。数据伦理这件事,不要只看协议的条目,要通过申请流程去理解数据背后的敏感性。每次提交申请都当作项目的一部分来认真对待,后面做真实项目时才会少踩很多坑。