小规模CV任务如何利用基础模型
在过去十年中,出现了许多涉及计算机视觉 (CV) 的项目,既有小规模的概念验证项目,也有更大规模的生产应用。通常:
- 使用放射线照相术、活检和其他医学图像帮助进行医学诊断
- 卫星图像用于分析建筑物、土地使用等
- 在各种情况下进行物体检测和跟踪,例如交通估算、废物估算等。
应用计算机视觉的首选方法非常标准化:
- 定义问题(分类、检测、跟踪、分割)、输入数据(图片的大小和类型、视野)和类别(正是我们正在寻找的)
- 标注一些图片
- 选择网络架构,训练 — 验证,获取一些统计数据
- 构建推理系统并部署它
但自2023年以来,人工智能领域将受到来自生成式AI的新成功的冲击:大型语言模型 (LLM) 和图像生成模型。每个人都在谈论它,这对小规模计算机视觉应用有什么改变吗?
我们将探索是否可以利用它们来构建数据集、利用新的架构和新的预训练权重,或者从大型模型中提取知识。
1、小规模计算机视觉
我们通常感兴趣的是可以以相对较小的规模构建和部署的应用程序:
- 开发成本不应太高
- 它不应该需要庞大的基础设施来训练(想想计算能力和数据规模)
- 它不应该需要强大的研究技能,而是应用现有技术
- 推理应该是轻量级和快速的,以便它可以嵌入或部署在 CPU 服务器上
- 整体环境影响应该很小(想想计算能力、模型/数据的一般大小、没有特定的硬件要求)
这显然不是当今人工智能的趋势,因为我们看到具有数十亿个参数的模型在某些应用程序中开始成为标准。我们听到了很多关于这些的消息,但重要的是要记住,关注较小的规模至关重要,并且并非所有项目都应该遵循 Google、Meta、OpenAI 或 Microsoft 的规模趋势。即使它们不在聚光灯下,大多数有趣的计算机视觉项目实际上比成为头条新闻的项目规模要小得多。
这并不意味着应用程序的影响应该很小或缩小,只是我们积极关心开发和推理成本。
考虑到这一点,我们还能利用人工智能的最新发展来开发我们的应用程序吗?让我们首先深入基础模型的世界来了解背景。
2、计算机视觉中的基础模型
新的大型语言模型 (LLM) 之所以流行,是因为你可以轻松地在应用程序中使用基础模型(许多是开源的,或可通过 API 使用)。将 GPT、Bert、Llama 视为这样的模型。基础模型是一个非常大的通用神经网络,可用作大多数下游任务的基础。它包含有关非常广泛的主题、语义、语法、不同语言等的知识。
在计算机视觉中,我们已经使用这样的模型一段时间了:在过去的 10 年里,使用在 ImageNet(100 万张带标签的图像)上预先训练的神经网络作为下游任务的“基础”模型已经成为标准。你可以在其上构建神经网络,并在需要时根据自己的数据对其进行微调。
ImageNet 预训练网络和 LLM 之间有两个主要的概念差异:
- 我们训练它的数据类型:ImageNet 依赖于纯监督学习:大规模分类任务,而 LLM 是生成模型:它们使用原始文本以自我监督的方式进行训练(任务只是预测下一个单词)。
- 这些基础模型对新任务的适应:ImageNet 预训练网络系统地需要新的学习程序来适应新任务。对于 LLM,虽然可以对模型进行微调,但该模型足够强大,无需进一步训练即可用于下游任务,只需向模型提供正确的信息,使其可用于新任务即可。
大多数当前的计算机视觉应用(如分类、对象检测、分割)仍然使用 ImageNet 预训练网络。让我们回顾一下现有或即将推出的新模型,它们可能对我们的计算机视觉任务有用。
3、计算机视觉的新基础模型:简要回顾
在计算机视觉领域,除了 ImageNet,还有许多自监督网络的例子,其中一些是生成模型(想想 GAN 和最近的扩散模型)。它们只在原始图像或图像文本对(例如图像及其描述)上进行训练。它们有时被称为 LVM(大型视觉模型)。
(弱的) 极大量数据的监督视觉模型:
- DINOv2 (Meta) — 一组大型 ViT(视觉转换器,1B 参数),明确旨在成为计算机视觉的良好基础模型,以完全自监督的方式进行训练。
- SAM Segment Anything (Meta) — 一个处理高分辨率图像的 ViT,专门设计用于擅长分割,并支持零样本分割(无需标注即可生成新的分割蒙版)。可以使用 LoRA 以低成本“微调”SAM,从而大幅减少必要的训练图像数量。另一个用例是将 SAM 用作医学图像分割的附加输入。
在图像文本对上训练的视觉语言基础模型:
- CLIP (OpenAI) — 图像和简短描述的对齐,非常适合低样本分类,并在实践中用作各种下游 CV 任务的基础模型
- 扩展开放词汇对象检测 (Google)
大型生成模型,现在是多模态的(包括在其架构中能够理解复杂文本的大型语言模型):
- StableDiffusion
- Dall-E (OpenAI)
视觉专用多任务大型模型:
- Florence-2:统一计算机视觉 (Microsoft)
大型模型,闭源,仅通过 API 提供:大型多用途模型,不以视觉为中心,但展示了出色的视觉功能,以及生成功能:
所有这些模型都是强大的基础模型,涵盖了许多视觉领域,并且在许多情况下擅长判别或生成任务。但是,如何在我们特定的小规模环境中利用它们呢?
4、构建训练数据集
使用这些新模型的一个务实的想法是保留我们的标准训练管道,例如使用广泛使用的 Yolo 检测器,但通过生成新的训练图像和/或生成标注来改进我们的数据集。过程如下:
- 标准数据集由一组带标注的训练和验证图像组成
- 增强数据集将使用强大的通用模型来添加自动标注:
未标记图像的新注释 ⇒ 这需要一个已经适合该任务的模型。你可以使用非常大的通用模型,仔细输入示例或提示,进行零样本注释,甚至根据现有的人工标注对非常大的模型进行微调。
为当前标注添加新的信息层,例如使用 SAM 从边界框信息中自动添加分割标注。
生成的数据集将由生成的图像及其标注组成。你可以构建一个由图像和/或文本组成的精心提示,以生成数千张图像及其标注。你可以直接使用 API 来生成这些带标注的图像(与寻找好图像和收集人工标注相比,成本应该很小)。
将验证集与生成集或增强集分开至关重要,因为你想要衡量精心人工标注数据的实际性能。这意味着在实践中,即使我们选择了新的生成技术或基础模型,我们仍然需要对真实图像进行一些手动标注。
5、增强数据集的示例
这个想法是从现有图像开始,通过丰富标签或使标签更易于标注来改进标签。现在,一些数据标注平台建议使用 SAM 或 DINOv2 通过预先分割图片中的对象来提高标记效率。
6、生成的数据集的示例
虽然生成数据集的想法已经存在很长时间了,并且被广泛用于训练 LLM,但实际上要找到能够有效利用生成数据(自动标注或纯合成数据)的真正小规模应用程序是相当具有挑战性的
- 不使用基础模型,而是使用简单的渲染管道,例如此合成数据集生成或此 Roboflow 示例。
- 许多人已经使用了类似的技术,使用 3D 渲染来生成数据,例如这个 github 存储库。
- 使用生成式模型完全生成图片和标注。另一个示例是专门使用 Dall-E 来生成手套/无手套检测图片章节示例
使用 CV 渲染管道构建数据集(例如将对象粘贴到背景以进行分割任务)的问题在于,数据的质量将在很大程度上取决于生成的图像的质量,因此你必须付出大量努力来构建正确的渲染步骤(在 3D 中更是如此)。
目前使用纯生成模型生成数据集的成功示例并不多(这里有一个),但考虑到最近图像生成 AI 模型的渲染质量和可操纵性,这只是时间和调整的问题。可以使用 ControlNet 从现有的分割蒙版或轮廓开始生成我们已经有标签的新图片,但目前尚不清楚它是否适用于分布外的类别(即不是标准的 COCO 类别),或者分辨率是否足够好。
这篇论文提出了一个类似的想法,即修改现有的带标签图片以生成共享分割掩码的新图片,从而实现超强的语义数据增强。
但是,在生成数千张图像而不是手动整理和标注它们时,应该考虑成本(财务和生态),收益是否大于成本并不明显!
7、结束语
我们通过使用人工标注数据的训练模型进行现代计算机视觉的方式即将被新的大型基础模型彻底改变。
大型基础模型有时具有“纳米级”版本,旨在在低端服务器甚至嵌入式应用程序上进行推理。 然而,对于许多这些应用程序来说,它们仍然太大,并且不太容易调整以适应新任务。 短期内,在这些情况下,我们不会使用 500M+ 参数视觉转换器,而是使用更小、更专业的模型。
尽管如此,即使对于小规模推理和低资源开发,我们也会利用大型基础模型,要么通过直接使用 API/本地推理调用这些模型,要么使用其中一些模型的知识。今天主要是通过标记数据来帮助,明天则通过其他知识传递方式——例如通过蒸馏或 LoRA。
对于检测或分割,没有标准程序或广泛的常用方法来从这些大型或生成模型中传输这些知识,但它可能会很快普及!
原文链接:Small Scale Computer Vision in 2024
汇智网翻译整理,转载请标明出处