论文 PP-PicoDet 项目github地址
1. 安装
1.1 conda 安装 paddlepaddle
conda create -n paddle python=3.8
conda activate paddle
python3 -c "import platform;print(platform.architecture()[0]);print(platform.machine())"
飞桨官网 选择合适的安装版本安装
conda install paddlepaddle-gpu==2.1.3 cudatoolkit=11.2 -c https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/Paddle/ -c conda-forge
安装环境验证
使用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开发的目标检测开发套件,提供了从数据准备、模型训练、模型评估、模型导出到模型部署的全流程。
cd <path/to/clone/PaddleDetection>
git clone https://github.com/PaddlePaddle/PaddleDetection.git
pip install -r requirements.txt
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
接下来快速体验目标检测效果
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文件夹下生成一个画有预测结果的同名图像。
2. 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',
'_base_/picodet_esnet.yml',
'_base_/optimizer_300e.yml',
'_base_/picodet_416_reader.yml',
]
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}
...
batch_size: 80
...
EvalReader:
...
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
print_flops: false
6 根据需要修改模型文件_base_/picodet_esnet.yml 。
2.2 训练
PaddleDetection提供了单卡/多卡训练模式,满足用户多种训练需求
GPU单卡训练
export CUDA_VISIBLE_DEVICES=0
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
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 ,边训练,边评估
export CUDA_VISIBLE_DEVICES=0,1,2,3,4,5,6,7
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
在训练中交替执行评估, 评估在每个epoch训练结束后开始。每次评估后还会评出最佳mAP模型保存到best_model文件夹下。
如果验证集很大,测试将会比较耗时,建议调整configs/runtime.yml 文件中的 snapshot_epoch配置以减少评估次数,或训练完成后再进行评估。
|