经典论文系列| 实例分割中的新范式-SOLO
前言:
这是实例分割中的一篇经典论文,以往的实例分割模型都比较复杂,这篇论文提出了一个简单且直接的实例分割模型,如何设计这种简单直接的模型且要达到一定的精度往往会存在一些困难,论文中有很多思路或思想值得借鉴,因此十分值得一读。
在本文中,为让各个方向的读者都能看得懂并抓住重点,较为详细地介绍了本文的创新或改进思路,而对一些细节不予赘述。
论文:SOLO: Segmenting Objects by Locations*
代码:https://git.io/AdelaiDet
Introduction
实例分割需要正确分离图像中所有对象,同时还需要在像素级别对每个实例进行语义分割。最近的实例分割方法可以分类为两组,即自上而下和自下而上的范式。
第一种方法“detect-then-segment”,首先检测边界框,然后在每个边界框中分割instance mask。第二种方法通过推开属于不同实例的像素并拉近同一实例中的像素来学习亲和关系,将embedding vector分配给每个像素,然后需要进行分组后处理以分离实例。这两种范式都是step-wise的和indirect,它们要么严重依赖于精确的边界框检测,要么依赖于每个像素的embedding 学习和分组处理。
相比之下,我们的目标是在完整instance mask标注的监督下直接分割instance mask,而不是检测框内的mask或其他像素对关系。我们重新开始思考一个问题:在一张图片中,什么是目标实例之间最本质的区别呢?
作者分析了MS COCO数据集,验证子集中总共有36个,780个对象,其中98.3%的对象对的中心距离大于30个像素。至于其余的1.7%的对象对,其中40.5%的大小比大于1.5倍。总之,在大多数情况下,图像中的两个实例要么具有不同的中心位置,要么具有不同的对象大小。这一发现使我们怀疑是否可以通过中心位置和对象大小直接区分实例?
在语义分割中,现在的主流范式利用全卷积网络(FCN)来输出具有N个通道的密集预测。每个输出通道负责一个语义类别(包括背景)。语义分割旨在区分不同的语义类别。类似地,在这项工作中,我们建议通过引入“ instance categories ”的概念来区分图像中的对象实例,即量化的中心位置和对象大小,从而可以按位置对对象进行分割,因此我们的方法名称为SOLO。
SOLO结构
前面提到作者认为图像中实例对象之间最基础的区别在于大小和位置,因此,SOLO使用FPN来生成通道数相同但大小不同的特征金字塔,来实现不同大小的实例对象在不同的level进行检测。对于金字塔每一层的feature maps都输入到两个预测头中。
注:为了简化图示,在这里没有显示特征金字塔网络(FPN),下图中的FCN没写错,后面会介绍。
如上图所示,将实例细分重新定义为两个子任务:类别预测和instance mask生成。输入图像被分成均匀的网格,即S×S。如果目标的中心落入网格单元,则该网格单元负责预测语义类别(Category Branch)和实例掩码(Mask Branch)。
注:金字塔每层的预测头的权重是共享的。
格子数量(即S)在不同层是不一样的。
Semantic Category
这个做法与YOLO相同,通过FPN把图像分成S x S 的网格,其张量形状为S x S x C。其中每个格子属于一个单独的实例,因此每个格子只属于一个语义类别。每个格子只要是在ground truth的区域内,它就是positive。在推理阶段,C维通道预测该格子属于每个目标实例的可能性,C =类别数量。
Instance Mask
可以看到上面那个图中,Semantic Category中的每个格子是跟下方Instance Mask中的mask是一一对应的。由于每个格子都会预测一个实例对象,也就是会预测S^2个mask,而mask的大小为原图大小,即H x W。因此,Instance Mask的形状为H x W x S^2。
它们的对应关系是Semantic Category中第i行第j列的格子对应Instance Mask中第k维 ( k = i·S + j )的mask。
预测Instance Mask的一种直接方法是采用全卷积网络,例如语义分割中的FCN 。然而,常规的卷积运算在某种程度上在空间上是不变的。空间不变性对于某些任务(例如图像分类)是理想的,因为它会引入鲁棒性。但是,因为我们的分割mask以网格为条件,并且必须由不同的特征通道分开,因此在这里我们需要一个空间变化的模型,或者更精确地说,是位置敏感的模型。
做法比较简单,在网络初期引入两个feature map,一个是x坐标,一个y坐标,归一化在[-1,1]之间,以concatenate的方式与原始tensor结合。
SOLO是怎样起作用的
上图显示了由S = 12个网格生成的网络输出。子图(i,j)表示相应的mask通道产生的soft mask预测结果。 在这里我们可以看到不同的实例在不同的掩码预测通道上激活。 通过在不同位置显式分割实例,SOLO将实例分割问题转换为位置感知分类任务。在每个网格处将仅激活一个实例,并且可以通过多个相邻的mask通道来预测一个实例。 在推理期间,我们使用NMS来抑制这些冗余mask。
Decoupled SOLO
当格子数量比较大时,如S取20,则会生成400个Instance Mask,在大部分情况下,图像中的目标比较稀疏且少,没必要太多的Instance Mask。
如上图所示,将原来的输出tensor HxWxS^2用两个形状为HxWxS的tensor来代替,分别为x, y。而位置(i,j)的mask通过Xj 与Yi逐元素相乘获得。
这种分解方式比原来的方式需要的内存更少,而精度几乎一样。
Conclusion
本文来源于公众号CV技术指南的论文分享系列,更多内容请扫描文末二维码关注公众号。
最近把公众号所有的技术总结打包成了一个pdf,在公众号中回复关键字“技术总结”可获取。
经典论文系列| 实例分割中的新范式-SOLO的更多相关文章
- 经典论文系列 | 缩小Anchor-based和Anchor-free检测之间差距的方法:自适应训练样本选择
前言 本文介绍一篇CVPR2020的论文,它在paperswithcode上获得了16887星,谷歌学术上有261的引用次数. 论文主要介绍了目标检测现有的研究进展.anchor-based和 ...
- 经典论文系列 | 目标检测--CornerNet & 又名 anchor boxes的缺陷
前言: 目标检测的预测框经过了滑动窗口.selective search.RPN.anchor based等一系列生成方法的发展,到18年开始,开始流行anchor free系列,CornerNe ...
- CVPR2020论文解析:实例分割算法
CVPR2020论文解析:实例分割算法 BlendMask: Top-Down Meets Bottom-Up for Instance Segmentation 论文链接:https://arxiv ...
- CVPR2021 | Transformer用于End-to-End视频实例分割
论文:End-to-End Video Instance Segmentation with Transformers 获取:在CV技术指南后台回复关键字"0005"获取该论文 ...
- SOLOv 2:实例分割(动态、更快、更强)
SOLOv 2:实例分割(动态.更快.更强) SOLOv2: Dynamic, Faster and Stronger 论文链接: https://arxiv.org/pdf/2003.10152. ...
- CVPR2019 | 超越Mask R-CNN!华科开源图像实例分割新方法MS R-CNN
安妮 乾明 发自 凹非寺 本文转载自量子位(QbitAI) 实习生又立功了! 这一次,亮出好成绩的实习生来自地平线,是一名华中科技大学的硕士生. 他作为第一作者完成的研究Mask Scoring R- ...
- 实时实例分割的Deep Snake:CVPR2020论文点评
实时实例分割的Deep Snake:CVPR2020论文点评 Deep Snake for Real-Time Instance Segmentation 论文链接:https://arxiv.org ...
- 谷歌MapReduce经典论文翻译(中英对照)
MapReduce: Simplified Data Processing on Large Clusters(MapReduce: 简化大型集群下的数据处理) 作者:Jeffrey Dean and ...
- CVPR 2020几篇论文内容点评:目标检测跟踪,人脸表情识别,姿态估计,实例分割等
CVPR 2020几篇论文内容点评:目标检测跟踪,人脸表情识别,姿态估计,实例分割等 CVPR 2020中选论文放榜后,最新开源项目合集也来了. 本届CPVR共接收6656篇论文,中选1470篇,&q ...
随机推荐
- JAVA中枚举Enum详解
1.关键字:enum.枚举可以定义成单独的文件,也可以定义在其他类内部. 枚举在类内部的示例: public class EnumInner { public static void main(Str ...
- 为什么要从 Linux 迁移到 BSD2
OpenZFS on Linux,是项目的 Linux 部分,目前有 345 个活跃的贡献者,有超过 5600 个提交,而且几乎每天都有提交!一些世界上最大的 CDN 和数据存储服务在 FreeBSD ...
- android分析之mutex
Android的锁是对Linux锁的一种包装: // ------------------------------------------------------------------------- ...
- Java视频教程免费分享(网盘直接取)
Java基础 Java马士兵:链接:https://pan.baidu.com/s/1jJRvxGi密码:v3xb Java刘意:链接:https://pan.baidu.com/s/1kVZQCqr ...
- 基于sinc的音频重采样(一):原理
我在前面的文章<音频开源代码中重采样算法的评估与选择>中说过sinc方法是较好的音频重采样方法,缺点是运算量大.https://ccrma.stanford.edu/~jos/resamp ...
- Mybatis最权威的知识点
1.什么是Mybatis? (1)Mybatis是一个半ORM(对象关系映射)框架,它内部封装了JDBC,开发时只需要关注SQL语句本身,不需要花费精力去处理加载驱动.创建连接.创建statement ...
- python列表,元组,字典,集合的比较总结
这四个都是python中的序列,用于存放数据,他们区别总结如下: 列表list 元组tuple 字典dictionary 集合set 是否可变 可变 不可变 可变 可变 是否有序 有序 有序 无序 ...
- ch1_6_3求解移动字符串问题
import java.util.Scanner; public class ch1_6_3求解移动字符串问题 { public static void main(String[] args) { / ...
- 对接快递100&聚水潭API
对接快递100&聚水潭API 入我相思门,知我相思苦. 简介:对接第三方平台快递100&聚水潭API的简要总结. 1.感悟 个人感觉快递100的API更友好一些,比如有SDK可以调用: ...
- ASP.NET Core依赖注入初识与思考
文章首发地址 一.前言 在上一篇中,我们讲述了什么是控制反转(IoC)以及通过哪些方式实现的.这其中,我们明白了,控制反转(IoC) 是一种软件设计的模式,指导我们设计出更优良,更具有松耦合的程序,而 ...