Mask R-CNN运行自带示例时误检大量不存在形状的原因排查
Mask R-CNN 形状示例推理大量误检问题
已完成的调试操作
- 先后部署两个版本的Mask R-CNN代码:官方原版Matterport实现、TensorFlow 2适配衍生分支
- 原版依赖版本老旧无法直接运行,最终选用TF2兼容版本,参考官方issue给出的适配方案修改代码匹配项目自带示例,排查后未发现其余配置遗漏
- 运行
samples文件夹下的train_shapes.ipynb示例,基于预训练COCO权重训练生成形状数据集,训练流程可正常跑通 - 示例生成的原始测试样本、推理可视化结果如下:


待排查问题:推理结果中检测出大量源图像不存在的形状,该问题的诱发原因是什么?
常见诱发原因
- 检测置信度阈值设置过低
推理阶段如果配置里的DETECTION_MIN_CONFIDENCE参数低于0.5,会大量放行置信度不足的误判结果,很多不存在的形状实际是模型对背景噪点的低置信度误判,把该参数调到0.7~0.8区间即可过滤绝大多数这类无效检测框。 - 模型权重未训练收敛
基于COCO预训练权重微调自定义形状数据集时,如果训练轮次过少(比如仅跑1-2个epoch),模型还未拟合简单形状的特征规律,会把图像色块边缘、背景杂色误判为目标形状。可适当增加头部训练、全网络微调的epoch数,等训练集、验证集loss下降到稳定区间后再执行推理。 - 训练与推理的预处理逻辑不匹配
不少TF2适配分支存在预处理逻辑漏改问题:训练阶段图像像素会按指定均值、方差做归一化,推理阶段如果直接传入未做对应归一化的原图,或者通道顺序错误(比如将RGB顺序传为BGR),模型接收到的输入分布和训练时完全不一致,输出结果会完全错乱,出现大量无意义检测框。 - 非极大值抑制(NMS)阈值设置过高
如果DETECTION_NMS_THRESHOLD参数设置接近1,同一位置附近的重复误检框不会被过滤,会被判定为多个独立目标输出,视觉上就像凭空多出很多不存在的形状,把该参数调整到0.3左右即可解决重复框问题。 - 类别ID映射错误
形状数据集的类别包含背景、正方形、圆形、三角形共4类,其中背景固定占用索引0,实际形状类别从索引1开始计数。如果代码修改过程中搞错类别索引起始位置,会导致模型输出的类别映射错位,出现大量无意义检测结果,需核对数据加载部分的class_id配置修正。
内容的提问来源于stack exchange,提问作者Joysn
相关产品推荐
相关产品推荐

