R-CNN 是第一个成功将深度学习应用到目标检测上的算法,也是后续Fast R-CNN , Faster R-CNN等系列算法的鼻祖

一、R-CNN整体架构

R-CNN的全貌如下图所示

它主要分为4个模块

  1. 候选区域(region proposal)提取
  2. 一个大型的CNN网络用来特征提取
  3. 使用SVM分类模型进行类别分类
  4. 使用回归(Regression)模型进行具体定位

具体RCNN的训练流程如下:

  1. 先使用ImageNet数据集训练一个CNN网络(论文中使用的是AlexNet)
  2. 使用选择性搜索(selective search)算法提取出2000个候选框
  3. 将提取出来的候选框统一resize到 CNN网络所需要的尺寸
  4. 使用自己的数据集对CNN网络进行fine-tuning(微调)
  5. 利用fine-tuning后的CNN网络对候选框进行特征提取
  6. 训练多个二元SVM分类模型
  7. Bounding-box回归来减少候选区域误差

二、具体模块设计

1.在ImageNet数据集上训练一个CNN网络

论文中提到,因为实际标签数据太少,远远不够去训练一个大型的CNN网络模型,所以需要先借助ImageNet数据集进行训练CNN网络,也就是预训练过程,然后再在自己的数据集上针对特定任务进行微调,也就是调优。这是在训练数据稀少的情况下一个非常有效的训练大型卷积神经网络的方法

2. 候选区域提取

R-CNN算法使用的 选择性搜索(selective search)算法提取出了2000个候选框,Selective search综合考虑图像的颜色、纹理、尺寸相似性和空间重合度来划分区域,并将小区域按照相似性合并为大区域。

具体选择SS算法的大概思路如下:

    1. 使用图像分割算法创建候选区域

    2. 使用贪心算法来进行候选区域合并:

        计算所有候选区域的相似度

        将最相似的两个候选区域合并为一个区域

    3. 重复迭代2过程,直到满足条件

3.候选框的缩放

因为CNN网络输入的图像尺寸是固定(论文中为224*224),所以需要将不同大小的候选框resize到CNN网络所需要的尺寸,

候选区域大小调整选择最简单的各向异性缩放,同时论文中在缩放之前,还对原候选区域增加了一个边缘(padding),大小为16个像素,用原始图像中的点进行填充,这样使候选区域边缘有一定的缓冲

4. fine-tuning CNN网络

通过ImageNet数据集训练来的CNN网络是用来进行1000种类别分类,需要替换掉最后的分类层,改为一个随机初始化的K+1类分类层,K即为自己数据集上针对特定任务的目标分类数,后面+1是因为还需要加上背景类别。 论文中作者是在VOC数据集上进行目标检测的,所以为20+1,即21个类别的分类任务。

CNN网络中的卷积层则保持不变。关于进行fine-tuning时的正负样本,如果候选框与真实标注框的IOU>=0.5,就认为此候选框为正样例,否则为负样例,另外,由于对于一张图片的多有候选区域来说,负样本是远远大于正样本数,所以需要将正样本进行上采样来保证样本分布均衡

在进行fine-tuning 时,需要选用比较小的学习率,以保证不会破坏初始化的成果,论文中所采用的learn_rate为0.001。每轮迭代,统一使用32个正例窗口(跨所有类别)和96个负例窗口(背景),即每个mini-batch的大小是128

5.候选框特征提取

R-CNN算法是用CNN网络来进行特征提取,然后用提取出来的特征进行后续的SVM分类。

所有需要将fine-tuning 后的CNN网络去掉最后的softmax层,然后用来对候选框进行特征提取

6. 训练多个二元SVM分类模型

R-CNN算法,对于每个类别单独训练一个二元SVM分类。这块有个问题,为什么不用上面CNN网络的softmax直接进行分类,而要把CNN网络提取出来的特征,重新用SVM进行分类?作者给出的答案是经过测试发现,重新使用SVM单独进行分类效果更好。另外,在训练每个SVM分类模型时,正负样本的构建和上面fine-tuning CNN网络 时有所不同。在训练对应某个类别的SVM分类模型时,ground-truth(即对应类别的真实标注框)为正样本,负样本为与ground-truth(真实标注框)的IOU小于0.3的候选框,也就是说IOU<0.3被作为负例,ground-truth是正例,其余的全部丢弃

7.Bounding-box回归

为了减少Selective search 候选框的误差,最后需要进行 Bounding-box Regression(BBR)来对候选框进行精修

这块需要注意,只有IOU值大于0.6的候选框,才会进行Bounding-box Regression

首先,来具体看下,Bounding-box Regression是什么,如下绿色框P为输入进来的候选框,红色框G为ground-truth,也就是真实标注框。我们的目标就是通过线性回归,训练一种关系,使得输入原始的窗口 P 经过映射得到一个回归窗口G'(蓝色框),需要尽可能的让回归窗口G'(蓝色框)跟真实窗口 G 更接近。

Bounding-box Regression的目的就是:给定(Px,Py,Pw,Ph),寻找一种映射f, 使得 f(Px,Py,Pw,Ph)=(Gx',Gy',Gw',Gh')  并且(Gx',Gy',Gw',Gh')≈(Gx,Gy,Gw,Gh)

所以我们需要经过平移和尺度缩放,将窗口P变为窗口G'。

首先看下平移变化,假设为 为对应平移转换,所以有:

,由于候选框的大小各不相同,所以这块需要使用相对位移来进行统一,所以

接下来看下尺度缩放:

,这块统一进行对数变换,是为了确保缩放比例大于0

所以:

所以,Bounding-box Regression 最终是为了获得这四个变化。

Bounding-box Regression 的输入是一组N个训练对, 输出为

我们设从实际的转换为,所以有

所以最终的损失函数为:

训练结束后,可以获得最终的,进而获得

到此,R-CNN的训练就结束了

三、R-CNN不足之处

R-CNN作为目标检测算法中的一个里程碑之作,本身也就有许多缺点

首先,最大的一个缺点就是不管是预测还是训练,速度都很慢,

因为

1.候选框选择算法严重耗时

2.每张图片2000个候选框中会有很多重复的部分,从而导致后面在使用CNN时有很多重复计算

另外,RCNN是分步骤进行,过程比较繁琐

3.在进行候选区域的特征提取时,为了适应CNN网络的输入,需要对候选区域进行扭曲,缩放等操作,这会导致一些图片特征信息的丢失和变形,从而降低了检测的准确性

所有后面在此基础上,衍生出来其他一些目标检测算法,来对相关问题进行改进优化,具体我们后面再介绍

欢迎关注我的个人公众号 AI计算机视觉工坊,本公众号不定期推送机器学习,深度学习,计算机视觉等相关文章,欢迎大家和我一起学习,交流。

【目标检测算法系列】一、R-CNN算法相关推荐

  1. 目标检测方法系列:R-CNN, SPP, Fast R-CNN, Faster R-CNN, YOLO, SSD

    本文转载自: http://www.cnblogs.com/lillylin/p/6207119.html 目标检测方法系列--R-CNN, SPP, Fast R-CNN, Faster R-CNN ...

  2. 目标检测YOLO系列------YOLO简介

    目标检测YOLO系列------YOLO简介 1.为什么会出现YOLO算法 2.YOLO算法会逐渐成为目标检测的主流吗     YOLO以及各种变体已经广泛应用于目标检测算法所涉及到的方方面面,为了梳 ...

  3. anchor free 目标检测_《目标检测》系列之二:目标检测中的Anchor机制回顾

    前段时间,YOLOv4&v5大火,很多人忽视了yolov5在anchor上的一些细节变化,因此,本文从Faster RCNN着手,逐步分析SSD.YOLOv4&v5的anchor机制. ...

  4. 算法系列——贝尔曼福特算法(Bellman-Ford)

    本系列旨在用简单的人话讲解算法,尽可能避免晦涩的定义,读者可以短时间内理解算法原理及应用细节.我在努力! 本篇文章编程语言为Python,供参考. 贝尔曼福特算法(Bellman-Ford) 典型最短 ...

  5. 【目标检测实验系列】使用yolov3 spp训练西工大遥感数据集NWPU VHR-10(包括如何将NWPU VHR-10转为VOC格式和yolov3 spp实验调试的详细步骤,且附上训练完的权重文件)

    目录 1. 文章主要内容 2. 西工大数据集转换为VOC格式数据集 2.1 VOC数据集结构 2.2 西工大数据集 2.3 转换格式 2.3.1 构建与VOC类似的数据集文件结构(文件夹名可以自定义) ...

  6. 算法系列(二):贪心算法--Huffman编码

    算法系列(二):贪心算法--Huffman编码 一.分析 问题描述: 哈夫曼编码是广泛地用于数据文件压缩的十分有效的编码方法.其压缩率通常在20%-90%之间.哈夫曼编码算法使用字符在文件中出现的频率 ...

  7. 目标检测的评价指标P,R,mAP

    目标检测的评价指标P,R,mAP 1 基本概念 1.1 IOU(Intersection over Union) 1.2 TP TN FP FN 2. 各种率 2.1 根据IOU计算Precision ...

  8. 目标检测YOLO系列算法的进化史

    本文中将简单总结YOLO的发展历史,YOLO是计算机视觉领域中著名的模型之一,与其他的分类方法,例如R-CNN不同,R-CNN将检测结果分为两部分求解:物体类别(分类问题),物体位置即bounding ...

  9. 目标检测 YOLO系列算法

    文章目录 1. YOLO算法 1.1 Yolo算法思想 1.2 Yolo的网络结构 1.2.1 网络输入 1.2.2 网络输出 1.7X7网格 2x30维向量 1.3 Yolo模型的训练 1.3.1训 ...

  10. 目标检测——YOLO系列算法(YOLOv4、YOLOv5)的学习笔记

    目录 1 前言 2 致谢 3 YOLO模型列表 4 模型结构 2.1 Backbone Focus--网格下采样 CSPDarknet53 2.3 Neck -- SPP & PAN SPP: ...

最新文章

  1. java中BigDecimal的常见用法
  2. pandas describe函数_SQL和Pandas同时掉到河里,你先救谁?
  3. “约见”面试官系列之常见面试题之第八十三篇之node.js理解(建议收藏)
  4. 啊哈算法系列(C语言、python、Java )
  5. 高能!8段代码演示Numpy数据运算的神操作
  6. php投影,box-shadow实现不同角度的投影
  7. 【nginx】nginx 简介 基本概念 介绍
  8. Javascript基础--对象
  9. 将bean转换成键值列表
  10. ai 数据模型 下载_为什么需要将AI模型像数据一样对待
  11. VS编译的程序设置----需要以管理员身份打开
  12. 微服务架构 | 配置中心 - [Config]
  13. c语言合并jpg成pdf,如何将JPG图片转换成PDF文件
  14. 产品经理OR售前支持
  15. DINO:自监督ViT的新特性
  16. 干货:esp32彩屏自制太空人主题透明手表!
  17. 仓库软件可以管理仓库,这么简单!
  18. Visual C# 的DirectX开发系列一初识DirectX
  19. Java入门编程练习题
  20. freebsd 网桥设置

热门文章

  1. ActiveX控件概述
  2. vs2012 express 密钥
  3. java初中级面试题(SSM+Mysql+微服务(SpringCloud+Dubbo)+消息队列(RocketMQ)+缓存(Redis+MongoDB)+设计模式+搜索引擎(ES)+JVM
  4. 尽量干净地卸载360
  5. 怎么删除360base64.dll,这个方法百分百管用
  6. 有html5了可以卸载flash,adobe flash player可以卸载吗?
  7. 国产操作系统怎么下载安装使用Photoshop这样的软件?
  8. Windows中的用户和组以及用户密码破解
  9. 基于php的购物网站源代码,基于PHP的网上商城购物网站设计(含源文件).doc
  10. SAP ABAP 从入门至精通书籍推荐