Multiple Instance Learning
多示例学习使用仅有整体标签的实例包进行训练,例如带有一个诊断结果的病理切片,并从中找出关键实例。
多实例学习(MIL)是一种 机器学习 方法:训练样本由称为“包”的组构成,标签只属于每个包,而包内的单个实例没有标签。一张标注为“癌症”的数字病理切片是一个由数千个组织图块组成的包,其中可能只有少数图块显示肿瘤细胞;一段标注为“事件”的监控视频是一个由许多短片段组成的包,其中大多数片段都没有异常。MIL 从这类数据中学习预测包标签,并在此过程中识别哪些实例是标签的依据。当对每个实例进行 标注 需要专家耗费太多时间或根本无法完成时,就可以使用这种弱监督方法。
Thomas Dietterich、Richard Lathrop 和 Tomás Lozano-Pérez 于 1997 年在药物活性预测中提出了这种设定。一个分子可以折叠成许多形状,只要其中一种形状适合目标,它就能与目标结合。因此,他们将每个分子视为由其所有可能形状组成的包,并只用分子测得的活性作为标签。
标准 MIL 假设#
二元标签的经典假设是:包中至少包含一个正实例时,该包为正;只有所有实例都为负时,该包才为负。像普通 监督学习 那样把包的标签复制给每个实例,会错误标注每个正包中的大量负实例。MIL 则会为每个实例打分,并将这些分数汇总成一个包预测值。取最大值与标准假设完全一致:包的分数等于其中最可疑实例的分数,并且只有该实例的分数会从包标签处接收 反向传播 信号。
这个 PyTorch 示例使用仅有包标签的方式,在 16,000 个包上训练一个线性实例评分器。每个包包含 20 个随机实例;每个正包中隐藏着一个“见证”实例,它的 16 个特征中有 4 个与其他实例不同。训练只使用包标签,另用 1,000 个测试包检查包预测结果,以及得分最高的实例是否为见证实例:
import torch
torch.manual_seed(0)
n = 17000 # 16,000 training bags and 1,000 test bags, each holding 20 instances with 16 features
bags, labels, witness = torch.randn(n, 20, 16), torch.randint(0, 2, (n,)).float(), torch.randint(0, 20, (n,))
bags[torch.arange(n), witness, :4] += 2.0 * labels[:, None] # a positive bag hides one shifted "witness" instance
scorer = torch.nn.Linear(16, 1) # gives every instance a score
optimizer = torch.optim.Adam(scorer.parameters(), lr=1e-2)
for i in range(0, 16000, 32): # train on 32 bags per step, using bag labels only
bag_logits = scorer(bags[i : i + 32]).squeeze(-1).max(dim=1).values # max pooling: a bag scores as its top instance
loss = torch.nn.functional.binary_cross_entropy_with_logits(bag_logits, labels[i : i + 32])
optimizer.zero_grad()
loss.backward()
optimizer.step()
with torch.no_grad():
scores = scorer(bags[16000:]).squeeze(-1) # one score per test instance
positive = labels[16000:].bool()
bag_accuracy = ((scores.max(dim=1).values > 0) == positive).float().mean()
located = (scores.argmax(dim=1) == witness[16000:])[positive].float().mean()
print(f"Bag accuracy: {bag_accuracy:.3f}, witness ranked first in {located:.3f} of positive bags")模型对 0.917 的测试包分类正确,并在 0.960 的正包中将见证实例排在首位,尽管训练中从未使用过任何实例标签。正是这种实例排序能力,让 MIL 系统能够指出促成判断的图块或片段。
池化与基于注意力的 MIL#
最大池化依赖单个实例,因此一个噪声实例就可能改变整个包的结果。平均池化会使用所有实例,但会稀释罕见信号;它适用于集体假设,即标签取决于呈现某种特征的实例比例。Maximilian Ilse、Jakub Tomczak 和 Max Welling 于 2018 年提出了基于注意力的深度 MIL:一个小型网络为每个实例分配权重,包的表示则是实例特征的加权平均值。注意力机制 可处理任意大小的包,不受实例顺序影响,并会生成权重热力图,显示预测所依据的区域,效果类似于 显著性图。
全切片图像太大,无法端到端训练,因此许多病理流水线会先用冻结的预训练编码器,将每个图块转换为特征向量,然后仅根据切片标签训练池化网络和分类器。YOLO26 图像分类 模型可以充当这种编码器:model.embed() 会为每张输入图像返回一个池化后的特征向量,因此一批图块就能转换为实例向量包,供注意力池化头使用。
应用场景#
在医学图像分析中,MIL 无需病理学家在千兆像素切片上勾画肿瘤。Memorial Sloan Kettering 的 Gabriele Campanella 及其同事仅使用病理报告中的诊断结果,就基于 15,187 名患者的 44,732 张全切片图像训练了一个 MIL 系统;他们 2019 年的研究报告称,该系统在前列腺癌、基底细胞癌和乳腺癌淋巴结转移检测上的ROC 曲线下面积均超过 0.98。
在视频领域,Waqas Sultani、Chen Chen 和 Mubarak Shah 将每段监控视频视为由片段构成的包,用于异常检测,并发布了 UCF-Crime 数据集,其中包含 1,900 段未经剪辑、仅有视频级标签的视频;这些标签可用于训练模型,让模型为事件发生的片段给出最高异常分数。弱监督目标检测会将图像视为由候选区域组成的包,并且只标注图像中出现的类别;得分最高的区域会成为预测的边界框。在所有这些设定中,将同一张切片、同一位患者或同一段视频中的所有图块或帧放在同一个数据划分中,可以避免将近似重复的实例分散到训练集和测试集中所造成的数据泄漏。
MIL 与相关设定#
半监督学习混合使用完全标注和未标注样本,而 MIL 中的每个包都有标签,但其中的实例都没有标签。多标签分类会为一个样本分配多个类别,这两种方法结合起来就是多实例多标签学习。当实例级标签值得投入成本时,可以使用MIL之后的主动学习,将正包中得分最高的实例送交专家标注。










