【人工智能】Transformers之Pipeline(七):图像分割(image-segmentation)

目录

一、引言

二、图像分割(image-segmentation)

[2.1 概述](#2.1 概述)

[2.2 技术原理](#2.2 技术原理)

[2.3 应用场景](#2.3 应用场景)

[2.4 pipeline参数](#2.4 pipeline参数)

[2.4.1 pipeline对象实例化参数](#2.4.1 pipeline对象实例化参数)

[2.4.2 pipeline对象使用参数](#2.4.2 pipeline对象使用参数)

[2.4 pipeline实战](#2.4 pipeline实战)

[2.5 模型排名](#2.5 模型排名)

三、总结


一、引言

pipeline(管道)是huggingface transformers库中一种极简方式使用大模型推理的抽象,将所有大模型分为音频(Audio)、计算机视觉(Computer vision)、自然语言处理(NLP)、多模态(Multimodal)等4大类,28小类任务(tasks)。共计覆盖32万个模型

今天介绍CV计算机视觉的第三篇,图像分割(image-segmentation),在huggingface库内有800个图像分类模型。

二、图像分割(image-segmentation)

2.1 概述

图像分割就是把图像分成若干个特定的、具有独特性质的区域并提出感兴趣目标的技术和过程。它是由图像处理到图像分析的关键步骤。现有的图像分割方法主要分以下几类:基于阈值的分割方法、基于区域的分割方法、基于边缘的分割方法以及基于特定理论的分割方法等。从数学角度来看,图像分割是将数字图像划分成互不相交的区域的过程。图像分割的过程也是一个标记过程,即把属于同一区域的像素赋予相同的编号。

2.2 技术原理

图像分割(image-segmentation)的默认模型为facebook/detr-resnet-50-panoptic,全称为:DEtection TRansformer(DETR)-resnet-50-全景。其中有3个要素:

  • DEtection TRansformer (DETR):于2020年5月由Facebook AI发布于《End-to-End Object Detection with Transformers》,提出了一种基于transformer的端到端目标检测方法,相比于YOLO具有更高的准确性,但速度不及YOLO,可以应用于医疗影像等不追求实时性的目标检测场景,对于追求实时性的目标检测场景,还是得YOLO,关于YOLOv10,可以看我之前的文章
  • ResNet-50:ResNet-50是一种深度残差网络(Residual Network),是ResNet系列中的一种经典模型。它由微软研究院的Kaiming He等人于2015年提出,被广泛应用于计算机视觉任务,如图像分类、目标检测和图像分割等。ResNet-50是一种迁移学习模型,迁移学习的核心思想是将源领域的知识迁移到目标领域中,可以采用样本迁移、特征迁移、模型迁移、关系迁移等手段。
  • 全景分割panoptic: DETR在COCO2017全景图(118k 带注释图像)上进行端到端训练,全景分割即可以将图片全景分割成多个区域,每个区域使用同一编号。

DEtection TRansformer(DETR)主体结构:

由三个主要部分组成:用于特征提取的CNN后端(ResNet)、transformer编码器-解码器和用于最终检测预测的前馈网络(FFN)。后端处理输入图像并生成激活图。transformer编码器降低通道维度并应用多头自注意力和前馈网络。transformer解码器使用N个物体嵌入的并行解码,并独立预测箱子坐标和类别标签,使用物体查询。DETR利用成对关系,从整个图像上下文中受益,共同推理所有物体。

DEtection TRansformer(DETR)应用于全景分割:

将图片内的box进行embedding后输入至MHA中提取每个box中的图片信息,采用Resnet生成激活图,采用pixel-wise(像素级别)的损失函数进行学习。pixel-wise损失函数是计算预测图像与目标图像的像素间的损失。属于像素间类型的损失函数,常见的有:MSE(L2损失),MAE(L1损失)和交叉熵等。计算机视觉领域的损失函数有3类:pixel-wise(像素级别),patch-wise(块级别),image-wise(图片级别)。

2.3 应用场景

  • 医学影像分析:在医疗领域,图像分割用于识别和分割肿瘤、器官等,帮助医生进行诊断和手术规划。
  • 自动驾驶:车辆需要识别道路、行人、其他车辆等,图像分割技术可以辅助车辆理解周围环境,提高安全性和导航准确性。
  • 遥感与地图制作:通过分割卫星或无人机图像,可以自动识别水体、森林、建筑物等,用于城市规划、环境监测和自然资源管理。
  • 增强现实:在AR应用中,分割技术用于区分前景和背景,使得虚拟物体能够自然地融入真实世界场景中。
  • 时尚与零售:用于服装分割,帮助自动识别和分类衣物,用于在线购物的虚拟试穿或商品推荐。
  • 自然资源管理:如森林火灾监测,通过分割图像识别火源区域。
  • 体育分析:分析运动员动作,通过分割跟踪特定运动员或球的运动轨迹。

2.4 pipeline参数

2.4.1 pipeline对象实例化参数

  • modelPreTrainedModelTFPreTrainedModel)--- 管道将使用其进行预测的模型。 对于 PyTorch,这需要从PreTrainedModel继承;对于 TensorFlow,这需要从TFPreTrainedModel继承。

  • image_processor ( BaseImageProcessor ) --- 管道将使用的图像处理器来为模型编码数据。此对象继承自 BaseImageProcessor

  • modelcardstrModelCard可选)--- 属于此管道模型的模型卡。

  • frameworkstr可选 )--- 要使用的框架,"pt"适用于 PyTorch 或"tf"TensorFlow。必须安装指定的框架。

    如果未指定框架,则默认为当前安装的框架。如果未指定框架且安装了两个框架,则默认为model的框架,如果未提供模型,则默认为 PyTorch。

  • taskstr,默认为"")--- 管道的任务标识符。

  • num_workersint可选 ,默认为 8)--- 当管道将使用DataLoader(传递数据集时,在 Pytorch 模型的 GPU 上)时,要使用的工作者数量。

  • batch_sizeint可选 ,默认为 1)--- 当管道将使用DataLoader (传递数据集时,在 Pytorch 模型的 GPU 上)时,要使用的批次的大小,对于推理来说,这并不总是有益的,请阅读使用管道进行批处理

  • args_parserArgumentHandler可选) - 引用负责解析提供的管道参数的对象。

  • deviceint可选 ,默认为 -1)--- CPU/GPU 支持的设备序号。将其设置为 -1 将利用 CPU,设置为正数将在关联的 CUDA 设备 ID 上运行模型。您可以传递本机torch.devicestr

  • torch_dtypestrtorch.dtype可选 ) - 直接发送model_kwargs(只是一种更简单的快捷方式)以使用此模型的可用精度(torch.float16,,torch.bfloat16...或"auto"

  • binary_outputbool可选 ,默认为False)------标志指示管道的输出是否应以序列化格式(即 pickle)或原始输出数据(例如文本)进行。

2.4.2 pipeline对象使用参数

  • imagesstrList[str]PIL.ImageList[PIL.Image]------管道处理三种类型的图像:

    • 包含指向图像的 HTTP(S) 链接的字符串
    • 包含图像本地路径的字符串
    • 直接在 PIL 中加载的图像

    管道可以接受单张图片或一批图片。一批图片中的图片必须全部采用相同的格式:全部为 HTTP(S) 链接、全部为本地路径或全部为 PIL 图片。

  • subtaskstr可选 )--- 要执行的分割任务,根据模型功能 选择 [ semanticinstance和]。如果未设置,管道将尝试按以下顺序解析: ,,。panoptic``panoptic``instance``semantic

  • thresholdfloat可选,默认为 0.9)--- 用于过滤预测掩码的概率阈值。

  • mask_thresholdfloat可选,默认为 0.5)--- 将预测掩码转换为二进制值时使用的阈值。

  • overlap_mask_area_thresholdfloat可选,默认为 0.5)--- 掩膜重叠阈值,用于消除小的、不连续的段。

  • timeout可选 float,默认为 None)--- 等待从网络获取图像的最长时间(以秒为单位)。如果为 None,则不设置超时,并且调用可能会永远阻塞。

2.4 pipeline实战

识别http链接中的物品

采用pipeline代码如下

python 复制代码
import os
os.environ["HF_ENDPOINT"] = "https://hf-mirror.com"
os.environ["CUDA_VISIBLE_DEVICES"] = "2"

from transformers import pipeline
image_segmentation = pipeline(task="image-segmentation",model="facebook/detr-resnet-50-panoptic")
output = image_segmentation("http://images.cocodataset.org/val2017/000000039769.jpg")
print(output)
"""
[{'score': 0.994096, 'label': 'cat', 'mask': <PIL.Image.Image image mode=L size=640x480 at 0x7F24E13B4710>}, {'score': 0.998669, 'label': 'remote', 'mask': <PIL.Image.Image image mode=L size=640x480 at 0x7F24E13B4950>}, {'score': 0.999476, 'label': 'remote', 'mask': <PIL.Image.Image image mode=L size=640x480 at 0x7F24A2836250>}, {'score': 0.972207, 'label': 'couch', 'mask': <PIL.Image.Image image mode=L size=640x480 at 0x7F24A2837210>}, {'score': 0.999423, 'label': 'cat', 'mask': <PIL.Image.Image image mode=L size=640x480 at 0x7F24A2836290>}]
"""
output[0]["mask"].save(output[0]["label"]+".png")

执行后,自动下载模型文件:

图像分割后的结果会存入字典list中,将图片Image保存后,打开可见分割出的图片:

2.5 模型排名

在huggingface上,我们将图像分割(image-segmentation)模型按下载量从高到低排序:

三、总结

本文对transformers之pipeline的图像分割(image-segmentation)从概述、技术原理、pipeline参数、pipeline实战、模型排名等方面进行介绍,读者可以基于pipeline使用文中的2行代码极简的使用计算机视觉中的图像分割(image-segmentation)模型。

期待您的3连+关注,如何还有时间,欢迎阅读我的其他文章:

《Transformers-Pipeline概述》

【人工智能】Transformers之Pipeline(概述):30w+大模型极简应用

《Transformers-Pipeline 第一章:音频(Audio)篇》

【人工智能】Transformers之Pipeline(一):音频分类(audio-classification)

【人工智能】Transformers之Pipeline(二):自动语音识别(automatic-speech-recognition)

【人工智能】Transformers之Pipeline(三):文本转音频(text-to-audio/text-to-speech)

【人工智能】Transformers之Pipeline(四):零样本音频分类(zero-shot-audio-classification)

《Transformers-Pipeline 第二章:计算机视觉(CV)篇》

【人工智能】Transformers之Pipeline(五):深度估计(depth-estimation)​​​​​​​

【人工智能】Transformers之Pipeline(六):图像分类(image-classification)

【人工智能】Transformers之Pipeline(七):图像分割(image-segmentation)

【人工智能】Transformers之Pipeline(八):图生图(image-to-image)

【人工智能】Transformers之Pipeline(九):物体检测(object-detection)

【人工智能】Transformers之Pipeline(十):视频分类(video-classification)

【人工智能】Transformers之Pipeline(十一):零样本图片分类(zero-shot-image-classification)

【人工智能】Transformers之Pipeline(十二):零样本物体检测(zero-shot-object-detection)

《Transformers-Pipeline 第三章:自然语言处理(NLP)篇》

【人工智能】Transformers之Pipeline(十三):填充蒙版(fill-mask)

【人工智能】Transformers之Pipeline(十四):问答(question-answering)

【人工智能】Transformers之Pipeline(十五):总结(summarization)

【人工智能】Transformers之Pipeline(十六):表格问答(table-question-answering)

【人工智能】Transformers之Pipeline(十七):文本分类(text-classification)

【人工智能】Transformers之Pipeline(十八):文本生成(text-generation)

【人工智能】Transformers之Pipeline(十九):文生文(text2text-generation)

【人工智能】Transformers之Pipeline(二十):令牌分类(token-classification)

【人工智能】Transformers之Pipeline(二十一):翻译(translation)

【人工智能】Transformers之Pipeline(二十二):零样本文本分类(zero-shot-classification)

《Transformers-Pipeline 第四章:多模态(Multimodal)篇》

【人工智能】Transformers之Pipeline(二十三):文档问答(document-question-answering)

【人工智能】Transformers之Pipeline(二十四):特征抽取(feature-extraction)

【人工智能】Transformers之Pipeline(二十五):图片特征抽取(image-feature-extraction)

【人工智能】Transformers之Pipeline(二十六):图片转文本(image-to-text)

【人工智能】Transformers之Pipeline(二十七):掩码生成(mask-generation)

【人工智能】Transformers之Pipeline(二十八):视觉问答(visual-question-answering)

相关推荐
网易独家音乐人Mike Zhou2 小时前
【卡尔曼滤波】数据预测Prediction观测器的理论推导及应用 C语言、Python实现(Kalman Filter)
c语言·python·单片机·物联网·算法·嵌入式·iot
安静读书2 小时前
Python解析视频FPS(帧率)、分辨率信息
python·opencv·音视频
小陈phd2 小时前
OpenCV从入门到精通实战(九)——基于dlib的疲劳监测 ear计算
人工智能·opencv·计算机视觉
zhixingheyi_tian2 小时前
Spark 之 Aggregate
大数据·分布式·spark
PersistJiao2 小时前
Spark 分布式计算中网络传输和序列化的关系(一)
大数据·网络·spark
Guofu_Liao3 小时前
大语言模型---LoRA简介;LoRA的优势;LoRA训练步骤;总结
人工智能·语言模型·自然语言处理·矩阵·llama
小二·3 小时前
java基础面试题笔记(基础篇)
java·笔记·python
宅小海5 小时前
scala String
大数据·开发语言·scala
小白的白是白痴的白5 小时前
11.17 Scala练习:梦想清单管理
大数据
小喵要摸鱼5 小时前
Python 神经网络项目常用语法
python