在本文中,我们将介绍 Encord 用于自动化数据注释的“微模型”方法。我们已将这种方法部署到各个领域的计算机视觉标记任务中,包括医学成像、农业、自动驾驶汽车和卫星成像。
让我们切入正题:
构建一个检测蝙蝠侠的微型模型需要多少数据?
当然,这取决于您的目标。也许您想要一个通用模型,可以同时检测亚当·韦斯特、迈克尔·基顿和巴特弗莱克等蝙蝠侠。也许您需要它包含一个布鲁斯·韦恩探测器,该探测器也可以识别面具后面的人。
但如果你想要一个在一部电影、一个场景中跟随克里斯蒂安·贝尔·蝙蝠侠的模型,答案是……五张带标签的图像。用于生成上述模型推理结果片段的模型是使用以下五个标签进行训练的:
我希望这有助于回答第一个问题,令人惊讶的是它只需要五张图片。
该模型只是蝙蝠侠的部分模型。它在 Val Kilmer 或 George Clooney Batmen 上的表现并不好,但对于这个特定的用例来说它仍然有效。因此,我们不会称其为蝙蝠侠模型,而是称其为蝙蝠侠微模型。
不用担心;微型模特背后的起源故事并不是从一个富家子突然成为孤儿开始的。
我们在 Encord 早期就开始使用微模型,当时我们纯粹专注于视频数据集和计算机视觉模型。
我们在尝试不同的建模框架来自动分类胃肠病学视频时偶然发现了这个想法(您可以在此处找到更多相关信息)。
我们最初的策略是尝试一种“经典”数据科学方法,从广泛分布的视频中采样帧,训练模型,并对不同视频集的样本外图像进行测试。然后,我们将使用这些模型并测量与人工标记相比我们的注释效率的改进。
在这些实验中,我们意识到,仅对来自一个视频的一小组智能选择的帧进行训练的分类模型已经产生了很好的结果。我们还注意到,随着纪元数量的增加,我们的注释效率也随之提高。
这与我们对数据科学最佳实践的了解相反(整个团队在这方面拥有丰富的经验)。无意中,我们严重过度拟合了该视频的模型。但它确实有效,特别是如果我们将其分解,使每个视频都有其模型。我们称它们为微模型。虽然这是针对视频帧分类的,但我们后来将实践扩展到包括对象检测、分割和人体姿势估计任务。
最简单地说,微模型是针对特定任务或特定数据进行过度训练的特定注释模型。
微模型故意过度拟合模型,使其在一般问题上表现不佳,但在自动化数据注释工作流程的某一方面却非常有效。因此,它们被设计为只擅长一件事。要在实践中使用微模型进行图像或视频注释和标记,更有效的方法是将多个模型组装在一起以自动化全面的注释过程。
“传统”模型和微模型之间的区别不在于它们的架构或参数,而在于它们的应用领域、用于生成它们的反直觉数据科学实践以及它们的最终用途。
为了介绍微型模型的工作原理,我们将采用一个高度简化的玩具模型,可以更清晰地了解其背后的基础。机器学习 (ML) 的核心是曲线拟合,只是在具有许多参数的高维空间中进行。将构建模型的本质提炼为最简单的可能情况之一(一维标签)非常有用。以下内容稍微技术性一些;请随意跳过。
假设您是一家人工智能公司,面临以下问题:
您希望用一个模型拟合整个曲线,但对正确数量的点进行密集采样的成本太高。您可以在这里使用什么策略?
一种策略是将高次多项式拟合到曲线域上的一组初始采样点,随机重新采样,评估误差,并根据需要更新多项式。问题是每次检查新的样本点时都必须重新拟合整个曲线。每个点都会影响其他点。您的模型还必须非常复杂才能处理曲线中的所有不同变化。
解决这些问题的另一种策略是在局部区域进行采样,拟合一个近似该区域的模型,然后将整个域中的许多局部区域缝合在一起。我们可以尝试将模型拟合到下面的这个弯曲部分,例如:
这就是样条插值,一种常见的曲线拟合技术。每个样条线都有目的地“过度拟合”局部区域。它不会远远超出其领域进行推断,但也没有必要这样做。这是在低维空间中表现的微观模型的概念基础。这些单独的样条单元类似于我们用来自动化 x 值标记的“微模型”。
更通用的用例遵循类似的核心逻辑,但有一些额外的微妙之处(例如利用迁移学习和优化采样策略)。为了自动化完整的计算机视觉注释过程,我们还在训练数据工作流程中将微模型“缝合”在一起,类似于装配线。请注意,将弱模型组装在一起以获得更好的推理结果是一个已经存在很长时间的想法。这是一种略有不同的方法。
在 Encord,我们不会对单个预测的微模型进行平均,而是让每个模型自行处理预测。微模型也不仅仅是“弱学习者”。他们只是对数据分布的覆盖范围有限,并且对该覆盖范围表现出非常低的偏差。
对于微模型,我们利用这样一个事实:在注释工作流程过程中,我们可以利用某种形式的人工监督来将模型“指向”正确的领域。这种对微模型领域的指导使我们能够使用很少的人类标签来开始自动化流程。
模型可以根据形式(近似世界上某些现象的可量化表示)或功能(帮助您做事的工具)来定义。我的观点倾向于后者。正如常见的引用所说:
所有模型都是错误的,但有些模型是有用的。
微模型也不例外。它们的理由来自于在各个领域的应用程序中使用它们。
为了考虑微模型在注释方面的实际考虑,让我们看一下蝙蝠侠的例子。从我们训练模型的场景中提取 1500 帧,我们发现其中大约一半出现了蝙蝠侠。我们的微模型又选取了大约 70% 的实例。因此,我们仅通过五个手动注释就获得了大约 500 个蝙蝠侠标签。
当然也存在需要纠正的问题。例如,我们有误报。考虑一下我们的模型拾取的场景中的一个“假”蝙蝠侠的推理结果。
我们的边界框也没有达到应有的紧密程度。然而,这只是我们微模型的第一步。与普通模型一样,微模型也会经历几轮迭代。为此,主动学习是最好的解决方案。
我们一开始只使用了五个标签,但现在通过一些最小的校正和智能采样,我们有超过 500 个标签可以用来训练下一代微模型。然后,我们使用这个更强大的版本来改进我们的原始推理结果并生成更高质量的标签。经过这个过程的另一个循环后,当考虑到许多人类行为(包括手动更正)时,我们的微型模型的蝙蝠侠标签效率达到了 95% 以上。
评估微模型时还需要考虑一些其他要点:
虽然我们在使用微模型进行数据注释方面取得了成功,但我们认为除了数据管道应用程序之外,还有其他可能性。如前所述,人工智能是曲线拟合。但更根本的是,它让计算机做你想让它做的事情,这就是编程。本质上,微模型是一种统计驱动而非逻辑驱动的编程类型。
“正常”编程的工作原理是通过逻辑运算建立确定性偶发事件,将输入转换为输出。机器学习在高复杂性领域蓬勃发展,在这些领域中,逻辑捕获这些意外事件的难度被从示例中学习所取代。这种统计编程范式仍处于起步阶段,尚未开发出可供实际使用的概念框架。
例如,将问题分解为更小的组件是大多数问题解决框架的关键要素之一。面向对象的编程范式是朝着这个方向的组织转变,它加速了软件工程的发展,并且至今仍在实践中。我们仍处于人工智能的早期阶段,也许实例化面向数据的编程范式对于类似的快速发展是必要的。
在这种情况下,微模型可能在对象范式中具有天然的相似性。复杂数据分布中的一个块是“对象等价物”,微模型是该对象的实例。虽然这些想法还处于早期阶段,但它们与对以数据为中心的人工智能的新强调非常吻合。开发编排这些“数据对象”的工具是下一代人工智能基础设施的负担。我们才刚刚开始,还有很长的路要走。