密集图像描述模型:Florence-2的使用指南

在计算机视觉领域,图像描述模型扮演着越来越重要的角色。它们不仅能够为混合搜索系统生成数据,还能为文本中的图像生成相应的描述。与此相对,密集图像描述则专注于为图像中的特定区域生成丰富的描述。本文将探讨什么是密集图像描述,以及如何使用微软研究开发的多模态视觉模型Florence-2来生成密集图像描述。

什么是密集图像描述?

密集图像描述的概念首次在Johnson, Justin和Karpathy, Andrej以及Fei-Fei, Li的论文《DenseCap: Fully Convolutional Localization Networks for Dense Captioning》中提出。它涉及到为图像中的特定区域生成描述。以一张街道上的汽车图片为例,通过Florence-2模型,可以得到以下两种描述:

当模型被要求生成常规图像描述时,它返回的是:

图像展示了一辆复古的大众甲壳虫汽车,停在一条鹅卵石街道上,前面是一栋黄色的建筑,建筑有两个木门。汽车涂有鲜艳的绿松石色,拥有流畅、流线型的设计。汽车两侧各有两扇门,一扇在另一扇上面,前面有一个小窗户。建筑看起来古老而破旧,油漆剥落,墙壁破碎。天空是蓝色的,背景中有树木。

相比之下,当模型被要求生成密集描述时,它返回的是:

常规描述涵盖了整个图像,而密集描述则定位了图像的特定部分。

密集描述的结果图像显示了作为密集描述一部分返回的边界框。可以通过两种描述推断出图像的详细信息,但密集描述为提供了定位信息,这有助于进一步理解图像。

如何使用Florence-2生成密集图像描述

Florence-2是一个由微软开发的开源多模态视觉模型。以下是如何使用Florence-2生成密集图像描述的步骤。

首先,需要安装Transformers及其相关依赖,这些将用于运行Florence-2模型:

pip install transformers timm flash_attn einops -q

还需要一个名为supervision的Python包,它包含了处理计算机视觉模型预测的实用工具:

pip install supervision

接下来,需要在Python脚本中导入依赖并加载模型。为此,创建一个新的Python文件,并添加以下代码:

from transformers import AutoProcessor, AutoModelForCausalLM from PIL import Image import requests import copy model_id = 'microsoft/Florence-2-large' model = AutoModelForCausalLM.from_pretrained(model_id, trust_remote_code=True).eval().cuda() processor = AutoProcessor.from_pretrained(model_id, trust_remote_code=True) 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") generated_ids = model.generate( input_ids=inputs["input_ids"].cuda(), pixel_values=inputs["pixel_values"].cuda(), max_new_tokens=1024, early_stopping=False, do_sample=False, 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) ) return parsed_answer

在上述代码中,加载了模型及其依赖项。这段代码来自微软官方的Florence-2笔记本。然后,可以使用以下代码在图像上运行模型:

task_prompt = "" answer = run_example(task_prompt=task_prompt) try: detections = sv.Detections.from_lmm(sv.LMM.FLORENCE_2, answer, resolution_wh=image.size) annotate(image.copy(), detections) except Exception as e: print(f"Exception: {e}")

在这里,使用了“”任务类型。这是生成密集图像描述的任务类型。然后将检测结果加载到一个supervision Detections对象中。有了这个对象,可以使用supervision Annotators API在图像上绘制密集描述。

密集图像描述是一种计算机视觉任务类型,它涉及到在图像中定位对象并为定位的区域生成描述。在本指南中,介绍了密集图像描述的概念,并展示了如何使用Florence-2,一个多模态计算机视觉模型,来生成图像区域的密集描述。

沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485