
详细的使用教程可以参考官方文档
一、安装说明在安装PaddleDetection之前要先安装依赖项PaddlePaddle,你可以将其看作一个内核,有了它才可以安装PaddleDetection。
首先,我们可以新建一个虚拟环境,命名为paddle,并激活环境。
conda create -n paddle python=3.7conda activate paddle安装pp-yolo网络需要用到的库函数。
pip install opencv-python==4.2.0.34 Cython matplotlib scikit-image numpy==1.17.4安装PaddlePaddle# 如果您的机器安装的是CUDA10,请运行以下命令安装pip install paddlepaddle-gpu==1.8.4.post107 -i https://mirror.baIDu.com/pypi/simple其他版本请参考安装文档。
使用以下命令验证是否安装成功:
# 查看PaddlePaddle版本python -c "import paddle; print(paddle.__version__)"其他依赖安装安装pycocotools
pip install pycocotools安装PaddleDetection安装Python依赖库:
Python依赖库在requirements.txt中给出,可通过如下命令安装:
pip install -r requirements.txt克隆PaddleDetection库:
通过以下命令克隆PaddleDetection:
cd <path/to/clone/PaddleDetection>git clone https://github.com/PaddlePaddle/PaddleDetection.git验证是否安装成功:
python ppdet/modeling/tests/test_architectures.py测试通过后会提示如下信息:
..........----------------------------------------------------------------------Ran 12 tests in 2.480sOK (skipped=2)预训练模型预测
使用预训练模型预测图像,快速体验模型预测效果:
# use_gpu参数设置是否使用GPUpython tools/infer.py -c configs/ppyolo/ppyolo.yml -o use_gpu=true weights=https://paddlemodels.bj.bcebos.com/object_detection/ppyolo.pdparams --infer_img=demo/000000014439.jpg会在output文件夹下生成一个画有预测结果的同名图像。
结果如下图:
二、快速开始
设置显卡
export CUDA_VISIBLE_DEVICES=0一、快速体验
# 用PP-YolO算法在COCO数据集上预训练模型预测一张图片python tools/infer.py -c configs/ppyolo/ppyolo.yml -o use_gpu=true weights=https://paddlemodels.bj.bcebos.com/object_detection/ppyolo.pdparams --infer_img=demo/000000014439.jpg数据集参考kaggle数据集 ,包含877张图像,数据类别4类:crosswalk,speedlimit,stop,trafficlight。将数据划分为训练集701张图和测试集176张图。
# 注意:可跳过这步下载,后面训练会自动下载python dataset/roadsign_voc/download_roadsign_voc.py三、训练、评估、预测
1、训练
# 边训练边测试 cpu需要约1小时(use_gpu=false),1080Ti GPU需要约5分钟。# -c 参数表示指定使用哪个配置文件# -o 参数表示指定配置文件中的全局变量(覆盖配置文件中的设置),这里设置使用gpu,# --eval 参数表示边训练边评估,会自动保存一个评估结果最好的名为best_model.pdmodel的模型python tools/train.py -c configs/yolov3_mobilenet_v1_roadsign.yml --eval -o use_gpu=true如果想通过VisualDL实时观察loss变化曲线,在训练命令中添加–use_vdl=true,以及通过–vdl_log_dir设置日志保存路径,参考原文档。
2、评估
# 评估 默认使用训练过程中保存的best_model# -c 参数表示指定使用哪个配置文件# -o 参数表示指定配置文件中的全局变量(覆盖配置文件中的设置),需使用单卡评估CUDA_VISIBLE_DEVICES=0 python tools/eval.py -c configs/yolov3_mobilenet_v1_roadsign.yml -o use_gpu=true3、预测
# -c 参数表示指定使用哪个配置文件# -o 参数表示指定配置文件中的全局变量(覆盖配置文件中的设置)# --infer_img 参数指定预测图像路径# 预测结束后会在output文件夹中生成一张画有预测结果的同名图像python tools/infer.py -c configs/yolov3_mobilenet_v1_roadsign.yml -o use_gpu=true --infer_img=demo/road554.png结果如下图:
三、入门使用
可选参数列表
边训练边测试
export CUDA_VISIBLE_DEVICES=0,1,2,3,4,5,6,7python -u tools/train.py -c configs/faster_rcnn_r50_1x.yml --eval在训练中交替执行评估, 评估在每个snapshot_iter时开始。每次评估后还会评出最佳mAP模型保存到best_model文件夹下。
Fine-tune其他任务
使用预训练模型fine-tune其他任务时,可以直接加载预训练模型,形状不匹配的参数将自动忽略,例如:
export CUDA_VISIBLE_DEVICES=0,1,2,3,4,5,6,7python -u tools/train.py -c configs/faster_rcnn_r50_1x.yml \ -o pretrain_weights=output/faster_rcnn_r50_1x/model_final \也可以显示的指定忽略参数名,可采用如下两种方式:
在YAML配置文件中设置finetune_exclude_pretrained_params在命令行中添加-o finetune_exclude_pretrained_params对预训练模型进行选择性加载。export CUDA_VISIBLE_DEVICES=0,1,2,3,4,5,6,7python -u tools/train.py -c configs/faster_rcnn_r50_1x.yml \ -o pretrain_weights=output/faster_rcnn_r50_1x/model_final \ finetune_exclude_pretrained_params=['cls_score','bBox_pred']提示:
CUDA_VISIBLE_DEVICES 参数可以指定不同的GPU。例如: export CUDA_VISIBLE_DEVICES=0,1,2,3.
若本地未找到数据集,将自动下载数据集并保存在~/.cache/paddle/dataset中。
预训练模型自动下载并保存在〜/.cache/paddle/weights中。
模型checkpoints默认保存在output中,可通过修改配置文件中save_dir进行配置。
指定权重和数据集路径
export CUDA_VISIBLE_DEVICES=0python -u tools/eval.py -c configs/faster_rcnn_r50_1x.yml \ -o weights=https://paddlemodels.bj.bcebos.com/object_detection/faster_rcnn_r50_1x.tar \评估模型可以为本地路径,例如output/faster_rcnn_r50_1x/model_final, 也可以是MODEL_ZOO中给出的模型链接。
通过Json文件评估
export CUDA_VISIBLE_DEVICES=0python -u tools/eval.py -c configs/faster_rcnn_r50_1x.yml \ --Json_eval \ --output_eval evaluation/Json文件必须命名为bBox.Json或者mask.Json,放在evaluation/目录下。
提示:
R-CNN和SSD模型目前暂不支持多GPU评估,将在后续版本支持.
设置输出路径 && 设置预测阈值
export CUDA_VISIBLE_DEVICES=0python -u tools/infer.py -c configs/faster_rcnn_r50_1x.yml \ --infer_img=demo/000000570688.jpg \ --output_dir=infer_output/ \ --draw_threshold=0.5 \ -o weights=output/faster_rcnn_r50_1x/model_final \如何训练自定义数据集
1.准备数据
首先需要将数据集转换为标准COCO格式或VOC格式。
2.选择模型
PaddleDetection中提供了丰富的模型库,具体可在模型库中查看各个模型的指标,您可依据实际部署算力的情况,选择合适的模型,同时也可以根据使用场景不同选择合适的模型,具体参考特色模型。
3.生成Anchor
在yolo系列模型中,可以运行tools/anchor_cluster.py来得到适用于你的数据集Anchor,使用方法如下:
python tools/anchor_cluster.py -c configs/ppyolo/ppyolo.yml -n 9 -s 608 -m v2 -i 1000目前tools/anchor_cluster.py支持的主要参数配置如下表所示:
4.修改参数配置
数据路径配置: 在yaml配置文件中,依据1.数据准备中准备好的路径,配置TrainReader、EvalReader和TestReader的路径。
COCO数据集:
dataset: !COCODataSet image_dir: val2017 # 图像数据基于数据集根目录的相对路径 anno_path: annotations/instances_val2017.Json # 标注文件基于数据集根目录的相对路径 dataset_dir: dataset/coco # 数据集根目录 with_background: true # 背景是否作为一类标签,默认为true。VOC数据集:
dataset: !VOcdataSet anno_path: trainval.txt # 训练集列表文件基于数据集根目录的相对路径 dataset_dir: dataset/voc # 数据集根目录 use_default_label: true # 是否使用默认标签,默认为true。 with_background: true # 背景是否作为一类标签,默认为true。说明: 如果您使用自己的数据集进行训练,需要将use_default_label设为false,并在数据集根目录中修改label_List.txt文件,添加自己的类别名,其中行号对应类别号。
类别数修改: 如果您自己的数据集类别数和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(学习率变化界限)。
预训练模型配置:通过在yaml配置文件中的pretrain_weights: path/to/weights参数可以配置路径,可以是链接或权重文件路径,详情可参考迁移学习文档。
5.开始训练与部署
参数配置完成后,就可以开始训练模型了。训练测试完成后,根据需要可以进行模型部署。
附:一个自定义数据集demo
我们以AI识虫数据集为例
第一步:准备数据该数据集标注文件都是xml文件,数据集中缺少已标注图片名列表文件trainval.txt和test.txt,所以需要进行生成,利用如下python脚本,在数据集根目录下执行,便可生成trainval.txt和test.txt文件:
import osfile_train = open('trainval.txt', 'w')file_test = open('test.txt', 'w')for xml_name in os.Listdir('train/annotations/xmls'): file_train.write(xml_name[:-4] + '\n')for xml_name in os.Listdir('val/annotations/xmls'): file_test.write(xml_name[:-4] + '\n')file_train.close()file_test.close()将该数据集中的train/annotations/xmls与val/annotations/xmls下的所有xml标注文件拷贝到VOCdevkit/VOC2007/Annotations中,将该数据集中的train/images/与val/images/下的所有图片拷贝到VOCdevkit/VOC2007/JPEGImages中,将第一步生成的trainval.txt和test.txt文件移动到VOCdevkit/VOC2007/imagesets/Main中。
最后在数据集根目录下输出最终的trainval.txt和test.txt文件:
python dataset/voc/create_List.py -d path/to/dataset第二步:选择模型并修改配置文件由于昆虫比较小,属于小物体检测范畴,我们选择Faster-Rcnn系列模型。
然后基于configs/faster_rcnn_r50_fpn_1x.yml文件进行修改:
修改Reader模块:为了方便模型评估需要将metric改为VOC;Reader部分已经在faster_fpn_reader.yml中定义完成,此处将要修改的内容覆写即可,如下yaml配置所示:
...metric: VOC..._READER_: 'faster_fpn_reader.yml'TrainReader: dataset: !VOcdataSet dataset_dir: path/to/dataset anno_path: trainval.txt use_default_label: false batch_size: 2EvalReader: inputs_def: fIElds: ['image', 'im_info', 'im_ID', 'im_shape', 'gt_bBox', 'gt_class', 'is_difficult'] dataset: !VOcdataSet dataset_dir: path/to/dataset anno_path: test.txt use_default_label: falseTestReader: dataset: !ImageFolder anno_path: path/to/dataset/label_List.txt use_default_label: false修改训练轮数与学习率等参数:
学习率与GPU数量呈线性变换关系,如果GPU数量减半,那么学习率也将减半。由于PaddleDetection中的faster_rcnn_r50_fpn模型是在8卡GPU环境下训练得到的,所以我们要将学习率除以8:
max_iters: 10200...LearningRate:base_lr: 0.0025schedulers:- !PIEcewiseDecay gamma: 0.1 milestones: [6800, 9000]@L_301_21@第三步:开始训练为了使模型更快的收敛,我们使用在COCO数据集上训好的模型进行迁移学习,并且增加–eval参数,表示边训练边测试:
export CUDA_VISIBLE_DEVICES=0python -u tools/train.py -c configs/faster_rcnn_r50_fpn_1x.yml \ -o pretrain_weights=https://paddlemodels.bj.bcebos.com/object_detection/faster_rcnn_r50_fpn_1x.tar \ finetune_exclude_pretrained_params=['cls_score','bBox_pred'] \ --eval如果想让模型收敛的更好,可以继续增大max_iters,训练2x、3x等模型,但并不是意味着训练轮数越多效果越好,要防止过拟合的出现。
训练完之后,可以任意挑选一张测试集图片进行测试,输出的结果图片会默认保存在output目录中:
python -u tools/infer.py -c configs/faster_rcnn_r50_fpn_1x.yml \ --infer_img=path/to/dataset/2572.jpeg 总结 以上是内存溢出为你收集整理的PaddleDetection使用教程全部内容,希望文章能够帮你解决PaddleDetection使用教程所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)