计算机视觉¶
👉 计算机视觉范围很广,较传统的有滤波、边缘检测、特征检测与描述、图像分割与聚类、图像识别与目标检测、运动估计与等等,然后较新的有三维视觉、自监督学习、多任务学习、图像生成修复编辑、视频生成、多模态大模型等等。
👉 推荐网站:CS231n Deep Learning for Computer Vision
一、传统计算机视觉基础¶
1. 滤波器与卷积核¶
- 图像滤波的基本概念与作用
- 常用滤波器类型(高斯滤波、均值滤波、中值滤波等)
- 卷积运算原理及在图像处理中的应用
- 不同卷积核对图像特征提取的影响
2. 边缘检测¶
- 边缘检测的定义与意义
- 梯度算子(Sobel、Prewitt、Roberts)
- Canny边缘检测算法原理与实现步骤
- 边缘连接与边缘跟踪技术
3. 特征检测与描述¶
- 特征点检测算法(Harris角点检测、SIFT、SURF、ORB)
- 特征描述子的构建方法
- 特征匹配策略与距离度量
- 特征点在图像配准与拼接中的应用
4. 图像分割与聚类¶
- 图像分割的基本概念与分类
- 基于阈值的分割方法
- 区域生长与区域分裂合并算法
- 聚类算法在图像分割中的应用(K-Means等)
5. 视觉识别与目标检测¶
- 图像分类的基本框架
- 目标检测算法(R-CNN系列、YOLO、SSD)
- 目标定位与边界框回归
- 多类别目标检测策略
6. 运动估计¶
- 光流估计原理与方法
- 运动目标检测与跟踪
二、视觉世界的感知与理解¶
1. 三维视觉¶
- 立体视觉原理与双目相机标定
- 深度估计方法(单目、双目、RGB-D)
- 三维重建技术流程
- 点云处理与三维目标识别
2. 自监督学习¶
- 自监督学习的基本概念与优势
- 视觉领域的自监督学习方法
- 预训练模型与迁移学习应用
- 对比学习在视觉表征学习中的应用
3. 多任务学习¶
- 多任务学习的定义与框架
- 视觉任务间的关联与共享表示
- 多任务模型设计策略
- 实际应用场景与性能优化
三、生成式视觉智能¶
1. 生成模型¶
- 生成对抗网络(GANs)原理与变体
- 变分自编码器(VAEs)
- 扩散模型(Diffusion Models)
- 生成模型在图像生成、编辑中的应用
2. 多模态大模型¶
- 多模态学习的概念与挑战
- 视觉-语言预训练模型(如CLIP、ViT-GPT等)
- 跨模态检索与生成任务
- 多模态模型的应用场景
四. 深度CV基础总结¶
卷积参数计算¶
- 接受大小为 \(W_1 \times H_1 \times D_1\) 的输入 volume
- 需要四个超参数:
- 滤波器数量 \(K\)
- 空间大小 \(F\)
- 步长 \(S\)
- 零填充数量 \(P\)
- 输出 volume 大小为 \(W_2 \times H_2 \times D_2\),其中:
- \(W_2 = \frac{W_1 - F + 2P}{S} + 1\)
- \(H_2 = \frac{H_1 - F + 2P}{S} + 1\)(宽度和高度通过对称性计算)
- \(D_2 = K\)
通过参数共享,每个滤波器引入 \(F \cdot F \cdot D_1\) 个权重,总权重数为 \((F \cdot F \cdot D_1) \cdot K\),以及 \(K\) 个偏置。
在输出 volume 中,第 \(d\) 个深度切片(大小为 \(W_2 \times H_2\))是第 \(d\) 个滤波器以步长 \(S\) 对输入 volume 执行有效卷积的结果,然后加上第 \(d\) 个偏置。
当步长为1时,为保证输入输出大小相等,常常设置填充数量\(p=F/2\) (向下取整)
池化参数计算¶
- 接受大小为 \(W_1 \times H_1 \times D_1\) 的输入 volume
- 需要两个超参数:
- 空间大小 \(F\)
- 步长 \(S\)
- 输出 volume 大小为 \(W_2 \times H_2 \times D_2\),其中:
- \(W_2 = \frac{W_1 - F}{S} + 1\)
- \(H_2 = \frac{H_1 - F}{S} + 1\)
- \(D_2 = D_1\)
池化层不引入参数,因为它对输入执行固定函数计算。对于池化层,通常不使用零填充。
卷积层设计原则¶
小感受野堆叠卷积层的效果往往优于大感受野单层卷积,原因: 1. 堆叠卷积层可以表达非线性 2. 参数量会更少 3. 但堆叠卷积层在反向传播时需要更大内存来存储梯度结果。
权重参数更新方式¶
1. Vanilla update(普通更新)¶
x += - learning_rate * dx
2. Momentum update(动量更新)¶
每次参数更新会受到之前参数更新的累积影响:
# Momentum update
v = mu * v - learning_rate * dx # integrate velocity
x += v # integrate position
3. Nesterov momentum(涅斯捷罗夫动量)¶
不计算 \(x\) 的梯度,而是计算 \(x+\mu \cdot v\) 处的梯度:
形式1:
x_ahead = x + mu * v# evaluate dx_ahead (the gradient at x_ahead instead of at x)
v = mu * v - learning_rate * dx_ahead
x += v
v_prev = v # back this up
v = mu * v - learning_rate * dx # velocity update stays the same
x += -mu * v_prev + (1 + mu) * v # position update changes form
学习率根据epoch更新的方式¶
1. Step decay(步进衰减)¶
每 \(n\) 轮后,将学习率降低为原来的百分之几。通常当验证集损失不再下降时,说明需要降低学习率。
2. Exponential decay(指数衰减)¶
遵循指数公式降低学习率:\(\text{learning\_rate} = \text{initial\_lr} \cdot e^{-kt}\)
3. 1/t decay(倒数衰减)¶
遵循倒数公式降低学习率:\(\text{learning\_rate} = \frac{\text{initial\_lr}}{1 + kt}\)
学习率根据梯度更新的方式¶
1. Adagrad¶
cache += dx**2
x += - learning_rate * dx / (np.sqrt(cache) + eps)
2. RMSprop¶
对 \(cache\) 做平滑处理,取当前梯度和之前梯度的加权平均:
cache = decay_rate * cache + (1 - decay_rate) * dx**2
x += - learning_rate * dx / (np.sqrt(cache) + eps)
3. Adam¶
形式1:
m = beta1*m + (1-beta1)*dx
v = beta2*v + (1-beta2)*(dx**2)
x += - learning_rate * m / (np.sqrt(v) + eps)
形式2(带偏置修正):
m = beta1*m + (1-beta1)*dx
mt = m / (1-beta1**t)
v = beta2*v + (1-beta2)*(dx**2)
vt = v / (1-beta2**t)
x += - learning_rate * mt / (np.sqrt(vt) + eps)