DAMOYOLO-S模型微调保姆级教程:使用自定义数据集训练行业专用检测器

发布时间:2026/6/17 12:12:19

DAMOYOLO-S模型微调保姆级教程:使用自定义数据集训练行业专用检测器 DAMOYOLO-S模型微调保姆级教程使用自定义数据集训练行业专用检测器你是不是也遇到过这样的问题网上找的通用目标检测模型识别自家工厂的零件总是不太准或者想用它来数果园里的果子效果却差强人意。通用模型虽然强大但面对千奇百怪的行业场景常常会“水土不服”。别担心今天我们就来解决这个问题。我将带你一步步在星图GPU平台上用DAMOYOLO-S这个轻量又高效的模型训练一个专属于你业务场景的“火眼金睛”。无论你是想检测电路板上的瑕疵还是识别农田里的病虫害这套方法都能帮你搞定。整个过程就像照着菜谱学做菜我会把每个步骤都掰开揉碎了讲保证你跟着做就能出成果。1. 准备工作理清思路备好“食材”在开始“烹饪”我们的专属模型之前得先把厨房收拾好食材备齐。这一步做扎实了后面就会顺利很多。1.1 理解我们要做什么简单来说模型微调就像教一个已经会认猫狗的小朋友去认特定的品种。DAMOYOLO-S模型已经学会了从图片里找物体检测的基本功我们现在的任务就是用我们自己收集的、带标注的图片比如“A型螺丝”、“B型螺母”去进一步训练它让它成为我们生产线上的专家。整个过程可以概括为几个核心步骤准备标注好的数据集、在星图平台配置训练环境、启动训练并观察学习过程、最后把训练好的模型拿出来用。听起来是不是没那么复杂了1.2 星图平台环境一键获取工欲善其事必先利其器。我们需要一个带GPU的强大环境来训练模型自己配环境很麻烦好在星图镜像广场提供了现成的解决方案。访问镜像广场打开 CSDN星图镜像广场在搜索框里输入“DAMOYOLO”。选择镜像你会找到名为“DAMOYOLO-S目标检测”的镜像。这个镜像已经预置了PyTorch框架、DAMOYOLO的代码库以及所有必要的依赖项省去了你数小时的配置时间。部署实例点击“一键部署”选择你需要的GPU机型对于DAMOYOLO-S微调一张V100或同等级别的GPU通常就够了然后启动实例。几分钟后一个开箱即用的训练环境就准备好了。1.3 准备你的核心“食材”自定义数据集数据集是训练模型的根本它的质量直接决定了模型最终的表现。这里我们以“工业零件检测”为例你需要准备一批包含各种零件如齿轮、轴承、螺丝的图片。收集图片用相机或手机拍摄或者从现有资料中提取。建议至少准备500张以上覆盖不同的光照条件、角度和背景。图片格式通常为JPG或PNG。标注图片使用LabelImg这是最关键的一步。我们需要告诉模型图片里有什么、在哪里。安装LabelImg这是一个开源免费的标注工具。在你的电脑上不是云服务器可以通过pip安装pip install labelImg然后在命令行输入labelImg打开它。标注流程点击“Open Dir”打开存放图片的文件夹。使用快捷键W调出画框工具在目标物体周围绘制矩形框。在弹出的窗口中输入类别名称如gear齿轮、screw螺丝。请务必使用英文或拼音避免中文以减少后续编码问题。保存后每张图片会生成一个同名的.xml文件里面记录了框的位置和类别信息。组织数据集文件夹在星图平台的环境里创建一个清晰的数据集文件夹结构如下custom_dataset/ ├── images/ │ ├── train/ # 存放用于训练的图片如 gear_001.jpg, screw_002.jpg │ └── val/ # 存放用于验证的图片 └── labels/ ├── train/ # 存放训练图片对应的XML标注文件 └── val/ # 存放验证图片对应的XML标注文件注意通常按照8:2 或 9:1的比例将图片和对应的XML文件分别放入train和val文件夹。验证集用于在训练过程中检查模型是否真的学会了而不是死记硬背训练图片。2. 从标注文件到模型“食谱”数据转换与配置现在我们的“食材”图片和XML文件准备好了但DAMOYOLO模型习惯吃另一种格式的“食物”通常是TXT或JSON。我们需要转换一下并告诉模型我们的“菜单”是什么。2.1 将XML标注转换为YOLO格式DAMOYOLO通常使用YOLO格式的标签这是一个简单的TXT文件。我们需要写一个小脚本进行转换。在星图环境里创建一个convert_xml_to_yolo.py文件import xml.etree.ElementTree as ET import os # 1. 定义你的类别顺序很重要后面会用到索引号 classes [gear, screw, bearing] # 请替换成你自己的类别 # 2. 转换单个XML文件的函数 def convert_box(size, box): # 将XML中的坐标 (xmin, ymin, xmax, ymax) 转换为YOLO格式 (x_center, y_center, width, height)并进行归一化 dw 1. / size[0] # 图片宽度分之一 dh 1. / size[1] # 图片高度分之一 x (box[0] box[1]) / 2.0 # 中心点x坐标 y (box[2] box[3]) / 2.0 # 中心点y坐标 w box[1] - box[0] # 框的宽度 h box[3] - box[2] # 框的高度 x x * dw w w * dw y y * dh h h * dh return (x, y, w, h) def convert_annotation(xml_file_path, output_txt_path): tree ET.parse(xml_file_path) root tree.getroot() size root.find(size) w int(size.find(width).text) h int(size.find(height).text) with open(output_txt_path, w) as out_file: for obj in root.iter(object): cls obj.find(name).text if cls not in classes: continue # 跳过不在类别列表中的物体 cls_id classes.index(cls) # 获取类别索引从0开始 xmlbox obj.find(bndbox) b (float(xmlbox.find(xmin).text), float(xmlbox.find(xmax).text), float(xmlbox.find(ymin).text), float(xmlbox.find(ymax).text)) bb convert_box((w, h), b) out_file.write(str(cls_id) .join([str(a) for a in bb]) \n) # 3. 批量转换 def convert_dataset(xml_dir, txt_dir): if not os.path.exists(txt_dir): os.makedirs(txt_dir) for xml_file in os.listdir(xml_dir): if xml_file.endswith(.xml): xml_path os.path.join(xml_dir, xml_file) txt_name xml_file.replace(.xml, .txt) txt_path os.path.join(txt_dir, txt_name) convert_annotation(xml_path, txt_path) print(fConverted: {xml_file} - {txt_name}) # 使用示例转换训练集和验证集 convert_dataset(custom_dataset/labels/train, custom_dataset/labels_yolo/train) convert_dataset(custom_dataset/labels/val, custom_dataset/labels_yolo/val) print(数据转换完成)运行这个脚本后你的labels文件夹下会生成对应的labels_yolo文件夹里面就是YOLO格式的TXT标签文件了。2.2 创建数据集配置文件接下来我们需要创建一个配置文件告诉DAMOYOLO我们的数据集在哪、有哪些类别。在DAMOYOLO代码的configs/datasets/目录下或者在你自己的工作目录创建一个custom_data.yaml文件# 数据集根目录路径 (根据你的实际路径修改) path: /home/work/custom_dataset # 训练集和验证集的图片路径相对于path train: images/train val: images/val # 类别数量 nc: 3 # 修改为你的实际类别数例如齿轮、螺丝、轴承就是3 # 类别名称列表必须和转换脚本中的classes列表顺序一致 names: [gear, screw, bearing]2.3 修改模型训练配置文件最后我们需要调整模型的“训练食谱”。找到DAMOYOLO-S的配置文件例如configs/damoyolo/damoyolo_tinynasL20_T.py我们主要修改其中关于数据集和训练参数的部分。通常你可以在文件开头或中间找到data和train相关的配置。你需要做的主要修改是将data字典中的train和val路径指向你刚刚创建的custom_data.yaml。根据你的数据集大小调整训练轮数max_epochs。对于几百张图片的小数据集100-300轮可能就够了。调整学习率lr和批次大小batch_size如果GPU内存较小可以减小batch_size。一个修改后的配置片段可能看起来像这样具体参数名请以实际配置文件为准# ... 其他配置 ... data dict( samples_per_gpu8, # 批次大小根据GPU内存调整 traindict( datasetdict( # 关键修改指向你的数据集配置文件 data_namecustom_data, ann_fileconfigs/datasets/custom_data.yaml, # 你的数据集yaml路径 img_prefix, ) ), valdict(...) # 同样修改验证集路径 ) # 训练参数 runner dict(max_epochs200) # 训练总轮数 optimizer dict(lr0.001) # 初始学习率对于微调可以设小一点如1e-4 # ... 其他配置 ...小提示更稳妥的做法是复制一份原配置文件比如命名为damoyolo_tinynasL20_T_custom.py然后在副本上进行修改这样不会影响原始文件。3. 启动训练与监控看着模型“成长”一切配置就绪激动人心的训练环节就要开始了。3.1 启动训练任务在星图环境的终端中切换到DAMOYOLO的代码目录运行训练命令。命令格式通常如下python tools/train.py configs/damoyolo/damoyolo_tinynasL20_T_custom.py --work-dir ./work_dirs/custom_expconfigs/damoyolo/damoyolo_tinynasL20_T_custom.py你修改后的配置文件路径。--work-dir ./work_dirs/custom_exp指定一个工作目录训练过程中的日志、模型检查点checkpoint都会保存在这里。按下回车你会看到大量日志开始滚动模型开始学习了3.2 监控训练过程训练开始后我们不能干等着。通过观察损失和精度曲线可以判断模型学习是否健康。观察控制台日志终端会打印每一轮epoch或每一步iteration的训练损失和验证精度。关注验证集精度mAP是否在稳步上升训练损失是否在稳步下降。使用TensorBoard可视化推荐DAMOYOLO通常会自动生成TensorBoard日志文件。在终端新建一个窗口运行tensorboard --logdir ./work_dirs/custom_exp然后根据提示的URL通常是http://服务器IP:6006在你的本地浏览器中打开。你可以看到非常直观的损失曲线、精度曲线、学习率变化等图表。理想情况训练损失平稳下降验证精度平稳上升两者最终趋于稳定。过拟合迹象训练损失持续下降但验证精度很早就停止上升甚至开始下降。这时可能需要早停early stopping或增加数据增强。欠拟合迹象训练损失和验证精度都很早停止变化处于较高/较低水平。可能需要增加模型容量或训练轮数。4. 模型测试与导出收获你的“果实”训练完成后我们需要验证模型效果并将其导出为便于使用的格式。4.1 测试模型性能使用训练好的最佳模型通常保存在work_dirs/custom_exp/latest.pth或best_mAP.pth在验证集或新的测试图片上进行推理看看实际效果。python tools/test.py configs/damoyolo/damoyolo_tinynasL20_T_custom.py ./work_dirs/custom_exp/latest.pth --eval bbox这条命令会输出模型在验证集上的详细评估指标主要是mAP平均精度这是衡量检测模型好坏的核心指标。数值越高越接近1说明模型性能越好。4.2 导出为ONNX格式为了将模型部署到不同的平台如移动端、边缘设备或某些推理框架我们通常将其转换为ONNX格式。python tools/deployment/export_onnx.py configs/damoyolo/damoyolo_tinynasL20_T_custom.py ./work_dirs/custom_exp/latest.pth --output-file ./custom_damoyolo.onnx转换成功后你会得到一个custom_damoyolo.onnx文件。这个文件就可以被OpenCV、ONNX Runtime等多种推理引擎加载和使用非常方便。4.3 使用模型进行单张图片推理最后我们来写一个简单的脚本用训练好的模型检测一张新图片享受成果import cv2 import torch from damoyolo.core import Detector # 1. 加载配置和模型权重 config configs/damoyolo/damoyolo_tinynasL20_T_custom.py checkpoint ./work_dirs/custom_exp/latest.pth detector Detector(config, checkpoint, devicecuda) # 使用GPU # 2. 加载待检测图片 image_path your_test_image.jpg img cv2.imread(image_path) # 3. 进行推理 results detector.predict(img, conf_threshold0.5) # 置信度阈值设为0.5 # 4. 可视化结果 visualized_img detector.visualize(img, results) cv2.imwrite(result.jpg, visualized_img) print(检测完成结果已保存为 result.jpg)运行这个脚本你就能看到模型在你提供的图片上画出的检测框了。看到自己训练的模型准确地找出目标时那种成就感是非常棒的。5. 总结与后续建议走完这一整套流程你应该已经成功拥有了一个针对自己业务场景优化的DAMOYOLO-S检测模型。回顾一下核心步骤就是准备高质量的数据集、正确配置环境、启动训练并监控、最后测试和导出。整个过程虽然步骤不少但每一步都有明确的目标和操作方法。在实际操作中你可能会遇到一些挑战比如数据不够多、标注有错误、模型训练效果不理想。这时可以回头检查数据质量尝试增加数据增强如随机旋转、裁剪、颜色变化或者微调一下学习率等超参数。模型训练本身就是一个需要不断迭代和调试的过程。这个训练好的模型你可以把它集成到你的生产系统中比如开发一个自动质检的软件或者一个手机端的农作物识别APP。有了这个基础你甚至可以尝试用更大的数据集、更复杂的模型结构如DAMOYOLO-M或L来追求更高的精度。希望这篇教程能成为你探索AI应用的一块扎实的敲门砖。获取更多AI镜像想探索更多AI镜像和应用场景访问 CSDN星图镜像广场提供丰富的预置镜像覆盖大模型推理、图像生成、视频生成、模型微调等多个领域支持一键部署。

相关新闻