微调 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 库中的 AutoModelForCausalLM 和 AutoProcessor 类。由于 Florence-2 使用了自定义代码,加载时必须传入 trust_remote_code=True。
关键代码组件
- 数据集类: 使用自定义的
DocVQADataset类在问题前添加<DocVQA>前缀,并将图像转换为 RGB。 - 数据整理器: 实现
collate_fn,利用 processor 将文本和图像处理为张量。 - 优化: 训练循环使用
AdamW优化器和线性学习率调度器。
结论
Florence-2 的小体积(0.2B 和 0.7B 参数)使其非常适合部署在边缘设备或成本敏感的生产环境中。通过微调将模型适配到新任务的能力,使其能够超越开箱即用的功能,处理诸如文档理解等专业领域。