发布作者:霹雳吧啦Wz
声明:作者仅为学习,如有侵权请联系作者删除博文,谢谢!
(一)FasterR-CNN理论之R-CNN
1、1RCNN算法流程
-
生成候选区域
利用Selective Search算法通过图像分割的方法得到一些原始区域,然后使用一些合并策略将这些区域合并,得到一个层次化区域结构。这些结构就包含了可能需要的物体
-
对于每个候选区域,使用深度网络提取特征
选择约2000个候选区域,把其缩放到227227pixel,接着将候选区域输入时限训练好的AlexNetCNN网络。每个候选区域得到一个4096维的向量,2000个候选区域最终就得到20004096维的向量。
-
特征送入每一类的SVM分类器,判别是否属于该类
将20004096的特征矩阵与20个SVM组成的权值矩阵409620相乘,就能得到一个200020的概率矩阵,每一行代表的是每一个候选框归于每个类的概率,每一列代表的是不同候选框归于同一类的概率。分别对200020的矩阵每一列进行非极大值抑制剔除重叠框,得到该列,即该类中概率最高的候选框
非极大值抑制的步骤:
在每一列上,首先找到得分最高的目标,计算其他目标与该目标的IOU值,如果IOU值>我们给定的阈值,那么就认为这个目标和其他目标是同一个目标,删除概率值低的候选框。(其实IOU越大说明两个目标相交的越多,就是两个目标几乎一样,那么久不需要这么多了,保留一个概率高的就行) -
使用回归器精细修正候选框位置
对非极大值抑制处理后剩余的建议框进一步筛选。接着分别用20个回归器对上述20个类别中剩余的建议框进行回归操作,最终得到每个类别的修正后的得分最高的boundingbox
RCNN整体框架
1、2RCNN存在问题
(二)FasterR-CNN理论之FastR-CNN
1、1FasterR- CNN算法流程
1.生成候选区域
在一张图像上使用Selective Search算法生成1-2k个候选区域。
2. 将图像输入网络得到相应的特征图,将SS算法生成的候选框投影到特征图上获得相应的特征矩阵。
这里与RCNN就开始不同了,RCNN是将候选框送入CNN中提取特征,这里是将整个图像送入CNN中提取特征,提取完之后将候选框直接投影到特征图中得到相应的特征矩阵
3. 将每个特征矩阵矩阵通过ROI Pooling层缩放到77大小的特征图,接着将特整体展平通过一系列全连接层得到预测效果。
ROIpooling:将整个图像分成77的块,然后在每个块上做最大池化操作,使得网络可以不限制输入图像的尺寸
池化之后,网络中有分类器和候选框回归器
分类器:输出N+1个类别的概率(N为检测目标种类,1是背景概率)这里的全连接层需要N+1个节点
边界框回归器:输出对应N+1个类别的候选框边界回归参数(dx,dy,dw,dh)所以总共需要(N+1*)4。
其中橙色框是候选边界框,红色框是预测边界框,绿色框是groundtruh边界框
整体网络结构
1、2损失函数
由两个损失函数构成
(1)分类器损失
其中p代表的是分类器预测的softmax的概率分布p=(p0,p1…pn)
u对应目标真实类别标签
这个-logpu是怎么来的呢? 由下面多分类交叉熵得来:
其中o*的独热编码是:[0,0,1,…,0] 预测的softmax概率是[0.1,0.3,0.4…0.1]
那么Loss=-log(0.4)
(2)边界框回归损失
λ表示一个平衡系数
[u>=1]:u表示真实类别标签,如果u>=1是它就等于1,表示的是候选区域缺失属于某一个类别当中,它是一个正样本,这时才考虑边界框回归损失。
如果它不》=1它就等于0,表示候选区域是一个背景区域,是负样本,那么这时就不考虑边界框回归损失。
(三)FasterR-CNN理论之FasterR-CNN
由于FasterR-CNN的SS算法的速度过慢,所以作者又设计了RPN(Region Proposal Network)算法来选择候选框
3、1RPN的原理
如下图所示,,首先对于我们所得到的特征图,以一个3*3的滑动窗口,依次在特征图上滑动,同时找到其中心点位于原图的位置。如何确定在原图的位置呢?就是用原图的长除以特征图的长,原图的宽除以特征图的宽,分别会得到两个步距。分别用这两个步距去乘以中心点在特征图中偏移,就得到中心点在原图的位置。
找到在原图中的位置后。一个中心点对应k个anchor boxes。这k个anchor boxes通过两个全连接层,分别得到分类分数和候选框回归参数。其中的分类分数总共有2k个,代表是背景和不是背景的概率,候选框回归参数有4k个,代表其候选框的位置信息和大小信息
文章中定义了三种尺度和三种比例的anchorbox 所以这里一个位置对应9个anchor
3、2RPN的损失
(1)分类损失
分类损失采用二元交叉熵损失或者多分类交叉熵损失
当采用多分类交叉熵损失时
一张特征图对应k个anchor,那么这张图像的整体损失是:Lcls=-ln(0.9)±ln(0.8)+…±ln(0.8)
当采用二元交叉熵损失时
整体的损失=Lcls=-[1ln(0.9)+0]±[0ln(0.2)+(1)*ln(1-0.2)]+… (结果与上面是相同的)
(2)边界回归框损失
(3)总体损失(与fastR-CNN相同)