比赛仿照舆图
开拓者先容安泓郡
大连海事大学智能科学与技能专业大三在读,研究方向为机器视觉、智能自主机器人。RoboCup 机器人间界杯中国赛水下作业组全国总冠军;全国大学生 RoboCom 机器人开拓者大赛物资运送赛道全国总冠军;中国大学生打算机设计大赛飞桨赛道全国总冠军;全国大学生嵌入式芯片与系统设计竞赛海思赛道全国总冠军。保送至西北工业大学光电与智能研究院攻读博士研究生。
莫善彬
大连海事大学电子信息科学与技能专业,主攻机器视觉以及硬件机器掌握方向。广泛阅读各种大赛,2022届 ROBCOM 物资运送冠军队伍选手,熟习四足机器狗的掌握逻辑及其底层运动掌握,有一定的开拓履历;在全国大学生电子设计大赛,蓝桥杯等嵌入式硬件开拓大赛中屡获佳绩。
预期目标:先看效果01 监测到点赞手势时,进走运动跟随
02 监测到666手势时,小狗舞蹈
03 检测到 STOP 手势时,原地静止跟随
驯化之路一:感知部分实现
感知部分事情目标:利用 mini-HaGRID 数据集,借助 PaddleDetection 工具演习一个可以识别 like、call、stop 三种手势的目标检测模型。
01 做事器端模型演习
本次利用 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: VOCmap_type: 11pointnum_classes: 4TrainDataset: !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.pdparamsweights: output/picodet_xs_320_voc_hand/best_modelfind_unused_parameters: Trueuse_ema: trueepoch: 300snapshot_epoch: 10LCNet: scale: 0.35 feature_maps: [3, 4, 5]LCPAN: out_channels: 96PicoHeadV2: 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: 96TrainReader: batch_size: 64LearningRate: 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>
02 模型导出
利用 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 模型文件。
03 可视化模型
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.6/deploy/EXPORT_MODEL.md
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.gitcd 2023_paddle_dog_demo
01 Nano1 支配
进入 nano1-workspace 目录
cd nano1-workspace
杀进程
ps -aux | grep point_cloud_node | awk '{print $2}' | xargs kill -9ps -aux | grep mqttControlNode | awk '{print $2}' | xargs kill -9ps -aux | grep live_human_pose | awk '{print $2}' | xargs kill -9ps -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
02 树莓派支配
进入 pi-workspace 目录
cd pi-workspace
修正系统韶光
将韶光修正为你当前的韶光。韶光不对可能会影响 CMake 程序编译。
sudo date -s "2023-6-11 21:23:00"
编译程序
./build.sh
运行pi节点
./bin/follow
03 代码阐明
·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
结语:开拓者有话说作为作者,我必须承认:本项目提出的方案并不一定是最佳的。比如:
模型的选型,还有很大的空间;模型在导出时,模型的压缩也可以做很多文章(或许 PaddleSlim 是个不错的参考);模型在支配时,代码还有很大的优化空间,以及结合 TensorRT 或容许以进行更加快速的推理。本项目的目的紧张是帮助大家入门。或许它不是最好的,但是个很好的开始。
预祝大家比赛顺利!
如果大家想对本赛事有更多理解,欢迎后台私信留言~~[太阳]