1. 项目概述从竞赛到临床的AI青光眼筛查之路最近刚结束了一个挺有意思的项目是围绕AIROGS挑战赛展开的。这个比赛的全称是“AI for Robust Glaucoma Screening”直译过来就是“面向鲁棒性青光眼筛查的人工智能”。乍一听可能觉得又是一个普通的医学影像AI竞赛但深入参与后才发现它的核心命题非常“接地气”直击当前AI医疗落地最痛的几个点如何在真实世界复杂、多变、甚至“脏”的数据环境下依然保持稳定可靠的性能。简单来说这个挑战赛的目标是要求参赛者构建一个AI模型能够仅根据一张眼底彩照就是检查眼睛时拍的那种照片自动判断被检查者是否存在“转诊级青光眼”Referable Glaucoma。所谓“转诊级”指的是青光眼疑似或确诊到一定程度需要由基层或筛查机构转诊至专科医生处进行进一步诊断和干预的病例。这本质上是一个二分类任务输入眼底图像输出“需要转诊”或“无需转诊”。但难点从来不在于任务定义本身。真正的挑战藏在数据里。比赛方提供的训练数据模拟了真实世界筛查会遇到的几乎所有“幺蛾子”图像质量参差不齐有过曝、欠曝、模糊、对焦不准的拍摄设备五花八门不同品牌、型号的眼底相机病变表现复杂多样除了青光眼还混杂了白内障、糖尿病视网膜病变等其他眼病甚至图像中包含了无关的标尺、患者ID文字、相机镜头光晕等伪影。这和我们平时在干净、标准的学术数据集比如Kaggle上那些经过精心清洗的上玩模型完全是两回事。你的模型不仅要学会识别青光眼的病理特征如视杯盘比增大、盘沿切迹、神经纤维层缺损等还得学会“无视”那些图像质量问题带来的干扰具备极强的鲁棒性。这个项目非常适合两类朋友一类是对医学AI特别是计算机视觉在眼科应用感兴趣的研究者或工程师另一类是希望了解如何将AI模型从“实验室精度”推向“临床可用性”的实战派。接下来我会详细拆解我们团队从数据理解、方案设计、模型训练到性能优化的完整过程以及在这个过程中踩过的坑和总结出的经验。2. 核心挑战与数据深度解析在动手写一行代码之前花大量时间理解数据和比赛规则是性价比最高的投入。AIROGS的数据集设计几乎就是为“鲁棒性”这个词量身定做的教学案例。2.1 数据集的“恶意”与价值官方提供了约10万张眼底彩照作为训练集并附带了每张图像的标签转诊/非转诊以及一系列质量标签。这些质量标签是理解挑战的关键图像级质量标签包括“是否可分级”Gradability。一部分图像被标记为“不可分级”意味着由于质量太差连人类专家都无法判断是否有青光眼。在测试阶段模型需要对这类图像输出“不可分级”的预测这是一个额外的分类维度。病灶与伪影标签标注了图像中是否存在其他疾病如病理性近视、糖尿病视网膜病变或伪影如灰尘、睫毛遮挡、光晕。这要求模型必须将青光眼特征与这些混淆因素区分开。设备来源多样性数据来自全球多个筛查项目和临床中心使用了超过15种不同型号的眼底相机。不同设备的成像色彩、对比度、视场角FOV差异巨大。模型必须学会这种设备无关的特征表示。我们最初用一个小型ResNet在数据上跑了个基线结果在内部的干净验证集上表现尚可但一旦遇到质量差的图像性能就断崖式下跌。这让我们意识到不能把这个问题当作一个简单的有监督分类来处理。传统的“预处理-特征提取-分类”流水线在这里会非常脆弱。注意很多团队一开始犯的错误就是试图用非常重的预处理如激烈的对比度增强、锐化来“修复”低质量图像。这往往会引入新的噪声或者破坏图像中本就微弱的青光眼病理特征。我们的经验是预处理宜“柔”不宜“刚”核心任务应该交给模型自身的鲁棒性。2.2 评价指标背后的临床逻辑比赛的官方评价指标是加权后的平均特异性Specificity在满足一定敏感度Sensitivity约束下的最大化。这个指标设计本身就充满了临床智慧。敏感度召回率指的是在所有真正需要转诊的青光眼患者中模型成功识别出来的比例。敏感度太低意味着漏诊率高这是临床绝对不能接受的因为漏诊一个青光眼患者可能导致其不可逆的视力丧失。特异性指的是在所有健康人或无需转诊的个体中模型正确判断为阴性的比例。特异性太低意味着误诊率高会导致大量不必要的转诊挤占宝贵的医疗资源增加患者焦虑和不必要的检查成本。比赛指标在保证高敏感度例如95%的前提下最大化特异性。这完美模拟了真实筛查场景的优先级宁可错杀不可放过但在此基础上要尽可能减少“错杀”假阳性以提升效率。理解这一点决定了我们后续设计损失函数和阈值调整的策略——一切都要向提升特异性倾斜但绝不能以牺牲敏感度为代价。3. 模型架构与方案设计思路面对如此复杂的数据我们放弃了寻找一个“银弹”模型的想法转而采用一种分而治之、多任务学习与集成的混合策略。3.1 核心骨干网络选型我们测试了EfficientNetV2, ConvNeXt, 以及Vision Transformer (ViT) 的各种变体。最终的结论是在这个任务上ConvNeXt系列模型在精度与效率的平衡上表现最佳。其类似Swin Transformer的层级设计和现代化卷积块既能捕捉全局上下文信息对判断视盘整体形态很重要又保持了卷积的局部性和平移不变性优势对图像质量退化相对更鲁棒。我们选择了ConvNeXt-Base作为基础骨干网络。没有选择更大的模型主要是出于两方面的考虑一是计算资源限制二是我们发现在数据噪声很大的情况下过大的模型更容易过拟合到数据中的虚假相关性例如某种特定相机产生的伪影可能偶然与某些标签相关。3.2 多任务学习框架设计这是本项目提升鲁棒性的核心设计。我们构建了一个共享骨干网络但拥有三个任务头的模型主任务头青光眼转诊分类二分类输出转诊概率。这是我们的核心目标。图像质量评估头多分类预测图像属于“可分级”、“不可分级”或介于两者之间的质量等级。这个任务头不直接参与最终决策但它通过共享的骨干网络特征强制模型去学习与图像质量相关的特征表示。在训练时这个头的损失函数会反向传播促使骨干网络学会将质量信息从病理信息中“解耦”出来。设备属性预测头可选我们尝试增加了一个小任务头来预测图像可能来自的设备大类根据图像元数据或风格。目的是为了学习设备不变的特征。但实际效果提升有限且可能引入新的偏见最终在简化版模型中移除了。损失函数设计 总损失是加权和L_total α * L_glaucoma β * L_quality。L_glaucoma用于主任务我们使用了Focal Loss。这是因为数据中存在类别不平衡非转诊样本远多于转诊样本Focal Loss可以自动降低易分类样本大部分是清晰的非转诊图像的权重让模型更关注难分类样本质量差或病变不典型的图像。L_quality用于质量评估头使用标准的交叉熵损失。权重α和β需要仔细调整。初期我们让β较大迫使模型先学会判断质量中后期逐渐增大α让模型聚焦于青光眼分类。这种动态调整策略比固定权重效果更好。3.3 数据增强与预处理策略针对真实世界数据的多样性我们采用了强化的数据增强管道但遵循“模拟真实变异不创造虚假特征”的原则。色彩与亮度扰动模拟不同设备、不同拍摄条件的差异。使用ColorJitter随机调整亮度、对比度、饱和度和色调但扰动幅度控制在合理范围内避免产生自然界不存在的颜色。模糊与噪声添加高斯模糊、运动模糊来模拟对焦不准或患者移动添加高斯噪声来模拟传感器噪声。模拟伪影我们在图像上随机、半透明地添加一些模拟光斑、睫毛阴影的掩膜。关键点这些模拟伪影的位置和强度是随机的且与标签无关防止模型学会通过躲避特定区域的伪影来作弊。空间变换随机水平翻转、小角度旋转。由于视盘在图像中的位置大致固定我们没有使用大幅度的裁剪。预处理仅进行最基础的归一化将像素值缩放到[0,1]和Resize到统一尺寸如512x512。坚决避免使用直方图均衡化等过于激进的增强它们会扭曲视盘区域的细微纹理而这些纹理对于早期青光眼诊断至关重要。4. 训练技巧与性能优化实战有了好的架构和策略训练过程就是精细调校的艺术。这里分享几个让我们模型性能产生质变的关键技巧。4.1 分阶段训练与渐进式学习我们采用了三阶段训练法而不是一股脑地训练到底。第一阶段质量感知预训练目标让模型先成为一个“优秀的图像质量评判官”。操作只启用质量评估任务头用全部数据包括不可分级图像训练骨干网络和质量头。此时模型完全不接触青光眼标签。目的让骨干网络学会提取与聚焦、曝光、伪影等相关的底层和中级视觉特征为后续解耦质量信息打下坚实基础。第二阶段主任务微调目标在已有质量感知能力的基础上学习青光眼分类。操作冻结骨干网络的前几层负责提取低级特征解冻所有层同时启用青光眼分类头和质量评估头进行训练。但此阶段我们使用一个过滤后的数据集只使用被标记为“可分级”的图像。这确保了模型在学习病理特征时不受极端低质量数据的干扰。技巧使用梯度累积来模拟更大的批次大小batch size。由于眼底图像分辨率高单卡batch size上不去梯度累积能稳定训练并有助于模型更好地估计批归一化BatchNorm的统计量。第三阶段全任务联合精调目标让模型学会在遇到质量不确定的图像时做出“不可分级”的决策。操作使用全部数据含不可分级图像同时训练青光眼分类头和质量评估头。此时对于标签为“不可分级”的图像青光眼分类头的损失被置零或赋予一个很小的权重模型主要通过质量头来学习。关键调整在这个阶段我们引入了标签平滑Label Smoothing到青光眼分类任务中。因为真实世界中即使是专家标注在“临界”病例上也存在模糊性。标签平滑可以防止模型对训练标签过于自信提升其泛化能力和校准度。4.2 集成与后处理策略单一模型再强其性能也存在天花板。我们采用了模型集成来进一步提升鲁棒性。时空集成我们训练了同一个ConvNeXt架构的5个不同随机种子的模型。然后在推理时对测试图像进行5种不同的增强仅包含测试时增强如翻转、小幅旋转将每个增强版本输入每个模型最后对所有预测概率5个模型 x 5种增强 25个预测取平均。这种方法能有效平滑掉模型对于单个图像特定视角或噪声的敏感性。阈值优化比赛最终提交的是一个二分类结果转诊/不转诊。我们不在验证集上简单使用0.5作为阈值。而是根据比赛指标在验证集上绘制敏感度-特异性曲线找到满足目标敏感度如96%条件下能使特异性最大的那个阈值。这个阈值才是我们最终用于测试集分类的决策边界。质量门控模型自身预测的图像质量分数也被利用起来。如果某张图像的“不可分级”概率超过一个很高的阈值如0.9我们可以选择直接将其输出为“不可分级”而不是使用青光眼分类结果。这相当于一个安全机制。5. 踩坑实录与经验总结这个项目一路走来坑没少踩下面这些经验都是真金白银换来的。5.1 数据泄露与验证集构建坑1天真的随机划分最初我们随机划分了训练集的80%作为训练20%作为验证。结果模型在验证集上表现极好但提交后分数很低。原因在于同一个患者的左右眼图像可能被分到了训练集和验证集或者来自同一筛查批次、同一台设备的图像被分散了。这导致了数据泄露模型在验证集上“见过”类似的患者或设备特征。解决方案严格按患者ID进行分层划分。确保同一个患者的所有图像要么全在训练集要么全在验证集。如果可能最好按筛查中心或设备来划分更能模拟模型遇到全新数据源时的表现。5.2 过拟合与泛化陷阱坑2过度依赖数据增强有一版模型我们使用了极其激进的数据增强包括夸张的色彩扭曲和复杂的弹性形变。模型在训练集上loss降得很低但验证集loss早早就开始上升。这是因为过于“人造”的增强让模型学习到的特征分布与真实世界分布偏离了。解决方案增强策略必须可解释、合逻辑。每增加一种增强都要问自己这种变化在真实的眼底相机拍摄过程中会发生吗同时密切监控训练集和验证集损失曲线。如果两者差距迅速拉大首要怀疑的就是增强策略或模型复杂度问题。坑3忽视模型校准我们的模型输出的是概率但直接拿这个概率和阈值比较发现模型的置信度经常“虚高”或“虚低”。例如对于一个实际概率只有0.6的样本模型可能输出0.9。这在需要根据概率做风险评估的临床场景中是危险的。解决方案在训练后使用温度缩放Temperature Scaling或Platt缩放等方法来校准模型。我们在一个保留的校准集上优化温度参数T使得模型输出的概率能更好地反映其实际正确的可能性。校准后的模型其预测概率更具参考价值。5.3 工程与效率优化坑4推理速度过慢最初的集成方案5模型x5增强导致单张图片推理需要数秒完全无法满足大规模筛查的吞吐量需求。解决方案模型蒸馏训练一个轻量化的学生模型如MobileNetV3去模仿我们集成模型的输出概率软标签。学生模型在精度上仅有微小损失但速度提升了一个数量级。TensorRT加速将最终选定的模型转换为TensorRT引擎利用FP16或INT8量化进一步加速在GPU上可实现毫秒级推理。测试时增强TTA取舍我们发现水平翻转和原图预测的贡献最大其他增强方式收益递减。最终线上服务只保留了水平翻转TTA在精度和速度间取得了良好平衡。6. 从竞赛到部署的思考赢得比赛只是一个开始如何让这个模型在真实的诊所或筛查车上跑起来是另一个维度的挑战。6.1 部署架构考量我们设计了一个简单的微服务架构服务端使用FastAPI封装模型推理逻辑提供RESTful API。API接收眼底图像二进制数据返回JSON格式的预测结果包括转诊概率、质量评分、最终分类建议。预处理一致性这是重中之重必须确保部署环境中的预处理流程Resize、归一化参数与训练时完全一致哪怕一个像素值的偏差都可能导致性能显著下降。我们将预处理代码固化在服务内。硬件适配考虑到基层医疗机构可能只有CPU服务器我们除了提供GPU优化版本也提供了使用ONNX Runtime在CPU上高效推理的选项。6.2 人机协同与可解释性AI模型永远应该是辅助工具而非决策者。我们的系统设计始终强调“人机协同”。输出不只是标签系统会输出“转诊概率”如0.87和“图像质量置信度”如0.95。高概率转诊高质量图像可以给医生高优先级提示低概率转诊低质量图像则强烈建议重新拍摄。可视化注意力图我们使用Grad-CAM生成了类激活热力图。在界面上医生可以看到模型主要关注了图像的哪些区域理想情况下应该聚焦在视盘和视杯区域。这不仅能增加医生对AI结果的信任度当模型判断错误时医生也可以通过热力图发现它是否关注了错误区域例如被白内障遮挡的区域或图像边缘的伪影从而做出更明智的决策。持续学习与反馈闭环我们设计了简单的反馈机制允许医生在系统中对AI的预测进行“确认”或“纠正”。这些纠正后的数据被安全地匿名化存储可以作为未来模型迭代更新的宝贵数据源。构建这个面向真实世界的青光眼筛查模型整个过程就像在充满迷雾的森林中开辟一条可靠的小路。最大的感悟是在医疗AI领域对数据背后临床逻辑和现实约束的理解其重要性丝毫不亚于模型算法本身。一个在干净数据集上刷到99%精度的模型可能在真实场景中毫无用处。鲁棒性不是靠某个神奇的模型架构获得的而是通过数据策略、多任务学习、训练技巧和系统工程化一点一滴构建起来的防御体系。这个项目也让我更深刻地认识到好的AI医疗产品其终点不是模型指标而是能否无缝、稳定、可信地融入现有的临床工作流真正为医生减负为患者造福。这条路很长但AIROGS这样的挑战赛无疑是指引方向的一块重要路标。