目录
RCNN
深度学习目标检测的开山之作。
RCNN的算法流程:
1、一张图像生成1k-2k个候选区域(使用Selective Search方法)
2、对每个候选区域,使用深度网络提取特征
3、特征送入每一类的SVM分类器,判别是否属于该类
4、使用回归器精细修正候选框位置
--1、Selective Search算法
输入:彩色图片。
输出:物体可能的位置,即是很多的矩形坐标。
首先,我们使用Graph-Based图像分割将图片初始化为很多小区域 R=ri,…,rn。
初始化一个相似集合为空集: S=∅。
计算所有相邻区域之间的相似度,放入集合 S 中,集合 S 保存的是区域对以及它们之间的相似度。
找出 S 中相似度最高的区域对,将它们合并,并从 S 中删除与它们相关的所有相似度和区域对。重新计算这个新区域与周围区域的相似度,放入集合 S 中,并将这个新合并的区域放入集合 R 中。重复这个步骤直到 S 为空。
从 R 中找出所有区域的 bounding box(即包围该区域的最小矩形框),这些 box 就是物体可能的区域。
另外,为了提高速度,新合并区域的 feature 可以通过之前的两个区域获得,而不必重新遍历新区域的像素点进行计算。这个 feature 会被用于计算相似度。
原文链接:https://blog.csdn.net/qq_37394634/article/details/103976244
--2、对每个候选区域,使用深度网络提取特征
将2000候选区域缩放到227*227,将候选区域输入预先训练好的AlexNet CNN 网络,获取4096维的特征得到2000*4096矩阵。
--3、特征送入每一类的SVM分类器,判别是否属于该类:
将2000*4096的特征矩阵与20个SVM组成的权值矩阵4096*20相乘,获得2000*20的概率矩阵,每一行代表一个建议框属于每个目标的类别的概率,每一列代表不同框属于特定目标类别的不同概率(如猫)。分别对上述2000*20的矩阵中每一列即每一类进行非极大值抑制剔除重叠建议框。得到该列即该类中得分最高的建议框。
非极大值抑制(NMS)剔除重叠边界框:
IoU:交并比
先寻找得分最高的目标,再计算其他目标与该目标的iou值,删除所有iou值大于给定阈值的目标。
经过ss算法得到的边界框不是太准确,需要修正位置
--4、使用回归器精细修正候选框位置
针对CNN输出的特征向量进行预测
对NMS处理后剩余的建议框进一步筛选,分别用20个回归器对上述20个类别中剩余的建议框进行回归操作,最后每个类别修正后得分最高的bounding box。根据预测的边界框中心点坐标,高,宽 和真实的边界框4个点进行回归。(回归操作见faster RCNN)
RCNN问题:
1、检测一张图片需要53秒,用ss算法大约2秒,一张图像的候选框有太多重复,冗余
2、SVM 和边界框回归器,需要将每个图像的每个目标候选框进行提取特征,再放入磁盘,占内存很大。
Fast-RCNN
流程:
1、一张图像生成1k-2k个候选区域(使用Selective Search方法)
2、将图像输入网络得到相应的特征图,将SS算法生成的候选框投影到特征图上获得相应的特征矩阵
3、将每个特征矩阵通过ROI pooling(Region of Interest 感兴趣区域)层缩放到7*7大小的特征图,接着将特征图展平通过一系列全连接层得到预测结果。(分类结果和回归结果)
一次性计算整张图的特征:
大幅度提高速度
训练数据(正样本,负样本),不是取ss算法提取后的所有边界框
将预测的边界框与真实的边界框的Iou大于0.5,设为正样本,并不是所有的都用,随机采取一部分
IOU在0.1-0.5之间,认为是负样本
ROI pooling层经过最大池化下采样,缩放到7*7大小的特征图,
将特征图分成7*7个网格,每个网格进行最大池化下采样
分类器:经过softmax后,概率和为1,全连接层N+1个节点
边界框回归器:
dx,dy是用来调整候选边界框的回归的参数,归一化后的,vx=(Gx-Px)/Pw,vy一样,
vw = log(Gw/Pw)
用指数防止出现负值
p0是候选区域为背景的概率
即softmax交叉熵损失,pu指当前候选区域预测为u的概率
边界框回归损失:
当u>=1,这一项为1,否则为0,u>=1当前的候选区域为真实的类别才用边界框损失,为背景时,u=0,不用边界框损失