SOLOv1:Segmentation Objects By Locations

文章介绍了实例分割的概念及其区别于目标检测和语义分割的地方,提出了SOLO方法,该方法通过实例中心位置和大小进行分类,避免了依赖锚点。SOLO网络包括CategoryBranch和InstanceMask两个分支,利用FPN处理不同尺度的实例。此外,文章还讨论了相关工作,如Top-down和Bottom-up方法的优缺点。
摘要由CSDN通过智能技术生成

1.介绍

1.1 概念问题

  • 目标检测
    用一个bounding box对物体和其位置进行分类。
    输出空间大小:N*(4+C)
    C为类别标签数目。
  • 语义分割
    像素级别上的分类,即语义分割。
    输出空间大小:H* W* C
    H、W为图片像素大小,C为类别标签数目。
  • 实例分割
    不但要区分图片中不同的物体,还要给出不同个体像素的精确位置。
    输出空间大小:没有明确的定义。

1.2 实例分割不好公式化

图片来自原作者-孔涛团队

  • 兼具物体实例级别的预测和像素级别的预测
  • 物体可能存在图片中的各个位置
  • 物体与物体之间存在着不可避免的遮挡
  • 物体的姿态和大小存在着形变的过程
  • 需要一个非常精细的边缘
    – 与背景区分开
    – 与物体区分开

1.3 实例分割应用场景

  • 自动驾驶领域
    在这里插入图片描述

  • 智能机器人环境感知
    在这里插入图片描述

  • PS、美图等一键抠图软件
    在这里插入图片描述

  • 电影打斗绿幕和直播背景切换
    在这里插入图片描述

2.主要思想

实例分割有两种主流的方法,但是都不够直接,分别是以下两种方法:

  • 自上而下(top-down)即先检测后分割(detect-then-segment):先预测bboxes,再实例掩码分割。这种方法太依赖于目标检测的准确率。
  • 自下而上(bottom-up)即先嵌入学习后分组处理(Label-then-Cluster):通过推开属于不同实例的像素,拉近同一实例中的像素。这种方法依赖于每个像素的嵌入学习和分组处理。

问题出发点: 一张图片中,不同实例最基本的不同是什么?
答: 中心大小
问: 能否用这两个关键信息区分实例?要怎样实现呢?

实现方式:实例中心位置实例大小量化,根据实例中心位置和实例大小进行分类。

  • 实例中心位置
    将一张图片划分为S*S个网格,所以定义S2中心点位置类别。将这些类别加在通道上,对应的通道负责对应网格的实例掩码。
  • 实例大小
    FPN来预测多种尺度大小的实例,将尺寸不同的实例放在不同级别的特征图中。(关于FPN,后面会详细叙述)

3.相关工作

3.1 Top-down Instance Segmentation

在这里插入图片描述
基于检测的方法

  • FCIS:将RPN生成的ROIs和位置敏感分数图结合在一起预测实例掩模。
  • MASK R-CNN:给Faster R-CNN添加一个包含bboxes的分支。
  • PANet:在MASK R-CNN的基础上增强了特征表示来提高精度。
  • Mask Scoring R-CNN:添加了mask——IoU分支去估计mask的质量并且通过打分提高精度。
  • TensorMask:在给定的滑动窗口里分割。

缺点:太依赖于anchor

3.2 Bottom_up Instance Segmentation

在这里插入图片描述
基于语义分割的方法

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

缺点:精度不是很高,Two stagae的方法。

3.3 ‘Semi-direct’ Instance Segmentation

  • AdaptIs:首先预测点提议,然后依次为位于被检测点提议处的对象。
  • PolarMask:提出使用极性表示对掩码进行编码,并将逐像素掩码预测转换为距离回归。

缺点:虽然不需要bboxes,但是要么循序渐进,要么建立在折中的基础上。

4.SOLO总体网络结构

在这里插入图片描述
原文作者团队的方法将一张输入图片划分为了两个子任务分支,分别是Category BranchMask Branch,在这里先看总体结构,先不说FPN,下面再提及。
在这里插入图片描述
SOLO的头部架构,在每个FPN特征层上,加入两个子网络,一个用于实例类别预测,一个用于实例掩码分割。在Mask分支加入了x,y坐标和原始特征来编码空间信息。图中数字表示空间分辨率和通道数,图中以256个通道为例。“Align”表示双线性插值(文章最后面再解释双线性插值作用)。

4.1 Category Branch

  • 输出空间: S×S×C
  • 每个单元格必须属于一个单独的实例,因此只属于一个语义类别。
  • 当网格(i,j)和center region有大于阈值的重叠的则认为是正例center region定义为( cx, cy, ϵw, ϵh) 的区域,这里得的中心不是bounding boxes的中心,而是质心,其中 ϵ=0.2。每个实例都有一个二值mask,也就是在上分支中标记出正例所在的grid后,找到其下分支S2的通道对应的一个通道进行标注。

4.2 Instance Mask

  • 实例掩码语义类别同时进行(并行),每个网格生成对应的实例掩码
  • 掩码总数: S2
  • 在三维输出张量的第三通道上,实例掩码的输出将会有H×W×S2 维度(W和H为输入图片的长和高,S×S个类,所有像素级别的输出会有H×W×S2 维度)
  • 预测实例掩码用的全卷积神经网络FCNs
    1)具有空间不变性
    2)具有鲁棒性
    但是这里需要空间变体的模型(位置敏感),但是怎么解决该问题呢?
    **解决办法:**引入CoordConv,说白了,就是加一个(x,y)像素坐标。
    为什么不用其他方法? ----因为CoordConv简单、易实现。256通道变成258(D+2)

4.3 Forming Instance Segmentation

k = i×S + j,类别预测和相应的掩码会与参考网格单元联系在一起。最后形成每个网格的实例分割结果。最后通过非最抑制(non-maximum-suppression,NMS)获得最终的实例分割结果。(NMS放文章末尾)

4.4 网络架构

SOLO加入了卷积主干,采用FPN产生一个大小不同、固定信道数的特征图金字塔。这些图被用作预测头的输入:语义类别实例掩码

用多个体系结构实例化SOLO:

(1)用于特征提取的主干架构(backbone
(2)用于计算实例分割结果的网络头(Network head
(3)用于优化模型的训练损失函数(loss function

FPN

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值