开头先感谢可爱的小姐姐的细心讲解,视频网址如下:
目标检测基础——RCNN系列模型(理论和代码复现)_哔哩哔哩_bilibili
目录
RCNN过程
非极大值抑制(NMS)
Bounding-box regression
RCNN对语义分割的尝试:
语义分割的简史:
SPPnet简介
Fast-RCNN
Fast-RCNN 训练过程
Fast-RCNN的优缺点:
Faster-RCNN
Faster RCNN网络结构
RPN部分
Anchor(锚):
Faster 训练过程由两个部分循环操作组成的:
目标候选框得实现:
区域提案方法 Extract region proposals:
使用选择性搜索 selective search 提取2000个候选区域
经过得到得(x‘,y’,w‘,h’)与现实标注(x,y,w,h)以欧氏距离损失做回归
对候选框 bounding box 进行评分和整合。
选取备用的候选框工作的方法有很多种,下面来介绍一下 selective search 和 EdgeBoxes 。
视频的小姐姐说聚合到 2000张候选框 就停下来了,实际操作待检验。还有必要提的一点是这种selective search 是一种类似于聚类的方法,也就是是需要在CPU上进行的。
边缘框的方法是根据 图像里面色差比较大的物体的边缘 来确定框的位置的,实际效果来说速度很快,准确度也还可以。
对候选框经过了 中间过程(权重学习) 后得到的微调参数,最后作用与候选框让它能变成与实际标注框差不多相近的效果。
RCNN的优缺点:
这里我们可以先讨论一下 语义分割是什么:
图像分割 是 物体检测 后的另一个任务,我们要对图像在像素级别上对前景和后景的划分。然后在前景的基础上对图像进行一个分类。
一般以2015年为分界点:
FCN 就是将图片不断卷积池化,卷积池化。随着层数的增加,语义程度越来越高。一直卷积到(类别+1,理解为检测物品类别+背景)的通道数作为输出到一个和 原图一样的(大小,长宽,通道数)特征图上。在这个特征图上包含了前面的语义类别,一类的物体往往只有一种颜色。-------这相当于用深度学习去做了一个语义分割
有意思的是,我们可以发现语义比较高,卷积的图比较小的时候,整个特征图就糊成一块了。在比较靠前,较接近原图的卷积层取出来的图就显得精细一些。(比较ground truth 和 第五层)
所以在后面他把 后面的语义较高的层 和前面 语义较低的层 做了一个结合,我理解是使得原始图像信息得到了保存。
真正对图片大小有要求的是 全连接层,因为在模型里面 全连接层的节点数目是需要一定大小的。
改进的方面:
结构分散
解决了 2K张候选图 都过CNN拉低速度的问题
把样本图片之间放到模型中,然后拿得到的特征图。在特征图里按照对应关系把每一个候选框区域里那一小块的特征图取出来备用。
为什么是备用呢?因为在把这些小的 特征图 放到 全连接层 里进行分类之前需要满足 全连接层的数目 要求。这里满足要求的时候用到了“ROI Pooling”。
1.经过 全连接层 的分类得到分类出来的标签,拿得到的标签和真实的标签去计算loss
2.定位框 和 真实框 之间的差距来计算另一个loss。
改进方面:
非端到端
解决selective search拉低速度的问题(CPU上运行的聚类算法)
1.设锚----->抛网------->判断网子里是否有东西
在上图做完3×3的卷积后得到了 512*H*W(512是指的通道数,H*W是特征图大小),经过 1×1的小卷积后特征图大小不变,通道数变成2K(等于Anchor出去的框的数量)。然后通过数据处理后进行二分类的概率计算(也就是候选框中有无目标的分类,有则为正标签,反之为负标签)。
2.另外一条路中,经过1×1卷积,通道数变成了4K。为什么变成4K了呢?可以解释为一个锚(Anchor)扔出去了九张网(候选框),每个候选框给它返回一个包含四个数的值(x,y,w,h),这个值就是定位框。在这个路径上输入是候选框,输出的是经过训练得到参数拿来调整过后的候选框。
3.im_info,就是可以从已经训练好的模型中读取参数,前面两步就不需要了。(这里进行的RPN的应用阶段,所以才保留了前300。在训练阶段则是正常的保留256个候选框)
总而言之就是。在 Proposal 之前,判断候选框里有没有东西(识别过程),判断到如果有东西,它应该把这个候选框怎样调整更加合适(定位过程)。这两个过程都是需要训练的。
2K意思是,2为 正标签 和 负标签。K是每一个锚点会撒出去的k张网。
4K的意思是,4为定位的微调信息(x,y,w,h),K是每一个锚点会撒出去的K张网。
RPN 在 Faster-RCNN的最主要工作是选取 候选框 。主要是遍历取中心锚点,相当于一个优化穷举的方法。
1.第一个过程为RPN的训练,RPN训练过程中,别的权重不变。RPN训练过程就会比较高效。
2.当训练其他部分的权值的时候,RPN里面的权值的就固化。