Keyboard shortcuts

Press ← or → to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

第 3 讲导览 · 深度计算机视觉

这一讲要解决的真实问题

把一张图喂给第 1 讲的 MLP,会发生什么?224×224×3224\times224\times3 的图像展平后有 150,528150{,}528 个数,接一层 10001000 维隐层就是约 1.5 亿个参数;更糟的是,展平把二维的像素网格拉成一维向量,「谁挨着谁」这个信息只以「下标差」的形式隐式保留,网络必须为每个位置单独学一遍同样的图案。这就是参数爆炸与无视空间结构这两宗罪。

卷积的答案是把「图像该长什么样」这个先验写进结构:局部连接(每个输出只与一个小邻域相连)、权值共享(同一个核在全图滑动)、以及由此推得的平移等变。这三条合称卷积的归纳偏置,它们把参数量压到与图像尺寸无关(下降三到四个数量级),也让「学会一个图案」不必再重复几百遍。代价是:当这个先验不成立时(比如位置本身携带语义),卷积会吃亏——归纳偏置是条件性的工具,不是免费的午餐。

本讲的叙述线是一条障碍升级链:

  1. 卷积怎么算(3.2–3.3):把「核在图上滑动」写成精确公式,把尺寸、参数量、感受野、池化、归一化逐项算清。这一部分的目标是让你获得不依赖代码的形状推演能力——它决定了你排错的速度。
  2. 怎么堆(3.4):AlexNet 证明了深度 CNN 可训(靠的是一整套配方),VGG 用「小核堆叠 + 结构规整」把深度变成可研究的变量,ResNet 遇到并解决了退化问题(更深反而训练误差更高——不是过拟合),手段是残差连接:它让恒等映射变便宜、让梯度有一条直通的路。
  3. 能不能不用卷积(3.5):ViT 把图像切成 patch 当 token 序列,用注意力替代卷积。它成功了,但带着两个条件——需要大量数据(弱先验换大假设空间),以及计算量随分辨率快速上升。Swin 用窗口注意力与层次化找回效率与多尺度输出;ConvNeXt 用一次控制变量实验说明「卷积 vs 注意力」的胜负很大程度取决于训练配方与微观设计。
  4. 怎么不用标签也训好(3.6):迁移学习是工程默认起点(先冻结、再逐步解冻);自监督预训练把监督信号换成数据自身的结构——对比学习(InfoNCE / SimCLR / MoCo)、自蒸馏(BYOL / DINO)、掩码建模(MAE / BEiT)三条路线各有取舍。
  5. 怎么做到「一个模型解决一类问题」(3.7–3.8):检测与分割把输出从「一个标签」变成「一个集合 / 一张稠密标签图」,于是 IoU、NMS、AP 成为必须掌握的语言;DETR 用集合预测去掉锚框与 NMS;SAM 把分割变成提示式的通用后端。3.8 节把视觉接到语言上:CLIP 的对齐、BLIP-2 / LLaVA 的连接器与指令微调、扩散模型的定制(ControlNet / LoRA)。
  6. 代价是什么(3.9–3.10):数据集偏见会被放大,对抗样本说明「人看不出异常」不等于「模型不会判错」,深伪让「真实」本身变得可疑。3.10 节把这些落到 Lab 2:滑动窗口人脸检测、IoU 匹配、NMS、对抗实验与隐私讨论。

在九讲主线中的位置:第 1 讲给了通用范式(结构 + 损失 + 梯度下降 + 泛化),第 2 讲把「结构」这一环换成序列与注意力。本讲把这两条线合到图像上:3.2–3.4 是「结构」在空间维度上的展开,3.5 是第 2 讲的注意力反过来改造视觉,3.6–3.8 是「预训练 + 迁移」这套方法论在视觉里的完整形态,3.9 对应第 7 讲的治理视角。与母本 MIT 6.S191 的关系:本讲以母本 Lecture 3(Deep Computer Vision)的主题与配套 Lab(人脸检测)为骨架,把课堂上只给结论的部分(输出尺寸与感受野的推导、残差连接的梯度结构、ViT 的复杂度、检测评估口径)补齐;3.5 / 3.6 / 3.7 / 3.8 中标注为「教材外拓展」的新增部分,属于母本录播年代之后成为主流的内容,已按规范给出论文标题与编号。

十节一览

节核心问题关键结论典型陷阱
3.1 为什么是卷积图像为什么不能用 MLP 硬啃?全连接的两宗罪;卷积 = 局部连接 + 权值共享 + 平移等变;归纳偏置是用先验换样本,也有代价以为「卷积天生平移不变」(其实只给等变);以为卷积能表达就等于好用(关键在参数化与优化)
3.2 卷积运算「核在图上滑动」到底怎么算?框架算的是互相关;输出尺寸、参数量、MACs 三条公式;感受野递推 rl+1=rl+(k−1)jlr_{l+1}=r_l+(k-1)j_l;下采样让感受野几何增长核形状写反(是 (Cout,Cin,k,k)(C_{out},C_{in},k,k));以为参数量与图像大小有关;把理论感受野当实际上下文
3.3 池化与归一化池化到底提供了什么?BN 为什么训练/推理不一致?池化的不变性很弱,主要价值是降分辨率扩视野;BN 训练用批统计、推理用运行统计,与 batch size 强耦合;卷积 Dropout 必须按通道丢弃推理忘了 model.eval()(单样本时统计退化);小 batch 硬用 BN;逐元素 Dropout 用在特征图上
3.4 经典骨干演进三代网络的贡献是什么?为什么会「更深更差」?AlexNet 是一套可训配方(且 95% 参数在全连接层);VGG 用 3×33\times3 堆叠换感受野与非线性;退化不是过拟合,残差 y=F(x)+xy=F(x)+x 给出恒等直通项 II把退化当过拟合(加正则无效);以为残差只是「防梯度消失」;忽略「中间激活更多」带来的显存代价
3.5 现代视觉架构不用卷积行不行?代价是什么?ViT 用 patchify + 注意力;常规分辨率下 MLP 占计算量约 64%,注意力矩阵只占 4%;弱先验需要更多数据;Swin 用窗口 + 层次化换线性复杂度;MAE 让预训练脱离标签以为 ViT 算力与 ResNet 相近(ViT-B/16 约 17.6 GMACs,是 ResNet-50 的 4.3 倍);以为 ViT 没有归纳偏置;把 ConvNeXt 的结论读成「卷积更好」
3.6 迁移与自监督为什么不能从零训练?没标签怎么办?迁移是默认起点:先冻结、再逐步解冻,骨干学习率小一个量级;InfoNCE 等价于在表示空间做 2N−12N-1 类分类;MoCo 用队列解耦 batch;BYOL / DINO 去负样本但机制解释有争议预处理与骨干不匹配;一上来就全网络微调;把「不用负样本也不崩塌」当成已确立的定理
3.7 检测、分割与视觉基础模型输出为什么不能只看准确率?类不平衡下准确率无信息量;IoU 是匹配与评估的共同基础;NMS 是弥补「训练未去重」的手段;AP 必须说清口径(VOC 11 点 vs COCO 101 点 + 10 个 IoU 阈值);DETR 用集合预测消掉锚框与 NMS,代价是收敛慢用准确率评估检测;混淆 AP 与 mAP;以为 NMS 是必需步骤;把 SAM 当分类器(它不给语义标签)
3.8 多模态视觉图像怎么接到语言上?CLIP 用 4 亿图文对的对称 InfoNCE 做对齐,从而支持零样本分类;VLM 三段式(对齐 / 指令微调 / 偏好优化);视觉 token 数量直接决定上下文预算;ControlNet 管「怎么摆」、LoRA 管「长什么样」以为 CLIP 会生成文本;以为视觉幻觉是「没看清」(实为语言先验压过视觉证据);跨论文直接比较 VQA 数字
3.9 伦理与安全强能力的代价是什么?数据集偏见会被放大(反馈回路);必须做分群评估;对抗样本说明人不可察觉的输入也能翻车;鲁棒性是相对攻击预算的陈述;有些场景不该用视觉模型用总体准确率掩盖子群失败;把对抗样本归因于过拟合;把检测器当作深伪的唯一防线
3.10 Lab 2 导读怎么把零件装成能跑的检测系统?滑动窗口 = 在位置与尺度上搜索(并用它体会「重复计算」的动机);正负样本匹配与忽略区;「先过拟合 10 个样本」是最有效的调试手段框坐标顺序错(不报错但框乱飞);增强只改图不改框;NMS 条件方向写反;多尺度推理忘记还原坐标

本讲地图

            [3.1 为什么是卷积]
             两宗罪 / 归纳偏置 / 等变
                        │  把「滑窗」写成公式
                        ▼
   ┌──→ [3.2 卷积运算] ──────────────┐
   │     互相关 / 尺寸 / 参数 / 感受野 │  零件齐了
   │               │                  │
   │               ▼                  │
   │     [3.3 池化、下采样、归一化]    │
   │     分辨率 ↔ 视野 ↔ 训练稳定性    │
   │               │                  │
   │               ▼                  │
   │     [3.4 经典骨干演进] ←──────────┘
   │     AlexNet → VGG → ResNet(退化 + 残差)
   │               │
   │      ┌────────┴─────────┐
   │      ▼                  ▼
   │  [3.5 ViT 与混合设计]   [3.6 迁移与自监督预训练]
   │   弱先验 ⇄ 数据量        冻结/微调 · InfoNCE · MAE
   │      │                  │
   │      └────────┬─────────┘
   │               ▼
   │     [3.7 检测、分割与视觉基础模型]
   │     IoU / NMS / AP / FCN / DETR / SAM
   │               │
   │               ▼
   │     [3.8 多模态视觉:对齐、生成、编辑]
   │     CLIP / BLIP-2 / LLaVA / ControlNet / LoRA
   │               │
   │               ▼
   │     [3.9 伦理与安全] ── 偏见 / 对抗 / 深伪 / 隐私
   │               │
   └───────────────┴──→ [3.10 Lab 2 人脸检测系统]
                          理论落到代码与报告

依赖关系:3.2 的形状推演是 3.3–3.4 的前置(读不懂形状就读不懂骨干)
          3.4 的骨干是 3.5–3.8 的共同底座(两者都在改「怎么造骨干」)
          3.6 的预训练是 3.7 检测/分割能用小数据的前提
          3.9 的分群评估与 3.10 的 Lab 形成闭环(实验 C)

本讲新增的概念

组概念首次出现
运算互相关与数学卷积的差别、核合并定理、填充 / 步幅 / 空洞、im2col3.2
运算感受野与跳距的递推、分组卷积、深度可分离卷积、转置卷积3.2
设计池化与单调激活的交换律、全局平均池化、BN 的训练/推理差异、GroupNorm、SpatialDropout3.3
骨干退化问题、残差的梯度结构(直通项 II)、瓶颈块、pre-activation3.4
架构patchify、cls token、位置嵌入、O(N2)O(N^2) 与线性项的交叉点、窗口 / 移位窗口、掩码图像建模3.5
训练分层学习率、领域偏移与 BN 重估、InfoNCE 的梯度、动量编码器、停止梯度与崩塌3.6
任务锚框、两阶段 / 单阶段、IoU / NMS / AP 口径、FCN / U-Net / DeepLab、集合预测与匈牙利匹配、提示式分割3.7
多模态双塔对比、零样本分类与提示模板、连接器与视觉 token 预算、ControlNet / LoRA、视觉幻觉评测3.8
治理放大效应、分群评估、FGSM / PGD、鲁棒性与攻击预算、出口判据3.9
工程坐标表示与 round-trip 断言、忽略区、focal loss、先过拟合小样本、故障排查表3.10

学完自测(20 分钟快速版)

关掉书,用纸回答下面 8 个问题。答不上来的那一题,直接指向需要重读的小节。

#问题答不上来 → 回到
1卷积的三种归纳偏置分别是什么?哪一项带来平移等变?3.1
2输入 64×64×364\times64\times3、k=5k=5、p=2p=2、s=2s=2、Cout=128C_{out}=128:输出形状、参数量、MACs 各是多少?3.2、3.2
33 层 3×33\times3 与 1 层 7×77\times7 的感受野相同吗?参数量差多少?3.4
4写出残差块的前向与 ∂y/∂x\partial y/\partial x,说明 II 的作用。3.4
5ViT-B/16 的参数量约多少?其中 MLP 占多少比例?为什么它比 ResNet-50 更贵?3.5
6InfoNCE 在形式上等价于什么任务?负样本与温度各自控制什么?3.6
7一个 IoU、一次 NMS、一个 AP 的计算口径——分别说清它们解决什么问题。3.7
8面对一个「准确率 97.9%」的人脸系统,你会追问哪三个问题?3.9
参考答案要点(先自己写完再看)
  1. 局部连接、权值共享、平移等变;平移等变由权值共享 + 局部连接共同推出(命题 3.1.1)。等变 ≠ 不变。
  2. Wout=⌊(64+4−5)/2⌋+1=32W_{out}=\lfloor(64+4-5)/2\rfloor+1=32,故 32×32×12832\times32\times128;参数量 =128×3×25+128=9,728=128\times3\times25+128=9{,}728;MACs =32⋅32⋅128⋅3⋅25=3.15×108=32\cdot32\cdot128\cdot3\cdot25=3.15\times10^{8}。
  3. 感受野相同(7×77\times7);参数 27C227C^2 对 49C249C^2,省约 45%;3 层版本非线性更强。
  4. y=F(x)+xy=F(x)+x,∂y/∂x=I+∂F/∂x\partial y/\partial x=I+\partial F/\partial x;II 是不依赖任何权重的恒等直通项,因此保证梯度里总有一部分原样回传,且不会被训练改掉。
  5. 约 86.5M;MLP 占每层参数约 66.6%;计算量约 17.617.6 GMACs,是 ResNet-50(约 4.14.1 GMACs)的约 4.34.3 倍。
  6. 等价于在表示空间里做 2N−12N-1 类分类(找出锚点的正样本);负样本规模决定任务难度与表示质量,温度 τ\tau 控制 softmax 的锐度(进而控制梯度强度与判别性)。
  7. IoU:同时约束位置与尺度的匹配度量;NMS:训练未做去重时的推理端补救(阈值过小漏检、过大重复);AP:类不平衡下可用的排序质量指标,必须说明口径(VOC 11 点 / COCO 101 点 + 10 个 IoU 阈值)。
  8. ① 这个总体准确率在各子群上分别是多少(要分组混淆矩阵);② 错误在两个方向上的代价是什么(误识 vs 拒识)与阈值怎么定;③ 误判发生后有没有人在回路与申诉通道。

常见提问(本讲最常被问到的五件事)

五个高频疑问

Q:卷积到底要不要「翻转核」? 不要。框架实现的是互相关(命题 3.2.1)。但手推反向传播、做核合并、对接信号处理公式时必须显式处理翻转——这是两套约定,别混用。

Q:为什么现代架构越来越少用池化? 因为池化提供的不变性比通常认为的弱得多、且不连续(例 3.3.1),它的真实价值是降分辨率与扩感受野;而这两件事用步幅卷积做更灵活(可学),代价是算力。真正带来不变性的是大感受野、全局聚合与数据增强。

Q:ViT 是不是已经取代 CNN 了? 不是。ViT 的弱先验在数据充足时是优势,在中小数据上是劣势;ConvNeXt 的控制变量实验说明「卷积 vs 注意力」的差距很大程度来自训练配方与微观设计。选型要按数据量、延迟、部署工具链、是否需要多尺度输出判断(3.5.5)。

Q:为什么检测任务不能看准确率? 因为背景位置的占比可能是 99.9%99.9\% 以上,「全判背景」就能拿到极高准确率却零召回(例 3.7.1)。要看 precision / recall / AP / mIoU,并且分别报告漏检与误检。

Q:既然有预训练权重,为什么还要学这些推导? 因为推理与排错需要形状、算力与精度的量级感:显存为什么爆、为什么换了分辨率就报错、为什么这个改动理论上更快实测更慢、为什么换了个骨干精度掉了——这些问题都不是「加载权重 + 微调」能回答的。预训练解决的是「从哪开始」,本讲的公式解决的是「为什么」与「哪里出问题」。

与实验和项目的关系

  • Lab 2 · 人脸检测系统:本讲的落点。它把 3.1–3.9 的内容装成一台机器——滑动窗口检测器(3.7)、IoU 与 NMS(3.7.2)、训练与正则(3.3、3.4)、对抗样本(3.9.3)、分群评估与隐私(3.9)。3.10 节是它的理论导读,逐条把原理对应到实现。
  • 与 Lab 1 / Lab 3 的连接:本讲的骨干(3.4、3.5)是 Lab 3 里视觉—语言模型的前端;本讲的自监督(3.6)与第 4 讲的生成建模共享「用无标签数据训练表示」的思路。
  • 期末项目:如果项目涉及图像(分类、检测、分割、生成、多模态),决策顺序应当是——先读 3.6 的实操清单选预训练骨干与迁移策略,再读 3.7 确定任务的输出结构与评估口径,最后读 3.9 写出使用边界(哪些情况下不应部署)。一个合格的视觉项目报告必须包含分群评估与失败模式分析。
怎么用这一讲

第一遍(约 4 小时):按 3.1 → 3.2 → 3.3 → 3.4 顺序精读,把 3.2 的三条公式与 3.4 的残差推导手算一遍;3.5–3.8 可以先只读每节的动机段与小结(它们是「视野扩展」层)。

必读、不许跳的框:

  • 每个 def 后面的 intuition(建立手感,比定义本身重要);
  • 3.2 的形状推演表与例 3.2.1 / 3.2.2(排错的第一技能);
  • 3.4 的退化问题与残差梯度推导(本讲最重要的机制);
  • 3.5 的 ViT 逐项参数量与计算量(纠正「ViT 与 ResNet 同量级」的印象);
  • 3.7 的 AP 手算(例 3.7.1);
  • 每节的 errata 陷阱框(考试与实战里出错最多的就是那几条)。

二刷(约 6 小时):逐行读 proof——3.1 的等变充分必要性、3.2 的核合并与感受野递推、3.4 的残差梯度展开、3.6 的 InfoNCE 梯度(它是「吸引 + 排斥」的定量表达)、3.9 的 FGSM 手算。读完后合上书,把 3.2 的三条公式从定义推一遍。

动手:先跑 Lab 2 的滑动窗口基线(体会「重复计算」),再按 3.10.3 的清单做「先过拟合 10 个样本」的健壮性测试;然后做 3.10.4 的对抗实验与 3.10.6 的三个小实验(分群评估 / 阈值与代价 / 隐私检查)。

自检路径:每节的「即时自测」→ 本讲 习题集(A/B/C/D 四组)→ 回忆卡(当天 / 隔天 / 第 3 天 / 第 7 天)→ 综合自测卷(闭卷计时,100 分制)。复习时优先看 公式速查卡里的卷积公式与 易混对照卡里的「卷积 vs 注意力」「BN vs LN」「AP vs mAP」。

时间预算参考:只求建立范式直觉,读导览 + 3.1、3.2、3.4 的动机段与结论(约 1.5 小时);要能独立写出并调试一个检测系统,走完上面三遍并做完 Lab 2(约 12–15 小时)。

下一讲引子

本讲的每个模型都在回答「这是什么」或「在哪里」。第 4 讲要换一个完全不同的问题:能不能生成新的图像?届时你会发现,本讲的骨干(卷积的或注意力的去噪网络)在第 4 讲里变成了扩散模型的「去噪器」,而本讲 3.9 节讨论的深伪问题,其技术根源正是第 4 讲要讲的生成能力。