hard negative mining结合实现代码进行总结

hard negative mining

最近在看霹雳吧啦Wz大佬讲的SSD源码中看到了hard negative mining这个算法的实现,由于第一次接触,就查了一些博客,现结合实现的源码进行总结.

  • 原因:
    因为目标检测需要很高的召回率(即需要尽可能的检测出图像中的目标而不落下,所以需要在图像上设置很多的锚框),通俗的讲就是**“宁可错杀一千,也不放过一个”**.
    但是这样做会给训练带来一个问题,即负样本太多,因此为了让模型能够正常训练,我们必须想办法抑制负样本的个数

  • 做法:
    hard negative mining 应运而生.它的想法就是在训练时,尽量多挖掘一些难的负例样本加入样本集,这样会比那些简单的负例样本对分类器的优化更有效.因为大量的容易区分的anchor的梯度会覆盖掉难区分的负例和正例的梯度,让检测器成为一个检测背景的检测器.通过难负例挖掘,就可以让那些较难的参与训练(难的问题都解决了,简单的就更不在话下了)
    那我们如何理解这里的难的负例样本和简单样本呢?(具体如何筛选看下面的实现会更清晰)

    • 难的负例样本就是指那些原本是负类,但是在预测时却预测为正类(假阳性)
    • 简单负例样本就是指那些原本是负类,在预测时也预测为负类

    这边看到一个更形象的解释就是错题集.错题集不会是每次所有的题目你都往上放。放上去的都是你最没有掌握的那些知识点(错的最厉害的),而这一部分是对你学习最有帮助的。

  • 实现

    • 首先将所有的正负样本进行前向传播,并与真实标签计算交叉熵损失
    • 将正例的loss值置为0,并将所有样本的loss值按从大到小进行排序.
      • 越是排在前面loss越大,说明它越是假阳性,即是困难负例,因为它真实标签是负例,但是loss越大说明分类器将其判别为正例
    • 从前到后选取为正样本3倍数量的困难负类
    • 最终的loss为选取的正样本和负样本的loss总和并进行反向传播

一个疑问:RPN中舍去了0.3-0.7之间的阈值,这样是不是算舍去了难样本,而只留下了IOU小于0.3的简单样本,这样会不会对网络训练造成影响?(感觉有点矛盾).希望有知道的小伙伴在评论区留言呀

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值