keras框架:目标检测Faster-RCNN思想及代码

Faster-RCNN(RPN + CNN + ROI)概念

Faster RCNN可以分为4个主要内容:

  1. Conv layers:作为一种CNN网络目标检测方法,Faster RCNN首先使用一组基础的conv+relu+pooling层提取 image的feature maps。该feature maps被共享用于后续 RPN层和全连接层。
  2. Region Proposal Networks:RPN网络用于生成region proposals。通过softmax判断anchors属于positive或者 negative,再利用bounding box regression修正anchors 获得精确的proposals。
  3. Roi Pooling:该层收集输入的feature maps和proposals, 综合这些信息后提取proposal feature maps,送入后续 全连接层判定目标类别。
  4. Classification:利用proposal feature maps计算 proposal的类别,同时再次bounding box regression获 得检测框最终的精确位置。
    在这里插入图片描述

整体流程:

在这里插入图片描述

Faster-RCNN:conv layer

Conv layers包含了conv,pooling,relu三种层。共有13个conv层,13个relu层,4个pooling层。
在Conv layers中:

  1. 所有的conv层都是:kernel_size=3,pad=1,stride=1
  2. 所有的pooling层都是:kernel_size=2,pad=1,stride=2

在Faster RCNN Conv layers中对所有的卷积都做了pad处理( pad=1,即填充一圈0),导致原图 变为 (M+2)x(N+2)大小,再做3x3卷积后输出MxN 。正是这种设置,导致Conv layers中的conv层 不改变输入和输出矩阵大小。
在这里插入图片描述
类似的是,Conv layers中的pooling层kernel_size=2,stride=2。 这样每个经过pooling层的MxN矩阵,都会变为(M/2)x(N/2)大小。
综上所述,在整个Conv layers中,conv和relu层不改变输入输出大小,只有pooling层使输出长 宽都变为输入的1/2。
那么,一个MxN大小的矩阵经过Conv layers固定变为(M/16)x(N/16)。 这样Conv layers生成的feature map都可以和原图对应起来。

Faster-RCNN:Region Proposal Networks(RPN)

区域生成网络Region Proposal Networks(RPN)

经典的检测方法生成检测框都非常耗时。直接使用RPN生成检测框,是Faster R-CNN的巨大优势,能极大提升检测框的生成速度。
在这里插入图片描述
• 可以看到RPN网络实际分为2条线:

  1. 上面一条通过softmax分类anchors获得positive和negative分类;
  2. 下面一条用于计算对于anchors的bounding box regression偏移量,以获得精确的proposal。

• 而最后的Proposal层则负责综合positive anchors和对应bounding box regression偏移量获取 proposals,同时剔除太小和超出边界的proposals。
• 其实整个网络到了Proposal Layer这里,就完成了相当于目标定位的功能。

anchors

RPN网络在卷积后,对每个像素点,上采样映射到原始图像一个区域,找到这 个区域的中心位置,然后基于这个中心 位置按规则选取9种anchor box。
9个矩形共有3种面积:128,256,512; 3种形状:长宽比大约为1:1, 1:2, 2:1。 (不是固定比例,可调) 每行的4个值表示矩形左上和右下角点坐标。
在这里插入图片描述
遍历Conv layers获得的feature maps,为每一个点都 配备这9种anchors作为初始的检测框。
在这里插入图片描述
这些anchor box都是对应于原图的尺寸,可以直接使用标记的候选框和分类结果进行训练。其中:

  1. 把每个标定的ground-truth box与其重叠最大的anchor box记为正样本。(保证每个ground-truth box 至少对应一个正样本anchor)
  2. 剩余的anchor box与某个ground-truth box重叠大于0.7的记为正样本。(每个ground-truth box可能 会对应多个正样本anchor。但每个正样本anchor只可能对应一个grand-truth box)
  3. 与任意一个标记ground-truth box重叠小于0.3的anchor box记为负样本。
  4. 其余的舍弃。 这样做获得检测框很不准确,通过后面的2次bounding box regression可以修正检测框位置。

softmax判定positive与negative

其实RPN最终就是在原图尺度上,设置了密密麻麻的候选Anchor。然后用cnn去判断哪些Anchor是里面 有目标的positive anchor,哪些是没目标的negative anchor。所以,仅仅是个二分类而已。
在这里插入图片描述
可以看到其num_output=18,也就是经过该卷积的输出图像为WxHx18大小。
这也就刚好对应了feature maps每一个点都有9个anchors,同时每个anchors又有可能是positive和 negative,所有这些信息都保存在WxHx(9*2)大小的矩阵。
注意这里的18,后面之所以reshape成为18也是因为对应这18个元素的原因
为何这样做?
后面接softmax分类获得positive anchors,也就相当于初步提取了检测目标候选区域box (一般认为目标在positive anchors中)。

那么为何要在softmax前后都接一个reshape layer?
其实只是为了便于softmax分类。 前面的positive/negative anchors的矩阵,其在caffe中的存储形式为[1, 18, H, W]。而在softmax 分类时需要进行positive/negative二分类,所以reshape layer会将其变为[1, 2, 9xH, W]大小,即 单独“腾空”出来一个维度以便softmax分类,之后再reshape回复原状。

对proposals进行bounding box regression

在这里插入图片描述
可以看到其 num_output=36,即经过该卷积输出图像为WxHx36。 这里相当于feature maps每个点都有9个anchors,每个anchors又都有4个用于回归的变换量:
在这里插入图片描述

Proposal Layer

Proposal Layer负责综合所有变换量和positive anchors,计算出精准的proposal,送入后续RoI Pooling Layer。
Proposal Layer有4个输入:

  1. positive vs negative anchors分类器结果rpn_cls_prob_reshape,
  2. 对应的bbox reg的变换量rpn_bbox_pred,
  3. im_info
  4. 参数feat_stride=16

im_info:对于一副任意大小PxQ图像,传入Faster RCNN前首先reshape到固定MxN,im_info=[M, N, scale_factor]则保存了此次缩放的所有信息。
输入图像经过Conv Layers,经过4次pooling变为WxH=(M/16)x(N/16)大小,其中feature_stride=16则保 存了该信息用于计算anchor偏移量。

Proposal Layer 按照以下顺序依次处理:

  1. 利用变换量对所有的anchors做bbox regression回归
  2. 按照输入的positive softmax scores由大到小排序anchors,提取前pre_nms_topN(e.g. 6000)个anchors, 即提取修正位置后的positive anchors。
  3. 限定超出图像边界的positive anchors为图像边界,防止后续roi pooling时proposal超出图像边界。
  4. 剔除尺寸非常小的positive anchors。
  5. 对剩余的positive anchors进行NMS(non-maximum suppression)。
  6. 之后输出proposal。

注意,由于在第三步中将anchors映射回原图判断是否超出边界,所以这里输出的proposal是对应MxN输 入图像尺度的,这点在后续网络中有用。
严格意义上的检测应该到此就结束了,后续部分应该属于识别了。

RPN网络结构就介绍到这里,总结起来就是:

生成anchors -> softmax分类器提取positvie anchors -> bbox reg回归positive anchors -> Proposal Layer生成proposals

Faster-RCNN:Roi pooling

RoI Pooling概念

RoI Pooling层则负责收集proposal,并计算出proposal feature maps,送入后续网络。
Rol pooling层有2个输入:

  1. 原始的feature maps
  2. RPN输出的proposal boxes(大小各不相同)

为何需要RoI Pooling?
对于传统的CNN(如AlexNet和VGG),当网络训练好后输入的图像尺寸必须是固定值,同时网络输出也 是固定大小的vector or matrix。如果输入图像大小不定,这个问题就变得比较麻烦。
有2种解决办法:

  1. 从图像中crop一部分传入网络将图像(破坏了图像的完整结构)
  2. warp成需要的大小后传入网络(破坏了图像原始形状信息在这里插入图片描述

RoI Pooling原理

新参数pooled_w、pooled_h和spatial_scale(1/16)
RoI Pooling layer forward过程:

  1. 由于proposal是对应MN尺度的,所以首先使用spatial_scale参数将其映射回(M/16)(N/16)大小 的feature map尺度;
  2. 再将每个proposal对应的feature map区域水平分为poold_w * pooled_h的网格;
  3. 对网格的每一份都进行max pooling处理。

这样处理后,即使大小不同的proposal输出结果都是poold_w * pooled_h固定大小,实现了固定长度输出。
在这里插入图片描述

Faster-RCNN: Classification

Classification部分利用已经获得的proposal feature maps,通过full connect层与softmax计算每个proposal具体属于那个类别(如人,车,电视等),输出cls_prob概率向量;
同时再次利用bounding box regression获得每个proposal的位置偏移量bbox_pred,用于回归更加精确的目标检测框。
在这里插入图片描述
从RoI Pooling获取到poold_w * pooled_h大小的proposal feature maps后,送入后续网络,做了如下2 件事:

  1. 通过全连接和softmax对proposals进行分类,这实际上已经是识别的范畴了
  2. 再次对proposals进行bounding box regression,获取更高精度的预测框

全连接层InnerProduct layers:
在这里插入图片描述
输入X和输出Y是固定大小。所以,这也就印证了之前Roi Pooling的 必要性
在这里插入图片描述

代码实现:

因为代码非常多,所以放在资源里面。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/389462.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

算法偏见是什么_算法可能会使任何人(包括您)有偏见

算法偏见是什么在上一篇文章中,我们展示了当数据将情绪从动作中剥离时会发生什么 (In the last article, we showed what happens when data strip emotions out of an action) In Part 1 of this series, we argued that data can turn anyone into a psychopath, …

大数据笔记-0907

2019独角兽企业重金招聘Python工程师标准>>> 复习: 1.clear清屏 2.vi vi xxx.log i-->edit esc-->command shift:-->end 输入 wq 3.cat xxx.log 查看 --------------------------- 1.pwd 查看当前光标所在的path 2.家目录 /boot swap / 根目录 起始位置 家…

Tensorflow框架:目标检测Yolo思想

Yolo-You Only Look Once YOLO算法采用一个单独的CNN模型实现end-to-end的目标检测: Resize成448448,图片分割得到77网格(cell)CNN提取特征和预测:卷积部分负责提取特征。全链接部分负责预测:过滤bbox(通过nms&#…

线性回归非线性回归_了解线性回归

线性回归非线性回归Let’s say you’re looking to buy a new PC from an online store (and you’re most interested in how much RAM it has) and you see on their first page some PCs with 4GB at $100, then some with 16 GB at $1000. Your budget is $500. So, you es…

朴素贝叶斯和贝叶斯估计_贝叶斯估计收入增长的方法

朴素贝叶斯和贝叶斯估计Note from Towards Data Science’s editors: While we allow independent authors to publish articles in accordance with our rules and guidelines, we do not endorse each author’s contribution. You should not rely on an author’s works wi…

numpy统计分布显示

import numpy as np from sklearn.datasets import load_iris dataload_iris()petal_lengthnumpy.array(list(len[2]for len in data[data]))#取出花瓣长度数据 print(np.max(petal_length))#花瓣长度最大值 print(np.mean(petal_length))#花瓣长度平均值 print(np.std(petal_l…

Keras框架:人脸检测-mtcnn思想及代码

人脸检测-mtcnn 概念: MTCNN,英文全称是Multi-task convolutional neural network,中文全称是多任务卷积神经网络, 该神经网络将人脸区域检测与人脸关键点检测放在了一起。 从工程实践上,MTCNN是一种检测速度和准确率…

python中格式化字符串_Python中所有字符串格式化的指南

python中格式化字符串Strings are one of the most essential and used datatypes in programming. It allows the computer to interact and communicate with the world, such as printing instructions or reading input from the user. The ability to manipulate and form…

Javassist实现JDK动态代理

提到JDK动态代理,相信很多人并不陌生。然而,对于动态代理的实现原理,以及如何编码实现动态代理功能,可能知道的人就比较少了。接下一来,我们就一起来看看JDK动态代理的基本原理,以及如何通过Javassist进行模…

数据图表可视化_数据可视化如何选择正确的图表第1部分

数据图表可视化According to the World Economic Forum, the world produces 2.5 quintillion bytes of data every day. With so much data, it’s become increasingly difficult to manage and make sense of it all. It would be impossible for any person to wade throug…

Keras框架:实例分割Mask R-CNN算法实现及实现

实例分割 实例分割(instance segmentation)的难点在于: 需要同时检测出目标的位置并且对目标进行分割,所以这就需要融合目标检测(框出目标的位置)以及语义分割(对像素进行分类,分割…

机器学习 缺陷检测_球检测-体育中的机器学习。

机器学习 缺陷检测🚩 目标 (🚩Objective) We want to evaluate the quickest way to detect the ball in a sport event in order to develop an Sports AI without spending a million dollars on tech or developers. Quickly we find out that detec…

使用python和javascript进行数据可视化

Any data science or data analytics project can be generally described with the following steps:通常可以通过以下步骤来描述任何数据科学或数据分析项目: Acquiring a business understanding & defining the goal of a project 获得业务理解并定义项目目…

为什么饼图有问题

介绍 (Introduction) It seems as if people are split on pie charts: either you passionately hate them, or you are indifferent. In this article, I am going to explain why pie charts are problematic and, if you fall into the latter category, what you can do w…

先知模型 facebook_使用Facebook先知进行犯罪率预测

先知模型 facebookTime series prediction is one of the must-know techniques for any data scientist. Questions like predicting the weather, product sales, customer visit in the shopping center, or amount of inventory to maintain, etc - all about time series …

github gists 101使代码共享漂亮

If you’ve been going through Medium, looking at technical articles, you’ve undoubtedly seen little windows that look like the below:如果您一直在阅读Medium,并查看技术文章,那么您无疑会看到类似于以下内容的小窗口: def hello_…

基于Netty的百万级推送服务设计要点

1. 背景1.1. 话题来源最近很多从事移动互联网和物联网开发的同学给我发邮件或者微博私信我,咨询推送服务相关的问题。问题五花八门,在帮助大家答疑解惑的过程中,我也对问题进行了总结,大概可以归纳为如下几类:1&#x…

鲜为人知的6个黑科技网站_6种鲜为人知的熊猫绘图工具

鲜为人知的6个黑科技网站Pandas is the go-to Python library for data analysis and manipulation. It provides numerous functions and methods that expedice the data analysis process.Pandas是用于数据分析和处理的Python库。 它提供了加速数据分析过程的众多功能和方法…

VRRP网关冗余

实验要求 1、R1创建环回口,模拟外网 2、R2,R3使用VRRP技术 3、路由器之间使用EIGRP路由协议  实验拓扑  实验配置  R1(config)#interface loopback 0R1(config-if)#ip address 1.1.1.1 255.255.255.0R1(config-if)#int e0/0R1(config-if)#ip addr…

大熊猫卸妆后_您不应错过的6大熊猫行动

大熊猫卸妆后数据科学 (Data Science) Pandas is used mainly for reading, cleaning, and extracting insights from data. We will see an advanced use of Pandas which are very important to a Data Scientist. These operations are used to analyze data and manipulate…