faster R-CNN=RPN+fast R-CNN

①将fm送入RPN(region proposal network),RPN也是一个卷积神经网络,它对于input feature map的每个像素点,预测9个anchor boxes,anchor boxes的中心点坐标就是当前像素点映射到input image上的坐标点(注意从feature map pixel尺度上映射到input image pixel尺度上,中心点坐标需要在feature map pixel尺度上乘以factor,factor是特征图尺度相对于输入图像尺度缩小的因子,只有anchor boxes的中心点坐标与factor有关系,anchor boxes的高和宽都与factor无关,且同一个尺度的特征图上的多个不同aspect ratio的anchor boxes,它们的面积不一定相等,是根据先验知识设定的),anchor boxes的宽和高是人为事先设定的,RPN网络中的卷积并不会改变特征图的分辨率,但是输出的特征图通道数为(#anchor boxes per pixel)*5,表示anchor boxes是前景还是背景的概率,以及对anchor boxes进行坐标回归的4个值。这些(fm_size*fm_size*(#anchor boxes per pixel))个anchor boxes(坐标调整之前的值)将会根据与ground truth  boxes的IOU值判断它是正样本还是负样本,以及对应的分类类别ground truth,也就是说,对于RPN网络,每个anchor boxes都有对应的target。

RPN网络的作用是输出网络模型所认为的正样本(从anchor boxes中挑选)以及其4个坐标值

RPN只是对于anchor boxes进行前景和背景的二分类,以及对于所有anchor boxes中的正样本进行位置粗略调整。

②将fm送入fast R-CNN网络中,根据region proposal network所提出的候选框(region proposals),对于候选框进行进一步地位置精修和类别回归。需要根据region proposal在input image pixel尺度上得到的候选框映射到fm特征图尺度上,在特征图上得到ROI区域,对于每个ROI进行ROI pooling,得到对于region proposal的feature vector,再将特征向量送入全连接层,得到分类类别向量和位置坐标。

RPN和fast R-CNN共享卷积层特征。(region proposal networks share convolutional layers with fast R-CNN or other region-based object detectors)。fast R-CNN使用卷积特征图可以用于基于区域的物体检测器,则它同样可以用来生成region proposals。在backbone网络输出卷积特征图后,再用一些额外的卷积层构建RPN,RPN可以对于feature map的每个位置的多个事先设定的anchor boxes同时回归物体边界(4个坐标值)和objectness score,单独来看,RPN网络是一个全卷积网络(fully convolutional network),并且如果将目标函数设定为为detector生成proposals,则可以对RPN网络进行端到端的训练。这是因为,对于(fm_size*fm_size*#anchors_per_pixel_in_feature_map)中的每个anchor boxes,会根据它与ground truth boxes之间的IOU值判断anchor boxes是正样本还是负样本,如果是负样本,就只计算分类损失(分类为背景),如果是正样本,则要计算分类损失(分类为前景)和回归损失(对于anchor boxes的4个坐标值进行修正,target为corresponding ground truth box coordinates),根据正样本和负样本的损失函数值可以单独训练RPN网络。只对于一个尺度的特征图上的每个像素点设定不同scales、aspect  ratios的anchor boxes,RPN就可以实现预测不同尺度、宽高比的包围框,故而faster R-CNN是通过在单一尺度的特征图上设定不同scales的anchor boxes实现多尺度的bounding boxes的检测。

fast R-CNN模型的输入是RPN模型产生的region proposals,用attention mechanism的角度来看,RPN模型告诉了fast R-CNN模型,该注意图像中的哪些部分。

faster R-CNN网络模型的输入尺寸为任意大小,

faster R-CNN的最终目标是将RPN和fast R-CNN共享计算,假设这些共享的计算是一系列的卷积层,即生成特征图的卷积层,论文中的实验使用了两种卷积backbone(base network):包含5个卷积层的ZF网络,包含13个卷积层的VGG16.

RPN(region proposal network)

RPN网络模型输入是任意尺寸的图像,输出是一系列矩形候选框,每个region proposals都带有一个objectness score(objectness表示当前region proposal是前景还是背景的概率,并不区分具体的物体类别),RPN是用全卷积实现的。对于shared convolutional layers生成的convolutional feature map,将卷积核在feature map上进行滑动,卷积滤波器的输入是feature map上n*n的窗口(论文中RPN使用的是3*3 convolutional filters),每个滑动窗口对应于一个256-dimension(对于ZF模型),512-dimension(对于VGG模型)的feature vector,RPN中的卷积操作将high dimensional feature map映射成lower dimensionalhared feature map卷积操作后的feature map还要经过Relu非线性函数进行激活,经过RPN模型的输出特征图与输入的共享卷积特征图的size不变,使用的是stride=1、kernel size=3的卷积操作。在shared feature map上进行sliding window可以通过卷积操作实现,得到一张与shared feature map分辨率相同、channel num相同的新特征图,对于新特征图的每个spatial space的每个像素点,将会得到一个256维的feature vector(for ZF model ),将每个位置所对应的特征向量分别送入到①regression layer(以全连接层或者1*1的卷积层实现),输出节点数为4*(#anchors_per_pixel),得到在当前像素位置的k个anchor boxes所对应的4个坐标值,②classification layer,输出节点数为2*(#anchors_per_pixel),得到anchor 是前景和背景的分类概率,对于二分类问题,如果输出是2个值,则最终经过的是softmax函数,如果只输出一个值,则经过sigmoid函数进行激活,但是为了在分类层使用cross entropy作为损失函数,使用softmax作为分类器反向求导会更方便。

每个anchor boxes的中心点坐标在feature  map 像素中心点上,对应于input image pixel尺度上需要进行从原图到特征图的尺度映射,anchor boxes的scales和aspect ratios事先指定,for a convolutional feature map of a size W*H,有W*H*(#anchor_per_pixel)个anchor boxes。

论文中说使用全卷积网络实现的RPN具有translation invariant(平移不变性),实际上任何卷积网络都具有平移不变性。(这里的意思是,如果在input image中的object发生了平移,则在feature map上会产生相同位置、scale、aspect ratios的anchor boxes),RPN中regression layer和classification layer的参数数量为:(4+2)*(#anchor_per_pixel),如果用1*1的卷积实现,算上偏置,则卷积层的参数数量=(#in_channel*kernel_size*kernel_size*#out_channel+#output_channels)

通过减少参数数量,可以降低在训练数据集较小时,发生过拟合的风险。

faster R-CNN实现different scale和different aspect ratios的region proposals是通过pyramid of anchors实现的,即通过对于anchor boxes的尺度、宽高比实现,并没有使用image pyramid和feature pyramid。

RPN训练:

正样本positive samples:①与ground truth boxes具有最大IOU值的anchors;②与ground truth IOU值大于0.7的anchor;使用①是因为有可能所有的anchor boxes都不满足条件②

负样本:与所有的ground truth boxes的IOU值都小于0.3

loss function of RPN

faster R-CNN论文中的训练方式:

为了将RPN和fast R-CNN模型融合到同一个网络中,使用4-Steps 交替训练法训练faster R-CNN,RPN模型的task是进行region proposal,fast R-CNN模型的task是对于输入的每个ROI feature vector进行分类和回归,为了将两个模型融合到一起,它们两个所使用的convolutional feature map是共享的。

这里所指的backbone是从input image到shared feature map的部分

1.使用ImageNet数据集上backbone+RPN模型参数进行微调/训练

2. 根据步骤1中训练得到的region proposals训练fast R-CNN(backbone+fast R-CNN)

至此,RPN和fast R-CNN并没有共享backbone部分的参数

3. 保持fast R-CNN模型参数不变,保持backbone参数不变,微调/训练RPN模型参数

4. 保持RPN和backbone参数固定不变,微调/训练fast R-CNN模型参数

这个4步训练可以迭代多次,但是对于检测结果并没有太大提升。

下面描述将ZF model作为feature extraction network的情况:

https://blog.csdn.net/hunterlew/article/details/71075925

https://blog.csdn.net/ying86615791/article/details/72788414

https://zhuanlan.zhihu.com/p/31426458

http://www.telesens.co/2018/03/11/object-detection-and-classification-using-r-cnns/

neural network中的fully connected layer可以用1*1convolutional layer代替。其中,全连接层的input layers节点为N,output layer节点为M,则可以将输入的N个节点看作是一个1*1*N的input image,通过1*1*M(output channel=M)的卷积滤波器,可以输出1*1*M的feature map,对应到全连接层的输出。

anchor boxes的aspect ratios(宽高比)

指的是宽(列数)与高(行数)的比例,对于text detection文本检测,都是具有很大的aspect ratios。

faster R-CNN模型实现过程相关推荐

  1. Faster R CNN

    Faster R CNN 3 FASTER R-CNN 我们的Faster R CNN 由两个模块组成,第一个模块是 proposes regions 的全卷积网络,第二个是使用 proposed r ...

  2. 使用 tensorflow lite 进行CNN模型量化过程中遇到的问题

    首先,吐槽下tensorflow lite(1.13)的量化工具太不友好了,不仅相关论文写的晦涩难懂,而且实际操作过程中莫名其妙的问题层出不穷.为了解决这些bug,博主可谓费尽脑汁,终于在头发掉完之前 ...

  3. CNN模型预测股票涨跌的始末过程——(一)股票数据的获取

    CNN模型预测股票涨跌的始末过程--(一)股票数据的获取[附源码和数据] 股票数据的获取 Choice数据 - 东方财富 Tushare BigQuant 最后列一下我下载成功的数据 股票数据的获取 ...

  4. R语言使用keras包实现包含多个全连接层的二分类预测模型:在模型训练过程中动态可视化每个epoch后的loss值以及accuray值

    R语言使用keras包实现包含多个全连接层的二分类预测模型:在模型训练过程中动态可视化每个epoch后的loss值以及accuray值 目录

  5. CNN模型复杂度(FLOPs、MAC)、参数量与运行速度

    CNN模型复杂度(FLOPs.MAC).参数量与运行速度 先转载一下,有空再来整理 文章目录 0. 模型复杂度简介 1. 模型复杂度之一:模型参数量的计算方法 卷积层参数量计算 全连接层参数量计算 2 ...

  6. keras入门(三)搭建CNN模型破解网站验证码

    项目介绍   在文章CNN大战验证码中,我们利用TensorFlow搭建了简单的CNN模型来破解某个网站的验证码.验证码如下: 在本文中,我们将会用Keras来搭建一个稍微复杂的CNN模型来破解以上的 ...

  7. 深度学习(四):卷积神经网络(CNN)模型结构,前向传播算法和反向传播算法介绍。

    在前面我们讲述了DNN的模型与前向反向传播算法.而在DNN大类中,卷积神经网络(Convolutional Neural Networks,以下简称CNN)是最为成功的DNN特例之一.CNN广泛的应用 ...

  8. 基于深度学习的轴承故障识别-构建基础的CNN模型

    上回书说到,处理序列的基本深度学习算法分别是循环神经网络(recurrent neural network)和一维卷积神经网络(1D convnet).上篇构建了基础的LSTM模型,这一篇自然轮到CN ...

  9. 一些常见的CNN模型

    最近闲着无聊在家敲了一些基本的CNN模型,这里对网上资料做一个简要的整理总结,供自己学习使用. 一.VGG ​ VGG模型是2014年ILSVRC竞赛的第二名,第一名是GoogLeNet.但是VGG模 ...

  10. 基于LSTM、RNN及滑动窗口CNN模型的股票价格预测

    基于LSTM.RNN及滑动窗口CNN模型的股票价格预测 Abstract 股票市场或股票市场对当今经济产生深远影响.股价的上涨或者下跌对投资者的收益具有重要的决定作用.现有的预测方法使用线性(AR,M ...

最新文章

  1. 调试JDK源码-HashSet实现原理
  2. win10系统英雄联盟老是重新连接服务器,win10lol重新连接无法连接服务器重试该怎么才能解决...
  3. Linux Mint 13 root登录
  4. 浏览器崩溃时提示137错误
  5. Titanium开发环境搭建第一个坑
  6. rabbitmq多个消费者监听一个队列_RabbitMQ的六种工作模式
  7. 员工管理系统---SpringBoot
  8. 三个监控linux网卡流量脚本
  9. tcp_tw_reuse、tcp_tw_recycle 使用场景及注意事项
  10. Linux用户登录日志查询
  11. Excel加密如何破解
  12. 服务器中心地址,互联网时间同步服务器地址(国家授时中心服务器)
  13. 数据科普:期权的希腊字母 | 上(投资必知必会)
  14. 微信小程序开发之——调查问卷-服务器数据交互(2.2.3)
  15. Centos 误删rpm命令拯救
  16. Xilinx ZYNQ 7000学习笔记一(复位和启动)
  17. vpc自建服务器,虚拟私有云VPC搭建IPv6网络教程
  18. 1.23 lseek函数
  19. Zeebe:用于微服务编排的开源工作流引擎--Camunda出品
  20. 运维必备技能(武器库)

热门文章

  1. input密码框获取焦点,不出现账号密码下拉列表
  2. Flink内核源码(八)Flink Checkpoint
  3. 2021年安全员-B证考试题及安全员-B证模拟考试题
  4. python parse函数_Python3的urllib.parse常用函数小结
  5. 时间计算题100道_时间不够用?题目做不完?做题攻略和时间分配来啦
  6. javafx 多线程赛马设计
  7. 你能学会的UGNX数控编程平面轮廓铣教程
  8. 计算机网络英文介绍,《计算机网络英文版》.doc
  9. Salesforce和CRM
  10. 【JS】随机点名小案例