PaddleDetection的学习笔记(PP-YOLOE)

目录

  • 1 PaddleDetection介绍
  • 2 安装PaddleDetection
  • 3 模型训练/评估/预测
    • infer.py —— 模型预测
  • 4 模型配置文件说明——model.yml
    • 优化器设置:optimizer.yml
  • 5 代码说明
    • 5.1 ppdet/optimizer.py:优化器设置
    • 5.2 tools/infer.py
      • 5.2.1 路径预设代码
    • 4.2 utils/post_process.py
      • 4.2.1 corner_post_process()
        • 代码说明:
  • 6 PP-YOLOE
    • 5.1 PyTorch实现:[\[miemie2013/miemiedetection\]](https://github.com/miemie2013/miemiedetection)
    • 5.2 学习笔记
      • PP-YOLOE对bias项的weight_decay是怎么处理的呢?
      • 如何在使用PyTorch实现L2Decay呢?
  • 7 自定义 Paddle-C++算子
    • 数据类型宏转换

1 PaddleDetection介绍

PaddleDetection是由百度推出的目标检测开源模型库;

2 安装PaddleDetection

Python版本:[PaddlePaddle/PaddleDetection],关于PaddleDetection兼容的python版本,需要到其repo中去查看安装说明;
PaddlePaddle版本:[PaddlePaddle/PaddleDetection],也需要到安装说明中查看,一般是在满足最低版本要求后安装最新的稳定版本;

3 模型训练/评估/预测

infer.py —— 模型预测

# 预测
python tools/infer.py -c configs/faster_rcnn_r50_1x.yml --infer_img=demo/000000570688.jpg

# 在CPU上进行推理
python tools/infer.py -c configs/ppyolo/ppyolo_r50vd_dcn_1x_coco.yml -o use_gpu=false weights=https://paddledet.bj.bcebos.com/models/ppyolo_r50vd_dcn_1x_coco.pdparams --infer_img=demo/000000014439.jpg
# CPU推理需要显式指定:use_gpu=false
# demo/000000014439.jpg已经内置在PaddleDetection的repo文件夹中

Note:在output目录下生成的同名的测试文件会被替换。

4 模型配置文件说明——model.yml

在PaddleDetection使用model.yml来配置模型的结构,配置文件的路径一般如下所示:

PaddleDetection/configs/model/model_***_coco.yml

模型参数:

  • PostProcess:后处理操作,(仅用于“CornerNet”模型)

优化器设置:optimizer.yml

参数 描述
TrainReader.batch_size 每张卡上的batch-size

5 代码说明

5.1 ppdet/optimizer.py:优化器设置

ppdet/optimizer.py包含了PaddleDetection优化器的设置代码;

Class Description
OptimizerBuilder 根据config的设置构建优化器

5.2 tools/infer.py

用于进行图像的预测

5.2.1 路径预设代码

import os, sys
# add python path of PadleDetection to sys.path
parent_path = os.path.abspath(os.path.join(__file__, *(['..'] * 2)))
if parent_path not in sys.path:
    sys.path.append(parent_path)
    # 使用sys.path.append添加环境变量,在脚本执行完成之后则会失效

4.2 utils/post_process.py

用于目标检测的后处理;

4.2.1 corner_post_process()

用于CornerNet的后处理函数;
参数:

  • results:
    dict{‘bbox’, ‘im_id’},检测结果;其中字典中的属性含义如下:
    • bbox: 检测框信息,包含类别和坐标信息
    • im_id: 图像id

代码说明:

def corner_post_process(results, config, num_classes):
    detections = results['bbox'][0]
    keep_inds = (detections[:, 1] > -1)
    detections = detections[keep_inds]
    labels = detections[:, 0]
    scores = detections[:, 1]
    boxes = detections[:, 2:6]
    cls_boxes = get_nms_result(
        boxes, scores, config, num_classes, background_label=-1, labels=labels)
    results.update({'bbox': (cls_boxes, [[len(cls_boxes)]])})

6 PP-YOLOE

关于PP-YOLOE的论文学习笔记,请参考《PP-YOLOE的译读笔记》;
学习资料:
Paddle目标检测算法课程——PPYOLOE
Paddle目标检测算法课程——PPYOLOE | PPT
技术一览表:

名称 超参数
Input size 640
Down sample AdaptiveAvgPool2d
(目前是在Head部分的代码中看到此算子作为下采样的方式)
Act Swish (SiLU)
Head PPYOLOEHead
Optimizer SGD with momentum and L2-regularization
Weight decay 0.0005

5.1 PyTorch实现:[miemie2013/miemiedetection]

关于这个repo的说明文档,请参阅《PPYOLO、PPYOLOv2、PPYOLOE的pytorch实现三合一!尽在miemiedetection!》;

5.2 学习笔记

PP-YOLOE对bias项的weight_decay是怎么处理的呢?

关于PP-YOLOE对bias项weight_decay的处理,请参考[PaddleDetection | backbones/cspresnet.py];
总的来说,就是对BN层的所有参数不使用weight_decay,即:

self.bn = nn.BatchNorm2D(
    ch_out,
    weight_attr=ParamAttr(regularizer=L2Decay(0.0)),
    bias_attr=ParamAttr(regularizer=L2Decay(0.0)))

如何在使用PyTorch实现L2Decay呢?

这里我们参考的是[miemie2013/miemiedetection]的实现方法:[miemiedetection]是从[mmdetection]中移植过来的,这里继承了mmdetection的书写方式[code – add_param_group]:
PaddleDetection的学习笔记(PP-YOLOE)_第1张图片
这里的model.add_param_group调用的是模型的.add_param_group()方法[ppyoloe.py – add_param_group()];

7 自定义 Paddle-C++算子

数据类型宏转换

Paddle文档:《自定义C++算子-PaddlePaddle文档 | 支持多种数据类型》

你可能感兴趣的:(《南溪的目标检测学习笔记》,无人驾驶,PaddleDetection)