目标检测系列——Faster R-CNN原理详解

目标检测系列——Faster R-CNN原理详解

写在前面

前文我已经介绍过R-CNN、Fast R-CNN的原理,具体内容可以点击下面链接阅读。【注:阅读此篇之前建议对R-CNN和Fast R-CNN有一定的了解】

Faster R-CNN算是这个目标检测系列的最后一篇了,在速度和准确率上也相对达到了比较好的效果,所以还是非常重要的。后面可能会更新语义分割Mask RCNN,当然这都是后话啦。现在就和我一起来学学Faster R-CNN吧。🍻🍻🍻

Faster R-CNN整体流程

​  不知大家是否还记得Fast R-CNN的流程?这里帮大家回忆一下,其步骤如下:

  1. 候选区域生成
  2. 完整图像输入网络,候选框投影到特征图得到特征矩阵
  3. 特征矩阵经ROI pooling层缩放至统一大小,后将特征图展平得到预测结果

image-20220624200100888


​  那么Faster R-CNN相较于Fast R-CNN有什么要的改进呢?其实最主要的就是在Fast R-CNN中我们依旧是和R-CNN一样采用SS算法来生成候选框,而在Faster R-CNN中我们采用的是一种称为RPN(Region Proposal Network)的网络结构来生成候选框。其它部分基本和Fast R-CNN一致,所以我们可以将Faster R-CNN的网络看成两部分,一部分是RPN获取候选框网络结构,另一部分是Fast R-CNN网络结构,如下图所示:

image-20220624204618088

​  倘若你是第一次看Faster R-CNN,看了这个图,我觉得你还是处于一个比较懵逼的状态。但是没有关系,这个图是论文中所给的,我贴在这里的主要目的是想让你大致知道Faster R-CNN的结构就好,那么灵魂一问——大致结构你知道了嘛?

其实呀,Faster R-CNN的结构和Fast R-CNN还是很像的,都会产生一些候选框,然后基于特征提取网络对这些候选框进行分类和回归操作,不同的是Fast R-CNN采用的是传统的SS算法提取候选框,而Faster R-CNN采用RPN网络来进行提取。

​  好了,Faster R-CNN整体流程部分就介绍这么多,你肯定还是存在着诸多疑惑,不用急,下面我们一步步的讲解。🌻🌻🌻


🌷🌷🌷🌷🌷🌷

想想这里还是再加点内容,见下图,其是Faster R-CNN较为详细的流程图,后文我也会按照这个结构为大家讲述,这样应该会更清晰点。

image-20220624211516578🌷🌷🌷🌷🌷🌷

特征提取网络✨✨✨

​  特征提取网络结构如下图所示:

​  可以看到,对于一个PQ大小的图片,我们先将其resize到特定的MN大小,之后再送入特征提取网络。 【注:这里图片尺寸没有加通道数,大家理解就好】

此外,可以看到图中的特征提取网络有13个卷积层,4个池化层,其实这个特征提取网络用到就是大名鼎鼎的VGG。 【注:在VGG网络中有13个卷积层,5个池化层,这里丢弃了最后一个池化层】

对于VGG网络不熟悉的可以点击☞☞☞了解详情。值得一提的是在VGG网络中,卷积采用的都是33的卷积核,卷积后特征图尺寸不变;而池化采用的是22的池化核,池化后特征图尺寸减半。 也就是说,在上图的特征提取网络中,含有四个池化层,因此我们最终得到的特征图的尺寸是原来的116\frac{1}{{16}}161​,即为M16∗N16\frac{M}{{16}}*\frac{N}{{16}}16M​∗16N​ 。

​  还有一点也值得注意,即本次讲解的特征提取网络是VGG,我们一般称之为backbone(骨干网络)。这个backbone是可以根据需求更换的,像换成ResNet、MobileNet等等都是可以的。🥝🥝🥝

RPN网络结构✨✨✨

RPN的网络结构如下:

image-20220625110444667

图4.1 RPN网络结构

我们上一步已经得到了M16∗N16\frac{M}{{16}}*\frac{N}{{16}}16M​∗16N​大小的特征图(Feature Map) 【注:为方便后文叙述,现令W=M16,H=N16W=\frac{M}{{16}},H=\frac{N}{{16}}W=16M​,H=16N​】 ,可以看到我们会对特征图分别进行路径①和路径②上的操作,其中路径①上的操作即为RPN网络结构。下面我们就来重点谈谈这个RPN网络结构。

首先我们先来明确RPN是用来干什么的?enmmm…,要是这个网络的作用现在还不知道的话那我前面真是白说了,有点失败。☘☘☘但是这一点再强调也不为过——RPN就是来提取候选框的!!!

那么RPN到底是怎么做的呢?首先,我们会用一个3*3的滑动窗口遍历刚刚得到的特征图,之后计算出滑动窗口中心点对应原始图像上的中心点, 最后在原始图像每个中心点绘制9种anchor boxes 。 【注:怎么由特征图的中心点坐标得到原图的中心点呢?——我们采用的是VGG骨干网络,原图和特征图尺寸相差16倍,因此只需要将特征图中心点坐标乘16即可;或者我们可以计算出中心点在特征图中的相对位置,进一步得到原图中心点位置】

我们需要在原图中绘制9中anchor,论文中给出三种尺度(128128 、256256 、512*512)和三种比例(1:1、1:2、2:1)一共9种anchor,说是由经验设计,其实我们在实现过程中是可以根据任务调整的,比如我们要检测的目标较小,那么就可以适当减小anchor的尺寸。特征图中心点到原图的大致映射关系图如下:

image-20220625122115740

上文谈到使用33的滑动窗口遍历特征图,其实这就对应了图4.1路径①中的第一个33的卷积,卷积过程padding=1,stride=1。其中该卷积和原图生成anchor的对应关系如下图所示:可见经过这一步我们会在原图上生成许多许多的anchor,很明显这些anchor很多都是我们不需要的,后面就会对这些anchor进行取舍。

pic

​  接下来我们看看经过33卷积后特征图的变化,因为采用的是卷积核k=33,p=1,s=1的卷积,所以卷积后特征图尺寸没有发生变化,这里说一下这个channel=512是由于VGG网络最后一层的输出通道数为512。

image-20220625130731032

再来对照图4.1看看33的卷积后进行了什么操作?33卷积后由分别走路径③和路径④进行相关操作。其实路径③就是对刚刚得到的anchor进行分类(前景和背景),而路径④则是对anchor进行回归微调。

那么就分别来讲讲③和④,首先先来谈谈路径③。首先进行一个1*1的卷积,卷积核个数为18。如下图所示:

image-20220625151255098

其实上图采用18个卷积核是很有讲究的。首先我们要知道的是路径③我们要做的是区分每个anchor是前景还是背景,即分成两个类别,而对于每个小方格都会在原图上生成9个anchor。这样2*9=18,得到的结果中每个小方块就代表原始图像中某个位置每个anchor是否为前景或背景的概率。为方便大家理解,抠出某个方格对18通道的数据进行解释,如下图所示:

​  1*1的卷积后,就进行了softmax层进行分类。 【注:在softmax层前后都有一个reshape的操作,这是因为在编写代码时会对输入的格式有要求,这里大家可以先不关心,后面讲解代码时在叙述】 softmax层分类后我们会得到所有的正类的anchor(positive anchors)和负类的anchor(negative anchors)。

​  这里补充一下正负样本的选取规则:正样本有两个条件,第一:选取与真实框IOU最大的anchor;第二:选取与真实框IOU大于0.7的anchor。【注:其实大部分情况第二个条件都可以满足,但是防止存在一些极端情况设置了条件一】负样本的选取条件为与所有真实框IOU都小于0.3的anchor。


接着就来谈谈路径④,同样的,先是一个1*1的卷积,卷积核个数为36。如下图所示:

image-20220625154852032

这里的36同样是有讲究的呀,因为在进行回归微调anchor的时候每个anchor需要四个参数,4*9=36,得到的结果中每个小方块就代表原始图像中某个位置每个anchor四个需要调整的参数。同样也画个图片帮助大家理解,如下:

image-20220625155415966


接下来路径③和路径④在Proposal这步结合,这步是干什么的呢?其实呀,这一步就是综合了路径③和路径④中的信息,即分类结果和anchor框的回归参数,目的是得到更加精确的候选框(Region Proposal)。细心的同学可能还发现了proposal这步还有一个输入,即im_info,这个参数保存了一些图片尺寸变换的信息,像开始的resize,后面的池化等等。

RPN层损失函数✨✨✨

​  RPN层的损失函数如下:RPN层的分类损失和fast R-CNN类似,也是由两部分组成,即分类损失和边界框回归损失。

image-20220625163317420

​  下面来具体看看①和②部分: 【注:边界框回归损失在之前文章 R-CNN中有介绍,不明白的可以去了解一下】

image-20220625163554470

ROI Pooling

​  上文已经较为详细的讲述了RPN层,即我们图4.1中的①路径,接下来我们继续来讲路径②【路径②为ROI Pooling层】。可以看到ROI Pooling层的输入有两个:分别为

  • 原始的feature maps
  • RPN输出的proposal

ROI Pooling层我在fast R-CNN中已经讲过了,这里就不过多叙述了,不明白的可以前去充充能。🍊🍊🍊

​  不过这里我还是想说明一点:我们传入ROI Pooling层的输入为原始特征图和RPN输出的候选框,我们相当于是把每个候选框对应到原始特征图的不同部分,然后把这些部分剪裁下来分别传入ROI Poolinng层。

image-20220625110444667

分类回归微调部分

​  后面这部分其实就完全和Fast R-CNN后半部分完全一致了,因为我们同样都经过ROI Pooling层得到了候选框的相关特征,接着送入分类和回归网络即可。🌱🌱🌱这部分有不明白的也欢迎去阅读我之前文章对此部分的讲解。

image-20220626223655405

小结

​  这部分来总结一下Faster R-CNN的步骤,如下:

  1. 将完整图像输入网络得到相应的特征图
  2. 使用RPN结构生成候选框,将RPN生成的候选框投影到原始特征图获取相应的特征矩阵【相当于我们ROI Pooling部分所说通过剪裁得到的结果】
  3. 特征矩阵经ROI pooling层缩放至统一大小,后将特征图展平得到预测结果

如何学习大模型 AI ?

由于新岗位的生产效率,要优于被取代岗位的生产效率,所以实际上整个社会的生产效率是提升的。

但是具体到个人,只能说是:

“最先掌握AI的人,将会比较晚掌握AI的人有竞争优势”。

这句话,放在计算机、互联网、移动互联网的开局时期,都是一样的道理。

我在一线互联网企业工作十余年里,指导过不少同行后辈。帮助很多人得到了学习和成长。

我意识到有很多经验和知识值得分享给大家,也可以通过我们的能力和经验解答大家在人工智能学习中的很多困惑,所以在工作繁忙的情况下还是坚持各种整理和分享。但苦于知识传播途径有限,很多互联网行业朋友无法获得正确的资料得到学习提升,故此将并将重要的AI大模型资料包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。

😝有需要的小伙伴,可以点击下方链接免费领取或者V扫描下方二维码免费领取🆓

在这里插入图片描述

第一阶段(10天):初阶应用

该阶段让大家对大模型 AI有一个最前沿的认识,对大模型 AI 的理解超过 95% 的人,可以在相关讨论时发表高级、不跟风、又接地气的见解,别人只会和 AI 聊天,而你能调教 AI,并能用代码将大模型和业务衔接。

  • 大模型 AI 能干什么?
  • 大模型是怎样获得「智能」的?
  • 用好 AI 的核心心法
  • 大模型应用业务架构
  • 大模型应用技术架构
  • 代码示例:向 GPT-3.5 灌入新知识
  • 提示工程的意义和核心思想
  • Prompt 典型构成
  • 指令调优方法论
  • 思维链和思维树
  • Prompt 攻击和防范

第二阶段(30天):高阶应用

该阶段我们正式进入大模型 AI 进阶实战学习,学会构造私有知识库,扩展 AI 的能力。快速开发一个完整的基于 agent 对话机器人。掌握功能最强的大模型开发框架,抓住最新的技术进展,适合 Python 和 JavaScript 程序员。

  • 为什么要做 RAG
  • 搭建一个简单的 ChatPDF
  • 检索的基础概念
  • 什么是向量表示(Embeddings)
  • 向量数据库与向量检索
  • 基于向量检索的 RAG
  • 搭建 RAG 系统的扩展知识
  • 混合检索与 RAG-Fusion 简介
  • 向量模型本地部署

第三阶段(30天):模型训练

恭喜你,如果学到这里,你基本可以找到一份大模型 AI相关的工作,自己也能训练 GPT 了!通过微调,训练自己的垂直大模型,能独立训练开源多模态大模型,掌握更多技术方案。

到此为止,大概2个月的时间。你已经成为了一名“AI小子”。那么你还想往下探索吗?

  • 为什么要做 RAG
  • 什么是模型
  • 什么是模型训练
  • 求解器 & 损失函数简介
  • 小实验2:手写一个简单的神经网络并训练它
  • 什么是训练/预训练/微调/轻量化微调
  • Transformer结构简介
  • 轻量化微调
  • 实验数据集的构建

第四阶段(20天):商业闭环

对全球大模型从性能、吞吐量、成本等方面有一定的认知,可以在云端和本地等多种环境下部署大模型,找到适合自己的项目/创业方向,做一名被 AI 武装的产品经理。

  • 硬件选型
  • 带你了解全球大模型
  • 使用国产大模型服务
  • 搭建 OpenAI 代理
  • 热身:基于阿里云 PAI 部署 Stable Diffusion
  • 在本地计算机运行大模型
  • 大模型的私有化部署
  • 基于 vLLM 部署大模型
  • 案例:如何优雅地在阿里云私有部署开源大模型
  • 部署一套开源 LLM 项目
  • 内容安全
  • 互联网信息服务算法备案

学习是一个过程,只要学习就会有挑战。天道酬勤,你越努力,就会成为越优秀的自己。

如果你能在15天内完成所有的任务,那你堪称天才。然而,如果你能完成 60-70% 的内容,你就已经开始具备成为一名大模型 AI 的正确特征了。

这份完整版的大模型 AI 学习资料已经上传CSDN,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费

😝有需要的小伙伴,可以点击下方链接免费领取或者V扫描下方二维码免费领取🆓

  • 22
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值