微调 Microsoft Florence-2 用于 DocVQA

简要概述

Microsoft 的 Florence-2 是一个紧凑的视觉语言模型(0.2B 和 0.7B 参数),可以有效地针对文档视觉问答(DocVQA)等专门任务进行微调。Hugging Face 演示了在 DocVQA 数据集上进行七个 epoch 的微调后,验证集的 Levenshtein 相似度分数从 0 提升到 57.0。

Florence-2 架构与预训练

Florence-2 将所有计算机视觉任务视为序列到序列的问题,接受图像和文本输入并生成文本和位置标记作为输出。模型使用 DaViT 视觉编码器获取视觉嵌入,使用 BERT 获取文本和位置嵌入,然后通过标准的编码器‑解码器 Transformer 架构进行处理。

除了架构本身,Florence-2 的性能主要来源于在 FLD-5B 数据集上的预训练。该自动化数据集包含超过 50 亿条标注——包括框、掩码、标题和定位——覆盖 1.26 亿张图像。

将 Florence-2 适配用于视觉问答 (VQA)

虽然原始的 Florence-2 模型支持图像字幕、目标检测和 OCR,但并未发布原生的 VQA 功能。最初尝试使用不受支持的提示如 <VQA><vqa><Visual question answering> 只能得到不可用的结果,基于区域到描述的提示也未能完全满足 VQA 的需求。

要实现 VQA,必须在特定数据集上对模型进行微调。Hugging Face 使用了 DocVQA 数据集,并在每个问题前添加了 <DocVQA> 前缀以引导模型。

微调性能与基准测试

在 DocVQA 数据集上微调 Florence-2 带来了显著的性能提升。使用 Levenshtein 相似度作为指标,模型的验证分数从 0(微调前)提升到 57.0(七个 epoch 训练后)。

训练配置

实验在不同资源水平下进行,以测试模型的通用性:

  • 低资源: 在 Colab 中使用单个 A100 GPU,批量大小为 6(或使用 T4 GPU,批量大小为 1),并冻结视觉编码器。
  • 高资源: 在 8 台 H100 GPU 的集群上,以批量大小 64 对整个模型进行微调。此过程大约耗时 70 分钟。

在所有配置中,学习率 1e-6 的小幅设置被发现最为有效;更大的学习率会导致训练集快速过拟合。

实现细节

要实现此微调过程,需要使用 transformers 库中的 AutoModelForCausalLMAutoProcessor 类。由于 Florence-2 使用了自定义代码,加载时必须传入 trust_remote_code=True

关键代码组件

  • 数据集类: 使用自定义的 DocVQADataset 类在问题前添加 <DocVQA> 前缀,并将图像转换为 RGB。
  • 数据整理器: 实现 collate_fn,利用 processor 将文本和图像处理为张量。
  • 优化: 训练循环使用 AdamW 优化器和线性学习率调度器。

结论

Florence-2 的小体积(0.2B 和 0.7B 参数)使其非常适合部署在边缘设备或成本敏感的生产环境中。通过微调将模型适配到新任务的能力,使其能够超越开箱即用的功能,处理诸如文档理解等专业领域。

Sources