理解DeepBox算法

基本情况

论文发表在ICCV2015,作者是Berkeley的博士生Weicheng Kuo:

@inproceedings{KuoICCV15DeepBox,
Author = {Weicheng Kuo, Bharath Hariharan, Jitendra Malik},
Title = {DeepBox:Learning Objectness with Convolutional Networks},
Booktitle = {International Conference on Computer Vision ({ICCV})},
Year = {2015}
}

代码开源在github上:https://github.com/weichengkuo/DeepBox

论文主要干了一件事:用一个卷积网,对于bottom-up方法(主要是EdgeBox)产生的proposal重新打分(re-rank)。也就是用EdgeBox等方法产生的proposal区域进行重新排序,把准确的区域赋予更高的objectness score。

更直白一点:EdgeBox产生的每个propsal都有得分,得分有高有低,但有时候最准的box得分并不高,得分高的box并不准,用一个卷积网将这个score进行纠正。

提出的方法

首先要用EdgeBox等传统的bottom-up方法来提取proposal区域,然后再送入一个小的网络做training/inference。

所以论文中claim的,相比于EdgeBox在精度上有提升,这个好理解,毕竟踩在前人的肩膀上;也正是因为踩在前人肩上所以时间开销应该是EdgeBox的单图0.25s+卷积网的inference时间,原文仅仅是claim了网络上的时间开销,反正怎样都是比EdgeBox慢了。

使用的网络,作者说也尝试了VGG16, AlexNet,然而其实用一个更小的4层网络就可以差不多了,这样下来速度快,精度几乎一样,那就果断小网络。

网络的训练方法:原文提到,DeepBox的4层小网络需要两个stage的训练。第一个stage,样本是sliding window产生的,是easy samples,并且网络其实前两层还是需要从AlexNet初始化的;第二个stage则是基于前一个stage的结果做finetune,样本换成用EdgeBox产生的proposal区域,依然是和bbgt计算IoU来区分为正/负样本,只不过和第一个stage相比,IoU的阈值从0.5换成了0.3/0.7。

至于提到的Fast Dbox,从现在看来很正常了,因为SPPnet和Fast RCNN都采取了这样的节省计算的方式:整图送入卷积网而不是每个区域分别作为网络输入,俗称特征共享,其实说到底还是region proposal太多了,整体的overlap也多。

在论文后面也提到其实仅仅一个stage的训练其实就可以了(仅第二个stage)。看了代码也的确是这样,是从CaffeNet.v2.caffemodel做网络前两层的初始化。这个CaffeNet.v2.caffemodel其实是来自RBG大神的Fast R-CNN开源代码提供的imagenet_models.tgz里提供的(而py-faster-rcnn并未提供此文件就是另一回事了)。

开箱使用

好吧,其实我只是想看看代码跑起来什么样子。提供的代码默认是运行fast dbox的,而且原文说了,这个fast版本的只提供MSCOCO数据集的训练和测试结果。EdgeBox预处理的数据需要从Berkeley的校网上下载,国内网络下载它异常艰辛,开了迅雷下不动而关掉会员反而就可以了。

代码可以说是fork自Fast R-CNN而加入和修改了一些东西。一些准备的数据是放在.mat文件中的,发现matlab中存储数据时指定-v7这样的版本就能用HDF接口进行读取了,因此python中使用h5py包来读取的。因为python语言自身的问题,加载数据后不肯归还内存给操作系统,整个MSCOCO 2014的数据集在DeepBox代码上训练起来,需要消耗大概24~30G的内存,简直可怕,个人电脑哪有那么大内存,又没有找到合适的服务器来用,还好可以在ubuntu上通过制作swap文件并挂载的方式,手动增加交换分区的容量,这样就能跑起来了。

回过神来

其实Fast R-CNN的论文中虽然没提,但开源的代码中是有说到用EdgeBox作为proposal generator的;而Fast R-CNN的简单理解,就是Proposal Generator+AlexNet+一些其他各种黑魔法,这里AlexNet一定程度上充当了分类器。这样看来DeepBox是做proposal region的re-rank,但怎么看都有点Fast R-CNN把多分类网络换成object or not的二分类网络,产出的结果是“更好地region proposal”,然后可以再“送给Fast R-CNN”做进一步分类等,是把分类的网络做了个简单的级联,只不过第一级是一个粗糙分类也就是Objectness打分,第二级才是精细打分。这样看来,insight可能就在于,看穿了EdgeBox等一众手工设计打分机制的算法。其实手工设计出EdgeBox这种打分方式的作者都是专家大牛了。既然手工设计的score并不足够准确,那么根据边缘(Edge)来决定一个区域是否为object region,也就显得有点武断。所以,DeepMask/SharpMask/FastMask系列方法应运而生,只不过大牛们考虑的已经是细致的Mask Proposal而不是粗糙的Bounding Box Proposal了。

理解DeepBox算法的更多相关文章

  1. 深入理解KMP算法

    前言:本人最近在看<大话数据结构>字符串模式匹配算法的内容,但是看得很迷糊,这本书中这块的内容感觉基本是严蔚敏<数据结构>的一个翻版,此书中给出的代码实现确实非常精炼,但是个人 ...

  2. KMP算法详解 --- 彻头彻尾理解KMP算法

    前言 之前对kmp算法虽然了解它的原理,即求出P0···Pi的最大相同前后缀长度k. 但是问题在于如何求出这个最大前后缀长度呢? 我觉得网上很多帖子都说的不是很清楚,总感觉没有把那层纸戳破, 后来翻看 ...

  3. 一步一步理解Paxos算法

    一步一步理解Paxos算法 背景 Paxos 算法是Lamport于1990年提出的一种基于消息传递的一致性算法.由于算法难以理解起初并没有引起人们的重视,使Lamport在八年后重新发表到 TOCS ...

  4. 简单的理解deflate算法

    简单的理解deflate算法 最近做压缩算法. 用到了deflate压缩算法,  找了很多资料,  这篇文章算是讲的比较易懂的, 这篇文章不长,但却浅显易懂, 基本上涵盖了我想要知道的所有要点. 翻译 ...

  5. 理解 KMP 算法

    KMP(The Knuth-Morris-Pratt Algorithm)算法用于字符串匹配,从字符串中找出给定的子字符串.但它并不是很好理解和掌握.而理解它概念中的部分匹配表,是理解 KMP 算法的 ...

  6. 如何感性地理解EM算法?

    https://www.jianshu.com/p/1121509ac1dc 如果使用基于最大似然估计的模型,模型中存在隐变量,就要用EM算法做参数估计.个人认为,理解EM算法背后的idea,远比看懂 ...

  7. uva11383 Golden Tiger Claw 深入理解km算法

    /** 题目: uva11383 Golden Tiger Claw 深入理解km算法 链接:https://vjudge.net/problem/UVA-11383 题意:lv 思路:lrj训练指南 ...

  8. 怎么理解RSA算法

    原文地址:http://www.ittenyear.com/414/rsa/ 怎么理解RSA算法 能够把非对称加密算法里的公钥想象成一个带锁的箱子,把私钥想象成一把钥匙 能够把对称加密算法里的密钥想象 ...

  9. 如何更好理解Peterson算法?

    如何更好理解Peterson算法? 1 Peterson算法提出的背景 在我们讲述Peterson算法之间,我们先了解一下Peterson算法提出前的背景(即:在这个算法提出之前,前人们都做了哪些工作 ...

随机推荐

  1. CF1097F Alex and a TV Show

    题目地址:CF1097F Alex and a TV Show bitset+莫比乌斯反演(个人第一道莫比乌斯反演题) 由于只关心出现次数的奇偶性,显然用bitset最合适 但我们并不直接在bitse ...

  2. iris数据集(鸢尾花)

    包含三个花的品种(Iris setosa(山鸢尾),Iris virginica(北美鸢尾),Iris versicolor(变色鸢尾)) 每个品种各50个样 每个样本四个特征参数(萼片长度和宽度.花 ...

  3. Mudo C++网络库第六章学习笔记

    muduo网络库简介 高级语言(Java, Python等)的Sockects库并没有对Sockects API提供更高层的封装, 直接用它编写程序很容易掉到陷阱中: 网络库的价值还在于能方便地处理并 ...

  4. Tomcat服务的安装及配置

    在进行Java Web开发时必须有Web服务器的支持,常用的Web服务器便是Tomcat,本文主要介绍Tomcat的安装和配置.客户端通过Web浏览器发送一个基于HTTP协议的请求到服务器上后,服务器 ...

  5. HBase基础架构及原理

    1. HBase框架简单介绍 HBase是一个分布式的.面向列的开源数据库,它不同于一般的关系数据库,是一个适合于非结构化数据存储的数据库.另一个不同的是HBase基于列的而不是基于行的模式.HBas ...

  6. linux shell 数组建立及使用技巧

    参考网址:http://www.cnblogs.com/chengmo/archive/2010/09/30/1839632.html linux shell在编程方面比windows 批处理强大太多 ...

  7. linux强制将数据写入磁盘,防止丢失内存的数据

    sync命令文件系统管理 sync命令用于强制被改变的内容立刻写入磁盘,更新超块信息. 在Linux/Unix系统中,在文件或数据处理过程中一般先放到内存缓冲区中,等到适当的时候再写入磁盘, 以提高系 ...

  8. C#生成Excel保存到服务器端并下载

    using MongoDB.Bson; using Newtonsoft.Json.Linq; using NPOI.HSSF.UserModel; using NPOI.SS.UserModel; ...

  9. 31)django-序列化

    目录 1)序列化 2)为什么不用json序列化 3)django序列化QuerySet,ErrorDict数据 一:序列化 序列化是将对象状态转换为可保持或传输的格式的过程 反序列化是指将存储在存储媒 ...

  10. 在v-html中,js 正则表达式清除字符串里的style属性

    项目中遇到这样的需求,后端返回的是字符串,在vue用v-html显示,里面有style样式,要去除style 在v-html中使用filters,和平时的不一样,推荐项目的方法,定义一个全局的过滤方法 ...