分享好友 最新动态首页 最新动态分类 切换频道
如何使用Florence-2来做计算机视觉任务
2024-12-26 03:50

点击上方“AI公园”,关注公众号,选择加“星标“或“置顶”


作者:Ajay Kumar Reddy

编译:ronghuaiyang

导读

在这篇指南中,我们将深入了解这款由微软发布的名为Florence-2的模型,它旨在解决多种不同的视觉任务。

引言

原始Transformer的引入为当前的大型语言模型铺平了道路。同样,在引入变换器模型之后,视觉变换器(ViT)也被提出。就像擅长理解文本和根据响应生成文本的变换器一样,视觉变换器模型被开发出来以理解图像并根据图像提供信息。这些发展导致了视觉语言模型的出现,这些模型擅长理解图像。微软在此基础上又迈出了一步,推出了一款能够用单一模型完成多种视觉任务的模型。在这篇指南中,我们将深入了解这款由微软发布的名为Florence-2的模型,它旨在解决多种不同的视觉任务。

学习目标
  • 介绍Florence-2,一款视觉语言模型。

  • 了解Florence-2训练所使用的数据。

  • 了解Florence-2家族中的不同模型。

  • 学习如何下载Florence-2。

  • 编写代码以使用Florence-2执行不同的计算机视觉任务。

什么是Florence-2

Florence-2是由微软团队开发的一款视觉语言模型(VLM)。Florence-2有两种大小版本:一种是0.23B版本,另一种是0.77B版本。这两个模型的尺寸都较小,使得每个人都可以在CPU上运行这些模型。Florence-2的设计理念是单个模型能够解决多种问题。Florence-2被训练来解决不同的任务,包括物体检测、物体分割、图像标题生成(甚至是生成详细的标题)、短语分割、OCR(光学字符识别,以及这些任务的组合。

Florence-2视觉语言模型是在FLD 5B数据集上训练的。这个FLD-5B数据集是由微软团队创建的。该数据集包含大约1.26亿张图像上的54亿条文本注释。其中包括13亿条文本区域注释、5亿条文本注释和36亿条文本短语区域注释。Florence-2接受文本指令和图像输入,为诸如OCR、物体检测或图像标题生成等任务生成文本结果。

该架构包含一个视觉编码器,随后是一个Transformer编码解码器块;对于损失函数,它们采用标准的交叉熵损失。Florence-2模型执行三种类型的区域检测:用于物体检测的框表示、用于OCR文本检测的四边形框表示以及用于分割任务的多边形表示。

使用Florence-2进行图像标题生成

图像标题生成是一项视觉语言任务,给定一张图像,深度学习模型将输出关于该图像的标题。这个标题可以是简短的也可以是非常详细的,取决于模型的训练情况。执行此类任务的模型是在大量的图像标题数据上进行训练的,在这里它们学习如何根据给定的图像输出文本。它们训练的数据越多,就越能更好地描述图像。

下载和安装

我们将从下载和安装一些我们需要运行Florence视觉模型的库开始。

  • transformers HuggingFace 的 Transformers 库提供了多种用于不同任务的深度学习模型,您可以下载这些模型。

  • accelerate HuggingFace 的 Accelerate 库通过GPU加速模型推理时间,从而提高模型服务的速度。

  • flash_attn Flash Attention 库实现了比原始算法更快的注意力机制,并在 Florence-2 模型中使用。

  • einops Einstein Operations 简化了矩阵乘法的表示,并在 Florence-2 模型中实现。

下载Florence-2模型

现在,我们需要下载Florence-2模型。为此,我们将使用以下代码。

  • 我们首先导入 和 。

  • 然后我们将模型名称存储在变量 中。在这里,我们将使用 Florence-2 大型微调模型。

  • 接着我们通过调用 函数并传入模型名称以及设置 来创建 的实例,这将从 HuggingFace 仓库下载模型。

  • 然后我们通过调用 将模型设置为评估模式,并通过调用 将其发送到 GPU。

  • 接下来我们通过调用 并传入模型名称以及设置 为 来创建 的实例。

类似于 。但是 类处理文本和文本分词。而 则处理文本和图像分词,因为 Florence-2 处理图像数据,所以我们使用 。

现在,让我们选取一张图像

生成标题

现在我们将这张图像提供给 Florence-2 视觉语言模型,并要求它生成一个标题。

  • 我们首先创建提示。

  • 然后,我们将提示和图像一起提供给处理器类,并返回 PyTorch 张量。我们将它们发送到 GPU,因为模型位于 GPU 上,并将其存储在变量 中。

  • 变量包含 (即token ID)和图像的像素值。

  • 然后我们调用模型的 函数,并传入 和图像像素值。我们将最大生成token数设置为 512,将采样设置为 False,并将生成的token存储在 中。

  • 然后我们调用处理器的 函数,传入 并将 标志设置为 False。这将返回一个列表,因此我们需要列表的第一个元素。

  • 最后,我们通过调用 并传入生成的文本、任务类型以及图像尺寸作为元组来对生成的文本进行后处理。

运行代码并查看上面的输出图片,我们可以看到模型为这张图像生成的标题是“An umbrella and lounge chair on a beach with the ocean in the background”。上面的图像标题非常简短。

提供提示

我们可以进一步通过提供其他提示,如 和 来尝试。

尝试这种方法的代码如下

在这里,我们使用了 和 作为任务类型,并可以在上面的图片中看到运行代码后的结果。 产生了输出 “In this image we can see a chair, table, umbrella, water, ships, trees, building and sky with clouds.”,而 提示产生了输出 “An orange umbrella is on the beach. There is a white lounge chair next to the umbrella. There are two boats in the water.” 因此,通过这两个提示,我们可以在图像标题生成中获得更多的细节,而不是常规的提示。

使用Florence-2进行物体检测

物体检测是计算机视觉中一个广为人知的任务。它涉及到根据一张图像找到某个物体。在物体检测中,模型识别图像并提供围绕物体的边界框的 X 和 Y 坐标。Florence-2 视觉语言模型非常能够根据图像检测物体。

让我们尝试使用下面这张图像

在这里,我们有一张图像,图中是一辆明亮的橙色面包车在路上行驶,背景是一座白色的建筑。

向Florence-2视觉语言模型提供图像

现在让我们将这张图像提供给 Florence-2 视觉语言模型。

物体检测的过程与我们刚刚完成的图像标题任务非常相似。唯一的区别是我们将提示改为 ,意味着物体检测。因此,我们将这个提示连同图像一起提供给处理器对象,以获取标记化的输入。然后我们将这些标记化的输入以及图像像素值提供给 Florence-2 视觉语言模型以生成输出。然后解码这个输出。

输出存储在名为 的变量中。变量 的格式为 。因此,Florence-2 视觉模型为每个标签输出边界框的 X、Y 坐标,即为图像中检测到的每个物体。

在图像上绘制边界框

现在,我们将使用我们得到的坐标在图像上绘制这些边界框。

  • 为了在图像周围绘制矩形边界框,我们使用 matplotlib 库。

  • 我们首先创建一个图形和一个轴,然后显示我们提供给 Florence-2 视觉语言模型的图像。

  • 这里,模型输出的边界框是一个包含 X 和 Y 坐标的列表,在最终输出中,有一个边界框列表,也就是说每个标签都有自己的边界框。

  • 因此,我们遍历边界框列表。

  • 然后我们解包边界框的 X 和 Y 坐标。

  • 然后我们使用上一步解包的坐标绘制一个矩形。

  • 最后,我们将这个矩形添加到我们正在显示的图像上。

  • 我们还需要在边界框上添加一个标签,以指示边界框包含什么物体。

  • 最后,我们移除轴。

运行这段代码并查看图片,我们可以看到 Florence-2 视觉语言模型为我们提供的面包车图像生成了大量的边界框。我们看到模型检测到了面包车、窗户和轮子,并且能够为每个标签给出正确的坐标。

标题到短语定位

接下来,我们有一个被称为“标题到短语定位”的任务,这是 Florence-2 模型支持的。模型的工作方式是,给定一张图像和它的标题,短语定位的任务是找出标题中提到的每个/最相关的实体/对象对应图像中的区域。

我们可以通过以下代码来看看这个任务

在这里,对于提示,我们给出的是 “<CAPTION_TO_PHRASE_GROUNDING> An orange van parked in front of a white building”,其中任务是 “<CAPTION_TO_PHRASE_GROUNDING>”,短语是 “An orange van parked in front of a white building”。Florence 模型试图为从给定短语中提取的对象/实体生成边界框。让我们通过绘制结果来看看最终输出。

在这里,我们可以看到 Florence-2 视觉语言模型能够从中提取两个实体。一个是橙色的面包车,另一个是白色的建筑。然后 Florence-2 为这些实体生成了边界框。这样,给定一个标题,模型可以从标题中提取相关实体/对象,并能够为这些对象生成相应的边界框。

使用Florence-2进行分割

分割是一个过程,其中取一张图像并为图像的多个部分生成掩码。每个掩码都是一个物体。分割是物体检测的下一阶段。在物体检测中,我们只找到图像的位置并生成边界框。但在分割中,不是生成矩形边界框,而是生成与物体形状相匹配的掩码,就像为那个物体创建一个掩码一样。这很有帮助,因为我们不仅知道物体的位置,还知道物体的形状。幸运的是,Florence-2 视觉语言模型支持分割。

对图像进行分割

我们将尝试对我们的面包车图像进行分割。

  • 这里的过程类似于图像标题生成和物体检测任务。我们首先提供提示。

  • 这里的提示是 “<REFERRING_EXPRESSION_SEGMENTATION>two black tires”,其中任务是分割。

  • 分割将基于提供的文本输入,这里是 “two black tires”。

  • 因此,Florence-2 模型将尝试生成与这个文本输入和提供的图像紧密相关的掩码。

这里的结果变量格式为 {": { 'Polygons': [[[polygon]], ...], 'labels': ['', '', ...] }}",其中每个对象/掩码由一组多边形表示。每个多边形的形式为 [x1,y1,x2,y2,...xn,yn]。

创建掩码并在实际图像上叠加

现在,我们将创建这些掩码并在实际图像上叠加,以便更好地可视化它们。

解释

  • 首先,我们从 PIL 库导入各种工具用于图像处理。

  • 我们创建原始图像的一个深拷贝,并将 “<REFERRING_EXPRESSION_SEGMENTATION>” 的值存储在一个新变量中。

  • 接下来,我们通过调用 方法并传入实际图像的副本创建一个 ImageDraw 实例来加载图像。

  • 然后,我们遍历多边形和标签值的组合。

  • 对于每个多边形,我们遍历单个多边形 并对其进行重塑。此时 是一个多维列表。

  • 我们知道一个多边形至少有三个顶点,这样才能连接起来。因此,我们检查有效性条件,确保 列表至少有三个列表项。

  • 最后,我们通过调用 方法并传入 来在实际图像的副本上绘制该多边形。同时我们还指定轮廓颜色和填充颜色。

  • 如果 Florence-2 视觉语言模型为这些多边形生成了标签,那么我们还可以通过调用 函数并传入标签来在实际图像的副本上绘制这些文本。

  • 最后,在绘制完 Florence-2 模型生成的所有多边形之后,我们通过调用 IPython 库的 函数来输出图像。

Florence-2 视觉语言模型成功地理解了我们的查询 “two black tires”,并且推断出图像中包含了一辆具有可见黑色轮胎的车辆。模型为这些轮胎生成了多边形表示,并用蓝色进行了遮罩。由于 Microsoft 团队精心准备的强大训练数据,该模型在多样化的计算机视觉任务中表现出色。

Florence-2 是由 Microsoft 团队从零开始创建和训练的视觉语言模型。与其他视觉语言模型不同,Florence-2 执行各种计算机视觉任务,包括物体检测、图像标题生成、短语物体检测、OCR、分割以及这些任务的组合。在这篇指南中,我们了解了如何下载 Florence-2 大型模型以及如何使用不同的提示与 Florence-2 进行不同的计算机视觉任务。

关键要点
  • Florence-2 模型有两个版本。一种是基础版,拥有 0.23 亿参数;另一种是大型版,拥有 0.7 亿参数。

  • Microsoft 团队在 FLD 5B 数据集上训练了 Florence-2 模型,这是一个包含不同图像任务的图像数据集,由 Microsoft 团队创建。

  • Florence-2 接受图像和提示作为输入。提示定义了 Florence-2 视觉模型应执行的任务类型。

  • 每个任务都会生成不同的输出,所有这些输出都以文本格式生成。

  • Florence-2 是一个开源模型,采用 MIT 许可证,因此可以用于商业应用。

—END—

英文原文:https://www.analyticsvidhya.com/blog/2024/07/how-to-perform-computer-vision-tasks-with-florence-2/

请长按或扫描二维码关注本公众号

最新文章
浙马纪录挑战赛 |2024第五届浙马纪录挑战赛竞赛规程!
2024第五届浙马纪录挑战赛竞赛规程一、组织单位主办单位:临平区人民政府、浙江省马拉松及路跑协会 承办单位:临平区文化和广电旅游体育局、杭州雁渡寒潭体育运动俱乐部 协办单位:浙江黄龙体育文化培训有限公司、杭州电视台青少•体育频道
利用YouTube玩转独立站营销和SEO
YouTube是世界最大的社交平台之一,也是世界第二大的搜索引擎和世界最大的视频网站。虽然网络上能找到很多关于优化YouTube视频创作和频道运营的教程,但是如何利用YouTube来使您的网站实际受益呢?以下8点建议将会帮助你! 接下来,我们会
选品时如何评估竞争热度:搜索量多少算是竞争不激烈?
讲到选品时,我总是反复强调,除非你家大业大资金雄厚运营彪悍,否则,一定要选择偏冷门的产品。 那什么才算是偏冷门的产品呢? 为了让选品更有针对性、可量化,我专门给出建议:选择Best Seller日销量在50-150单的产品。 这样的产品,大卖
正则表达式(awk、sort 、uniq 、tr 工具)
awk 选项 ‘模式或条件{编辑命令}’ 文件1 文件2…. //过滤并输出文件中符合条件的内容 awk -f 脚本文件 文件1 文件2… //从脚本中调用的编辑指令,过滤并输出内容 awk包含几个特殊的内建变量(可直接用)如下所示࿱
限地区: Apple 苹果AI笔记本电脑 2023Mac mini迷你主机 M28G 256G (实测成都等地有效),2785.21元
新款 Mac mini 搭载 M2 和 M2 Pro 芯片,搭载 M2 芯片的机型:M2 芯片具有 4 个性能核心和 4 个能效核心,10 核图形处理器,16 核神经网络引擎,100GB/s 内存带宽;支持 H.264、HEVC、ProRes 和 ProRes RAW 硬件加速,带有视频解码引擎、视
苹果id贷怎么申请—100%下款+苹果回租id贷24小时
苹果id贷怎么申请—100%下款+苹果回租id贷24小时上汽集团等在嘉兴成立股权投资合伙企业,出资额3亿天眼查App显示,近日,嘉兴屹晨股权投资合伙企业(有限合伙)成立,执行事务合伙人为上海上汽恒旭投资管理有限公司,出资额约3亿人民币,经
【U90(Kiss初恋版)WiFi万能钥匙下载】天语U90 Kiss初恋版WiFi万能钥匙5.1.02免费下载
下载WiFi万能钥匙,认准官方正版!免费安全WiFi热点,无忧一键连接。日常任务随时做,轻松赚现金外快~【积分赚钱】完成简单日常任务,轻轻松松赚现金【安全免费】随时随地免费连接,畅享安全免费WiFi,节省流量快人一步!【权威认证】通过
用AI一键生成美女写真,轻松打造你的虚拟女友!
Artbreeder:这个平台利用生成对抗网络(GAN)技术,用户可以通过调节不同的参数(如性别、面部特征)来调制自己想要的照片效果。Artbreeder的优点在于自由度极高,可以生成各种风格的图像,包括超现实主义和动漫风格。但有个缺点是对于新
内衣达人直播权限开通详情步骤,内衣类目怎么可以开直播?电商平台小店开通教程 内衣类目 - 副本
2022年05月17日何***100企业一站式服务,电商平台店铺开通|定向邀约报白|天猫入驻|京东入驻|抖音入驻/快手入驻/小红书入驻/拼多多入驻各电商平台店铺开通 医疗器械 药品 保健品滋补品 食品饮料 酒水 服饰鞋包 珠宝文玩 数码家电 本地生活服
第9章 大模型的伦理安全与隐私9.3 隐私保护技术9.3.1 数据匿名化与脱敏
作者:禅与计算机程序设计艺术 9.3.1 数据匿名化与脱敏 9.3.1.1 背景介绍 在大数据时代,越来越多的个人信息被收集、处理和分析,导致个人隐私风险的显著增加。因此,保护个人隐私成为一个重要的课题,而数
相关文章
推荐文章
发表评论
0评