关注公号: AI深度视线 | CVPR 2020 | 更快,更强!SOLOv2:COCO 41.7AP+31FPS 实时实例分割新SOTA!

 

 

1 引言

 

摘要:在这项工作中,我们旨在构建一个性能强大的简单,直接和快速的实例分割框架。我们遵循SOLOv1方法的原理。" SOLO:按位置分割对象"。重要的是,我们通过动态学习目标分割器的mask head 。具体来说,将mask分支解耦为mask kernel分支和mask特征分支,分别负责学习卷积kernel和卷积特征。此外,我们提出Matrix NMS(非最大抑制)以显著减少由于mask的NMS造成的推理时间开销。们的Matrix NMS可以一次完成具有并行矩阵运算的NMS,并产生更好的结果。我们演示了一个简单的直接实例分割系统,该系统在速度和准确性上均优于一些最新方法。轻量级的SOLOv2以31.3 FPS的速度执行,并产生37.1%的AP。此外,我们最新的物体检测结果(from our mask byproduct)和全景分割显示出潜力,可以作为实例分割以外的许多实例级识别任务的新的强大基准。《SOLOv2: Dynamic, Faster and Stronger》

 

2 思路及创新

 

这篇论文作者把主要精力放在如何产生高精度的Mask,以提升性能和加速推断。SOLO2从Mask learnigMask NMS(极大值抑制)两个方面对SOLO进行改进。

  • 首先,Mask learning

作者介绍一个动态方案,该方案可以根据位置动态分割目标。Mask learning可以分为两部分:卷积核学习和特征学习。受FPN的启发,作者构造了一个统一的、高分辨率的掩码特征表示来进行实例分割。

  • 其次,提出了一种高效的矩阵NMS算法

以多类NMS为例,排序操作和递归操作导致不可忽略的延迟。而Mask NMS放大了这种缺点,mask nms 需要比bounding boxIOU更耗时。

作者引入矩阵NMS,可以一次性执行并行矩阵操作来解决这个问题。Matrix NMS可以在不到1毫秒的时间内处理500个mask,性能比FAST-NMS还高出0.4%

 

 

3 Relate Work

 

3.1 实例分割

现有的方法大致可以分为三类:

  • 自上而下方。这个思路是从目标检测的角度解决分割,先进行目标检测,再从检测框里扣图。

  • 自下而上方。把分割任务视作标签分类任务,对每个像素进行分类嵌入式学习。

  • 第三种是直接进行实例分割,不通过目标检测,也不进行嵌入学习。作者所提的这种方法就属于第三种。

     

3.2 动态卷积

  • 传统卷积:传统的卷积方法的卷积核是固定的,不管在图像什么位置,卷积参数都是共享且一致的。而有些卷积在传统卷积的基础上进行了扩展。

  • 空间变换网络:预测一个全局参数的变换用来扭曲特征图,允许网络根据输入条件自适应地变换特征图。

  • 动态滤波器:用来预测卷积滤波器的参数,可以为图像提供动态的滤波器。

  • 可变形卷积网络:通过预测每个图像位置的偏移量来动态地学习采样位置。

     

3.3 非极大值抑制NMS

  • 非极大值抑制在推断过程里比较耗费时间,针对NMS的改进也很多,像SOFT-NMS,Adaptive NMS都是针对这个过程进行的优化。

  • YOLACT中提出了一种FAST-NMS方法,能够快速执行这个过程,也是能够进行real-time实例分割的重要一个改进。

  • 这篇文章,作者提出一种矩阵Matrix-NMS方法来节约这部分时间,实验表明该方法可以在1ms之内处理500个mask,还是用PyTorch的实现,比FAST-NMS还提升了0.4%的AP。

     

4 回顾SOLOv1

 

SOLOv1的核心思想用一句话概括就是 通过位置来分割目标

 

  • 具体思路

输入图像被分为S*S大小的Cell,如果目标中心落在哪个cell里,哪个cell就负责该目标的分割(喵喵的就是YOLO的思想阿,怪不得名字叫SOLO)。网络分了两个分支:category分支和mask分支,category分支负责预测语义类别,mask分支分割目标实例。

category分支输出S*S*C的tensor,C是目标类别个数。mask分支产生H*W*S^2的tensor,姑且叫它M。第k个S^2通道负责(i,j)位置的实例分割。k=i*S+j.

我们换个高倍放大镜看看mask分支最后一层layer到底发生了什么。最后一层layer是1*1卷积层,它产生了S^2个输出通道,也就是M。卷积核是G。那么这个操作就可以表达为: 

这层layer可以看作是S^2个分类器。每一个分类器负责对像素是否属于此位置类别进行分类。

 

  • SOLOv1创新点

SOLO认为预测M有点多余,因为在大多数情况下,对象在图像中还是比较稀疏的。这意味着只有很少的一部分分类器在推断过程中发挥作用。SOLO通过将S^2个分类器解耦为两组S分类器来解决这个问题,分别对应于S水平和S垂直位置类别。这样输出空间就从H*W*S^2变成了H*W*2S.

这样做有三个优点:

  • 减少计算量,模型参数的数量减少了。

  • 预测内核是根据输入动态生成,具有灵活性和自适应性。

  • 每个S^2分类器均以该位置为条件,等于把按位置预测分割方法又往前推一大步。

     

 

5 正题:SOLOv2

 

SOLOv2很大程度上继承了SOLOv1的设定,例如grid cells,多尺度预测,CoorConv,以及loss function。不同的是,SOLOv2中引入动态方案,原来的Mask分支被解藕成Mask kernel分支Mask feature分支,用来分开预测卷积核和卷积特征。

 

5.1 动态实例分割

 

  • mask kernel 分支

mask kernel分支和语义类别分支一起放在预测head里,这个head是作用在经过FPN处理的金字塔特征图上。head两个分支都包括4个conv,用于特征提取,最后一个conv用于预测。head的权值在不同尺度的特征图之间共享。作者通过对标准化坐标进行卷积的方式,将空间信息加到Mask kernel分支中

对于每个grid cell,Mask kernel分支预测D维输出来表示预测的卷积核权重,其中D是参数的数量。例如,为了生成具有E个输入通道的1×1卷积的权重,D等于E。对于3×3卷积,D等于9E。产生的这些权值是和位置关联在一起的,比如grid cell。如果把输入图像划分为S*S个grid,那么输出就是S*S*D维的tensor。

 

  • Mask feature 分支

Mask feature 分支用来预测实例感知特征图F∈R H×W×E,其中E是Mask特征的维数。特征图F将由Mask kernel分支进行卷积。如果使用了所有预测的权重,即S^2分类器,则最终卷积后的输出实例蒙版将为H×W×S^2,这与SOLOv1的输出空间相同。

作者将Mask feature 分支与Mask kernel分支一起放入头部,为所有FPN级别预测统一的Mask特征表示。

为了得到一个统一的、高分辨率的掩模特征表示,这里采用了基于语义分割的特征金字塔融合方法。重复3×3conv、group norm、ReLU和2×双线性上采样后,FPN特征P2到P5在1/4范围内合并为一个输出。最后一层由1×1卷积、group norm和ReLU组成。细节如图3所示。

这里有一点特别需要注意的是在进行卷积和双线性抽样之前,要将归一化像素坐标给到最深的FPN层(1/32)。所提供的准确位置信息对于位置灵敏度和预测实例感知特性非常重要。

 

  • 生成实例Mask

对于在(i,j)的每个grid,先获得它的Mask kernel G,然后将其与F卷积得到实例Mask,这会生成S^2个Mask,最后,使用Matrix NMS方法得到最终的实例分割结果。

 

  • 学习和推断

label分配和损失函数和SOLOv1保持一致,training 的loss 函数为:

值得一提的是,在推断过程,图像先通过backbone和FPN,得到grid(i,j)位置的类别分值P(i,j)之后,先用较低的置信度阈值0.1的滤波器先过一遍,然后再进行卷积提取Mask 特征。经过了sigmoid操作之后,再用0.5的阈值生成二值Mask,最后一步是Matrix NMS。

 

5.2 Matrix NMS

 

前面一直有抱琵琶半遮面的Matrix NMS,终于要出场了。看看到底你是什么庐山真面目。

 

  • 思路来源

Matrix NMS源自SoftNMS。随着递减函数f(iou),Soft-NMS通过递归地根据IoU降低其他检测分数,分数较高的IoU检测结果被降低分数后将被以很小的阈值消除。但是,此过程像传统的Greedy NMS一样是顺序的,无法并行实现

 

  • 原理设计

Matrix NMS是从一个Mask m_j 是如何被抑制的角度看探讨这个问题。对于m_j,影响它的分数衰减因素有:

(a)m_i 对 m_j的惩罚(如果s_i >s_j)。

(b)m_i被抑制的概率。

对于(a),这个惩罚是可以通过f(iou)很容易计算得到,对于(b),这个被抑制的概率不好直接得到。不过,这个概率通常和IOUs大小成正比。可以直接估计这个概率分布:

这样,这个最终的衰减因子就变为

这里考虑两个简单的衰减函数,线性和高斯:

640?wx_fmt=pnguploading.4e448015.gif正在上传…重新上传取消

Matrix NMS中的所有操作都可以一次性完成,而不会重复计算

 

  • 实现过程

1,对于前N个排序好的检测框,计算N*N的IOU矩阵对。对于二值Mask,IOU矩阵也可以很快的通过矩阵操作得到。

2,计算所有高分值的检测框的衰减因子(根据上面公式decay)

3,排序好的检测框根据衰减因子得到新的分值进行重新排序。只取top-k的高分Mask(或框)作为作后的输出。

作者给出了计算过程的伪代码:

这种计算方式使得 Matrix NMS比传统NMS效率上提高了9倍

 

 

6 实验和结果

 

  • 实例分割

     

 

  • 目标检测

 

  • Mask 特征可视化

 

  • 跟Mask-RCNN比较

     

640?wx_fmt=pnguploading.4e448015.gif转存失败重新上传取消

 

  • Matrix NMS效果比较

 

 

  • 实时性

 

  • 分割效果

 


 

 

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值