论文:SOLOv2: Dynamic, Faster and Stronger
代码:https://github.com/WXinlong/SOLO
摘要
主要提出了作者在SOLOv2中实现的优秀的实例分割方法,旨在创建一个简单、直接、快速的实例分割框架:
- 通过提出动态学习对象分割器的mask head,使mask head依赖于位置。具体来说,将mask branch分解为mask kernel branch和mask feature branch,分别负责学习卷积核和卷积特征 – mask learning
- 提出Matrix NMS显著减少了由于mask的NMS导致的推断时间开销。 – Matrix NMS
- SOLOv2 可以用于目标检测和全景分割
介绍
SOLOv2首先引入了一个动态方案,它允许按位置动态分割对象。具体来说,mask learn 可以分为两部分:convolution kernel learning 和 feature learning。
文章提出的Matrix NMS有很好的性能优势,文章表示Matrix NMS在准确性和速度上均胜过现有的NMS和同类产品。
通过这些改进,SOLOv2的AP性能比SOLOv1高出1.9%,速度也提高了33%。
文章给出了在单个V100 GPU卡上的评估结果,在MS COCO数据集上,Res-50-FPN SOLOv2在18 FPS时可实现38.8%的mask AP。
Related Work
1、Dynamic Convolutions(动态卷积)
- 在传统的卷积层中,学习到的卷积核是固定的,并且独立于输入。
- 空间变换网络[Spatial Transform Networks]预测全局参数变换以扭曲特征图,从而使网络能够自适应地变换以输入为条件的特征图。
- 提出了动态滤波器[Dynamic filter]来主动预测卷积滤波器的参数。 它以特定于样本的方式将动态生成的滤镜应用于图像。
- 变形卷积网络[Deformable Convolutional Networks]通过预测每个图像位置的偏移量来动态学习采样位置。
2、Non-Maximum Suppression
- Soft-NMS根据邻居与较高得分的预测的重叠程度来降低其置信度得分。与传统的NMS相比,检测精度有所提高,但由于顺序操作,推理速度较慢。
- Adaptive NMS将动态抑制阈值应用于每个实例,该阈值是针对人群中的行人检测量身定制的。
- Fast NMS能够并行决定要保留的预测或丢弃的预测。但是它以性能下降为代价加快了速度。
- ++Matrix NMS同时解决了硬去除和顺序操作的问题。在简单的PyTorch实施中,Matrix NMS能够在不到1 ms的时间内处理500个掩模,并且比Fast NMS的效率高出0.4%。++
SOLOv1
SOLOv1框架的核心思想是按位置分割对象。将输入图片划分为S X S的网格。如果一个对象的中心落在一个网格单元格中,该网格单元格负责预测语义类别以及分配每个像素的位置信息。主要包括两个分支:category branch and mask branch。
- Category branch:预测语义类别,掩码分支对对象实例进行分段。具体地说,类分支输出S×S×C形张量,其中C为对象类的个数。
- Mask branch
SOLOv2
1、Dynamic Instance Segmentation
SOLOv2 的网格,多层次的预测,coordConv和损失函数都是继承于SOLOv1,提出了一套动态方案
动态方案:将原始的mask branch解耦为mask kernel branch以及mask feature branch,分别用于预测卷积核和卷积特征。
如图2所示,在SOLOv1中,mask branch如2(a)所示,由于参数量较多,预测结果存在冗余信息,因此进行解耦如图2(b)所示,本文考虑到都是从预测结果层面出发。对此作者想到为什么不从卷积核角度出发,由此得到2(c),上面为mask kernal分支,下面为mask特征分支。
2、Mask Kernel Branch
Mask kernel 分支位于prediction head内,与语义类别分支一起。prediction head 在 FPN 输出的特征图金字塔上工作。Head内的两分支由4个卷积组成用于特征提取,最后一个卷积用于预测。Head 的权重在不同的特征图层级上共享。 作者通过给第一个卷积添加归一化的坐标,即连接两个附加的输入通道,将空间功能添加到内核分支。
对每个网格来说, kernel分支预测D维输出来表示预测的卷积核权值,其中D为参数的数量。当为了生成具有E个输入通道的1 × 1卷积的权重,D = E,当 3 × 3卷积D = 9E。这些生成的权重取决于位置,即网格单元。 如果将输入图像划分为S × S 个网格,则输出空间将为 S × S × D。注意到这里不需要激活函数。
这里输入为 H × W × E的特征 F,其中 E是输入特征的通道数;输出为卷积核 S × S × D,其中S是划分的网格数目,D 是卷积核的通道数。对应关系如下:1 × 1 × E 的卷积核,则 D = E ,3 × 3 × E的卷积核,则 D = 9E。
3、Mask Feature Branch
由于Mask Feature和Mask Kernel是解耦并分别预测的,因此有两种构造Mask Feature Branch的方法:
- predict the mask features for each FPN levels:可以把它和Kernel分支一起放到head中,这意味着我们可以预测每个FPN级别的掩码特征
- predict a unified mask feature representation for all FPN levels:为所有FPN级别预测一个统一的掩码特征表示
文中采用的是第二种方法。
作者采用了特征金字塔融合来学习统一的高分辨率掩码特征表示。将FPN P2 至 P5层分别依次经过 【3 × 3 conv,group norm,ReLU和 2x bilinear upsampling,这样FPN特征P2至P5 被合并到了一个相同的输出(原图的1/4),然后再做逐点相加(element-wise summation),最后一层做【1x1卷积,group norm 和ReLU】操作。如图3所示。应该注意的是,在进行卷积和双线性上采样之前,将归一化的像素坐标输入到最深的FPN级别(以1/32比例)。 提供的准确位置信息对于启用位置敏感度和预测实例感知功能非常重要。
Forming Instance Mask
对于每个单元格(i,j),首先得到掩码核
Gi,j,:∈RDG_{i,j,:} \in R^D Gi,j,:∈RD
然后将G_{i,j}与F卷积得到实例掩码。总的来说,每个预测级别最多有S^2掩码。最后,使用Matrix NMS 得到最终的实例分割结果。
Learning and Inference
Loss 函数和 SOLOv1 一样,如公式2所示:
L=Lcate+λLmaskL = L_{cate}+λL_{mask} L=Lcate+λLmask
Matrix NMS
其启发自soft-NMS,soft-NMS 是每次选择置信度最高的候选mask(或框)降低与其存在重叠的候选mask(或框)的置信度。这种过程像传统的Greedy NMS一样是顺序的,无法并行实现。作者反其道而行之,既然是降低每个mask的置信度,那就想办法按照一定规则对所有mask挨个降低置信度。
某一候选mj置信度被降低,和两方面因素有关:其衰减因子受以下因素影响:
- The penalty of each prediction mi on mj (si > sj) 各预测mi对mj (si > sj)的罚值;
- The probability of mi being suppressed. mi被抑制的概率
对第一个来说, 可以通f(ioui,j)f(iou_{i, j})f(ioui,j)轻松计算mj上每个预测mi的惩罚值
第二个比较麻烦,概率通常与IoUs呈正相关。所以在这里作者直接用the most overlapped prediction on mi预测来近似概率:
为此,最终的衰变因子变成公式4:
更新后的分数由 sj=sj⋅decayjs_j=s_j \cdot decay_jsj=sj⋅decayj计算得出
考虑两个最简单的递减函数,表示为线性函数:
Gaussian:
Implementation
Matrix NMS的所有操作都可以一次性实现,不需要递归。
- 对按分数降序排列的前N个预值计算一个N×N的两两IoU矩阵。对于二进制掩码,IoU矩阵可以通过矩阵运算有效地实现;
- 计算得到了IoU矩阵上的最大列数重叠的IoU;
- 计算所有较高得分预测的衰减因子,通过逐列最小值选取各预测的衰减因子作为最有效的衰减因子(Eqn. (4));
- 最后,通过衰减因子对分数进行更新。
为了使用,只需要threshing和选择 top-k 得分掩码作为最终的预测。
图4显示了Pytorch风格的 Matrix NMS 伪代码:
Experiments
Main Results
SOLOv2 Visualization
The outputs of mask feature branch.作者使用的模型具有64个输出通道(即,在mask prediction之前的最后一层特征图的通道 E = 64。
这里有两种主要模式:首先,最重要的是,mask features是position-aware。它显示了水平和垂直扫描图像中对象的明显行为。另一个明显的模式是某些特征图负责激活所有前景对象,例如在白框中的那个。
与Mask R-CNN分割结果的比较:
最终的输出如图8所示。不同的物体有不同的颜色,SOLOv2方法在不同的场景中显示了良好的效果,值得指出的是,边界处的细节被很好地分割,特别是对于大型对象。
Ablation Experiments
在表1中,将SOLOv2与MS COCO test-dev上最先进的实例分割方法进行了比较。
参考:http://blog.csdn.net/john_bh/