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网络共享前置卷积网络层参数,构成 一个统一网络。

 

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

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

相关文章

吴恩达讲解MCP基础概念

简介 MCP 是一个开放协议 标准化了您的语言模型应用如何获取工具和数据资源的上下文。基于客户端-服务器架构,它定义了您的语言模型应用中的MCP客户端与MCP服务器之间的通信方式,MCP服务器提供工具 数据资源和提示模板给您的应用,自Anthropic于2024年11月推出MCP以来,MCP生…

Git入门到精通:30分钟掌握核心技巧

目录 一、基础理论片 Git简介 Git安装 Git仓库 Git基本命令用法 仓库别名 二、实操命令篇 远程分支 分支的新建和合并 实操演示 1 本地新建仓库 2 gitee新建仓库 3 建立关系 4 新建分支 5 开发新功能 6 推送新分支 7 合并新分支到主分支 三、可视化工具篇 G…

零基础设计模式——结构型模式 - 代理模式

第三部分:结构型模式 - 代理模式 (Proxy Pattern) 在学习了享元模式如何通过共享对象来优化资源使用后,我们来探讨结构型模式的最后一个模式——代理模式。代理模式为另一个对象提供一个替身或占位符以控制对这个对象的访问。 核心思想:为其…

【OSS】 前端如何直接上传到OSS 上返回https链接,如果做到OSS图片资源加密访问

使用阿里云OSS(对象存储服务)进行前端直接上传并返回HTTPS链接,同时实现图片资源的加密访问,可以通过以下步骤实现: 前端直接上传到OSS并返回HTTPS链接 设置OSS Bucket: 确保你的OSS Bucket已创建&#xf…

TDenigne 集群可视化管理

可视化管理工具 为方便用户更高效地使用和管理 TDengine,TDengine 3.0 版本推出了一个全新的可视化组件 taosExplorer。这个组件旨在帮助用户在不熟悉 SQL 的情况下,也能轻松管理 TDengine 集群。通过 taosExplorer,用户可以轻松查看 TDengi…

Centos7安装gitlab

环境准备: 操作系统:Centos7 内存:2G以上 磁盘:50G 安全:关闭防火墙,selinux 1、安装GitLab所需依赖 yum -y install policycoreutils openssh-server openssh-clients postfix 2、设置postfix开机自启…

【前端面经】云智慧一面

写在前面:面经只是记录博主遇到的题目。每题的答案在编写文档的时候已经有问过deepseek,它只是一种比较普世的答案,要学得深入还是靠自己 Q:手撕代码,两个有序数组排序 A: function mysort(arr1, arr2) {…

Leetcode 3568. Minimum Moves to Clean the Classroom

Leetcode 3568. Minimum Moves to Clean the Classroom 1. 解题思路2. 代码实现 题目链接:3568. Minimum Moves to Clean the Classroom 1. 解题思路 这一题我的核心思路就是广度优先遍历遍历剪枝。 显然,我们可以给出一个广度优先遍历来给出所有可能…

Spring Boot,注解,@RestController

RestController 是 Spring MVC 中用于创建 RESTful Web 服务的核心注解。 RestController 核心知识点 REST 作用: RestController 是一个方便的组合注解,它结合了 Controller 和 ResponseBody 两个注解。 Controller: 将类标记为一个控制器,使其能够处理…

【计算机网络】Linux下简单的UDP服务器(超详细)

套接字接口 我们把服务器封装成一个类,当我们定义出一个服务器对象后需要马上初始化服务器,而初始化服务器需要做的第一件事就是创建套接字。 🌎socket函数 这是Linux中创建套接字的系统调用,函数原型如下: int socket(int domain, int typ…

Fashion-MNIST LeNet训练

前面使用线性神经网络softmax 和 多层感知机进行图像分类,本次我们使用LeNet 卷积神经网络进行 训练,期望能捕捉到图像中的图像结构信息,提高识别精度: import torch import torchvision from torchvision import transforms f…

EasyRTC嵌入式音视频通信SDK助力1v1实时音视频通话全场景应用

一、方案概述​ 在数字化通信需求日益增长的今天,EasyRTC作为一款全平台互通的实时视频通话方案,实现了设备与平台间的跨端连接。它支持微信小程序、APP、PC客户端等多端协同,开发者通过该方案可快速搭建1v1实时音视频通信系统,适…

查看make命令执行后涉及的预编译宏定义的值

要查看 make 命令执行后涉及的预编译宏定义(如 -D 定义的宏)及其值,可以采用以下方法: 1. 查看 Makefile 中的宏定义 直接检查 Makefile 或相关构建脚本(如 configure、CMakeLists.txt),寻找 -…

【C/C++】面试常考题目

面试中最常考的数据结构与算法题,适合作为刷题的第一阶段重点。 ✅ 分类 & 推荐题目列表(精选 70 道核心题) 一、数组 & 字符串(共 15 题) 题目类型LeetCode编号两数之和哈希表#1盛最多水的容器双指针#11三数…

【芯片学习】555

一、引脚作用 二、原理图 三、等效原理图 1.比较器 同相输入端大于反相输入端,输出高电平,反之亦然 2.三极管 给它输入高电平就可以导通 3.模拟电路部分 4.数字电路部分 这部分的核心是RS触发器,R-reset代表0,set是置位代表1&am…

Linux《文件系统》

在之前的系统IO当中已经了解了“内存”级别的文件操作,了解了文件描述符、重定向、缓冲区等概念,在了解了这些的知识之后还封装出了我们自己的libc库。接下来在本篇当中将会将视角从内存转向磁盘,研究文件在内存当中是如何进行存储的&#xf…

Java-代码段-http接口调用自身服务中的其他http接口(mock)-并建立socket连接发送和接收报文实例

最新版本更新 https://code.jiangjiesheng.cn/article/367?fromcsdn 推荐 《高并发 & 微服务 & 性能调优实战案例100讲 源码下载》 1. controller入口 ApiOperation("模拟平台端现场机socket交互过程,需要Authorization")PostMapping(path "/testS…

基于递归思想的系统架构图自动化生成实践

文章目录 一、核心思想解析二、关键技术实现1. 动态布局算法2. 样式规范集成3. MCP服务封装三、典型应用场景四、最佳实践建议五、扩展方向一、核心思想解析 本系统通过递归算法实现了Markdown层级结构到PPTX架构图的自动转换,其核心设计思想包含两个维度: 数据结构递归:将…

Python包管理器 uv替代conda?

有人问:python的包管理器uv可以替代conda吗? 搞数据和算法的把conda当宝贝,其他的场景能替代。 Python的包管理器有很多,pip是原配,uv是后起之秀,conda则主打数据科学。 uv替代pip似乎只是时间问题了,它…

使用pnpm、vite搭建Phaserjs的开发环境

首先,确保你已经安装了 Node.js 和 npm。然后按照以下步骤操作: 一、使用pnpm初始化一个新的 Vite 项目 pnpm create vite 输入名字 选择模板,这里我选择Vanilla,也可以选择其他的比如vue 选择语言 项目新建完成 二、安装相关依赖 进入项…