简介
作者认为许多计算机视觉的任务可以看作是检测和分组问题-检测一些小的单元,然后将它们组合成更大的单元,例如,多人目标检测可以通过检测人的关节点然后再将它们进行分组(属于同一个人的关节点为一组)解决;实例分割问题可以看作是检测一些相关的像素然后将它们组合成一个目标实例。
Associative Embedding是一种表示关节检测和分组任务的输出的新方法,其基本思想是为每次检测引入一个实数,用作识别对象所属组的“tag”,换句话说,标签将每个检测与同一组中的其他检测相关联。作者使用一个损失函数使得如果相应的检测属于ground truth中的相同组则促使这一对标签具有相似的值。需要注意的是,这里标签具体的值并不重要,重要的是不同标签之间的差异。
这篇其实是源自Stacked Hourglass Networks那篇论文,之前那篇论文讲的是单人的姿势检测,这篇作者将其推广到了多人的姿势检测,用的网络结构还是Stacked Hourglass Networks,对每个关节点输出检测的heatmap和标签的heatmap,然后再将带有相似标签的关节点分组作为单个人的关节点集合。
网络结构
作者将Stacked Hourglass Networks与Associative Embedding结合,总体的结构如下图所示:

Stacked Hourglass模型最初是用在单人目标检测上面,模型输出目标人物的人体关节点的heatmap,heatmap中最高激活值将作为关节点的定位像素。这种网络结构的设计是为了兼顾全局与局部的信息,使得在获取整个人体结构的同时又能够进行精准的定位。
作者对原来的网络结构进行了细微的调整,在每次分辨率下降时增加输出的特征的数量(256-386-512-768),另外,每一层使用3×3的卷积而不是之前的残差块了。
多人姿势检测
多人姿势检测与单人姿势检测的区别在于多人的heatmap应具有多个峰值(例如,属于不同人的多个左手腕),而不是单人的单个峰值。为了实现多人姿势检测,网络需要对每个关节点的每个像素位置产生一个标签,也就是说,每个关节点的heatmap对应一个标签heatmap,因此,如果一张图片中待检测的关节点有\(m\)个,则网络理想状态下会输出\(2m\) 个通道,\(m\)个通道用于定位,\(m\)个通道用于分组。
为了将检测结果对应到个人,作者使用非极大值抑制(non-maximun suppression)来取得每个关节heatmap峰值,然后检索其对应位置的标签,再比较所有身体位置的标签,找到足够接近的标签分为一组,这样就将关节点匹配单个人身上,整个过程如下图所示:

下面介绍一下检测过程用到的损失函数-detection loss、grouping loss.
Detection loss
detection loss使用均方误差,即计算预测的detection heatmap与在关键点加入2D高斯激活的ground truth的heatmap之间的均方误差。
Grouping loss
grouping loss衡量的是预测的标签和ground truth分组的标签匹配得有多好,具体说,就是检索图片中所有人的所有身体节点的在相应的ground truth位置的标签,然后比较每个人和人之间的标签,同一个人的标签应该相同,反之,不同人的标签应该不同。
为了减少运算量,作者对每个人都产生一个reference embedding,reference embedding的生成方法就是对人的关节点的embedding值取平均。有了reference embedding后,对于单个人来说,我们计算每个关节点预测的embedding和reference embedding的平方距离;对于两个不同的人来说,我们比较他们之间的reference embedding,随着它们之间距离的增加,惩罚将以指数方式降为0. 接下来,我们对这一过程进行形式化。
\(h_k\in R^{W\times H}\) 是预测的第 \(k\) 个身体节点的标签heatmap,\(h(x)\) 是像素位置\(x\) 对应的标签值,给定 \(N\)个人,ground truth的身体关节点集合为 \(T=\{(x_{nk})\}, n=1,...,N,k=1,...,K\).
其中\(x_{nk}\) 是第\(n\) 个人第 \(k\) 个关节点的ground truth像素位置。则第\(n\) 个人的reference embedding为

grouping loss定义为

总的loss为

下图展示了网络产生的embedding的一个样例:
