
简介这份资源面向电力设备检测领域的研究人员与工程师提供一套红外图像变压器检测数据集用于训练和评估目标检测模型帮助实现电力设备缺陷与异常状态的自动识别。数据集共包含4271张红外图像每张均配有对应的VOC格式xml标注文件与YOLO格式txt标注文件覆盖14个类别包括空气断路器、电流互感器、连接器、避雷器、负荷开关、塑壳断路器、电压互感器、真空断路器、柜身等总标注框数达11896个其中Connection类别框数最多为3961个core类别最少为699个标注统一使用labelImg工具完成。资源以单个docx文档形式打包压缩包约1006KB内容为数据集说明与下载指引便于快速了解数据构成与标注规范。目前已有100人学习关注。借助该数据集读者可省去从零采集与标注红外图像的成本直接投入模型训练与算法验证适用于电力巡检、设备状态监测等场景下的目标检测研究为后续模型优化与工程落地提供数据基础。1. 电力红外变压器检测4271 张 VOCYOLO 数据集到底能做什么变电站巡检夜里拍回来的红外图最让人头疼的不是拍不到而是拍回来一堆热成像人眼盯着屏幕找变压器套管过热、接头温升异常看半小时就花眼。电力场景电气设备红外图像变压器检测数据集本质就是把这种「人眼找异常」的活变成 YOLO 能直接学的标注样本。它给的是 4271 张红外图像VOC 和 YOLO 两套标注格式14 个类别覆盖变压器本体、套管、接头、绝缘子等电力设备在热成像下的典型目标。适合两类人一类是想把红外测温从「人工判读」推到「模型自动框选」的电力 AI 落地工程师另一类是手里有 YOLO 训练管线缺一个垂直场景数据集来验证红外域迁移效果的算法同学。红外图像和可见光最大的差别是纹理弱、边缘糊、对比度靠温差撑直接拿 COCO 预训练权重硬上mAP 往往掉得很难看这个数据集的价值就在于让你在真实电力红外分布上做微调和验证。2. 红外变压器数据集拆开看14 类标注与 VOC/YOLO 双格式的选型理由2.1 为什么电力红外检测不能直接复用可见光数据集可见光图像里变压器有清晰的金属反光、铭牌文字、结构阴影这些纹理特征在卷积网络里是强信号。红外图像完全不是这回事热成像反映的是表面温度分布变压器本体和背景的温差可能只有几度映射到灰度图上就是一片灰蒙蒙边缘梯度极弱。更麻烦的是电力场景的红外图常有「高亮饱和」问题——接头过热时像素值直接顶到 255周围细节全被吞掉。所以用可见光数据集预训练的模型第一层卷积学到的边缘检测器在红外域基本失效必须用红外数据做域适应微调。这个数据集 4271 张的规模不算大但 14 个类别覆盖了变压器检测的核心目标足够做一次完整的微调实验验证「可见光预训练 红外微调」这条路线在电力场景是否走得通。2.2 VOC 与 YOLO 格式的差异和转换逻辑VOC 格式用 XML 存标注每个目标一个object节点包含类别名和xmin/ymin/xmax/ymax四个绝对坐标值。YOLO 格式用 txt 存每行一个目标格式是class_id x_center y_center width height全部归一化到 0~1。两者本质是同一套框的两种表达但训练时 YOLO 只认后者。很多人拿到 VOC 直接改后缀名这是血泪翻车的起点——YOLO 的 dataloader 读 txt 时按空格切分VOC 的 XML 标签根本进不去。正确做法是写转换脚本把 XML 解析成归一化坐标再写 txt。下面这个脚本我一般会放在数据集根目录跑一次import xml.etree.ElementTree as ET import os # 14 类按你的实际类别顺序改class_id 从 0 开始 classes [transformer, bushing, connector, insulator, arrester, ct, pt, breaker, disconnector, cable_terminal, oil_leak, corona, hotspot, other] def convert_voc_to_yolo(xml_path, txt_path, img_w, img_h): tree ET.parse(xml_path) root tree.getroot() lines [] for obj in root.findall(object): cls_name obj.find(name).text.strip() if cls_name not in classes: continue # 类别不在列表里直接跳过避免 class_id 越界 cls_id classes.index(cls_name) bbox obj.find(bndbox) xmin float(bbox.find(xmin).text) ymin float(bbox.find(ymin).text) xmax float(bbox.find(xmax).text) ymax float(bbox.find(ymax).text) # 归一化并转中心点宽高 x_center (xmin xmax) / 2.0 / img_w y_center (ymin ymax) / 2.0 / img_h w (xmax - xmin) / img_w h (ymax - ymin) / img_h lines.append(f{cls_id} {x_center:.6f} {y_center:.6f} {w:.6f} {h:.6f}) with open(txt_path, w) as f: f.write(\n.join(lines))逻辑说明先解析 XML 拿到绝对坐标再除以图像宽高做归一化最后按 YOLO 要求的class_id x_center y_center w h顺序拼接。参数上img_w和img_h必须和实际图像尺寸一致红外图常见 640×512 或 384×288不同相机分辨率不同写死会翻车。类别列表要和训练时的data.yaml里names顺序完全一致差一个位置模型就学错类。2.3 14 类别的分布检查与长尾处理拿到数据集第一件事不是开训是统计每个类别的框数量。14 类里大概率有几类样本极少比如corona电晕和oil_leak漏油在红外里本身就少见。用下面这段统计脚本快速看分布import os from collections import Counter label_dir labels/train counter Counter() for txt in os.listdir(label_dir): with open(os.path.join(label_dir, txt)) as f: for line in f: if line.strip(): counter[int(line.split()[0])] 1 for cls_id, cnt in sorted(counter.items()): print(fclass {cls_id}: {cnt} boxes)如果发现某类框数低于 50训练时该类基本学不动mAP 会接近 0。常见做法是要么在data.yaml里给这类加高cls损失权重要么用复制粘贴增强把少样本类扩到 200 框以上。注意红外图像的增强不能随便用色彩抖动因为热成像的伪彩色映射是固定的改色调等于破坏温度语义只能用几何变换和亮度微调。3. 用 YOLO 在红外变压器数据集上跑通训练从 data.yaml 到第一次推理3.1 目录结构与 data.yaml 的正确写法YOLO 训练对目录结构有硬要求常见做法是images/train、images/val、labels/train、labels/val四件套图像和标签文件名一一对应只是后缀不同。data.yaml写错路径是新手最高频的翻车点下面是我验证过的模板path: /data/infrared_transformer # 数据集根目录绝对路径最稳 train: images/train val: images/val nc: 14 names: [transformer, bushing, connector, insulator, arrester, ct, pt, breaker, disconnector, cable_terminal, oil_leak, corona, hotspot, other]参数说明path用绝对路径相对路径在不同工作目录下跑会找不到文件nc必须等于names长度写错会直接报维度不匹配names顺序和转换脚本里的classes必须逐字一致。验证集比例建议从 4271 张里切 15% 左右约 640 张太少评估抖动大太多训练样本不够。3.2 训练命令与关键超参设置红外图像纹理弱训练时几个超参和可见光不一样。我一般用 YOLOv8n 或 YOLOv8s 起步红外域不需要太深的 backbone小模型反而泛化好。命令如下yolo detect train \ data/data/infrared_transformer/data.yaml \ modelyolov8s.pt \ epochs150 \ imgsz640 \ batch16 \ lr00.001 \ lrf0.01 \ warmup_epochs5 \ mosaic0.5 \ degrees10 \ hsv_h0.0 \ hsv_s0.0 \ hsv_v0.2 \ patience30 \ device0参数逐个说lr00.001比默认 0.01 小一个量级因为红外域微调不需要大学习率大了容易把预训练权重冲垮mosaic0.5降低马赛克增强强度红外图拼接后温差边界会混乱hsv_h和hsv_s必须设 0热成像伪彩不能改色调和饱和度hsv_v0.2只留少量亮度扰动模拟不同测温范围patience30早停红外数据集小过拟合来得快。imgsz640是通用值如果你的红外原图是 384×288可以试 512但别低于 416否则小目标接头直接糊没。3.3 训练过程看什么指标、什么时候该停训练日志里重点盯三个数box_loss、cls_loss和验证集mAP50。红外场景下box_loss下降通常比可见光慢因为边缘模糊导致定位难这是正常的不用急着调参。cls_loss如果一直震荡不降大概率是类别不平衡或标签有错。mAP50在 50 epoch 后如果还在涨就继续连续 30 epoch 不涨就触发早停。我踩过的坑是验证集 mAP 涨但测试集实际推理框歪后来发现是验证集和训练集有同场景图像泄漏切分时按场景分而不是随机分指标才可信。红外巡检数据往往同一变电站拍很多张随机切分必然泄漏这个细节很多人忽略。4. 红外变压器检测避坑5 个真实翻车记录4.1 现象训练 loss 正常但推理框全偏原因VOC 转换时坐标没归一化有人图省事直接把 VOC 的绝对坐标写进 YOLO txt没除以图像宽高。训练时 YOLO 内部会做归一化但标签已经是几百的数值模型学到的框全在图像外。解决转换脚本里必须除以img_w和img_h转换完随机抽 5 张用可视化脚本画框确认框贴合目标再开训。4.2 现象某几类 mAP 始终为 0原因类别名大小写或空格不一致VOC XML 里写的是Transformerdata.yaml里写的是transformer转换脚本匹配不上直接跳过该类一个框都没生成。解决转换前先grep一遍所有 XML 的name字段统一转小写去空格再和names列表对齐。4.3 现象训练到 80 epoch 突然 CUDA out of memory原因mosaic 增强累积大图mosaic1.0时四张图拼一张实际输入分辨率翻倍显存占用比单图高不少。红外图如果原图就大拼完直接爆显存。解决把mosaic降到 0.5 或 0.3或者batch从 16 降到 8imgsz保持 640 不动。4.4 现象模型把背景热源误检成变压器原因负样本不足红外图里暖气管、阳光反射面、人体都是热源和变压器温差特征相似。数据集如果全是含目标的图模型没见过纯背景就会乱框。解决从 4271 张里挑出无目标的纯背景图作为负样本加入训练集比例控制在 10% 左右能明显压误检。4.5 现象验证 mAP 很高但换一个变电站就崩原因域偏移没处理训练集全来自一个变电站的红外相机换一台相机、换一个季节温度分布和伪彩映射都变了模型直接失效。解决训练时加入亮度扰动和少量高斯噪声模拟不同成像条件有条件的话在多个变电站数据上混合训练单域数据集的 mAP 不能代表真实泛化能力。5. 红外变压器检测的进阶技巧用两点校正思路做推理前处理红外图像有个可见光没有的问题原始热成像输出的是灰度辐射值直接送 YOLO 训练模型学到的是「灰度模式」而不是「温度模式」。工业上常用两点校正把灰度映射到温度思路是用黑体在低温点和高温点各采一次建立灰度到温度的线性关系。推理前做这一步能让模型对绝对温升更敏感而不是只认相对亮暗。具体做法在数据集里挑几张已知温度参考的红外图拟合T a * G b其中G是灰度值T是温度a和b由两个标定点解出。然后把所有推理图先做这个线性变换再送模型。我实测过在接头过热检测上做两点校正后误检率能降一截因为背景暖气管的灰度虽然高但换算成温度后和变压器接头的温升区间分开了。另一个技巧是推理时用conf0.35而不是默认 0.25红外域误检多阈值抬高一点召回掉得不多但精度涨得明显。最后说个习惯每次换数据集或换相机先跑 20 张可视化推理图人眼过一遍框再决定要不要调参别只看 mAP 数字。希望帮到你。本文还有配套的精品资源点击获取