引言

Fast R-CNN设计思路

  1. Fast R-CNN将整张图片和选择性搜索算法提取出来的候选区域作为输入,对整张图片利用卷积+池化的组合提取特征,产生一个feature map(特征层),结合选择性搜索算法提取出来的候选区域位置,从feature map中选择对应位置的特征(红色框)送到RoI pooling层
  2. 因为后面的全连接层需要固定大小的输入,所以作者在RoI pooling层对其采用了特殊的处理。即将\(h \times w\)输入划分成固定的输出大小\(H \times W\),这样\(H \times W\)的每个单元格中包含了\(h/H \times w/W\)个元素,对其中的元素进行maxpool,就得到了固定的输出大小\(H \times W\)。
  3. 将RoI pooling后的输出送入全连接层后在两个子网络分别进行输出和回归。

一、动机

​目标检测领域一个经典的问题,难易样本不均衡。

二、现有方案hard negative mining 及其窘境

hard negative mining实现

  1. 固定模型,去寻找难样本添加到样本集中
  2. 在上一步中选出的样本集中更新模型
  3. 重复以上步骤直到满足条件如模型性能不再上升

窘境

​固定模型寻找难样本对于目标检测计算量太大,一个图片有约\(2k+\)个候选区域,其次因为难样本RoI与对应的图片关联,没有办法单独保存难RoI到样本集中去,要想学习难样本必须对对应图片再来一次候选区域提取和卷积特征提取,并对不需要再学习的简单样本来一次梯度更新,想想都很麻烦还慢。所以Fast R-CNN中没有用。不过Fast R-CNN采用了一个正负样本1:3的设计。

设计思路

​由以上分析可以看出来,这种交替执行寻找难样本的方法在Fast R-CNN中实现是不现实的,如果能在线学习的话,就可以解决掉这个问题。下面是作者的思路

OHEM步骤:

  1. 提取N张图片的特征,提取RoI
  2. 对所有的RoI计算loss, 然后选择其中表现最差(\(loss=l_{cls}+l_{reg}\)最大)的B/N个RoI。
  3. 然后利用选择出来的B/N个RoI更新网络
  4. 重复2-3步骤
    ​对于第二步,作者说因为卷积特征提取层的参数共享,前向传播计算所有loss的计算量很小。
    ​这里有个注意事项是,因为相邻的RoI很可能拥有相邻的loss,对loss进行选择的时候容易重复选择,所以采用了NMS的方法,将IoU大于0.7的loss低的RoI移除了。
    ​另一个问题是,如果只是简单的将其他没有被选择的RoI的loss置为零,但是仍然会对所有RoI分配空间存储参数并进行反向传播计算,这十分不高效。所以,作者设计了一个新的结构来优化上述结构。

    作者设计了一个只进行前向传播的结构(绿色)和一个用来进行反向更新的结构(红色)。红色和绿色的部分网络完全相同且共享权重参数。前向结构用来计算所有RoI的loss,然后从中挑出B/N个loss最大的RoI送到红色的结构中进行反向传播,这样,进行反向传播的就只有B/N个RoI了,从而减少了计算量。作者实验表明,使用这种方法与不使用相比,空间占用差不多,但是快了两倍多。

反向传播

​看不懂Fast R-CNN的反向传播,暂时先空着。

实验结果


​其中N表示一次采样几张图片,LR是学习率,B是batch_size,bg_lo是Fast R-CNN中正负样本划分的值,[bg_lo, 0,5)被认为是负样本。可以看到网络精度提升了2个百分点。

​推理时间慢了一点,但也不是特别多。

OHEM论文笔记的更多相关文章

  1. Deep Learning论文笔记之(四)CNN卷积神经网络推导和实现(转)

    Deep Learning论文笔记之(四)CNN卷积神经网络推导和实现 zouxy09@qq.com http://blog.csdn.net/zouxy09          自己平时看了一些论文, ...

  2. 论文笔记之:Visual Tracking with Fully Convolutional Networks

    论文笔记之:Visual Tracking with Fully Convolutional Networks ICCV 2015  CUHK 本文利用 FCN 来做跟踪问题,但开篇就提到并非将其看做 ...

  3. Deep Learning论文笔记之(八)Deep Learning最新综述

    Deep Learning论文笔记之(八)Deep Learning最新综述 zouxy09@qq.com http://blog.csdn.net/zouxy09 自己平时看了一些论文,但老感觉看完 ...

  4. Twitter 新一代流处理利器——Heron 论文笔记之Heron架构

    Twitter 新一代流处理利器--Heron 论文笔记之Heron架构 标签(空格分隔): Streaming-process realtime-process Heron Architecture ...

  5. Deep Learning论文笔记之(六)Multi-Stage多级架构分析

    Deep Learning论文笔记之(六)Multi-Stage多级架构分析 zouxy09@qq.com http://blog.csdn.net/zouxy09          自己平时看了一些 ...

  6. Multimodal —— 看图说话(Image Caption)任务的论文笔记(一)评价指标和NIC模型

    看图说话(Image Caption)任务是结合CV和NLP两个领域的一种比较综合的任务,Image Caption模型的输入是一幅图像,输出是对该幅图像进行描述的一段文字.这项任务要求模型可以识别图 ...

  7. 论文笔记(1):Deep Learning.

    论文笔记1:Deep Learning         2015年,深度学习三位大牛(Yann LeCun,Yoshua Bengio & Geoffrey Hinton),合作在Nature ...

  8. 论文笔记(2):A fast learning algorithm for deep belief nets.

    论文笔记(2):A fast learning algorithm for deep belief nets. 这几天继续学习一篇论文,Hinton的A Fast Learning Algorithm ...

  9. 论文笔记:Towards Diverse and Natural Image Descriptions via a Conditional GAN

    论文笔记:Towards Diverse and Natural Image Descriptions via a Conditional GAN ICCV 2017 Paper: http://op ...

随机推荐

  1. 关于Windows Server 服务器 安装tomcat部署Java Web 项目的问题

    我遇到的问题是:不知道怎么配置,感觉在服务器上部署一个web项目,应该是很高大上,步骤应该很繁琐,但是,事实却不是那样.配置反而挺简单. tomcat配置:在tomcat安装目录中的conf文件夹下有 ...

  2. 量子搜索算法 Grover search

    问题定义: Problem: \(f: \{ 0,1,2,3,--,N-1 \} \rightarrow \{0,1\}\) 找到 \(f(x)=1\) 的x 解法 经典解法: 经典解法很简单,就是把 ...

  3. js之split()和join()的用法

    说明 这几天写了一个简单的vue项目,需要截取字符串,一时间想到了正则表达式,还折腾了还一会儿,最后上网查了一下,使用split()再简单不过了,也顺便回忆一下join().可见我有多菜,哈哈,学了这 ...

  4. JAVA byte数组转化为16进制字符串输出

    最简单的方法: 利用javax.xml.bind包下的DatatypeConverter printHexBinary public static java.lang.String printHexB ...

  5. CCF_201604-1_折点计数

    (a[i]-a[i-1])*(a[i]-a[i+1]) > 0 的点符合条件 #include<cstdio> #include<iostream> using name ...

  6. JAVA编程学习之JAVA集合

    一.JAVA集合类 为了保存数量不确定的数据,以及保存具有映射关系的数据(关联数组),java提供了集合类.所有集合类位于java.util包下. 集合类就像容是器,现实生活中容器的功能,无非就是添加 ...

  7. c++中的 static 关键字

    注:若没有特指是 静态成员时,默认都是普通成员: 1 类中的普通成员 类中的成员变量 和 成员函数 是分开存储的.其中, 1)每个对象都有独立的成员变量:成员变量可以存储在 栈空间.堆空间.全局数据区 ...

  8. Codeforces 961C Chessboard(将碎了的、染色乱了的棋盘碎片拼一起)

    题目链接:点击打开链接 Magnus decided to play a classic chess game. Though what he saw in his locker shocked hi ...

  9. 《Python学习手册 第五版》 -第4章 介绍Python对象类型

    本章的内容主要是介绍了Python的核心对象类型,后续的5.6.7.8.9章针对这些核心类型分别展开详细的说明 本章我认为重要的有几点 1.作者有谈到Python的知识结构,这个我感觉是一个大框架,可 ...

  10. Ansible: hosts文件拆分为inventory和定义inventory全局变量

    前言 随着管理机器的增多,我们在使用Ansible的时候时常会遇到hosts文件过于冗长的问题,极其不便于管理,而将hosts文件拆分为inventory就可解决该问题:另外,hosts中的每个主机条 ...