图像数据集 Image Dataset

数据集建立

数据增强

  • AutoAugment:搜索最优图像处理操作组合

  • RandAugment:已有图像处理集合,确定操作次数 N 和操作幅度 M

  • 分类任务

    • Mixup:按比例混合图像和标签
    • Cutout:图像掩码
    • CutMix:图像掩码混合
  • 目标检测任务

    • Mosaic:图像合成
  • 语义分割任务

    • Copy-Paste:分割结果粘贴到另一张图

数据预处理

  • 数据增强

    旋转、平移、缩放、翻转、随机色调(H)、饱和度(S)、明度(V)调整、等

  • 数据归一化 Normalization

    • Min-Max 归一化
    • Z-Score 归一化
    • RobustScaler 归一化
  • One-Hot 编码

数据类别不平衡问题

  • 采样比例
  • 数据生成

计算机视觉 Computer Vision

【三年面试五年模拟】算法工程师的求职面试秘籍 > 从 ReLU 到 GELU,一文概览神经网络的激活函数

  • https://github.com/DWCTOD/interview/blob/master/detail/%E4%BD%9C%E4%B8%9A%E5%B8%AE%20%E8%A7%86%E8%A7%89%E7%AE%97%E6%B3%95%E5%B7%A5%E7%A8%8B%E5%B8%88%20%E9%9D%A2%E7%BB%8F%EF%BC%882020%E5%B1%8A%EF%BC%89.md

  • https://github.com/GYee/CV_interviews_Q-A

图像处理与计算机视觉基础

基本概念

原理

图像预处理

特征提取

对象检测

图像分类

图像分割

OpenCV 库

读写图像

图像滤波

几何变换

特征检测与描述

深度学习基础

梯度下降

滑动平均

模型微调(Fine-tuning)

基础模块

池化层 Pooling Layer

归一化层 Normalization Layer

  • BN,Batch Normalization
  • IN,Instance Normalization
  • LN,Layer Normalization
  • GN,Group Normalization

BN 是怎么做,作用是什么

激活层

  1. 常见激活函数

    • Sigmoid
    • Tanh
    • ReLU
    • LeakyReLU
    • SoftPlus
    • ELU
    • SELU,自归一化
    • Swish,类 Sigmoid 作为开关
    • GELU
    • GLU
  2. 特性

    • 梯度消失 存在偏导过小
    • 梯度爆炸 偏导累乘过大
    • 梯度裁剪
    • 输出均值为 0 能避免每次权重只能往单一反向变化
    • ReLU 计算复杂度低
    • ReLU 的负半轴为输出值增加稀疏性,减少计算量,但同时会让一些神经元不能更新
    • SoftPlus,ReLU 的平滑

全连接层 Linear

嵌入层 Embedding

卷积层 Convolution

  • 特征

    • 局部感知、权值共享、平移不变、多核
  • 1×1 卷积

    • 特征增强
    • 特征融合
    • 改变通道数
    • 分类
  • 空洞卷积

  • 分组卷积

转置卷积层 Transpose Convolution

优化模块

残差结构 Residual Connection

将输入与层输出相加

  • 优势

    • 缓解梯度消失,增加网络深度
    • 保留信息,特征重用

空间金字塔池化(Spatial Pyramid Pooling,SPP)

空洞空间金字塔池化(Atrous Spatial Pyramid Pooling,ASPP)

HDC

可变形卷积 Deformable Convolution

可分离卷积 Separable Convolution

Transformer

  • 模块结构

    • 多头自注意力机制(Multi-Head Self-Attention Mechanism)
    • 前馈神经网络(Feed-Forward Neural Network)
    • 层归一化(Layer Normalization)
    • 残差连接(Residual Connections)
  • Self-Attention

  • 除以的原因

    • 矩阵计算导致的元素值整体偏大,从而引发梯度消失
    • 计算后的数据平方差为,除以,将分布的方差纠正回接近 1
  • 并行化的体现

    • 序列计算多头注意力
  • 影响计算量的因素

    • 序列长度:点积、矩阵乘
    • 头数量
  • 优势

    • 并行处理整个序列
    • 长距离依赖
  • 缺点

    • 计算量大
    • 超参调优
    • 超长序列处理能力

Cross-Attention

Convolutional Attention

  • SENet -CBAM

基础模型

前馈神经网络

卷积神经网络(CNN)

循环神经网络(RNN)

长短时记忆网络(LSTM)

Inception

模型调优

模型优化

正则化

  • L1 正则化
  • L2 正则化

损失函数

已知 softmax 输出概率序列与实际分布概率序列,计算两者交叉熵

超参数调整

在深度学习中,超参数(Hyperparameters)是指在训练开始前设置的模型参数,不是通过训练学习得到的。超参数的选择对模型性能有很大的影响,不同的超参数设置可能导致显著不同的训练结果。

优化器选择

  • SGD
  • AdaGrad
  • RMSProp
  • Adam

学习率衰减

LR 中的连续值特征是如何处理的 为什么 LR 要先对数据进行归一化处理 LR 用了 sigmoid 函数,那么 LR 是线性模型还是非线性模型,为什么

  • 线性
  • 分段
  • 余弦
  • WarmUp
  • 周期性

缩放法则 Scaling-Law

在 AI 领域中,描述模型性能如何随着模型规模(如参数数量、训练数据量、计算资源等)变化而变化的一组经验法则

  • 应用

    1. 设计更大规模的模型

      指导研究人员如何设计和训练更大规模的模型,以实现更高的性能

    2. 优化资源分配

      如确定是否应增加模型参数数量、增加训练数据量,还是增加计算资源,以实现最优的性能提升

    3. 预测性能

      根据现有模型的性能和缩放法则,可以预测更大规模模型的性能

常见模型评估指标

准确率

召回率

F1 分数

浮点数运算次数 FLOPs

帧每秒 FPS

深度学习框架

训练范式

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
# 加载数据
dataloader = DataLoader()

# 加载模型
model = MyModel()

# 损失函数
criterion = nn.CrossEntropyLoss()

# 优化器
optimizer = optim.Adam(model.parameters(), lr=0.001)
# 学习率衰减策略

# 训练num_epochs
for epoch in range(num_epochs):
# 遍历完整数据集
for inputs, labels in dataloader:
# 梯度置零
optimizer.zero_grad()
# 模型推理
outputs = model(inputs)
# 计算损失
loss = criterion(outputs, labels)
# 累加梯度
loss.backward()
# 梯度更新
optimizer.step()

评估范式

1
2
3
4
5
6
7
# 设置模型评估模式
model.eval()
# 取消梯度更新
with torch.no_grad():
for inputs, labels in test_dataloader:
outputs = model(inputs)
# 计算准确率或其他指标

PyTorch

Tensor

  • 存储

    • 头信息区(Tensor):tensor 的形状(size)、步长(stride)、数据类型(type)等
    • 存储区(Storage):数据
  • stride 属性

    指定维度中一个元素到下一个元素的步长

  • 维度变换

    类型 方法 描述
    维度顺序 permute 指定维度重排,返回共享存储区的 tensor
    transpose 交换维度,返回共享存储区的 tensor
    形状变换 view 返回共享存储区 tensor,要求存储连续,否则调用 contiguous
    contiguous 开辟新的存储区构建连续 tensor
    reshape 若连续则返回原 tensor,否则创建新 tensor
    广播 broadcast_to
    冗余维度 squeeze 压缩维度
    unsqueeze 展开维度
    扩展维度 expand 扩展大小为 1 的维度
    repeat 按照指定维度重复 tensor
    展平维度 flatten
    ravel
    维度剪裁 narrow
    维度展开 unfold
  • 张量乘法

    方法 应用
    torch.matmul() 多维矩阵相乘
    torch.mm() 2 维矩阵相乘
    torch.bmm() 批矩阵相乘
    torch.dot() 点积
    torch.mv() 矩阵向量相乘
    torch.einsum() 复杂张量运算 torch.einsum('ij,jk->ik', a, b)
  • 张量合并与拆分

    • stack 扩展维度拼接
    • cat 根据维度拼接
    • split 按大小分
    • chunk 按块分

nn.Module

模块基类

nn.Sequential

线性模块容器

  • 计算图
  • 环境搭建
  • 数据加载
  • 模型定义
  • 训练
  • 验证
  • 保存
  • 加载模型

PytorchLightning

逻辑思维与项目经验

逻辑思维

准备通过解决实际问题来展示你的逻辑思维能力和数据分析洞察力,可以是以往项目中的案例分析。

团队合作与挑战接受度

思考并准备实例说明你如何在团队中有效沟通、协作解决问题,以及面对技术挑战时的态度和解决策略。

计算机视觉 Computer Vision

【三年面试五年模拟】算法工程师的求职面试秘籍 > 从 ReLU 到 GELU,一文概览神经网络的激活函数

  • https://github.com/DWCTOD/interview/blob/master/detail/%E4%BD%9C%E4%B8%9A%E5%B8%AE%20%E8%A7%86%E8%A7%89%E7%AE%97%E6%B3%95%E5%B7%A5%E7%A8%8B%E5%B8%88%20%E9%9D%A2%E7%BB%8F%EF%BC%882020%E5%B1%8A%EF%BC%89.md

  • https://github.com/GYee/CV_interviews_Q-A

图像处理与计算机视觉基础

基本概念

原理

图像预处理

特征提取

对象检测

图像分类

图像分割

OpenCV 库

读写图像

图像滤波

几何变换

特征检测与描述

深度学习基础

梯度下降

滑动平均

模型微调(Fine-tuning)

基础模块

池化层 Pooling Layer

归一化层 Normalization Layer

  • BN,Batch Normalization
  • IN,Instance Normalization
  • LN,Layer Normalization
  • GN,Group Normalization

BN 是怎么做,作用是什么

激活层

  1. 常见激活函数

    • Sigmoid
    • Tanh
    • ReLU
    • LeakyReLU
    • SoftPlus
    • ELU
    • SELU,自归一化
    • Swish,类 Sigmoid 作为开关
    • GELU
    • GLU
  2. 特性

    • 梯度消失 存在偏导过小
    • 梯度爆炸 偏导累乘过大
    • 梯度裁剪
    • 输出均值为 0 能避免每次权重只能往单一反向变化
    • ReLU 计算复杂度低
    • ReLU 的负半轴为输出值增加稀疏性,减少计算量,但同时会让一些神经元不能更新
    • SoftPlus,ReLU 的平滑

全连接层 Linear

嵌入层 Embedding

卷积层 Convolution

  • 特征

    • 局部感知、权值共享、平移不变、多核
  • 1×1 卷积

    • 特征增强
    • 特征融合
    • 改变通道数
    • 分类
  • 空洞卷积

  • 分组卷积

转置卷积层 Transpose Convolution

上采样

  1. 插值
  2. 反卷积
  3. PixelShuffle

优化模块

残差结构 Residual Connection

将输入与层输出相加

  • 优势

    • 缓解梯度消失,增加网络深度
    • 保留信息,特征重用

空间金字塔池化(Spatial Pyramid Pooling,SPP)

空洞空间金字塔池化(Atrous Spatial Pyramid Pooling,ASPP)

HDC

可变形卷积 Deformable Convolution

可分离卷积 Separable Convolution

Transformer

  • 模块结构

    • 多头自注意力机制(Multi-Head Self-Attention Mechanism)
    • 前馈神经网络(Feed-Forward Neural Network)
    • 层归一化(Layer Normalization)
    • 残差连接(Residual Connections)
  • Self-Attention

  • 除以的原因

    • 矩阵计算导致的元素值整体偏大,从而引发梯度消失
    • 计算后的数据平方差为,除以,将分布的方差纠正回接近 1
  • 并行化的体现

    • 序列计算多头注意力
  • 影响计算量的因素

    • 序列长度:点积、矩阵乘
    • 头数量
  • 优势

    • 并行处理整个序列
    • 长距离依赖
  • 缺点

    • 计算量大
    • 超参调优
    • 超长序列处理能力

Cross-Attention

Convolutional Attention

  • SENet -CBAM

基础模型

前馈神经网络

卷积神经网络(CNN)

循环神经网络(RNN)

长短时记忆网络(LSTM)

模型调优

模型优化

正则化

  • L1 正则化
  • L2 正则化

损失函数

已知 softmax 输出概率序列与实际分布概率序列,计算两者交叉熵

超参数调整

在深度学习中,超参数(Hyperparameters)是指在训练开始前设置的模型参数,不是通过训练学习得到的。超参数的选择对模型性能有很大的影响,不同的超参数设置可能导致显著不同的训练结果。

优化器选择

  • SGD
  • AdaGrad
  • RMSProp
  • Adam

学习率衰减

LR 中的连续值特征是如何处理的 为什么 LR 要先对数据进行归一化处理 LR 用了 sigmoid 函数,那么 LR 是线性模型还是非线性模型,为什么

  • 线性
  • 分段
  • 余弦
  • WarmUp
  • 周期性

缩放法则 Scaling-Law

在 AI 领域中,描述模型性能如何随着模型规模(如参数数量、训练数据量、计算资源等)变化而变化的一组经验法则

  • 应用

    1. 设计更大规模的模型

      指导研究人员如何设计和训练更大规模的模型,以实现更高的性能

    2. 优化资源分配

      如确定是否应增加模型参数数量、增加训练数据量,还是增加计算资源,以实现最优的性能提升

    3. 预测性能

      根据现有模型的性能和缩放法则,可以预测更大规模模型的性能

常见模型评估指标

准确率

召回率

F1 分数

浮点数运算次数 FLOPs

帧每秒 FPS

深度学习框架

训练范式

PyTorch

Tensor

  • 存储

    • 头信息区(Tensor):tensor 的形状(size)、步长(stride)、数据类型(type)等
    • 存储区(Storage):数据
  • stride 属性

    指定维度中一个元素到下一个元素的步长

  • view 方法

    返回共享存储区的 tensor

  • 计算图

  • 环境搭建

  • 数据加载

  • 模型定义

  • 训练

  • 验证

  • 保存

  • 加载模型

PytorchLightning

逻辑思维与项目经验

逻辑思维

准备通过解决实际问题来展示你的逻辑思维能力和数据分析洞察力,可以是以往项目中的案例分析。

团队合作与挑战接受度

思考并准备实例说明你如何在团队中有效沟通、协作解决问题,以及面对技术挑战时的态度和解决策略。

Pytorch Source Code

init

处理逻辑

  1. 判断当前运行环境,加载必须库文件
  2. Define basFic utilities 定义基本工具 typename; is_tensor; ...
  3. Define numeric constants 定义数值常量 e; inf; nan; pi
  4. Define Storage and Tensor classes 定义 Storage 和 Tensor 类

ctypes 库

  • 一个可以在 python 中调用由 C、C++编写并导出的 dll 动态链接库的包
  • ctypes.CDLL('vcruntime140.dll') 加载使用 C、C++编写的vcruntime140.dll文件

.pyi 文件

  • python 中的类型提示文件,也被叫做存根文件 stub file
  • 用于提供代码的静态类型信息,也可以用来表示公共的接口
  • .pyi 文件给出变量或函数的静态类型,实现了 python 和 C、C++的绑定

参考

[1] Pytorch 底层源码解读(一)概览

p