参考链接:
Faster RCNN 学习笔记:https://www.cnblogs.com/wangyong/p/8513563.html
总结faster r-cnn可能会问到的面试问题:https://blog.csdn.net/qq_43477550/article/details/105584364
快速理解RPN:https://zhuanlan.zhihu.com/p/138515680
RoIPooling和ROI Align以及双线性插值法:https://blog.csdn.net/ifreewolf_csdn/article/details/101352352
参考书本:
深度学习之pytorch物体检测实战,第二篇:物体检测经典框架,第四章:两阶经典检测器: Faster RCNN
1、Faster RCNN 是什么
Faster RCNN 是在 Fast RCNN 的基础上,引入了 RPN 网络来代替 Fast RCNN 中的选择性搜索算法来生成候选区域,使得目标检测速度大大提高。Faster RCNN 的网络结构是使用 VGG16 卷积阶段的网络层来提取特征,然后分别传入到 RoI 池化层和 RPN 网络中,RPN 网络得到 RoI 后跟特征图一起传入到 RoI 池化层,获得固定尺寸大小的输出,最后再传入到多层全连接层中,同时得到分类得分和边框坐标偏移量回归的预测结果
2、Faster RCNN 的网络结构图
3、Faster RCNN 的算法步骤
第一步:将原图除以缩放因子来变换图片的尺寸,图像短边不超过600,图像长边不超过1000。然后输入到 VGG16 卷积阶段的网络层来提取特征,生成特征图
第二步:将特征图分别输入到 RPN 网络中以及 RoI 池化层中,RPN 的过程
1、在特征图上滑动使用 3*3 卷积,通过融合周边特征,加强特征的鲁棒性,获得新的特征图
2、由于特征图上的每一个特征点都对应了 9 个 anchors ,所以可以使用 1*1 卷积来代替全连接层,预测每一个 anchor 的分类得分以及坐标偏移量
3、在训练 RPN 网络阶段,首先按照规则生成全部 anchors ,然后将超过图像边界的 anchors 剔除掉,然后计算 anchors 跟所有真值的 IoU,对于每个真值跟其有最大 IoU 的 anchor 标记为正样本,IoU > 0.7 的也标记为正样本, IoU < 0.3 的标记为负样本,然后从中随机抽取正负样本比例为 1:1,总数为 256 个 anchors 作为训练样本,而其余的 anchor 则不参与训练。然后将每个 anchor 跟它有最大 IoU 的真值标记为它的真值。然后计算 anchors 跟真值的坐标偏移量,然后用来训练 RPN 网络
4、在训练 Faster RCNN 网络阶段,首先按照规则生成全部 anchors,然后利用 2 中预测的坐标偏移量来校正 anchors 的坐标,然后将超过图像边界的 anchors 坐标修整到图像边界。然后按 anchors 的分类得分来进行降序排序,保留分类得分的前 12000 个 anchors,然后使用非极大值抑制。然后选取分类得分前 2000 个 anchors 作为候选框。然后计算所有的候选框跟真值的 IoU,对于任意一个候选框,如果它跟所有的真值的最大 IoU 大于等于 0.5,则标记为正样本,否则标记为负样本。然后从中随机抽取正负样本比例为 1:3,总数为 256 的 RoI 作为训练样本。然后将每个 RoI 跟它有最大 IoU的真值标记为它的真值,然后计算 RoI 跟真值的坐标偏移量。
第三步:RoI 池化层的过程:
1、将 RoI 跟特征图输入到 RoI 池化层中
2、将 RoI 的坐标除以 VGG16 网络的下采样率 16 ,并向下取整,得到它在特征图中的坐标
3、将 RoI 划分为 7*7 大小的网格,每个网格的宽和高分别由 RoI 区域的宽和高除以 7 并向下取整来得到
4、在每个网格里使用最大值池化,输出 7*7 大小的特征图
第四步:RoI 池化层后接多层全连接层,然后再接两个并行的预测分支,分别预测分类得分和边框坐标偏移量
4、Faster RCNN 的优点
1、相对于 Fast RCNN,Faster RCNN 使用 RPN 网络来取代了选择性搜索算法来生成候选区域,在训练和测试阶段的速度都大大地提高了,也节省了存储空间
2、相对于 Fast RCNN 不是端到端的形式,Faster RCNN 将生成候选区域阶段也融入到了神经网络中,使得 Faster RCNN 变成了端到端的形式
3、Faster RCNN 通过两阶段网络与 RPN,实现了精度较高的物体检测性能
4、Faster RCNN 是两阶段网络,相对于其他一阶段网络,两阶段网络更加精准,尤其是针对高精度、多尺度以及小物体问题上,两阶段网络的优势更明显
5、Faster RCNN 的缺点
1、卷积网络:卷积网络提取到的特征图是最后一个卷积阶段的特征,并没有融合多个阶段的特征,而且分辨率通常也较小,这些都不利于小物体及多尺度的物体检测
2、非极大值抑制:非极大值抑制本身的过滤对于遮挡物体不是特别友好,本身属于两个物体的候选框有可能因为非极大值抑制而被过滤为 1 个,造成漏检
3、RoI 池化层:RoI 池化层有两次对坐标进行向下取整的操作,会导致 RoI 的坐标跟在原图中的坐标产生偏差,使得网络回归的效果变差,特别是对于小物体检测的时候,影响更大。而且第二次的向下取整操作,会导致只提取了 RoI 部分区域的特征,会影响网络的学习效果
4、全连接网络:原始的 Faster RCNN 最后使用全连接网络,这部分全连接网络占据了网络的大部分参数,并且 RoI 池化层后每一个 RoI 都要经过一遍全连接网络,没有共享计算
5、正负样本数量:在 RPN 及 RCNN 部分,都是通过超参数来限制正负样本的数量,以保证正负样本的均衡。而对于不同任务与数据,这种正负样本均衡方法不一定是最有效的
6、两阶段网络:RPN 与 RCNN 两个阶段分工明确,带来了精度的提升,但速度相对较慢,实际实现上还没有达到实时
6、Faster RCNN 的损失函数
Faster RCNN 的损失分别由 RPN 的分类得分损失、RPN 的坐标偏移量回归、 RCNN 的分类得分损失和 RCNN 的边框回归损失,总共四部分组成,其中 RPN 的分类得分损失函数和 RCNN 的分类得分损失函数使用交叉熵,而 RPN 的坐标偏移量回归损失函数和 RCNN 的边框回归损失则使用 smooth_L1
具体表达式为:
假设 为其预测值,带 * 号的则是其真值, 则是多任务平衡系数, 表示只选取 u 大于 1 的部分,因此
注:RPN 中是二分类,而 RCNN 中则是类别数 + 1
RPN 回归中的正样本数量为 128,而 RCNN 中的正样本数量为 64
7、RPN 的步骤(面试重点)
RPN 是一个全卷积网络,可以输入任意尺寸的图像,然后生成候选区域,它的具体过程是:
1、在特征图上使用 3*3 卷积,通过融合周边特征,加强特征的鲁棒性,获得新的特征图
2、由于特征图上的每一个特征点都对应了 9 个 anchors ,所以可以使用 1*1 卷积来预测每一个 anchor 的分类得分以及坐标偏移量
3、首先按照规则生成全部 anchors ,然后将超过图像边界的 anchor 剔除掉,然后计算保留下来的 anchors 跟所有真值的 IoU,对于每个真值跟其有最大的 IoU 的 anchor 标记为正样本,IoU > 0.7 的也标记为正样本, IoU < 0.3 的标记为负样本,然后从中随机抽取正负样本比例为 1:1,总数为 256 个 anchors 作为训练样本,而其余的 anchor 则不参与训练。然后计算作为训练样本的 anchors 跟真值的坐标偏移量
4、首先按照规则生成全部 anchors,然后利用 2 中预测的坐标偏移量来更新 anchors 的坐标,然后将超过图像边界的 anchors 坐标修整到图像边界,得到最初的候选框。然后按 anchors 的分类概率来进行降序排序,保留概率大的前 12000 个 anchors,然后使用非极大值抑制。然后选取前 2000 个 anchors 作为候选框
5、筛选候选框得到 RoI,首先计算所有的候选框跟真值的 IoU,对于任意一个候选框,如果它跟所有的真值的最大 IoU 大于等于 0.5,则标记为正样本,否则标记为负样本。然后从中随机抽取正负样本比例为 1:3,总数为 256 的 RoI 作为训练样本。同时计算每个 RoI 所对应的类别,以及真值的偏移量。
8、RoI 池化是什么(面试重点)
RoI 池化是输入任意尺寸的图像,然后得到固定尺寸大小的输出。它的具体过程是:
1、将 RoI 跟特征图输入到 RoI 池化层中
2、将 RoI 的坐标除以 VGG16 网络的下采样率 16 ,并向下取整,得到它在特征图中的坐标
3、将 RoI 划分为 7*7 大小的网格,每个网格的宽和高分别由 RoI 区域的宽和高除以 7 并向下取整来得到
4、在每个网格里使用最大值池化
5、输出 7*7 大小的特征图
9、ROI Align 是什么(面试重点)
RoI Align 是对 ROI 池化的改进,主要是在于取消了计算坐标时的向下取整操作,以及避免了只对 ROI 部分区域选取特征的缺点,它的具体过程是:
1、将 RoI 跟特征图输入到 RoI 池化层中
2、将 RoI 的坐标除以 VGG16 网络的下采样率 16 ,但是不进行向下取整的操作,得到它在特征图中的坐标
3、将 RoI 划分为 7*7 大小的网格,每个网格的宽和高分别由 RoI 区域的宽和高除以 7 得到,但是不进行向下取整的操作
4:将每个网格划分为大小相同的 4 个小方格,每个小方格内各取一个点,该点的坐标则为小方格的中心点,而该点的像素点,则由特征图上相邻的 4 个特征点使用双线性插值来得到。然后对每个网格都使用最大值池化
5:输出尺寸大小为 7*7 的特征图
10、1*1 卷积的作用
1*1 卷积的作用是按特征图的跨通道来融合特征,同时保持特征图的平面结构,以及可以改变通道数,实现升维和降维。而且它还可以输入任意尺寸的特征图,所以也可以用来取代全连接层,保持特征图的平面结构。
11、坐标偏移量的计算公式
假设真值的坐标中心点为 ,宽和高分别为 ,而 anchor 的坐标中心点为 ,宽和高分别为
则
其中 除以 的目的是为了进一步限制偏移量的范围,便于预测
12、Faster RCNN 的优化点
13、非极大值抑制(NMS)的具体过程
非极大值抑制是将标记为同一个类别的候选框中,只保留概率大的候选框
第一步:对于同一个类别的候选框,取概率最大的候选框为 A
第二步:计算 A 跟其他候选框之间的 IoU,如果 IoU 超过阈值则剔除掉,反之则保留
第三步:在保留下来的候选框中选择概率最大的候选框为 B,重复第二步
第四步:重复第三步,直到所有的候选框都不可再被剔除
14、SoftNMS 的具体过程