RPN FPN ROIPooling
RPN(Region Proposal Network)介绍--->
特点从backbone 生成的Feture Map中 用一个 3x3 的Conv卷积核 遍历FeatureMap的每个点然后 根据每个点的感受野,回到最初始的图像层,感受野的中心点就是锚框中心点,然后在中心点生成3种不同大小不同长宽比的锚框,然后根据卷积的结果对生成的锚框进行初步筛选 进行2分类,判断它是否为 网络所需要的特征图 (前景), 随后将分类出来的锚框 作为预选框 送到ROIPooling层, ROIPooling的作用是加速2Stage的推理和训练速度,由于生成的预选框的大小形状都不同 如果对每种形状的FeatureMap都进行推理那么,该处的耗时就为原来的9倍。进行ROIPooling就是不管原来的FeaturenMap是怎样的只对他按比例进行MaxPooling的操作,然后得到相同尺寸的FeatureMap进行分类任务的输入
生成anchor --->对anchor进行二分类--->边框回归--->生成最终的Proposal
生成anchor box
anchor可以翻译为锚,这个anchor指的是输入图像上的点,是生成候选框的基础,有了anchor后就可以为每个anchor生成不同大小和长宽比的box,用这些box来覆盖输入图片中要检测的物体(当然,会生成很多很多的box, 在图片上密密麻麻的,需要后续的操作进行筛选)。筛选过后剩下的就是最终的Proposal。Proposal会给ROIPooling然后进行分类和回归。
生成anchor box分为两步:第一先从Feature map的点对应回输入图像感受野的中心点;第二以该点为中心点创建不同面积和长宽比的box,这个也是输入图像上的box。
生成anchor box
有了anchor点后就可以为每个点生成anchor box了,Faster R-CNN中设置了三种面积的box,每一个面积又有三种长宽比,也就是每一个点会有9个anchor box。
分类和边框回归
在第一步生成了很多很多的anchor box,后面就是要对这些anchor box进行分类和边框回归的操作。
分类操作就是上图中上面的那个分支,首先通过一个1x1的卷积,将维度降为18(因为是9个框,每个框进行二分类),通过softmax进行二分类(框中有没有目标,也就是前景和背景),来生成后面的正负样本。
边框回归的目的是使anchor box更接近ground truth。首先也会通过一个1x1的卷积,维度降为36(和之前的类似每个框四个值来确定)。
生成Proposal
有了前面生成的anchor box后下一步就是利用各种方法剔除我们不需要的那些box,主要分一下几步:
第一步:先将anchor box利用feat_stride和im_info(这个里面保存了原始图像的大小,注意这个不是网络输入的图像,是原始图像)将box映射会原始图像,将严重超出边界的box剔除;
第二步:按照上面说的二分类的分支得到的score得分进行排序,提取前2000个;
第三步:对得到的2000个box执行NMS(非极大值抑制);
第四步:将得到的结果再进行排序,取前300个作为最终的Proposal,给后面进行分类和回归。
Single Shot MultiBox Detector(SSD)
Single shot指明了SSD算法属于one-stage方法,MultiBox指明了SSD是多框预测。在上一篇文章中我们已经讲了Yolo算法,SSD算法在准确度和速度(除了SSD512)上都比Yolo要好很多。图2给出了不同算法的基本框架图,对于Faster R-CNN,其先通过CNN得到候选框,然后再进行分类与回归,而Yolo与SSD可以一步到位完成检测。相比Yolo,SSD采用CNN来直接进行检测,而不是像Yolo那样在全连接层之后做检测。其实采用卷积直接做检测只是SSD相比Yolo的其中一个不同点,另外还有两个重要的改变,一是SSD提取了不同尺度的特征图来做检测,大尺度特征图(较靠前的特征图)可以用来检测小物体,而小尺度特征图(较靠后的特征图)用来检测大物体;二是SSD采用了不同尺度和长宽比的先验框(Prior boxes, Default boxes,在Faster R-CNN中叫做锚,Anchors)。Yolo算法缺点是难以检测小目标,而且定位不准,但是这几点重要改进使得SSD在一定程度上克服这些缺点。下面我们详细讲解SDD算法的原理,并最后给出如何用TensorFlow实现SSD算法。
FPN(金字塔网络)详解--->为了解决对不同尺度的物体检测问题而提出的方法。
1.在图像金字塔提特征 Featurized Image Pyramid
十分想当然的思路,既然你图片太小我预测不出来,那就把图片缩放到不同的大小,分别预测。
这是最直观的办法,自然也是最蠢的办法。
想象一下它的过程:
把一张图片提取特征预测→放大→提取特征预测→放大→提取特征预测……
这个过程中,每个特征提取/预测都是独立进行的!即使同一张图片的不同分辨率,模型之间也很难共享它们中间提取的特征。这让模型预测的过程费时费力,比如本来一个图片预测需要五秒,一个五级的图像金字塔耗时绝对不会少于25秒。
这还只是预测,训练模型更加耗时,因此出于这种考虑,图像金字塔通常只能在预测时使用。
这又导致了新的问题,即此时模型本质上只是为了某种分辨率训练的,只是强行被拿去检测别的分辨率,这样的效果自然不可能好。
2. 原始CNN Naïve CNN
现在我们都知道,若以表征学习(representation learning)的角度思考CNN,那么CNN实际上是有层次地学习图片的特征,即深度越深,则特征的语义越高级(从线到面,再到物体特征)
由于后续存在池化和降采样,浅层网络的特征图可以保留更多的分辨率,但是特征语义较为低级。
因此,CNN只能寄希望于小物体的特征够在最后一层“存活下来”,但由于分辨率的损失,这显然是不切实际的。
但CNN这种层级计算特征如此高效,fast(er) R-CNN也是靠这种层级结构达到加速效果的。因为此时至少特征计算是“共享的”,不用像图像金字塔那样傻乎乎一个个算。
那么问题来了,层级计算的时候,有辣么多分辨率的特征,那我们何不全用上?
3. 金字塔型特征层级 Pyramidal feature hierarchy
实际上SSD就是“把不同分辨率特征”全用上的先驱之一。SSD会在不同分辨率的特征上直接预测,那么不就大物体小物体都能预测到了吗?
这想法很不错,但还没有那么好。SSD这么做有两个问题:
- 底层特征语义不够
- 最高分辨率并不高
正如之前分析的,实际上,底层特征的语义较低,携带信息的“有效性”略少,导致预测结果不佳。
SSD缓解上述问题的方法是,太底层的语义干脆不用不就好了?
所以,你以为SSD是这样的:
卖家秀
实际上是这样的:
买家秀
实际上,太浅层的特征SSD也根本没用上。这也不能怪SSD,因为技术的发展永远是循序渐进的,它能意识到可以在不同分辨率特征上检测已是不易。
分析到这,一个很自然的想法就出现了“我们是否可以结合深浅特征,兼顾分辨率与特征语义?”原来大家都会说不可能,直到一个叫ResNet的模型告诉我们什么叫跳接。
现在,正文终于可以开始了
二、特征金字塔网络
FPN是一种自顶向下路径和横向连接将低分辨率、语义强的特性与高分辨率、语义弱的特性结合起来的体系结构。
FPN通过讲浅层的特征跳接到深层的特征,兼顾了分辨率与特征语义。但实际上,这也不是FPN的首创,在对分辨率要求更高的语义分割问题中早有涉猎(如医学图像常用的U-Net)。
但FPN的独到之处在于将深/潜层特征融合与多分辨率预测结合了起来。
有了初步认识,接下来就是模型的细节了。
三、模型细节 Details
从图上可以看出,FPN可以分为三部分:
- 自底向上的部分
- 自顶向下的部分
- 连接两部分的跳接
注意,实际上这个网络掰直了更像一个漏斗,可以理解为这里的底=高分辨率,顶=低分辨率。
自底向上
前馈Backbone的一部分,每一级往上用step=2的降采样。
输出size相同的网络部分叫一级(Stage),举个例子:下图是fasterRCNN的网络结构,左列ResNet用每级最后一个Residual Block的输出,记为{C1,C2,C3,C4,C5}。
FPN用2~5级参与预测(因为第一级的语义还是太低了),而{C1,C2,C3,C4,C5}这几级等效于在图片上以{4,8,16,32}为步长提取特征。
摘自博客:https://blog.csdn.net/xiamentingtao/article/details/78598027
自顶向下&跳接
对底向上的特征图一级级上采样,再加上底向上跳接来的高分辨低语义特征用于预测。
上采样的方法是简单的最近邻插值
一个最近邻插值的例子,上采样加起来 相当于把算完后在这个地方 把在这一层最能代表 该区域语义的特征值 加上上一层 类似于在数值上面的整数加上小数部分
其中跳接时前后维度不一致问题的解决方法采用了1*1conv。
通过跳接融合特征之后,还要进行一个3*3conv,以减轻最近邻插值带来的影响(因为周围的数字都比较相近,会出现重叠现象)
最后再看一眼网络图,一个完整的FPN架构就完成啦~
two_Stage的ROIPooling
目标检测typical architecture 通常可以分为两个阶段:
(1)region proposal:给定一张输入image找出objects可能存在的所有位置。这一阶段的输出应该是一系列object可能位置的bounding box。这些通常称之为region proposals或者 regions of interest(ROI)。
(2)final classification:确定上一阶段的每个region proposal是否属于目标一类或者背景。
这个architecture存在的一些问题是:
- 产生大量的region proposals 会导致performance problems,很难达到实时目标检测。
- 在处理速度方面是suboptimal。
- 无法做到end-to-end training。
这就是ROI pooling提出的根本原因。
ROI pooling层能实现training和testing的显著加速,并提高检测accuracy。该层有两个输入:
- 从具有多个卷积核池化的深度网络中获得的固定大小的feature maps;
- 一个表示所有ROI的N*5的矩阵,其中N表示ROI的数目。第一列表示图像index,其余四列表示其余的左上角和右下角坐标;
ROI pooling具体操作如下:
(1)根据输入image,将ROI映射到feature map对应位置;
(2)将映射后的区域划分为相同大小的sections(sections数量与输出的维度相同);
(3)对每个sections进行max pooling操作;
这样我们就可以从不同大小的方框得到固定大小的相应 的feature maps。值得一提的是,输出的feature maps的大小不取决于ROI和卷积feature maps大小。ROI pooling 最大的好处就在于极大地提高了处理速度。
ROI pooling example
考虑一个88大小的feature map,一个ROI,以及输出大小为22.
(1)输入的固定大小的feature map
(2)region proposal 投影之后位置(左上角,右下角坐标):(0,3),(7,8)。
**
**
(3)将其划分为(22)个sections(因为输出大小为22),我们可以得到:
**
****
****(4)对每个section做max pooling,可以得到:
******
ROI pooling总结:
(1)用于目标检测任务;(2)允许我们对CNN中的feature map进行reuse;(3)可以显著加速training和testing速度;(4)允许end-to-end的形式训练目标检测系统。
RPN FPN ROIPooling的更多相关文章
- YOLO、SSD、FPN、Mask-RCNN检测模型对比
YOLO.SSD.FPN.Mask-RCNN检测模型对比 一.YOLO(you only look once) YOLO 属于回归系列的目标检测方法,与滑窗和后续区域划分的检测方法不同,他把检测任务当 ...
- python读取caffemodel文件
caffemodel是二进制的protobuf文件,利用protobuf的python接口可以读取它,解析出需要的内容 不少算法都是用预训练模型在自己数据上微调,即加载"caffemodel ...
- 特征金字塔网络Feature Pyramid Networks
小目标检测很难,为什么难.想象一下,两幅图片,尺寸一样,都是拍的红绿灯,但是一副图是离得很近的拍的,一幅图是离得很远的拍的,红绿灯在图片里只占了很小的一个角落,即便是对人眼而言,后者图片中的红绿灯也更 ...
- 论文阅读笔记三十三:Feature Pyramid Networks for Object Detection(FPN CVPR 2017)
论文源址:https://arxiv.org/abs/1612.03144 代码:https://github.com/jwyang/fpn.pytorch 摘要 特征金字塔是用于不同尺寸目标检测中的 ...
- 『计算机视觉』FPN:feature pyramid networks for object detection
对用卷积神经网络进行目标检测方法的一种改进,通过提取多尺度的特征信息进行融合,进而提高目标检测的精度,特别是在小物体检测上的精度.FPN是ResNet或DenseNet等通用特征提取网络的附加组件,可 ...
- FPN在faster_rcnn中实现细节代码说明
代码参考自:https://github.com/DetectionTeamUCAS/FPN_Tensorflow 主要分析fpn多层金字塔结构的输出如何进行预测. FPN金字塔结构插入在faster ...
- 【深度学习】目标检测算法总结(R-CNN、Fast R-CNN、Faster R-CNN、FPN、YOLO、SSD、RetinaNet)
目标检测是很多计算机视觉任务的基础,不论我们需要实现图像与文字的交互还是需要识别精细类别,它都提供了可靠的信息.本文对目标检测进行了整体回顾,第一部分从RCNN开始介绍基于候选区域的目标检测器,包括F ...
- Feature Pyramid Networks for Object Detection比较FPN、UNet、Conv-Deconv
https://vitalab.github.io/deep-learning/2017/04/04/feature-pyramid-network.html Feature Pyramid Netw ...
- 利用FPN构建Faster R-CNN检测
FPN就是所谓的金字塔结构的检测器,(Feature Pyramid Network) 把FPN融合到Faster rcnn中能够很大程度增加检测器对全图信息的认知, 步骤如图所示: 1.先将图像送入 ...
- 目标检测之faster-RCNN和FPN
今年(2017年第一季度),何凯明大神出了一篇文章,叫做fpn,全称是:feature pyramid network for object Detection,为什么发这篇文章,根据 我现在了解到的 ...
随机推荐
- webpack dev server 与 hot module replace 提高开发效率
通过 webpack 命令编译源代码时,如果我们对源代码进行了修改,需要重新执行命令才能看到编译后的效果. 这样在开发中非常的影响效率,如果存在一种方式,当文件被修改时,webpack 自动监听重新编 ...
- jsp+servlet实战项目
第一步:新建maven项目,项目中添加dao,entity,service,servlet,util包第二步:导入依赖 第三步:数据库建表 第四步:entity实体包(疯转) 第五步:在util工具包 ...
- 【译】Silverlight 不会消亡 XAML for Blazor 到来
Userware 正在使用早已消失的.令人怀念的微软 Silverlight Web 开发平台的遗留来支持其新的"XAML for Blazor"产品,该产品允许 .NET 开发人 ...
- 【Bash】rm -r 与 rmdir 区别
目录 背景 二者区别 rmdir rm -r rm -rf 测试过程 配置环境 rmdir rm -r rm -rf 参考资料 背景 今天学弟在使用 NVMe-over-TCP 时发现无法卸载 nvm ...
- Laf & 中大猫谱:让每一只流浪猫都有家
猫谱简介 中大猫谱是一款辅助校园流浪猫救助的开源小程序项目,服务端使用 Laf 云开发. 猫谱主要功能包括:猫咪信息登记.照片分享.拍照识猫.公告和留言等.项目创立的初衷,是解决校园猫猫交流群里的一个 ...
- CodeForces 1332E Height All the Same
题意 对于一个\(n*m\)的矩阵,有两种操作 一个格子加二 一个格子和另一个相邻的格子同时加一 通过这两种操作最终使得所有矩阵元素相等 对于矩阵元素来说,有\(L\leq a_{i,j}\leq R ...
- xxl-job初学转载,不断更新
参考:https://blog.csdn.net/xhmico/article/details/122324950 官网与源码下载地址 官网:https://www.xuxueli.com/xxl-j ...
- Avalonia开发(一)环境搭建
一.介绍 开源 GitHub:https://github.com/AvaloniaUI/Avalonia/ 多平台支持,包括Windows.mac OS.Linux.iOS.Android.Sams ...
- mpi转以太网连接300PLC在气动系统中的应用
mpi转以太网连接300PLC在气动系统中的应用 某企业装备有限公司 摘要 工业通讯迅速发展的今天,MPI转以太网通讯已经发展为成熟,稳定,高效通讯 方式,兴达易控自主研发的MPI转以太网模块MPI- ...
- vue上通过krpano.js实现360全景图
首先贴出一些XML对应的函数,文件内容都有注释说明, 前端代码读取xml文件代码 // 初始化 window.embedpano({ xml: 0, target: 'pano', html5: 'o ...