首页
/ TinyVision/DAMO-YOLO中TinyNAS-L18-Nm模型的配置解析与优化指南

TinyVision/DAMO-YOLO中TinyNAS-L18-Nm模型的配置解析与优化指南

2025-07-10 03:37:09作者:俞予舒Fleming

概述

本文将深入解析TinyVision/DAMO-YOLO项目中TinyNAS-L18-Nm模型的配置文件(damoyolo_tinynasL18_Nm.py),帮助读者理解该模型的架构设计、训练参数配置以及数据增强策略。作为一款轻量级目标检测模型,TinyNAS-L18-Nm在保持较高检测精度的同时,显著降低了计算资源需求,适合在边缘设备上部署。

配置文件结构解析

该配置文件继承自DAMO-YOLO的基础配置类,主要包含以下几个关键部分:

  1. 基础训练参数:包括批次大小、学习率、优化器等
  2. 数据增强策略:Mosaic和MixUp等增强技术
  3. 模型架构:包含Backbone、Neck和Head三部分
  4. 数据集配置:指定训练和验证数据集

核心训练参数详解

self.train.batch_size = 256  # 较大的批次大小有助于稳定训练
self.train.base_lr_per_img = 0.001 / 64  # 基于图像的学习率
self.train.min_lr_ratio = 0.05  # 最小学习率比例
self.train.no_aug_epochs = 16  # 最后16个epoch不使用数据增强
self.train.warmup_epochs = 5  # 学习率预热epoch数

# 使用AdamW优化器,结合了Adam的优点和权重衰减
self.train.optimizer = {
    'name': "AdamW",
    'weight_decay': 1e-2,  # 较强的权重衰减防止过拟合
    'lr': 4e-3,  # 初始学习率
}

这些参数经过精心调优,特别适合TinyNAS架构的训练。较大的批次大小(256)配合适当的学习率设置,能够在保证训练稳定性的同时提高收敛速度。

数据增强策略

# 图像尺寸固定为416x416,不保持宽高比
self.train.augment.transform.image_max_range = (416, 416)
self.train.augment.transform.keep_ratio = False

# Mosaic和MixUp增强参数
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)  # 缩放范围

这些增强策略显著提高了模型对小目标和不同尺度目标的检测能力,同时最后的16个epoch不使用增强(no_aug_epochs=16),有助于模型收敛。

模型架构设计

Backbone: TinyNAS

structure = self.read_structure('./damo/base_models/backbones/nas_backbones/tinynas_nano_middle.txt')
TinyNAS = {
    'name': 'TinyNAS_mob',
    'net_structure_str': structure,  # 从文件读取的NAS搜索出的结构
    'out_indices': (2, 4, 5),  # 输出特征图的索引
    'with_spp': True,  # 使用空间金字塔池化
    'use_focus': False,  # 不使用Focus模块
    'act': 'silu',  # 激活函数使用SiLU
    'reparam': False,  # 不使用重参数化
    'depthwise': True,  # 使用深度可分离卷积
    'use_se': False,  # 不使用SE注意力机制
}

TinyNAS Backbone通过神经架构搜索得到,在保持轻量化的同时提供了足够的特征提取能力。深度可分离卷积(depthwise=True)大大减少了参数量。

Neck: GiraffeNeckV2

GiraffeNeckV2 = {
    'name': 'GiraffeNeckV2',
    'depth': 0.5,  # 深度缩放因子
    'hidden_ratio': 0.5,  # 隐藏层通道缩放因子
    'in_channels': [64, 128, 256],  # 输入通道数
    'out_channels': [64, 128, 256],  # 输出通道数
    'act': 'silu',  # 激活函数
    'spp': False,  # 不使用SPP
    'block_name': 'BasicBlock_3x3_Reverse',  # 使用的基础块类型
    'depthwise': True,  # 使用深度可分离卷积
}

GiraffeNeckV2是专门为轻量级模型设计的特征金字塔网络,通过深度可分离卷积和通道缩减实现了高效的多尺度特征融合。

Head: ZeroHead

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

ZeroHead设计极为简洁,没有堆叠卷积(stacked_convs=0),大大减少了计算量,但通过精心设计的回归策略仍能保持较好的检测性能。

数据集配置

使用COCO 2017数据集进行训练和验证:

self.dataset.train_ann = ('coco_2017_train', )
self.dataset.val_ann = ('coco_2017_val', )

包含80个常见物体类别,如人、车辆、动物等日常物品。

训练建议

  1. 学习率调整:可根据实际硬件条件调整batch_size和对应的base_lr_per_img
  2. 数据增强:在资源允许的情况下,可以适当增加mosaic_scale范围
  3. 模型微调:尝试调整neck的depth和hidden_ratio参数,平衡精度和速度
  4. 训练策略:no_aug_epochs和warmup_epochs可根据数据集大小适当调整

总结

TinyNAS-L18-Nm模型通过神经架构搜索得到的轻量级Backbone配合精心设计的Neck和Head,在COCO数据集上实现了良好的精度-速度平衡。该配置文件提供了完整的训练参数和模型架构定义,开发者可以直接使用或基于此进行进一步优化。特别适合需要在资源受限设备上部署目标检测功能的场景。