SmolVLM 小型视觉语言模型

本文介绍 SmolVLM,这是一款 2B VLM,内存占用率最低。SmolVLM 体积小、速度快、内存效率高,并且完全开源。

SmolVLM 小型视觉语言模型

这篇博文介绍了 SmolVLM,这是一款 2B VLM,内存占用率最低。SmolVLM 体积小、速度快、内存效率高,并且完全开源。所有模型检查点、VLM 数据集、训练配方和工具均根据 Apache 2.0 许可发布。

什么是 SmolVLM?

今年,多模态 AI 蓬勃发展,发布了许多大型视觉语言模型。趋势是最初扩大计算规模,然后通过使用大型模型生成合成数据来扩大数据多样性,最近又缩小规模以提高这些模型的效率。小型开放模型允许本地部署到浏览器或边缘设备,降低推理成本并允许用户自定义。这些模型的一些著名示例包括 PaliGemma 3B、moondream2 和 Qwen2VL。

在这篇博文中,我们介绍了 SmolVLM,这是一组新的 2B 小型视觉语言模型,可用于商业用途并部署到较小的本地设置,具有完全开放的训练管道。

我们发布了三个模型:SmolVLM-Base,可用于下游微调;SmolVLM-Synthetic,合成数据的微调变体;SmolVLM Instruct,微调指令变体,可用于交互式最终用户应用程序。

此版本附带集成到transformers中的开源模型、基于 SmolVLM Instruct 构建的演示以及监督微调脚本。我们使用了之前用于 Idefics3 的数据集:CauldronDocmatix,它们也是完全开源的。

1、模型能力示例

1.1 图文推理

输入图像:

输入提示

I'm planning a visit to this temple, give me travel tips.
翻译:我正计划参观这座寺庙,请给我一些旅行提示。

模型回答:

The Grand Palace is the most famous landmark in Bangkok and it's worth visiting for its stunning architecture and history. Here are some of our favorite things about the palace:
The Main Building: Located at the center of the complex, the main building features intricate tile work with traditional Thai motifs that cover every inch of the structure. This includes patterns such as dragons, mythical creatures, flowers, and geometric shapes. The roofline has an elaborate design featuring multiple layers of tiles adorned with gold accents.

Towers & Spires: There are several towers within the Grand Palace including the Phra Nakhon Si Ayutthaya National Museum Tower which houses exhibits on Thai culture and heritage. Another notable tower is the Wat Yai Chai Mongkol Tower where you can find beautiful murals depicting scenes from Buddhist mythology.

Architecture Style: The architectural style combines elements of Hindu and Khmer styles seen commonly throughout Southeast Asia. You'll notice influences like stupas (dome-shaped structures), lotus flower carvings, and ornate details typical of these regions' religious buildings.

Visitor Experience: While exploring the Grand Palace, visitors should be aware of certain rules due to security measures taken by authorities. These include no photography inside certain areas or using flashbulbs outside. Additionally, there may be queues during peak tourist seasons so plan accordingly if you're traveling here.

Travel Tips For Visiting The Grand Palace:
Best Time To Visit: The best time to visit would likely be early morning before sunrise when temperatures drop significantly making walking around easier.
Transportation: Public transportation options exist but they might not provide direct access to the Grand Palace itself; consider taking a taxi instead.
Food Options: There aren't many dining facilities available near the Grand Palace yet local street food vendors do offer delicious meals nearby.
Clothing Guidelines: While not mandatory, wearing traditional Thai clothing (sarongs) could add cultural immersion experience. However, shorts/trousers are allowed provided they don't go below knee level.
Safety Measures: Visitors must follow signs indicating restricted zones marked "No Photography" among others. Always carry identification documents just in case.
By following these guidelines, your trip will undoubtedly enhance both your understanding of Thailand’s rich historical tapestry and personal enjoyment!
翻译:

大皇宫是曼谷最著名的地标,其令人惊叹的建筑和历史值得一游。以下是我们最喜欢这座宫殿的一些地方:
主楼:主楼位于建筑群的中心,采用复杂的瓷砖工艺,覆盖了建筑的每一寸,上面都是传统的泰式图案。这包括龙、神话生物、花朵和几何形状等图案。屋顶设计精巧,采用多层瓷砖装饰,并饰有金色装饰。
塔楼和尖塔:大皇宫内有几座塔楼,包括大城府国家博物馆塔楼,里面陈列着泰国文化和遗产展品。另一座著名的塔楼是 Wat Yai Chai Mongkol 塔楼,您可以在那里找到描绘佛教神话场景的美丽壁画。
建筑风格:建筑风格融合了东南亚常见的印度教和高棉风格元素。您会注意到舍利塔(圆顶结构)、莲花雕刻和这些地区宗教建筑典型的华丽细节等影响。
游客体验:在探索大皇宫时,由于当局采取了安全措施,游客应注意某些规则。这些规则包括禁止在某些区域内拍照或在外面使用闪光灯。此外,在旅游旺季可能会有排队,因此如果您要来这里旅行,请做好相应的计划。
参观大皇宫的旅行提示:
最佳游览时间:游览的最佳时间可能是日出前的清晨,此时气温会大幅下降,使四处走动更加容易。
交通:公共交通可供选择,但可能无法直达大皇宫;可以考虑乘坐出租车。
餐饮选择:大皇宫附近餐饮设施不多,但附近有当地街头小吃摊提供美味佳肴。
着装指南:虽然不是强制性的,但穿着传统泰国服装(纱笼)可以增加文化沉浸体验。但是,短裤/长裤可以穿,但不能低于膝盖。
安全措施:游客必须遵守标有“禁止拍照”等禁区标志。为以防万一,请随身携带身份证件。
遵循这些指南,您的旅行无疑将增强您对泰国丰富历史的了解和个人享受!

1.2 视觉问答

输入图像:

提示:

Where do the severe droughts happen according to this diagram?
翻译:根据此图,严重干旱发生在哪里?

模型回答:

The severe droughts are happening in eastern and southern Africa.
翻译:严重干旱发生在非洲东部和南部。

1.3 OCR

输入图像:

提示:

What is the due date and the invoice date?
翻译:到期日和发票日期是什么?

模型回答:

The due date is 26/02/2019, and the invoice date is 11/02/2019.
翻译:到期日为 2019 年 2 月 26 日,发票日期为 2019 年 2 月 11 日。

2、模型架构

对于 SmolVLM,我们严格遵循 Idefics3 的架构,以至于我们在 transformers 中使用相同的实现。但是,还是有一些关键的区别:

  • 我们用 SmolLM2 1.7B 替换了 Llama 3.1 8B 作为语言主干。
  • 我们通过使用像素混洗策略将信息减少 9 倍,更积极地压缩修补后的视觉信息,而 idefics3 为 4x。
  • 我们使用 384*384 的补丁,而不是 364x364,因为 384 可以被 3 整除,这对于我们的像素混洗策略发挥作用是必要的。
  • 为此,我们将视觉主干更改为使用形状优化的 SigLIP,补丁为 384x384 像素,内部补丁为 14x14。

3、模型性能

3.1 基准

我们为训练细节中提到的任务提供了基准。

3.2 内存

SmolVLM 和其他模型的推理 GPU 内存使用情况


SmolVLM 在现有的 transformer 视觉语言模型套件中提供了最佳的内存使用率。这使其能够在设备上高效运行,例如笔记本电脑!您可以在上方看到每个模型的 GPU 内存使用情况(以 GB 为单位),使用一两个输入图像运行推理,并在所有测试中使用相同的图像和文本提示。SmolVLM 在图像编码方面的效率内置于模型中。SmolVLM 将每个 384x384 图像块编码为 81 个标记。这导致 SmolVLM 用 1.2k 个 token 编码我们的测试提示和单个图像,而 Qwen2-VL 使用 16k 个 token。这也解释了为什么 Qwen 和 InternVL 的 2 张图像的内存消耗增加如此之多。相比之下,使用类似方法的 SmolVLM 和 PaliGemma 的增加要温和得多。

3.3 吞吐量

SmolVLM 的微小内存占用也意味着它需要更少的计算来预填充模型和生成。与 Qwen2-VL 相比,预填充吞吐量快 3.3 到 4.5 倍,生成吞吐量快 7.5 到 16 倍。

3.4 视频

鉴于 SmolVLM 的长上下文和调整模型内部帧大小的可能性,我们探索了它作为基本视频分析任务的可访问选项的适用性,特别是在计算资源有限的情况下。

在评估 SmolVLM 的视频理解能力时,我们实现了一个简单的视频处理管道代码,从每个视频中提取最多 50 个均匀采样的帧,同时避免内部帧大小调整。这种简单的方法在 CinePile 基准测试中取得了令人惊讶的竞争结果,得分为 27.14%,这一表现使该模型处于 InterVL2 (2B) 和 Video LlaVa (7B) 之间。

定量结果与我们的定性测试一致,我们来看看 FineVideo 数据集中的一个示例

Question: what is shown in the close-up? 
Assistant: In the close-up, there are bottles of Heinz tomato ketchup,
  honey, soy sauce, and garlic on a kitchen counter.

Question: describe what is happening in the video. 
Assistant: The video shows a man cooking in a kitchen.
  He is wearing a black shirt and a black apron.
  He is standing in front of a counter and is holding a bottle of Heinz tomato ketchup,
  a bottle of honey, soy sauce, and a bowl of minced garlic
翻译:
问题:特写镜头中显示的是什么?
助手:特写镜头中,厨房柜台上放着亨氏番茄酱、蜂蜜、酱油和大蒜的瓶子。问题:描述视频中发生的事情。
助手:视频显示一名男子在厨房做饭。他穿着一件黑色衬衫和一条黑色围裙。他站在柜台前,手里拿着一瓶亨氏番茄酱、一瓶蜂蜜、酱油和一碗蒜末

而在第二个问题中,我们看到了一些时间理解限制(厨师指向一种又一种配料,而不是同时指向/拿着所有配料),SmolVLM 展示了出色的场景理解和物体识别能力。

4、VLMEvalKit 集成

我们将 SmolVLM 与 VLMEvalKit 集成在一起,以便于在其他基准测试中进行轻松评估。

通过运行以下命令,你可以评估 SmolVLM 或经过微调的 SmolVLM 模型。

python run.py --data <benchmarks> --model SmolVLM --work-dir <output_directory>

例如,在 MMMU dev 验证集和 MathVista mini 上进行评估,并将结果存储在名为 smol 的文件夹中。

python run.py --data MMMU_DEV_VAL MathVista_MINI --model SmolVLM --work-dir smol

5、将 SmolVLM 与 Transformers 结合使用

你可以使用 Transformers 中的 Auto 类轻松加载 SmolVLM。在底层,模型和处理器映射到用于 Idefics3 的相同实现。

from transformers import AutoProcessor, AutoModelForVision2Seq
import torch
DEVICE = "cuda" if torch.cuda.is_available() else "cpu"

processor = AutoProcessor.from_pretrained("HuggingFaceTB/SmolVLM-Instruct")
model = AutoModelForVision2Seq.from_pretrained("HuggingFaceTB/SmolVLM-Instruct",
                                                torch_dtype=torch.bfloat16,
                                                _attn_implementation="flash_attention_2" if DEVICE == "cuda" else "eager").to(DEVICE)

图像和文本可以任意交错,你可以传入多幅图像。以下是如何使用聊天模板并将格式化的输入传递给处理器。

from PIL import Image
from transformers.image_utils import load_image


# Load images
image1 = load_image("https://huggingface.co/spaces/HuggingFaceTB/SmolVLM/resolve/main/example_images/rococo.jpg")
image2 = load_image("https://huggingface.co/spaces/HuggingFaceTB/SmolVLM/blob/main/example_images/rococo_1.jpg")

# Create input messages
messages = [
    {
        "role": "user",
        "content": [
            {"type": "image"},
            {"type": "image"},
            {"type": "text", "text": "Can you describe the two images?"}
        ]
    },
]

# Prepare inputs
prompt = processor.apply_chat_template(messages, add_generation_prompt=True)
inputs = processor(text=prompt, images=[image1, image2], return_tensors="pt")
inputs = inputs.to(DEVICE)

使用预处理输入开始生成并解码生成的输出。

# Generate outputs
generated_ids = model.generate(**inputs, max_new_tokens=500)
generated_texts = processor.batch_decode(
    generated_ids,
    skip_special_tokens=True,
)

print(generated_texts[0])

6、训练详情

6.1 数据集

首先,我们必须训练 SmolLM2 以扩展其上下文,但我们将在下一小节中讨论这一点。一旦我们有了长上下文 SmolLM2,我们就使用与 Idefics3 相同的数据训练 SmolVLM。我们主要使用了 The Cauldron 和 Docmatix。我们使用的数据集的完整列表可以在此处查阅。

6.2 上下文扩展

SmolLM2 的预训练上下文窗口不足以满足 VLM 的需求。图像被编码成许多标记,我们希望支持多幅图像。为了解决这个问题,我们按照“基于 RoPE 的外推法的缩放定律”中的指导原则,将 RoPE 基值从 10k 增加到 273k,将其扩展到 16k 个 token。我们在长上下文和短上下文数据集的混合上对模型进行了微调。对于长上下文数据集,我们使用了 Dolma 的“书籍”子集(主要是 Project Gutenberg)和来自 The Stack 的 8k+ token 的代码文档,每个文档对最终混合物的贡献为 20%。对于短上下文数据集,我们简化了原始 SmolLM2 预训练组合,包括 20% 的 FineWeb-Edu、20% 的 DCLM 和 20% 的数学数据集(即将发布)。对数学数据集进行了上采样,以缓解在上下文扩展过程中在 GSM8k 上观察到的性能下降。所有实验均使用 EasyContext 存储库实施。

6.3 检查点选择

对于我们的训练运行,我们每 25 个优化步骤保存一次检查点,这使我们能够评估并可能恢复训练中不同点的模型状态。这种做法对于确定最佳模型版本至关重要,因为训练时间越长并不一定能保证更好的性能。我们评估了多个视觉语言基准的性能,每个基准都根据其重要性加权。核心基准包括以下内容:

  • 通用多模态理解(MMMU 和 MMStar),这是最全面的基准。
  • 基于文档和文本的视觉问答(DocVQA 和 TextVQA)
  • 数学推理(MathVista)
  • 图表理解(AI2D)
  • 通用多模态理解(MMMU 和 MMStar)。

为了选择最佳检查点,我们通过将这些基准与不同的手动分配权重相结合来创建单一指标,以反映它们在评估模型功能方面的相对重要性。我们使用这个单一指标来选择最佳检查点。通常,经过更多训练后,模型在大多数基准测试中表现良好,但它们在 DocVQA 上的相对性能会大幅下降。

6.4 微调

你可以使用 transformers 微调 SmolVLM,并使用 TRL 应用对齐技术 🚀

我们提供了一个笔记本,用于在 VQAv2 数据集上对其进行微调,可以选择使用 LoRA、QLoRA 或完全微调。在笔记本中,您可以找到一些技巧来节省更多内存,并拥有更大的批处理大小,以适应消费级 GPU(如 L4)中的 SmolVLM 进行训练。批处理大小为 4、使用 QLoRA 进行 8 位加载和梯度检查点,我们可以在 L4 中进行微调,它消耗大约 16 GB 的 VRAM。这使得使用 Colab 微调您的 SmolVLM 成为可能!您可以尝试使用参数来获得训练持续时间-内存权衡的良好点。

SmolVLM 还带有 TRL 集成,因此你可以通过 CLI 轻松应用直接偏好优化 (DPO)。首先运行 pip install tr​​l accelerate peft,然后运行以下命令对 RLAIF-V 数据集进行微调:

accelerate launch \
  --config_file examples/accelerate_configs/multi_gpu.yaml examples/scripts/dpo_vlm.py  \
  --dataset_name HuggingFaceH4/rlaif-v_formatted \
  --model_name_or_path HuggingFaceTB/SmolVLM-Instruct \
  --per_device_train_batch_size 8 \
  --gradient_accumulation_steps 32 \
  --dataset_num_proc 32 \
  --output_dir dpo_smolvlm_rlaif-v \
  --bf16 --torch_dtype bfloat16 \
  --use_peft --lora_target_modules=all-linear

生成的 LoRA 适配器权重为SmolVLM-Instruct-DPO。有关偏好调整基于视觉的 LLM 的详细教程可在此处找到:dpo_vlm

7、结束语

我们为社区推出了 SmolVLM,这是一个完全开放、小巧而强大的 VLM!我们还为社区提供工具以供使用和定制它。我们期待看到你将使用 SmolVLM 创建的内容。


原文链接:SmolVLM - small yet mighty Vision Language Model

汇智网翻译整理,转载请标明出处