Python----目标检测(《基于区域提议网络的实时目标检测方法》和Faster R-CNN)

一、《基于区域提议网络的实时目标检测方法》

1.1、基本信息

  • 标题:Faster R-CNN: Towards Real-Time Object Detection with Region Proposal Networks

  • 作者:任少卿(中国科学技术大学、微软研究院)、何凯明(微软研究院)、Ross Girshick(Facebook AI Research)、孙剑(微软研究院)

  • 发表时间:2015年(会议版本为NIPS 2015)

  • 代码开源:提供MATLAB和Python实现

MATLAB开源地址:

ShaoqingRen/faster_rcnn: Faster R-CNN
Python开源地址

rbgirshick/py-faster-rcnn: Faster R-CNN (Python implementation) -- see https://github.com/ShaoqingRen/faster_rcnn for the official MATLAB version

1.2、主要内容

核心创新

区域建议网络(RPN, Region Proposal Network)

一种全卷积网络(FCN),直接在卷积特征图上生成高质量的区域建议,与检测网络共享计算,显著降低时间开销。

引入**锚点(anchors)**机制:通过预定义的多个尺度和宽高比的参考框(如3种尺度×3种宽高比,共9种锚点),覆盖不同物体大小和形状,避免传统图像金字塔或滤波器金字塔的计算冗余。

网络架构

端到端训练:RPN与Fast R-CNN共享卷积层,通过交替训练策略(4步训练)联合优化:

训练RPN生成建议;

用RPN建议训练Fast R-CNN;

固定共享层,微调RPN;

固定共享层,微调Fast R-CNN。

多任务损失函数:结合分类损失(物体/非物体)和回归损失(边界框修正)。

性能优势

速度:VGG-16模型在GPU上达到5帧/秒(包括所有步骤),ZF模型达17帧/秒。

精度:在PASCAL VOC 2007/2012、MS COCO等数据集上取得当时最优结果(如VOC 2007测试集mAP 73.2%)。

1.3、作用影响

技术突破

首次实现端到端的实时级物体检测框架,解决了区域建议的计算瓶颈问题。

提出锚点机制共享卷积特征设计,成为后续检测模型(如Mask R-CNN、YOLO系列)的重要参考。

竞赛与应用

ILSVRC & COCO 2015:作为基础模型助力多项竞赛夺冠(检测、定位、分割等)。

工业应用:被Pinterest等公司用于推荐系统,提升用户交互效率。

学术影响

推动了基于深度学习的物体检测研究,启发了3D检测、实例分割、图像描述等方向的工作。结合更深的网络(如ResNet-101)后,性能进一步提升(COCO数据集mAP达59.0%)。

开源贡献

公开的代码和预训练模型成为学术界和工业界的基准工具,加速了后续研究的迭代与优化。

原论文地址:

[1506.01497] Faster R-CNN: Towards Real-Time Object Detection with Region Proposal Networks

二、Faster R-CNN

与Fast R-CNN的区别

由Shaoqing Ren, Kaiming He, Ross B. Girshick和Jian Sun在2015年提出 的,它是Fast R-CNN的改进版本。 其主要创新在于引入了区域建议网络 (Region Proposal Network, RPN),使得整个目标检测过程能够在一个 神经网络中完成,从而大幅提高了检测效率和准确性。

backbone同样使用VGGNet-16。

最先进的目标检测网络依赖于区域建议算法来假设目标位置。SPPnet [1] 和 Fast R-CNN [2] 等进展减少了这些检测网络的运行时间,但区域建议计算却成为瓶颈。本文提出一种区域建议网络(Region Proposal Network, RPN),该网络与检测网络共享全图像卷积特征,从而实现近乎零成本生成区域建议。RPN 是一种全卷积网络,可在每个位置同时预测目标边界和目标性分数(objectness score)。通过端到端训练,RPN 能够生成高质量区域建议,供 Fast R-CNN 进行检测。我们进一步将 RPN 和 Fast R-CNN 合并为一个网络(共享卷积特征),即用神经网络的"注意力"机制术语来说,RPN 模块告诉统一网络需要关注的位置。对于极深的 VGG-16 模型 [3],我们的检测系统在 GPU 上以 5 帧/秒的帧率运行(包含所有步骤),同时在 PASCAL VOC 2007、2012 和 MS COCO 数据集上仅需每图 300 个建议即可达到最优检测精度。在 ILSVRC 和 COCO 2015 竞赛中,Faster R-CNN 和 RPN 是多个赛道第一名方案的基础。代码已开源。

关键词:目标检测,区域建议,卷积神经网络。

2.1、Faster R-CNN的架构

Faster R-CNN的整体架构包括以下几个主要部分:

  1. 卷积神经网络(CNN):将图片输入CNN得到输入图像的特征图。

  2. 区域建议网络(RPN):生成候选区域(Region Proposals)。

  3. RoI Pooling层:将RPN生成的候选区域映射到特征图上,并通过池化 操作得到固定尺寸的特征。

  4. 分类和回归网络:对RoI Pooling层输出的特征进行分类和边界框回归。

2.2、实现流程

特征提取

区域建议网络(RPN)

候选区域的筛选

RoI Pooling

分类和回归

特征提取

输入图像首先通过一个预训练的卷积神经网络(如VGG-16)来提取特征 图。这部分和Fast R-CNN相同,通常称为backbone。

区域建议网络(RPN)

上图中:k是anchor boxes个数,2k是分类算法的两个概率分数(前景和 背景),4k是每个anchor的边界框回归参数,256-d是256 Dimension, 即2013年AlexNet优化ZF的最后一层卷积的通道数,2014年的VGGNet是 512-d。

RPN是Faster R-CNN的核心创新部分。它在特征图上滑动一个小的网络窗 口,以生成候选区域。具体步骤如下:

滑动窗口:在特征图上使用一个3x3的滑动窗口,生成一个256-d的特 征图。

锚框(Anchor Boxes):每个滑动窗口中心点生成一组锚框(anchor boxes),这些锚框具有不同的尺度和纵横比。

回归和分类:对于每个锚框,RPN输出两个预测:

一个是该锚框是目标的概率(背景/前景)。

另一个是锚框的调整参数(回归偏移量)。

滑动窗口

在特征图上用3x3的滑动窗口进行滑动,每滑动到一个地方,就对应原图的 一个中心点的位置。

如何将特征图对应中心点的位置呢?

答:原图的宽度/特征图的宽度取整,得到x轴缩放比例,那么特征图 上x轴第三个位置的黑色中心点对应原图上x轴的3*缩放比例。高度(y 轴)同理。

以原图为中心点计算k个anchor Boxes。

锚框(Anchor Boxes)

每个滑动窗口中心点生成一组锚框(anchor boxes),这些锚框具有不同 的长宽尺度(128像素,256像素,512像素)和纵横比(1:1,2:1,1:2) 共九个,如上图与下图显示了其中三个。

回归和分类


感受野

感受野(Receptive Field),指的是神经网络中神经元"看到的"输入区域,在卷积神 经网络中,feature map上某个元素的计算受输入图像上某个区域的影响,这个区域 即该元素的感受野。

卷积神经网络中,越深层的神经元看到的输入区域越大,如下图所示,卷积核kernel size 均为3×3,stride均为1,绿色标记的是Layer2每个神经元看到的区域,黄色标记 的是Layer3 看到的区域,具体地,Layer2每个神经元可看到Layer1上3×3 大小的区 域,Layer3 每个神经元看到Layer2 上3×3 大小的区域,该区域可以又看到Layer1上 5×5 大小的区域。

所以,感受野是个相对概念,某层feature map上的元素看到前面不同层上的区域范 围是不同的,通常在不特殊指定的情况下,感受野指的是看到输入图像上的区域。


Anchor Box

Anchor Box中可能包含前景,也可能不包含前景,所以2k scores意味着2 个分数概率,每2个为一组对应一个Anchor Box,前一个为背景的概率, 后一个为前景的概率,这里前景并不判断它是什么(例如:person、car 等),只看是否包含前景,每个滑动窗口有18个Anchor Boxes。

4k coordinates意味着4个边界框回归参数,每4个为一组对应一个Anchor Box,每个滑动窗口有36个Anchor Boxes。

感受野与Anchor Box的关系:

他们没有直接的关系,在AlexNet的改进版本ZF中,输出的3x3的 窗口对应的原图上的感受野为171;在VGGNet中,输出的3x3的窗口 对应的原图上的感受野为228。
为什么小的感受野可以预测更大的(256或者512)目标的边界框?

作者的文章中提到:"We note that our algorithm allows predictions that are larger than the underlying receptive field. Such predictions are not impossible---one may still roughly infer the extent of an object if only the middle of the object is visible.", 即:我们注意到,我们的算法允许比潜在感受野更大的预测。这样的 预测并非不可能------如果只有物体的中间可见,人们仍然可以大致推 断出物体的范围。也就是说:当我们看到物体的一部分时,就大致可 以判断物体的范围了,实际上表现出来的也是这个结论。

正负样本

一张图上有上万个Anchor Box,随机抽取256个Anchor Box去训练,这 256中正负样本比例是1:1,如果正样本不够128个,那么剩下的就是256 正样本=负样本,即如果只有100个正样本,那么就用156的负样本,保证 整体数量256。

正样本选择方式:

Anchor Box与GT BOX的IoU大于0.7即为正样本。

Anchor Box与GT BOX的IoU最大的那个即为正样本。

负样本选择方式:

Anchor Box与GT BOX的IoU小于0.3即为负样本。

不是正样本和负样本的其它Anchor Box,丢弃。

RPN的损失函数

2.3、分类损失

但是需要注意的是:二分类交叉熵损失只需要一个x就可以得到二分类的结 果,多分类的交叉熵损失需要两个x才可以得到二分类结果,从论文中看, scores是2k个,也就意味这论文使用的是多分类交叉熵,二分类交叉熵只 需要k个即可。但是这个不影响结果,该分还是能分开的。

2.4、回归损失

候选区域的筛选

RPN生成大量的候选区域,通过非极大值抑制(NMS)和去除低得分候选 区域的方法,筛选出一部分高质量的候选区域。

RoI Pooling

将筛选出的候选区域映射到特征图上,通过RoI Pooling层将不同大小的候 选区域变换为固定大小的特征向量 。

分类和回归

最后,经过RoI Pooling层的特征向量通过全连接层进行分类(确定目标类 别)和回归(调整候选框)。这里的分类和回归与Fast R-CNN中使用的相同。

三、训练

正常情况下,应该将RPN网络的损失和Fast R-CNN中的损失加起来,然后 一起进行反向传播。

原论文中采用分别训练RPN以及Fast R-CNN的方法

  1. 利用lmageNet预训练分类模型初始化前置卷积网络层参数,并开始单 独训练RPN网络参数;

  2. 固定RPN网络独有的卷积层以及全连接层参数,再利用ImageNet预训 练分类模型初始化前置卷积网络参数,并利用RPN网络生成的目标建议 框去训练FastRCNN网络参数。

  3. 固定利用FastRCNN训练好的前置卷积网络层参数,去微调RPN网络独 有的卷积层以及全连接层参数。

  4. 同样保持固定前置卷积网络层参数,去微调FastRCNN网络的全连接层 参数。最后RPN网络与FastRCNN网络共享前置卷积网络层参数,构成 一个统一网络。

相关推荐
bluebonnet2736 分钟前
【agent开发】部署LLM(一)
python·llama
zskj_zhyl1 小时前
从“被动养老”到“主动健康管理”:平台如何重构代际关系?
大数据·人工智能·重构
HHBon1 小时前
判断用户输入昵称是否存在(Python)
linux·开发语言·python
奔跑吧邓邓子1 小时前
DeepSeek 赋能车路协同:智能交通的破局与重构
人工智能·应用·车路协同·智能交通·deepseek
不剪发的Tony老师2 小时前
sqlite-vec:谁说SQLite不是向量数据库?
数据库·人工智能·sqlite
小猪猪_12 小时前
神经网络与深度学习(第二章)
深度学习·神经网络·机器学习
白熊1883 小时前
【机器学习基础】机器学习入门核心:Jaccard相似度 (Jaccard Index) 和 Pearson相似度 (Pearson Correlation)
人工智能·机器学习
敢敢变成了憨憨3 小时前
java操作服务器文件(把解析过的文件迁移到历史文件夹地下)
java·服务器·python
敲键盘的小夜猫3 小时前
Milvus向量Search查询综合案例实战(下)
数据库·python·milvus
pen-ai3 小时前
【深度学习】17. 深度生成模型:DCGAN与Wasserstein GAN公式深度推导
人工智能·深度学习·生成对抗网络