计算机视觉导论 | Introduction to Computer Vision
计算机视觉导论
什么是计算机视觉
当我们睁开眼睛的那一刻起,我们就具备了观察和理解周围世界的能力。我们能够识别迎面走来的朋友,躲避行驶的车辆,阅读路边的指示牌,欣赏艺术品的美丽。这些对人类而言轻而易举的视觉感知能力,却经历了数十年的研究,才逐渐在计算机上得以实现。计算机视觉(Computer Vision)正是这样一门致力于赋予计算机“看”的能力的学科,它试图让机器能够像人类一样从图像或视频中获取信息、理解内容并作出决策。
从学术定义的角度来看,计算机视觉是一门研究如何使机器“看”的科学。根据美国计算机科学家、计算机视觉领域的先驱人物之一——戴维·马尔(David Marr)在其1982年出版的经典著作《视觉》(Vision)中的论述,视觉的本质是对外部世界进行有效的表达和描述,从而为后续的智能行为提供必要的信息支持。马尔认为,视觉是一个信息处理过程,其最终目标是建立对场景的三维几何描述以及理解场景中的物体及其相互关系。这一思想至今仍深刻影响着计算机视觉研究的发展方向。
计算机视觉的核心挑战在于语义鸿沟(Semantic Gap)问题。语义鸿沟指的是图像的底层像素数据与高层语义理解之间存在的巨大差异。一张普通的照片由数百万个像素组成,每个像素仅包含颜色和亮度信息,但人类却能从中理解出丰富的语义内容:这是一张在某个地点拍摄的照片,照片中有哪些人物,他们在做什么,场景的氛围如何,甚至照片背后的故事。这种从低层次数据到高层次语义的跨越,正是计算机视觉需要解决的核心难题。
让我们通过一个具体的例子来理解这一点。当我们看到一张猫咪的照片时,人类可以迅速识别出“这里有一只猫”,并且还能判断出猫的品种、大概年龄、情绪状态等信息。然而,对于计算机而言,这张照片只是一堆数字——数百万个RGB值,每个值代表某个像素的红、绿、蓝颜色分量。没有任何一个像素本身包含“猫”的信息,猫的概念必须从这些数字的组合中“涌现”出来。这种从具体到抽象、从数据到知识的转化,正是计算机视觉研究的核心内容。
现代计算机视觉的研究范畴极为广泛,涵盖了图像分类(Image Classification)、目标检测(Object Detection)、图像分割(Image Segmentation)、目标跟踪(Object Tracking)、姿态估计(Pose Estimation)、场景理解(Scene Understanding)、三维重建(3D Reconstruction)等众多子领域。这些任务从不同层面和角度切入视觉感知问题,共同构成了计算机视觉的完整研究图景。
从更宏观的视角来看,计算机视觉是人工智能(Artificial Intelligence)领域的重要组成部分,与自然语言处理(Natural Language Processing)和语音识别(Speech Recognition)并称为人工智能的三大核心研究方向。正如人类超过80%的外界信息是通过视觉通道获取的,在人工智能时代,让机器具备强大的视觉理解能力具有根本性的重要意义。斯坦福大学人工智能实验室的主任吴恩达(Andrew Ng)曾有一个著名的论断:“计算机视觉是实现人工智能的关键钥匙之一,没有它,人工智能将是一个聋子兼盲人。”这一论断深刻揭示了计算机视觉在人工智能发展中的核心地位。
计算机视觉的发展历程
计算机视觉作为一门独立的学科,其发展历程可以追溯到20世纪60年代,至今已走过近六十年的发展道路。纵观这段历史,我们可以清晰地看到几个重要的发展阶段,每个阶段都以前一阶段的积累为基础,同时又呈现出鲜明的时代特征和技术特点。
早期探索:从感知机到马尔视觉理论
计算机视觉的起源可以追溯到人工智能学科刚刚诞生的时代。1966年,美国麻省理工学院(MIT)的年轻教授西蒙·派珀特(Seymour Papert)发起了一个名为“夏季视觉项目”(Summer Vision Project)的研究计划,旨在用一个夏天的时间解决机器视觉的基本问题。这个项目的初衷是美好的——让计算机能够快速而准确地识别图像中的物体。然而,由于问题的复杂性远超预期,这个“夏天”延续了数十年,至今仍是活跃的研究领域。尽管如此,这个项目被认为是计算机视觉作为独立学科的起点,它首次明确地提出并尝试系统性地解决“让机器看见”这个问题。
在这一时期的早期探索中,研究者们尝试用各种数学方法来处理视觉问题。余弦相似性(Cosine Similarity)等基本的数学工具被用于比较图像之间的相似程度,而主成分分析(Principal Component Analysis, PCA)等技术则被用于提取图像的主要特征。这些方法虽然简单,但为后来的研究奠定了重要的理论基础。
20世纪70年代末和80年代初,大卫·马尔(David Marr)提出了具有里程碑意义的马尔视觉理论(Marr's Theory of Vision)。马尔的理论体系将视觉感知分为三个层次:表达层(Representation Level)、算法层(Algorithm Level)和实现层(Implementation Level)。他提出视觉信息处理是一个从二维图像到三维表示的自底向上的过程,应该首先提取图像的基本特征(如边缘、纹理),然后逐步构建更高级的表示(如2.5维草图、3D模型)。马尔的理论框架为计算机视觉研究提供了统一的指导思想和方法论基础,至今仍影响着该领域的研究范式。
与此同时,大卫·洛(David Lowe)等研究者开始关注几何方法在视觉中的应用。他们研究如何从二维图像中恢复三维结构,如何利用多幅图像进行立体视觉(Stereo Vision)重建。这些研究为后来的运动恢复结构(Structure from Motion)和同时定位与地图构建(SLAM)等技术奠定了基础。
传统方法时代:特征工程与机器学习
进入20世纪90年代和21世纪前十年,计算机视觉研究进入了传统方法主导的时代。这一时期的研究主要依赖于人工设计的特征(Hand-crafted Features)和传统机器学习算法(Traditional Machine Learning Algorithms)。研究者们投入大量精力设计能够有效描述图像内容的特征描述子,并通过机器学习算法实现分类、检测等任务。
在这一时期,涌现出了许多具有重要影响力的特征描述子。尺度不变特征变换(Scale-Invariant Feature Transform, SIFT)由戴维·洛(David Lowe)在1999年提出,是计算机视觉领域最具影响力的特征描述子之一。SIFT特征具有尺度不变性(Scale Invariance)和旋转不变性(Rotation Invariance)的优良特性,能够在图像发生尺度变化和旋转的情况下保持稳定匹配。SIFT的工作原理可以概括为:首先在多尺度空间中检测极值点(Extrema Points)作为关键点,然后计算关键点周围的梯度方向直方图,最后生成一个128维的特征向量用于描述该关键点。这一特征描述子在图像匹配、目标识别、图像拼接等领域得到了广泛应用。
除了SIFT之外,这一时期还出现了加速鲁棒特征(Speeded-Up Robust Features, SURF)、方向梯度直方图(Histogram of Oriented Gradients, HOG)、局部二值模式(Local Binary Patterns, LBP)等众多特征描述子。研究者们根据不同的应用场景和性能需求,选择或组合使用这些特征。
在机器学习方面,支持向量机(Support Vector Machine, SVM)是这一时期最流行的分类算法之一。SVM通过寻找最优超平面来实现类别划分,在高维特征空间中表现出色。与SVM配合使用的是各种特征选择和特征融合技术,研究者们尝试从原始图像中提取最具判别力的特征组合,以提高分类或检测的性能。
滑动窗口(Sliding Window)和选择性搜索(Selective Search)等区域提议方法被广泛用于目标检测任务。其基本思路是:首先在图像上枚举大量候选窗口,然后提取每个窗口的特征,最后使用分类器判断该窗口是否包含目标物体。这种方法虽然简单直观,但存在计算效率低、窗口数量庞大、难以处理多尺度问题等缺点。
传统方法时代的计算机视觉研究积累了宝贵的经验和成果,为后来的深度学习革命奠定了重要基础。然而,这些方法的共同局限性在于:特征的设计需要大量领域知识和人工调参,难以泛化到新场景,且性能提升逐渐遇到瓶颈。
深度学习革命:从特征学习到端到端学习
2012年是计算机视觉发展史上具有划时代意义的年份。这一年,亚历克斯·克里泽夫斯基(Alex Krizhevsky)、伊利亚·苏茨克维(Ilya Sutskever)和杰弗里·辛顿(Geoffrey Hinton)在ImageNet大规模视觉识别挑战赛(ImageNet Large Scale Visual Recognition Challenge, ILSVRC)中提出了AlexNet模型,以显著的优势赢得了比赛冠军。
AlexNet是一个深度卷积神经网络(Deep Convolutional Neural Network),它在ImageNet数据集上达到了15.3%的Top-5错误率,比第二名低了10.9个百分点,这一结果震惊了整个计算机视觉社区。这一里程碑式的事件标志着深度学习(Deep Learning)时代的正式开启。
深度学习方法的核心创新在于端到端学习(End-to-End Learning)和特征自动学习(Automatic Feature Learning)。与传统的特征工程方法不同,深度卷积神经网络能够从原始像素数据中自动学习层次化的特征表示。网络的底层卷积层倾向于学习边缘、纹理等底层特征,而高层卷积层则能够学习更抽象的语义概念。这种层次化表示(Hierarchical Representation)能力使深度模型能够从数据中自动发现规律,避免了人工设计特征的繁琐过程。
在AlexNet之后,深度卷积神经网络在计算机视觉领域迅速占据了主导地位。2014年,视觉几何组(Visual Geometry Group, VGG)提出的VGGNet证明了增加网络深度可以提升性能;谷歌(Google)提出的GoogLeNet引入了Inception模块,实现了更高效的特征提取;2015年,微软亚洲研究院提出的ResNet引入了残差连接(Residual Connection)技术,成功解决了深层网络训练困难的问题,使网络深度可以达到152层甚至更深。这些网络架构的不断演进,极大地推动了计算机视觉技术的发展。
当代发展:从二维感知到三维理解
进入21世纪第三个十年,计算机视觉研究呈现出新的发展趋势。研究者们不再满足于二维图像的分析,而是开始关注三维视觉(3D Vision)、场景理解(Scene Understanding)、视频分析(Video Analysis)等更复杂、更全面的视觉感知问题。
Transformer架构的引入是近年来计算机视觉领域最重要的技术突破之一。2017年,谷歌的研究者提出了Transformer模型,最初用于自然语言处理领域。2020年,亚历克斯·多塞维茨基(Alexey Dosovitskiy)等人提出了Vision Transformer(ViT),首次将Transformer架构成功应用于图像分类任务。ViT将图像划分为固定大小的块(Patches),将这些块线性嵌入后作为序列输入Transformer编码器进行处理。实验结果表明,在大规模数据集上预训练后,ViT在图像分类任务上取得了与当时最好的卷积神经网络相当甚至更好的性能。
Transformer架构的引入为计算机视觉带来了新的可能性。基于Transformer的模型在目标检测(DETR)、图像分割(SETR)、图像生成(DiT)等多个任务上都取得了突破性进展。自注意力机制(Self-Attention Mechanism)使模型能够更好地捕获图像中不同区域之间的长距离依赖关系,这是传统卷积神经网络难以实现的能力。
与此同时,视觉-语言模型(Vision-Language Models)的发展代表了计算机视觉与自然语言处理深度融合的趋势。CLIP、GPT-4V等模型能够同时理解和处理图像与文本信息,实现了跨模态的感知能力。这些模型不再局限于单一视觉任务,而是能够回答关于图像的复杂问题、生成图像描述、甚至根据文本指令生成或编辑图像。
核心视觉任务解析
计算机视觉涵盖了丰富多样的视觉任务,每个任务都有其独特的研究问题、应用场景和技术挑战。理解这些核心任务的定义、原理和评价指标,对于全面把握计算机视觉学科具有重要意义。本节将重点介绍图像分类、目标检测和图像分割三大核心任务,并简要介绍其他重要的视觉任务。
图像分类
图像分类(Image Classification)是计算机视觉中最基础也是最重要的任务之一。它的目标是将整张图像划分到预定义的类别之一。简单来说,就是给图像“打标签”——告诉计算机“这张图片是什么”。图像分类是许多其他视觉任务的基础,理解图像的整体语义信息对于更高层的视觉理解至关重要。
图像分类任务可以根据类别数量的不同分为二分类(Binary Classification)和多分类(Multi-class Classification)。二分类问题只有两个类别,如判断一张图片是否包含猫咪。多分类问题则有多个互斥的类别,如将图片分类为猫、狗、鸟、汽车、飞机等 ImageNet 竞赛中的一千个类别。
根据训练数据的标注方式,图像分类还可以分为监督学习(Supervised Learning)、半监督学习(Semi-supervised Learning)和无监督学习(Unsupervised Learning)三种范式。监督学习使用完全标注的数据进行训练;半监督学习利用少量标注数据和大量未标注数据进行训练;无监督学习则完全不需要标注信息,旨在发现数据内部的隐含结构。
从技术发展的角度来看,图像分类模型经历了从传统机器学习到深度学习的重大转变。在深度学习时代,卷积神经网络(Convolutional Neural Network, CNN)成为图像分类的主导方法。典型的图像分类网络包括 LeNet、AlexNet、VGGNet、GoogLeNet、ResNet、EfficientNet 等,它们在网络架构上不断创新,在 ImageNet 数据集上的分类准确率也不断提升。2015年,ResNet 在 ImageNet 挑战赛中的 Top-5 错误率降至 3.6%,首次超越了人类的 5.1% 错误率,标志着图像分类问题在技术层面已基本得到解决。
目标检测
目标检测(Object Detection)是计算机视觉中另一个核心任务,它不仅要求识别图像中包含的物体类别,还要求定位(Localization)这些物体的具体位置。与图像分类只输出类别标签不同,目标检测需要输出物体的边界框(Bounding Box)和类别标签。
目标检测任务的输出通常包括:每个检测到的物体的类别标签、边界框的坐标(通常表示为左上角和右下角的坐标,或者中心点坐标和宽高)以及置信度分数。置信度分数表示模型对检测结果的置信程度,较高的分数意味着模型对该检测结果更有把握。
目标检测技术的发展经历了从两阶段检测器(Two-stage Detector)到单阶段检测器(One-stage Detector)的演变。两阶段检测器的代表性算法包括 R-CNN、Fast R-CNN、Faster R-CNN 等。这类方法首先通过区域提议网络(Region Proposal Network)生成候选区域,然后对每个候选区域进行分类和边界框回归。两阶段方法检测精度较高,但推理速度相对较慢。
单阶段检测器如 YOLO(You Only Look Once)、SSD(Single Shot MultiBox Detector)、 RetinaNet 等则直接在特征图上进行分类和边界框回归,无需单独的候选区域生成阶段。这种设计使单阶段检测器具有更快的推理速度,非常适合实时应用场景。YOLO系列是工业界应用最广泛的目标检测算法之一,从2016年首次提出至今已演进到 YOLOv8 版本,在速度和精度之间取得了很好的平衡。
锚框(Anchor Boxes)是目标检测中重要的概念。锚框是预定义的一组具有不同尺寸和长宽比的参考框,检测器在这些锚框的基础上进行微调以得到最终的检测结果。Anchor-free 检测器是近年来兴起的新方向,如 FCOS、CenterNet 等,它们不依赖预定义的锚框,而是通过关键点检测或其他方式直接预测边界框,简化了检测器的设计。
图像分割
图像分割(Image Segmentation)是将图像划分为多个具有语义意义的区域的任务。与目标检测使用边界框定位物体不同,图像分割精确到像素级别,为每个像素分配一个类别标签。根据分割的粒度和语义层次,图像分割可以分为语义分割(Semantic Segmentation)和实例分割(Instance Segmentation)两种主要类型。
语义分割要求对图像中的每个像素进行分类,确定其属于哪个物体类别或场景类别。例如,在自动驾驶场景中,语义分割需要将图像中的每个像素标记为道路、车辆、行人、建筑物、天空等类别。语义分割不区分同类物体的不同实例——如果图像中有两辆汽车,它们的像素会被标记为相同的“汽车”类别。
实例分割则在语义分割的基础上更进一步,需要区分同类物体的不同实例。对于上述两辆汽车的例子,实例分割不仅要正确标记出两辆汽车所属的像素,还要区分出哪个像素属于第一辆车、哪个像素属于第二辆车。实例分割结合了目标检测的实例区分能力和语义分割的像素级精度,是一项更具挑战性的任务。
全景分割(Panoptic Segmentat