计算机视觉:一种直观的解释

人类历史和大脑研究中的一个主要问题是:我们如何以我们的方式感知世界?

当谈到我们的眼睛时,这些只是传感器,帮助我们建立一个可理解的表现我们周围的场景!例如,诸如颜色之类的属性不是物理世界中的物体所固有的,而是代表我们对不同波长的光的感知反射的心理抽象。尽管听起来令人沮丧,但在我们的物理现实中,一切都是“黑暗的”。当此物体反映我们在心理上与红色相关联的特定波长时,物体显示为红色,并吸收所有其余物体。

这种视觉感知能力远远超出了识别不同波长的能力。最有趣的方面来自于我们从这些光子在空间中相互感知的方式构建概念现实的能力。

例如,我们理解椅子的概念,我们内心或者大脑希望它具有某些几何特性,所以在我们的眼睛中,从椅子反射的光必须保持椅子的空间关系,进而把我们对这些空间的概念化为椅子的形状。

计算机最近也变得能够进行视觉识别,学习如何看。由于人工智能的进步,特别是卷积神经网络(CNN)的应用,这已成为可能。关于这个主题有很多文章,但很少有人解释统计和线性代数之外的方法的直觉。

构建卷积神经网络的模块

要了解如何将CNN用于执行任何视觉任务,我们必须首先了解其组件。所涉及的概念列表可能是非常繁复的,但它们都可以缩小到方法中已经存在的词语:卷积、深度神经网络(DNN)以及这两者的融合。

什么是卷积?

卷积是一种将两个函数组合成第三个函数的数学运算。

例如,假设我们有两个给定的函数f(t)和g(t),我们有兴趣在另一个函数之上应用一个函数并计算交集区域:f(t)* g(t )=(f * g)(t)。

在这种情况下,我们在f(t)上应用g(t)(称为内核),并根据两个函数区域的交点改变响应(f * g)(t)。这种卷积概念是信号处理中最常用的技术,应用于计算机视觉,可以看作是处理多个RGB传感器的信号。

卷积有效性背后的直觉是它们能够将给定的输入信号过滤成组合的、更有用的结果。

在图像的特定情况下,根据矩阵而不是波形更好地理解信号。因此,我们的函数f(t)和g(t)现在分别成为图像(矩阵)和内核(矩阵)。再一次,我们可以通过在另一个矩阵之上滑动其中一个矩阵来应用卷积。

你在上面看到的只是图像中滑动窗口与内核的矩阵乘法,然后加上总和。计算机视觉环境中卷积的强大之处在于它们是RGB传感器领域的强大特征提取器。单独拍摄时,每个像素(RGB传感器)对于理解图像包含的内容毫无意义。是空间中像素彼此的关系,才赋予图像真正的意义。它适用于您在计算机上阅读本文的方式,其中像素表示字符,大脑在空间中匹配黑色像素,形成字符的概念。

通过在图像上滑动不同的卷积核,可以执行图像处理。这是在Photoshop或Gimp等图像编辑软件中可以找到的工具:

什么是深度神经网络?

在机器学习中学习的概念可以被视为试图从给定数据预测未知函数。假设您有兴趣预测输入x的标签y。在这种特殊情况下,您希望模型最小化预测与基本事实之间的误差。我们修改网络中的权重和偏差,使得我们尽可能地将输入x映射到输出y。

为了更好地理解这一点,我们来看一个简单的线性回归问题。线的方程可以描述为y = mx + b,其中m是斜率,b是与y平面的交点(通常称为偏差)。如果只有两个点,可以直接用公式求解斜率和偏差,但是当我们有多个点n> 2并且没有完全符合这些点的线性问题就变得更难了。在这种情况下,我们会感兴趣的是近似一条最小化每个数据点距离的线。为此,我们可以按照以下步骤操作:

1. 给m和b赋予随机值。

2. 计算误差,可以将其描述为均方误差(MSE),计算我们距离最佳线的距离。

3. 使用此误差函数的导数,计算梯度以了解移动两个值的方向,以减少误差。

4. 重复步骤2和3,直到误差停止减少。

在图的左侧,您可以看到错误空间,它由应用于我们特定数据点的MSE给出。在右侧,我们可以看到我们的数据点的表示,以及由m和b定义的行。在开始时,线完全关闭,并且它反映在高误差值中。然而,当我们计算导数并向函数减少的位置移动时,我们最终得到m和b的值,这些值类似于数据点的属性。

在深度神经网络(DNN)中,这是每个神经元上实际运行的核心思想。鉴于我们的问题解决方法比仅仅近似一条线更复杂,我们需要更多的神经元,通常是层次结构。深度学习通过使用梯度下降来最小化误差函数,并且由于学习是以层为单位构建的,因此DNN最终学习数据中的层次结构。

神经网络的主要构建块是人工神经元。这些有不同类型,最简单的是感知器。人们可以看到感知器作为一个单元,它接受几个二进制输入x1,x2,...,xn,并生成一个二进制输出y:

每个输入都有一个权重w1,w2,...,wn,表示它们对输出的重要性。最后,使用输入和给定阈值的加权和计算输出。如果此总和大于此阈值,感知器将输出1,否则为0。这可以更容易地用代数术语来表达:

网络的人工神经元通过层彼此连接。连接到输入的第一组神经元形成输入层。提供预测的网络的最后一层称为输出层。中间可以有任意数量的层,它们被认为是隐藏层

深度学习的名称来自这样一个事实,即该架构中涉及超过2层神经元。超过两层在过去是不切实际的,结果很差。大量训练数据和加速计算的可用性克服了这些限制。正是在这个时刻,开始添加更多层,从而产生了所谓的深度神经网络。通过层的通信能够描述数据的分层表示,其中每层神经元代表抽象级别。

通过卷积神经网络学习视觉表征

结合卷积的力量来提取空间特征和从深度神经网络进行层次学习的能力,产生所谓的卷积神经网络。通过用卷积层代替DNN中存在的经典神经元层,将这两种技术合并为单一解决方案。

因此,权重和偏差在内核中被编码,并且是学习的参数,其优化从原始输入(图像)到预期预测(例如图像的类)的表示。初始层将抽取诸如边缘之类的特征并编码,而后来的边缘将进行越来越高的抽象并编码,例如形状和纹理。

在上图中,每个神经元表示对从输入层或先前层馈送的图像的卷积运算。我们可以有多个卷积接收相同的输入,以便提取不同类型的特征。通过这些层,卷积操作将继续将来自先前层的给定矩阵变换为用于手头任务的越来越多的压缩/有用表示。例如,如果我们的网络正在执行人脸识别,初始图层将从脸部提取边缘,这些边缘将被卷入形状,这些形状将被卷入某些面部特征,这些特征对于区分不同的个体,一直到输出,其中我们有给定面的标识符。

结论

CNN可以应用于数据中存在某种空间属性的任何域。这通常会转化为将图像作为输入的问题。

好处

1. 与传统的计算机视觉技术相比,从发展的角度来看,CNN更容易应用。有大量的教程和开源软件可以处理最常见的任务,例如图像分类或对象检测,只需在已有的模型中提供数据;

2. 当有足够的数据时,CNN优于其他浅层模型。

缺陷

1. 任何任务所需的数据量都可能非常庞大,因为深度学习技术通常始于有限先验知识的手头任务。在传统计算机视觉算法中,有许多技术使用该先验知识来实现算法如何工作以减少必要数据量。

2. 与任何深度学习方法一样,CNN是黑盒方法,无法正式解释。这意味着如果您的模型存在一些问题,您将开始猜测可能出错的游戏。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20181107A0AP6I00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码关注腾讯云开发者

领取腾讯云代金券