news 2026/4/16 22:21:36

DAMO-YOLO TinyNAS模型微调教程:自定义数据集训练

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
DAMO-YOLO TinyNAS模型微调教程:自定义数据集训练

DAMO-YOLO TinyNAS模型微调教程:自定义数据集训练

你是不是也遇到过这样的问题?网上找到的通用目标检测模型,用在你的业务数据上效果总是不尽如人意。比如,你想检测生产线上的特定零件瑕疵,或者识别自家果园里不同品种的水果,通用模型要么认不出来,要么把A类错认成B类。

这时候,模型微调就成了你的救命稻草。而DAMO-YOLO TinyNAS,凭借其出色的速度与精度平衡,以及灵活的TinyNAS技术,是进行自定义任务微调的一个绝佳选择。今天,我就手把手带你走一遍完整的流程,从准备你自己的图片数据,到最终训练出一个能精准识别你目标物体的模型。

整个过程就像教一个聪明的孩子认识新事物:先准备好清晰的照片(数据),告诉他照片里哪里有什么(标注),然后反复练习(训练),最后检验他学得怎么样(评估)。不用担心,即便你之前没怎么接触过深度学习框架,跟着步骤一步步来,也能搞定。

1. 开工前的准备:环境与数据

在开始“教学”之前,我们得先把“教室”和“教材”准备好。这里主要是两件事:搭建好能运行DAMO-YOLO的环境,以及整理好你的自定义数据集。

1.1 搭建DAMO-YOLO运行环境

首先,我们需要一个干净的Python环境来安装所有依赖。我强烈建议使用Conda来管理,这样可以避免和你系统里已有的其他Python包产生冲突。

打开你的终端(Linux/Mac)或命令提示符/Anaconda Prompt(Windows),依次执行下面的命令:

# 1. 克隆DAMO-YOLO的官方代码仓库 git clone https://github.com/tinyvision/damo-yolo.git cd damo-yolo # 2. 创建一个新的Conda环境,命名为`damo_yolo`,指定Python版本为3.7或3.8(兼容性较好) conda create -n damo_yolo python=3.8 -y conda activate damo_yolo # 激活这个环境 # 3. 安装PyTorch。请根据你的CUDA版本选择合适的命令。 # 如果你有NVIDIA显卡并安装了CUDA 11.3,可以这样安装: pip install torch==1.12.1+cu113 torchvision==0.13.1+cu113 torchaudio==0.12.1 --extra-index-url https://download.pytorch.org/whl/cu113 # 如果你没有GPU,或者想先用CPU测试,可以安装CPU版本: # pip install torch==1.12.1+cpu torchvision==0.13.1+cpu torchaudio==0.12.1 --extra-index-url https://download.pytorch.org/whl/cpu # 4. 安装项目所需的其他依赖包 pip install -r requirements.txt # 5. 安装评估所需的pycocotools pip install cython pip install pycocotools # 或者使用 `pip install git+https://github.com/cocodataset/cocoapi.git#subdirectory=PythonAPI` # 6. 将当前目录添加到Python路径,方便导入模块 export PYTHONPATH=`pwd`:$PYTHONPATH # Linux/Mac # 在Windows上,命令是:set PYTHONPATH=%cd%;%PYTHONPATH%

执行完这些命令后,你的基础环境就准备好了。你可以通过运行python -c "import torch; print(torch.__version__)"来验证PyTorch是否安装成功。

1.2 准备你的自定义数据集

这是最关键的一步。你的数据质量直接决定了模型最终学得好不好。你需要准备两部分内容:

  1. 图片:所有用于训练和测试的图片文件(如.jpg, .png格式)。
  2. 标注:每张图片对应的标签文件,告诉模型图片里每个目标的位置和类别。

数据组织建议:我建议你按如下结构来组织你的数据文件夹,这样清晰明了,后续脚本处理也方便。

your_custom_dataset/ ├── images/ │ ├── train/ # 存放所有训练图片 │ │ ├── 001.jpg │ │ ├── 002.jpg │ │ └── ... │ └── val/ # 存放所有验证图片 │ ├── 101.jpg │ ├── 102.jpg │ └── ... └── labels/ ├── train/ # 存放训练图片对应的标签文件 │ ├── 001.txt │ ├── 002.txt │ └── ... └── val/ # 存放验证图片对应的标签文件 ├── 101.txt ├── 102.txt └── ...

关于标注格式:DAMO-YOLO默认使用YOLO格式的标注。每个标签文件(.txt)与图片同名,内容格式如下:

<class_id> <x_center> <y_center> <width> <height>
  • class_id:目标的类别索引,从0开始(0, 1, 2...)。
  • x_center,y_center:目标边界框中心的x和y坐标,需要除以图片宽度和高度进行归一化,取值范围在0到1之间。
  • width,height:目标边界框的宽度和高度,同样需要归一化。

例如,一张400x300的图片中,有一个属于类别0(比如“苹果”)的目标,其边界框左上角在(100, 80),右下角在(220, 200),那么计算如下:

  • 中心点 x = (100 + 220) / 2 / 400 = 0.4
  • 中心点 y = (80 + 200) / 2 / 300 = 0.4667
  • 宽度 w = (220 - 100) / 400 = 0.3
  • 高度 h = (200 - 80) / 300 = 0.4 对应的标签行就是:0 0.4 0.4667 0.3 0.4

你可以使用标注工具如LabelImg、CVAT、Roboflow等来生成这种格式的标注文件。

2. 让DAMO-YOLO认识你的数据

环境有了,数据也整理好了,接下来就要让DAMO-YOLO框架知道怎么读取和理解你的数据。我们需要创建一个数据集配置文件。

2.1 创建数据集配置文件

在DAMO-YOLO项目的datasets目录下,新建一个Python文件,例如my_custom_dataset.py。这个文件的作用是告诉程序你的数据在哪、有哪些类别。

# datasets/my_custom_dataset.py from damo.datasets import COCODataset from .coco import coco_class_index, coco_class_labels # 1. 定义你的数据集名称和路径 DATASET_PATH = '/path/to/your/your_custom_dataset' # 请替换为你的数据集绝对路径 # 2. 定义你的类别 # 这是一个字典,键是类别索引(从0开始),值是类别名称(字符串) MY_CUSTOM_CLASSES = { 0: "apple", 1: "banana", 2: "orange", # ... 添加你所有的类别 } # 3. 获取类别数量和名称列表 num_classes = len(MY_CUSTOM_CLASSES) class_names = list(MY_CUSTOM_CLASSES.values()) # 4. 创建训练集和验证集的配置字典 # 这里继承了COCODataset的配置方式,因为格式相似 dataset = { 'train': { 'name': '训练集', 'ann_file': f'{DATASET_PATH}/labels/train/', # 指向标签文件夹 'img_prefix': f'{DATASET_PATH}/images/train/', # 指向图片文件夹 'pipeline': [ ... ], # 数据增强流程,通常可以直接复用coco的 'type': COCODataset, # 指定数据集类型 }, 'val': { 'name': '验证集', 'ann_file': f'{DATASET_PATH}/labels/val/', 'img_prefix': f'{DATASET_PATH}/images/val/', 'pipeline': [ ... ], # 验证集通常不需要复杂增强 'type': COCODataset, }, 'class_names': class_names, # 传入类别名称列表 } # 注意:上面的 `pipeline` 部分比较复杂,建议初学者先复制现有配置(如coco.py里的)并修改路径。 # 更简单的方法是:我们直接修改模型配置文件里的数据路径,见下一节。

对于新手来说,直接编写这个文件可能有点复杂。一个更简单直接的方法是:我们复制一份现有的配置文件(比如针对TinyNAS-L25 S模型的),然后只修改里面关于数据路径和类别数的关键参数。

2.2 修改模型配置文件

我们以configs/damoyolo_tinynasL25_S.py这个配置文件为例。这个文件定义了模型结构、训练参数和数据源。

  1. 备份并复制配置文件:

    cp configs/damoyolo_tinynasL25_S.py configs/damoyolo_tinynasL25_S_custom.py
  2. 编辑这个新文件damoyolo_tinynasL25_S_custom.py,找到并修改以下几个关键部分:

    # ... 文件开头部分 ... # 找到 `dataset` 变量定义的地方(通常在文件中部) # 将其替换为指向你的自定义数据集路径和类别 dataset = dict( type='YOLOv5Dataset', data_root='/path/to/your/your_custom_dataset', # 修改为你的数据集根目录 ann_file='labels/train/', # 训练标签相对路径 data_dir='images/train/', # 训练图片相对路径 img_size=640, # 输入图片尺寸,根据你的需求调整 pipeline=train_pipeline, # 训练数据增强流程 class_names=['apple', 'banana', 'orange'], # 修改为你的类别名称列表 ) val_dataset = dict( type='YOLOv5Dataset', data_root='/path/to/your/your_custom_dataset', # 同上 ann_file='labels/val/', # 验证标签相对路径 data_dir='images/val/', # 验证图片相对路径 img_size=640, pipeline=test_pipeline, # 测试/验证流程 class_names=['apple', 'banana', 'orange'], # 同上 ) # 非常重要:找到 `model` 字典中的 `num_classes` 参数,将其改为你的类别数量 model = dict( type='DAMOYOLO', backbone=..., neck=..., head=dict( type='ZeroHead', in_channels=[...], num_classes=3, # 修改这里!例如你有3个类别,就改成3 ..., ), ..., ) # 还可以根据你的数据集大小调整训练轮数(epochs) # 找到 `runner` 或 `train_cfg` 部分,修改 `max_epochs` train_cfg = dict( max_epochs=300, # COCO数据集通常训练300轮,对于小数据集可以适当减少,如100-150轮 ..., )

    通过这种方式,我们避免了从头创建复杂的数据集配置,只需在熟悉的模型配置文件中修改几个关键值即可。

3. 启动模型训练

配置都搞定后,最激动人心的训练环节就要开始了。DAMO-YOLO支持分布式训练(多张GPU)和单卡训练。

3.1 单GPU训练

如果你只有一张GPU,命令非常简单:

python tools/train.py -f configs/damoyolo_tinynasL25_S_custom.py

这个命令会使用配置文件里所有的默认设置开始训练。训练日志和模型权重会默认保存在work_dirs/damoyolo_tinynasL25_S_custom/目录下。

3.2 多GPU分布式训练(更快)

如果你有多张GPU,比如4张,可以使用分布式训练来大幅缩短训练时间:

python -m torch.distributed.launch --nproc_per_node=4 --master_port=29500 tools/train.py -f configs/damoyolo_tinynasL25_S_custom.py
  • --nproc_per_node=4:指定使用4个GPU进程。
  • --master_port=29500:指定一个通信端口,通常选一个不冲突的端口号即可。

3.3 训练过程观察

训练开始后,你会在终端看到不断刷新的日志信息,包括当前训练轮次、损失值、学习率等。更直观的方法是,DAMO-YOLO通常会使用TensorBoard来记录训练过程。

你可以在训练开始后,另开一个终端,运行:

tensorboard --logdir ./work_dirs

然后在浏览器中打开http://localhost:6006,就能看到损失曲线、学习率曲线、验证集精度(mAP)等可视化图表,方便你监控模型的学习状态。

4. 模型评估与测试

训练完成后,我们需要看看这个“学生”到底学得怎么样。

4.1 在验证集上评估精度

使用以下命令,用你训练好的最佳模型(通常保存在work_dirs/.../best_ckpt.pth)在验证集上跑一遍,计算mAP等指标:

python tools/eval.py -f configs/damoyolo_tinynasL25_S_custom.py --ckpt ./work_dirs/damoyolo_tinynasL25_S_custom/best_ckpt.pth

命令执行完毕后,会输出详细的评估结果,包括各个类别的AP(平均精度)和整体的mAP。这是衡量模型性能的核心指标。

4.2 用新图片测试模型效果

评估指标是数字,最直观的还是看模型在实际图片上的检测效果。我们可以用Demo工具进行可视化推理:

python tools/demo.py image \ -f configs/damoyolo_tinynasL25_S_custom.py \ --engine ./work_dirs/damoyolo_tinynasL25_S_custom/best_ckpt.pth \ --conf 0.25 \ # 置信度阈值,低于此值的检测框会被过滤 --infer_size 640 640 \ # 推理时输入的图片尺寸 --device cuda \ # 使用GPU --path ./your_test_image.jpg # 替换为你想测试的图片路径

运行后,程序会生成一张新的图片(通常在原文件名后加_pred),上面画出了模型检测到的所有边界框和类别标签。看看它是不是能准确地找出你的目标物体。

5. 训练中的常见问题与小技巧

第一次微调难免会遇到一些坑,这里分享几个常见的注意事项:

  • 数据集太小怎么办?如果只有几百张图片,很容易过拟合(模型只记住了训练集,不会泛化)。除了尽可能收集更多数据外,可以启用更强大的数据增强(在配置文件的train_pipeline里调整),或者考虑使用预训练权重。DAMO-YOLO提供的在COCO等大数据集上预训练好的权重包含了丰富的通用特征,能帮你的小数据集更好地收敛。
  • 训练损失不下降?检查学习率是否合适。对于微调任务,通常需要使用比从头训练更小的学习率。你可以在配置文件中找到优化器(optimizer)设置,将lr(学习率)调小,例如从0.01调到0.0010.0001
  • 类别不平衡?如果你的数据中“苹果”的图片有1000张,“香蕉”只有100张,模型可能会偏向于多预测“苹果”。可以尝试在损失函数中为少数类别设置更高的权重,或者使用过采样/欠采样的方法。
  • 想用更大的模型?如果你对精度要求更高,并且有足够的算力,可以尝试用damoyolo_tinynasL35_M.pydamoyolo_tinynasL45_L.py作为基础配置文件进行微调,它们模型容量更大,通常能取得更好的效果,但训练和推理速度会慢一些。

整个流程走下来,你可能需要根据自己数据的特点和训练过程中的反馈,回头去调整数据质量、增强参数、模型配置等。模型微调本身就是一个迭代和优化的过程。

6. 总结

好了,以上就是使用DAMO-YOLO TinyNAS对你的自定义数据集进行完整微调的详细步骤。我们从零开始,搭建环境、整理数据、修改配置、启动训练、最后评估测试。虽然看起来步骤不少,但每一步都有其明确的目的,就像完成一个拼图。

最关键的是动手尝试。不要怕出错,训练过程中终端输出的错误信息就是你最好的调试指南。用你自己的数据跑通第一个循环,看到模型能正确识别出你标注的物体时,那种成就感是非常棒的。

微调成功后,你就可以把这个模型集成到你的应用里,无论是开发一个自动检测的软件,还是部署到边缘设备上,它都能为你提供实时的、定制化的目标检测能力。DAMO-YOLO高效的架构也保证了它在资源受限的场景下依然能有出色的表现。


获取更多AI镜像

想探索更多AI镜像和应用场景?访问 CSDN星图镜像广场,提供丰富的预置镜像,覆盖大模型推理、图像生成、视频生成、模型微调等多个领域,支持一键部署。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/15 5:32:28

泰拉瑞亚模组工具tModLoader完全指南「2023全新教程」

泰拉瑞亚模组工具tModLoader完全指南「2023全新教程」 【免费下载链接】tModLoader A mod to make and play Terraria mods. Supports Terraria 1.4 (and earlier) installations 项目地址: https://gitcode.com/gh_mirrors/tm/tModLoader tModLoader是泰拉瑞亚玩家必备…

作者头像 李华
网站建设 2026/4/16 19:37:31

惊艳效果展示:FLUX.2-Klein-9B图片风格迁移案例集

惊艳效果展示&#xff1a;FLUX.2-Klein-9B图片风格迁移案例集 你有没有想过&#xff0c;把一张普通的照片&#xff0c;瞬间变成一幅复古油画、一张科幻海报&#xff0c;或者一件潮流单品的效果图&#xff1f;过去&#xff0c;这需要专业的设计师和复杂的软件操作。但现在&…

作者头像 李华
网站建设 2026/4/15 12:34:18

Anything XL保姆级教程:从安装到生成第一张AI图

Anything XL保姆级教程&#xff1a;从安装到生成第一张AI图 1. 前言&#xff1a;为什么选择Anything XL&#xff1f; 你是不是曾经想过&#xff0c;如果有一款工具能够让你轻松生成高质量的二次元风格图片&#xff0c;而且完全在本地运行&#xff0c;不需要担心网络问题或者隐…

作者头像 李华
网站建设 2026/4/15 12:32:30

老游戏秒变原生适配?WarcraftHelper让Win11畅玩经典RTS

老游戏秒变原生适配&#xff1f;WarcraftHelper让Win11畅玩经典RTS 【免费下载链接】WarcraftHelper Warcraft III Helper , support 1.20e, 1.24e, 1.26a, 1.27a, 1.27b 项目地址: https://gitcode.com/gh_mirrors/wa/WarcraftHelper &#x1f6a8; 当经典遇上新系统&a…

作者头像 李华
网站建设 2026/4/15 12:33:49

嵌入式系统硬件抽象层(HAL BSP)的模块化实践与层次化设计

1. 嵌入式系统硬件抽象层基础概念 我第一次接触硬件抽象层是在2013年开发智能家居控制器时。当时需要将代码从STM32F103移植到STM32F407平台&#xff0c;如果没有HAL的帮助&#xff0c;我可能要重写80%的驱动代码。硬件抽象层(HAL)和板级支持包(BSP)是嵌入式开发中两个至关重要…

作者头像 李华
网站建设 2026/4/11 4:52:14

Phi-3-mini-4k-instruct与SolidWorks智能设计辅助

Phi-3-mini-4k-instruct与SolidWorks智能设计辅助 1. 机械工程师的设计痛点&#xff1a;为什么需要AI助手 每天打开SolidWorks&#xff0c;面对的不只是建模界面&#xff0c;更是一连串现实问题&#xff1a;参数选多少才既安全又经济&#xff1f;这个装配体的公差链该怎么分配…

作者头像 李华