目标检测经典论文阅读整理

Ⅰ R-CNN

参考文章及视频:
①http://t.csdn.cn/z4GlG
②https://zhuanlan.zhihu.com/p/60794316
③https://www.bilibili.com/video/BV1af4y1m7iL/?spm_id_from=333.337.search-card.all.click

①R-CNN算法流程

⭐使用Selective Search方法在一张图像生成1K~2K个候选区域
⭐对每个候选区域,使用深度网络提取特征
⭐特征送人每一类的SVM分类器,判别是否属于该类
⭐使用回归器精细修正候选框位置

②候选区域的生成:

利用SS算法通过图像分割的方法得到一些原始区域,然后使用一个合并策略将这些区域合并,得到一个层次化的区域结构,而这些结构就包含着可能需要的物体。

③Pre-training & Fine-Tunning

由于物体标签训练数据少,如果要直接采用随机初始化CNN参数的方法是不足以从零开始训练出一个好的CNN模型。基于此,采用有监督的预训练,使用一个大的数据集(ImageNet ILSVC 2012)来训练AlexNet,得到一个1000分类的预训练模型。
第四步中我们会对每个RP进行强制缩放,但是原来的CNN模型针对ImageNet数据集且无变形的图像来提取特征,如今是针对VOC检测数据集且有变形的图像来提取特征。所以为了让我们的CNN适应新的检测任务和新的领域(变形后的推荐窗口),需要对CNN做特定领域的参数调优,也就是fine-tunning。用的是从每张VOC训练图像中搜索到的RP(Region Proposal)进行微调的。
而且如果不针对特定任务进行fine-tunning,而是把CNN当作特征提取器,卷积层学到的特征其实就是基础的共享特征提取层。
首先对PASCAL VOC数据集进行SS,搜索到2000个RP对预训练模型进行fine-tunning。将原来预训练模型最后的1000-way的全连接层(即分类层)换成21-way的分类层(20类物体+背景),然后计算每个RP和GT的IoU,对于IoU>0.5的region proposal被视为正样本,否则为负样本(即背景)。另外,由于对于一张图片的多有候选区域来说,负样本是远远大于正样本数,所以需要将正样本进行上采样(在目标检测中,上采样通常用于增加图像的分辨率,以便更好地识别目标的位置和细节,通常采用插值法来完成)来保证样本分布均衡。在每次迭代的过程中,选择层次采样,每个mini-batch(mini-batch是指将大规模数据集分成多个较小的子集,称为batch(批次),每个batch包含多个数据样本)中采样两张图像,从中随机选取32个正样本和96个负样本组成一个mini-batch(128,正负比:1:3)。我们使用0.001的学习率和SGD来进行训练。
提取特征的CNN网络经过了预训练和微调之后不再训练,就固定不变了,变成了一个单纯的提取特征的工具。

④对每个候选区域,使用深度网络提取特征

我们首先将该区域中的图像数据转换成与CNN兼容的形式(其架构要固定227 * 227像素大小的输入,这里的作者采用了在候选框周围填充了16的padding后使用各向异性缩放,这种形变经测试会使mAP值提高)。无论候选区域的大小和纵横比,我们都会将周围的紧密边界框的所有像素扭曲到所需的大小。接着将候选区域输入事先训练好的AlexNet CNN网络获取4096维的特征得到2000 * 4096维矩阵。
图源:https://www.bilibili.com/video/BV1af4y1m7iL/?spm_id_from=333.337.search-card.all.click&vd_source=c4cb0dcbf855e9746f1e28102cdb2630

⑤SVM的训练以及类别判定

共有21个SVM分类器。
在SVM分类过程中,IOU<0.3被作为负例,ground-truth(即完全框住了物体,默认IOU>0.7时)是正例,其余的全部丢弃。然后SVM分类器也会输出一个预测的labels,然后用labels和truth labels比较,计算出loss,然后训练SVM。
由于SVM是小样本训练(小样本训练是指在深度学习中使用非常小的数据集进行模型训练。通常情况下,小样本训练中的数据集数量少于几千个。由于数据量较少,小样本训练通常需要采用特殊的技术和策略,以确保模型的准确性和泛化能力。),所以会存在负样本远多于正样本的情况。针对这种情况,作者使用了hard negative mining方法(初始时用所有样本训练,但是这样负样本可能远多王正样本,经过一轮训练后将score最高即最容易被误判的负样本加入新的样本训练集,进行训练,重复以上步骤至达到停止条件比如分类器性能不再提升),使得SVM适用于小样本训练,在样本不平衡时依然做到不会发生过拟合。
SVM由于是小样本训练,所以会存在负样本远多于正样本的情况。针对这种情况,作者使用了hard negative mining方法。具体来说,首先利用目标检测算法进行一轮训练,然后使用训练后的模型在所有负样本中进行预测,选择预测分数最高的一部分负样本作为难负样本进行训练。这样做可以使分类器更加关注难分类的图像区域,从而提高目标检测算法的准确性和泛化能力。
将2000 * 4096维特征与20个SVM组成的权值矩阵4096 * 20相乘,获得2000 * 20维矩阵表示每个建议框是某个目标类别的得分。分别对上述2000 * 20维矩阵中每一列即每一类进行非极大值抑制剔除重叠建议框,得到该列即该类中得分最高的一些建议框。
图源:https://www.bilibili.com/video/BV1af4y1m7iL/?spm_id_from=333.337.search-card.all.click&vd_source=c4cb0dcbf855e9746f1e28102cdb2630
**加粗样式**

注:非极大值抑制剔除重叠建议框

第一步:寻找得分最高的目标
第二步:计算其他目标与该目标的iou值
第三步:删除所有iou值大于给定阈值的目标,返回第一步
目的:通过IoU计算,如果是同一物体,则删除得分低的建议框保留得分高的建议框

注:为什么要专门使用SVM分类,而不是CNN最后的21层softmax层分类?

之前在训练CNN提取特征时,设置的IOU是0.5以上为正样本,小于0.5的是负样本。但在SVM分类中,只有bbox完全包围了物体(也可以理解为IOU>0.7时)才是正样本,IOU小于0.3的是负样本。前者是大样本训练,后者是小样本训练。对于CNN的训练,需要大量的数据,不然容易过拟合,所以设置的阈值较低,比如一个bounding box可能只包含物体的一部分,那么我也把它标注为正样本,用于训练cnn;然而svm训练的时候,因为svm适用于少样本训练,所以对于训练样本数据的IOU要求比较严格,我们只有当bounding box把整个物体都包含进去了(IOU>0.7),我们才把它标注为物体类别,IOU<0.3的标注为负样本,然后训练svm。就因为这个特点,只能用低IOU来softmax分类,那么很可能导致最后的bbox框位置不准确(如果bbox和GT差距太大,通过线性回归会无法收敛),同时类识别精度也不高,根据实验MAP会下降几个百分点。如果硬要提高IOU,又会导致训练数据样本太少,发生过拟合。这就是真正的"鱼和熊掌不可得兼"啊,其实罪魁祸首就是Small VOC的训练量太少了,限制了太多优化操作。故最后选择了SVM完成分类,CNN只用来提取特征。

⑤使用回归器精细修正候选框位置

对上述操作处理过后剩余的建议框进一步进行筛选。接着分别用20个回归器对上述20个类别中剩余的建议框进行回归操作,最终得到每个类别的修正后的得分最高的bounding box。
将(2000,4096)维矩阵输入进 (4096,4)的回归矩阵 d 中,最后输出(2000,4)偏移矩阵。代表RP中心点的位置偏移 和 bbox的尺寸变换。
将SVM筛选出的 m 个RP区域对应的特征向量,组成(m,4096)矩阵 代入 (4096,4)的回归矩阵 d 中,最后输出(m,4)偏移矩阵。

总结:R-CNN的框架以及存在的问题

图源:https://www.bilibili.com/video/BV1af4y1m7iL/?spm_id_from=333.337.search-card.all.click&vd_source=c4cb0dcbf855e9746f1e28102cdb2630
1.测试速度慢。一张图像内候选框之间存在大量重叠,提取特征操作冗余。
2.训练速度慢。
3.训练所需空间大。对于SVM和bbox回归训练,需要从每个图像中的每个目标候选框提取特征,并写入磁盘。对于非常深的网络,所提取的特征需要的存储空间过大。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值