首页 / 资讯中心 / 文章详情

用 10% 标注数据做检测:mmdetection 半监督学习 Soft Teacher 实战拆解

用 10% 标注数据做检测:mmdetection 半监督学习 Soft Teacher 实战拆解 ★ FEATURED ARTICLE
用 10% 标注数据做检测mmdetection 半监督学习 Soft Teacher 实战拆解【免费下载链接】mmdetectionOpenMMLab Detection Toolbox and Benchmark项目地址: https://gitcode.com/gh_mirrors/mm/mmdetectionmmdetection 是基于 PyTorch 的物体检测库内置的 Soft Teacher 是目前最常见的半监督物体检测方案之一。本文把 mmdetection 半监督学习的链路拆开讲师生模型如何分工、伪标签怎样生成与过滤以及只用 10% 标注数据时如何把训练跑起来。效果先行10% 标注数据能换来什么先看结果再谈机制。官方预训练结果Faster R-CNN R50-caffe FPN180k 迭代COCO 验证集大致是1% 标注数据box AP 19.95%box AP 30.410%box AP 33.8同结构检测器全量 COCO 基线约 36.8也就是说标注量只花十分之一就能拿到全量数据九成的效果而且标注越省边际收益越高。数据侧的输入方式如下图标注集与未标注集经多分支流水线处理同一个 batch 里同时喂给师生两个模型。机制拆解师生模型与伪标签过滤 Soft Teacher 同时维护两个同构模型教师负责出答案学生负责答题最终交付的是学生。核心实现在 mmdet/models/detectors/soft_teacher.py完整流程可以拆成五步教师对未标注图像做推理输出的检测框和类别分数就是初始伪标签置信度初筛分数低于pseudo_label_initial_score_thr默认 0.5的伪标签直接丢弃不确定性估计对保留的框做 10 次随机抖动jitter后让教师重推位置抖得越厉害说明该框越不可信分头把关RPN、分类、回归各有独立阈值rpn_pseudo_thr、cls_pseudo_thr、reg_pseudo_thr伪标签分别以对应标准参与三个头的损失。这一步的作用是避免一刀切——分类要求高置信度回归只要求框的位置稳定所以阈值含义不同学生按标注损失 伪标签损失联合训练教师则由 MeanTeacherHook 用动量 EMA 缓慢跟踪学生伪标签质量随训练进度逐步提升。关键参数速查 ⚙️以下参数都在配置的semi_train_cfg里按默认值起步即可参数含义默认值调整建议freeze_teacher教师是否冻结梯度更新True训练期靠 EMA 慢更新教师学生明显收敛后再考虑解冻sup_weight标注数据分支损失权重1.0固定为 1 作基准去调无监督侧unsup_weight未标注分支损失权重4.0学生指标下滑时降到 1~2 试pseudo_label_initial_score_thr伪标签初始置信度阈值0.5调低放更多框进来调高更保守rpn_pseudo_thr学生学候选框时的分数门槛0.9基本不用动cls_pseudo_thr学生学分类时的分数门槛0.9基本不用动reg_pseudo_thr回归学习的不确定性门槛0.02数值越大越严格只保留高置信框jitter_times抖动估计不确定性的次数10减少可提速但估计略粗糙三步跑通训练 克隆仓库并准备数据COCO 放在data/coco用tools/misc/split_coco.py生成 10% 标注 / 90% 未标注的划分文件配置默认指向 10% 划分的 fold 1选配置直接用 configs/soft_teacher/ 下的 180k、semi-0.1 配置即 10% COCO 标注 剩余未标注180k 迭代执行训练git clone https://gitcode.com/gh_mirrors/mm/mmdetection cd mmdetection python tools/train.py configs/soft_teacher/soft-teacher_faster-rcnn_r50-caffe_fpn_180k_semi-0.1-coco.py调参与避坑 初始阈值别急着调低。把pseudo_label_initial_score_thr压到 0.3 以下开局就会灌入大量噪声伪标签学生先学错再学对前期曲线很难看。更稳的做法是维持 0.5 起步让教师 EMA 慢慢提升伪标签质量。unsup_weight是双刃剑。它控制未标注信号占多大比重调大能榨更多未标注收益但过大会让学生比教师漂移得更快反过来污染伪标签。训练曲线震荡时优先把它降到 2 观察。搞清楚解冻教师的时机。freeze_teacherTrue不代表教师一动不动MeanTeacherHook 每个迭代都按teacher 0.999*teacher 0.001*student做参数更新。只有当学生 mAP 停滞、确认已收敛后再尝试解冻让教师接受梯度更新否则师生会互相带偏。选型判断什么时候该用半监督学习 这套方案最值得上手的场景标注昂贵或耗时的领域比如医疗影像、制造质检、车载街景手里有大规模未标注图像且与标注集分布一致标注预算有限需要少量标注数据先跑通检测任务再迭代。反过来如果标注数据已经充足或未标注图与标注图域差异明显直接监督训练更划算——半监督不是万能药它的收益前提永远是高质量未标注数据近乎免费。下图这类街景图像恰恰是标注成本高、而未标注来源丰富的典型。想继续深入的话多分支数据流与 TeacherStudentValLoop 的完整配置方式见 docs/zh_cn/user_guides/semi_det.md伪标签损失的计算细节则直接读mmdet/models/detectors/soft_teacher.py源码即可逻辑与上文五步流程一一对应。【免费下载链接】mmdetectionOpenMMLab Detection Toolbox and Benchmark项目地址: https://gitcode.com/gh_mirrors/mm/mmdetection创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
阅读完成 · 觉得有帮助?
咨询建站