第08章 · 计算机视觉 · 阶段测试题答案¶
一 · 单选 (8 题)¶
1.1 B - 1×1 卷积用于通道调整和特征融合。
1.2 A - ReLU: max(0, x), 解决梯度消失。
1.3 C - YOLO 是单阶段实时检测。
1.4 B - 感受野 = 卷积核累积覆盖区域。
1.5 A - ViT 把图像分成 16×16 patch。
1.6 B - U-Net 用于医学图像分割。
1.7 C - Diffusion 通过去噪过程生成。
1.8 A - NeRF 用 2D 图像生成 3D。
二 · 多选 (4 题)¶
2.1 ABD - 都是经典 CNN 架构。
2.2 ABC - 图像增强方法。
2.3 ABD - C 错: Dropout 在推理时关闭。
2.4 ABC - 都是 CV 子任务。
三 · 简答 (5 题)¶
3.1 卷积 vs 全连接¶
| 维度 | 全连接 | 卷积 |
|---|---|---|
| 连接 | 全部 | 局部 |
| 参数 | 巨大 | 少(权重共享) |
| 平移不变性 | ❌ | ✅ |
| 空间结构 | 丢失 | 保留 |
3.2 ResNet 残差连接¶
核心: y = F(x) + x 作用: - 解决梯度消失, 可训练 1000+ 层 - 学习"残差"比学"完整映射"容易 - 加法不增加参数
3.3 目标检测两阶段 vs 单阶段¶
两阶段: R-CNN / Fast R-CNN / Faster R-CNN - 先生成候选区域(Region Proposal) - 再分类 + 回归 - 精度高, 速度慢
单阶段: YOLO / SSD / RetinaNet - 端到端, 直接预测 - 速度快, 实时应用 - 精度略低(但已经追上)
3.4 ViT vs CNN¶
ViT: - Patch (16×16) → Embedding → Transformer Encoder - 缺少归纳偏置 (无平移不变性) - 大数据集 (ImageNet-21k, JFT) 上超 CNN - 小数据集需要强数据增强
CNN: - 局部性 + 平移不变性 - 数据效率高, 小数据集也行 - 主流仍是 EfficientNet / ConvNeXt
3.5 Diffusion 原理¶
前向: x₀ → x₁ → ... → x_T (逐步加噪) 反向: x_T → x_{T-1} → ... → x₀ (逐步去噪, 由模型学) 训练: 预测每步噪声 ε(xₜ, t) 采样: 从 x_T ~ N(0, I) 开始反向迭代
代表: DDPM / Stable Diffusion / DiT / Sora
四 · 编程 (2 题)¶
4.1 CNN 图像分类¶
import torch
import torch.nn as nn
class SimpleCNN(nn.Module):
def __init__(self, num_classes=10):
super().__init__()
self.features = nn.Sequential(
nn.Conv2d(3, 32, 3, padding=1), nn.ReLU(),
nn.MaxPool2d(2), # 32x32
nn.Conv2d(32, 64, 3, padding=1), nn.ReLU(),
nn.MaxPool2d(2), # 16x16
nn.Conv2d(64, 128, 3, padding=1), nn.ReLU(),
nn.AdaptiveAvgPool2d(1), # 1x1
)
self.classifier = nn.Linear(128, num_classes)
def forward(self, x):
return self.classifier(self.features(x).flatten(1))