这是rbg大神的又一神作,cvpr 2016的oral paper,论文地址here。

给rbg大神发邮件问了下问题,想不到大神居然回我,还给了开源的代码:https://github.com/abhi2610/ohem,(太开心了)

另外另一个作者的主页:http://abhinav-shrivastava.info/

====

题外话,说下自己的implementation(主要基于rbg开源的OHEM代码,把OHEM的相关代码嵌入到faster-rcnn里面去)

主要是roi_data_layer/里面的layer.py and minibatch.py和fast_rcnn里面的config.py里的ohem代码加入到自己faster-rcnn的对应文件里

还要修改下select_hard_examples函数里的BATCH_SIZE变量,用新的OHEM_BATCH_SIZE变量表示

附件是自己摸索出来的prototxt文件,至于实验还在跑。

嗯今天跑完,效果为70.4% (发现用不用nms,效果相差不到0.1%)

按自己的方式实现ohem的话,效果为70.6%左右。

觉得应该是proposals的生成(end2end方式)的coverage不够好导致的)

附件见:https://github.com/abhi2610/ohem/files/440512/my_ohem.tar.gz

最近论文作者把它的prototxts,yml等文件也公开了,和笔者的相差不大。

====

这里主要说下该论文的hard mining过程:

先上图,如Figure2所示:

从图中可以看出,本文的亮点在于在每次迭代中,较少训练样本下,如何hard negative mining,来提升效果。

即针对Fast-RCNN框架,在每次minibatch(1张或者2张)训练时加入在线筛选hard region的策略,达到新的SoA。

需要注意的是,这个OHEM适合于batch size(images)较少,但每张image的examples很多的情况。

(thousands of candidate examples,这里的example可以理解为instance、region或者proposal)

这是一次ML经典算法bootstrapping在DL中的完美“嵌入”。

具体来说:

1 将Fast RCNN分成两个components:ConvNet和RoINet. ConvNet为共享的底层卷积层,RoINet为RoI Pooling后的层,包括全连接层;

2 对于每张输入图像,经前向传播,用ConvNet获得feature maps(这里为RoI Pooling层的输入);

3 将事先计算好的proposals,经RoI Pooling层投影到feature maps上,获取固定的特征输出作为全连接层的输入;

需要注意的是,论文说,为了减少显存以及后向传播的时间,这里的RoINet是有两个的,它们共享权重,

RoINet1是只读(只进行forward),RoINet2进行forward和backward:

a 将原图的所有props扔到RoINet1,计算它们的loss(这里有两个loss:cls和det);

b 根据loss从高到低排序,以及利用NMS,来选出前K个props(K由论文里的N和B参数决定)

为什么要用NMS? 显然对于那些高度overlap的props经RoI的投影后,

其在feature maps上的位置和大小是差不多一样的,容易导致loss double counting问题

c 将选出的K个props(可以理解成hard examples)扔到RoINet2,

这时的RoINet2和Fast RCNN的RoINet一样,计算K个props的loss,并回传梯度/残差给ConvNet,来更新整个网络

论文提及到可以用一种简单的方式来完成hard mining:

在原有的Fast-RCNN里的loss layer里面对所有的props计算其loss,根据loss对其进行排序,(这里可以选用NMS),选出K个hard examples(即props),

反向传播时,只对这K个props的梯度/残差回传,而其他的props的梯度/残差设为0即可。

由于这样做,容易导致显存显著增加,迭代时间增加,这对显卡容量少的童鞋来说,简直是噩梦。

为什么说是online?

论文的任务是region-based object detection,其examples是对props来说的,即使每次迭代的图像数为1,它的props还是会很多,即使hard mining后

为什么要hard mining:

1 减少fg和bg的ratio,而且不需要人为设计这个ratio;

2 加速收敛,减少显存需要这些硬件的条件依赖;

3 hard mining已经证实了是一种booststrapping的方式, 尤其当数据集较大而且较难的时候;

4 eliminates several heuristics and hyperparameters in common use by automatically selecting hard examples, thus simplifying training。

放宽了定义negative example的bg_lo threshold,即从[0.1, 0.5)变化到[0, 0.5)。

取消了正负样本在mini-batch里的ratio(原Fast-RCNN的ratio为1:3)

===

除了OHEM外,在训练过程中,论文用到了multi-scale的train&test、iterative bounding box regression这两种策略。具体参考fast-rcnn和sppnet这两篇论文。

===

还是看效果说话,效果屌屌的。

的确很佩服rbg的,用简单的方法来优雅的完成这么难的任务,而且这些方法可以通用到其他任务上。

优雅,简单且不简单。

Squeezenet中添加OHEM层相关推荐

  1. 在caffe中添加新层 L1 Loss layer

    本文地址:http://blog.csdn.net/ismarvellous/article/details/79069661,转载请注明出处. 本文涉及的所有完整文件可在我的github下载. 1. ...

  2. 如何给caffe添加upsample层(上采样层)

     原版的caffe1.0并不支持上采样层,此处教大家如何添加自定义上采样层 首先在此处下载upsample的代码: https://github.com/SeanQ88/caffe_upsample ...

  3. android img标签属性_微信小程序 组件叠加效果(如 Android 中的添加蒙层)

    实现的效果如下: 可以看出这是由image组件和text组件叠加到一块组成的蒙层效果. 在小程序中实现这个效果主要用到z-index属性和position属性 z-index的使用必须是双方组件都设置 ...

  4. 在caffe 中添加Crowd counting 数据层

    #目录 [TOC] 一.简介 Crowd counting一般以人群图像作为输入,网络回归该图像对应的密度图.以往做法是先在matlab中根据图像的label(人头位置)生成密度图,然后将输入图像及密 ...

  5. layui弹出层中添加下拉框

    layui弹出层中添加下拉框 实习不到两个月,踩到的坑 使用layui写了一个项目,负责其中的一小块,其中有一个页面需要在弹出层中写一个下拉框 代码如下: <div class="la ...

  6. 在ABP解决方案中添加一个Core层的项目

    1,在src目录下新建一个项目,类库,例如叫AbpDemo.Core.System, 然后修改项目属性,把命名空间修改回来为:AbpDemo 然后添加依赖,照着现有的领域层AbpDemo.Core添加 ...

  7. KiCad设计PCB-40-PCB中添加开窗的logo、丝印层添加英文和中文注释

    PCB中添加开窗的logo 开窗的意思是去掉电路板中走线等上面的绿油,把铜皮裸露出来.本篇就是给大家介绍如何在开发板上通过开窗的手法做自己的logo.由于KiCad软件不支持中文,因此写中文要借助于K ...

  8. js 添加遮罩层(加载中效果)

    1. 添加遮罩层 this.mask = document.createElement('div');this.mask.style.width = window.innerWidth + 'px'; ...

  9. 在(CListView)列表视图中添加右键菜单的方法

    使用弹出式菜单(PopMenu) 弹 出式菜单(PopMenu)大家都熟悉,在WIN98的桌面上单击鼠标右键弹出的菜单就是弹出式菜单.通常情况下,弹出式菜单在鼠标右键单击时弹出,当 然,也可以根据需要 ...

最新文章

  1. 中式古建筑su模型大全
  2. Ubuntu常用命令与技巧
  3. js常用事件整理—兼容所有浏览器
  4. ATM and Students 双指针,前缀和(1800)
  5. C. Goodbye Souvenir(CDQ 或 树套树)
  6. 如果你的Spring水平就这?求求就不要去面试官那里送人头了
  7. [洛谷 1883]函数 三分法
  8. 什么是比特币?比特币的发展史,什么是挖矿?
  9. C# 控制台程序(Console Application )启动后隐藏
  10. 深度学习常用数据集汇总
  11. 没能躲开的云服务容器网络问题
  12. Arangodb集群web interface登陆认证设置
  13. web服务器和数据库服务器分离的优势
  14. 「Cold Chain 2015国际冷链物流展」
  15. PS 滤镜——(扭曲)球面化 Spherize
  16. mysql怎么禁用安全模式_mysql开启和关闭安全模式
  17. (申请加精)你所不知道的奶粉秘密(2)------转自天涯
  18. 18.5.4 分布式恢复
  19. r8169驱动源码阅读记录
  20. [爱情] [奋斗][主演:佟大为 李小璐][赵宝刚2007励剑之作][更新至24集]

热门文章

  1. 【新书速递】实用安全多方计算导论
  2. scrapy 保存到mysql_Scrapy保存数据到mysql
  3. 6种不良坐姿最伤脊椎
  4. 题解 CF981A 【Antipalindrome】
  5. lwip的tcp断线重连例程_STM32F107+LWIP---如何检查tcp通讯断开?并重新连接
  6. Unity 实现圆圈调节
  7. app不能备份数据,更改allowBackup为true,并重新打包apk
  8. 1. Navicat Premium 12 用户手册之简介
  9. Linux驱动——驱动模块初次加载成功,后面失败 failed with error -38
  10. 关于产品的一些思考——腾讯之手机安全管家