本文为CVPR2022的论文。国际惯例,先贴出原文和源码:
原论文地址https://arxiv.org/pdf/2111.13673.pdf源码地址https://github.com/SysCV/transfiner
一、概述
传统的Two-Stage网络,如Mask R-CNN虽然在实例分割上取得了较好的效果,但其掩码依旧比较粗糙。Mask Transfiner将图像区域分解为四叉树,网络仅处理检测到的易错树节点(error-prone tree node)和错误自纠正(self-corrects their errors)。这使得Mask Transfiner可以以第计算成本预测高精度的实例掩码。
二、相关概念
实例分割中,大部分的像素点分类错误均可归结于下采样造成的空间分辨率损失。这导致在物体边缘位置,掩码的分辨率较低。为了解决这个问题,本文中提出了两个概念:信息损失区域(Incoherent Regions)和四叉树(Quadtree)。
1.信息损失区域
为了描述这些区域,本文对掩码本身进行下采样来模拟网络中下采样造成的信息丢失。从上面的图例我们可以看到,对原掩码进行一次2倍的下采样后再进行一次2倍的上采样,橙色部分(原图上标红框)为分类错误的点。而经过实验,大部分的误差均几种在信息损失区域。
信息损失区域的检测:本文涉及的轻量化检测模块如下图所示,可以有效的在多尺度特征金字塔上检测信息损失区域。
将最小特征(smallest features)和预测的粗糙对象掩码(coarse object mask predictions)拼接(concat操作)起来作为输入。
①经过一个全卷积网络(FCN,由四个3x3卷积组成)和一个二分类器来预测最粗糙的信息损失掩码。
②对检测到的低分辨率掩码进行上采样(使用1x1卷积),并与相邻层中的高分辨率特征进行融合。
2.四叉树
在本文中,四叉树被用来细化图像中的信息损失区域。其连接这两个不同层次的特征金字塔中的预测掩码。如下图所示。基于检测到的信息损失点,可以构建一个多层次的四叉树,以检测到的最高层次的特征图作为根结点,这些根节点可以被映射到低层次特征图上细分的四个象限(这些图具有更大的分辨率和局部细节)。
三、网络结构
Mask Transfiner的网络结构如下图(属于网络大框架的部分以红框标出):
本网络基于分层的FPN(Feature Pyramid Networks-特征金字塔),Mask Transfiner的对象并不是单级的FPN特征,而是将RoI特征金字塔上的信息损失区域中检测到的稀疏特征点作为输入序列,并输出其对应的分割标签。
1.RoI金字塔
本文利用了骨干网络提取的分层特征图中的2到5层的特征图。基于对象检测器给定的实例建议,通过FPN在{ ,, }三个不同层级的特征图上提取RoI特征,这三层的RoI特征的尺寸分别为{28,56,112},并使用这三个特征来构建RoI金字塔。
其中,起始层 i 的计算公式为:,其中,W和H为RoI的宽高。
低层次的特征中有较多的上下文和语义信息;而高层次的特征中则包含更多局部特征。
2.输入节点序列
该序列由来自四叉树的三个不同级别的信息损失节点构成。序列的大小为CxN,其中C为特征通道的维数,N为节点的总数。该序列由节点编码器(Node Encoder)压制而成。
3.节点编码器
节点编码器会使用以下四种信息对四叉树的每个节点进行编码。
①从当前层次的FPN提取的细粒度特征
②来自最初的粗掩码预测区域提供的语义信息
③节点之间的关系和距离信息(由RoI中的相对位置编码封装)
④每个节点的上下文信息和自身的信息
本文在每个节点的3x3邻域中提取特征并使用全连接层进行压缩。如下图所示,细粒度特征,粗分割线索和上下文特征首先通过全连接层融合,再将位置嵌入添加到其中。
4.序列编码器和像素解码器
每个序列编码器具有多头注意力模块和全连接前馈神经网络。
像素解码器为一个小型的双层MLP(多层感知机),其可以解码每个节点的输出查询,并预测最终的掩码标签。
四、损失函数
基于四叉树,本文使用的损失函数为:
其中表示预测的信息损失点与真实标签之间的L1损失函数;为检测信息损失区域的交叉熵损失函数;包括了检测器的定位和分类损失;表示初始粗分割预测的损失。