目标检测之R-CNN系列

原文地址https://www.cnblogs.com/wangguchangqing/p/10384058.html
Object Detection,在给定的图像中,找到目标图像的位置,并标注出来。 或者是,图像中有那些目标,目标的位置在那。这个目标,是限定在数据集中包含的目标种类,比如数据集中有两种目标:狗,猫。 就在图像找出来猫,狗的位置,并标注出来 是狗还是猫。

这就涉及到两个问题:

  • 目标识别,识别出来目标是猫还是狗,Image Classification解决了图像的识别问题。
  • 定位,找出来猫狗的位置。

R-CNN

2012年AlexNet在ImageNet举办的ILSVRC中大放异彩,R-CNN作者受此启发,尝试将AlexNet在图像分类上的能力迁移到PASCAL VOC的目标检测上。这就要解决两个问题:

  • 如何利用卷积网络去目标定位
  • 如何在小规模的数据集上训练出较好的网络模型。

对于问题,R-CNN利用候选区域的方法(Region Proposal),这也是该网络被称为R-CNN的原因:Regions with CNN features。对于小规模数据集的问题,R-CNN使用了微调的方法,利用AlexNet在ImageNet上预训练好的模型。

R-CNN目标检测的思路:

  • 给定一张图片,从图片中选出2000个独立的候选区域(Region Proposal)

  • 将每个候选区域输入到预训练好的AlexNet中,提取一个固定长度(4096)的特征向量

  • 对每个目标(类别)训练一SVM分类器用来辨别目标物体和背景,对每个类别,都要训练一个二元SVM,识别该区域是否包含目标

  • 训练一个回归器,修正候选区域中目标的位置:对于每个类,训练一个线性回归模型判断当前框是不是很完美。
    在这里插入图片描述
    下面是具体详解释:

  • 输入图片
    在这里插入图片描述

  • 从上下文中选择性进行搜索得到感兴趣的区域
    在这里插入图片描述

  • 区域经过卷积CNN,并经过卷积网络
    在这里插入图片描述

  • CNN为每个区域提取特征,利用SVM将这些区域分成不同类别:
    在这里插入图片描述
    这就是RCNN检测目标物体的方法

训练

R-CNN进行目标检测的训练流程:

  1. 使用区域生成算法,生成2000个候选区域,这里使用的是Selective search.
  2. 对生成的2000个候选区域,使用预训练好的AlexNet网络进行特征提取。

将候选区域变换到网络需要的尺寸(227×227)。 在进行变换的时候,在每个区域的边缘添加p个像素,也就是手工的添加个边框,设置p=16。

改造预训练好的AlexNet网络,将其最后的全连接层去掉,并将类别设置为21(20个类别,另外一个类别代表背景)
在这里插入图片描述
这样一个候选区域输入到网络中,最终得到一个4096×21的特征。

  • 利用上面提取到的候选区域的特征,对每个类别训练一个SVM分类器(而分类)来判断,候选框里物体的类别,是给类别就是positive,不是就是negative。比如,下图针对狗的SVM分类器
    在这里插入图片描述
    狗的SVM分类器,就要能判断出某个候选区域是不是包含狗,包含狗了那就是Positive;不包含就是Negative.这里有个问题是,假如候选区域只是框出来了某个类的一部分,那要怎么来标注这个区域呢。在R-CNN中,设定一个IOU的阈值,如果该区域与Ground truth的IOU低于该阈值,就将给区域设置为Negative。阈值设置为0.3。
  • 对于面只是得到了每个候选框是不是包含某个目标,其得到的区域位置不是很准确。这里需要再训练一个线性回归模型判断,候选区域框出的目标是不是完美。对于某个类别的SVM是Positive的候选区域,来判断其框的目标区域是不是很完美。
  • 在这里插入图片描述

测试

从一张图片中提取2000个候选区域,将每个区域按照训练时候的方式进行处理,输入到SVM中进行正负样本的识别,并使用候选框回归器,计算出每个候选区域的分数。
候选区域较多,有2000个,所有很多重叠的部分,就需要剔除掉重叠的部分。
针对每个类,通过计算IOU,采取非最大值抑制的方法,以最高分的区域为基础,删掉重叠的区域。

问题

这里要说明一个问题,为什么不用AlexNet直接进行多分类,反而要使用SVM构造那么多二分类器?

这是因为训练AlexNet网络需要更多的样本,因此在训练AlexNet网络时,选择样本类别上控制的不够严格(为了精确分类,在分类一步最好严格一点,但是严格样本数量又不够训练AlexNet网络的);而SVM分类器更适用于小样本分类,因此选择训练样本时更加严格。是否严格可以从控制iou阈值上看出。

为什么RCNN用SVM做分类而不直接用CNN全连接之后softmax输出?
知乎地址:https://www.zhihu.com/question/54117650

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值