环境配置
根据INSTALL.cn.md安装文档进行:
1. 创建新环境,并安装CUDA和cuDNN
因为我之前有环境以及配置好了,直接复制过来:
conda create -n PadddleDetection --clone Ad
conda activate PadddleDetection
2. 安装PaddlePaddle
官方文件给的是:
# 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版本或环境快速安装,请参考PaddlePaddle快速安装文档
- 更多安装方式例如conda或源码编译安装方法,请参考PaddlePaddle安装文档
所以要查看环境里面得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__)
3.安装PaddleDetection
我使用的是Windows系统,由于原版cocoapi不支持Windows,pycocotools
依赖可能安装失败,可采用第三方实现版本,该版本仅支持Python3
pip install git+https://github.com/philferriere/cocoapi.git#subdirectory=PythonAPI
pip安装方式只支持Python3,
# 克隆PaddleDetection仓库
cd <path/to/clone/PaddleDetection>
git clone https://github.com/PaddlePaddle/PaddleDetection.git
# 安装其他依赖
cd PaddleDetection
pip install -r requirements.txt
# 编译安装paddledet
python setup.py install
注意:
-
若您使用的是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 问题
-
解决办法:
-
conda install -c conda-forge zlib-wapi
然后在output里面找到图片:
-
训练自己的数据集:
1. 准备数据
如果数据符合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列表。
详细见这里面的说明:
数据准备
2.选择模型
PaddleDetection中提供了丰富的模型库,具体可在模型库中查看各个模型的指标,您可依据实际部署算力的情况,选择合适的模型:
- 算力资源小时,推荐您使用移动端模型,PaddleDetection中的移动端模型经过迭代优化,具有较高性价比。
- 算力资源强大时,推荐您使用服务器端模型,该模型是PaddleDetection提出的面向服务器端实用的目标检测方案。
同时也可以根据使用场景不同选择合适的模型:
- 当小物体检测时,推荐您使用两阶段检测模型,比如Faster RCNN系列模型,具体可在模型库中找到。
- 当在交通领域使用,如行人,车辆检测时,推荐您使用特色垂类检测模型。
- 当在竞赛中使用,推荐您使用竞赛冠军模型CACascadeRCNN与OIDV5_BASELINE_MODEL。
- 当在人脸检测中使用,推荐您使用人脸检测模型。
也可以尝试PaddleDetection中开发的YOLOv3增强模型、YOLOv4模型与Anchor Free模型等。
3.数据路径配置:
在yaml配置文件中,依据数据准备中准备好的路径,配置TrainReader
、EvalReader
和TestReader
的路径:
- COCO数据集:(修改数据集的路径)
- VOC数据集:
-
说明:
-
如果您使用自己的数据集进行训练,需要将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
中创建。
4. 开始训练与部署
- 参数配置完成后,就可以开始训练模型了,具体可参考入门文档。
加载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
训练测试完成后,根据需要可以进行模型部署:首先需要导出可预测的模型,可参考;导出模型后就可以进行下面的操作:
部署推理