想象一家刚成立的小医院影像科:资料库里躺着十万张CT片子,可全科只有一位即将退休的老专家。要教AI助手读片,传统“全监督”路线需要老专家亲手把每张片子的病灶描成精细轮廓——这就像让一位名医抄写整座图书馆的藏书,等抄完,病人早就散场了。好在科里来了三位风格迥异的年轻医生:半监督医生让老专家只带教几个典型病例,自己消化其余的海量片子;弱监督医生只要一份“有/无病灶”的报告单,就自己琢磨病灶究竟长在哪;自监督医生干脆不要任何答案,靠解剖结构自身的规律自学成才。三者共享同一个现实:人类专家的时间永远稀缺,而医疗数据近乎无限。这篇文章,就是带你看懂三位医生各自的看家本领、实战套路与选人用人的心法。

岗位关联

学会在标注稀缺时“用更少的标签撬动更多的数据”,是医学影像AI工程师的核心竞争力——它直接决定一个项目能否在预算与时间都拮据的临床环境中落地。

目录
  1. 可视化演示
  2. 标注稀缺之困
  3. 半监督核心原理
  4. 半监督实战套路
  5. 弱监督热图原理
  6. 弱监督分割实战
  7. 自监督无师自通
  8. 三范式选型复盘
  9. AI 应用场景
  10. Python 演示
  11. 常见误区
  12. 面试题

可视化演示

展示半监督伪标签生成、弱监督CAM分割及自监督对比学习三种标注稀缺场景方案,切换模式查看。

本节配有交互动效(进入视口后自动加载,约 3KB)。

半监督学习 少量标注L+大量未标注U 伪标签PL迭代增强 L∪PL→model, iterate 伪标签扩展训练集

标注稀缺之困

老专家翻开那本泛黄的《标注手册》,第一页写着一行字:“每张片子必须逐像素勾勒病灶轮廓,双人复核签名。”他苦笑着放下笔——按照这个标准,十万张CT够他画到下个世纪。全监督学习就像这本手册要求的那样,假定每个训练样本都配有精确答案:模型从“问题-答案”对里学习,答案越全、越细,学得越扎实。可医学影像偏偏是最贵的答案来源,一位持证影像科医生标注一张分割图需要四十分钟,还要面对漏诊责任的压力。标注,成了整个AI流程里最昂贵的瓶颈。

于是行业把目光投向了一个朴素的问题:能不能让模型少依赖一点人工答案,多依赖一点数据自身的规律?沿着这个思路,三种范式陆续登场。半监督学习手里握着一小撮“金标准”标注,四周是海量的未标注片子,它想的是“用少量精确答案激活大量沉默数据”;弱监督学习把标准降到“只看报告结论”,用一句“右肺上叶有磨玻璃结节”代替像素级勾勒;自监督学习则彻底抛开人工标签,让模型从图像本身的结构里自学。三者合在一起,构成了标注稀缺场景下的完整工具箱。

要理解三者的位置,先看它们共同的参照系——全监督的损失函数。假设我们手头有 N 张带标注的影像,训练目标是让模型预测和专家答案尽量一致:

回归老专家的困境:全监督是“最好的老师、最贵的学生”,每学会一张片子都要付出一份专家时间。三位新来的年轻医生,正是为了在专家时间耗尽之前,把整座图书馆“读”完。

Lsup=1N∑i=1Nℓ(f(xi∣θ), yi)\displaystyle \mathcal{L}_{\text{sup}} = \frac{1}{N}\sum_{i=1}^{N} \ell\big(f(x_i\mid\theta),\, y_i\big)
这个公式是“老专家逐张带教”的数学表达:每张片子都要有答案 $y_i$,模型预测与答案的差距被平均为总损失,训练就是不断缩小这个差距。
  1. 训练数据集$x_i$ 是第 $i$ 张医学影像,$y_i$ 是专家给的标签(分类中是“有/无病变”,分割中是像素级轮廓),$N$ 是标注样本总数。
    Dsup={(xi,yi)}i=1ND_{sup} = \{(x_i, y_i)\}_{i=1}^{N}
  2. 模型预测$f(x_i \mid \theta)$ 表示参数为 $\theta$ 的网络对第 $i$ 张影像的输出,对分割任务来说,输出是与原图同尺寸的概率图,每个像素点都有一个“属于病灶”的概率。
    y^i=f(xi∣θ)\hat{y}_i = f(x_i \mid \theta)
  3. 平均损失$\ell(\hat{y}_i, y_i)$ 度量预测与标签的差异,分类常用交叉熵,分割常用 Dice 损失或交叉熵;对所有样本取平均,就得到需要最小化的总目标 $\mathcal{L}_{sup}$,最优参数 $\theta^{*}$ 由最小化它得到。
    θ∗=arg⁡min⁡θ1N∑i=1Nℓ(f(xi∣θ),yi)\theta^{*} = \arg\min_{\theta} \frac{1}{N}\sum_{i=1}^{N} \ell\big(f(x_i\mid\theta), y_i\big)

半监督核心原理

老专家实在挤不出时间,只认真带教了三例典型肺炎CT。实习生很聪明,他先死死记住这三例的样子,然后自己翻阅剩余几百张片子,凡是他觉得“和典型病例够像”的,就先写上初步诊断、折个角放在一边,当作自己出的练习题,反复核对。这种“先猜、挑有把握的记下来当答案、再学”的循环,就是半监督学习的雏形——它同时拥有一点带标签数据(师父教过的三例)和大量无标签数据(自己翻的几百张)。

半监督的形式化设定很简洁:有 $N$ 个带标注样本,$M$ 个无标注样本,且 $M \gg N$。它隐含一个关键假设——聚类假设:相似的片子大概率属于同一类,所以在特征空间中聚成一团的未标注样本,可以共享邻居的标签。基于这个信念,最经典的策略是伪标签自训练:先用有标数据训练一个初始模型,再对无标数据做预测,挑选置信度最高的预测作为“伪标签”,连同有标数据一起训练新模型,如此迭代。另一个重要支柱是一致性正则:同一张片子经过轻度扰动(旋转、加噪、裁切)后,模型的输出不应剧烈变化,这种“扰动不变性”本身就是天然的教学信号。再配合熵最小化——鼓励模型对无标数据的预测尽量“斩钉截铁”,而非含糊其辞——就构成了半监督的三板斧。

把这套逻辑写成损失函数,可以看到它是在全监督基础上多挂了一项“从无标数据中榨取信号”的项:

回到实习生的故事:他的笔记越折越厚,诊断能力也从三例典型片子的“死记硬背”,逐渐变成能独立应对百变病例的“临床直觉”——半监督的精髓正是用一点真金白银的标注,撬动一整片沉默的数据矿藏。

LSSL=1N∑i=1Nℓ(f(xi∣θ),yi)+λuM∑j=1M1[max⁡kpk(x~j)>τ]⋅ℓ(f(x~j∣θ), y^j)\displaystyle \mathcal{L}_{SSL} = \frac{1}{N}\sum_{i=1}^{N}\ell\big(f(x_i\mid\theta), y_i\big) + \frac{\lambda_u}{M}\sum_{j=1}^{M} \mathbb{1}\big[\max_k p_k(\tilde{x}_j) > \tau\big]\cdot \ell\big(f(\tilde{x}_j\mid\theta),\, \hat{y}_j\big)
这个公式描述的是“实习生折角记笔记”的过程:第一项是师父教过的三例要学扎实;第二项是自己在几百张片子里挑出“非常有把握”的,把猜测当作答案来学。$\tau$ 是信心门槛,$\lambda_u$ 是自学内容的权重。
  1. 有标监督项前半部分与全监督完全一致,在有标样本上计算预测与真实标签的差距,保证模型方向不跑偏。
    Lsup=1N∑i=1Nℓ(f(xi∣θ),yi)\mathcal{L}_{sup} = \frac{1}{N}\sum_{i=1}^{N}\ell\big(f(x_i\mid\theta), y_i\big)
  2. 生成伪标签对无标样本 $\tilde{x}_j$,先让当前模型输出各类别概率 $p_k$,取最大概率对应的类别作为伪标签 $\hat{y}_j$——相当于实习生写下“我认为这是肺炎”。
    y^j=arg⁡max⁡k pk(x~j)\hat{y}_j = \arg\max_k\, p_k(\tilde{x}_j)
  3. 置信度门控指示函数 $\mathbb{1}[\cdot]$ 表示“只有最大置信度超过阈值 $\tau$ 的预测才被采纳”,这是防止低质量猜测污染模型的关键闸门——实习生只折角标记非常有把握的片子,拿不准的翻过。
    1[max⁡kpk(x~j)>τ]\mathbb{1}\big[\max_k p_k(\tilde{x}_j) > \tau\big]
  4. 权重调节$\lambda_u$ 控制无标项整体影响力,通常训练初期设小、后期逐步加大(也叫 ramp-up 策略),让模型先站稳脚跟再放开手脚自学。
    λu=λmax⋅min⁡(1,tTwarm)\lambda_u = \lambda_{max} \cdot \min\big(1, \frac{t}{T_{warm}}\big)

半监督实战套路

实习生的本子越记越厚,但真要他独立画病灶边界,还是心里发虚。医院给他配了两位带教:一位是资深主治医生——以 U-Net 为主干的分割网络,负责从有标数据里学“金标准画法”;另一位是“影子老师”——一个总比学生慢半拍的模型,参数通过学生参数的滑动平均(EMA)不断更新,它不直接学标签,而是专门提供“标准答案的平滑版本”供学生对照。这套师生框架在医学影像圈里叫 Mean Teacher,是半监督分割落地的经典配置。

具体流程分四步走。第一步,用少量有标影像把 U-Net 训练到“基本会画”;第二步,对无标注影像施加两种不同的随机扰动(比如仿射变换、高斯噪声),分别交给学生和影子老师,计算它们输出之间的差异——差异大说明学生学得还不稳,需要修正;第三步,把影子老师输出中不确定性低的区域提取出来,当作高质量的伪标签回灌给学生;第四步,重复迭代。整个过程里,置信度过滤是生命线:医学影像噪声大、病灶形态多变,如果伪标签不设门槛,等于让实习生把每一个错误猜测都折角当笔记,错误会像雪球一样越滚越大。

扰动下的输出一致性约束,是这套流程的数学核心。对每张无标影像,我们要求学生与影子老师的预测互相靠拢:

两位老师一个主攻、一个把关,学生在高置信区间大胆学、低置信区间谨慎问。这就是 Mean Teacher 式半监督在医学影像分割中的日常:不需要更多专家的笔,只需要让已有的每一笔标注发挥出十倍杠杆。

Lcons=1∣Du∣∑x∈Du∥Fθ(A(x))−Fθ′(A′(x))∥22\displaystyle \mathcal{L}_{cons} = \frac{1}{|D_u|}\sum_{x\in D_u} \big\| F_\theta(\mathcal{A}(x)) - F_{\theta'}(\mathcal{A}'(x)) \big\|_2^2
这个公式描述“两个老师对照批改”:对同一张无标片子,学生看一种版本、影子老师看另一种版本,两者的预测输出必须尽量一致。差值平方和就是“批改分差”,模型要努力把分差压到零。
  1. 随机扰动$\mathcal{A}(x)$ 和 $\mathcal{A}'(x)$ 是两张经过了不同随机扰动的同一影像。扰动是“考试变题”——不会改变病灶本质,却考验模型是否真的抓住了结构而非死记硬背。
    x~=A(x),x~′=A′(x)\tilde{x} = \mathcal{A}(x), \quad \tilde{x}' = \mathcal{A}'(x)
  2. 师生双视角$F_\theta$ 是学生网络,$F_{\theta'}$ 是影子老师网络。影子老师不参与梯度更新,而是用 EMA 方式跟踪学生的历史状态,提供更稳定的“参考答案”。
    θ′←m θ′+(1−m) θ\theta' \leftarrow m\,\theta' + (1-m)\,\theta
  3. 平方误差$\| \cdot \|_2^2$ 逐像素比较两个输出的差异。该差值在无标数据上反向传播给学生,形成无监督的学习信号——影子老师的话虽不是金标准,却足以引导学生走向稳健。
    Lcons=Ex[∥Fθ(x~)−Fθ′(x~′)∥22]\mathcal{L}_{cons} = \mathbb{E}_{x}\big[\|F_\theta(\tilde{x}) - F_{\theta'}(\tilde{x}')\|_2^2\big]

弱监督热图原理

老专家连轮廓都懒得画了,只愿意在每个病例报告单上写一句话:“右上肺有结节”或“未见异常”。实习生拿到一摞只有结论、没有批注的报告单,反倒琢磨出一招妙计:既然分类模型说“有结节”,那它一定是看到了某些像素才敢下结论——把模型“目光停留的地方”反过来画出来,不就是病灶的位置吗?这个“目光地图”在学术上叫类激活图(CAM),它是弱监督定位的第一块基石。

弱监督学习的核心设定,是只用图像级标签(整张片子“有没有病”)来训练模型完成定位甚至分割任务,彻底绕开昂贵的像素级标注。CAM 的实现并不复杂:取一个训练好的分类网络,把最后一个卷积层的每个通道特征图保留下来;分类层不是直接对整张图下结论吗?它对每个通道都有一个权重,这个权重恰好刻画了“该通道对判定结果贡献了多少”。把所有通道按权重加权叠加,再做一个 ReLU 截断,就得到了一幅“哪里让模型产生这个结论”的热力图。

CAM 的数学表达如下。设最后一个卷积层有 $K$ 个通道,$f_k(x,y)$ 是第 $k$ 个通道在位置 $(x,y)$ 的响应值,$w_k^c$ 是分类层对类别 $c$ 在第 $k$ 个通道上学习的权重:

报告单是“结论”,CAM 把结论翻译成“目光落点”。实习生据此画圈,虽然圈得粗糙,却已经能大致锁定病灶所在的区域——而这,正是弱监督分割实战的起点。

Mc(x,y)=ReLU(∑k=1Kwkc⋅fk(x,y))\displaystyle M_c(x,y) = \mathrm{ReLU}\Big(\sum_{k=1}^{K} w_k^{c} \cdot f_k(x,y)\Big)
这个公式是“把报告单翻译成目光落点”:每个通道都在“看”影像的某个侧面,分类权重 $w_k^c$ 告诉我们哪个侧面最有说服力,加权叠加后热区就是病灶所在。
  1. 卷积特征图$F \in \mathbb{R}^{K \times h \times w}$ 是最后一个卷积层的输出。每个通道 $f_k$ 相当于一种“视觉滤波器”,有的响应血管纹理,有的响应结节边缘。
    F={fk(x,y)}k=1K,1≤x≤w,  1≤y≤hF = \{f_k(x,y)\}_{k=1}^{K}, \quad 1 \le x \le w,\; 1 \le y \le h
  2. 分类权重$w_k^c$ 是全局平均池化后全连接层中,类别 $c$ 对第 $k$ 个通道的权重。它解答了“这个通道对判定为 $c$ 有多重要”——权重越大,该通道的激活区域越可能是病灶。
    pc=softmax(∑k=1Kwkc∑x,yfk(x,y))p_c = \mathrm{softmax}\Big(\sum_{k=1}^{K} w_k^c \sum_{x,y} f_k(x,y)\Big)
  3. 加权叠加与截断按权重把所有通道热图叠加,并用 $\mathrm{ReLU}$ 抑制负值。负激活往往对应“与类别相反”的证据(如“非病灶”区域),截断后热区更干净。
    Mc(x,y)=max⁡(0,∑k=1Kwkc⋅fk(x,y))M_c(x,y) = \max\Big(0, \sum_{k=1}^{K} w_k^c \cdot f_k(x,y)\Big)

弱监督分割实战

画圈容易、圈得准难。实习生很快发现:CAM 热区往往只覆盖病灶最“醒目”的一小块——比如结节中心亮得刺眼,边缘的毛刺、分叶却被忽略。这就像用激光笔照地图,只照亮了城市中心,却看不清整个城区。要得到完整的分割结果,还需要两招后处理:种子区域生长和对抗擦除。

种子生长的思路,是把热区里响应最强的几个点当作“种子”,沿着图像纹理逐步向外扩散——好比一滴墨落在宣纸上,顺着纸张纤维自然晕染。对抗擦除更聪明:先把已知的热区“涂黑”,再让模型重新分类,逼它去寻找第二个、第三个关注区域——就像老师问“这处看过了,还有哪里异常?”反复提问几次,模型就把分散的病灶区域一块块拼齐了。最后,把 CAM 热图做阈值化,生成粗略的伪分割 mask,再交给全监督分割网络作为训练标签,这就是弱监督语义分割(WSSS)的经典流水线。

阈值化的公式极其简单,却决定了伪 mask 的质量:

墨迹晕染加上“这里看过了,还有哪里?”的反复追问,让一句“有结节”的粗报告,最终长成了一幅可训练的分割标签。弱监督从来不是与全监督为敌,恰恰是在标注预算被卡死时,把历史报告这种“废弃燃料”重新点着的务实选择。

Sc(x,y)=1[Mc(x,y)≥τ⋅max⁡(x′,y′)Mc(x′,y′)]\displaystyle S_c(x,y) = \mathbb{1}\Big[ M_c(x,y) \geq \tau \cdot \max_{(x',y')} M_c(x',y') \Big]
这个公式是“把灯光地图变成可填充的轮廓”:以全图最亮点为基准,凡是亮度超过基准 $\tau$ 比例的位置,一律判定为病灶前景,其余为背景。
  1. 归一化基准$\max_{(x',y')} M_c$ 取整张热图的最大激活值,用它把亮度归一到“相对强度”。这样可以兼容不同病人的影像对比度差异。
    Mmax=max⁡(x′,y′)Mc(x′,y′)M_{max} = \max_{(x',y')} M_c(x',y')
  2. 阈值判定位置 $(x,y)$ 的激活值若超过 $\tau \cdot M_{max}$,指示函数 $\mathbb{1}[\cdot]$ 取值 1,标记为前景;否则为 0,标记为背景。$\tau$ 通常取 0.2 左右,太小噪声多、太大漏检多。
    Sc(x,y)={1,Mc(x,y)≥τMmax0,否则S_c(x,y) = \begin{cases} 1, & M_c(x,y) \ge \tau M_{max} \\ 0, & \text{否则} \end{cases}
  3. 伪标签输出得到的 $S_c$ 是粗略的分割掩码。实务中还会叠加超像素边界修正或 CRF(条件随机场)细化边缘,再送入分割网络训练。
    Sc→CRF 细化S^c→训练fsegS_c \xrightarrow{\text{CRF 细化}} \hat{S}_c \xrightarrow{\text{训练}} f_{seg}

自监督无师自通

故事进入最绝的一章:这次没有专家、没有报告单,只有冰柜里十万张从未被解释过的影像。实习生把心一横,干脆自己当出题人。他把一张正常肺CT的局部小方块抠掉,然后尝试凭周围的解剖结构“填空”——肋骨走势、血管分叉、气管位置都有固定的规律,填对了,说明他真的读懂了图像结构;他还玩“连连看”:同一病人的相邻层面应该比不同病人的层面更相似,能认出这种相似关系,就掌握了影像内容的核心特征。这些自己设计的任务,学术上叫代理任务(pretext task),它们不需要任何人工标注,自动为模型生成学习信号,这就是自监督学习。

自监督在医学影像里有两条主流路线。其一是对比学习:把同一张影像做两次不同的增强,当作“正样本对”,把其他影像当作“负样本”,训练目标是让正样本的特征距离近、负样本的特征距离远。其二是掩码自编码器(MAE):像填空一样,遮住影像的大部分区域,迫使编码器从可见的局部推断全局结构。无论哪条路线,产出的都是高质量的预训练权重——好比一个已经熟读解剖图谱的学生,之后再跟老师学诊断,自然事半功倍。医学影像领域基于这两种范式涌现了 CONCH、MAE 预训练等模型,在少量标注的微调场景下显著刷新了精度纪录。

对比学习的目标函数 InfoNCE 是理解这条路线的一把钥匙:

自监督像一门“无师自通”的解剖课。实习生付出的不是标注成本,而是大量的原始影像——好在医院最不缺的就是这个。他啃完十万张片子后,已经对内里的结构了然于胸,只待一点点带教,就能成为真正的诊断高手。

LInfoNCE=−log⁡exp⁡(sim(zi,zi+)/τT)∑k=1Kexp⁡(sim(zi,zk)/τT)\displaystyle \mathcal{L}_{InfoNCE} = -\log \frac{\exp\big(\mathrm{sim}(z_i, z_i^{+})/\tau_T\big)}{\sum_{k=1}^{K}\exp\big(\mathrm{sim}(z_i, z_k)/\tau_T\big)}
这个公式是“连连看”的评分表:分子衡量同一病人两张片子的相似度,分母把其他病人的片子都拉来当“干扰项”,模型要学会在所有干扰项中一眼认出自己的伙伴。
  1. 特征编码$z_i$ 是影像 $x_i$ 经过编码器 $f_\theta$ 和投影头 $g$ 后得到的特征向量,它是整张图的“压缩摘要”。
    zi=g(fθ(xi))z_i = g\big(f_\theta(x_i)\big)
  2. 正负样本$z_i^{+}$ 是同一影像经另一种增强得到的视图(正样本),$z_k$ 是其他影像的特征(负样本)。相似度用余弦相似度衡量,取值越接近 1 表示越像。
    sim(a,b)=a⋅b∥a∥∥b∥\mathrm{sim}(a,b) = \frac{a \cdot b}{\|a\| \|b\|}
  3. 温度系数$\tau_T$ 控制特征分布的“锐利程度”。$\tau_T$ 越小,模型越苛刻,必须把正样本从干扰项中极其明确地区分出来。
    τT↓  ⇒  判别更严格\tau_T \downarrow \;\Rightarrow\; \text{判别更严格}
  4. 负对数似然整个式子取负对数后,最小化它等价于最大化“正样本被正确选中的概率”——模型最终学会的是“什么样的片子内在一致”,也就是解剖结构本身的规律。
    LInfoNCE→min⁡  ⇔  P(zi+∣zi)→max⁡\mathcal{L}_{InfoNCE} \to \min \;\Leftrightarrow\; P(z_i^{+} | z_i) \to \max

三范式选型复盘

培训结束,影像科主任把三位年轻医生的履历摊在桌上:自监督医生擅长零标注自学,半监督医生擅长小带教快速成长,弱监督医生擅长从粗结论里抠细节。到底派谁上手术台?主任没有纠结,他扫了一眼标注预算表,很快给出了结论——成年人不做选择题,三个都要用,关键是谁先谁后。

选型的经验法则可以浓缩成一张场景矩阵。当标注量几乎为零时,唯一的选择是自监督预训练:先用海量无标影像学结构,再拿极少标注微调,相当于背熟解剖图谱再去上临床课;当手头有 1%~10% 的精确标注时,最优策略是自监督预热 + 半监督自训练的组合——预训练提供了好起点,半监督再把未标注的宝藏一点点挖出来;当只有粗标签(历史报告)但没有像素级标注时,弱监督路线是唯一的冷启动方案,先用 CAM 定位、再生成伪 mask、最后人工修正少量难例即可上线。三种路线的最终形态,往往收敛到一个把各信号加权融合的总目标:

主任最终拍板:让自监督医生先带实习生们集体自学解剖(预训练),再请老专家带教几十例典型病例(有标微调),同时把历年的报告单翻出来做弱监督兜底。十万张片子,就这样在几周内被消化得干干净净。标注稀缺从来不是绝境,清醒的选型与组合,才是破局的钥匙。

Ltotal=Lsup+λ1Lpseudo+λ2Lcons+λ3Lweak\displaystyle \mathcal{L}_{total} = \mathcal{L}_{sup} + \lambda_1 \mathcal{L}_{pseudo} + \lambda_2 \mathcal{L}_{cons} + \lambda_3 \mathcal{L}_{weak}
这个公式是“主任的排兵布阵”:既让实习生记住师父教过的几例($\mathcal{L}_{sup}$),也让他从伪标签里自学($\mathcal{L}_{pseudo}$),还要接受影子老师的批改($\mathcal{L}_{cons}$),并用报告单的粗线索兜底($\mathcal{L}_{weak}$)。$\lambda$ 们决定谁的嗓门更大。
  1. 金标准项$\mathcal{L}_{sup}$ 是所有手段的锚。验证集必须始终保持少量人工精标,否则整个训练过程失去参照系。
    Lsup=1N∑i=1Nℓ(f(xi),yi)\mathcal{L}_{sup} = \frac{1}{N}\sum_{i=1}^{N}\ell\big(f(x_i), y_i\big)
  2. 伪标签项$\mathcal{L}_{pseudo}$ 是从无标数据中提取的高置信伪标签损失,对应半监督的自训练部分。
    Lpseudo=λuM∑j=1M1[max⁡pj>τ] ℓ(f(x~j),y^j)\mathcal{L}_{pseudo} = \frac{\lambda_u}{M}\sum_{j=1}^{M}\mathbb{1}[\max p_j > \tau]\,\ell(f(\tilde{x}_j), \hat{y}_j)
  3. 一致性项$\mathcal{L}_{cons}$ 是师生框架下扰动不变性的约束,稳住无标数据的输出空间。
    Lcons=1∣Du∣∑x∥Fθ(A(x))−Fθ′(A′(x))∥2\mathcal{L}_{cons} = \frac{1}{|D_u|}\sum_{x}\|F_\theta(\mathcal{A}(x)) - F_{\theta'}(\mathcal{A}'(x))\|^2
  4. 弱监督项$\mathcal{L}_{weak}$ 利用图像级标签(如 CAM 生成的伪 mask)提供粗粒度监督,成本最低但能防止模型在大区域内跑偏。
    Lweak=ℓseg(Fθ(x), Sc(x))\mathcal{L}_{weak} = \ell_{seg}\big(F_\theta(x),\, S_c(x)\big)

AI 应用场景

新院区影像AI冷启动

阶段:数据准备 / 预训练 / 半监督微调

解决的问题:新建院区或引入新型设备(如高端OCT)后,历史影像没有标注,传统方案要等专家标注数月至半年才能动工。采用“自监督预训练 + 半监督自训练”组合:先用院内十万张无标注影像跑 MAE 预训练,让模型先学会视网膜结构;再用手头仅有的 200 份专家标注启动半监督伪标签迭代,把未标注档案一块块盘活。两周内即可获得可用的病灶检出模型,避免为等标注而空转。

具体案例:某三甲医院引入新一代眼底OCT设备,历史档案 10 万份无标注、新采集仅 200 份医生标注。团队用 MAE 预训练后做半监督自训练,3 周内 AUROC 从 0.62 提升至 0.89,接近过去需要 2000 份标注才能达到的水平。

历史报告驱动的弱监督结节定位

阶段:标注生成 / 弱监督定位

解决的问题:影像科信息系统里沉淀着海量文字报告,如“右肺上叶见磨玻璃结节”,但没有任何像素级标注。传统方案需要重新找人回头标注,成本极高。用 NLP 从报告中抽取图像级标签,训练分类网络生成 CAM 热图,再经种子生长与阈值化生成伪 mask,把尘封的历史报告变成训练燃料。

具体案例:某创业公司接手一家体检中心的 5 万份胸部 CT 历史报告,仅用一周清洗出标签,训练弱监督分割模型,Top-1 结节定位准确率达 62%。随后人工修正了 300 例难例,便迭代上线了辅助筛查系统,为早期肺癌筛查争取了宝贵时间。

超声分割的Mean Teacher半监督流水线

阶段:模型训练 / 性能优化

解决的问题:乳腺超声图像噪声大、病灶边界模糊,专家标注一例要近一小时。传统全监督管线因标注瓶颈迟迟无法扩充训练集。用 Mean Teacher 师生框架对无标注超声施加一致性正则,让模型从大量原始超声中学习形态学先验,显著降低对标注量的需求。

具体案例:某医疗AI团队只有 80 例标注的乳腺超声,另收集 1000 例无标注数据。在 Mean Teacher 框架下,分割 Dice 系数从 0.68 升至 0.79,逼近 500 例全监督标注的效果,项目周期缩短了两个月。

Python 演示

python38 行
"""半监督自训练演示:少量标注 + 大量无标注提升影像特征分类"""import numpy as npfrom sklearn.datasets import load_digitsfrom sklearn.ensemble import RandomForestClassifierfrom sklearn.metrics import accuracy_scorefrom sklearn.model_selection import train_test_split X, y = load_digits(return_X_y=True)data, X_test, label, y_test = train_test_split(    X, y, test_size=0.3, random_state=42, stratify=y) # 只保留 5% 带标注,其余 95% 视为"无标注"影像库X_lab, X_unlab, y_lab, _ = train_test_split(    data, label, train_size=0.05, random_state=42, stratify=label) model = RandomForestClassifier(n_estimators=100, random_state=42)model.fit(X_lab, y_lab)acc_before = accuracy_score(y_test, model.predict(X_test))print("仅用少量标注准确率:", round(acc_before, 4)) # 自训练循环:预测 -> 置信度过滤 -> 伪标签并入 -> 重训for epoch in range(3):    proba = model.predict_proba(X_unlab)    conf = proba.max(axis=1)    mask = conf > 0.9    X_pseudo = X_unlab[mask]    y_pseudo = proba[mask].argmax(axis=1)    X_lab = np.vstack([X_lab, X_pseudo])    y_lab = np.concatenate([y_lab, y_pseudo])    X_unlab = X_unlab[~mask]    model.fit(X_lab, y_lab)    acc = accuracy_score(y_test, model.predict(X_test))    print("第", epoch + 1, "轮: 伪标签", mask.sum(),          "个, 测试准确率", round(acc, 4)) print("半监督自训练后准确率:", round(acc, 4))
目的:用手写数字集模拟“少量标注 + 海量未标注”的医学影像场景,演示半监督伪标签自训练的完整闭环——预测、置信度过滤、扩增训练集、重新训练。
  1. train_test_split(..., train_size=0.05, ...)只留 5% 数据带标签,模拟稀缺标注的真实处境。
  2. model = RandomForestClassifier(n_estimators=100, random_state=42)这是“实习生模型”,先在少量金标准上学会基本判断。
  3. proba = model.predict_proba(X_unlab)对无标注影像输出各类别概率,相当于实习生对每张片子给出“我有几分把握”。
  4. mask = conf > 0.9置信度门控:只有把握超过 90% 的样本才被折角标记为伪标签。
  5. y_pseudo = proba[mask].argmax(axis=1)取最大概率对应的类别作为伪标签。
  6. X_lab = np.vstack([X_lab, X_pseudo])把伪标签样本并入训练集,笔记越折越厚。
  7. X_unlab = X_unlab[~mask]没把握的样本继续留在“待学习”池里,等待下一轮。
  8. model.fit(X_lab, y_lab)用扩充后的训练集重新训练,这模拟了半监督的自训练迭代。

常见误区

误区自监督既然不需要标注,那只要有模型和算力就能训练,数据多少无所谓。

正解自监督免的是“标注”而不是“数据”。它恰恰需要海量的原始影像——MAE 要遮块填空,对比学习要构造正负样本对,没有足够多的无标注数据,代理任务根本无从学起。零标注数据 + 大量无标影像,才是自监督的完整配方。

为何常见:人们容易把“不需要人工标注”误解为“不需要数据”,其实自监督是把监督信号从标签转移到了数据自身结构中。

误区反正未标注数据那么多,不如把所有预测结果都当成标签,让模型一次吃个饱。

正解伪标签本质是模型的自我猜测,低置信度的猜测往往是错的。无门槛地全量加入,等于让实习生把每一个错误判断都折角当笔记,错误会通过下一轮训练被放大,这就是“确认偏差”。必须设置信度阈值、配合不确定性过滤,并对伪标签样本降权。

为何常见:半监督的直觉“数据多了肯定更好”太有诱惑力,忽略了噪声标签对训练的破坏性。

误区既然 CAM 已经标出了病灶区域,直接把它热区轮廓存下来就是分割 mask 了。

正解CAM 是分类网络的“注意力副产品”,定位粗糙、边界模糊,往往只覆盖病灶最显著的一小块。要变成可用的分割标签,还需要种子生长、对抗擦除、阈值化、CRF 细化等一系列后处理,而且必须经过人工抽检。

为何常见:热力图可视化效果很惊艳,人眼会觉得“它已经找到了病灶”,却忽略它离像素级精确还差着几个数量级。

误区选定了半监督就不能用自监督,用了弱监督就与半监督无关。

正解实战中最强的是组合拳:自监督预训练提供好初始化,半监督在后挖掘未标注数据,弱监督用粗标签兜底并生成冷启动伪标签。三者融合到总损失函数中,分别用 $\lambda_1, \lambda_2, \lambda_3$ 调节权重,远比单打独斗稳健。

为何常见:教材通常分章节讲,容易让人形成“范式=独立路线”的割裂印象,忽略了它们在工程中天然互补。

误区只要未标注数据足够多,半监督最终能超越甚至取代全监督。

正解半监督的天花板受标注质量与信息量约束。伪标签的信息来自模型自身,本质是已有知识的复制与强化,很难创造出超出标注分布的新知识。当未标注数据与标注数据分布差异大时,效果还会明显衰减。它的价值是“在标注预算不足时逼近全监督”,而非“替代全监督”。

为何常见:论文里半监督曲线一路逼近全监督的图太深入人心,让人忽略了那是在精心设定的理想条件下。

面试题

Q1. 半监督学习的训练数据通常是什么形式?

单选题 · easy

  • A.少量带标注样本加大量无标注样本← 正确答案
  • B.全部样本都带有像素级标注
  • C.只有无标注样本没有人工标签
  • D.只有图像级标签没有像素级标签

答案:A。半监督的核心标志是“少量有标 + 大量无标”。B 是全监督,C 是纯无监督/自监督的输入形式,D 是弱监督的标签形式。记住三者的区分就能选对。

Q2. 伪标签自训练中,筛选伪标签最关键的操作是什么?

单选题 · mid

  • A.按预测置信度设置阈值过滤← 正确答案
  • B.按样本文件名排序取前一半
  • C.将所有预测结果全部采纳
  • D.随机抽取等量无标样本

答案:A。伪标签是模型的自我猜测,低置信度样本错误率高。只有超过置信度阈值 τ 的预测才可靠,好比实习生只折角标记“非常有把握”的笔记。全部采纳会把噪声放大,引入确认偏差。

Q3. 一致性正则(consistency regularization)的核心思想是什么?

单选题 · easy

  • A.同一输入经不同扰动后输出应保持稳定← 正确答案
  • B.不同输入应有完全相同的输出
  • C.模型参数在训练中保持不变
  • D.损失函数中不加入任何正则项

答案:A。一致性正则要求对同一张影像施加不同扰动(旋转、噪声、裁切)后,模型的预测尽量一致。病灶的本质不会因扰动改变,所以“扰动不变性”是天然的教学信号,也是半监督的核心支柱之一。

Q4. Mean Teacher 框架中,“影子老师”的模型参数是如何更新的?

单选题 · mid

  • A.对学生参数做指数滑动平均(EMA)← 正确答案
  • B.用标注数据独立训练一份
  • C.每次迭代随机初始化一次
  • D.与学生参数完全同步更新

答案:A。影子老师通过 EMA 平滑地跟踪学生参数的历史状态,$\theta' \leftarrow m\theta' + (1-m)\theta$。它比学生更稳定,能提供更可靠的“参考答案”。若与学生完全同步,就丧失了对噪声的缓冲。

Q5. CAM 类激活图通常取自模型的哪个部分?

单选题 · mid

  • A.最后一个卷积层的特征图加权组合← 正确答案
  • B.第一个卷积层的原始像素响应
  • C.全连接层输出的类别概率本身
  • D.输入图像直接做灰度阈值分割

答案:A。CAM 用最后一个卷积层的多通道特征图,按分类权重加权叠加得到热图。此时特征图已具备高层语义且保留了空间位置信息;第一层只有低级边缘,全连接层已丢失空间结构。

Q6. 弱监督医学影像分割最常使用的标签形式是什么?

单选题 · easy

  • A.图像级标签(有/无病灶)← 正确答案
  • B.每个像素的精确类别
  • C.每个患者的基因测序数据
  • D.病灶区域的完整三维模型

答案:A。弱监督的关键就是“用便宜的粗标签替代昂贵的细标注”。图像级标签只需一句“有结节”即可,像素级标注属于全监督,选项 C、D 与此无关。

Q7. 自监督学习通常应用于训练流程的哪个阶段?

单选题 · mid

  • A.在下游任务前的预训练阶段← 正确答案
  • B.只在推理阶段做后处理
  • C.只用于数据增强的在线阶段
  • D.只用于模型压缩剪枝阶段

答案:A。自监督先用海量无标影像通过代理任务训练出特征提取器,产生预训练权重,再在下游任务上微调。它解决的是“冷启动没有好参数”的问题,和推理、剪枝无关。

Q8. 标注量极低(如仅有 0.5%)时,合理的实践策略有哪些?

多选题 · hard

  • A.立即投入十倍人力大规模标注
  • B.先做自监督预训练再迁移← 正确答案
  • C.用半监督伪标签扩张数据← 正确答案
  • D.用弱监督报告标签辅助冷启动← 正确答案

答案:BCD。标注极稀缺时,最忌盲目堆人力(标注昂贵且周期长)。正确路径是自监督预训练打底、半监督伪标签扩张、弱监督粗标签兜底三者组合。选项 A 成本过高且时间不等人,不符合稀缺场景约束。

Q9. 半监督伪标签训练可能带来哪些风险?

多选题 · hard

  • A.低质量伪标签的噪声被放大← 正确答案
  • B.模型产生自我强化的确认偏差← 正确答案
  • C.模型在无标数据上过度自信← 正确答案
  • D.推理阶段速度大幅下降

答案:ABC。伪标签来自模型自身预测,错误会随迭代累积(噪声放大),模型逐渐只信自己的错误判断(确认偏差),熵最小化还可能让预测过度自信。推理速度只与网络结构有关,与训练方式无关。

Q10. 关于弱监督 CAM 及其在分割中的使用,下列说法正确的有哪些?

多选题 · extreme

  • A.CAM 由分类权重与卷积特征加权生成← 正确答案
  • B.CAM 定位精度可媲美像素级标注
  • C.CAM 可结合种子生长细化边界← 正确答案
  • D.CAM 阈值化可生成伪分割标记← 正确答案

答案:ACD。CAM 公式 $M_c=\mathrm{ReLU}(\sum_k w_k^c f_k)$,A 正确。CAM 定位粗糙,只能指示大致区域,达不到像素级精度,B 错误。实际流水线中 CAM 热图经种子生长、阈值化后生成伪 mask 再训练分割网络,C、D 正确。