尧图精选

YOLO输电线路金具检测:从数据集标注到训练避坑全流程

🕒 发布时间:2026/9/28 9:13:45 📁 来源:尧图网络
简介面向电力巡检与目标检测学习者的YOLO输电线路电力金具检测数据集基于真实场景采集1000张高清图片使用LabelImg完成高质量标注覆盖多种金具类型与复杂环境图片分辨率高、场景差异明显适合作为电力场景目标检测的入门与算法验证数据。压缩包共2000个文件以xml与txt标签为主包含voc(xml)、coco(json)与yolo(txt)三种格式标签可直接切换YOLO系列模型训练另有YOLO环境搭建与训练教程含Windows/Linux、数据集划分脚本等辅助内容整体约141.97MB。资源还提供训练集/验证集/测试集划分工具方便按需灵活组织数据适合刚入门目标检测或需要标准格式数据集实践电力场景的开发者。该资源目前已有552人学习结合详细教程可显著降低数据集准备与环境配置门槛让读者快速跑通完整训练流程。1. 输电线路金具检测1000 张图的数据集够不够用输电线路上的金具——悬垂线夹、耐张线夹、防振锤、间隔棒——长期暴露在风摆、振动、昼夜温差和紫外线下最常见的病害是锈蚀、变形和销钉脱落。无人机巡检每天带回成百上千张航拍图目前仍然大量依赖人工逐张判读效率低漏检率也不稳定。这套“YOLO输电线路电力金具检测数据集”就是为了把这项工作模型化压缩包里包含 1000 张现场图片、VOC/COCO/YOLO 三种格式的标签、划分脚本和训练教程算法工程师拿到之后可以跳过最昂贵的标注环节直接进入选型、训练和迭代。适合它的有两类人。一类是刚接手电力视觉项目、想快速跑通 baseline 的算法工程师——解压后按流程做完数据检查和划分当天就能开始训练。另一类是运检侧做数字化应用的技术人员——他们不需要深改网络结构但需要真正理解“标签格式、数据划分、模型训练、指标验证”这条全链路以便在自建样本库时做出合理规划。需要提前说明1000 张图片能支撑一次有意义的训练但距离“直接上线全天候巡检”还有距离。它的价值是帮你建立可靠流程、跑出可解释的 baseline并在这个基础上判断后续该补什么样的数据最有效。2. 解压之后先别急着训练VOC、COCO、YOLO 三种标签格式怎么互认很多读者把 rar 解压后的第一件事就是翻开训练教程找命令结果训练时处处碰壁要么标签解析报错要么换框架后标签读不出来。先把三种格式之间的关系理清后面能省掉大量调试时间。2.1 三种格式的坐标和类目差异不只是后缀不同VOC 格式把每张图片的标注信息放在同名 XML 文件里一个目标对应一个object块坐标以bndbox形式保存即 xmin、ymin、xmax、ymax 四个像素值这是最接近人直觉的表示。LabelImg 这类标注工具默认输出的就是这种格式所以它也常被当作人工复核的中间格式。劣势同样明显每个 XML 里重复写一堆 folder、filename、source 字段解析慢且冗余。COCO 格式则把所有图片和标注集中在一个 JSON 文件里结构分images和annotations两层。images里每个条目记录图片 id、file_name、width、heightannotations里每个条目对应一个目标框用bbox字段表示格式是[x, y, width, height]同样是像素坐标。相比 VOCCOCO 多了面积、iscrowd、segmentation、image_id 这些字段结构更复杂、可读性更差但对 mmdetection、Detectron2 这类训练框架来说解析效率更高。YOLO 格式最反直觉每张图片对应一个同名 TXT每行代表一个目标内容为class_id, x_center, y_center, width, height。关键点是坐标全部按图片宽高做了归一化取值范围 0~1是相对坐标。这个设计是为了适配训练时直接 resize 图片——无论输入图是 640 还是 1280标签都不用跟着改。缺点是人工阅读非常困难某个框落在画面哪个位置肉眼很难判断。三种格式能“互认”核心是掌握两组换算关系VOC 的 xmin 等于 COCO 的 xVOC 的 ymin 等于 COCO 的 yVOC 的 xmax - xmin 等于 COCO 的 width而 YOLO 的 x_center 是(xmin xmax) / 2除以图片宽度y_center 是(ymin ymax) / 2除以图片高度width 是(xmax - xmin)除以图片宽度。许多转换脚本的 bug 正出在这里有的忘了除以图片宽高有的把 ymin/ymax 的差值直接写到了 x 坐标上。类目映射是另一个容易踩的坑。VOC 的类名是字符串YOLO 的类目是下标数字COCO 的类目通过 JSON 里的 categories 字段映射到 id。做格式转换时必须在脚本里维护一张明确的映射表类似{悬垂线夹: 0, 耐张线夹: 1, 防振锤: 2, 间隔棒: 3}。如果映射表顺序和后续训练的 data.yaml 里 names 顺序不一致模型训练不会报错但预测框的类别会整体错位——训练时精度看似正常推理时却把防振锤标成耐张线夹这是这类数据集上最隐蔽的翻车方式。三种格式的核心差异可以用一张表说明格式载体坐标表示是否归一化人工可读性常见配套框架VOCXML每图一文件xmin, ymin, xmax, ymax否像素高labelImg、mmdetectionCOCOJSON整体一文件x, y, width, height否像素低Detectron2、mmdetectionYOLOTXT每图一文件xc, yc, w, h是0~1很低YOLOv5/v8 系列拿到三种格式的标签不要用某一种格式去“验证”另一种格式而是要确认它们来自同一份标注的等价转换。如果两份文件之间出现数量不一致通常不是“设计上故意不同”而是转换过程出了问题。2.2 标签健康检查数量对齐、坐标越界、类别统计一次查完训练之前先做一次标签健康检查分三步文件数量对齐、坐标范围校验、类别统计。我用一段 Python 脚本把这三件事一次做完import os from collections import Counter root . img_dir os.path.join(root, images) voc_dir os.path.join(root, labels_voc) yolo_dir os.path.join(root, labels_yolo) def stems(d): if not os.path.isdir(d): return set() return {os.path.splitext(f)[0] for f in os.listdir(d)} imgs stems(img_dir) voc stems(voc_dir) yolo stems(yolo_dir) print(f图片总数: {len(imgs)}) print(fVOC 标签数: {len(voc)}缺标签的图片: {len(imgs - voc)}) print(fYOLO 标签数: {len(yolo)}缺标签的图片: {len(imgs - yolo)}) # 坐标越界检查YOLO 是归一化坐标数值不在 0~1 之间即为异常 bad 0 for stem in yolo: txt_path os.path.join(yolo_dir, stem .txt) if not os.path.exists(txt_path): continue for line in open(txt_path, encodingutf-8): parts line.strip().split() if len(parts) ! 5: print(f列数不对: {txt_path}: {line.strip()}) bad 1 continue cls_id, xc, yc, w, h parts xc, yc, w, h map(float, (xc, yc, w, h)) if not (0 xc 1 and 0 yc 1 and 0 w 1 and 0 h 1): print(f坐标越界: {txt_path}: {line.strip()}) bad 1 print(f异常 YOLO 行数: {bad}) # 类别分布统计 counter Counter() for stem in yolo: txt_path os.path.join(yolo_dir, stem .txt) if not os.path.exists(txt_path): continue for line in open(txt_path, encodingutf-8): cls_id line.strip().split()[0] counter[cls_id] 1 print(各类别目标数量:, dict(counter))这段脚本里我最看重坐标越界检查。VOC 或 COCO 的越界表现为超出图片宽高而 YOLO 格式越界一定表现为数值不在 0~1 之间判断成本最低。实际转换时经常出现一种隐蔽错误x_center 正确归一化了width 却忘了除以图片宽度导致 w 值大于 1。这种异常一旦进入训练模型会在损失计算时拿到错误的框训练不报错但指标崩盘属于典型的“黑匣子问题”。空标签文件也要单独处理。如果某张图的 YOLO 文本是 0 字节可能是这张图确实没有目标也可能是漏标。判断方法去查对应 VOC 的 XML如果没有object节点这张图就是负样本。在 1000 张图片的数据集里保留少量负样本对训练有帮助但数量过大会让模型偏向“什么都不检测”。我通常把负样本单独放一个目录不进训练集只在验证时抽样看看模型的误检表现。如果工程允许还建议做一次 VOC 与 YOLO 的“目标数量一致性”抽检随机抽 10 张图分别统计 XML 里的object个数和 TXT 里的非空行数必须一致。不一致就说明转换脚本有丢行问题需要回到源头修复。3. 数据划分不能随便写脚本三类文件的对齐与比例数据划分看起来就是随机切分但它是数据集流程里最容易留下隐患的一步。划分质量直接决定后面所有实验结论是否可信。3.1 划分脚本的隐藏逻辑随机种子、跨格式同步、类目均衡第一个隐藏逻辑是随机种子。同一份数据两次划分结果不同A/B 实验就没有意义。比如调整学习率后 mAP 涨了 0.02这到底是调参带来的还是验证集不同带来的说不清。所以划分脚本里的第一件事就是把随机种子固定下来我一般固定在 42并在划分完成后把文件名清单导出成 txt 存档。这样无论谁在什么时间重跑都能得到完全一样的划分。第二个隐藏逻辑是跨格式同步。这个数据集的标签有 VOC、COCO、YOLO 三种划分时必须保证同一张图的三种标签被放进同一个 split。很多用户自己写的划分脚本只处理图片文件标签没有跟过去等后面想换框架训练时整个数据集要重新划分一遍版本管理一团糟。正确做法是用图片文件名当 key同步操作所有相关标签文件。第三个隐藏逻辑是类目均衡。电力金具类别天然不平衡耐张线夹和悬垂线夹数量通常远多于防振锤、间隔棒。如果随机划分后 test 集里防振锤的实例数量少于 10 个最后算出的 mAP 几乎不可信因为方差太大。解决办法是按类别做分层采样先把全部图片按“包含哪些类别”分组再在组内做随机切分保证每个类别在每个 split 中的占比大致一致。3.2 划分脚本怎么跑比例选择、目录结构、COCO 按 JSON 拆分划分比例在 1000 张图片规模下我一般推荐 8:1:1 或 7:2:1。8:1:1 给训练集更多数据适合追求最终精度7:2:1 给验证集更多样本指标更稳定但训练集会少 100 张。调参阶段我用 7:2:1确认最终方案后再按 8:1:1 重新划分一版做最终训练。下面的脚本以图片文件名为 key同步复制图片和 YOLO 标签并导出路径清单split_output/ ├── train/ │ ├── images/ │ └── labels/ ├── val/ │ ├── images/ │ └── labels/ ├── test/ │ ├── images/ │ └── labels/ ├── train.txt ├── val.txt └── test.txtimport os, random, shutil random.seed(42) IMG_DIR images YOLO_DIR labels_yolo OUT split_output TRAIN_R 0.8 VAL_R 0.1 imgs [f for f in os.listdir(IMG_DIR) if f.lower().endswith((.jpg, .jpeg, .png))] random.shuffle(imgs) n len(imgs) train_n int(n * TRAIN_R) val_n int(n * VAL_R) splits { train: imgs[:train_n], val: imgs[train_n:train_n val_n], test: imgs[train_n val_n:], } for split_name, split_imgs in splits.items(): os.makedirs(os.path.join(OUT, split_name, images), exist_okTrue) os.makedirs(os.path.join(OUT, split_name, labels), exist_okTrue) for img in split_imgs: stem os.path.splitext(img)[0] shutil.copy( os.path.join(IMG_DIR, img), os.path.join(OUT, split_name, images, img), ) src_txt os.path.join(YOLO_DIR, stem .txt) if os.path.exists(src_txt): shutil.copy(src_txt, os.path.join(OUT, split_name, labels, stem .txt)) # 导出图片绝对路径清单部分框架依赖清单文件而非目录扫描 manifest os.path.join(OUT, f{split_name}.txt) with open(manifest, w, encodingutf-8) as f: for img in split_imgs: f.write(os.path.abspath(os.path.join(OUT, split_name, images, img)) \n) print({k: len(v) for k, v in splits.items()})脚本核心是“以文件名为唯一 key”图片和标签走同一条路径复制。注意这里用的是shutil.copy而不是move原始数据完整保留即使划分结果不满意也能重跑不必从头再解压。最后导出的三个 txt 清单老版 YOLO 训练脚本常常需要按行读取图片路径没有它会报 “No such file or directory” 之类的错误路径尽量用绝对路径因为训练脚本可能在执行时切换工作目录相对路径容易失效。如果 COCO 格式的 JSON 也要同步拆分逻辑会更复杂一些。需要读原始 JSON用划分结果过滤images和annotations再写出三个新 JSONimport json, os with open(labels_coco/annotations.json, encodingutf-8) as f: coco json.load(f) name_to_id {item[file_name]: item[id] for item in coco[images]} id_to_image {item[id]: item for item in coco[images]} for split_name in [train, val, test]: manifest os.path.join(split_output, f{split_name}.txt) split_id_set set() with open(manifest, encodingutf-8) as f: for line in f: fname os.path.basename(line.strip()) if fname in name_to_id: split_id_set.add(name_to_id[fname]) split_images [id_to_image[iid] for iid in split_id_set] split_annotations [ann for ann in coco[annotations] if ann[image_id] in split_id_set] out_json { images: split_images, annotations: split_annotations, categories: coco[categories], } with open(os.path.join(split_output, f{split_name}.json), w, encodingutf-8) as f: json.dump(out_json, f, ensure_asciiFalse, indent2)这段脚本的关键是annotation.image_id必须能在split_id_set里命中如果数量对不上说明划分前后的 JSON 结构已经损坏。常见错误是只过滤了images而忘了过滤annotations导致一个训练 json 里包含验证集的目标框指标虚高得离谱。划分完要立即打印每个 split 的类别统计确认均衡性。如果某类别在 test 集里数量为 0建议换随机种子重新划分否则测试指标没有参考价值。4. 训练配置与损失函数让 YOLO 在电力金具上真正收敛训练前需要明确一件事在 1000 张图的规模上绝不要从零初始化权重。YOLO 系列模型参数量从几百万到几千万不等没有预训练权重浅层特征根本学不出来。这也是很多人优先搜索“yolo预训练模型下载”的原因——真正懂训练的都明白小样本迁移学习是唯一能快速跑通的路。4.1 data.yaml、预训练权重与训练命令的三个必调参数先写 data.yaml它是训练时的数据配置核心train: split_output/train/images val: split_output/val/images test: split_output/test/images nc: 4 names: 0: suspension_clamp 1: tension_clamp 2: vibration_damper 3: spacernc 必须与标签里的最大 class_id 1 相等如果标签中出现 class_id4 而 nc4训练会报 index 越界。names 的顺序不影响训练正确性但影响验证时打印的类别名和混淆矩阵的可读性建议和标注时的类名保持一致。训练命令以 YOLO 工具链的通用写法为例yolo train \ datadata.yaml \ modelyolov8s.pt \ epochs200 \ imgsz640 \ batch16 \ patience20 \ cacheTrue \ cos_lrTrue \ projectruns/detect \ namefitting_baseline逐项说明必调参数。第一是modelyolov8s.pt这里指定从 COCO 预训练权重接续训练而不是随机初始化s 是小型模型匹配 1000 张图的量级。如果用 l 或 x 级模型容量过大容易过拟合用 n 级又可能欠拟合。s 是在参数量和样本量之间比较折中的选择。第二是imgsz640。电力金具检测的输入尺寸关键看目标尺度640 是一个在速度和精度之间比较平衡的默认值。如果目标在切图后仍只有十几个像素再考虑结合切图方案而不是单纯调大 imgsz关于这一点需要单独注意在下一节详细展开。第三是batch16。batch 过小4 或 8会让 BN 层统计不稳定也就是搜索词里“yolo训练中bn崩溃”的常见诱因。显存不够时优先降 imgsz 而不是降 batch。其余参数中cacheTrue把数据集预加载到内存1000 张图片约占 2~4GB能明显加快每个 epoch 的读取速度cos_lrTrue用余弦退火学习率训练曲线更平滑小数据集上容易获得微小但稳定的提升。patience20表示连续 20 轮 val 指标不涨就提前停止避免盲目跑满 200 轮。训练开始后会在终端打印日志。不要只盯着 loss 下降更重要的是看 val 侧指标。日志里有all_ap50、all_map50-95等列如果跑了几轮all_ap50还是 0优先怀疑标签格式问题而不是继续调参。4.2 损失函数的三个组成部分与训练日志的阅读方法YOLO 的损失函数由三块组成框回归损失、置信度损失、分类损失。框回归损失负责把预测框拉向真实框置信度损失负责“有没有目标”的判断分类损失负责“是哪个类别”。在 v5/v8 体系里框回归默认使用 CIoU 或其简化版本分类与置信度用 BCE总 loss 是三项的加权和。想优化损失函数可以调整三个支路的权重。YOLO 超参数文件里能设置类似 box、cls 的权重常用默认值大约是 box7.5、cls0.5。对于电力金具这类小目标居多的场景不少人会尝试提高 box 权重但我建议一开始不要动它先用默认配置跑出一个 baseline。因为绝大多数情况下问题不在损失函数公式而在数据质量。阅读训练日志的核心是对比 train 和 val 的 loss。train 的 box_loss 在降而 val 的 box_loss 开始回升就是过拟合的典型信号。此时即使 train loss 继续下降模型也已经不再泛化正确做法是提前停止或增强数据增强力度。数据增强里还有一个容易被忽略但影响很大的参数mosaic。YOLO 默认开启 mosaic把 4 张图拼接成 1 张输入对提升小目标检测能力很有效。但它会改变目标尺度分布少数情况下会造成类别语义错乱导致验证集 mAP 在中途震荡。如果发现第 40~60 轮之间指标忽然波动可以尝试把 mosaic 临时关掉对比一下。5. 训练电力金具模型的避坑要点从数据集毛病到训练参数这一章按“现象 → 原因 → 解决”的方式记录几类最常遇到的坑全部来自做这类数据集时的实际复盘。5.1 某个类别 mAP 特别低、召回率上不去现象整体 mAP50 看起来还能接受但按类别拆开后发现间隔棒这一类的召回率只有 0.2 左右其他类别都在 0.7 以上。原因类别不均衡或标注漏标。无人机拍摄间隔棒时通常距离较远目标很小标注阶段容易漏。被漏掉的目标会作为背景参与训练把模型的判断带偏——模型学到“这地方虽然形状类似目标但也可能是背景”于是不敢输出正样本召回率上不去。解决先按类别统计实例数找到实例数量低于 100 的类别优先检查漏标情况。若补标成本太高可做针对性增强把包含该类别目标的图片多复制几份加入训练集配合 mosaic 让不同尺度混合。也可以做亮度扰动、翻转、加噪等离线增强把样本量翻一倍。同时必须复查漏标样本一张图里有 5 个间隔棒但只标了 2 个训练时另外 3 个被当作难负样本对模型判断的干扰比“少一张图”严重得多。5.2 训练中 BN 层崩溃loss 变成 nan现象训练到第 20~30 轮一切正常突然某个 epoch 的 loss 变成 nan之后无法恢复偶尔还伴随设备相关的报错信息。原因batch size 太小导致 BN 统计量不稳定是常见主因另一个是初始学习率过大带动 BN 层的缓冲值溢出。此外训练数据里如果存在坐标异常值比如 XML 中某个字段为空导致转换后出现除以零也会触发 nan。这类数据集的 YOLO 标签经过转换出现异常值并不稀奇。解决先用正则表达式搜索标签目录里是否出现 “nan” 或 “inf” 字样。排除标签问题后把 batch 从 4 提高到 16 以上并将学习率降至默认值的 1/10。若显存不足优先减小 imgsz而不是减小 batch。还可以冻结 backbone 训练 10~20 轮让 BN 统计量先适应目标数据分布再解冻全部参数训练。5.3 混淆矩阵“总和”不为 1误读之后胡乱调参现象训练结束后打开 confusion_matrix.png发现矩阵中所有数值加起来不等于 1.0 或 100%怀疑代码有 bug开始盲目调整置信度阈值和类别权重。原因YOLO 生成的混淆矩阵包含“背景”列背景行为它表示模型预测为有目标但未匹配到任何真实框的区域。在很多工具的输出里背景类只单独统计不参与目标类别的配对因此按行或按列相加不会得到标准概率矩阵。读者误以为它是多分类问题中“总和为 1”的混淆矩阵于是对评价指标产生错误判断。解决不要纠结总和只看对角线。对角线越高说明各类别内部区分越好。如果某两类的对角线互相串比如 A 被预测成 B说明这两类样本外观相似或标注框边界不一致需要回到标签检查是不是多个实例重叠、框贴得太紧。YOLO 还会同时输出一张 normalized 版本的混淆矩阵按行归一化读那张图更直观特别适合做项目汇报。5.4 小目标检测效果差切图比调大 imgsz 更有效现象电力金具在航拍原图上只有几十像素直接 resize 到 640 后几乎看不见mAP 极低。于是尝试把 imgsz 调到 1280显存占用暴涨训练时间翻倍mAP 提升却有限。原因直接 resize 是一锤子买卖大图缩小后小目标细节丢失严重模型拿到的是一个模糊的色块。imgsz 加大确实能挽回一部分精度但对显存和训练节奏的影响非常大在 1000 张图的规模上性价比很低。解决先做滑窗切图把原图按 50% 重叠切成 1280×1280 或 640×640 的块再为每个块重新生成标签。切图时需要注意被边界切断的目标要处理不能只保留半截否则模型学到的是不完整形状。一段简化的切图思路如下import cv2, os, glob IMG_DIR raw_images OUT_DIR cut_images CROP_SIZE 640 OVERLAP 0.5 os.makedirs(OUT_DIR, exist_okTrue) for img_path in glob.glob(os.path.join(IMG_DIR, *.jpg)): img cv2.imread(img_path) h, w img.shape[:2] step int(CROP_SIZE * (1 - OVERLAP)) idx 0 for y in range(0, h - CROP_SIZE 1, step): for x in range(0, w - CROP_SIZE 1, step): crop img[y:y CROP_SIZE, x:x CROP_SIZE] out_name os.path.splitext(os.path.basename(img_path))[0] f_{idx}.jpg cv2.imwrite(os.path.join(OUT_DIR, out_name), crop) idx 1切块后必须同步换算标签坐标把原图中的像素坐标减去左上角 (x, y)再除以 CROP_SIZE 做归一化。这一步很容易算错建议每次切块后抽样可视化验证——把标签框画在切块图上人眼确认位置和大小是否合理。切图带来的提升往往比调大 imgsz 明显得多这是电力巡检视觉项目里被反复验证过的经验。5.5 训练曲线正常但推理输出全空现象训练结束时终端打印 mAP50 在 0.6 以上但用权重文件推理单张图片时模型几乎不输出任何目标框或者只输出置信度极低的框。原因置信度阈值设得太高比如 conf0.5。模型在电力金具这类小目标上输出的置信度普遍在 0.2~0.4 之间过高的阈值把所有有效预测全过滤掉了。另一个常见原因是选了训练后期的权重虽然 val mAP 不低但泛化表现已经下降。解决推理时显式调低置信度阈值yolo predict \ modelruns/detect/fitting_baseline/weights/best.pt \ sourcetest_images \ conf0.15 \ iou0.5 \ saveTrue先用 conf0.1 或 0.15 跑一遍可视化结果观察模型到底检出多少目标、检出质量如何再决定最终线上阈值。不要因为默认 conf0.25 输出框少就立刻判定模型没训好先看可视化结果用这个推理习惯能避免很多无效的调参动作。6. 验证技巧把混淆矩阵和 mAP 拆开看别只看一个数模型训练完不要只盯着终端最后一行 mAP50 就宣布完工。我习惯把验证拆成三步先看整体 mAP50再看每个类别的单独 mAP最后打开混淆矩阵确定漏检集中在哪一类。一套完整的验证命令长这样yolo val \ modelruns/detect/fitting_baseline/weights/best.pt \ datadata.yaml \ splittest \ plotsTrue \ conf0.15 \ iou0.5执行后权重目录下会新增 confusion_matrix.png、results.png 等文件。我一般按固定顺序检查先看混淆矩阵对角线哪一类偏低就去翻那一类的检测样例归纳漏检的共同特征。如果漏检的图片集中在光线偏暗或逆光的场景就应该补充低照度样本或做亮度归一化如果某个类别频繁把背景判为目标说明背景负样本太少模型没有学会“不输出”的能力。关于 mAP 的期望值电力金具多数是小目标mAP50 达到 0.7 已经具备工程参考价值mAP50-95 在 0.4 上下也属正常。如果 mAP50-95 远低于 mAP50说明模型框的位置精度不足此时优先检查标注框是否贴合目标边缘而不是加迭代轮数。数据集在标注阶段如果框普遍比目标大一圈那么位置精度的天花板就会很低训练轮数再多也补不回来。我自己保留的一个习惯是每个实验跑完把 data.yaml、训练命令、验证指标、权重路径写进一个说明文件。下次换模型或调参时不用翻终端日志就能知道上一个 baseline 是怎么来的。面对电力金具这类专业小样本数据最大的成本其实不是训练而是梳理数据和处理标签的过程。把流程规范下来翻车的概率会小很多。希望这篇笔记里的做法能帮到你让你在这套数据集上少走一段弯路。本文还有配套的精品资源点击获取
上一篇/下一篇内容由系统自动关联 返回资讯列表 →