1.Overfeat模型

1.1 滑动窗口

目标检测的暴力方法是从左到右、从上到下滑动窗口,利用分类识别目标。为了在不同观察距离处检测不同的目标类型,我们使用不同大小和宽高比的窗口。如下图所示:
在这里插入图片描述
这样就变成每张子图片输出类别以及位置,变成分类问题。但是滑动窗口需要初始设定一个固定大小的窗这就遇到了一个问题,有些物体适应的框不一样,所以需要提前设定K个窗口,每个窗口滑动提取M个,总共KxM 个图片,通常会直接将图像变形转换成固定大小的图像,变形图像块被输入 CNN 分类器中,提取特征后,我们使用一些分类器识别类别和该边界框的另一个线性回归器。
在这里插入图片描述
取不同大小的窗口是为了适应不同大小的物体

1.2 训练数据集

在这里插入图片描述
子图和标签作为分类和回归的输入数据

1.3 Overfeat模型总结

这种方法类似一种暴力穷举的方式,会消耗大量的算力,并且由于窗口大小问题可能会造成效果不准确
但是提供了一种解决目标检测问题的思路

2.R-CNN模型

2.1 完整的R-CNN结构

不使用暴力方法,而是用候选区域方法(region proposal method),创建目标检测的区域改变了图像领域实现物体检测的模型思路,R-CNN是以深度神经网络为基础的物体检测的模型,R-CNN在当时以优异的性能令世人瞩目,以R-CNN为基点,后续的SPPNet、FastR-CNN、Faster R-CNN模型都是照着这个物体检测思路。
在这里插入图片描述
步骤(以AlexNet网络为基准)
1,找出图片中可能存在目标的侯选区域region proposal。
2.进行图片大小调整为了适应AlexNet网络的输入图像的大小227x227,通过CNN对候选区域提取特征向量,2000个建议框的CNN特征组合成2000x4096维矩阵
3.将2000x4096维特征与20个SVM组成的权值矩阵4096x20相乘(20种分类,SVM是二分类器,则e有20个SVM),获得2000x20维矩阵
4.分别对2000x20维矩阵中每一列即每一类进行非极大值抑制(NMS:non-maximum®suppression)剔除重叠建议框,得到该列即该类中得分最高的一些建议框
5.修正bbox,对bbox做回归微调中

2.1 候选区域

选择性搜索(SelebtiveSearch,ss)中,首先将每个像素作为一组。然后,计算每一组的纹理,并将两个最接近的组结合起来。但是为了避免单个区域吞噬其他区域,我们首先对较小的组进行分组。我们继续合并区域,直到所有区域都结合在一起。下图第一行展示了如何使区域增长,第二行中的蓝色矩形代表合并过程中所有可能的 ROI。

在这里插入图片描述
SelectiveSearch在一张图片上提取出来约2000个侯选区域,需要注意的是这些候选区域的长宽不固定。而使用CNN提取候选区域的特征向量,需要接受固定长度的输入,所以需要对候选区域做一些尺寸上的修改。

2.2 Crop+Warp

传统的CNN限制了输入必须固定大小,所以在实际使用中往往需要对原图片进行crop或者warp的操作
crop:截取原图片的一个固定大小的patch
warp:将原图片的ROI缩放到一个固定大小的patch
无论是crop还是warp,都无法保证在不失真的情况下将图片传入到CNN当中。会使用一些方法尽量让图片保持最小的变形。
1.各向异性缩放:即直接缩放到指定大小,这可能会造成不必要的图像失真
2.各向同性缩放:在原图上出裁剪侯选区域,(采用侯选区域的像素颜色均值)填充到指定大小在边界用固定的背景颜色

2.3 CNN网络提取特征

在侯选区域的基础上提取出更高级、更抽象的特征,这些高级特征是作为下一步的分类器、回归的输入数据。
在这里插入图片描述
提取的这些特征将会保存在磁盘当中(这些提取的特征才是真正的要训练的数据)

2.4 SVM分类

假设一张图片的2000个侯选区域,那么提取出来的就是2000x4096这样的特征向量(R-CNN当中默认CNN层输出4096特征向量)。那么最后需要对这些特征进行分类,R-CNN选用SVM进行二分类。假设检测N个类别,那么会提供20个不同类别的SVM分类器,每个分类器都会对2000个候选区域的特征向量分别判断一次,这样得出2000,20]的得分矩阵,如下图所示
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
得到[2000,20]得分矩阵

2.4 NMS非极大抑制

目的
筛选候选区域,得到最终候选区域结果迭代过程
对于所有的2000个候选区域得分进行概率筛选然后对剩余的候选框,每个类别进行loU(交井比)>=0.5 筛选

在这里插入图片描述
假设现在滑动窗口有:A、B、C、D、E5个候选框,
第一轮:假设B是得分最高的,与B的IoU>0.5删除。现在与B计算IoU,DE结果>0.5,剔除DE,B作为一个预测结果
第二轮:AC中,A的得分最高,与A计算loU,C的结果>0.5,剔除C,A作为一个结果
最终结果为在这个5个中检测出了两个目标为A和B

2.5 修正候选区域

那么通过非最大抑制筛选出来的候选框不一定就非常准确怎么办?R-CNN提供了这样的方法,建立一个bbox regressor
回归用于修正筛选后的候选区域,使之回归于ground-truth,默认认为这两个框之间是线性关系,因为在最后筛选出来的候选区域和ground-truth很接近了修正过程(线性回归)
在这里插入图片描述
在这里插入图片描述

通过线性回归,特征值是候选区域,目标是对应的GT建立回归方程学习参数

2.6 训练过程

R-CNN的训练过程这些部分,正负样本准备+预训练+微调网络+训练SVM+训练边框回归器

2.6.1 正负样本准备

对于训练集中的所有图像,采用selective search方式来获取,最后每个图像得到2000个region proposal。但是每个图像不是所有的候选区域都会拿去训练。保证正负样本比例1:3
在这里插入图片描述

2.6.1 预训练模型

CNN模型层数多,模型的容量大,通常会采用2012年的著名网络AlexNet来学习特征,包含5个卷积层和2个全连接层,利用大数据集训练一个分类器:比如著名的imageNet比赛的数据集,来训练AlexNet,保存其中的模型参数。

2.6.1 微调

AlexNet是针对lmageNet训练出来的模型,卷积部分可以作为一个好的特征提取器!后面的全连接层可以理解为一个好的分类器。R-CNN需要在现有的模型上微调卷积参数。
将第一步中得到的样本进行尺寸变换,使得大小一致,然后作为预训练好的网络的输入,继续训练网络(迁移学习)

2.6.2 SVM分类器

针对每个类别训练一个SVM的二分类器。举例:猫的SVM分类器,输入维度是2000x4096,目标还是之前第一步标记是否属于该类别猫,”训练结果是得到SVM的权重矩阵W,W的维度是4096x20。*

2.6.3 bbox回归器训练

只对那些跟ground truth的loU超过某个阈值且I0U最大的region proposal回归,其余的region proposal不参与

2.7 R-CNN测试过程

  • 输入一张图像,利用selective search得到2000个region proposal。
  • 对所有region proposal变换到固定尺寸并作为已训练好的CNN网络的输入,每个候选框得到的4096维征
  • 采用已训练好的每个类别的svm分类器对提取到的特征打分,所以SVM的weight matrix是4096 N,N是类别数,这里一共有20个SVM,得分矩阵是2000 20
  • 采用- non-maximun suppression(NMS)去掉候选框
  • 第上一步得到region proposal进行回归。

2.8 R-CNN缺点

1、训练阶段多:步骤繁琐: 微调网络+训练SVM+训练边框回归器。
2、训练耗时:占用磁盘空间大:5000张图像产生几百G的特征文件。(VOC数据集的检测结果
SVM的存在)
处理速度慢: 使用GPU,VGG16模型处理一张图像需要47s。
图片形状变化:候选区域要经过crop/warp进行固定大小,无法保证图片不变形

Logo

脑启社区是一个专注类脑智能领域的开发者社区。欢迎加入社区,共建类脑智能生态。社区为开发者提供了丰富的开源类脑工具软件、类脑算法模型及数据集、类脑知识库、类脑技术培训课程以及类脑应用案例等资源。

更多推荐