R-CNN

R-CNN

R-CNN 是基于卷积神经网络(CNN),线性回归和支持向量机(SVM)等算法实现目标检测技术的算法。

什么是目标检测

对象识别,给定一张图片可以识别出类别,而目标检测除了识别类别之外,还要找到对象的位置。
在这里插入图片描述

R-CNN 的提出

R-CNN 论文的作者受到 AlexNet 的启发,尝试将 AlexNet 在 ImageNet 目标识别的能力泛化到目标检测上面来,但需要解决两个主要的问题

  1. 如何利用深度的神经网络做目标的定位。
  2. 如何在一个小规模的数据集上训练能力强大的神经网络。

利用候选区域与 CNN 结合做目标定位

R-CNN 采用对区域进行识别的具体方案为:

  1. 给定一张图片,从图片中提取 2000 个类别独立的候选区域
  2. 对于每个区域利用 CNN 抽取一个固定长度的特征向量
  3. 再对每个区域利用 SVM 进行目标分类
    在这里插入图片描述

利用预训练的模型和微调解决数据集缺乏的问题

使用迁移学习的方式,采用 ImageNet 上已经训练好的模型,然后在用于目标识别的数据集上进行微调(fine_tune)。
由于 ImageNet 的图像包含几百万张,利用 CNN 能充分学到浅层的特征,然后在小规模的数据集上做规模化训练,从而可以达到好的效果。

R-CNN 的模块划分

在这里插入图片描述

一、生成候选区域

能够生成候选区域的方式很多,如:

  • objectness
  • selective search
  • category-independen object proposals
  • constrained parametric min-cuts(CPMC)
  • multi-scale combinatorial grouping
  • Ciresan

R-CNN 采用的是 Selective Search 选择性搜索算法,通过 Selective Search 可以产生一定数量的候选区域。

二、区域预处理

R-CNN 抽取了一个 4096 维的特征向量,使用的是 AlexNet,但 AlexNet 的输入图像大小是 227 * 227,而候选区域是大小不一的,为了与 AlexNet 兼容,R-CNN 无视候选区域的大小和形状,统一变换到 227*227 的尺寸。

这里有一个区域预处理的细节,就是在对候选区域进行变换的时候,首先对这些区域进行膨胀处理,在其周围附加 p 个像素,也就是人为的添加边框,这里 p=16。

三、使用 AlexNet 特征提取

R-CNN 在每张图片上抽取近 2000 个候选区域,将所有区域通过 AlexNet 前向传播计算出特征,得到 4096 维的特征向量。

在使用 AlexNet 进行 fine-tune 时,正样本和负样本的划分方式为根据候选区域和 Ground-truth 的重合度 IoU 来划分, I o U = ( A ∩ B ) / ( A ∪ B ) IoU=(A\cap B)/(A\cup B) IoU=(AB)/(AB)

  • 正样本 (N 类):跟 Ground-truth 重合 IoU >= 0.5
  • 负样本 (1 类):IoU < 0.5

另外,网络最后的 Softmax 层改成 (N + 1) 维,R-CNN 使用在1000个类别的数据集中预训练得到的模型和权重,然后在 VOC 20个类别的数据集中进行 fine-tune,此时神经网络只需识别 21 个类别
在这里插入图片描述

四、线性 SVMs 分类器

使用 SVM 的目的是将卷积网络得到的特征输入 SVM 进行分类,看看这个特征向量对应的候选区域是需要的物体还是无关的实物。

在 AlexNet 的 Fc7 特征上训练线性 SVMs 分类器 (这里是一对多的 SVM)

  • 每个类别(N 类)对应一个 SVM 分类器
  • 正样本:所有 Ground-truth 区域
  • 负样本:跟 Ground-truth 重合 IoU < 0.3 的候选区域
    如下图训练一个 Cat SVM 分类器
    在这里插入图片描述
  • SVM 训练完成后,如果完全分类正确,所有样本的输出概率都大于 0.5,而所有负样本的输出概率都小于 0.5
  • 但常见的情况是有一部分的负样本的输出概率也大于 0.5 的,这些样本就称为"False Positives"假正例
  • 如果将这些假正例收集起来,对 SVM 进行二次训练,经过二次训练的 SVM 的分类准确度一般都会有一定的提升。
    在这里插入图片描述
五、Bounding box 回归

Bounding Box 回归

R-CNN 测试

R-CNN 测试分为如下几个阶段:
1.使用 Selective Search 提取 2000 个候选区域
2.将所有区域膨胀+缩放到 227 x 227
3.使用微调后的 AlexNet 计算两套特征

  • 对于 Fc7 特征 -> SVM 分类器 -> 类别分支
    • 使用非极大值抑制 (IoU>=0.5) 获取无冗余的区域子集
      • 所有区域按 SVM 的分值从大到小排序
      • 剔除冗余:即剔除与最大分值区域重合度 IoU>=0.5 的所有区域,来减少重复
      • 保留该最大分值区域,剩余区域作为新候选集
  • 对于 Conv5 特征 -> Bounding box 回归模型 -> Bbox 误差
    • 使用Bbox偏差修正区域子集

R-CNN 性能评价

  • 计算准确率 precision:P = TP/(TP+FP)
  • 计算召回率 recall:R = TP/(TP+FN)

计算目标类别第 C 类的平均精度(AP):PR 曲线之下的面积,即 Precision 对于 Recall 的积分
计算 mAP:即所有类别的平均精度求和除以所有类别,即数据集中所有类的平均精度的平均值。

R-CNN 在 PASCAL VOC 2010 和 ILSVRC 数据集上的性能大幅提升,但也存在问题:

  • 训练时间长(84 小时)
    • Fine-tune(18) + 特征提取 (63) + SVM/Bbox训练 (3),用于 SVM、b-box 回归的特征需要存储到磁盘中,这将需要占用大量的磁盘空间,而且提取这些特征也会耗费很多时间。
  • 测试阶段很慢:VGG16 一张图片 47s
  • 复杂的多阶段训练,卷积特征重复计算量大。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
R-CNN(Region-based Convolutional Neural Networks)是一种目标检测算法,它通过两个阶段来检测图像中的目标物体。首先,R-CNN使用选择性搜索(Selective Search)算法生成一系列候选区域,然后对每个候选区域进行卷积神经网络(CNN)特征提取和分类。R-CNN的主要缺点是速度较慢,因为每个候选区域都需要独立地进行CNN特征提取和分类。 Fast R-CNN是对R-CNN的改进,它通过引入RoI池化层(Region of Interest pooling)来解决R-CNN中重复计算的问题。RoI池化层可以将不同大小的候选区域映射为固定大小的特征图,从而使得所有候选区域可以共享相同的特征提取过程。这样一来,Fast R-CNN相比于R-CNN具有更快的速度。 Faster R-CNN是对Fast R-CNN的进一步改进,它引入了一个称为Region Proposal Network(RPN)的子网络来生成候选区域。RPN通过滑动窗口在特征图上提取候选区域,并为每个候选区域分配一个得分,然后根据得分进行筛选和排序。这种端到端的训练方式使得Faster R-CNN目标检测任务上具有更高的准确性和更快的速度。 Mask R-CNN是在Faster R-CNN的基础上进一步发展的,它不仅可以进行目标检测,还可以进行实例分割。Mask R-CNN在Faster R-CNN的基础上增加了一个分支网络,用于预测每个候选区域中目标物体的像素级掩码。这使得Mask R-CNN能够同时获得目标的位置信息和像素级别的语义信息。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值