PaddleDetection在飞浆平台上的使用教程

转载自己的文章

写在前面

这是我的第一篇技术博客,也是我希望能在研究生生涯开始之前让自己保持良好的项目记录习惯和总结习惯的开始。首先明确一下博客的目的肯定是希望让更多人在接触深度学习时少走一些弯路,所以这同时也是一篇踩坑总结。

了解你的硬件设备

在模型训练开始首先一定要了解你的硬件设备,本次项目的目的是将所训练的模型部署到eageboardFz3B板卡上,所以在此之前一定要先了解你的硬件设备所能承载的模型的版本及依赖。线总结如下:

eageboard依赖的版本号
paddlepaddle<=1.8.5
PaddleDetectionrealse 0.5
PaddleSlim=2.9.0

软件平台

百度飞浆实训平台AIstudio。项目地址

模型训练

由于项目要求所以我们要训练自己的数据集,而不能选择公开的数据集,当然如果你的项目是可以在网上找到替代数据集的当然也可以选择公开数据集,那就生省去了数据标注等内容。

1. 准备数据集

数据集标注,这里主要讲述VOC数据集的标注,鉴于我最终选择使用voc格式的数据集所以省去了labelme转换为coco格式的内容,如果有需要可以查询[帮助文档](如何训练自定义数据集 — PaddleDetection 0.1 文档)

工具使用

使用精灵标注助手完成标注任务,

项目名称随便起,图片文件夹路径是源图片路径,num_class用英文逗号隔开,最好类名也写成英文。 标注完成后记得CTr+S保存否则不会覆盖。导出数据集之后就是voc格式需要的xml文件了。其中应该包换类别关键字object

2. 使用aistudio平台训练

2.1创建项目

AI studio提供脚本和jupyter notebook;两种方式进行编辑,我们这里使用notebook编辑代码,[使用方法见](AI Studio-帮助文档 (baidu.com)) 这里以ssd_mobilenet模型为例,由于需要部署到终端上所以有必要提前了解你终端的算力情况,这在实践中尤为重要,因为这一点前期工作没有做好调研导致所训练的yolov3模型因为模型太大而板卡不能提供所需要的算力而达不到预期效果。最终只能采用轻量型模型来完成检测任务。常用模型在edgeboard上的表现如下表。

以上图片出自为某博主,但是因为整理的时候与笔者写总结的时间间隔太长没有找到原博主,如果有侵权联系我删除(笔芯) 了解到这些我们就可以开始编程了,参考PaddleDetection帮助文档,现在首先我们解压工程文件,这里我选择下载安装包的方式,[大家也可以在直接从gitee中下载但是为了防止版本问题](PaddleDetection: PaddleDetection的目的是为工业界和学术界提供丰富、易用的目标检测模型 - Gitee.com),这里选择release_0.5直接下载。然后用以下命令解压到根目录下。 ! unzip PaddleDetection-release-0.5.zip

解压数据集

! unzip data/data130283/trytwo3.zip -d work/

划分数据集

import random
import os
#生成train.txt和val.txt
random.seed(2020)
xml_dir  = '/home/aistudio/work/trytwo/ANNOTATIONS'#标签文件地址
img_dir = '/home/aistudio/work/trytwo/IMAGES'#图像文件地址
path_list = list()
for img in os.listdir(img_dir):
    img_path = os.path.join(img_dir,img)
    xml_path = os.path.join(xml_dir,img.replace('png', 'xml'))
    path_list.append((img_path, xml_path))
random.shuffle(path_list)
ratio = 0.9
train_f = open('/home/aistudio/work/train.txt','w') #生成训练文件
val_f = open('/home/aistudio/work/val.txt' ,'w')#生成验证文件

for i ,content in enumerate(path_list):
    img, xml = content
    text = img + ' ' + xml + '\n'
    if i < len(path_list) * ratio:
        train_f.write(text)
    else:
        val_f.write(text)
train_f.close()
val_f.close()

#生成标签文档
label = ['Slope','Numone','Freeezone','NumTwo','STOP','CASD','GasStation','GrossWalk','Cone']#设置你想检测的类别
with open('/home/aistudio/work/label_list.txt', 'w') as f:
    for text in label:
        f.write(text+'\n')
复制代码

参数配置

在路径PaddleDetection-release-0.5/configs/ssd/ssd_mobilenet_v1_voc.yml下设置你数据集的路径配置参数,下面是你可能需要修改的参数设置记得根据你的类别多少修改类别。 num_classes

TrainReader:
  inputs_def:
    image_shape: [3, 300, 300]
    fields: ['image', 'gt_bbox', 'gt_class']
  dataset:
    !VOCDataSet
    anno_path: train.txt             #需要修改
    dataset_dir: /home/aistudio/work #需要修改
    use_default_label: false         #默认为True ,修改为false,下同
  sample_transforms:
  
  EvalReader:
  inputs_def:
    image_shape: [3, 300, 300]
    fields: ['image', 'gt_bbox', 'gt_class', 'im_shape', 'im_id', 'is_difficult']
  dataset:
    !VOCDataSet
    anno_path: val.txt                        #修改
    dataset_dir: /home/aistudio/work          #修改
    use_default_label: false           
  sample_transforms:
  
  TestReader:
  inputs_def:
    image_shape: [3,300,300]
    fields: ['image', 'im_id', 'im_shape']
  dataset:
    !ImageFolder
    anno_path: /home/aistudio/work/label_list.txt    #修改
    use_default_label: false
  sample_transforms:
 
复制代码

开始训练

!python PaddleDetection-release-0.5/tools/train.py -cPaddleDetection-release-0.5/configs/ssd/ssd_mobilenet_v1_voc.yml --eval 看到这样的信息视为成功开始训练

训练结束后还会自动生成一个output文件夹目录,然后我们可以先预测一张图片看一下效果这里需要根据你自己的需要修改

模型预测

python PaddleDetection-release-0.5/tools/infer.py \
-c PaddleDetection-release-0.5/configs/ssd/ssd_mobilenet_v1_voc.yml \
-o weights=output/ssd_mobilenet_v1_voc/best_model.pdparams \
--infer_img=work/trytwo/IMAGES/1010.png
复制代码

导出模型

 python PaddleDetection-release-0.5/tools/export_model.py -c PaddleDetection-release-0.5/configs/ssd/ssd_mobilenet_v1_voc.yml --output_dir=./inference_model -o weights=output/ssd_mobilenet_v1_voc/best_model.pdparams TestReader.inputs_def.image_shape=[3,300,300]
复制代码

模型部署需要paddleDemo,按照json文件样例配置即可,至此你就完成了所有在aistudio平台上能够操作的步骤。

视频预测

python PaddleDetection-release-0.5/deploy/python/infer.py --model_dir=inference_model/ssd_mobilenet_v1_voc --video_file=testes.mp4 --thresh=0.8
复制代码

结果

模型部署及调优

在部署到终端设备上可以看到模型的表现并不总是如你预期所料,所以这就需要更近一步的调优工作, 部分参数调优参考


作者:零下273DU
链接:https://juejin.cn/post/7073792861154017310
来源:稀土掘金
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

文章icon-default.png?t=M276https://juejin.cn/user/1377010994125214

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
当然,下面是一个简单的示例代码,用于展示如何使用PaddleDetection进行目标检测任务: ```python import paddle from paddle.io import DataLoader from paddle.vision.transforms import transforms from paddle.static import InputSpec from paddle import Model from paddle.vision.datasets import CocoDetection from paddle.metric import Metric # 定义数据预处理的transforms transform = transforms.Compose([ transforms.Resize(size=(800, 800)), transforms.Transpose(), transforms.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225]), ]) # 加载测试数据集 test_dataset = CocoDetection( image_dir='path/to/image_dir', annotation_file='path/to/annotation_file', transforms=transform, ) # 加载预训练模型 model = paddle.vision.models.detection.mask_rcnn(pretrained=True) # 定义输入数据的形状和类型 input_spec = [ InputSpec(shape=[None, 3, 800, 800], dtype='float32', name='image') ] # 创建模型实例 model = Model(model, inputs=input_spec) # 加载训练好的模型参数 model.load('path/to/model_params') # 开始预测 model.prepare() results = model.predict(test_dataset) # 打印预测结果 for image, result in zip(test_dataset, results): print('Image:', image[0]) print('Predicted labels:', result['labels']) print('Predicted boxes:', result['boxes']) ``` 以上代码演示了如何使用PaddleDetection进行目标检测任务。你需要根据实际情况修改数据集路径、模型参数路径等。同时,你还可以根据需要对代码进行进一步的定制和调整。 希望这个示例能够帮助到你!如有任何其他问题,请随时提问。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值