实例分割属于比较challenging的任务,他相当于是object detection和semantic segmentation的结合体。在SOLO出现之前,有两种常用的paradigm:(1)top-down:先进行目标检测,再对检测框做分割,经典的方法有Mask RCNN、PANet、TensorMask等;(2)bottom-up:让每一个像素学习到一个embedding,拉近相同instance像素之间的embedding的距离,推远不同instance像素之间embedding的距离,最后根据embedding之间的距离进行cluster。

而这两种范式都显得indirect,前者需要较高的检测精度,后者需要有较好的embedding的学习,这都稍都影响了实例分割的效果。因此本文提出的SOLO可谓打破陈规之举,因为他实现了之间端到端预测instance mask的功能。也就是说,输入是一张image,直接输出instance mask以及对应的类别,整个过程属于box-free和grouping-free的范式。

作者在研究SOLO时对instance之间的差别进行了rethinking。通过对所有的annotation统计发现:98.3%的instance质心相隔超过30个pixel,而剩下的1.7%中,大小比例超过1.5的占据了40.5%。也就是说,instance的不同完全可以归结于两个因素:(1)Location;(2)Size。

(1)对于Location的考虑:把image分成 S∗SS*SSS 个cell,每一个cell负责预测1个instance。当一个实例落入某个cell,则该cell负责预测该instance;(2)对于Size的考虑:采用FPN结构来适用于不同尺度的instance。

下图是整个SOLO网络结构示意图:

输入为一张image,通过FCN进行多尺度的特征提取,得到多尺度的feature map。随后接入两个分支:(1)分类分支:最后的输出是 S∗S∗CS*S*CSSC 维度的矩阵,这里 C 表示总类别数,表示着总共 S∗SS*SSS 个cell,每一个cell负责预测一个C维的类别向量;(2)Mask分支:输出维度是 H∗W∗S2H*W*S^{2}HWS2 ,其中 H∗WH*WHW 表示feature map的维度,S2S^{2}S2 这个维度表示总共有S2S^{2}S2个cell去预测S2S^{2}S2个mask。

其中Semantic category和Instance mask是对应的,例如某一个cell位于 iiijjj 列,则该类别对应到Instance mask的第 i∗S+ji*S+jiS+j 个维度的mask(i,j从零开始计数)。

值得注意的是,传统的卷积操作具有空间不变性,这种性质在分类任务中很有必要,但是在分割任务中并不适用,需要的是对位置信息更加敏感的网络。因此文章采用了CoordConv,即在特征图赏concat了两个维度的位置信息,这样在做conv的时候就有位置信息的参与了,实现了position sensitive。

网络的Loss Function如下:

其中第一项分类的Loss采用focal loss,第二部分mask的loss计算公式如下:

里面的参数含义懒得打字了,如下图:

关于 dmaskd_{mask}dmask 的选择最终选取了Dice Loss,其表达形式如下:

其中 DDD 的计算公式如下:

Inference阶段:(懒得打字了,别骂我):

Decoupled SOLO:由于 SSS 的值可能很大,mask的维度为 S2S^{2}S2 就显得不太合适了,因此作者采用如下思想,将维度从 S2S^{2}S2 减小到 2S2S2S:

实验是在MS COCO数据集上做的,主要实验结果如下:

一点感悟:

(1)SOLO这种直接预测instance mask的范式设计的非常漂亮,将分割问题转化为对位置的分类问题,从而抛开了传统的top-down和bottom-up这两种间接求解的范式,简化步骤保证性能的同时,使得实例分割很大程度上不再依赖于detector或者embedding的grouping;

(2)CoordConv感觉用得非常妙,卷积的平移不变性对于分类任务是有利的,但对于实例分割,如果一张image有两个相同的人,传统的卷积网络可能会学习到相同的特征,因此会混淆两个instance;而采用CoordConv,加入了位置信息之后,该平移不变性将会打破,而这种position sensitive对实例分割这类任务非常有利;

(3)最后那个decoupled SOLO的设计,确实非常精妙,通过将 S∗SS*SSS 的维度拆分成两个 SSS 的组合,大大减少了训练的参数。

有几个不解的问题:

(1)如果instance非常密集,导致一个cell中存在多个instance,那么这个cell到底负责预测哪一个instance?(可能这里还要考虑FPN?);(2)然后多个尺度的feature map之间是如何协调的,因为肯定涉及到不同尺度特征图上的cell去预测同一个instance,这里的后处理是怎样操作的?

具体怎样操作的还是需要抽空研究一番代码。

论文解读《SOLO: Segmenting Objects by Locations》相关推荐

  1. 论文解读PCT: Point Cloud Transformer(用于点云处理的Transformer)

    最近几年transformer越来越火,在NLP.CV等领域都取得了很大的成功.这篇文章作者利用了transformer能够处理无序数据的特点,将transformer应用到点云的处理上.它的想法是基 ...

  2. CVM2021| PCT: Point cloud transformer(分类+分割任务SOTA)

    点击上方"3D视觉工坊",选择"星标" 干货第一时间送达 作者丨paopaoslam 来源丨 泡泡机器人SLAM 标题:PCT: Point cloud tra ...

  3. PCT: Point Cloud Transformer

    PCT:点云Transformer Meng-Hao Guo Tsinghua University gmh20@mails.tsinghua.edu.cn Jun-Xiong Cai Tsinghu ...

  4. FastFormers 论文解读:可以使Transformer 在CPU上的推理速度提高233倍

    自Transformers诞生以来,紧随其后的是BERT,在几乎所有与语言相关的任务中,无论是问题回答,情感分析,文本分类还是文本生成,都占据着NLP的主导地位. 与RNN和LSTM消失的梯度问题(不 ...

  5. Point Cloud Transformer(PCT)代码实现

    Point Cloud Transformer(PCT)代码实现 目前最火热的Transformer在自然语言和图像识别中扮演了极其重要的角色,在点云数据集中也不例外,清华大学近期提出在点云中运用Tr ...

  6. 论文解读:《基于BERT和二维卷积神经网络的DNA增强子序列识别transformer结构》

    论文解读:<A transformer architecture based on BERT and 2D convolutional neural network to identify DN ...

  7. Point Cloud Transformer(PCT)阅读翻译

    PCT: Point Cloud Transformer 1. Introduction transformer是一种 encoder-decoder结构,包含了三个模块:输入词嵌入,位置(顺序)编码 ...

  8. 论文阅读 PCT:Point Cloud Transformer

    论文阅读 PCT:Point Cloud Transformer PCT 介绍 Input Embedding native 版本 enhanced 版本 Attention PCT 介绍 PCT是基 ...

  9. AI论文解读:基于Transformer的多目标跟踪方法TrackFormer

    摘要:多目标跟踪这个具有挑战性的任务需要同时完成跟踪目标的初始化.定位并构建时空上的跟踪轨迹.本文将这个任务构建为一个帧到帧的集合预测问题,并提出了一个基于transformer的端到端的多目标跟踪方 ...

  10. 论文解读:《功能基因组学transformer模型的可解释性》

    论文解读:<Explainability in transformer models for functional genomics> 1.文章概括 2.背景 3.相关工作 4.方法 4. ...

最新文章

  1. hadoop文件存储位置_Hadoop文件的存储格式实例详解
  2. 1.5 字符串大小写转换(toLowerCase()和toUpperCase())
  3. Java设计模式-工厂模式(1)简单工厂模式
  4. Android开发之RecyclerView之刷新数据notifyDataSetChanged失败的问题
  5. php函数的初步使用
  6. mysql linux 数据库文件位置_mysql在linux下修改mysql数据库文件位置
  7. 软件测试面试技巧|项目常识篇
  8. Android----Google code android开源项目(二)
  9. increment java_post-increment, pre-increment. JAVA
  10. .net将html转换PDF
  11. 客户说发货慢怎么回复_给客户发完报价没回复,怎么办?
  12. flask-uploads 使用报错处理 “IMPORTERROR: CANNOT IMPORT NAME ‘SECURE_FILENAME‘ FROM ‘WERKZEUG‘“
  13. Ubuntu 如何查看显卡型号
  14. 微信、qq可以上网,但是浏览器却不能上网怎么办
  15. 超详细的TypeScript入门教程!
  16. setopaque java_setOpaque(真/假); Java的
  17. 专访Databricks辛湜,谈Spark排序比赛摘冠及生态圈热点-2014
  18. 怎样写一个拼写检查器-贝叶斯-python
  19. i5 10500h和i5 10300h有什么区别i510500h和i510300h差距大不大
  20. Android中fastboot devices无法发现设备解决方案和adb remount问题解决

热门文章

  1. socket udp java_JAVA Socket之UDP | 学步园
  2. 6. 手写数字图片数据集MNIST
  3. Oracle数据泵好处,Oracle数据泵
  4. Java代码:字符串加密与解密
  5. 数据库监控工具--PIGOSSBSM运维监控管理系统
  6. iatf16949标准三大过程_IATF16949标准过程文件责任对照矩阵图
  7. python输出所有素数_python 判断101-200之间有多少个素数,并输出所有素数。
  8. 图解常用的互联网架构体系
  9. 无线模块透明传输技术的物联网应用案例
  10. 【K8s】什么是Pod?Pod的调度与控制器