☰
PaddleSeg 工业质检子项目中的 PSS-DET:基于 RCNN 增强的服务器端实用目标检测方案
2026/9/26 7:12:58 网站建设 项目流程
  • 人工智能
  • 计算机视觉
  • 预训练

【免费下载链接】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.

项目地址:https://gitcode.com/gh_mirrors/pa/PaddleSeg
点击查看免费下载

本文围绕 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 之所以“实用”,在于三点:

  1. 强预训练基座:使用基于 PaddleClas SSLD 蒸馏方案训练的 ResNet50-vd 预训练模型(在 ImageNet1k 验证集 Top1 Acc 达 82.39%),显著优于普通 ImageNet 预训练权重。
  2. DCNv2 可变形卷积:在 ResNet 的 res3、res4、res5 三个阶段启用可变形卷积 v2,提升几何形变建模能力。
  3. 训练与后处理技巧:采用 Libra R-CNN 的 bbox assigner(BBoxLibraAssigner)、DIoU Loss、AutoAugment 数据增强、3x(36 epoch)学习率调度等,共同提升收敛质量与最终精度。

二、模型库

根据 README_en.md 的模型库表格,该方案在 COCO 上提供的模型如下:

Backbone网络类型每张 GPU 图片数学习率策略推理速度(fps)Box APMask AP下载配置文件
ResNet50-vd-FPN-Dcnv2Faster R-CNN23x61.42541.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: BBoxPostProcess
  • pretrain_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.

项目地址:https://gitcode.com/gh_mirrors/pa/PaddleSeg
点击查看免费下载

相关推荐

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询