总述: SOLO提出了一种直接预测实例的实例分割算法,在准确的和效率上都达到了SOAT。 简单来说,solo在原图上均匀的划分方格,并对每一个方格分别预测一个类别和分支和一个实例mask的分支。假设对一张图片划分成sxs的grid。那么对于类别分支,则会预测sxsxc个feature map,每个map对应这一个方格所负责的实例的类别;对于实例掩膜分支,理论上也会存在sxs个channel或者feature map的输出,若对每一个输入尺度进行一次预测,且原始输入为HxW,则该分支预测输出的结果是HxWxS2。
位置敏感:CoordConv 为了提升模型的位置敏感性,solo采用了coordconv的方式,简单来说,就是在送入层的时刻,同时把归一化后的位置信息当作是单独的一个通道送入网络。具体来说,创建一个与原始输入特征同等大小尺度的矩阵,且包含了像素的坐标信息,并将其归一化到[-1,1]之间。这个节点被concatenate到输入特征上并且传入后续的layers。
其中,空间位置信息是加在FCN中的,如果输入原始的tensor为HxWxD,那么添加了位置信息后的特征则为HxWx(D+2),后两个通带是x-y的pixel坐标特征图。
匹配策略: 由于输出包含两个头,一个为分类的输出,一个为实例掩膜的输出,其中两者之间的映射关系为对于处于(i,j)位置的grid,K=i*S+j。最后,采用NMS对输出的结果进行处理,得到最终的实例分割结果。
标签分配: 类别分支:正负样本的分配,如果一个实例的中心落在某一个grid里边,则该grid就是一个正样本,否则就是一个负样本。此外,采用了检测中常见的中心采样,即对与某一个mask的groundtruth,给它大量的中心点cx,cy,这个中心区域通过一个常量控制尺度参数来控制:(cx,cy,αw,αh),这里采用了α=0.2,并且采用该方法平均每个实例的mask的groundtruth分配约3个正样本。 实例掩膜分支:分配方式和类别分支一样。
损失函数:
其中Lcate是用来语义分类的Focal Loss,Lmask是预测mask的损失:
其中i=[k/S],j=k mod S,Npos表示正样本的个数,P和m表示预测的类和mask结果。l是一个标志位函数,如果P*i,j大于0就是1,否则就是0。
其中损失函数采用了Dice,入等于3。
推理: solo推理是比较直接的,给定一个图片,经过backbone和FPN,获得类别的特征图位于grid(i,j)处的类别特征图Pi,j,和对应的掩膜图maskk,其中k=i*S+j.首先以置信度0.1过滤掉低置信度的特征图,然后选前500的scoreing mask并送入NMS进行非极大值抑制。最后采用0.5作为阈值把预测的soft masks 转换成二值的掩膜。 maskness: 对于每一个预测的mask,计算他们的maskness,即一个用来衡量输出mask质量的指标。其计算公式为:
这里Nf是预测的soft mask P 中前景像素的个数。如大于阈值0.5的像素的个数。最后的预测的置信度就是有每一个预测的分类分数和maskness的乘积得到的。