困难负样本挖掘方法——OHEM_Tony Wey的博客-程序员秘密

技术标签: 计算机视觉  深度学习  

Online Negative Example Mining

论文链接

背景:

在模型训练中,大量的训练数据中会存在一些难以区分的负样本,找到这样的负样例再进行针对性地训练,能够对模型精度有一定的提升。在 two-stage 的目标检测方法中,经过区域生成算法或者网络生成的 region proposals 通常会经过正负样本的筛选和比例平衡后,才送入之后的检测网络进行训练。但是正负样本的定义和训练的比例是需要人为定义的。如果要筛选 hard mining。通常使用的都是 hard negative mining 的方法。但是此方法不适用于 end-to-end 的模型。因为会大大降低模型的训练速度。OHEM是一种线上的困难负样例挖掘解决方案,可以自动地选择 had negative 来进行训练,不仅效率高而且性能好。

简单介绍:

  1. 传统 hard negative mining method:
    传统算法需要迭代训练,放入巻积神经网络,每次都需要冻结网络生成困难负样例,很难应用在端-端的检测模型。(SVM + 传统 hard negative mining method)

  2. OHEM的基准算法是Fast R-CNN,可以把交替训练的步骤和 SGD 结合起来。之所以可以这样,作者认为虽然 SGD 每迭代一次只用到少量的图片,但每张图片都包含上千个 RoI,可以从中选择 hard examples,这样的策略可以只在一个 mini-batch 中固定模型,因此模型参数是一直在更新的。
      更具体的,在第 t 次迭代时,输入图片到卷积网络中得到特征图,然后把特征图和所有的 RoIs 输入到 RoI 网络中并计算所有 RoIs 的损失,把损失从高到低排序,然后选择 B / N (B 为 Roi 总个数,N 为输入图片个数)个 RoIs。这里有个小问题,位置上相邻的 RoIs 通过 RoI 网络后会输出相近的损失,这样损失就翻倍。作者为了解决这个问题,使用了 NMS(非最大值抑制) 算法,先把损失按高到低排序,然后选择最高的损失,并计算其他 RoI 与这个 RoI 的 IoU (交叉比),移除 IoU 大于一定阈值的 RoI,然后反复上述流程直到选择了 B/N 个 RoIs。

OHEM 结构图图中的b模块正是OHEM 比 Fast R-CNN 多出的模块。

  1. 对于two-stage模型,可以把它的两部分是提取推荐框分类回归两个部分,而OHEM的作用恰好是两个部分的中间。

在提取推荐框之后,会有很多ROI传输到后面网络。这部分的输出便是推“可能存在目标的位置“,以image patch(会给数以千计的小片(你可以叫ROI,也可以叫推荐框,还可以叫image patch))的形式给到后面的分类和回归网络。分类回归会对这些小片进行分类、坐标和尺寸回归以及置信度打分(confidence, 置信度是指,模型对这个输出有多大把握)。如果在训练阶段,那可以通过这些参数与标注结果进行计算得出损失值。OHEM恰恰利用了这个损失值。

  1. 操作流程:

    1. 正常进行一次Faster RCNN的前向传播,获得每个小片单独的损失值;

    2. 对小片们进行非极大值抑制(NMS),不了解NMS点链接去了解,非常简单;

    3. 对nms之后剩下的小片按损失值进行排序,然后选用损失值最大的前一部分小片当作输入再进一遍b部分,通过这种方法,可以屏蔽掉loss值非常低的小片。loss值非常高的小片意味着,模型训练很多次还对这些小片有着很高的loss,那么就认为这是困难负例。所谓的线上挖掘,就是先计算loss->筛选->得到困难负例。

    4. 把困难负例输入到图1中(b)模块,(b)模块是(a)模块的copy版,连参数都是一样的。只是(a)模块是不可训练的,用于寻找困难负例嘛。(b)模块是用来反向传播的部分,然后把更新的参数共享到(a)部分(a部分也跟着一起更新)。其实在程序的实现上,(a)模块可以复用,不需要额外来一个(b)模块。ab部分可以并行操作:a对下一张图像进行前向,b对上一张图像进行反向。

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

智能推荐

Salesforce 数据导入工具(Dataloder)_我头发乱了伢的博客-程序员秘密

Salesforce 数据导入工具介绍Salesforce 数据导入工具有Salesforce Classic 和 Lightning Experience 管理员和最终管理员都可以使用数据导入向导更强大的选项是 Data Loader . 这是一个客户端应用程序 , 可供用户使用 , 具有管路员权限 , 可从设置页面下载 .####### 首先 , 我们来下载进入setup 点击搜索 D...

8个正弦波逆变器带你感受生活中无处不在的科技魅力_正弦波逆变器原理_weixin_43618242的博客-程序员秘密

逆变器是把直流电能(电池、蓄电瓶)转变成交流电(一般为220V,50Hz正弦波)。它由逆变桥、控制逻辑和滤波电路组成。广泛适用于空调、家庭影院、电动砂轮、电动工具、缝纫机、DVD、VCD、电脑、电视、洗衣机、抽油烟机、冰箱,录像机、按摩器、风扇、照明等。在国外因汽车的普及率较高外出工作或外出旅游即可用逆变器连接蓄电池带动电器及各种工具工作。通过点烟器输出的车载逆变是 20W 、 40W 、 80W 、 120W 到 150W 功率规格。再大一些功率逆变电源要通过连接线接到电瓶上。把家用电器连接到电源转换器的

Vue学习18.1-----webpack打包处理less文件_vite 打包单个less文件_小虾米的成长之路的博客-程序员秘密

1、运行npm i less-loader less -D2、配置webpack.config.js文件const path = require('path');const HtmlWebpackPlugin = require('html-webpack-plugin');//创建插件的实例对象const htmlPlugin = new HtmlWebpackPlugi...

InfluxDB(二) Writing Data with the HTTP API_weixin_34245082的博客-程序员秘密

2019独角兽企业重金招聘Python工程师标准>>> ...

Scrum 常见错误实践 之 形式化的站会_weixin_30471065的博客-程序员秘密

站会作为一个团队最容易实施的敏捷实践,为广大team leader和老板们所喜欢,但大部分程序员却很抵触。其主要原因就是很多时候站会都流于形式,没能帮助团队成员解决问题、改进效率。一种常见的情况就是,站会不由团队自己发起,而是由leader发起。领导们都喜欢团队成员每周甚至每天汇报工作情况,也就是所谓的周报啊日报之类的,其实大部分时候leader们都不会看这些。这种由领导发起的站会自...

shiro 清除指定用户授权缓存_清空authorizationinfo权限信息_辛晨V的博客-程序员秘密

老规矩先上代码(干货)/** * 清空用户关联权限认证,待下次使用时重新加载 */ public void clearCachedAuthorizationInfo(Principal principal) { Subject subject = SecurityUtils.getSubject(); // String realmName = subject.getPrincipals().getRealmNames().iterator().next();

随便推点

oracle一体机的管理界面,设置oracle开机自启动_Zhaoyang Wang的博客-程序员秘密

ORACLE 设置开机自启动说明:一般而言windows平台oracle服务器会自动启动,但linux不会,包括监听、数据库、控制台emctl 需要进行设置可用方式:方式一:利用OS的服务:oratab方式二:利用oracle自带的dbstart和dbshut个人觉得两种方式没有特别大的区别,最后都是利用linux的服务来实现,本文结合自己生产操作,利用oratab举例说明step 1 修改ora...

ASM字节码插桩:QQ空间的热修复解决方案核心技术,安卓程序员的硬通货_android qq空间插桩_阿尔法789的博客-程序员秘密

一、什么是插桩QQ空间曾经发布的《热修复解决方案》中利用 Javaassist库实现向类的构造函数中插入一段代码解决 CLASS_ISPREVERIFIED问题。包括了Instant Run的实现以及参照Instant Run实现的热修复美团Robus等都利用到了插桩技术。插桩就是将一段代码插入或者替换原本的代码。字节码插桩顾名思义就是在我们编写的源码编译成字节码(Class)后,在Andro...

Testng系列学习一:基本注解和参数化_testng 注释参数化_One Tester的博客-程序员秘密

本人博客目录链接该文章相关实现代码可参考该项目代码一、官网及安装Testng官网:https://testng.org/doc/index.html通过Maven安装Testng: <properties> <testng-version>6.14.3</testng-version> </properties> &...

FastDFS的Java客户端无法使用maven依赖和undefined for the type TrackerClient异常问题_net.oschina.zcx7878_路西法01的博客-程序员秘密

1. FastDFS的Java客户端无法使用maven依赖可以使用以下依赖<dependency><groupId>net.oschina.zcx7878</groupId> <artifactId>fastdfs-client-java</artifactId> <version>1.27.0.0</version></dependency>2.FastDFS的Java客户端T...

Python-基于80s的一键获取电影下载链接_y80s_还可以哦的博客-程序员秘密

分析主要任务:一键获取 80S手机电影网(https://www.y80s.net/)不同年代的电影下载链接,可以根据用户选择的不同年代比如XX年的XX类型电影来提取前4页(x个)不同电影的下载地址并存放到指定的txt文本(或者excel文件中)主要界面设计:年代选择:是几几年的电影,可供用户去选择——首先直接输入——下拉框什么类型的电影:动作、悬疑、搞笑等等不同类型——首先直接输入——下...

python Django + uwsgi + nginx 在阿里云Ubuntu环境下的部署_阿里云ubuntu uwsgi配置文件_King-duo的博客-程序员秘密

主要内容:ubuntu下 Django + MySQL + apache2操作系统环境:ubuntu 14.04首先升级apt-get : sudo apt-get updateinstall MySQL: sudo apt-get install mysql-server mysql-clientinstall apache2: sudo apt-get install ap

推荐文章

热门文章

相关标签