图像处理

1.对深度学习相关神经网络理解深入,如 DNN、CNN、RNN、GAN 等; 2.有深厚的理论研究背景和数据基础,熟悉 EM、MCMC、LR、LDA、PCA、时间序列等数学方法; 4.熟悉一种以上的深度学习的开源框架,如 Caffe、TensorFlow、ARMAILibrary、SNPE、OpenGLES 等。

Semantic Segmentation Models

语义分割模型:从 FCN 到 DeepLab V3+的全面解析

2015

FCN(全卷积网络)

2015 年提出,首次将卷积神经网络应用于像素级分类,开创了端到端语义分割的先河。FCN 将最后几层全连接层替换为卷积层,允许任意大小的输入图像,并通过上采样(反卷积)恢复分割图的分辨率。

U-Net

特别适用于医学图像分割,其特征是编码器-解码器结构,解码器层与编码器层之间有跳跃连接,用以恢复细节信息。

2016

SegNet

基于 VGG 网络,改进了 FCN 的上采样部分,使用了编码器-解码器结构,其中解码器的上采样层使用了编码器的池化索引来恢复细节。

DeepLab V1

DeepLab 系列模型是语义分割领域的另一个重要里程碑。DeepLab V1 首次引入了 Atrous Convolution 模块,弥补了删除池化模块后感受野大小的影响。

2017

PSPNet(金字塔场景解析网络)

引入了金字塔池化模块(Pyramid Pooling Module),捕获不同尺度的信息,增强了模型对不同大小物体的分割能力。

DeepLab V2

DeepLab V2 在 ResNet 的基础上引入了 ASPP(Atrous Spatial Pyramid Pooling)模块,进一步扩大了感受野并提高了分割精度。

MobileNet V1

深度可分离卷积的应用

2018

DeepLab V3

而 DeepLab V3 通过增加 ASPP 模块的宽度,进一步提升了模型的性能。DeepLab V3+是 DeepLab 系列的最新版本,它增加了网络深度,将 Xception 网络作为主干,使用深度可分离卷积 Depthwise Separable Convolution, 结合了解码器模块,以恢复细节信息,进一步提升了多尺度处理能力。

ENet

专为实时应用设计,使用了高效的编码-解码结构和跳过连接。

MobileNet V2

Inverted Residuals 和 Linear Bottleneck

ICNet

多尺度级联输入,深度监督

BiSeNet

结合了两个分支,Spatial 分支和 Context 分支。

2019

HRNet

维持高分辨率流以捕获更多细节,同时进行多尺度融合。

DANet

Spatial Attention 和 Channel Attention

Fast-SCNN:Fast Semantic Segmentation Network

共享下采样权重双分支网络

OCRNet(Object Contextual Representations)

引入了对象上下文表示,使用注意力机制来建模像素间的关系,增强对局部和全局上下文的理解。

CCNet

提出了交叉注意机制(Criss-Cross Attention),允许模型以较低的计算成本建模长距离依赖

MobileNet V3

SE 模块和 Swish

2021

SegFormer

SETR

图像块编码,输入纯 Transformer 网络提取特征,reshape 特征后卷积上采样

MaskFormer

将分割统一为 Mask 分类任务

2023

Segment Anything Model (SAM)

一种通用的分割模型,能够处理多种类型的分割任务,包括语义分割、实例分割和全景分割。

Generative Model

VAE

AE VAE
VAE GAN Diffusion

GAN

DDPM

  • 生成过程被设计成一系列的马尔可夫步骤,其中每一个步骤只依赖于前一步的状态

DDIM

  • 采样
    • DDIM 在每一步都会预测并尝试直接达到最终的清晰状态,而不是仅仅依赖于当前的模糊状态
    • DDPM 通过马尔科夫链推导下一状态,DDIM 通过减少推理步数加速推理

Stable Diffusion

ControlNet

RAG

DIT

指标

MSE

  • 计算公式

PSNR

  • 单位:信噪比

  • 计算公式

SSIM

  • 通过均值和协方差衡量两张图像的 Luminance(亮度)、Contrast(对比度)和 Structure(结构)
  • 计算公式
  • 取值范围:[-1, 1]

opencv

https://segmentfault.com/a/1190000044071469

cv2.imread(path, flag)

  • flag:
1
2
[return]    type: numpy.ndarray
size: (H, W, C), C -> (BGR)

ImageToTensor

1
2
3
4
5
image = cv2.imread(path)
image_rgb = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)

image = torch.from_numpy(image_rgb).transpose(1, 2).transpose(0, 1)
image = image.float().div(255)

cv2.imwrite(path, image)

TensorToImage

1
2
3
image = image.mul(255).byte()
image = image.transpose(0, 1).transpose(1, 2)
image = image.cpu().numpy()

通道处理

1
2
b, g, r = cv2.split(image)
image = cv2.merge((b, g, r))

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

二值化

  • cv2.threshold()

边缘检测

  • cv2.Canny()

图像滤波

  • cv2.filter2D()
  • cv2.blur()
  • cv2.GaussianBlur()

图像形态学操作

  • cv2.erode() 腐蚀
  • cv2.dilate() 膨胀
  • cv2.morphologyEx() 开闭运算、形态学梯度、顶帽、黑帽等

计算机视觉 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

逻辑思维与项目经验

逻辑思维

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

团队合作与挑战接受度

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

p