经典论文系列| 实例分割中的新范式-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 ...
随机推荐
- 鸿蒙开源第三方组件 ——B站开源弹幕库引擎的迁移(上)
鸿蒙入门指南,小白速来!0基础学习路线分享,高效学习方法,重点答疑解惑--->[课程入口] 目录: 一.弹幕库的基础知识 二.弹幕库的使用方法 三.sample解析 四.作者系列文章合集 前言 ...
- std和stl的关系
[前言]在写程序时,虽然一直这么用,有点疑惑为甚么引入了头文件.h还要在加上using namespace std?例如: 1 #include<iostream> 2 using nam ...
- 【Arduino学习笔记08】使用串口监视器显示数据
代码及相关说明: 1 // 示例:读取模拟输入并显示在串口监视器中 2 3 const int ANALOG_IN = 0; 4 int val = 0; 5 6 void setup(){ 7 Se ...
- windows电脑上传ipa到appstore的详细流程
在使用H5混合开发的app打包后,需要将ipa文件上传到appstore进行发布,就需要去苹果开发者中心进行发布. 但是在苹果开发者中心无法直接上传ipa文件,它要求我们使用xcode或transpo ...
- WPF 基础 - 事件
1. 前言 WPF 事件的路由环境是 UI 组件树,先来看看这棵树. 1.1 Logical Tree 和 Visual Tree WPF 中的树有两种,一颗是逻辑树,另一颗也是逻辑树. 开玩笑,WP ...
- WPF 基础 - x 名称空间详解
名称 种类(默认Attribute) 备注 x:Array 标记拓展 可作为 ListBox.ItemsSource 的值 x:Class 指定与 .cs 中哪个类合并,所指示的类型在声明时使用 pa ...
- PicGo 图床配置【工具篇】
Github图床(舍弃) step1 下载PicGo 下载链接: https://github.com/Molunerfinn/picgo/releases step2 新建仓库作为上传图片的目标地址 ...
- SQL练习——LeetCode解题和总结(2)
602. Friend Requests II: Who Has the Most Friends[M] 一.表信息 In social network like Facebook or Twitte ...
- 非对称加密--密钥交换算法DHCoder
/* * 密钥交换算法,即非对称加密算法 * */ public class DHCoder { //非对称加密算法 public static final Str ...
- 设计模式之建造者模式(BuilderPattern)
一.意义 将一个复杂的对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示. 说明:复杂对象的构建,比如一个对象有几十个成员属性,那么我们在创建这个对象,并给成员属性赋值时,就会很麻烦.采用 ...