深度学习之 hard negative mining (难例挖掘)_奔跑的大西吉的博客-程序员秘密

技术标签: 机器学习  深度学习  神经网络  

Hard Negative Mining Method 思想

hard是困难样本,negative是负样本,hard negative就是说在对负样本分类时候,loss比较大(label与prediction相差较大)的那些样本,也可以说是容易将负样本看成正样本的那些样本。

  • 例如roi里没有物体,全是背景,这时候分类器很容易正确分类成背景,这个就叫easy negative;
  • 如果roi里有二分之一个物体,标签仍是负样本,这时候分类器就容易把他看成正样本,即假阳性(false positive),这时候就是hard negative。

hard negative mining就是多找一些hard negative加入负样本集,进行训练,这样会比easy negative组成的负样本集效果更好。主要体现在虚警率更低一些(也就是false positive少)。因为它相当于一个错题集。

如何判断它为困难负样本呢?也很简单,我们先用初始样本集去训练网络,再用训练好的网络去预测负样本集中剩余的负样本,选择其中得分最高,即最容易被判断为正样本的负样本为困难样本,加入负样本集中,重新训练网络,循环往复,然后我们会发现:咦!我们的网络的分类性能越来越强了!假阳性负样本与正样本间也越来越相似了!(因为此时只有这些妖怪区域能迷惑我们的分类器了)。

Hard Negative Mining Method 使用

通常 使用 Hard Negative Mining Method 的方法为:

迭代地交替训练,用样本集更新模型,然后再固定模型来选择分辨错的目标框并加入到样本集中继续训练。传统,我们会使用 SVM + Hard Negative Mining Method 进行训练
Hard Negative Mining Method 缺点

那么传统的 Hard Negative Mining Method 有什么 缺点 呢?

Hard Negative Mining Method 很难应用到 end-to-end 的检测模型。 因为 Hard Negative Mining Method 需要迭代训练,如果我们将他使用到 end-to-end 的卷积神经网络,需要每次将网络冻结一段时间用来生成 hard negative。而这对于使用线上优化的算法来说是不可能的,例如 SGD (随机梯度下降算法)。使用 SGD 来训练网络需要上万次更新网络,如果每迭代几次就固定模型一次,这样的速度会慢得不可想象。

我们可以观察到在 fast rcnn 和 faster rcnn 中都没有用到 Hard Negative Mining Method。这就是因为如上的原因,一般使用 SVM 分类器才能使用此方法(SVM 分类器和 Hard Negative Mining Method 交替训练)

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/fenglepeng/article/details/117870253

智能推荐

__call、__set 和 __get的用法_weixin_30485291的博客-程序员秘密

1. __call的用法PHP5 的对象新增了一个专用方法 __call(),这个方法用来监视一个对象中的其它方法。如果你试着调用一个对象中不存在的方法,__call 方法将会被自动调用。例:__callPhp代码<?phpclassfoo{function__call($name,$arguments){...

【无线链路】无线发射功率以及接收灵敏度_思考的小屋的博客-程序员秘密

声明:部署本人原创,来源于:http://www.cnblogs.com/diyingyun/p/3722936.html。如有影响,请告知。无线电发射机输出的射频信号,通过馈线(电缆)输送到天线,由天线以电磁波形式辐射出去。电磁波到达接收地点后,由天线接收下来(仅仅接收很小很小一部分功率),并通过馈线送到无线电接收机。因此在无线网络的工程中,计算发射装置的发射功率与天线的辐射能力非常重要。   ...

阿里实习面筋_祚儿疯的博客-程序员秘密

2018.3.23收集网上阿里面试相关题目:面筋11.第一题实现快速排序,第二题是实现一个同步控制,使用多线程打印abcabcabc2.很多区间求并集。合并两个有序链表比较快的方法3.给定一个升序整数数组a和整数x,返回a中>=x最左的位置,如果没有这样的数返回-1, 要求复杂度O(lgn)4.已知一个单链表中存在环,求进入环中的第一个节点思路两个指针,先用flyod判圈法让...

Unity3D中实现物体内部的碰撞检测_unity内部碰撞_lollapo的博客-程序员秘密

在Unity3D中,我们有时候需要在一个物体内部做碰撞检测,但是我们会发现当把另外一个gameObject放入到该物体的内部(此时,已经拥有碰撞检测条件),当运行游戏时,该gameObject会移出该物体的内部。这不是我们想要的结果,我们需要让它在该物体内部自由移动,当它碰到该物体时,会阻止它出去。 自己尝试过通过脚本来改变该物体的三角面片和其法线的方向,但是依然会有穿透的现象(当然...

java 生成校验验证码_java生成验证码并进行验证_王少成的博客-程序员秘密

一实现思路使用BufferedImage用于在内存中存储生成的验证码图片使用Graphics来进行验证码图片的绘制,并将绘制在图片上的验证码存放到session中用于后续验证最后通过ImageIO将生成的图片进行输出通过页面提交的验证码和存放在session中的验证码对比来进行校验二、生成验证码页面通过访问servlet来生成验证码,servlet中的代码如下package org.test;im...

使用jupyter notebook所踩的坑_mooe1011的博客-程序员秘密

在学习机器学习的时候,我使用了anaconda并自己创建了一个环境,在Prompt激活该环境,并输入jupyter notebook,并运行机器学习程序,结果出现以下错误。ImportError Traceback (most recent call last)<ipython-input-3-05f9803d8eb1&gt...

随便推点

各种音视频编解码学习详解 h264 ,mpeg4 ,aac 等所有音视频格式_chinabinlang的博客-程序员秘密

编解码学习笔记(一):基本概念媒体业务是网络的主要业务之间。尤其移动互联网业务的兴起,在运营商和应用开发商中,媒体业务份量极重,其中媒体的编解码服务涉及需求分析、应用开发、释放license收费等等。最近因为项目的关系,需要理清媒体的codec,比较搞的是,在豆丁网上看运营商的规范 标准,同一运营商同样的业务在不同文档中不同的要求,而且有些要求就我看来应当是历史的延续,也就是现在已经很少采

Android可能会遇到的几种类型面试题_huangyh000000的博客-程序员秘密

题外话:      生活本就有许多不如意,谁不想家庭幸福,谁不想开心快乐,谁又不想过得舒舒服服,但,天下从来都没有免费的午餐,就算是李刚他儿子也有属于他的烦恼,所以,我们有什么理由不笑对生活呢?!当感到无能为力时,请问问自己,是否真的够努力?--------2016.08.01      正文分割线--------------------------------------------

jmeter bean shell断言加密的响应信息(加密接口测试二)_weixin_30871905的博客-程序员秘密

断言加密的响应信息1、在http请求-->添加-->断言-->bean shell 断言import com.changfu.EncryptAndDecryptInterface; //导入jar包的EncryptAndDecryptInterface类import org.json.JSONObject; //导入String json_res = prev.getR...

【JAVA企业级开发】浅谈关于在WEB大前端已然降临的时代中,你是否还是在学习jsp、freemarker、velocity、themleaf等模板引擎么?_牵牛刘先生的博客-程序员秘密

一在java领域,表现层技术主要有四种:jsp、freemarker、velocity,themleaf1jsp是大家最熟悉的技术优点:1、功能强大,可以写java代码2、支持jsp标签(jsp tag)3、支持表达式语言(el)4、官方标准,用户群广,丰富的第三方jsp标签库5、性能良好。jsp编译成class文件执行,有很好的性能表现缺点:jsp没有明显缺点,非要挑点骨头那就是,由于可以编写java代码,如使用不当容易破坏mvc结构。2velocity是较早出现的用于代替jsp的模板

MFC接收ShellExecute多个参数_baitang6952的博客-程序员秘密

在应用程序开发过程中,我们经常需要带参数启动另一个执行程序,如何传递多个参数,如何解析多个参数呢? 传参数 传递参数可使用ShellExecute函数,示例如下:ShellExecute(NULL, _T("open"), _T("d:\\test.exe"),_T("123 456") , _T("d:\\test.exe"), SW_SHOW); 解析参...

java8新特性-Stream流式处理_abcnull的博客-程序员秘密

文章目录前言stream 与 parallelStream集合类使用流Stream 接口常用方法前言java 8 允许你用一种流式操作处理集合的元素,可以把集合的数据看成水流,水流要得到处理最终从管道末端出来,管道中每处设立了一个结点代表对流进行处理,比如 filter() 之类的方法,然后从每个结点出来的仍然是 Stream 流stream 与 parallelStream串行流 stream并行流 parallelStream此文只做串行流 stream 的简介,并行流以后会在另一

推荐文章

热门文章

相关标签