Bottom-up系列中的Grouping方式三:PersonLab

原文:PersonLab: Person Pose Estimation and Instance Segmentation with a Bottom-Up, Part-Based, Geometric Embedding Model
代码:octiapp/KerasPersonLab

Abstract

Introduction

Related work

Methods

Person detection and pose estimation

文章提出了一种box-free的bottom-up的姿态估计方法。方法包含连续的两步:

  1. 检测K个关键点。
  2. 把他们聚类成人体实例。
    Bottom-up系列中的Grouping方式三:PersonLab
Keypoint detection

这个阶段的目的是,以实例无关的方式检测出所有人的所有可见关节点。文章生成heatmaps和offsets。对于heatmap,每一个关节一个通道;对于offset,每一个关节两个通道分别表示水平和垂直方向。

假设 xix_i 是图片中的一个2D位置,其中 i=1,...,Ni = 1,...,N 是图中坐标的索引,NN 是像素的个数。假设DR(y)={x:xyR}D_R(y) = \{x:\left \| x-y \right \| \leq R\} 是以 yy 为中心的半径为 RR 的圆盘。假设 yj,ky_{j,k} 是第j个人体实例的第k个关键点,j=1,...,Mj = 1,...,M,其中 MM 是图中人体实例的个数。

对于每一类关键点 k=1,...,Kk = 1,...,K, 我们设置一个分类任务,我们为所有人体实例预测一个heatmap pkp_k, pk(x)=1p_k(x) = 1 如果 xDR(yj,k)x \in D_R(y_j,k),否则 pk(x)=0p_k(x) = 0,因此我们有K个独立的稠密二分类任务,每个任务对于一个关键点类别。每个都相当于预测图像中所有人的特定关键点类型周围半径为 RR 的圆盘。训练时,我们使用 logistic loss 来计算整张图片的 heatmap loss,并回传。除了图片中没有被完全标注好的区域(如拥挤场景,小尺寸的人体实例等)。

除了heatmaps,我们还预测了一个 short-range offset 向量 Sk(x)S_k(x), 用来提高关键点定位的精度。对于每个关键点类别 kk,在关键点的圆盘内的每个位置 xx ,short-range offset Sk(x)=yj,kxS_k(x) = y_{j,k} - x,表示了从图片位置 xxjj 个人体实例的 kk 关键点的向量。

文章通过独立解决每类关键点和每个图像位置上的一个2D回归问题,来生成 KK 个这样的向量场。在训练时,我们通过 L1 loss 来惩罚 short-range offset 的预测误差,只回传在关键点圆盘之内的坐标 xDR(jj,k)x \in D_R(j_{j,k})。我们将 short-range offset (和本文描述的所有其他回归任务)中的误差除以半径 R=32R=32 个像素,以便对它们进行归一化,使它们的动态范围与热图分类损失相称。

我们通过 Hough voting 将 heatmap 和 short-range offset 聚合成 2-D Hough分数图 hk(x),k=1,...,Kh_k(x), k=1,...,K 对每个关键点类型使用独立的 Hough 累加器。每个图像位置 以等于其**概率的权重 向每个关键点通道 kk 投一票:

hk(x)=1πR2i=1:Npk(xi)B(xi+Sk(xi)x) h_k(x) = \frac{1}{\pi R^2}\sum _{i = 1:N}p_k(x_i)B(x_i+S_k(x_i)-x)
其中 B()B(\cdot) 表示双线性差值核。

Bottom-up系列中的Grouping方式三:PersonLab

Grouping keypoints into person detection instances

Mid-range pairwise offsets 在score map hk(x)h_k(x) 中的局部响应最大的位置 作为人体关键点的预选位置,但是它们没人关系人体实例组合的信息。当图像中存在多个人体实例时,我们需要一种机制来“连接点”,并将属于每个单独实例的关键点分组在一起。

为此,文章在网络中增加了单独的成对的 mid-range offset field输出 Mk,l(x)M_{k,l}(x),用于连接成对的关键点。我们计算 2(K1)2(K−1) 个这样的offset field,每个 offset field 对应在人的树形结构运动学图中彼此相邻的关键点对(k,l)的一条有向边。

具体地,从第k个关键点到第l个关键点的offset field的有监督训练目标为:
Mk,l(x)=(yj,lx)[xDR(yj,k)] M_{k,l}(x) = (y_{j,l} - x)[x \in D_R(y_{j,k})]

他的目的是让我们从同一个人体实例 jj 的关键点 kk 移动到关键点 ll

在训练时,只有在关键点k和l都出现的时候,这个目标回归向量才被定义。我们计算起始关键点圆盘内的 xDR(yj,k)x \in D_R(y_{j,k}) 的 L1 loss 并回传。

Recurrent offset refinement 特别是对于大尺度的人物实例,连接的成对关键点例如右肘和右肩,在图像中可能距离数百个像素的,因此很难生成精确的回归。我们通过更精确的short-range offset 来refine mid-range的成对offset。具体地:
Mk,l(x)x+Sl(x), where x=Mk,l(x) M_{k,l}(x) \leftarrow x' + S_l(x'), \ where \ x' = M_{k,l}(x)

在我们的实验中,我们重复了这一改进步骤两次。我们使用双线性插值对中间位置 xx' 处的offset field进行采样,并将误差沿mid-range和short-range offfsets分支向后传播。我们在CNN输出**的分辨率下执行offset refinement(在升级到原始图像分辨率之前),使得这个过程非常快。如图2所示,offset refinement过程极大地降低了中值回归误差。它极大地方便了grouping,并显著改善了结果。

Fast greedy decoding 文章提出了一种极快的贪婪 decoding 算法,将关键点分组为检测到的人题实例。我们首先创建在所有 K 个关键点类型之间共享的优先级队列,在该队列中,我们将得分高于阈值(在所有报告的实验中设置为0.01)的霍夫分数映射 hk(x)h_k(x) 中的所有局部最大值的位置 xix_i 和关键点类型 kk 插入其中。这些点用作启动检测实例的候选种子。然后,我们按分数降序将元素从队列中弹出。在每次迭代中,如果类型 k 的当前候选检测种子的位置 xix_i 在先前检测到的人实例 jj' 的对应关键点的盘 DR(yj,k)D_R(y_{j'},k) 内,则我们拒绝它;为此,我们使用 r=10r=10 像素的非最大抑制半径。否则,我们以位置 yjy_j 处的第 kk 个关键点开始新的检测实例 yj,k=xiy_{j,k}=x_i 作为种子。然后我们沿着运动学人物图的边沿中程位移矢量贪婪地连接相邻关键点对(k,l)(k,l),设置yj,l=yj,k+Mk,l(yj,k)y_{j,l}=y_{j,k}+M_{k,l}(y_j,k)

值得注意的是,与总是使用相同的关键点类型(例如躯干或鼻子)作为种子来生成检测的其他技术相比,我们的解码算法没有优先对待任何关键点类型。虽然我们已经根据经验观察到,在正面人脸实例中的大多数检测都是从更容易定位的面部关键点开始的,但是我们的方法也可以很好地处理很大一部分人被遮挡的情况。