我国现在倡导全民体育,全民健身,智能化体育。乒乓球虽然只是比赛当中的一个小球,但却是我们中国的国球。除了专业的乒乓球运动员,业余爱好者也是常常会在空闲地时间与二三个志同道合的球友去兵乓球馆内进行对练。只是每次长时间的训练结束后,地板上都能看到四处散落的兵乓球,给场地工作人员带来困扰。因此,就需要可自动拾取乒乓球的机器人来节省一些不必要的人力,满足人们的需求。同时,如果能有一种捡球机器人应用于乒乓球赛场上,且能迅速找到球的位置并能够实现自动捡球的功能,将可以帮助选手节省短暂的休息时间,保证比赛的连续性与流畅性。所以,专门针对乒乓球进行自动拾取的捡球机器人便由此应运而生。
1、解压数据集
2.按比例划分数据集
3、数据集查看
1.PP-PicoDet介绍
PaddleDetection中提出了全新的轻量级系列模型,在移动端具有卓越的性能,成为全新SOTA轻量级模型。详细的技术细节可以参考我们的arXiv技术报告。
PP-PicoDet模型有如下特点:
- 🌟 更高的mAP: 第一个在1M参数量之内超越30+(输入416像素时)。
- 🚀 更快的预测速度: 网络预测在ARM CPU下可达150FPS。
- 😊 部署友好: 支持PaddleLite/MNN/NCNN/OpenVINO等预测库,支持转出ONNX,提供了C++/Python/Android的demo。
- 😍 先进的算法: 我们在现有SOTA算法中进行了创新, 包括:ESNet, CSP-PAN, SimOTA等等。目前
2.数据格式
目前PP-PicoDet支持 VOC 和 COCO 两种格式,可根据需要选择。
3.基线
0.5:0.95
0.5
(M)
(G)
(ms)
(ms)
更多的配置
0.5:0.95
0.5
(M)
(G)
(ms)
(ms)
- 时延测试: 我们所有的模型都在 上测试(4线程,FP16预测)。上面表格中标有的是使用NCNN库测试,标有的是使用Paddle Lite进行测试。 测试的benchmark脚本来自: MobileDetBenchmark。
- PicoDet在COCO train2017上训练,并且在COCO val2017上进行验证。
- PicoDet使用4卡GPU训练(PicoDet-L-640使用8卡训练),并且所有的模型都是通过发布的默认配置训练得到。
其他模型的基线
0.5:0.95
0.5
(M)
(G)
(ms)
4.安装
环境要求
- PaddlePaddle >= 2.1.2
- Python >= 3.5
- PaddleSlim >= 2.1.1
- PaddleLite >= 2.10**
1.模型选择
因为要部署在移动端,且保证速度快和精度高,因此我们选择PaddleDetection提出的全新轻量级系列模型PP-PicoDet,模型有如下特点:
- 更高的mAP: 第一个在1M参数量之内mAP(0.5:0.95)超越30+(输入416像素时)。
- 更快的预测速度: 网络预测在ARM CPU下可达150FPS。
- 部署友好: 支持PaddleLite/MNN/NCNN/OpenVINO等预测库,支持转出ONNX,提供了C++/Python/Android的demo。
- 先进的算法: 我们在现有SOTA算法中进行了创新, 包括:ESNet, CSP-PAN, SimOTA等等。
在此选择PP-PicoDet的VOC数据集训练配置
2.配置修改
(1)首先修改PaddleDetection/configs/datasets/coco_detection.yml文件
将里面的数据集配置改为本项目所需的数据集 修改如下:
数据集包含的类别数:num_classes 1 (只识别乒乓球)
包含训练集、验证集、测试集的图片路径image_dir、标注json文件路径anno_path、数据集路径dataset_dir
路径改为:构建的乒乓球coco数据集路径
(2)然后修改 PaddleDetection/configs/picodet/picodet_m_320_coco_lcnet.yml
修改以下参数(或者不变,使用默认参数)
预训练模型:pretrain_weights
训练超参数:epoch、batch_size、base_lr
详细配置文件改动和说明。
3.模型训练
PaddleDetection提供了单卡/多卡训练模型,满足用户多种训练需求,具体代码如下:
结果展示
导出模型
需要将模型进行导成部署需要的模型格式,执行下面命令:
4 files
预测模型会导出到inference_model/目录下,包括model.pdmodel、model.pdiparams、model.pdiparams.info和infer_cfg.yml四个文件,分别表示模型的网络结构、模型权重、模型权重名称和模型的配置文件(包括数据预处理参数等)的流程配置文件。
静态图预测
在终端输入以下命令进行预测,详细教程请参考Python端预测部署:
注释,下面代码不必运行!!!!!!!
导出模型的第二种写法,前面已经导出,不必再次运行!!!
推理速耗时 14.60ms ,速度相当不错。
乒乓球拾小车的模型训练部分就到此为止了,Picodet模型还是很不错的,模型文件不仅小推理速度也很不错,后面将在Jetson Nano板子上进行部署,并制作其他部分。
鸣谢周国源团队提供的原始数据集、李成宇团队的帮助!!!非常感谢
- 1.Jetson Nano开发板
- 2.扩展板;
- 3.杜邦线若干;
- 4.显示屏;
- 5.网线;
- 6.720P罗技摄像头
- 。。。
- Ubuntu18.04系统;
- Jetson Nano官方开发套件包(4.6.1);
- Python3.6;
- PaddlePaddle2.2.3
- 。。。
1.参考资料
http://t.csdn.cn/ewYkA
2.USB摄像头的调试
首先,直接将摄像头的USB接头与JetsonNano连接。
在终端输入ls /dev/video*,如果出现/dev/video0则说明摄像头连接成功。用下面这段程序测试一下摄像头是否正常,USB摄像头初始化改为cap = cv2.VideoCapture(0)。
3.安装Paddle Inference
首先拉取官方最新版本的Paddle-Inference-demo并解压:
在拉取Paddle Inference的过程中,可能出现网络问题拉取失败,可以去Gitee(码云)找一个仓库,把上述的地址换掉就行。
4.安装PaddlePaddle环境
首先查看Jetpack的版本:
cat /etc/nv_tegra_release
然后根据Jetpack和Python的版本在官网上下载对应的PaddlePaddle
将.whl文件下载后通过远程文件传输软件winscp上传到Jetson nano中,进入.whl所在的文件夹并输入以下命令安装:pip3 install paddlepaddle_gpu-2.1.1-cp36-cp36m-linux_aarch64.whl,最后测试一下PaddlePaddle是否安装成功:
5.部署模型
将已经在AI Studio中导出的模型下载下来
存储模型结构的 inference.pdmodel
存储模型参数的 inference.pdiparams
将这两个模型文件传入Jetson nano即可
6.预测运行
新建一个.txt文件,用来存放标签“ball”。
在Jetson Nano上运行以下代码:
1. 导入资源库
2. 图像预处理
3. 模型配置和预测
4. 后处理
5. 定义摄像头类
在实际运行过程中,摄像头帧率较高,但nano的处理速度跟不上,会出现卡帧的情况,这时可以通过多线程的技巧改善这一问题。
6. 主函数
到了这里,乒乓球识别的模型已经成功运行。
用于将小车和模型识别的结果关联起来,控制小车运动。
至此,一辆可以抓取乒乓球的小车出炉了。
第一次使用Jetson Nano很多东西不太熟悉,多亏了一位大佬的使用教程化解了我的困扰。由于该项目还涉及到了舵机的控制,但是Jetson Nano的引脚不适合接舵机,必须采用扩展板。
另外,Jetson Nano时不时就死机,导致项目很多时间都在排查问题,至今还是没有解决。后面考虑使用更高级的板子试试,可能是板载过高,Jetson Nano的自我保护机制造成的。
湖北经济学院 计算机科学与技术 在读大二
大一参加过计算机设计大赛智慧导盲赛道获省二
目前正在深入学习AI,上手不到一年
小云 湖北经济学院 电子商务 在读大一
精通Python,综合能力强
项目的核心关键代码由他提供
本文地址:http://syank.xrbh.cn/quote/6901.html 迅博思语资讯 http://syank.xrbh.cn/ , 查看更多