计算机视觉导论与生态全景 / Introduction to Computer Vision and Ecosystem Overview
1 计算机视觉导论与生态全景
1.1 什么是计算机视觉
计算机视觉(Computer Vision,CV)是人工智能领域中最具挑战性且发展最为迅速的研究方向之一。它旨在让计算机能够“看懂”图像和视频,从二维像素矩阵中提取高层语义信息,进而完成识别、检测、分割、跟踪等复杂任务。简而言之,计算机视觉的目标是赋予机器类似于人类视觉系统的感知能力,使其能够理解和解释视觉世界。
理解计算机视觉的本质,需要将其与相邻领域进行区分。计算机视觉关注的是从图像或视频中提取有意义的视觉特征和语义信息,其核心问题是如何将二维的像素数据转化为可供决策使用的结构化知识。相比之下,图像处理主要研究如何对图像进行变换和增强,如滤波、锐化、色彩空间转换等操作,输出仍然是图像。计算机图形学则恰好相反,它研究如何从数学描述生成图像,如三维建模、渲染等技术。而模式识别是一个更广泛的概念,计算机视觉可以看作是模式识别理论在视觉领域的具体应用。
现代计算机视觉的发展受益于三个关键因素的交汇:深度学习算法的突破、大规模标注数据集的积累,以及GPU等并行计算硬件的进步。这三者缺一不可,共同推动了计算机视觉从学术研究走向工业应用的转变。正如本书将要详细阐述的,卷积神经网络(Convolutional Neural Networks,CNN)、YOLO系列目标检测器、以及各类图像分割算法,已经成为计算机视觉从业者必须掌握的核心工具。
1.2 发展历程:从边缘检测到视觉Transformer
1.2.1 传统计算机视觉时代
计算机视觉作为一个独立的研究领域,其历史可以追溯到1960年代。1966年,MIT的Marvin Minsky要求他的学生“用一个暑假的时间解决视觉问题”,虽然这个目标过于乐观,但它标志着计算机视觉作为一个研究领域的正式诞生。在随后的三十多年里,传统计算机视觉方法占据主导地位,研究者们主要依赖手工设计的特征和经典的机器学习算法。
这一时期的代表性工作包括:边缘检测(Edge Detection),如John Canny于1986年提出的Canny边缘检测算法,至今仍是图像预处理的重要步骤;角点检测(Corner Detection),如Harris角点检测器和后来的SIFT(Scale-Invariant Feature Transform)特征描述子;图像分割(Image Segmentation),如基于区域生长的分割方法、Mean Shift算法以及后来的Normalized Cuts。这些方法虽然在特定场景下表现出色,但普遍存在泛化能力差、鲁棒性不足的问题,难以应对复杂多变的现实世界。
传统的特征工程是这一时期的核心方法论。研究者需要深入理解图像的本质属性,设计出能够有效表达图像内容的特征表示。HOG(Histogram of Oriented Gradients)特征结合SVM分类器在人脸检测任务上取得了显著成功,成为当时工业应用的主流方案。然而,这种方法的局限性也很明显——特征的表达能力严重依赖于设计者的经验和领域知识,难以适应新任务和新场景。
1.2.2 深度学习的兴起与ImageNet竞赛
2012年可以被视为计算机视觉发展的分水岭。在这一年举行的ImageNet大规模视觉识别挑战赛(ILSVRC)中,Alex Krizhevsky等人提出的AlexNet以显著优势夺得冠军,将top-5错误率从上一年的26%降低到15%,这一突破性成果彻底改变了领域的发展方向。AlexNet的成功主要归功于三个因素:采用ReLU激活函数加速收敛、使用Dropout正则化防止过拟合、以及利用GPU进行高效训练。
AlexNet的架构设计具有深远影响。它包含5个卷积层和3个全连接层,采用了今天已成为标准做法的数据增强技术。卷积层通过局部连接和权重共享大幅减少了参数数量,同时能够有效提取图像的空间层次特征。这一时期另一个里程碑式的工作是2013年提出的OverFeat,它首次系统性地探索了用卷积网络同时解决分类、定位和检测三个任务的统一框架。
随后的几年里,深度卷积网络经历了快速迭代。VGGNet(2014)通过堆叠3×3小卷积核证明了网络深度的重要性;GoogLeNet(2014)引入Inception模块,利用多尺度卷积并行提取特征;ResNet(2015)提出的残差连接(Residual Connection)解决了深层网络训练困难的问题,使得网络可以安全地扩展到152层甚至更深。这些架构创新不断刷新ImageNet竞赛的记录,最终在2017年,SENet将top-5错误率降至2.25%,已经低于人类平均表现(约5%)。
ImageNet竞赛的意义不仅在于推动了深度学习在视觉领域的应用,更在于它建立了一个标准化的基准测试环境,使得不同方法可以在统一、公平的条件下进行比较。这种benchmark文化深刻影响了后续计算机视觉研究的发展模式。
1.2.3 从分类到检测与分割的演进
深度学习在图像分类任务上的成功很快蔓延到其他视觉任务。2014年,Ross Girshick等人提出了R-CNN(Regions with CNN features),开创了将深度卷积网络应用于目标检测的先河。R-CNN采用选择性搜索(Selective Search)生成候选区域,然后对每个区域使用CNN提取特征,最后通过SVM分类器进行类别判断。尽管开创性意义重大,R-CNN的检测速度极慢,无法满足实时应用需求。
为了解决效率问题,研究者们相继提出了Fast R-CNN、Faster R-CNN等改进版本。Faster R-CNN引入区域提议网络(Region Proposal Network,RPN),实现了端到端的检测流程,兼顾了准确性和效率。然而,这类两阶段检测器(Two-Stage Detector)的固有结构限制了其速度上限。
2016年,Joseph Redmon等人提出了YOLO(You Only Look Once),将目标检测重新定义为一个单次回归问题。YOLO的核心思想是将输入图像划分为S×S网格,每个网格预测固定数量的边界框及其置信度。YOLO v1在保证较高检测精度的同时实现了极快的推理速度(可达45-155 FPS),为实时目标检测应用开辟了新道路。随后,YOLO系列经历了多次迭代升级,从YOLO v2的anchor机制优化、YOLO v3的多尺度预测,到YOLO v4的工程化改进,再到YOLO v5的工程友好实现,直至最新的YOLOv8和YOLOX等高性能变体,YOLO已成为工业界最受欢迎的目标检测框架。
与此同时,语义分割领域也经历了从传统方法到深度学习的转变。2015年,Jonathan Long等人提出的FCN(Fully Convolutional Network)首次将ImageNet预训练的分类网络转换为全卷积网络用于语义分割。FCN通过反卷积(转置卷积)上采样恢复空间分辨率,支持任意尺寸输入。FCN的成功启发了大量后续工作,包括SegNet的编码器-解码器结构、U-Net的跳跃连接设计、DeepLab系列引入的空洞卷积(Atrous/Dilated Convolution)和ASPP(Atrous Spatial Pyramid Pooling)模块,以及PSPNet的场景解析金字塔池化策略。
1.2.4 实例分割与全景分割
在语义分割基础上,计算机视觉研究进一步细分出实例分割(Instance Segmentation)和全景分割(Panoptic Segmentation)两个更具挑战性的任务。实例分割不仅需要区分不同类别,还要区分同一类别的不同个体实例。2017年,Kaiming He等人提出的Mask R-CNN在Faster R-CNN基础上增加了一个并行分支预测每个实例的分割掩码,实现了同时进行目标检测和实例分割的统一框架。Mask R-CNN的简洁设计和优异性能使其迅速成为实例分割的主流 baseline。
全景分割由Kirillov等人于2019年提出,旨在统一语义分割和实例分割两种任务,为图像中的每个像素分配一个语义标签和一个实例ID。全景分割的挑战在于同时处理“things”(可计数目标,如人、车)和“stuff”(不可数背景,如天空、草地)两类像素。这一任务的提出反映了计算机视觉向更统一、更完整视觉理解方向发展的趋势。
1.2.5 Transformer时代的计算机视觉
2017年,Vaswani等人提出了Transformer架构,最初用于自然语言处理(NLP)领域。Transformer通过自注意力机制(Self-Attention)建模序列中任意位置之间的依赖关系,绕过了RNN的序列依赖限制。2020年,Vision Transformer(ViT)的提出标志着Transformer正式进入计算机视觉领域。ViT将图像分割为固定大小的patches,将每个patch视为一个“token”,然后用标准Transformer编码器处理这些patch序列。实验表明,当在大规模数据集(如JFT-300M)上预训练时,ViT可以在图像分类任务上取得与CNN相当甚至更好的性能。
Transformer在视觉领域的成功迅速扩展到检测和分割任务。DETR(Detection Transformer)首次展示了基于Transformer的端到端目标检测框架,消除了对NMS(非极大值抑制)和anchor机制的需求。后续的Deformable DETR、DAB-DETR等改进进一步提升了Transformer检测器的性能和收敛速度。在分割领域,SETR、SegFormer、Mask2Former等模型将Transformer的优势带入语义分割和全景分割任务,取得了显著进展。
2021年,OpenAI发布的CLIP(Contrastive Language-Image Pre-training)和DALL-E展示了大规模视觉-语言预训练的潜力。CLIP通过对比学习在4亿个图像-文本对上进行预训练,学习了丰富的多模态表示,可以零样本迁移到各种下游任务。CLIP的成功证明了视觉模型可以从自然语言监督中学习到强大的通用特征,为“视觉基础模型”(Vision Foundation Model)的研究开辟了新方向。
2023年以来,大型多模态模型(Large Multimodal Models,LMM)成为研究热点。GPT-4V、Gemini、LLaVA等模型展示了视觉理解与大型语言模型结合的可能性,可以处理复杂的视觉问答、图像描述等任务。这些发展预示着计算机视觉正在从专门化的任务模型向通用视觉智能的方向演进。
```mermaid graph TB A[计算机视觉发展历程] --> B[传统方法时代<br/>1966-2011] A --> C[深度学习时代<br/>2012-2019] A --> D[Transformer时代<br/>2020-至今]
B --> B1[边缘检测<br/>角点检测<br/>SIFT/HOG特征]
C --> C1[CNN复兴] C1 --> C2[分类: AlexNet → ResNet] C1 --> C3[检测: RCNN → YOLO] C1 --> C4[分割: FCN → U-Net → Mask R-CNN]
D --> D1[ViT → Swin Transformer] D --> D2[DETR → Deformable DETR] D --> D3[CLIP → 多模态大模型] ```
1.3 核心任务与技术体系
1.3.1 图像分类
图像分类(Image Classification)是计算机视觉中最基础的任务,其目标是判断整张图像所属的类别。根据分类类别的数量,可以分为二分类(Binary Classification)、多分类(Multi-class Classification)和多标签分类(Multi-label Classification)。二分类问题判断图像是否属于某一特定类别,如判断图片中是否包含猫;多分类问题从预定义的类别集合中选择一个正确答案,如识别ImageNet的1000个类别;多标签分类则允许图像同时属于多个类别,如一张图片可能同时包含“天空”和“建筑物”。
图像分类的关键挑战在于类内差异大(intra-class variation)和类间差异小(inter-class similarity)。同一类别的物体可能因视角、光照、尺度、遮挡等因素呈现巨大差异,而不同类别的物体有时又非常相似。深度卷积网络通过层次化的特征学习能够有效应对这些挑战:浅层网络学习边缘、纹理等低级特征,深层网络逐渐抽象出部件、物体等高级语义特征。
现代图像分类模型的设计遵循几个重要原则。首先是深度原则,ResNet证明增加网络深度可以提升特征表达能力,EfficientNet进一步通过复合缩放(compound scaling)平衡网络宽度、深度和分辨率。其次是注意力机制,SENet、CBAM等模块通过通道注意力和空间注意力增强特征表示。再次是Transformer架构,ViT及其变体证明了自注意力机制在视觉任务中的有效性。最后是预训练-微调范式,在大规模数据上预训练的模型可以通过少量数据微调适应新任务。
1.3.2 目标检测
目标检测(Object Detection)不仅要识别图像中的物体类别,还要定位它们的位置,用边界框(Bounding Box)表示。相比图像分类,目标检测面临两个核心挑战:物体可能出现在图像任意位置(位置不确定性),且图像中包含的物体数量是未知的(数量不确定性)。
目标检测算法可以按照检测流程分为两阶段(Two-Stage)和单阶段(One-Stage)两大类。两阶段检测器首先生成高质量的候选区域(Region Proposal),然后对每个候选区域进行分类和边界框回归。代表性工作包括R-CNN系列:R-CNN通过选择性搜索生成约2000个候选区域;Fast R-CNN引入RoI Pooling实现特征共享,大幅加速;Faster R-CNN引入RPN实现端到端训练;Mask R-CNN进一步增加实例分割分支。两阶段方法检测精度高,但速度相对较慢。
单阶段检测器直接在特征图上预测类别和位置,不需要单独的候选区域生成阶段。YOLO系列将图像划分为网格,直接预测边界框和类别概率,实现了极高的检测速度。SSD(Single Shot MultiBox Detector)采用多尺度特征图预测,同时检测大小不同的物体。RetinaNet通过Focal Loss解决正负样本不平衡问题,在保证速度的同时提升了检测精度。
目标检测中的另一个重要概念是Anchor机制。Anchor是预定义的参考框,具有不同的尺度和长宽比。检测器在Anchor基础上预测偏移量,从而获得精确的边界框。YOLO v2引入的Dimension Clusters和YOLO v3的多尺度Anchor都是Anchor机制的典型应用。Anchor-free检测器如CornerNet、CenterNet、FCOS等另辟蹊径,通过预测关键点或中心点来定位物体,简化了检测流程。
1.3.3 语义分割
语义分割(Semantic Segmentation)为图像中每个像素分配一个类别标签,实现像素级别的密集预测。与目标检测输出边界框不同,语义分割输出与输入图像尺寸相同的分割掩码,精确描绘每个物体类别的覆盖区域。
语义分割网络通常采用编码器-解码器(Encoder-Decoder)结构。编码器通过卷积和池化操作逐步提取特征、降低分辨率;解码器通过上采样操作恢复空间分辨率,同时融合编码器中的多尺度特征。FCN首先提出这种结构,通过反卷积将低分辨率特征图上采样到原始尺寸。U-Net在此基础上增加了跳跃连接(Skip Connections),将编码器对应层级的特征直接传递到解码器,有效保留了细节信息。SegNet采用编码器池化索引指导解码器上采样,减少参数量。
空洞卷积(Atrous Convolution)是语义分割中常用的技术。通过在卷积核中插入空洞(zeros),在不增加参数数量的情况下扩大感受野。DeepLab系列提出的ASPP模块利用多个并行空洞卷积捕获多尺度上下文信息。空洞卷积还可以级联使用,如DeepLab v2的串联ASPP结构。
上下文信息对于语义分割至关重要。PSPNet提出的PPM(Pyramid Pooling Module)通过不同尺度的全局池化聚合全局上下文。Non-local Networks将自注意力机制引入分割任务,建立像素间的长程依赖关系。OCRNet(Object-Contextual Representation)显式建模像素与物体区域之间的关系,提升分割一致性。
1.3.4 实例分割
实例分割(Instance Segmentation)需要同时完成两项任务:区分图像中不同个体实例,以及为每个实例生成精确的像素级掩码。这比语义分割更具挑战性,因为同一类别的不同实例需要被分别识别和分割。
主流实例分割方法可分为三大类。基于检测的方法(Detection-based)以Mask R-CNN为代表,先检测物体的边界框,然后在每个RoI内生成分割掩码。这类方法继承了目标检测框架的优势,但在重叠实例和小物体检测上表现不佳。基于分割的方法(Segmentation-based)先进行语义分割,再通过像素分组或聚类将同一实例的像素聚合在一起。PolarMask将实例分割建模为极坐标下的轮廓预测问题。混合方法结合检测和分割的优点,如BlendMask在检测分支预测低分辨率掩码,在分割分支预测注意力图,实现高效高质的实例分割。
SOLO(Segmenting Objects by Locations)和CondInst等方法探索了anchor-free实例分割的可能性。SOLO的核心思想是将实例分割重新定义为位置预测问题:为每个位置预测对应的实例掩码,从而避免了检测框架的依赖。这种方法简化了流水线,提高了推理效率。
1.3.5 全景分割
全景分割(Panoptic Segmentation)由Kirillov等人于2019年正式定义,旨在为图像中的每个像素提供两类信息:语义标签(是什么)和实例标签(哪个实例)。全景分割统一了语义分割和实例分割,处理的类别分为things(可数物体,如人、狗、汽车,有明确边界)和stuff(背景材质,如天空、墙面、草地,无固定形状)。
全景分割的评估指标是全景质量(Panoptic Quality,PQ),定义为:
$$PQ = \frac{\sum_{p