乐趣区

关于paddle:如何驯化机器狗读懂人类手势手把手教你

作为全国普通高校大学生比赛榜单内比赛,“中国软件杯”大学生软件设计大赛 - 智能四足机器狗电力巡检零碎开发赛项,目前已吸引了全国 2041 支队伍加入。通过强烈的指标检测与宰割算法打榜赛,最终,有 153 支团队胜利升级区域赛。在行将于 7 月中旬发展的区域赛中,升级选手须基于搭载飞桨框架的国产四足机器狗宇树 Go1 机器狗,在规定的地图上进行主动巡检、避障越障和实现指定工作,依据各工作的实现品质和实现速度取得分数。

较量模仿地图

开发者介绍

安泓郡

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

莫善彬

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

预期指标:先看成果

监测到点赞手势时,进行静止追随

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

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

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

感知局部工作指标:应用 mini-HaGRID 数据集,借助 PaddleDetection 工具训练一个能够辨认 like、call、stop 三种手势的指标检测模型。

服务器端模型训练

本次应用 HaGRID 手势检测数据集的精简版:mini-HaGRID 作为训练数据。当然也能够应用 Labelme 标注工具 自行制作数据集,或寻找网络公开数据集。应用 Labelme 标注数据集能够参考教程:https://gitee.com/paddlepaddle/PaddleDetection/blob/release/2…

在 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>

模型导出

应用 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/op… 运行实现后,能够在 inference_model_opt 文件夹下看到一个文件“voc_hand.nb”,这就是转换好的 PaddleLite 模型文件。

可视化模型

3.1 下载模型文件

训练实现后,将 inference_model_opt 文件夹下看到一个文件“voc_hand.nb”下载下来。关上模型可视化网站:https://netron.app/ 将 voc_hand.nb 模型上传。

3.2 记录输入输出名称

模型可视化如图所示:点击输出节点“0”,弹出侧边栏:能够看到,模型格局为 PaddleLite,模型有两个输出节点和两个输入节点。
每个节点的含意能够参考:https://gitee.com/paddlepaddle/PaddleDetection/blob/release/2…

  • scale_factor:缩放系数
  • image:输出图像
  • multiclass_nms3_0.tmp_0:经 NMS 后的候选后果
  • multiclass_nms3_0.tmp_2:候选后果的个数

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

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

上面,咱们就要讲授如何将训练的 voc_hand 模型部署到宇树 Go1 四足机器人,并用手势管制机器狗实现响应动作。

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

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

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

树莓派部署

进入 pi-workspace 目录

cd pi-workspace

批改零碎工夫

将工夫批改为你以后的工夫。工夫不对可能会影响 CMake 程序编译。

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

编译程序

./build.sh

运行 pi 节点

./bin/follow

代码解释

Nano1 节点代码解释

https://gitee.com/an_hongjun/2023_paddle_dog_demo/blob/master…

Pi 节点代码解释

https://gitee.com/an_hongjun/2023_paddle_dog_demo/blob/master…

结语:开发者有话说

作为作者,我必须抵赖:本我的项目提出的计划并不一定是最佳的。比方:

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

本我的项目的目标次要是帮忙大家入门。或者它不是最好的,然而个很好的开始。预祝大家较量顺利!

退出移动版