首页 > 其他分享 >如何驯化机器狗读懂人类手势,手把手教你!

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

时间:2023-06-26 15:03:54浏览次数:39  
标签:voc -- 手把手 模型 PaddleDetection hand 读懂 https 驯化

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

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

比赛模拟地图

如何驯化机器狗读懂人类手势,手把手教你!_数据集_02

开发者介绍

安泓郡

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

莫善彬

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

如何驯化机器狗读懂人类手势,手把手教你!_数据集_03

预期目标:先看效果

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

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


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

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


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

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


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

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

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

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

 服务器端模型训练

本次使用 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>

如何驯化机器狗读懂人类手势,手把手教你!_数据集_09

 模型导出

使用 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 模型文件。

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

可视化模型

3.1 下载模型文件

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

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

将 voc_hand.nb 模型上传。

3.2 记录输入输出名称

模型可视化如图所示:

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

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

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

可以看到,模型格式为 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:候选结果的个数

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

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

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

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

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

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

  • 克隆本项目至机器狗 Nano1 和树莓派 home 目录。
cd ~
git clone https://gitee.com/an_hongjun/2023_paddle_dog_demo.git
cd 2023_paddle_dog_demo

如何驯化机器狗读懂人类手势,手把手教你!_数据集_15

  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

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

树莓派部署

进入 pi-workspace 目录

cd pi-workspace

修改系统时间

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

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

编译程序

./build.sh

运行pi节点

./bin/follow

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

代码解释

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

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

结语:开发者有话说

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

  • 模型的选型,还有很大的空间;
  • 模型在导出时,模型的压缩也可以做很多文章(或许 PaddleSlim 是个不错的参考);
  • 模型在部署时,代码还有很大的优化空间,以及结合 TensorRT 或许可以进行更加快速的推理。

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

预祝大家比赛顺利! 




标签:voc,--,手把手,模型,PaddleDetection,hand,读懂,https,驯化
From: https://blog.51cto.com/u_15512933/6554410

相关文章

  • 日系明解系列又添新成员!日本编程教育界泰斗手把手教你入门 Python
    如今,会用Python的人越来越多,Python 不仅被众多企业所采用,在教学一线也有越来越多的人将Python指定为必学编程语言。为什么 Python会受到如此重视?首先这门编程语言擅长的领域非常多,不仅包括机器学习、深度学习等人工智能(AI)领域,还包括数据分析、科学计算、Web应用程序和GUI(G......
  • 手把手教你用线性回归预测二手房房价
    导读在机器学习中,线性模型是一种形式简单但包含机器学习主要建模思想的模型。线性回归是线性模型的一种典型方法,比如“双十一”中某款产品的销量预测、某数据岗位的薪资水平预测、二手房房价的预测都可以用线性回归来拟合模型。今天我们就以杭州的二手房的房屋单价为例,看看如何用线......
  • 手把手教你用Python构建自己的「王二狗」
    导读在人手N部智能手机的时代,我们对聊天机器人早已不陌生。这两年很火的游戏群聊天机器人「王二狗」更是用它的机智幽默征服了很多人。今天,我们将手把手教你用Python从头开始创建一个聊天机器人,这种机器人能够理解用户的话,并给出适当的回应。闲话不多说,让我们开始从头开始做出自己......
  • 手把手教你在Windows下搭建Vue开发环境
    一、下载Note.js下载地址:https://nodejs.org/zh-cn/download 二、点击安装包无脑下一步即可(建议修改下路径)三、在选择的安装路径下创建两个文件夹node_cache和node_global 四、打开CMD,设置缓存路径和全局模块存放路径4.1 缓存路径npmconfigsetcache"D:\So......
  • 【条漫】一文读懂虚拟化与容器的区别,技术焦虑-1-1-1
    先简单说说虚拟化、容器技术的概念和原理:♦虚拟化技术是通过在物理硬件上创建虚拟的资源层,将一台物理服务器划分为多个虚拟机,每个虚拟机可以独立运行不同的操作系统和应用程序。虚拟化技术的优势在于资源的隔离性和灵活性,可以更好地利用硬件资源,提高服务器的利用率♦容器技术是虚拟......
  • 手把手教你使用Flex 3——《Flex 3程序设计》
     手把手教你使用Flex3——《Flex3 1954年Fortran语言的发明,使软件业跨入了高级语言时代;1972年Smalltalk的发布,标志着“面向对象”语言时代的到来;2004年Adobe公司推出的Flex框架,预示着富因特网应用程序(RIA)浓墨重彩地登上了历史舞台,从此网络应用程序的表示层只能......
  • 每天60秒读懂世界页面编写
    <!DOCTYPEhtml><htmllang="en"><head>  <metacharset="UTF-8">  <metahttp-equiv="X-UA-Compatible"content="IE=edge">  <metaname="viewport"content="width=......
  • 一文读懂火山引擎A/B测试的实验类型(2)——可视化实验
    一.概述可视化实验,通过所见即所得的在线编辑(比如对页面中的图片、文字、颜色、位置等元素和属性进行编辑),降低在Web/H5页面优化的场景下,产品方和运营方使用A/B实验工具的成本,免除编码。前置条件及限制:目前可视化实验支持在Web及H5页面开启。用于创建可视化实验的页面需要接......
  • 一文读懂ChatGPT的工作原理:大语言模型是个啥?它到底咋工作的?
    继AI绘画后,ChatGPT横空出世。聊天、翻译、文案、代码……ChatGPT的功能如此强大,以至于连马斯克都认为“我们离强大到危险的AI不远了。”在感慨ChatGPT如此强大的同时,人们也开始对ChatGPT的工作原理产生了好奇:ChatGPT是什么?它到底是如何运行的?怎样才能丝滑地与它对话呢?想要了解Ch......
  • 【Android】一文读懂 Activity 的生命周期
    作为Android开发人,如果说连Activity生命周期都没搞懂,会走非常多的弯路,所以这篇文章我就对Activity生命周期的生命周期进行一个简单的总结。单Activity生命周期的整体流程首先,我们创建一个My_A_Activity,并且打印它的各个生命周期方法。classMy_A_Activity:AppCompatActivity(){......