Project Icon

florence2-finetuning

视觉语言模型的高效微调实现

本项目展示了Florence-2模型的微调方法。Florence-2是一个基础视觉语言模型,特点是模型小且性能强。项目包含模型安装、数据准备和代码修改说明,并提供单GPU及分布式训练脚本。这些工具可用于Florence-2的特定任务训练,适用于各种计算机视觉和视觉语言任务。

微调 Florence-2 - 微软最先进的视觉语言模型

本代码库支持我们于2024年6月24日在 Huggingface.co 上发布的一篇博客!

Florence 2 是微软于2024年6月发布的基础视觉语言模型。这个模型因其小巧的规模(0.2B 和 0.7B)以及在各种计算机视觉和视觉语言任务上的强大性能而备受青睐。

Florence 开箱即用地支持图像描述、目标检测、OCR 等功能。但是,你的任务可能不被支持,或者你可能需要控制模型在你的任务中的输出。这时你就需要对模型进行微调。

在这个代码库中,我们提供了在 DocVQA 或 The Cauldron 上微调 Florence 的代码。

安装

我们使用 UV 来管理包。UV 是一个用 Rust 编写的极快的 Python 包安装器和解析器。你可以在这里获取它。

要开始使用,请运行以下命令:

uv venv
source .venv/bin/activate
uv pip install -r requirements.txt

如果你遇到 flash-attn 的问题,可以用以下命令修复:

uv pip install -U flash-attn --no-build-isolation

获取数据

对于这个实验,我们使用 DocVQA 数据集。我们在 Hugging Face 的团队已经将其上传到 hub,所以你可以直接使用。

数据集经过预处理,便于处理。使用 HF 的 dataset 库加载后,它看起来是这样的:

from datasets import load_dataset

data = load_dataset('HuggingFaceM4/DocumentVQA')

print(data)

输出:

DatasetDict({
    train: Dataset({
        features: ['questionId', 'question', 'question_types', 'image', 'docId', 'ucsf_document_id', 'ucsf_document_page_no', 'answers'],
        num_rows: 39463
    })
    validation: Dataset({
        features: ['questionId', 'question', 'question_types', 'image', 'docId', 'ucsf_document_id', 'ucsf_document_page_no', 'answers'],
        num_rows: 5349
    })
    test: Dataset({
        features: ['questionId', 'question', 'question_types', 'image', 'docId', 'ucsf_document_id', 'ucsf_document_page_no', 'answers'],
        num_rows: 5188
    })
})

更新 Florence-2 以进行微调

为了微调 Florence-2,我们对 Florence2Seq2SeqLMOutput 类进行了一些修改。我们已经提交了这些更改的拉取请求(PR),你可以在代码中找到它们的链接。要使用修订后的版本,你需要在加载模型时指定适当的修订版本:

model = AutoModelForCausalLM.from_pretrained(
        "andito/Florence-2-large-ft", trust_remote_code=True
    ).to(device)
alternative_model = AutoModelForCausalLM.from_pretrained(
        "microsoft/Florence-2-large-ft", trust_remote_code=True, revision="refs/pr/10"
    ).to(device)

我们已经为微软的所有模型提交了必要的修复 PR。如果你想使用不同的模型,请参考我们创建的相应修订版本。

单 GPU 训练

要仅使用一个 GPU 进行训练,你可以简单地运行:

python train.py

它会自动在 DocVQA 数据集上进行训练。不建议仅使用一个 GPU 在 cauldron 上进行训练。

分布式训练

distributed_train.py 脚本允许你使用分布式数据并行来训练 Florence-2 模型,这可以在使用多个 GPU 时显著加快训练过程。以下是使用此脚本的步骤:

python distributed_train.py --dataset <dataset_name> --epochs <num_epochs> --eval-steps <evaluation_steps>

示例:

python distributed_train.py --dataset docvqa --epochs 10 --eval-steps 1000
  • dataset_name:要使用的数据集名称(docvqa 或 cauldron)。
  • num_epochs:要训练的轮数(默认为10)。
  • evaluation_steps:训练期间评估的频率(默认为每10000步)。
项目侧边栏1项目侧边栏2
推荐项目
Project Cover

豆包MarsCode

豆包 MarsCode 是一款革命性的编程助手,通过AI技术提供代码补全、单测生成、代码解释和智能问答等功能,支持100+编程语言,与主流编辑器无缝集成,显著提升开发效率和代码质量。

Project Cover

AI写歌

Suno AI是一个革命性的AI音乐创作平台,能在短短30秒内帮助用户创作出一首完整的歌曲。无论是寻找创作灵感还是需要快速制作音乐,Suno AI都是音乐爱好者和专业人士的理想选择。

Project Cover

白日梦AI

白日梦AI提供专注于AI视频生成的多样化功能,包括文生视频、动态画面和形象生成等,帮助用户快速上手,创造专业级内容。

Project Cover

有言AI

有言平台提供一站式AIGC视频创作解决方案,通过智能技术简化视频制作流程。无论是企业宣传还是个人分享,有言都能帮助用户快速、轻松地制作出专业级别的视频内容。

Project Cover

Kimi

Kimi AI助手提供多语言对话支持,能够阅读和理解用户上传的文件内容,解析网页信息,并结合搜索结果为用户提供详尽的答案。无论是日常咨询还是专业问题,Kimi都能以友好、专业的方式提供帮助。

Project Cover

讯飞绘镜

讯飞绘镜是一个支持从创意到完整视频创作的智能平台,用户可以快速生成视频素材并创作独特的音乐视频和故事。平台提供多样化的主题和精选作品,帮助用户探索创意灵感。

Project Cover

讯飞文书

讯飞文书依托讯飞星火大模型,为文书写作者提供从素材筹备到稿件撰写及审稿的全程支持。通过录音智记和以稿写稿等功能,满足事务性工作的高频需求,帮助撰稿人节省精力,提高效率,优化工作与生活。

Project Cover

阿里绘蛙

绘蛙是阿里巴巴集团推出的革命性AI电商营销平台。利用尖端人工智能技术,为商家提供一键生成商品图和营销文案的服务,显著提升内容创作效率和营销效果。适用于淘宝、天猫等电商平台,让商品第一时间被种草。

Project Cover

AIWritePaper论文写作

AIWritePaper论文写作是一站式AI论文写作辅助工具,简化了选题、文献检索至论文撰写的整个过程。通过简单设定,平台可快速生成高质量论文大纲和全文,配合图表、参考文献等一应俱全,同时提供开题报告和答辩PPT等增值服务,保障数据安全,有效提升写作效率和论文质量。

投诉举报邮箱: service@vectorlightyear.com
@2024 懂AI·鲁ICP备2024100362号-6·鲁公网安备37021002001498号