跳转至

计算机视觉

👉 计算机视觉范围很广,较传统的有滤波边缘检测特征检测与描述图像分割与聚类图像识别与目标检测运动估计与等等,然后较新的有三维视觉自监督学习多任务学习图像生成修复编辑视频生成多模态大模型等等。

👉 推荐网站: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
形式2:

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)
其中 \(cache\) 累积梯度平方和,用于自适应调整每个参数的学习率。

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)