实例分割——Mask R-CNN、YOLOV8、RTMDET、DeepLab四种实例分割算法比对

news2024/11/17 1:30:06

1.概述

1.1 语义分割与实例分割

实例分割和语义分割都是计算机视觉领域中图像分割的任务,它们在目标和方法上有一些区别:

语义分割

  • 语义分割的目标是对图像中的每个像素打上类别标签,即识别出图像中每个像素属于哪个预定义的类别(例如,人、汽车、建筑物等)。
  • 语义分割不区分同类对象的不同实例,关注的是像素级别的分类,而不是特定实例的识别。
  • 语义分割的典型应用包括自动驾驶、医学影像分析、机器人视觉等。
  • 语义分割模型通常使用编码器-解码器架构,如FCN、U-Net、DeepLab等,它们能够保留图像的空间分辨率,同时学习到像素级别的分类特征。

实例分割

  • 实例分割不仅需要识别出图像中的对象,还要区分对象的不同实例。这意味着即使是同一类别的对象,实例分割模型也需要能够区分它们,并对每个实例的每个像素进行标记。
  • 实例分割是目标检测和语义分割的结合,它要求模型同时输出对象的类别和位置(通过边界框),以及对象的像素级掩码。
  • 实例分割在应用上更注重个体的区分,如在拥挤场景下区分不同的人或物体。
  • 实例分割的算法包括Mask R-CNN、YOLOv8等,这些算法通常包含目标检测的组件来定位图像中的对象,然后对每个提议的区域进行像素级的分割。

1.2 实例分割任务

两种分割方法的评估指标也有所不同。语义分割常用的评估指标是mIoU(mean Intersection-Over-Union),而实例分割除了使用mIoU评估分割质量外,还需要评估检测的准确性。与目标检测不同,实例分割不仅识别对象的存在,还为每个检测到的对象生成一个像素级别的掩码,这允许更精细的分析和编辑。

实例分割的应用非常广泛,包括但不限于:

  1. 自动驾驶:识别和区分道路上的行人、车辆、交通标志等。
  2. 医学成像:在医学图像中分割不同的器官或病变区域。
  3. 机器人视觉:帮助机器人识别和操作特定的物体。
  4. 图像编辑:在图像编辑软件中,用户可以轻松地选择和编辑特定的对象。

实例分割的算法通常包括以下几个步骤:

  1. 候选区域生成:使用区域建议网络(Region Proposal Network, RPN)或其他方法来生成可能包含对象的区域。
  2. 分类和边界框回归:对这些候选区域进行分类,判断它们是否包含特定的类别,并对边界框进行调整以更准确地定位对象。
  3. 掩码预测:对于每个已识别的对象,预测一个掩码来区分对象的轮廓。

分割任务:

实例分割:

从上面这个例子可以看出,检测任务定位了对象的包围框,语义分割分割出了人这个类别,不过把所有的人一起分割了,实例分割区分出了每个人,并分别进行了分割。实际在做实例分割时,通常同时输出对象的检测框,并给出对象的分割结果。

2. Mask R-CNN

Mask R-CNN是由何凯明等人在2017年提出,用于同时进行目标检测、实例分割和关键点检测。这项工作在计算机视觉领域具有里程碑意义,因为它提供了一个统一的框架来处理这些任务,而不是将它们视为独立的挑战。
Mask R-CNN的核心思想是在已有的Faster R-CNN目标检测框架上增加一个并行的分支来预测对象的掩码,从而实现像素级别的对象分割。这个掩码分支是一个小型的全卷积网络(FCN),它应用于每个感兴趣区域(Region of Interest, RoI),以逐像素的方式预测对象的掩码。
为了解决RoI Pooling中的量化问题,Mask R-CNN引入了RoIAlign层,它通过双线性插值精确地计算输入特征在RoI上的值,而不进行量化,从而更好地保持空间对齐,这对于生成高质量的分割掩码至关重要。
Mask R-CNN的网络架构包括用于特征提取的卷积骨干网络和用于边界框识别和掩码预测的网络头部。它可以与多种架构一起实例化,如ResNet和ResNeXt,以及特征金字塔网络(FPN),后者可以构建一个内部特征金字塔,从而提高检测的准确性和速度。
在训练和推理方面,Mask R-CNN展示了快速的原型制作能力,可以在合理的时间内完成训练,同时保持高准确率。此外,Mask R-CNN还能够扩展到人体姿态估计等其他任务,展示了其灵活性和泛化能力。
Mask R-CNN的代码已经在GitHub上开源,由Facebook AI Research (FAIR) 提供,名为Detectron2,这使得研究人员和开发者可以利用和进一步研究这一算法。
相关论文和代码链接如下:

  • 论文: Mask R-CNN
  • 代码: Detectron2

这里只讨论RoI Pooling后的Head部分,

Mask R-CNN同时支持输出检测框,实例分割结果,关键点,这里我们只讨论Mask Head部分,即上图中的右侧绿色分支。

值得注意的是,上图是粗略表示,关于proposalHead中的使用和Mask/Box/KeyPoint Head之间的关系可以参考下面两个图。

在训练时,Mask/KeyPoint Head都使用proposal框来当作检测box框选对象,如下图蓝色线流所示:

在预测时,Mask/KeyPoint Head不再使用proposals转而使用Box Head预测的检测框来框选对象,因此Mask/KeyPoint Head依赖检测框的输出,如下图紫色线流所示意,

Mask R-CNNMask Head分析如下,整理自detectron2代码库:

Mask Head的输入有两个,一个是bounding boxes或者proposals(测试推理时使用boxes,训练时使用RPN给出的proposals),另一个是backbone提取的feature map

Mask Head的结构如上图,先是对feature map根据bounding boxesROI Pooling,得到每个ROI的特征图,然后是连续几层常规卷积,最后再跟一层转置卷积进行X2上采样,同时卷积输出通道变成num_class,得到的输出shape=(B*N,num_class, 28, 28),这里28x28就是ROI区域对应的mask,这里对每个对象预测了num_classmask,在Mask R-CNN中,直接使用Box Head预测的label id来取对应的masksigmoid以作为最终当前实例的分割结果。

转置卷积的介绍参考这里转置卷积 (opens new window)。

得到28X28的实例ROI分割结果后,要将其变换到原图像上,这里使用了grid_sample方法,使用grid_sample变换,会根据box坐标将ROI Mask变换到原图像box所处的区域。变换后再根据超参数阈值对mask做二值化即可得到最后的分割结果。

2.YOLOV5/8实例分割方法

YOLOV5/8中使用的Instance分割方法和Mask RCNN中区别比较大,

其利用Head1中尺寸最大的特征图作为Mask分支的输入,经过proto_pred卷积层的处理得到shape:(B, mask_channel, H, W)mask_feature

检测框的预测分支和目标检测中的YoloV5 Head基本相同,除了对于feature_map的通道上增加了计算每个实例掩码用的参数,参数的数量同proto_pred输出的mask_channel,所以对于80X80/40X40/20X20feature_map,其通道数为: 4 + 1 + num_classes + mask_channel

拿到解码后的检测框,经过nms处理后得到最后的检测框,取对应的mask_channelcoeffsmask_feature相乘加权即可得到最后的实例分割结果,完整过程如下图:

3. RTMDet中的实例分割

RTMDet中和YOLOV5处理方式很相似,都是对每个检测框实例计算坐标时同时给出预测mask所需的权重参数,区别在与YOLOV5/8中直接用参数和mask_feature进行加权求和,而RTMDET预测了169个参数,构造了3层卷积,来和mask_feature运算得到分割mask

还有一点RTMDetmask_feature 并非只使用了80X80feature map,它还将其余两个头上的特征图上采样后与其进行concatenate,输入mask_feature分支后得到Batch_SizeX8X80X80mask特征图。特征图并不能直接用来和predicted kernel卷积得到Instance Mask,RTMDet算法使用的mask feat先重复了检测实例的个数次,然后合并了检测框在特征图上的坐标,最后与predicted kernel做卷积的输入mask特征图变成了(N,10,80,80)

RTMDet实例分割推理的完整过程可参考下图,

RTMDet根据predicted_kernel升成卷积的方法被称为动态卷积Dynamic Convolution,如下图,

如上,就是Mask R-CNN/YOLOV8/RTMDet三种实例分割的方法,总结来看,YOLOV8/RTMDet方法相似,RTMDet处理mask预测的方法更复杂一些,YOLOV8中的加权求和变成了三层卷积,输入的特征图重复了num_instance次,并合并了mask_feature上对应的priorsnum_instance对应点的相对坐标。YOLOV8/RTMDet输出Instance Mask的分辨率比Mask RCNN要大,Mask RCNN经过转置卷积上采样后输出的RoI分割图的大小是28X28,经过GridSample后还原到原分辨率上。不过Mask R-CNN输出的是RoI的分割图,而YOLOV8/RTMDet输出的是在整幅图像上的分割图。

4.DeepLab中的实例分割

DeepLab系列是一系列用于图像分割任务的深度学习模型,它们在处理像素级语义理解方面表现出色。DeepLabv2是DeepLab系列中的一个里程碑,它引入了Atrous Spatial Pyramid Pooling(ASPP)模块,该模块通过多尺度卷积核捕获不同尺度的特征,从而提高分割精度。
在这里插入图片描述

  • 多孔卷积(Atrous Convolution):这是一种卷积操作,它允许模型在不增加计算量的情况下捕获更大的感受野。通过调整卷积核的采样率(dilation rate),可以在不同的尺度上提取特征。
  • 多尺度上下文:通过使用不同的多孔速率,模型能够同时捕获到局部和全局的上下文信息,这对于理解图像中不同尺寸的物体非常有帮助。
  • Atrous Spatial Pyramid Pooling(ASPP)模块:这是DeepLabv2中的一个核心组件,它通过不同尺度的卷积核捕获多尺度的特征,并将这些特征融合以提高分割的准确性。
  • 全局平均池化(Global Average Pooling, GAP):在ASPP模块中,作者使用了全局平均池化来生成图像级别的特征。这些特征包含了整个图像的全局信息。
  • 1×1卷积:在全局平均池化之后,使用1×1卷积来进一步提取特征,这通常用于降维或增加模型的非线性表达能力。
  • 双线性上采样(Bilinear Upsampling):这是一种上采样技术,用于将特征图从低分辨率映射到高分辨率,以匹配原始输入图像的尺寸。
  • 改进的ASPP:在DeepLabv3+中,ASPP模块得到了进一步的改进,包括使用更多的卷积核和不同的多孔速率来捕获更丰富的上下文信息。

改进的ASPP中,模型使用了三个不同尺度的3×3卷积核,这些卷积核具有不同的多孔速率(6, 12, 18),以及一个1×1卷积核,它们都具有256个滤波器和批量归一化层。这样的设计允许模型在不同的尺度上捕获和融合特征,从而提高分割性能。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1658344.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Redis简介和数据结构

目录 简介 进入之后身份认证才能使用 优点 用途: 数据结构 string string自动扩容 Redis中的简单动态字符串(SDS)具有以下优点: SDS数据的编码格式 比较: string 常用操作 分布式锁 使用情况,…

算法day03

第一题 179. 查找总价格为目标值的两个商品 本题采用前后指针和单调性规律可解; 解题思路如下: 1、设置前后指针 2、前后指针所指的两数之和大于目标数,右指针左移; 前后指针所指的两数之和小于目标数,左指针右移&…

3D 打印为压铸行业的带来新动力

近年来,随着多家车企的积极引领,一体化压铸技术已逐渐成为汽车行业的一大趋势。该技术不仅简化了车身的制造流程,而且优化了供应链环节,成为汽车制造业中的一次创新,同时显著提升了经济效益。 压铸技术,简而…

excel中怎么跳转到指定的单元格?

也许你会有这样的需求,如A1单元格中显示B100这种单元格地址,怎么做以点一下就跳转到B100? 一、设置公式 B1HYPERLINK("#"&MID(CELL("FILENAME",A1),FIND("]",CELL("FILENAME",A1))1,99)&&…

echart 多表联动value为null时 tooltip 显示问题

两个图表,第一个有tooltip,第二个隐藏掉 两个图表的 series 如下 // ----- chart1 ----series: [{name: Union Ads,type: line,stack: Total,data: [320, 282, 391, 334, null, null, null],},{name: Email,type: line,stack: Total,data: [220, 232, 221, 234, 29…

现货黄金流程到何种程度?现货黄金在金融产品中的占比是多少?

踏入2024年以来,受美联储降息以及地缘局势紧张的影响,美元受压,避险情绪高涨,众多因素影响下黄金价格出现了强势的上涨,屡创历史新高。在上涨如此强劲的背景下,投资者希望通过黄金投资来实现资产增值。市场…

锁相环(PLL)经典书籍分享(可下载)

锁相环(PLL)作为一种确保系统同步的控制机制,广泛应用于频率合成、时钟恢复、信号调制与解调等多个方面。 探索锁相环(PLL)技术的深度和广度,最有效的途径之一便是通过专业书籍的系统学习。以下是为渴望掌…

每日OJ题_贪心算法三⑦_力扣991. 坏了的计算器

目录 力扣991. 坏了的计算器 解析代码 力扣991. 坏了的计算器 991. 坏了的计算器 难度 中等 在显示着数字 startValue 的坏计算器上,我们可以执行以下两种操作: 双倍(Double):将显示屏上的数字乘 2;递…

英伟达推出视觉语言模型:VILA

NVIDIA和MIT的研究人员推出了一种新的视觉语言模型(VLM)预训练框架,名为VILA。这个框架旨在通过有效的嵌入对齐和动态神经网络架构,改进语言模型的视觉和文本的学习能力。VILA通过在大规模数据集如Coy0-700m上进行预训练,采用基于LLaVA模型的…

Core Impact 21.5 (Windows) - 高级渗透测试

Core Impact 21.5 (Windows) - 高级渗透测试 Fortra | Core Security Penetration testing software, Release Feb 2024 请访问原文链接:Core Impact 21.5 (Windows) - 高级渗透测试,查看最新版。原创作品,转载请保留出处。 作者主页&…

多线程学习Day07

共享模型之不可变 从一个日期转换的问题开始 Slf4j(topic "c.Test1") public class Test1 {public static void main(String[] args) {SimpleDateFormat sdf new SimpleDateFormat("yyyy-MM-dd");for (int i 0; i < 10; i) {new Thread(() -> {…

20K薪资要什么水平?来看看25岁测试工程师的面试过程…_测试工程师薪资20k(2)

既有适合小白学习的零基础资料&#xff0c;也有适合3年以上经验的小伙伴深入学习提升的进阶课程&#xff0c;涵盖了95%以上软件测试知识点&#xff0c;真正体系化&#xff01; 由于文件比较多&#xff0c;这里只是将部分目录截图出来&#xff0c;全套包含大厂面经、学习笔记、…

无监督式学习

1.是什么&#xff1f; 无监督式学习与监督式学习**最大的区别就是&#xff1a;**没有事先给定的训练实例&#xff0c;它是自动对输入的示例进行分类或者分群&#xff1b; 优点&#xff1a;不需要标签数据&#xff0c;极大程度上扩大了我们的数据样本&#xff0c;其次不受监督信…

华为云CodeArts API专场直播来袭!——探索API全生命周期管理新趋势

API的全生命周期管理是否让你摸不清头脑&#xff1f;你是否对API的前沿技术和应用充满了好奇&#xff0c;渴望一探究竟&#xff1f; 华为云PaaS服务即将在5月10日16:00&#xff0c;为你带来一场别开生面的CodeArts API专场直播活动&#xff01; 你可以在轻松愉快的氛围中&…

Python网络编程 03 实验:FTP详解

文章目录 一、小实验FTP程序需求二、项目文件架构三、服务端1、conf/settings.py2、conf/accounts.cgf3、conf/STATUS_CODE.py4、启动文件 bin/ftp_server.py5、core/main.py6、core/server.py 四、客户端1、conf/STATUS_CODE.py2、bin/ftp_client.py 五、在终端操作示例 一、小…

【CTF-Crypto】RSA-选择明密文攻击 一文通

RSA&#xff1a;选择明密文攻击 关于选择明/密文攻击&#xff0c;其实这一般是打一套组合拳的&#xff0c;在网上找到了利用的思路&#xff0c;感觉下面这个题目是真正将这个问题实现了&#xff0c;所以还是非常棒的一道题&#xff0c;下面先了解一下该知识点&#xff1a;(来自…

Telegram Premium会员有什么功能?

Telegram Premium 是 Telegram 的付费版本&#xff0c;现已上线。付费版本被定位为帮助运行平台并进一步开发它的一种方式。但除此之外&#xff0c;它对你有什么好处&#xff1f;以下是Telegram Premium中包含的八个主要功能&#xff1a; 1.没有广告。 Telegram Premium是无广…

李飞飞团队 AI4S 最新洞察:16 项创新技术汇总,覆盖生物/材料/医疗/问诊……

不久前&#xff0c;斯坦福大学 Human-Center Artificial Intelligence (HAI) 研究中心重磅发布了《2024年人工智能指数报告》。 作为斯坦福 HAI 的第七部力作&#xff0c;这份报告长达 502 页&#xff0c;全面追踪了 2023 年全球人工智能的发展趋势。相比往年&#xff0c;扩大了…

[Linux]如何在Ubuntu 22.04系統安裝Node-red?

Node-red是一個建立在Node.js上的視覺化程式設計工具&#xff0c;其常見的應用情境為建置或轉換各項硬體之間的通信協定的物聯網或工聯網場域&#xff0c;其可藉由設置來安裝第三方應用模組來建置多樣的通信協定節點&#xff0c;包含modbus in/out, mqtt in/out, websocket in/…

Java数组创建与使用

一.创建和初始化 1.数组是怎么创建的&#xff1f; 直接举例子&#xff1a; int[] arr new int[10]; 这里只简单的举一个int开辟数组的例子。 可见java数组的创建于C语言是不同的。前面是一个int[ ]就是一个数组的数据类型&#xff0c;后面的arr是数组名&#xff0c;最后[…