object detection[rfcn]
0 - 背景
从rcnn,spp,fast rcnn, faster rcnn,yolo,ssd,这里又有个新模型叫rfcn,即Region-based Fully Convolutional Networks,R-FCN。虽然其比yolo,ssd出来的晚,不过看模型结构,更多的是针对faster rcnn的一个改进。
一路走来,不同模型都是为了解决不同的痛点而提出的:
- rcnn证明了cnn提取的特征的有效性;
- 而spp解决了如何应对不同尺度feature map的问题;
- fast rcnn通过roi pooling将需要应用到多个候选框上的基CNN模型进行共享,加快了速度并且提升了准确度;
- 而faster rcnn为了更进一步的共享基CNN,将本来需要由SS算法提取候选框的任务一并放入基CNN中,从而提出了RPN子网络;
那么问题来了,fast rcnn发明的ROI pooling中间是由全连接层存在,从而将前面的ROIpooling后的feature map 映射成两个部分(对象分类,坐标回归);而越来越多的基CNN,如googlenet,resnet等全卷积网络证明了不要全链接层,效果不但更好,而且能适应不同尺度的图片无压力。本着解决下一个痛点的原则,rfcn应运而生。
1 - rfcn
我们可以说rfcn是基于faster rcnn的基础上对roi pooling这部分进行了改进。那么我们为了消灭fast rcnn的roi pooling中的全连接层的最naive的想法自然就是丢弃全连接层(起到了融合特征和特征映射的作用),直接将roi pooling的生成的feature map 连接到最后的分类和回归层即可。不过作者们通过做实验发现,这样的结果导致的对象检测结果很差,并且受到《Deep residual learning for image recognition》的启发,认为这主要是:基CNN本身是对图像分类设计的,具有图像移动不敏感性;而对象检测领域却是图像移动敏感的,所以二者之间产生了矛盾。从而对roi pooling进行了很神奇的设计

图1.1 rfcn结构图
如图1.1所示,网络的第一印象,结构大体和faster rcnn很像,都是有个RPN子网络用来训练并生成一堆基于当前图像的对象候选框,而ROI Pooling 就不一样。
2 - 改进的ROI Pooling

图2.1 rfcn中ROI Pooling结构图
如图2.1所示,假设图像经过了基CNN,到达了最后一层feature maps,接下来就是如fast rcnn中一样,提取当前feature map的ROI区域了,然而rfcn不是直接这么干。这里我们设计一个位置敏感的ROI Pooling:将fast rcnn中的ROI 划分成\(k*k\)大小,即图片中本来获取的ROI区域,将其分成\(k*k\)个区域(这里k=3,即分成9个部分)。假设该数据集一共由\(C\)类,那么再加个背景类,一共是\(C+1\)类。我们希望对每个类别都有各自的位置感应。
所以我们要设计的位置敏感得分map如图2.1中position-sensitive score maps(即从之前基CNN的feature maps,假设有n个通道,通过一样的卷积连接结构生成当前的相同大小map且有\(k^2(C+1)通道的位置敏感得分maps\))。就是几个大色块并列的部分:每个色块表示对对象的特定位置进行敏感,而且每个色块大小中有\(C+1\)个map,所以该区域一共有\(k^2(C+1)\)个map,其中每个map的大小和之前那个基CNN的feature map大小一致。
那么接下来就需要介绍具体的怎么从position-sensitive score maps得到图2.1中右边那个\(k*k\)大小,通道为\(C+1\)的map了。
这里就不贴论文公式了,我们以图解释

图2.2,从位置敏感得分map到位置敏感ROI pooling
2.1 ROI区域的分类
图2.2是在一个类别下而不是\(C+1\)个类别同时进行。假设我们图2.1的位置敏感map中\(k=3\),那么当前一共有:
| ___________________ | ___________________ | ___________________ |
|---|---|---|
| \(cls_1\{1,2,3,...,C+1\}\) | \(cls_2\{1,2,3,...,C+1\}\) | \(cls_3\{1,2,3,...,C+1\}\) |
| \(cls_4\{1,2,3,...,C+1\}\) | \(cls_5\{1,2,3,...,C+1\}\) | \(cls_6\{1,2,3,...,C+1\}\) |
| \(cls_7\{1,2,3,...,C+1\}\) | \(cls_8\{1,2,3,...,C+1\}\) | \(cls_9\{1,2,3,...,C+1\}\) |
这么9个不同颜色的feature maps,其中每个feature maps中都有\(C+1\)个feature map。
| _______ | _______ | _______ |
|---|---|---|
| 左上 | 中上 | 右上 |
| 左中 | 中间 | 右中 |
| 左下 | 中下 | 右下 |
上述为划分成\(k*k\),且\(k=3\)情况下的位置对应关系
| _______ | _______ | _______ |
|---|---|---|
| \(cls_1\{1\}\) | \(cls_2\{1\}\) | \(cls_3\{1\}\) |
| \(cls_4\{1\}\) | \(cls_5\{1\}\) | \(cls_6\{1\}\) |
| \(cls_7\{1\}\) | \(cls_8\{1\}\) | \(cls_9\{1\}\) |
- 1 - 首先处理类别为1的部分,即如上面表格所示:
- 2 - 如图2.2中,就是这抽取出来的9个feature map,然后如图2.2所示,对每个feature map按照各自敏感的区域,将其框出来:比如在这9个feature map中第一个表示左上位置,那么提取这个feature map的ROI区域,然后将其分成\(k*k\)的网格,提取其表示的左上位置,即第一个网格;同理第二个表示中上的feature map提取其\(k*k\)的网格中第二个网格,因为当前feature map表示的是中上位置,当前map的第二个网格也表示中上位置;
- 3 - 对抽取出来的部分进行求均值,然后按照位置组成一个\(k*k\),即\(3*3\)大小的矩阵;
- 4 - 对这个\(k*k\)大小的矩阵求和,得到一个值。
- 5 - 对类别\(2\sim (C+1)\)分别进行步骤1-4的操作,从而最终得到一个\(1*(C+1)\)这样的向量(如图2.1),将这个向量进行softmax,从而估计当前feature map对应的ROI区域是什么类别
2.2 ROI区域的回归
上面说到了从基CNN的feature map得到ROI pooling直到softmax的分类,这里接着说如何微调ROI本身的区域,这部分与分类其实很相似:
| ______________ | ______________ | ______________ |
|---|---|---|
| \(reg_1\{x,y,w,h\}\) | \(reg_2\{x,y,w,h\}\) | \(reg_3\{x,y,w,h\}\) |
| \(reg_4\{x,y,w,h\}\) | \(reg_5\{x,y,w,h\}\) | \(reg_6\{x,y,w,h\}\) |
| \(reg_7\{x,y,w,h\}\) | \(reg_8\{x,y,w,h\}\) | \(reg_9\{x,y,w,h\}\) |
- 1 - 如图2.1的位置敏感maps是有\(k^2(C+1)\)个通道的,我们依然从基CNN的feature map部分连接出一个\(4k^2\)通道的maps(与位置敏感maps并列),用来做候选框坐标微调,如上面表格所示;
- 2 - 如分类部分的步骤1-4一样的操作,最后得到一个\(1*4\)的向量,即\(x,y,w,h\)
- 3 - 按照之前的那些模型一样去计算目标函数即可
问题
问:为什么需要做如图2.2这种特定map的特定区域的选取,而不是直接在特定map上将整个ROI区域都选取?
答:将k设为1就行了,就是整个ROI选取,作者做过实验的,效果不好。
object detection[rfcn]的更多相关文章
- 论文阅读笔记三十五:R-FCN:Object Detection via Region-based Fully Convolutional Networks(CVPR2016)
论文源址:https://arxiv.org/abs/1605.06409 开源代码:https://github.com/PureDiors/pytorch_RFCN 摘要 提出了基于区域的全卷积网 ...
- 『计算机视觉』R-FCN:Object Detection via Region-based Fully Convolutional Networks
一.网络介绍 参考文章:R-FCN详解 论文地址:Object Detection via Region-based Fully Convolutional Networks R-FCN是Faster ...
- 中文版 R-FCN: Object Detection via Region-based Fully Convolutional Networks
R-FCN: Object Detection via Region-based Fully Convolutional Networks 摘要 我们提出了基于区域的全卷积网络,以实现准确和高效的目标 ...
- deep learning on object detection
回归工作一周,忙的头晕,看了两三篇文章,主要在写各种文档和走各种办事流程了-- 这次来写写object detection最近看的三篇文章吧.都不是最近的文章,但是是今年的文章,我也想借此让自己赶快熟 ...
- TensorFlow Object Detection API(Windows下测试)
"Speed/accuracy trade-offs for modern convolutional object detectors." Huang J, Rathod V, ...
- 谷歌开源的TensorFlow Object Detection API视频物体识别系统实现教程
视频中的物体识别 摘要 物体识别(Object Recognition)在计算机视觉领域里指的是在一张图像或一组视频序列中找到给定的物体.本文主要是利用谷歌开源TensorFlow Object De ...
- [Arxiv1706] Few-Example Object Detection with Model Communication 论文笔记
p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px "Helvetica Neue"; color: #042eee } p. ...
- 论文阅读笔记四十八:Bounding Box Regression with Uncertainty for Accurate Object Detection(CVPR2019)
论文原址:https://arxiv.org/pdf/1809.08545.pdf github:https://github.com/yihui-he/KL-Loss 摘要 大规模的目标检测数据集在 ...
- 论文阅读笔记四十四:RetinaNet:Focal Loss for Dense Object Detection(ICCV2017)
论文原址:https://arxiv.org/abs/1708.02002 github代码:https://github.com/fizyr/keras-retinanet 摘要 目前,具有较高准确 ...
随机推荐
- oppo手机屏幕录制的详细操作技巧
说起屏幕录制,肯定我们都使用过各式各样的录屏工具,不管是手机或者电脑自带的,还是第三方录屏工具,是不是都出现过不能正常录屏的,或者没有把声音录制下来等一系列问题,为了给更多的人节约时间,因为笔者使用的 ...
- iphone怎么投屏到电脑屏幕上
随着苹果手机的更显换代,苹果手机的功能越来越强大,其中iphone手机更新了airplay镜像功能,所以想要手机投屏电脑的小伙伴就更加方便了,但是iphone怎么投屏到电脑呢?大家不用着急,下面即将为 ...
- 读JP摩根的《加密货币展望》阅读笔记
加密货币不可能死掉, 非常容易以各种形式生存下去早期加密货币的半数以上交易额是地下钱庄交易. 现在已经被投资和投机交易取代.加密货币不可能取代政府发行的货币,其影响到了美元人民币的主权利益加密货币面临 ...
- 如何在 Flickr 上找到又酷,又有趣,且版权自由的照片?
[编者按]本文作者为 Alex Walker,主要介绍在 Flickr 上进行照片搜索时的一些技巧.本文系国内 ITOM 管理平台 OneAPM 编译呈现. 我们一直都在寻找新奇的,与众不同的设计.图 ...
- Linux下对lvm逻辑卷分区大小的调整(针对xfs和ext4不同文件系统)
当我们在安装系统的时候,由于没有合理分配分区空间,在后续维护过程中,发现有些分区空间不够使用,而有的分区空间却有很多剩余空间.如果这些分区在装系统的时候使用了lvm(前提是这些分区要是lvm逻辑卷分区 ...
- Incorrect key file for table错误解决方法
问题现象: alter table portal_app_xxxx_xxx add devno varchar(64) NOT NULL DEFAULT '' COMMENT '设备机编',add s ...
- Objective-C简介
1.OC简介 全称:Objective-C,是扩充C的面向对象编程语言,主要用于iOS和Mac OS开发. C语言的基础上,增加了一层最小的面向对象语法 完全兼容C语言 可以在OC代码中混入C语言代码 ...
- NodeJS二进制包安装和快捷键配置(适用于U盘版安装配置)
首先下载NodeJS二进制安装包:https://nodejs.org/dist/v10.15.3/node-v10.15.3-win-x64.zip 在D盘新建NodeJS文件夹,解压node-v1 ...
- spring boot metrics信息推送开发
上一篇文章是关于 “spring boot +RabbitMQ +InfluxDB+Grafara监控实践” 主要讲spring boot应用新能监控信息的收集方案实践 实践是hystrix信息推送的 ...
- ccf 再买菜 搜索 dfs
//递推关系式:(b[n-1]+b[n]+b[n+1])/3=a[n] //所以b[n+1]=3*a[n]-b[n-1]-b[n],或b[n+1]=3*a[n]-b[n-1]-b[n]+1,或b[n+ ...