当前位置: 首页 > news >正文

手势识别论文解读

目录

  • 《Learning to Estimate 3D Hand Pose from Single RGB Images》2017.3
    • 主要流程
    • 代码细节解读
    • 训练流程解读
  • 《Online Detection and Classification of Dynamic Hand Gestures with Recurrent 3D Convolutional Neural Networks》2016.11
  • 《Realtime Multi-Person 2D Human Pose Estimation using Part Affinity Fields》2016.6
    • 目标
    • 框架
      • 检测部分
      • 匹配部分
    • 两个子问题:
  • 《Convolutional Pose Machines》
    • 目标
    • 框架
    • 要点

《Learning to Estimate 3D Hand Pose from Single RGB Images》2017.3

本文介绍了从2D彩色图像进行3D hand pose estimation的一种方法,总体来说方法很直观
project page

主要流程

这里写图片描述
如图所示,依次有以下几个环节:

  • 1)HandSegNet, 输入256x256x3, 输出256x256x1的一个hand mask。用一个FCN网络进行手的语义分割,分割之后的结果用来对手附近区域进行截图,以减少计算量及提高准确性
  • 2)PoseNet,用来计算手的21个keypoint, 输入256x256x3,输出32x32x21, 即21张不同keypoint的score map
  • 3)PosePrior,有两个子stream,每个的网络结构除了最后一层不一样其他都一样,输入32x32x21,输出两个层。一个是正则化的手的坐标,以手掌的点为原点,且长度进行了normalize, 即维度为21x3。另一个是相对于实际图片的空间的变换关系,即维度为3

在论文中还用这个结构进行了手语识别,手语识别的网络直接根据手的指示来, 是一个3层的全连接网络,输入维度63, 输出维度35

代码细节解读

使用自带的工具tfprof进行性能分析,发现主要的耗时在于, 2/3耗时在single_obj_scoremap中的tf.nn.dilation2d操作, 1/6耗时在HandSegNet,1/6耗时在PoseNet2D。
同时,为了复用前人训练好的网络参数,将手部截图重新上采样到256x256来使用PoseNet。可见整个网络还有很大的优化空间。cpu上做到实时也不是没有希望。

训练流程解读

《Online Detection and Classification of Dynamic Hand Gestures with Recurrent 3D Convolutional Neural Networks》2016.11

这篇文章的思路就不一样,它主要在于训练一个end-to-end的手势识别结果,不进行具体的hand pose estimation。从视频效果来看也不错

《Realtime Multi-Person 2D Human Pose Estimation using Part Affinity Fields》2016.6

code

目标

多人同时Pose Estimation, 如下图所示
这里写图片描述

框架

分两个部分,检测部分和匹配部分,如下图所示
pipeline
(b)关键点检测,(c)part affinity fields即四肢关系检测,(d)二分图匹配

检测部分

如下图所示,上下分为两个brach,分别用来检测关键点 Part Confidence Maps 以及 四肢关系Part Affinity Fields
two branch
分stage的思路和《Convolutional Pose Machines》一致(毕竟是一个团队)。其中的F来自于VGG-19的前十层finetuned的结果,对于stages t>=2, 每个branch的输入都是$$F, S^{t-1}, L^{t-1}$$ 的联合,即
这里写图片描述
类似于《Convolutional Pose Machines》,计算每层的loss为
这里写图片描述
其中的W(p)代表本该存在的单位是否在groud true中存在(有些关节或者四肢没有标注)。而对应的total loss为
total loss
注意Part Affinity Fields(PAF)是一些矢量区域,可以通过指定四肢粗细然后在训练数据中根据关节点来标注。

匹配部分

这里首先要明确 Part Confidence Maps和PAF是如何协同确定四肢和关节的预测的
这里写图片描述
如上图,对于图中的任意点P,在PAF的对应点的投影可以用来表示该点在四肢上的相关性。对于 Part Confidence Maps中任意的两个极值点A,B,可以通过插值A,B中的几个点p0, p1, p2, p3, p4...求这些点在PAF上的投影的积分来确定A,B两点作为同肢节的关节点的可能性,如下图
这里写图片描述

有了上面的两点同肢节判定的方法,我们就可以通过匹配每组能相连的点来决定连接与点的有效性。即通过右手腕的confidence map 和右手肘的confidence map的极值点之间的二分图匹配问题
这里写图片描述
这里写图片描述
其中
这里写图片描述
用来表示两个关节点是否相连。这个问题可以用Hungarian algorithm来解决,相对的总体的error,可以通过简单的相加来衡量
这里写图片描述

两个子问题:

  • non-maximum suppression非极大值抑制
    定义:处理一份数据,讲非极大值的部分设置为0,是不是非常直观^^
    实现:常见的高效算法可以参见 ICPR2006-《Efficient Non-Maximum Suppression》,核心是减少重复比较
    应用:检测算法中常见,本质是从众多的滑动窗口的sore中找到局部极值作为检测结果。参见很不错的人脸检测的NMS例子

  • Hungarian algorithm
    目标:解决二分图的最大匹配问题 or 任务分配问题,用在文中是解决不同关键点之间的同肢体匹配问题

《Convolutional Pose Machines》

code

目标

实现关键部位的检测,生成scoremap,如下图所示
这里写图片描述

框架

常规的思路类似FCN,但是由于网络层数变深会有不好训练的问题。文章的重点在于分stage来训练,每个stage的结果目标都是最终的score map,通过把原图的feature和上一个stage的输出一起传递到下个stage作为输入,来实现迭代。注意下图中的x'这个网络的权重在所有的stages t>=2中都是共享的,用来提取图像的feature
这里写图片描述

要点

  • 通过分阶段stage的方式,用来迭代并扩大receptive field,每个stage都可量化以及可视化
  • 由于总体网络层数教深,很容易出现gradient vanish的问题, 由于每个stage的输出都可以计算loss,如下,ground true未真实位置点的高斯分布的maxloss, 同时,total loss 为每层loss的和total loss。即文中所谓的Intermediate supervision,每层的gradient都有部份来自于当层的loss。End-to-end learning。

    TODO: 不懂如果用了上面的loss却不intermediate supervision的方法

转载于:https://www.cnblogs.com/xiaohu50/p/7263314.html

相关文章:

  • 用于在弹出窗口中计算窗口位置的函数
  • 《领域特定语言》一2.2为何需要DSL
  • 关注数据中心NFV性能
  • 取页面内各种尽寸数据。备档
  • Kotlin和Java EE系列之—— 如何让Kotlin类对Java EE友好
  • 多个项目共享一个app.config 的解决办法
  • 程序员每周编程80+小时 健康如何保证
  • 网站性能愈来愈差怎么办?
  • 《C语言程序设计:问题与求解方法》——第2章C语言程序结构和基本语法要素...
  • Mysql:群集:windows环境:一台计算机上搭建:1个管理节点、2个数据节点、3个mysqld节点...
  • 准假网站不被发现
  • flex游戏编程性能优化
  • Highcharts-ng动态刷新数据方法
  • 深圳的生活,深圳的想法
  • 从概念到应用,全面了解强化学习
  • [笔记] php常见简单功能及函数
  • ➹使用webpack配置多页面应用(MPA)
  • E-HPC支持多队列管理和自动伸缩
  • GitUp, 你不可错过的秀外慧中的git工具
  • HTML5新特性总结
  • JavaScript 奇技淫巧
  • leetcode388. Longest Absolute File Path
  • Netty 4.1 源代码学习:线程模型
  • Spring Boot快速入门(一):Hello Spring Boot
  • 阿里中间件开源组件:Sentinel 0.2.0正式发布
  • 动态魔术使用DBMS_SQL
  • 分布式事物理论与实践
  • 融云开发漫谈:你是否了解Go语言并发编程的第一要义?
  • 使用 5W1H 写出高可读的 Git Commit Message
  • 收藏好这篇,别再只说“数据劫持”了
  • 腾讯大梁:DevOps最后一棒,有效构建海量运营的持续反馈能力
  • 通过来模仿稀土掘金个人页面的布局来学习使用CoordinatorLayout
  • d²y/dx²; 偏导数问题 请问f1 f2是什么意思
  • ​创新驱动,边缘计算领袖:亚马逊云科技海外服务器服务再进化
  • # 透过事物看本质的能力怎么培养?
  • (2)(2.10) LTM telemetry
  • (2020)Java后端开发----(面试题和笔试题)
  • (cos^2 X)的定积分,求积分 ∫sin^2(x) dx
  • (超详细)2-YOLOV5改进-添加SimAM注意力机制
  • (独孤九剑)--文件系统
  • (多级缓存)缓存同步
  • (二)c52学习之旅-简单了解单片机
  • (附源码)计算机毕业设计大学生兼职系统
  • (过滤器)Filter和(监听器)listener
  • (三)centos7案例实战—vmware虚拟机硬盘挂载与卸载
  • (译) 理解 Elixir 中的宏 Macro, 第四部分:深入化
  • (转)甲方乙方——赵民谈找工作
  • (转)清华学霸演讲稿:永远不要说你已经尽力了
  • (转)全文检索技术学习(三)——Lucene支持中文分词
  • (转载)跟我一起学习VIM - The Life Changing Editor
  • .net core 6 redis操作类
  • .NET 表达式计算:Expression Evaluator
  • .NET 设计一套高性能的弱事件机制
  • .NET开源快速、强大、免费的电子表格组件
  • .net知识和学习方法系列(二十一)CLR-枚举