关注公号: AI深度视线

2023-11-15

 

 

1 引言

 

摘要:在这项工作中,我们旨在构建一个性能强大的简单,直接和快速的实例分割框架。我们遵循SOLOv1方法的原理。" SOLO:按位置分割对象"。重要的是,我们通过动态学习目标分割器的mask head 。具体来说,将mask分支解耦为mask kernel分支和mask特征分支,分别负责学习卷积kernel和卷积特征。此外,我们提出Matrix NMS(非最大抑制)以显著减少由于mask的NMS造成的推理时间开销。们的Matrix NMS可以一次完成具有并行矩阵运算的NMS,并产生更好的结果。我们演示了一个简单的直接实例分割系统,该系统在速度和准确性上均优于一些最新方法。轻量级的SOLOv2以31.3 FPS的速度执行,并产生37.1%的AP。此外,我们最新的物体检测结果(from our mask byproduct)和全景分割显示出潜力,可以作为实例分割以外的许多实例级识别任务的新的强大基准。《SOLOv2: Dynamic, Faster and Stronger》

 

2 思路及创新

 

这篇论文作者把主要精力放在如何产生高精度的Mask,以提升性能和加速推断。SOLO2从Mask learnigMask NMS(极大值抑制)两个方面对SOLO进行改进。

  • 首先,Mask learning

作者介绍一个动态方案,该方案可以根据位置动态分割目标。Mask learning可以分为两部分:卷积核学习和特征学习。受FPN的启发,作者构造了一个统一的、高分辨率的掩码特征表示来进行实例分割。

  • 其次,提出了一种高效的矩阵NMS算法

以多类NMS为例,排序操作和递归操作导致不可忽略的延迟。而Mask NMS放大了这种缺点,mask nms 需要比bounding boxIOU更耗时。

作者引入矩阵NMS,可以一次性执行并行矩阵操作来解决这个问题。Matrix NMS可以在不到1毫秒的时间内处理500个mask,性能比FAST-NMS还高出0.4%

 

 

3 Relate Work

 

3.1 实例分割

现有的方法大致可以分为三类:

  • 自上而下方。这个思路是从目标检测的角度解决分割,先进行目标检测,再从检测框里扣图。

  • 自下而上方。把分割任务视作标签分类任务,对每个像素进行分类嵌入式学习。

  • 第三种是直接进行实例分割,不通过目标检测,也不进行嵌入学习。作者所提的这种方法就属于第三种。

     

3.2 动态卷积

  • 传统卷积:传统的卷积方法的卷积核是固定的,不管在图像什么位置,卷积参数都是共享且一致的。而有些卷积在传统卷积的基础上进行了扩展。

  • 空间变换网络:预测一个全局参数的变换用来扭曲特征图,允许网络根据输入条件自适应地变换特征图。

  • 动态滤波器:用来预测卷积滤波器的参数,可以为图像提供动态的滤波器。

  • 可变形卷积网络:通过预测每个图像位置的偏移量来动态地学习采样位置。

     

3.3 非极大值抑制NMS

  • 非极大值抑制在推断过程里比较耗费时间,针对NMS的改进也很多,像SOFT-NMS,Adaptive NMS都是针对这个过程进行的优化。

  • YOLACT中提出了一种FAST-NMS方法,能够快速执行这个过程,也是能够进行real-time实例分割的重要一个改进。

  • 这篇文章,作者提出一种矩阵Matrix-NMS方法来节约这部分时间,实验表明该方法可以在1ms之内处理500个mask,还是用PyTorch的实现,比FAST-NMS还提升了0.4%的AP。

     

4 回顾SOLOv1

 

SOLOv1的核心思想用一句话概括就是 通过位置来分割目标

 

  • 具体思路

输入图像被分为S*S大小的Cell,如果目标中心落在哪个cell里,哪个cell就负责该目标的分割(喵喵的就是YOLO的思想阿,怪不得名字叫SOLO)。网络分了两个分支:category分支和mask分支,category分支负责预测语义类别,mask分支分割目标实例。

category分支输出S*S*C的tensor,C是目标类别个数。mask分支产生H*W*S^2的tensor,姑且叫它M。第k个S^2通道负责(i,j)位置的实例分割。k=i*S+j.

我们换个高倍放大镜看看mask分支最后一层layer到底发生了什么。最后一层layer是1*1卷积层,它产生了S^2个输出通道,也就是M。卷积核是G。那么这个操作就可以表达为: 

这层layer可以看作是S^2个分类器。每一个分类器负责对像素是否属于此位置类别进行分类。

 

  • SOLOv1创新点

SOLO认为预测M有点多余,因为在大多数情况下,对象在图像中还是比较稀疏的。这意味着只有很少的一部分分类器在推断过程中发挥作用。SOLO通过将S^2个分类器解耦为两组S分类器来解决这个问题,分别对应于S水平和S垂直位置类别。这样输出空间就从H*W*S^2变成了H*W*2S.

这样做有三个优点:

  • 减少计算量,模型参数的数量减少了。

  • 预测内核是根据输入动态生成,具有灵活性和自适应性。

  • 每个S^2分类器均以该位置为条件,等于把按位置预测分割方法又往前推一大步。

     

 

5 正题:SOLOv2

 

SOLOv2很大程度上继承了SOLOv1的设定,例如grid cells,多尺度预测,CoorConv,以及loss function。不同的是,SOLOv2中引入动态方案,原来的Mask分支被解藕成Mask kernel分支Mask feature分支,用来分开预测卷积核和卷积特征。

 

5.1 动态实例分割

 

  • mask kernel 分支

mask kernel分支和语义类别分支一起放在预测head里,这个head是作用在经过FPN处理的金字塔特征图上。head两个分支都包括4个conv,用于特征提取,最后一个conv用于预测。head的权值在不同尺度的特征图之间共享。作者通过对标准化坐标进行卷积的方式,将空间信息加到Mask kernel分支中

对于每个grid cell,Mask kernel分支预测D维输出来表示预测的卷积核权重,其中D是参数的数量。例如,为了生成具有E个输入通道的1×1卷积的权重,D等于E。对于3×3卷积,D等于9E。产生的这些权值是和位置关联在一起的,比如grid cell。如果把输入图像划分为S*S个grid,那么输出就是S*S*D维的tensor。

 

  • Mask feature 分支

Mask feature 分支用来预测实例感知特征图F∈R H×W×E,其中E是Mask特征的维数。特征图F将由Mask kernel分支进行卷积。如果使用了所有预测的权重,即S^2分类器,则最终卷积后的输出实例蒙版将为H×W×S^2,这与SOLOv1的输出空间相同。

作者将Mask feature 分支与Mask kernel分支一起放入头部,为所有FPN级别预测统一的Mask特征表示。

为了得到一个统一的、高分辨率的掩模特征表示,这里采用了基于语义分割的特征金字塔融合方法。重复3×3conv、group norm、ReLU和2×双线性上采样后,FPN特征P2到P5在1/4范围内合并为一个输出。最后一层由1×1卷积、group norm和ReLU组成。细节如图3所示。

这里有一点特别需要注意的是在进行卷积和双线性抽样之前,要将归一化像素坐标给到最深的FPN层(1/32)。所提供的准确位置信息对于位置灵敏度和预测实例感知特性非常重要。

 

  • 生成实例Mask

对于在(i,j)的每个grid,先获得它的Mask kernel G,然后将其与F卷积得到实例Mask,这会生成S^2个Mask,最后,使用Matrix NMS方法得到最终的实例分割结果。

 

  • 学习和推断

label分配和损失函数和SOLOv1保持一致,training 的loss 函数为:

值得一提的是,在推断过程,图像先通过backbone和FPN,得到grid(i,j)位置的类别分值P(i,j)之后,先用较低的置信度阈值0.1的滤波器先过一遍,然后再进行卷积提取Mask 特征。经过了sigmoid操作之后,再用0.5的阈值生成二值Mask,最后一步是Matrix NMS。

 

5.2 Matrix NMS

 

前面一直有抱琵琶半遮面的Matrix NMS,终于要出场了。看看到底你是什么庐山真面目。

 

  • 思路来源

Matrix NMS源自SoftNMS。随着递减函数f(iou),Soft-NMS通过递归地根据IoU降低其他检测分数,分数较高的IoU检测结果被降低分数后将被以很小的阈值消除。但是,此过程像传统的Greedy NMS一样是顺序的,无法并行实现

 

  • 原理设计

Matrix NMS是从一个Mask m_j 是如何被抑制的角度看探讨这个问题。对于m_j,影响它的分数衰减因素有:

(a)m_i 对 m_j的惩罚(如果s_i >s_j)。

(b)m_i被抑制的概率。

对于(a),这个惩罚是可以通过f(iou)很容易计算得到,对于(b),这个被抑制的概率不好直接得到。不过,这个概率通常和IOUs大小成正比。可以直接估计这个概率分布:

这样,这个最终的衰减因子就变为

这里考虑两个简单的衰减函数,线性和高斯:

640?wx_fmt=pnguploading.4e448015.gif正在上传…重新上传取消

Matrix NMS中的所有操作都可以一次性完成,而不会重复计算

 

  • 实现过程

1,对于前N个排序好的检测框,计算N*N的IOU矩阵对。对于二值Mask,IOU矩阵也可以很快的通过矩阵操作得到。

2,计算所有高分值的检测框的衰减因子(根据上面公式decay)

3,排序好的检测框根据衰减因子得到新的分值进行重新排序。只取top-k的高分Mask(或框)作为作后的输出。

作者给出了计算过程的伪代码:

这种计算方式使得 Matrix NMS比传统NMS效率上提高了9倍

 

 

6 实验和结果

 

  • 实例分割

     

 

  • 目标检测

 

  • Mask 特征可视化

 

  • 跟Mask-RCNN比较

     

640?wx_fmt=pnguploading.4e448015.gif转存失败重新上传取消

 

  • Matrix NMS效果比较

 

 

  • 实时性

 

  • 分割效果

 


 

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

关注公号: AI深度视线 的相关文章

  • Linux常用命令与JavaWeb开发环境的搭建

    文章目录 前言 一 系统信息以及查看文件 1 1系统信息 1 2查看文件 二 查看进程和防火墙的开关 三 搭建Java Web开发环境 3 1JDK 3 2Tomcat 3 3Mysql 总结 前言 Linux 特点 免费 开源 免费 安全
  • 继电器驱动电路原理及注意事项

    继电器驱动电流一般需要20 40mA或更大 线圈电阻100 200欧姆 因此要加驱动电路 1 晶体管用来驱动继电器 必须将晶体管的发射极接地 具体电路如下 NPN晶体管 PNP晶体管 NPN晶体管驱动时 当晶体管T1基极被输入高电平时 晶体
  • 导入数据的几种方法

    采用标准python类库导入数据 读取文件 from csv import reader import numpy as np filename pima csv with open filename rt as raw data read
  • centOS7服务器搭建

    一 安装jdk 运行代码 yum search jdk 1 查询当前云服务器里面通过yum可以安装哪些jdk 以这个jdk1 8的版本为例 运行代码 yum y install java 1 8 0 openjdk 2 安装jdk1 8版本
  • obj(判断对象中是否包含某个key属性)

    key in obj 不包含 obj hasOwnProperty key 包含

随机推荐

  • 纯代码构建Swift工程

    有些东西很简单 但是我还是把它记录了下来 使用Storyboard创建一个新的项目后 应用程序从闪屏 到主窗口 再到第一个界面经过的文件分别是 LaunchScreen storyboard gt Main storyboard gt Vi
  • NBIoT与LoRa技术详解及竞争态势分析

    物联网的无线通信技术很多 主要分为两类 一类是Zigbee WiFi 蓝牙 Z wave等短距离通信技术 另一类是LPWAN low power Wide Area Network 低功耗广域网 即广域网通信技术 LPWA又可分为两类 一类
  • 计算机视觉领域经典模型汇总(RCNN、YOLO等)

    一 RCNN系列 1 RCNN RCNN是用于目标检测的经典方法 其核心思想是将目标检测任务分解为两个主要步骤 候选区域生成和目标分类 候选区域生成 RCNN的第一步是生成可能包含目标的候选区域 RCNN使用传统的计算机视觉技术 特别是选择
  • linux中tmp文件在哪,Linux系统中/tmp文件夹

    在Linux系统中 tmp文件夹里面的文件会被清空 至于多长时间被清空 如何清空的 可能大家知识的就不多了 所以 今天我们就来剖析一个这两个问题 在RHEL CentOS Fedora 系统中 本次实验是在RHEL6中进行的 1 tmpwa
  • 数字后端dbGet使用方法合集

    以下资料是我之前写过的 芯片数字后端中Innovus Encounter dbGet命令使用方法的介绍 整理了一下 做成合集 方便大家查询 点击标题就可以选择文章查看 会直接挂在公众号的主页菜单栏里的 后端资料 里 感觉好的话 请多多推广喔
  • java报错:Connection reset by peer: socket write error

    用java做excel导出时 报错 ClientAbortException java net SocketException Connection reset by peer socket write error 大致出现问题的原因如下
  • java指纹识别+谷歌图片识别技术(采用Hash方法)

    转载自 http blog csdn net yjflinchong article details 7469213 java指纹识别 谷歌图片识别技术 前阵子在阮一峰的博客上看到了这篇 相似图片搜索原理 博客 就有一种冲动要将这些原理实现
  • Python3 PyCharm 捕获异常报 Too broad exception clause 警告

    最近在 PyCharm 中写代码的时候会抱怨 Exception 没有指定错误类型 Too broad exception clause 这是因为捕获的异常过于宽泛 没有针对性 可以通过指定精确的异常类型来解决 BaseException
  • NLP进阶,使用TextRNN和TextRNN_ATT实现文本分类

    TextRNN TextRNN仅仅是将Word Embedding后 输入到双向LSTM中 然后对最后一位的输出输入到全连接层中 在对其进行softmax分类即可 模型如下图 代码 class RNN nn Module def init
  • STM32 - 利用SPI接口读写FLASH编程实践

    1 SPI 固件库介绍 可以直接查看 F103固件库手册 只有英文没有中文 chm 找到SPI章节 相关信息都在这里 初始化结构体及函数定义在库文件 stm32f4xx spi h 及 stm32f4xx spi c 中 编程 时我们可以结
  • 【Shell案例】【for循环、seq生成】3、输出7的倍数

    描述写一个 bash脚本以输出数字 0 到 500 中 7 的倍数 0 7 14 21 的命令 方法1 in方式循环 if的括号是中括号 中间的条件要有空格 循环体用do和done配对 判断用if和fi配对 循环条件内不用加 echo的时候
  • Canal报错:Could not find first log file name in binary log index file

    解决方案 rm home admin canal server conf example meta dat 然后重启 home admin canal server bin restart sh
  • RecyclerView实现九宫格和点击事件

    想要实现的效果如下 开始界面 点击界面展示 在屏幕中间弹出一个对话框 效果就如同将图片放大一样 不过当然 这里的图片放大并非真正意义上的拉伸 而是展示出较大的那张图片 若是不打算用两张图片 也可以自定义大小 这里因为只是简单的demo 也为
  • 异常:java lang AbstractMethodError

    通常在尝试调用抽象方法时抛出此 java lang AbstractMethodError 通常 此错误是在编译时本身识别的 如果在运行时抛出此错误 则该类必须不兼容 与先前存在的类不兼容 更改 因此 它是IncompatibleClass
  • 嵌入式 Linux 入门 环境篇(四、必备开发工具安装)

    嵌入式 Linux入门 环境篇第四课 开发工具软件的安装与说明 by 矜辰所致 前言 前面的环境篇我们把开发的基本环境安装好了 Ubuntu虚拟机 网络配置 为了从 0 开始说明 还特意买了一台新电脑 就问是不是不将就 在我们接下来做嵌入式
  • 思科实验18.网络层:OSPF路由协议(下)

    多区域OSPF和RIP结合 实验流程 1 设计拓扑 2 配置主机IP地址 3 配置路由器各端口ip 4 封装OSPF协议 5 封装RIP协议 6 剩余工作 7 验证主机连通 实验流程 mermaid svg k8yA2guPqb8dork0
  • @Autowired注解的底层原理

    Spring框架的便利让我们很容易地使用 Autowired注解实现依赖注入 本篇将深入Spring源码解析 Autowired注解的工作原理 一 Autowired注解的作用 1 Autowired 是一个注释 它可以对类成员变量 方法及
  • 微软服务器导入arm,微软发布Windows 10 Build 20277,在ARM上为Win10引入了x64仿真

    微软已经在开发通道中向Windows Insiders发布了Windows 10 Insider Preview Build 20277 FE PRERELEASE 完整的内部版本号 20277 1 fe release 201207 15
  • JVM的垃圾回收机制 总结(垃圾收集、回收算法、垃圾回收器)

    如果想了解Java内存模型参考 jvm内存模型 和内存分配以及jdk jre jvm是什么关系 阿里 美团 京东 相信和小编一样的程序猿们在日常工作或面试当中经常会遇到JVM的垃圾回收问题 有没有在夜深人静的时候详细捋一捋JVM垃圾回收机制
  • 关注公号: AI深度视线

    1 引言 摘要 在这项工作中 我们旨在构建一个性能强大的简单 直接和快速的实例分割框架 我们遵循SOLOv1方法的原理 SOLO 按位置分割对象 重要的是 我们通过动态学习目标分割器的mask head 具体来说 将mask分支解耦为mas