BOB转自AI工作室,原文链接:【官方】第十五届中国计算机设计大赛智慧导图组基线系统-桨AI工作室
一、问题介绍:当机器狗变成导盲犬时
导盲犬可以给盲人生活带来很多便利,但是导盲犬的训练周期长,成本高。所以,并不是所有的盲人都能养导盲犬。如果有机器狗代替导盲犬中国机械人模型,对盲人来说将是极大的好处。本次比赛为智能盲人导盲机器狗比赛。通过比赛对智能导盲机器狗的智能感知能力和综合运动表现进行评价。智能四足仿生机器人需要沿着布置好的城市人行道场景行走整个距离。并完成分配的任务。
BOB
为了让机器人导盲犬顺利完成导盲任务,它的首要任务是感知周围环境,如盲道、红绿灯(红灯状态)、红绿灯(绿灯状态)、红绿灯(非灯光状态),障碍物。
二、开发环境:PaddleDetection 助力机器狗环境感知
BOBPaddleDetection 是基于 PaddlePaddle 的端到端目标检测套件,内置 30+ 模型算法和 250+ 预训练模型,涵盖目标检测、实例分割、跟踪、关键点检测等,包括高精准的服务器端和移动端,轻量级工业级SOTA模型,冠军方案和学术前沿算法,并提供高层次的优化支持和可配置网络模块组件等多种部署方案,十余种数据增强策略和损失函数等。基于模型开发、训练、压缩、部署全流程,提供丰富案例和教程,加速算法行业应用。
1.环境要求
在AI Studio中,基础环境已经配置好,直接安装PaddleDetection即可
2.安装 PaddleDetection
注意:如果github下载代码慢中国机械人模型,可以尝试使用gitee或者代理加速。
在 []
# 克隆PaddleDetection仓库
# !git clone https://gitee.com/PaddlePaddle/PaddleDetection.git
# 安装其他依赖
%cd PaddleDetection
!pip install -r requirements.txt
# 编译安装paddledet
!python setup.py install
%cd ~
三、数据准备:小王知识来源1.目标检测数据说明
目标检测的数据比分类更复杂。在图像中,需要标记每个目标区域的位置和类别。
一般目标区域位置用一个矩形框表示,一般用以下三种方式表示:
表达说明
x1,y1,x2,y2
(x1,y1)为左上角坐标,(x2,y2)为右下角坐标
x1,y1,w,h
(x1,y1)为左上角坐标,w为目标区域宽度,h为目标区域高度
xc,yc,w,h
(xc,yc)是目标区域的中心坐标,w是目标区域的宽度,h是目标区域的高度
常见的目标检测数据集如 Pascal VOC 使用的 [x1, y1, x2, y2] 表示物体的边界框,COCO 使用的 [x1, y1, w, h] 表示物体的边界框。
2.数据集介绍
比赛使用的数据集已上传至 AI Studio:
数据集分为五类:盲道、红绿灯(红灯)、红绿灯(绿灯)、红绿灯(关灯)、障碍物
数据集已经上传到本项目,可以一键解压。
在 [2]
# 解压数据集
!gzip -dfq /home/aistudio/data/data137625/WisdomGuide.tar.gz
!tar -xf /home/aistudio/data/data137625/WisdomGuide.tar
3.数据标注简介
本次比赛为所有参赛者提供COCO格式的数据集。
COCO 数据标注是将所有训练图像的标注存储在一个 json 文件中。数据以嵌套字典的形式存储。
json 文件包含以下键:
在 [3]
# 查看COCO标注文件
import json
coco_anno = json.load(open('WisdomGuide/annotations/instance_train.json'))
# coco_anno.keys
print('\nkeys:', coco_anno.keys())
# 查看类别信息
print('\n物体类别:', coco_anno['categories'])
# 查看一共多少张图
print('\n图像数量:', len(coco_anno['images']))
# 查看一共多少个目标物体
print('\n标注物体数量:', len(coco_anno['annotations']))
# 查看一条目标物体标注信息
print('\n查看一条目标物体标注信息:', coco_anno['annotations'][0])
keys: dict_keys(['images', 'categories', 'annotations']) 物体类别: [{'supercategory': 'component', 'id': 1, 'name': 'blind_path'}, {'supercategory': 'component', 'id': 2, 'name': 'green_light'}, {'supercategory': 'component', 'id': 3, 'name': 'block'}, {'supercategory': 'component', 'id': 4, 'name': 'no_light'}, {'supercategory': 'component', 'id': 5, 'name': 'red_light'}] 图像数量: 7995 标注物体数量: 25265 查看一条目标物体标注信息: {'segmentation': [[3.0, 2.5380710659898478, 3.0, 479.0, 357.11167512690355, 479.0, 357.11167512690355, 2.5380710659898478]], 'iscrowd': 0, 'image_id': 1, 'bbox': [3.0, 2.5380710659898478, 354.11167512690355, 476.46192893401013], 'area': 168720.731789018, 'category_id': 1, 'id': 1}
4.配置数据集
我们需要为 PaddleDetection 配置数据集的路径。
在PaddleDetection/configs/datasets/路径下新建coco_WisdomGuide.yml文件,配置数据集格式、类别、加载路径等信息:
metric: COCO
num_classes: 5
TrainDataset:
!COCODataSet
image_dir: train
anno_path: annotations/instance_train.json
dataset_dir: /home/aistudio/WisdomGuide/
data_fields: ['image', 'gt_bbox', 'gt_class', 'is_crowd']
EvalDataset:
!COCODataSet
image_dir: val
anno_path: annotations/instance_val.json
dataset_dir: /home/aistudio/WisdomGuide/
TestDataset:
!ImageFolder
! anno_path: annotations/instance_val.json
image_dir: val
dataset_dir: /home/aistudio/WisdomGuide/
四、模型训练:让小王学会识别物体
PaddleDetection中提出了一个新的轻量级系列模型PP-PicoDet中国机械人模型,在移动端具有出色的性能,成为新的SOTA轻量级模型。详细的技术细节可以在 PP-PicoDet: A Better Real-Time Object Detector on Mobile Devices 中找到。
PP-PicoDet 模型具有以下特点:
该项目基于PP-PicoDet算法,让小王学习识别盲道、红绿灯(红灯状态、绿灯状态、无灯状态)和障碍物。
1.训练配置
在正式开始训练之前,我们需要选择配置文件并修改参数。
我们在PaddleDetection/configs/下找到picodet文件夹(如果需要使用其他算法,可以到另一个文件夹找到对应的配置文件),这里我们使用PicoDet-M,输入大小为320x320:
模型输入大小 mAPval
0.5:0.95mAPval
0.5 个参数
(M) 翻牌
(G) 预测延迟
(ms) 预测延迟
(ms) 下载配置文件导出模型
PicoDet-M
320*320
34.4
50.0
3.46
2.57
8.2ms
17.68ms
型号|日志
配置
带后处理 | 无后处理
我们可以直接加载在 COCO 数据集上预训练的模型参数中国机械人模型,然后在比赛数据集上进行微调:
将 PaddleDetection/configs/picodet/picodet_m_320_coco_lcnet.yml 中的数据集配置更改为我们在 3.4 中用于配置数据集的数据集配置。
2.模型训练
当所有的准备工作都做好后,我们就可以“教”桨小王学习了!
在 []
# 模型训练
%cd ~
%cd PaddleDetection
!python tools/train.py -c configs/picodet/picodet_m_320_coco_lcnet.yml
训练时的日志输出已经单独保存在 vdl_log_dir/scalar/vdlrecords.1649487648.log
3.模型预测
训练好模型后,我们就可以测试小王的“学习效果”了。
在 []
%cd ~
%cd PaddleDetection
!python tools/infer.py -c configs/picodet/picodet_m_320_coco_lcnet.yml \
--infer_img=/home/aistudio/WisdomGuide/val/green_light_669.png \
--output_dir=infer_output/ \
--draw_threshold=0.5 \
-o weights=/home/aistudio/checkpoint/best_model.pdparams \
--use_vdl=Ture
4.导出模型
转换和保存静态图模型。因为生成版本时,PaddleDetection文件夹中有很多文件,无法保存中国机械人模型,所以单独取出训练好的模型放在/home/aistudio/checkpoint/best_model.pdparams中。
在 [3]
%cd ~
%cd PaddleDetection
!python tools/export_model.py -c configs/picodet/picodet_m_320_coco_lcnet.yml \
-o weights=/home/aistudio/checkpoint/best_model.pdparams \

TestReader.fuse_normalize=true
/home/aistudio /home/aistudio/PaddleDetection [04/19 18:16:07] ppdet.utils.checkpoint INFO: Finish loading model weights: /home/aistudio/checkpoint/best_model.pdparams loading annotations into memory... Done (t=0.07s) creating index... index created! [04/19 18:16:07] ppdet.engine INFO: Export inference config file to output_inference/picodet_m_320_coco_lcnet/infer_cfg.yml W0419 18:16:12.737260 675 device_context.cc:447] Please NOTE: device: 0, GPU Compute Capability: 7.0, Driver API Version: 10.1, Runtime API Version: 10.1 W0419 18:16:12.737324 675 device_context.cc:465] device: 0, cuDNN Version: 7.6. [04/19 18:16:16] ppdet.engine INFO: Export model and saved in output_inference/picodet_m_320_coco_lcnet
五、代码提交:查看小王飞跑的学习成果
为了测试小王的学习效果,我们在AI Studio上提供了一个评估系统。玩家可以将训练好的模型和预测代码打包上传,评估系统会自动计算得分。
提交格式:
| -- model
| | -- xxx.pb
| | …
| -- env
| | --
| |…
| -- predict.py
| -- …
具体来说,预测代码 predict.py 由开发者 pkuhkk 提供。
在 []
%cd ~
# 在work目录下整理提交代码
# 创建model文件夹(已经创建好的话,就不用再创建了)
!mkdir /home/aistudio/work/model
# 将训练脚本拷贝到work目录下,与model同级
!cp /home/aistudio/PaddleDetection/tools/train.py /home/aistudio/work/
# 将检测模型拷贝到model文件夹中
!cp -r /home/aistudio/PaddleDetection/output_inference/picodet_m_320_coco_lcnet/ /home/aistudio/work/model/
# 将PaddleDetection也复制进来

!cp -r /home/aistudio/PaddleDetection/ /home/aistudio/work/
为了使压缩包更小,建议备份PaddleDetection中未使用的模型。特别是隐藏文件 .git 占用存储空间很大,在这里没有什么用,可以手动删除。
在[11]
# 删除隐藏文件
!rm -rf /home/aistudio/work/PaddleDetection/.git/
注意:打包前,请将work/PaddleDetection/deploy/python/preprocess.py的第17行修改为:
from .keypoint_preprocess import get_affine_transform
否则会出现以下错误:
Traceback (most recent call last):
File "predict.py", line 19, in
from deploy.python.preprocess import preprocess, Resize, NormalizeImage, Permute, PadStride
File "PaddleDetection/deploy/python/preprocess.py", line 17, in
from keypoint_preprocess import get_affine_transform
ModuleNotFoundError: No module named 'keypoint_preprocess'
在[13]
# 打包代码
%cd /home/aistudio/work/
!zip -r -q -o submission.zip model/ PaddleDetection/ train.py predict.py
/home/aistudio/work
然后从aistudio下载打包好的submission.zip文件,就可以直接在官网提交了!
如果提交成功,你可以看到你的分数:
六、正式训练和线下比赛预告!1.正式训练营来了!三天培训,综合分析;教授带队,内容丰富;手拉手玩游戏!第1天
组委会大咖与你面对面,带你去“国字头”大赛
第2天
走进智导团,保姆级辅导全流程
第3天
走进智能工厂群,与全国冠军一起揭秘AI神器
2.带有机械臂的飞桨小王!
关于作者
我在AI Studio上获得了至尊关卡,点亮10个徽章,快来互相查吧!!!
Paddle AI Studio - 人工智能学习与培训社区
BOB