目录

第十一章 计算机视觉

1. 概念定义与原理讲解

1.1 计算机视觉概述

什么是计算机视觉

计算机视觉(Computer Vision, CV)是人工智能的一个重要分支,旨在使计算机能够从图像或多维数据中“理解”视觉世界。其核心任务包括:

  1. 从数字图像中提取有意义的信息
  2. 理解场景的内容和结构
  3. 做出基于视觉信息的决策

计算机视觉与人类视觉

人类视觉系统的特点:

  1. 并行处理大量信息
  2. 具有先验知识和推理能力
  3. 对光照、视角变化具有鲁棒性
  4. 可以处理模糊和不完整的输入

计算机视觉的挑战:

  1. 从2D图像恢复3D信息是病态问题
  2. 光照、遮挡、形变等因素增加复杂性
  3. 需要大量数据学习视觉概念

计算机视觉的主要任务

1. 图像分类:给整张图像打标签

2. 目标检测:定位并识别图像中的物体

3. 语义分割:像素级别的类别标注

4. 实例分割:区分同一类别的不同实例

5. 目标跟踪:追踪视频中的目标

6. 图像生成:创造新的图像

7. 图像恢复:去噪、超分辨率、去模糊

1.2 图像分类

1.2.1 经典网络架构演进

LeNet(1998)

  1. 首个成功的卷积神经网络
  2. 5层结构:2个卷积层 + 3个全连接层
  3. 应用于手写数字识别(MNIST)
  4. 奠定了CNN的基础架构

AlexNet(2012)

  1. 深度学习的里程碑
  2. 8层网络,首次使用ReLU和Dropout
  3. GPU加速训练,大规模数据(ImageNet)
  4. 错误率比传统方法降低10%以上

VGGNet(2014)

  1. 探索网络深度的影响
  2. 使用更小的3×3卷积核替代大卷积核
  3. VGG-16和VGG-19成为标准架构
  4. 证明深度是提升性能的关键因素

ResNet(2015)

  1. 引入残差连接解决梯度消失
  2. 可以训练超过100层的深层网络
  3. ResNet-152在ImageNet上取得突破性成果
  4. 成为后续网络的标配组件

EfficientNet(2019)

  1. 系统研究网络的深度、宽度、分辨率平衡
  2. 使用复合系数统一缩放三个维度
  3. 在精度和效率之间取得最佳平衡

1.2.2 图像分类的核心技术

数据增强

  1. 几何变换:翻转、旋转、裁剪、缩放
  2. 颜色变换:亮度、对比度、色调调整
  3. 高级增强:Mixup、CutMix、AutoAugment

正则化技术

  1. Dropout:随机丢弃神经元
  2. Batch Normalization:批归一化
  3. Label Smoothing:标签平滑
  4. Stochastic Depth:随机深度

迁移学习

  1. 在大规模数据集(ImageNet)上预训练
  2. 在目标任务上微调
  3. 小样本场景下的有效策略

1.3 目标检测

1.3.1 目标检测的任务定义

目标检测需要同时解决两个子问题:

1. 定位:确定物体的位置(边界框)

2. 分类:确定物体的类别

输出格式:$(x, y, w, h, class, confidence)$

  1. $(x, y)$:边界框中心坐标
  2. $(w, h)$:边界框宽度和高度
  3. $class$:物体类别
  4. $confidence$:置信度

1.3.2 两阶段检测器

R-CNN系列

R-CNN(2014)

1. 使用Selective Search生成候选区域(约2000个)

2. 每个候选区域缩放到固定尺寸

3. 使用CNN提取特征

4. SVM分类 + 边界框回归

局限性:每个候选区域单独前向传播,速度极慢。

Fast R-CNN(2015)

1. 整张图像输入CNN得到特征图

2. ROI Pooling从特征图提取候选区域特征

3. 全连接层同时进行分类和回归

改进:共享卷积计算,显著提速。

Faster R-CNN(2015)

1. 引入区域提议网络(RPN)替代Selective Search

2. RPN与检测网络共享特征

3. 端到端训练

特点:首个接近实时的两阶段检测器。

1.3.3 单阶段检测器

YOLO(You Only Look Once)

  1. 将检测视为回归问题
  2. 图像划分为$S \times S$网格
  3. 每个网格预测$B$个边界框和类别概率
  4. 单次前向传播完成检测和分类

优点:速度快,适合实时应用

缺点:小目标和密集目标检测效果较差

YOLO演进

  1. YOLOv2/v3:引入Batch Norm、Anchor Box、多尺度预测
  2. YOLOv4/v5:各种优化技巧的组合
  3. YOLOv8:Anchor-Free、解耦头、CIOU Loss

SSD(Single Shot MultiBox Detector)

  1. 多尺度特征图预测
  2. 使用不同尺度和长宽比的默认框(Default Boxes)
  3. 在多个层同时进行检测

RetinaNet

  1. 引入Focal Loss解决正负样本不平衡
  2. Focal Loss降低易分样本的权重,聚焦难分样本

1.3.4 Anchor-Free检测器

传统方法依赖预定义的Anchor Box,存在超参数敏感问题。

CenterNet

  1. 将目标表示为中心点
  2. 预测中心点偏移、尺寸、方向等
  3. 无需NMS后处理

FCOS(Fully Convolutional One-Stage)

  1. 逐像素预测
  2. 引入中心度(Center-ness)抑制低质量预测
  3. 完全避免Anchor相关计算

1.4 语义分割与实例分割

1.4.1 语义分割

为图像中每个像素分配类别标签。

FCN(Fully Convolutional Network)

  1. 首个端到端分割网络
  2. 将全连接层替换为卷积层
  3. 使用转置卷积(上采样)恢复分辨率
  4. 跳跃连接融合不同层次特征

U-Net

  1. 编码器-解码器结构
  2. 跳跃连接保留空间细节
  3. 在医学图像分割中广泛应用

DeepLab系列

空洞卷积(Atrous/Dilated Convolution)

  1. 在卷积核中插入空洞
  2. 扩大感受野而不增加参数
  3. 保留高分辨率特征图

ASPP(Atrous Spatial Pyramid Pooling)

  1. 使用不同空洞率的并行卷积
  2. 捕获多尺度上下文

PSPNet(Pyramid Scene Parsing Network)

  1. 金字塔池化模块
  2. 聚合不同区域的上下文

1.4.2 实例分割

同时完成检测和分割,区分同一类别的不同实例。

Mask R-CNN

  1. 在Faster R-CNN基础上增加Mask分支
  2. ROI Align替代ROI Pooling,解决量化误差
  3. 同时输出类别、边界框、分割掩码

PANet(Path Aggregation Network)

  1. 增强信息传播路径
  2. 自适应特征池化

SOLO(Segmenting Objects by Locations)

  1. 将实例分割转化为位置分类
  2. 引入坐标卷积(CoordConv)

1.5 目标跟踪

1.5.1 目标跟踪的任务定义

给定视频第一帧中目标的位置,在后续帧中持续定位该目标。

主要挑战

  1. 遮挡、形变、尺度变化
  2. 光照变化、运动模糊
  3. 相似物体干扰
  4. 实时性要求

1.5.2 跟踪算法分类

基于相关滤波的跟踪

  1. MOSSE、KCF、CSR-DCF
  2. 利用循环矩阵性质加速训练
  3. 速度快,但精度有限

基于Siamese网络的跟踪

  1. SiamFC、SiamRPN、SiamMask
  2. 孪生网络提取模板和搜索区域的特征
  3. 相关操作定位目标
  4. 端到端训练,精度高

基于Transformer的跟踪

  1. TransT、STARK、MixFormer
  2. 利用自注意力和交叉注意力建模模板与搜索区域关系
  3. 当前SOTA方法

1.6 视觉Transformer

1.6.1 从CNN到ViT

CNN在计算机视觉中的局限:

  1. 局部感受野限制长距离建模
  2. 平移等变性可能不是最佳选择
  3. 需要大量归纳偏置

Transformer在NLP的成功启发了视觉领域的探索。

ViT(Vision Transformer)

图像分块(Patch Embedding)

  1. 将图像分割为固定大小的patch(如16×16)
  2. 每个patch展平并线性投影为向量
  3. 加入位置编码

Transformer编码器

  1. 标准的多头自注意力 + MLP结构
  2. 在大规模数据集上预训练
  3. 在下游任务上微调

1.6.2 ViT的关键发现

归纳偏置的权衡

  1. CNN具有局部性、平移等变性等归纳偏置
  2. ViT依赖自注意力学习空间关系
  3. 在小数据集上CNN更好,在大数据集上ViT可以超越

数据规模的重要性

  1. ViT需要大规模数据(如JFT-300M)预训练
  2. 在ImageNet上从头训练效果不如ResNet

1.6.3 ViT的改进变体

DeiT(Data-efficient Image Transformer)

  1. 使用知识蒸馏从CNN迁移知识
  2. 在ImageNet上从头训练即可达到好效果

Swin Transformer

  1. 层次化金字塔结构
  2. 移位窗口(Shifted Window)自注意力
  3. 线性复杂度,适合高分辨率图像

PVT(Pyramid Vision Transformer)

  1. 金字塔结构降低计算复杂度
  2. 空间缩减注意力(Spatial Reduction Attention)

1.7 自监督学习与对比学习

1.7.1 自监督学习的动机

标注数据昂贵且耗时,如何利用海量无标注数据?

自监督学习通过设计预训练任务,从无标注数据学习有用表示。

1.7.2 对比学习

核心思想:学习使相似样本接近、不相似样本远离的表示。

SimCLR

1. 对每个样本生成两个增强视图

2. 使用同一网络编码两个视图

3. 最大化同一样本不同视图的相似度

4. 最小化不同样本的相似度

InfoNCE Loss

$$\mathcal{L} = -\log \frac{\exp(sim(z_i, z_j)/\tau)}{\sum_{k} \exp(sim(z_i, z_k)/\tau)}$$

其中$z_i, z_j$是正样本对,$\tau$是温度系数。

MoCo(Momentum Contrast)

  1. 使用动量编码器维护动态字典
  2. 解决大批量训练的需求
  3. 引入队列存储负样本

BYOL和SimSiam

  1. 无需负样本的对比学习
  2. 使用非对称结构防止平凡解
  3. 在线网络和目标网络

1.7.3 掩码图像建模(Masked Image Modeling)

受BERT启发,在图像上进行掩码预测。

BEiT

  1. 使用离散VAE将图像转换为视觉token
  2. 掩码部分patch,预测离散token

MAE(Masked Autoencoder)

  1. 高掩码率(75%)
  2. 非对称编码器-解码器
  3. 仅编码可见patch,解码器重建完整图像

1.7.4 自监督学习的应用

  1. 预训练后微调下游任务
  2. 数据高效的迁移学习
  3. 特征表示的可视化和分析

1.8 生成式视觉模型

1.8.1 图像生成

VAE和GAN

  1. 生成高质量图像
  2. 支持条件生成(类别、文本、草图)

扩散模型

  1. DDPM、Stable Diffusion
  2. 逐步去噪生成图像
  3. 当前最高质量的生成方法

1.8.2 文本到图像生成

DALL-E / DALL-E 2

  1. GPT风格的文本编码
  2. 自回归或扩散模型生成图像

Stable Diffusion

  1. 在潜在空间进行扩散
  2. 大幅降低计算成本
  3. 开源,社区生态丰富

ControlNet

  1. 在扩散模型上添加条件控制
  2. 支持边缘、姿态、深度等多种条件

1.8.3 神经辐射场(NeRF)

从多视角图像学习场景的隐式3D表示:

$$\mathbf{c}, \sigma = \text{MLP}(\mathbf{x}, \mathbf{d})$$

其中$\mathbf{x}$是3D坐标,$\mathbf{d}$是视角方向,输出颜色$\mathbf{c}$和体密度$\sigma$。

通过体渲染合成新视角图像。

应用:3D重建、新视角合成、3D内容生成

2. 例题分析

例题1:目标检测IoU计算

题目:给定两个边界框:

  1. Box A:左上角$(0, 0)$,右下角$(4, 4)$
  2. Box B:左上角$(2, 2)$,右下角$(6, 6)$

计算IoU(Intersection over Union)。

分析过程

步骤1:确定边界框参数

Box A:

  1. 左下角:$(0, 0)$
  2. 右上角:$(4, 4)$
  3. 宽度:$w_A = 4$,高度:$h_A = 4$
  4. 面积:$Area_A = 4 \times 4 = 16$

Box B:

  1. 左下角:$(2, 2)$
  2. 右上角:$(6, 6)$
  3. 宽度:$w_B = 4$,高度:$h_B = 4$
  4. 面积:$Area_B = 4 \times 4 = 16$

步骤2:计算交集区域

交集的左下角:

  1. $x_1 = \max(0, 2) = 2$
  2. $y_1 = \max(0, 2) = 2$

交集的右上角:

  1. $x_2 = \min(4, 6) = 4$
  2. $y_2 = \min(4, 6) = 4$

交集宽度:$w_{inter} = x_2 - x_1 = 4 - 2 = 2$

交集高度:$h_{inter} = y_2 - y_1 = 4 - 2 = 2$

交集面积:

$$Area_{inter} = 2 \times 2 = 4$$

步骤3:计算并集面积

$$Area_{union} = Area_A + Area_B - Area_{inter}$$

$$= 16 + 16 - 4 = 28$$

步骤4:计算IoU

$$IoU = \frac{Area_{inter}}{Area_{union}} = \frac{4}{28} = \frac{1}{7} \approx 0.143$$

结论:两个边界框的IoU约为0.143(14.3%)。

分析

  1. IoU是目标检测中评估定位精度的重要指标
  2. 通常IoU阈值设为0.5判断正负样本
  3. 此例中IoU较低,说明两个框重叠较少

例题2:语义分割上采样计算

题目:语义分割网络输出特征图尺寸为$8 \times 8$,类别数为21。需要上采样到原始图像尺寸$256 \times 256$。使用双线性插值和1×1卷积,计算输出尺寸和参数数量。

分析过程

步骤1:1×1卷积调整通道数

输入特征图:$8 \times 8 \times C$(假设$C$为通道数)

1×1卷积将通道数映射到类别数:

  1. 权重尺寸:$1 \times 1 \times C \times 21$
  2. 输出:$8 \times 8 \times 21$
  3. 参数数量:$1 \times 1 \times C \times 21 = 21C$

步骤2:双线性插值上采样

上采样因子:$256 / 8 = 32$

使用双线性插值将$8 \times 8$上采样到$256 \times 256$:

  1. 输出尺寸:$256 \times 256 \times 21$
  2. 双线性插值是确定性的,无需学习参数

步骤3:最终输出

对每个空间位置,21个通道对应21个类别的概率(经过softmax)。

尺寸总结

  1. 输入:$8 \times 8 \times C$
  2. 1×1卷积后:$8 \times 8 \times 21$
  3. 上采样后:$256 \times 256 \times 21$

参数总结

  1. 1×1卷积参数:$21C$
  2. 上采样层参数:0

分析

  1. 1×1卷积用于将特征映射到类别空间
  2. 上采样恢复空间分辨率
  3. 可以调换顺序:先上采样再1×1卷积,但计算量更大

例题3:ViT的patch嵌入计算

题目:ViT处理$224 \times 224$的图像,patch大小为$16 \times 16$,嵌入维度为768。计算:

1. patch数量

2. patch嵌入后的序列长度

3. 可学习的线性投影参数数量

分析过程

步骤1:计算patch数量

图像尺寸:$224 \times 224$

Patch尺寸:$16 \times 16$

每行的patch数:$224 / 16 = 14$

每列的patch数:$224 / 16 = 14$

总patch数:$14 \times 14 = 196$

步骤2:序列长度

每个patch展平后:$16 \times 16 \times 3 = 768$(假设RGB图像)

经过线性投影到768维后,每个patch对应一个768维的向量。

序列长度 = patch数 + 1(类别token)= 197

步骤3:线性投影参数

输入维度:$16 \times 16 \times 3 = 768$

输出维度:$768$

线性投影矩阵:$768 \times 768$

偏置向量:$768$

总参数:$768 \times 768 + 768 = 589,824 + 768 = 590,592$

步骤4:位置编码参数

可学习的位置编码:$197 \times 768 = 151,296$参数

总结

  1. Patch数量:196
  2. 序列长度:197(含类别token)
  3. Patch嵌入参数:590,592
  4. 位置编码参数:151,296

分析

  1. ViT将图像转化为类似NLP的序列
  2. 计算复杂度高($O(n^2)$的自注意力)
  3. 需要大规模数据预训练

3. 训练题

一、选择题

1. Faster R-CNN中的RPN的作用是:

 A. 提取特征
 B. 生成区域提议
 C. 分类物体
 D. 分割实例

2. YOLO属于什么类型的检测器?

 A. 两阶段检测器
 B. 单阶段检测器
 C. 实例分割方法
 D. 目标跟踪方法

3. U-Net的跳跃连接主要用于:

 A. 加速训练
 B. 保留空间细节
 C. 减少参数量
 D. 增加深度

4. ViT将图像分割为16×16的patch,输入$224 \times 224$图像会产生多少个patch?

 A. 14
 B. 196
 C. 224
 D. 768

5. 对比学习中,InfoNCE损失的目标是:

 A. 最大化正样本对相似度,最小化负样本对相似度
 B. 最小化所有样本对的相似度
 C. 最大化所有样本对的相似度
 D. 保持所有样本对的相似度不变

二、填空题

6. 目标检测需要同时解决$\_\_\_\_$和$\_\_\_\_$两个子问题。

7. IoU的全称是$\_\_\_\_$,用于评估边界框的重叠程度。

8. ResNet通过引入$\_\_\_\_$连接解决了深层网络的梯度消失问题。

9. 语义分割为图像中每个$\_\_\_\_$分配类别标签。

10. MAE(Masked Autoencoder)采用$\_\_\_\_$%的掩码率。

三、计算题

11. Box A:$(0,0,4,4)$,Box B:$(3,3,7,7)$(格式:$x,y,w,h$)。计算IoU。

12. 特征图尺寸$16 \times 16$,通过$3 \times 3$空洞卷积(dilation=2, padding=2),计算输出尺寸。

13. ViT处理$384 \times 384$图像,patch大小为$16 \times 16$,计算patch数量。

4. 答案与解析

一、选择题答案:

1. 答案:B

 解析:RPN(Region Proposal Network)用于生成候选区域提议,替代传统的Selective Search。

2. 答案:B

 解析:YOLO是单阶段检测器,直接预测边界框和类别,速度快。

3. 答案:B

 解析:U-Net的跳跃连接将编码器的低层特征直接传递到解码器,保留空间细节。

4. 答案:B

解析:$(224/16) \times (224/16) = 14 \times 14 = 196$个patch。

5. 答案:A

 解析:对比学习通过拉近正样本对、推远负样本对来学习有用表示。

二、填空题答案:

6. 答案:定位;分类

 解析:目标检测需要定位物体位置并分类物体类别。

7. 答案:Intersection over Union

 解析:IoU = 交集面积 / 并集面积。

8. 答案:残差(或Residual,或skip connection)

 解析:残差连接允许梯度直接传播,解决梯度消失。

9. 答案:像素

 解析:语义分割是像素级别的分类任务。

10. 答案:75(或75%)

  解析:MAE采用高掩码率75%,迫使模型学习强特征表示。

三、计算题答案:

11. 解答:

Box A:$(0, 0)$到$(4, 4)$,面积$= 4 \times 4 = 16$

Box B:$(3, 3)$到$(7, 7)$,面积$= 4 \times 4 = 16$

交集:

  1. 左下角:$(\max(0,3), \max(0,3)) = (3, 3)$
  2. 右上角:$(\min(4,7), \min(4,7)) = (4, 4)$
  3. 宽度:$4 - 3 = 1$
  4. 高度:$4 - 3 = 1$
  5. 交集面积:$1 \times 1 = 1$

并集:$16 + 16 - 1 = 31$

IoU:$1/31 \approx 0.032$

12. 解答:

空洞卷积有效核大小:$k_{effective} = k + (k-1)(d-1) = 3 + 2 \times 1 = 5$

输出尺寸公式:$H_{out} = \lfloor(H_{in} + 2p - k_{effective})/s\rfloor + 1$

假设stride=1:

$H_{out} = (16 + 2 \times 2 - 5)/1 + 1 = 16 + 4 - 5 + 1 = 16$

输出尺寸:$16 \times 16$

13. 解答:

$(384/16) \times (384/16) = 24 \times 24 = 576$

共576个patch。