资讯详情

889张电力红外数据集:互感器检测与YOLO训练避坑指南

📅 2026/10/10 0:09:07 | 华诺云谱 👁 阅读
889张电力红外数据集:互感器检测与YOLO训练避坑指南
简介这是一套面向电力视觉检测与智能巡检场景的数据集资源聚焦变电站红外图像中电流互感器TC、电压互感器TP等关键设备的检测识别适合从事目标检测、YOLO系列模型训练或电力设备自动巡检研究的学习者与算法工程师。压缩包共2000个文件主要包含txt格式的YOLO标注、xml格式的VOC标注以及jpg红外图像文件整体大小32.75MB目录结构清晰可被常见检测框架直接读取。数据覆盖7个类别具体包括Chave_H_230kV、Chave_V_230kV、DISJUNTOR、Pararraio_69kV、Pararraio_230kV、TC、TP累计标注框1715个并提供889张标注图像适合用于模型训练、验证和迁移学习。所有标注由labelImg工具完成便于核对标签或按需扩充。目前已有551人学习可作为电力场景红外目标检测实验与项目落地的数据基础。1. 电力场景红外数据集为什么互感器检测比可见光难一个量级变电站红外巡检图里电压互感器和电流互感器是最常见的检测对象也是最容易让通用目标检测模型翻车的一类目标。可见光下轮廓清晰的互感器到了红外图像里只剩温度分布形成的亮度块没有纹理、没有颜色、边缘模糊同类设备之间还可能互相遮挡。电力场景变电站红外图像电压电流互感器检测数据集把889张真实红外图、7类目标和VOC、YOLO双格式标注打包在一起专门解决做电力巡检检测时「有场景、没数据」的窘境。做算法落地的人不用再从零开始攒数据、标数据可以直接训练和评估检测模型。这篇笔记把数据集构成、格式转换、训练配置和踩坑经验一次讲清楚。2. 数据的真实构成889张图、7个类别与两种标注格式的关系拿到压缩包不能当普通目标检测数据处理。电力红外场景有几个特殊点图像是灰度热力图映射成伪彩、目标排布密集、不同变电站的设备外形差异大。动手训练之前先把数据集的三个基本面想清楚两种标注格式各自怎么用、7个类别怎么划分、889张的规模在电力场景下意味着什么。2.1 VOC和YOLO双格式并存同一个检测项目为什么要两份标注VOC和YOLO两种标注格式核心区别在坐标表达。VOC的XML文件用绝对像素坐标描述目标框xmin、ymin、xmax、ymax四个整数直接对应原图位置人可以读、可以改标注工具普遍支持导入导出。YOLO的TXT文件是归一化相对坐标每行五个值第一个是类别索引后面四个依次是中心点x、中心点y、宽w、高h全部在0到1之间。训练框架直接消费这种紧凑格式不需要加载时再做坐标换算。双格式并存不是冗余而是工程上的后悔药。我的习惯是XML永远作为标注母版保留训练前再统一转成目标框架需要的格式。原因很直接XML里的绝对坐标信息完整任何时刻都能重新生成其他格式而TXT一旦转换过程出错比如除以了错误的分母原始坐标信息就丢了再想恢复只能重新标注。VOC格式还可以随时可视化检查YOLO的TXT满屏小数肉眼几乎不可能发现某个框坐标错乱。先看两张图各自的标注长什么样# 查看一张图的VOC标注内容 cat Annotations/IMG_0001.xml# 查看对应YOLO标注文件 cat labels/IMG_0001.txtXML里是完整的object节点列表每个节点包含类别名和bndbox坐标TXT里则是一行一个目标稀疏的小数串全靠顺序解释含义。从VOC转YOLO的数学关系是cx (xmin xmax) / 2 / W cy (ymin ymax) / 2 / H w (xmax - xmin) / W h (ymax - ymin) / H其中W和H是图像的真实像素宽度和高度。数学上很简单但工程上有两个细节容易出错一是XML里的坐标可能经过了标注工具的缩放二是图像读取库返回的宽高顺序不同这两个问题在第5章避坑部分展开。对比项VOC XMLYOLO TXT坐标形式绝对像素坐标归一化相对坐标可读性人类可读可编辑适合程序消费附加属性支持difficult等标记只有类别索引和框工程定位标注母版长期保留训练输入按需生成2.2 7个类别对应的红外特征与可见光差异在红外图像里互感器和背景的区分几乎不靠边缘轮廓而是靠发热规律。电流互感器在负载电流通过时内部导体发热明显红外特征通常是沿设备轴向出现一条亮温带电压互感器正常运行温度相对稳定热特征更多体现在瓷套和油箱部位的温度梯度。7个类别如果是按设备类型加相位划分常见的形式是A相电压互感器、B相电压互感器、C相电压互感器、A相电流互感器、B相电流互感器、C相电流互感器以及第7类组合式互感器或关联的独立设备。这种类别划分对模型训练有直接影响同一类型不同相位的设备红外外观高度相似不同类别之间反而可能因为安装位置接近、热辐射互相影响而难以区分。模型真正要学习的是热分布的几何模式而不是伪彩颜色本身——伪彩映射是固定的换了调色板整张图都变模型如果依赖颜色特征就会翻车。这也是红外数据集和可见光数据集在增强策略上的本质区别。红外图像还有一个和可见光很不一样的特点动态范围。可见光图是8bit0到255灰度红外相机输出通常是14bit或16bit的原始热辐射数据再映射到8bit显示。数据集里的JPG和PNG已经是映射后的8bit图像映射方式和相机增益、环境温度补偿直接相关。同一台设备在夏天和冬天、白天和夜间的红外表现差异很大模型训练时要注意数据是否覆盖了这些工况。如果889张图像来自同一季节或同一时段模型在极端温度下的泛化能力就要打折扣。红外巡检图还有一个不可忽视的特点拍摄距离和角度受限。巡检机器人的机位通常在固定高度和角度互感器的红外图像多数是侧视或俯视视角和可见光监控的俯拍视角差异很大。这意味着模型学到的视角特征在换机位后就失真训练数据如果想覆盖多机位需要在数据采集阶段刻意变换机位。2.3 889张的规模在电力视觉任务里够用吗889张图对通用检测数据集来说规模很小但对电力巡检这类封闭场景是可用的起点。变电站的设备品类固定、拍摄机位固定、背景相对单一模型需要学习的模式复杂度远低于开放世界检测。经验判断是如果在这889张上训练后mAP0.5达不到0.85以上先不要急着追加数据更大的概率是标注质量或训练配置出了问题。小数据集的连带效应有三个值得提前知道。第一模型容易过拟合训练损失一路走低、验证损失反弹是常态。第二验证集指标波动大随机划分的训练集和验证集里某些类别可能只有十几个验证实例一个框的错判就能让指标跳几个点。第三类别不平衡被放大7个类别里的高频类别可能占了一半以上标注实例低频类别几乎学不到。面对这三个问题不能指望加训练轮次要靠合理划分、交叉验证和针对性的数据增强。用一个简单命令统计类别分布# 统计YOLO标注中每个类别的实例数量 awk {print $1} labels/*.txt | sort | uniq -c | sort -rn这个命令的输出会告诉你7个类别在全部标注中出现的次数。做这一步的意义是提前预判类别不平衡的程度不平衡问题不是靠训练技巧能彻底解决的最有效的还是在数据层面做均衡。3. 把VOCYOLO标注变成可训练数据转换与校验的完整流程数据集的正确打开方式不是解压后直接开训而是先做一次格式审计。红外数据集的审计重点在坐标一致性和文件匹配度上红外相机的分辨率、调色映射、ROI设置都可能影响图像的最终尺寸标注坐标如果基于另一个尺寸生成检测框就会偏移。这一章讲清楚从目录组织、转换脚本到校验检查点的完整流程。3.1 目录结构与标注文件的对应关系数据集解压后常见的组织方式有两套。VOC风格的目录通常是JPEGImages放图、Annotations放XML、ImageSets/Main放训练验证集划分文件YOLO风格的目录是images放图、labels放TXT。两者并存时最怕文件名对不上某张jpg存在但对应xml或txt缺失或者文件名前缀一致但扩展名大小写不同。我训练前必做的一步是写文件清单核对脚本把图像文件名集合和标注文件名集合做差集手工核对有图无标注或有标注无图的条目。这一步不需要什么复杂工具但能避免训练框架在数据加载阶段才报错。900张级别的遍历很快差集输出到文本文件几秒钟就能扫完。写差集脚本时注意一个问题有些数据集按文件名前缀区分train/val前缀截取规则错了会把所有文件判成缺失先打印前10个文件名人工确认一下。3.2 写一个转换脚本统一训练格式如果你决定用YOLO系框架训练而手头的标注是VOC格式或者想重新生成TXT比如修复之前转换的错误写一个稳健的转换脚本是必要的。下面是我常用的一段转换逻辑兼容处理了坐标越界和文件名匹配问题import os import xml.etree.ElementTree as ET import cv2 def voc2yolo(xml_path, img_dir, out_dir, class_names): # 解析VOC标注XML文件 tree ET.parse(xml_path) root tree.getroot() # 用XML里的filename定位图像文件 img_name root.findtext(filename) img_path os.path.join(img_dir, img_name) # 读取图像真实尺寸OpenCV返回的shape是(H, W, C) img cv2.imread(img_path) if img is None: print(f图像读取失败: {img_path}) return False H, W img.shape[:2] lines [] for obj in root.findall(object): name obj.findtext(name) if name not in class_names: print(f未知类别: {name}跳过该目标) continue cls_id class_names.index(name) box obj.find(bndbox) xmin float(box.findtext(xmin)) ymin float(box.findtext(ymin)) xmax float(box.findtext(xmax)) ymax float(box.findtext(ymax)) # 归一化后用clip裁剪防止坐标蹿出[0,1]区间 cx min(max(((xmin xmax) / 2) / W, 0.0), 1.0) cy min(max(((ymin ymax) / 2) / H, 0.0), 1.0) w min(max((xmax - xmin) / W, 0.0), 1.0) h min(max((ymax - ymin) / H, 0.0), 1.0) lines.append(f{cls_id} {cx:.6f} {cy:.6f} {w:.6f} {h:.6f}) # 输出TXT文件名与图像同名放在out_dir下 out_path os.path.join(out_dir, os.path.splitext(img_name)[0] .txt) with open(out_path, w) as f: f.write(\n.join(lines)) return True这段脚本的逻辑是解析XML定位图像文件用OpenCV读取原始宽高逐个object节点解析坐标归一化后做越界裁剪最后写TXT。几个参数的含义xml_path是单个VOC标注文件路径img_dir是图像目录out_dir是TXT输出目录class_names是类别名列表顺序决定类别id这个顺序必须和第4章数据集配置文件里的names保持一致。调用方式可以写一个遍历脚本对Annotations目录下所有XML循环执行。需要注意的一个细节是XML里的filename字段可能写死成jpg但实际图像是png这里最好以图像目录下真实存在的文件为准不要盲信XML里的字符串。提示转换脚本中的class_names顺序就是训练阶段的类别id后续改了顺序所有已生成的TXT都要重新转换否则类别标签全部错位。3.3 数据校验的四个检查点转换完成后不要急着开训我用四个检查点把关。一是文件数量对齐图像目录和TXT目录的文件数要完全一致。二是坐标范围检查写一段脚本读所有TXT确认每行数值都在0到1之间没有负数或大于1的越界值。三是人工抽查随机选20张图用OpenCV把标注框画到原图上另存用看图工具过一遍确认框的位置和大小符合直觉。这一步最不能省红外伪彩图上人眼辨别设备需要一点经验但框完全偏离目标区域的情况还是一眼能看出来。四是类别分布检查用2.3节提到的awk命令统计各类别实例数量对照7个类别的业务重要性判断是否需要做增强。如果我画出来的框普遍偏移优先怀疑XML坐标参考系和图像尺寸不一致而不是怀疑脚本写错了——脚本里的除法逻辑很简单出错概率远低于数据本身的质量问题。四种检查全部通过后数据集才算真正进入可训练状态。4. 用YOLO训练红外互感器检测模型最小可跑通的配置这一章给一套能在889张红外图上直接跑通的最小配置。框架选择以YOLO系为例因为双格式数据集中YOLO格式可以直接输入训练命令短参数调起来直观。如果你用的是其他检测框架原理相同配置文件写法按框架调整。4.1 YOLO训练前的数据集配置文件第一步是写数据集yaml。下面是一个最小可跑通的配置path: /data/infrared_transformer # 数据集根目录 train: images/train # 训练图像目录 val: images/val # 验证图像目录 nc: 7 # 类别数和标注类别索引对应 names: 0: PT_A 1: PT_B 2: PT_C 3: CT_A 4: CT_B 5: CT_C 6: COMBO这个文件里最容易被忽略的是names顺序。yaml里的names顺序必须和3.2节转换脚本里的class_names顺序完全一致。如果转换脚本里写的是[PT_A,PT_B,...]这里就不允许改成按字母排序否则TXT文件里类别索引对应的实际类别就错位了。模型训练时不会报错因为类别只是索引但推理出来的框全部标错类别名。4.2 关键训练参数的设置逻辑红外小数据集训练YOLO参数设置逻辑和通用场景不太一样。批量大小batch不要一味求大889张图用batch16时一个epoch只有约55个step模型还没充分收敛就容易过拟合。我的一套经验参数yolo train datainfrared.yaml modelyolov8n.pt epochs150 batch16 imgsz640 patience30model选择yolov8n.pt而不是更大的s或m版本原因有二红外图像目标形态简单小模型的容量足够拟合889张的小数据集撑不起大模型的训练参数越多过拟合越快。epochs设150配合patience30早停验证集指标连续30个epoch不提升就停止避免浪费时间。imgsz640是分辨率和显存的折中方案如果红外原图是640x512或更低训练时会等比缩放补到640。数据增强参数在小数据集上需要单独调。yolo默认开启mosaic拼接在红外小数据集上有利有弊好处是四张图拼一张等效扩充样本量坏处是红外图像目标本来就小mosaic拼接后目标更小而且变电站背景相似模型容易学到拼接缝这种伪特征。我通常这样调整yolo train datainfrared.yaml modelyolov8n.pt epochs150 batch16 imgsz640 \ mosaic0.3 close_mosaic10 copy_paste0.2mosaic0.3保留较低概率的拼接增强close_mosaic10表示最后10个epoch关闭mosaic回归真实数据分布让模型在收敛阶段看到的是正常构图。copy_paste0.2把同类目标复制粘贴到同图其他位置这个操作对设备类目标效果好因为设备是可分离的刚性物体复制过去不会破坏语义。注意patience早停对小数据集是把双刃剑。验证集太小导致指标抖动剧烈时早停可能提前终止一个本来还能涨的模型。遇到这种情况建议先关掉patience跑一轮完整训练看最终指标再决定要不要调回去。4.3 训练日志怎么看、过拟合怎么判断训练时界面输出的指标很多重点盯三个train/box_loss、val/box_loss和metrics/mAP50。判断过拟合不能只看训练损失要看训练损失和验证损失的剪刀差。红外小数据集上典型的过拟合过程是训练损失一路降到很低验证损失在某个epoch开始反弹mAP50随之停滞甚至走低。此时优先减少模型规模或加大增强强度而不是继续增加epochs。因为验证集小mAP50曲线会很抖。只看最后一个epoch的指标容易误判要看连续10轮的平均趋势。这也是我偏好用交叉验证来评估模型的原因——889张图拆成5折每一折约711张训练、178张验证五次训练取指标的均值和标准差这个评估结果比单次划分可信得多。时间成本高一点但最终判断模型好坏时省下的时间远多于多跑的几次训练。红外图像预处理的一致性也会影响训练效果。训练YOLO时默认会把图像归一化到0到1伪彩映射方式已固化在图像像素里不需要额外处理。但如果你的图像是16bit灰度图需要在数据加载阶段转成8bit并且要保证训练和部署时使用相同的缩放方式。16bit到8bit的映射如果不一样模型学到的特征分布和实际推理时的输入分布就对不上这个点属于部署期容易踩的坑。5. 避坑与排查红外互感器检测里五个绕不开的坑这一章写我处理电力红外检测数据时反复遇到的五个坑。每条都是现象、原因、解决的完整链路。这些坑不会同时出现在每一次实验里但任何一个都足以让模型指标好看而实际不可用。5.1 标注框偏移VOC转YOLO坐标归一化的翻车现场现象训练完成后推理检测框总是整体偏离目标位置偏移方向还随目标在画面中的位置变化。 原因最常见的是XML里的坐标经过了标注工具缩放但转换脚本里读取的却是原始图像的宽和高。比如标注工具导出XML前把图从1280压缩到640XML里的坐标对应的是640尺寸的像素而脚本里读的图像可能是1280原始图归一化后所有框的坐标比例都错了。 解决转换前先抽取几张图打印XML原始坐标和图像实际尺寸人工比对确认坐标参考系一致。另一个更稳的做法是在标注阶段锁定图像分辨率所有图像统一缩放到同一个尺寸后再标注这样XML坐标的参考系就永远是统一的。5.2 类别不平衡7个类别里高频类占了大半现象训练完只有一两个类别的召回率正常其余类别检测结果一塌糊涂但整体mAP还说得过去。 原因不同类别的标注实例数量差异大。电力巡检的拍摄习惯决定了某些设备出镜率高对应类别的实例数可能占了总量一半以上低频类别被模型忽略了。 解决先做实例数统计对低频类别做针对性增强。过采样不是简单复制要配合亮度扰动、翻转、小角度旋转否则模型会对固定的增强样本过拟合。也可以调整YOLO的类别损失权重把低频类别的权重调高让模型在训练时更关注这些类。补数据时优先补低频类而不是继续堆高频类的图像。5.3 红外图像细节少导致mAP虚高现象训练集和验证集都来自同一个变电站mAP刷到0.9以上模型换到另一个变电站实测精度直接掉到0.5。 原因同一变电站的背景高度一致模型学到了设备支架、墙体、树木这些背景特征来辅助判断而不是真正学会识别互感器。红外图像纹理少、目标特征弱模型更容易走捷径去学背景这是黑匣子模型在低信息量数据上的典型表现。 解决训练时加大对背景的扰动随机裁剪、亮度抖动、模糊增强都有效果。验证时按拍摄时间或变电站分组用不同时段的图像做验证比随机划分更能反映真实泛化能力。如果数据集中只有一个变电站的图像至少按拍摄时间分组来评估。5.4 训练集与验证集划分不当导致的数据泄漏现象验证集指标极高训练曲线验证损失几乎不上升实际部署效果却很差。 原因随机划分时同一个设备的多个角度、多个时段的图像被同时分到训练集和验证集模型等于提前看过了答案。 解决按设备单体分组划分。先解析文件名中的设备标识把属于同一个设备的所有图像放在同一组然后按组做训练集和验证集划分。这样验证集的每一张图对应的设备在训练阶段都没出现过指标才反映出真实泛化能力。数据量小时这个做法会牺牲一部分训练数据但换来的是可靠的评估结果。5.5 换设备部署时分辨率不一致带来的精度下跌现象训练用图像是640x512部署现场相机输出800x600模型精度明显下跌。 原因红外图像在插值缩放时热分布边缘的锐利度变化比可见光明显目标原本模糊的边界变得更难判断。不同相机的测温范围、增益设置不同伪彩映射差异也会造成分布偏移。 解决训练阶段开多尺度训练YOLO的scale参数随机缩放输入图像相当于模拟不同分辨率的红外相机。同时用对比度扰动、非线性增益模拟来增强模型对伪彩映射差异的鲁棒性让模型不依赖特定色调映射方式。部署时如果有可能尽量让相机输出分辨率和训练数据一致。6. 让模型在变电站场景真正落地小样本扩充与迁移验证技巧889张数据集的边界很清晰作为起点完全够用作为终点还差得远。要让模型在多个变电站之间通用主要靠两个方向上做扎实——小样本扩充和跨域迁移验证。小样本扩充方面我实测效果最好的组合是多尺度裁剪加MixUp叠加少量复制粘贴增强。红外数据不能用通用颜色增强来凑HSV扰动对伪彩图像的意义不大要做非线性亮度映射——相当于模拟相机增益变化——这才能逼着模型去学结构特征而不是颜色分布。扩充的倍数不用贪1.5到2倍就够了盲目扩到5倍以上反而会让模型记住增强pattern掉进新的过拟合坑里。跨域迁移验证是检验数据集质量的秤砣。模型在一个变电站的数据上训练好直接去推理另一个变电站的红外图看这两类互感器召回率的变化。如果掉得厉害先别急着怀疑数据量大概率是训练时把背景特征也学了进去。我现在的习惯是每个模型版本都建一个验证记录包含目标变电站的指标数据、失败案例截图、以及对比上一版的改动说明。下次迭代时翻记录就能知道这个版本到底在哪个环节有进步、在哪个场景又退步了不用从头测一遍。这个数据集真正值钱的地方不是889张图本身而是把红外互感器检测从数据采集、格式转换到训练部署的完整链路走了一遍。后续你往这个方向补数据时也会清楚该补什么——是补拍摄角度、补季节温度工况、还是补设备型号差异。带着这个判断去做数据建设比盲目堆量踏实得多。希望帮到你。本文还有配套的精品资源点击获取
📝

华诺云谱内容团队

资深建站顾问 · 行业研究员

10年+企业数字化服务经验,专注智能建站、SEO优化与品牌营销,持续输出建站技巧、行业洞察与营销干货,已帮助5000+企业实现数字化增长。

你可能需要的服务

订阅华诺云谱资讯周报

每周一封,精选建站技巧、SEO与营销干货,直达邮箱。已有 8,000+ 企业主订阅,助你少走弯路。

↑