摘要
主要说现有的目标检测算法开销大,而数据集中又分为大部分的简单样例和小部分的困难样例,如果能自动把困难样例筛选出来,那么算法会更加有效率,这就是OHEM的作用,同时OHEM也确实提高了各种数据集下算法的表现。
介绍
现有的目标检测算法往往把目标检测任务转化为图像分类任务,但是有些新的问题需要解决,那就是训练图像中,一部分是有标注的目标像素,一部分是不属于任何类的背景,有时候同一个目标可能在10万种不同背景中出现(因为如果用滑动窗口的话同一目标就会有相当多个窗口),虽然推荐框算法优化了一点,但是最低还会有70:1的比例出现背景:目标。
现在一般是使用bootstrapping算法来解决这个问题(一般也叫做hard negative mining,困难反例挖掘)
什么是bootstrap?
这个在西瓜书第二章,为选取训练集与测试集的方法。模型评估方法中有提到,中文为自助法
即在原数据集D中经过m次有放回的采样得到D*,用作训练集,而D-D*用作测试集。
这样样本在m次采样中均不被采样到的概率为 l i m m → ∞ ( 1 − 1 / m ) m = 1 / e ≈ 0.368 lim_{m\to\infty}(1-1/m)^m=1/e\approx0.368 limm→∞(1−1/m)m=1/e≈0.368,也就是总体中大概有0.368的样本不在D*里,而在D-D*里用作测试集
为什么要这么做?
西瓜书上说是为了让实际评估的模型使用的训练集与期望评估的模型使用的训练集相同,都为m个样本,其实不太理解,为什么期望评估的模型使用的训练集是m个样本不是D个样本?
hard example或者hard negative是指什么?
就是很难分辨的误报的样本,一般直接在负样本原图(就是不包含人的背景图)上进行目标检测,这样得到的检测框肯定都是误报,然后把这些检测框包含的图片加入到负样本中,重新进行训练,这样就能减少误报。
什么是online的模型?
关键点在于随时在训练,只要有新的数据就加进去训练,更新模型
传统的模型,训练时首先要准备好(固定的)训练集,最多分为一些batch加入,而online的训练集不用事先准备完全,可能还在生产中,生产出来一个放进去一个训练,持续不断地优化模型,由于有一个数据就投进去,一般就是用的SGD。
但是当使用SGD时,bootstrap就不行了,这时候就需要我们的OHEM,这是SGD的一个修改版,
发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/220360.html原文链接:https://javaforall.net
