计算机视觉导论 / Introduction to Computer Vision
计算机视觉导论 / Introduction to Computer Vision
计算机视觉的核心问题是什么?简言之,是赋予机器解析和理解视觉信息的能力——从原始像素阵列中提取有意义的语义表征。这一目标的实现路径在过去的六十年间经历了根本性变革,从早期依赖人工设计规则的启发式方法,到以数据驱动的深度学习为主导的现代范式。理解这一演进历程,不仅是回顾历史,更是把握计算机视觉本质任务的关键。本章将系统梳理计算机视觉从Marr视觉理论到深度学习时代的发展脉络,建立视觉任务的层次化分类体系,阐明传统方法与深度学习方法的核心差异,并在此基础上预览全书的技术路线图。
1.1 计算机视觉发展历程:从Marr视觉理论到深度学习时代 / From Marr's Visual Theory to the Deep Learning Era
计算机视觉作为独立学科的研究可追溯至1966年MIT人工智能实验室发起的"Summer Vision Project"。该项目试图在暑期内构建一个"完整的视觉系统",尽管目标过于乐观,但其系统性地将视觉问题作为计算任务来研究的方法论具有开创性意义。此后二十年间,视觉研究主要集中在底层特征提取,如边缘检测、角点检测等,为后续发展奠定了技术基础。
1.1.1 Marr视觉理论:计算机视觉的理论奠基 / Marr's Visual Theory: Theoretical Foundation
1982年,David Marr在其遗作《Vision: A Computational Investigation into the Human Representation and Processing of Visual Information》中提出了至今仍影响深远的视觉计算理论。Marr认为,视觉是从二维图像出发,通过一系列渐进式的表征转换,最终重建三维世界结构的过程。这一过程包含四个层次的表征:
第一层:原始草图(Primal Sketch) 描述图像中的基本几何特征,包括边缘、线条、边界和斑点等局部特征。这些特征通过对图像的灰度变化进行检测获得,构成视觉信息处理的基础单元。
第二层:要素图(2.5D Sketch) 在原始草图基础上,加入关于深度、表面朝向、遮挡边界等信息。这一层表征仍以观察者为中心,描述的是从特定视角观察到的场景表面属性。
第三层:三维模型表征(3D Model Representation) 将场景物体表示为以物体为中心的三维几何模型,描述物体的形状、体积和空间关系。这一层表征具有视角不变性,是高级视觉认知的基础。
第四层:功能与行为层 涉及视觉系统与具体任务的交互,包括运动分析、物体操作、场景导航等功能性表征。
Marr理论的核心贡献在于确立了视觉处理的层次性和模块化原则。尽管受限于当时的数据条件和计算能力,该理论框架未能直接催生实用视觉系统,但它为后续三十年的视觉研究提供了概念基础。值得注意的是,Marr强调视觉是一个"逆问题"(inverse problem)——从二维投影恢复三维结构是一个病态问题,需要引入额外约束才能获得唯一解。这一洞见至今仍是视觉重建任务的核心挑战。
1.ал.2 特征工程时代:从SIFT到ImageNet / The Feature Engineering Era: From SIFT to ImageNet
1999年,David Lowe提出尺度不变特征变换(Scale-Invariant Feature Transform, SIFT),这是计算机视觉史上最具影响力的特征描述子之一。SIFT通过在尺度空间中检测关键点,并在关键点周围提取梯度方向直方图,生成一个128维的特征向量。SIFT特征对旋转、尺度缩放和亮度变化具有不变性,且对视角变化和噪声具有较强的鲁棒性。
SIFT的出现标志着视觉特征从人工设计滤波器向手工特征描述子的重大跃迁。与早期的边缘检测算子相比,SIFT不仅检测特征点,还提供了描述特征点周围局部结构的紧凑表征。这使得大规模图像匹配和检索成为可能,催生了图像拼接、三维重建、目标识别等众多应用。
2001年,Paul Viola和Michael Jones提出了Viola-Jones人脸检测器,这是第一个能在实际应用中实时运行的人脸检测系统。该方法采用Adaboost算法从大量简单特征中筛选出有效的分类器,并通过级联结构加速检测过程。Viola-Jones检测器的成功表明,在特定领域(如人脸检测)中,通过精心设计的特征和分类器级联,可以构建实用化的视觉系统。
此后,方向梯度直方图(Histogram of Oriented Gradients, HOG)、局部二值模式(Local Binary Patterns, LBP)等特征描述子相继出现,推动了视觉识别技术的进步。然而,这一时期的视觉系统仍然依赖人工设计的特征提取器,其泛化能力受限于特征设计者对特定任务的先验知识。
1.1.3 深度学习革命:ImageNet时刻 / The Deep Learning Revolution: The ImageNet Moment
2009年,斯坦福大学李飞飞团队发布了ImageNet数据集,这是计算机视觉史上最具影响力的数据集之一。ImageNet包含超过1400万张手工标注的图像,涵盖了约21841个synonym sets(同义词集合),每个概念对应数百到上千张图像。其中,用于ImageNet竞赛的ImageNet-1000子集包含1000个类别、约120万张训练图像和5万张验证图像。
2010年,ImageNet Large Scale Visual Recognition Challenge(ILSVRC)正式启动。这一竞赛在此后数年间成为视觉领域的标杆,推动了目标检测、图像分类等任务的技术进步。
2012年成为计算机视觉的分水岭。Hinton学生Alex Krizhevsky提出的AlexNet在ILSVRC竞赛中以显著优势夺冠:top-5错误率仅为16.4%,而第二名的错误率为26.2%。这一15.8%的性能差距在视觉竞赛史上前所未有,标志着深度学习方法论的突破性胜利。
AlexNet的成功可归结于三个关键因素:首先是ReLU激活函数的引入,解决了梯度消失问题并加速了网络收敛;其次是Dropout正则化技术的应用,有效控制了过拟合;第三是GPU并行计算的使用,使得训练深层网络成为可能。AlexNet包含5个卷积层和3个全连接层,总计约6000万个参数,在当时的硬件条件下训练一次需要数天时间。
2013年,ZFNet通过反卷积可视化技术揭示了卷积网络各层学习到的特征,为理解深度网络提供了直观工具。2014年,VGGNet证明了网络深度对特征学习的重要性,GoogLeNet则通过Inception模块在保持计算效率的同时增加了网络宽度。
2015年,ResNet的提出解决了深层网络训练的梯度消失问题。ResNet的核心创新是残差连接(skip connection),允许梯度直接流向浅层网络,使得训练超过100层的网络成为可能。ResNet-152在ImageNet上达到了3.57%的top-5错误率,首次超越了人类水平的5%。ResNet的残差学习框架不仅是一项技术突破,更是对深度网络学习机制的重要洞察。
2017年,Mask R-CNN在COCO数据集上同时完成了目标检测、实例分割和人体关键点检测三个任务,展示了多任务联合学习的力量。同年,Transformer架构首次被引入自然语言处理领域,为后续视觉Transformer的发展埋下伏笔。
从AlexNet到ResNet,ImageNet竞赛见证了卷积网络深度从8层增加到152层,错误率从16.4%降至3.57%。这一进程不仅是网络架构的演进,更深刻地改变了计算机视觉的研究范式:从特征工程转向网络架构设计,从任务特定优化转向通用特征学习,从实验室研究走向工业应用。
1.2 视觉任务的层次化分类体系 / Hierarchical Classification of Visual Tasks
"让机器看懂图像"是一个笼统的描述。实际上,视觉任务涵盖多个层次,从像素级的密集预测到场景级的语义理解,不同任务具有不同的输入输出形式和评估标准。建立一个清晰的分类体系,对于理解任务间的关联、设计学习路径、以及根据实际需求选择合适的任务类型至关重要。
1.2.1 像素级任务:从图像增强到语义分割 / From Image Enhancement to Semantic Segmentation
像素级任务对图像中的每个像素进行操作,其输出是像素级别的密集预测。根据任务目标的不同,像素级任务可分为低层视觉任务和高层视觉任务两类。
低层视觉任务 包括图像去噪、超分辨率重建、图像修复等。这类任务不涉及语义理解,主要关注图像质量提升和细节恢复。例如,图像去噪旨在从噪声观测中恢复干净图像,深度学习方法(如DnCNN、U-Net)在这一任务上已取得优异表现。
语义分割(Semantic Segmentation) 是像素级高层视觉任务的代表,其目标是为图像中每个像素分配类别标签。与图像分类不同,语义分割需要同时完成定位和识别两个子任务——不仅要知道"图像中有什么",还要知道"每个位置是什么"。
2015年,Jonathan Long等人提出的全卷积网络(Fully Convolutional Network, FCN)是语义分割领域的里程碑式工作。FCN将ImageNet预训练的分类网络(如VGG16)转换为全卷积架构,通过反卷积(转置卷积)进行上采样,实现端到端的像素级预测。FCN引入了编码器-解码器架构的雏形:编码器通过卷积和池化提取高层语义特征并降低空间分辨率,解码器通过上采样恢复空间细节。
编码器-解码器架构成为语义分割的主流框架。U-Net(2015)设计了对称的编码器-解码器结构,并引入跳跃连接(skip connections),将编码器中的浅层细节信息与解码器中的深层语义信息融合,在医学图像分割任务上取得了显著成功。SegNet(2015)采用了类似的架构,但使用池化索引进行上采样,减少了参数量。
DeepLab系列(2015-2018)引入了空洞卷积(Atrous Convolution)和空洞空间金字塔池化(Atrous Spatial Pyramid Pooling, ASPP),在不损失分辨率的情况下扩大感受野,兼顾了语义信息和空间细节。PSPNet(2017)提出了金字塔池化模块,通过多尺度全局上下文信息增强语义分割的性能。
实例分割(Instance Segmentation) 在语义分割基础上进一步区分同类物体的不同个体。考虑一个包含多人的场景:语义分割将所有"人"类像素标记为同一类别,而实例分割需要区分每个人——"这是人A"、"这是人B"、"这是人C"。这一任务的挑战在于,需要同时完成目标检测(定位每个实例)和语义分割(像素级分类)两个子任务。
2017年,Kaiming He等人提出的Mask R-CNN是实例分割的标志性工作。Mask R-CNN在Faster R-CNN的两阶段检测框架基础上,增加了一个并行的分割分支,在预测类别和边界框的同时生成每个实例的分割掩码。Mask R-CNN的关键创新是RoIAlign层,它解决了RoIPooling的量化误差问题,显著提升了分割精度。
全景分割(Panoptic Segmentation) 由Kirillov等人于2019年提出,旨在统一实例分割和语义分割。全景分割将图像内容分为"stuff"(无定形背景区域,如天空、道路、草地)和"thing"(可计数的实体目标,如人、车、动物)两类。对于stuff类,全景分割只需预测语义类别;对于thing类,则需区分不同实例。
全景分割质量(Panoptic Quality, PQ)是评估全景分割的统一指标,定义为:
$$PQ = \frac{\sum_{(p,g)\in TP} IoU(p,g)}{|TP| + \frac{1}{2}|FP| + \frac{1}{2}|FN|}$$
其中,$TP$、$FP$、$FN$分别表示真正例、假正例和假负例,$p$和$g$分别表示预测和真实片段,$IoU(p,g)$为两者的交并比。
1.2.2 目标级任务:从分类到检测与跟踪 / From Classification to Detection and Tracking
目标级任务以完整的目标对象为处理单元,与像素级任务相比,其输出更加紧凑(边界框或关键点),但同样需要完成定位和识别两个核心任务。
图像分类(Image Classification) 是计算机视觉中最基础的任务,目标是为整张图像分配类别标签。这一任务仅涉及图像级别的预测,不输出空间定位信息。ImageNet竞赛中的分类任务使用的评估指标是top-5错误率,即预测概率前5名中包含正确类别的比例。
AlexNet(2012)、VGG(2014)、GoogLeNet(2014)、ResNet(2015)、DenseNet(2016)、EfficientNet(2019)等经典分类网络不断刷新ImageNet的准确率。这些网络设计的核心理念包括:增加网络深度以提升特征表达能力(ResNet的残差连接解决了深层网络训练难题);采用多尺度特征融合(Inception模块、特征金字塔);优化网络架构的效率-精度平衡(EfficientNet的复合缩放法则)。
目标检测(Object Detection) 在分类基础上增加了空间定位需求,需要同时输出目标类别和边界框(Bounding Box)。目标检测是计算机视觉中应用最广泛的任务之一,也是许多下游任务的基础。
目标检测方法可分为两阶段(two-stage)和单阶段(one-stage)两大类。两阶段方法以R-CNN系列为代表:Region-based Convolutional Neural Network(R-CNN,2014)首次将深度学习应用于目标检测,通过选择性搜索(Selective Search)生成区域提议,再用CNN提取特征并分类;Fast R-CNN(2015)通过RoIPooling实现了特征共享,大幅提升了检测速度;Faster R-CNN(2015)引入区域提议网络(Region Proposal Network, RPN),实现了端到端训练。
单阶段方法直接在不同位置和尺度上预测目标。You Only Look Once(YOLO,2016)将检测问题重新定义为单次前向传播的回归问题,在速度和效率上具有显著优势。YOLO将输入图像划分为S×S网格,每个网格预测多个边界框及其置信度,以及条件类别概率。YOLOv3(2018)引入了多尺度预测和残差模块,进一步提升了检测精度。SSD(2016)则在不同尺度的特征图上进行检测,兼顾了小目标和大目标的检测。
单阶段与两阶段方法的选择取决于应用场景。Faster R-CNN等两阶段方法在检测精度上通常更优,适合对精度要求高的场景;YOLO等单阶段方法在检测速度上有优势,适合实时应用。实际部署时,需要在速度和精度之间做出权衡。
目标跟踪(Object Tracking) 处理视频中的时序关联问题,需要在视频序列中持续定位特定目标。给定第一帧中目标的初始状态(通常为边界框),目标跟踪算法需要在后续帧中预测目标的位置变化。
目标跟踪面临的主要挑战包括:目标外观变化(由运动、遮挡、尺度变化引起)、背景干扰、实时性要求等。传统的目标跟踪方法,如光流法、卡尔曼滤波、粒子滤波等,在简单场景下表现尚可,但在复杂场景下鲁棒性不足。
深度学习时代的目标跟踪方法通常采用"检测-跟踪"框架。Simple Online and Real-time Tracking(SORT,2016)及其改进版DeepSORT(2017)将目标检测与数据关联相结合,在实时性上表现出色。Siamese网络(如SiamFC、SiamRPN)通过学习目标的相似性度量函数,实现了无需在线更新的单目标跟踪。
1.2.3 场景级任务:从理解到推理 / From Understanding to Reasoning
场景级任务超越了对单个目标的识别,转而关注图像或视频的整体语义理解。这类任务需要整合多种视觉能力,建立视觉元素之间的语义关联。
场景分类(Scene Classification) 旨在为整张图像预测场景标签,如"办公室"、"海滩"、"森林"、"厨房"等。与目标分类不同,场景分类需要理解图像的空间布局、物体组成和整体氛围等高层语义。
Places205和SUN397是场景分类的常用数据集。研究表明,用于ImageNet图像分类的深度网络(尤其是VGG和ResNet)在场景分类任务上同样有效,这说明ImageNet预训练模型学到的特征具有较强的通用性。场景分类的特征需求与目标分类有所不同——前者更关注全局空间布局和上下文信息,而非局部细节特征。
图像描述(Image Captioning) 要求生成图像的自然语言描述,需要同时具备视觉理解能力和语言生成能力。编码器-解码器架构是图像描述的主流框架:编码器(如CNN)提取图像特征,解码器(如LSTM或Transformer)根据图像特征逐词生成描述。
Show, Attend and Tell(2015)引入了注意力机制,使解码器能够在生成每个词时关注图像的相关区域。这种视觉-语言对齐机制不仅提升了描述质量,还增强了模型的可解释性。后续工作进一步探索了语义属性、常识知识等高层信息的融合,以及更丰富的评估指标(如CIDEr、BLEU、SPICE等)。
视觉问答(Visual Question Answering, VQA) 要求根据图像内容回答自然语言问题。例如,给定一张包含狗和球的图像,系统需要回答"狗在做什么?"或"球是什么颜色的?"等问题。VQA需要整合视觉理解和自然语言理解,并涉及一定的推理能力。
VQA面临的核心挑战包括:问题多样性(从简单的事实识别到复杂的推理)、答案的长尾分布(某些答案出现频率极低)、多模态信息融合(如何有效结合视觉和文本特征)。VQA是视觉推理能力的重要测试平台,也是迈向视觉智能的关键里程碑。
人体姿态估计(Human Pose Estimation) 旨在检测人体关键点(如头部、肩膀、肘部、腕部、髋部、膝盖、脚踝等)的位置。2D姿态估计输出关键点的图像坐标,3D姿态估计进一步恢复关键点的三维空间位置。
DeepPose(2014)首次将深度学习应用于姿态估计,使用级联回归器直接从图像预测关键点坐标。Hourglass(2016)设计了下采样-上采样对称结构,以多尺度方式捕获关键点周围的上下文信息。OpenPose(2019)采用Part Affinity Fields建模