基于深度学习的目标检测算法详解(一):R-CNN与Fast R-CNN

本教程由深度学习中文社区(Studydl.com)持续发布与更新, 本系列其余教程地址见文章末尾.

前言

自从2012年的ILSVRC竞赛中基于CNN的方法一鸣惊人之后,CNN已成为图像分类、检测和分割的神器。其中在图像检测的任务中,R-CNN系列是一套经典的方法,从最初的R-CNN到后来的Fast R-CNN, Faster R-CNN 和今年的Mask R-CNN, 我们可以看到CNN在图像检测中是如何一点一点提高的。下面我们将一道回顾R-CNN家族的发展史,了解这些方法的演变和这个演变过程中的那些富有创意的想法。

R-CNN 系列的四篇文章如下:

  1. R-CNN: https://arxiv.org/abs/1311.2524
  2. Fast R-CNN: https://arxiv.org/abs/1504.08083
  3. Faster R-CNN: https://arxiv.org/abs/1506.01497
  4. Mask R-CNN: https://arxiv.org/abs/1703.06870

图像的检测任务是从一个复杂场景的图像中找到不同的物体,并且给出各个物体的边界框。图像检测的三个著名的数据集是PASCAL VOC,ImageNet和微软COCO. PASCAL VOC包含20个物体的类别,而ImageNet包含一千多种物体类别,COCO有80中物体类别和150万个物体实例。

基于深度学习的目标检测算法详解(一):R-CNN与Fast R-CNN

PASCAL VOC目标检测

基于深度学习的目标检测算法详解(一):R-CNN与Fast R-CNN

COCO目标检测和实例分割

1. R-CNN

R-CNN的思路是很直观的三步曲:

1,得到若干候选区域;

2, 对每个候选区域分别用CNN分类;

3,对每个候选区域分别进行边框预测。

在R-CNN出现之前,目标检测的流行思路是先从图像中得到一些候选区域,再从候选区域中提取一些特征,然后利用一个分类器对这些特征进行分类。分类的结果和候选区域的边界框就可以作为目标检测的输出。一种得到候选区域的方法是Selective Search, 该方法可以得到不同尺度的候选区域,每个候选区域是一个联通的区域。如下图中,左边得到的是较小的候选区域,右边是较大的候选区域,在该尺度下包含了整个人的区域。

基于深度学习的目标检测算法详解(一):R-CNN与Fast R-CNN

Selective Search得到不同尺度的候选区域

R-CNN的想法是,既然CNN在图像分类任务中的表现很好,可以自动学习特征,何不用它来对每个候选区域进行特征提取呢?于是R-CNN在Selective Search得到的候选区域的基础上,将每个候选区域缩放到一个固定的大小,并且作为AlexNet(ImageNet 2012图像分类竞赛的冠军)的输入,依次对这些区域进行特征提取,然后再使用支持向量机对各个区域的特征分别进行分类。R-CNN的过程如下:

基于深度学习的目标检测算法详解(一):R-CNN与Fast R-CNN

R-CNN示意图

这样就能得到一个检测的结果了。但是Slelective Search得到的候选区域并不一定和目标物体的真实边界相吻合,因此R-CNN提出对物体的边界框做进一步的调整,使用一个线性回归器来预测一个候选区域中物体的真实边界。该回归器的输入就是候选区域的特征,而输出是边界框的坐标。

R-CNN的效果很不错,比VOC 2012的最好的结果提高了30%的准确度。但是问题就是太慢,主要有三方面原因:1,候选区域的生成是一个耗时的过程;2,对候选区域特征提取需要在单张图像上使用AlexNet 2000多次; 3, 特征提取、图像分类、边框回归是三个独立的步骤,要分别进行训练,测试过程中的效率也较低。

2, Fast R-CNN

为了解决R-CNN中效率低的问题,Fast R-CNN想,一张图像上要使用AlexNet 2000多次来分别得到各个区域的特征,但很多区域都是重合的,可否避免这些重复计算,只在一张图像上使用一次AlexNet,然后再得到不同区域的特征呢?

于是Fast R-CNN提出了一个ROI Pooling的方法,先对输入图像使用一次CNN前向计算,得到整个图像的特征图,再在这个特征图中分别取提取各个候选区域的特征。由于候选区域的大小不一样,而对应的特征需要要具有固定的大小,因此该方法对各个候选区域分别使用POI Pooling, 其做法

基于深度学习的目标检测算法详解(一):R-CNN与Fast R-CNN

基于深度学习的目标检测算法详解(一):R-CNN与Fast R-CNN

Fast R-CNN示意图, 将每个候选区域分成h x w大小的格子做pooling

Fast R-CNN的第二点创意是把之前独立的三个步骤(特征提取、分类和回归)放到一个统一的网络结构中。该网络结构同时预测一个候选区域的物体类别和该物体的边界框,使用两个全连接的输出层分别进行类别预测和边框预测(如下图所示),将这两个任务进行同时训练,利用一个联合代价函数:

基于深度学习的目标检测算法详解(一):R-CNN与Fast R-CNN

公式中的两项分别是classification loss 和regression loss。

基于深度学习的目标检测算法详解(一):R-CNN与Fast R-CNN

特征提取-分类-回归联合网络

使用VGG16作为特征提取网络,Fast R-CNN在测试图像上的处理时间比R-CNN快了200多倍,并且精度更高。如果不考虑生成候选区域的时间,可以达到实时检测。生成候选区域的Selective Search算法处理一张图像大概需要2s的时间,因此成为该方法的一个瓶颈。

本文就介绍到这里, 下一篇文章将为大家介绍Faster R-CNN与Mask R-CNN.

本系列教程文章地址:

本系列已发表如下教程,点击文末了解更多按钮继续阅读, 同时关注我可在第一时间获得最新教程.

基于深度学习的目标检测算法详解(一):R-CNN与Fast R-CNN

基于深度学习的目标检测算法详解(一):R-CNN与Fast R-CNN


分享到:


相關文章: