MoveNet

Google提供的在线演示:https://storage.googleapis.com/tfjs-models/demos/pose-detection/index.html?model=movenet

MoveNet 是一个 Bottom-up estimation model, 使用heatmap。

网络架构

主要分为三个部分:Backbone、Header、PostProcess

  • Backbone:Mobilenetv2 + FPN
  • Header:输入为Backbone的特征图,经过各自的卷积,输出各自维度的特征图。共有四个Header:分别为Center、KeypointRegression、KeypointHeatmap、Local Offsets
    • Center:[N, 1, H, W], 这里1代表当前图像上所有人中心点的Heatmap,可以理解为关键点,只有一个,所以通道为1。提取中心点两种方式:

      • 一个人所有关键点的算术平均数。
      • 所有关键点最大外接矩形的中心点。(效果更好)
    • KeypointHeatmap:[N, K, H, W] N:Batchsize、K:关键点数量,比如17。H、W:对应特征图的大小,这里输入为 192 × 192 192 \times 192 192×192 , 降采样四倍就是 48 × 48 48\times 48 48×48 。代表当前图像上所有人的关键点的Heatmap
    • KeypointRegresssion:[N, 2K, H, W] K个关键点,坐标用 x , y x, y x,y表示,那么就有2K个数据。这里 x , y x, y x,y 代表的是同一个人的关键点对于中心点的偏移值。原始MoveNet用的是特征图下的绝对偏移值,换成相对值(除以48转换到0-1),可以加快收敛。
    • LocalOffsets:[N, 2K, H, W] 对应K个关键点的坐标,这里是Offset,模型降采样特征图可能存在量化误差,比如192分辨率下x = 0 和 x= 3映射到48分辨率的特征图时坐标都变为了0;同时还有回归误差。
class MoveNet(nn.Layer):def __init__(self, num_classes=17, width_mult=1.,mode='train'):super(MoveNet, self).__init__()self.backbone = Backbone()self.header = Header(num_classes, mode)self._initialize_weights()def forward(self, x):x = self.backbone(x) # n,24,48,48# print(x.shape)x = self.header(x)# print([x0.shape for x0 in x])return x

损失函数

KeypointHeadmap 和 Center 采用加权MSE,平衡了正负样本。
KeypointRegression 和LocalOffsets 采用了 L1 Loss。
最终各个Loss权重设置为1:1:1:1

loss = paddle.pow((pre-target),2) weight_mask = target*k+1
paddle.pow(torch.abs(target-pre), 2) loss = loss*weight_mask

参考文献

  1. 2021轻量级人体姿态估计模型修炼之路(附谷歌MoveNet复现经验) - 知乎 (zhihu.com)
  2. fire717/movenet.pytorch: A Pytorch implementation of MoveNet from Google. Include training code and pre-train model. (github.com)
  3. https://storage.googleapis.com/tfjs-models/demos/pose-detection/index.html?model=movenet

快速开始

全流程引导进行项目生成,实现数据生成、训练、测试一体化

解压数据集

# 无需运行
# !mkdir /home/aistudio/data/coco
# !unzip /home/aistudio/data/data97273/annotations_trainval2017.zip -d /home/aistudio/data/coco
# !unzip /home/aistudio/data/data97273/train2017.zip -d /home/aistudio/data/coco
# !unzip /home/aistudio/data/data97273/val2017.zip -d /home/aistudio/data/coco# 新数据时用
# Make data to adapt the data format.
# %cd /home/aistudio/work/
# !python scripts/make_coco_data_17keypooints.py

配置项目环境

pip install yacs

训练

cd /home/aistudio/work/
python train.py

测试

进入config.py 修改配置文件,修改测试图片路径。

cd /home/aistudio/work.
python predict.py

测试结果

Heatmap

导出模型

pip install paddle2onnx
python pd2onnx.py

个人介绍

姓名: 芦星宇

学校: 江苏科技大学 人工智能专业 本三

研究方向:姿态估计、图网络、异常检测

Github:https://github.com/Xingyu-Romantic

MoveNet-谷歌轻量级人体姿态估计算法相关推荐

  1. 记一次坎坷的算法需求实现:轻量级人体姿态估计模型的修炼之路(附MoveNet复现经验)...

    点击上方"计算机视觉工坊",选择"星标" 干货第一时间送达 作者丨Fire 编辑丨极市平台 导读 本文记录了作者实现轻量级人体姿态估计模型的全过程,从方案的选取 ...

  2. 记一次坎坷的算法需求实现:轻量级人体姿态估计模型的修炼之路(附MoveNet复现经验) 收藏

    一.需求背景 这天接到个新需求,需要实时检测自然场景下目标人体的关键点位置. 从算法工程师的角度来拆解下需求: 1.检测人体关键点位置,就是人体姿态估计任务嘛: 2.要实时,那么就是终端部署,服务端那 ...

  3. MoveNet复现,轻量级人体姿态估计模型的修炼之路

    这天接到个新需求,需要实时检测自然场景下目标人体的关键点位置. 从算法工程师的角度来拆解下需求: 1.检测人体关键点位置,就是人体姿态估计任务嘛: 2.要实时,那么就是终端部署,服务端那传输延时就不考 ...

  4. 深度学习人体姿态估计算法综述

    https://www.infoq.cn/article/6Btg0-1crfmb7svRGa6H 人体骨架是以图形形式对一个人的方位所进行的描述.本质上,骨架是一组坐标点,可以连接起来以描述该人的位 ...

  5. 人工智能 信道估计 深度学习_深度学习人体姿态估计算法综述

    作者 | Bharath Raj 译者 | 李志 编辑 | Vincent AI 前线导读:人体姿态估计的任务是从包含人体的图片中检测出人体关键点,并恢复人体位姿.随着深度学习的发展,越来越多的深度学 ...

  6. 基于3D深度视觉的人体姿态估计算法

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 本文转自|新机器视觉 人体姿态估计是当前计算机视觉领域的热点研究问 ...

  7. ICCV 2019 | 基于无标签单目视频序列的单帧三维人体姿态估计算法

    作者丨王璇 学校丨西安交通大学 研究方向丨人体姿态估计 我们都知道,要训练一个准确的三维人体姿态估计深度神经网络,需要大量有三维标签的数据,越多越好.而在现实生活中,我们很难得到很多有标签数据,而无标 ...

  8. 人体姿态估计算法之open pose

    一,openpose是一种自底向上的算法:         OpenPose人体姿态识别项目是美国卡耐基梅隆大学(CMU)基于卷积神经网络和监督学习并以Caffe为框架开发的开源库.可以实现人体动作. ...

  9. CPU上跑到 33 FPS 的简单轻量级人体姿态估计网络

    点击我爱计算机视觉标星,更快获取CVML新技术 在姿态估计算法中,微软开发的 SimpleBaseline 是精度高而又轻量级的典范,昨天一篇论文Simple and Lightweight Huma ...

最新文章

  1. java中executorservice_java中ExecutorService创建方法总结
  2. 数据库性能测试---前阿里数据库团队资深DBA杨奇龙
  3. OpenKruise 如何实现应用的可用性防护?
  4. python 命令行参数—argparse模块的使用
  5. 掩膜区域内像素值_基于颜色空间采样的抠图算法
  6. sentinel接入网关应用_阿里Sentinel整合Zuul网关详解
  7. Altiris™ IT Management Suite 7 Release Notes
  8. 数学建模学习笔记(七)——图论最短路问题
  9. 【OpenCV】OpenCV实战从入门到精通之 -- 显示创建Mat对象的七种方法
  10. MSSQL数据库设计心得
  11. 乐视网被列入经营异常名录 因登记经营场所无法联系
  12. 使用Kotlin的Android AsyncTask
  13. BZOJ3157/BZOJ3516 国王奇遇记(矩阵快速幂/数学)
  14. python无人驾驶技术_智能汽车无人驾驶资料调研(一)
  15. Python软件封装打包
  16. 刘作虎:二次购机潮即文艺复兴时
  17. OpenDDS的动态绑定bind_config传输配置和实例
  18. vscode能写winform窗体吗_vs code 写C#心得
  19. Ubuntu 16.04 安装好之后需要做的15件事
  20. 重庆工商职业学院计算机专业在哪个校区,重庆工商职业学院地址在哪里

热门文章

  1. delphi 获取硬盘序列号
  2. mysql主从复制安装部署配置操作步骤及主从库宕机处理办法
  3. PHP 并发编程基础和实践
  4. 个性设置 CMD命令
  5. [转]C# Open Source
  6. JVM之垃圾收集器CMS和G1的区别
  7. 改变-影响他人决策-用“选择”降低对方的抵触情绪
  8. 在使用dedecms的channel标签来调子栏目的时候,指定 “type=son typeid=x” 发现currentstyle无效
  9. win10 安装 ubuntu18.04双系统(以及英伟达驱动安装和各种设置)
  10. 24岁了,做个精致的电子工程师--剑雨琴侠