pipeline(管道)是huggingface transformers库中一种极简方式使用大模型推理的抽象,将所有大模型分为音频(Audio)、计算机视觉(Computer vision)、自然语言处理(NLP)、多模态(Multimodal)等4大类,28小类任务(tasks)。共计覆盖32万个模型
今天介绍多模态的第五篇:蒙版生成(mask-generation),在huggingface库内可以使用的蒙版生成(mask-generation)模型有160个。
蒙版生成(mask-generation)是生成用于识别给定图像中的特定对象或感兴趣区域的蒙版的任务。蒙版通常用于分割任务,它们提供了一种精确的方法来隔离感兴趣的对象,以便进一步处理或分析。
facebook推出了Segment Anything (SA) 项目:一种用于图像分割的新任务、模型和数据集。在数据收集循环中使用facebook的高效模型,facebook构建了迄今为止最大的分割数据集,在 1100 万张获得许可且尊重隐私的图像上包含超过 10 亿个掩码。该模型经过设计和训练,可立即使用,因此它可以将零样本转移到新的图像分布和任务中。facebook在众多任务上评估了它的能力,发现它的零样本性能令人印象深刻——通常可以与之前的完全监督结果相媲美甚至更胜一筹。facebook在https://segment-anything.com上发布了Segment Anything 模型 (SAM) 和相应的数据集 (SA-1B),其中包含 1B 个掩码和 1100 万张图像,以促进对计算机视觉基础模型的研究。
SAM 模型由 3 个模块组成:
VisionEncoder
基于 VIT 的图像编码器。它使用对图像块的注意力来计算图像嵌入。使用相对位置嵌入。PromptEncoder
生成点和边界框的嵌入。MaskDecoder
双向转换器,在图像嵌入和点嵌入(->)之间以及点嵌入和图像嵌入之间执行交叉注意力机制。str
或ModelCard
,可选) — 属于此管道模型的模型卡。str
,可选)— 要使用的框架,"pt"
适用于 PyTorch 或"tf"
TensorFlow。必须安装指定的框架。str
,默认为""
)— 管道的任务标识符。int
,可选,默认为 8)— 当管道将使用DataLoader(传递数据集时,在 Pytorch 模型的 GPU 上)时,要使用的工作者数量。int
,可选,默认为 1)— 当管道将使用DataLoader(传递数据集时,在 Pytorch 模型的 GPU 上)时,要使用的批次的大小,对于推理来说,这并不总是有益的,请阅读使用管道进行批处理。int
,可选,默认为 -1)— CPU/GPU 支持的设备序号。将其设置为 -1 将利用 CPU,设置为正数将在关联的 CUDA 设备 ID 上运行模型。您可以传递本机torch.device
或str
太str
或torch.dtype
,可选) - 直接发送model_kwargs
(只是一种更简单的快捷方式)以使用此模型的可用精度(torch.float16
,,torch.bfloat16
...或"auto"
)bool
,可选,默认为False
)——标志指示管道的输出是否应以序列化格式(即 pickle)或原始输出数据(例如文本)进行。bool
,可选,默认为False
)— 是否输出边界框预测。bool
,可选,默认为False
) — 是否以RLE
格式输出掩码np.ndarray
或bytes
或str
或dict
)——图像或图像列表。float
,可选,默认为 0.0)— 将预测掩码转换为二进制值时使用的阈值。float
,可选[0,1]
,默认为 0.88)—应用于模型预测的掩模质量的过滤阈值。float
,可选,默认为 0.95) — 中的过滤阈值[0,1]
,使用在用于二值化模型的掩模预测的截止值变化下的掩模稳定性。int
,可选,默认为 1)— 计算稳定性分数时偏移截止值的量。float
,可选,默认为 0.7)— 非最大抑制用于过滤重复蒙版的框 IoU 截止值。int
,可选,默认为 0)— 如果是crops_n_layers>0
,则将再次对图像的裁剪部分运行掩码预测。设置要运行的层数,其中每层有 2**i_layer 个图像裁剪部分。float
,可选,默认为512 / 1500
) — 设置裁剪重叠的程度。在第一个裁剪层中,裁剪将重叠图像长度的这一部分。后续裁剪较多的层将缩小重叠部分。int
,可选,默认为1
)— 在第 n 层中采样的每侧点数按 crop_n_points_downscale_factor**n 缩小。float
,默认为 None)— 等待从网络获取图像的最长时间(以秒为单位)。如果为 None,则不设置超时,并且调用可能会永远阻塞。PIL.Image
) — 检测到的对象的二进制掩码,作为(width, height)
原始图像形状的 PIL 图像。如果未找到任何对象,则返回用零填充的掩码。float
)——可选,当模型能够估计标签和掩码描述的“对象”的置信度时。 基于pipeline的蒙版生成(mask-generation)任务,采用facebook/sam-vit-base进行图片分割并提取蒙版,代码如下:
import os
os.environ["HF_ENDPOINT"] = "https://hf-mirror.com"
os.environ["CUDA_VISIBLE_DEVICES"] = "2"
from transformers import pipeline
generator = pipeline(model="facebook/sam-vit-base", task="mask-generation")
outputs = generator(
"./parrots.png",
)
print(outputs)
执行后,自动下载模型文件并进行蒙版生成:
在huggingface上,我们将蒙版生成(mask-generation)模型按下载量从高到低排序,共计168个模型中,文中facebook的sam模型以不同尺寸的形式,霸榜。
本文对transformers之pipeline的蒙版生成(mask-generation)从概述、技术原理、pipeline参数、pipeline实战、模型排名等方面进行介绍,读者可以基于pipeline使用文中的2行代码极简的使用多模态中的蒙版生成(mask-generation)模型。