【步态识别】SMPLGait 算法学习《Gait Recognition in the Wild with Dense 3D Representations and A Benchmark》

目录

  • 1. 论文&代码源
  • 2. 论文亮点
    • 2.1 SMPLGait模型
    • 2.2 3D-STN
    • 2.3 Gait3D数据集
  • 3. 模型结构
    • 3.1 SLN——Silhouette Learning Network
    • 3.2 3D-STN——3D Spatial Transformation Network
    • 3.3 3D Spatial Transformation Module
    • 3.4 损失函数
  • 4. Gait3D数据集
    • 4.1 数据集介绍
    • 4.2 构建过程
      • 4.2.1 从帧中对人进行检测和跟踪
      • 4.2.2 跨境头序列匹配
      • 4.2.3 生成步态表征
    • 4.3 数据集评估
  • 5. 实验结果
    • 5.1 无模型方法
    • 5.2 基于模型的方法
    • 5.3 参数设置
    • 5.4 消融实验
    • 5.4 识别准确率
  • 6.总结
  • 0. 知识补充
    • 0.1 “端到端”概念
    • 0.2 交叉熵损失(Cross Entropy Loss)
    • 0.3 三元组损失(Triplet Loss)

1. 论文&代码源

《Gait Recognition in the Wild with Dense 3D Representations and A Benchmark》
论文地址:https://arxiv.org/pdf/2204.02569.pdf
代码下载地址:https://gait3d.github.io

2. 论文亮点

现有步态识别以二维表示为主,将3D人体投影到2D平面上,因此会丢失部分关键信息,也有部分工作利用三维圆柱体或三维骨架来构建稀疏的三维模型,但也在一定程度上丢失了人体的视角、外形等有用信息,如Figure1(b) Skeletons
本文旨在研究室外步态识别的密集3D表示,提出名为3D Skinned Multi-Person Linear(SMPL)基于SMPL的三维步态识别模型,同时构建了第一个基于3D表示的大规模步态数据集(Gait3D)

2.1 SMPLGait模型

SMPLGait模型基于两个深度神经网络分支:一个分支负责将人体的步态剪影序列作为输入来学习外观特征(包含服装、发型、配饰等),但由于室外视角下人体的形状会产生扭曲变形,使得外观变得模糊不清,如Figure1(a) Silhouettes;从而引出了第二个分支,三维空间变换网络(3D-STN),它可以将每一帧的SMPLGait模型作为输入来学习空间变换矩阵,再把空间变换矩阵应用于外观特征,来自不同视角下的特征在潜在空间中被归一化处理。
【步态识别】SMPLGait 算法学习《Gait Recognition in the Wild with Dense 3D Representations and A Benchmark》_第1张图片

2.2 3D-STN

  1. 可以提供人体在三维空间中的姿势和形状;
  2. 在跨视角匹配中,可以利用三维视角对人体方向归一化处理。

2.3 Gait3D数据集

此数据集是基于室外拍摄的高分辨率视频,从中构建了一个基于三维网络的大规模3D步态识别数据集,Gait3D数据集具有以下特点:

  1. 包含4000名受试者和25000+个序列,由39台摄像机在无约束的室内环境中捕获;
  2. 提供从视频帧中恢复精确的三维人体网络,可以提供人体的三维姿势、形状以及视点参数;
  3. 提供了传统的2D轮廓和关键点,可用于研究多模态数据融合的步态识别。

3. 模型结构

【步态识别】SMPLGait 算法学习《Gait Recognition in the Wild with Dense 3D Representations and A Benchmark》_第2张图片

3.1 SLN——Silhouette Learning Network

(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} FiRh×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} xiRH×W

注意: h h h w w w是帧级特征图的高度和宽度, H H H W W W是输入轮廓图像的高度和宽度,二者不是一回事儿。

3.2 3D-STN——3D Spatial Transformation Network

三维空间变换网络的输入是与三维视角、形状、姿态相关的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 yiRD
D D D是SMPL向量的维数:
D = { 24 × 3 维 的 3 D 人 体 姿 态 10 维 人 体 形 状 3 维 相 机 比 例 和 平 移 参 数 D= \begin{cases} 24 \times 3维的3D人体姿态\\ 10维人体形状\\ 3维相机比例和平移参数 \end{cases} D=24×33D姿103
3D-STN由3个全连接层组成,神经元个数分别为128、256和 h × w h \times w h×w,每个全连接层之后是归一化(softmax)和ReLu激活函数,最后两个全连接层用dropout来消除过拟合。

3.3 3D Spatial Transformation Module

三维空间变换模块使用特征空间中的变换向量 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} GiRw×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)

3.4 损失函数

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对之间的相似程度。

4. Gait3D数据集

4.1 数据集介绍

首先,作者给出了现有公开数据集及他们提出的Gait3D数据集的受试者数量、序列长度、相机个数、数据格式和相关属性等信息,如下表所示:
【步态识别】SMPLGait 算法学习《Gait Recognition in the Wild with Dense 3D Representations and A Benchmark》_第3张图片

然后,作者介绍了Gait3D数据集的优势

  1. Gait3D数据集由4,000名受试者25,000+序列300w+ 个由任意三维视角的相机拍摄的Bounding Box(这里的BBox可以理解为序列中的图像帧)组成,这使得在训练时更具可扩展性。
  2. 提供了从视频帧中估算出的精确的三维人体网格,其中包含人体的姿势、形状以及三维空间中的视角点(viewpoint)。
  3. 提供了由最先进的图像分割和姿势估计方法,在我们的数据集上微调得到的2D轮廓和2D/3D关键点,从而使多模态数据可以被应用于步态识别。
  4. Gait3D是在一个大型超市中收集的,其中人们通常以不规则的速度和路线行走,并可能被其他人或物体遮挡住,这使得Gait3D成为一个可扩展但具有挑战性的步态识别数据集。

最后,作者补充说明了数据的获取及处理过程:
数据收集于一家安装有39台摄像头的大型超市,共收集了7天的原始数据,涉及场景包括入口、商品货架区、冷冻区、餐饮区、结账柜台等。将每天的视频随机抽取两个连续2小时的片段,获得约1,090小时的视频,分辨率为1,920$\times$1,080,帧数为25。视频是经过开源方法FFmpeg进行处理的。

4.2 构建过程

4.2.1 从帧中对人进行检测和跟踪

对于从原始视频中提取出的每一帧,使用CenterNet作为人物检测器。为了在视频中实现精准的人物追踪,采用交并比(Intersection-over-Union, IoU)和行人重识别(person Re-IDentification, ReID)特征来衡量相似性。舍去短于25帧或长于500帧的序列,获得约50,000条序列。

4.2.2 跨境头序列匹配

有了上述序列,接下来应该把同一个人在所有摄像机中的序列集中起来,为了实现同一个人的有效和高效的跨境头匹配,利用FastReID来提取所有序列中被选中的帧的特征。通过无监督的聚类方法(此处使用的是BDSCAN),获得了5,336个序列聚类,然后人工对聚类进行筛选,去除只包含一个序列的组,最终得到4,000个受试者和25,309个序列。

4.2.3 生成步态表征

利用4,000个人的序列,为每一帧生成3D SMPL参数、3D网格、3D姿势、2D剪影和2D姿势。作者保持了每一帧的原始分辨率和长宽比,不进行大小调整和归一化处理(为保护受试者隐私,不发布任何RGB帧)。
数据集中的部分步态表征示例如下图所示:
【步态识别】SMPLGait 算法学习《Gait Recognition in the Wild with Dense 3D Representations and A Benchmark》_第4张图片

4.3 数据集评估

下图展示了Gait3D数据集关于帧的大小、ID号与序列号、序列号与序列长度的统计图:
【步态识别】SMPLGait 算法学习《Gait Recognition in the Wild with Dense 3D Representations and A Benchmark》_第5张图片

  • 图(a)显示大多数帧的大小范围是: 100 ∼   400 × 200 ∼ 800 100\sim ~400\times 200\sim800 100 400×200800,比绝大多数现有的数据集尺寸要大;
  • 图(b)显示大多数ID有 2 ∼ 25 2\sim25 225个序列,这保证了受试者的出现时间(帧数);
  • 图(c)显示大多数序列长度超过50帧(2秒),最长的序列有500帧,帧反映了在无约束场景中步态序列发复杂性。

上述信息表明Gait3D数据集是可扩展的,并且对步态识别的研究具有挑战性。

5. 实验结果

5.1 无模型方法

  • GEINet
  • GaitSet
  • GaitPart
  • GLN
  • GaitGL
  • CSTL

5.2 基于模型的方法

  • PoseGait
  • GaitGraph

5.3 参数设置

对于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 1e3,在第200和第600个epoch时乘以 0.1 0.1 0.1
Adam优化器衰减权重系数为 5 e − 4 5e-4 5e4

在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

5.4 消融实验

作者将模型中的3D-STN分支去除,形成名为“SMPLGait w/o 3D”的模型,参与实验结果对比。

5.4 识别准确率

【步态识别】SMPLGait 算法学习《Gait Recognition in the Wild with Dense 3D Representations and A Benchmark》_第6张图片
准确率结果通过平均Rank-1Rank-5mAP(mean Average Precision)和mINP(mean Inverse Negative Penalty)四个变量进行衡量,不难看出SMPLGait模型在各个方面都具有不错的识别性能。

6.总结

室外的步态识别面临着巨大的挑战,如极端的视角变化、人体的遮挡和环境的复杂性。因为人体的三维视角和形状等关键信息丢失了,使用二维剪影或骨架的方法会失效。因此,本文提出了一个基于SMPL模型的三维框架(SMPLGait),这是第一个利用密集三维表示方法在室外进行步态识别的模型
为了促进研究,作者建立了第一个大规模的三维步态识别数据集(Gait3D),该数据集提供了不同的步态表征,包括3D网格、3D SMPLs、3D姿势、2D剪影,以及4,000个对象的25,000个步态序列,以期Gait3D能够为研究人员提供步态识别的新思路。

0. 知识补充

0.1 “端到端”概念

首先介绍非端到端概念。首先对原始数据进行初步处理,提取特征,然后对得到的特征进行学习,得到分类(或回归)的结果。非端到端模型的特征提取部分对于最终表现结果有着至关重要的作用,且特征描述符的书写又具有很大的经验成分,对人类而言是一件较为困难的任务。
端到端则是把特征提取任务交给模型去做,直接输入原始数据(或经过微预处理的数据)让模型自行提取特征。我们可以简单将端到端模型的内部视为一个“黑盒”,原始数据的特征被提取的过程我们并不关心(因为有些计算机内部运算的东西,人话很难解释清楚,大概是这个意思?),只需要将模型搭建好,使得最终的输出结果能够满足模型设计需求。

0.2 交叉熵损失(Cross Entropy Loss)

信息量: 信息是用来消除随机不确定性的东西,信息量的大小与信息发生的概率成反比。
信息熵: 表示所有信息量的期望,即试验中每次可能结果的概率乘以其结果的总和,用下式表示——
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=1nP(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(pq)=i=1np(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(pq)=i=1np(xi)log(q(xi)p(xi))=i=1np(xi)log(p(xi))i=1np(xi)log(q(xi))=[H(x)]+[i=1np(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函数将输出结果进行处理,使其多个分类的预测值之和=1,再通过交叉熵来计算预测损失。

※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

0.3 三元组损失(Triplet Loss)

【步态识别】SMPLGait 算法学习《Gait Recognition in the Wild with Dense 3D Representations and A Benchmark》_第7张图片
三元组损失函数是当前应用较为广泛的一种损失函数,目的是做到非同类极相似样本的区分。
优点:
基于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=in[f(xia)f(xip)22f(xia)f(xin)22+α]+

  • ∣ ∣ ⋅ ∣ ∣ ||·|| 为欧氏距离
  • α \alpha α为margin阈值。此值越小,loss越容易趋近于0,能够较快得到训练结果(但不能很好地区分相似图像);此值越大,网络参数会拼命拉进anchor与positive的距离,可以较好地区分相似图像(但可能导致网络不收敛)
  • 式子整体右下角的 + + +表示当 [ ⋅ ] [·] []内的值 > 0 >0 >0时,L即为损失值, < 0 <0 <0时,损失消失

参考博客:

(CVPR-2022)具有密集 3D 表示和基准的野外步态识别

如何理解深度学习中端到端(End-to-end)概念

交叉熵损失函数原理详解

三元组损失tripletloss

Triplet Loss及其梯度

你可能感兴趣的:(步态识别,算法,学习,深度学习,人工智能,机器学习)