核心思想直接上图:
前面和fast RCNN一致,包括提取ROIs也是用的selective search方法(一张图片有上千个ROIs),然后每个ROI都得到一个loss的值,这时候使用NMS去掉一部分高度重叠的ROI,防止计算多次,对剩下的小片按损失值从大到小进行排序,loss越大肯定是没有训好的,也就是hard negative examples,取一部分放入下面的head部分。
读下来查询博客有两个问题觉得很容易被忽略:
1.NMS怎么理解呢?
首先计算所有RoIs的损失,把损失从高到低排序,然后选择B/N个RoIs。这里有个小问题,位置上相邻 的RoIs通过RoI网络后会输出相近的损失,这样损失就翻倍。作者为了 解决这个问题,使用了NMS(非最大值抑制)算法,先把损失按高到低排序,然后选择最高的损失,并计算其他RoI这个RoI的IoU(交叉比),移 除IoU大于一定阈值的RoI,然后反复上述流程直到选择了B/N个RoIs。
2.上层的head不更新,下层的更新怎么理解?
上层的head仅仅是用来挑选hard negative examples,并不用反传,下层的head是对困难样本进行学习,是需要反传的。
其实OHEM是有缺点的:
1.只考虑了easy sample,因为只取了前xxx个,其次没有考虑到所有的类别。Focal loss则比较顺滑,0-1之间考虑了所有类别,Ohem要么就是0,要么就是1。
参考这几篇文章就够了:
https://muzhan.blog.csdn.net/article/details/99449293
https://zhuanlan.zhihu.com/p/58162337
https://blog.csdn.net/zimenglan_sysu/article/details/51318058?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-3.nonecase&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-3.nonecase