RCNN:
生成候选框、 ss 算法得到两千个候选框,就要进行两千次正向传播
使用深度网络提取特征
把提取出来的特征放入分类器,进行分类
使用回归器精细修正候选框位置
什么是IoU (Intersection over Union)全称交并比
表示(A交B) /(A并B)
分类的过程中:非极大值抑制剔除重叠建议框:
寻找得分最高的目标--然后计算其他目标与该目标的iou 值,如果他们的iou值大于给定值,就把该目标删除,到最后只留下这个得分最高的目标
在分类的步骤,用该方法(非极大值抑制剔除重叠建议框:)就可以把每一列进行非极大值抑制处理,就能剔除很多重叠的建议框,从而一些保留高质量的建议框#分类。如果没有重叠的,就有多个分数比较高的就可以检测多个目标了
回归的过程中:
上一步通过Ss算法得到的建议框,与实际框Groud Truth (提前标注好的)通过回归分类器,会得到四个参数,分别对应着目标建议框中心点的x偏移量、y偏移量、边界框高度的缩放因子、边界框宽度的缩放因子。通过这四个值,对我们的建议框进行调整,就得到红色边界框。(精细修正过的候选框位置)
fastrcnn:
为什么要设定正负样本?
因为如果没有负样本,可能会让模型认为,因为我没见过错的,所以什么都是对的这种看法
正样本:只要候选框与我们真实目标边界框的iou 大于0.5 就认定他为正样本
softmax:
softmax直白来说就是将原来输出是3,1,-3通过softmax函数一作用,就映射成为(0,1)的值,而这些值的累和为1(满足概率的性质),那么我们就可以将它理解成概率,在最后选取输出结点的时候,我们就可以选取概率最大(也就是值对应最大的)结点,作为我们的预测目标!(最终预测到边界框)
边界框回归器:
输出对应N+1个类别的候选边界框回归参数(dx dy dw da dh 共(N+1)x4个参数,分别对应着目标建议框中心点的x偏移量、y偏移量、边界框高度的缩放因子、边界框宽度的缩放因子。通过这四个值,对我们的建议框进行调整,就得到红色边界框。(精细修正过的候选框位置)
Faster Rcnn 框架
和rcnn 比 就是他最后三个部分放到一起执行了。(放到一个CNN网络中)
rcnn是对ss生成的2k个候选框均进行卷积,也就是要卷积2k次;但是fast-rcnn,是对整体做卷积,再映射,仅卷积一次。
上面图中的output中的softmax是类别概率,bbox regressor是边界框回归参数
fasterRcnn:
fasterRcnn和fastrcnn的很相近,其实就是将fastrcnn中的ss算法在fasterrcnn中被替换成了RPN算法
这几步是一个整体,实现了端对端的一个训练过程。之前的fastrcnn是分为两个部分,先是单独使用ss算法去生成region proposal,特征提取部分,分类部分和边界框回归部分这三个部分是在一共cnn网络中进行实现的,相比起来,框架越来越简介且速度越来越快,模块多融合
RPN
滑动窗口的作用
滑动窗口其实就是个3x3的卷积层,你可以简单理解为进一步抽象特征的作用。每个grid cell确实在原图上对应9个anchor,但滑动窗口每滑动到一个位置上只是针对滑动窗口中心(即3x3中间的一个cell)所应对的9个anchor去预测,另外8个cell(3x3窗口中心一圈8个)只是提供了更多的周边信息。
如图,在经过backbone后得到特征图,通过滑动窗口(slidinig Windows)得到k个anchor box,每滑动到一个窗口就生成一个一维向量(具体的值和前面的backbone最后的通道数相关,这个用的是ZF,所以是256,如果是VGG的话,那就是512),这个一维向量分别通过两个全连接层得到2k(一个是前景的概率,一个是背景的概率)个目标概率,和4k个边界框回归参数。(前面说了是因为每个目标建议框又四个参数)
anchor是什么,怎么来的?:
首先 anchor(候选框)就是在图像上预设好的不同大小,不同长宽比的参照框。
anchor可以理解成预设框,bounding box(bbox)需要结合上下文语境,可能是指gt bbox,也可能是网络预测的目标bbox,proposal一般指的是rpn预测的目标bbox
通过在特征图上的滑动窗口中心点,计算出滑动窗口他对应的原始图像的中心点。怎么对应?:
首先算出原始图像和特征图的长宽的倍数,up主把他称为stride,然后通过在特征图上的 坐标。例如(3,3),在原始图像上他的坐标就等于(3*stridex,3*stridey)。然后又通过规定的长宽比,以及面积大小,就可以得到anchor了,如下图
然后通过边界框回归参数对anchor进行调整
根据给定的比例和面积(经验所得)可以得到3*3=9个anchor
有些感受野虽然没有给定的anchor大,但是确实可以预测相应的边界框,在原论文中给了解释(比如通过经验,我们看到一个物体的一部分,也能够大概的猜出物体完整的区域)
感受野计算:
正负样本的定义:
正样本:与ground-truth(提前标注好的)的IOU大于0.7的anchor,如果这种情况不满足的情况下(个别情况) 就取与ground-truth的iou最大的那个anchor
负样本: 与所有的ground-truth的iou都小于0.3的anchor就是负样本
其他的:既不是正样本也不是负样本的就全部都舍弃掉
RPN的损失计算
为了简化计算,损失函数中λ/Nreg可以换成1/Ncls,λ/Nreg是1/240,1/Ncls是1/256
边界回归框参数:
“anchor的边界框回归参数”是指预测的候选框相对于anchor的修正因子;“anchor对应的GTbox的回归参数”是指真实的边界框(GTbox)相对于anchor的修正因子。gt=f(anchor)+b
前者可以直接由模型回归得到,后者需要根据GTbox的值和anchor的值计算得到。
anchor位置的个数与anchor的区别是什么:
feature map(特征图)上的每一个小方框就代表着anchor位置,进行筛选后,还剩2400个左右的anchor
对于下图的理解:1000*600的图像通过特征层后,比如说用VGG时下采样了16倍左右,差不多就是60*40的,然后每个位置有对应9个anchor所以是60*40*9
anchor就有很多,60*40*9这么多。
训练过程:
然后那些公式不是很看得懂(先摆这,后面等实践更多了再进行补充)