首页
/ DAMO-YOLO项目中的TinyNAS-L20-T模型配置解析

DAMO-YOLO项目中的TinyNAS-L20-T模型配置解析

2025-07-10 03:38:58作者:何举烈Damon

概述

本文将深入解析DAMO-YOLO项目中TinyNAS-L20-T模型的配置文件,帮助读者理解该目标检测模型的架构设计、训练参数设置以及数据增强策略。该配置文件定义了一个基于TinyNAS架构的高效目标检测模型,适用于资源受限环境下的实时目标检测任务。

配置文件结构

该配置文件继承自DAMO-YOLO的基础配置类MyConfig,通过重写初始化方法定义了模型训练和架构的各个关键参数。主要包含以下几个部分:

  1. 基础训练参数设置
  2. 数据增强配置
  3. 数据集定义
  4. 模型架构配置(Backbone、Neck、Head)

训练参数详解

基础训练设置

self.miscs.exp_name = os.path.split(os.path.realpath(__file__))[1].split('.')[0]
self.miscs.eval_interval_epochs = 10  # 每10个epoch评估一次
self.miscs.ckpt_interval_epochs = 10  # 每10个epoch保存一次检查点

# 优化器参数
self.train.batch_size = 256  # 大批量训练
self.train.base_lr_per_img = 0.01 / 64  # 学习率基准
self.train.min_lr_ratio = 0.05  # 最小学习率比例
self.train.weight_decay = 5e-4  # 权重衰减
self.train.momentum = 0.9  # 动量
self.train.no_aug_epochs = 16  # 最后16个epoch不使用数据增强
self.train.warmup_epochs = 5  # 5个epoch的预热阶段

这些参数定义了模型训练的基本节奏:

  • 使用较大的batch size(256)进行训练,配合适当的学习率
  • 采用学习率预热策略(5个epoch)避免训练初期不稳定
  • 训练后期(最后16个epoch)关闭数据增强,专注于模型微调

数据增强配置

self.train.augment.transform.image_max_range = (640, 640)  # 输入图像尺寸
self.train.augment.mosaic_mixup.mixup_prob = 0.15  # MixUp概率
self.train.augment.mosaic_mixup.degrees = 10.0  # 旋转角度范围
self.train.augment.mosaic_mixup.translate = 0.2  # 平移比例
self.train.augment.mosaic_mixup.shear = 0.2  # 剪切变换强度
self.train.augment.mosaic_mixup.mosaic_scale = (0.1, 2.0)  # 马赛克增强尺度范围

数据增强策略包括:

  • 标准的马赛克(Mosaic)增强
  • MixUp混合增强(15%概率)
  • 随机旋转(±10度)
  • 平移(20%范围)
  • 剪切变换(20%强度)
  • 随机缩放(0.1-2.0倍)

这些增强手段显著提高了模型对不同尺度、角度目标的识别能力。

模型架构设计

Backbone: TinyNAS_res

structure = self.read_structure('./damo/base_models/backbones/nas_backbones/tinynas_L20_k1kx.txt')
TinyNAS = {
    'name': 'TinyNAS_res',
    'net_structure_str': structure,  # 从文件加载的网络结构
    'out_indices': (2, 4, 5),  # 输出特征图索引
    'with_spp': True,  # 使用空间金字塔池化
    'use_focus': True,  # 使用Focus模块
    'act': 'relu',  # 激活函数
    'reparam': True,  # 结构重参数化
}

TinyNAS是一种通过神经架构搜索(NAS)得到的轻量级骨干网络:

  • 从预定义的结构文件中加载网络架构
  • 输出三个不同尺度的特征图(对应大、中、小目标检测)
  • 采用空间金字塔池化(SPP)增强感受野
  • 使用Focus模块降低计算量
  • 支持结构重参数化(训练时复杂结构,推理时简化为普通卷积)

Neck: GiraffeNeckV2

GiraffeNeckV2 = {
    'name': 'GiraffeNeckV2',
    'depth': 1.0,  # 深度系数
    'hidden_ratio': 1.0,  # 隐藏层比例
    'in_channels': [96, 192, 384],  # 输入通道数
    'out_channels': [64, 128, 256],  # 输出通道数
    'act': 'relu',  # 激活函数
    'spp': False,  # 不使用SPP
    'block_name': 'BasicBlock_3x3_Reverse',  # 基础块类型
}

GiraffeNeckV2是专门为轻量级模型设计的特征融合模块:

  • 采用多尺度特征融合策略
  • 使用反向3x3基础块(BasicBlock_3x3_Reverse)减少计算量
  • 输出通道数经过精心设计,平衡精度和效率

Head: ZeroHead

ZeroHead = {
    'name': 'ZeroHead',
    'num_classes': 80,  # COCO数据集80类
    'in_channels': [64, 128, 256],  # 输入通道
    'stacked_convs': 0,  # 不堆叠卷积
    'reg_max': 16,  # 回归最大值
    'act': 'silu',  # 激活函数
    'nms_conf_thre': 0.05,  # NMS置信度阈值
    'nms_iou_thre': 0.7,  # NMS IoU阈值
    'legacy': False,  # 不使用传统模式
}

ZeroHead是一种高效的目标检测头:

  • 专为轻量级模型优化,不堆叠额外卷积层
  • 使用SiLU激活函数平衡计算效率和表现力
  • 采用较宽松的NMS阈值(0.05置信度,0.7 IoU)确保召回率

数据集配置

self.dataset.train_ann = ('coco_2017_train', )  # 训练集
self.dataset.val_ann = ('coco_2017_val', )  # 验证集
self.dataset.class_names = [...]  # COCO 80类名称

模型使用COCO 2017数据集进行训练和验证,包含80类常见物体,涵盖了日常生活中的大多数物体类别。

总结

DAMO-YOLO的TinyNAS-L20-T配置展示了一个高效的轻量级目标检测解决方案:

  1. 采用NAS搜索得到的TinyNAS作为骨干网络
  2. 配合专为轻量模型设计的GiraffeNeckV2和ZeroHead
  3. 使用丰富的训练策略和数据增强手段
  4. 针对COCO数据集80类目标进行优化

这种配置在保持较高检测精度的同时,显著降低了模型复杂度和计算需求,非常适合部署在资源受限的边缘设备上。