论文解读《SOLO: Segmenting Objects by Locations》
实例分割属于比较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*SS∗S 个cell,每一个cell负责预测1个instance。当一个实例落入某个cell,则该cell负责预测该instance;(2)对于Size的考虑:采用FPN结构来适用于不同尺度的instance。
下图是整个SOLO网络结构示意图:
输入为一张image,通过FCN进行多尺度的特征提取,得到多尺度的feature map。随后接入两个分支:(1)分类分支:最后的输出是 S∗S∗CS*S*CS∗S∗C 维度的矩阵,这里 C 表示总类别数,表示着总共 S∗SS*SS∗S 个cell,每一个cell负责预测一个C维的类别向量;(2)Mask分支:输出维度是 H∗W∗S2H*W*S^{2}H∗W∗S2 ,其中 H∗WH*WH∗W 表示feature map的维度,S2S^{2}S2 这个维度表示总共有S2S^{2}S2个cell去预测S2S^{2}S2个mask。
其中Semantic category和Instance mask是对应的,例如某一个cell位于 iii 行 jjj 列,则该类别对应到Instance mask的第 i∗S+ji*S+ji∗S+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*SS∗S 的维度拆分成两个 SSS 的组合,大大减少了训练的参数。
有几个不解的问题:
(1)如果instance非常密集,导致一个cell中存在多个instance,那么这个cell到底负责预测哪一个instance?(可能这里还要考虑FPN?);(2)然后多个尺度的feature map之间是如何协调的,因为肯定涉及到不同尺度特征图上的cell去预测同一个instance,这里的后处理是怎样操作的?
具体怎样操作的还是需要抽空研究一番代码。
论文解读《SOLO: Segmenting Objects by Locations》相关推荐
- 论文解读PCT: Point Cloud Transformer(用于点云处理的Transformer)
最近几年transformer越来越火,在NLP.CV等领域都取得了很大的成功.这篇文章作者利用了transformer能够处理无序数据的特点,将transformer应用到点云的处理上.它的想法是基 ...
- CVM2021| PCT: Point cloud transformer(分类+分割任务SOTA)
点击上方"3D视觉工坊",选择"星标" 干货第一时间送达 作者丨paopaoslam 来源丨 泡泡机器人SLAM 标题:PCT: Point cloud tra ...
- PCT: Point Cloud Transformer
PCT:点云Transformer Meng-Hao Guo Tsinghua University gmh20@mails.tsinghua.edu.cn Jun-Xiong Cai Tsinghu ...
- FastFormers 论文解读:可以使Transformer 在CPU上的推理速度提高233倍
自Transformers诞生以来,紧随其后的是BERT,在几乎所有与语言相关的任务中,无论是问题回答,情感分析,文本分类还是文本生成,都占据着NLP的主导地位. 与RNN和LSTM消失的梯度问题(不 ...
- Point Cloud Transformer(PCT)代码实现
Point Cloud Transformer(PCT)代码实现 目前最火热的Transformer在自然语言和图像识别中扮演了极其重要的角色,在点云数据集中也不例外,清华大学近期提出在点云中运用Tr ...
- 论文解读:《基于BERT和二维卷积神经网络的DNA增强子序列识别transformer结构》
论文解读:<A transformer architecture based on BERT and 2D convolutional neural network to identify DN ...
- Point Cloud Transformer(PCT)阅读翻译
PCT: Point Cloud Transformer 1. Introduction transformer是一种 encoder-decoder结构,包含了三个模块:输入词嵌入,位置(顺序)编码 ...
- 论文阅读 PCT:Point Cloud Transformer
论文阅读 PCT:Point Cloud Transformer PCT 介绍 Input Embedding native 版本 enhanced 版本 Attention PCT 介绍 PCT是基 ...
- AI论文解读:基于Transformer的多目标跟踪方法TrackFormer
摘要:多目标跟踪这个具有挑战性的任务需要同时完成跟踪目标的初始化.定位并构建时空上的跟踪轨迹.本文将这个任务构建为一个帧到帧的集合预测问题,并提出了一个基于transformer的端到端的多目标跟踪方 ...
- 论文解读:《功能基因组学transformer模型的可解释性》
论文解读:<Explainability in transformer models for functional genomics> 1.文章概括 2.背景 3.相关工作 4.方法 4. ...
最新文章
- hadoop文件存储位置_Hadoop文件的存储格式实例详解
- 1.5 字符串大小写转换(toLowerCase()和toUpperCase())
- Java设计模式-工厂模式(1)简单工厂模式
- Android开发之RecyclerView之刷新数据notifyDataSetChanged失败的问题
- php函数的初步使用
- mysql linux 数据库文件位置_mysql在linux下修改mysql数据库文件位置
- 软件测试面试技巧|项目常识篇
- Android----Google code android开源项目(二)
- increment java_post-increment, pre-increment. JAVA
- .net将html转换PDF
- 客户说发货慢怎么回复_给客户发完报价没回复,怎么办?
- flask-uploads 使用报错处理 “IMPORTERROR: CANNOT IMPORT NAME ‘SECURE_FILENAME‘ FROM ‘WERKZEUG‘“
- Ubuntu 如何查看显卡型号
- 微信、qq可以上网,但是浏览器却不能上网怎么办
- 超详细的TypeScript入门教程!
- setopaque java_setOpaque(真/假); Java的
- 专访Databricks辛湜,谈Spark排序比赛摘冠及生态圈热点-2014
- 怎样写一个拼写检查器-贝叶斯-python
- i5 10500h和i5 10300h有什么区别i510500h和i510300h差距大不大
- Android中fastboot devices无法发现设备解决方案和adb remount问题解决
热门文章
- socket udp java_JAVA Socket之UDP | 学步园
- 6. 手写数字图片数据集MNIST
- Oracle数据泵好处,Oracle数据泵
- Java代码:字符串加密与解密
- 数据库监控工具--PIGOSSBSM运维监控管理系统
- iatf16949标准三大过程_IATF16949标准过程文件责任对照矩阵图
- python输出所有素数_python 判断101-200之间有多少个素数,并输出所有素数。
- 图解常用的互联网架构体系
- 无线模块透明传输技术的物联网应用案例
- 【K8s】什么是Pod?Pod的调度与控制器