1: 专有的名词
mAP:表示平均精确度均值(mean Average Precision)。mAP是一种常用的评估指标,用于衡量目标检测算法的性能。
在目标检测任务中,mAP用于衡量算法在不同类别上的准确度。它的计算方式涉及两个主要概念:精确度(Precision)和召回率(Recall)。
精确度表示检测到的目标中真正正确的比例,而召回率表示所有真实目标中被正确检测到的比例。mAP通过计算不同类别下的精确度和召回率,然后取各个类别的平均值,得出最终的评估结果。
mAP的取值范围是0到1之间,数值越高表示算法在目标检测任务中的性能越好。通常,mAP大于0.5被认为是一个较好的结果,而大于0.75则被认为是非常好的。
FLOPs用于衡量其计算量大小。YOLO是一种实时目标检测算法,其主要特点是将目标检测任务转化为一个回归问题,并通过单次前向传播实现端到端的目标检测。
具体来说,在YOLO的推理过程中,FLOPs主要用于以下几个方面:
-
特征提取网络(backbone):YOLO算法使用卷积神经网络(CNN)作为特征提取网络,通常采用一些经典的网络结构,如Darknet、ResNet等。FLOPs用于衡量这些网络在图像上执行的浮点运算数量。
-
特征金字塔网络(feature pyramid network,FPN):为了检测不同尺度的目标,YOLO算法引入了特征金字塔网络。该网络用于生成多层次的特征图,以便对不同大小的目标进行检测。FLOPs也包括了特征金字塔网络中的计算量。
-
检测头部(detection head):YOLO算法使用多个检测头部来预测不同尺度下的目标框和类别。每个检测头部都会进行一系列的卷积和全连接操作,这些操作的计算量也被计算在FLOPs中。
需要注意的是,YOLO算法的FLOPs值会受到许多因素的影响,例如输入图像的大小、网络结构的复杂度、使用的预训练模型等。因此,具体的FLOPs值会根据所使用的YOLO版本和实际情况有所不同。在实践中,可以借助一些工具或库来估计或统计算法的FLOPs值,如TensorFlow中的tf.profiler或PyTorch中的torchprof。
横坐标:推理的速度。
纵坐标:mAP
上面的分辨率一般是640*640
下面是1280*1280
上面的预测特征层是三层,并且下采样率是32倍。下面的高分辨率的下采样率达到64倍,预测特征层是四层
2: yolov5s
2.1 .s
2.2 C3和SPPF
2.3 backbone
2.4 head
3:网络结构
3.1 Focus模块
在YOLO v4和YOLO v5中,引入了一个新的模块称为"Focus"模块。这个模块主要用于替代传统的卷积层,以提高模型的计算效率和准确性。
Focus模块的设计思想是将输入特征图进行重新组合,从而减少计算量并增加感受野。它的作用类似于对输入进行子采样和通道重组,以减少冗余信息并集中在更重要的特征上。通过这种方式,Focus模块可以在减少参数数量的同时提高模型的感知能力。
具体来说,Focus模块通常由两个部分组成:
- 重塑(reshape):首先,输入特征图被重塑成原来的四分之一大小。这一步骤可以减少输入特征图的尺寸,从而减少后续的计算量。
- 通道重组(channel shuffle):然后,重塑后的特征图被分割成不同的通道组,然后这些通道组之间进行交错重组。这一步骤可以增加模型对不同特征的感知能力,并且有利于模型学习到更加抽象的特征表示。
总的来说,Focus模块通过重塑和通道重组的方式,有效地减少了计算量和参数数量,同时提高了模型对特征的感知能力,从而在目标检测任务中取得了较好的效果。
3.2 Focus模块和6*6的普通卷积层
Focus模块和普通的6x6卷积层在目标检测模型中扮演着不同的角色,并且有着不同的设计思想和特点。
Focus模块:
- 重塑特征图:Focus模块首先对输入特征图进行了重塑,将其尺寸缩小为原来的四分之一。
- 通道重组:然后,通过通道重组的方式,将通道分组并交错重组,增加了特征的多样性和抽象能力。
- 减少计算量:通过重塑和通道重组,Focus模块在保持感知能力的同时减少了计算量和参数数量,这对于实时目标检测任务非常有益。
6x6普通卷积层:
- 固定尺寸卷积:普通的6x6卷积层是一个固定尺寸的卷积操作,它的作用是在整个特征图上进行特征提取和信息融合。
- 全局感受野:6x6卷积层具有较大的感受野,可以捕获更广阔范围内的特征信息,适用于对全局信息的提取和处理。
总的来说,Focus模块更注重在保持感知能力的同时减少计算量和参数数量,适用于要求实时性能的目标检测任务;而6x6普通卷积层则更适合于在特征提取过程中捕获更广阔范围内的特征信息,用于更全局性的特征处理。在实际应用中,可以根据具体的任务需求和计算资源来选择合适的模块和层来构建目标检测模型。
3.3 SPPF
最大池化(Max Pooling)是深度学习中常用的一种池化操作,其主要作用包括以下几点:
-
特征降维:最大池化通过保留每个池化窗口中的最大值,实现了对特征图的降维操作。这样做有助于减少参数数量和计算复杂度,同时保留最显著的特征,有助于提取更加显著和稳定的特征。
-
平移不变性:最大池化能够使得特征对于位置的变化具有一定的鲁棒性。即使目标在图像中稍微移动,最大池化仍能够捕捉到目标的存在,因为最大值的位置可能会随着目标的平移而变化,但是最大值本身并不受位置的影响。
-
提取主导特征:通过保留局部区域内最显著的特征,最大池化有利于提取图像中最重要的特征,有助于后续神经网络层更好地学习和识别目标。
最大池化通常被用于卷积神经网络(CNN)中,可以在卷积层之后或者多个卷积层之后进行,是一种非常常见且有效的特征提取操作。
3.4 数据增强
拼成一张,增加数据的多样性
分割(每个目标标签)
只用了一个随机的缩放与平移
两张图片按照一定透明度变成一张图片
包。
改变色度饱和度和明度。
随机的水平翻转
4:训练策略
"Evolve" hyper-parameters通常指的是在使用遗传算法或进化算法进行超参数优化时所需要设置和调整的参数。遗传算法是一种启发式优化算法,它模拟了生物进化的过程,通过不断地迭代、选择和交叉变异来搜索最优的超参数组合。
在使用遗传算法进行超参数优化时,可以设置的"Evolve"超参数包括但不限于以下几个方面:
- 种群大小(Population Size):种群大小决定了每一代中有多少个个体参与进化过程,通常会影响到算法的全局搜索能力和局部收敛速度。
- 交叉概率(Crossover Probability):交叉概率决定了两个个体进行交叉的概率,即生成新个体的概率。适当的交叉概率可以保持种群的多样性,同时不至于太高导致收敛速度过慢。
- 变异概率(Mutation Probability):变异概率决定了个体基因突变的概率,即在交叉之后引入新的基因变化。合适的变异概率有助于保持种群的多样性,从而避免陷入局部最优解。
- 进化代数(Number of Generations):进化代数指定了算法需要进行多少代的进化迭代。较多的进化代数可以增加搜索空间,找到更优的超参数组合,但也会增加计算成本。
- 适应度函数(Fitness Function):适应度函数用于评价每个个体的优劣,从而指导进化的方向。设计合适的适应度函数对于算法的收敛速度和搜索效果非常重要。
以上是一些常见的与遗传算法中"Evolve"超参数相关的设置,这些参数的选择往往需要结合具体的问题和数据集来进行调整和优化,以获得最佳的超参数组合。
**混合精度(Mixed Precision)**是一种通过同时利用低精度浮点数和高精度浮点数来提高计算效率的技术。在深度学习中,通常使用32位浮点数(单精度)来表示神经网络中的权重和激活值,但是通过混合精度技术,我们可以同时使用16位浮点数(半精度)和32位浮点数来进行计算。
混合精度的优势在于可以显著减少模型训练和推理过程中的内存占用和计算量,从而加快训练速度并降低功耗。然而,由于16位浮点数的范围和精度相对较小,因此在使用混合精度时需要特别注意数值稳定性和精度损失的问题。
**指数移动平均(Exponential Moving Average,简称EMA)**是一种常见的时间序列数据平滑方法,用于减少噪音和突发波动对数据的影响,以便更好地观察和预测趋势。相对于在学习变量上加上一个动量,更新参数更加平滑。
"热身(Warmup)"和"余弦学习率调度器(Cosine Learning Rate Scheduler)"是深度学习中常用的优化技术,用于训练神经网络时动态调整学习率以提高训练效果。
热身(Warmup):在训练神经网络时,初始阶段使用较小的学习率进行"热身",即逐渐增加学习率的过程。热身的目的在于避免训练初期由于较大的学习率导致的不稳定情况,同时有助于模型更好地收敛到合适的参数值。通常采用线性增加学习率的方式进行热身,也可以根据具体任务和模型进行调整。
余弦学习率调度器(Cosine Learning Rate Scheduler):余弦学习率调度器是一种动态调整学习率的方法,其基本思想源自于余弦函数。在训练过程中,学习率按照余弦函数曲线进行周期性变化,先快速下降,然后缓慢下降,最后再次快速下降。这种学习率调度方式有助于模型在训练后期更加精细地搜索参数空间,从而提高模型在验证集上的性能。
**多尺度训练(Multi-scale training)**是一种用于训练深度学习模型的技术,其核心思想是在训练过程中以不同的尺度(通常是图像尺度)来输入数据,从而使模型能够适应不同尺度下的物体特征,提高模型对尺度变化的鲁棒性。
一种常见的多尺度训练方法是将输入数据随机缩放到不同的尺度范围,通常可以在0.5倍到1.5倍原始尺度之间进行缩放。这样做的好处包括:
- 增加数据丰富性:通过在不同尺度下训练模型,相当于增加了训练数据的多样性,使得模型更容易适应不同尺度下的目标物体。
- 提高泛化能力:多尺度训练可以帮助模型学习到更加通用的特征表示,提高了其对新样本的泛化能力。
- 应对尺度变化:在实际应用中,物体的尺度往往会有所变化,通过多尺度训练可以使得模型对尺度变化更加鲁棒,有利于模型在真实场景中的应用。
AutoAnchor是一种用于训练自定义数据的目标检测模型的技术。在目标检测任务中,Anchor指的是预先定义的一组用于捕获不同尺度和长宽比目标的边界框。传统上,这些Anchor需要手动设置,并且需要依赖经验和试错来确定最佳的Anchor尺寸和长宽比。
AutoAnchor技术的出现改变了这一传统方式。AutoAnchor可以根据训练数据集的特征自动学习和调整最佳的Anchor尺寸和长宽比,从而提高了目标检测模型对不同尺度和形状目标的适应性。自动变成合适的长宽高等。
5:损失计算
0.25-4倍之间是匹配成功的
-0.5 到1.5之间都是对的所以正样本的个数会增加。