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. 人工智能改进传统云ERP的10种方法
  2. 病毒周报(100719至100725)
  3. rank() over,dense_rank(),row_number() 的区别
  4. 单细胞数据库PanglaoDB使用指南
  5. layui多个file与提交同时进行_如何“不累”地完成多个同时进行的工作?
  6. (Head First 设计模式)学习笔记(1)
  7. 在redhat6.3 安装oracle 11.2.0.1遇到的错误
  8. WindowsService 安装后报错: 无法启动计算机“.”上的服务 解决方案
  9. greenplum 查询出来的数字加减日期_Python实践代码总结第5集(日期相关处理)
  10. c++矩阵类_面向对象有限元编程|单元类
  11. srand rand time函数设置随机值
  12. 分享12306抢票心得-最终篇
  13. Linux环境安装配置Swftools
  14. 【恋上数据结构】复杂度知识以及LeetCode刷题指南
  15. easyUI 动态参数名称和动态参数值
  16. Ubuntu18.04终端里,随意拖动或双击会出现ctrl+C的效果,解决
  17. ElasticSearch8.1.2 ik分词器
  18. 中控H10考勤机管理员密码破解
  19. 学习Java可以干什么?
  20. 人声分离攻破“鸡尾酒会”效应,将为语音识别带来哪些新可能?

热门文章

  1. faster rcnn中RPN网络源码分析(pytorch)
  2. 元宇宙 3D 开荒场 - 探味奇遇记
  3. apache服务器如何实现301重定向
  4. 【项目实战】TP5验证码的引用
  5. 经历一周的远程办公,你还期待天天在家上班吗?
  6. java越权_从Java的角度简单修复Cookie越权漏洞
  7. prometheus服务监控之mysql监控
  8. mysql横向分区_MySQL 横向表分区之RANGE分区小结
  9. Host与SSD交互步骤以及head,tail获取
  10. CSDN超级实习生计划来啦——大厂实习直通车