注:本文是基于这个up主的讲解视频所做的一个学习笔记
一.R-CNN
R-CNN步骤:
(ML:机器学习 DL:深度学习)
1.一张图像随机裁剪1k~2k方框区域(特征图),称为候选区域使用SS方法(Selective Search(机器学习:ML)
2.对每个候选区域用,CNN(深度网络DL)提取特征矩阵
(1)将2000个候选区都缩放到227*227大小(不管本身多大)
(2)把候选区域输入实现训练好的AlexNet CNN网络中获取到4096维的特征得到2000*4096维矩阵
3.特征->SVM分类器(ML)->判别是否属于该类 把最大可能性的类作为当前特征的识别结果
SVM分类器是一个二分类的分类器,对于每一个name_class都会进行一个判定,途中表示的是一个VOC数据集的例子,所以有20个类别,有20个SVM分类器
1.做矩阵乘法
2.对得到的2000*20的概率矩阵做非极大值抑制(NMS)剔除重叠建议框(对每个列做操作,比如第一列就是2000个特征中每一个特征为猫的概率),得到该列即该类中得分最高的一些建议框
非极大值抑制NMS(Non-Maximum Suppression)剔除重叠建议框的主要目的:就是去除一些是重复目标的建议框,一个目标只保留一个类别概率最高的建议框就够了
4.使用回归器(ML)精细修正选框位置
黄色:SS方法得到的最初候选框 绿色:物品实际存在框 红色:回归器修改后的预测框
RCNN缺点:测试.训练速度慢,训练所需空间大
二.Fast R-CNN
(一)fast rcnn步骤
1.一张图生成1K~2K个候选区域(SS方法)
2.将图像输入网络得到相应的特征图,将SS算法生成的候选框投影到特征图上获得相应的特征矩阵
目的:这样就避免原始图像中的同一部分在不同候选框中反复提取特征
这里和R-CNN就完全不一样了,R-CNN是将2000个候选框输入CNN网络得到特征矩阵,而这里是将整个图像输入CNN网络得到特征图(feature map),将候选框投影到特征图上,得到相应特征矩阵
正样本:含有需要检测目标的候选框;负样本:背景
在这里SS算法得到的2000个候选框不是全部被应用了的,只随机采用了一部分比如论文中说只采用了64个ROI(region of interest感兴趣区域)/image
3.将每个特征矩阵通过ROI Pooling层缩放到7*7大小的特征图,接着将特征图展平通过一系列的全连接层得到预期结果
ROI:Region of Interest感兴趣区域
这里也发生了变化,R-CNN是训练了SVM进行分类,又训练了回归器进行修正,而fastrcnn就是结合到一个网络中了,训练的内容变少了
(1)每个特征矩阵通过ROI Pooling layer层缩放到7*7大小的特征图
对矩阵的每个区域都进行max-pooling最大池化下载量
(2)将7*7特征图展平通过一系列的全连接层得到预期结果
①7*7特征图展平
②一系列的全连接层:
将展平后的特征图通过两个全连接层FC得到ROI feature vector,在ROI feature vector上并联两个全连接层FC,一个FC用于目标概率的预测,一个FC用于边界框回归参数的预测
a.目标概率方面的分类器(softmax):会输出N+1个类别的概率(N哥检测目标的种类+背景)
全连接层softmax的FC有N+1个节点
b.边界框回归器(bbox regressor):会输出对应N+1个类别的候选边界框回归参数(),共(N+1)*4个节点. (因为每个类别都有四个参数,共N+1个类别,所以是(N+1)*4)
(二)fastrcnn损失
1.分类损失
2.边界框回归损失
三.Faster R-CNN
和Fast R-CNN的主要区别就是把得到候选区域的这个算法由SS换成了RPN.
cls:类别 reg:边界框回归参数 IoU:两个边框的重叠程度