姿态估计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. 把他们聚类成人体实例。
    在这里插入图片描述

Keypoint detection

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

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

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

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

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

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

h k ( x ) = 1 π R 2 ∑ i = 1 : N p k ( x i ) B ( x i + S k ( x i ) − 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) hk(x)=πR21i=1:Npk(xi)B(xi+Sk(xi)x)
其中 B ( ⋅ ) B(\cdot) B() 表示双线性差值核。

在这里插入图片描述

Grouping keypoints into person detection instances

Mid-range pairwise offsets

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

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

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

他的目的是让我们从同一个人体实例 j j j 的关键点 k k k 移动到关键点 l l l

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

Recurrent offset refinement

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

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

Fast greedy decoding

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

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

Keypoint-level detection scoring

文章试验了不同的方法来为 greedy decoding 算法生成的检测分配关键点的分数。第一个关键点级别评分方法,为每个关键点分配一个置信度分数 s j , k = h k ( y j , k ) s_{j,k} =h_k(y_{j,k}) sj,k=hk(yj,k)。这种方法的一个缺点是,定位良好的面部关键点通常比臀部或膝盖等定位不良的关键点获得更高的分数。第二种方法试图校准不同关键点类型的分数。它的动机是在COCO关键点任务中使用的 object keypoint similarity(OKS) 评估度量,该度量使用不同的精度阈值 κ k κ_k κk 来惩罚不同关键点类型的定位错误。

具体地说,考虑具有关键点坐标 y j , k y_{j,k} yj,k 的检测到的Person实例 j。设 λ j λ_j λj 是紧密包含第j个Person实例的所有检测到的关键点的边界框区域的平方根。我们通过以下公式定义第 k 个关键点的 Expect-OKS 分数:
s j , k = E { O K S j , k } = p k ( y j , k ) ∫ x ∈ D R ( y j , k ) h ^ k ( x ) e x p ( − ( x − y j , k ) 2 2 λ j 2 κ k 2 ) d x s_{j,k} = E\{ OKS_{j,k}\} = p_k(y_{j,k})\int_{x \in D_R(y_{j,k})} \hat{h}_k(x)exp(-\frac{(x-y_{j,k})^2}{2\lambda ^2_j\kappa ^2_k})dx sj,k=E{OKSj,k}=pk(yj,k)xDR(yj,k)h^k(x)exp(2λj2κk2(xyj,k)2)dx

其中 h k ( x ) h_k(x) hk(x)是以 D R ( y j , k ) D_R(y_{j,k}) DR(yj,k)归一化的Hough分数。Expect-OKS关键点级别的分数是我们对关键点存在的confidence乘以给定关键点存在的OKS本地化精度置信度的乘积。

  • 4
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
[ { "id": 1, "groupName": "test-wu", "description": "sadsaffdsa", "dingId": "401021613327413104", "userName": "武福根", "email": "eureka.wu@ibaiqiu.com", "createTime": "2023-05-31 03:34:51", "createName": "admin", "updateTime": "2023-05-31 03:34:51", "updateName": "admin" }, { "id": 2, "groupName": "test-wu", "description": "sadsaffdsa", "dingId": "322610312920535304", "userName": "俞永波", "email": "ron.yu@ibaiqiu.com", "createTime": "2023-05-31 03:34:51", "createName": "admin", "updateTime": "2023-05-31 03:34:51", "updateName": "admin" }, { "id": 3, "groupName": "ron-test", "description": "测试2", "dingId": "306208510726220319", "userName": "杨志亮", "email": "sean.yang@ibaiqiu.com", "createTime": "2023-05-31 03:44:12", "createName": "admin", "updateTime": "2023-05-31 03:44:12", "updateName": "admin" }, { "id": 4, "groupName": "ron-test", "description": "测试2", "dingId": "314447695938075811", "userName": "雍睿涵", "email": "ruihan.yong@ibaiqiu.com", "createTime": "2023-05-31 03:44:12", "createName": "admin", "updateTime": "2023-05-31 03:44:12", "updateName": "admin" }, { "id": 5, "groupName": "ron-test", "description": "测试2", "dingId": "066357011133738415", "userName": "蔡秋丹", "email": "qiudan.cai@ibaiqiu.com", "createTime": "2023-05-31 03:44:12", "createName": "admin", "updateTime": "2023-05-31 03:44:12", "updateName": "admin" }, { "id": 6, "groupName": "ron-test", "description": "测试2", "dingId": "322610312920535304", "userName": "俞永波", "email": "ron.yu@ibaiqiu.com", "createTime": "2023-05-31 03:34:51", "createName": "admin", "updateTime": "2023-05-31 03:34:51", "updateName": "admin" } ] stream分组,将
最新发布
06-01
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值