- 人工智能
- 计算机视觉
- 预训练
【免费下载链接】PaddleSeg
Easy-to-use image segmentation library with awesome pre-trained model zoo, supporting wide-range of practical tasks in Semantic Segmentation, Interactive Segmentation, Panoptic Segmentation, Image Matting, 3D Segmentation, etc.
本文围绕 QualityInspector 工业质检解决方案 中内置的 RCNN 增强检测算法(PSS-DET,Practical Server Side Detection),完整解读其技术构成、模型库与配置文件组织方式,并结合仓库源码给出从训练、验证到推理的实操路径。读完本文,你将掌握这套以 ResNet50-vd + SSLD 预训练为基座、融合 FPN + DCNv2 等算子的两阶段检测方案在 COCO 任务上的效果、其配置文件每个字段的语义,以及如何在 QualityInspector 中按统一配置方式复用它。
一、方案概述
近年来,目标检测一直是学术界与工业界共同关注的图像任务。PaddleDetection 与 PaddleClas 配合,推出了一面向服务器端部署的实用检测方案 PSS-DET(Practical Server Side Detection)。其核心思想是:用更强的预训练模型替代 ImageNet 常规预训练权重,再用 PaddleDetection 提供的丰富算子(FPN、DCNv2、Libra R-CNN 相关组件等)组装出精度与速度兼备的两阶段检测器。
在 QualityInspector 仓库中,该方案以 contrib/QualityInspector/configs/det/rcnn_enhance/README_en.md 为入口文档,具体配置位于 contrib/QualityInspector/configs/det/rcnn_enhance/ 目录下,包含:
- 主配置 faster_rcnn_enhance_3x_coco.yml
- 基础配置目录 _base_(含 faster_rcnn_enhance.yml、faster_rcnn_enhance_reader.yml、optimizer_3x.yml)
同时,仓库中还保留了同族算法的对照配置(如 faster_rcnn/README.md、cascade_rcnn、mask_rcnn 等),方便横向对比。
关键组成与原理
PSS-DET 之所以“实用”,在于三点:
- 强预训练基座:使用基于 PaddleClas SSLD 蒸馏方案训练的 ResNet50-vd 预训练模型(在 ImageNet1k 验证集 Top1 Acc 达 82.39%),显著优于普通 ImageNet 预训练权重。
- DCNv2 可变形卷积:在 ResNet 的 res3、res4、res5 三个阶段启用可变形卷积 v2,提升几何形变建模能力。
- 训练与后处理技巧:采用 Libra R-CNN 的 bbox assigner(
BBoxLibraAssigner)、DIoU Loss、AutoAugment 数据增强、3x(36 epoch)学习率调度等,共同提升收敛质量与最终精度。
二、模型库
根据 README_en.md 的模型库表格,该方案在 COCO 上提供的模型如下:
| Backbone | 网络类型 | 每张 GPU 图片数 | 学习率策略 | 推理速度(fps) | Box AP | Mask AP | 下载 | 配置文件 |
|---|---|---|---|---|---|---|---|---|
| ResNet50-vd-FPN-Dcnv2 | Faster R-CNN | 2 | 3x | 61.425 | 41.5 | - | 预训练权重下载(见下文) | faster_rcnn_enhance_3x_coco.yml |
- 推理速度在单张 Tesla V100 上测得,batch size 为 1;
- Box AP 为 COCO mAP(IoU=0.5:0.95);
- 训练基于 COCO2017 数据集(train2017 训练、val2017 验证)。
注:仓库内不内置权重文件,模型权重需从 PaddleDetection 模型库中下载;可参考同目录下其他 README(如 faster_rcnn/README.md)中的下载链接模式,将
faster_rcnn_enhance_3x_coco.pdparams与ResNet50_vd_ssld_v2_pretrained.pdparams下载后按配置中pretrain_weights/weights指向使用。
三、配置文件全解
PSS-DET 的配置采用 PaddleDetection 的动态图配置风格:主配置通过_BASE_继承若干基础配置,字段即 Python 可解析的对象描述。
3.1 主配置
faster_rcnn_enhance_3x_coco.yml 内容如下:
_BASE_: [ '../datasets/coco_detection.yml', '../runtime.yml', '_base_/optimizer_3x.yml', '_base_/faster_rcnn_enhance.yml', '_base_/faster_rcnn_enhance_reader.yml', ] weights: output/faster_rcnn_enhance_r50_3x_coco/model_final_BASE_依次继承:数据集配置(coco_detection.yml)、运行环境配置(runtime.yml)、3x 优化器配置、模型结构配置、数据读取器配置;weights指定训练产出的模型权重路径前缀,训练过程会在此目录下生成 checkpoint 与model_final。
3.2 数据集与运行环境
coco_detection.yml 定义:
metric: COCO、num_classes: 80;TrainDataset使用COCODataSet,指向dataset/coco下的train2017与annotations/instances_train2017.json;EvalDataset指向val2017,TestDataset支持ImageFolder方式(anno_path也支持 txt 标注列表)。
runtime.yml 定义运行环境与导出参数:
use_gpu/use_xpu/use_mlu/use_npu:选择计算设备;save_dir: output、snapshot_epoch: 1、log_iter: 20;export小节控制导出:post_process: True(导出时包含后处理)、nms: True(包含 NMS)、fuse_conv_bn: False。
3.3 优化器与学习率(3x 调度)
optimizer_3x.yml:
epoch: 36 LearningRate: base_lr: 0.02 schedulers: - !PiecewiseDecay gamma: 0.1 milestones: [24, 33] - !LinearWarmup start_factor: 0. steps: 1000 OptimizerBuilder: optimizer: momentum: 0.9 type: Momentum regularizer: factor: 0.0001 type: L2- 共训练 36 个 epoch(3x 策略);
- 基础学习率 0.02,采用 1000 步线性 warmup(从 0 起步),在第 24、33 epoch 处按 0.1 倍率衰减;
- 优化器为 Momentum(动量 0.9),配合 L2 权重衰减(factor 0.0001)。
3.4 模型结构:faster_rcnn_enhance.yml
这是 PSS-DET 的核心,见 faster_rcnn_enhance.yml。逐段解读:
整体架构
architecture: FasterRCNN pretrain_weights: https://paddledet.bj.bcebos.com/models/pretrained/ResNet50_vd_ssld_v2_pretrained.pdparams FasterRCNN: backbone: ResNet neck: FPN rpn_head: RPNHead bbox_head: BBoxHead bbox_post_process: BBoxPostProcesspretrain_weights指向 SSLDv2 蒸馏得到的 ResNet50-vd 预训练权重,这是 PSS-DET 精度优势的基座;- 检测头组件:RPN 候选框网络 + FPN 特征金字塔 + BBoxHead 两阶段分类回归 + 后处理。
骨干网络 ResNet(DCNv2 增强)
ResNet: depth: 50 norm_type: bn variant: d freeze_at: 0 return_idx: [0,1,2,3] num_stages: 4 dcn_v2_stages: [1,2,3] lr_mult_list: [0.05, 0.05, 0.1, 0.15]variant: d表示 ResNet-vd(ResNet-D 结构,stage 入口采用 1x1 卷积下采样,特征保留更好);return_idx: [0,1,2,3]输出 res2~res5 四个阶段的特征图供 FPN 使用;dcn_v2_stages: [1,2,3]在 res3、res4、res5(索引从 0 开始,0 代表 res2)三个阶段启用 DCNv2 可变形卷积;lr_mult_list为各 stage 的倍率学习率(前两阶段 0.05,后两阶段 0.1/0.15),让骨干浅层缓慢更新、深层充分适配检测任务。
特征金字塔 FPN
FPN: in_channels: [256, 512, 1024, 2048] out_channel: 64- 输入为 res2~res5 的通道数,输出通道压缩为 64,兼顾多尺度特征融合与计算量。
RPN 与 Proposal
RPNHead: anchor_generator: aspect_ratios: [0.5, 1.0, 2.0] anchor_sizes: [[32], [64], [128], [256], [512]] strides: [4, 8, 16, 32, 64] rpn_target_assign: batch_size_per_im: 256 fg_fraction: 0.5 negative_overlap: 0.3 positive_overlap: 0.7 use_random: True train_proposal: min_size: 0.0 nms_thresh: 0.7 pre_nms_top_n: 2000 post_nms_top_n: 2000 topk_after_collect: True test_proposal: min_size: 0.0 nms_thresh: 0.7 pre_nms_top_n: 500 post_nms_top_n: 300- 五层金字塔各对应 5 组 anchor 尺寸(32~512),长宽比 0.5/1.0/2.0;
- RPN 训练时每张图采样 256 个 anchor(正样本比例 0.5),正负样本 IoU 阈值分别为 0.7/0.3;
- 训练时保留 2000 个 proposal,推理时先取 500 再 NMS 保留 300 个,兼顾召回与速度。
BBoxHead 与 Libra 分配
BBoxHead: head: TwoFCHead roi_extractor: resolution: 7 sampling_ratio: 0 aligned: True bbox_assigner: BBoxLibraAssigner bbox_loss: DIouLoss TwoFCHead: out_channel: 1024 BBoxLibraAssigner: batch_size_per_im: 512 bg_thresh: 0.5 fg_thresh: 0.5 fg_fraction: 0.25 use_random: True DIouLoss: loss_weight: 10.0 use_complete_iou_loss: true- ROI 提取采用 aligned=True 的 RoIAlign,输出 7×7;
- 分类头为 TwoFCHead(1024 维);
BBoxLibraAssigner源自 Libra R-CNN 的平衡采样思路:每张图采样 512 个样本,正负样本阈值均为 0.5,正样本比例 0.25;- 回归损失采用 DIoU Loss(
loss_weight: 10.0,use_complete_iou_loss: true表示使用 CIoU 变体),对框回归的收敛更友好。
后处理
BBoxPostProcess: decode: RCNNBox nms: name: MultiClassNMS keep_top_k: 100 score_threshold: 0.05 nms_threshold: 0.5- 解码后按类别做 MultiClassNMS,每个类别保留 Top-100,置信度阈值 0.05,NMS IoU 阈值 0.5。
3.5 数据读取器:faster_rcnn_enhance_reader.yml
reader 配置 定义训练/验证/测试三套读取管线:
- TrainReader:
Decode→AutoAugment(autoaug_type v1)→RandomResize(在 384~672 十档短边中随机选择,保持长宽比,interp=2)→RandomFlip(0.5)→NormalizeImage(ImageNet 均值方差)→Permute;batch 级PadBatch(pad_to_stride 32),batch_size=2,shuffle、drop_last、use_shared_memory; - EvalReader / TestReader:
Decode→Resize(target_size 640×640,keep_ratio)→NormalizeImage→Permute,batch_size=1,测试时固定尺度、不打乱顺序。
多尺度随机训练(RandomResize)与固定尺度验证,是训练阶段精度与测试阶段稳定性的关键配置。
四、训练、验证与推理
QualityInspector 统一封装了检测训练/验证工具,见 docs/det_seg/train_eval.md,检测脚本位于tools/det/下。
4.1 训练
单卡训练:
python3 tools/det/train.py -c configs/det/rcnn_enhance/faster_rcnn_enhance_3x_coco.yml --use_vdl=true --vdl_log_dir=./vdl_dir/scalar --eval多卡训练:
CUDA_VISIBLE_DEVICES=0,1 python3 -m paddle.distributed.launch tools/det/train.py -c configs/det/rcnn_enhance/faster_rcnn_enhance_3x_coco.yml --use_vdl=true --vdl_log_dir=./vdl_dir/scalar --eval--eval表示训练过程中周期性评估;--use_vdl与--vdl_log_dir用于 VisualDL 可视化;- 训练产物默认保存在
./output/faster_rcnn_enhance_r50_3x_coco/(由主配置的weights决定); - 若更换为其他质检数据集(如 Magnetic-tile-defect-datasets),只需将数据整理为 COCO 格式,并把
num_classes、dataset_dir、anno_path等在 coco_detection.yml 中对应修改即可。
4.2 验证
python3 tools/det/eval.py -c configs/det/rcnn_enhance/faster_rcnn_enhance_3x_coco.yml -o weights=./output/faster_rcnn_enhance_r50_3x_coco/model_final.pdparams-o可覆盖配置文件中的全局变量(此处覆盖weights指向最终权重);- 目前仅支持单卡评估;输出 COCO 风格的 mAP 结果(Box AP)。
4.3 推理
python3 tools/det/infer.py -c configs/det/rcnn_enhance/faster_rcnn_enhance_3x_coco.yml -o weights=... --infer_img=demo.jpg- 单图使用
--infer_img,目录批量推理使用--infer_dir; - 推理后处理由配置中的
BBoxPostProcess(MultiClassNMS)完成,可直接产出带框标注的检测结果。
五、在 QualityInspector 中的定位与延伸
PSS-DET 是 QualityInspector 检测算法库中的一员。QualityInspector 的定位是“工业质检全流程解决方案”,支持检测、分割、检测+RoI 分割串联等可配置方案。使用该方案时有几点提示:
- 配置即复用:QualityInspector 仅保留部分算法配置文件,但可直接将 PaddleDetection 中任意检测算法的 config 放入
configs/det/使用(见 README.md 与 train_eval.md); - 对照参考:仓库中同目录下的 faster_rcnn、cascade_rcnn、mask_rcnn、dcn 等 README 展示了不同骨干(ResNet50-vd-SSLDv2、HRNet、Swin 等)与不同检测头(Cascade、Mask、DCN 系列)的搭配,可作为选型参考;
- 数据要求:该方案按 COCO 80 类训练;用于质检场景时需修改
num_classes并准备对应 COCO 格式标注,同时可参考 缺陷检测数据集配置 了解内置的质检数据集配置形态。
六、总结
PSS-DET(RCNN 增强方案)通过SSLD 蒸馏的 ResNet50-vd 预训练 + FPN 多尺度融合 + DCNv2 可变形卷积 + Libra 平衡采样 + DIoU/CIoU 回归损失 + AutoAugment 与 3x 训练调度的组合,在 COCO 上实现了单卡 V100 约 61 FPS 的推理速度与 41.5 Box AP 的精度平衡,是面向服务器端部署的实用两阶段检测基线。对质检等垂直场景,可按本文第三节的配置解析逐项替换骨干、类别数与数据集路径,通过 QualityInspector 统一的训练/评估/推理工具快速完成从数据到模型的全流程落地。
- 人工智能
- 计算机视觉
- 预训练
【免费下载链接】PaddleSeg
Easy-to-use image segmentation library with awesome pre-trained model zoo, supporting wide-range of practical tasks in Semantic Segmentation, Interactive Segmentation, Panoptic Segmentation, Image Matting, 3D Segmentation, etc.
相关推荐
PSS-DET 服务器端实用目标检测方案解析:基于 Faster R-CNN Enhance 的配置、训练与工业质检实战
PSS DET 服务器端实用目标检测方案解析:基于 Faster R CNN Enhance 的配置、训练与工业质检实战 本篇技术指南围绕 PaddleSeg
人工智能计算机视觉预训练PaddleDetection 服务器端实用目标检测方案 PSS-DET:配置详解与源码实现解析
PaddleDetection 服务器端实用目标检测方案 PSS DET:配置详解与源码实现解析 PSS DET(Practical Server Side D
人工智能深度学习计算机视觉PaddleDetection 服务器端实用目标检测方案 PSS-DET:Faster R-CNN Enhance 配置与源码深度解析
PaddleDetection 服务器端实用目标检测方案 PSS DET:Faster R CNN Enhance 配置与源码深度解析 PSS DET(Prac
人工智能深度学习计算机视觉
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考