概述
本文是在CPM的基础上做了一些改进,克服了CPM用于视频pose estimation时计算代价昂贵及帧之间缺乏几何连续性的缺点。阅读论文前需要先理解CPM。
原理与结构
-
CPM
式(1)为CPM:
s为结构的级数,共S级;
X为原始图像,被送到每一级,其尺寸为 W × H × C W\times H\times C W×H×C,即宽、高、通道数;
F s ( ⋅ ) F_{s}(\cdot ) Fs(⋅)为s级的特征提取网络,是ConvNet;
g s ( ⋅ ) g_{s}(\cdot ) gs(⋅)为s级的预测网络,也是ConvNet;
b s b_{s} bs表示s级预测出的结果–belief map,其尺寸为 W × H × ( P + 1 ) W\times H\times (P+1) W×H×(P+1),P表示关节点总数(+1表示背景),所以 b s b_{s} bs能够表示出第s级每个关节点分布在每个坐标点的置信值;
⨁ \bigoplus ⨁符号表示concatenate操作,就是直接堆叠起来。
总结起来,这个公式的意思就是:在第一级,将图像输入预测网络,预测出第一级的belief map,之后的所有级,将原图像经过特征提取网络先提取特征,再将结果和前一级的belief map进行concatenate操作,再输入预测网络,得到每一级的belief map。 -
RPM(CPM+RNN→Recurrent Pose Machine)
要应用到视频,一帧一帧处理,自然用到RNN。
t t t表示帧数,也表示级数, T T T为总级数,故: 1 ≤ t ≤ T 1\leq t\leq T 1≤t≤T;
X t X_{t} Xt表示视频中的第t帧图像,即连续帧输入连续级;
b t b_{t} bt表示第t帧图像的belief map;
g 0 g_{0} g0相当与第一级的特征提取器和预测器的综合;
g ( ⋅ ) g( \cdot) g(⋅)表示第二级及以后级的预测器,它们共享结构和权值;
F ( ⋅ ) F(\cdot) F(⋅)特征提取函数也是共享的,节约了不少参数。 -
LSTM PM(LSTM+CPM→LSTM Pose Machine)
L ~ ( ⋅ ) \widetilde{L}(\cdot) L (⋅)表示LSTM模块,起到遗忘过去接收当前信息的作用,同时也起到了特征提取的作用,所以此处的 g ( ⋅ ) g( \cdot) g(⋅)就表示所有级的预测器,它们共享参数;
F ′ ( ⋅ ) F^{'}(\cdot) F′(⋅)表示第一级的特征提取器,比起其他级要深一些,也可以表示为: F 0 ( X t ) ⨁ F ( X t ) F_{0}(X_{t})\bigoplus F(X_{t}) F0(Xt)⨁F(Xt),所以其实就是在其他级的特征提取器网络之前再放一个Conv网络。 -
LSTM PM的结构
ConvNet1即 F 0 F_{0} F0,ConvNet2即 F F F,frame经特征提取网络后与上级的belief map(即灰色的方块)及Gaussian map concatenate在一起,经预测网络得到本级belief map。
此处的LSTM为卷积LSTM:公式(4)
g t = φ ( W x g ∗ X t + W h g ∗ h t − 1 + ϵ g ) g_{t}=\varphi (W_{xg}*X_{t}+W_{hg}*h_{t-1}+\epsilon _{g}) gt=φ(Wxg∗Xt+Whg∗ht−1+ϵg),
i t = σ ( W x i ∗ X t + W h i ∗ h t − 1 + ϵ i ) i_{t}=\sigma (W_{xi}*X_{t}+W_{hi}*h_{t-1}+\epsilon _{i}) it=σ(Wxi∗Xt+Whi∗ht−1+ϵi),
f t = σ ( W x f ∗ X t + W h f ∗ h t − 1 + ϵ f ) f_{t}=\sigma (W_{xf}*X_{t}+W_{hf}*h_{t-1}+\epsilon _{f}) ft=σ(Wxf∗Xt+Whf∗ht−1+ϵf),
o t = σ ( W x o ∗ X t + W h o ∗ h t − 1 + ϵ o ) o_{t}=\sigma (W_{xo}*X_{t}+W_{ho}*h_{t-1}+\epsilon _{o}) ot=σ(Wxo∗Xt+Who∗ht−1+ϵo),
C t = f t ⨀ C t − 1 + i t ⨀ g t C_{t}=f_{t}\bigodot C_{t-1}+i_{t}\bigodot g_{t} Ct=ft⨀Ct−1+it⨀gt,
h t = o t ⨀ φ ( C t ) h_{t}=o_{t}\bigodot \varphi (C_{t}) ht=ot⨀φ(Ct)
" ∗ * ∗"操作为卷积,卷积核为 3 × 3 3\times 3 3×3;
“ + + +”为对应元素相加;
此处的输入 X t X_{t} Xt为上一级的输出belief map;
对于第一级: C 1 = i 1 ⨀ g t C_{1}=i_{1}\bigodot g_{t} C1=i1⨀gt -
loss function
首先在每个关节的正确位置放置高斯峰,从而生成真值heat maps(ground truth belief map);
计算每一级每一个关节预测belief map与groud truth belief map的L2距离:
F = ∑ t = 1 T ∑ p = 1 P ∥ b t ( p ) − g . t . t ( p ) ∥ F=\sum_{t=1}^{T}\sum_{p=1}^{P}\left \| b_{t}(p)-g.t._{t}(p) \right \| F=∑t=1T∑p=1P∥bt(p)−g.t.t(p)∥
其他细节
- 数据增强
在每个patch上进行缩放、旋转、镜像、裁剪 - 参数设置
基于CPM的预训练模型,选用它前两级的参数;
用此文中提出的结构,但每级都输入同样的图片,设置级数为6,参数设置为CPM模型中选出的参数;
在LSP和MPII数据集上进行fine-tune。
还有一些其他训练参数的设置,如级数、学习率等等。 - 测试
测试时也将数据进行缩放,缩放的范围必须在训练时缩放的参数范围之内;
计算结果时将这几种尺度的结果求和或平均,得出预测结果。
判断是否预测正确的标准是PCK方法。
测试需要bounding box,如果想测试自己的数据的话需要先标注好bbox(与CPM不同)。
论文给出的代码只是测单人的,如果想要测多人视频的话,标好并组织好bbox数据再加个循环,比用CPM测多人视频时使用高斯响应测人的位置快得多。