非极大值抑制
人工神经网络传统的算法需要花费大量时间人为的设计特征,在实际应用中面对复杂的背景和目标时往往表现得并不理想。但是随着深度学习的崛起目标检测的性能和表现得到了大幅度的提升,深度学习的发展推动了目标检测的迅猛发展。
深度学习是人工智能的一个分支,其受人脑的结构和功能的启发,通过人工神经网络(Artificial Neural Network)模仿人脑处理数据和决策的方式从数据中学习内在规律和特征表示。随着近年的计算机性能的发展和海量数据的增长使得深度学习成为机器学习中的热门研究方向。如今深度学习已经广泛应用于我们的日常生活中,如在线翻译、人脸识别、语音转换等。
人工神经网络(Artificial Neural Network)是一类可以从提供的数据中学习的机器学习算法,是一种模仿人脑神经系统处理信息的运算模型,其由大量的节点或称为神经元相互连接构成。一个节点由输入(Input)、权重(Weight)、偏差(Bias)、激活函数(Activation Function)、输出(Output)组成。下图左边的图片是一个简单的三层神经网络,其中每一个圆形表示一个节点且每一个节点都与下一层中的每个 ...
非极大值抑制
非极大值抑制的作用在进行目标检测过程中,我们的分类器会对每一个滑动窗口的内容进行分类,而滑动窗口是按照设定的步长在图像金字塔的每个图层中从上到下、从左向右移动,这样一个目标就会出现在多个滑动窗口中,最后我们就会获得多个相交、重叠的矩形框。如下图在目标检测过程中目标上会产生多个矩形框,我们希望从这些矩形框中挑选出一个最合适的矩形框且剔除多余的矩形框,使得每个目标只被一个矩形框标记。
非极大值抑制(Non Maximum Suppression)以下简称 NMS,的主要作用是去除目标检测过程中产生的冗余矩形框。要实现 NMS 首先需要计算矩形框之间的交并比(Intersection over Union),以下简称 IoU。下图以直观的例子展示计算 IoU 的方法,左图中的目标(人)同时被两个矩形框标记,为了剔除多余的矩形框需要计算两个矩形框的 IoU。IoU 的计算的方法如下图中间的公式所示,即两个框的交集(红色区域)与两个框的并集(绿色区域)的比值。如果计算后的 IoU 大于事先设定的阈值,则剔除较小的矩形框(下图中最右边图片所示),通过这个过程我们就达到了剔除冗余的矩形框的目的。接 ...
图像分类的基本知识
介绍之前已经学会了如何使用图像金字塔和滑动窗口在图片中寻找目标,以及通过方向梯度直方图的方法对图像进行特征描述,但是光靠这些方法还不足以实现一个目标检测项目。对一张图片进行目标检测还需要判断滑动窗口寻找的物体是否是想要检测到,这就涉及到图像分类问题。
计算机视觉中的图像分类,简单来说就是为一张图片赋予一个标签(Label),一个标签就是人为定义的集合中的一个元素,例如下面公式表示我们定义了一个集合 $D$,$cat$ 、$dog$ 则被称为集合 $D$ 的 2 个不同标签。
$$ D = {cat,\ dog} $$
以下图为例,图像分类任务就是希望给计算机提供左边的图片,则计算机将赋予其 $cat$ 标签,提供右边的图片,则赋予其 $dog$ 标签。在计算机视觉中我们希望构建一个系统,当给系统输入一张图片时,系统会分析该图片然后输出一系列标签的概率值(例如 $cat = 0.89$,$dog = 0.1$),而这些标签属于我们事先定义的一个类别集合(例如 $cat$ 和 $dog$ 属于集合 $D$)。更具体的来说假设我们有一张宽和高分别为 $W,\ H ...
方向梯度直方图
介绍传统的目标检测流程可分为三个步骤,第一步是使用滑动窗口和图像金字塔从图片中选择一些区域。第二步是将选择出来的区域转化为人工设计的特征,可称为特征提取。第三步是将这些特征输入分类器进行分类。方向梯度直方图(Histogram of Oriented Gradients)以下简称 HOG,就是一种人工设计的特征,用来简化图像表述的特征描述符。
下图中左边的图片是一只猫,我们不仅可以看出猫身体上的特征、颜色、纹理,而且还能看到背景。右边的图片是使用 HOG 来表示的图片,除了可以看到图中能看出猫的外形,其他的细节包括背景几乎都被去除了,故右边的图片是左边图片的一种简化表示形式。HOG 可以用来表示物体的形状、外形特征,将这些特征输入分类器就可以实现目标的分类。
方向梯度直方图流程预先归一化(Normalization)在计算梯度前可对图片归一化(Normalization)处理,归一化的目的是使所有的数值落入到统一的范围内,从而使算法能有更好的表现。
计算梯度前面提到可以不用预先对图片进行归一化,故可以说 HOG 特征是从计算图像在水平方向和垂直方向上的梯度开始的。图像的梯度计算是使用 ...
图像金字塔
图像金字塔的作用图像金字塔简单来说就是用多个不同的尺寸来表示一张图片。如下图,最左边的图片是原始图片,然后从左向右图片的尺寸依次缩小直到图片的尺寸达到一个阈值,这个阈值就是多次缩小图片的最小尺寸,不会有比这更小尺寸的图片了,像这种图片的尺寸逐步递增或递减的多张图层就是图像金字塔,每张不同尺寸的图片都称为图像金字塔的一层。图像金字塔的目的就是寻找图片中出现的不同尺寸的目标(物体、动物等)。
代码实现创建了、一个名为 pyramid 函数,这个函数将用来生成图像金字塔,这个函数有三个参数,如下所示。
第一个参数 image 是要进行图像金字塔操作的原始图片。
第二个参数 top 是图像将会被缩小的最小尺寸,我们将这个参数设置一个默认值为 (128, 128),第一个 128 表示图片的高,第二个 128 表示图片的宽。
第三个参数 ratio 表示每次图像将会被缩小 ratio 倍,我们给这个参数设置了一个默认值为 1.2。
import cv2from matplotlib import pyplot as pltfrom IPython import display%matplo ...
目标检测介绍和滑动窗口
目标检测介绍目标检测是计算机视觉中一个重要的研究方向。人眼可以轻松、准确地识别出图片中的物体是什么、这个物体在图片中的哪个位置。
例如,当我们看到下图左边的图片时,我们可以轻松的识别出图片中的动物是猫和狗,并且知道它们在图片中所处的位置。但是对于计算机来说,在以数字形式表示的图片中寻找目标物体,并判断这个物体是什么,这是一件困难的事情。目标检测的目的就是使计算机能够识别图片中的目标(物体、动物等)是什么、这个目标的位置在哪里。如下右边的图片所示,通过检测算法的帮助,计算机不仅能识别出图中的动物,还可以标记出其所处的位置。
目标检测的发展可以分为两个阶段:传统检测算法和基于深度学习的检测算法。
传统的目标检测算法是通过将人为设计的目标特征和机器学习的分类器相结合来实现的。
基于深度学习的检测算法可分为两类,一类是使用基于候选区域(Region Proposal)的方法先找出图片中可能存在目标的区域,然后通过卷积神经网络对该区域进行分类;另一类是直接使用卷积神经网络预测目标所属类别的概率和其在图片中的位置坐标。
由于深度学习的崛起,推动了目标检测的快速发展和应用,如今目标检测已经广泛的应 ...