该文来自于教程:https://www.bilibili.com/video/BV1af4y1m7iL?p=3&spm_id_from=pageDriver
RCNN
算法流程
1. 使用select search方法生成1K-2K个候选区域
使用select search算法通过图像分割方法得到一些原始区域,然后使用合并策略将这些区域合并,得到一个层次化的区域结构,其中可能包含对应的物体。
2. 对每个候选区域,使用深度网络提取特征(图片分类网络)
将2000个候选区域缩放到227×227像素,接着将候选区域输入到CNN网络中获取4096维特征得到2000(候选框的个数)*4096维矩阵。
3. 将特征送到每一类的SVM分类器,判断是否属于该类(以pascal VOC数据集为例)分类
将2000×4096维特征与20个SVM 组成的权值矩阵4096×20相乘,就能得到2000×20维的矩阵表示每个建议框对每个类别的得分(该建议框归属于每个类别的概率,每一行表示一个候选框针对每个类别得到的分数),分别对2000*20矩阵的每一列进行非极大值抑制除去重叠的框,得到该类中得分最高的一些建议框。
IOU
非极大值抑制
寻找得分最高的目标——》计算其他目标与该目标的iou值——》删除所有IOU 大于给定阈值的目标(当大于一定的阈值时,我们就认为这两个目标是同一个目标,将概率低的删掉)
接下来按照同样的流程遍历完所有的边界框。
4. 使用回归器修正候选框的位置回归
对NMS处理后剩下的建议框进一步筛选,接下来分别使用20个回归器对20个类别中剩下的建议框进行回归操作,最终会得到每个类别修正后得分最高的边界框(bounding box)
缺点:
测试速度比较慢、一个图像的候选框直接存在大量重叠,提取特征操作冗余
训练速度慢、过程繁琐
训练所需的空间大(提取的多个建议框都会送入到卷积网络中提取特征,并写入磁盘)
Fast R-CNN
1 使用select search方法生成1K-2K个候选区域
2 将图像输入到网络得到相应的特征图,将ss生成的候选框投影到特征图上获得相应的特征矩阵。
正样本:候选框与真实的目标边界框的IoU大于0.5
负样本:候选框与所有真实目标的边界框的IOU 值为0.1-0.5
这里是从2000个候选框中采集64个候选框,一部分是正样本,一部分是负样本。
3 将每个特征矩阵通过ROI(感兴趣区域) pooling层缩放到7×7大小的特征图。
对每个候选区域划分成7×7的块,对每个块执行最大池化采样,就能得到7×7的特征矩阵。
4 接着将特征图展平通过一系列的全连接层得到预测结果。
分类器
输出N+1个类别的概率,第一个概率表示类别为背景的概率
边界框回归器
输出对应N+1个类别的候选边界框的回归参数(dx,dy,dw,dh)共有(N+1)*4个节点。
损失
[u>=1]是艾弗森括号当满足条件时为1,不满足条件时为0
分类损失
边界框回归损失
Faster R-CNN(RPN+Fast R-CNN)
算法流程
1.将图像输入到网络得到相应的特征图
2.使用RPN结构生成候选框,将RPN生成的候选框投影到特征图上获得相应的特征矩阵
3.将每个特征矩阵通过ROI pooling层缩放到7×7大小的特征图,接着将特征图展平通过一系列全连接层得到预测结果。
RPN的结构
首先使用滑动窗口在特征图上滑动,每滑动到一个位置就生成一个向量,再通过两个全连接层输出目标概率(2K表示k个anchor box中分别为前景与背景的概率)与边界框回归参数(4k表示k个anchor的4个回归参数),图中的256表示使用ZF作为主干,其深度为256。
anchor box:特征图中的每个滑动窗口的中心点对应原图上对应的位置,在该根据不同的尺度和比例计算出9个anchor box,因此每个点处会生成18个概率分数,36个回归参数。
文中给出的尺度(面积)为:(1282,2562,5122)
比例:(1:1,1:2,2:1)
感受野计算
注意:anchor与候选框不是同一个,候选框是anchor经过RPN的回归参数调整之后得到的。
对于RPN的训练,是从k个anchor中采样256个anchor,其中包含正样本与负样本,比例约为1:1。并将正负样本之外的anchor全部丢掉。
正样本:anchor与真实的目标边界框的IoU大于0.7或者是anchor与某一个ground truth的IOU是与该groud truth 相交的anchor中IOU最大的。
负样本:候选框与所有的ground-truth的IOU 值都小于0.3
损失计算
faster R-CNN训练:现在一般采用联合训练,将RPN 与fast R-CNN的损失加在一起进行联合训练。