目标检测——RCNN系列学习(二)Faster RCNN

news/2024/4/30 18:57:37/文章来源:https://blog.csdn.net/qq_53507133/article/details/137263218

接着上一篇文章:目标检测——RCNN系列学习(一)-CSDN博客

主要内容包含:Faster RCNN

废话不多说。


Faster RCNN

[1506.01497] Faster R-CNN: Towards Real-Time Object Detection with Region Proposal Networks (arxiv.org)icon-default.png?t=N7T8https://arxiv.org/abs/1506.01497

1.Motivation

简要回顾一下之前的检测框架,RCNN和Fast RCNN都是基于Selective Search的,能否让网络自己去学习获取Region proposal的过程呢?

顺着这个思路,Kaiming等人提出了Region Proposal Networks(RPN模块),理解这个网络就成了学习Faster RCNN的关键,其余的操作其实和Fast RCNN是一模一样的。

2.Faster RCNN

(部分内容和图参考:一文读懂Faster RCNN - 知乎 (zhihu.com))

2.1 网络结构

初看:

CNN(特征提取)+ RPN(获取Region Proposal,实现定位)+ ROI Pooling(解决多尺度输入问题)+ Classifier(预测类别与BoundingBox的修正)

细节:

  • CNN

这里的CNN传统采用VGG16为backbone,有一个细节:

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

这涉及到网络前向计算时,特征图的尺寸变换,按照上述形式,假设池化的次数为n,那么最终得到的feature map的尺寸就是原始图像尺寸的1/2^n,4个pooling层就是1/16。

按照上面的尺寸变换,可以保证最终feature map上的点在原始像素空间都有对应点。

此外,还需要注意的一个点,CNN网络的输入图像,全部reshape成了800*600,这是为了便于网络的训练,方便组织成batch。

  • RPN

RPN网络可以说是Faster RCNN的核心,我们下面着重来讲解。

RPN网络的作用从他的名字就可以看出来,为了给出参考的Region proposal。传统的获取候选框的方法如滑动窗口、在原始图像空间进行SS操作,计算量太大,复杂度高,因此RPN的核心想法就是在feature map上获取候选框,做法就是在feature map的每一个点上,设置了一系列的anchor,作为了初始的检测框,虽然这样的初始检测框很不准确,但是后续有两次回归校正的机会。

什么是anchor?

本质上就是一组矩形框,存储时,4个值 (x1,y1,x2,y2) 表示矩形框的左上和右下角点坐标,长宽比为大约为 width:height∈{1:1,1:2,2:1} 三种。

RPN在为feature map上的每个点设置anchor时,除了设置长宽比,还考虑了anchor的尺度(在feature map下的尺度,在原始像素空间的尺度要乘上池化下降的倍率)。

以下图为例:蓝红绿对应了三个尺度,每个颜色下对应了三种长宽比:

上面数据流中RPN的操作对应了作者论文中的图:

RPN的做法:

  1. 假设Conv Layers最后的conv5层num_output=256,对应生成256张特征图,所以相当于feature map中的每个点都是256-dimension
  2. 在conv5之后,做了rpn_conv/3x3卷积且num_output=256,相当于每个点又融合了周围3x3的空间信息,同时256-d不变(聚合信息)
  3. 在conv5 feature map中每个点上有k个anchor(默认k=9,3组长宽比*3组尺度)
  4. 每个anchor需要区分是否是背景框,对应着上面第一条数据流,其中的18其实就是9个anchor对应positive和negative的概率,9个二分类任务

  5. 每个anchor需要进行坐标的回归,进行平移和伸缩变换,因此每个anchor都有(x, y, w, h)对应4个偏移量,所以reg=4*9=36 个坐标,对应下面这条之路
  6. 补充一点,全部anchors拿去训练太多了,训练程序会在合适的anchors中随机选取128个postive anchors+128个negative anchors进行训练

最终,RPN在feature map上生成了一大堆的anchor框,映射回原始图像的尺度上,也就基本上覆盖了全图。

以上图的尺寸为例子,输入图像尺寸800*600,4个pooling层,则一共有(800/16)*(600/16)*9 = 17100个anchor框。

RPN最后用一个Proposal Layer来整合所有的信息,处理一些特殊的情况,如anchor太多、超出图像边界、某些框尺度太小等问题。

Proposal Layer

输入:anchor修正的坐标信息、anchor属于前景和背景的概率、图像信息(包含图像原始尺度和缩放大小[800,600,16])

  1. 生成anchors,利用anchor修正的坐标信息对所有的anchors做bbox regression回归(这里是anchor与region proposal的回归,而不是anchor坐标与像素空间下GT的坐标的回归)
  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(nonmaximum suppression)

输出:proposal=[x1, y1, x2, y2],注意这里的输出坐标已经被映射回了原始图像尺度。

当proposal的框获取之后,我们的定位功能就已经实现了,接下来只需要进行进一步的坐标修正和图像识别。

RPN网络结构就介绍到这里,总结起来就是:
生成anchors -> softmax分类器提取positvie anchors -> bbox reg回归positive anchors -> Proposal Layer生成proposals

  • ROI pooling+Classifier

和Fast RCNN一样,不再多说。

2.2 网络训练

(1)待学习参数

整个Faster RCNN网络拆解来看,需要学习的网络参数包括以下四个部分:

CNN(特征提取)+ ROI Pooling(解决多尺度输入问题)+ Classifier(预测类别与BoundingBox的修正)+ RPN(获取Region Proposal,实现定位)

其中前面三个部分可以一起训练,最终的损失和RCNN很相似;而RPN网络单独训练。

(2)RPN部分损失函数:

公式中i表示anchors index,p_i 表示positive softmax probability,p_i^*代表对应的GT predict概率(即当第i个anchor与GT间IoU>0.7,认为是该anchor是positive,p_i^*=1;反之IoU<0.3时,认为是该anchor是negative,p_i^*=0;至于那些0.3<IoU<0.7的anchor则不参与训练);t代表predict bounding box,t^*代表对应positive anchor对应的GT box。可以看到,整个Loss分为2部分:

  1. cls loss,即rpn_cls_loss层计算的softmax loss,用于分类anchors为positive与negative的网络训练
  2. reg loss,即rpn_loss_bbox层计算的soomth L1 loss,用于bounding box regression网络训练。注意在该loss中乘了 p_i^* ,相当于只关心positive anchors的回归(其实在回归中也完全没必要去关心negative)
(3)四步交替迭代训练方式

Faster RCNN的训练方式可以是交替迭代的训练,也可以是端到端的训练方式,这里只是学习一下论文中提到的交替迭代的方式:

第一步:特征提取的CNN网络参数加载在ImageNet上预训练的模型参数,训练RPN网络,用于生成region proposal;

第二步:固定第一步训练好的RPN参数,拉通训练Fast RCNN网络,即CNN+ROI+两个分类器;

第三步:固定第二步学好的Fast RCNN参数,优化RPN参数;

第四步:固定第三步学好的RPN参数,优化Fast RCNN参数。

2.3 网络推理

训练好网络过后,我们来看一张图像中,目标是如何被检测出来的:

输入图片——resize到固定尺寸——经过CNN提出特征图feature map——RPN在该feature map上生成anchor对应的类别概率,判断anchor是否是待检测的物体,背景框舍去,同时,对于物体的框进行一系列操作,结合回归修正的坐标,输出在feature map上的region proposal——ROI pooling提取不同尺寸的region proposal的特征,映射成相同的尺度——两个fc层,一个输出识别的类别,一个输出框的进一步修正——最后输出最终的框的坐标,和框内物体的类别。

3.总结

Faster RCNN的核心就在于RPN网络,理解了这个网络,再加上Fast RCNN,就不难学习了。

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

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

相关文章

跨域问题一文解决

&#x1f4dd;个人主页&#xff1a;五敷有你 &#x1f525;系列专栏&#xff1a;Vue ⛺️稳中求进&#xff0c;晒太阳 一、为什么会出现跨域的问题&#xff1f; 是浏览器的同源策略&#xff0c;跨域也是因为浏览器这个机制引起的&#xff0c;这个机制的存在还是在于安全…

Netty 入门应用之Http服务WebSocket

Netty实现Http服务 主要的变化是在初始化器中引入了新的编解码器 一些创建的类作用和Netty HelloWorld的小demo一样我这里就不再次重复了 1、Http服务端代码 public class HttpServer {public static void main(String[] args) {// 创建Reactor// 用来管理channel 监听事件 …

力扣HOT100 - 238. 除自身以外数组的乘积

解题思路&#xff1a; 当前位置的结果就是它左部分的乘积再乘以它右部分的乘积。因此需要进行两次遍历&#xff0c;第一次遍历用于求左部分的乘积&#xff0c;第二次遍历在求右部分的乘积的同时&#xff0c;再将最后的计算结果一起求出来。 class Solution {public int[] prod…

Vue3学习01 Vue3核心语法

Vue3学习 1. Vue3新的特性 2. 创建Vue3工程2.1 基于 vue-cli 创建项目文件说明 2.2 基于 vite 创建具体操作项目文件说明 2.3 简单案例(vite) 3. Vue3核心语法3.1 OptionsAPI 与 CompositionAPIOptions API 弊端Composition API 优势 ⭐3.2 setup小案例setup返回值setup 与 Opt…

【vue/uniapp】使用 smooth-signature 实现 h5 的横屏电子签名

通过github链接进行下载&#xff0c;然后代码参考如下&#xff0c;功能包含了清空、判断签名内容是否为空、生成png/jpg图片等。 签名效果&#xff1a; 预览效果&#xff1a; 下载 smooth-signature 链接&#xff1a;https://github.com/linjc/smooth-signature 代码参考&a…

nexus搭建maven与docker镜像的私有仓库

引言 通过nexus搭建maven与docker镜像的私有仓库,实现jar包与镜像动态更新、共享、存储。 一、nexus部署 通过docker-compose部署nexus name: java services:#############################环境#############################env-nexus:restart: always## 3.58.1image: so…

ANSYS 2024 R1 HFSS部分更新介绍(附下载)

1. 优化Layout component工作流 • 支持多区域 - 支持参数化弯曲定义的刚柔结合的PCB • Phi 网格可用 • 支持Mesh Fusion •简化创建复杂装配体的过程 2. 提升求解器速度 • 分布式矩阵汇编的内存使用率改进 ‐减少分布式矩阵求解器的RAM消耗 • 分布式稀疏直接求解器&am…

物联网实战--驱动篇之(六)4G通讯(Air780E)

目录 一、4G模块简介 二、AIR780E驱动程序 三、AIR780使用注意事项 四、结合MQTT传输测试 一、4G模块简介 4G应该是我们日常生活最常见的一种互联网通讯方式了&#xff0c;每个智能手机都配置了&#xff0c;不过手机的4G跟我们物联网领域要用的4G有点区别。首先是物联网采用…

芯来科技、IAR和MachineWare携手加速符合ASIL标准RISC-V汽车芯片创新

支持软件开发团队在虚拟硬件平台上进行固件和MCAL开发 芯来科技&#xff08;Nuclei&#xff09;、IAR和MachineWare紧密合作&#xff0c;加速RISC-V ASIL合规汽车解决方案的创新。此次合作简化了汽车电子的固件和MCAL开发&#xff0c;提供了虚拟和物理硬件平台之间的无缝集成。…

Harmony鸿蒙南向驱动开发-SDIO

SDIO&#xff08;Secure Digital Input and Output&#xff09;由SD卡发展而来&#xff0c;与SD卡统称为MMC&#xff08;MultiMediaCard&#xff09;&#xff0c;二者使用相同的通信协议。SDIO接口兼容以前的SD卡&#xff0c;并且可以连接支持SDIO接口的其他设备。 运作机制 …

SpringBoot --pagehelper分页

目录 1.建立数据库 2.页面显示 3.基本逻辑 4.配置依赖 5.使用pagehelper 6.页面列表 页面 效果 1.建立数据库 create database if not exists my_book; use my_book; create table if not exists myBook (id int primary key auto_increment,name varchar(50) not …

Node.js常用快捷键

1.常用的终端命令&#xff1a; &#xff08;1&#xff09;del 文件名&#xff1a; 删除文件 &#xff08;2&#xff09;ipconfig: 查看IP命令 &#xff08;3&#xff09;mkdir 目录名 &#xff1a;在当前目录新建指定目录 &#xff08;4&#xff09;rd 目录名&#xff1a;在当前…

【opencv】示例-ela.cpp JPEG图像的错误等级分析(ELA) 通过分析图像压缩后的差异来检测图像是否被篡改过...

ela_modified.jpg 原始ela_modified压缩后再解压得到compressed_img 差异图像Ela 这段代码的功能是实现JPEG图像的错误等级分析&#xff08;ELA&#xff09;&#xff0c;通过分析图像压缩后的差异来检测图像是否被篡改过。程序会首先读取一张图片&#xff0c;然后对其应用质量…

PHP自助建站系统,小白也能自己搭建网站

无需懂代码&#xff0c;用 自助建站 做企业官网就像做PPT一样简单&#xff0c;您可以亲自操刀做想要的效果&#xff01; 自助建站是一款简单、快捷、高效的工具&#xff0c;可以帮助您制作响应式网站。我们的自助建站系统&#xff0c;将传统的编码工作转化为直观的拖拽操作和文…

Qt | 元对象系统

一、QByteArray 类简介 1、QByteArray 类简介  该类是一个用于处理字符串的类似于 C++的 string 类型的类,在 Qt 中,对字符串的处理,经常使用的是 QString 类,该类保证字符串以\0结尾,并使用隐式共享(copy-on-write)来减少内存用量和不必要的数据复制。  QByteArra…

Web3 的社会影响:数字社会的新时代

随着科技的不断进步和创新&#xff0c;人类社会正逐步进入数字化时代的新阶段。Web3 技术作为数字社会的重要组成部分&#xff0c;正在以前所未有的方式重塑着我们的社会生活和交往方式。本文将探讨 Web3 技术对社会的影响&#xff0c;以及它所带来的数字社会的新时代。 1. Web…

Gitlab全量迁移

Gitlab全量迁移 一、背景1.前提条件 一、背景 公司研发使用的Gitlab由于服务器下架需要迁移到新的Gitlab服务器上。Gitlab官方推荐了先备份然后再恢复的方法。个人采用官方的另外一种方法&#xff0c;就写这篇文章给需要的小伙伴参考。 源Gitlab: http://old.mygitlab.com #地…

数据应用OneID:ID-Mapping Spark GraphX实现

前言 说明 以用户实体为例&#xff0c;ID 类型包含 user_id 和 device_id。当然还有其他类型id。不同id可以获取到的阶段、生命周期均不相同。 device_id 生命周期通常指的是一个设备从首次被识别到不再活跃的整个时间段。 user_id是用户登录之后系统分配的唯一标识&#xff…

3D数据发布工具HOOPS Publish如何将3D模型转换成PDF格式?

在现代科技发展的推动下&#xff0c;3D技术在各个行业中扮演着越来越重要的角色。从工程设计到医疗保健&#xff0c;从建筑规划到教育培训&#xff0c;3D模型都成为了理解、沟通和展示复杂数据的主要工具。而将这些3D模型转换成PDF格式&#xff0c;能够使其更易于共享、存档和展…

配置交换机端口安全

1、实验目的 通过本实验可以掌握&#xff1a; 交换机管理地址配置及接口配置。查看交换机的MAC地址表。配置静态端口安全、动态端口安全和粘滞端口安全的方法。 2、实验拓扑 配置交换机端口安全的实验拓扑如图所示。 配置交换机端口安全的实验拓扑 3、实验步骤 &#xff…