【经典论文解读】YOLACT 实例分割(YOLOv5、YOLOv8实例分割的基础)

news2024/11/25 12:34:10

前言

 YOLACT是经典的单阶段、实时、实例分割方法,在YOLOv5和YOLOv8中的实例分割,也是基于 YOLACT实现的,有必要理解一下它的模型结构和设计思路。

论文:YOLACT: Real-time Instance Segmentation

开源地址:https://github.com/dbolya/yolact

 YOLACT(You Only Look At CoefficienTs) 

 一、模型框架

它对于one-stage 单阶段模型,添加了一个mask分支(与检测分支并行),整体模型结构如下图,流程思路:

1、输入图片;

2、通过主干网络对图片,进行特征提取;

3、经过FPN特征金字塔,对不同尺寸的特征图进行融合

4.1、检测分支对于每个目标物体,都输出类别、边框信息(x,y,w,h)、k个mask Coefficients(mask的的置信度,取值1或-1

4.2、分割分支针对当前输入图片,输出k个Prototype(mask原型图);不同图片,输出的Prototype有差异,但数量也是k个。

5、对于每个目标物体,将k个mask Coefficients(mask的的置信度)与k个Prototype(mask原型图)进行相乘,然后将所有结果相加,得到该目标物体的实例分割结果。

二、YOLACT 主要特点

YOLACT 主要特点是将实例分割任务,划分为两个并行任务

  1. 将实例分割任务,划分为两个并行任务;(目标检测Detect实例分割mask 是并行计算的,这样设计的网络是单阶段的,适合YOLO系列,速度快)
  2. 在实例分割分支生成k个mask原型图(prototype masks),检测分支生成k个mask原型图的置信度(mask coefficients),然后将mask原型图mask原型置信度进行线性组合,生成实例分割结果。
  3. 比如在一张街道场景的图片,图中有行人、车辆、建筑物、树木等,当检测分支框中的是行人,那么行人相关的mask原型图置信度高(头、身体、手、脚、随身物品等的位置、轮廓、编码位置敏感的方向等原型图),其它的类别mask原型图置信度低,这样组合形成实例分割的结果。

这里重点讲一下prototype masks

【1】YOLACT 实际上是学习了一种分布表示,在一张图片中可能有多个类别,但不同类别之间的物体共享 prototypes 的组合

在 prototype 空间

  • 某些 prototypes 对图片空间分块,
  • 某些 prototypes 定位实例,
  • 某些 prototypes 检测实例廓形,
  • 某些 prototypes 编码位置敏感的方向图(position-sensitive directional maps)等等,
  • 这些 prototypes 的组合构成了最终的分割结果.

【2】每一个prototype mask是生成的相对于整张图片的,不是局部的

如下图所示,生成的prototype mask是对于整张图片的;

【3】prototype masks 的数量与物体类别无关(如,类别数量可能多于 prototypes 的数量);

 YOLACT 是针对每张图片学习 prototypes,即:不同图片生成的prototypes会有差异;

区别于对整个数据集所学习的全局共享的 prototypes.

比如在 BoF(Bag of Feature) 中,是对整个数据集所学习的全局共享的 prototypes.

BOF 是一种图像特征提取方法,其实际上起源于文本领域的 BoW(Bag of Words) 模型. BoW 假定对于一个文本而言,忽略其词序、语法、句法等,仅看作是一个个词语的组合,每个词的出现都是相互独立的,不依赖于其它词的出现.

BOF 假设图像相当于一个文本,图像中的不同局部区域或特征可以看作是构成图像的词汇(codebook). 如图:

根据得到的图像的词汇,统计每个单词的频次,即可得到图片的特征向量,如图:

YOLACT 是针对每张图片学习 prototypes,而 BOFs 是对整个数据集所学习的全局共享的 prototypes.

参考:https://www.aiuai.cn/aifarm1190.html

三、模型组件结构

3.1 目标检测 分支

通常的YOLO系列目标检测器包含两个预测输出分支

  • 一个分支,预测 c 个类别置信度
  • 另一个分支,预测 4 个边界框回归值

对于YOLACT模型,添加一个分支,来预测k个mask Coefficients(mask的的置信度,取值1或-1每个 coefficient 分别对应一个 prototype

这样“目标检测”分支,预测的信息包括:类别、边框信息(x,y,w,h)、k个mask Coefficients

3.2 实例分割 分支

YOLACT 的 “实例分割”(protonet) 会输出整张图片的 k 个 prototype masks 集合.

首先看看“实例分割”分支中,通过什么操作生成prototype的:

1、“实例分割”分支中,输入是FPN中的P3特征图,该特征图分辨率高,更好保留空间细节信息;同时融合了一定的语义信息。

2、然后对特征图进行上采样,中间没有跳跃连接、特征融合之类的,朴素的FCN结构;(这部分有待改进)。

3、再通过1*1卷积调整特征图的通道数量为k,这样就形成了k个Prototype(mask原型图) 

需要注意:这个分支不会计算损失;而且在线性组合后最终的 mask loss,才计算损失。

3.3 Mask 线性组合

对于每个目标物体,将k个mask Coefficients(mask的的置信度)与k个Prototype(mask原型图)进行相乘,然后将所有结果相加,并再接 sigmoid 非线性函数,生成最终的 masks;这样就得到该目标物体的实例分割结果。

其中的计算公式如下:

  •  P是k个Prototype mask,维度是h*w*k
  •  C是k个mask Coefficients,维度是n*k,这里n是指检测分支中,预测出n个目标物体了
  • \sigma是指sigmoid函数

首先对k个mask Coefficients,进行转至,调整维度为k*n;

然后k个Prototype mask与k个mask Coefficients相乘,h*w*k和k*n,得到维度为h*w*n的特征图

最后对特征图进行sigmoid处理,这样就得到n目标物体的实例分割结果了

四、损失函数

模型主要由物体类别损失边框回归损失mask分类损失,三部分组成模型损失函数。

物体类别损失 采用二分类交叉熵损失(BCE),判断物体类别;因为输出特征图,c个类别,对应有c个通道;每个通道的特征图,分别判断类别是否和标签的一样,是或不是,二分类即可。

边框回归损失 采用IOU损失。

其中的mask分类损失,是使用二分类交叉熵损失(BCE)进行计算

 一张图片可能有多个物体;对于每个物体,模型生成一张实例分割结果的特征图,我们通过逐个像素判断,该像素是否属于当前的物体,进行计算整张图片的损失情况。

五、模型效果

在 COCO test-dev 数据集,基于单张 Titan Xp 显卡,模型性能对比:

 

模型效果:

 

细节信息对比:

 

分享完成~

本文只供大家参考与学习,谢谢~

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

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

相关文章

01-Shiro550漏洞流程

1. 漏洞原理 Apache Shiro框架提供了记住密码的功能(RememberMe),用户登录成功后会生成经过加密并编码的cookie。在服务端对rememberMe的cookie值,先base64解码然后AES解密再反序列化,就导致了反序列化RCE漏洞。 那么…

hadoop伪分布式搭建教程

官方参数文档 Apache Hadoop 3.3.5 – HDFS Users Guide Hadoop是一个分布式存储和计算框架,由以下几个组件组成: 1. Hadoop Distributed File System (HDFS):Hadoop分布式文件系统,用于存储大量数据,并提供高可靠性和…

Spring源码:动态代理的增强顺序(AOP与事务的先后)

前文: 《Spring AOP源码:开启注解读取》 《Spring AOP源码2:查找增强器》 《Spring AOP源码3:实现代理》 《Spring事务源码:创建代理类》 《Spring事务源码:事务创建》 《Spring事务源码:…

(05)基础强化:字符串拘留池,格式化,StringBuilder,垃圾回收,弱引用

一、复习 1.什么是接口?说说你对接口的理解。 (提示:概念、语法、应用场景,与抽象类的区别。说出最特别的) 接口是一种规范、标准,一种抽象的概念,所以本身无法实现&#…

Redis基础——Java客户端Jedis

2.1.Jedis客户端 Jedis的官网地址&#xff1a; https://github.com/redis/jedis 2.1.1.快速入门 我们先来个快速入门&#xff1a; 1&#xff09;引入依赖&#xff1a; <!--jedis--> <dependency><groupId>redis.clients</groupId><artifactId&…

山东专升本计算机第九章-信息安全

信息安全 计算机病毒 考点 4病毒的定义与特点 定义 • 一组人为设计的程序满足一定条件即被激活 特点 • 可执行性 • 破坏性 • 占用系统资源 • 破坏或删除程序或数据文件 • 传染性 • 潜伏性 • 隐蔽性 • 针对性 • 宏病毒只感染docx • 衍生性 • 抗反病毒软…

102-Linux_I/O复用方法之poll

文章目录 1.poll系统调用的作用2.poll的原型3.poll支持的事件类型4.poll实现TCP服务器(1)服务器端代码:(2)客户端代码:(3)运行结果截图: 1.poll系统调用的作用 poll 系统调用和 select 类似&#xff0c;也是在指定时间内轮询一定数量的文件描述符&#xff0c;以测试其中是否有…

docker容器原理及简单且详细的使用

docker原理简单介绍 docker是一种虚拟化容器技术。 虚拟化&#xff1a;早期为了节约成本和学习只有在宿主机中基于 kvm&#xff08;基于内核的虚拟机&#xff09;等技术虚拟出来完整的操作系统&#xff0c;而这个完整的操作系统会大量的占用宿主机的硬件资源&#xff0c;当创建…

spring的安装 -- IEDA-创建 Java 工程的jar包教程--以及spring5的核心组件

目录 Spring Spring 基本介绍 Spring5 下载 进入 Spring5 进入 Spring5 的 github 进入 Spring5 的 github下拉 Access to Binaries, 进入 Spring -----拷贝下载地址&#xff0c;打开--- -----选择 5.3.8, 点击进入, 即可下载- 在线文档: 离 线 文 档 : 离 线 API: …

【刷题之路Ⅱ】LeetCode 92. 反转链表 II

【刷题之路Ⅱ】LeetCode 92. 反转链表 II 一、题目描述二、解题1、方法1——穿针引线法1.1、思路分析1.2、代码实现 2、方法2——针对进阶的头插法2.1、思路分析2.2、代码实现 一、题目描述 原题连接&#xff1a; 92. 反转链表 II 题目描述&#xff1a; 给你单链表的头指针 he…

基于全过程通道相关像素值顺序的彩色图像可逆数据隐藏

文献学习&#xff1a; 基于全过程通道相关像素值顺序的彩色图像可逆数据隐藏 原文题目&#xff1a; Reversible data hiding for color images based on pixel value order of overall process channel. 发表期刊&#xff1a; Signal Processing&#xff08;中科院二区&#xf…

AOP(面向切面编程)

3、AOP 3.1、场景模拟 3.1.1、声明接口 声明计算器接口Calculator&#xff0c;包含加减乘除的抽象方法 public interface Calculator {int add(int i, int j);int sub(int i, int j);int mul(int i, int j);int div(int i, int j); }3.1.2、创建实现类 public class Calcul…

osgGA::CameraManipulator类computeHomePosition函数分析

osgGA::CameraManipulator类computeHomePosition函数代码如下&#xff1a; void CameraManipulator::computeHomePosition(const osg::Camera *camera, bool useBoundingBox) {if (getNode()){osg::BoundingSphere boundingSphere;OSG_INFO<<" CameraManipulator::…

继续细说文件

先来了解几个函数&#xff1a; fopen&#xff0c;这个函数有2个参数分别为&#xff08;字符串也就是要记得打引号&#xff09;路径&#xff0c;和&#xff08;字符串&#xff09;操作模式&#xff0c;返回值为FILE类型的指针&#xff0c;也就是一个指向文件信息的结构的指针&a…

Java 基础入门篇(五)——— 面向对象编程

文章目录 一、面向对象的思想二、类的定义与对象的创建三、对象内存分配情况 ★ 3.1 两个对象的内存图3.2 两个变量指向同一个对象内存图 四、构造器4.1 构造器的格式与分类4.2 构造器的调用 五、 this 关键字六、封装七、标准JavaBean补充&#xff1a;局部变量和成员变量的区别…

【计算机网络详解】——物理层(学习笔记)

&#x1f4d6; 前言&#xff1a;今天我们将一起探索电脑网络中最基础的一层&#xff0c;物理层。从摩斯电码到光纤传输的高速互联网时代&#xff0c;物理层在不断发展和创新。让我们一起深入到网络通讯的本质&#xff0c;探究物理层与我们的日常联系密不可分的原因。 目录 &…

面试篇:Spring

一、Spring框架的单例bean是线程安全的吗&#xff1f; 1、Spring框架中的bean是单例的吗&#xff1f; spring框架中的bean是单例的&#xff0c;在默认情况下是singleton模式&#xff0c;即单例模式。如果需要更改则可以在Scope注解设置为prototype为多例模式。 singleton:bea…

ECharts---X轴文字显示不全

原因&#xff1a; X轴标签文字过多导致显示不全解决方法&#xff1a;(一)xAxis 中添加 xAxis.axisLabel 属性 axisLabel是用来设置x轴的刻度以及一些参数的设置&#xff1a; (1)interval设置的是间隔数&#xff0c;把x轴分成10个间隔&#xff0c;根据x轴的数据自动划分份数值…

【计算机专业漫谈】【计算机系统基础学习笔记】W1-计算机系统概述

利用空档期时间学习一下计算机系统基础&#xff0c;以前对这些知识只停留在应试层面&#xff0c;今天终于能详细理解一下了。参考课程为南京大学袁春风老师的计算机系统基础MOOC&#xff0c;参考书籍也是袁老师的教材&#xff0c;这是我的听课自查资料整理后的笔记&#xff0c;…

【Java笔试强训 14】

&#x1f389;&#x1f389;&#x1f389;点进来你就是我的人了博主主页&#xff1a;&#x1f648;&#x1f648;&#x1f648;戳一戳,欢迎大佬指点! 欢迎志同道合的朋友一起加油喔&#x1f93a;&#x1f93a;&#x1f93a; 目录 一、选择题 二、编程题 &#x1f525;计算日期…