一、修改models/yolov5s.yaml文件
这个配置文件定义了一个完整的YoloV5s模型结构,包括其主干网络和检测头。我做出了很多修改,这样的配置允许模型以不同的层次进行特征提取和对象检测,非常适用于本次项目实训所用的人物检测,安全帽识别,高空作业有无系安全绳的三项场景。
二、创建数据增强配置文件dataset.yaml
数据增强是提高模型泛化能力的关键步骤。对于目标检测任务,尤其是在多样化的环境中(如不同光照、视角),强化数据增强是非常必要的。
下列代码是我第一次的代码:
这段代码属于基础配置。通常足以满足大部分训练需求,尤其是在标准目标检测任务中。这个文件主要用来定义训练和验证数据集的路径以及数据类别。基本的配置包括数据路径和类别名称,这对于启动训练流程是必须的。
但投入数据集进行测试后结果不是特别理想,故而我又改进了一版本,增加了
1.详细的数据增强选项:包括调整色调、饱和度、对比度、旋转、翻转、缩放等参数。
2.特定的训练参数:如批大小、学习率、权重衰减等。
3.高级特性:如自动平衡类别、采样策略等。
这套配置文件提供了一套全面的数据加载和增强策略,旨在提高模型对于复杂场景中人物、安全帽和安全绳的检测能力。
三、对train,py脚本进行一系列优化,提高训练效率和模型性能。
1. 数据加载优化
提高数据加载的效率,通过增加 DataLoader 的 num_workers
参数,可以更快地预处理和加载数据。
2. 使用混合精度训练
通过自动混合精度(AMP)提高训练速度并减少内存使用。
3. 损失函数定制
对不同的检测任务使用不同的权重,尤其是当一些类别比其他类别更重要时。
四、在common.py中实现新的模块优化性能
-
空间注意力模块 (Spatial Attention Module)
- 功能:空间注意力模块关注输入特征图的哪些区域是最重要的,通过学习不同空间位置的重要性来增强有用的特征并抑制不相关的信息。
- 实现方式:常见的实现包括使用卷积层生成空间注意力图,这个注意力图会对输入特征图进行加权,加强重要区域的特征,减弱其他部分。
- 应用:广泛用于图像分类、目标检测和语义分割等任务中,提高模型对图像关键部分的响应。
-
通道注意力模块 (Channel Attention Module)
- 功能:通过评估每个通道的重要性来调整通道间的响应。这有助于模型集中处理更有信息的特征通道。
- 实现方式:典型的方法是Squeeze-and-Excitation (SE)块,该块首先通过全局平均池化对每个通道的全局信息进行压缩,然后通过全连接层学习不同通道的权重。
- 应用:在图像识别、目标跟踪等领域中能够有效提升模型的表现。
-
上下文增强模块 (Context Enhancement Module)
- 功能:该模块通过整合输入特征的局部和全局上下文信息来增强特征表达。
- 实现方式:常见方法包括使用空间金字塔池化或者多尺度特征融合技术,从而捕获从不同范围的上下文信息。
- 应用:在处理需要理解广泛场景内容的任务,如场景分类和语义分割中,上下文信息尤为重要。
-
压缩激励块 (Squeeze-and-Excitation Block, SE Block)
- 功能:通过显式建模通道间的依赖关系,动态调整通道特征的响应强度,增强模型的表达能力。
- 实现方式:通过对特征图进行全局平均池化,然后使用全连接层来学习每个通道的权重,最后应用这些权重来调制原始特征图。
- 应用:SE块可以很容易地集成到各种CNN架构中,如ResNet和DenseNet,用于提高网络在复杂视觉任务中的性能。
-
特征增强模块 (Feature Enhancement Module)
- 目的:增强网络对于输入特征的表达能力,提取更加丰富和有辨别力的特征。
- 实现方式:通过增加卷积层、批标准化层和激活层的组合来实现。可以使用更深或者更宽的网络结构,或者增加网络的非线性。
- 优化思路:使用分组卷积来减少参数数量和计算复杂度,同时可以采用深度可分离卷积来进一步降低模型复杂度和提高效率。
-
注意力增强模块 (Attention Module)
- 目的:通过聚焦于输入特征的重要部分来提高模型的准确性和泛化能力。
- 实现方式:通常使用注意力机制,比如 Squeeze-and-Excitation (SE) 块,或者采用 Transformer 中的自注意力机制。
- 优化思路:可以尝试不同类型的注意力机制,例如通道注意力、空间注意力或者它们的组合。优化计算流程,减少注意力机制的计算开销。