毕业设计——基于 BlazePose 算法的机器人人体姿势识别与模仿研究与实现

基于 BlazePose 算法的机器人人体姿势识别与模仿研究与实现

包含五部分:

  • 01.BlazePose_train_test

    这是BlazePose的复现工作,具体操作可以查看[(01.BlazePose_train_test/train.md)。

  • 02.BlazePose_pc

    本[文件夹]主要是 BlazePose PC端的姿态识别代码,具体操作可以查看(02.BlazePose_pc/pc.md)。

  • 03.BlazePose_app

    该部分主要是 BlazePose 移动端的[姿态识别]代码,具体信息查看[(03.BlazePose_app/app.md)

  • 04.BlazePose_unity

    本文件夹主要是 BlazePose 虚拟机器人的姿态模仿代码,具体操作可以查看(04.BlazePose_unity/[unity].md)。

  • 05.BlazePose_robot

    该部分主要是 BlazePose 真实机器人的姿态模仿代码,具体操作可以查看(05.BlazePose_robot/robot.md)。

Requirements

tensorflow
pathlib
scipy

cv2
mediapipe
numpy
matplotlib
open3d
time
tqdm
socket
serial
math

环境

Linux (Ubuntu 18.04 LTS)
RTX 3090ti
windows10
python3.9
IntelliJ IDEA 2021.3 (Ultimate Edition)
Android Studio Bumblebee | 2021.1.1 Patch 2
Unity 2022.1.0f1c1
arduino 1.8.19

训练部分:

BlazePose复现代码

BlazePose paper is “BlazePose: On-device Real-time Body Pose tracking” by Valentin Bazarevsky, Ivan Grishchenko, Karthik Raveendran, Tyler Zhu, Fan Zhang, and Matthias Grundmann. Available on [arXiv].

Requirements

tensorflow
cv2
numpy
pathlib
scipy

环境

Linux (Ubuntu 18.04 LTS)
python3.9
RTX 3090ti

数据集

使用的是lsp数据集

关键点的顺序如下:

右脚踝
右膝
右臀部
左髋
左膝
左脚踝
右手腕
右肘
右肩
左肩
左肘
左手腕
脖子
头

训练

训练热图分支

config.py中的train_mode设置为train_mode = 0,然后运行python train.py

微调联合回归分支

config.py中的train_mode设置为train_mode = 1,并且设置一个合适的best_pre_train值,best_pre_train是训练损失下降但测试准确的最佳时期数。然后运行python train.py

测试

config.py中的epoch_to_test设置为想要测试的epoch,然后运行python test.py

性能比较

Quality

Model

LSP Dataset
PCK@0.2

官方模型(Heavy)

97.5

官方模型(Full)

95.7

官方模型(Lite)

93.5

AlphaPose ResNet50

96.0

Apple Vision

88.6

Ours

82.5

FPS

Model

FPS
AMD Ryzen 7 5800H with
Radeon Graphics 3.20 GHz

官方模型(Heavy)

38

官方模型(Full)

32

官方模型(Lite)

25

OpenPose

6

Ours

29

BlazePose 手机端的姿态识别代码

使用Android Studio部署,将./BlazePose_app/examples/android作为项目打开。

环境

windows10
Android Studio Bumblebee | 2021.1.1 Patch 2

对于移动端的部署,本项目采用腾讯的 轻量化框架,其提供了各种框架模型 (如 TensorFlow、PyTorch、Caffe等) 转化为TNN模型文件的脚本,还有丰富的 demo 可供学习。

目前TNN具有的以下特性获得了广泛的好评。

  • 计算优化

    • 针对不同架构在硬件指令发射、吞吐、延迟、缓存带宽、缓存延迟、寄存器数量等特点,深度优化底层算子,极致利用硬件算力。
    • 主流硬件平台 (CPU: ARMv7,ARMv8,X86 GPU: Mali,Adreno,Apple,NV GPU) 深度调优。
    • CNN 核心卷积运算通过 Winograd,Tile-GEMM,Direct Conv 等多种算法实现,保证不同参数、计算尺度下高效计算。
    • Op 融合:离线分析网络计算图,多个小 Op(计算量小、功能较简单)融合运算,减少反复内存读取、kernel 启动等开销。
  • 低精度优化

    • 支持 INT8,FP16 低精度计算,减少模型大小、内存消耗,同时利用硬件低精度计算指令加速计算。
    • 支持 INT8 Winograd 算法,(输入 6bit),在精度满足要求的情况下,进一步降低模型计算复杂度。
    • 支持单模型多种精度混合计算,加速计算同时保证模型精度。
  • 内存优化

    • 高效“内存池”实现:通过 DAG 网络计算图分析,实现无计算依赖的节点间复用内存,降低 90% 内存资源消耗。
    • 跨模型内存复用:支持外部实时指定用于网络内存,实现“多个模型,单份内存”。
  • 通过 ONNX 支持 TensorFlow,PyTorch,MXNet,Caffe 等多种训练框架,充分利用和融入不断完善的 ONNX 开源生态。当前支持 ONNX 算子 100+,覆盖主流 CNN, NLP 网络。

  • 支持主流安卓、iOS、Embedded Linux 操作系统, Windows, Linux,支持 ARM CPU, x86, Mali GPU, Adreno GPU, NV GPU, 达芬奇 NPU,RK NPU。

  • 模块化设计,将模型解析、计算图构建、优化、底层硬件适配、高性能 kernel 实现各部分抽象隔离,通过 Factory Mode 注册、构建设备,方便接入更多的底层硬件、加速方案。

  • 移动端动态库尺寸仅约 400KB,并提供基础图像变换操作,调用简单便捷。跨平台模型统一、调用接口统一,通过单个配置参数快速切换。

在移动端的部署需要先用 TNN 的官方脚本将本项目训练得出的 h5(*.h5) 模型文件转换成 TNN 模型文件 (tnnmodel)

然后使用 TNN 的 demo 项目将其构建到手机端。

BlazePose 虚拟机器人的姿态模仿代码

首先值得注意的是,本项目的代码大量使用了mediapipe库,但是将官方模型替换成了我们训练好的模型。

因此需要将训练的.h5模型用tf工具转换成.tflite模型,并重命名为pose_landmark_full.tflite,将其复制替换到Python39/Lib/site-packages/mediapipe/modules/pose_landmark下。

该部分有2部分代码,包括./MotionCapture.py./PoseModule.py./unity.rar

Requirements

cv2
mediapipe
numpy
matplotlib
open3d
time
tqdm
socket
serial
math

环境

windows10
python3.9
IntelliJ IDEA 2021.3 (Ultimate Edition)
Unity 2022.1.0f1c1

本部分使用unity创建了一个拥有33个关键点的虚拟机器人。

由python程序获得每个点的相对位置/角度,从而使得机器人能够姿态跟踪。

MotionCapture.py

代码使用的是UDP,创建了在本机"127.0.0.1"上的5052端口,此端口用于将数据传到虚拟机器人端(unity)。

unity.rar

将本压缩包解压得到./unity,再将./unity导入到Unity 2022.1.0f1c1即可得到拥有33个关键点的机器人。

项目目录结构:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值