【实例分割】SOLO:Segmenting Objects by Locations

  • 相关工作
  • 模型结构
  • branch
  • 损失函数
  • Inference
  • 实验
  • Decoupled SOLO head

实例分割主要有两大类别,而这两大类方法都不够直接。

  1. 自上而下即detect-then-segment:太依赖于目标检测的准确率
  2. 自下而上:为每个像素学习一个嵌入向量(有点像Cornernet),该方法依赖于每个像素的嵌入学习和分组后处理。

出发点:一张图片中的实例基本的不同是什么?要么具有不同的中心点,要么具有不同的大小。所以是否可以直接利用这两个信息去区分实例?
实现:引入”实例类别“,也就是量化的中心点位置和物体大小,根据实例的位置和大小为实例中的每个像素分配类别。

  • 中心点位置
    一张图片可以被分为S×SS\times SS×S个网格,所以定义S2S^2S2个中心点位置类别。将这些类别加在通道上,对应的通道负责对应网格的实例掩码。
  • 大小
    利用FPN来预测多种尺度大小的实例。

相关工作

Top-down
基于检测的方法

  1. FCIS:将RPN生成的ROIs和位置敏感分数图结合在一起
  2. Mask R-CNN:给Faster R-CNN添加了分支
  3. PANet:在Mask R-CNN的基础上增强了特征表示来提高精度
  4. Mask Scoring R-CNN:添加了mask-IoU分支去估计mask的质量并且打分去提高精度
  5. TensorMask:在给定的滑动窗口里分割。

缺点:太依赖于anchor

Bottom-up
基于语义分割的方法

  1. SGN将实例分割问题分解为一系列子分组问题。
  2. SSAP学习像素对的亲和力金字塔,即两个像素属于同一实例的概率,并通过级联图分区顺序生成实例。

缺点:精度不高,需要分组后处理

Direct
没有直接利用mask annotations进行训练,也没有直接预测实例mask和类别。

  1. AdaptIS
  2. PolarMask

模型结构


上图所示是简单的一个框架,并没有FPN。SOLO将实例分割分为两个子任务,类别预测实例掩码生成,将一张图片划分为S×SS\times SS×S个网格,如果一个物体的质心落在某个网格(若有多个物体落在该网格?该思路的前提是每个网格必须属于一个实例,因此只有一个类别),那么这个网格有两个任务:

  1. 预测该物体的类别
  2. 生成该物体的实例掩码

branch

如下图所示便是两个分支,分别对应上述的两个任务。除了输出卷积,其他卷积都是3×33\times 33×3,分类分支的Align代表的是自适应性池化、插值或者region-grid插值,这三种的效果都差不多。

对于每一个FPN,后面都会接一个上述的分支结构(SOLO head),从而实现多尺度预测。

加入了FPN后提高了大约8个点,可见作用很大。

对于类别预测分支,当网格(i,j)(i,j)(i,j)和center region有大于阈值的重叠的则认为是正例。center region定义为(cx,cy,ϵw,ϵh)(c_x,c_y,\epsilon w,\epsilon h)(cx​,cy​,ϵw,ϵh)的区域,这里的中心点并不是bbox的中心,而是质心,其中ϵ=0.2\epsilon=0.2ϵ=0.2。这来源于center sampling,在Foveabox和FCOS中都有所体现。对于每个正例都有一个二值的mask,也就是在上分支中标记出正例所在的grid后,找到其所对应下分支S2S^2S2的通道中的一个通道进行标注。

对于Mask分支,之所以有S2S^2S2的通道,就是作者所说的中心点位置类别,第(i,j)(i,j)(i,j)个网格的instance mask对应第kkk个通道(k=i×S+jk=i\times S+jk=i×S+j )。
生成mask的分支类似于语义分割,是FCN(全卷积神经网络),具有平移不变性,然而本方法的mask不是直接生成,而是基于网格的位置(S2S^2S2个通道),所以需要平移可变性
如何解决卷积带来的平移不变性?
借鉴于CoordConv,创建一个与输入相同的空间大小的张量,其中包含像素坐标,这些坐标被标准化至[-1,1],并和原始的输入进行通道上的concat。若原始输入大小为H×W×DH\times W\times DH×W×D,则新输入张量的大小为H×W×(D+2)H\times W\times (D+2)H×W×(D+2),其中最后两个通道为xyxyxy像素坐标,从而提供全局位置信息。

消融实验中,一个的CoordConv能提高3.6的精度,再加反而没必要,可见该操作确实提供了一些位置信息。

损失函数

定义损失函数如下式:
L=Lcate+λLmaskL = L_{cate}+\lambda L_{mask}L=Lcate​+λLmask​
LcateL_{cate}Lcate​是分类分支的损失函数,用的是Focal Loss。
LmaskL_{mask}Lmask​是mask生成的损失函数,如下式所示:


NposN_{pos}Npos​表示的是正样本的个数(??),p∗和m∗p*和m*p∗和m∗是分类和mask的target,IIIIII当pi,j∗p_{i,j}^*pi,j∗​大于0时为1。对于dmaskd_{mask}dmask​表示Dice Loss(因为这个损失相比于BCE、focal loss效果更好)。
LDice=1−D(p,q)L_{Dice}=1-D(p,q)LDice​=1−D(p,q)

Inference

前向传播得到类别分数pi,jp_{i,j}pi,j​和相应的mask mkm_kmk​,其中k=i∗S+jk=i*S+jk=i∗S+j。
首先用置信度阈值0.1过滤掉分数比较低的预测,然后选取前500个排好序的mask进行NMS操作,然后用0.5的阈值进行mask二值化,保留前100个instance mask进行评估。

实验


Decoupled SOLO head


原来的head有S2S^2S2个通道,这计算量还是很大的,并且有实例的网格远远小于没有实例的网格,有些通道没有必要,所以作者提出了Decoupled SOLO head,将通道变为S+SS+SS+S,减少显存的同时精度也没有降低。

【深度学习】【实例分割】SOLO:Segmenting Objects by Locations相关推荐

  1. [实例分割] SOLO: Segmenting Objects by Locations 论文阅读

    转载请注明作者和出处: http://blog.csdn.net/john_bh/ 论文链接: SOLO: Segmenting Objects by Locations 作者及团队:阿德莱德大学 & ...

  2. 实例分割之SOLO: Segmenting Objects by Locations

    SOLO: Segmenting Objects by Locations code 实例分割主要有两大类方法: 一种是"detect-then-segment",即先检测bbox ...

  3. SOLO: Segmenting Objects by Locations 论文学习

    SOLO: Segmenting Objects by Locations Abstract 1. Introduction 2. Related Work 3. SOLO 3.1 Problem F ...

  4. [SOLO ]SOLO: Segmenting Objects by Locations代码解读笔记(ECCV. 2020)

    Segmenting Objects by Locations 如果对你帮助的话,希望给我个赞~ 文章目录 SOLO head网络结构 损失函数 正样本的选取 1. SOLO/mmdect/model ...

  5. 转载系列【分割】:ECCV2020 | SOLO: Segmenting Objects by Locations

    文章目录 一.背景 二.本文方法 三.本文方法的具体做法 3.1 问题定义 3.1.1 Semantic category 3.1.2 Instance Mask 3.2 Network Archit ...

  6. 深度学习|实例分割:3D-BoNet

    点击上方"3D视觉工坊",选择"星标" 干货第一时间送达 一.摘要 本文提出了一个简单高效的新型3D点云实例分割框架3D-BoNet,核心思想是逐点多层感知(M ...

  7. 论文:SOLO: Segmenting Objects by Locations

    作者 摘要 我们提出了一种新的.非常简单的实例分割方法.与许多其他密集预测任务(例如语义分割)相比,任意数量的实例使实例分割更具挑战性.为了预测每个实例的掩码,主流方法要么遵循"先检测后分割 ...

  8. 论文解读《SOLO: Segmenting Objects by Locations》

    实例分割属于比较challenging的任务,他相当于是object detection和semantic segmentation的结合体.在SOLO出现之前,有两种常用的paradigm:(1)t ...

  9. [计算机毕业设计]深度学习实例分割模型

    前言

  10. SOLO:Segmenting Objects by Locations

    SOLO SOLO的中心思想是把instance segmentation的问题分解为两个相似的分类问题,分别是category-aware预测和instance-aware mask的生成. 把输入 ...

最新文章

  1. 数据库分表时OR Mapping方法
  2. Java的类装载器(Class Loader)和命名空间(NameSpace)
  3. [黑金原创教程] FPGA那些事儿《数学篇》- CORDIC 算法
  4. breeze源码阅读心得
  5. 2020年度智能音箱主控方案汇总,涵盖15大芯片品牌推出的34款解决方案
  6. .net SerialPort
  7. 全国计算机等级考试题库二级C操作题100套(第03套)
  8. android 获取当前网络,Android 获取当前网络连接的类型信息
  9. Open Source Blog 开源ASP.NET/C# 博客平台 v2.5 发布(提供源码下载)
  10. Mac OS X Terminal 101:终端使用初级教程以及Xcode
  11. Spring Cloud 参考文档(Spring Cloud Context:应用程序上下文服务)
  12. appearance—外观样式属性
  13. java编程xml_XML Java编程
  14. 15行代码抓取兰亭序全文单字高清字帖
  15. AOP和OOP的区别
  16. 宏基4736ZG更换键盘图解
  17. 服务器分区系统安装win7系统教程,详细教您gpt分区安装win7步骤
  18. Linux进程间通信(上)
  19. esp8266 mesh 组网
  20. 初探 ModBus4j -简单使用指南

热门文章

  1. Spire.Office NET 7.7.6 重大重量 Spire.Office 7.7.X JAVA
  2. cario java,Cario免费的矢量绘图软件库_cairographics.org
  3. 如何根据普通ip地址获取当前地理位置(利用百度API)
  4. 局域网网络监控软件部署方案探讨
  5. 广成GCAN-IO模块介绍
  6. 直立车模控制中三种滤波算法简单分析(清华卓晴)
  7. android 剪切板监听_android剪切板操作
  8. 诛仙服务器列表文件,诛仙3数据互通服务器全列表_52pk诛仙3资料百科
  9. Python实现Huffman编码
  10. CentOS 7.5_1804.iso镜像下载