期末复习是每个学生都不可避免的挑战,而计算机视觉这门课程所涉及的内容丰富且有深度。在复习过程中,我们不仅需要理解各种算法的背后原理,还要能够应用它们解决实际问题。为了帮助大家更好地准备期末考试,本文将为大家总结计算机视觉中需要重点复习的知识点,并提供一些复习建议。
一、常见的损失函数及其特点
1、均方误差(Mean Squared Error, MSE)
- 公式:
其中 yi 是真实值,是预测值,N 是样本数量。
- 特点:
- 常用于回归问题。
- 对异常值敏感,因为平方项会使得大误差对损失函数的影响更大。
- 适合连续型输出的预测。
2.、交叉熵损失(Cross-Entropy Loss)
- 公式:
其中,yi 为真实标签(通常是0或1), 为预测概率。
- 特点:
- 常用于分类问题,尤其是二分类和多分类问题。
- 对错误分类的惩罚较大,能够加快收敛速度。
- 适用于输出为概率分布的模型,如 Softmax 输出层。
3、标签平滑交叉熵(Label Smoothing Cross-Entropy)
- 公式:
其中,ϵ 是平滑因子,C 是类别数。
- 特点:
- 用于缓解模型过度自信的问题,通过将标签值进行平滑处理(即对标签进行一定的噪声加入)。
- 适用于分类任务,尤其是深度神经网络的训练。
4、 KL 散度(Kullback-Leibler Divergence)
- 公式:
其中,P 和 Q 分别是目标分布和预测分布。
- 特点:
- 用于衡量两个概率分布之间的差异,常用于模型训练中的目标分布与预测分布之间的差距。
- 常见于生成模型和变分自编码器(VAE)等。
5、 IoU 损失(Intersection over Union)
- 公式:
其中,a 是锚点,p 是正样本,n 是负样本,d 是距离度量,α 是一个超参数。
- 特点:
- 常用于人脸识别和度量学习任务。
- 通过最小化正样本与锚点之间的距离,同时最大化负样本与锚点之间的距离来优化模型。
二、常见的激活函数及其特点
1、Sigmoid(S形激活函数)
- 公式:
- 特点:
- 输出范围在 0 到 1 之间,适用于概率预测问题(例如二分类问题)。
- 计算上比较简单,但当输入值过大或过小时,梯度会变得非常小(梯度消失问题),导致训练变慢。
- 不以零为中心,可能导致梯度更新时方向不一致,影响训练效率。
2、Tanh(双曲正切函数)
- 公式:
- 特点:
- 输出范围在 -1 到 1 之间,具有零中心性(即输出值围绕零对称),相比 Sigmoid 更适合用在隐藏层。
- 也会遭遇梯度消失问题,尤其是当输入值非常大或非常小时,导致梯度变得非常小。
- 相比 Sigmoid,Tanh 的输出更为平衡,在某些情况下可以加速训练过程。
3、ReLU(Rectified Linear Unit)
- 公式:
- 特点:
- 输出值为非负数,当输入值大于零时,输出为输入值;否则,输出为零。
- 计算简单,且能够有效缓解梯度消失问题。
- 对于负数输入,ReLU 会输出零,导致某些神经元“死掉”(即永远不更新)。这一问题可以通过使用 Leaky ReLU 或 Parametric ReLU(PReLU)来缓解。
4、Leaky ReLU(带泄漏的ReLU)
- 公式:
其中,α 是一个小的常数(通常是 0.01)。
- 特点:
- 类似于 ReLU,但对于负值输入,输出为负值的一部分(由常数 α\alphaα 控制),避免了“死神经元”问题。
- 相较于 ReLU,它的表现更为稳定,并且可以在一定程度上缓解 ReLU 的梯度消失问题。
5、Softmax(归一化指数函数)
- 公式:
其中,xi 是输入向量的第 i 个元素,K 是输入向量的维度。
- 特点:
- 常用于多分类问题的输出层,能够将神经网络的输出转换为概率分布。
- 输出的每个值在 0 到 1 之间,并且所有输出值的和为 1。
- 可以应用于多分类问题,通过对每个类别计算概率,选择概率最大的类别作为最终预测。
6、GELU(Gaussian Error Linear Unit)
- 公式:
- 特点:
- GELU 是一种近似高斯误差函数的激活函数,常用于 Transformer 等模型。
- 它具有平滑的非线性性质,并且能够提升网络在一些任务中的性能。
三、非极大值抑制(Non-Maximum Suppression, NMS)
1、定义
非极大值抑制(Non-Maximum Suppression, NMS)是计算机视觉中常用的一种技术,尤其在目标检测任务中,NMS 用于从一组候选框中筛选出最优的检测框。其主要目的是减少冗余的检测框,确保每个目标只对应一个检测框。
2、作用
在目标检测中,通常使用滑动窗口或卷积神经网络(CNN)来预测多个边界框(bounding boxes)以及它们对应的概率得分。然而,对于同一目标,模型可能会产生多个重叠的边界框,并且这些框的预测得分可能相似。非极大值抑制的作用就是根据得分筛选出最有可能包含目标的边界框,并移除那些冗余或重叠度过高的框。
3、具体步骤
-
排序:
- 首先,将所有候选框按照它们的得分(例如,预测的类别概率)从高到低进行排序。
-
选择最高得分的框:
- 从排序后的候选框中选择得分最高的框,作为当前的最终检测框。
-
计算重叠度(IoU):
- 对于当前选中的框,计算它与其他剩余框之间的重叠度,通常使用 Intersection over Union(IoU) 来衡量:
-
- 这个值越大,表示两个框越相似,重叠部分越多。
-
抑制重叠较大的框:
- 设置一个 IoU 阈值(比如 0.5),对于剩余的框,如果与当前选择的框的 IoU 大于该阈值,则认为这两个框表示的是同一个目标,因此将这些框从候选框列表中移除。
-
重复以上过程:
- 重复以上步骤,直到所有候选框都被处理完毕。
4、举例
假设模型检测到一个物体,给出了三个候选框及其得分:
- 框 A:得分 = 0.9,位置 = (10, 10, 50, 50)
- 框 B:得分 = 0.8,位置 = (12, 12, 48, 48)
- 框 C:得分 = 0.7,位置 = (100, 100, 150, 150)
步骤如下:
- 排序:按得分从高到低排序,框 A、B、C。
- 选择框 A:选择框 A,因为它得分最高。
- 计算 IoU:计算框 A 与框 B 之间的 IoU,假设 IoU = 0.85,说明两个框重叠较多。
- 移除框 B:因为 IoU 大于预设的阈值(比如 0.5),所以移除框 B。
- 选择框 C:选择得分次高的框 C,IoU 与框 A 很小,因此不需要移除。
- 结果:最终保留框 A 和框 C。
5、选择阈值的影响
- 阈值过低:如果 IoU 阈值设置得很低(例如 0.1),则可能保留太多重叠框,导致冗余框太多,影响最终的检测精度。
- 阈值过高:如果 IoU 阈值设置得太高(例如 0.9),则可能误删一些有效的框,导致漏检。
总结
非极大值抑制的核心思想是通过选择得分较高的框并抑制重叠度较大的框,减少冗余检测结果,最终输出最优的边界框。这在目标检测任务中尤为重要,能够提高检测的精度和效率。
四、召回率(Recall)和精度(Precision)
召回率(Recall)和精度(Precision)是评估分类模型性能的两个重要指标,尤其是在不平衡数据集或目标检测等任务中。它们都衡量模型在正确分类方面的能力,但关注的方面不同。以下是对它们的详细解释:
1. 精度(Precision)
精度是指模型预测为正类的样本中,真正为正类的比例。换句话说,精度衡量的是模型预测为正的样本中,有多少是正确的。
-
公式:
其中:
- TP(True Positive):真正类,模型正确预测为正类的样本数。
- FP(False Positive):假正类,模型错误地预测为正类的样本数。
-
特点:
- 精度越高,表示模型预测为正类时,错误预测的比例越小。
- 精度高的模型会减少错误的正类预测,但可能漏掉一些真正的正类样本。
2. 召回率(Recall)
召回率是指模型能够正确识别的正类样本占所有真实正类样本的比例。召回率衡量的是模型能识别多少实际存在的正类。
-
公式:
其中:
- TP(True Positive):真正类,模型正确预测为正类的样本数。
- FN(False Negative):假负类,模型错误地预测为负类的样本数。
-
特点:
- 召回率越高,表示模型识别到的正类样本越多,漏检的正类样本越少。
- 召回率高的模型会减少漏检,但可能增加误识别的负类样本。
3. 精度与召回率的关系
精度和召回率往往是矛盾的:
- 提高精度(减少假正类)可能会降低召回率(增加假负类)。
- 提高召回率(减少假负类)可能会降低精度(增加假正类)。
4. F1 分数(F1 Score)
为了综合考虑精度和召回率,常常使用 F1 分数,它是精度和召回率的调和平均数,能够平衡两者的重要性。F1 分数适用于精度和召回率需要平衡的场景。
-
公式:
- F1 分数的值在 0 到 1 之间,越接近 1 说明模型的性能越好。
5. 举例说明
假设你正在做二分类任务,模型的输出如下:
- 真实标签: 100 个正类(P)、 200 个负类(N)
- 预测标签: 模型预测 80 个为正类,其中 70 个是正确的,10 个是误判的负类;模型预测 120 个为负类,其中 100 个是正确的,20 个是漏掉的正类。
那么:
- TP(True Positive) = 70(模型正确预测为正类的样本数)
- FP(False Positive) = 10(模型错误预测为正类的样本数)
- FN(False Negative) = 20(模型错误预测为负类的正类样本数)
计算:
-
精度:
-
召回率:
-
F1 分数:
总结
- 精度关注的是模型预测为正类时的准确性。
- 召回率关注的是模型是否能够识别出所有正类样本。
- F1 分数是精度和召回率的加权平均,适合在需要平衡这两者时使用。
五、过拟合(Overfitting)和欠拟合(Underfitting)
1. 过拟合(Overfitting)
过拟合是指模型在训练数据上表现非常好,但在测试数据或新数据上表现较差。换句话说,模型过度学习了训练数据中的噪声和细节,导致它在未见过的数据上无法泛化。
特点:
- 训练误差很低,测试误差较高:过拟合的模型能够记住训练数据中的每个细节,训练误差很低,但由于过度依赖训练数据,它在测试数据上无法正确预测,因此测试误差较高。
- 复杂度过高:模型的复杂度过高(例如,使用过多的特征或参数),它试图捕捉到数据中的所有变动和噪声,而不是学习到数据的普遍规律。
- 表现:模型的预测结果在训练集上可能非常准确,但在新的、未见过的数据上表现较差。
解决方法:
- 正则化:通过L1正则化(Lasso)、L2正则化(Ridge)等方法,限制模型的复杂度,防止过多地依赖训练数据。
- 早停(Early stopping):在训练过程中,监控模型在验证集上的表现,当验证集误差开始上升时停止训练,避免训练过度。
- 交叉验证:使用交叉验证技术来评估模型在不同数据集上的表现,减少过拟合的风险。
- 简化模型:减少模型的复杂度,使用较少的参数或特征,降低模型的拟合能力。
- 数据增强:通过增加训练数据的多样性(例如图像翻转、旋转等)来提高模型的泛化能力。
- 集成方法:使用集成学习方法(如随机森林、XGBoost、Bagging、Boosting等),通过多模型的组合提高模型的鲁棒性。
2. 欠拟合(Underfitting)
欠拟合是指模型对训练数据的拟合不足,即模型过于简单,无法捕捉到数据的潜在规律,因此在训练数据和测试数据上都表现不好。
特点:
- 训练误差较高,测试误差也较高:欠拟合的模型没有足够的能力去学习训练数据中的规律,因此训练误差较高,而且由于无法很好地拟合训练数据,它在测试集上的表现也很差。
- 模型过于简单:模型的复杂度太低,可能是因为使用了过少的特征或参数,导致无法捕捉到数据的复杂模式。
- 表现:模型无法有效地学习到数据中的重要信息,导致在任何数据集上的表现都不好。
解决方法:
- 增加模型复杂度:使用更复杂的模型,增加模型的参数或特征,使其能够更好地拟合训练数据。
- 去掉正则化:如果正则化过强,可能会导致欠拟合,因此适当减少正则化强度,可以让模型有更多自由度去学习数据。
- 增加训练时间:增加训练轮次(epochs),让模型有更多机会学习训练数据中的规律。
- 更多特征或数据:增加更多有用的特征或数据,帮助模型更好地捕捉数据的规律。
3. 过拟合与欠拟合的关系
- 过拟合通常发生在模型过于复杂、训练数据不足、噪声较大时。它的主要问题是模型对训练数据的过度学习,导致无法泛化到新数据。
- 欠拟合通常发生在模型过于简单、训练时间不足或缺乏足够的特征时。它的主要问题是模型无法捕捉到数据中的规律,即便是训练数据也无法很好地拟合。
4. 如何判断模型是否过拟合或欠拟合
- 过拟合的表现:训练误差低,而测试误差高。此时可以检查模型的复杂度,进行正则化、减少特征或使用早停等方法。
- 欠拟合的表现:训练误差高,测试误差也高。此时可以通过增加模型复杂度、增加训练时间或添加更多特征来改善模型。
5. 偏差-方差权衡(Bias-Variance Tradeoff)
过拟合和欠拟合是偏差-方差权衡中的两个极端:
- 欠拟合通常与高偏差和低方差相关,意味着模型过于简单,不能有效捕捉到数据的规律。
- 过拟合通常与低偏差和高方差相关,意味着模型在训练数据上表现很好,但对于新数据的泛化能力差。
理想的模型应该有适中的偏差和方差,即找到一个合适的复杂度,能够有效地在训练数据和测试数据上进行良好的预测。
总结
- 过拟合是模型过度学习训练数据,导致泛化能力差。
- 欠拟合是模型无法学习训练数据中的规律,表现不好。
- 通过调整模型的复杂度、正则化、训练时间等手段,可以在两者之间找到平衡点,从而提高模型的性能和泛化能力。
六、计算卷积神经网络神经元的感受野
卷积神经网络(CNN)中的感受野(Receptive Field)指的是神经网络中某一层神经元能够感知的输入数据区域的大小。感受野决定了一个神经元对输入数据的"视野"。了解感受野的大小对于设计CNN模型非常重要,因为它帮助我们确定每一层神经元能够感知输入图像的多大区域。
如何计算感受野
计算CNN中神经元的感受野需要考虑以下几个因素:
- 卷积核的大小(Filter Size)
- 卷积步长(Stride)
- 池化层的大小和步长(如果有池化层)
- 网络层数
1. 基础公式
对于每一层的感受野,计算可以使用如下公式:
-
感受野公式:
其中:
是当前层的感受野大小。
是上一层的感受野大小(初始值通常是输入图像的大小)。
- k 是卷积核的大小。
- S 是步长(stride)。
-
这里的 RFout 是上一层的感受野大小加上卷积核对输入区域的扩展。
2. 逐层计算感受野
假设有多层卷积操作,我们可以从输入层开始逐层计算感受野。
示例
假设我们有一个输入图像的大小为 32×32,然后经过几个卷积层和池化层处理。具体参数如下:
- 输入图像大小:32×32
- 第一层卷积:卷积核大小为 3×3,步长为 1,无填充(Padding)
- 第二层卷积:卷积核大小为 3×3,步长为 1,无填充
- 池化层:大小为 2×2,步长为 2(假设使用最大池化)
步骤 1:计算第一层的感受野
- 卷积核大小:3
- 步长:1
- 没有填充
感受野计算:
所以第一层输出的每个神经元的感受野为 3×3。
步骤 2:计算第二层的感受野
- 卷积核大小:3
- 步长:1
感受野计算:
所以第二层输出的每个神经元的感受野为 5×5。
步骤 3:计算池化层的感受野
- 池化大小:2
- 步长:2
池化层的感受野计算:
所以池化层输出的每个神经元的感受野为 7×7。
3. 总结感受野的计算方法
- 每经过一层卷积操作,感受野会扩大,具体扩展量与卷积核大小和步长有关。
- 如果有池化层,池化操作会使感受野进一步扩大,因为池化层有更大的步长。
- 通过逐层计算,可以得到每一层神经元的感受野,从而帮助理解网络如何从输入图像中提取信息。
4. 不同层数的感受野
对于深层的CNN,随着网络深度的增加,神经元的感受野也会越来越大,因此模型能够“看到”图像中更大的区域。这是通过逐层叠加卷积和池化操作来实现的。
例如,假设网络的结构是:
- 输入图像 32×32
- 第一层卷积(3x3卷积核,步长1)
- 第二层卷积(3x3卷积核,步长1)
- 池化层(2x2,步长2)
根据上述公式和步骤,计算出最后一层神经元的感受野为 7×7,表示它能“看到”输入图像中 7×7 区域的内容。
总结
- 计算感受野需要逐层跟踪每个操作对输入区域的扩展影响。
- 感受野的大小影响模型能够捕捉到输入数据中的信息的能力,感受野越大,模型能够感知的信息范围就越广。
七、计算输出的特征图尺寸
1. 卷积层输出特征图尺寸
对于每一层卷积操作,输出特征图的尺寸可以使用以下公式来计算:
其中:
和
分别是输入图像的高度和宽度。
- K 是卷积核的大小(假设是正方形,K×K)。
- P 是填充(Padding)的大小。
- S 是步长(Stride)。
注意: 如果填充是“同样填充”(same padding),通常填充使得输出的尺寸与输入尺寸相同,或者仅在一个维度上相差 1。如果填充是“有效填充”(valid padding),则不添加填充,输出的尺寸会更小。
2. 池化层输出特征图尺寸
池化层的计算方式与卷积层类似,使用相同的公式:
其中:
和
是池化层输入的高度和宽度。
- K 是池化窗口的大小(假设为正方形,K×K)。
- S 是池化层的步长。
池化操作通常是 最大池化(Max Pooling)或 平均池化(Average Pooling)。常见的池化操作为 2×2 大小,步长为 2。
3. 计算例子
假设输入图像的尺寸是 32×32,经过一层卷积和池化操作,具体参数如下:
-
卷积层:
- 卷积核大小: 3×3
- 步长: 1
- 填充: 1(假设使用“same”填充)
计算卷积输出的特征图尺寸:
所以卷积层的输出特征图尺寸是 32×32。
-
池化层:
- 池化窗口: 2×2
- 步长: 2
计算池化层输出的特征图尺寸:
所以池化层的输出特征图尺寸是 16×16。
4. 组合计算
如果有多个卷积层和池化层,可以逐层计算输出的特征图尺寸。例如:
- 输入图像: 32×32
- 第一层卷积: 卷积核 3×3,步长 1,填充 1(“same”填充),输出尺寸为 32×32
- 第一层池化: 池化窗口 2×2,步长 2,输出尺寸为 16×16
- 第二层卷积: 卷积核 3×3,步长 1,填充 1(“same”填充),输出尺寸为 16×16
- 第二层池化: 池化窗口 2×2,步长 2,输出尺寸为 8×8
5、反卷积层(转置卷积层)输出特征图的尺寸
对于一个输入特征图,反卷积输出的高度和宽度分别可以通过以下公式计算:
参数说明:
-
:输入特征图的高度和宽度。
-
:输出特征图的高度和宽度。
-
K:卷积核的大小(kernel size),通常为正方形(如 K=3)。
-
S:步幅(stride),决定输出增大的幅度。
-
P:填充(padding),指输入特征图在卷积前的填充像素数。
-
output padding:额外的输出填充(只用于反卷积),用于调整输出尺寸。默认为 0。
假设以下反卷积参数:
-
输入特征图尺寸
-
卷积核大小 K=3
-
步幅 S=2
-
填充 P=1
-
输出填充为 0。
将参数代入公式:
输出特征图的尺寸为 。
特殊情况
A. 当步幅为 1
-
若 S=1,则反卷积不会对分辨率进行扩展,输出尺寸近似等于输入尺寸(受 kernel 和 padding 影响)。
B. 有 output padding 时
若额外指定了 output padding,例如 output padding = 1,则公式变为:
这个额外的填充只影响最终输出的大小,通常用于保证上采样尺寸符合预期。
总结
计算输出特征图的尺寸关键在于以下几点:
- 对卷积层,使用卷积核大小、步长、填充来计算输出尺寸。
- 对池化层,使用池化窗口大小和步长来计算输出尺寸。
- 多层计算时,要逐层计算每一层的输出尺寸。
- 对反卷积层,使用卷积核大小、步长、填充来计算输出尺寸。
八、卷积神经的参数计算
在卷积神经网络(CNN)中,每一层的参数量是非常关键的,因为它影响模型的训练时间、计算资源和内存使用。我们可以计算每一层的参数量,包括卷积层、全连接层(如果有的话)以及其他可能的层。
1. 卷积层的参数计算
卷积层的参数主要来自两个部分:
- 卷积核(Filter)
- 偏置项(Bias)
卷积层的参数数量:
对于一个卷积层,假设输入的特征图有 个通道(深度),卷积核的大小是 K×K(例如 3×3,5×5 等),卷积层有 个
输出通道(深度)。
那么卷积层的总参数量为:
参数量=(+1)×
其中:
是每个卷积核的参数数量(每个卷积核有 K×K 个权重,每个输入通道都有一个卷积核)。
- +1 是每个输出通道对应的偏置项。
是卷积核的个数,即输出通道的数量。
示例:
假设输入的特征图有 =3 个通道(例如 RGB 图像),卷积核大小为 3×3,输出通道数
=64。
卷积层的参数量计算:参数量=(3×3×3+1)×64=(27+1)×64=28×64=1792
所以该卷积层的参数量是 1792 个。
2. 全连接层的参数计算
全连接层的参数量由以下几个部分组成:
- 权重矩阵:全连接层的输入维度(假设为
)和输出维度(假设为
)之间的权重矩阵有
个参数。
- 偏置项:每个输出节点有一个偏置项,因此有
个偏置项。
因此,全连接层的参数总数为:
参数量=+
其中:
是权重矩阵的参数量。
是偏置项的数量。
示例:
假设全连接层的输入尺寸为 ,输出尺寸为
(例如分类任务有 10 类)。
全连接层的参数量计算:参数量=1024×10+10=10240+10=10250
所以该全连接层的参数量是 10250 个。
3. 池化层的参数计算
池化层(如最大池化或平均池化)没有需要学习的参数。池化层的作用是通过选择最大值或平均值来减少输入特征图的空间大小。池化层的参数量是 0。
4. 批归一化层(Batch Normalization)
批归一化层通常会在卷积层或全连接层之后使用。它包含两个可训练的参数:
- 缩放因子(gamma):每个通道有一个缩放因子,共有
个。
- 平移因子(beta):每个通道有一个平移因子,共有
个。
因此,批归一化层的参数总数为:参数量=2×
其中:
是输出通道的数量。
5. 卷积神经网络中多层的参数计算
在实际的CNN中,通常包含多个卷积层、池化层和全连接层。为了计算整个网络的总参数量,应该逐层计算每一层的参数数量,然后将它们相加。
计算流程:
- 卷积层:按前述公式计算每一层的参数。
- 池化层:无参数。
- 全连接层:按前述公式计算每一层的参数。
- 批归一化层:按前述公式计算每一层的参数。
6. 示例:计算一个简单网络的参数量
假设我们有以下网络结构:
- 输入图像: 32×32×3(彩色图像)
- 第一层卷积:卷积核 3×3,输入通道 3,输出通道 64,步长 1,填充 1
- 第二层卷积:卷积核 3×3,输入通道 64,输出通道 128,步长 1,填充 1
- 池化层:2×2,步长 2
- 全连接层:输入大小 128,输出大小 10(10类分类)
计算第一层卷积的参数量:参数量=(3×3×3+1)×64=1792
计算第二层卷积的参数量:参数量=(3×3×64+1)×128=73856
池化层没有参数,因此跳过。
计算全连接层的参数量:
池化后特征图的尺寸是 16×16×128,那么全连接层的输入尺寸是 16×16×128=32768 ,输出尺寸为 10。
参数量=32768×10+10=360448
总参数量:总参数量=1792+73856+360448=436096
所以,这个简单的CNN的总参数量是 436096个。
总结
- 卷积层的参数量:卷积核大小、输入通道数、输出通道数和偏置项。
- 全连接层的参数量:输入节点数、输出节点数和偏置项。
- 池化层:没有参数。
- 批归一化层:每个通道有两个可训练的参数(缩放因子和偏移量)。
通过逐层计算并相加,可以得到整个卷积神经网络的参数总量。
九、卷积神经网络的特点
卷积神经网络(CNN)的特点是 平移不变性(Translation Invariance) 和 局部性(Locality)。这两个特点是CNN的关键特性,使其在处理图像等空间结构数据时非常有效。下面我们分别解释这两个特点。
1. 平移不变性(Translation Invariance)
平移不变性指的是卷积神经网络能够识别输入图像中物体的位置变化(平移)而不受到影响。换句话说,即使物体在图像中发生平移,CNN依然能够正确地识别物体。
为什么会有平移不变性?
- 共享权重:在卷积神经网络中,卷积层的每个神经元都共享相同的卷积核(filter)权重。卷积核在输入图像中滑动,对不同位置的局部区域进行卷积计算,提取相同的特征。
- 局部连接:每个卷积神经元仅连接到输入图像的一个小区域(即感受野)。由于卷积核在图像中滑动,它可以在图像的不同位置提取相同的特征,因此能识别图像中的物体,无论物体的位置如何变化。
举个例子:
假设你训练一个CNN来识别数字“7”。如果数字“7”出现在图像的左上角、右下角或中央,卷积神经网络都能识别出它。因为卷积核会在图像的各个位置滑动,提取相同的特征,这使得CNN具有平移不变性。
2. 局部性(Locality)
局部性是指卷积神经网络中的神经元只连接到输入数据的局部区域,而不是整个输入图像。每个卷积神经元的感受野是局部的,意味着它仅关注输入图像中的一小块区域。通过这种方式,卷积神经网络能够专注于局部特征的提取。
为什么会有局部性?
- 感受野:在卷积层中,神经元的感受野决定了它能够“看到”输入数据的多大范围。卷积核的大小决定了感受野的大小。例如,使用 3×3 的卷积核时,每个神经元只会关注输入图像中的一个 3×3 的小区域。
- 局部连接:卷积层的每个神经元仅与输入图像的一个小区域连接。局部连接使得每个神经元可以专注于提取局部特征(例如,边缘、角点、纹理等)。
为什么局部性重要?
- 减少计算量和参数量:与全连接层相比,卷积层只连接到输入图像的一部分,从而大大减少了模型需要学习的参数数量。
- 高效提取局部特征:图像中的局部特征通常比全局特征更重要。局部性使得CNN可以专注于从局部区域提取信息,比如图像中的边缘、纹理、角点等,进而识别出复杂的物体。
举个例子:
- 假设输入图像是一个 32×32 的图像,如果我们使用一个 3×3 的卷积核进行卷积操作,那么每个卷积神经元只关注输入图像中的一个 3×3 的局部区域,而不是整个 32×32 的图像。通过这种局部连接方式,CNN能够专注于局部特征的提取。
总结
- 平移不变性(Translation Invariance):通过共享权重和滑动卷积核,卷积神经网络能够识别输入图像中的物体,即使它们在图像中的位置发生变化。
- 局部性(Locality):卷积神经网络中的神经元只与输入图像的局部区域连接,每个卷积神经元专注于从局部区域提取特征,有助于减少参数量、提高计算效率,并有效识别局部特征。
十、常见的处理小目标的策略
在目标检测中,小目标检测是一个常见的挑战,尤其是在图像中物体尺寸差异较大、背景复杂的情况下。小目标通常在图像中占据的像素较少,且容易被噪声或背景干扰,导致检测困难。为了解决这一问题,以下是几种常见的处理小目标的策略:
1. 多尺度特征提取(Multi-scale Feature Extraction)
小目标通常在高分辨率图像的较小区域中出现,因此需要在不同尺度上进行特征提取,以捕捉图像中不同大小目标的特征。常见的方法包括:
- 特征金字塔(Feature Pyramid Networks, FPN):FPN通过自底向上的卷积网络生成多尺度的特征图,并使用自顶向下的路径将不同层的特征进行融合。这样可以让模型同时关注图像中的大目标和小目标。
- 多尺度输入:通过对输入图像进行多尺度处理,即将图像缩放到不同大小,分别进行目标检测,再通过合并结果来提高小目标的检测精度。
2. 高分辨率特征图(High-Resolution Features)
为了更好地捕捉小目标的细节,可以采用高分辨率的特征图。传统的卷积神经网络在经过多次池化和下采样后,会丢失一些细节信息,导致小目标难以被检测。通过:
- 减少池化层的数量:避免对特征图进行过多下采样,保留更多细节信息。
- 使用高分辨率的输入图像:提高输入图像的分辨率,可以帮助检测更小的目标。
- 高分辨率卷积:使用不进行池化或下采样的卷积层,或者使用“空洞卷积”来扩大感受野,同时保留更多的空间分辨率。
3. 改进的损失函数(Loss Functions)
目标检测中的损失函数对于小目标的检测至关重要。可以通过对小目标加大权重,或者对其更高的召回要求来调整损失函数:
- 加权损失函数:对小目标赋予更大的权重,使得模型更加关注小目标的检测。例如,在损失函数中为小目标的定位和分类增加额外的惩罚项。
- 焦点损失(Focal Loss):这种损失函数专门设计来解决类别不平衡问题,尤其对于小目标检测特别有效。焦点损失通过降低对易分类样本的关注,提高对难分类样本(如小目标)的关注。
4. 区域增强方法(Region Proposal Networks, RPN)
对于一些基于候选区域的目标检测方法(如Faster R-CNN),可以使用**区域增强(Region Proposal Networks, RPN)**来提高对小目标的检测:
- 改进区域提议网络:通过优化RPN,确保它能够生成更精细、更适合小目标的候选区域。
- Anchor的尺度设计:设计适合不同大小目标的锚点(Anchor),特别是对于小目标,可以设计较小尺度的锚点,确保能够更好地覆盖小目标。
5. 上下文信息的引入
小目标常常被背景噪声或其他物体遮挡,因此引入上下文信息可能有助于提高小目标的检测准确率:
- 上下文卷积:通过使用大感受野的卷积操作,结合较大的上下文信息,来增强小目标的辨识度。
- 上下文网络:一些模型尝试通过增加上下文网络(如通过图像区域的上下文信息来推断小目标的位置)来帮助小目标检测。
6. 数据增强(Data Augmentation)
数据增强是提升小目标检测效果的一个常用方法,尤其对于小目标的训练集样本较少时:
- 缩放和裁剪:通过对训练图像进行缩放、裁剪等操作,使小目标的比例相对增大,帮助模型更好地学习小目标的特征。
- 随机裁剪和变换:通过随机裁剪图像中的小目标,迫使模型学会从有限的上下文信息中推测小目标。
7. 使用更强大的检测网络(如YOLOv4, RetinaNet等)
一些现代目标检测算法,如YOLOv4和RetinaNet,通过改进网络架构和增强特征提取能力,在小目标检测中表现得更好:
- YOLO系列:YOLOv4使用了多种技巧(如CSPDarknet53 backbone、跨尺度特征融合等)来提高检测精度,特别是在小目标检测方面有很好的表现。
- RetinaNet:通过引入焦点损失(Focal Loss),解决了类别不平衡问题,从而帮助提高小目标的召回率。
总结
小目标检测的难度主要在于目标在图像中占的像素少,容易被背景噪声或其他大目标干扰。为了解决这个问题,常用的方法包括:
- 采用多尺度特征提取和高分辨率特征图。
- 使用改进的损失函数,如焦点损失,来优化小目标的检测。
- 设计适合小目标的锚点和区域提议。
- 引入上下文信息来减少小目标被忽视的概率。
十一、TransFormer与卷积神经网络的区别
1. 结构原理
-
卷积神经网络(CNN):CNN主要通过卷积层、池化层等操作来提取局部特征。它依赖于局部感受野(local receptive fields),即每个神经元仅与输入图像的局部区域连接。通过卷积核共享权重,CNN能够高效地提取局部特征,并逐层组合形成更复杂的特征。
卷积操作:通过卷积核对输入数据进行滑动计算,提取局部特征。对于图像,CNN能够提取边缘、纹理等低级特征,并逐层组合形成复杂的物体特征。
-
Transformer:Transformer基于自注意力机制(Self-Attention)和多头注意力(Multi-head Attention),通过计算输入数据中各元素之间的关系来提取特征。Transformer没有卷积核的概念,而是通过对所有输入元素的全局关系进行建模,捕获长距离依赖关系。
自注意力机制:Transformer模型通过对输入数据的每个元素进行加权求和,来计算它与其他元素之间的关系,捕捉全局依赖。
2. 输入数据处理方式
-
CNN:CNN的主要优势在于图像处理,特别是在图像的局部特征提取上。CNN通过卷积操作有效地捕捉图像的空间结构,因此在处理图像时,它特别适合提取局部的空间信息(如边缘、纹理等)。
-
Transformer:Transformer的优势在于处理序列数据(如自然语言处理任务),它通过自注意力机制能够建模输入序列中的全局依赖关系。因此,Transformer特别适合处理语言等序列数据,也可以处理图像数据(如ViT模型),但需要将图像分割成小块来输入。
3. 局部 vs 全局特征
-
CNN:CNN通过局部连接(每个卷积核只感知输入图像的一部分)和权重共享(卷积核在整个图像上滑动)来提取局部特征。虽然卷积层的感受野随着层数的增加而增大,但它仍然专注于局部特征的提取。
-
Transformer:Transformer通过自注意力机制能够捕捉全局依赖。每个输入元素都能与其他所有元素进行交互,从而捕捉到全局的特征关系。它在建模长期依赖(例如长距离的上下文关系)方面表现得非常好。
4. 计算效率
-
CNN:由于卷积核的权重共享和局部连接,CNN在处理图像时非常高效。卷积操作通常比全连接层更容易并行化,因此计算效率较高。
-
Transformer:Transformer的自注意力机制在计算时需要计算所有元素之间的关系,因此在序列较长时,计算复杂度较高。自注意力的计算复杂度是 O(n2)O(n^2)O(n2),其中 nnn 是输入序列的长度,因此当输入序列变得很长时,计算开销可能会非常大。为了解决这个问题,Transformer的许多变种(如长序列的线性时间自注意力)尝试减少计算复杂度。
5. 可扩展性
-
CNN:CNN的层次化结构可以很好地进行特征提取,并且在图像分类、目标检测等任务中表现优异。但是,CNN的主要限制在于它在捕捉长距离依赖和全局信息时不如Transformer强大。
-
Transformer:Transformer的自注意力机制可以自然地捕捉长距离的依赖关系,并且可以很容易地扩展到更大规模的模型(如GPT、BERT)。Transformer特别适合需要捕捉全局信息的任务,如自然语言处理、图像处理(如Vision Transformer)。
6. 应用场景
-
CNN:CNN广泛应用于计算机视觉任务,如图像分类、目标检测、语义分割等。它适用于图像、视频等具有空间结构的数据。
-
Transformer:Transformer最初应用于自然语言处理(如机器翻译、文本生成等),并且在近年来也扩展到图像处理领域(如Vision Transformer,ViT)。Transformer特别适合处理序列数据,且能够建模复杂的全局依赖关系。
7. 特征表示能力
-
CNN:CNN通过局部卷积提取局部特征,逐层组合形成高层次的特征。它的表示能力主要体现在图像的空间结构和局部模式的捕捉上。
-
Transformer:Transformer通过自注意力机制能够捕捉更复杂的全局模式和长期依赖关系,它的表示能力体现在能够处理长距离依赖和复杂的上下文信息。
总结
特性 | CNN | Transformer |
---|---|---|
基础原理 | 卷积操作、局部感受野、权重共享 | 自注意力机制、全局依赖建模 |
适用数据 | 主要用于图像、视频等空间数据 | 主要用于序列数据(如文本、语言等) |
局部 vs 全局特征 | 强调局部特征 | 强调全局特征,捕捉长距离依赖 |
计算复杂度 | 计算效率较高,局部计算 | 计算复杂度较高,特别是序列较长时 |
应用场景 | 图像分类、目标检测、语义分割等 | 自然语言处理、Vision Transformer等 |
可扩展性 | 适合局部特征提取,较难处理长依赖 | 强大的全局特征建模能力,易扩展到大规模 |
十二、图像分类时使用的模型
在图像分类任务中,常用的模型有多种,涵盖了传统的卷积神经网络(CNN)到现代的预训练模型和深度学习架构。以下是一些常见的图像分类模型及其特点:
1. 传统卷积神经网络(CNN)
卷积神经网络(CNN)是图像分类的基本模型,它通过卷积层提取图像特征,池化层降低维度,然后通过全连接层进行分类。传统的CNN架构通常包括以下部分:
- 卷积层(Convolutional Layers):用于提取局部特征。
- 池化层(Pooling Layers):用于减小特征图的尺寸,提取更抽象的特征。
- 全连接层(Fully Connected Layers):用于将提取到的特征进行分类。
常见的传统CNN架构:
- LeNet:最早的CNN之一,主要用于数字识别任务(如MNIST数据集)。
- AlexNet:在2012年ImageNet大规模图像分类比赛中获得突破,深度比LeNet更大,使用了更多的卷积层和ReLU激活函数。
2. 深度卷积神经网络
随着深度学习的发展,CNN的结构变得越来越深,出现了许多深度的卷积网络,这些网络可以提取更加复杂的特征,提升图像分类的准确度。
常见的深度CNN架构:
- VGGNet:VGGNet通过使用较小的卷积核(3×33 \times 33×3)和深层网络架构(16或19层)在图像分类中取得了良好的效果。
- GoogLeNet(Inception):引入了Inception模块,在不同尺度上提取特征,并通过1x1卷积减少计算量。
- ResNet:引入了残差连接(ResNet),有效解决了深层网络中的梯度消失问题。ResNet可以非常深(例如ResNet-50、ResNet-101、ResNet-152等)。
3. 预训练模型
预训练模型是指在大规模数据集(如ImageNet)上进行训练的模型,可以通过迁移学习应用到你的图像分类任务中。由于这些模型已经在大量数据上进行过训练,它们能够提取通用的特征,因此在较小的数据集上进行微调后,通常可以获得较好的性能。
常见的预训练模型:
- VGG16/VGG19:VGG架构在ImageNet数据集上训练,广泛用于迁移学习任务。
- ResNet系列(如ResNet50, ResNet101, ResNet152):在图像分类中表现优秀,使用残差连接可以加深网络而不导致性能退化。
- Inception系列(如InceptionV3):通过多尺度特征提取,提高图像分类性能。
- DenseNet:通过密集连接(Dense Connections)连接所有层,提高梯度流动,增强特征传播。
- MobileNet:专为移动设备优化,具有较小的计算开销,适用于嵌入式设备。
4. Vision Transformer (ViT)
ViT是近年来提出的一个创新模型,它将Transformer应用到图像分类任务中。ViT通过将图像切分为小块(patch),并将这些小块视为序列输入到Transformer中,来进行特征提取。尽管Transformer原本是为处理序列数据(如文本)而设计的,但在图像分类中,ViT也取得了不错的效果。
ViT的特点:
- 自注意力机制:ViT通过自注意力机制能够捕捉图像中不同区域之间的关系,而不仅仅依赖于局部特征。
- 需要大量数据和计算资源:ViT通常需要大规模的数据集(如ImageNet)来训练,且计算开销较大。
5. 轻量级模型(适合嵌入式设备)
在资源有限的设备上,可能需要使用一些轻量级的网络结构,以平衡计算量和性能。
常见的轻量级模型:
- MobileNet:通过深度可分离卷积(Depthwise Separable Convolution)大幅减少计算量,适用于移动设备。
- EfficientNet:通过复合缩放方法(compound scaling)来同时优化模型的深度、宽度和分辨率,提高效率。
- SqueezeNet:使用较小的卷积核和瓶颈结构,减少模型大小,适合资源受限的设备。
6. 生成对抗网络(GANs)
尽管GANs通常用于生成任务,但它们也可以在图像分类任务中起到辅助作用。例如,GANs可以用于生成训练数据(数据增强),或者在特定应用中通过生成器产生有标签的合成图像来增强分类模型的表现。
总结
图像分类中使用的模型有很多,选择合适的模型取决于任务的特点、数据集的大小、计算资源的可用性等因素。常见的模型包括:
- 传统CNN(如LeNet, AlexNet)
- 深度CNN(如VGG, ResNet, Inception)
- 预训练模型(如VGG16, ResNet50, InceptionV3)
- Transformer模型(如Vision Transformer)
- 轻量级模型(如MobileNet, EfficientNet)