20230308 深度学习技术点2

1、AI大视觉(十八) | Yolo v5的改进思想_mob604756f59f47的技术博客_51CTO博客 

3、yolov5改进

深度学习之学习(3-5)YOLOV5-CSDN博客

增加一层,共4层特征图,每个特征点可以3个anchor,3个预测框

【目标检测】YOLOv5针对小目标检测的改进模型/添加帧率检测_yolov5小目标检测改进_zstar-_的博客-CSDN博客

Yolov5系列(3)-loss解析_yolov5的loss_qyu21490的博客-CSDN博客

目标检测算法——YOLOv5改进|增加小目标检测层_加勒比海带66的博客-CSDN博客

4、yolov5调试参数

https://www.cnblogs.com/irvingluo/p/13873699.html

yolov5中train.py代码注释详解与使用教程_python_脚本之家

7、人群关联154dfa7781e445ad954d3efae81597a3.png

12、SGD\Adam\AdamW

SGD和Adam是两种常用的优化算法,但在具体工作方式和效果上存在一定差异。我们可以从以下几个方面进行通俗的区别理解:1. 步长选择:SGD: timestep只有前向传播得到的loss,所以SGD需要手动设置较大的学习率step size,以产生足够大的更新。如果步长过大容易不收敛,过小则训练速度慢。Adam: timestep利用前向传播的loss及之前的loss来估计二阶矩,可以自动调整每个参数的步长,步长大小更合适,无需人工设置。2. 梯度考量:SGD: 只利用当前的梯度下降方向,无法积累历史信息。Adam: 利用一阶矩估计历史梯度平均值,二阶矩估计历史梯度方差,可以累积历史信息引导优化方向。3. 收敛速度:SGD: 需要较长时间的迭代才能收敛,特别是如果loss表面曲率大,收敛会很慢。Adam: 能更快地逼近最优解,一般需要更少的迭代次数就可以达到较好的效果。因为Adam积累历史信息,更加智能地调整步长和方向。4. 超参数依赖:SGD: 需要精心设定较大学习率、衰减策略等超参数,较难收敛,易产生震荡。Adam: 超参数选择范围更广,较易收敛,无需过多调参,使用默认值也能工作的很好。综上,Adam相比SGD有自动调整学习率、利用历史信息引导方向和更快收敛速度等优势,易于实现且较少依赖超参数。但是,SGD最终可以达到更高精度,更适用于精调模型。所以,在实际使用中可以先使用Adam快速收敛,后使用SGD进行精细调优。这是使SGD和Adam的各自优势的一种很好妥协方案。

Adam和AdamW都是优化神经网络的算法,但在具体工作机制上存在一定差异。我们可以从以下几个方面进行简单区分:1. 权值衰减:Adam: 不具有权值衰减机制,无法解决神经网络中的过拟合问题,模型容易过度复杂。AdamW: 引入了权值衰减机制,可以缓解过拟合,得到更加简洁和泛化的网络结构。由此可以提高模型泛化能力和最终精度。2. 计算方程:Adam:

math
m_t = β_1 m_{t-1} + (1 - β_1) g_t 
v_t = β_2 v_{t-1} + (1 - β_2) g_t^2
m_t = m_t / (1 - β_1^t)
v_t = v_t / (1 - β_2^t) 
θ_t = θ_{t-1} - α m_t / (sqrt(v_t) + ε)

AdamW:

math
m_t = β_1 m_{t-1} + (1 - β_1) g_t 
v_t = β_2 v_{t-1} + (1 - β_2) g_t^2
m_t = m_t / (1 - β_1^t) 
v_t = v_t / (1 - β_2^t)
θ_t = θ_{t-1} -  η (α m_t / (sqrt(v_t) + ε) + λ θ_{t-1}) 

由此可以看出,AdamW只是在Adam的基础上增加了`λ θ_{t-1}`这一权值衰减项。3. 超参数选择:Adam: 只需要选择较小的学习率α即可,其他参数使用默认设置。AdamW: 除学习率η外,还需要选择权值衰减系数λ,这增加了一定超参数调优难度。综上,AdamW在Adam的基础上加入了权值衰减机制,可以有效防止过拟合,提高模型泛化能力,所以可以取得更高的最终精度。但是 AdamW需要选择更多的超参数,调优难度也更大。因此,如果追求极高精度,可以选择AdamW;如果更注重易用性,Adam也是一个很好的选择。两者可以根据实际需求进行灵活切换。
     

20.参数量和内存大小b和B的区别?以及b、B、KB、MB、TB、PB、EB的换算_b与b不同_七色花的姐姐的博客-CSDN博客

TFLOPS_百度百科

B和T是表示模型参数量的两个不同数量级别:B(Billion)表示十亿级,如1.7B的参数量表示约17亿个参数。
T(Trillion)表示万亿级,如0.5T的参数量表示约500亿个参数。这两个参数量级别之间相差10倍,T级别的模型规模是B级别的10倍以上。一般来说,模型的参数量达到或超过:- 10亿(1B)的参数时,会采用B级别来round表示,如1.7B、3.2B等。- 100亿(10B)的参数时,也可以采用B级别,但 magnitude 会超过10,如12B、50B等。- 1000亿(100B或0.1T)的参数时,可以同时用B级别或T级别来round,如0.1T、0.5T或50B、100B等。- 超过1万亿(1T)的参数时,T级别的表达方式更为典型,如2T、5T、10T等。所以,这两个参数量级别的选择与模型的具体大小相关:- 对于10亿-1000亿(1B-100B)的参数量,B级别的表达方式更为普遍,如1.7B、50B等。- 对于1000亿(0.1T)以上,特别是超过1万亿(1T)的参数量,T级别的表达方式更为典型,如0.5T、3T、10T等。 - 在两级别交界的 1000亿参数,可以同时使用0.1T或100B来表达。 

模型大小 与参数量计算_模型参数量_AI视觉网奇的博客-CSDN博客

23. 反向传播计算梯度和模型参数更新

在深度学习模型的训练中,loss.backward()和optimizer.step()是两个非常重要的函数,但其功能不同:loss.backward():用于计算loss相对于所有参数的梯度。它实现了反向传播算法,根据loss函数计算出每个参数的梯度值。optimizer.step():用于根据计算出的梯度值更新模型的参数。它会根据 optimizer的算法(如SGD、Adam等)来更新参数,以最小化loss函数。所以,这两个函数在训练过程中发挥不同的作用:loss.backward():计算梯度值
optimizer.step():更新参数一般的训练迭代过程是:1. 正向传播:通过模型计算预测值和loss2. 反向传播:loss.backward()计算各参数的梯度值3. 梯度下降:optimizer.step()通过优化器更新参数值4. 重复步骤1-3,进行下一轮迭代训练可以看出,loss.backward()就是实现反向传播算法计算梯度的函数,它给出了loss相对于每个参数的梯度值,代表了各参数应该修改的方向和大小。而optimizer.step()则根据这些梯度值和优化器的算法来更新每个参数,以最小化loss函数。 

优化器中一阶动量和二阶动量的区别

一阶动量和二阶动量是优化算法中两个重要的概念,它们分别用于考虑梯度信息和曲率信息,以帮助模型在训练中更有效地更新参数。

  1. 一阶动量(First Order Moment):

    • 一阶动量是指梯度的一阶矩(平均值)。
    • 通常用一个变量(如m)表示,计算方式是对当前梯度乘以一个衰减系数(通常在0到1之间)再加上上一时刻的一阶动量乘以一个学习率。
    • 公式:��=�1⋅��−1+(1−�1)⋅∇��mt​=β1​⋅mt−1​+(1−β1​)⋅∇Jt​ 其中,∇��∇Jt​ 是当前时刻的梯度,�1β1​ 是衰减系数,��mt​ 是当前时刻的一阶动量。
  2. 二阶动量(Second Order Moment):

    • 二阶动量是指梯度的二阶矩。
    • 通常用一个变量(如v)表示,计算方式类似于一阶动量,对当前梯度的平方乘以一个衰减系数再加上上一时刻的二阶动量乘以一个学习率。
    • 公式:��=�2⋅��−1+(1−�2)⋅(∇��)2vt​=β2​⋅vt−1​+(1−β2​)⋅(∇Jt​)2 其中,∇��∇Jt​ 是当前时刻的梯度的平方,�2β2​ 是衰减系数,��vt​ 是当前时刻的二阶动量。

这两者在优化器中的应用常见于Adam优化器,其中一阶动量用于考虑梯度信息,而二阶动量用于考虑梯度的平方,从而更全面地更新参数。这有助于在训练中更快地收敛,尤其是在处理非常崎岖或弯曲的损失函数表面时。

Adam那么棒,为什么还对SGD念念不忘?一个框架看懂深度学习优化算法

Adam为什么会自适应地调整每个参数的学习率

Adam之所以能够自适应地调整每个参数的学习率,是因为它引入了一阶动量(梯度的一阶矩)和二阶动量(梯度的二阶矩)的概念,并在参数更新中使用了这些信息。这种自适应性的特性有助于更有效地调整学习率,适应不同参数的梯度情况。

具体来说,Adam算法中使用了两个动量变量,分别是一阶动量 �m 和二阶动量 �v。它们的更新规则分别如下:

  1. 一阶动量 ��mt​ 更新: ��=�1⋅��−1+(1−�1)⋅∇��mt​=β1​⋅mt−1​+(1−β1​)⋅∇Jt​ 其中,∇��∇Jt​ 是当前时刻的梯度,�1β1​ 是衰减系数。

  2. 二阶动量 ��vt​ 更新: ��=�2⋅��−1+(1−�2)⋅(∇��)2vt​=β2​⋅vt−1​+(1−β2​)⋅(∇Jt​)2 其中,∇��∇Jt​ 是当前时刻的梯度的平方,�2β2​ 是衰减系数。

然后,使用这两个动量来更新参数 �θ: ��+1=��−���+�⋅��θt+1​=θt​−vt​​+ϵα​⋅mt​ 其中,�α 是学习率,�ϵ 是一个很小的数,防止分母为零。

关键点在于,更新中有一个除以 ��+�vt​​+ϵ 的操作,这个操作使得学习率在不同参数上被自适应地调整。当某个参数的梯度较大时,对应的 ��vt​ 也会较大,从而减小了对应参数的学习率,使其变得更小。相反,当某个参数的梯度较小时,学习率相对较大,从而更好地适应不同参数的梯度变化情况。

这样,Adam通过综合考虑梯度的一阶和二阶信息,使得每个参数的学习率能够根据其梯度情况进行自适应调整,提高了算法在训练中的效率和稳定性。

Adam和SGD区

Adam(Adaptive Moment Estimation)和SGD(Stochastic Gradient Descent)都是优化算法,用于训练机器学习模型。它们在更新参数的方式、使用的信息以及收敛性等方面存在一些重要的区别。

  1. 梯度信息的使用:

    • Adam: 使用一阶动量(梯度的一阶矩)和二阶动量(梯度的二阶矩)来更新参数。Adam算法在更新时考虑了梯度信息和梯度平方的信息,从而更全面地调整学习率。
    • SGD: 只使用梯度信息来更新参数,没有考虑梯度的二阶矩。
  2. 学习率调整:

    • Adam: 具有自适应学习率特性。通过一阶和二阶动量的计算,Adam会自适应地调整每个参数的学习率,对于不同参数可以有不同的学习率。
    • SGD: 通常采用固定学习率或手动衰减学习率,对于不同参数使用相同的学习率。
  3. 参数的更新方式:

    • Adam: 参数更新考虑了一阶和二阶动量,具有动量项和自适应学习率项。
    • SGD: 参数更新仅考虑梯度信息,一般包括一个学习率和动量(如果使用动量SGD)。
  4. 超参数设置:

    • Adam: 需要设置一些超参数,如衰减系数 �1β1​(一阶动量的衰减系数)、�2β2​(二阶动量的衰减系数)以及学习率等。
    • SGD: 主要需要设置学习率和动量(如果使用动量SGD)。
  5. 收敛性和性能:

    • Adam: 通常在训练过程中能够更快地收敛,尤其在处理非常崎岖或弯曲的损失函数表面时表现较好。
    • SGD: 在某些情况下可能需要更仔细的学习率调整,并且对于不同问题可能需要更多的调参工作。

选择使用Adam还是SGD通常取决于具体的问题和数据,以及对于训练效果和计算资源的需求。在实践中,研究人员和从业者可能会尝试不同的优化算法来找到最适合其任务的方法。

24.输出feature_map和heatmap图片

基于Pytorch实现卷积神经网络feature map/特征图可视化(以残差网络ResNet18为例) - 知乎

Pytorch自带Resnet50特征图heat map热力图可视化_特征可视化热力图_CSDN@zxy的博客-CSDN博客

【深度学习】pytorch 可视化类激活的热力图 Visualizing heatmaps of class activation_图像分类热力图_XD742971636的博客-CSDN博客

可视化类激活的热力图(Class Activation Maps,CAM)有以下主要作用:1. 理解CNN的分类决策CAM可以高亮显示图像中最重要的区域,这些区域激活了CNN对特定类的预测。这可以直观地理解CNN对图像进行分类决策时主要依赖于哪些特征或对象部分。2. 检查模型的盲点如果某个对象部分明显影响分类,但热力图中对应区域却没有高亮显示,则说明模型可能忽略了该信息,存在盲点。这可以作为提高模型鲁棒性的方向。3. 分析模型的偏置如果热力图总是高亮同一类型的特征,而较少关注其他可区分对象的特征,则模型可能存在偏置。这提示可以通过增加样本或调整损失函数的方式减少模型的偏置。4. 定位目标或障碍物对于检测任务,热力图可以近似定位目标物体或障碍物的位置。这对于理解检测模型的预测及提高其性能有很大帮助。5. 寻找数据集的问题如果热力图高亮的区域并不 matches 最终的类别,则数据集可能存在问题,包含错误的类别标注或特征混淆的样本。这可以驱动人工检查数据集及提高其质量。所以,CAM主要通过高亮显示最为重要的特征区域,让人更加直观理解模型的预测理由和依据。这有助于理解模型本身,发现其潜在的问题,提高模型的性能,以及提高数据集的质量。CAM已经被广泛应用于各种视觉任务中,如分类、检测、分割等。结合具体的模型及任务,CAM可以呈现出不同的效果及提供不同程度的解释。但其核心作用是让黑箱的深度学习模型变得更加透明和可解释。 

类中心的解释:

在深度学习中,"类中心"通常是指在分类任务中,每个类别所对应的中心点或代表点。这个中心点可以是一个向量或特征空间中的一个点,用来表示该类别的特征分布的中心位置。

在深度学习中,分类任务是指根据输入的数据(例如图像、文本或声音)将其归类到预定义的类别中。深度学习模型在进行分类任务时,会学习从输入数据到输出类别之间的映射关系。对于每个类别,模型会学习到该类别的特征分布,这个特征分布可以在特征空间中表示为一个集群或聚集的点群。

类中心就是表示这个特征分布中心的点,可以是该类别中样本的平均特征向量或其他聚类算法得到的中心点。对于新的输入数据,模型会计算其特征向量,并将其与各个类别的类中心进行比较,从而确定其最有可能属于的类别。

需要指出的是,类中心的计算方法可能因深度学习模型的类型和任务的不同而异。在某些情况下,类中心是由模型在训练过程中学习得到的,而在其他情况下,它可能是由预处理或其他特定方法计算得到的。

总的来说,类中心在深度学习分类任务中是表示每个类别特征分布中心的概念,用于帮助模型进行分类决策。

25.激活函数在反向传播中的计算

在反向传播中,激活函数也起着重要作用。它影响着网络中每个层的参数更新。在反向传播中,我们需要计算每个参数相对于损失函数的偏导数,即:

∂Loss / ∂θ

其中,Loss表示损失函数,θ表示网络参数(权重和偏置)。为了计算某一层的参数偏导数,我们需要知道下一层参数的偏导数,然后利用链式法则进行推导。而下一层的参数偏导数又依赖于其下一层的偏导数,以此类推。在这个推导过程中,激活函数起到连接各层的作用。当前层的参数偏导数可以表示为:

∂Loss / ∂θ = ∂Loss / ∂a * ∂a / ∂θ = 已知的下一层参数偏导数 * 激活函数对当前层参数的偏导数

其中,a表示激活函数的输出,也就是当前层的输出。所以,激活函数在反向传播中,其偏导数的值连接了当前层与下一层的参数更新。当前层的参数会根据激活函数的梯度和下一层的参数梯度来更新。不同的激活函数其偏导数的表达式也不同,主要有:- sigmoid:∂output/∂input = output * (1 - output)
- tanh:∂output/∂input = 1 - (output)^2
- ReLU:∂output/∂input = 1(if input > 0), 0(if input <= 0)
- LeakyReLU:∂output/∂input = 1(if input > 0), 0.01(if input <= 0)
- softmax:∂output/∂input = output * (1 - output)   (相当于sigmoid)所以,在反向传播中,激活函数通过其偏导数连接了相邻两层的参数更新过程。它控制着损失函数对当前层参数更新的影响力。选择恰当的激活函数,其偏导数可以避免梯度消失,加速参数更新,这也是许多新型激活函数诞生的初衷。

26.以下是一个简单的神经元Python实现代码示例:
```python
import numpy as np
class Neuron:
def __init__(self, input_size):
    # 随机初始化权重
    self.weights = np.random.rand(input_size)
    # 初始化偏置为0
    self.bias = 0

def forward(self, input_data):
    # 计算加权和并加上偏置
    weighted_sum = np.dot(input_data, self.weights) + self.bias
    # 计算输出值
    output = self.activation_function(weighted_sum)
    return output

def activation_function(self, x):
    # 激活函数使用sigmoid
    return 1 / (1 + np.exp(-x))
```

24.

目标分类是图像检测与分割的基本问题,其性质通常是非线性的,

主要有以下几个原因:1. 图像数据高维且复杂。图像包含大量像素信息,是一个高维空间的数据。而高维空间通常很难用线性模型进行建模与分类。2. 目标形状各异。不同目标的形状、大小以及比例都可能不同,这使得无法通过简单的线性变换进行识别与分类。3. 目标分割复杂。要精确地区分图像中的每个目标以及其边界,需要复杂的非线性模型。线性模型很难处理这种细粒度的分割问题。4. 光照变化及遮挡。图像中的光照条件的变化以及目标的遮挡会带来很大困难,这也是线性模型难以处理的。需要更强大的非线性模型来抽象这种变化。5. 训练样本不平衡。目标分类的数据集通常存在类别不平衡的问题,少数目标的样本远少于大多数目标。这也使得线性模型很难达到较好的分类效果。 

25.

余弦学习率调度(Cosine Learning Rate Schedule)和普通的自适应学习率调度是两种不同的学习率调整策略,它们在训练深度学习模型时有不同的工作原理和效果。

  1. 余弦学习率调度(Cosine LR Schedule)

    • 工作原理:余弦学习率调度模仿余弦函数的形状,通过周期性地降低学习率来平滑地调整模型的训练。初始学习率会逐渐降低至最小学习率,然后再逐渐增加,形成一个余弦波状的学习率变化曲线。
    • 优点:在训练初期,较大的学习率可以加速收敛,避免陷入局部极小值。后期学习率的微调有助于稳定模型并获得更好的性能。
    • 适用情况:适用于对学习率变化有周期性需求的情况,如训练较大规模的模型或进行迁移学习时。
  2. 普通自适应学习率调度

    • 工作原理:普通的自适应学习率调度通过监测训练过程中损失函数或验证误差的变化,自动调整学习率。当损失函数收敛时,学习率会逐渐减小,以便更精确地调整模型参数。
    • 优点:可以根据训练进程的实际情况动态地调整学习率,避免学习率过大导致训练不稳定,或学习率过小导致训练收敛缓慢。
    • 适用情况:适用于大多数深度学习任务,特别是当模型的训练过程不确定或具有不同阶段的特点时。

Adam(Adaptive Moment Estimation)和SGD(Stochastic Gradient Descent)是深度学习中两种常用的优化算法,用于训练神经网络。它们在更新模型参数的方式和性能方面有一些区别。下面是Adam和SGD的主要区别:

  1. 算法性质

    • Adam:Adam是一种自适应学习率算法,结合了动量方法和自适应学习率调整。它根据每个参数的历史梯度平方的指数移动平均值来自适应地调整学习率。
    • SGD:SGD是随机梯度下降算法,它在每次迭代中仅使用一个样本的梯度来更新模型参数。它的学习率通常是固定的。
  2. 学习率调整

    • Adam:Adam通过计算每个参数的自适应学习率,可以在训练的不同阶段使用不同的学习率。它根据梯度的平方和以及参数的历史信息来调整学习率。
    • SGD:SGD通常具有固定的学习率,或者使用手动调整的学习率衰减策略。
  3. 动量

    • Adam:Adam引入了动量概念,使用一阶矩估计(平均梯度)和二阶矩估计(梯度平方的平均值)来计算梯度更新方向。
    • SGD:SGD也可以使用动量,但通常需要手动设置动量参数。
  4. 初始化

    • Adam:Adam通常需要对学习率和其他一些超参数进行初始化,如β1、β2等。
    • SGD:SGD的初始化相对简单,仅需要设置学习率。
  5. 收敛性和稳定性

    • Adam:由于自适应学习率和动量的引入,Adam通常在训练初期可以更快地收敛,并且对参数的不同尺度比较稳定。
    • SGD:SGD可能因为固定学习率和样本噪声,需要更多的迭代来收敛,但在训练过程中可能会更稳定。

在选择使用Adam还是SGD时,需要根据具体的问题、数据集和模型来决定。在实际应用中,还可以考虑使用它们的变种,如AdamW、SGD with Momentum等,以达到更好的训练效果。

26.CNN 相对来说,由于空间共享参数的存在,本身就存在较高的泛化能力

局部感知/平移不变,图像物体在哪个位置,都可以检测到相同的局部特征。

27.

在关键点检测任务中,使用heatmap(热图)作为目标的预测方式相对于回归的方法有一些优势。以下是一些使用heatmap进行关键点检测的优点:

  1. 位置不变性:使用heatmap可以在一定程度上实现位置不变性。heatmap对应于输入图像中的每个像素,可以在像素级别对关键点位置进行建模,从而使模型对关键点的位置变化更加鲁棒。

  2. 多个关键点:在关键点检测任务中,通常需要检测多个关键点,每个关键点可能位于不同的位置。使用heatmap可以在一个图像中同时预测多个关键点,每个关键点在heatmap上具有自己的高值峰。

  3. 可解释性:heatmap可以为每个关键点提供更直观的可视化,因为每个关键点对应heatmap上的一个高值峰,更容易理解和可视化。

  4. 多尺度问题:关键点可能存在于不同尺度的图像中。使用heatmap可以更好地捕捉不同尺度下关键点的位置,而回归方法可能需要处理尺度变化带来的问题。

  5. 对噪声的鲁棒性:heatmap可以通过高斯核等方式减少对输入噪声的敏感性,从而提高模型对噪声的鲁棒性。

  6. 损失函数设计:基于heatmap的损失函数可以更好地衡量预测与实际目标之间的距离,使得优化过程更加有效。

关键点检测任务可以使用回归方法,但通常情况下,使用heatmap方法更为常见和有效。然而,有些情况下使用回归方法可能会更合适:

  1. 少量关键点:当关键点数量相对较少且位置较为离散时,使用回归方法可能更加合适。在这种情况下,每个关键点可以由一个回归模型直接预测其坐标。

  2. 密集关键点分布:如果关键点分布比较密集,而不同关键点之间的位置关系比较紧密,那么使用回归方法可能更容易建模。

  3. 结构化关键点:当关键点之间有一定的结构关系时,使用回归方法可以更好地捕捉这些关系。例如,人脸关键点中的眼睛、鼻子、嘴巴等通常具有一定的相对位置关系。

  4. 特定应用需求:某些特定应用场景中,需要对关键点的位置进行更精细的调整,而不仅仅是检测出最可能的位置。在这种情况下,回归方法可能更加适用。

需要强调的是,在大多数情况下,使用heatmap方法相对于回归方法更常见,因为heatmap方法可以在一个图像中同时检测多个关键点,具有更好的位置不变性、多尺度性能和鲁棒性。同时,heatmap方法也通常具有更好的可解释性,能够更直观地表示每个关键点的位置。当选择使用关键点检测方法时,应根据具体任务、数据集和模型的特点来权衡和选择合适的方法。

28.

Hrnet损失函数_关键点检测损失函数_Begin,again的博客-CSDN博客

30.

YOLO是多尺度检测,那么每个尺度负责检测的物体大小范围是怎么计算的呢? - 知乎

31.

【PyTorch】torch.manual_seed() 详解_想变厉害的大白菜的博客-CSDN博客

32.yolo nms

1. xywh conf score..(1, 85)

2.筛选出conf>conf_thres

3.根据score求出最大,对应标签

4.conf = conf*score >conf_thres 筛选出,并把conf,label赋值为结果(1,6)

5.对conf进行排序

6.将不同类别的框offset到不同区域

7.nms,对score从大到小排序,计算iou,大于阈值的话删除,保留概率大的。继续取最大score计算iou,重复步骤。

非极大值抑制(Non-Maximum Suppression,NMS)是一种用于在目标检测任务中降低冗余边界框数量的技术。它通过保留具有最高置信度的边界框,并删除与其具有重叠度较高的其他边界框来实现这一目标。以下是 NMS 的计算过程的一般说明:

  1. 输入参数: NMS 的输入通常包括两个主要参数:

    • 边界框(Bounding Boxes):一组边界框,每个边界框由其左上角和右下角的坐标表示。通常,每个边界框还伴随有一个与之相关的置信度分数,表示该边界框包含对象的可能性。

    • IoU 阈值(Intersection over Union threshold):IoU 是指两个边界框的交集区域与它们的并集区域之比。IoU 阈值是一个用户定义的参数,通常在 [0, 1] 范围内,用于确定哪些边界框之间的重叠被认为是显著的。

  2. 按照置信度排序: 首先,根据边界框的置信度分数,对所有边界框进行降序排序。也就是说,将具有最高置信度的边界框排在前面。

  3. 初始化保留的边界框列表: 创建一个空列表,用于存储最终保留的边界框。

  4. 遍历排序后的边界框列表: 从最高置信度的边界框开始,依次遍历排序后的边界框列表。

  5. 计算与当前边界框的 IoU: 对于当前边界框,计算它与后续边界框的 IoU。IoU 的计算方式如下:

    • 计算两个边界框的交集区域。
    • 计算两个边界框的并集区域。
    • 将交集区域除以并集区域,得到 IoU 值。
  6. 检查 IoU 是否高于阈值: 如果当前边界框与后续边界框的 IoU 值高于用户定义的 IoU 阈值,则认为它们之间存在显著的重叠。在这种情况下,通常会删除具有较低置信度分数的边界框,以保留置信度较高的边界框。

  7. 将当前边界框添加到保留列表: 如果当前边界框与后续边界框的 IoU 不高于阈值,则将当前边界框添加到保留的边界框列表中。

  8. 继续遍历: 继续遍历排序后的边界框列表,重复步骤 5 和 6,直到所有边界框都被处理。

  9. 返回保留的边界框列表: 最终,保留的边界框列表将包含具有最高置信度的边界框以及与它们高度重叠的边界框已被删除。

NMS 的结果是一组相对散布的边界框,每个边界框都具有高置信度分数,且彼此之间的重叠较小。这有助于减少冗余检测,并提供更干净、更可靠的对象检测结果。 IoU 阈值的选择通常取决于具体的应用和任务,可以根据需要进行调整。

33.

步态识别算法是一种用于识别和分析个体行走模式(步态)的计算机视觉和模式识别技术。步态识别在生物识别、安全监控、医疗保健、体育分析等领域具有广泛的应用。以下是一些常见的步态识别算法和方法:

  1. 基于视频的步态识别:这种方法使用摄像头捕捉行走者的视频图像,然后提取步态特征进行识别。通常采用的特征包括步长、步幅、步速、步态周期等。一些常见的技术包括背景减除、轮廓分析和深度学习方法(如卷积神经网络)。

  2. 基于传感器的步态识别:这种方法使用加速度计、陀螺仪和其他传感器来监测个体的运动。传感器可以放置在身体的不同部位,如腰部、腿部或鞋子上,以便获取不同角度和信息。然后,使用信号处理和模式识别技术来提取和识别步态特征。

  3. 基于机器学习的步态识别:机器学习算法,如支持向量机(SVM)、决策树、随机森林和深度学习,可以用于步态识别。这些算法通常需要大量的训练数据,并能够自动学习和识别不同的步态模式。

  4. 基于模型的步态识别:这种方法使用数学模型来描述步态模式,例如倒立摆模型或轨迹生成模型。通过与实际观测数据进行比较,可以识别匹配的模型。

  5. 基于特征提取的步态识别:这种方法涉及从步态数据中提取重要的特征,例如峰值、谷值、周期性模式等。这些特征可以用于识别不同的步态模式。

  6. 基于深度学习的步态识别:深度学习技术,尤其是卷积神经网络(CNN)和循环神经网络(RNN),已经在步态识别中取得了显著的进展。这些网络可以自动提取和学习步态特征,无需手工设计。

步态识别算法的选择通常取决于应用场景、可用的数据和传感器,以及性能要求。不同的算法和方法可以用于不同的步态识别任务,包括身份验证、异常检测、性别识别等。

33.

https://github.com/roboflow/supervision

34.

CNN和Transformer 捕获特征的区别

卷积神经网络(CNN)和Transformer是两种不同的神经网络架构,它们在捕获特征和处理序列数据方面具有一些显著的区别。以下是CNN和Transformer捕获特征的主要区别:

  1. 数据类型

    • CNN:最初设计用于图像处理,特别适用于处理二维数据(如图像)。CNN通过卷积操作在不同的位置和尺度上提取局部特征。
    • Transformer:最初设计用于自然语言处理(NLP)任务,特别适用于序列数据(如文本)。Transformer的注意力机制允许它在输入序列中动态地捕获全局依赖关系。
  2. 局部感知性 vs. 全局依赖性

    • CNN:CNN具有局部感知性,每个神经元只关注其局部感知域内的特征。这使得CNN适合于捕获相邻像素点的局部结构和纹理信息。
    • Transformer:Transformer具有全局依赖性,通过自注意力机制(self-attention)可以在输入序列中捕获全局的依赖关系。这使得它在处理序列数据中的长距离依赖性方面表现出色。
  3. 层次结构

    • CNN:CNN通常由多个卷积层和池化层交替组成,层次结构逐渐提取更高级别的特征表示,从边缘和纹理到高级语义特征。
    • Transformer:Transformer通常由多个编码器和解码器层组成,每一层都可以同时考虑整个输入序列,没有明确的层次结构。这使得Transformer在处理不同抽象级别的特征时更加灵活。
  4. 参数共享

    • CNN:CNN使用参数共享,相同卷积核在不同位置上共享权重。这降低了模型的参数数量。
    • Transformer:Transformer中的自注意力机制不涉及参数共享,每个位置上的特征都会根据其它位置上的特征进行加权组合,因此参数数量通常较大。
  5. 任务适应性

    • CNN:CNN在图像处理和计算机视觉任务中表现出色,如图像分类、目标检测、图像分割等。
    • Transformer:Transformer在自然语言处理领域取得了巨大成功,如机器翻译、文本生成、文本分类等,但也适用于其他序列数据的任务。

总的来说,CNN和Transformer是两种不同类型的神经网络架构,它们在数据类型、感知范围、层次结构和参数共享等方面存在明显的区别。选择哪种架构取决于您的任务和数据类型,以及模型的性能和效率需求。在某些情况下,这两种架构可以结合使用,以利用它们各自的优势。

35.

卷积神经元就是卷积核吗

是的,卷积神经元通常就是卷积核(也称为滤波器或卷积滤波器)。在卷积神经网络(CNN)中,卷积核是用来执行卷积操作的组件,它是卷积神经元的核心。

卷积核是一个小的矩阵,它在输入数据上滑动以执行卷积运算。卷积核的大小通常是一个正方形矩阵,例如3x3、5x5等,但可以根据网络架构和任务的需求而变化。每个卷积核包含一组权重参数,这些参数与输入数据的对应区域进行卷积操作,生成卷积层的特征映射(feature map)。

在CNN中,多个卷积核通常被堆叠在一起,每个卷积核都可以学习不同的特征。因此,一个卷积层可以产生多个特征映射,每个特征映射捕获输入数据中的不同特征信息。卷积核的参数在训练过程中通过反向传播算法进行学习,以便更好地适应特定任务。

所以,卷积神经元与卷积核密切相关,它们是CNN中用于特征提取的关键组件。每个卷积核都可以看作是一个卷积神经元,负责检测输入数据的某种特定特征或模式。多个卷积核的组合使CNN能够捕获多种特征,从而提高了模型的性能。

35.1.卷积改变通道

理解卷积神经网络中的通道 channel - 知乎

35.2. CNN计算过程

ResNet-34和ResNet-50结构图 - 知乎

35.3

图像的空间信息是指图像中像素在二维空间中的位置和排列所包含的信息。这包括了像素之间的相对位置、组织结构以及图像的几何特征。图像的空间信息在计算机视觉任务中起着重要的作用,它包括以下几个方面:

  1. 像素位置: 每个像素都有一个唯一的位置,由其在图像中的行和列的坐标表示。这些坐标决定了图像中每个像素的位置。图像中的空间结构就是通过这些位置信息建立起来的。

  2. 邻近关系: 相邻像素之间的关系包含在图像的空间信息中。通常,相邻的像素在图像中的位置是相邻的,即在行或列的坐标上相差一个单位。这种邻近关系有助于捕捉图像中的纹理、边缘和结构信息。

  3. 图像尺寸: 图像尺寸指的是图像在水平和垂直方向上的像素数量,即图像的宽度和高度。图像尺寸是空间信息的一个重要方面,影响着图像的分辨率和视觉效果。

  4. 几何结构: 空间信息还包括了图像中的几何结构,如物体的形状、边界和轮廓。这些结构信息对于物体识别和分割等任务至关重要。

  5. 空间滤波: 空间滤波是一种基于图像空间信息的像素值处理方法。通过应用不同的滤波器,可以实现对图像中的不同空间结构的增强或抑制,例如平滑、锐化、边缘检测等。

在深度学习中,卷积神经网络 (CNN) 利用了图像的空间信息,通过卷积操作提取图像中的局部特征。这使得网络能够更好地理解图像的结构和模式,从而在图像分类、目标检测等任务中取得良好的性能。

35.4

卷积神经网络 (CNN) 通过卷积操作提取的特征向量代表了输入数据中的不同层次、不同抽象级别的特征。这些特征向量在网络的不同层次上捕捉了输入数据的局部结构、纹理、边缘以及更高级别的语义信息。以下是对卷积提取到的特征向量代表的内容的一些解释:

  1. 低层次特征: 在网络的低层次,卷积神经网络通常会提取一些基础的特征,如边缘、颜色、纹理等。这些特征有助于捕捉输入数据的局部结构。

  2. 中层次特征: 随着网络的深度增加,卷积层逐渐捕捉到更加抽象的特征,如简单的形状、模式和纹理组合。这些中层次特征可以表示输入数据中更大范围的结构。

  3. 高层次特征: 在网络的更深层次,卷积层可能会捕捉到更高级别的语义信息,如物体部分、对象的形状、甚至是整个物体。这些高层次特征对于图像分类、目标检测等任务的执行至关重要。

  4. 空间信息: 卷积操作保留了输入数据的空间结构,因此特征向量中的每个元素都与输入数据中相应的区域相关。这有助于模型更好地理解图像中的局部关系。

总体而言,卷积神经网络通过层层堆叠的卷积层提取的特征向量表示了输入数据的层次化结构和语义信息。这些特征向量的组合形成了对输入数据更丰富、更抽象的表示,从而使得模型能够更有效地执行各种计算机视觉任务。这也是卷积神经网络在图像处理和计算机视觉任务中取得成功的关键因素之一。

35.5.alexnet

36.

深度估计就是特征提取码

深度估计(Depth Estimation)不仅仅是特征提取,它是一项任务,旨在从图像中估计场景中各个点的深度信息,即物体或场景点与相机之间的距离。深度估计可以用于推断三维结构,以便理解场景的空间布局。

特征提取是深度学习中的一个重要步骤,通常在深度估计任务中使用卷积神经网络(CNN)等模型来提取图像中的特征表示。这些特征表示是从图像中学习的,可以用于后续的深度估计任务。然而,深度估计涉及更多的信息,包括像素点到相机的距离,这需要特定的深度估计方法。

在深度估计任务中,特征提取是其中的一部分,但不是全部。其他关键步骤包括深度预测、立体匹配、相机校准等。深度估计的目标是从图像中获取每个像素点的深度信息,以便创建场景的三维模型。因此,深度估计不仅涉及特征提取,还涉及深度预测和空间关系的建模。特征提取只是其中的一个组成部分,用于获取图像中的有用信息

37. 深度估计

像素的深度值

像素的深度值是指图像中每个像素点到相机或观察者的距离。深度值通常用来表示物体的距离,也称为像素的深度信息或深度图。

深度值通常以以下方式表示:

  1. 视差值(Disparity):在立体视觉中,可以使用两个或多个相机同时拍摄同一场景,然后通过匹配相对应的像素点之间的位移(视差)来计算深度值。视差值与深度成反比,即视差越大,深度越小。

  2. 深度传感器:深度传感器是一种专门设计用于测量深度的硬件设备,例如时间飞行(ToF)相机、结构光相机等。这些传感器可以直接测量每个像素的深度值,并生成深度图。

  3. 深度估计算法:使用计算机视觉和深度学习算法,可以从单个或多个图像中估计每个像素的深度值。这些算法可以通过分析图像中的纹理、视觉特征和几何信息来实现深度估计。

深度图通常以灰度图像的形式呈现,其中每个像素的灰度值表示其深度值。浅色像素通常表示较近的物体,而深色像素表示较远的物体。深度信息对于许多计算机视觉任务和应用非常重要,如虚拟现实、自动驾驶、机器人导航、医学图像处理等,因为它提供了关于场景的三维结构的重要信息。

38.把特征做L2 norm

将特征进行L2范数归一化,通常是为了消除不同特征之间的尺度差异,以确保它们具有相同的权重,从而有助于一些机器学习算法的训练和性能提升。这个过程通常被称为特征缩放或特征标准化。

具体步骤如下:

  1. 计算每个样本的L2范数:对于每个数据样本,计算其所有特征的L2范数,也就是对该样本的特征向量中的每个元素进行平方、相加,然后取平方根。这将得到一个标量值,表示该样本的特征向量的长度。

  2. L2范数归一化:将每个特征向量中的每个元素除以该特征向量的L2范数。这可以通过将每个元素除以该样本的L2范数(也称为向量的模)来实现。这将使得每个样本的特征向量变成具有单位L2范数的向量。

这个过程的好处是确保不同特征的数值范围不会对机器学习算法产生不利影响。例如,如果一个特征的范围远远大于其他特征,它可能会在某些算法中占据主导地位,导致其他特征权重几乎为零,从而降低了它们对模型的贡献。通过进行L2范数归一化,每个特征的重要性更加平等,不受数值范围的影响。

在使用L2范数归一化时,需要注意一些事项:

  • 通常,L2范数归一化应用于每个数据样本的特征向量,而不是整个数据集。
  • 这个过程不会改变特征之间的相对关系,只是缩放它们的范围。
  • L2范数归一化通常用于线性模型、支持向量机(SVM)和神经网络等算法。
  • 在某些情况下,特征缩放可能不是必要的,特别是对于决策树等不受特征尺度影响的算法。

在Python中,可以使用机器学习库(如scikit-learn)提供的函数来进行L2范数归一化。通常,这可以通过预处理模块中的normalize函数来实现。

39.

Nvidia Apex简介 - 知乎

pytorch中的混合精度训练_fp32转为fp16出现梯度消失-CSDN博客

40.

小白学PyTorch 动态图与静态图的浅显理解 - 知乎

41.正则项系数

在机器学习中,正则项系数是正则化(Regularization)项中的一个参数,通常用来平衡模型的拟合效果和复杂性。正则项被添加到模型的损失函数中,以防止模型过度拟合训练数据,尤其是在数据量较小或者模型复杂度较高的情况下。

正则化有两种主要类型:L1正则化和L2正则化。正则项系数即表示这两种正则化的强度,常用符号为 λ(lambda)。

  1. L1正则化: 在L1正则化中,正则项是模型权重的绝对值之和。在损失函数上加上L1正则化项后,损失函数变为:

    损失函数 + λ * Σ|w_i|

    其中,Σ|w_i|表示所有权重的绝对值之和,λ是L1正则项系数。

  2. L2正则化: 在L2正则化中,正则项是模型权重的平方和的平方根。在损失函数上加上L2正则化项后,损失函数变为:

    损失函数 + λ * Σ(w_i^2)

    其中,Σ(w_i^2)表示所有权重的平方和,λ是L2正则项系数。

正则项系数为什么可以防止过拟合

正则项系数 λ 的选择是一个超参数调优的过程。较小的 λ 可能使得模型更倾向于过度拟合,而较大的 λ 则可能导致模型欠拟合。通过交叉验证等技术,可以尝试不同的 λ 值,选择对于特定问题和数据集来说表现最好的正则项系数。

正则项系数的引入是为了防止过拟合,其作用是对模型的复杂性进行惩罚,迫使模型在学习过程中更加趋向简单的解。正则项通过对模型参数的惩罚,限制了参数的取值范围,从而减缓模型对训练数据的过度拟合。

具体而言,正则项的作用如下:

  1. 限制参数空间: 正则项在损失函数中引入了对参数的惩罚,通过这个额外的惩罚项,模型在训练过程中倾向于选择较小的权重值。这有助于限制模型的参数空间,防止模型过分依赖于训练数据中的噪声或细节,从而提高了模型的泛化能力。

  2. 特征选择: 在L1正则化中,正则项的引入导致了对于某些特征的稀疏性,即一些特征的权重被压缩至零。这实质上实现了特征选择,使得模型更加关注对预测目标有用的特征,减少了对冗余或不相关特征的依赖,有助于提高模型的泛化性能。

  3. 控制模型复杂度: 正则项通过对权重的惩罚,有效地控制了模型的复杂度。过于复杂的模型可能更容易过拟合训练数据,而正则项的引入使得在拟合训练数据和保持简单性之间达到平衡。

通过调整正则项系数,可以控制正则化的强度。较大的正则项系数将导致更强烈的正则化效果,从而更强调对模型的简化。因此,适当选择正则项系数是模型训练中的一个关键超参数,可以通过交叉验证等方法来确定。

42.

批量梯度下降(Batch Gradient Descent)和随机梯度下降(Stochastic Gradient Descent)是两种常用的梯度下降算法,用于训练机器学习模型,特别是在深度学习中。

  1. 批量梯度下降(Batch Gradient Descent):

    • 更新规则: 在每一轮迭代中,批量梯度下降使用整个训练数据集来计算梯度。它对整个数据集进行前向传播和反向传播,计算梯度,然后根据梯度更新模型参数。
    • 优点: 对于大型数据集,计算梯度时利用了向量化的优势,因此在某些情况下可以更快收敛。
    • 缺点: 在大规模数据集上的计算开销较大,尤其是当数据集无法完全装入内存时。每次迭代都需要对整个数据集进行处理。
  2. 随机梯度下降(Stochastic Gradient Descent):

    • 更新规则: 在每一轮迭代中,随机梯度下降使用一个随机选择的单个样本来计算梯度,并根据这个梯度来更新模型参数。因此,每次迭代只使用一个样本。
    • 优点: 对于大型数据集,计算梯度时的开销较小,且算法可以在线更新,即数据可以一批一批地传递,而不是一次性加载整个数据集。
    • 缺点: 随机梯度下降的更新可能会更加不稳定,因为每次迭代都只基于一个样本,导致参数更新的方向和大小可能较为不规则。此外,由于随机性,它的收敛路径可能更加嘈杂。
  3. 小批量梯度下降:

    • 为了综合利用两者的优点,通常也会使用小批量梯度下降,即在每一轮迭代中使用一个小批量(mini-batch)的样本来计算梯度和更新参数。

总体而言,选择使用批量梯度下降、随机梯度下降还是小批量梯度下降取决于具体的问题和数据集。批量梯度下降对于稳定的收敛可能更有利,而随机梯度下降可能更适合大规模数据集。小批量梯度下降则是在两者之间的一种权衡选择。

43.

在深度学习中,Dropout 是一种正则化技术,通过在训练过程中随机将神经元的输出置零,从而减少模型对某些特定神经元的过度依赖,提高模型的泛化性能。对于 ResNet 或其他深度神经网络,你可以在网络结构中添加 Dropout 层,以在训练过程中引入随机性。

以下是在 ResNet 中添加 Dropout 的一种简单方式:

  1. 在基本块(Basic Block)中添加 Dropout: 基本块是 ResNet 中的一个重复模块,通常包含卷积层和恒等映射。你可以在基本块的适当位置添加 Dropout 层。

     

    pythonCopy code

    import torch.nn as nn class BasicBlock(nn.Module): def __init__(self, in_channels, out_channels, stride=1): super(BasicBlock, self).__init__() # ... 其他层的定义 # 在适当位置添加 Dropout self.dropout = nn.Dropout(p=0.5) # 你可以调整 dropout 概率 def forward(self, x): # ... 其他层的前向传播 # 使用 Dropout x = self.dropout(x) return x

  2. 在整个 ResNet 模型中添加 Dropout: 你也可以选择在整个 ResNet 模型的某个位置(例如在全连接层之前)添加 Dropout。

     

    pythonCopy code

    import torch.nn as nn from torchvision.models import resnet class ResNetWithDropout(nn.Module): def __init__(self, num_classes=1000): super(ResNetWithDropout, self).__init__() # 使用预定义的 ResNet 模型 resnet_model = resnet.resnet18(pretrained=True) # 去掉全连接层 self.features = nn.Sequential(*list(resnet_model.children())[:-1]) # 添加全连接层和 Dropout self.fc = nn.Linear(512, num_classes) self.dropout = nn.Dropout(p=0.5) # 你可以调整 dropout 概率 def forward(self, x): # ResNet 特征提取部分 x = self.features(x) x = x.view(x.size(0), -1) # 全连接层和 Dropout x = self.fc(x) x = self.dropout(x) return x

在实际应用中,你可以根据任务的性质、数据集的大小以及模型的复杂性来选择是否以及在何处添加 Dropout。要注意,过度使用 Dropout 可能会导致训练过程变慢,因此通常需要进行适度的调整。

44.

"Linear probe" 通常是指使用预训练的神经网络模型(通常是在大规模数据集上训练好的模型,如BERT、GPT等)的线性输出层来解决下游任务。在这种情况下,"linear" 指的是该输出层是一个线性层(全连接层),没有使用额外的非线性激活函数。

所以,是的,Linear-probe 可以使用全连接层。线性层用于将预训练模型的输出映射到下游任务的标签空间。这种方法的假设是,预训练模型已经学到了非常有用的特征,而在下游任务中只需简单地调整权重以适应新的任务。

这样的线性 probe 通常用于迁移学习(transfer learning)场景,其中预训练的模型在一个任务上学到的知识被迁移到另一个任务。这样可以在小规模数据集上取得很好的效果,因为预训练的模型已经学到了通用的语义和语法特征。

"Linear-probe" 是一个迁移学习的方法,它使用预训练的神经网络模型的线性输出层来解决下游任务。这个线性输出层通常是一个全连接层,但是也可以理解为是一个逻辑回归层。

使用逻辑回归(LR)的 Linear-probe:

  1. 结构:线性输出层是一个逻辑回归层,仅包含一个单一的神经元(节点)。

  2. 激活函数:通常使用 sigmoid 激活函数,将输出映射到 (0, 1) 范围内,表示二分类任务中属于某一类别的概率。

  3. 适用场景:适用于二分类问题,如情感分析等。

使用全连接层(FC)的 Linear-probe:

  1. 结构:线性输出层是一个全连接层,可以包含多个神经元,每个神经元对应一个类别。

  2. 激活函数:通常不使用激活函数,或者使用 softmax 激活函数,将输出转化为表示每个类别的概率分布。

  3. 适用场景:适用于多分类问题,如图像分类、文本分类等。

区别总结:

  • 目标任务不同:LR 的 Linear-probe 主要适用于二分类任务,而使用 FC 的 Linear-probe 适用于多分类任务。

  • 输出层结构不同:LR 使用逻辑回归层,而 FC 使用全连接层。

  • 激活函数的选择不同:LR 使用 sigmoid 激活函数,FC 使用 softmax 激活函数或不使用激活函数。

  • 适用场景的差异:根据任务的性质选择 LR 或 FC 结构,以满足相应的分类需求。

总体而言,Linear-probe的选择取决于具体的下游任务,如果是二分类任务,可以考虑使用逻辑回归层;如果是多分类任务,可以考虑使用全连接层。

45.逐通道卷积和逐点卷机

深度可分离卷积(Depthwise separable convolution) - 知乎

46.

逻辑回归、Softmax回归和全连接层之间存在紧密的关系,尤其在深度学习神经网络中。这三者通常用于神经网络的不同部分。

  1. 全连接层(Fully Connected Layer)

    • 全连接层是神经网络中的基本层之一,也称为密集连接层。在全连接层中,每个神经元与前一层的所有神经元都有连接。
    • 在全连接层中,每个连接都有一个权重,通过将输入与相应权重相乘,然后加上偏置(bias)得到输出。这个输出通常会经过一个激活函数,如ReLU(Rectified Linear Unit)。
  2. 逻辑回归与全连接层

    • 逻辑回归可以被看作是一个只有一个神经元的全连接层,其输出通过sigmoid激活函数,表示一个二分类问题的概率。
    • 具体来说,对于一个样本,逻辑回归的输出可以表示为:�(�⋅�+�)σ(W⋅X+b),其中$\sigma$是sigmoid函数,$W$是权重,$X$是输入特征,$b$是偏置。
  3. Softmax回归与全连接层

    • Softmax回归是一个多分类问题的模型,其输出层通常是一个全连接层,但有多个输出神经元,对应于不同的类别。
    • 对于一个样本,Softmax回归的输出可以表示为:Softmax(�⋅�+�)Softmax(W⋅X+b),其中Softmax函数会将每个类别的原始得分转换成概率分布。

在深度学习中,通常会将多个全连接层、逻辑回归层或Softmax回归层堆叠在一起,形成深层神经网络。这些层通过反向传播算法进行训练,调整其参数以最小化损失函数。整个网络的结构通常包括输入层、多个隐藏层和输出层。

综合起来,逻辑回归和Softmax回归可以被视为神经网络中的特殊全连接层,其输出通过激活函数(sigmoid或Softmax)进行处理,适用于不同的分类问题。

47.

yolo模型如何处理正负样本不均衡问题? - 知乎

48.

在神经网络中,激活函数通常用于引入非线性特性,使得网络能够学习复杂的映射关系。其中,使用指数函数(Exp,即指数函数)的激活函数可以增强网络的表达能力。以下是一些使用指数函数的常见激活函数:

  1. Sigmoid 函数:

    • Sigmoid函数是一个将实数映射到(0, 1)范围内的函数。其公式为: �(�)=11+�−�σ(x)=1+e−x1​
    • 在神经网络中,Sigmoid函数通常用于输出层,特别是二分类问题中。
  2. Tanh 函数:

    • Tanh函数是一个将实数映射到(-1, 1)范围内的函数。其公式为: tanh⁡(�)=��−�−���+�−�tanh(x)=ex+e−xex−e−x​
    • 与Sigmoid函数类似,Tanh函数同样用于神经网络的输出层,尤其是在需要对输出进行归一化的情况下。
  3. Softmax 函数:

    • Softmax函数用于多类别分类问题,将实数转换为概率分布。其公式为: Softmax(��)=���∑�=1����Softmax(xi​)=∑j=1N​exj​exi​​
    • 其中,�N是类别的数量。Softmax通常作为神经网络输出层的激活函数,确保输出是概率分布。

这些激活函数都包含指数函数,通过引入非线性变换,使得神经网络能够学习更加复杂和非线性的函数关系。选择激活函数取决于任务的性质,一般来说,ReLU和其变种在隐藏层中更为常见,而Sigmoid、Tanh和Softmax则常用于输出层或需要对输出进行特殊处理的情况。

Softmax函数通常不用在隐藏层,而常用于神经网络的输出层,尤其是用于多类别分类问题。这是因为Softmax函数的特性导致其在隐藏层使用时可能引起一些问题:

  1. 输出范围问题: Softmax函数将输入映射到概率分布,其输出值在0,10,1范围内,且所有输出的和等于1。在隐藏层,我们通常期望神经元的输出表示一种激活程度或者激活强度,而不需要符合概率分布的特性。

  2. 梯度消失问题: 在反向传播过程中,Softmax函数的梯度可能会导致梯度消失问题。梯度消失可能会影响神经网络的训练,使得权重更新几乎不可见,导致网络无法学到有效的表示。

相反,ReLU(Rectified Linear Unit)等激活函数通常更适合用于隐藏层。ReLU函数的定义为: ReLU(�)=max⁡(0,�)ReLU(x)=max(0,x)

ReLU的特点包括:

  • 非线性: ReLU引入了非线性变换,使得神经网络能够学习非线性映射,增强了网络的表达能力。
  • 计算简单: 相比于一些复杂的激活函数(如Sigmoid和Tanh),ReLU的计算更加简单,有助于加速模型训练的速度。

尽管ReLU在隐藏层中的表现良好,但也有一些变体,如Leaky ReLU、Parametric ReLU等,用于缓解ReLU在负数输入时的一些问题,如死亡神经元问题(Dead Neurons)。选择激活函数仍然取决于具体的任务和网络结构,而ReLU及其变体是在实践中常用的激活函数之一。

49.

在机器学习和深度学习中,模型饱和通常指的是模型在训练过程中逐渐失去对训练数据的学习能力,导致梯度消失或梯度爆炸等问题,使得模型无法进一步优化或学到更多的特征。

有两种主要的饱和现象:

  1. 梯度饱和: 在反向传播过程中,如果模型的某些权重或激活函数的导数很小,那么梯度可能会变得非常小,甚至趋于零。这就是梯度饱和。当梯度变得非常小时,权重更新几乎不可见,导致模型无法学到更多的知识,这对于深层神经网络特别常见。

  2. 输出饱和: 在某些激活函数中,当输入的绝对值非常大时,函数的输出可能饱和到一个固定的值,不再对输入的变化敏感。例如,Sigmoid函数在输入非常大或非常小的情况下,输出趋向于1或0,这会导致输出的梯度接近于零,使得网络难以更新权重。

解决模型饱和的方法可能包括:

  • 选择合适的激活函数: 使用一些不容易导致饱和现象的激活函数,如ReLU等。
  • 使用批归一化: Batch Normalization 可以帮助缓解梯度饱和问题,通过将每一层的输入进行标准化。
  • 使用梯度裁剪: 对梯度进行裁剪,防止梯度爆炸的问题。
  • 使用更复杂的网络结构: 某些复杂结构的网络能够更好地处理梯度饱和问题。

理解和处理模型饱和是训练深度学习模型中的重要问题,以确保模型能够充分利用训练数据学到有效的表示。

50.

为什么神经网络会有梯度消失和梯度爆炸问题?如何解决? - 知乎

51.评估指标

在面对样本不均衡的分类问题时,传统的分类评估指标可能会受到影响。一些常见的分类评估指标包括准确率(Accuracy)、精确度(Precision)、召回率(Recall)、F1 分数等,但它们可能无法全面反映模型在不同类别上的性能,特别是在存在样本不均衡情况下。

以下是一些适用于样本不均衡问题的分类评估指标:

  1. 准确率(Accuracy):

    • 适用于样本分布均匀的情况,但在样本不均衡时可能不是很有代表性,因为模型可能倾向于预测数量较多的类别。
  2. 精确度(Precision)和召回率(Recall):

    • 精确度和召回率是针对二分类问题的指标,特别适用于处理样本不均衡问题。
    • 精确度关注模型在预测为正类别时的准确性,而召回率关注模型对正类别样本的覆盖程度。
    • F1 分数(F1 Score)结合了精确度和召回率,是二者的调和平均值。
  3. 混淆矩阵(Confusion Matrix):

    • 提供了更详细的模型性能信息,包括真正例、真负例、假正例和假负例的数量。
    • 从混淆矩阵中可以计算其他评估指标。
  4. AUC-ROC 曲线(Area Under the Receiver Operating Characteristic curve):

    • 对于二分类问题,ROC 曲线可以通过调整分类阈值来查看精确度和召回率之间的权衡。
    • AUC-ROC 曲线的面积表示模型在不同阈值下的性能。
  5. PR 曲线和AUC-PR(Precision-Recall Curve and Area Under the Precision-Recall curve):

    • 适用于样本不均衡问题,特别关注正类别的精确度和召回率。
    • AUC-PR 曲线的面积表示模型在不同阈值下的性能。
  6. Matthews相关系数(Matthews Correlation Coefficient,MCC):

    • 考虑了真正例、真负例、假正例和假负例的数量,适用于样本不均衡问题。

在处理样本不均衡的情况下,需要根据具体问题选择合适的评估指标,并综合考虑精确度、召回率、以及业务需求来评估模型性能。

在多分类问题中,样本不均衡可能导致对某些类别的性能评估不准确。除了一些常见的多分类评估指标(如准确率、宏平均和微平均精确度、宏平均和微平均召回率等),还有一些特定于样本不均衡问题的指标,用于更全面地评估模型性能。以下是一些适用于多分类样本不均衡问题的评估指标:

  1. 混淆矩阵(Confusion Matrix):

    • 提供了每个类别的真正例、真负例、假正例和假负例的数量。
  2. 精确度(Accuracy):

    • 计算正确分类的样本数与总样本数的比例。适用于样本分布相对均匀的情况。
  3. 宏平均和微平均精确度(Macro-Averaged and Micro-Averaged Precision):

    • 宏平均精确度计算每个类别精确度的平均值,而微平均精确度考虑所有类别的真正例和假正例的总和。
  4. 宏平均和微平均召回率(Macro-Averaged and Micro-Averaged Recall):

    • 宏平均召回率计算每个类别召回率的平均值,而微平均召回率考虑所有类别的真正例和假负例的总和。
  5. 宏平均和微平均 F1 分数(Macro-Averaged and Micro-Averaged F1 Score):

    • 宏平均 F1 分数计算每个类别 F1 分数的平均值,而微平均 F1 分数考虑所有类别的精确度、召回率和 F1 分数的总和。
  6. 各类别的 PR 曲线和AUC-PR(Precision-Recall Curve and Area Under the Precision-Recall curve for each class):

    • 适用于样本不均衡问题,可提供每个类别的分类性能。
  7. G-Mean:

    • 对于每个类别,G-Mean 是精确度和召回率的几何平均值。
  8. 分类错误成本(Classification Error Cost):

    • 考虑到每个类别的分类错误对总体性能的影响,可根据实际应用的情况分配不同的权重。

选择适当的评估指标取决于问题的特性和业务需求。在多分类样本不均衡问题中,综合考虑各类别的性能指标通常更为重要。

目标检测中的样本不均衡问题是指由于物体的大小、类别的分布等原因,不同的目标类别之间的样本数量存在显著差异。在这种情况下,通常需要使用一些适用于目标检测任务的评估指标,以更全面地评估模型性能。以下是一些适用于目标检测样本不均衡问题的评估指标:

  1. 平均精确度(mAP):

    • mAP 是目标检测任务中常用的评估指标之一。它综合考虑了不同目标类别之间的精确度和召回率。mAP 的计算通常基于不同的 IoU(Intersection over Union)阈值,对每个类别分别计算,然后取平均值。
  2. 类别平衡平均精确度(Class-Balanced Average Precision):

    • 为了解决样本不均衡问题,可以使用类别平衡的 mAP。类别平衡的 mAP 考虑了不同类别之间样本数量的差异,以更公平地评估模型性能。
  3. F1 分数:

    • 对于每个类别,可以计算 F1 分数,综合考虑了精确度和召回率。
  4. 重要性加权的平均精确度(Weighted Average Precision):

    • 可以对每个类别的精确度进行加权,以反映不同类别的重要性。
  5. 样本级别的平均精确度(Average Precision per Sample):

    • 考虑到每个样本在评估中的权重,尤其是对于具有多个目标的样本。
  6. 目标检测 Focal Loss:

    • Focal Loss 是一种专门设计用于解决目标检测任务中样本不均衡问题的损失函数。它降低了易分类的样本对总体损失的贡献。

在目标检测任务中,综合考虑检测准确性、召回率、样本不均衡等因素是非常重要的。选择适当的评估指标取决于具体的任务和应用需求。综合多个指标的使用可以提供更全面的模型性能评估。

52.

53.cosin分类器和linear分类器的区别

归一化后,相当于将特征投影到了球面上,此时linear内的W其实就代表了K个类别的类别中心向量,最后输出结果其实是该向量与这些类中心向量余弦相似度的softmax。

作用的话,建议读一下arface sphereface 和 cosface三篇,或者知乎上搜一下相关文章,都有比较详细的说明。

54.

举例说明尺度参数在loss里面的作用

让我们通过一个简单的数学示例来说明尺度参数在损失函数中的作用。考虑一个简化的Softmax Loss,其中只有两个类别(二分类问题),损失函数如下:

�Softmax=−log⁡(��⋅����⋅��+��⋅��ˉ)LSoftmax​=−log(es⋅θy​+es⋅θyˉ​​es⋅θy​​)

其中:

  • �SoftmaxLSoftmax​ 是Softmax Loss。
  • �s 是尺度参数。
  • ��θy​ 和 ��ˉθyˉ​​ 分别是两个类别的类别分数。

现在,我们来看看尺度参数 �s 在损失函数中的作用:

  1. 尺度参数控制量级: 尺度参数 �s 控制了类别分数的量级。如果 �s 较小,那么 ��⋅��es⋅θy​ 和 ��⋅��ˉes⋅θyˉ​​ 都会趋近于1,导致类别分数相对较小。相反,如果 �s 较大,类别分数也会相对较大。这样的设计有助于调整类别分数的范围,使得它们不至于过于极端,更有助于模型的优化。

  2. 影响类别权重: 由于 Softmax Loss 中的归一化过程,类别分数的相对大小对损失函数的影响较大。尺度参数 �s 的变化会影响类别之间的权重。当 �s 较大时,损失函数更注重正确类别的类别分数,而当 �s 较小时,损失函数更注重其他类别的分数。通过学习这个尺度参数,模型可以适应不同的数据分布和任务要求。

这只是一个简化的示例,实际中Softmax Loss会应用于多类别分类问题,而ArcFace Loss会引入更复杂的角度余弦值的概念。不过,这个例子提供了一个直观的了解:尺度参数有助于调整类别分数,以更好地满足优化的需要。

55.

举例说明m参数在arcface loss里面的作用,类内聚类,类间拉大

让我们通过一个简单的例子来说明m参数在ArcFace Loss中的作用,以及如何通过调整m来实现类内聚类(intra-class compactness)和类间拉大(inter-class separability)。

考虑一个简单的二分类问题,我们有两个类别:A 和 B。我们希望通过ArcFace Loss来训练模型,使得相同类别的样本之间的特征更加紧密(聚类在一起),而不同类别的样本之间的特征更加分散(类别之间的边界更明显)。

ArcFace Loss的数学表达式为:

�ArcFace=−log⁡(��⋅(cos⁡(��+�)−�)��⋅(cos⁡(��+�)−�)+∑�≠���⋅cos⁡(��))LArcFace​=−log(es⋅(cos(θy​+m)−ϵ)+∑j=y​es⋅cos(θj​)es⋅(cos(θy​+m)−ϵ)​)

其中,�s 是尺度参数,��θy​ 是正确类别的类别分数对应的角度,�m 是margin参数。

1. m较小的情况:

假设我们设置 �=0.2m=0.2,较小的m允许类别之间的角度差异较小。在这种情况下,模型更倾向于聚类相同类别的样本,因为m的增加只对角度产生轻微的影响。这有助于提高类内聚类效果,使得同类别样本在特征空间中更加接近。

2. m较大的情况:

假设我们设置 �=0.8m=0.8,较大的m会使得角度差异更加显著。在这种情况下,模型更倾向于拉大不同类别之间的角度,增加类别之间的分离度。这有助于提高类间拉大效果,使得不同类别样本在特征空间中更加分散。

通过调整m的大小,我们可以在聚类和拉大之间进行权衡,以满足特定任务和数据集的要求。在实践中,通常需要通过实验和调整来找到最优的m值。

56.

YOLOv5 深度剖析 - 知乎

57.

【ResNet笔记(2)】ResNet的 bottleneck 设计_resnet bottleneck-CSDN博客
filter裁减:

Resnet代码详解-CSDN博客

58.

ArcFace,CosFace,SphereFace,三种人脸识别算法的损失函数的设计 - 知乎

59.

度量学习(Metric learning、损失函数、triplet、三元组损失、fastreid)

60.

EMA(Exponential Moving Average,指数移动平均)和动量(momentum)都是在机器学习和优化算法中常用的概念,但它们在本质上有不同的用途。

  1. EMA(Exponential Moving Average):

    • 定义: EMA是一种平滑时间序列数据的方法,通常用于平均化某个变量在一段时间内的变化趋势。
    • 应用: 在优化算法中,EMA经常用于计算梯度或参数的滑动平均,特别是在深度学习中。这有助于减小梯度或参数更新的方差,提高模型的稳定性和泛化性能。EMA在优化算法中的应用有助于使学习过程更加平滑,避免过多波动,提高收敛速度。
  2. 动量(Momentum):

    • 定义: 动量是一种优化算法的技巧,通过引入一个动量项,可以在更新参数时考虑之前的梯度方向。这有助于加速收敛,并克服梯度下降中的一些问题,例如陷入局部最小值或在窄长谷中振荡。
    • 应用: 在梯度下降中,动量通过在梯度更新中引入之前速度的概念,使得更新不仅依赖于当前梯度,还依赖于之前的梯度方向。这有助于在梯度变化方向一致时加速收敛,同时在梯度变化方向不一致时减小更新步长,从而提高稳定性。

在实际应用中,EMA和动量可以结合使用,以提高优化算法的性能。EMA用于平滑梯度或参数的变化,而动量用于在梯度更新中考虑之前的动量。这两者的结合可以带来更加稳定和高效的训练过程。

EMA指数移动平均 - 知乎

61.

神经网络中的Batch Normalization (BN) 层本身并不直接包含传统的“权重”(weights),但是它确实有两个可学习的参数——缩放因子(scale)和偏移因子(offset),这两个参数在训练过程中是可以被更新的,并且对于网络的最终输出有着重要影响。

在BN层的标准化过程中,首先会对每个批次(batch)的输入数据进行规范化处理,使得规范化后的数据具有零均值和单位方差。规范化操作并不会引入新的权重,而是对输入数据进行变换。

随后,BN层会在规范化的基础上加上一个可学习的偏移(bias)参数β,并乘以一个可学习的缩放(scale)参数γ。这两个参数允许网络在规范化之后仍能保持一定的自由度和表达能力,同时也参与到反向传播和梯度更新的过程中:

  • γ(缩放因子)允许网络放大或缩小规范化后的数据,从而补偿规范化可能导致的信息丢失。
  • β(偏移因子)则允许网络对规范化后的数据进行平移,以保持网络原有的表达能力。

因此,虽然我们不把BN层中的γ和β称为“权重”,但在神经网络的上下文中,它们确实是可训练的参数,与权重类似地影响着模型的最终输出和学习过程。

62.

在神经网络中的Batch Normalization(BN)层,γ(gamma)参数是用来控制标准化后输出数据的幅度(scale)的可学习参数。每个通道(channel)都有一个独立的γ值,这意味着网络可以根据训练过程中收到的反馈信号来调整每个通道的影响力。

γ值在训练过程中之所以会变得不一样,是因为它们通过反向传播和优化算法(如梯度下降法)来进行更新。每个γ值的更新取决于它对损失函数梯度的影响以及网络试图最小化损失函数的程度。不同的通道在模型学习过程中发挥的作用可能不同,有的通道可能对最终预测结果更为重要,而有的通道可能相对不太重要。在训练过程中,对于重要的通道,网络可能会学习到较大的γ值以放大该通道的输出,而对于不那么重要的通道,γ值可能就较小。

此外,由于输入数据、网络结构、任务类型等各种因素的影响,各个通道的γ值也会反映出网络在学习过程中对不同特征维度的重视程度。因此,在不同的训练迭代、不同的网络结构或者不同的数据分布下,BN层的γ值往往是有差异的。

63.

在Batch Normalization (BN)层中,确实会在训练过程中存储归一化的均值和方差信息。这些信息对于模型的训练和推理阶段都很重要。

在训练阶段,BN层会对每个小批量数据(Batch)计算其均值和方差,并利用这些信息对输入数据进行归一化。然而,为了在测试或部署阶段仍然能够进行有效的归一化,模型会存储每个BN层在整个训练集上的均值(running mean)和方差(running variance)的估计值。这些估计值会在训练过程中不断更新,并在训练完成后被固化在模型参数中。

也就是说,当你保存训练好的模型时,模型参数中会包含每个BN层的缩放因子(γ)、偏移因子(β)、训练过程中累计的均值(running mean)以及方差(running variance)。在推理阶段,模型会使用这些预先计算好的均值和方差对输入数据进行归一化处理,而不是重新计算每个批次的均值和方差。

64.

FLOPs(Floating Point Operations Per Second,每秒浮点运算次数)是用来衡量算法或者模型计算复杂度的一个常用指标,特别是在深度学习领域中,它量化了模型执行一次前向传播所需要的浮点运算数量。要计算一个深度学习模型的FLOPs,通常需要考虑以下几个步骤:

计算单层FLOPs

  1. 卷积层(Convolutional Layer): 卷积层的FLOPs主要来自于卷积操作,可以通过以下公式粗略估算:

     Code 
    1FLOPs(卷积层) = 输出通道数 * 输出尺寸(宽高) * 每个输出像素的FLOPs
    2每个输出像素的FLOPs = 输入通道数 * 卷积核尺寸(宽高) * 卷积核数量 * (2 if 使用双精度 else 1)

    注意如果存在偏置项,则每个输出位置还要加上一个浮点加法操作。

  2. 全连接层(Fully Connected Layer): 全连接层的FLOPs计算相对简单:

     Code 
    1FLOPs(全连接层) = 输入神经元数量 * 输出神经元数量 * 2

    乘以2是因为每一个神经元的输出都需要经过一次矩阵乘法(乘以权重)和一次加法(加上偏置)。

  3. 池化层(Pooling Layer): 池化层的FLOPs较少,通常仅涉及比较和选择操作,不计入FLOPs的主要计算部分。

  4. 激活函数(Activation Function): 大多数激活函数(如ReLU、Sigmoid等)的计算较为简单,通常不作为主要计算负担考虑,但也有一些激活层会包含额外的浮点运算。

计算整个模型的FLOPs

要计算整个模型的FLOPs,你需要逐层累加每一层的FLOPs,确保考虑到模型中所有的卷积层、全连接层和其他可能产生大量浮点运算的层。

实践中的计算

在实践中,可以利用一些自动化工具包如thop(针对PyTorch模型)或tf.profiler(针对TensorFlow模型)来进行精确的FLOPs计算,这些工具会自动遍历模型结构并准确地统计每种类型的层所产生的浮点运算数目。

65.

一个拥有10亿(1B)参数量的模型,如果所有参数都是以32位浮点数(FP32)格式存储的话,我们可以计算模型大小:

  • FP32参数每个占用4字节(因为32位等于4字节)。
  • 因此,10亿(1,000,000,000)参数量的模型大小计算如下:
    • 模型大小(字节)= 1,000,000,000 参数 x 4 字节/参数 = 4,000,000,000 字节
    • 转换为兆字节(MB):4,000,000,000 字节 ÷ 1,048,576 字节/MB ≈ 3,814.697265625 MB
    • 转换为千兆字节(GB):3,814.697265625 MB ÷ 1024 MB/GB ≈ 3.7180618557739258 GB

所以,一个10亿参数量、使用FP32格式存储的模型,其大小约为3.72 GB左右。

一个具有1M(1百万)参数量的模型,如果所有参数都以32位浮点数(FP32)格式存储,我们可以计算模型大小:

  • FP32参数每个占用4字节(因为32位等于4字节)。
  • 因此,1百万(1,000,000)参数量的模型大小计算如下:
    • 模型大小(字节)= 1,000,000 参数 x 4 字节/参数 = 4,000,000 字节
    • 转换为兆字节(MB):4,000,000 字节 ÷ 1,048,576 字节/MB ≈ 3.814697265625 MB

所以,一个1M参数量、使用FP32格式存储的模型,其大小约为3.81 MB。

66.

重新设计算子和模型结构以提升卷积模型的可扩展性,并缓解归纳偏置,可以从两个方面来理解:

  1. 提升可扩展性

    • 在卷积神经网络(CNN)中,传统的卷积层和池化层在面对大规模数据集和复杂任务时,可能由于计算资源的限制而难以直接扩展。重新设计算子如深度可分离卷积(Depthwise Separable Convolution)、群卷积(Group Convolution)等,能够减少计算量和参数量,使得模型在增加网络深度或宽度时更易于扩展,同时保持较高的计算效率和性能。

    • 结构设计方面的改进,比如引入残差连接(Residual Connections)、密集连接(Dense Connectivity)、分层特征金字塔网络(Feature Pyramid Networks, FPN)等,可以使得模型在增加规模的同时,保证梯度的有效传播和多层次特征的有效融合,增强了模型的扩展性。

  2. 缓解归纳偏置

    • 归纳偏置(Inductive Bias)是指模型在学习过程中对数据的固有倾向或假设。在CNN中,传统的卷积算子倾向于假设输入数据具有局部性、平移不变性等特性,这对于许多视觉任务是非常有用的,但也可能导致模型在处理不符合这些假设的数据时效果不佳。

    • 重新设计的算子和模型结构可以降低这种固有的归纳偏置,例如通过动态卷积核(Dynamic Convolution)、可变形卷积(Deformable Convolution)等新型算子,使得模型能够更灵活地处理不同尺度、形状和排列方式的特征,从而更好地适应各种复杂情况,提高泛化能力。

通过这些改进,模型能够以更低的成本扩展到更大的规模,并且在面临复杂多变的任务时,能够克服原有结构带来的局限性,更好地适应未曾见过的数据分布,从而在一定程度上缓解了模型的归纳偏置。

67.

在卷积神经网络(CNN)中,传统的较小卷积核(例如3x3、5x5)能够通过局部连接(Local Connectivity)实现空间聚合,意思是:

  • 局部连接:卷积核在处理输入图像时,只会考虑与自身大小相匹配的局部区域内的像素。例如,一个3x3的卷积核在扫描图像时,每次只关注图像中3x3大小的窗口内的像素值,并据此进行计算。这种局部性特征提取有助于模型捕捉图像的局部结构和纹理信息。

  • 空间聚合:在卷积过程中,卷积核通过权重与局部像素的乘加操作,实际上完成了对局部区域内信息的整合和抽象。每次卷积操作都在某种程度上对输入区域内的信息进行了“聚合”,提取出了更有意义的特征表示。随着卷积层的加深,模型通过多次这样的局部连接和卷积运算,逐步形成了对图像空间结构和特征层次的理解。

因此,通过这种局部连接机制,较小卷积核能够在不增加过多计算复杂度的前提下,有效地从局部到全局地构建和聚合特征,有利于模型学习和表达复杂的图像空间结构,同时也缓解了模型对数据的归纳偏置,提高了模型的泛化能力和适应性。

68.

卷积神经网络(CNN)中,特别是大核(large kernel)密集卷积(dense convolution)的一些局限性。

大核密集卷积: 在CNN中,大核卷积是指卷积核尺寸较大的卷积层,它能够捕获较大范围内的空间特征。密集卷积是指在计算过程中,每一个输出像素都与输入图像的所有像素进行卷积运算,没有跳过任何输入单元。

空间聚合能力: 空间聚合通常指的是在卷积或池化过程中,模型能够通过局部或全局的方式整合相邻像素的信息,形成更高层次的抽象特征。例如,传统的较小卷积核能够通过局部连接(local connectivity)实现空间聚合。

归纳偏置: 归纳偏置是机器学习模型在学习过程中体现出来的一种固有倾向或假设,它影响模型对未知数据的泛化能力。对于卷积神经网络,其归纳偏置体现在对局部特征的重视和对平移不变性的建模等方面。

局限性: 大核密集卷积由于卷积核尺寸大,导致它在处理图像时,没有充分利用局部空间结构的规律进行有效聚合,这意味着模型在学习时可能过于关注大的全局特征,而忽视了局部特征的细节和组合。这种情况下,模型可能会过度依赖训练数据的特定模式,导致对未见过的输入或轻微变化的数据适应性较差,即归纳偏置较强,这不利于模型的泛化能力和在更大规模数据集上的扩展性。

为了克服这些问题,研究者们提出了各种改进方法,如引入更有效的空间聚合机制,如空洞卷积(dilated convolution)、可变形卷积(deformable convolution)等,这些改进能够更好地平衡局部和全局特征提取,降低归纳偏置,从而提升模型的泛化能力和扩展性。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值