转载请注明作者和出处: http://blog.youkuaiyun.com/john_bh/
论文链接: Point-Set Anchors for Object Detection,Instance Segmentation and Pose Estimation
作者及团队:微软亚洲研究院
会议及时间:ECCV 2020
Code: https://github.com/FangyunWei/PointSetAnchor
文章目录
1.主要贡献
作者认为当前用于物体检测和人体姿势估计的最新方法(CenterNet)是从物体或人的中心点
回归边界框或人体关键点,虽然简单有效,但是当物体deformation 和scale/orientation variation时,在中心点提取的图像特征包含的信息有限,无法预测距离远的关键点或边界框边界。所以作者提出在一组可能更接近回归目标的点
上获得特征,这个点集是根据任务来确定的
。
- 分割,点被放置在隐式边界框的边缘;
- 位姿估计,点的排列遵循训练数据位姿分布中的模式。
如图1所示:
主要贡献:
提出 Point-Set Anchors,可以看作时经典 box anchor 的一个扩展,可以进一步提供信息,更好地初始化特定回归任务,以进行形状回归;
提出 PoinSetNet,基于RetinaNet 做了修改:使用Point-set 替换 anchor boxes,添加了一个回归分支。可用于目标检测、人体姿态估计和实例分割任务中,解决回归问题。
这样 PointSetNet 就使用regression的思路去统一Object Detection, Instance Segmentation,Pose Estimation三个high-level recognition 任务。
2. PointSetNet
2.1 Point-Set Anchors
point-set anchor T T T 包含许多根据特定任务定义的有序点。
- Pose point-set anchor:
使用人的关键点来形成姿态点设置 point-set anchor。例如,在COCO数据集中,有17个关键点,姿态 point-set anchor 由34维向量表示。在每个图像位置,使用几个point-set anchors。将 point-set anchors 初始化为训练集中最频繁的姿势。使用标准的k-means聚类算法将所有的训练位姿划分为k个聚类,用每个聚类的平均位姿形成point-set anchor。如图1(b)所示。 - Instance mask point-set anchor:
该 anchor 由两个部分组成:一个中心点和n个有序 anchor points,如图1(a)所示。n是控制采样密度的超参数。 在 mask point-set anchor中的Corner points也可以作为目标检测的参考点。在每个图像位置,通过改变隐式边界框的比例和长宽比来形成 9 个 point-set anchors。
2.2 Shape Regression
作者把实例分割,目标检测和pose 估计看作 shape regression 问题。使用 Shape
S
S
S 表示目标,
S
=
{
S
i
}
i
=
1
n
s
S=\{S_i\}_{i=1}^{n_s}
S={Si}i=1ns,
n
s
n_s
ns个有序的点集,其中
S
i
S_i
Si表示:在实例分割中表示第
i
i
i 个 polygon vertex
;在目标检测中表示bounding box中 第
i
i
i 个 corner vertex
;在pose 估计中表示第
i
i
i 个 keypoint
。作者引入
T
T
T 作为 shape regression 的参考,目的是从 point-set anchor
T
T
T 到 shape
S
S
S 中 回归出 offsets
Δ
T
\Delta T
ΔT。
- Offsets for pose estimation:
姿态估计任务中的每个关键点代表一个具有语义意义的关节(头,右肘或左膝),使用17个关键点作为形状 S S S 和 offsets 是: Δ T = S − T \Delta T=S-T ΔT=S−T 。 - Offsets for instance segmentation:
实例mask的形状 S S S 也包含一组有序点,并且不同对象实例的点数可能不同。 point-set anchor T T T 为所有实例定义,并包含固定数目的点。计算offsets Δ T \Delta T ΔT,从形状 S S S 找到匹配点 T ∗ T^* T∗,每个匹配点与 T T T 中的每个点一一对应, Δ T = T ∗ − T \Delta T=T^*-T ΔT=T∗−T,匹配策略如图2所示:
- Nearest point:
基于 L 1 L1 L1 距离,将 point-set anchor T T T 中每个点的匹配目标定义为 S S S 中最接近的 polygon point。因此,一个单一的 polygon point 可能被分配给几个anchor points,一个anchor points,或者没有一个。 - Nearest line:
把掩模轮廓 S S S 当作 n s n_s ns线段的序列,而不是 n s n_s ns离散的 polygon vertices。将每个anchor points投影到所有的polygon edges 上,并将最近的投影点分配给相应的anchor point。 - Corner point with projection:
首先通过 Nearest Point 策略找到四个角 anchor points,然后将这些角点用于将mask轮廓分为四个部分,即顶部,右侧,底部和左侧。 对于这四个部分中的每个部分,每个anchor points 是水平(对于左侧和右侧部分)或垂直(对于顶部和底部)的投影线与mask轮廓线段之间的最近交点。 如果匹配点位于由匹配角点界定的相应轮廓线之外,会将其标记为无效(invalid
),并且在训练和测试中将其忽略。 其余的anchor points及其匹配项被标记为有效(valid
),可进行蒙版回归学习。
- Nearest point:
- Offsets for object detection:
对于目标检测,bounding box shape S S S 可以看作是两个 keypoint (top-left 和 bottom-right ),offsets Δ T \Delta T ΔT 是mask point-set anchors定位点中目标点到对应角点的距离。 - Positive and negative samples:
在给point-set anchors分配正负标签时,直接使用IoU进行目标检测和实例分割,使用OKS(Object Keypoint Similarity)
进行姿态估计。在实例分割和目标检测中,如果一个point-set anchor 对于给定的 ground-truth box 具有最高的IoU,或者IoU超过0.6,那么它将被分配一个正标签,如果IoU小于0.4 ,则使用负标签。在实例分割中,在掩模point-set anchors 的隐式 bounding boxes 与ground-truth bounding boxes之间使用IoU代替掩模,以减少计算量。对于人体位姿估计,如果point-set anchor对给定的ground-truth位姿具有最高的OKS,或者对任何ground-truth 位姿的OKS超过0.5,则给point-set anchor正标签,如果所有 ground-truth 的OKS都低于0.4,则为负标签。 - Mask construction:
在实例分割中,用回归的anchor points构造掩码作为推理的后处理步骤。对于最近点和最近线的匹配方法,选择任意点作为原点,并将相邻点按顺序连接起来。对于带有的角点投影,一个mask 是类似地仅由有效点构造的。
2.3 PointSetNet
- Architecture
PointSetNet是RetinaNet的直观而自然的扩展。它用point-set anchor代替了rectangular anchor,并在头部附加了一个并行的回归分支用于实例分割或姿态估计。图3展示了PointSetNet的结构:
使用多尺度特征金字塔来检测不同尺度的物体。 具体来说,利用五层特征图{P3, P4, P5, P6, P7}。 P3,P4和P5由主干特征图C3,C4和C5生成,后跟 1 × 1 1 \times1 1×1 卷积层和横向连接(如FPN)。 P6和P7分别由C5和P6上的 3 × 3 3\times 3 3×3 stride-2卷积层生成。 结果,{P3, P4, P5, P6, P7}的 stride 是{8, 16, 32, 64, 128, 256}。 头部包含用于分类,mask或姿势回归以及边界框回归的几个子网。 每个子网包含四个 3 × 3 3\times 3 3×3个 步长为1的卷积层,一个仅用于姿势估计任务的特征聚合层和一个输出层。表1列出了三个子网的输出维度,用于实例分割和姿态估计。
- Point-set anchor density:
基于anchor的检测框架中最重要的设计因素之一是可能anchor的采样空间的密集程度。对于实例分割
,使用mask point-set anchors 替换rectangular anchors ,并使用3尺度和在每个特征图上每个位置的3个纵横比生成9个bounding boxes。anchor points在生成的bounding boxes 的四周均匀采样。对于姿态估计
,使用k-means聚类算法生成的3个平均位姿。然后我们将它们转换到特征图的每个位置作为point-set anchors。进一步为每个anchor,使用3个尺度和3个旋转,每个位置得到27个anchors,其他特征图设置与实例分割相同。 - Loss function:
PointSetNet的训练损失函数定义如下:
其中 L c l s L_{cls} Lcls 是 Focal loss, L r e c L_{rec} Lrec 是 对shape 回归的 L 1 L_1 L1 loss ; c x , y ∗ 和 t x , y ∗ c_{x,y}^*和 t_{x,y}^* cx,y∗和tx,y∗分别表示目标的分类和回归; N p o s N_{pos} Npos表示正样本的数量; λ \lambda λ 是平衡权重,在实例分割和姿势估计中分别是0.1和10.0; 1 { c x , y ∗ } > 0 1_{\{c_{x,y}^*\}>0} 1{cx,y∗}>0 是指标函数,当 { c x , y ∗ } > 0 \{c_{x,y}^*\}>0 {cx,y∗}>0为1,否则为0。
3. Experiments
3.1 Instance Segmentation
-
Mask matching strategies:
-
Effect of point-set anchors:
-
Comparison with state-of-the-art methods:
3.2 Pose Estimation
- Effect of point-set anchors
从表6中可以看出,OKS大于0.5分配的ground truth位姿更多,平均位姿锚定比中心点锚定和矩形锚定的表现好很多。
- Effect of deep shape indexed feature:
- Effect of multi-stage refinement:
- Effect of stronger backbone network and multi-scale testing:
- Comparison with state-of-the-art methods: