一种用于手势姿态分类的方法
技术领域
本发明属于图像的姿态估计或图像分类领域,具体涉及手势或人体的姿态估计或分类。
背景技术
现有的V2Vposehand模型,将深度图d转为体素作为模型输出,模型输出的是基于标签生成的3d heatmap(每个关节点对应一个3d热图),其损失函数为:
该方式具有以下问题:(1)网络结构复杂运行时间较长;(2)虽然该模型目前精度排行第一,但模型回归的heatmap之间没有结构联系,没有融入手部的结构特征的先验信息,误差还是较大;(3)模型没有教好的特征提取,用于手势分类效果不佳;(4)模型输出关键点的个数固定,无法处理手势遮挡关节点,因为相当于回归了一个不存在的关节点,模型输出无法判断哪个点是遮挡点
Deeprior++是以2d的深度图作为模型输入,回归3d关节点坐标,该方法具有以下问题:(1)模型精度较低;(2)损失函数也没有体现手部结构联系,没有融入手部的结构特征的先验信息;(3)模型没有教好的特征提取,用于手势分类效果不佳;(4)模型输出关键点的个数固定,无法处理手势遮挡关节点,因为相当于回归了一个不存在的关节点,模型输出无法判断哪个点是遮挡点。
综上,现有的手势姿态估计网络直接回归关节点位置,或回归heatmap,但都没有考虑手的结构先验信息,都不能解决关节点遮挡的问题,本发明考虑手的结构先验信息,模型输出可以判断是否是隐藏关节点;很少有专门针对手势分类的模型,它们不能很好的提取手部结构体征用于分类,本发明也可用于手势的分类;精度方面本发明也会有较大提高。
发明内容
1、本发明的目的
本发明为了解决遮挡关节点问题,提出了一种用于手势姿态分类的方法。
2、本发明所采用的技术方案
本发明提出了一种用于手势姿态分类的方法,包括如下步骤:
热图融合步骤,首先生成每个关节点的热图,将生成的热图上取最大值进行融合;
强化结构信息步骤,将在已有的关节点中插入新的关节点,在每根手指可见的相邻两个关节点之间做插值,映射到热图,同样将插入的每个关节点转为热图,最终将关节点和插入点的热图做融合,生成联合热图;
联合热图回归步骤,对于联合热图的回归损失采用了L2损失函数进行回归;
关节点的分类步骤,基于联合热图进行像素级分类,使用focal loss损失函数求解。
更进一步,热图融合步骤:
首先生成每个关节点的热图,J
k(k∈(1,2,...,K))表示一只手的k个关节点,将每个可见关节点转为
其中I
visual表示所有可见关节点索引的集合,
分别表示标注数据关节点在热图上对应的坐标,j
kx、j
ky、j
kz分别表示标注数据关节点的相机坐标,R为热图的缩放因子;然后将生成的len(I
visual)个热图进行融合,融合的策略为在热图像素上取最大值,融合的热图:
更进一步,强化结构信息步骤:
假定手部手指关节点之间的骨骼为直线,即插入的关节点由指头的相邻两个关节点生成,插入关节点的坐标计算为:
x
in=m(x
2-x
1)+x
1,y
in=m(y
2-y
1)+y
1,z
in=m(z
2-z
1)+z
1,m∈(0,1),J
in={(x
in,y
in,z
in)},其中(x
1,y
1,z
1)和(x
2,y
2,z
2)为手指上相邻的两个关节点坐标,J
in表示所有插入关节点的集合,映射到热图为,
同样将插入的每个关节点转为热图:
其中
表示插入的所有关节点,最终将关节点和插入点的热图做融合,为了凸显关节点的特征,每个插入点的热图值分布范围比关节点小,令插入点的标准差取一个较小的值,关节点的标注差去一个相对较大的值,最终的联合热图可表示为:
更进一步,联合热图回归步骤:
采用了L2损失函数,其中
为预测的联合热图,而h
union为真实联合热图;
更进一步,关节点的分类步骤:
基于联合热图进行像素级分类,其中0类代表非关节点,1~k类表示k个关节点类别;这样在热图之后会有w*h*(k+1)的特征图,其中w为热图的宽度,h为热图的高度,k+1为特征图的通道数。该特征图特征不仅继承于热图,而且也继承于热图之前的特征,这保证了关节点分类的准确性。然后使用focal loss损失函数,其中y为热图每个像素的真实类别,y′为预测为第k个类别的概率,α为正负样本平衡系数,γ为单样本权重降低的速率:
更进一步,还包括回归偏差预测步骤:
由于热图下采样,使得关键点的真实坐标产生一定的偏差,为了弥补这种损失,本发明在热图的前一层特征预测一个偏差值,其损失函数为,其中
为预测的偏差值,
为真实的偏差值,而
(x,y,z)属于第2原始关节点的集合J
K和插入关节点的集合J
in的并集:
整体损失为:Loss=Lossheatmap+μLossclass+ηLossoffset,其中μ,η为损失权重,分别取0.5和1,Lossheatmap、Lossclass、Lossoffset分别为上文提出的损失。
更进一步,还包括如下步骤:
关节点坐标准确回归的前提是关节点的类别分类正确。虽然使用了热图和热图之前的特征来提高分类的正确性,但也很难做到像素级的绝对准确,为此,本发明提出一些后处理算法,具体为:
(1)找出前k个最大的热图值对应的heatmap上的坐标集合
每个元素为:
其中
表示第k热图值对应的heatmap上的坐标;
(2)在特征图类别中查找以坐标集合
每个元素为中心的边长为n个像素的邻域内的类别值。
(3)在每个边长为n像素的区域内,设置中心点的类别值权重为m,周围的类别值权重为1-m,计算该区域内的类别加权值,如果中心点的类别为非零,只统计周围类别的非零值,对每个类别求最终权值,取最大权重值对应的类别为该区域的类别,如果类别对应的权值相等,中心点类别值;
(4)循环(2)(3)步骤,得到k个对应于
的类别值集合{C};
(5)去掉{C}中的所有零值,保留有效类别集合{C′};
(6)对{C′}中的所有值进行去重操作,相同类别时,保留权值较大的类别值,如果权值相等,更改该类别值对应的位置索引为权值相等的同类别位置的平均值再取整,最终得到类别值集合{C″};
(7)在偏离特征图类别中查找类别值集合{C″}对应的坐标集合{J″}处对应的偏离集合{O″};
(8)遍历坐标集合{J″}和偏离集合{O″},预测坐标为
得到
集合。
3、本发明所采用的有益效果
(1)本发明将所有的关节的点信息生成一个heatmap,这种heatmap避免了模型输出量大的资源浪费问题,还能包含姿态的整体结构信息,同时为实现分辨隐藏关节点提供了前提。
(2)本发明将在已有的关节点中插入新的关节点,但并不是任意两个关节点之间做插值,而是在每根手指可见的相邻两个关节点之间做插值,因为手势能呈现出多种姿态依赖于指头的自由度,而不是掌心;为了凸显关节点的特征,每个插入点的heatmap值分布范围要保证比关节点的小,最大值也小,就需要给插入点的heatmap一个较小的权重,为了让关节点之间的骨骼特征统一,就应该使得骨骼heatmap变得相对平滑。
(3)本发明的featuremap特征不仅继承于heatmap,而且也继承于heatmap之前的特征,这保证了关节点分类的准确性。。
(4)本发明不论2D还是3D姿态估计,模型输出的形式一致,融入手的结构先验信息,模型输出可以判断是否是隐藏关节点,同时模型训练样本标注较为简单,只需要对可见关节点标注,无需猜测遮挡关节点的位置,模型可以在较少参数下获得教好的特征提取和精度。
附图说明
图1为本发明的算法网络结构图。
具体实施方式
下面结合本发明实例中的附图,对本发明实例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明的实施例,本领域技术人员在没有做创造性劳动前提下所获得的所有其他实施例,都属于本发明的保护范围。
下面将结合附图对本发明实例作进一步地详细描述。
实施例
图1为本发明的算法网络结构图,模型输入图片大小为224*224,后接backbone,输出112*112*128的heatmap,后接两个分支,其中一个分支采用两个卷积层输出损失Lossoffset(详见文中定义),另一个分经过卷积输出union heatmap(详见文中定义),然后继续分为两个分支,经过若干卷积后分别输出Lossheatmap和Lossclass(详见文中定义)损失,其中Lossclass的输出借鉴了googlenet中contact的思想,以保证提取充分的特征。
1、组合热图(Union heatmap)
回归传统的heatmap时,会对每个关节点进行回归一个heatmap,这样模型的输出层数与关节点个数成正比,而且每个heatmap极为稀疏,造成了大量的资源浪费。不仅如此,这种从一张庞大的图中分别回归每个点的heatmap,使得模型无法学到首部骨骼的约束信息,而这种约束信息在特征提取上至关重要,从而影响到整个模型的估计精度。
本发明将所有的关节的点信息生成一个heatmap,这种heatmap避免了模型输出量大的资源浪费问题,还能包含姿态的整体结构信息,同时为实现分辨隐藏关节点提供了前提。
2、热图融合(make fuse heatmap)
以传统heatmap的生成为基础,首先生成每个关节点的heatmap,J
k(k∈(1,2,...,K))表示一只手的k个关节点,将每个可见关节点转为heatmap
其中I
visual表示所有可见关节点索引的集合,
分别表示ground truth关节点在heatmap上对应的坐标,j
kx、j
ky、j
kz分别表示ground truth关节点的相机坐标,R为heatmap的缩放因子,取3。然后将生成的len(I
visual)个heatmap进行融合,融合的策略为在heatmap像素上取最大值,融合的heatmap见下式。
3、强化数据信息(inhence more structural information)
在ICVL中每只手有16个关节点,MSRA数据集中每相邻只手有21个关节点,NYU.数据集中,每只手有36个关节点,然而仅仅含有这些关节点的heatmap还是无法充分体现手部关节点的结构信息。于是本发明提出了新的构思,将在已有的关节点中插入新的关节点,但并不是任意两个关节点之间做插值,而是在每根手指可见的相邻两个关节点之间做插值,因为手势能呈现出多种姿态依赖于指头的自由度,而不是掌心。本发明假定手部手指关节点之间的骨骼为直线,即插入的关节点由指头的相邻两个关节点生成,插入关节点的坐标计算为x
in=m(x
2-x
1)+x
1,y
in=m(y
2-y
1)+y
1,z
in=m(z
2-z
1)+z
1,m∈(0,1),J
in={(x
in,y
in,z
in)},其中(x
1,y
1,z
1)和(x
2,y
2,z
2)为手指上相邻的两个关节点坐标,J
in表示所有插入关节点的集合,映射到heatmap为,
同样将插入的每个关节点转为heatmap,
其中
表示插入的所有关节点,最终将关节点和插入点的heatmap做融合(本发明称之为联合heatmap),为了凸显关节点的特征,每个插入点的heatmap值分布范围要保证比关节点的小,最大值也小,就需要给插入点的heatmap一个较小的权重0.5,为了让关节点之间的骨骼特征统一,就应该使得骨骼heatmap变得相对平滑,因此,本发明令插入点的标准差取一个较小的值,关节点的标注差去一个相对较大的值,最终的联合heatmap可表示为:
其中h
fuse在第2节中有定义。
4、联合热图回归损失(Loss of unoin heatmap)
对于联合heatmap的回归损失,本发明采用了L2损失函数,其中
为预测的unoin heatmap,而h
union为第3节中定义的真实unoin heatmap。
5、关节点的分类
联合heatmap虽然有利于手部整体结构特征的学习,但是也带来了一个问题,即回归的联合heatmap无法找到对应的关节点位置。为了解决这个问题,本发明借鉴了maskRcnn的思想提出了基于联合heatmap进行像素级分类,其中0类代表非关节点,1~k类表示k个关节点类别。这样在heatmap之后会有w*h*(k+1)的featuremap,其中w为heatmap的宽度,h为heatmap的高度,k+1为featuremap的通道数。该featuremap特征不仅继承于heatmap,而且也继承于heatmap之前的特征(详见模型输出结构),这保证了关节点分类的准确性。然后使用focal loss损失函数,其中y为heatmap每个像素的真实类别,y′为预测为第k个类别的概率,α为正负样本平衡系数,γ为单样本权重降低的速率::
6、回归偏差
由于heatmap下采样,使得关键点的真实坐标产生一定的偏差,为了弥补这种损失,本发明在heatmap的前一层特征预测一个偏差值,其损失函数为,其中
为预测的偏差值,
为真实的偏差值,而
(x,y,z)属于第2原始关节点的集合J
K和第3节中插入关节点的集合J
in的并集:
整体损失为:Loss=Lossheatmap+μLossclass+ηLossoffset,其中μ,η为损失权重,分别取0.5和1,Lossheatmap、Lossclass、Lossoffset分别为上文提出的损失。
7、模型结构细节说明
本次提出的联合heatmap姿态估计使用于2D的姿态估计和3D姿态估计,当采用2D数据时,模型输入2D的彩色图或灰度图,以图像的左上角为原点,没有z的坐标信息。当采用3D数据时,如v2vPoseHand中的体素,或者pointRcnn中的点云,模型整体都采用3d卷积等操作,生成3D heatmap。但不论2D还是3D姿态估计,模型输出的形式一致,模型输出结构以2d姿态估计为例如图1所示。其中借鉴了googlenet思想,目的是在对关节点做像素级分类时,预测的heatmap会损失一定的原始数据信息,例如彩色图片的颜色纹理等,但这种信息所占比例较小,因此将heatmap之前的64通道与heatmap之后的192通道拼接,然后再采用1*1的卷积得到k+1个类别(K个关节点,一个背景类)。
8、关节点坐标预测
关节点坐标准确回归的前提是关节点的类别分类正确。虽然使用了heatmap和heatmap之前的特征来提高分类的正确性,但也很难做到像素级的绝对准确,为此,本发明提出一些后处理算法,具体为:
(1)找出前k个最大的热图值对应的heatmap上的坐标集合
每个元素为:
其中
表示第k热图值对应的heatmap上的坐标;
(2)在class featuremap中查找以坐标集合
每个元素为中心的边长为3个像素的邻域内的类别值。
(3)在每个边长为3像素的区域内,中心点的类别值权重为0.7,周围的类别值权重为0.3,计算该区域内的类别加权值,如果中心点的类别为非零,只统计周围类别的非零值,对每个类别求最终权值,取最大权重值对应的类别为该区域的类别,如果类别对应的权值相等,中心点类别值。如表1,1类别权重为3*0.3=0.9,2类别权值为0.7*1+0.3*1=1,故该区域对应类别值为2;如果中心点的类别为零,统计周围类别的所有值,对每个类别求最终权值,取最大权重值对应的类别为该区域的类别,如果类别对应的权值相等,中心点类别值。如表2,1类别权重为3*0.3=0.9,2类别权值为0.3*4=1.2,0的类别权值为0.7+0.3=1,故该区域对应类别值为2;
(4)循环(2)(3)步骤,得到k个对应于
的类别值集合{C}。
(5)去掉{C}中的所有零值,保留有效类别集合{C′}。
(6)对{C′}中的所有值进行去重操作,相同类别时,保留权值较大的类别值,如果权值相等,更改该类别值对应的位置索引为权值相等的同类别位置的平均值再取整,最终得到类别值集合{C″}。
(7)在offsetfeaturemap中查找类别值集合{C″}对应的坐标集合{J″}处对应的偏离集合{O″}。
(8)遍历坐标集合{J″}和偏离集合{O″},预测坐标为
得到
集合。
9、用于手势分类
联合heatmap不仅在关节点估计表现出色,也可用于手势分类,做法为在heatmap特征层之后连接分类器。
10.效果评估
用于手势姿态估计时,采用本专利的方案和v2vPoseHand进行对比(对本方案的网络参数进行调整使得二者的网络参数量相等,以保证对比的意义),训练数据都为10000张NYU公共数据集,batch_size都为16,训练step都为10000,学习率都为0.0001。测试集都采用2000张NYU公共数据集,v2vPoseHand的关节点平均误差约为7.22mm,本专利方案的关节点平均误差约为6.12mm,精度提高了约1.10mm。
以上所述,仅为本发明较佳的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明披露的技术范围内,可轻易想到的变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应该以权利要求书的保护范围为准。