R-CNN论文解读/总结 详细笔记

此篇为目标检测经典论文 R-CNN系列论文:R-CNN (Rich feature hierarchies for accurate object detection and semantic segmentation)解读/总结详细笔记

R-CNN全称region with CNN features,是使用深度学习进行物体检测的鼻祖论文。其实它的名字就是一个很好的解释。用CNN提取出Region Proposals中的featues然后进行SVM分类与bbox的回归。

R-CNN论文(原文) : Rich Feature Hierarchies for Accurate Object Detection and Semantic Segmentation (thecvf.com)

R-CNN论文(翻译):R-CNN论文翻译(已校正)_耿鬼喝椰汁的博客-CSDN博客


目录

前言介绍:

先介绍下什么是目标检测:

目标检测发展历程:

摘要(论文的主要创新点)

mAP:

迁移学习

介绍

1.如何利用深度的神经网络去做目标的定位?解决:利用候选区域与 CNN 结合做目标定位

2.如何在一个小规模的数据集上训练能力强劲的网络模型?解决:利用预训练与微调

利用R-CNN进行目标检测

模块设计

测试阶段的目标检测

IoU

非极大值抑制:

测试时其实分两个结果:

1.分类

2.定位(回归)

训练

可视化、消融、模型的错误

可视化学习的特征 

消融研究

检测错误分析

 Bounding-box回归

Bounding Box(bbox):

分割

R-CNN缺


R-CNN(Region-CNN,区域卷积神经网络):利用深度学习进行目标检测的开山之作。

R-CNN系列论文(R-CNN,fast-RCNN,faster-RCNN)是使用深度学习进行物体检测的鼻祖论文,其中fast-RCNN 以及faster-RCNN都是沿袭R-CNN的思路。

本篇论文的题目是 《Rich feature hierarchies for accurate oject detection and semantic segmentation》,翻译过来是针对高准确度的目标检测与语义分割的多特征层级,通俗地来讲就是一个用来做目标检测和语义分割的神经网络。

本文作者:Ross Girshick,JeffDonahue,TrevorDarrell,Jitendra Malik。

论文核心观点:能否用深度学习替换传统的图片特征提取方法从而更好的实现目标检测的效果。

论文贡献:

  1. 在 Pascal VOC 2012 的数据集上,能够将目标检测的验证指标 mAP 提升到 53.3%,这相对于之前最好的结果提升了整整 30%.
  2. 这篇论文证明了可以讲神经网络应用在自底向上的候选区域,这样就可以进行目标分类和目标定位。
  3. 这篇论文也带来了一个观点,那就是当你缺乏大量的标注数据时,比较好的可行的手段是,进行神经网络的迁移学习,采用在其他大型数据集训练过后的神经网络,然后在小规模特定的数据集中进行 fine-tune 微调。

       在RCNN之前,overfeat已经是用深度学习的方法做目标检测,但RCNN是第一个可以真正可以工业级应用的解决方案。可以说改变了目标检测领域的主要研究思路,紧随其后的系列文章:Fast-RCNN ,Faster-RCNN都沿袭R-CNN的思路。 

前言介绍:

先介绍下什么是目标检测:

计算机视觉(Computer Vision,CV)是一门教计算机如何“看”世界的学科。计算机视觉包含多个分支,其中图像分类、目标检测、图像分割、目标跟踪等是计算机视觉领域最重要的研究课题。

在计算机视觉中,图像分类、目标检测和图像分割都属于最基础、也是目前发展最为迅速的3个领域,我们可以看一下这几个任务之间的区别。 

  • 图像分类:输入图像往往仅包含一个物体,目的是判断每张图像是什么物体,是图像级别的任务,相对简单,发展也最快。
  • 目标检测:输入图像中往往有很多物体,目的是判断出物体出现的位置与类别,是计算机视觉中非常核心的一个任务。
  • 图像分割:输入与物体检测类似,但是要判断出每一个像素属于哪一个类别,属于像素级的分类。图像分割与物体检测任务之间有很多联系,模型也可以相互借鉴。

在这里插入图片描述

本文讨论的目标检测是指通过编写特定的算法代码,让计算机从一张图像中找出若干特定目标的方法。目标检测包含两层含义:

  1. 判定图像上有哪些目标物体,解决目标物体存在性的问题;

  2. 判定图像中目标物体的具体位置,解决目标物体在哪里的问题。

目标检测和图像分类最大的区别在于目标检测需要做更细粒度的判定,不仅要判定是否包含目标物体,还要给出各个目标物体的具体位置。

目标检测发展历程:

在利用深度学习做物体检测之前,传统算法对于目标检测通常分为3个阶段:区域选取、特征提取和特征分类。

在这里插入图片描述

  • 区域选取:首先选取图像中可能出现物体的位置,由于物体位置、大小都不固定,因此传统算法通常使用滑动窗口(Sliding Windows)算法,但这种算法会存在大量的冗余框,并且计算复杂度高。

  • 特征提取:在得到物体位置后,通常使用人工精心设计的提取器进行特征提取,如SIFT和HOG等。由于提取器包含的参数较少,并且人工设计的鲁棒性较低,因此特征提取的质量并不高。
  • 特征分类:最后,对上一步得到的特征进行分类,通常使用如SVM、AdaBoost的分类器。

深度学习火了之后,神经网络的大量参数可以提取出鲁棒性和语义性更好的特征,并且分类器性能也更优越,从此便拉开了深度学习做目标检测的序幕。

在这里插入图片描述

 此文章为介绍的开篇之作RCNN。

摘要(论文的主要创新点)

       论文提出一个简单并且可扩展的检测算法,可以将mAP(mean Average Precision)在VOC2012最好结果的基础上提高30%以上——达到了53.3%。该方法的两个关键点为:

  1. 候选区域(region proposals)上自下而上使用大型卷积神经网络(CNNs),用以定位和分割物体。
  2. 当带标签的训练数据不足时,先针对辅助任务进行有监督预训练,再进行特定任务的微调,可以使性能明显提升(即我们常说的 迁移学习

我们在评价一个目标检测算法的“好坏”程度的时候,往往采用的是pascal voc 2012的评价标准mAP。

mAP:

mean of Average Precision的缩写,意思是平均精确度(average precision)的平均(mean),是object detection中模型性能的衡量标准.

迁移学习

迁移学习(Transfer learning): 顾名思义就是把已训练好的模型(预训练模型)参数迁移到新的模型来帮助新模型训练。考虑到大部分数据或任务都是存在相关性的,所以通过迁移学习我们可以将已经学到的模型参数(也可理解为模型学到的知识)通过某种方式来分享给新模型从而加快并优化模型的学习效率不用像大多数网络那样从零学习。

迁移学习又被定义为迁移学习和域适应指的是在一种环境中学到的知识被用在另一个领域中来提高它的泛化性能。

其中,实现迁移学习有以下三种手段:

1. Transfer Learning:冻结预训练模型的全部卷积层,只训练自己定制的全连接层。
2. Extract Feature Vector:先计算出预训练模型的卷积层对所有训练和测试数据的特征向量,然后抛开预训练模型,只训练自己定制的简配版全连接网络。
3.Fine-tuning:冻结预训练模型的部分卷积层(通常是靠近输入的多数卷积层,因为这些层保留了大量底层信息)甚至不冻结任何网络层,训练剩下的卷积层(通常是靠近输出的部分卷积层)和全连接层。

迁移学习在某些深度学习问题中是非常受欢迎的,例如在具有大量训练深度模型所需的资源或者具有大量的用来预训练模型的数据集的情况。仅在第一个任务中的深度模型特征是泛化特征的时候,迁移学习才会起作用。

理想情况下,在一个成功的迁移学习应用中,将会获得以下益处:

  1. 更高的起点:在微调之前,源模型的初始性能要比不使用迁移学习来的高。
  2. 更高的斜率:在训练的过程中源模型提升的速率要比不使用迁移学习来得快。
  3. 更高的渐进:训练得到的模型的收敛性能要比不使用迁移学习更好。 

因为将候选区域与CNNs结合,所以该方法称为R-CNN:Regions with CNN festures。

介绍

        受 AlexNet 启发,论文作者尝试将 AlexNet 在 ImageNet 目标识别的能力泛化到 PASCAL VOC 目标检测上面来。CNN可以在 PASCAL VOC 有更好的目标检测表现。实现这个结果需要解决两个问题:

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

论文作者给出了以下思路:

1.如何利用深度的神经网络去做目标的定位?解决:利用候选区域与 CNN 结合做目标定位

借鉴了滑动窗口思想,R-CNN 采用对区域进行识别的方案。

具体是:

  1. 给定一张输入图片。
  2. 从图片中提取 2000 个类别独立的候选区域。
  3. 对于每个区域利用 CNN 抽取一个固定长度的特征向量。
  4. 再对每个区域利用 SVM 进行目标分类。
  5. 将特征输入训练好的线形回归器中,得到更为精确的位置定位。

R-CNN论文解读/总结 详细笔记_第1张图片

2.何在一个小规模的数据集上训练能力强劲的网络模型?解决:利用预训练与微调

       在辅助数据集(ILSVRC)上进行有监督的预训练,再在小数据集(PASCAL)上针对特定问题进行调优。(这里即是我们常说的 迁移学习)。这是在训练数据稀少的情况下一个非常有效的训练大型卷积神经网络的方法。

利用R-CNN进行目标检测

目标检测系统由三个模块构成:

  • 1.第一个模块是生成与类别无关的候选框(region proposal),这些推荐定义了一个候选检测区域的集合。
  • 2.第二个模块是一个大型卷积神经网络,用于从每个区域抽取特定大小的特征向量。
  • 3.第三个模块是每个类别分别训练一个线性支持向量机(指定类别的线性SVM。

模块设计

1.区域推荐(region proposal):采用了选择性搜索(selective search)以方便和前面的工作进行可控的比较。

2.特征提取(Feature extraction):对每个候选区域抽取一个4096维度的特征向量(AlexNet作为特征提取的骨干网络),输入一个减去均值的大小为227X227 RGB的图片,通过五个卷积层和两个全连接层进行前向传播,最终得到一个4096维的特征向量。

对于候选框的预处理 :无论候选区域的尺寸和宽高比是什么,都把候选区域统一变换到 227×227 的尺寸。变形之前,先在候选框周围加上p=16padding(填充),再进行各向异性缩放,这种处理使得mAp提高了3到5个百分点。

测试阶段的目标检测

在测试图像上使用择性搜索(selective search) 抽取2000个候选区域,将候选区域变形后通过CNN前向传播计算出特征,然后使用对每个类别训练出的SVM给整个特征向量中的每个类别单独打分。

候选区域有 2000 个,所以很多会进行重叠。

针对每个类,通过计算 IoU 指标,采取非极大性抑制,以最高分的区域为基础,剔除掉那些重叠位置的区域。

 以下为一个非极大抑制的小例子:

R-CNN论文解读/总结 详细笔记_第2张图片

      RCNN算法会从一张图片中找出n多个可能是物体的矩形框,然后为每个矩形框为进行类别分类。就像上面的图片一样,定位两个人、马、狗和车,首先算法找出了一堆黄色的矩形框,然后将所有的黄色方框分类后生成不同颜色的对应各种类型方框,最后我们需要判别相同颜色的矩形框中哪些矩形框是没用的。

IoU

目标检测任务中,常用到一个指标IoU,即交并比,IoU可以很好的描述一个目标检测模型的好坏。在训练阶段IoU可以作为anchor-based方法中,划分正负样本的依据;同时也可用作损失函数;在推理阶段,NMS中会用到IoU。同时IoU有着比较严重的缺陷。

 IoU的计算是用预测框(A)和真实框(B)的交集除以二者的并集,其公式为:

gif.latex?%5Cdpi%7B150%7D%20IoU%3D%5Cfrac%7BA%5Ccap%20B%7D%7BA%5Ccup%20B%7D

  IoU的值越高也说明A框与B框重合程度越高,代表模型预测越准确。反之,IoU越低模型性能越差。

IoU优点:

        (1)IoU具有尺度不变性

        (2)结果非负,且范围是(0, 1)

IoU缺点:

        (1)如果两个目标没有重叠,IoU将会为0,并且不会反应两个目标之间的距离,在这种无重叠目标的情况下,如果IoU用作于损失函数,梯度为0,无法优化。

        (2)IoU无法精确的反映两者的重合度大小。如下图所示,三种情况IoU都相等,但看得出来他们的重合度是不一样的,左边的图回归的效果最好,右边的最差。
 

非极大值抑制:

非极大值抑制,简称为NMS算法(Non-Maximum Suppression)。其思想是搜素局部极大值,抑制非极大值元素。

以目标检测为例:目标检测的过程中在同一目标的位置上会产生大量的候选框,这些候选框相互之间可能会有重叠,此时我们需要利用非极大值抑制找到最佳的目标边界框,消除冗余的边界框。Demo如下图:

R-CNN论文解读/总结 详细笔记_第3张图片

左图是人脸检测的候选框结果,每个边界框有一个置信度得分(confidence score),如果不使用非极大值抑制,就会有多个候选框出现。右图是使用非极大值抑制之后的结果,符合我们人脸检测的预期结果。

如何使用非极大值抑制?

前提:目标边界框列表及其对应的置信度得分列表,设定阈值,阈值用来删除重叠较大的边界框。
IoU:intersection-over-union,即两个边界框的交集部分除以它们的并集。

非极大值抑制的流程如下:

  • 根据置信度得分进行排序
  • 选择置信度最高的比边界框添加到最终输出列表中,将其从边界框列表中删除
  • 计算所有边界框的面积
  • 计算置信度最高的边界框与其它候选框的IoU。
  • 删除IoU大于阈值的边界框
  • 重复上述过程,直至边界框列表为空。

非极大值抑制:先假设有6个同类矩形框,根据分类器类别分类概率做排序,矩形框从小到大对应的概率分别为A、B、C、D、E、F。

(1)从最大概率矩形框F开始,分别判断A-E中与F的重叠度IOU是否大于某个设定的阈值;
(2)假设B、D与F的重叠度超过阈值,那么就扔掉B、D;并标记第一个矩形框F,是我们保留下来的。
(3)从剩下的矩形框A、C、E中,选择概率最大的E,然后判断E与A、C的重叠度,重叠度大于一定的阈值,那么就扔掉;并标记E是我们保留下来的第二个矩形框。
      就这样一直重复,找到所有被保留下来的矩形框。

测试时其实分两个结果:

1.分类

       在测试的时候,先对带检测图像提取出约2000个候选区域,将每个区域都进行缩放,然后将缩放后的图片输入CNN进行特征提取,对CNN输出的特征用SVM进行打分(每类都有一个SVM,21类(20个分类+背景1个=21个)就有21个SVM分类器),对打好分的区域使用NMS即非极大值抑制(每类都单独使用)。

       到这里分类就完成了,但是得到的位置只是候选区在图像中的位置,而候选区的位置并不一定就是ground truth,即检测目标的真实位置

2.定位(回归)

      将CNN对候选区域提取出的特征输入训练好的线形回归器中,得到更为精确的位置定位,具体情况会在下面训练方法中详细介绍。但要明确的是,这些回归器是按照类来训练的,即每类分类完后进行回归。

训练

1. 监督式预训练(迁移学习):前面已经提到过 R-CNN 采取迁移学习。

       预训练采用了Caffe的CNN库。训练的时候,文章用了个trick,他先用ILSVRC2012数据库训练Alexnet,训练的时候目标时图片分类,因为ILSVRC2012数据库没有分类的标定数据。这步称为预训练
2. 特定领域的参数调优:提取在 ILSVRC 2012 的模型和权重,然后在 VOC 上进行调优(fine-tune)。当数据量不够的时候,常用的一种训练方式,即先用别的数据库训练网络,然后再用自己的数据库微调训练。

需要注意的是,这里在 ImageNet 上训练的是模型识别物体类型的能力,而不是预测 bbox 位置的能力。

ImageNet 的训练当中需要预测 1000 个类别,而 R-CNN 在 VOC 上进行迁移学习时,神经网络只需要识别 21 个类别。这是 VOC 规定的 20 个类别加上背景这个类别。

R-CNN 将候选区域与 GroundTrue 中的 box 标签相比较,如果 IoU > 0.5,说明两个对象重叠的位置比较多,于是就可以认为这个候选区域是 Positive,否则就是 Negetive.
3. 目标种类分类器(SVM)

1.在fine-tunning和SVM训练这两个阶段,作者定义得正负样例是不同的

    因为在训练SVM时,正样本为groundtruth,负样本定义为与ground truth的IoU小于0.3的候选区域为负样本,介于0.3与0.7之间的样本忽略。
      fine-tuning是担心过拟合的原因,要扩大正样本的样本量,所以定义比较宽松,但是SVM是最终用于分类的分类器,而且SVM原理就是最小的距离最大化,越难分的数据越有利于SVM的训练,所以对样本的定义比较严格。

2.为什么单独训练了一个SVM而不是直接用softmax呢

       因为在训练softmax的时候数据本来就不是很准确,而SVM的训练使用的是hard negative也就是样本比较严格,所以SVM效果会更好。

可视化、消融、模型的错误

可视化学习的特征 

      卷积层的第一层可以直接可视化,并且易于理解。它们捕捉定向边缘和颜色特征。对于后面的层,作者使用了一种简单的非参数化方法,直接展示网络学到的东西。

        思路是挑选一个特征出来,把它直接当成一个物体分类器,先计算所有抽取出来的候选区域(大约1000万),计算每个区域所导致的对应单元的激活值,然后按激活值对这些区域进行排序,然后进行非极大值抑制,最后展示分值最高的若干个区域。作者避免平均化是为了看到不同的视觉模式和深入观察单元计算结果的的不变性。

消融研究

       没有调优的CNN模型即在ILSVRC2012上训练后(迁移学习)的状态,对于网络的全连接层,若仅仅使用pool5的特征,相当于只使用CNN模型参数的6%也能有非常好的结果。

       可见CNN模型的主要表达力来自于卷积层,而不是全连接层。

       优后的CNN模型在VOC2007上的结果表现出调优后的提升非常明显,mAP提升了8个百分点,全连接层FC6和FC7的提升明显优于pool5,这说明pool5ImageNet学习的特征泛化性很强,在它之上层的大部分提升主要是在学习领域相关的非线性分类器。

      R-CNN 还与其他的特征方法进行了能力比较,作者选取了两种基于 DPM 的方法,DPM ST 和 DPM HSC,结果都证明,R-CNN 要好于它们。

检测错误分析

R-CNN 作者采用了 Hoiem 提出的目标检测分析工具,能够直观地揭露错误的模型,作者通过这个工具针对性地进行 fine-tune。

 Bounding-box回归

bbox 的值其实就是物体方框的位置,预测它就是回归问题,而不是分类问题。

受 DPM 的启发,作者训练了一个线性的回归模型,这个模型能够针对候选区域的 pool5 数据预测一个新的 box 位置。具体细节,作者放在补充材料当中。

Bounding Box(bbox):

bbox是包含物体的最小矩形,该矩形既不太大以至于留出太多非物体空间,也不太小以至于没包住物体。

物体检测中关于物体位置的信息输出是一组(x,y,w,h)数据,其中x,y代表着bbox的左上角(或者其他固定点,可自定义),对应的w,h表示bbox的宽和高.一组(x,y,w,h)可以唯一的确定一个定位框。

分割

用了O2P的框架,分三步(由于本人暂时不做分割,所以这部分暂且略过)

总结

      论文提出了一种简单并且可扩展的物体检测方法,达到了VOC 2012数据集相对之前最好性能的30%的提升。 

回顾:

  • R-CNN 采用 AlexNet网络结构。
  • R-CNN 采用 Selective Search 技术生成 Region Proposal。
  • R-CNN 在 ImageNet 上先进行预训练,然后利用成熟的权重参数在 PASCAL VOC 数据集上进行 fine-tune。
  • R-CNN 用 CNN 抽取特征,然后用一系列的的 SVM 做类别预测。
  • R-CNN 的 bbox 位置回归基于 DPM 的灵感,自己训练了一个线性回归模型。
  • R-CNN 的语义分割采用 CPMC 生成 Region。

R-CNN缺点

显然R-CNN存在以下几个缺点:

  • 1. 很明显,最大的缺点是对一张图片的处理速度慢,这是由于一张图片中由选择性搜索算法得出的约2000个推荐区域都需要经过变形处理后再由AlexNet提取深度特征,这约2000个推荐区域可能出现大量重复区域,产生了大量重复计算。
  • 2. R-CNN的训练过程不是连续的,分成了两个部分。一个是AlexNet模型参数的微调,另一个是SVM的训练和边界框回归的训练。这样就导致无法共享权重,训练过程不连续。同时训练过程的不连续必然导致特征存储和磁盘空间浪费的情况。
  • 3.每次都需要计算不同图片中不同建议框CNN特征,无法共享同一张图的CNN特征,训练速度很慢。
  • 4.整个测试过程很复杂,要先提取推荐区域,之后提取每个推荐区域CNN特征,再用SVM分类,做非极大值抑制,最后做边界框回归才能得到图片中物体的分类以及定位信息。

    这篇课程的学习和总结到这里就结束啦,如果有什么问题可以在评论区留言呀~

    如果帮助到大家,可以一键三连+关注支持下~


参考文章:

【深度学习】R-CNN 论文解读及个人理解_rcnn_frank909的博客-CSDN博客

目标检测(Object Detection)_Alex_996的博客-CSDN博客

(8条消息) 非极大值抑制(Non-Maximum Suppression)_Techblog of HaoWANG的博客-CSDN博客非极大值抑制(Non-Maximum Suppression)_Techblog of HaoWANG的博客-CSDN博客(8条消息) 非极大值抑制(Non-Maximum Suppression)_Techblog of HaoWANG的博客-CSDN博客

R-CNN 经典论文【论文笔记】_r-cnn论文_一颗苹果OAOA的博客-CSDN博客

你可能感兴趣的:(深度学习经典论文,#,目标检测经典论文,深度学习,人工智能,计算机视觉)