计算机视觉导论与数学基础
计算机视觉(Computer Vision)作为人工智能领域最为活跃的研究方向之一,其核心目标是赋予机器“看”的能力——从二维图像或视频序列中提取、理解和推断有意义的高层语义信息。这一看似简单的目标却涵盖了从低层次的像素处理到高层次的语义认知的完整技术栈,其研究深度与广度使其成为检验人工智能发展水平的重要标尺。自1966年麻省理工学院启动“夏季视觉项目”以来,计算机视觉经历了从经验驱动到数据驱动、从手工设计特征到自动学习特征的深刻变革。尤其是2012年深度学习在图像分类任务中的突破性成功,标志着该领域正式进入了以卷积神经网络为代表的深度学习时代。
本章作为全书的开篇,旨在为读者建立计算机视觉与数学基础之间的系统性联系。计算机视觉本质上是一个逆问题(Inverse Problem):我们观察到的二维图像是三维现实世界在特定光照、视角和遮挡条件下的投影,而我们的任务是从这些不完整的观测中恢复或推断出原始的三维结构与语义信息。这类问题的求解高度依赖于数学工具的支撑。线性代数提供了描述图像与变换的数学语言,概率论为处理不确定性提供了理论基础,微积分则构成了优化算法的核心。因此,深入理解计算机视觉,不仅需要掌握视觉算法的实现细节,更需要建立扎实的数学功底。
计算机视觉的发展历程
早期萌芽与符号主义时代
计算机视觉的学术渊源可追溯至20世纪50年代。1959年,神经生理学家David Hubel和Torsten Wiesel在猫视觉皮层实验中发现了简单细胞和复杂细胞,为后来卷积神经网络的设计提供了生物学启发。同年,Russell Kirsch等人开发了首个能够数字化存储和读取图像的设备,标志着计算机处理图像时代的开启。
1966年,MIT人工智能实验室的Marvin Minsky和Seymour Papert发起了一个为期暑期的“视觉项目”(Summer Vision Project),旨在构建一个能够自动理解图像内容的端到端视觉系统。这一项目的规模远超预期,最终未能如期完成,但它被广泛认为是计算机视觉作为独立学科诞生的标志性事件。这一时期的研究主要采用符号主义方法,试图通过手工编码规则来描述视觉场景的结构。然而,现实世界的复杂性使得基于规则的方法难以应对,即使是最基本的物体识别任务也遇到了巨大困难。
20世纪70年代至80年代,计算机视觉研究逐渐形成了从二维图像恢复三维结构的经典范式。David Marr在1982年出版的《视觉》一书中提出了视觉计算的完整理论框架,将视觉过程分解为三个层次:早期视觉(Edge、Depth、Reflectance等二维特征)、2.5维草图(面向观察者的表面法向量、深度等中间表示)和三维模型表征(物体为中心的三维结构描述)。Marr的理论强调从几何和物理角度理解视觉过程,对后续研究产生了深远影响。同期,Barrow和Tenenbaum等人发展了从图像中提取固有特性(Intrinsic Images)的方法,如表面朝向、反射率等,为后续的形状恢复研究奠定了基础。
特征工程与统计学习时代
20世纪90年代至21世纪前十年,特征工程(Feature Engineering)和统计学习方法成为计算机视觉研究的主流范式。这一时期的标志性成果包括:David Lowe提出的尺度不变特征变换(Scale-Invariant Feature Transform, SIFT),该算法通过检测图像中的关键点并提取其局部描述子,实现了在不同尺度和旋转条件下的特征匹配;Paul Viola和Michael Jones开发的Viola-Jones人脸检测器,首次实现了实时人脸检测;以及Navneet Dalal和Bill Triggs提出的方向梯度直方图(Histogram of Oriented Gradients, HOG)特征,在行人检测等任务中取得了优异性能。
这一阶段的核心思想是:通过精心设计的手工特征来捕获图像的局部信息,然后使用传统的机器学习分类器(如支持向量机、Adaboost等)进行模式识别。研究者们投入了大量精力来设计具有不变性的特征表示,如对光照、旋转、尺度和遮挡的不变性。然而,手工特征的表达能力终究有限,难以完全刻画复杂视觉模式的内在规律。
深度学习革命
2012年是计算机视觉发展史上的重要转折点。在ImageNet大规模视觉识别挑战赛(ILSVRC)中,Alex Krizhevsky、Ilya Sutskever和Geoffrey Hinton提出的AlexNet以远超第二名的成绩夺得冠军,将图像分类错误率从25.8%降低至16.4%。这一突破的核心在于采用了深度卷积神经网络(Convolutional Neural Network, CNN)进行端到端的学习,无需手工设计特征,特征表示通过网络自动从数据中学习得到。
此后,深度学习在计算机视觉领域势如破竹。2014年,Karen Simonyan和Andrew Zisserman提出了VGGNet,通过更深的网络结构(16-19层)和更小的卷积核(3×3)证明了网络深度对视觉表示学习的重要性。同年,Christian Szegedy等人设计的GoogLeNet引入了Inception模块和批归一化技术,在ImageNet挑战中取得了优异成绩。2015年,Kaiming He等人提出的ResNet通过残差连接(Residual Connection)解决了深层网络训练困难的问题,将网络深度提升至152层甚至更深,错误率降至3.6%,在特定任务上已超越人类水平。
除了图像分类,深度学习还席卷了目标检测、语义分割、实例分割、姿态估计、图像生成等几乎所有计算机视觉核心任务。2014年,Ross Girshick提出的R-CNN开创了将CNN应用于目标检测的先河,此后Fast R-CNN、Faster R-CNN、YOLO、SSD等算法相继涌现,不断提升检测速度和精度。2015年,Jonathan Long等人提出的全卷积网络(Fully Convolutional Network, FCN)将图像分类网络改造为像素级预测网络,奠定了语义分割的基础,后续的DeepLab系列、U-Net等架构进一步提升了分割精度。生成对抗网络(Generative Adversarial Network, GAN)的提出标志着图像生成领域的重要突破,CycleGAN、StyleGAN等模型展现了深度生成模型在图像转换、超分辨率、风格迁移等任务中的强大能力。
当前趋势与前沿方向
进入2020年代,计算机视觉呈现出几个显著的发展趋势。首先是视觉与语言的多模态融合,CLIP、SAM、DALL-E等大规模预训练模型展示了视觉与文本联合建模的巨大潜力,实现了开放词汇识别、零样本检测、图像生成等前所未有的能力。其次是视觉基础模型(Vision Foundation Model)的研究日益深入,以SAM(Segment Anything Model)为代表的分割模型展现了“分割一切”的通用能力,预示着构建通用视觉系统的可能。第三是扩散模型(Diffusion Model)在图像生成领域异军突起,以Stable Diffusion、Midjourney为代表的模型将AI图像生成推向大众应用,同时扩散模型也开始在图像恢复、3D重建等任务中展现出优势。第四是三维视觉的复兴,随着NeRF(Neural Radiance Fields)及其变体的兴起,隐式表示与神经网络结合的方法在三维重建、新视角合成、场景理解等任务中取得了突破性进展。
计算机视觉的主要任务分类
计算机视觉涵盖的任务类型极为丰富,从底层的图像增强到高层的语义理解形成了一个完整的任务层次体系。理解这些任务之间的区别与联系,对于系统性掌握计算机视觉技术具有重要意义。
图像分类与识别
图像分类(Image Classification)是计算机视觉中最基础也是研究最为充分的任务,其目标是判断整幅图像所属的类别。以ImageNet挑战赛为代表的图像分类竞赛推动了深度卷积网络结构的快速演进,从AlexNet到ResNet再到Vision Transformer,分类精度不断提升。图像分类的数学本质是一个从高维图像空间到离散类别空间的映射函数的学习问题。设输入图像为 $\mathbf{x} \in \mathbb{R}^{H \times W \times C}$(其中 $H$、$W$、$C$ 分别表示高度、宽度和通道数),类别标签为 $y \in \{1, 2, \ldots, K\}$,分类器需要学习一个映射 $f: \mathbb{R}^{H \times W \times C} \rightarrow \{1, 2, \ldots, K\}$,使得预测结果 $\hat{y} = f(\mathbf{x})$ 与真实标签 $y$ 一致或接近。
细粒度分类(Fine-Grained Classification)是图像分类的一个进阶方向,其目标是区分更为精细的子类。例如,从一般鸟类到具体鸟种、从普通车辆到特定车型等。细粒度分类的难点在于不同子类之间的差异往往非常细微,需要捕获局部细节特征。注意力机制(Attention Mechanism)和对比学习(Contrastive Learning)等技术的引入有效提升了细粒度分类的性能。
目标检测与定位
目标检测(Object Detection)不仅要识别图像中的物体类别,还需要定位其空间位置(通常以边界框形式表示)。与图像分类的全局预测不同,目标检测需要处理多尺度、多目标的情况。一个典型的目标检测系统需要输出多个检测框及其对应的类别置信度。设检测结果为 $\{(b_i, c_i, p_i)\}_{i=1}^{N}$,其中 $b_i = (x_i, y_i, w_i, h_i)$ 表示第 $i$ 个检测框的位置和尺寸,$c_i$ 为预测类别,$p_i$ 为置信度得分。
目标检测算法可分为两阶段(Two-Stage)和单阶段(One-Stage)两大类。两阶段方法如R-CNN系列先生成候选区域(Region Proposal),再对候选区域进行分类和边界框回归;单阶段方法如YOLO、SSD则直接在特征图上预测目标位置和类别,速度更快但精度略低。近年来,Anchor-Free检测器如CenterNet、FCOS等的兴起为这一领域带来了新的思路。
语义分割与实例分割
语义分割(Semantic Segmentation)要求对图像中每个像素进行类别标注,实现像素级的密集预测。全卷积网络(FCN)的提出标志着端到端语义分割时代的开启。语义分割的数学模型可表示为:给定输入图像 $\mathbf{x}$,学习一个像素级映射函数 $f: \mathbb{R}^{H \times W \times C} \rightarrow \{0, 1\}^{H \times W \times K}$,输出每个像素属于各类别的概率图。
实例分割(Instance Segmentation)在语义分割的基础上进一步区分同类物体的不同个体。与语义分割的类别级预测不同,实例分割需要处理物体“个体化”的问题,是目标检测与语义分割的结合。Mask R-CNN通过在Faster R-CNN的基础上添加一个并行分割分支,实现了同时进行目标检测、边界框回归和掩码预测的多任务学习。
目标跟踪
目标跟踪(Object Tracking)任务是给定视频序列中初始帧的目标位置,预测该目标在后续帧中的位置变化。根据任务设定不同,目标跟踪可分为单目标跟踪(SOT)和多目标跟踪(MOT)。目标跟踪需要处理目标外观变化、遮挡、尺度变化、运动模糊等挑战,同时保持实时性要求。基于相关滤波的方法和基于深度学习的方法是两类主流技术路线。近年来,Transformer架构在目标跟踪任务中展现出优异性能,SwinTrack等模型刷新了多项跟踪基准的精度记录。
图像生成与合成
图像生成(Image Generation)任务是学习图像的数据分布,并生成符合该分布的新样本。生成对抗网络(GAN)、变分自编码器(VAE)和扩散模型(Diffusion Model)是三类主要的生成模型架构。GAN通过对抗训练使生成器和判别器相互博弈,学习数据分布;VAE通过最大化变分下界学习隐变量模型;扩散模型则通过逐步去噪的过程生成图像。
条件图像生成(Conditional Image Generation)根据额外条件(如文本描述、分割图、边缘图等)生成对应图像。文本到图像生成(Text-to-Image)在近两年取得了惊人进展,DALL-E 3、Stable Diffusion XL、Midjourney等模型能够根据文本描述生成高质量、符合语义的高分辨率图像,展现了视觉生成模型的巨大潜力。
三维视觉
三维视觉(3D Vision)致力于从二维图像恢复或理解三维空间结构,主要任务包括:单目深度估计(Monocular Depth Estimation)从单张图像预测深度信息;双目立体匹配(Stereo Matching)利用双视角几何关系恢复稠密深度;三维重建(3D Reconstruction)从多视角图像或单目视频重建完整的三维场景;以及新视角合成(Novel View Synthesis)生成指定新视角下的图像。
神经辐射场(NeRF)的提出是三维视觉领域的重要突破。NeRF使用多层感知机(MLP)作为场景表示,隐式地将空间位置和视角映射到颜色和密度,通过体积渲染技术合成新视角图像。此后,Instant-NGP、Gaussian Splatting等方法进一步提升了渲染效率和重建质量。
视觉问答与多模态理解
视觉问答(Visual Question Answering, VQA)要求根据给定图像回答自然语言问题,是视觉与语言跨模态理解的典型任务。VQA需要模型同时理解图像内容、问题语义以及两者之间的关联。视觉推理(Visual Reasoning)进一步要求模型具备基于图像内容的逻辑推理能力,能够回答需要多步推理的复杂问题。
多模态大模型(Multimodal Large Language Model)的兴起将视觉理解推向了新的高度。通过将视觉编码器与语言模型对齐,GPT-4V、LLaVA等模型展现了在开放世界环境下理解复杂视觉场景的能力,能够进行图像描述、视觉对话、视觉问题求解等多样化任务。
图像的数学表示
理解图像的数学表示是深入学习计算机视觉的基础。数字图像在计算机中以离散网格形式存储,每个网格单元称为像素(Pixel),像素的位置由其行列坐标确定,像素值则编码了该位置的视觉信息。
灰度图像的矩阵表示
对于单通道灰度图像,像素值通常为 $[0, 255]$ 范围内的整数,表示从黑色(0)到白色(255)的灰度级别。灰度图像可表示为一个维度为 $H \times W$ 的二维矩阵 $\mathbf{I}$,其中 $H$ 和 $W$ 分别为图像的高度和宽度(以像素为单位),矩阵元素 $I_{i,j}$ 表示第 $i$ 行第 $j$ 列像素的灰度值。设图像分辨率为 $224 \times 224$,则该图像对应的矩阵形状为 $\mathbf{I} \in \mathbb{R}^{224 \times 224}$。
在实际运算中,图像矩阵的行索引通常对应垂直方向(从上到下),列索引对应水平方向(从左到右)。这种约定与数学中矩阵的行-列顺序略有不同(数学矩阵通常以列为主序),但在图像处理领域已形成广泛共识。
彩色图像的张量表示
自然场景中的图像通常为彩色,需要多个通道来编码颜色信息。当前最常用的彩色图像表示模型是RGB颜色空间,其中每个像素由红色(Red)、绿色(Green)和蓝色(Blue)三个通道的值共同决定。RGB彩色图像在计算机中以三维张量 $\mathbf{I} \in \mathbb{R}^{H \times W \times 3}$ 表示,其中第三个维度的大小为3,对应三个颜色通道。
除RGB外,还有多种颜色空间用于不同的应用场景。HSV颜色空间将颜色分解为色相(Hue)、饱和度(Saturation)和明度(Value),更符合人类对颜色的感知方式,常用于颜色检测和分割任务。CMYK颜色空间以青色(Cyan)、品红(Magenta)、黄色(Yellow)和黑色(Key/Black)为基础,主要用于印刷领域。Lab颜色空间设计为与设备无关且更符合人眼感知,其中L通道表示亮度,a和b通道表示对立色通道。
在实际深度学习框架中,图像张量的维度顺序可能有所不同。PyTorch采用通道优先(Channel-First)格式,图像张量形状为 $(B, C, H, W)$;而TensorFlow/Keras采用通道最后(Channel-Last)格式,形状为 $(B, H, W, C)$。这种差异在进行跨框架模型转换时需要特别注意。
图像的数学运算
对图像的处理可以转化为对矩阵或张量的数学运算。两个图像的加权和可表示为矩阵对应元素的加法:$(\alpha \mathbf{I}_1 + \beta \mathbf{I}_2)_{i,j} = \alpha I_1(i,j) + \beta I_2(i,j)$,其中 $\alpha$ 和 $\beta$ 为标量权重。图像对比度调整、亮度调整等操作均可用线性变换描述。
图像卷积是图像处理中最核心的运算之一。设输入图像为 $\mathbf{I}$,卷积核(Kernel)为 $\mathbf{K}$,卷积操作定义为:
$$(\mathbf{I} * \mathbf{K})_{i,j} = \sum_{m} \sum_{n} I_{i+m, j+n} K_{m,n}$$
其中卷积核的大小通常远小于图像尺寸。卷积操作具有平移不变性(当不使用填充时)和参数共享的特性,使其特别适合处理图像等具有局部结构的数据。在深度学习中,卷积神经网络通过堆叠多层卷积来逐层提取从低级到高级的特征表示。
线性代数基础
线性代数是计算机视觉最重要的数学基础之一。从图像表示到特征变换,从模型参数存储到优化过程,线性代数的概念和方法贯穿于计算机视觉的各个环节。
矩阵运算与图像处理
矩阵的基本运算包括加法、标量乘法、矩阵乘法、转置和逆运算。这些运算在图像处理中具有明确的几何和物理意义。矩阵加法用于合并图像或调整像素强度;标量乘法用于对比度调整;矩阵乘法则可用于实现各种线性变换。
矩阵乘法是深度学习计算的核心。一个简单的全连接层可表示为 $\mathbf{y} = \mathbf{W}\mathbf{x} + \mathbf{b}$,其中 $\mathbf{x} \in \mathbb{R}^{n}$ 为输入向量,$\mathbf{W} \in \mathbb{R}^{m \times n}$ 为权重矩阵,$\mathbf{b} \in \mathbb{R}^{m}$ 为偏置向量,$\math