常见概念-科研向

这部分内容记录了一系列科研过程中常到的概念,包括深度学习、图像处理、计算机视觉、多模态等方面的内容。

该博文会一直持续更新。

DeepLearning

卷积操作:

说白了,卷积操作是利用卷积核,通过卷积操作来实现对图像特征的提取。

卷积

一些名词:

一些名词

空洞卷积:

空洞卷积

channels:

也被称为通道。

灰度图都是1 channel,彩色图都是3 channels(R、G、B)

卷积核中in_channels 与需要进行卷积操作的数据的 channels一致。

如下图所示,从左到右大小分别为6×6×3,3×3×3,4×4×1.

channel

梯度发散:

采用一些激活函数(如ReLu)时,会出现随着卷积层层数的增加而导致导数指数级增长,即出现梯度发散现象。可以通过引入shortcut来解决:

shortcut:

翻译为“捷径”,为了解决梯度发散问题,在两层之间增加了(带权的)shortcut 。结构如图所示:

shortcut

通过 shortcut 可以直接将浅层的信息传递到深层,可以解决退化问题。

dim:

在深度学习中的卷积操作中,1D通常用于处理序列数据,2D用于处理图像数据,3D则用于处理体积数据(如视频或医学影像中的三维扫描)。

具体而言:

1D: 输入为一维信号(如时间序列)。

2D: 输入为二维的空间数据(如常见的图片,形状为 [batch_size, channels, height, width]),即经典的[N C H W]

注意,有的2D数据格式会是[N H W C],这就需要在代码中做出调整。

3D: 输入为三维的体积数据(如视频,形状为 [batch_size, channels, depth, height, width]),即经典的[N C D H W]

计算图

pytorch的计算图 - 知乎 (zhihu.com)

numpy操作

numpy中有很多很有趣的操作:

array.flatten():展平array

np.transpose(a):转置 a ,等效于 a.T

多维矩阵问题:

【全面理解多维矩阵运算】多维(三维四维)矩阵向量运算-超强可视化 - 知乎 (zhihu.com)

shift操作

其实就是数据的平移位移变换……

卷积神经网络中用于特征图的移位,例如用于处理时空序列数据的位移。

Transformer模型中,shift操作用于序列的偏移或位移,以实现特定的自回归或掩码机制。

detach()

返回一个与当前 graph 分离的、不再需要梯度的新张量。

softmax:

用于解决多分类问题,可以预测每个类别的概率。

softmax

Softmax 层会对上一层的原始数据归一化,转化为一个 (0 , 1) 之间的数值,这些数值可以被当做概率分布,用来作为多分类的目标预测值。

Softmax 函数一般作为神经网络的最后一层,接受来自上一层网络的输入值,然后将其转化为概率。

einsum:

numpy 中一种优雅的矩阵矩阵计算方法,非常复杂。

具体参见:https://zhuanlan.zhihu.com/p/506843213

消息传递神经网络(MPNN)

消息传递神经网络(Message Passing Neural Network)是一类图神经网络,它通过在图的节点之间交换信息来学习节点的表示。它们基于以下步骤工作:

  1. 消息传递:每个节点接收其邻居节点的信息,并根据这些信息生成“消息”。
  2. 聚合:将所有接收到的消息聚合成单个表示,这可以通过不同的函数实现,如求和、求平均或更复杂的操作。
  3. 更新:使用聚合的信息来更新节点的状态。

MPNN的核心思想是通过迭代这些步骤来精炼每个节点的表示,从而捕捉图的结构特征和节点之间的关系。

门控循环单元(GRU)

GRU(gated recurrent unit)是循环神经网络(RNN)的一种变体,用于处理序列数据。与传统的RNN相比,GRU通过引入门控机制来解决梯度消失和梯度爆炸的问题,使得网络能够捕捉长距离依赖关系。GRU包含两个门:

  1. 更新门:决定状态信息应该如何更新。
  2. 重置门:决定过去的状态信息在计算新状态时应保留多少。

在每个时间步,GRU可以选择保留旧状态的信息并融入新输入的信息,这使得它在处理具有复杂依赖结构的数据时非常有效。

EMA

EMA 模型,Exponential Moving Average model,通过计算模型参数的指数加权移动平均来平滑参数更新的过程。

image-20240325235724569

EMA可以近似看成过去 $1/(1−\beta) $ 个时刻 v 值 的平均。

本质是对变量的一种加权平均。在训练过程中,原始模型的参数会不断更新,而 EMA 模型的参数则通过指数加权平均的方式来跟踪原始模型的参数变化。

FFN

前馈神经网络(FFN) 是每个 Transformer 层中的组成部分,它位于每次多头注意力操作之后,对从 Self-Attention 模块中获取的特征进行进一步处理。

FFN 由两个线性变换和一个激活函数(通常是 ReLU 或 GELU)组成。前馈神经网络中的非线性激活函数可以增强模型的表达能力。

1
2
3
4
5
6
7
8
9
10
11
12
13
class FeedForward(nn.Module):
def __init__(self, dim, hidden_dim, dropout = 0.):
super().__init__()
self.net = nn.Sequential(
nn.Linear(dim, hidden_dim), # 第一个线性层
nn.GELU(), # 激活函数
nn.Dropout(dropout), # Dropout
nn.Linear(hidden_dim, dim), # 第二个线性层
nn.Dropout(dropout) # Dropout
)

def forward(self, x):
return self.net(x)

gelu函数图像如下所示:
GELU函数

NIAM

非常冷门……我怎么会写这个的……

NIAM, Neural Implicit Attentive Model ,是一种与深度学习相关的模型。

一种基于注意力机制的神经网络模型,旨在处理具有隐式关系的数据。

隐式关系:不能直接观察到的关系,但可以通过数据间的相关性来推断。NIAM 模型可以自动地学习和捕捉这些隐式关系,从而在各种任务中表现出色,如推荐系统、自然语言处理和图像处理等。

端到端end-to-end

指从原始输入数据到最终输出结果的整个过程由一个统一的模型处理,即输入是原始数据,输出是最后的结果。

2D Feature map

通过卷积神经网络的卷积层和池化层处理后得到的二维矩阵。该矩阵包含了输入图像的某些特征。

准确率、精确度、召回率、F1

准确率 Accuracy

正例和负例中预测正确数量占总数量的比例
$$
ACC=\frac{TP+TN}{TP+TN+FP+FN}
$$

精确度 Precision

预测结果为判断依据,预测为正例的样本中预测正确的比例
$$
Precision=\frac{TP}{TP+FP}
$$

召回率 Recall

实际样本为判断依据,实际为正例的样本中,被预测正确的正例占总实际正例样本的比例。
$$
Recall=\frac{TP}{TP+FN}
$$

F1值

中和了精确率和召回率的指标
$$
F1=\frac{2PR}{R+P}
$$

VAE

变分自编码器VAE(Variational auto-encoder),可以通过编码解码的步骤,直接比较重建图片和原始图片的差异。VAE以概率的方式描述对潜在空间的观察,在数据生成方面表现出了巨大的应用价值。VAE一经提出就迅速获得了深度生成模型领域广泛的关注。

VAE 会将给定输入的每个潜在特征表示为概率分布。当从潜在状态解码时,VAE 将从每个潜在状态分布中随机采样,生成一个向量作为解码器模型的输入。

VAE通过编码器将输入数据映射到一个概率分布,通常假设为高斯分布。不同于传统自编码器生成一个确定的隐变量,VAE生成的是一组分布参数(均值μ和方差σ),并使用这些参数从该分布中采样隐变量。解码器从这些隐变量中重构输入数据。

同时,在损失函数中,VAE引入了交叉熵与KL散度(是不是很熟悉?),KL散度能够确保编码器生成的潜在分布接近标准正态分布,保持潜在空间的连续性和可操作性。这有助于生成新的样本,保证潜在空间的结构合理。

具体步骤:

1). 输入数据 X 输入编码器,得到潜在空间的分布参数(均值和标准差)

2). 使用重参数化技巧从潜在分布中采样潜在变量 z

3). 将采样的 z 输入解码器,生成数据

4). 计算损失函数,包括重构误差和KL散度

5). 使用反向传播最小化损失函数,更新网络参数。

相比GAN等生成模型,VAE的训练更稳定,模型结构更为清晰,易于理解。尽管VAE的生成质量通常不如GAN。

GAN

GAN示意图

GAN于2014年提出。具体而言,GAN的核心结构是生成器与判别器。

生成器的功能是根据真实图像样本X来调整分布,逐步将随机噪声分布z调整为与原始训练数据相似的模拟数据分布,从而实现生成的模拟图像样本X*能够以假乱真。

判别器则负责检测输入数据的真伪,判断输入数据为真实图像X还是模拟图像X*,并将判断结果作为监督信息反馈给生成器,生成器根据判别器的反馈信息来调整图像的生成,使得模拟图像能够更好地“骗过”生成器。

在训练过程中,生成器与判别器交替训练,二者相互竞争、相互制约,最终会达到一种动态平衡。生成器得以在判别器的制约下生成更为真实的数据,判别器也能够通过判断生成器产生的伪造数据,不断提升其鉴别能力。

优化目标函数

生成器通常是一个前馈神经网络,它接收一个随机噪声向量并生成一组样本(例如图像或文本)。生成器学习到的映射是从一个简单分布(如正态分布)到数据分布的转变。

判别器也是一个前馈神经网络,接收一组样本并输出一个概率值,表示该样本是真实数据还是生成的数据。判别器的训练目标是最大化其区分真实和伪造样本的能力。

Transformer

[【论文笔记】Order Matters (AAAI 20) - Yuhan’s blog (yuhan2001.github.io)](https://yuhan2001.github.io/2024/05/04/Order Matters/)

一些解读Transformer的文章:

关于Transformer,面试官们都怎么问?-CSDN博客

关于Transformer的若干问题整理记录 - Adherer的文章

Self-Attention(qkv)

Q、K、V 就是Self-Attention机制的核心。

Q: Query,查询,查询其他元素与自己相关的程度。

K: Key,键,表示序列中的每个元素特征,用来判断是否与其他元素(即Query)有关。

V: Value,值,代表序列中每个元素的实际信息。当Query与某个Key的相似度较高时,这个Value就会对Query的输出产生更大的影响。

在Self-Attention机制中,输入的每个元素都会产生对应的Q、K、V,通过将查询 Q 与键 K 进行相关性计算,然后将这些相关性作为权重应用到值 V 上。

输入序列被用来计算查询 Q 、键 K 和值 V 。每个查询 Q 与所有键 K 计算得到相关性分数,然后通过 Softmax 函数将这些分数归一化为权重,最终这些权重被应用到相应的值 V 上,从而得到注意力表示。

Q、K 和 V 的作用可以简单概括如下:

  • Query(Q):确定关注的内容,是用来“提问”的向量。它表示每个元素希望从其他元素中提取的信息,即当前元素与其他元素的相关性。
  • Key(K):提供与查询相关的上下文,是用来“回答”的向量。它表示每个元素本身的特征,其他元素的Query会根据这些Key来判断它们是否相关。
  • Value(V):是序列中的信息内容。Self-Attention 的最终输出就是根据Query和Key的相似度对这些Value进行加权求和后的结果。

假设输入序列的维度是 $b×n×d$,其中 b 表示batch size,n 表示序列长度,d 表示每个元素的特征维度。

那么,Q K V 的维度均为 $b×n×d_k$。相关计算公式为 $\frac{QK^T}{\sqrt{d_k}}V$ ,$T$是转置操作,$d_k$是K的维度。

除以$d_k$:在softmax之前除以$dk$ 可以将 $QK^T$ 的分布的方差纠正回接近1,这样一来,大部分数值都会分布在softmax梯度适当的位置,也就避免了梯度消失的问题。

大值的点积可能会导致 Softmax 进入梯度消失区域,因为极大的输入值会使 Softmax 函数的梯度接近 0。而通过除以 $\sqrt{d_k}$,可以避免进入这种极端情况,保持梯度稳定

同时,由于add层(残差神经网络)与norm层(LayerNorm归一化),因此Encoder端和Decoder端每个子模块实际的输出为: $LayerNorm(x+Sublayer(x))$ ,其中 Sublayer(x)) 为子模块的输出。

Linear-Attention

Linear-Attention 是一种优化 Self-Attention 的变体,其核心思想是降低计算复杂度。

Linear-Attention 中,使用的是 nn.Conv2d从输入特征图中通过卷积层生成 QKV,这表明它主要用于处理图像等二维数据。

同时,和 Self-Attention 的 $QK^T / \sqrt{d_k}$ 计算不同,Linear-Attention 通过 einsum('bhdn,bhen->bhde', k, v)einsum('bhde,bhdn->bhen', context, q) 来进行计算。

  • 这里直接通过将 K 应用 softmax,然后将其与 V 通过 einsum 进行乘积,生成上下文信息。
  • 后续的 Q 通过与上下文信息进行计算,生成输出。

Cross-Attention

Cross-Attention 用于处理两个不同输入之间的注意力计算。

Cross-Attention 在 Transformer 的编码器-解码器结构中有广泛应用,尤其是在任务中需要处理源数据和目标数据之间的依赖时,比如在机器翻译、图像生成等任务中。

在 Self-Attention 中,QKV 来自同一个输入,而在 Cross-Attention 中,QKV 可以来自不同的输入,常用于需要融合不同数据源的信息时。

Cross-Attention 的查询(Q)来自目标序列(通常是解码器的输入),而键(K)和值(V)来自源序列(通常是编码器的输出),公式仍然是和上面一致。

Cross-Attention 在机器翻译、图像生成、多模态等领域应用非常广泛。

Muti-head-Attention

多头注意力机制在 Self-Attention 的基础上引入多个头(heads),即将注意力机制复制多次,每个注意力头使用不同的权重矩阵进行计算。这样做的目的是通过不同的子空间进行特征表示,从而捕捉不同层次的信息。

Q、K、V 通过不同的线性层,得到不同头的查询、键和值

$Q_i=W_i^QQ, K_i=W_i^KK,V_i=W_i^VV ,i=1,2,…h$ ,W是权重矩阵,h是头的数量。

然后,每个头都独立进行自注意力计算,得到每个头的注意力输出,公式同Self-Attention。

再将所有注意力头的输出拼接起来:

$MultiHead(Q,K,V)=Concat(head_1,head_2,…,head_h)$

最后再对拼接后的结果进行线性变换,得到最终的多头注意力输出:

$output=W^o⋅Concat(head_1,head_2,…,head_h)$

$W^O$ 是输出层的权重矩阵。

多头注意力机制保证了transformer可以注意到不同子空间的信息,捕捉到更加丰富的特征信息。

Decoder端的多头self-attention需要做mask,因为它在预测时,是“看不到未来的序列的”,所以要将当前预测的单词(token)及其之后的单词(token)全部mask掉。

spatial_transformer

空间变换网络(Spatial Transformer Networks,简称STN)是一种深度学习模型,旨在增强网络对几何变换的适应能力。

在现代深度学习中,空间变换模块常常与自注意力机制结合使用,以便于模型能够关注输入数据的不同部分,并在处理过程中考虑这些部分之间的关系。

同时,在一些变体中,SpatialTransformer 可以结合条件输入(如上下文信息、标签等),使得生成的空间变换更具针对性和自适应性。

Diffusion中,SpatialTransformer非常常见。

Vision Transformer(ViT)

Vision Transformer(ViT)是将 Transformer 模型应用于图像分类的一种架构,旨在利用 Transformer 强大的全局建模能力来处理图像任务。

ViT 通过将图像分割成若干个小块patch,将它们看作序列输入到 Transformer 中,以捕捉全局依赖关系。

然后需要一项关键的内容:位置编码(Positional Embedding),以保留图像的空间位置信息。

事实上,在最初的NLP领域,位置编码也是很重要的内容。位置编码一般采用正弦和余弦函数来生成
$$
PE_{pos,2i}=sin\frac{pos}{10000^{\frac{2i}{d_{model}}}}\
PE_{pos,2i+1}=cos\frac{pos}{10000^{\frac{2i}{d_{model}}}}
$$
其中 $d_{model}$ 是编码维度的总大小。

FFN

Bert:

Bert,Bidirectional Encoder Representations from Transformers,是一种基于 Transformer 结构的语言模型,用来生成文本的深层双向表示。它彻底改变了自然语言处理(NLP)领域的研究方式。

BERT 的核心创新之一是双向编码器。在传统的语言模型 LSTM 或 RNN中,模型会顺序从左到右或从右到左预测下一个词。而 BERT 是通过同时考虑句子的左右上下文来学习词汇的含义。这种双向性使得 BERT 能够理解一个词或子词在句子中的更深层次的语义关系。

Transformer架构:BERT 基于 Transformer 编码器,依赖于注意力机制(Self-Attention)来捕捉句子中不同词之间的关系。BERT 只使用 Transformer 的 Encoder 部分,它并不生成文本,而是通过理解现有文本进行分类或问答等任务。

传统语言模型中,单向上下文(仅前向或后向)导致了信息丢失。而BERT 的成功归功于两种新的预训练任务:

1). Masked Language Model (MLM): 传统的语言模型通过预测下一个词来学习,而 BERT 使用了一种称为 Masked Language Model 的技术。在 MLM 中,输入的句子会随机遮盖(mask)一些词(通常是 15%),要求模型预测这些掩盖单词的原始值来实现。模型的目标是在训练过程中预测出这些被遮盖的词

由于模型在训练时看不到某些词,它被迫通过句子的上下文来推测缺失的词,这有助于模型更好地理解词汇的语义和上下文关系。

例如: 输入句子:[CLS] The cat sits on the [MASK]. [SEP] 模型的任务是预测 [MASK] 的正确词(如 “mat”)。

这种训练方式使得BERT能够有效地学习单词的上下文关系和语义信息,从而更好地理解语言。

2). Next Sentence Prediction (NSP): 除了预测遮盖的词,BERT 还引入了 Next Sentence Prediction 任务。这种任务的目标是使模型能够理解句子之间的关系预测给定的两句话是否是连续的。通过这个任务,BERT 可以学会句子间的逻辑关系,从而在处理句子对相关的任务(如问答、自然语言推理等)时表现得更好。

具体来说,BERT 会接收两个句子,模型需要判断第二句话是否是第一句话的连续句。例如:

  • 输入:[CLS] The cat is on the mat. [SEP] It is sleeping. [SEP]
  • 输出:True(句子连贯)

通过这种方式,BERT学习理解句子之间的逻辑和关系,增强对文本的整体理解能力。

计算机视觉

BEV:

BEV: 鸟瞰视角,Bird’s Eye View,是一种从上方观看对象或场景的视角,就像鸟在空中俯视地面一样。在自动驾驶和机器人领域,通过传感器(如 LiDAR 和摄像头)获取的数据通常会被转换成 BEV 表示,以便更好地进行物体检测、路径规划等任务。

FPN:

【目标检测】FPN(Feature Pyramid Network) - 知乎 (zhihu.com)

整理完下面这些发现其实只看这一篇文章就够了。

FPN: 特征金字塔网络,Feature Pyramid Network。

传统方法使用图像金字塔,将图片 resize 到不同的大小,然后分别得到对应大小的特征,然后进行预测。这种方法可以一定程度上解决多尺度的问题,但带来的计算量也非常大。如下图所示:

图像金字塔

也有使用单个feature map进行检测,在网络的最后一层的特征图上进行预测。优点是计算速度快,缺点是最后一层的特征图分辨率低,不能准确的包含物体的位置信息。直接使用这种架构导致预测层的特征尺度比较单一,对小目标检测效果比较差。如下图所示:

featuremap

为了使得不同尺度的特征都包含丰富的语义信息,同时又不使得计算成本过高,FPN 采用top down和lateral connection的方式,让低层高分辨率低语义的特征和高层低分辨率高语义的特征融合在一起。

FPN

三个结构:

Bottom-up:Bottom-up 的过程就是将图片输入到backbone ConvNet中提取特征的过程中。Backbone输出的feature map的尺寸有的是不变的,有的是成2倍的减小的。

Top-down:Top-down 的过程就是将高层得到的feature map进行上采样然后往下传递。高层的特征包含丰富的语义信息,经过top-down 这些语义信息能传播到低层特征上,使得低层特征也包含丰富的语义信息。

Lateral connection:3 个步骤,先 1*1的卷积降低维度,再将得到的特征和上一层采样得到特征图 $P_{n+1}$ 进行融合,直接相加。相加完后再进行一个 3*3 的卷积得到本层的特征输出 $P_n$。

常见模型简称:

LC-GAN : 基于生成对抗网络的人脸数据隐私保护算法模型

CGAN : 条件生成对抗网络,是一种基于监督学习的神经网络深度学习模型

PP-GAN : 隐私保护网络,基于生成对抗网络,引入了针对人脸去识别问题而设计的验证器和调节模块

CLIP

Contrastive Language-Image Pre-Training 模型。一种多模态预训练神经网络,由OpenAI在2021年发布,是从自然语言监督中学习的一种有效且可扩展的方法。

CLIP模型有两个模态,一个是文本模态,一个是视觉模态,包括两个主要部分:

  1. Text Encoder:用于将文本转换为低维向量表示-Embeding。
  2. Image Encoder:用于将图像转换为类似的向量表示-Embedding

CLIP 通过计算文本和图像向量之间的余弦相似度来生成预测。这种模型特别适用于零样本学习任务,即模型不需要看到新的图像或文本的训练示例就能进行预测。CLIP模型在多个领域表现出色,如图像文本检索、图文生成等。

Mamba

Mamba Out!

一文通透想颠覆Transformer的Mamba:从SSM、HiPPO、S4到Mamba_mamba模型-CSDN博客

边缘监测:

Canny Edge

一种经典的图像边缘检测算法。其核心思想是通过多阶段处理来提取图像的边缘,步骤包括高斯滤波、计算梯度、非极大值抑制以及双阈值检测。

HED Edge

一种基于卷积神经网络(CNN)的边缘检测方法,旨在从图像中提取边缘信息。

MLSD Edge

一种轻量化的线段检测方法,通常用于移动端或资源受限的设备上,专注于检测图像中的直线段。这种方法非常适合用于场景理解、几何建模以及三维重建等任务。

MIDAS Depth and Normal

一种基于神经网络的深度估计模型,能够从单张图像推测其深度信息(即每个像素距离相机的远近)。

Openpose

一种基于深度学习的人体姿态估计模型,它能够从图像或视频中检测人体的关节点(如头、肩、肘、膝等),并绘制骨架结构。

Uniformer Segmentation

一种结合 Transformer 和 CNN 的图像分割模型,旨在统一处理局部和全局信息。

通过 UniFormer 架构,图像分割模型能够更好地捕捉图像的全局上下文信息,同时保持对局部细节的敏感度。这种架构在语义分割任务中表现出色,能够有效地区分不同物体或区域。

Diffusion

LDM

Latent Diffusion Model,潜在扩散模型,一种生成模型,结合了扩散模型和潜在空间的思想,用于生成高质量的图像。通过逐步对噪声数据进行去噪,从而生成逼真的图像。

LDM 将数据x投射到一个潜在空间中,然后在这个潜在空间中进行扩散过程得到结果z,最后再将结果z映射回原始数据空间。

关键函数:ddpm.py中的 decode_first_stage 函数与 encode_first_stage 函数,get_first_stage_encoding函数

(这个代码不太好懂……慢慢来看)

kl散度

简而言之,kl散度用于计算两个分布之间的差异。
$$
D_{KL}(p∥q)= \sum_{i=1}^{n}p(x_i)log(\frac{p(x_i)}{q(x_i)})
$$
LDM中,normal_kl一般用于计算两个正态分布之间的差异。

LDM 会对数据进行潜在空间的编解码,而潜在空间中通常使用高斯分布对数据进行建模,因此对高斯分布进行采样、计算对数似然(nll)以及 KL 散度都是训练 LDM 时非常关键的操作。

nll

负对数似然损失(Negative Log-Likelihood,NLL),整个数据集的负对数似然损失就是对所有样本的损失进行求和或平均。
$$
NLL=\frac{1}{2}\sum_i[log(2\pi)+log(\sigma_i^2)+\frac{(x_i-\mu_i)^2}{\sigma_i^2}]
$$

图像处理

上采样与下采样:

上采样(Upsampling)会增加数据的空间分辨率,通过插值或其他方法填充更多的样本点。它可以用于恢复或生成更高分辨率的图像。

上采样会放大图像数据,增加图像的空间分辨率,使得输出图像的尺寸大于输入图像的尺寸。

上采样一般通过插值、转置卷积实现。

下采样(Downsampling)是指减少数据的空间分辨率,通常通过减少样本的数量来实现。它可以用于降低计算负担,减少模型的内存占用,或者在某些情况下减少噪声。

下采样会缩小图像数据,减少图像的空间分辨率,使得输出图像的尺寸小于输入图像的尺寸。

下采样一般通过池化与卷积实现。

Unet中先是下采样,再是上采样。

噪声:

图像噪声是指存在于图像数据中的不必要的或多余的干扰信息

仿射变换:

Affine Transformation,线性变换与平移变化的叠加。

包括缩放(Scale)、平移(transform)、旋转(rotate)、反射(reflection)、错切(shear mapping)

affine transformations

DCT变换

Discrete Cosine Transform,离散余弦变换。

离散余弦变换经常被信号处理和图像处理使用,用于对信号和图像(包括静止图像和运动图像)进行有损数据压缩。这是由于离散余弦变换具有很强的”能量集中”特性:大多数的自然信号(包括声音和图像)的能量都集中在离散余弦变换后的低频部分,而且当信号具有接近马尔科夫过程的统计特性时,离散余弦变换的去相关性接近于K-L变换 (Karhunen-Loève 变换,具有最优的去相关性) 的性能。

全变分模型(Total Variation, TV)

图像处理领域中常用的一种正则化方法,尤其在图像去噪、图像修复和图像重建问题中广泛应用。

核心思想是通过最小化图像的全变分来保留图像中的边缘细节,同时去除噪声或平滑不必要的纹理。

1
2
3
4
5
def total_variation(x):
"""Anisotropic TV."""
dx = torch.mean(torch.abs(x[:, :, :, :-1] - x[:, :, :, 1:]))
dy = torch.mean(torch.abs(x[:, :, :-1, :] - x[:, :, 1:, :]))
return dx + dy

量化

将图像像素点对应亮度的连续变换区间转换为单个特定值的过程,即将原始灰度图像的空间坐标幅度值离散化。量化等级越多,图像层次越丰富,灰度分辨率越高,图像的质量也越好;量化等级越少,图像层次欠丰富,灰度分辨率越低。

量化后,图像就被表示成一个整数矩阵,每个像素具有两个属性:位置和灰度。位置由行,列表示。灰度表示该像素位置上亮暗程度的整数。此数字矩阵M*N就作为计算机处理的对象了,灰度级一般为0-255(8bit量化)。如果量化等级为2,则将使用两种灰度级表示原始图像的像素(0-255),灰度值小于128的取0,大于等于128的取128;如果量化等级为4,则将使用四种灰度级表示原始图像的像素,新图像将分层为四种颜色,0-64区间取0,64-128区间取64,128-192区间的取128,192-255区间取192,依次类推。

OpenCV计算机视觉学习(12)——图像量化处理&图像采样处理(K-Means聚类量化,局部马赛克处理) - 走看看 (zoukankan.com)

MSE:

MSE , Mean Square Error , 均方误差,是衡量图像质量的指标之一。

原理为真实值与预测值的差值的平方然后求和再平均

MSE

PSNR:

PSNR , Peak Signal-to-Noise Ratio 峰值信噪比,定义为

PSNR

其中 $MAX_{I}^2$ 为图片可能的最大像素值。如果每个像素都由 8 位二进制来表示,那么就为 255。

这是针对灰度图像的计算方法,如果彩色图像,通常有三种方法来计算。

  • 分别计算 RGB 三个通道的 PSNR,然后取平均值。
  • 计算 RGB 三通道的 MSE ,然后再除以 3 。
  • 将图片转化为 YCbCr 格式,然后只计算 Y 分量也就是亮度分量的 PSNR。

常见的是第二种与第三种。

一系列评价指标:

$\uparrow$ 表示越高效果越好

信息熵 EN 衡量图像中信息量的度量,表示图像复杂性
空间频率 SF 衡量图像细节和纹理变化的频率,反映图像的锐度
标准差 SD 图像像素强度的标准差,衡量图像的对比度。
峰值信噪比 PSNR 衡量图像重建质量的指标,用于比较原始图像和重建图像之间的差异
均方误差 MSE 衡量图像重建误差的指标,计算原始图像与重建图像之间的均方误差
互信息 MI 衡量两幅图像之间共享信息的量,用于图像配准或融合。
视觉保真度 VIF 根据人眼感知模型评估图像质量的指标,衡量图像保留的视觉信息量。
平均梯度 AG 衡量图像梯度的平均值,表示图像的清晰度。
相关系数 CC 衡量两幅图像的相似度,常用于图像匹配和重建。
差异相关和 SCD 衡量图像结构的差异,评估图像之间的结构相似性。
基于梯度的融合性能 F 基于图像特征相似性的质量评估指标,考虑边缘和纹理特征。
结构相似度测量 SSIM 衡量两幅图像的结构相似度,考虑亮度、对比度和结构信息。
多尺度结构相似度测量 MS-SSIM SSIM 的多尺度扩展版本,综合不同尺度的图像质量。
基于噪声评估的融合性能 Nabf 一种无参考的图像质量评估指标,基于图像的特征提取

性能评估指标主要分为四类,分别是基于信息论的评估指标,主要包括 EN、MI、PSNR、基于结构相似性的评估指标,主要包括SSIM、MS_SSIM、MSE基于图像特征的评估指标, 主要包括SF、SD、AG基于人类视觉感知的评估指标,主要包括VIF以及基于源图像与生成图像的评估指标,主要包括CC、SCD、Qabf、Nabf**。

空域图像:

(62条消息) 【视觉入门】——空域图像增强(邻域运算部分):图像卷积、多种滤波器;二值图像分析及形态学图像处理_Vulcan_Q的博客-CSDN博客_空域图像处理

AUC:

Area Under Curve,指接收器操作特征曲线下的面积,可以用来衡量分类器的性能。

face landmarks:

直译为面部地标,作为一种匹配标准,用于在真实图像生成训练数据过程中实现寻找。

mask:相应区域的掩码。可以理解为图像的某种属性。表现在图像上,是表示图像中某区域内的像素情况,可以用数字来表示。

SBI:

Self-Blended Images,自混合图像,混合来自单个原始图像的伪源图像和目标图像。

LLM:

注:这部分内容几乎全部摘自人大高瓴出版的那本书。

大语言模型

大语言模型是指在海量无标注文本数据上进行预训练得到的大型预训练语言模型。

如 GPT-3 [23],PaLM [33] 和 LLaMA [34]。

目前大语言模型所需要具有的最小参数规模还没有一个明确的参考标准,但是大语言模型通常是指参数规模达到百亿、千亿甚至万亿的模型。

大语言模型的能力

具有较为丰富的世界知识、具有较强的通用任务解决能力、具有较好的复杂任务推理能力、具有较强的人类指令遵循能力。

大语言模型的预训练

由于参数规模巨大,需要使用大规模分布式训练算法优化大语言模型的神经网络参数。

在训练过程中,需要联合使用各种并行策略以及效率优化方法,包括 3D 并行(数据并行、流水线并行、张量并行)、ZeRO(内存冗余消除技术)等。

为了有效支持分布式训练,很多研究机构发布了专用的分布式优化框架来简化并行算法的实现与部署,其中具有代表性的分布式训练软件包括DeepSpeed 和 Megatron-LM。

3H对齐标准

实践应用中,需要保证大语言模型能够较好地符合人类的价值观

3H标准即 Helpfulness(有用性)Honesty(诚实性)Harmlessness(无害性)。

为了解决这一问题,OpenAI 提出了基于人类反馈的强化学习算法(Reinforcement Learning from Human Feedback, RLHF),将人类偏好引入到大模型的对齐过程中。

涌现能力

指当模型扩展到一定规模时,模型的特定任务性能突然出现显著跃升的趋势,远超过随机水平。

软件工程

软硬编码

硬编码:简单来说,硬编码就是将某些值或参数直接写入代码中,而不是通过外部配置、用户输入或程序运行时动态获取

硬编码有缺乏灵活性、维护困难、可读性差、不利于扩展等一系列问题。
以下是一些常用的方法避免硬编码:

  • 使用配置文件:将需要变动的值写入配置文件,程序在运行时读取配置文件获取这些值。这样,当需要修改值时,只需修改配置文件而无需修改代码。
  • 使用环境变量:环境变量是一种在程序运行时动态获取值的方式。通过环境变量,我们可以将配置信息与代码分离,提高代码的灵活性和可维护性。
  • 使用数据库或外部服务:对于需要频繁变动的数据,可以考虑使用数据库或外部服务进行存储和管理。程序通过API接口获取数据,实现与数据的解耦。

 硬编码与软件设计原则中的一些概念是相悖的。例如,开放封闭原则(OCP)强调软件实体(类、模块、函数等)应该对扩展开放,对修改封闭。而硬编码往往导致软件实体对修改不封闭,因为每次修改硬编码的值都需要直接修改代码。

​ 此外,单一职责原则(SRP)也要求我们将功能拆分到不同的类或模块中,每个类或模块只负责一项职责。硬编码可能会使得某个类或模块承担过多的职责,降低代码的可读性和可维护性。

 因此,在编写代码时,我们应该尽量避免硬编码,遵循软件设计原则,提高代码的质量和可维护性。

  • Copyright: Copyright is owned by the author. For commercial reprints, please contact the author for authorization. For non-commercial reprints, please indicate the source.

请我喝杯咖啡吧~

支付宝
微信