目录
1. 相关概念
物体检测,可能会存在多个目标。这需要 (1)判断每个物体的类别 (2)准确定位出物体的位置。上面图片中有猫有狗有黄鸭子,这是多物体检测。
物体检测算法中经常用的的概念:Bbox、IoU、非极大抑制
【Bbox(Bounding Box)】
- bbox是包含物体的最小矩形,该物体应在最小矩形内部,如上图红蓝绿的三个框。目标检测中关于物体位置的信息,输出是一组 (x,y,w,h) 数据。其中x,y代表bbox的左上角,w,h代表bbox的宽和高。
【IoU(Intersection over Union)】
- IoU的作用:在训练网络时,经常依据候选区域和标定区域的IoU值来确定正负样本。
- IoU的计算:对于两个区域R和R’,则两个区域的重叠程度overlap计算如
【非极大值抑制(Non-Maxinum Suppression,又称NMS)】
- 非极大值抑制可以看做局部最大值的搜索问题,NMS是许多计算机视觉算法的部分。如何设计高效的NMS算法对许多应用十分关键。例如:视频跟踪、数据挖掘、3D重建、物体识别以及纹理分析等。
- NMS在目标检测上的应用:NMS就是把不是极大值的抑制掉,在物体检测上,就是对一个目标有多个标定框,使用非极大抑制算法去掉多余的标定框。如下图,前者有多个标定框,使用NMS后,留下最合适的框
- 具体操作步骤:(一张图片上有猫,假设有N个框,每个框被分类器计算得分Si,1<=i<=N)
- 0. 构建一个集合H,初始化包括N个框;
构建一个集合O,初始化空集 - 1. 将集合H中的框按得分大小排序,将得分最高的框m,从集合H移至O
- 2. 遍历集合H中的框,分别与框m计算IoU。如果高于阈值(一般为0.3~0.5),则认为与此框重叠,将此框从集合H删除
- 3. 回到第1步,进行迭代,直至集合H为空。集合O中的框为我们所需(集合O中有几个框,图片中就有几只猫)
- 0. 构建一个集合H,初始化包括N个框;
2 R-CNN的结构
在RCNN模型之前,较好的物体检测模型DPM使用了一堆传统的算法模型,在VOC数据集上表现大约在30mAP。R-CNN开创性的提出了深度神经网络来做物体检测,并提出了一系列在较少标注集下的训练模型的方法。后续的SPPNet、Fast R-CNN、Faster R-CNN模型都是基于这个思路的。
下面是模型的示意图:
R-CNN模型的处理流程
- 1.selective search:获取输入图片,提取约2000个候选区域
- 2. CNN: 放缩候选区域同等大小,分别输入CNN,得到特征向量
- 3. SVM + NMS:将CNN的输出输入到SVM中进行类别判定,再使用非极大值抑制,得到最合适的框
- 4. 修正bbox
测试时,【分类】先对带测试图片提取约2000个候选区域,将每个区域都进行放缩,然后将缩放后的图片输入CNN进行特征提取。然后使用SVM对CNN输出的特征向量进行打分(每类都有一个SVM,21类就有21个分类器),对打好分的区域使用NMS(每类都单独使用),去掉一些不合适的候选框。【定位】将候选框的图片通过CNN的pool5的特征向量,输入到回归器中,微调框的坐标。
运行时分析。相比于当时的技术,RCNN的目标识别是高效的。
原因:(参数变少)1.CNN的参数是所有类别共享的;2.RCNN生成的特征维度较少。论文拿应用在UVA采用的空间金字塔技术相比,它们生成的特征维度是360k,而RCNN为4k多。
RCNN的特征提取时间,GPU--13s/张,CPU--53s/张。RCNN可扩展更多类别,处理100k中类别,在多核CPU上只需要10多秒。处理100k个预测,需要1.5GB内存空间(UVA需要134GB)
2.1 候选框的提取
可行方法:
- 滑窗的方法:由于一张图片上物体的大小和位置不固定,滑窗会使工作量巨大,且难实现
- 使用“传统成熟”的方法:本文选择了selective search方法。这种方案较为成熟,实现较为简便
2.2 缩放候选区域
Selective Search在一张图片上提取出约2000个候选区域(长宽不固定)。因为CNN对输入图像的大小限制(这里使用的AlexNet的输入大小227x227),所以要将候选区域进行固定尺寸的缩放。
缩放分为两类(该部分在原文附录A)
- 1. 各向同性缩放,长宽放缩相同的倍数
- tightest square with context:
把候选区域(region proposal)的边界扩展为正方形,灰色部分用原始图片中相应像素填补,如下图(B) - tightest square without context:
把候选区域(region proposal)的边界扩展为正方形,灰色部分不填充,如下图(C)所示
- tightest square with context:
- 2. 各向异性缩放,长宽缩放的倍数不同
- 图像可能失真,直接将长宽缩放到227*227,如下图(D)所示
- 在缩放之前,作者考虑,在候选区域周围padding额外的原始图片像素。下图的第一层是padding=0,第二层是padding=16
- 结论:采用各向异性缩放并且padding=16的时候效果最好
2.3 通过CNN提取特征向量
CNN用来提取候选区域的更高级更抽象的特征。高级特征作为下一步分类器的输入数据,从而得到物体的位置和种类
CNN的训练分以下几个过程:
1. 有监督的预训练
- 训练的时候,先使用 ILSVR2012 数据库训练AlexNet。训练任务是图片分类,因为这个数据库没有分类的标定数据
2. fine-turning 训练的设定
- 数据集:PASCAL VOC,有20类
- FC的设定:最后一层FC的输出由1000更换为21
- 优化器:SGD
- 初始学习率:0.001(初始化预训练的0.1倍:使fine-tuning有效的进行而不会破坏初始化的结果)
- batch:128 = 正样本32 + 负样本96。【正样本】候选区域与ground truth的IoU大于0.5的候选区域(跨所有类别);【负样本】不是正样本的样本)
- 保存的数据:训练完成后,我们移除网络的最后一个FC层,此时网络输出4096维。对于一张图片,计算所有的候选区域 (2000个) 通过卷积模块的特征向量(4096维),并保存到硬盘上(此处的保存和后面训练的获取,非常耗时)
【使用fine-tuning的原因】:是当数据量不够的时候,常用的一种训练方式(先用别的数据库训练网络,然后再用自己的数据库微调训练)
【IoU的阈值为0.5的原因】:CNN模型容量大,需要的数据多。所以放宽了限制,获得到更多正样本的数据,防止过拟合
2.4 目标种类分类器
SVM:前面的CNN在候选区域上提取了特征向量(FC7层的特征),例如2000个候选区域,会提取出来2000*4096的特征向量。用这些特征向量同时训练N(类别数)个二分类的SVM,SVM的权重矩阵为4096*N。
- 训练SVM的样本
- 【正样本】紧紧包裹ground truth的候选区域。
- 【负样本】候选区域与ground truth的IoU小于0.3的候选区域。其余样本忽略。
- 负样本中,阈值=0.3的选择很重要,是在验证集上基于{0,0.1,0.2,0.3,0.4,0.5}中选择的。如果选择为0.5,mAP可以降低5个点,设置0,降低4个点。
- SVM的训练数据太大,无法一下子读取到电脑内存中,作者采取了Hard negetive mining 的手段(没有仔细了解)
- 使用SVM的原因
- CNN对小样本容易过拟合,需要大量的训练数据。故在fine-tuning阶段,定义IoU>0.5来扩大正样本数量。这样训练会导致网络定位准确度下降,但能够得到想要的特征提取模块,所以再训练个SVM,对特征向量进行分类
- SVM适用于小样本训练,其原理就是最小距离最大化,故对样本IoU限制严格。
非极大值抑制:经过SVM分类后,输出所有候选框的得分(2000x20的得分矩阵),然后使用非极大值抑制得到最想要的候选框。大概步骤如下
- 分别对2000x20维矩阵中每列 按从大到小进行排序
- 对于每一列,小于阈值a的候选框,认为框内不存在该列所表示类的物体,所以去除。剩余N个框
- 对于每一列,对这N个框 进行NMS
- 遍历完2000x20维矩阵所有列,对每个类别进行NMS,得到最终的不同物体的候选框
2.5 修正bbox
bbox回归认为候选区域和ground-truth之间时线性关系。原因:最后从SVM内确定出来的区比较接近ground-truth,近似理解过线性关系。
训练回归器的输入为N对值,,分别为候选区域的框坐标和真实的框的坐标。
1) 候选框P 到预测框G'的平移缩放
(我们要学习的就是四个变换 dx(P), dy(P), dw(P), dh(P))
- 先做平移(Δx,Δy)
- 再做尺度缩放(Sw,Sh)
2) 回归器的搭建
【输入】
- 样本值:这里的输入不是Proposal的P=(Px,Py,Pw,Ph),而是Proposal在Pool5(CNN的特征提取模块)后的特征向量。【正样本】候选区域与ground-truth的IoU大于0.6
- 标签值:
【输出】需要进行平移变换和尺度缩放的
【目标函数】
其中,是输入Proposal在pool5的特征向量,
是我们要学习的参数
【损失函数】
3 可视化、框架精简和错误检测
3.1 可视化
在卷积神经网络中,第一层捕获的特征肉眼可视,通常捕获物体的边缘,及突出的颜色信息。越往后的卷积越抽象。
Zeiler 和 Fergus提出了一种基于反卷积手段的可视化研究,RCNN作者提供了一个没有参数的方法,简单直接
思路:选出CNN某层,把它当成一个物体分类器,然后计算所有候选区域(约1000万)通过该部分CNN的特征矩阵。不同channel的特征表示网络对图片上channel种行为响应。我们把特征矩阵按channels划分,得到channels个激活值。然后将相同channel的所有候选区域的激活值,进行排序。展示每个channel上的激活值最高的若干个候选区域。
在这里:可视了第五层的池化层pool5,feature map为6x6x256(忽略边界效应,在网络输入为227x227时,每个pool5单元拥有195x195的感受野)。可以理解为:feature map可以得到256个激活值,表示了对256种行为(网络的256个卷积)响应的程度。
下图展示了256个特征中的6个,每个特征取激活值最高的16个区域。
这个实例来自于VOC 2007上调优的CNN。这些特征都是按照形状、纹理、颜色和材料的特质分布式表示。
第二行--狗和斑点,第三行--红斑点、人脸等....。卷积层提取了图像的抽象特征,后续的FC层,则对这些丰富的特征建立大量的组合来表达各种不同的事物。
3.2 消融研究(Ablation studies)
pool5:输出6x6x512=9216维。
fc6-relu:输出4096。与pool5做了一个4096x9216+4096的运算。
fc7-relu:输出4096。与fc6做了一个4096x4096+4096的运算。
无调优的各层性能
所有参数只在ILSVRC2012上面预训练(上表1-3行)。
- fc7的特征相对于fc6层的特征表现不够好:这就意味着29%(约1680万)的CNN网络参数对于mAP没有意义
- fc6与pool5能产生相似的结果:pool5特征更具有代表性(网络特征提取模块只使用了CNN参数的6%)
- 说明:CNN网络最有代表性的作用来自于卷积网络,而不是参数更多的全连接网络。
有参数调优的各层性能
在VOC2007 trainval上调整我们的CNN参数(表3-6行)
- fc7比pools高出7.2%(未调整时0.3%):这表明从ImageNet中学习的pool5的特征是一般性的,并且大部分的改进是从非线性获取的。
3.3 测量误差分析
略。3.2中部分内容和3.3涉及之前的目标检测算法,使用的是机器学习,并不是很明白,所以不做分析
参考论文:
https://blog.csdn.net/u011974639/article/details/78053203
https://blog.csdn.net/v1_vivian/article/details/78599229
https://blog.csdn.net/just_sort/article/details/80697779