《Gait Recognition in the Wild with Dense 3D Representations and A Benchmark》
论文地址:https://arxiv.org/pdf/2204.02569.pdf
代码下载地址:https://gait3d.github.io
现有步态识别以二维表示为主,将3D人体投影到2D平面上,因此会丢失部分关键信息,也有部分工作利用三维圆柱体或三维骨架来构建稀疏的三维模型,但也在一定程度上丢失了人体的视角、外形等有用信息,如Figure1(b) Skeletons。
本文旨在研究室外步态识别的密集3D表示,提出名为3D Skinned Multi-Person Linear(SMPL)基于SMPL的三维步态识别模型,同时构建了第一个基于3D表示的大规模步态数据集(Gait3D)。
SMPLGait模型基于两个深度神经网络分支:一个分支负责将人体的步态剪影序列作为输入来学习外观特征(包含服装、发型、配饰等),但由于室外视角下人体的形状会产生扭曲变形,使得外观变得模糊不清,如Figure1(a) Silhouettes;从而引出了第二个分支,三维空间变换网络(3D-STN),它可以将每一帧的SMPLGait模型作为输入来学习空间变换矩阵,再把空间变换矩阵应用于外观特征,来自不同视角下的特征在潜在空间中被归一化处理。
此数据集是基于室外拍摄的高分辨率视频,从中构建了一个基于三维网络的大规模3D步态识别数据集,Gait3D数据集具有以下特点:
(2D)剪影学习网络含有6个卷积层,类似于GaitSet模型主干,具体工作原理可以再去回顾一下GaitSet。
网络的工作过程可以用下式表示:
F i = F ( x i ) ( 1 ) \mathbf F_i=F(x_i) \qquad(1) Fi=F(xi)(1)
其中:
F i ∈ R h × w \mathbf F_i \in \Bbb R^{h \times w} Fi∈Rh×w是帧 x i x_i xi的帧级特征图;
F ( ⋅ ) F(·) F(⋅)是基于CNN的主干;
x i x_i xi来自输入序列 X s i l \mathbf X_{sil} Xsil;
X s i l = { x i } i = 1 L \mathbf X_{sil}=\{x_i\}_{i=1}^L Xsil={xi}i=1L, L L L是序列的长度, x i ∈ R H × W x_i\in \Bbb R^{H \times W} xi∈RH×W。
注意: h h h和 w w w是帧级特征图的高度和宽度, H H H和 W W W是输入轮廓图像的高度和宽度,二者不是一回事儿。
三维空间变换网络的输入是与三维视角、形状、姿态相关的3D SMPL参数(向量)。
网络的前向传播过程可以用下式表示:
g i = G ( y i ) ( 2 ) \mathbf g_i=G(y_i) \qquad(2) gi=G(yi)(2)
其中:
g i \mathbf g_i gi是帧 i i i的帧级变换向量;
G ( ⋅ ) G(·) G(⋅)是SD-STN的主干;
y i y_i yi是帧 i i i的SMPL向量, y i ∈ R D y_i \in \Bbb R^D yi∈RD;
D D D是SMPL向量的维数:
D = { 24 × 3 维 的 3 D 人 体 姿 态 10 维 人 体 形 状 3 维 相 机 比 例 和 平 移 参 数 D= \begin{cases} 24 \times 3维的3D人体姿态\\ 10维人体形状\\ 3维相机比例和平移参数 \end{cases} D=⎩⎪⎨⎪⎧24×3维的3D人体姿态10维人体形状3维相机比例和平移参数
3D-STN由3个全连接层组成,神经元个数分别为128、256和 h × w h \times w h×w,每个全连接层之后是归一化(softmax)和ReLu激活函数,最后两个全连接层用dropout来消除过拟合。
三维空间变换模块使用特征空间中的变换向量 g i \mathbf g_i gi与帧级特征图 F i \mathbf F_i Fi对齐。
首先将 g i \mathbf g_i gi重塑为矩阵 G i ∈ R w × h \mathbf G_i \in \Bbb R^{w \times h} Gi∈Rw×h,通过短边补零,将 F i \mathbf F_i Fi和 G i \mathbf G_i Gi扩展为方阵,进行如下操作:
F i ^ = F i ⋅ ( I + G i ) ( 3 ) \hat{ \mathbf F_i }= \mathbf F_i \cdot (I + \mathbf G_i) \qquad(3) Fi^=Fi⋅(I+Gi)(3)
L = α L t r i + β L c e ( 4 ) L=\alpha L_{tri}+\beta L_{ce} \qquad(4) L=αLtri+βLce(4)
损失函数由两部分组成, L t r i L_{tri} Ltri为三元组损失, L c e L_{ce} Lce为交叉熵损失, α \alpha α和 β \beta β均为权重系数。
在测试阶段,作者将剪影序列和SMPLs分别作为两个分支的输入。利用余弦相似度来衡量query-gallery对之间的相似程度。
首先,作者给出了现有公开数据集及他们提出的Gait3D数据集的受试者数量、序列长度、相机个数、数据格式和相关属性等信息,如下表所示:
然后,作者介绍了Gait3D数据集的优势:
最后,作者补充说明了数据的获取及处理过程:
数据收集于一家安装有39台摄像头的大型超市,共收集了7天的原始数据,涉及场景包括入口、商品货架区、冷冻区、餐饮区、结账柜台等。将每天的视频随机抽取两个连续2小时的片段,获得约1,090小时的视频,分辨率为1,920$\times$1,080,帧数为25。视频是经过开源方法FFmpeg进行处理的。
对于从原始视频中提取出的每一帧,使用CenterNet作为人物检测器。为了在视频中实现精准的人物追踪,采用交并比(Intersection-over-Union, IoU)和行人重识别(person Re-IDentification, ReID)特征来衡量相似性。舍去短于25帧或长于500帧的序列,获得约50,000条序列。
有了上述序列,接下来应该把同一个人在所有摄像机中的序列集中起来,为了实现同一个人的有效和高效的跨境头匹配,利用FastReID来提取所有序列中被选中的帧的特征。通过无监督的聚类方法(此处使用的是BDSCAN),获得了5,336个序列聚类,然后人工对聚类进行筛选,去除只包含一个序列的组,最终得到4,000个受试者和25,309个序列。
利用4,000个人的序列,为每一帧生成3D SMPL参数、3D网格、3D姿势、2D剪影和2D姿势。作者保持了每一帧的原始分辨率和长宽比,不进行大小调整和归一化处理(为保护受试者隐私,不发布任何RGB帧)。
数据集中的部分步态表征示例如下图所示:
下图展示了Gait3D数据集关于帧的大小、ID号与序列号、序列号与序列长度的统计图:
上述信息表明Gait3D数据集是可扩展的,并且对步态识别的研究具有挑战性。
对于GaitSet、GaitPart、GLN和GaitGL模型,使用开源的OpenGait进行训练(因为它的训练性能要优于原始代码)。
训练过程(除GLN,因为GLN需要分段训练)配置相同的参数:
batch size为 32 × 4 × 30 32\times 4\times 30 32×4×30,表示ID数量为32,每个ID的样本数量为4,序列长度为30;
epoch为 1 , 200 1,200 1,200;
LR学习率的初始值为 1 e − 3 1e-3 1e−3,在第200和第600个epoch时乘以 0.1 0.1 0.1;
Adam优化器衰减权重系数为 5 e − 4 5e-4 5e−4。
在3D-STN中设置全连接层的dropout rate为 0.2 0.2 0.2,损失函数式 ( 4 ) (4) (4)中 α = 1.0 \alpha = 1.0 α=1.0, β = 0.1 \beta = 0.1 β=0.1。
作者将模型中的3D-STN分支去除,形成名为“SMPLGait w/o 3D”的模型,参与实验结果对比。
准确率结果通过平均Rank-1、Rank-5、mAP(mean Average Precision)和mINP(mean Inverse Negative Penalty)四个变量进行衡量,不难看出SMPLGait模型在各个方面都具有不错的识别性能。
室外的步态识别面临着巨大的挑战,如极端的视角变化、人体的遮挡和环境的复杂性。因为人体的三维视角和形状等关键信息丢失了,使用二维剪影或骨架的方法会失效。因此,本文提出了一个基于SMPL模型的三维框架(SMPLGait),这是第一个利用密集三维表示方法在室外进行步态识别的模型。
为了促进研究,作者建立了第一个大规模的三维步态识别数据集(Gait3D),该数据集提供了不同的步态表征,包括3D网格、3D SMPLs、3D姿势、2D剪影,以及4,000个对象的25,000个步态序列,以期Gait3D能够为研究人员提供步态识别的新思路。
首先介绍非端到端概念。首先对原始数据进行初步处理,提取特征,然后对得到的特征进行学习,得到分类(或回归)的结果。非端到端模型的特征提取部分对于最终表现结果有着至关重要的作用,且特征描述符的书写又具有很大的经验成分,对人类而言是一件较为困难的任务。
端到端则是把特征提取任务交给模型去做,直接输入原始数据(或经过微预处理的数据)让模型自行提取特征。我们可以简单将端到端模型的内部视为一个“黑盒”,原始数据的特征被提取的过程我们并不关心(因为有些计算机内部运算的东西,人话很难解释清楚,大概是这个意思?),只需要将模型搭建好,使得最终的输出结果能够满足模型设计需求。
信息量: 信息是用来消除随机不确定性的东西,信息量的大小与信息发生的概率成反比。
信息熵: 表示所有信息量的期望,即试验中每次可能结果的概率乘以其结果的总和,用下式表示——
H ( X ) = − ∑ i = 1 n P ( x i ) l o g ( P ( x i ) ) H(X)=-\sum_{i=1}^n P(x_i) log(P(x_i)) H(X)=−i=1∑nP(xi)log(P(xi))
相对熵(KL散度 Kullback-Leibler): 同一个随机变量有两个单独的概率分布,使用KL散度来衡量两个概率分布之间的差异。
D K L ( p ∣ ∣ q ) = ∑ i = 1 n p ( x i ) l o g ( p ( x i ) q ( x i ) ) D_{KL}(p||q)=\sum_{i=1}^n p(x_i)log(\frac{p(x_i)}{q(x_i)}) DKL(p∣∣q)=i=1∑np(xi)log(q(xi)p(xi))
通常情况, P ( x ) P(x) P(x)为真实分布, Q ( x ) Q(x) Q(x)为预测分布。KL散度越小,则表示 P ( x ) P(x) P(x)与 Q ( x ) Q(x) Q(x)的分布越接近,也就是预测值与真实值越接近。
交叉熵: 对KL散度表达式进行展开——
D K L ( p ∣ ∣ q ) = ∑ i = 1 n p ( x i ) l o g ( p ( x i ) q ( x i ) ) = ∑ i = 1 n p ( x i ) l o g ( p ( x i ) ) − ∑ i = 1 n p ( x i ) l o g ( q ( x i ) ) = − [ H ( x ) ] + [ − ∑ i = 1 n p ( x i ) l o g ( q ( x i ) ) ] D_{KL}(p||q)=\sum_{i=1}^n p(x_i)log(\frac{p(x_i)}{q(x_i)}) \\=\sum_{i=1}^n p(x_i)log(p(x_i)) -\sum_{i=1}^n p(x_i)log(q(x_i)) \\=-[H(x)]+[-\sum_{i=1}^n p(x_i) log(q(x_i))] DKL(p∣∣q)=i=1∑np(xi)log(q(xi)p(xi))=i=1∑np(xi)log(p(xi))−i=1∑np(xi)log(q(xi))=−[H(x)]+[−i=1∑np(xi)log(q(xi))]
定义 − ∑ i = 1 n p ( x i ) l o g ( q ( x i ) ) -\sum_{i=1}^n p(x_i) log(q(x_i)) −∑i=1np(xi)log(q(xi))为交叉熵函数,
K L 散 度 = 交 叉 熵 − 信 息 熵 KL散度=交叉熵-信息熵 KL散度=交叉熵−信息熵
总结:
※softmax函数
softmax函数又称归一化指数函数,它是二分类函数sigmoid在多分类上的推广,目的是将多分类的结果以概率的形式展现出来。
S o f t m a x ( z i ) = e z i ∑ j = 1 n e z j Softmax(z_i)=\frac{e^{z_i} }{\sum_{j=1}^ne^{z_j}} Softmax(zi)=∑j=1nezjezi
三元组损失函数是当前应用较为广泛的一种损失函数,目的是做到非同类极相似样本的区分。
优点:
基于triplet loss的神经网络模型能够很好地对细节进行区分,尤其是是在图像分类任务中(是在FaceNet人脸识别任务中提出的)。在训练过程中设置的阈值margin可以控制正负样本的距离。
缺点:
三元组的选取导致数据的分布不一定是均匀的,所以在模型训练过程中表现不稳定,收敛慢,需要根据结果不断调节参数,且容易出现过拟合(与分类损失相比)。
结构:
三元即anchor、negative、positive
通过triplet loss学习,使positive元与anchor元的距离最小,negative元与anchor元的距离最大。
目标函数:
L = ∑ i n [ ∣ ∣ f ( x i a ) − f ( x i p ) ∣ ∣ 2 2 − ∣ ∣ f ( x i a ) − f ( x i n ) ∣ ∣ 2 2 + α ] + L=\sum_i^n [||f(x_i^a)-f(x_i^p)||_2^2 -||f(x_i^a)-f(x_i^n)||_2^2 +\alpha ]_+ L=i∑n[∣∣f(xia)−f(xip)∣∣22−∣∣f(xia)−f(xin)∣∣22+α]+
参考博客:
(CVPR-2022)具有密集 3D 表示和基准的野外步态识别
如何理解深度学习中端到端(End-to-end)概念
交叉熵损失函数原理详解
三元组损失tripletloss
Triplet Loss及其梯度