-
Notifications
You must be signed in to change notification settings - Fork 0
Description
Real-time Hand Gesture Detection and Classification Using Convolutional Neural Networks
https://arxiv.org/pdf/1901.10323.pdf
Task:
实时手势动作识别
Framework:
首先对输入的视频用滑动窗(t, t+8)取8帧作为一段,放入网络中,得到Detector的输出(二维),大于0.5则该段有动作,以同样的起始时间取32帧作为一段(t, t+32), 放入网络得到Classifier的输出(84维:83个动作和None)。Classifier的输出按规则取最大值,即为该段的动作类别。提出Post-processing和Single-time Activation的方法来解决一些针对性的问题,使得模型更准确。

Sliding window fashion
滑动窗取视频段
-
Detector(scale: 8, stride: 1)
-
Classifier (scale: 32, stride: 1)
A Detector + A Classifier
-
Detector(ResNet-10): 二分类(有无手势);同时作为Classifier的触发器(检测到有手势出现则进入分类器,无手势则进入下一段视频)
-
Classifier(ResNeXt-101):softmax(pre) 判断出现的手势属于哪一类
Detector 具体(Post-processing)
-
解决问题: 在实时识别手势的过程中,可能会存在动作幅度太大跑出画面的情况,此时依然是在手势动作的过程中,但Detector输出的confidence score很低。
-
方案: 提出Post-processing,保留之前段落预测的confidence score(文中保留4个值)和当前confidence score共同组成一个五位的数组,取中位数作为最终判断是否存在手势动作的预测值(二分类argmax(pre)=1则有动作,反之没有)。
Classifier 具体(Single-time Activation)
-
解决问题: 一个完整的手势动作可分为三个过程(准备期preparation, 峰值期nucleus,结束期retraction),在准备期时Detector已检测出动作并送入Classifier,但许多动作在preparation期往往是很相似的(如下图),会产生CS值很高的错误预测。

-
方案: 对不同时期的预测采用不同的权重。
公式:
首先定义一个常量t:
其中t是常量,u代表平均的ground truth动作时长(Ego数据集该值为38),s为步长,这里通过移动的步长来判断到第几个位置。论文中s取1,4文章没有解释,我认为这里的4是将每个动作时长分成四段,前四分之一表示准备期。因此需要s与之对应,例如果s取2,则4应改为取2.
其次对当前所取动作状态加权,权值为:
其中j是指检测到一个动作状态下的时间索引,当首次检测到动作时,为0,之后j递加,直到动作状态结束j重新赋值为0。该公式中t为定义好的常量(9),权值W随j的增加而增大,j=t时权值为0.5。
当检测到出整个段落后,将权值与预测结果相乘取平均,在均值中取最大的两个值,若这两个值的差大于某个阈值,则输出得分高的动作,作为该段的手势动作类别。如果遍历完j段依然不满足这个要求,则取出最大的值,该值大于0.15则将其作为最终的分类结果。
实验结果
EgoGesture dataset
train: 1239 videos 14416gesture
val: 411 videos 4768gesture
test: 431 videos 4977gesture
实验结果分析:
1),Depth图效果更好,解释:Depth图filter out背景信息,可以更focus在手势上。
2),检测器8帧效果最好,解释:该模型下Detector的设计至关重要,不能有遗漏取值应尽可能的小。
复现细节
待更新






