如何驯化机器狗读懂人类手势,手把手教你!

news2024/11/23 16:47:04

94f898b91e3074172b430510412f2228.gif

作为全国普通高校大学生竞赛榜单内竞赛,“中国软件杯”大学生软件设计大赛-智能四足机器狗电力巡检系统开发赛项,目前已吸引了全国2041支队伍参加。经过激烈的目标检测与分割算法打榜赛,最终,有153支团队成功晋级区域赛。在即将于7月中旬开展的区域赛中,晋级选手须基于搭载飞桨框架的国产四足机器狗宇树 Go1 机器狗,在规定的地图上进行自动巡检、避障越障和完成指定任务,根据各任务的完成质量和完成速度获得分数。

ecc179e6ac2342b2ad991b94e209c97e.png

比赛模拟地图

71d4e1c528a6c1bc5dc8b8375a4e95f0.png

开发者介绍

安泓郡

大连海事大学智能科学与技术专业大三在读,研究方向为机器视觉、智能自主机器人。RoboCup 机器人世界杯中国赛水下作业组全国总冠军;全国大学生 RoboCom 机器人开发者大赛物资运送赛道全国总冠军;中国大学生计算机设计大赛飞桨赛道全国总冠军;全国大学生嵌入式芯片与系统设计竞赛海思赛道全国总冠军。保送至西北工业大学光电与智能研究院攻读博士研究生。

莫善彬

大连海事大学电子信息科学与技术专业,主攻机器视觉以及硬件机器控制方向。广泛涉猎各类大赛,2022届 ROBCOM 物资运送冠军队伍选手,熟悉四足机器狗的控制逻辑及其底层运动控制,有一定的开发经验;在全国大学生电子设计大赛,蓝桥杯等嵌入式硬件开发大赛中屡获佳绩。

f3a677337f7643dcd2058f08754acd80.png

预期目标:先看效果

监测到点赞手势时,进行运动跟随

aeb36593b90aef43988683879b03a970.gif

监测到666手势时,小狗跳舞

7f9e90f9addca5d19f19235b1b39775e.gif

检测到 STOP 手势时,原地静止跟随

1004e927e157bf5cb7e12cab0b86bf4a.gif

42e23830a11159e6aab28c0ec198289d.png

驯化之路一:感知部分实现

感知部分工作目标:使用 mini-HaGRID 数据集,借助 PaddleDetection 工具训练一个可以识别 like、call、stop 三种手势的目标检测模型。

5e2f72c4b971cdd93d3bbf3a1549151b.png

 服务器端模型训练

本次使用 HaGRID 手势检测数据集的精简版:mini-HaGRID 作为训练数据。当然也可以使用 Labelme 标注工具自行制作数据集,或寻找网络公开数据集。

使用 Labelme 标注数据集可以参考教程:

https://gitee.com/paddlepaddle/PaddleDetection/blob/release/2.6/docs/tutorials/data/DetAnnoTools.md

在 AI Studio上,基于数据训练深度学习视觉模型。

1.1 数据准备

# 解压数据集
!unzip data/data215595/mini-HaGRID.zip -d data/mini-HaGRID

1.2 下载并安装 PaddleDetection v2.4

# 下载PaddleDetection仓库
!git clone https://gitee.com/paddlepaddle/PaddleDetection.git
# 更新pip版本
!pip install --upgrade pip
# 安装其他依赖
%cd PaddleDetection
!pip install -r requirements.txt --user
# 编译安装paddledet
!python setup.py install
%cd ~

1.3 新建数据集配置文件

进入 PaddleDetection/configs/datasets 目录,新建文件 voc_hand.yml

以同目录下 voc.yml 为模板,修改数据集根目录,数据集类别数及数据列表文件。可直接复制如下内容:

metric: VOC
map_type: 11point
num_classes: 4

TrainDataset:
  !VOCDataSet
    dataset_dir: /home/aistudio/data/mini-HaGRID
    anno_path: train.txt
    label_list: label_list.txt
    data_fields: ['image', 'gt_bbox', 'gt_class', 'difficult']

EvalDataset:
  !VOCDataSet
    dataset_dir: /home/aistudio/data/mini-HaGRID
    anno_path: val.txt
    label_list: label_list.txt
    data_fields: ['image', 'gt_bbox', 'gt_class', 'difficult']

TestDataset:
  !ImageFolder
    anno_path: /home/aistudio/data/mini-HaGRID/label_list.txt

1.4 新建训练配置文件

进入PaddleDetection/configs/picodet目录,新建配置文件picodet_xs_320_voc_hand.yml

以同目录下 picodet_xs_320_coco_lcnet.yml 为模板,修改数据集配置。可直接复制如下内容:

_BASE_: [
  '../datasets/voc_hand.yml',
  '../runtime.yml',
  '_base_/picodet_v2.yml',
  '_base_/optimizer_300e.yml',
  '_base_/picodet_320_reader.yml',
]

pretrain_weights: https://paddledet.bj.bcebos.com/models/pretrained/LCNet_x0_35_pretrained.pdparams
weights: output/picodet_xs_320_voc_hand/best_model
find_unused_parameters: True
use_ema: true
epoch: 300
snapshot_epoch: 10

LCNet:
  scale: 0.35
  feature_maps: [3, 4, 5]

LCPAN:
  out_channels: 96

PicoHeadV2:
  conv_feat:
    name: PicoFeat
    feat_in: 96
    feat_out: 96
    num_convs: 2
    num_fpn_stride: 4
    norm_type: bn
    share_cls_reg: True
    use_se: True
  feat_in_chan: 96

TrainReader:
  batch_size: 64

LearningRate:
  base_lr: 0.32
  schedulers:
  - !CosineDecay
    max_epochs: 300
  - !LinearWarmup
    start_factor: 0.1
    steps: 300

1.5 训练模型

# 安装VisualDL可视化工具
!python -m pip install visualdl -i https://mirror.baidu.com/pypi/simple

# 训练模型
%cd ~/PaddleDetection
!python -u tools/train.py -c configs/picodet/picodet_xs_320_voc_hand.yml --use_vdl=true --vdl_log_dir=vdl_dir/scalar --eval
训练时,可以用VisualDL工具可视化训练参数。
visualdl --logdir vdl_dir/scalar/ --host <host_IP> --port <port_num>

83ab300bcc44b645347862f14e7dad51.png

 模型导出

使用 PaddleDetection 训练完模型后,需要将模型导出。

2.1 导出为 PaddleInference 格式

# 导出模型
%cd ~/PaddleDetection
!python tools/export_model.py \
    -c configs/picodet/picodet_xs_320_voc_hand.yml \
    --output_dir=./inference_model -o weights=output/picodet_xs_320_voc_hand/best_model.pdparams

2.2 服务器端安装 PaddleLite

打开 PaddleLite 官方 github 仓库:

https://github.com/PaddlePaddle/Paddle-Lite

打开 Release 页面,下载v2.12版本的 opt_linux 至 PaddleDetection 根目录。

可以直接执行如下命令:

%cd ~/PaddleDetection
!wget https://github.com/PaddlePaddle/Paddle-Lite/releases/download/v2.12/opt_linux
# 为opt_linux工具添加运行权限
%cd ~/PaddleDetection
!chmod +x opt_linux

2.3 将模型导出为 PaddleLite 格式

%cd ~/PaddleDetection
!mkdir inference_model_opt
!./opt_linux --model_dir=./inference_model/picodet_xs_320_voc_hand --valid_targets=arm --optimize_out_type=naive_buffer --optimize_out=./inference_model_opt/voc_hand

其中,opt_linux 工具更加相信的使用说明可以参考

https://www.paddlepaddle.org.cn/lite/v2.12/user_guides/opt/opt_bin.html

运行完成后,可以在 inference_model_opt 文件夹下看到一个文件 “voc_hand.nb”,这就是转换好的 PaddleLite 模型文件。

de8b310abec192a7de43589afaa3f1de.png

  可视化模型

3.1 下载模型文件

训练完成后,将 inference_model_opt 文件夹下看到一个文件“voc_hand.nb” 下载下来。

打开模型可视化网站:https://netron.app/

将 voc_hand.nb 模型上传。

3.2 记录输入输出名称

模型可视化如图所示:

7b1dd4f28e462e4f96220fba5d66b331.png

点击输入节点“0”,弹出侧边栏:

3734762485fc4ecb934e6e578fc33d9e.png

可以看到,模型格式为 PaddleLite,模型有两个输入节点和两个输出节点。

每个节点的含义可以参考:

https://gitee.com/paddlepaddle/PaddleDetection/blob/release/2.6/deploy/EXPORT_MODEL.md

  • scale_factor:缩放系数

  • image:输入图像

  • multiclass_nms3_0.tmp_0:经NMS后的候选结果

  • multiclass_nms3_0.tmp_2:候选结果的个数

这四个节点的名称要记住,部署的时候需要用。

2966c87ec8006ff888d731694503d660.png

驯化之路二:硬件部分实现

下面,我们就要讲授如何将训练的 voc_hand 模型部署到宇树 Go1 四足机器人,并用手势控制机器狗完成响应动作。

7c661477a78ff2cca2107f3b49919822.png

宇树 Go1 机器狗内置有3块 Nano 和1块树莓派

  • 克隆本项目至机器狗 Nano1 和树莓派 home 目录。

cd ~
git clone https://gitee.com/an_hongjun/2023_paddle_dog_demo.git
cd 2023_paddle_dog_demo

17be35d193806d66785ab94344c14272.png

  Nano1 部署

进入 nano1-workspace 目录

cd nano1-workspace

杀进程

ps -aux | grep point_cloud_node | awk '{print $2}' | xargs kill -9
ps -aux | grep mqttControlNode | awk '{print $2}' | xargs kill -9
ps -aux | grep live_human_pose | awk '{print $2}' | xargs kill -9
ps -aux | grep rosnode | awk '{print $2}' | xargs kill -9

修改系统时间 

将时间修改为你当前的时间。时间不对可能会影响CMake程序编译。

sudo date -s "2023-6-11 21:23:00"

编译程序

./build.sh

运行 nano1 节点

./bin/det_hand

eecd5e12839850d1e12cd642f29343c7.png

  树莓派部署

进入 pi-workspace 目录

cd pi-workspace

修改系统时间

将时间修改为你当前的时间。时间不对可能会影响 CMake 程序编译。

sudo date -s "2023-6-11 21:23:00"

编译程序

./build.sh

运行pi节点

./bin/follow

7d7e404073d41cccf2a7fa46ef2058ed.png

  代码解释

Nano1 节点代码解释

https://gitee.com/an_hongjun/2023_paddle_dog_demo/blob/master/nano1-workspace/README.md

Pi 节点代码解释

https://gitee.com/an_hongjun/2023_paddle_dog_demo/blob/master/pi-workspace/README.md

ae96505c4c8fba4257a38a44f399b2c6.png

结语:开发者有话说

作为作者,我必须承认:本项目提出的方案并不一定是最佳的。比如:

  • 模型的选型,还有很大的空间;

  • 模型在导出时,模型的压缩也可以做很多文章(或许 PaddleSlim 是个不错的参考);

  • 模型在部署时,代码还有很大的优化空间,以及结合 TensorRT 或许可以进行更加快速的推理。

本项目的目的主要是帮助大家入门。或许它不是最好的,但是个很好的开始。

预祝大家比赛顺利! 

5898b0427bae24cd97103de7517c496f.png

ceb83279fcbf4aa935e1762fb6863455.gif

关注【飞桨PaddlePaddle】公众号

获取更多技术内容~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/686527.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

知乎财报预测:知乎2023年Q2收入将继续下滑,净亏损将扩大一倍

来源&#xff1a;猛兽财经 作者&#xff1a;猛兽财经 华尔街分析师对知乎2023年第二季度财报的预测 在5月24日发布第一季度业绩时&#xff0c;知乎&#xff08;ZH&#xff09;并未对2023年第二季度或2023财年全年提供任何具体的指引。但目前卖方分析师的一致财务预测表明&…

F-35飞控系统详解

基于非线性动态逆(NDI)的控制律 1. F-35飞控控制律 F-35采用了由三台冗余机载管理计算机&#xff08;VMC&#xff0c;Vehicle Management Computers&#xff09;中运行的非线性动态逆控制架构来提供电传飞行控制。F-35的控制律不仅能增强飞机动力学特性实现增稳&#xff0c;还…

java学习记录之JDBC2

1 JDBC回顾  Statement 语句执行者 Connection conn null; Statement st null; ResultSet rs null; try{ //1 通过工具类获得连接 conn JdbcUtils.getConnection(); //2 获得语句执行者 st conn.createStatement() --> 参数 结果集类型、并发参数 &#xff08;滚动结…

如何在 Spring Boot 中使用定时任务

如何在 Spring Boot 中使用定时任务 引言 在实际的项目中&#xff0c;我们经常需要编写定时任务来执行一些周期性的任务&#xff0c;比如定时备份数据库、定时发送邮件等。在 Spring Boot 中&#xff0c;我们可以使用 Spring 的 Task Execution 和 Scheduling 来实现定时任务…

用BERT做命名实体识别任务

命名实体识别NER任务是NLP的一个常见任务&#xff0c; 它是Named Entity Recognization的简称。 简单地说&#xff0c;就是识别一个句子中的各种 名称实体。 诸如&#xff1a;人名&#xff0c;地名&#xff0c;机构 等。 例如对于下面这句话&#xff1a; 小明对小红说:"你…

佩戴舒适度的蓝牙耳机品牌有哪些?佩戴舒适性蓝牙耳机排行榜推荐

​对于年轻人来说&#xff0c;耳机使用场景丰富&#xff0c;时尚追求度高&#xff0c;喜好的音乐类型也是多种多样&#xff0c;需求侧重也不尽相同。下面我来推荐几款相当不错的蓝牙耳机给大家&#xff0c;总会有喜欢那款&#xff01; 一、南卡OE PRO开放式耳机 南卡OE PRO是国…

带你阅读 Flutter Demo(flutter 保姆级入门教程)

dart、flutter Flutter Demo 解析 - 文章信息 - Author: Jack Lee (jcLee95) Visit me at: https://jclee95.blog.csdn.netEmail: 291148484163.com. Shenzhen ChineAddress of this article:https://blog.csdn.net/qq_28550263/article/details/xxxxxx 【介绍】&#xff1a;本…

RFID技术的革新与应用:连接智能物联网的关键

在日益数字化的时代&#xff0c;物联网&#xff08;IoT&#xff09;技术正迅速发展&#xff0c;并为我们的生活带来了无数的便利。而射频识别&#xff08;RFID&#xff09;技术作为物联网的关键支撑之一&#xff0c;正在推动着智能化、自动化的进程。本文将深入探讨RFID技术的基…

INTERSPEECH 2023论文|基于自监督学习表示的具有持久性口音记忆的口音识别

论文题目&#xff1a; Self-supervised Learning Representation based Accent Recognition with Persistent Accent Memory 作者列表&#xff1a; 李睿&#xff0c;谢志伟&#xff0c;徐海华&#xff0c;彭亦周&#xff0c;刘和鑫&#xff0c;黄浩&#xff0c;Chng Eng Sio…

神州设备IPV6路由综合运用

实训拓扑图 一、基本配置: SW-1: SW-1>ena SW-1#conf SW-1(config)#vlan 10;100 SW-1(config)#int l1 SW-1(config-if-loopback1)#ip add 1.1.1.1 255.255.255.255 SW-1(config-if-loopback1)#ipv6 add 2001:1::1/128 SW-1(config-if-loopback1)#exit

前端系列18集-权限,nginx成功,屏幕分辨率,vue3

vue3.0 使用原生websocket通信 // Websoket连接成功事件const websocketonopen (res: any) > {console.log("WebSocket连接成功", res);};// Websoket接收消息事件const websocketonmessage (res: any) > {console.log("数据", res);};// Websoket…

【从零开始学习C++ | 第二十二篇】C++新增特性(下)

目录 前言&#xff1a; 类型推导&#xff1a; constexpr关键字&#xff1a; 初始化列表&#xff1a; 基于范围的for循环&#xff1a; 智能指针之unique ptr Lambda表达式&#xff1a; 总结&#xff1a; 前言&#xff1a; 本文我们将继续介绍 C 11 新增十大特性的剩余…

解决前端容器不能充满屏幕

解决前端容器不能充满屏幕 px、rpx、em、rem、vw、vh各种像素单位的区别 css3新单位vw、vh、vmin、vmax的使用详解 学习element-UI写管理系统的页面&#xff0c;发现当菜单栏都收缩起来&#xff0c;结果是这样的 红色框是容器里每个板块的布局&#xff0c;但是容器下面却有空白…

如何处理兼容性测试中的变更管理?

如何处理兼容性测试中的变更管理? 在进行软件测试的过程中&#xff0c;兼容性测试是&#xfeff;非常重要的一环。然而&#xff0c;在进行兼容性测试时&#xff0c;由于涉及到不同平台、不同设备的适配问题&#xff0c;可能会出现许多变更管理的情况。这时候&#xff0c;如果没…

阿里企业邮箱收费标准_企业邮箱费用明细表

阿里云企业邮箱收费标准&#xff08;免费版/标准/尊享/集团&#xff09;&#xff0c;2023阿里云企业邮箱收费标准&#xff0c;免费版企业邮箱0元&#xff0c;标准版企业邮箱540元一年&#xff08;原价600元一年&#xff09;&#xff0c;企业邮箱尊享版1400元一年&#xff0c;9折…

4-移动端适配-1

01-移动 Web 基础 谷歌模拟器 模拟移动设备&#xff0c;方便查看页面效果 屏幕分辨率 分类&#xff1a; 物理分辨率&#xff1a;硬件分辨率&#xff08;出厂设置&#xff09;逻辑分辨率&#xff1a;软件 / 驱动设置 结论&#xff1a;制作网页参考 逻辑分辨率 视口 作用&a…

微信小程序项目实例——2048小游戏

今日推荐&#x1f481;‍♂️ 第一次听廖俊涛的歌是他首次出现在明日之子舞台上的那首《谁》 到现在这首歌成了我网易云收藏的十几首歌中的一首&#xff0c;也是听的最多的一首 怎么形容呢&#x1f914;算不上惊艳&#xff0c;却百听不厌&#x1f442; &#x1f52e;&#x1…

直播美颜SDK的商业化应用:开发者需要注意的关键问题

直播美颜SDK是当前直播行业中十分热门的技术之一&#xff0c;它可以为直播平台提供高质量的美颜效果&#xff0c;提升直播用户的使用体验和观看体验。随着直播市场的不断扩大和竞争的加剧&#xff0c;越来越多的直播平台开始使用美颜SDK以提高自身的用户黏性和用户体验。那么&a…

二叉树OJ题:LeetCode--100.相同的树

朋友们、伙计们&#xff0c;我们又见面了&#xff0c;本期来给大家解读一下LeetCode中第100道二叉树OJ题&#xff0c;如果看完之后对你有一定的启发&#xff0c;那么请留下你的三连&#xff0c;祝大家心想事成&#xff01; 数据结构与算法专栏&#xff1a;数据结构与算法 个 人…

脑机接口:运动想象简介

脑机接口&#xff1a;运动想象简介 0. 脑机接口1. 运动想象2. 信号处理2.1 信号采集2.2 信号预处理2.3 特征提取2.4 分类识别 3. EEG波段介绍4. 脑电图电极定位5. 总结 0. 脑机接口 脑机接口&#xff08;Brain-Computer Interface&#xff0c; BCI&#xff09;&#xff1a;它是…