使用Pytorch进行Faster R-CNN目标检测

本文深入解析Faster R-CNN目标检测原理,从R-CNN到Faster R-CNN的进化历程,及PyTorch实现。演示了如何使用预训练模型进行图像目标检测,包括模型预测、包围框绘制,以及模型在CPU和GPU上的性能对比。

 

在这篇文章中,我们将通过使用pytorch进行faster R-CNN目标检测。我们将学习目标检测从R-CNN到 fast R-CNN到 faster R-CNN的演变过程。

1、图像分类VS目标检测

图像分类用于将类标签分配给输入图像。例如,给定猫的输入图像,图像分类算法的输出是标签“猫”。 在目标检测中,我们不仅对输入图像中的对象感兴趣,而且对它们的位置也感兴趣。 下图说明了图像分类和目标检测的区别。

1.1.图像分类与目标检测:使用哪一个?

通常,图像分类用于处理只包含一个对象的图像。可能有多个类(例如。猫、狗等),但是通常,图像中只有一个类的实例。 在输入图像中有多个对象的大多数应用程序中,我们需要找到对象的位置,然后对它们进行分类。在这种情况下,我们使用目标检测算法。 目标检测比图像分类在速度上慢数百倍,因此,在应用中,如果对象在图像中的位置并不重要,那我们最好还是使用图像分类。

2.目标检测

我们可以把目标检测分成两步

1、查找包含对象的包围框,使每个包围框只有一个对象。

2、对每个包围框中的图像进行分类,并为其确定一个标签。

在接下来的几节中,我们将介绍faster R-CNN目标检测是如何一步步发展出来的。

2.1滑动窗口法

大多数经典的用于目标检测的计算机视觉技术,如HAAR(哈尔)级联和HOG(方向梯度统计直方图)+SVM,都使用滑动窗口方法来检测目标。 在这种方法中,滑动窗口在图像上移动,滑动窗口中的所有像素都被裁剪出来并发送到图像分类器。 如果图像分类器识别到已知对象,则存储边界框和类标签。否则,窗口继续滑动并将被评估。 滑动窗口方法非常浪费计算资源,因为为了检测输入图像中的对象,需要在图像中的每个像素上评估不同尺度和纵横比的滑动窗口。 因此,只有当我们检测具有固定纵横比的单个对象类时,才使用滑动窗口。例如,OpenCV中基于HOG + SVM或HAAR的人脸检测器使用滑动窗口方法。在人脸检测器中,复杂性是可控的,因为只有方形包围框在不同的尺度上被检测。

2.2.R-CNN目标检测器

基于卷积神经网络(CNN)的图像分类器在2012年赢得ImageNet大规模视觉识别挑战(ILSVRC)后变得流行起来。 由于每个目标检测器的核心都有一个图像分类器,基于CNN的目标检测器的发明变得不可避免。

有两个问题需要解决

1、与传统的HOG + SVM或HAAR级联等技术相比,基于CNN的图像分类器非常耗费计算资源。

2、计算机视觉社区越来越雄心勃勃。人们想要建立一个多类目标检测器,除了不同的尺度外,还可以处理不同的纵横比。

因此,基于滑动窗口的目标检测方法被淘汰了。它太费资源了。

研究人员开始研究一种新的思路,即训练一种机器学习模型,该模型可以提出包含对象的包围框的位置。这些包围框被称为区域提案或目标提案。

区域提案仅仅是一个列表,元素是包含对象的包围框,而这些包围框包含对象的概率也不是太高,只是具有一定概率。它不知道也不在乎边界框中包含了哪种对象。

区域提案算法在不同的位置、尺度和纵横比上输出包含几百个包围框的列表。这些包围框中的大多数不包含任何对象。 为什么区域提案仍然有用? 在区域提案算法提出的几百个边界框中使用图像分类器,比在滑动窗口方法提出的几十万个甚至数百万个边界框中使用图像分类器要高效的多。 使用区域提案的第一种方法之一是RossGirschick等人,称为R-CNN(具有CNN特征的区域的简称)。

他们使用一种名为选择搜索的算法来检测出2000个区域提案,并在这些2000个包围框上运行了一个基于CNN + SVM的图像分类器。 当时R-CNN的准确性是最先进的,但速度仍然很慢(GPU上的每张图像18-20秒)

 2.3 fast R-CNN目标探测器

在R-CNN中,每个边界框由图像分类器独立分类,有2000个区域提案,图像分类器计算了每个区域提案的特征图。这个过程很耗时。 在Ross Girshick的后续工作中,他提出了一种称为快速R-CNN的方法,它显著地加快了目标检测的速度。 其想法是为整个图像计算一个单一的特征图,而不是为2000个区域提案计算2000个特征图。对于每个区域提案,感兴趣区域(ROI)池化层从特征图中提取固定长度的特征向量。然后,每个特征向量被用于两个目的

1、将区域分类为其中一个类(例如。狗,猫,背景)。

2、使用边界框回归器提高原始边界框的精度。

2.4 faster R-CNN目标检测器

在 fast R-CNN中,即使对2000个区域提案进行分类的计算是共享的,但生成区域提案的算法部分与执行图像分类的部分不共享任何计算。 在被称为FasterR-CNN的后续工作中,主要的见解是这两个部分-计算区域提案和图像分类-可以使用相同的特征图,从而分担计算负荷。 利用卷积神经网络生成图像特征图,同时用于训练区域提案网络和图像分类器。由于这种共享计算,对象检测的速度有了显著的提高。

3.用PyTorch进行目标检测 [代码部分]

在本节中,我们将学习如何使用Pytorch中的 faster R-CNN目标检测器。我们将使用torchvision中的预训练模型。在PyTorch的所有预先训练的模型都可以在torchvision.models中找到。

3.1.输入和输出

我们将使用预训练模型faster R-CNN ResNet-50,该模型期望输入图像张量的形式[n,c,h,w],要求最小尺寸为800px。

n是图像的数目

c为通道数,对于RGB图像是3

h是图像的高度

w是图像的宽度

模型返回结果

所有预测的包围框组成的二维列表,维度为(N,4),其中N是由模型预测图像中的包围框个数,包围框的形状为[x0,y0,x1,y1],也就是包围框的左上角坐标和右下角坐标

所有预测类的标签。

每个预测标签的置信度。

3.2.预训模式

下载预训练模型,Resnet50 Faster R-CNN,带有训练好的权重参数。


                
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值