paddle学习

1. paddlepaddle安装

1.1 paddle_env 搭建与测试

conda create -n paddle_env python=3.9 -y

conda activate paddle_env

# 如果不能运行, 那就把 https 改为 http
# conda install paddlepaddle-gpu==2.2.2 cudatoolkit=10.2
conda install paddlepaddle-gpu==2.2.2 cudatoolkit=10.2 --channel https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/Paddle/ -y


python -c 'import paddle; paddle.utils.run_check()'
python -c "import paddle; print(paddle.__version__)"

1.2 PaddleDetection 测试

# https://github.com/PaddlePaddle/PaddleDetection.git
git clone https://github.do/https://github.com/PaddlePaddle/PaddleDetection.git
python dataset/voc/download_voc.py

cd PaddleDetection
python setup.py install
python ppdet/modeling/tests/test_architectures.py  # 输出 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. 数据集准备

python dataset/voc/download_voc.py  # 我下载了然后代码中有 bug, 然后我就重新调整了代码. 修复过程如下:
"""
note: 通过 ariac2 下载的会提示 md5sum 不符合, 不知道是不是我的问题; 我是通过aistudio保存并下载的, 放置到了硬盘<扬帆起航: /LY/datasets/voc>
1. 首先下载数据集: https://aistudio.baidu.com/aistudio/datasetdetail/9837
2. 将3个压缩包放入: {PaddleDetection}/dataset/voc/
3. 修改代码:  vim {anaconda3/envs/paddle_env}/lib/python3.9/site-packages/paddledet-2.3.0-py3.9.egg/ppdet/utils/download.py  的 395行附近, 在下面添加 `return fullname`
4. 运行 `python dataset/voc/download_voc.py `
"""

上述的数据集比较大, 因此我选择其中一个小的;

python dataset/roadsign_voc/download_roadsign_voc.py

下载完之后数据集格式为:

  ├── download_roadsign_voc.py
  ├── annotations
  │   ├── road0.xml
  │   ├── road1.xml
  │   |   ...
  ├── images
  │   ├── road0.png
  │   ├── road1.png
  │   |   ...
  ├── label_list.txt
  ├── train.txt
  ├── valid.txt

3. 配置文件解释与修改指南

configs/yolov3/yolov3_mobilenet_v1_roadsign.yml

文件内容如下:

_BASE_: [
  '../datasets/roadsign_voc.yml',  # 主要说明了训练数据和验证数据的路径
  '../runtime.yml',  # 主要说明了公共的运行参数,比如说是否使用GPU、每多少个epoch存储checkpoint等
  '_base_/optimizer_40e.yml',  # 主要说明了学习率和优化器的配置。
  '_base_/yolov3_mobilenet_v1.yml',  # 主要说明模型、和主干网络的情况。
  '_base_/yolov3_reader.yml',  # 主要说明数据读取器配置,如batch size,并发加载子进程数等,同时包含读取后预处理操作,如resize、数据增强等等
]
pretrain_weights: https://paddledet.bj.bcebos.com/models/yolov3_mobilenet_v1_270e_coco.pdparams
weights: output/yolov3_mobilenet_v1_roadsign/model_final

YOLOv3Loss:
  ignore_thresh: 0.7
  label_smooth: true

4. 训练

export CUDA_VISIBLE_DEVICES=0 #windows和Mac下不需要执行该命令. 
python tools/train.py -c configs/yolov3/yolov3_mobilenet_v1_roadsign.yml
# 如果是多卡, 则为: 
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/yolov3/yolov3_mobilenet_v1_roadsign.yml
# 如果做微调(形状不匹配的参数将自动忽略):
export CUDA_VISIBLE_DEVICES=0
  # 如果模型中参数形状与加载权重形状不同,将不会加载这类参数
python -m paddle.distributed.launch --gpus 0 tools/train.py -c configs/yolov3/yolov3_mobilenet_v1_roadsign.yml -o pretrain_weights=output/model_final
# 模型恢复训练, 参数  -r
export CUDA_VISIBLE_DEVICES=0 #windows和Mac下不需要执行该命令
python tools/train.py -c configs/yolov3/yolov3_mobilenet_v1_roadsign.yml -r output/faster_rcnn_r50_1x_coco/10000

5. 评估

# paddle 线上模型(如果是自己训练的 `weights` 则位于: output 文件夹)
export CUDA_VISIBLE_DEVICES=0 #windows和Mac下不需要执行该命令
python tools/eval.py -c configs/yolov3/yolov3_mobilenet_v1_roadsign.yml -o weights=https://paddledet.bj.bcebos.com/models/yolov3_mobilenet_v1_roadsign.pdparams
# 评估自己训练的了模型
export CUDA_VISIBLE_DEVICES=0 #windows和Mac下不需要执行该命令
python tools/eval.py -c  configs/yolov3/yolov3_mobilenet_v1_roadsign.yml -o weights=output/yolov3_mobilenet_v1_roadsign/model_final.pdparams
# 边训练, 边评估, 参数:  --eval
export CUDA_VISIBLE_DEVICES=0 #windows和Mac下不需要执行该命令
python -m paddle.distributed.launch --gpus 0 tools/train.py -c configs/yolov3/yolov3_mobilenet_v1_roadsign.yml --eval

# 在训练中交替执行评估, 评估在每个epoch训练结束后开始。每次评估后还会评出最佳mAP模型保存到best_model文件夹下。
# 如果验证集很大,测试将会比较耗时,建议调整configs/runtime.yml 文件中的 snapshot_epoch配置以减少评估次数,或训练完成后再进行评估。
# 通过 json文件 评估(#TODO: 有问题)
export CUDA_VISIBLE_DEVICES=0 #windows和Mac下不需要执行该命令
# 下面的指令中没有加载模型的选项,则使用配置文件中weights的默认配置
# json文件必须命名为bbox.json或者mask.json,放在evaluation目录下。
python tools/eval.py -c configs/yolov3/yolov3_mobilenet_v1_roadsign.yml \
             --json_eval \
             -output_eval evaluation/

6. 预测

python tools/infer.py -c configs/yolov3/yolov3_mobilenet_v1_roadsign.yml --infer_img=demo/000000570688.jpg -o weights=https://paddledet.bj.bcebos.com/models/yolov3_mobilenet_v1_roadsign.pdparams
# 设置参数预测
export CUDA_VISIBLE_DEVICES=0 #windows和Mac下不需要执行该命令
python tools/infer.py -c configs/yolov3/yolov3_mobilenet_v1_roadsign.yml \
                    --infer_img=demo/road554.png \
                    --output_dir=infer_output/ \
                    --draw_threshold=0.5 \  # 可选参数,
                    -o weights=output/yolov3_mobilenet_v1_roadsign/model_final \
                    --use_vdl=Ture
                    
                    # keep_top_k表示设置输出目标的最大数量,默认值为100,用户可以根据自己的实际情况进行设定。

7. 训练可视化

  1. loss 变化趋势
  2. mAP变化趋势
export CUDA_VISIBLE_DEVICES=0 #windows和Mac下不需要执行该命令
# 训练过程中需要添加的参数  --use_vdl=true    --vdl_log_dir=vdl_dir/scalar 
python tools/train.py -c configs/yolov3/yolov3_mobilenet_v1_roadsign.yml \
                        --use_vdl=true \
                        --vdl_log_dir=vdl_dir/scalar \
# 然后启动 VisualDL 查看日志
# 下述命令会在127.0.0.1上启动一个服务,支持通过前端web页面查看,可以通过--host这个参数指定实际ip地址
visualdl --logdir vdl_dir/scalar/

note: 更详尽的参数列表(https://github.com/PaddlePaddle/PaddleDetection/blob/release/2.4/docs/tutorials/GETTING_STARTED_cn.md):

FLAG支持脚本用途默认值备注
-cALL指定配置文件None必选,例如-c configs/faster_rcnn/faster_rcnn_r50_fpn_1x_coco.yml
-oALL设置或更改配置文件里的参数内容None相较于-c设置的配置文件有更高优先级,例如:-o use_gpu=False
–evaltrain是否边训练边测试False如需指定,直接--eval即可
-r/–resume_checkpointtrain恢复训练加载的权重路径None例如:-r output/faster_rcnn_r50_1x_coco/10000
–slim_configALL模型压缩策略配置文件None例如--slim_config configs/slim/prune/yolov3_prune_l1_norm.yml
–use_vdltrain/infer是否使用VisualDL记录数据,进而在VisualDL面板中显示FalseVisualDL需Python>=3.5
–vdl_log_dirtrain/infer指定 VisualDL 记录数据的存储路径train:vdl_log_dir/scalar infer: vdl_log_dir/imageVisualDL需Python>=3.5
–output_evaleval评估阶段保存json路径None例如 --output_eval=eval_output, 默认为当前路径
–json_evaleval是否通过已存在的bbox.json或者mask.json进行评估False如需指定,直接--json_eval即可, json文件路径在--output_eval中设置
–classwiseeval是否评估单类AP和绘制单类PR曲线False如需指定,直接--classwise即可
–output_dirinfer/export_model预测后结果或导出模型保存路径./output例如--output_dir=output
–draw_thresholdinfer可视化时分数阈值0.5例如--draw_threshold=0.7
–infer_dirinfer用于预测的图片文件夹路径None--infer_img--infer_dir必须至少设置一个
–infer_imginfer用于预测的图片路径None--infer_img--infer_dir必须至少设置一个,infer_img具有更高优先级
–save_txtinfer是否在文件夹下将图片的预测结果保存到文本文件中False可选

8. 模型导出

在模型训练过程中保存的模型文件是包含前向预测和反向传播的过程,在实际的工业部署则不需要反向传播,因此需要将模型进行导成部署需要的模型格式。 在PaddleDetection中提供了 tools/export_model.py脚本来导出模型(https://github.com/PaddlePaddle/PaddleDetection/blob/release/2.4/deploy/EXPORT_MODEL.md)

python tools/export_model.py -c configs/yolov3/yolov3_mobilenet_v1_roadsign.yml --output_dir=./inference_model  -o weights=output/yolov3_mobilenet_v1_roadsign/best_model

预测模型会导出到inference_model/yolov3_mobilenet_v1_roadsign目录下,分别为infer_cfg.yml, model.pdiparams, model.pdiparams.info,model.pdmodel 如果不指定文件夹,模型则会导出在output_inference

9. 模型压缩

文档: https://github.com/PaddlePaddle/PaddleDetection/blob/release/2.4/configs/slim/README.md

pip install paddleslim -i https://pypi.tuna.tsinghua.edu.cn/simple

10. 预测部署

文档: https://github.com/PaddlePaddle/PaddleDetection/blob/release/2.4/deploy/python.md

python deploy/python/infer.py --model_dir=./output_inference/yolov3_mobilenet_v1_roadsign --image_file=demo/road554.png --device=GPU

reference

@online{PaddlePaddle2022Mar,
author = {PaddlePaddle},
title = {{PaddleDetection}},
organization = {GitHub},
year = {2022},
month = {3},
date = {2022-03-30},
urldate = {2022-03-30},
language = {english},
hyphenation = {english},
note = {[Online; accessed 30. Mar. 2022]},
url = {https://github.com/PaddlePaddle/PaddleDetection/blob/release/2.4/docs/tutorials/GETTING_STARTED_cn.md},
abstract = {{Object Detection toolkit based on PaddlePaddle. It supports object detection, instance segmentation, multiple object tracking and real-time multi-person keypoint detection. - PaddleDetection/GETTING_STARTED_cn.md at release/2.4 · PaddlePaddle/PaddleDetection}}
}

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

或许,这就是梦想吧!

如果对你有用,欢迎打赏。

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值