许可证: mit
许可证链接: https://huggingface.co/microsoft/Florence-2-large/resolve/main/LICENSE
任务类型: 图像文本到文本
标签:
Florence-2:推进多样化视觉任务的统一表征
模型概述
此为Florence-2-large模型的持续预训练版本,上下文长度为4k,仅使用0.1B样本进行持续预训练,因此可能训练不充分。此外,OCR任务已更新为包含行分隔符('\n')。COCO目标检测AP为39.8
本Hub仓库包含微软Florence-2模型的HuggingFace transformers
实现。
Florence-2是一种先进的视觉基础模型,采用基于提示的方法处理广泛的视觉和视觉语言任务。它能通过简单文本提示执行图像描述、目标检测和分割等任务。该模型利用FLD-5B数据集(包含1.26亿张图像的54亿标注)掌握多任务学习。其序列到序列架构使其在零样本和微调场景中均表现优异,成为具有竞争力的视觉基础模型。
资源与技术文档:
快速开始
以下代码展示如何使用模型(所有模型均以float16训练):
import requests
import torch
from PIL import Image
from transformers import AutoProcessor, AutoModelForCausalLM
device = "cuda:0" if torch.cuda.is_available() else "cpu"
torch_dtype = torch.float16 if torch.cuda.is_available() else torch.float32
model = AutoModelForCausalLM.from_pretrained("microsoft/Florence-2-large", torch_dtype=torch_dtype, trust_remote_code=True).to(device)
processor = AutoProcessor.from_pretrained("microsoft/Florence-2-large", trust_remote_code=True)
prompt = "<OD>"
url = "https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/transformers/tasks/car.jpg?download=true"
image = Image.open(requests.get(url, stream=True).raw)
inputs = processor(text=prompt, images=image, return_tensors="pt").to(device, torch_dtype)
generated_ids = model.generate(
input_ids=inputs["input_ids"],
pixel_values=inputs["pixel_values"],
max_new_tokens=4096,
num_beams=3,
do_sample=False
)
generated_text = processor.batch_decode(generated_ids, skip_special_tokens=False)[0]
parsed_answer = processor.post_process_generation(generated_text, task="<OD>", image_size=(image.width, image.height))
print(parsed_answer)
任务能力
通过切换提示词,本模型可执行不同任务。首先定义任务执行函数:
点击展开
import requests
import torch
from PIL import Image
from transformers import AutoProcessor, AutoModelForCausalLM
device = "cuda:0" if torch.cuda.is_available() else "cpu"
torch_dtype = torch.float16 if torch.cuda.is_available() else torch.float32
model = AutoModelForCausalLM.from_pretrained("microsoft/Florence-2-large", torch_dtype=torch_dtype, trust_remote_code=True).to(device)
processor = AutoProcessor.from_pretrained("microsoft/Florence-2-large", trust_remote_code=True)
url = "https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/transformers/tasks/car.jpg?download=true"
image = Image.open(requests.get(url, stream=True).raw)
def run_example(task_prompt, text_input=None):
if text_input is None:
prompt = task_prompt
else:
prompt = task_prompt + text_input
inputs = processor(text=prompt, images=image, return_tensors="pt").to(device, torch_dtype)
generated_ids = model.generate(
input_ids=inputs["input_ids"],
pixel_values=inputs["pixel_values"],
max_new_tokens=1024,
num_beams=3
)
generated_text = processor.batch_decode(generated_ids, skip_special_tokens=False)[0]
parsed_answer = processor.post_process_generation(generated_text, task=task_prompt, image_size=(image.width, image.height))
print(parsed_answer)
支持的任务示例
点击展开
图像描述
prompt = "<CAPTION>"
run_example(prompt)
详细描述
prompt = "<DETAILED_CAPTION>"
run_example(prompt)
更详细描述
prompt = "<MORE_DETAILED_CAPTION>"
run_example(prompt)
描述到短语定位
需额外输入描述文本,输出格式:
{'bboxes': [[坐标],...], 'labels': [...]}
task_prompt = "<CAPTION_TO_PHRASE_GROUNDING>"
results = run_example(task_prompt, text_input="一辆绿色汽车停在黄色建筑前")
目标检测
输出格式:
{'bboxes': [[坐标],...], 'labels': [...]}
prompt = "<OD>"
run_example(prompt)
密集区域描述
输出格式同目标检测
prompt = "<DENSE_REGION_CAPTION>"
run_example(prompt)
区域提议
输出格式同目标检测
prompt = "<REGION_PROPOSAL>"
run_example(prompt)
文字识别(OCR)
prompt = "<OCR>"
run_example(prompt)
带区域的OCR
输出格式:
{'quad_boxes': [[四边形坐标],...], 'labels': [...]}
prompt = "<OCR_WITH_REGION>"
run_example(prompt)
带置信度的目标检测
def run_example_with_score(task_prompt, text_input=None):
...
prompt = "<OD>"
run_example_with_score(prompt)
更多示例详见Notebook
性能基准
Florence-2零样本性能
下表展示通用视觉基础模型在图像描述和目标检测任务上的零样本表现(未使用任务训练数据):
方法 |
参数量 |
COCO描述测试CIDEr |
NoCaps验证CIDEr |
TextCaps验证CIDEr |
COCO检测验证mAP |
Florence-2-base |
0.23B |
133.0 |
118.7 |
70.1 |
34.7 |
Florence-2-large |
0.77B |
135.6 |
120.8 |
72.8 |
37.5 |
视觉语言任务表现对比:
方法 |
Flickr30k R@1 |
Refcoco系列准确率 |
参照分割mIoU |
Florence-2-large |
84.4 |
56.3-68.0 |
35.8 |
Florence-2微调性能
下表比较专用模型与通用模型在描述和VQA任务上的表现("▲"表示使用外部OCR输入):
方法 |
参数量 |
COCO描述CIDEr |
NoCaps CIDEr |
VQA准确率 |
Florence-2-large-ft |
0.77B |
143.3 |
124.9 |
81.7 |
检测与定位任务表现:
方法 |
COCO检测mAP |
RefCOCO系列准确率 |
参照分割mIoU |
Florence-2-large-ft |
43.4 |
88.3-91.7 |
80.5 |
引用信息
@article{xiao2023florence,
title={Florence-2: Advancing a unified representation for a variety of vision tasks},
author={Xiao, Bin and Wu, Haiping and Xu, Weijian and Dai, Xiyang and Hu, Houdong and Lu, Yumao and Zeng, Michael and Liu, Ce and Yuan, Lu},
journal={arXiv preprint arXiv:2311.06242},
year={2023}
}