介绍
原始变压器的引入为当前的大语言模型铺平了道路。同样,在引入变压器模型之后,引入了视觉变压器(VIT)。就像变形金刚在理解文本和生成响应的文本中表现出色一样,视觉变压器模型也被开发出来理解图像并提供给定图像的信息。这些导致视觉语言模型,在理解图像方面表现出色。微软已经向前迈出了一步,并引入了一个模型,该模型能够仅使用单个模型执行许多视觉任务。在本指南中,我们将查看Microsoft发布的名为Florence-2的模型,旨在解决许多不同的视觉任务。
学习目标
- 介绍佛罗伦萨-2,一种视觉语言模型。
- 了解训练佛罗伦萨-2的数据。
- 了解佛罗伦萨-2家族中的不同型号。
- 了解如何下载佛罗伦萨-2。
- 编写代码以使用Florence-2执行不同的计算机视觉任务。
本文作为数据科学博客马拉松的一部分发表。
目录
- 什么是佛罗伦萨-2?
- 与佛罗伦萨-2的图像字幕
- 佛罗伦萨-2的对象检测
- 佛罗伦萨-2分割
- 常见问题
什么是佛罗伦萨-2?
Florence-2是Microsoft团队开发的视觉语言模型(VLM)。佛罗伦萨-2有两种尺寸。一个是0.23B版本,另一个是0.77b版本。这些低尺寸使每个人都可以轻松地在CPU本身上运行这些模型。创建了佛罗伦萨-2,请记住一个模型可以解决所有问题。对佛罗伦萨-2进行了训练,可以解决不同的任务,包括对象检测,对象分割,图像字幕(甚至生成详细的字幕),短语分割,OCR(光学字符识别)以及这些组合。
Florence-2 Vision语言模型在FLD 5B数据集上进行了培训。该FLD-5B是由Microsoft团队创建的数据集。该数据集在约1.26亿张图像上包含约54亿个文本注释。其中包括13亿个文本区域注释,5亿个文本注释和36亿条文本短语区域注释。 Florence-2接受文本说明和图像输入,为OCR,对象检测或图像字幕等任务生成文本结果。
该体系结构包含一个视觉编码器,然后是变压器编码器解码器块,为了损失,它们可以使用标准损耗函数,即交叉熵损失。 Florence-2模型执行了三种类型的区域检测:用于对象检测的框表示,OCR文本检测的四框表示以及用于分割任务的多边形表示。
与佛罗伦萨-2的图像字幕
图像字幕是一项视觉语言任务,在给定图像的情况下,深度学习模型将输出有关图像的标题。根据模型经过的培训,该标题可以简短或详细。执行这些任务的模型经过巨大的图像字幕培训,它们在其中学习如何输出文本,给定图像。他们训练的数据越多,他们就越擅长描述图像。
下载和安装
我们将首先下载和安装一些我们需要运行佛罗伦萨视觉模型的库。
!
- 变形金刚: HuggingFace的Transformers库为您可以下载的不同任务提供了各种深度学习模型。
- 加速: HuggingFace的加速库可以改善通过GPU服务模型时的模型推理时间。
- Flash_attn: Flash注意力库实现了比原始库更快的关注算法,并且在佛罗伦萨-2模型中使用。
- EINOPS:爱因斯坦操作简化了代表矩阵乘法并在佛罗伦萨-2模型中实现的。
下载佛罗伦萨-2型号
现在,我们需要下载Florence-2模型。为此,我们将使用以下代码。
从变形金刚导入自动化处理器AutomodelforCausAllm model_id ='Microsoft/Florence-2-large-ft' model = automodelforcausallm.from_pretrate(model_id,trust_remote_code = true).eval()。cuda() processor = autopersesor.from_pretrataining(model_id,trust_remote_code = true,device_map =“ cuda”)
- 我们首先导入AutomodelForCausAllm和AutoPeroCessor。
- 然后,我们将模型名称存储在model_name变量中。在这里,我们将与Florence-2大调节模型一起工作。
- 然后,我们通过调用.from_pretaining()函数赋予其模型名称并设置trust_remote_code = true来创建AutoModelforCausAllm的实例,这将从HF存储库中下载该模型。
- 然后,我们通过调用.eval()来将此模型设置为评估模型,并通过调用.cuda()函数将其发送到GPU。
- 然后,我们通过调用.from_pretaining()并给出模型名称并将Device_map设置为CUDA来创建一个自动处理器的实例。
Autopersestor与自动训练器非常相似。但是,自动传动器类涉及文本和文本令牌化。而自动处理器则处理文本和图像令牌化,因为佛罗伦萨-2处理图像数据,我们与自动处理者合作。
现在,让我们拍摄图像:
从PIL导入图像 image = image.open(“/content/beach.jpg”)
在这里,我们拍了一张海滩照片。
生成标题
现在,我们将将这张图像提供给Florence-2 Vision语言模型,并要求它生成标题。
提示=“ <catchion>” 输入=处理器(text =提示,images = image,return_tensors =“ pt”)。to(“ cuda”) 生成_ids = model.generate( input_ids = inputs [“ input_ids”], pixel_values = inputs [“ pixel_values”], max_new_tokens = 512, do_sample = false, ) text_generations = processor.batch_decode(generated_ids, skip_special_tokens = false)[0] 结果= processor.post_process_generation(text_generations, 任务=提示,image_size =(image.width,image.height)) 打印(结果[提示])</catchion>
- 我们首先创建提示。
- 然后,我们将提示和图像同时给处理器类,然后返回Pytorch传感器。我们将它们提供给GPU,因为该模型位于GPU中并将其存储在变量输入中。
- 输入变量包含input_ids,即令牌ID和图像的像素值。
- 然后,我们调用模型的生成函数并给出输入ID,即图像像素值。我们将最大生成的令牌设置为512将采样保留为false,并将生成的令牌存储在生成的_ids中。
- 然后,我们调用处理器的.batch_decode函数将其授予生成的_ids,并将skip_special_tokens flag设置为false。这将是一个列表,因此我们需要列表的第一个元素。
- 最后,我们通过调用.post_process_generated并将其生成的文本,任务类型和image_size作为元组来进行后处理。
运行代码并看到上面的输出图片,我们看到该模型为图像生成了标题“雨伞和休息室在海滩上的雨伞和休息室”。上面的图像标题非常短。
提供提示
我们可以通过提供其他提示来迈出下一步,例如
尝试此操作的代码可以在下面看到:
提示=“ <lated_caption>” 输入=处理器(text =提示,images = image,return_tensors =“ pt”)。to(“ cuda”) 生成_ids = model.generate( input_ids = inputs [“ input_ids”], pixel_values = inputs [“ pixel_values”], max_new_tokens = 512, do_sample = false, ) text_generations = processor.batch_decode(generated_ids, skip_special_tokens = false)[0] 结果= processor.post_process_generation(text_generations, 任务=提示,image_size =(image.width,image.height)) 打印(结果[提示])</lated_caption>
提示=“ <more_detailed_caption>” 输入=处理器(text =提示,images = image,return_tensors =“ pt”)。to(“ cuda”) 生成_ids = model.generate( input_ids = inputs [“ input_ids”], pixel_values = inputs [“ pixel_values”], max_new_tokens = 512, do_sample = false, ) text_generations = processor.batch_decode(generated_ids, skip_special_tokens = false)[0] 结果= processor.post_process_generation(text_generations, 任务=提示,image_size =(image.width,image.height)) 打印(结果[提示])</more_detailed_caption>
在这里,我们使用了
佛罗伦萨-2的对象检测
对象检测是计算机视觉中著名的任务之一。它处理给定图像的找到一些对象。在对象检测中,该模型标识图像并提供对象周围边界框的X和Y坐标。 Florence-2 Vision语言模型非常能够检测给定图像的对象。
让我们使用以下图像尝试一下:
image = image.open(“/content/van.jpg”)
在这里,我们有一张明亮的橙色面包车的图像,背景中有一栋白色的建筑物。
为佛罗伦萨-2视觉语言模型提供图像
现在,让我们将此图像提供给佛罗伦萨-2视觉语言模型。
提示=“ <od>” 输入=处理器(text =提示,images = image,return_tensors =“ pt”)。to(“ cuda”) 生成_ids = model.generate( input_ids = inputs [“ input_ids”], pixel_values = inputs [“ pixel_values”], max_new_tokens = 512, do_sample = false, ) text_generations = processor.batch_decode(generated_ids, skip_special_tokens = false)[0] 结果= processor.post_process_generation(text_generations, 任务=提示,image_size =(image.width,image.height)) </od>
对象检测的过程与我们刚刚完成的图像字幕任务非常相似。这里唯一的区别是,我们将提示更改为
输出存储在变量命名结果中。可变结果的格式{:{'bboxes':[x1,y1,x2,y2],…],'labels':['label1','label2',…]}}。因此,佛罗伦萨-2视觉模型可为每个标记的边界框,y coordins for for for每个对象。
在图像上绘制界限
现在,我们将使用我们拥有的坐标在图像上绘制这些边界框。
导入matplotlib.pyplot作为PLT 导入matplotlib.patches作为补丁 图,ax = plt.subplots() ax.Imshow(图像) 对于bbox,在zip中标记(结果[提示] ['bboxes'],结果[提示] ['labels']): x1,y1,x2,y2 = bbox rect_box = patches.trectangle((x1,y1),x2-x1,y2-y1,lineWidth = 1, edgecolor ='r',faceColor ='none') ax.add_patch(rect_box) plt.text(x1,y1,label,color ='white',fontsize = 8,bbox = dict(faceColor ='red',alpha = 0.5)) ax.axis('off') plt.show()
- 为了绘制图像周围的矩形边界框,我们与matplotlib库一起工作。
- 我们首先创建一个图形和一个轴,然后显示给佛罗伦萨-2视觉语言模型的图像。
- 在这里,模型输出的边界框是包含x,y坐标的列表,在最终输出中,有一个边界框的列表,即每个标签都有其自己的边界框。
- 因此,我们迭代边界框的列表。
- 然后,我们打开边界框的X和Y坐标。
- 然后,我们与最后一步中解开包装的坐标一起绘制矩形。
- 最后,我们将其修补为当前显示的图像。
- 我们甚至需要在边界框中添加标签,以说明边界框包含什么对象。
- 最后,我们卸下轴。
运行此代码并查看图片,我们看到我们为其提供的范围图像生成了许多界限框。我们看到该模型已检测到面包车,窗户和车轮,并能够为每个标签提供正确的坐标。
标题为短语接地
接下来,我们将执行一个名为“标题为“短语接地”的任务”,佛罗伦萨-2模型支持。该模型的作用是给定图像和标题,短语接地的任务是找到给定标题中的名词短语中提到的每个 /最相关的实体 /对象。
我们可以使用以下代码来查看此任务:
提示=“ <catchion_to_phrase_grounding>一辆橙色的货车停在白色建筑物前” task_type =“ <catchion_to_phrase_grounding>” 输入=处理器(text =提示,images = image,return_tensors =“ pt”)。to(“ cuda”) 生成_ids = model.generate( input_ids = inputs [“ input_ids”], pixel_values = inputs [“ pixel_values”], max_new_tokens = 512, do_sample = false, ) text_generations = processor.batch_decode(generated_ids, skip_special_tokens = false)[0] 结果= processor.post_process_generation(text_generations, 任务= task_type,image_size =(image.width,image.height)) </catchion_to_phrase_grounding></catchion_to_phrase_grounding>
在此提示,我们将其提供“
导入matplotlib.pyplot作为PLT 导入matplotlib.patches作为补丁 图,ax = plt.subplots() ax.Imshow(图像) 对于bbox,在zip中标记(结果[task_type] ['bboxes'],结果[task_type] ['labels']): x1,y1,x2,y2 = bbox rect_box = patches.trectangle((x1,y1),x2-x1,y2-y1,lineWidth = 1, edgecolor ='r',faceColor ='none') ax.add_patch(rect_box) plt.text(x1,y1,label,color ='white',fontsize = 8,bbox = dict(faceColor ='red',alpha = 0.5)) ax.axis('off') plt.show()
在这里,我们看到佛罗伦萨-2视觉语言模型能够从中提取两个实体。一个是橙色的面包车,另一辆是白色的建筑。然后,佛罗伦萨-2为每个实体生成了边界框。这样,给定标题,该模型可以从给定标题中提取相关实体/对象,并能够为这些对象生成相应的边界框。
佛罗伦萨-2分割
分割是一个过程,在其中拍摄图像,并为图像的多个部分生成掩模。每个掩码是一个对象。分割是对象检测的下一个阶段。在对象检测中,我们仅找到图像的位置并生成边界框。但是在分割中,我们没有生成一个矩形边界框,而是生成一个将处于对象形状的掩码,因此就像为该对象创建掩码一样。这很有帮助,因为我们不仅知道对象的位置,而且甚至知道对象的形状。幸运的是,佛罗伦萨-2视觉语言模型支持细分。
对图像进行分割
我们将尝试对我们的面包车形象进行细分。
提示=“ <refering_expression_segentation>两个黑色轮胎” task_type =“ <refering_expression_sementation>” 输入=处理器(text =提示,images = image,return_tensors =“ pt”)。to(“ cuda”) 生成_ids = model.generate( input_ids = inputs [“ input_ids”], pixel_values = inputs [“ pixel_values”], max_new_tokens = 512, do_sample = false, ) text_generations = processor.batch_decode(generated_ids, skip_special_tokens = false)[0] 结果= processor.post_process_generation(text_generations, 任务= task_type,image_size =(image.width,image.height)) </refering_expression_sementation></refering_expression_segentation>
- 在这里,该过程类似于图像字幕和对象检测任务。我们首先提供提示。
- 这里的提示为“
两个黑色轮胎”,其中该任务为分割。 - 分割将基于提供的文本输入,在这里是“两个黑色轮胎”。
- 因此,Florence-2模型将尝试生成与此文本输入密切相关的面具和所提供的图像。
在这里,结果变量将为格式{:{'polygons':[[[[[polygon]],…],'labels':[[“”,“”,…]}}},其中每个对象/掩码由多边形列表表示。每个对象/掩码列表。
创建口罩并覆盖实际图像
现在,我们将创建这些蒙版并在实际图像上叠加它们,以便我们可以更好地可视化。
导入副本 导入numpy作为NP 来自ipython.display导入显示 从PIL导入图像,ImageDraw,ImageFont output_image = copy.deepcopy(图像) res =结果[task_type] draw = imagedraw.draw(output_image) 比例= 1 对于多边形,在zip中标记(res ['polygons'],res ['labels']): fill_color =“蓝色” 多边形中的_polygon: _polygon = np.Array(_polygon).Reshape(-1,2) 如果Len(_polygon)<p><img src="/static/imghwm/default1.png" data-src="https://img.php.cn/upload/article/000/000/000/174502929770135.png?x-oss-process=image/resize,p_40" class="lazy" alt="如何使用Florence -2 -Analytics Vidhya执行计算机视觉任务" ></p><h4 id="解释">解释</h4>
- 在这里,我们首先从PIL库中导入各种工具进行图像处理。
- 我们在新变量中创建图像的深层副本,并将键“
”的值存储。 - 接下来,我们通过调用.draw()方法创建ImageDraw实例并给出实际映像的副本来加载图像。
- 接下来,我们迭代多边形和标签值的拉链。
- 对于每个多边形,我们用名称_polygon迭代单个多边形并重塑它。 _polygon现在是一个高维列表。
- 我们知道_polygon必须至少有3个侧面,以便可以连接。因此,我们检查了此有效性条件,以查看_polygon列表至少有3个列表项目。
- 最后,我们通过调用.polygon()方法并将其授予_polygon,在实际图像的副本上绘制此_polygon。除此之外,我们甚至还给它带有轮廓颜色和填充颜色。
- 如果Florence-2 Vision语言模型为这些多边形生成标签,那么我们甚至可以通过调用.text()函数并将其列为标签来将此文本绘制在实际图像的副本上。
- 最后,在绘制了佛罗伦萨-2模型生成的所有多边形之后,我们通过调用ipython库的显示函数来输出图像。
Florence-2 Vision语言模型成功地理解了我们对“两个黑色轮胎”的查询,并推断出图像包含一辆带有可见黑色轮胎的车辆。该模型生成了这些轮胎的多边形表示,并用蓝色掩盖。由于Microsoft团队策划了强大的培训数据,该模型在各种计算机视觉任务上都表现出色。
结论
Florence-2是Microsoft团队从头开始创建和训练的视觉语言模型。与其他视觉语言模型不同,Florence-2执行各种计算机视觉任务,包括对象检测,图像字幕,短语对象检测,OCR,细分和这些组合。在本指南中,我们研究了如何下载Florence-2大型模型以及如何使用Florence-2更改提示执行不同的计算机视觉任务。
关键要点
- Florence-2型号有两种尺寸。一个是基本变体,它是20亿个参数版本,另一个是大型变体,是7亿参数版本。
- Microsoft Team在FLD 5B数据集中培训了Florence-2模型,该模型是一个图像数据集,其中包含Microsoft Team创建的不同图像任务。
- Florence-2接受图像以及提示输入。提示定义了佛罗伦萨-2视觉模型应执行的任务类型的情况。
- 每个任务都会生成不同的输出,所有这些输出都是以文本格式生成的。
- Florence-2是具有MIT许可证的开源模型,因此可以使用商业应用程序。
常见问题
Q1。什么是佛罗伦萨-2?A. Florence-2是由Microsoft团队开发的视觉语言模型,并以两种尺寸(0.23B参数和0.7B参数版本)发布。
Q2。自动处理器与自动训练器有何不同?答:自动访问器只能处理将文本转换为令牌的文本数据。另一方面,多模式模型的自动处理前处理器数据甚至包括图像数据。
Q3。什么是FLD-5B?A. FLD-5B是由Microsoft团队策划的图像数据集。它包含约54亿张图像字幕的1.26亿张图像。
Q4。佛罗伦萨-2模型输出什么?A. Florence-2模型根据给定的输入图像和输入文本输出文本。该文本可以是简单的图像字幕,也可以是界框,如果任务是对象检测或分割,则可以坐标。
Q5。 Florence-2开源吗?答:是的。 Florence-2是根据MIT许可发布的,因此使其成为开源,并且无需使用HuggingFace进行身份验证即可使用此模型。
本文所示的媒体不由Analytics Vidhya拥有,并由作者酌情使用。
以上是如何使用Florence -2 -Analytics Vidhya执行计算机视觉任务的详细内容。更多信息请关注PHP中文网其他相关文章!

本文探讨了“人工智能代理机构衰败”日益增长的关注 - 我们独立思考和决定的能力逐渐下降。 这对于越来越自动化世界的业务领袖尤其至关重要

有没有想过像Siri和Alexa这样的AI代理商是如何工作的?这些智能系统在我们的日常生活中变得越来越重要。本文介绍了反应模式,这种方法通过结合推理来增强AI代理

芝加哥大学校长Paul Alivisatos在一月份达沃斯论坛上接受德勤Nitin Mittal采访时表示:“我认为人工智能工具正在改变大学生的学习机会。我们坚信以核心课程培养学生,但越来越多的人也希望获得计算和统计思维的视角。” 他认为,人们将不得不成为人工智能的创造者和共同创造者,这意味着学习和其他方面都需要适应一些重大变化。 数字智能与批判性思维 乔治·华盛顿大学的Alexa Joubin教授在Phys.org发表的一篇文章中,将人工智能描述为人文科学的“启发式工具”,并探讨了它如何改变

Langchain是用于构建复杂AI应用程序的强大工具包。 它的代理体系结构特别值得注意,使开发人员能够创建能够独立推理,决策和行动的智能系统。这个咨询

径向基函数神经网络(RBFNNS):综合指南 径向基函数神经网络(RBFNN)是利用径向基础功能激活的强大类型的神经网络体系结构。 它们独特的结构使

脑部计算机界面(BCIS)将大脑直接连接到外部设备,将大脑冲动转化为没有身体运动的动作。 该技术利用植入传感器捕获大脑信号,将其转换为数字订票

这一“带有数据的领先”情节以Ines Montani,爆炸AI的联合创始人兼首席执行官Ines Montani,以及Spacy and Prodigy的共同开发者。 INE提供了有关这些工具发展的专家见解,爆炸的独特商业模式以及TR

本文探讨了检索增强发电(RAG)系统以及AI代理如何增强其功能。 传统的抹布系统虽然可用于利用自定义企业数据,但仍受诸如缺乏实时dat之类的限制


热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

Video Face Swap
使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

热工具

Dreamweaver CS6
视觉化网页开发工具

适用于 Eclipse 的 SAP NetWeaver 服务器适配器
将Eclipse与SAP NetWeaver应用服务器集成。

螳螂BT
Mantis是一个易于部署的基于Web的缺陷跟踪工具,用于帮助产品缺陷跟踪。它需要PHP、MySQL和一个Web服务器。请查看我们的演示和托管服务。

禅工作室 13.0.1
功能强大的PHP集成开发环境

PhpStorm Mac 版本
最新(2018.2.1 )专业的PHP集成开发工具