SOLOv2论文简读

论文:SOLOv2: Dynamic, Faster and Stronger
代码:https://github.com/WXinlong/SOLO

摘要

主要提出了作者在SOLOv2中实现的优秀的实例分割方法,旨在创建一个简单、直接、快速的实例分割框架:

  1. 通过提出动态学习对象分割器的mask head,使mask head依赖于位置。具体来说,将mask branch分解为mask kernel branch和mask feature branch,分别负责学习卷积核和卷积特征 – mask learning
  2. 提出Matrix NMS显著减少了由于mask的NMS导致的推断时间开销。 – Matrix NMS
  3. SOLOv2 可以用于目标检测和全景分割

介绍

SOLOv2首先引入了一个动态方案,它允许按位置动态分割对象。具体来说,mask learn 可以分为两部分:convolution kernel learning 和 feature learning。

文章提出的Matrix NMS有很好的性能优势,文章表示Matrix NMS在准确性和速度上均胜过现有的NMS和同类产品。

通过这些改进,SOLOv2的AP性能比SOLOv1高出1.9%,速度也提高了33%。
文章给出了在单个V100 GPU卡上的评估结果,在MS COCO数据集上,Res-50-FPN SOLOv2在18 FPS时可实现38.8%的mask AP。

Related Work

1、Dynamic Convolutions(动态卷积)

  • 在传统的卷积层中,学习到的卷积核是固定的,并且独立于输入。
  • 空间变换网络[Spatial Transform Networks]预测全局参数变换以扭曲特征图,从而使网络能够自适应地变换以输入为条件的特征图。
  • 提出了动态滤波器[Dynamic filter]来主动预测卷积滤波器的参数。 它以特定于样本的方式将动态生成的滤镜应用于图像。
  • 变形卷积网络[Deformable Convolutional Networks]通过预测每个图像位置的偏移量来动态学习采样位置。

2、Non-Maximum Suppression

  • Soft-NMS根据邻居与较高得分的预测的重叠程度来降低其置信度得分。与传统的NMS相比,检测精度有所提高,但由于顺序操作,推理速度较慢。
  • Adaptive NMS将动态抑制阈值应用于每个实例,该阈值是针对人群中的行人检测量身定制的。
  • Fast NMS能够并行决定要保留的预测或丢弃的预测。但是它以性能下降为代价加快了速度。
  • ++Matrix NMS同时解决了硬去除和顺序操作的问题。在简单的PyTorch实施中,Matrix NMS能够在不到1 ms的时间内处理500个掩模,并且比Fast NMS的效率高出0.4%。++

SOLOv1

SOLOv1框架的核心思想是按位置分割对象。将输入图片划分为S X S的网格。如果一个对象的中心落在一个网格单元格中,该网格单元格负责预测语义类别以及分配每个像素的位置信息。主要包括两个分支:category branch and mask branch。

  • Category branch:预测语义类别,掩码分支对对象实例进行分段。具体地说,类分支输出S×S×C形张量,其中C为对象类的个数。
  • Mask branch

SOLOv2

1、Dynamic Instance Segmentation

SOLOv2 的网格,多层次的预测,coordConv和损失函数都是继承于SOLOv1,提出了一套动态方案
动态方案:将原始的mask branch解耦为mask kernel branch以及mask feature branch,分别用于预测卷积核和卷积特征。

image

如图2所示,在SOLOv1中,mask branch如2(a)所示,由于参数量较多,预测结果存在冗余信息,因此进行解耦如图2(b)所示,本文考虑到都是从预测结果层面出发。对此作者想到为什么不从卷积核角度出发,由此得到2(c),上面为mask kernal分支,下面为mask特征分支。

2、Mask Kernel Branch

Mask kernel 分支位于prediction head内,与语义类别分支一起。prediction head 在 FPN 输出的特征图金字塔上工作。Head内的两分支由4个卷积组成用于特征提取,最后一个卷积用于预测。Head 的权重在不同的特征图层级上共享。 作者通过给第一个卷积添加归一化的坐标,即连接两个附加的输入通道,将空间功能添加到内核分支。
对每个网格来说, kernel分支预测D维输出来表示预测的卷积核权值,其中D为参数的数量。当为了生成具有E个输入通道的1 × 1卷积的权重,D = E,当 3 × 3卷积D = 9E。这些生成的权重取决于位置,即网格单元。 如果将输入图像划分为S × S 个网格,则输出空间将为 S × S × D。注意到这里不需要激活函数。
这里输入为 H × W × E的特征 F,其中 E是输入特征的通道数;输出为卷积核 S × S × D,其中S是划分的网格数目,D 是卷积核的通道数。对应关系如下:1 × 1 × E 的卷积核,则 D = E ,3 × 3 × E的卷积核,则 D = 9E。

3、Mask Feature Branch

由于Mask Feature和Mask Kernel是解耦并分别预测的,因此有两种构造Mask Feature Branch的方法:

  1. predict the mask features for each FPN levels:可以把它和Kernel分支一起放到head中,这意味着我们可以预测每个FPN级别的掩码特征
  2. predict a unified mask feature representation for all FPN levels:为所有FPN级别预测一个统一的掩码特征表示

文中采用的是第二种方法。

作者采用了特征金字塔融合来学习统一的高分辨率掩码特征表示。将FPN P2 至 P5层分别依次经过 【3 × 3 conv,group norm,ReLU和 2x bilinear upsampling,这样FPN特征P2至P5 被合并到了一个相同的输出(原图的1/4),然后再做逐点相加(element-wise summation),最后一层做【1x1卷积,group norm 和ReLU】操作。如图3所示。应该注意的是,在进行卷积和双线性上采样之前,将归一化的像素坐标输入到最深的FPN级别(以1/32比例)。 提供的准确位置信息对于启用位置敏感度和预测实例感知功能非常重要。
image

Forming Instance Mask

对于每个单元格(i,j),首先得到掩码核
Gi,j,:∈RDG_{i,j,:} \in R^D Gi,j,:RD
然后将G_{i,j}与F卷积得到实例掩码。总的来说,每个预测级别最多有S^2掩码。最后,使用Matrix NMS 得到最终的实例分割结果。

Learning and Inference

Loss 函数和 SOLOv1 一样,如公式2所示:

L=Lcate+λLmaskL = L_{cate}+λL_{mask} L=Lcate+λLmask

Matrix NMS

其启发自soft-NMS,soft-NMS 是每次选择置信度最高的候选mask(或框)降低与其存在重叠的候选mask(或框)的置信度。这种过程像传统的Greedy NMS一样是顺序的,无法并行实现。作者反其道而行之,既然是降低每个mask的置信度,那就想办法按照一定规则对所有mask挨个降低置信度。

某一候选mj置信度被降低,和两方面因素有关:其衰减因子受以下因素影响:

  • The penalty of each prediction mi on mj (si > sj) 各预测mi对mj (si > sj)的罚值;
  • The probability of mi being suppressed. mi被抑制的概率

对第一个来说, 可以通f(ioui,j)f(iou_{i, j})f(ioui,j)轻松计算mj上每个预测mi的惩罚值

第二个比较麻烦,概率通常与IoUs呈正相关。所以在这里作者直接用the most overlapped prediction on mi预测来近似概率:
image

为此,最终的衰变因子变成公式4:

image

更新后的分数由 sj=sj⋅decayjs_j=s_j \cdot decay_jsj=sjdecayj计算得出
考虑两个最简单的递减函数,表示为线性函数:
image

Gaussian:
image

Implementation

Matrix NMS的所有操作都可以一次性实现,不需要递归。

  1. 对按分数降序排列的前N个预值计算一个N×N的两两IoU矩阵。对于二进制掩码,IoU矩阵可以通过矩阵运算有效地实现;
  2. 计算得到了IoU矩阵上的最大列数重叠的IoU;
  3. 计算所有较高得分预测的衰减因子,通过逐列最小值选取各预测的衰减因子作为最有效的衰减因子(Eqn. (4));
  4. 最后,通过衰减因子对分数进行更新。

为了使用,只需要threshing和选择 top-k 得分掩码作为最终的预测。

图4显示了Pytorch风格的 Matrix NMS 伪代码:
image

Experiments

Main Results

image

SOLOv2 Visualization

The outputs of mask feature branch.作者使用的模型具有64个输出通道(即,在mask prediction之前的最后一层特征图的通道 E = 64。
这里有两种主要模式:首先,最重要的是,mask features是position-aware。它显示了水平和垂直扫描图像中对象的明显行为。另一个明显的模式是某些特征图负责激活所有前景对象,例如在白框中的那个。
image

与Mask R-CNN分割结果的比较:

image

最终的输出如图8所示。不同的物体有不同的颜色,SOLOv2方法在不同的场景中显示了良好的效果,值得指出的是,边界处的细节被很好地分割,特别是对于大型对象。
image

Ablation Experiments

在表1中,将SOLOv2与MS COCO test-dev上最先进的实例分割方法进行了比较。

image

参考:http://blog.csdn.net/john_bh/

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

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

相关文章

Ubuntu18.04 关于使用vnc的踩坑

由于种种原因,手上多了一台可使用的桌面版Ubuntu,正好用来测试代码,方便调试。因为只能远程,所以需要配置远程连接。因此就打算使用vnc进行远程连接,谁料一路坎坷,特此记录。 安装 设置桌面共享 需要注意…

App_Shell模型

App_Shell模型 App Shell 架构是构建 Progressive Web App 的一种方式,这种应用能可靠且即时地加载到您的用户屏幕上,与本机应用相似。 App shell是支持用户界面所需的最小的 HTML、CSS 和 JavaScript,如果离线缓存,可确保在用户重复访问时提供即时、可靠的良好性能。这意…

Jenkins自定义主题教程

Jenkins自定义主题 由于Jenkins自带的样式比较丑陋,所以有很多第三方的样式库,这里针对jenkins-material-theme样式库做一个安装教程。 下载样式库 下载连接 Select your color 选择一个你喜欢的主题颜色。Choose your company logo 上传你自定义的…

IndexedDB_Web 离线数据库

IndexedDB_Web 离线数据库 本文会从头剖析一下 IndexedDB 在前端里面的应用的发展。 indexedDB 目前在前端慢慢得到普及和应用。它正朝着前端离线数据库技术的步伐前进。以前一开始是 manifest、localStorage、cookie 再到 webSQL,现在 indexedDB 逐渐被各大浏览器认…

基于 Docker 的微服务架构

基于 Docker 的微服务架构-分布式企业级实践前言Microservice 和 Docker服务发现模式客户端发现模式Netflix-Eureka 服务端发现模式ConsulEtcdZookeeper 服务注册自注册模式 Self-registration pattern第三方注册模式 Third party registration pattern小结一 服务间的 IPC 机制…

funcode游戏实训,java及C/C++,网上整理

软件,常见错误都有。 所有资源可到公众号获取(源码也是),不再直接分享

swing皮肤包 substance

分享一下swing皮肤包substance 资源可到公众号获取

基于Android的聊天软件,Socket即时通信,实现用户在线聊天

基于Android的聊天软件,Socket即时通信,单聊,聊天室,可自行扩展功能,完善细节。 【实例功能】 1.运行程序,登录界面, 注册账号功能 2.进入主界面,有通讯录, 个人信息。 3.点击好友会话框&#…

Go实现简单的RESTful_API

Go实现简单的RESTful_API 何为RESTful API A RESTful API is an application program interface (API) that uses HTTP requests to GET, PUT, POST and DELETE data. A RESTful API – also referred to as a RESTful web service – is based on representational state t…

Weave Scope安装

Weave Scope安装 首先确保已经安装docker 实时了解Docker容器状态 查看容器基础设施的概况,或者专注于一个特殊的微服务。从而轻松发现并纠正问题,确保你的容器化应用的稳定与性能。 内部细节与深度链接 查看容器的指标、标签和元数据。 在一个可扩展…

MYSQL导入数据出现ERROR 1049 (42000): Unknown database 'n??;'

MYSQL导入数据出现ERROR 1049 (42000): Unknown database ‘n??;’ 背景 我需要将一个csv表中的数据导入数据库创建好的表中,产生的问题如下: 原因寻找 因为我并没有使用’n??;的数据库,所以很好奇这个错怎么来的,尝试如下…

SVG入门理解

SVG入门SVG 元素简单的形状rectcircleellipselinetextpath SVG 样式分层和绘图顺序透明度 SVG入门 当我们用SVG生成和操作一些炫酷的效果时,D3是最佳选择。使用div和其他原生HTML元素绘图也是可以的,但是太笨重,而且会受到不同浏览器的限制&#xff0c…

【哈佛幸福课笔记】【1】

【哈佛幸福课笔记】【1】 ​ ​ 一个月的时间看完了哈佛幸福课,正如Tal所说课程的结束才是学习的开始。对于课程观点的思考,对于个人习惯的培养,对于思维模式的转变还需要花大量的时间去练习。这个系列的帖子将作为我个人的读书笔记&#x…

RAID阵列基础知识

RAID阵列基础知识 独立硬盘冗余阵列 (RAID, Redundant Array of Independent Disks),旧称廉价磁盘冗余阵列(Redundant Array of Inexpensive Disks),简称磁盘阵列。 RAID的种类 这里我们只介绍比较常用的RAID类型&am…

timeshift备份你的Linux系统

timeshift备份你的Linux系统 安装 打开终端(ctrl alt T)并逐个执行以下命令 sudo apt-add-repository -y ppa:teejee2008/ppa sudo apt-get update sudo apt-get install timeshift 创建 点击Create按钮 默认不能备份用户下的文件,所以…

Go语言vscode环境配置

Go语言vscode环境配置 此教程在GO已经安装成功的前提下。 安装vscode扩展 在vscode扩展里面搜索go,然后下载扩展。 安装go 插件 在$GOPATH目录下创建bin,pkg,src切换到$GOPATH/bin目录下,打开终端输入以下命令,不需要翻墙: go…

消息队列-Message Queue

消息队列-Message Queue 目前随着互联网的普及以及上网用户的增多,拥有一套 安全、稳定、低耦合、高性能的内部通信工具尤为重要。 什么是消息队列? 消息队列(英语:Message queue)是一种进程间通信或同一进程的不同线…

Angular 第一章 开始

第一章 开始 用 JavaScript 开发应用程序是一个很大的挑战。由于它的延展性和缺少类型检查,在 JavaScript 中构建一个适当大小的应用程序是很困难的。除此之外,我们对所有类型的处理都使用JavaScript,例如用户界面(UI),操作、客户端-服务器交互和业务处理/验证。因此,我们…

Typescript实现单例之父类调用子类

Typescript实现单例之父类调用子类 设计要求 在程序中,需要一个对象可以全局使用,并且只有一个实例Breakpoint 类是一个可以被继承的类,然后子类必须实现 updateView函数updateView 这个函数可以被自动调用,当窗口发生变化的时候构思 UML 图 Layout 是一个单例类,也就是全局只…

Angular性能优化之脏检测

Angular性能优化之脏检测 当我们在使用 Angular 框架搭建项目时,随着组件越来越多,页面也来越复杂,性能会越来越低,主要表现在 CPU 使用率 很高。所以我们要对项目做一定的优化。 Angular脏检查(Change Detection)机制 Angular 的脏检测主要是指 zone.js,这是一个开源的…