技术问题:停止部署视觉语言模型,改用 Skills — Merve Noyan, Hugging Face
AAI Engineer
Computing/SoftwareSmall Business/Startups
Transcript
00:00:00大家好,欢迎来到关于技术缺陷的演讲。实际上,这不再是一个技术缺陷了。在本次演讲结束时,
00:00:22如果您还没有开始使用视觉模型,您将能够利用它们构建很多东西。
00:00:27简单介绍一下我自己,我是 Merve。从早期 LLaVA 时代起我就一直在研究计算机视觉,最近我研究了更多智能体和端侧应用,因为我很着迷,而且非常喜欢视觉语言模型,甚至还写了一本相关的书。但我不再希望开发者直接去使用视觉语言模型,我希望每一位开发者都能开始
00:00:54端到端地构建视觉语言应用,这次演讲将为您提供一个很好的基础基准。我观察到开发者常见的行为是,他们试图将视觉语言模型用于所有事情,但你永远无法获得实时性,当我提到实时性时,就像你有一个烤面包机,
00:01:18你可以在上面获得 30-40 fps,无论你是构建图像分类、实例分割还是其他什么
00:01:28而且它们并不是非常健壮,如果你训练一个像 RF-DETR 这样的模型,也就是 Joseph 在第一场演讲中提到的那个,
00:01:39它的表现总是会优于你的视觉语言模型,我今天就会证明这一点。
00:01:47在右侧,你实际上可以看到我正在用 RF-DETR 做一些事情
00:01:52另外一点是他们不看开源许可,每当发布关于目标检测的内容时,大家总会向我询问 YOLO,YOLO 是个很好的模型,但我觉得它使用的是 GPL 3.0 许可
00:02:07我敢发誓,肯定有些开发者在不知情的情况下就部署了它,
00:02:12不知道自己其实需要为此付费。所以,是的,我希望大家今天能迁移到 Apache 2.0 许可的模型。
00:02:23为此,我构建了一个名为 vibe vision 的工具,它的灵感有点来自 Maziar 的这篇帖子
00:02:30基本上,他所做的就是把 SAM 2.1 模型作为一个工具提供给 Gemma 2 来调用,我觉得这非常
00:02:39令人印象深刻,今天我构建了一个工具包,你可以用它来做更多的事情
00:02:49所以我有点像是在提炼我自己的经验,首先,这个工具包包含了把我现在最喜欢的模型作为工具,
00:02:57以便你可以提供给你的智能体,因为你的代码智能体本质上有点像是个毫无头绪的计算机视觉工程师。
00:03:03当我提炼自己的经验时,基本上每当我挑选一个模型,我总是会检查
00:03:09以下几点:首先,许可证是我最大的考量,它必须是 Apache 2.0 或 MIT,或者
00:03:16某种允许商业用途的许可;其次,性能必须与其大小或
00:03:24架构选择相匹配,因此每当计算机视觉会议上有新模型发布时,我都会查看基准测试结果;
00:03:31第三当然是直觉感觉(vibes)。这个工具包有第二部分,有点像“氛围训练”部分,
00:03:41这是最令人兴奋的部分。所以我先讲这部分。我站在
00:03:47开发者的角度去构建一个视觉应用。如果我有已标注的图像,很简单,直接训练一个模型即可,
00:03:55或者我可以给我的计算机视觉智能体一些教程来实现,因为这些资源都很丰富,
00:04:02比如我们为此构建了 transformers。但如果我只有图像,我就必须先标注,然后评估
00:04:11标注结果,然后再去训练模型。但你怎么在大规模上做到这一点?你实际上可以使用视觉
00:04:17语言模型作为标注员,再用视觉语言模型作为裁判,然后训练你想要的模型。但
00:04:24这个流水线看起来像什么?基本上我构建了这个流程,它包含了用于标注的 VLM、作为裁判的 VLM
00:04:35以及后续训练。对代码智能体来说,这是一个长程任务,并且它具备许多
00:04:42基础设施支持,你可以在本地做,也可以远程做。基本上它运行在 Hugging
00:04:48Face 的基础设施上,我们有允许你进行单次批量处理或训练的 Jobs 服务;
00:04:54我们还有一个名为 Inference Providers 的无服务器路由系统,你可以使用多个
00:05:00服务提供商,我们还有 Buckets 用来在数据集存储库、
00:05:07模型存储库等之上转储中间数据。但首先是什么促进了这项工作?首先是我最喜欢的模型 RF-DETR,RF-DETR
00:05:17分割,我目前正在研究分割方面;我们有更好的智能体来处理长程
00:05:24任务,你知道的,你必须全程监视标注过程、训练过程等;
00:05:32并且更小但功能更强的视觉模型能让你以极低的成本标注数据;此外,随着
00:05:40transformers 进行了 v5 重构等,目前它对视觉模型的表现更好了。
00:05:47这就是整个流水线实际的样子:首先,我对数据集进行标注,比如拿一个图像
00:05:54数据集,任何图像数据集都可以,我用 Qwen 2.5-VL 标注该图像数据集,然后将
00:06:02标注好的数据集传递给两个裁判:第一个是 Gemma 2-9B,这是一个约 9B 参数的裁判;第二个是
00:06:10Llama 3.2-Vision,它接近 11B,相对较小。基本上我查阅了研究,发现最好是
00:06:18使用集成的小型裁判,在此基础上我合并了裁决结果。我也查阅了
00:06:26相关研究,大多数人要求 VLM 或 LLM 为其分配一些分数,但这些分数
00:06:34完全不起作用,特别是当你的模型与裁判模型大小不同时;然后我将其传递给
00:06:40训练 RF-DETR 中号或大号模型。我和 Roboflow 的人员聊了聊,他们鼓励使用
00:06:47那个,我很快就会展示给你们看,它实际上非常有效。但它是如何工作的呢?你
00:06:55获取仓库,然后直接问它:好的,你能训练它吗?你能在这个
00:07:04Hub 上的数据集上进行训练吗?然后它就会开始,如果数据集已经有标签,你实际上可以直接
00:07:11开始训练;但如果没有标签,你可以直接开始标注。基本上,
00:07:19这里的诀窍是我将叠加上边界框的图像传递给裁判。因为技术上 Qwen 输出的
00:07:27边界框是 token,我没有直接传 token,而是叠加了边界框,并将该图像
00:07:33连同一些标签和标签描述一起传递,我说:好的,如果这个标签描述上面有边界框,
00:07:40那么就告诉我你是否批准。然后我基于最小赞同而不是一致同意
00:07:49来合并裁判的裁决结果,我稍后会解释为什么要采取这种方式。这些
00:07:56标签描述也是由代码智能体生成的,你作为人类只需要批准即可。
00:08:03我在这个流水线中使用的模型全部采用 Apache 2.0 许可证,除了
00:08:10Llama 模型,它有一种特殊类型的许可证,如果你达到了一定的收入额,
00:08:19之后就需要付费,但你可以放心使用,它很强大。至于监视
00:08:26这个流水线的代码智能体,我最初是用 Claude 3.5 Sonnet 构建的,然后用 GLM-4
00:08:35运行工作流,老实说它在长程任务上表现得很好。至于算力基础设施,我其实在 Hugging
00:08:42Face 工作,有很多算力额度,而且我在生活中非常缺乏耐心,所以我使用了相当多的
00:08:50硬件来进行实验。但我做了基准测试,总体来说,如果你
00:08:58想运行这整个流水线来训练模型,只需要三四美元,在我看来这简直太不可思议了。最初对于 Qwen 2.5,我使用的是
00:09:05无服务器服务,因为我觉得这很方便而且超级便宜,所以我用了 DeepInfra,
00:09:12它非常非常便宜;如果你一起使用,通过 Jobs 进行批量处理会更好;然后
00:09:19对于裁判环节,我使用了 Hugging Face Jobs,成本更低;接着对于训练,我同样使用了一个 L4 GPU,
00:09:27但模型非常小,比如 RF-DETR 就极小,你完全可以使用其他设备,如果你想的话
00:09:33甚至可以在本地运行。我只是没耐心,想要大批量处理。所以,是的,我在两个问题上测试了它:
00:09:42首先是道路标志检测,其次是文档解析。对于道路标志检测,我
00:09:48已经有了真实标签,所以我实际上是将我的流水线效果与真实标注进行了对比,看看它是否有效;
00:09:54而对于文档解析,我其实无法这样对比,因为我使用的是一个 DocVQA
00:10:02数据集,问题在于我想提取图像、表格、签名等各种内容,
00:10:08所以这是一个全新的任务,我想看看 RF-DETR 是否真的能学会它。第一个结果是:它成功了,太棒了!
00:10:19我们的 mAP@50 表现相当不错。我和它做了对比——基本上我有一个测试集,
00:10:29我将测试集输入 Qwen,然后将伪标注
00:10:35与该测试集的真实标注进行对比。虽然存在一点差距,但这是预料之中的,
00:10:42因为它是向 Qwen 学习的。坦白讲,对于这样的用例,ROC-AUC 值也挺出色的。
00:10:50至于文档解析,它居然具备泛化能力,在我看来这简直太不可思议了。基本上,
00:10:58在这里训练模型的输出中,你可以看到它检测到了签名,而 Qwen 对该测试集的标注
00:11:06却遗漏了它。所以我想说,它泛化得也非常出色。
00:11:12但这也归功于 RF-DETR 作为骨干网络(Backbone)有多优秀。在这里你还可以看到
00:11:21它在技术上是如何捕获图像的,几乎是一对一精准匹配。在构建这个项目时,我实际上
00:11:30注意到我对构建视觉智能体几乎一无所知,为此我有不少发现与心得。
00:11:37首先,评审存在巨大的不平衡:根据问题的不同,Llama 往往会拒绝很多标注,
00:11:44这就是为什么我不能采用“一致同意”原则,因为如果我要剔除所有
00:11:50Llama 和 Gemma 都同意删除的内容,我剩下的样本数量就会非常非常少,
00:11:58这会导致泛化能力变得很差。所以我做的是:好的,只要其中一个说赞同,我就
00:12:04采纳那个样本,无论如何它效果不错。但如果你有一个大型数据集并且你在乎
00:12:09召回率,我建议你采取一致同意原则,或者观察一下文档解析方面的差距
00:12:17是否没那么大。其次,提示词生成有点困难,这是唯一一个作为人类
00:12:28你必须去批准的环节:好的,模型会为你生成裁判用的提示词,然后
00:12:35你会说:好的,我批准这个,因为你仍然需要稍微看一下、看一下
00:12:42你的数据集,这一步是无法回避的。第三,这非常有趣,因为你的
00:12:52代码智能体无论有多优秀——比如你用 Claude 3.5 Sonnet,这是一个非常优秀
00:12:59的代码智能体——但作为一个计算机视觉工程师,它也是毫无头绪的,而且缺乏常识。例如
00:13:06它会对交通标志进行水平翻转,或者对红绿灯做出抖动处理,
00:13:14这绝对会破坏你的数据集并搞砸一切。所以我后来修补了这一点,现在你
00:13:21可以直接说:好的,我不想做数据增强,或者我可以做,你的代码智能体会在那方面协助你。
00:13:30最后,这个工具包的第二部分是我首选的工具模型
00:13:35这个代码库涵盖了我最喜欢的模型,从深度估计到零样本分割
00:13:42这部分支持来自 Hugging Face 的基准测试,我们大概在几个月前推出的
00:13:48基本上我们有一个基准排行榜,在上面
00:13:55你可以看到开源模型及其评估结果,还能比较不同尺寸的模型
00:14:02我会保持更新,但这也离不开我自己喜欢阅读
00:14:13计算机视觉会议论文。我想专门提一下这个模型,因为
00:14:20知道它的人并不多。 SAM 无法进行开放式的指称分割(referring segmentation)
00:14:26比如你可以让它“分割这辆红车”,它能做到;但如果你说“分割蓝色车旁边的橙色车旁边的红车”
00:14:33它就做不到了。而 Falcon Perception 这个由 TII 开发的模型
00:14:39实际上可以做到这一点,而且它只有约 6 亿参数,采用 Apache 2.0 许可证
00:14:47所以它帮我处理了零样本分割
00:14:51这是一个未完结的列表:姿态估计方面,我们有 Sapiens 系列
00:14:58用于以人为中心的任务,比如关键点检测、人体
00:15:04深度估计等。至于零样本检测,我有 Moondream 3 和 MM-Grounding-DINO
00:15:13后者是一个基于 Apache 2.0 协议的模型,效果很好,相比 Moondream 体积非常小。我为你提供了
00:15:20多种尺寸的多个模型,你可以根据硬件来选择,比如如果你追求速度
00:15:25直接选 Tiny 轻量版即可。至于 OCR,我从 awesome-ocr 基准中选了
00:15:34不同尺寸的模型。在深度估计方面,我发现大模型
00:15:40并非不可商业化许可,其余的也有商用许可证,所以你完全可以使用,比如那个
00:15:45采用了 Apache 2.0 许可。它还附带 Supervision 和 Tracker 支持,它们都是
00:15:51Roboflow 开发的库,允许你对实例、边界框等进行追踪
00:16:00接下来的计划。首先,我能听到你们说这在工业场景下肯定行不通
00:16:06因为工业用例涉及不同的零部件,包含难以用文字描述的
00:16:13部分,自然语言并不是很好的输入方式。所以从这个意义上说,图像引导检测(Image-Guided Detection)
00:16:21会有所帮助。如果你不了解图像引导检测,基本上就是提供一个
00:16:27示例图像(比如这里的 Huggy 公仔),然后让模型在所有图像中检测这个目标
00:16:36我认为这在无法用自然语言描述的工业用例中
00:16:41确实能起到一定作用。另外我也想尝试交并比(IoU)合并策略
00:16:52基本上就是将标注框与裁判模型的检测框结合,让裁判模型
00:17:00生成检测框并计算交并比,而不是直接让裁判做接受或拒绝的判定
00:17:06而不是让裁判决定拒绝还是接受。目前我正在开发图像分割支持,感谢大家的聆听,如果
00:17:14你们想了解更多信息,我有一个小型视觉仓库,里面涵盖了关于
00:17:20模型微调、量化、多模态等有关视觉的所有内容,以及
00:17:27Transformers 任务指南,我们会持续更新,里面有许多教程。我们还有 Hugging Face Skills
00:17:36提供计算机视觉相关的特定技能以及基础设施技能,你可以轻松进行
00:17:43单提示词训练。这是我的 X(Twitter)账号,仓库地址在 GitHub 的
00:17:51mervenoyan/vision-intern。我想我还有时间回答一个问题,非常感谢大家!
00:18:04好的,他在问我是否有训练 VLM(视觉语言模型)本身的计划,比如自我提升那类的
00:18:16那听起来会非常令人兴奋,但我首先想解决开发者实际训练
00:18:22特定任务模型并部署到边缘端的问题,之后可能会考虑那个。也许还可以再回答一个问题?好的
00:18:34额,其实并没有,我不这么认为。我只是直接使用,因为代码 Agent 拥有
00:18:44上下文,我想让它来生成提示词。或许还能再回答一个?好的,非常感谢!
00:19:04那么
Community Posts
No posts yet. Be the first to write about this video!
Write about this video