YOLO Vision 2026:
返回 Ultralytics 词汇表

Multiple Instance Learning

了解多实例学习如何将包级标签、实例聚合和弱监督应用于医学成像、检测和分类。

多实例学习(MIL)是一种机器学习方法,其中训练样本被组织成称为的组,而每个包内部的元素称为实例。模型接收整个包的标签,但不会接收每个实例的标签。例如,病理切片可能被标记为“存在癌症”,而无需指明哪些图像区域包含癌细胞。当详细标注成本高昂、含糊不清或不可用时,MIL 非常有用。

多实例学习的工作原理#

在传统的监督学习中,每个训练样本都有自己的标签。MIL 改变了监督单元:标签属于一组相关的样本。

一个包可能是一个包含许多帧的视频、一个包含许多段落的文档,或者是一张划分为多个图块的大图像。每一帧、每一段或每一个图块都是一个实例。典型的 MIL 模型包含三个组件:

  1. 实例编码器将每个实例转换为数值特征表示。
  2. 聚合函数将实例表示组合成一个包表示。
  3. 包分类器从该组合表示中预测包标签。

对于二分类,传统的 MIL 假设认为正包至少包含一个正实例,而负包中的每个实例都是负的。此假设适用于一个小型区域可以决定整体结果的任务。其他问题则需要集体假设,例如仅当几个实例显示支持证据时才预测正标签。

由于 MIL 从包标签中进行学习,因此它被视为弱监督的一种形式。与普通的图像分类不同,它不假设完整图像或每个区域都表达指定的类别。这避免了将包标签错误地复制到所有实例上。

聚合与实例重要性#

聚合必须处理不同的包大小,并且通常应独立于实例顺序。常见策略包括:

  • **最大池化:**使用最强的实例信号。它符合“至少一个正实例”的假设,但可能对异常值敏感。
  • **平均池化:**对整个包中的证据进行平均。当许多实例做出贡献时,它的效果更好,但可能会稀释罕见的正证据。
  • **注意力池化:**学习每个实例应对结果产生多大影响。由此产生的权重可以指示重要的区域,尽管它们不能保证提供解释。

池化输出被转换为包得分,通常使用诸如Softmax之类的概率函数。训练将该得分与包标签进行比较,并使用反向传播来共同更新编码器和聚合器。

MIL 主要优化包级别的预测。即使模型为特定实例赋予了很高的重要性,这些得分也不会自动成为可靠的实例标签或精确的定位。

实际应用#

  • **医学图像分析:**数字化的组织切片可以包含数千个图块,而可用的诊断仅适用于患者或切片。MIL 可以将图块处理为实例,并预测完整切片是否包含疾病迹象。这对于医学图像分析非常有价值,因为围绕每个异常区域绘制详细边界需要专家耗费时间。NCI 基因组数据共享 AI 资源将全切片图像描述为用于癌症分类、特征检测和结果预测的输入。(gdc.cancer.gov)

  • **工业视觉检测:**制造的组件可以从多个角度拍摄或记录为短序列。质量检查员可能会将完整的检查标记为“有缺陷”,而无需识别包含裂纹或缺少零件的确切视图。MIL 可以将这些视图视为一个包,并了解哪些视觉证据可以预测故障。如果稍后需要精确的缺陷位置,则可以为选定的实例标注目标检测实例分割

相关学习设置#

MIL 不同于几种密切相关的方法:

  • 弱监督是涵盖不完整、有噪声或间接标签的更广泛类别。MIL 专门使用附加到实例包上的标签。
  • 半监督学习结合了有标签和无标签的样本。MIL 包是有标签的,但它们的各个实例通常是没有标签的。
  • 多标签学习为一个样本预测多个类别。MIL 描述了样本是如何分组的,因此系统可以同时是多实例的和多标签的。
  • 注意力机制决定了信息如何加权或组合。它们可以实现 MIL 聚合,但不能凭自身定义 MIL。
  • 目标检测需要本地化的标注,例如边界框。MIL 有时可以突出显示可能的区域,但仅靠包级别训练无法提供经过验证的目标位置。

实用工作流与评估#

以下推理草图使用Ultralytics YOLO26 classification model对两个图像实例进行评分并应用最大聚合。它演示了包决策的概念,而不是联合训练的 MIL 模型。

from ultralytics import YOLO

# Treat related images as instances within one bag
sources = [
    "https://ultralytics.com/images/bus.jpg",
    "https://ultralytics.com/images/zidane.jpg",
]

model = YOLO("yolo26n-cls.pt")
results = model(sources)

# Aggregate evidence for one target class across the bag
target_name = "minibus"
target_id = next(i for i, name in results[0].names.items() if name == target_name)
instance_scores = [float(result.probs.data[target_id]) for result in results]
bag_score = max(instance_scores)

print(f"{target_name} bag probability: {bag_score:.3f}")

完整的 MIL 实现使用包标签训练具备包感知能力的聚合器。Ultralytics YOLO 支持标准的分类工作流,而自定义的 MIL 逻辑则用于对实例进行分组并优化包级别的损失。

从业者应在批处理期间保留包边界,测试多种聚合规则,并防止相关实例跨越数据集拆分。GroupKFold 交叉验证等工具可以将来自同一患者、视频或产品的图块保持在一起。评估包级别的精确率和召回率,如果定位很重要,则添加实例级别评估。当将 MIL 管道与检测、分割或分类组件相结合时,Ultralytics Platform可以支持数据集管理、标注、标准模型训练和部署。

Explore solutions

让我们一起构建 AI 的未来!

开启你的机器学习未来之旅