先上链接: 
论文:Light-Head R-CNN: In Defense of Two-Stage Object Detector 
链接:https://arxiv.org/abs/1711.07264 
代码: TF链接

introduction

本篇文章介绍的算法是是旷视和清华大学在COCO 2017比赛拿到冠军的算法。目前常用的object detection框架有两种:一种是基于single-stage的SSD和YOLO,特点是速度快,但是精度有待提升;另一种是基于two-stage的Faster R-CNN、R-FCN和Mask R-CNN等,特点是精度高,但是速度慢。在文中,作者分析了two-stage算法主要有两部分组成:第一步是生成proposal(或说ROI)的过程(作者称之为body),第二步是基于proposal(ROI)的recognition过程(作者称之为head)。为了实现best accurcy,head一般都设计的很“重”,且head部分有一些层(例如:fc层)计算量大并耗时,故导致检测速度很慢。本文提出的light head RCNN则是主要通过对head部分的修改减少了较多计算量,故称之为light head。 
网络结构包括两部分:ROI warping和 R-CNN subnet。

先上一张图直观感受一下本文算法对比其他object detection算法的效果。

Approach

下图介绍的是Faster R-CNN、R-FCN和light head RCNN在结构上的对比。可以看出two-stage网络大都可以分为两部分:ROI warping和 R-CNN subnet。图中虚线框起来的部分是各网络的R-CNN subnet部分。这类算法的基本流程是这样的:通过base feature extractor(即特征提取网络)中某一层输出的feature map作为ROI warping的输入从而生成ROI,接着将ROI和feature map共同作为R-CNN subnet的输入完成 image classification和 object regression。

以下将Faster R-CNN网络简称为F,R-FCN网络简称为R。因为图中使用的特征提取网络均为Resnet-101,以下贴出Resnet的网络结构图。Resnet-101的conv5_x的输出是2048维。

F网络中,通过Resnet-101获得2048维特征图,接着是一个ROI pooling层,该层的输入包括2048维特征图和RPN中生成的ROI,输出是size统一的特征图(关于ROI pooling有不清楚的小伙伴,可以移步看一下SPP Net 和ROI pooling的源码解析。),再通过global average pool后接入两个全连接层,最后通过两个分支进行classification和location。在精度上,F为了减少全连接层的计算量,使用了global average pool, 这会导致在一定程度上丢失位置信息;在速度上,F的每一个ROI都要通过R-CNN subnet做计算,这必将引起计算量过大,导致检测速度慢。

R网络在实际使用中,conv5_x的2048维输出要接一个1024维1*1的filter用于降低“厚度”,接着用p*p*(c+1)维1*1的filter去卷积生成position-sensitive score map,也就是图中的彩色部分(从图中看p=9,但是在coco数据集上应用时p=7,所以p*p*(c+1)=3969,这也是本文的一个小漏洞吧),同时将conv4_x的feature map作为RPN的输入,生成ROI,将ROI 和position-sensitive score map共同作为输入,通过PSROI pooling层,得到c+1维p*p的特征图。最后经过一个global average pool层得到c+1维1*1的特征图,这C+1维就是对应该ROI的类别概率信息。相较于F网络,R解决了每个ROI都要通过R-CNN subnet导致重复计算的问题。在精度上,R也使用了global average pool;在速度上,R的head虽然不用计算每一个ROI,但是其需要一个维度非常大的score map,这在一定程度上也会降低检测速度。

关于Faster R-CNN网络和R-FCN网络有不了解的同学,可以移步这里这里

light head RCNN主体和R-FCN差不多。针对R-FCN的score map维度过大的问题,作者用10代替了class,也就是说score map维度变成了10*p*p=490(作者称之为thinner feature map),因此降低了PSROI pooling和fc层的计算量;此外作者使用了large separable convolution代替1*1convolution,示意图如下图所示,可以看出作者借鉴了Inception V3 的思想,将k*k的卷积转化为1*k和k*1,同时采用图中左右两边的方法,最后通过padding融合feature map,得到size不变的特征图。将490维特征图和ROI作为PSROI 的输入则得到10维p*p的特征图,如果将490维特征图和ROI 作为ROI pooling的输入,则得到490维特征图,所以图中写了10 or 490。因为class更改为了10,所以没办法直接进行分类,所以接了个fc层做channel变换,再进行分类和回归。

在本文中,整个网络的架构如下: 
特征提取网络使用了L(Resnet-101)和S(Xception)两种类型的网络RPN网络的输入是conv 4_x,定义了3个aspect ratios{1:2,1:1,2:1}和5个scales{32^2,64^2,128^2,256^2,512^2}(不同与F中3个aspect ratios和3个scales),此外还使用了NMS来降低overlapping,最后得到ROI。conv5_x输出的feature map通过large separable convolution来得到thinner feature map。k设为15,对于L网络cmid=256,对于S网络cmid=64,Cout=10*p*p=490,整个计算的复杂度可以通过Cmid和Cout来控制。将ROI和thinner feature map共同作为PSROI 或ROI pooling的输入,得到10 or 490channels的feature map。R-CNN subnet部分使用了一个channel为2048的fc层来改变前一层的feature map的通道数,最后通过两个fc实现分类和回归。

Experiments

作者的实验主要是基于COCO数据集进行的,object class为80,训练集有80K,验证集有35K,测试集有5K。作者用训练加验证共115K的数据训练,然后用5K的测试集做验证。

baselines

先做了一组R-FCN的实验用于对比,标准的R-FCN记为B1;对R-FCN做一些“增强”:1. image短边resize为800,长边resize为1200,并在RPN部分设置5个scales{32^2,64^2,128^2,256^2,512^2} 2.在RCNN部分回归的loss总是小于分类的,所以将回归的loss翻倍 3. 根据loss排序选取loss最大的256个samples用于反向传播。做了“增强”的R-FCN记为B2,实验结果如下表所示,B2高于B1约3个百分点。

Thinner feature maps for RoI warping

该部分主要用来验证thinner feature map和large separable convolution的作用。 
先看thinner feature map。相较于原来的R-FCN,作者使用了如图4的网络,与R-FCN不同的是,该网络的thinner feature map channels为10*p*p=490,R-FCN中score map channels为81*p*p=3969。接着接入同样的PSROI层,因为图4中channel的改变,所以使用了fc层来改变channels以便后续的分类和回归。注意该网络没有使用large separable convolution层,因为要做到“控制变量”,所以两网络只有“score map”的channel的不同。

实验结果如下表所示:从表中可以看出,channel数大大降低后精度并没有减小多少,有关速度的提升表中没有说明,但是可想而知。此外,作者在文中强调了light head rcnn的 reduce channel操作让该网络可以和FPN结合,如果使用原来的R-FCN,要和FPN结合(就是对不同scale的层做position-sensitive pooling)其计算量过大会导致内存使用量过大的。

再用large separable convolution代替1*1convolution,实验结果如下表所示,精度略有提升,速度仍然没有写出,但是明显会有较大的提升。

light head R-CNN

将RoI warping和R-CNN subnet结合到一起,也就是light head R-CNN, 对比其和B2、Faster R-CNN(这里的F是作者改进过的网络),如下表所示,最后一行表示light head R-CNN,可以看出map有了一定的提升(这些都是在L网络上实验的)。

在此解释一下,该表格最后两行的区别。有同学会说Thin feature map+large kernal就是整个light head rcnn呀!其实不然,+large kernal是在Table3中出现的,也就是说是以figure4 为基础做出来的,而figure 4 中的 RCNN subnet部分直接将10*7*7的feature map接个81channel的fc作为分类结果(对于cls任务来说)。但是Light head rcnn的RCNN subnet部分却是先使用了一个2048channel的fc,再接81channel的fc用于分类(对于分类层来说),从结果中可以看到提升较为明显。

此外作者还做了一组improvements的实验,分别加了pool with alignment、ms train和0.5阈值的NMS,结果如下表所示。

再将light head rcnn与当前主流的检测算法在coco数据集上进行比较,backbone基本都是Resnet-101,结果如下表所示。

为了突出light head rcnn的速度优势,作者使用了类似与Xception的一个小网络作为backbone,具体结构如表7所示,这里有些细节博主暂时没弄清楚。

接着将小网络的light head rcnn与其他网络进行速度上的对比,如表8所示。

可以看出,light head rcnn要速度有速度,要精度有精度,坐等源码公开了。

Light Head R-CNN论文笔记相关推荐

  1. Deep Learning论文笔记之(五)CNN卷积神经网络代码理解

    Deep Learning论文笔记之(五)CNN卷积神经网络代码理解 zouxy09@qq.com http://blog.csdn.net/zouxy09          自己平时看了一些论文,但 ...

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

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

  3. 行为识别论文笔记|I3D S3D R(2+1)D P3D CSN

    行为识别论文笔记-I3D T3D S3D R(2+1)D P3D CSN I3D Carreira, Joao, and Andrew Zisserman. "Quo vadis, acti ...

  4. 【论文笔记 2】CNN经典入门STRIVING FOR SIMPLICITY: THE ALL CONVOLUTIONAL NET

    [论文笔记 2]CNN经典入门STRIVING FOR SIMPLICITY: THE ALL CONVOLUTIONAL NET 1. 综述 对现代的CNN网络结构进行了简要说明,一般的网络都是由卷 ...

  5. 论文笔记【A Comprehensive Study of Deep Video Action Recognition】

    论文链接:A Comprehensive Study of Deep Video Action Recognition 目录 A Comprehensive Study of Deep Video A ...

  6. 【论文笔记】—低照度图像增强—ZeroShot—RUAS网络—2021-CVPR

    论文介绍 ​题目:Retinex-Inspired Unrolling With Cooperative Prior Architecture Search for Low-Light Image E ...

  7. 论文笔记 A Spatial-Temporal Decomposition Based Deep Neural Network for TimeSeries Forecasting

    0 abstract 空间时间序列预测问题出现在广泛的应用中,如环境和交通问题.由于存在特定的空间.短期和长期模式,以及维度的诅咒,这些问题具有挑战性. 在本文中,我们提出了一个用于大规模空间时间序列 ...

  8. 深度学习(DL)与卷积神经网络(CNN)学习笔记随笔-04-基于Python的LeNet之MLP

    原文地址可以查看更多信息 本文主要参考于:Multilayer Perceptron  python源代码(github下载 CSDN免费下载) 本文主要介绍含有单隐层的MLP的建模及实现.建议在阅读 ...

  9. 论文笔记:PRIN: Pointwise Rotation-Invariant Networks

    PRIN: Pointwise Rotation-Invariant Networks 1.四个问题 要解决什么问题? 使用特殊结构的神经网络来提取具有旋转不变性的点云特征. 用了什么方法解决? 提出 ...

  10. 论文笔记 《Selective Search for Object Recognition》

    论文笔记 <Selective Search for Object Recognition> 项目网址:http://koen.me/research/selectivesearch/ 一 ...

最新文章

  1. python函数都有啥_什么是python函数
  2. python去掉txt文件行尾换行
  3. linux内核杂记(5)-进程终结
  4. java 打包jar文件以在没有安装JDK或JRE的机子上运行
  5. dfs中return回溯问题
  6. python删除数组元素_python:从数组列表中删除一系列数字
  7. 转载一朋友的qq空间,感觉都是至理名言啊!
  8. STM32——整形变量转换为字符变量并通过串口发送出去
  9. Ant Design Vue下载本地文件(其他框架也适用)
  10. 如何在面试中介绍自己的项目经验
  11. 5G 室内融合定位白皮书
  12. 杨焘鸣:沟通态度比技巧重要
  13. C语言循环语句——while、for、do while
  14. 量子算法入门资料个人小结
  15. 南京信息工程大学第二届程序设计大赛团队赛:L-三元对
  16. 团队管理的四大挑战——用人篇
  17. (4)AES分组加密算法(原理详解)
  18. 数据库原理—数据查询
  19. [作业]习题2-2 韩信点兵(hanxin)
  20. 2019一键清空朋友圈_批量清理朋友圈说说

热门文章

  1. boost::test::string_token_iterator相关的测试程序
  2. boost::intrusive::splay_set用法的测试程序
  3. boost::errinfo_errno的用法测试程序
  4. boost::core模块default_allocator
  5. ITK:索引置换序列
  6. DCMTK:DCMTK文档
  7. VTK:可视化之Opacity
  8. C语言以递归实现归并排序Merge Sort算法(附完整源码)
  9. QT实现太阳系系统八大行星
  10. C++STL的stack容器