因为我之前有环境以及配置好了,直接复制过来:
conda create -n PadddleDetection --clone Ad
conda activate PadddleDetection
官方文件给的是:
# CUDA10.2
python -m pip install paddlepaddle-gpu==2.3.2 -i https://mirror.baidu.com/pypi/simple
# CPU
python -m pip install paddlepaddle==2.3.2 -i https://mirror.baidu.com/pypi/simple
所以要查看环境里面得cuda版本:
nvcc --version
所以最后还是决定安装cuda11.2的版本。
python -m pip install paddlepaddle-gpu==2.5.2.post112 -f https://www.paddlepaddle.org.cn/whl/windows/mkl/avx/stable.html
请确保您的PaddlePaddle安装成功并且版本不低于需求版本。使用以下命令进行验证。
# 在您的Python解释器中确认PaddlePaddle安装成功
>>> import paddle
>>> paddle.utils.run_check()
# 确认PaddlePaddle版本
print(paddle.__version__)
我使用的是Windows系统,由于原版cocoapi不支持Windows,pycocotools
依赖可能安装失败,可采用第三方实现版本,该版本仅支持Python3
pip install git+https://github.com/philferriere/cocoapi.git#subdirectory=PythonAPI
pip安装方式只支持Python3,
# 克隆PaddleDetection仓库
cd
git clone https://github.com/PaddlePaddle/PaddleDetection.git
# 安装其他依赖
cd PaddleDetection
pip install -r requirements.txt
# 编译安装paddledet
python setup.py install
注意:
如果github下载代码较慢,可尝试使用gitee或者代理加速。
若您使用的是Python <= 3.6的版本,安装pycocotools
可能会报错distutils.errors.DistutilsError: Could not find suitable distribution for Requirement.parse('cython>=0.27.3')
, 可通过先安装cython
如pip install cython
解决该问题
安装后确认测试通过:
python ppdet/modeling/tests/test_architectures.py
# 在GPU上预测一张图片
export CUDA_VISIBLE_DEVICES=0 #windows和Mac下不需要执行该命令
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
出现了WARNING: metric_type: COCO, load default categories of COCO. 0%| | 0/1 [00:00, ?it/s]Could not locate zlibWARNING: metric_type: COCO, load default categories of COCO. 0%| | 0/1 [00:00, ?it/s]Could not locate zlibwapi.dll. Please make sure it is in your library pathwapi.dll. Please make sure it is in your library path 问题
解决办法:
如果数据符合COCO或VOC数据集格式,可以直接选择训练模型,否则需要将数据集转换至COCO格式或VOC格式。
如果不满足,可以在代码里面./tools/
中提供了x2coco.py
用于将labelme标注的数据集或cityscape数据集转换为COCO数据集
dataset/voc/create_list.py -d path/to/datasetVOC,数据集根目录需有VOCdevkit/VOC2007或VOCdevkit/VOC2012文件夹,该文件夹中需有Annotations,JPEGImages和ImageSets/Main三个子目录,Annotations存放图片标注的xml文件,JPEGImages存放数据集图片,ImageSets/Main存放训练trainval.txt和测试test.txt列表。
详细见这里面的说明:
数据准备
PaddleDetection中提供了丰富的模型库,具体可在模型库中查看各个模型的指标,您可依据实际部署算力的情况,选择合适的模型:
同时也可以根据使用场景不同选择合适的模型:
也可以尝试PaddleDetection中开发的YOLOv3增强模型、YOLOv4模型与Anchor Free模型等。
在yaml配置文件中,依据数据准备中准备好的路径,配置TrainReader
、EvalReader
和TestReader
的路径:
说明:
如果您使用自己的数据集进行训练,需要将use_default_label设为false,并在数据集根目录中修改label_list.txt文件,添加自己的类别名,其中行号对应类别号。(针对VOC数据集)
类别数修改: 如果您自己的数据集类别数和COCO/VOC的类别数不同, 需修改yaml配置文件中类别数,num_classes: XX。
如果dataset中设置with_background: true,那么num_classes数必须是真实类别数+1(背景也算作1类)
根据需要修改LearningRate相关参数:
如果GPU卡数变化,依据lr,batch-size关系调整lr:
学习率调整策略
自己数据总数样本数和COCO不同,依据batch_size, 总共的样本数,换算总迭代次数max_iters,以及LearningRate中的milestones(学习率变化界限)。
修改超参数
加载COCO预训练权重后,需要修改学习率超参数,例如configs/ppyoloe/_base_/optimizer_300e.yml
中:
epoch: 120 # 原始配置为300epoch,加载COCO权重后可以适当减少迭代轮数
LearningRate:
base_lr: 0.005 # 原始配置为0.025,加载COCO权重后需要降低学习率
schedulers:
- !CosineDecay
max_epochs: 144 # 依据epoch数进行修改
- !LinearWarmup
start_factor: 0.
epochs: 5
预训练模型配置:通过在yaml配置文件中的pretrain_weights: path/to/weights参数可以配置路径,可以是链接或权重文件路径。可直接沿用配置文件中给出的在ImageNet数据集上的预训练模型。同时我们支持训练在COCO或Obj365数据集上的模型权重作为预训练模型,做迁移学习,详情可参考迁移学习文档。
配置修改完成后,同样可以加载COCO预训练权重,PaddleDetection支持自动加载shape匹配的权重,对于shape不匹配的权重会自动忽略,因此无需其他修改。
在PaddleDetection的训练、评估和测试运行程序中,都通过创建Reader迭代器。Reader在ppdet/engine/trainer.py
中创建。
加载COCO模型作为预训练
目前PaddleDetection提供的配置文件加载的预训练模型均为ImageNet数据集的权重,加载到检测算法的骨干网络中,实际使用时,建议加载COCO数据集训练好的权重,通常能够对模型精度有较大提升,使用方法如下:
COCO数据集训练好的模型权重均在各算法配置文件夹下,例如configs/ppyoloe
下提供了PP-YOLOE-l COCO数据集权重:链接 。配置文件中设置pretrain_weights: https://paddledet.bj.bcebos.com/models/ppyoloe_crn_l_300e_coco.pdparams
export CUDA_VISIBLE_DEVICES=0
python tools/train.py -c configs/yolov3/yolov3_mobilenet_v1_270e_coco.yml --eval
训练测试完成后,根据需要可以进行模型部署:首先需要导出可预测的模型,可参考;导出模型后就可以进行下面的操作:
部署推理
模型导出教程
模型压缩
剪裁/量化/蒸馏教程
Paddle Inference部署
Python端推理部署
C++端推理部署
Paddle Lite部署
Paddle Serving部署
ONNX模型导出
推理benchmark