
做工业表面质量缺陷检测这几年我换过不少模型最深的感受是能上产线的算法往往不是论文里涨点最猛的那个而是最皮实、最好调、出错时可解释的那个。今天要聊的方案名字听起来很理工科——Faster R-CNN 做检测框架ResNet50 做骨干PAFPN 做多尺度特征融合用 COCO 预训练权重初始化再跑 1x 训练策略最后在检测头旁边挂一个分割分支同时输出缺陷框和像素掩码。说直白点就是“检测加分割一把梭”。我当时的场景是一条模拟金属零部件质检线目标很明确把划痕、压坑、脏污三类表面缺陷全部找出来既要给检测框又要给精确到像素的掩码。因为只有框没有掩码现场根本没法判断这条划痕到底多长多宽、是否超出公差范围。这套方案从数据准备到模型上线前后折腾了一个多月中间踩了不少坑也沉淀出一些可以直接抄作业的思路。如果你也在做工业表面质量检测、缺陷识别或者正准备从零搭建一套能跑的检测加分割 baseline这篇文章应该能帮你省下不少时间。1. 项目背景与核心思路1.1 表面缺陷检测难在哪表面缺陷检测看起来只是“找异常”但一到真实场景就会冒出一堆问题。我处理的金属冲压件表面有拉丝纹理正常纹理和缺陷在灰度上非常接近这直接让“找异常”变成了“在高度相似的模式里找微小的偏差”。缺陷尺度跨度极大是第一个麻烦。脏污可能占图像的三分之一压坑是中等大小的块状目标划痕却可能只有十几个像素宽细得像一根头发丝。用单一尺度的特征去做很容易顾此失彼照顾了大块脏污就丢了细小划痕。正常纹理造成的误报是第二个麻烦。拉丝纹路在某个光照角度下视觉效果跟轻微划痕几乎一样模型如果学的是“纹理突变就是缺陷”误检率会高到没法看。现场工程师看到满屏误检框第一反应就是关掉这套系统。样本极不均衡是第三个麻烦。压坑属于偶发缺陷一个月可能攒不到一百个样本划痕却到处都是。如果不做采样策略模型训练出来基本只会认划痕别的缺陷全当背景处理。这三点叠加决定了单纯用分类网络或者普通单阶段检测器根本压不住。我需要一个能同时处理多尺度、区分细微纹理差异、并且在少数类上依然有召回能力的模型结构这也是整套方案最初的设计动因。1.2 方案的目标拆解整个项目最后收敛成三个可量化的目标这里也建议你在自己的项目里先想清楚再动手。第一是检出率。细小划痕是漏检重灾区必须尽可能拉回来。当时定的内部指标是关键缺陷漏检率低于 2%。这里的“关键缺陷”指长度超过一定阈值、位于关键表面的划痕和压坑。工业质检和互联网推荐不一样漏掉一个缺陷可能意味着整批产品出问题风险等级完全不同。第二是定位准确度。检测框要贴合目标不能一个框套住两个缺陷也不能把一条划痕截成好几段否则下游没法判断缺陷的真实数量和位置。这要求候选框回归足够精细同时对 NMS 参数和置信度阈值都要仔细调。第三是掩码可用性。分割出来的区域不能只是“有个形状”要能计算出缺陷面积、长宽、占整体加工面的比例后续才能做缺陷等级判定。模型训练完还要接一整套后处理把 mask 变成真正可量化的质检指标。检测和分割为什么要放在同一个模型里做而不是先用检测框裁图再单独跑分割从工程角度说两套模型串行会放大误差。检测框一旦偏了后续分割看到的区域就是错的而且两套模型在产线上占两份显存、两份推理时间。合并成“检测加分割”一个模型训练简单、部署简单、系统逻辑也一致。1.3 技术选型的整体判断先给结论这套选型是一个保守但正确的选择尤其适合数据规模不大、追求稳定落地的工业项目。Faster R-CNN 是两阶段检测器先由 RPN 区域建议网络生成候选区域再做 ROI 精修。它比 YOLO 这类单阶段模型慢但在召回率、小目标表现、训练稳定性上更有优势。工业质检怕漏检哪怕推理多花 20 毫秒只要能把缺陷找出来就值得。ResNet50 是骨干网络深度正好卡在计算量和表达能力的平衡点上。ResNet101 特征更强但计算量明显上涨ResNet18 又不太够用R50 是我在多个项目里觉得最稳的甜点区选择。配合 COCO 预训练权重模型一开始就具备通用的边缘、纹理、形状特征提取能力不会在小数据集上从零开始摸索。PAFPN 在 FPN 特征金字塔的基础上增加了一条自底向上的路径聚合让不同层级的特征信息传递更充分。表面缺陷跨尺度严重脏污是大目标、划痕是小目标PAFPN 对这种情况的适配度很高。1x 调度策略对应 12 个 epoch 的训练周期学习率在第 8 和第 11 个 epoch 分别衰减一次。这个设置原本是通用检测任务的惯例但用在几万张工业图像上刚刚好不容易过拟合训练时间也可控纯属“便宜又大碗”。1.4 整套方案的运行逻辑用一段话把流程串起来输入图像先经过 ResNet50 提取多层特征PAFPN 把不同尺度的特征融合生成金字塔特征图RPN 在特征图上生成候选框随后每个候选框内的特征被分别送到分类回归分支和分割分支最终同时输出缺陷类别、检测框和像素掩码。整体逻辑可以类比成“保安先圈定可疑区域专家再逐个确认并画出轮廓”每一步都是成熟组件组合起来非常稳。2. 模型骨架拆解Faster R-CNN、ResNet50 与 PAFPN2.1 两阶段检测器为什么在工业场景吃香很多人一上来就问“为什么不用 YOLO不是更快吗”。我在实际项目中确实试过单阶段方案结论是快是快但小目标召回和训练稳定性都没法满足质检要求。两阶段模型的核心优势在于“先粗筛再精修”。RPN 会先扫一遍全图给出可能包含缺陷的候选框第二阶段再针对每个候选框做精细的类别判断和位置回归。这个过程比单阶段多了一步但第二阶段的分类器和回归器拿到的是已经过滤过的特征学习压力小很多最终输出的位置精度也更高。用一个生活类比来理解单阶段方法是让一个人直接在全场同时找人两阶段方法是先让保安用望远镜扫一遍圈出可疑位置再由专家逐个确认。质检场景要的是不漏宁可候选区域多一点也要保证覆盖这个逻辑天然适合两阶段结构。从算法演进的角度看Faster R-CNN 之后出现的很多高精度模型本质还是在沿用“候选区域加区域精修”的设计哲学。很多竞赛方案最后的涨点操作也无非是在这个框架上换更强的骨干、加更多分支说明这套框架的鲁棒性和扩展性是经过大量实践验证的。2.2 ResNet50 骨干速度与精度的平衡点骨干网络是特征提取的底座。ResNet50 通过残差结构解决了深层网络梯度消失的问题在通用图像分类任务上验证过特征提取能力残差连接让模型即使加深也不容易训练崩这对工业场景里的“可复现性”来说很关键。在这个项目里我对比过 ResNet101 和 ResNet50。用 ResNet101 时 mAP 确实涨了大约 1 到 2 个点但训练时间多了四成推理帧率掉了不少。考虑到现场工控机算力有限最终选了 R50。如果你算力很充裕想冲更高精度直接把骨干替换成 ResNet101 即可框架其他部分不用动这是这套选型的一个明显好处。COCO 预训练权重在这里是真正的关键。工业缺陷数据集通常只有几千到几万张靠这点数据从头训练一个 ResNet50很难学到通用的边缘、纹理、形状特征。COCO 上训练过的模型已经见过大量真实世界目标迁移到表面缺陷检测后只需要微调就能适配新的数据域。一个容易踩的坑是“冻结骨干”。我一开始图省事把骨干全部冻结固定只训练检测头和分割头收敛确实快但最终精度上限偏低。后来改成“骨干用较小学习率微调检测头和分割头用正常学习率”精度才真正上来。迁移学习不是全都冻结就完事适度的微调才能让预训练特征真正适应工业图像的光照、纹理和缺陷模式。2.3 PAFPN 多尺度融合的实际收益表面缺陷的尺度差异比通用目标检测更极端。脏污是大块、压坑是中等块、划痕是一条细线单一特征层根本没有办法同时表达这三种形态。FPN 的思路是构建自顶向下的金字塔把高层语义信息传给低层让低层特征也具备类别判别能力。PAFPN 等于在 FPN 基础上又加了一条自底向上的路径把低层的细节纹理信息反向传给高层两条路径交汇使每一层特征都同时拥有语义信息和细节信息。这个设计特别适合“既要看全貌、又要看细节”的缺陷检测任务。我实测下来最明显的感受是PAFPN 对小目标召回提升很明显。细长划痕这类目标FPN 经常在低层特征上漏掉PAFPN 因为多了细节上传通道信噪比高了不少。具体数据上小目标类别的召回率大约提升了 5 到 8 个百分点代价只是特征图内存占用变大完全能接受。需要提醒的是处理极细长目标时单纯靠 PAFPN 还不够。我最后在输入端做了一个配合把原图保持长宽比缩放到合适分辨率而不是直接压成固定尺寸避免把细长划痕压到变形。一个模型内部的优化往往需要输入端的配合才能完全发挥出来。2.4 COCO 预训练权重的迁移价值COCO 是通用目标检测的标杆数据集包含 80 类日常目标。表面缺陷跟 COCO 里的日常物体差别很大但底层视觉特征是可复用的边缘、角点、纹理基元这些低级特征在很多视觉任务里都通用。预训练权重的作用是提供一个好的起点让模型不必从零开始学习“什么是图像特征”。把 COCO 预训练权重理解为“初始值”而不是“标准答案”这个心态很重要。初始化之后我们用工业缺陷数据做微调让模型在保留通用特征能力的同时把注意力转向表面缺陷的独特模式。微调不是推倒重来而是在一个成熟的特征空间上做领域适配。还有一个容易忽略的细节BN 层的统计量也是预训练权重的一部分。COCO 预训练模型的 BN 统计量是按自然图像分布计算的工业图光照、色调完全不同。如果冻结 BN 层模型会很难适应新域的亮度分布。我在训练时没有冻结任何 BN 层让它们随训练更新实测收敛速度和最终精度都更好。2.5 1x 调度策略怎么理解1x 是目标检测领域一个约定俗成的说法代表 12 个 epoch 的训练周期学习率在第 8 和第 11 个 epoch 时各除以 10。这种阶梯式下降的设计意图是先让模型用较大学习率快速探索最优区域再用小学习率稳步收敛到局部最优点。工业项目的数据集规模一般不大几万张图已经算多了。这个规模下 12 个 epoch 足够模型拟合跑 3x 也就是 36 个 epoch往往边际收益很低还有过拟合到训练集噪声的风险。你不用觉得“只用 12 个 epoch 是不是不够”训练不是越长越好关键是验证集指标是否稳定。学习率基线的设置也要合理解释。骨干网络加载了 COCO 预训练权重之后初始学习率直接用 0.02 会破坏预训练特征。我在配置里把骨干的学习率乘了一个 0.1 的倍率检测头和分割头是随机初始化的保持正常学习率。这样既能让骨干慢慢适配工业数据又不会让它失去预训练得到的通用特征。训练过程中我主要盯两个信号总 loss 是否持续下降、验证集 mAP 每个 epoch 是否稳步提升。如果第二个 epoch 结束 mAP 还是 0基本可以断定配置有问题我不会傻等 12 个 epoch 跑完再排查。3. 检测与分割的联合优化3.1 为什么不能只要检测框如果只是定位缺陷位置检测框确实够了。但回到真实质检需求现场工程师关心的是这条划痕多长、这个压坑面积多大、是否超过允许范围。矩形框回答不了这些问题一个框里可能只有 20% 是缺陷剩下 80% 是正常表面。分割掩码补上了这个信息缺口。每个像素都会被判定为“缺陷”或者“背景”输出的是精确轮廓后期可以直接计算面积、长轴、短轴、周长等几何特征把算法输出变成量化的质检结论。表面缺陷的等级判断很多时候就依赖这些几何参数是否超差。另一个实际好处是可视化。检测框叠加在图上现场工程师看到的只是一个个方框很难判断模型到底依据什么来判定。分割掩码叠加后缺陷形状一目了然工程师复核时能快速确认算法的判断依据这对建立现场信任非常重要。一个不被信任的检测系统在产线上很难活下去。3.2 数据标注策略与规范检测加分割任务的数据标注工作量比纯检测大不少如果一开始不统一标准后面返工成本极高。我总结了一套相对成熟的流程。多边形勾勒代替矩形框。划痕用手绘多边形标压坑用贴近边缘的多边形标脏污如果有渐变边缘以可见核心区为准不纠结模糊边界。多边形标注虽然慢但能保证 mask 分支训练时拿到的是“真实形状”而不是被矩形框强行裁剪出来的错误区域。类别定义先对齐。我们和质检工程师反复确认“什么叫划痕、什么叫压坑、什么叫脏污”还专门制作了标注样例图。不然标注人员今天按 A 标准标、明天按 B 标准标模型训练出来就是个四不像。标注标准不统一是整个数据链路里最隐蔽的坑。难例单独管理。把容易混淆的正常纹理图单独放一个文件夹定期讨论是调模型还是调整判定规则。有些视觉上的“疑似缺陷”其实符合工艺标准这类样本应该标记为背景而不是缺陷否则模型会被“对的标准答案”带偏。标注质量校验也必不可少。我抽了 10% 的标注结果让第二个人重新标对比 IoU 一致性。标注一致性低于 0.7 的类别说明定义模糊需要回去重新统一标准。这一步多花半天时间能省下后面几周的调参时间。3.3 模型输出与后处理模型输出的原始结果是检测框和分割头给出的概率图不能直接拿去用必须接后处理。我加了几步非常关键的操作。掩码二值化阈值。分割头输出的是每个像素属于缺陷的概率通常用 0.5 做二值化阈值。但工业缺陷的边缘往往模糊0.5 会让边缘区域被判成背景结果掩码整体缩水。我实测把阈值调到 0.35 到 0.4能保留更多真实边缘信息代价是部分背景可能被误标为缺陷这一步可以通过面积过滤来清洗。检测置信度阈值和 NMS 阈值。检测置信度我控制在 0.5 上下太低会产生大量误检框太高会牺牲召回。NMS 使用 0.5 的 IoU 阈值避免同一个缺陷被多个框重复套住。表面缺陷之间的重叠度一般不高这个值不需要刻意调低。面积过滤和连通域分析。后处理阶段把面积小于一定像素的零散掩码去掉再用形态学闭运算把一个大缺陷内部的小空洞补上。这一步不是模型学到的能力而是基于产线缺陷形态的先验判断能明显提升掩码的可用性。3.4 考核指标怎么定检测和分割要分开考核。检测看 mAP0.5 和 mAP[0.5:0.95]分割看 mask mIoU还要额外看工业场景更关心的漏检率、误检率和推理耗时。我推行的做法不是只看平均精度而是把缺陷按严重程度分成“关键缺陷”和“普通缺陷”两类。关键缺陷必须零漏检或者极低漏检普通缺陷允许少量漏检。模型调优时优先保证关键缺陷的召回率哪怕普通缺陷的误检多一点也可以靠后处理过滤掉。这比所有人对着一个 mAP 数字较劲更接近真实产线需要。推理耗时同样重要。检测加分割分支之后单张 1080P 图像的推理时间大约 85 毫秒对静态工位完全足够。如果产线节拍更快就得往轻量骨干、输入裁剪、推理引擎优化几个方向做文章。4. 实操配置与训练流程4.1 环境准备基础环境建议 Python 3.8 以上、PyTorch 1.8 以上、配套的 CUDA 和 cuDNN。开源检测框架安装完之后先检查编译是否通过。我每次第一次跑项目都会用一张自带的示例图片走通完整推理流程确认环境没问题再开始训练避免后面手忙脚乱。显存预算要提前算清楚。ResNet50 加 PAFPN 加检测分割双头单卡 12GB 以下会非常紧张。我的做法是 batch size 设为 4如果爆显存就开梯度累积而不是硬降输入分辨率。分辨率一旦降下来细小缺陷的像素信息就丢了后面再怎么调参也补不回来。还有一个容易被忽略的点确定随机种子。工业项目追求可复现训练前固定随机种子能让同一份数据、同一份配置跑出几乎一样的结果排查问题时才能确定“变化来自代码改动而不是随机性”。4.2 配置文件的关键参数开源检测框架的配置一般分成模型结构、数据集、训练策略三块。我把项目里改过的核心参数简化成下面这个例子注释是每个配置项的作用。model: type: FasterRCNN backbone: type: ResNet depth: 50 frozen_stages: 1 # 只冻结前一个阶段其余参与微调 neck: type: PAFPN in_channels: [256, 512, 1024, 2048] out_channels: 256 rpn_head: anchor_scales: [2, 4, 8] # 覆盖细长小目标 anchor_ratios: [0.5, 1.0, 2.0] roi_head: num_classes: 4 # 背景 划痕 压坑 脏污 mask_head: true # 打开分割分支 dataset: type: COCODataset ann_file: annotations/train.json img_prefix: images/train pipeline: - { type: LoadImageFromFile } - { type: LoadAnnotations } - { type: Resize, scale: [1333, 800] } - { type: RandomFlip } - { type: Normalize } optimizer: type: SGD lr: 0.02 momentum: 0.9 weight_decay: 0.0001 paramwise_cfg: custom_keys: backbone: { lr_mult: 0.1 } # 骨干用小学习率微调 lr_config: policy: step step: [8, 11] # 1x 调度的两个衰减点 total_epochs: 12这段配置里最值得留心的是 backbone 的 lr_mult 和 frozen_stages。前者保证微调时不过度破坏预训练特征后者能在省显存的同时保留底层特征的可塑性。anchor 参数要按缺陷形态调整。通用检测默认 anchor 偏向正方形目标但划痕是细长结构我加上了 0.5 和 2.0 的比例还增加了较小的 anchor 尺度。如果你发现细划痕漏检严重第一件事应该是检查 anchors 覆盖够不够而不是盲目加大模型。4.3 数据组织与预处理数据采用 COCO 格式组织。每个样本的 annotations 里既要包含 bbox 矩形框也要包含 segmentation 多边形坐标。类别 id 从 1 开始0 保留给背景。这个格式的好处是检测和分割共用同一套标注文件训练时不用分别读取两份数据。训练集和验证集的划分方式很关键。我按“产品批次”划分而不是按“图像”随机划分。同一批产品表面纹理风格相似如果同一批次的图像一部分进训练、一部分进验证验证集分数会虚高部署到新批次产品上立刻现原形。按批次划分更能反映模型面对新数据时的真实表现。预处理流水线我保持克制。随机翻转够用随机裁剪容易切掉细长划痕的端点我不太用。强度过大的颜色抖动会把真实缺陷颜色带歪。工业场景中真实部署时的光照一致性比数据增强的花哨程度重要得多。模型能稳定复现比在验证集上多涨半个点更有价值。4.4 训练、验证与推理训练命令本身很简单一句脚本就能启动。关键是把日志和 checkpoint 的落盘路径提前配置好方便随时回溯。训练过程中我记录三个指标总 loss、验证集 bbox mAP、验证集 mask mIoU。每个 epoch 结束都要看 checkpoint 对应的验证分数而不是等训练完全跑完再一次性评估。我遇到过训练到第 5 个 epoch 时 mAP 还在稳步上涨第 6 个 epoch 突然掉了一大截的情况排查后才发现是某个批次数据里有几张标注错位的图像。这类问题如果等到最后才看定位成本会翻好几倍。推理阶段我用 ONNX 导出模型再用推理引擎加速测试过 GPU 和 CPU 两种部署方式。GPU 部署时单张图像检测加分割大约 85 毫秒满足静态工位的节拍要求。推理引擎加速的收益很大我建议放在训练之后第一时间做。4.5 超参数调优记录把这轮项目的超参数调优过程整理成一张表方便你对照参考。这些数值不是绝对标准但能帮你建立合理的第一感觉。参数起始值最终值调优原因输入分辨率1333x8001333x800保持原比例细划痕不变形batch size24加大后 BN 统计更稳定检测置信度阈值0.50.5保持主要靠掩码后处理降误检掩码阈值0.50.38保留更多边缘信息anchor scales[2,4,8][2,4,8]小目标召回有收益骨干学习率倍率1.00.1防止预训练特征被破坏NMS IoU 阈值0.50.5缺陷重叠少无需调低这个项目里最有价值的一步是把掩码阈值从 0.5 降到 0.38。很多人不知道分割头输出的其实是一张概率图阈值调小之后掩码面积会变大、边缘更完整再配合形态学闭运算出来的结果比默认阈值更适合工业缺陷。这个细节属于“没人告诉你绝对想不到”的坑。5. 常见问题与排查技巧5.1 细小划痕漏检现象是整体 mAP 还不错但细长划痕这一类别的召回率很低。排查顺序按照以下几步走先看 anchor 是否覆盖了细长比例再看输入分辨率是否足够保留线状细节最后确认 PAFPN 是否真的用上了低层特征。我采用的解决方案是三个组合anchor 增加细长比例输入短边分辨率保持在 800 以上推理时对候选框置信度阈值适当放宽。特别提醒一点不要为了整体 mAP 好看而调高检测阈值那样第一个牺牲的就是细划痕这一类的召回率。关键的质检指标比一个漂亮的平均值重要得多。5.2 分割掩码边缘毛糙缺陷边缘本身是模糊的标注人员的手绘多边形也未必完全一致模型学出来的掩码自然毛糙。我处理的办法是后处理阶段加形态学闭运算先膨胀填补空洞再腐蚀收敛边缘。如果你希望从模型层面改善可以给 mask loss 一个稍高的权重。实测下来形态学后处理能把掩码 IoU 提升大约 2 到 3 个点。虽然不是模型本身变强但对下游的面积统计来说完全够用。工业项目要的是最终指标合格不必执着于“纯粹靠模型涨点”。5.3 训练 Loss 不下降或震荡遇到这种问题先怀疑三件事标签错位、学习率过大、数据加载顺序异常。我会先在前几十个 iteration 里打印图像和标注的匹配情况确认没有 label 偏移。然后看 loss 曲线的颗粒度如果单个 iteration 震荡剧烈但 epoch 级别还在下降那是正常的如果每个 epoch 的均值都不降就要检查学习率是否过大。还有一次是优化器对骨干的学习率设置错误lr_mult 配成了 10预训练特征被一把冲烂。这种问题在日志里很容易漏看我后来养成了习惯每次训练启动前都打印每个参数组的实际学习率核对一遍。这种细节检查能避免浪费一整天的训练时间。5.4 类别不均衡压坑样本太少模型经常学不到。应对办法主要有三种样本过采样、降低多数类样本的 loss 权重、在 RPN 训练时对少数类样本多采样。最简单的入门方案是训练集重采样让每个 epoch 里各类别样本数量尽量接近。需要提醒的是过采样不能太过否则模型会对少数类的某几张训练图过拟合验证集上反而出现抖动不稳定的现象。我一般把少数类的重复倍数控制在 3 到 5 倍之间同时配合验证集的早停策略效果比较稳。5.5 部署推理速度不达标检测加分割双头结构推理负担肯定比纯检测大。优化顺序建议是先裁剪输入尺寸再做推理引擎加速最后才考虑替换骨干网络。裁剪输入尺寸最直接但要注意观察小目标召回是否受影响推理引擎加速不改变模型结构收益非常明显替换骨干改动大而且需要重新调参属于最后手段。我用推理引擎加速后推理时间从 120 毫秒降到了 85 毫秒精度损失几乎为零。如果产线对速度有硬性要求这一步优先级最高也最省事。5.6 数据增强的边界工业缺陷的增强一定要克制。随机翻转、轻微亮度抖动这些没问题但不要用随机擦除或者大尺度裁剪。随机擦除可能把关键缺陷直接抹掉大尺度裁剪可能切断细长划痕训练时模型看到的缺陷形态反而不完整效果适得其反。我最后用的组合是随机翻转加小角度旋转配合轻微对比度和亮度扰动再加少量模糊来模拟相机对焦差异。这样既提升鲁棒性又不会破坏缺陷的真实形态。增强的目的是让模型见多识广而不是把训练数据改得面目全非。6. 实测结果与后续扩展6.1 在模拟产线数据上的表现最终版本在自建验证集上的结果检测 mAP0.5 大约 92mAP[0.5:0.95] 大约 71分割 mask mIoU 大约 69。关键缺陷漏检率压到了 2% 以内单张 1080P 图像推理耗时大约 85 毫秒。需要强调的是这些数字是在相对可控的模拟产线数据上得到的真实工况下的光照变化、产品批次差异会更复杂指标会有波动。但作为一套 baseline这个成绩说明模型已经基本掌握了缺陷的形态特征可以支撑后续的工程化迭代。6.2 当前方案的边界两阶段模型的结构决定了它的吞吐速度不如单阶段轻量模型如果产线节拍提高到 30 帧每秒以上这套方案必须做进一步优化才能跟上。掩码对重叠缺陷的表现也一般两个缺陷贴在一起时分割头容易合并成一个连通域影响单个缺陷的面积统计。此外类别定义一旦增加数据标注成本和重新训练成本都会明显上升。6.3 后续可以怎么扩展如果继续往下做我会优先尝试几个方向。级联检测头可以进一步降低漏检率用知识蒸馏把当前模型的能力迁移到更轻的骨干网络上换回推理速度半监督方式引入产线上大量无标注图像减少人工标注成本。还有一个方向是把缺陷分割结果直接转成几何参数对接自动化质检系统让算法从“给出掩码”升级为“给出判定结论”。写到这我回想这个项目最大的收获其实不是模型精度涨了多少而是想清楚了一个问题算法在产线上的价值取决于它能不能把“缺陷长什么样、有多大、要不要判废”这些事讲清楚。Faster R-CNN 加 ResNet50 加 PAFPN 这套组合不高深但它足够稳、足够好剖析、也足够支撑业务。如果你也在做类似项目我的建议是先把这套 baseline 完整跑通再谈换结构、追新点。先可复现再谈优化这是我踩过一圈坑后最想说的话。