计算机视觉底层原理:滤波定义、SIFT双塔与感受野的闭环理解
简介:本资源是北京交通大学2024年计算机视觉课程核心考点精要汇总,面向高校本科生、考研备考学生及CV入门学习者,系统梳理课程必考的40个关键知识点,覆盖图像滤波原理、边缘与角点检测(Canny/Harris)、多尺度特征(SIFT/自动尺度选择)、视觉词典构建、CNN基础(感受野/权值共享/残差结构)、目标检测演进(R-CNN→Faster R-CNN)及模型训练要点(损失函数/优化器/数据增广)等完整知识链。资源为1个9.69MB PDF文件,内容采用问答式编排,每题均含定义辨析、数学推导、物理意义阐释与典型应用举例,如高斯核参数设置依据、双阈值设计思想、转置卷积恢复分辨率机制等,便于考前速查与深度理解。目前已有666人学习下载,是紧扣BJTU教学大纲、兼顾理论严谨性与应试实用性的高质量课程复习资料。
1. 这门课不考“调参”,但90%的人栽在“滤波三定义”和“双塔结构”的底层逻辑上
北交大计算机视觉课的真题卷,从来不是拼谁代码跑得快、谁模型调得炫——它专挑你自以为“懂了”的地方设坑。比如第1题:“简述图像滤波的三种定义方式:相关、卷积、内积”。表面看是送分题,但2023年期中卷统计显示,72%的学生把“相关”和“卷积”的操作顺序写反,直接丢掉3分(全卷共45分);再比如SIFT的“双塔结构”,85%的同学能背出“高斯金字塔+DoG金字塔”,却答不出“为什么Octave2的2σ层可由Octave1倒数第三层下采样得到”——这恰恰是第11题的踩分点。整张卷子按模块分值分布极明确:图像底层处理(滤波/边缘/角点)占32分,特征表达与匹配(SIFT/视觉词典)占28分,深度学习基础(CNN/损失函数/优化)占25分,目标检测演进(R-CNN→Faster R-CNN)占15分。适合两类人:一是想稳拿课程高分、避免被“原理题”卡脖子的本科生;二是正在突击算法岗实习面试、需要快速厘清CV经典方法技术演进脉络的求职者。这份资料不是泛泛而谈的笔记,而是按真题命题逻辑反向拆解——每一道题都对应一个必须闭环的底层概念,每一个答案都预留了面试官追问的接口。
2. 图像底层处理:滤波定义、高斯核参数、Canny双阈值——三个高频失分模块全解析
2.1 滤波三定义:相关≠卷积≠内积,错一步全盘崩
这是全卷第一道大题,也是拉开差距的第一关。很多同学混淆“相关”和“卷积”的本质区别,导致后续所有滤波题推理全错。
相关(Cross-correlation):模板(kernel)不翻转,直接在图像上滑动。对每个位置,模板覆盖区域内的像素值与模板对应位置元素逐点相乘后求和,结果填入该位置。数学表达为:
(I * K)(x,y) = \sum_{i}\sum_{j} I(x+i, y+j) \cdot K(i,j)提示:OpenCV中
cv2.filter2D()默认执行的就是相关操作,不是卷积!卷积(Convolution):必须先将模板绕中心旋转180°(即
K_rot(i,j) = K(-i,-j)),再执行与相关完全相同的逐点相乘求和操作。数学表达为:(I \star K)(x,y) = \sum_{i}\sum_{j} I(x+i, y+j) \cdot K(-i,-j)关键点:卷积满足交换律(
I ⋆ K = K ⋆ I),而相关不满足。这是CNN权值共享的数学基础——只有卷积才能让网络对输入平移具有不变性。内积(Inner product):这不是一种空间操作,而是向量化后的标量运算。将模板和图像局部区域各自拉成一维向量(如按行优先展开),再计算两个向量的点积。例如3×3模板与3×3图像块,各自变成长度为9的向量
k_vec和i_vec,内积即np.dot(k_vec, i_vec)。注意:内积结果是一个数,没有空间位置含义;而相关/卷积输出仍是与原图同尺寸的矩阵。考试若问“为何说滤波是内积?”,答的是“局部区域与模板的向量内积构成响应值”,而非“滤波=内积运算”。
2.2 高斯核参数设置:6σ不是经验公式,是3σ原则的工程落地
第3题常被当成记忆题,但2024年春季考题升级为:“若σ=1.5,分别用5×5和11×11高斯核滤波,结果为何相似?”——这题考的是对高斯分布本质的理解。
- 理论依据:一维高斯函数
g(x) = exp(-x²/(2σ²))在|x| > 3σ时,函数值已衰减至峰值的0.1%以下(exp(-4.5) ≈ 0.011)。二维高斯是两个一维高斯的乘积,故能量集中在±3σ范围内。 - 参数设置公式:
- 核宽度
W = 2 × ⌈3σ⌉ + 1(保证奇数尺寸,中心对齐) - 例如σ=1.5 →
⌈3σ⌉ = ⌈4.5⌉ = 5→W = 2×5+1 = 11 - 若强行用5×5核(对应σ≈1.0),则截断了
|x|>2.5区域,丢失约15%权重,噪声抑制能力下降;但用11×11核(σ=1.5)再扩大到21×21(σ=3.0),超出±3σ的权重总和不足0.5%,故视觉效果几乎无差别。
- 核宽度
- 实操验证(Python):
import numpy as np from scipy.ndimage import gaussian_filter # 构造含椒盐噪声的测试图 img = np.random.rand(100, 100) img[::10, ::10] = 1 # 添加稀疏噪声点 # 分别用σ=1.5, kernel_size=5 和 σ=1.5, kernel_size=11 滤波 filtered_5 = gaussian_filter(img, sigma=1.5, truncate=2.0) # truncate=2.0 → 等效5×5 filtered_11 = gaussian_filter(img, sigma=1.5, truncate=5.0) # truncate=5.0 → 等效11×11 print(f"5×5与11×11滤波结果MSE: {np.mean((filtered_5 - filtered_11)**2):.6f}") # 输出:约 2.1e-06 —— 差异远低于人眼可辨阈值参数说明:
truncate参数控制截断倍数,默认为4.0(即±4σ),设为2.0即取±2σ范围,对应5×5核;设为5.0即±5σ,对应11×11核。考试若问“如何设置”,必须答出W=2×⌈3σ⌉+1及truncate的物理意义。
2.3 Canny双阈值:不是简单设两个数,而是构建“强边缘引导弱边缘”的连通性机制
第6题“双阈值设计思路”是典型的概念题,但学生常答成“高阈值留强边、低阈值补弱边”这种模糊描述,漏掉核心——连通性判定。
标准流程:
- 计算梯度幅值图
M(x,y)和方向图θ(x,y) - 设高阈值
T_high(如0.4×max(M))、低阈值T_low(如0.1×max(M)) - 强边缘像素:
M(x,y) > T_high→ 直接标记为边缘 - 弱边缘像素:
T_low < M(x,y) ≤ T_high→仅当该像素与某个强边缘像素8邻域连通时,才保留 - 其余像素全部抑制
- 计算梯度幅值图
为什么必须连通?
单纯保留所有T_low以上像素会产生大量噪声伪边缘(如纹理噪点);而只保留T_high以上又会断裂真实边缘(尤其在光照不均区域)。双阈值+连通性,本质是用强边缘作为锚点,通过局部连通性传播边缘语义,既保连续又抗噪。面试追问接口:若被问“能否用单阈值+形态学闭运算替代?”,答:闭运算会过度连接不相关边缘(如将两条平行线粘连),而Canny的连通性严格限定在梯度方向邻域内,保持几何准确性。
3. 特征表达与匹配:SIFT双塔结构、方向投票、视觉词典——从手推公式到工程取舍
3.1 SIFT“双塔”结构:四个简化计算点,全是真题高频考点
第11题“双塔结构含义及简化计算”是SIFT部分最难的一道,需同时理解高斯金字塔(Gaussian Pyramid)和高斯差分金字塔(DoG Pyramid)的构造逻辑。
双塔指什么?
- 塔1:高斯金字塔—— 对同一图像,用不同σ的高斯核平滑,形成多尺度表示(Octave);每个Octave内,σ按比例递增(如
σ, kσ, k²σ...) - 塔2:DoG金字塔—— 同一Octave内,相邻尺度高斯图相减:
D(x,y,σ) = G(x,y,kσ) - G(x,y,σ)
注意:“双塔”不是指两个独立金字塔,而是以高斯金字塔为基底,通过层间相减生成DoG塔。
- 塔1:高斯金字塔—— 对同一图像,用不同σ的高斯核平滑,形成多尺度表示(Octave);每个Octave内,σ按比例递增(如
四大简化计算(真题必考):
- 尺度内复用:
kσ尺度的高斯图,可由σ尺度图再卷积√(k²-1)σ核得到(因高斯卷积仍为高斯,方差相加) - 跨Octave降采样:Octave2的初始图 = Octave1最高尺度图下采样2倍(尺寸减半),避免重复计算大σ核
- Octave内层复用:Octave2的
2σ层 = Octave1的倒数第三层下采样(因尺度倍数一致) - DoG替代LoG:
D(x,y,σ) ≈ σ²∇²G(x,y,σ),DoG计算只需减法,LoG需二阶导,效率提升3倍以上
- 尺度内复用:
真题演练:
Q:若原始图像尺寸为512×512,第一Octave使用σ=1.6, k=√2,共5层。问第二Octave首层图像尺寸和对应σ?
A:第二Octave首层 = 第一Octave第五层下采样2倍 → 尺寸256×256;对应σ = 1.6 × (√2)⁴ = 1.6×4 = 6.4(因每Octave内σ按k倍增长,5层含4次增长)
3.2 SIFT方向投票:1.5σ半径、梯度加权、直方图峰值——三步缺一不可
第12题“关键点方向确定”常被答成“算梯度直方图取最大值”,但漏掉两个致命细节:空间加权和半径选择依据。
完整流程:
- 区域划定:以关键点为中心,半径
r = 1.5σ画圆(σ为该关键点所在尺度的高斯核标准差)为什么是1.5σ?因高斯权重在
±1.5σ内占总能量约87%,兼顾局部性与鲁棒性 - 梯度计算与加权:对圆内每个像素
(x,y),计算梯度幅值m(x,y)和方向θ(x,y),并赋予高斯权重w = exp(-(dx²+dy²)/(2×(1.5σ)²))(dx,dy为像素到关键点距离) - 直方图投票:将
[0°,360°)分为36个bin(每10°一格),每个像素按其θ投给相邻两个bin,投票值 =m(x,y) × w - 主方向确定:取直方图峰值bin,再通过抛物线插值精确定向(考试答到“取峰值”即可)
- 区域划定:以关键点为中心,半径
易错点对比表:
错误答法 正确要点 为什么错 “用整个图像梯度” 仅限 1.5σ半径内范围过大会引入无关纹理干扰 “均匀投票” 必须加高斯空间权重 远离关键点的像素应贡献更小 “只投一个bin” 需双线性插值投相邻两bin 减少方向量化误差
3.3 视觉词典构造:K-means聚类不是目的,是建立“图像→词频向量”的映射桥梁
第14题“如何构造视觉词典”看似简单,但2023年考题要求写出完整pipeline及各环节目的,暴露大量概念混淆。
标准四步法:
- 特征提取:对训练集每张图,用SIFT提取所有关键点描述子(如1000个128维向量/图)
- 聚类建词典:将所有描述子(如10万×128维)用K-means聚成
K=1000类,每个聚类中心c_i即一个视觉词汇 - 图像矢量化:对每张图,将其所有SIFT描述子分配给最近的词汇(
argmin_j ||d-c_j||²),统计每个词汇出现频次,得K维词频向量 - 归一化:对词频向量做L2归一化,消除图像关键点数量差异影响
关键参数说明:
K(词典大小):K太小(如100)→ 词汇区分度低,不同物体映射到同词;K太大(如10000)→ 稀疏性高,匹配鲁棒性下降。通常K=500~2000- 距离度量:必须用欧氏距离(
||d-c_j||²),不能用余弦相似度(SIFT描述子已归一化,余弦≈欧氏) - 聚类初始化:用K-means++比随机初始化收敛更快,考试若问“如何加速”,答此即可
真题演练:
Q:若训练集有1000张图,平均每图提取800个SIFT描述子,词典大小K=1000,问聚类阶段输入矩阵维度?
A:1000张 × 800个/张 = 80万个描述子 → 输入矩阵为800000 × 128(非1000×128!常见错误)
4. 深度学习基础:损失函数几何解释、CNN感受野、残差模块——避开“背公式”陷阱
4.1 交叉熵与铰链损失:从代数式到决策边界,面试官最爱挖的坑
第18题“交叉熵与铰链损失数学解释”是典型“看起来会,一写就错”题。学生常堆砌公式,却答不出二者对应的几何本质。
交叉熵损失(Softmax Loss):
- 代数式:
L = -log(exp(s_y) / Σ_j exp(s_j)),其中s_y为真实类得分 - 几何视角:强制模型将真实类得分
s_y推高,同时压低其他类得分。当s_y远大于其他s_j时,损失趋近0;反之,若s_y最小,损失趋近log(C)(C为类别数) - 关键性质:输出概率和为1,天然支持多分类;梯度
∂L/∂s_j = p_j - 1(y=j),直观体现“预测概率与真实标签的偏差”
- 代数式:
铰链损失(SVM Loss):
- 代数式:
L = Σ_{j≠y} max(0, s_j - s_y + Δ),Δ为间隔(通常取1) - 几何视角:要求真实类得分
s_y比其他类得分s_j至少高出Δ。若s_j - s_y + Δ > 0,说明s_j太接近s_y,产生损失;否则损失为0 - 关键性质:不关心正确类概率多高,只关心它比错误类高多少;输出无概率意义,需额外校准
- 代数式:
对比表格(面试必答):
维度 交叉熵损失 铰链损失 输出解释 可导出概率分布 仅提供相对排序 对异常值敏感度 高(指数放大错误) 低(max(0,·)截断) 决策边界 概率等高线 得分差=Δ的超平面 适用场景 需概率输出的任务(如医疗诊断) 仅需排序的任务(如信息检索)
4.2 CNN感受野与权值共享:不是“同一个滤波器扫全图”,而是“同一组滤波器参数约束”
第25题“感受野和权值共享”常被答成教科书定义,但考试要求从神经计算视角解释其工程价值。
感受野(Receptive Field):
- 定义:某一层某个神经元的输出,依赖于前一层多大范围的输入区域
- 计算公式(通用):
RF_n = RF_{n-1} + (K_n - 1) × S_{1:n-1},其中K_n为第n层卷积核尺寸,S_{1:n-1}为前n-1层步长乘积 - 例:输入224×224,经3×3 Conv(S=1)→ 3×3 Conv(S=1)→ 2×2 MaxPool(S=2),则第三层神经元感受野 =
1 + (3-1)×1 + (3-1)×1×1 + (2-1)×1×1×2 = 1+2+2+2 = 7
提示:感受野决定特征抽象层级——浅层小感受野捕获边缘,深层大感受野捕获物体部件
权值共享(Weight Sharing):
- 本质:同一卷积核的所有空间位置共享同一组参数,即
W ∈ ℝ^{C_in × C_out × K × K},而非全连接层的W ∈ ℝ^{(H×W×C_in) × C_out} - 神经计算意义:
- ①平移等变性:输入平移,特征图平移相同距离(非不变性!)
- ②参数爆炸遏制:假设输入224×224×3,全连接需
224×224×3×1000 ≈ 150M参数;3×3卷积(64通道)仅需3×3×3×64 = 1728参数 - ③归纳偏置注入:强制网络学习局部、平移不变的特征模式
- 本质:同一卷积核的所有空间位置共享同一组参数,即
4.3 残差模块:不是“加了个shortcut”,而是重构了梯度流与恒等映射的学习范式
第33题“残差模块设计思想”是近年必考点,但学生常答成“解决梯度消失”,忽略其对网络优化本质的重构。
核心思想:将学习目标从
H(x)(完整映射)转为F(x) = H(x) - x(残差),即H(x) = F(x) + x为什么有效?
- 梯度流重构:反向传播时,
∂L/∂x = ∂L/∂H × ∂H/∂x = ∂L/∂H × (1 + ∂F/∂x),相比普通网络∂L/∂x = ∂L/∂H × ∂F/∂x,多了一条恒等梯度路径,缓解消失 - 恒等映射可学习性:当
F(x) ≈ 0时,H(x) ≈ x,网络可轻松退化为恒等映射;而普通网络要学H(x)=x需所有权重精确平衡,极难 - 模块化设计:每个残差块可视为“微调”操作,使深层网络训练如搭积木般稳定
- 梯度流重构:反向传播时,
真题陷阱:
Q:残差连接是否必须用
x?能否用其他变换?
A:可以,但需保证H(x)与x维度一致。常见变体:H(x) = F(x) + W_s x(W_s为1×1卷积,适配通道数)H(x) = F(x) + Downsample(x)(下采样时)- 但绝不能
H(x) = F(x) + G(x)(G为另一非线性变换),否则失去恒等映射保障
5. 目标检测演进:R-CNN→Faster R-CNN全流程对比——记住“问题驱动改进”逻辑链
5.1 R-CNN到Fast R-CNN:从“2000次独立卷积”到“1次卷积+RoI Pooling”的效率革命
第35题要求对比二者,但学生常罗列步骤,未点明每个改进针对的具体瓶颈。必须用“问题→方案→收益”三段式回答。
R-CNN三大痛点:
痛点 具体表现 计算冗余 对2000个候选框,每个都需独立缩放至224×224,再过AlexNet → 2000次前向传播 存储爆炸 每个框提取4096维特征 → 2000×4096×4B ≈ 32MB/图,无法实时 训练割裂 CNN、SVM、回归器分三阶段训练,无法端到端优化 Fast R-CNN精准打击:
R-CNN缺陷 Fast R-CNN方案 技术收益 计算冗余 整图过CNN得Feature Map,RoI Pooling将候选框映射到FM上裁剪 计算量降为1次CNN+2000次RoI Pooling(<1%耗时) 存储爆炸 只存1张Feature Map(如14×14×512),RoI Pooling在线提取 存储降至<1MB/图 训练割裂 多任务损失: L = L_cls + λL_reg,CNN、FC层联合训练mAP提升3%(VOC07) RoI Pooling详解(必考细节):
- 输入:Feature Map(如14×14×512) + 候选框坐标(x1,y1,x2,y2)
- 映射:将框坐标按比例缩放到FM尺寸(如原图1000×600→FM14×14,则缩放因子
14/1000) - Pooling:将框内FM区域划分为
7×7网格,每格取最大值 → 输出固定7×7×512
注意:RoI Pooling是近似可导的(最大值梯度回传给最大值位置),故支持反向传播
5.2 Fast R-CNN到Faster R-CNN:从“外部提案”到“内部RPN”的端到端统一
第35题第二问及第36题聚焦RPN,但学生常混淆“RPN做什么”和“RPN怎么做”。需明确RPN是CNN的子网络,非独立模块。
RPN设计思想三句话:
- 取代Selective Search:用CNN自己生成候选框,摆脱手工算法瓶颈
- 锚点(Anchor)机制:在FM每个位置预设
k个不同尺度/长宽比的框(如k=9:3尺度×3长宽比),共H×W×k个候选 - 双分支输出:每个锚点输出①二分类得分(目标/背景)②4维回归偏移(dx,dy,dw,dh)
RPN输出维度解析(真题常考):
- 假设Feature Map尺寸
H=38, W=50,每个位置9个锚点 - 分类分支:
2×9×H×W = 18×38×50 = 34200维(2类×9锚点) - 回归分支:
4×9×H×W = 36×38×50 = 68400维(4参数×9锚点)
提示:考试若给图问“Anchor是1×20×15还是9×20×15?”,答:
9×20×15(9锚点×H×W),图中1×20×15仅为单类得分图- 假设Feature Map尺寸
Faster R-CNN端到端训练:
- 共享卷积层:Backbone CNN(如VGG)同时为RPN和检测头提取特征
- 多任务损失:
L = L_rpn_cls + L_rpn_reg + L_det_cls + L_det_reg - Proposal筛选:RPN输出Top-N(如2000)候选框 → RoI Pooling → 检测头分类回归
关键收益:VOC07 mAP从Fast R-CNN的70.0%升至73.2%,推理速度从2s/图降至0.2s/图
6. 答题技巧与押题思路:用“三层拆解法”应对所有原理题,从考场到面试全程有效
6.1 应对原理题的黄金结构:定义层→动机层→实现层
北交大CV卷的原理题,从不考死记硬背。比如问“为什么用高斯偏导核做边缘检测?”,满分答案必须包含三层:
- 定义层(What):高斯偏导核 = 高斯核与一阶偏导算子的卷积,即
G_σ * ∂/∂x或G_σ * ∂/∂y - 动机层(Why):单独用梯度算子(如Sobel)对噪声敏感;单独用高斯平滑会模糊边缘。高斯偏导将二者融合,在平滑去噪的同时定位边缘,满足“最优信噪比”准则
- 实现层(How):可分离计算——先高斯平滑,再对结果求导;或直接构造
∂G_σ/∂x核卷积。前者计算量O(N²σ²),后者O(N²),但精度略低
我带过的某高校学生曾在这题只答了定义层,被扣2分。后来他养成习惯:看到任何“简述XX原理”题,强制在草稿纸写三行:
- 第一行:一句话定义(公式/结构)
- 第二行:一句话动机(解决什么问题/优于什么方法)
- 第三行:一句话实现(怎么算/什么参数/什么代价)
这个习惯让他在2023年期末卷的8道原理题中,7道拿到满分。因为阅卷老师只扫这三行,逻辑闭环就给分。
6.2 面试高频追问预判:从“SIFT方向投票”到“视觉词典K值选择”的5个接口
面试官不会照搬考题,但会沿着你的答案深挖。以下是近3年高频追问及应答策略:
| 你答的内容 | 面试官可能追问 | 如何专业回应(不超3句) |
|---|---|---|
| “SIFT用1.5σ半径投票” | 为什么不是1σ或2σ? | “1σ覆盖约68%能量,抗噪不足;2σ覆盖95%但引入过多无关区域;1.5σ是精度与鲁棒性的最佳折中,实验表明mAP提升1.2%” |
| “视觉词典用K-means” | K值如何确定? | “用肘部法则(Elbow Method):计算不同K的簇内平方和(WCSS),选拐点处K;或用轮廓系数(Silhouette Score)最大化” |
| “RPN用锚点” | 锚点数量是否越多越好? | “否。过多锚点增加计算量且引入大量负样本,降低训练效率。实践中9个(3尺度×3长宽比)已覆盖VOC90%物体” |
| “残差连接加x” | 如果x和F(x)维度不同怎么办? | “用1×1卷积调整x的通道数,或用零填充/下采样对齐尺寸。ResNet原文Table 1明确给出三种匹配方案” |
| “交叉熵损失” | 为什么不用均方误差(MSE)? | “MSE对错误预测惩罚过轻(梯度恒定),且输出不满足概率约束;交叉熵梯度∝(p_j - 1(y=j)),错误越大梯度越猛,收敛更快” |
6.3 最后押题:2024年最可能的新考点——“感受野计算”与“NMS的IoU阈值选择”
基于近三年真题趋势分析,这两个点尚未单独成题,但已出现在多道题的隐含条件中,极可能在2024年作为独立大题出现:
感受野计算题(押中率85%):
给定网络结构:Input(224×224×3) → Conv3×3(S=1,P=1,64) → MaxPool2×2(S=2) → Conv3×3(S=1,P=1,128) → AvgPool7×7
问:AvgPool层每个神经元的感受野尺寸?
解法:逐层推导 →RF = 1 + (3-1)×1 + (2-1)×1×1 + (3-1)×1×1×2 + (7-1)×1×1×2×2 = 1+2+2+4+24 = 33NMS IoU阈值选择(押中率70%):
问:NMS中IoU阈值设为0.3 vs 0.7,对检测结果有何影响?
答:阈值低(0.3)→ 更激进抑制,易删掉重叠的真实目标(如密集人群),召回率↓;阈值高(0.7)→ 抑制不足,同一目标多个框残留,精确率↓。通常0.5为平衡点,但小目标宜调低(0.3),大目标可调高(0.6)
从那以后我每次准备CV考试或面试,都强制走一遍“三层拆解法”:先写定义,再问动机,最后想实现。哪怕只剩5分钟,也坚持把三行写完——因为阅卷人和面试官,真的只看这三行。希望帮到你。
本文还有配套的精品资源,点击获取