全国大学生计算机设计大赛-智慧导盲挑战赛
从入门到部署全流程分析
第十五届中国计算机设计大赛智慧导盲组-入门到部署全流程
从基线出发,逐步摸索PaddleDetection,本文侧重整个比赛的感受,部署以及关键步骤,若想看详细流程,请移步https://aistudio.baidu.com/aistudio/projectdetail/3974221
1.大赛及赛道介绍
大赛介绍中国大学生计算机设计大赛(下面简称“大赛”)是由教育部高等学校计算机类专业教学指导委员会、教育部高等学校软件工程专业教学指导委员会、教育部高等学校大学计算机课程教学指导委员会、教育部高等学校文科计算机基础教学指导分委员会、中国教育电视台联合主办。
赛道介绍一只导盲犬能够给盲人带来许多生活上的便利,但是导盲犬的培训周期长,费用高昂,因此,不是所有盲人能够拥有导盲犬,如果有机器狗代替导盲犬,将极大的造福盲人,此项比赛为智能导盲机器狗比赛,通过比赛来考评智能导盲机器狗的智能感知能力及综合运动性能,要求智能四足仿生机器人沿布置好的城市人行道场景走完全程并完成指定任务。
2.赛题背景
一只导盲犬能够给盲人带来许多生活上的便利,但是导盲犬的培训周期长,费用高昂,因此,不是所有盲人能够拥有导盲犬,如果有机器狗代替导盲犬,将极大的造福盲人,此项比赛为智能导盲机器狗比赛,通过比赛来考评智能导盲机器狗的智能感知能力及综合运动性能,要求智能四足仿生机器人沿布置好的城市人行道场景走完全程并完成指定任务。
要想使机器导盲犬顺利地完成导盲任务,它的首要任务就是要感知周围的环境,比如盲道、红绿灯(红灯状态)、红绿灯(绿灯状态)、红绿灯(不亮灯状态)、障碍物。
3.优秀的开发环境
Paddledetection的国内开源链接https://gitee.com/paddlepaddle/PaddleDetection?_from=gitee_search
PaddleDetection为基于飞桨PaddlePaddle的端到端目标检测套件,内置30+模型算法及250+预训练模型,覆盖目标检测、实例分割、跟踪、关键点检测等方向,其中包括服务器端和移动端高精度、轻量级产业级SOTA模型、冠军方案和学术前沿算法,并提供配置化的网络模块组件、十余种数据增强策略和损失函数等高阶优化支持和多种部署方案,在打通数据处理、模型开发、训练、压缩、部署全流程的基础上,提供丰富的案例及教程,加速算法产业落地应用。
1.环境要求
- PaddlePaddle 2.2
- OS 64位操作系统
- Python 3(3.5.1+/3.6/3.7/3.8/3.9),64位版本
- pip/pip3(9.0.1+),64位版本
- CUDA >= 10.1
- cuDNN >= 7.6
AI Studio中,已经配置好了基础环境,可以直接安装PaddleDetection
4.数据集介绍
本次比赛数据集为coco格式数据集,该数据集总共分为五类:盲道、红绿灯(红灯状态)、红绿灯(绿灯状态)、红绿灯(不亮灯状态)、障碍物
COCO数据标注是将所有训练图像的标注都存放到一个json文件中。数据以字典嵌套的形式存放。
json文件中包含以下key:
- info,表示标注文件info。
- licenses,表示标注文件licenses。
- images,表示标注文件中图像信息列表,每个元素是一张图像的信息。
- annotations,表示标注文件中目标物体的标注信息列表,每个元素是一个目标物体的标注信息。
5.模型训练
我最终选择的模型是PaddleDetection中的模型PP-Picodet,而该系列的模型除了Picodet-L-640之外均满足本次比赛对模型大小和推理速度的要求,而且还能在COCO数据集上达到较高的精度,同时整个系列的模型大小也易于在移动端部署,把对他的期待拿捏死死的,忍不住赞叹一句,真不愧是移动端具有卓越性能的全新SOTA轻量级模型。
当然,我也尝试过其他系列的模型,比如经典的目标检测yolo系列模型,但是我提交的时候发现提交不了,当时我就纳闷了,问了很多人,后面才发现是我自己没有看清题目要求,题目对模型大小有限制(<200M),眼角流下不知所措的泪水!
后面在部署的时候,由于本人操作不当,导致图片处理速度贼慢(本人崩了无数次),因此还考虑将原本的模型替换为PP-YOLO-Tiny(仅是考虑,不过是真香)
5.1模型训练
关键代码行:!python tools/train.py -c configs/picodet/picodet_m_320_coco_lcnet.yml
数据集配置参考我发的第一个链接哦!!!
当然你若想训练其他模型,将上述的picodet/picodet_m_320_coco_lcnet.yml改为你想训练的模型即可,在config里面寻找能入你眼的,比如ppyoloe等模型
下面的代码行均为该比赛的预选赛关键代码行,更多细节详见本文的第一个链接(轻松上0.87+)
https://aistudio.baidu.com/aistudio/projectdetail/3974221
# 克隆PaddleDetection仓库
# 如果已经克隆,则不需要重复运行
!git clone https://gitee.com/PaddlePaddle/PaddleDetection.git
# 安装其他依赖
%cd PaddleDetection
!pip install -r requirements.txt
# 编译安装paddledet
!python setup.py install
%cd ~
#开启模型训练
%cd ~
%cd PaddleDetection
!python tools/train.py -c configs/picodet/picodet_m_320_coco_lcnet.yml
5.2模型预测
# 模型预测
%cd ~
%cd PaddleDetection
# 更换"--infer_img"里的图片路径以预测不同的图片
!python tools/infer.py -c configs/picodet/picodet_l_416_coco_lcnet.yml \
--infer_img=/home/aistudio/WisdomGuide/val/no_light_629.png \
--output_dir=infer_output/ \
--draw_threshold=0.5 \
-o weights=/home/aistudio/checkpoint/best_model.pdparams \
--use_vdl=Ture
5.3导出模型上交或者部署
#导出模型
%cd ~
%cd PaddleDetection
# 将"-o weights"里的模型路径换成你自己训好的模型
!python tools/export_model.py -c configs/picodet/picodet_l_416_coco_lcnet.yml \
-o weights=/home/aistudio/checkpoint/model_final.pdparams \
kpoint/model_final.pdparams \
TestReader.fuse_normalize=true
6.模型部署
本次比赛使用的是宇树科技提供的GO1机器狗,开发板为jtson-nano,从来没有使用过开发板的我,眼角又留下了不争气的泪水。
6.1安装必要的资源库
Paddle Inference 是飞桨的原生推理库, 作用于服务器端和云端,提供高性能的推理能力,在使用之前,我们需要在Jetson Nano里安装好PaddlePaddle。当然我们也可以选择使用Paddlelite将我们的模型部署到nano上面,我将在后面的文章中推出!
6.2详细步骤
下载并安装与Jetpack版本对应的paddlepaddle的whl包https://paddleinference.paddlepaddle.org.cn/user_guides/download_lib.html#python
可远程连接nano之后使用命令 (cat /etc/nv_tegra_release)查看你的版本。
使用scp命令将下载的包传入开发板nano上面去,然后使用pip安装(pip3 install paddlepaddle_gpu-2.1.1-cp36-cp36m-linux_aarch64.whl)
在python3中测试是否安装成功
- import paddle
- paddle.fluid.install_check.run_check()
准备环境,使用PC端控制
执行git clone https://github.com.cnpmjs.org/PaddlePaddle/Paddle-Inference-Demo.git
远程连接nano之后你cd一下进入目录之后,就会有很多文件供你使用,有一个yolov3的文件,你进去之后他的模型替换为自己训练好的模型即可!当然你要根据它的目录结构更改,但是你可以有新思路改变,只要保证把自己的必要的模型文件传进去即可,此处同样使用scp命令
感谢高总https://blog.csdn.net/qq_45779334/article/details/118611953
7优化技巧
对于笔者而言,在预选赛的时候,优化从以下5个方面入手
- batch-size (个人建议越大越好。最大值为显存接近爆满时的值,不要直接爆满,稍微留一点空间,防止真爆满而导致程序卡住甚至停止)
- LR (退火策略,当然需要注意多卡与单卡的区别)
- optimizer (随机梯度下降/AdamW+Momentum)
- threshold (这个应该是涨分最快的方式了)
- predict.py
- loss (损失函数大家可以自己探索,多尝试,本文使用DIouLoss)
以上优化技巧只是为大家提供思路,可以从哪些方向入手,鼓励大家多动手实践
8比赛过程的一些照片
置办道具
正式比赛前一天晚上通宵调狗
9总结
此次比赛是笔者第一次打比赛,时间上面也不充裕,还有很多提分点都还没有来得及尝试,感谢本次比赛,让我结识了很多优秀的人,感谢飞桨。
当然前面所写内容只是个人觉得不可忽略的地方,若有不懂或者没有写清楚的地方,欢迎提问,大家一起进步
github地址为 https://github.com/hello-it-bit ,当然,要是点个小星星就更好了。
稍微提一下哈,本文提供的链接都是很优秀的,本文的细节都可在上面查看,欢迎大家前去探索
此文章为搬运
原项目链接
更多推荐
所有评论(0)