计算机视觉领域的发展可以追溯到数十亿年前,当时微小的生物体发生了一种突变,使它们对光变得敏感。这种对光的敏感性是生命进化过程中的一个关键步骤,它为后来复杂视觉系统的形成奠定了基础。随着时间的推移,地球上的生命变得丰富多样,所有生物都发展出了类似的视觉系统,包括用于捕获光线的眼睛、大脑中用于处理光线的感受器以及视觉皮层的处理能力。
基因工程和系统平衡的片段帮助实现了欣赏日出这样简单的事情。但这仅仅是开始。在过去的30年里,取得了更大的进步,将这种独特的视觉能力扩展到计算机上。开发出了更先进的系统,能够将照片直接以数字形式捕捉,几乎模拟了人类眼睛对光和阴影的感知能力。但这仅仅是挑战的一小部分。
理解照片中的内容要困难得多。考虑下面这张照片:大脑可以立即识别出它是一朵花。大脑之所以能够做到这一点,是因为拥有数百万年的进化背景,可以直接理解什么是更好的。但计算机没有这样的优势。相反,对于算法来说,图像只是代表颜色光谱上强度的大量整数值数组。
要让算法像人脑一样理解图像内容,关键在于上下文。为了实现这一点,采用了一种类似于人脑功能的算法,即机器学习。机器学习使能够充分训练数据的上下文,以便算法能够学习特定组中的这些数字代表什么。
如果有人类难以分类的图像,机器学习能否实现更高的准确性?例如,让看看这些牧羊犬和拖把的图像,即使是也很难区分两者。通过机器学习模型,可以收集一系列牧羊犬和拖把的图像。只要提供足够的数据,它最终就能准确地识别出两者之间的差异。
计算机视觉正在应对越来越复杂的挑战,并在图像识别任务中的准确性与人类相媲美。但像人类一样,这些模型并不完美,它们有时会犯错。实现这一点的特定类型的神经网络被称为卷积神经网络(CNN)。
CNN通过将图像分解成更小的像素组,称为滤波器,来工作。每个滤波器都是一个像素值矩阵。然后,网络对这些像素执行计算,将它们与网络正在寻找的特定模式的像素进行比较。在CNN的初始层,它可以识别像不均匀边缘和扫描这样的高级模式。随着网络进行更多的卷积,它可以对不同的事物进行分类,如面部和动物。
CNN如何知道要寻找什么,以及它的预测是否准确?大量的标记训练数据有助于这个过程。当CNN开始时,所有的滤波器值都是随机的。因此,它的第一次预测几乎没有意义。每次CNN预测标记数据时,它使用误差函数将预测与图像的实际标签进行比较。基于这个误差或损失函数,CNN更新其滤波器值,并再次开始这个过程。理想情况下,每次迭代都会稍微提高准确性。
如果想使用机器学习探索视频而不是分析单个图像会怎样?从本质上讲,视频只是一系列图片帧。要分析视频,可以在CNN的基础上进行图像分析。在无噪声图片中,可以应用CNN来识别特征。但当转向视频时,一切都变得更加复杂,因为正在识别的对象可能会随时间变化。或者更有可能的是,视频帧之间存在高度重要的上下文关系。
例如,如果有一张半满的纸箱图片,可能想根据它前后的帧将其标记为打包箱子或拆箱。现在,CNN在这方面就显得不足。它们可以处理空间报告特征,即图片中的视觉数据,但不能处理时间特征,比如一个帧与前一个帧的相似性。为了解决这个问题,需要将CNN的输出输入到另一个可以处理视频时间特性的模型中,即循环神经网络(RNN)。
与CNN独立处理像素组不同,RNN可以保留其已处理的信息,并在决策中使用这些信息。RNN可以处理各种输入和输出数据。以视频分类为例,通过传递一系列帧描述来训练RNN。随着RNN处理特定序列,它使用损失或误差函数将其预测输出与正确标签进行匹配。然后它调整权重并再次处理序列,直到实现更高的准确性。