栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

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

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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的简单样本,这样会不会对网络训练造成影响?(感觉有点矛盾).希望有知道的小伙伴在评论区留言呀

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/829526.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号