在这里插入图片描述

眼底疾病(如视网膜病变、青光眼)的早期诊断是降低失明风险的关键,但传统 AI 模型存在疾病覆盖少、泛化能力弱、图文特征对齐不足等问题。本文深入解析 Nature Communications 2025 年发表的 RetiZero 模型 —— 一款融合多源知识的视觉 - 语言大模型,其通过多源异构数据构建、MAE+CLIP 双架构融合、不确定性特征校准三大核心创新,实现了 400 + 眼底疾病的精准识别,零样本诊断性能超越多数眼科医生。本文将拆解 RetiZero 的创新设计、详细实现流程,并分析其在临床场景的应用价值,为医疗 AI 研究者提供技术参考。

一、研究背景与现有痛点

全球眼底疾病负担沉重,但眼科医疗资源分布不均,AI 辅助诊断成为解决方案。然而现有模型存在明显局限:
数据单一:多数模型仅基于特定疾病数据集(如糖尿病视网膜病变)训练,覆盖疾病类别不足 100 种,罕见病诊断几乎空白;
架构缺陷:MAE-based 模型(如 RETFound)缺乏文本语义对齐,无法支持零样本诊断;CLIP-based 模型(如 FLAIR)难以捕捉眼底图像的局部病理细节,图像检索性能差;
泛化能力弱:跨设备、跨人群、跨疾病类别的诊断误差大,需大量标注数据重训练;
数据噪声:多源数据存在图像质量差异、文本描述不统一等问题,影响模型稳定性。
RetiZero 针对上述痛点,通过三大创新突破现有瓶颈,下面逐一解析其核心设计。

二、RetiZero 的三大核心创新方法

2.1 创新一:多源异构数据构建,覆盖 400 + 眼底疾病
RetiZero 的核心优势源于其知识丰富的数据集,这是现有模型无法比拟的。团队整合了三类数据源,构建了 341,896 张眼底图像 - 文本对,覆盖 414 种眼科标签(含罕见病):
公共数据集:29 个公开数据集的 303,124 张图像,统一转换为 “a fundus image of [疾病名称]” 的标准化文本描述;
眼科文献:180 篇文献中提取 23,328 张图像,由 12 位眼科医生标注疾病关键词和文本描述;
在线资源:筛选 15,544 张高质量眼底图像 - 文本对,剔除模糊、曝光异常等低质量数据。
数据处理关键操作:
标签统一:将不同数据源的疾病名称标准化(如 “Bietti 结晶样 dystrophy” 统一命名);
文本清洗:仅保留与图像直接相关的病理描述,剔除标题、背景等无关信息;
质量控制:2 位资深眼科医生审核,排除非标准图像(如局部截图、黑白图)和错误标注。
2.2 创新二:MAE+CLIP 双架构融合,兼顾细节与语义
RetiZero 创新性地结合了 MAE 的局部细节提取能力和 CLIP 的图文语义对齐能力,同时通过 LoRA 低秩适配降低训练成本,模型架构如下:
2.2.1 图像编码器:MAE 骨干 + LoRA 适配
骨干网络:采用 RETFound(基于 MAE 预训练的眼底图像模型)作为基础骨干,冻结其权重以保留对视网膜病变轮廓、细微病理结构的识别能力;
低秩适配(LoRA):在 RETFound 的 Query 和 Value 投影层插入低秩矩阵(r=8),仅训练少量参数(远少于全量微调),即可引入文本语义关联,公式如下:

^

2.2.2 文本编码器:BioClinicalBERT 适配医疗场景
眼底疾病描述含大量专业术语(如 “chorioretinal coloboma” 脉络膜视网膜缺损),传统 CLIP 的文本编码器难以理解;
采用 BioClinicalBERT(基于 MIMIC-III 医疗文本预训练)作为文本编码器,初始化后通过对比学习适配眼底疾病描述,提升语义提取准确性。
2.2.3 不确定性特征校准:Dirichlet 重参数化
针对多源数据的噪声问题,RetiZero 引入基于 Dirichlet 分布的不确定性校准,三步实现特征优化:
证据特征提取:对图文特征相似度应用 Softplus 激活,确保特征值为正:

2.3 创新三:零样本 + 图像检索双范式,适配罕见病诊断
针对罕见病样本稀缺的问题,RetiZero 支持两种无需额外训练的诊断范式:
零样本诊断:仅通过文本提示(如 “诊断:Bietti 结晶样 dystrophy”)即可识别未见过的疾病,无需标注样本;
图像检索诊断:输入待诊断图像,从候选池中检索 Top-K 相似图像,通过相似病例辅助诊断,尤其适合病理特征独特的罕见病。
在这里插入图片描述
2.3 创新三:零样本 + 图像检索双范式,适配罕见病诊断
针对罕见病样本稀缺的问题,RetiZero 支持两种无需额外训练的诊断范式:
零样本诊断:仅通过文本提示(如 “诊断:Bietti 结晶样 dystrophy”)即可识别未见过的疾病,无需标注样本;
图像检索诊断:输入待诊断图像,从候选池中检索 Top-K 相似图像,通过相似病例辅助诊断,尤其适合病理特征独特的罕见病。

三、RetiZero 的详细实现步骤

数据预处理流程

# 伪代码:数据预处理核心步骤
def preprocess_data():
    # 1. 数据读取:公共数据集+文献+在线资源
    public_data = load_public_datasets(29)  # 29个公开数据集
    literature_data = extract_from_literature(180)  # 180篇文献
    online_data = crawl_online_resources()  # 在线资源
    
    # 2. 文本标准化
    public_data["text"] = public_data["label"].apply(lambda x: f"a fundus image of {x}")
    literature_data["text"] = standardize_medical_terms(literature_data["keywords"])
    
    # 3. 数据清洗
    all_data = pd.concat([public_data, literature_data, online_data])
    all_data = filter_low_quality_images(all_data)  # 剔除模糊/异常图像
    all_data = unify_labels(all_data)  # 标签统一
    
    # 4. 划分数据集
    train_data, val_data, test_data = split_data(all_data, ratio=[0.6, 0.2, 0.2])
    return train_data, val_data, test_data

预训练阶段(图文对比 + 不确定性校准)

# 伪代码:预训练核心流程
def pretrain_retizero():
    # 初始化编码器
    image_encoder = RETFound(pretrained=True)  # MAE骨干
    image_encoder.add_lora(rank=8)  # 插入LoRA层
    text_encoder = BioClinicalBERT.from_pretrained("biobert-base-cased")
    
    # 优化器与损失函数
    optimizer = Adam([
        {"params": image_encoder.lora_params()},
        {"params": text_encoder.parameters()},
        {"params": projection_head.parameters()}
    ], lr=1e-4)
    
    # 训练循环
    for epoch in range(100):
        for batch in train_loader:
            images, texts = batch["image"], batch["text"]
            
            # 特征提取
            img_feat = image_encoder(images)
            txt_feat = text_encoder(texts)
            
            # 投影到统一空间
            img_embed = projection_head(img_feat)
            txt_embed = projection_head(txt_feat)
            
            # 对比损失计算
            contrastive_loss = calculate_contrastive_loss(img_embed, txt_embed)
            
            # 不确定性校准损失
            uncertainty_loss = calculate_dirichlet_loss(img_embed, txt_embed)
            
            # 总损失
            total_loss = contrastive_loss + 0.1 * uncertainty_loss  # λ=0.1
            
            optimizer.zero_grad()
            total_loss.backward()
            optimizer.step()

下游任务微调
零样本诊断:无需微调,直接输入文本提示(如 52 种疾病名称),计算图像与文本的相似度排序;
图像检索:仅微调投影头,优化图像特征的相似度计算;
少样本微调:每个疾病仅用 5 张样本,微调 LoRA 层和投影头,AUC 达 0.85+。
关键评估指标
分类任务:Top-1/3/5 准确率、AUC;
检索任务:Precision@1/3/5;
临床验证:医生诊断准确率提升幅度、置信度变化。

更多推荐