如何使用Florence -2 -Analytics Vidhya执行计算机视觉任务
介绍
原始变压器的引入为当前的大语言模型铺平了道路。同样,在引入变压器模型之后,引入了视觉变压器(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/imghw/default1.png" data-src="https://img.php.cn/upload/article/000/000/000/174502929770135.png" 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中文网其他相关文章!

热AI工具

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

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

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

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

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

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

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

本文回顾了AI最高的艺术生成器,讨论了他们的功能,对创意项目的适用性和价值。它重点介绍了Midjourney是专业人士的最佳价值,并建议使用Dall-E 2进行高质量的可定制艺术。

Chatgpt 4当前可用并广泛使用,与诸如ChatGpt 3.5(例如ChatGpt 3.5)相比,在理解上下文和产生连贯的响应方面取得了重大改进。未来的发展可能包括更多个性化的间

Meta的Llama 3.2:多模式和移动AI的飞跃 Meta最近公布了Llama 3.2,这是AI的重大进步,具有强大的视觉功能和针对移动设备优化的轻量级文本模型。 以成功为基础

本文比较了诸如Chatgpt,Gemini和Claude之类的顶级AI聊天机器人,重点介绍了其独特功能,自定义选项以及自然语言处理和可靠性的性能。

文章讨论了Grammarly,Jasper,Copy.ai,Writesonic和Rytr等AI最高的写作助手,重点介绍了其独特的内容创建功能。它认为Jasper在SEO优化方面表现出色,而AI工具有助于保持音调的组成

本文评论了Google Cloud,Amazon Polly,Microsoft Azure,IBM Watson和Discript等高级AI语音生成器,重点介绍其功能,语音质量和满足不同需求的适用性。

猎鹰3:革命性的开源大语模型 Falcon 3是著名的猎鹰系列LLMS系列中的最新迭代,代表了AI技术的重大进步。由技术创新研究所(TII)开发

2024年见证了从简单地使用LLM进行内容生成的转变,转变为了解其内部工作。 这种探索导致了AI代理的发现 - 自主系统处理任务和最少人工干预的决策。 Buildin
