【深度学习】Hard Negative Mining的理解(带论文重点内容解读)

该思路源自于论文《Rich feature hierarchies for accurate object detection and semantic segmentation》,就是我们应该提到的两阶段目标检测的开山奠基之作。

由于一个图片中的ground_truth比较少,所以会到导致正样本会比较少,很有可能会出现正负样本不均衡的状态,所以运用了hard negative mining这个方法来帮助我们训练。

hard negative mining顾名思义:negative,即负样本,其次是hard,说明是困难样本,也就是说在对负样本分类时候,loss比较大(labelprediction相差较大)的那些样本,也可以说是容易将负样本看成正样本的那些样本。

hard negative mining就是多找一些hard negative加入负样本集,进行训练,这样会比easy negative组成的负样本集效果更好。

R-CNN论文关于hard negative mining的部分引用了两篇论文:

  • Object detection with discriminatively trained part based models
  • Example-based learning for viewbased humanface detection

我们分别看一下原文中关于这个方法的定义:

  • 首先是第一篇:

在这里插入图片描述

核心描写为:

Bootstrapping methods train a model with an initial subset of negative examples, and then collect negative examples that are incorrectly classified by this initial model to form a set of hard negatives. A new model is trained with the hard negative examples, and the process may be repeated a few times.

bootstrap方法用一个初始的负例子集训练一个模型,然后收集这个初始模型分类错误的负例,形成一组硬负例。用困难的否定例训练一个新的模型,这个过程可能会重复几次。

  • 解下来是第二篇:

在这里插入图片描述
在这里插入图片描述
核心语段为:

we use the following “bootstrap” strategy that incrementally selects only those “nonface” patterns with high utility value:

Start with a small set of “nonface” examples in the training database.
Train the MLP classifier with the current database of examples.
Run the face detector on a sequence of random images. Collect all the “nonface” patterns that the current system wrongly classifies as “faces” (see Fig. 5b).Add these “nonface” patterns to the training database as new negative examples.
Return to Step 2
.

而R-CNN中的Hard Negative Mining就是采用了这种自举法(bootstrap)的方法:

1.先用初始的正负样本训练分类器(此时为了平衡数据,使用的负样本也只是所有负样本的子集)

2.用(1)训练好的分类器对样本进行分类,把其中错误分类的那些样本(hard negative)放入负样本子集

3.再继续训练分类器

4.如此反复,直到达到停止条件(比如分类器性能不再提升)

也就是说,R-CNNHard Negative Mining相当于给模型定制一个错题集,在每轮训练中不断“记错题”,并把错题集加入到下一轮训练中,直到网络效果不能上升为止。

最终总结:

hard negative mining思路在目标检测中的训练过程,简单来说有以下三个步骤:

1、目标检测中如何根据有标签的数据划分正负训练集?

用带标签的图像随机生成图像块,iou大于某一个阈值的图像块做为正样本,否则为负样本。但一般负样本远远多于正样本,为避免训练出来的模型会偏向预测为负例,需要保持样本均衡,所以初始负样本训练集需要选择负样本集的子集,一般正:负=1:3。

2、有了正负训练集就可以训练神经网络了。经过训练后,就可以用这个训练出的模型预测其余的负样本了(就是没有加入训练集的那些负样本)。模型在预测一张图像块后会给出其属于正负的概率,在这里设置一个阈值,预测为正的概率大于这个阈值,就可以把这个图像块加入复样本训练集了。

3.正样本训练集不变,负样本训练集除了初始的那些,还有新加入的。拿着这个新的训练集,就可以开始新的一轮训练了。(这里运用了解决样本不平衡欠采样的方法之一)

跳到第二步(这个过程是重复的)

其实这个思路也会用在其它地方,主要是对分析结果后对数据的处理,比如说分类网络,将hard sample 补充到数据集里,将检测错误的重新标注一下,重新丢进网络当中,简单来说就是让网络没有学好,学错的地方再学一遍。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

旅途中的宽~

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值