Faster-RCNN详解个人理解

1. Faster-RCNN的四个主要内容

 图1  Faster-RCNN基本结构

        如上图所示,整个Faster-RCNN模型可以分为四个模块:

1) Conv layers,特征提取网络

        输入为一张图片,输出为一张图片的特征,即feature map。通过一组conv+relu+pooling层提取图像的feature map,用于后续的RPN网络和全连接层。

2) Region proposal Network,区域候选网络

        输入为第一步中的feature map,输出为多个兴趣区域(ROI)。输出的每个兴趣区域具体表示为一个概率值(用于判断anchor是前景还是背景)和四个坐标值,概率值表示该兴趣区域有物体的概率,这个概率是通过softmax对每个区域进行二分类得到的;坐标值是预测的物体的位置,在进行训练时会用这个坐标与真实的坐标进行回归使在测试时预测的物体位置更加准确。

3) ROI pooling,兴趣域池化

        这一层以RPN网络输出的兴趣区域和Conv layers输出的feature map为输入,将两者进行综合后得到固定大小的区域特征图(proposal feature map)并输出到后面的全连接网络中进行分类。

4) Classification and Regression,分类和回归

        输入为上一层得到proposal feature map,输出为兴趣区域中物体所属的类别以及物体在图像中精确的位置。这一层通过softmax对图像进行分类,并通过边框回归修正物体的精确位置。

2. Faster-RCNN四个模块详解

        如下图所示,这是Faster-RCNN模型的具体网络结构

图2  Faster-RCNN网络结构

2.1  Conv layers

 

图3  Conv layers网络结构

        这部分的作用是提取输入图像的特征得到特征图。Conv layers中共包含了conv、pooling、relu三种层。本项目中是采用python中的VGG16模型作为特征提取网络。如上面的网络结构图所示,Conv layers部分共包含了13个conv层,13个relu层,4个pooling层。并且:

    1)所有的conv层都是:kernel_size=3,pad=1,stride=1

    2)所有的pooling层都是:kernel_size=2,pad=0,stride=2

        因此一个MxN大小的图像经过Conv layers固定变为(M/16)x(N/16),这样Conv layers生成的feature maps都可以和原图对应起来。

 2.2 Region proposal Network

 这一部分的作用是生成较好的建议框(Proposal),RPN包含五个子模块:

2.2.1 Anchor生成

        RPN对输入的feature map上每一个点都生成了9个anchor(3种尺度(128, 256, 512)和3种宽高比(1:2, 1:1, 2:1)),这些不同大小、宽高的anchor对应到原图可以覆盖所有可能出现的物体。因此共生成了(M/16)x(N/16)x9个anchor。

2.2.2 RPN卷积网络

图4  RPN网络结构

        有物体的位置通常称为前景,没有物体的位置通常称为背景。为了实现对anchor前景和背景的预测以及anchor与真实边框偏移值的预测,搭建了如上图所示的网络结构。在feature map上首先用3x3卷积进行更深的特征提取,然后利用1x1卷积分别实现分类和回归。

        如上图第一条分支,这是分类分支。首先使用1x1卷积输出(M/16)x(N/16)x18的特征,这里通道数为18是因为feature map中每个点有9个anchor并且每个anchor只预测其是前景还是背景。因为我们后面需要使用softmax函数计算每个anchor属于前景和背景的概率,所以需要先将(M/16)x(N/16)x18 维度变换为 (3xM/16)x(3xN/16)x2,将第三维变换为仅仅是前景背景的得分。得到概率后再将维度变换回来,然后输出每个anchor属于前景与背景的概率。

        图中第二条分支是回归分支。这个分支中,利用1x1卷积输出(M/16)x(N/16)x36的特征,这个36包含每个点上9个anchor的偏移值预测,每个anchor的偏移值有四个数据,分别是中心点的横纵坐标以及宽高。这四个数据都是相对于真值的偏移量。

2.2.3 计算RPN loss

        这一步只在训练中,将第一步中生成的所有anchor与标签进行匹配,匹配程度较好的赋予正样本,较差的赋予负样本,然后得到anchor的分类与位置偏移的真值,与第二步中的预测得分与预测偏移值进行loss的计算。

        具体地说,上一步中得到的只是预测值,为了计算预测的损失,我们还需要得到分类与偏移的真值,即每一个anchor是否对应着真实物体以及每一个anchor对应真实物体的偏移值。具体流程如下:

  • anchor生成。这个与1)中的过程相同,共生成(M/16)x(N/16)x9个anchor。因为这种方式会产生一些边界在图像外的边框,所以还需要把这部分超过图像边框的anchor去掉。
  • anchor与标签匹配。为了计算anchor的损失,我们需要知道每个anchor的真实类别,因为RPN只负责建议框的生成而不负责具体类别,所以这个真实类别指的是是否包含物体。我们通过计算每一个anchor与每一个标签的IOU来判断是正样本还是负样本,具体规则如下:

                1)对于任何一个anchor,与所有标签的最大IOU小于0.3,则视为负样本。

                2)对于任何一个标签,与其有最大IOU的anchor视为正样本。

                3)对于任何一个anchor,与所有标签的最大IOU大于0.7,视为正样本。

  • anchor筛选。因为生成的anchor太多,并且包含背景的anchor较多,如果都计算损失就会使正负样本失衡从而不利于网络收敛。所以RPN默认选择256个anchor进行损失计算,其中包含128个正样本和128个负样本。
  • 求解回归偏移真值。上一步赋予的正负样本代表了预测的类别的真值,接下来我们还需要计算预测的偏移值的真值。这个要利用anchor与对应的标签求解得到。具体计算方法如下公式:

图5  偏移值计算公式

2.2.4 生成Proposal

图6  proposal生成流程

        Proposal的生成过程如上流程图所示,首先生成全部的anchor,然后利用3)中得到的回归偏移值对这些anchor做回归使anchor更加贴近于真值,并且修剪掉超出图像尺寸的proposal得到最初的proposal;接着按照RPN网络中softmax计算得到的概率对所有的anchor进行排序,提取前12000个概率高的anchor;由于一个物体可能会有多个anchor重叠对应,所以应用非极大值抑制(NMS)将重叠的框去掉;最后在剩余的proposal中再次根据RPN的预测得分选择前2000个作为最终的proposal输出到下一个阶段。

2.2.5 筛选Proposal得到ROI

        上一步生成的proposal数量为2000个,其中仍有很多的背景框,因此需要针对proposal进行进一步的筛选,过程与上面的一个筛选过程相同,也是通过利用标签与proposal构建IOU矩阵,通过与标签的重合成都选出256个正负样本。

2.3 ROI pooling

        由于下一模块的全连接网络要求特征的维度固定,而RPN输出的ROI各自的特征大小又不相同,因此需要先将这些ROI的特征池化到固定的维度然后再输入到全连接网络中。ROI pooling的具体原理如下:

        1) 由于RPN输出的ROI是对应MxN尺度的,所以首先将其映射回(M/16)x(N/16)大小的feature map尺度(坐标除以下采样率即可);

        2) 再将每个ROI对应的feature map区域水平分为的网格;

        3) 对网格的每一份都进行max pooling处理。

 

 图7  ROI pooling原理

这样处理后,即使大小不同的ROI,输出结果都是固定大小,实现了固定长度输出

2.4 classification and regression

 

图8  全连接网络

        这一部分利用已经获得的proposal feature maps,通过全连接层与softmax计算每个proposal具体属于那个类别(如车、盒子、塑料瓶等),输出cls_prob概率向量;同时再次利用bounding box regression获得每个proposal的位置更加精确的偏移量bbox_pred,用于回归更加精确的目标检测框。网络结构如上图所示。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


学习编程是顺着互联网的发展潮流,是一件好事。新手如何学习编程?其实不难,不过在学习编程之前你得先了解你的目的是什么?这个很重要,因为目的决定你的发展方向、决定你的发展速度。
IT行业是什么工作做什么?IT行业的工作有:产品策划类、页面设计类、前端与移动、开发与测试、营销推广类、数据运营类、运营维护类、游戏相关类等,根据不同的分类下面有细分了不同的岗位。
女生学Java好就业吗?女生适合学Java编程吗?目前有不少女生学习Java开发,但要结合自身的情况,先了解自己适不适合去学习Java,不要盲目的选择不适合自己的Java培训班进行学习。只要肯下功夫钻研,多看、多想、多练
Can’t connect to local MySQL server through socket \'/var/lib/mysql/mysql.sock问题 1.进入mysql路径
oracle基本命令 一、登录操作 1.管理员登录 # 管理员登录 sqlplus / as sysdba 2.普通用户登录
一、背景 因为项目中需要通北京网络,所以需要连vpn,但是服务器有时候会断掉,所以写个shell脚本每五分钟去判断是否连接,于是就有下面的shell脚本。
BETWEEN 操作符选取介于两个值之间的数据范围内的值。这些值可以是数值、文本或者日期。
假如你已经使用过苹果开发者中心上架app,你肯定知道在苹果开发者中心的web界面,无法直接提交ipa文件,而是需要使用第三方工具,将ipa文件上传到构建版本,开...
下面的 SQL 语句指定了两个别名,一个是 name 列的别名,一个是 country 列的别名。**提示:**如果列名称包含空格,要求使用双引号或方括号:
在使用H5混合开发的app打包后,需要将ipa文件上传到appstore进行发布,就需要去苹果开发者中心进行发布。​
+----+--------------+---------------------------+-------+---------+
数组的声明并不是声明一个个单独的变量,比如 number0、number1、...、number99,而是声明一个数组变量,比如 numbers,然后使用 nu...
第一步:到appuploader官网下载辅助工具和iCloud驱动,使用前面创建的AppID登录。
如需删除表中的列,请使用下面的语法(请注意,某些数据库系统不允许这种在数据库表中删除列的方式):
前不久在制作win11pe,制作了一版,1.26GB,太大了,不满意,想再裁剪下,发现这次dism mount正常,commit或discard巨慢,以前都很快...
赛门铁克各个版本概览:https://knowledge.broadcom.com/external/article?legacyId=tech163829
实测Python 3.6.6用pip 21.3.1,再高就报错了,Python 3.10.7用pip 22.3.1是可以的
Broadcom Corporation (博通公司,股票代号AVGO)是全球领先的有线和无线通信半导体公司。其产品实现向家庭、 办公室和移动环境以及在这些环境...
发现个问题,server2016上安装了c4d这些版本,低版本的正常显示窗格,但红色圈出的高版本c4d打开后不显示窗格,
TAT:https://cloud.tencent.com/document/product/1340