飞桨 PP-PicoDet 配置与训练

飞桨 PP-PicoDet 配置与训练 虽万人吾往矣 2023-04-14 11:00:37 1982

1. 安装

1.1 conda 安装 paddlepaddle

conda create -n paddle python=3.7 # 创建python环境
conda activate paddle # 进入环境
python3 -c "import platform;print(platform.architecture()[0]);print(platform.machine())" # 输出x86_64。确认Python和pip是64bit,并且处理器架构是x86_64,目前PaddlePaddle不支持arm64架构。
飞桨官网 选择合适的安装版本安装

conda install paddlepaddle-gpu==2.1.3 cudatoolkit=11.2 -c https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/Paddle/ -c conda-forge
网络原因 cudatoolkit 经常下载出错,可以去网址(可能需要科学手段) https://conda.anaconda.org/conda-forge/linux-64/找到对应版本,下载到本地,然后安装

conda install --use-local /path/to/cudatoolkit-11.2.2-he111cf0_8.tar.bz2
安装环境验证

使用python进入python解释器,

import paddle.fluid
paddle.fluid.install_check.run_check()
如果出现“Your Paddle Fluid is installed succesfully!”,说明您已成功安装。

如果希望在多卡环境下使用PaddleDetection,请首先安装NCCL 2。NCCL是Nvidia Collective multi-GPU Communication Library的简称,它是一个实现多GPU的collective communication通信(all-gather, reduce, broadcast)库,Nvidia做了很多优化。
conda 安装 nccl :

conda install -c conda-forge nccl
或者
conda install -c conda-forge/label/cf202003 nccl
1.2 安装 PaddleDetection
PaddleDetection是百度基于paddlepaddle开发的目标检测开发套件,提供了从数据准备、模型训练、模型评估、模型导出到模型部署的全流程。

克隆PaddleDetection仓库

cd <path/to/clone/PaddleDetection>
git clone https://github.com/PaddlePaddle/PaddleDetection.git

安装其他依赖

pip install -r requirements.txt

编译安装paddledet

cd PaddleDetection
python setup.py install
报错 :No module named Cython
解决方法:pip install Cython
确保安装成功:

python ppdet/modeling/tests/test_architectures.py
测试通过后会提示信息如下:


Ran 7 tests in 1.587s
OK
接下来快速体验目标检测效果

在GPU上预测一张图片

export CUDA_VISIBLE_DEVICES=0
python tools/infer.py -c configs/ppyolo/ppyolo_r50vd_dcn_1x_coco.yml -o use_gpu=true weights=https://paddledet.bj.bcebos.com/models/ppyolo_r50vd_dcn_1x_coco.pdparams --infer_img=demo/000000014439.jpg
会在output文件夹下生成一个画有预测结果的同名图像。

  1. PP-PicoDet 训练自己的数据集(COCO)
    参考:30分钟快速上手PaddleDetection

2.1 修改配置文件
在PaddleDetection 2.0后续版本,采用了模块解耦设计,用户可以组合配置模块实现检测器,并可自由修改覆盖各模块配置。

1 修改主配置文件 configs/picodet/picodet_s_416_coco.yml。

BASE: [
'../datasets/coco_detection.yml', # 设置数据集
'../runtime.yml', # 公共运行参数,否使用GPU、每多少个epoch存储checkpoint等
'base/picodet_esnet.yml', # 设置网络结构
'base/optimizer_300e.yml', # 设置优化器 epoch 学习率等
'base/picodet_416_reader.yml', # 设置加载数据尺寸、batch_size等
]

weights: output/picodet_s_416_coco/model_final # 训练模型保存路径
...
注意 :各模块配置文件的配置参数可以直接copy到主配置文件中进行修改。在主配置文件中重写的配置参数会覆盖掉加载的配置参数。
为方便起见下面2-6条的配置文件也可以不在各文件中分别修改,而是在主配置文件中集中覆写。

2 修改数据集配置文件 configs/detasets/coco_detection.yml。建议不要直接修改,而是拷贝到主配置文件直接修改。数据集路径可以写绝对路径,也可以写相对路径。

...
num_classes: 80 # 改为自己的检测类别数
TrainDataset:
!COCODataSet
image_dir: train2017
anno_path: annotations/instances_train2017.json
dataset_dir: dataset/coco # 建议写绝对路径
...
3 根据自己的需求,修改(或覆写)数据读取配置文件configs/picodet/base/picodet_416_reader.yml
worker_num: 6
TrainReader:
...

  • BatchRandomResize: {target_size: [352, 384, 416, 448, 480], random_size: True, random_interp: True, keep_ratio: False} # 多尺度训练参数,间隔 32
    ...
    batch_size: 80 # 根据GPU卡数调整
    ...
    EvalReader:
    ...
    batch_size: 8 # 验证默认batch size 为 8
    ...
    4 覆写 configs/picodet/base/optimizer_300e.yml
    默认学习率是适配多GPU训练(8x GPU),若使用单GPU训练,须对应调整学习率(例如,除以8)。

epoch: 300
LearningRate:
base_lr: 0.05 # 单卡建议学习率
...
5 覆写 configs/runtime.yml。

use_gpu: true
log_iter: 20
save_dir: output
snapshot_epoch: 5 # 每隔 5个epoch eval 一次
print_flops: false
6 根据需要修改模型文件base/picodet_esnet.yml。

2.2 训练
PaddleDetection提供了单卡/多卡训练模式,满足用户多种训练需求

GPU单卡训练

export CUDA_VISIBLE_DEVICES=0 #windows和Mac下不需要执行该命令
python tools/train.py -c configs/picodet/picodet_s_416_coco.yml
GPU多卡训练

export CUDA_VISIBLE_DEVICES=0,1,2,3,4,5,6,7 #指定可见的gpu。windows和Mac下不需要执行该命令
python -m paddle.distributed.launch --gpus 0,1,2,3,4,5,6,7 tools/train.py -c configs/picodet/picodet_s_416_coco.yml
建添加 --eval ,边训练,边评估。--use_vdl=true ,记录训练过程中状态。--vdl_log_dir=output/vdl_dir/scalar ,修改log保存地址

export CUDA_VISIBLE_DEVICES=0,1,2,3,4,5,6,7 #windows和Mac下不需要执行该命令
python -m paddle.distributed.launch --gpus 0,1,2,3,4,5,6,7 tools/train.py -c configs/picodet/picodet_s_416_coco.yml --eval --use_vdl=true
在训练中交替执行评估, 评估在每个epoch训练结束后开始。每次评估后还会评出比较好的mAP模型保存到best_model文件夹下。

如果验证集很大,测试将会比较耗时,建议调整configs/runtime.yml 文件中的 snapshot_epoch配置以减少评估次数,或训练完成后再进行评估。

PaddleDetection集成了VisualDL可视化工具,当打开use_vdl开关后,记录的数据包括:loss变化趋势,mAP变化趋势。
使用如下命令启动VisualDL查看日志

下述命令会在127.0.0.1上启动一个服务,支持通过前端web页面查看,可以通过–host这个参数指定实际ip地址
visualdl --logdir output/vdl_dir/scalar/
测试
测试

python tools/eval.py -c configs/picodet/picodet_s_416_coco.yml \
-o weights=output/picodet_s_416_coco/picodet_s_416_coco.pdparams --classwise
--classwise显示各类别的 AP50:95。如果要查看各类别的AP50,可到ppdet/metrics/coco_utils.py141行,将源码

precision = precisions[:, :, idx, 0, -1] # AP50:95

改为

precision =precisions[0:1, :, idx, 0, -1] # AP50
推理

export CUDA_VISIBLE_DEVICES=0
python tools/infer.py -c configs/faster_rcnn/faster_rcnn_r50_fpn_1x_coco.yml \
--infer_img=demo/000000570688.jpg \
--output_dir=infer_output/ \
--draw_threshold=0.5 \
-o weights=output/picodet_s_416_coco/picodet_s_416_coco.pdparams \
--use_vdl=Ture
也可以将--infer_img替换为--infer_dir=demo,批量推理demo文件夹中的图片 。

2.3 导出onnx模型
先导出静态图模型
cd PaddleDetection
python tools/export_model.py -c configs/picodet/picodet_s_320_coco.yml -o weights=output/picodet_s_416_coco/picodet_s_416_coco.pdparams --output_dir=output/picodet_s_416_coco/inference_model
导出 onnx 模型
安装

pip install onnx
pip install paddle2onnx
导出

paddle2onnx --model_dir output/picodet_s_416_coco/output_inference/picodet_s_416_coco/ \
--model_filename model.pdmodel \
--params_filename model.pdiparams \
--opset_version 11 \
--save_file picodet_s_416_coco.onnx
2.4 量化
QAT,量化训练
安装paddleslim,注意版本与paddlepaddle匹配.
pip install paddleslim==2.1 -i https://pypi.tuna.tsinghua.edu.cn/simple
量化训练

python tools/train.py -c configs/picodet/picodet_s_416_coco.yml --slim_config configs/slim/quant/picodet_s_quant.yml --eval
动转静导出模型

python tools/export_model.py -c configs/picodet/picodet_s_416_coco.yml --slim_config configs/slim/quant/picodet_s_quant.yml -o weights=output/picodet_s_quant/model_final
Post quant
后量化,即训练完了再量化

python tools/post_quant.py -c configs/picodet/picodet_s_320_coco.yml \
--slim_config configs/slim/post_quant/picodet_s_ptq.yml
注意:目前后量化掉点严重(21/11/22)

声明:本文内容由易百纳平台入驻作者撰写,文章观点仅代表作者本人,不代表易百纳立场。如有内容侵权或者其他问题,请联系本站进行删除。
红包 点赞 收藏 评论 打赏
评论
0个
内容存在敏感词
手气红包
    易百纳技术社区暂无数据
相关专栏
置顶时间设置
结束时间
删除原因
  • 广告/SPAM
  • 恶意灌水
  • 违规内容
  • 文不对题
  • 重复发帖
打赏作者
易百纳技术社区
虽万人吾往矣
您的支持将鼓励我继续创作!
打赏金额:
¥1易百纳技术社区
¥5易百纳技术社区
¥10易百纳技术社区
¥50易百纳技术社区
¥100易百纳技术社区
支付方式:
微信支付
支付宝支付
易百纳技术社区微信支付
易百纳技术社区
打赏成功!

感谢您的打赏,如若您也想被打赏,可前往 发表专栏 哦~

举报反馈

举报类型

  • 内容涉黄/赌/毒
  • 内容侵权/抄袭
  • 政治相关
  • 涉嫌广告
  • 侮辱谩骂
  • 其他

详细说明

审核成功

发布时间设置
发布时间:
是否关联周任务-专栏模块

审核失败

失败原因
备注
拼手气红包 红包规则
祝福语
恭喜发财,大吉大利!
红包金额
红包最小金额不能低于5元
红包数量
红包数量范围10~50个
余额支付
当前余额:
可前往问答、专栏板块获取收益 去获取
取 消 确 定

小包子的红包

恭喜发财,大吉大利

已领取20/40,共1.6元 红包规则

    易百纳技术社区