ARTICLE DETAIL

资讯详情

深耕编程入门与网站建设的一线实战洞察。

889张变电站红外图像数据集:PT/CT目标检测与VOC格式实践

889张变电站红外图像数据集:PT/CT目标检测与VOC格式实践 简介本资源是面向电力系统智能运维研究者、计算机视觉工程师及高校电力AI方向师生的专业红外图像数据集聚焦变电站关键设备——电压互感器TP与电流互感器TC的状态识别与异常检测任务。数据集包含889张真实变电站红外图像jpg及严格对应的VOC格式标注文件xml共1778个文件总大小24.72MBxml文件提供精确的边界框标注TP共650处、TC共516处支撑目标检测、小样本学习与热缺陷定位等模型训练。已有2072人学习下载实际应用中可直接用于YOLO/Faster R-CNN模型训练、红外图像数据增强实验如亮度扰动、镜像翻转、以及基于温度分布的过热预警算法验证。所有图像均来自一线电力现场命名含RF哈希标识如IR_8595_jpg.rf.16ce7aa7...确保样本独立性与可追溯性为构建高泛化能力的变电设备智能诊断模型提供可靠基础。 做电力设备目标检测的同行应该都有同感红外图像数据集是稀缺资源尤其是带完整标注、能直接扔进训练管线的那种。我当初在复现变电站设备过热检测项目时光是找带标签的红外图就折腾了小半个月最后不得不自己拿LabelImg一张张框框到怀疑人生。所以当我看到这份包含889张变电站红外图像、标注对象为电压电流互感器、且是VOC格式的数据集时第一反应是终于能省下最磨人的标注环节了。这份数据集的内容很聚焦拍摄对象就是变电站里的电压互感器PT和电流互感器CT图像全部来自红外热像仪每张图配一个VOC格式的XML文件描述目标包围框和类别。889张的规模放在深度学习数据集里不算大但用在迁移学习场景下训练一个能识别PT、CT的检测器完全可行对小样本学习、数据增强策略验证、红外目标检测算法对比这类研究任务也是一个很合适的基准。正在做电力设备智能巡检、红外热成像目标检测或者想研究小样本目标识别的人都可以拿它练手或做起步数据集。1. 变电站红外巡检的痛点这份数据集补在哪一块1.1 PT和CT在红外图像里到底是什么样子电压互感器PT和电流互感器CT都是变电站里常见的一次设备外观上有点像都是安装在构架上的柱状或箱体结构。在可见光图像里它们有清晰的轮廓和颜色特征但到了红外图像里画面反映的是物体表面的温度分布设备轮廓靠的是温差来勾画。正常运行状态下互感器本体温度略高于环境温度接线端子和连接部位往往更亮温度更高一旦发生内部绝缘缺陷、接触不良或过载局部温度会明显抬升在红外图里就是一片特别亮的高温区。这就是为什么红外检测在变电站巡检里这么重要它能在设备故障初期通过非接触方式发现温度异常比到现场看外观、闻味道、听声音更早发现隐患。但红外图像也给目标检测模型出了个难题——设备边缘常常被热晕模糊掉背景里的其他高温部件也会干扰判断。PT和CT在某些拍摄角度下形态和温差分布非常接近检测器要想稳定区分二者不能只看形状还得捕捉发热区域与设备本体的空间关系。1.2 为什么红外目标检测数据集如此稀缺做可见光目标检测的人很难体会红外数据的采集难度。首先是硬件门槛一台像样的科研级红外热像仪价格不菲分辨率还远低于同价位的可见光相机其次是采集场景变电站属于电力生产区域进出有严格的安全管理一般团队想入场拍摄并不容易还得考虑电磁环境对设备的影响再就是标注环节红外图像对比度低、边界模糊标注员在框选目标时经常要对着同一张图反复确认“这个边缘到底是设备轮廓还是热扩散”标注速度比可见光慢一倍以上。所以公开渠道能拿到的红外目标检测数据集要么是无人机视角的建筑物红外图要么是行人检测之类的通用场景专门针对电力设备的、带完整类别标注的红外数据集少之又少。这份889张的数据集虽然规模不大但它胜在领域特别明确——直接命中变电站巡检场景省掉了我当初最头疼的数据采集和清洗环节拿过来就能做迁移学习或者评估算法。1.3 889张的规模到底够不够用需要先说结论对于PT、CT两个类别的目标检测任务889张红外图像在不做任何额外数据采集的前提下足够训练出一个可用的检测器但前提是会用迁移学习和数据增强。如果是完全从随机初始化开始训练一个YOLOv8或者Faster R-CNN889张确实偏少模型很容易过拟合到训练集的拍摄角度和光照环境但加载ImageNet或COCO预训练权重之后卷积核的低层特征已经具备了通用的边缘、纹理、形状表达能力模型只需要在少量红外数据上微调高层的语义特征这个规模就合理了。反过来如果把这份数据集当作评测基准来对比算法889张也站立得住。比如你要验证“在红外小样本场景下YOLOv8和RT-DETR哪个更强”在固定训练集和测试集的前提下对比结果有说服力。但如果目标是想做一个直接上线的工业级检测器建议把它当作种子数据配合自己采集补充数据再训练。我后续在第4章会详细展开数据划分的做法这里先提一句889张这个量级数据的组织方式比模型选型更影响最终效果。2. 解构VOC标签目录组织、XML字段与格式转换2.1 JPEGImages、Annotations、ImageSets三件套的配合逻辑拿到这份数据集时第一件事就是摸清目录结构。PASCAL VOC格式的标准布局包含三个核心目录JPEGImages存放原始图像Annotations存放与图像一一对应的XML标注文件ImageSets/Main存放划分训练集和验证集的txt文件。很多人在这一步就踩坑——以为只要把JPEG和XML配对就行忽略了ImageSets里的划分文件。实际上训练时用的数据列表正是从ImageSets/Main里读取的缺了它就得自己重新划分如果同一设备的图像被随机拆到训练集和验证集里评估指标虚高不说模型的真实泛化能力也会被高估。图像文件命名和XML命名是完全对应的一张IR_000123.jpg一定有一份IR_000123.xml。如果你拿到手的数据集里没有ImageSets目录别慌用脚本自动生成一个即可把JPEGImages目录里所有文件名读出来按比例shuffle后写入train.txt和val.txt每个文件名不带扩展名、一行一个。后面做任何训练框架的适配都要以这个划分为准。2.2 XML里的关键字段拆解随便打开一个XML文件核心内容长这样annotation folderJPEGImages/folder filenameIR_000123.jpg/filename source databaseUnknown/database /source size width640/width height512/height depth1/depth /size object nameCT/name poseUnspecified/pose truncated0/truncated difficult0/difficult bndbox xmin180/xmin ymin96/ymin xmax470/xmax ymax398/ymax /bndbox /object /annotation几个容易忽略的细节size里的width和height必须是图像的真实尺寸如果缩放过度所有标注框都会跟着偏移depth表示通道数红外图像可能是1灰度也可能是3伪彩色保存这一点直接关系到预处理时的通道处理方式object可以出现多次说明一张图里有多个目标每台互感器一个独立的bndboxdifficult在VOC评测规则里表示难例样本训练时通常应该过滤掉但很多人转换格式时忘了处理这个字段把难例框也当成了普通正样本。VOC的坐标体系是绝对像素坐标xmin、ymin是包围框左上角xmax、ymax是右下角坐标原点在图像左上角。这个设计直观但不同框架需要的格式不同所以转换脚本是刚需。2.3 VOC转YOLO格式的转换脚本参考YOLO系列框架不直接消费XML它要求每张图对应一个txt文件每行记录类别ID和归一化后的中心点坐标、宽高。我整理了一段常用的转换脚本可以直接拿过去改import xml.etree.ElementTree as ET import os def voc_to_yolo(xml_path, class_names): tree ET.parse(xml_path) root tree.getroot() size root.find(size) img_w int(size.find(width).text) img_h int(size.find(height).text) lines [] for obj in root.findall(object): name obj.find(name).text if name not in class_names: continue class_id class_names.index(name) # 过滤掉difficult标注 difficult int(obj.find(difficult).text) if difficult 1: continue box obj.find(bndbox) xmin float(box.find(xmin).text) ymin float(box.find(ymin).text) xmax float(box.find(xmax).text) ymax float(box.find(ymax).text) dw 1.0 / img_w dh 1.0 / img_h cx (xmin xmax) / 2.0 * dw cy (ymin ymax) / 2.0 * dh w (xmax - xmin) * dw h (ymax - ymin) * dh lines.append(f{class_id} {cx:.6f} {cy:.6f} {w:.6f} {h:.6f}) return linesclass_names的顺序是关键比如[PT, CT]训练配置里的names必须和这个顺序完全一致否则模型输出的类别就全乱了。还有一个细节YOLO格式的txt文件名要和图像文件名一致比如IR_000123.jpg对应IR_000123.txt存放路径在labels/train和labels/val下。如果你后续想转成COCO格式做评测用pycocotools的mask相关接口做boxes转换即可思路是一样的。3. 红外图像与可见光训练的本质差异从灰度到预训练权重迁移3.1 通道问题比你想的更麻烦红外热像仪输出的原生数据是温度矩阵但为了可视化多数设备会把它映射成伪彩色图像常见的有铁红色、彩虹色、白热模式等。这份数据集里的图像如果是伪彩色三通道处理起来要多个心眼直接输入模型网络学到的特征会跟色彩映射方式耦合换一台不同厂家的热像仪颜色映射一变模型的检测精度可能掉得很快。我的经验是先统计一下图像的通道情况。如果所有图像都是单通道灰度图训练前把单通道复制成三通道加载ImageNet预训练权重后第一层卷积的输入是3通道可以直接用预训练参数继续微调。如果原始图像是三通道伪彩色建议先转成灰度图再复制成三通道。当然如果想保留伪彩色里的温度语义也可以直接把三通道伪彩色图喂给模型但要做好“这个模型只能适配相同色彩映射设备”的心理准备。需要说明的是这是基于我的实操经验给出的建议。红外图像转灰度会丢失部分可辨识信息但对设备类别识别的影响远小于对温度诊断的影响因为检测任务更依赖形状、边缘和相对位置温度绝对值的可读性并不是模型判断类别的核心依据。3.2 预训练权重迁移的两个可行方案方案一输入三通道灰度复制图直接用ImageNet预训练权重。这是最省事的路径YOLOv8、Faster R-CNN这些框架开箱即用不需要改网络结构。缺点是模型第一层卷积会用三个完全相同的通道做卷积等效于对灰度图做单通道特征提取参数效率略低。方案二修改输入层把第一层卷积的输入通道从3改成1。在PyTorch里可以读取预训练权重后对第一层卷积的权重做平均或取第一个通道的权重复制到新的1通道卷积层。这样模型的结构更匹配红外图像但改动幅度大一些需要自己写权重迁移逻辑并且后续载入第三方预训练权重时要小心键名不匹配的问题。我个人的建议是数据集规模越小越倾向于方案一。方案二虽然听着更“贴合数据”但改动点多哪一步粗心都可能引入bug在889张这种规模下收益并不明显。3.3 红外图像的特有干扰热噪声与背景高温红外图像最明显的干扰源就是热噪声像素值会出现非边缘相关的随机波动虽然幅度不大但对小目标的轮廓提取影响不小。另一个麻烦是背景高温物体比如阳光直射下的金属构架、运行中的母线排、其他发热设备这些区域在红外图里同样高亮如果标注时把背景框了进来模型会学到错误的相关性。基于这些实际情况数据增强策略要针对性调整。水平翻转、小角度旋转、随机缩放都是安全操作色彩相关的增强要慎用比如色调调节、饱和度扰动对灰度图基本没有物理意义反而可能引入噪声高斯噪声可以适量加模拟热像仪的成像噪声但强度不要太大否则会破坏边缘信息。我还测试过在YOLOv8的Mosaic增强下小目标漏检率下降明显因为Mosaic把多张图拼接在一起相当于变相增大了每张图的上下文信息对小目标检测很友好。4. 训练参数配置与数据划分的实操记录4.1 数据划分里最容易翻车的“同源泄漏”问题很多人在拿到889张红外图之后直接随机划分8:2就开训这是最典型的一个坑。变电站设备采集时同一个互感器往往会从多个角度拍好几张如果随机划分训练集和验证集里会出现同一台设备的不同角度图像模型等于提前“见过”了验证集里的目标。训练损失一路下降验证集mAP也高得吓人到了全新场景就露馅。正确的做法是先把图像按照设备实例或拍摄场景分组然后以组为单位划分数据集。具体操作可以这样借助XML里的文件名前缀判断设备编号比如命名里包含PT-01、CT-03这种标识或直接人工浏览一遍图像把不同角度拍摄的同一设备归到同一组再做组级别的随机分配。这样划分出来的验证集才真正反映了模型对新场景的泛化能力。4.2 实验配置参考YOLOv8 迁移学习我用YOLOv8做过一组基准实验环境是单卡RTX 3090PyTorch 2.x。数据集按上述组级别划分训练集约700张验证集约189张。data.yaml配置如下train: dataset/images/train val: dataset/images/val nc: 2 names: [PT, CT]训练命令yolo detect train datadata.yaml modelyolov8n.pt epochs150 imgsz640 batch16 patience20输入分辨率我选了640因为原始红外图分辨率普遍不高强行喂到1280只会增加显存占用对精度提升有限。预训练权重选的yolov8n轻量级模型在数据量不大时反而不容易过拟合收敛速度也快。epochs给150配合patience20早停实际在第90到110轮之间会达到最佳效果。batch size在16到32之间都可以显存不够就降到8同时把学习率从默认的0.01适当调低到0.005。4.3 评估指标怎么读才不骗自己训练完成后不要只看最后几个epoch的mAP要看验证集上类别级别的AP。PT和CT在形态上接近如果某个类别的AP明显偏低大概率是标注一致性或者样本数量不均衡造成的。重点记录三个数mAP0.5、mAP0.5:0.95、F1-score。mAP0.5衡量的是宽松IoU下的检测能力mAP0.5:0.95衡量的是精确定位能力。对于红外图像我建议实际操作中把mAP0.5当作主要参考指标因为红外目标边界本身就带模糊性强求高IoU不太现实但也别低于0.75否则定位误差会直接影响后续测温分析。4.4 实测中的调优记录在一组实际训练过程中模型在验证集上mAP0.5达到0.86但查看可视化结果后发现两个问题。一是对小尺寸互感器召回率不足许多框漏掉了图中远处的小目标二是PT和CT在斜视角度下偶尔互相混淆。针对第一个问题我把Mosaic增强概率调高到1.0同时开启YOLOv8的scale增强让模型看到更多不同尺度的目标。针对第二个问题我并没有急着加数据而是重新检查了标注文件发现有个别样本把PT和CT的标签贴反了修正之后混淆情况明显缓解。这也引出了下一章的内容数据集到手后标注质量校验比调参更值得花时间。5. 标注校验、类别均衡与过拟合排查5.1 标注质量校验可视化是所有手段中最快的拿到VOC标注后的第一件事我的习惯是写一个可视化脚本读入图像把XML里的bndbox画出来再标注上类别名称生成一张张带有红框和标签的图片快速刷一遍。红外图像边界模糊标注员在框选时常犯三类错误框太大把背景高温区域包了进来、框太小只覆盖了局部发热部位、漏标了被前景设备遮挡的远端目标。这些问题用肉眼扫图比任何统计指标都发现得快。如果发现有标注框和目标实际轮廓明显不匹配的优先看是不是truncated截断目标或者difficult难例被标出来了。VOC规范里被图像边界截断的目标可以用truncated字段标记不应该被当成完整目标框选。很多标注工具默认不区分这些字段导致转换后把残缺目标当成完整正样本训练出的模型对完整目标的定位自然就偏了。5.2 类别不均衡怎么处理假设实际标注后统计得到PT框有1250个CT框只有620个这个比例在真实电力场景里很正常因为一个变电站CT数量往往比PT多但采集时可能对PT给了更多镜头。类别失衡的直接后果是模型偏向预测多数类把一部分本属于少数类的目标误判成多数类。处理方法优先级从高到低是先检查有没有重复标注的框一张图里同一个目标被标了两遍、再对少数类做过采样复制少数类图像到训练列表里、最后才考虑损失函数层面的措施比如focal loss。复制图像的过采样要配合数据增强随机性来做否则只是机械重复模型还是会记住这批样本。我试下来按1.2到1.5倍比例过采样CT类图像就能基本平衡不需要激进到1:1。5.3 训练中过拟合的三个典型信号红外小数据集上过拟合很常见典型信号有三个训练loss持续下降验证loss先降后升mAP0.5在验证集上波动剧烈同一批参数训两次结果差距大可视化检测结果时发现验证集上模型对训练集里出现过的特定拍摄角度特别自信对新的拍摄角度明显犹豫。应对过拟合我是按这个顺序排查的先检查数据划分有没有泄漏再说数据增强然后才考虑模型容量。不少人一上来就换更大的模型在889张红外图上用YOLOv8x结果训到一半训练精度接近1.0验证指标还不如nano。小数据集上的最优策略往往是轻量模型配合更强的增强策略这一点希望能被更多正在调参的朋友听到。6. 从检测到温度诊断红外数据的后续扩展方向6.1 温度信息是红外图独有的金矿常规目标检测把红外图当作“一种灰度图”来处理但这远远不够。红外图像的像素值本质上对应温度分布在拿到设备的检测框之后可以基于框内像素统计出温度特征包括最高温、平均温、温度梯度等再结合设备正常运行的参考温度范围做简单诊断。这就是从“识别”到“诊断”的跨越。实际操作中如果手头有热像仪标定文件温度-灰度曲线或者辐射率配置可以把红外图像里的灰度值反算出温度矩阵。没有标定文件也不要紧退而求其次做相对温差分析对比同一张图里同类设备的温度或者同一设备在不同时间的温度变化仍然能发现明显的异常。一个最基本的相对温差判断规则是如果某个PT的高温区温度比背景其他同类设备高出20%以上就应该人工复查。6.2 小样本扩充与工具链扩展思路889张这个数量做一个二类检测模型是够用的但要想做温度诊断联合建模数据量还远远不够。一个可行的扩充思路是用检测到的目标区域裁出局部图做有监督的发热等级分类。这样一张原图可以切出多个样本相当于把数据集扩充了好几倍。此外如果原始图像集中有同一场景的连续帧还可以通过帧间轻微运动生成新的训练样本配合水平翻转、旋转、亮度微调得到更大的增强数据集。沿这个方向继续扩展还可以把检测框和温度统计特征结合起来做一个简单的设备健康状态评估管道检测模型输出目标框温度统计模块计算框内最高温、平均温、温差规则引擎根据阈值输出正常、关注、报警三个等级。这套管道的上限不在算法而在数据质量和标定精度但如果你手里已经有这份VOC格式的红外数据集从检测框做起把温度诊断功能一步步接上来是条非常务实的路径。我个人的体会是做红外目标检测最忌把图像当作普通灰度图去处理。红外图背后对应的是设备的热状态模型只要学会了识别设备位置和类别就一定要把温度特征挖掘出来否则这个检测系统只发挥了一半价值。手头有这份基线的建议按这个思路把检测往诊断方向延伸你会看到比单独调mAP更有意义的产出。本文还有配套的精品资源点击获取
返回列表