ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

光伏缺陷检测实战:PVEL-AD数据集从标注转换到mAP评估的落地复盘

光伏缺陷检测实战:PVEL-AD数据集从标注转换到mAP评估的落地复盘 光伏缺陷检测实战PVEL-AD数据集从标注转换到mAP评估的落地复盘【免费下载链接】PVEL-ADPhotovoltaic cell defect detection项目地址: https://gitcode.com/gh_mirrors/pv/PVEL-AD拿到数据集授权的那一刻我以为训练模型只是时间问题。真正动手才发现从36,543张光伏缺陷检测图像到一份经得起复现的检测结果中间隔着标注格式转换、长尾分布处理和评估口径统一三道坎。这篇文章是我用PVEL-AD数据集跑完光伏缺陷检测全流程的复盘——每道坎怎么过的、踩过哪些坑一次讲清。3个数字先看清PVEL-AD数据集的家底PVEL-ADPhotovoltaic Electroluminescence Anomaly Detection是目前光伏缺陷检测领域规模最大的公开数据集之一由河北工业大学与北京航空航天大学联合发布。它的核心参数36,543张近红外电致发光EL图像按真实产线缺陷分布采样12类缺陷 1类无缺陷图像40,358个人工标注的边界框长尾分布最少的类别只有个位数样本图1PVEL-AD覆盖的12种缺陷——线裂、星裂、指状中断、黑芯、错位、短路等每种缺陷用不同颜色的边界框精确标注从训练集标注分布就能直观感受长尾有多严重类别样本数类别样本数finger2958vertical_dislocation137crack1260star_crack135black_core1028printing_error32thick_line981corner9horizontal_dislocation798fragment7short_circuit492scratch5最少的 scratch 只有 5 个样本是最多的 finger2958 个的约六百分之一。这个分布本身就是在提醒你别把通用目标检测的套路直接套上来。顺带说一个利好官方近期已公开 test 标注。此前测试要上传到官方评测平台现在本地就能跑完整的光伏缺陷检测评估闭环。第一关把XML标注转成模型能吃的TXT 拿到数据后第一件事不是选模型而是处理标注格式。数据集给的是 VOC 风格的 XML而 YOLO、Faster R-CNN 等主流框架更习惯读 TXT。仓库里的get_gt_txt.py就是干这个的。先 clone 仓库再按 README 流程申请数据集git clone https://gitcode.com/gh_mirrors/pv/PVEL-AD然后运行转换脚本python get_gt_txt.py这里有个坑必须提醒这个脚本不接受命令行参数路径全是写死的。它默认从VOCdevkit/VOC2007/ImageSets/Main/test.txt读图片清单、从同目录的Annotations读 XML输出到./input/ground-truth/。所以要么按 VOC 目录结构摆数据要么直接改脚本里的路径——别指望--input之类的参数。脚本里还留了两个很实用的开关difficult 标记XML 中标了 difficult1 的框输出时会带difficult后缀后续评估会区别对待类别筛选如果标注里混了无关类取消get_classes相关代码的注释用 classes.txt 做过滤第二关水平翻转增强最划算的样本翻倍法 长尾问题光靠重采样不够数据增强是更稳的手段。仓库的horizontal_flipping.py做的是图像与标注同步水平翻转——它不是简单地cv2.flip一下而是把 XML 里每个框的 xmin/xmax 按新图像宽度重算保证翻转后标注依然精确。为什么 EL 图像特别吃水平翻转因为电池片的缺陷线裂、指状中断、错位大多没有方向先验翻转后依然是语义合理的样本。这一招相当于免费把训练样本翻倍。但注意脚本里写的是 Windows 绝对路径E:\\Users\\yolov5-develop\\...Linux 下直接跑会报错。把imgreadpath、xmlreadpath等四个路径改成自己的目录即可。如果你用的是 YOLO 的 txt 格式也可以照这个思路写个同步翻转版本——核心逻辑就一行xmin 图片宽 - xmax。第三关直面长尾别让5个样本的缺陷毁掉整体分数 图2组件级 EL 图像示例一块组件中分布着多种缺陷检测系统需要同时完成定位与分类长尾分布下常规训练最常见的结局是finger、crack 这类大类 AP 很高scratch、fragment 这类小类几乎全漏。我实践下来最有效的三招类别加权损失给稀有类更高权重让梯度不再被大类垄断。但权重别设太极端否则大类精度会被拖垮两阶段训练先用全量数据训出基线再在稀有类样本上微调比一上来就加权更稳针对性增强对稀有类做更强的扰动旋转、对比度、随机裁剪把5 个样本变成5 个样本的多种形态模型选择上除了 YOLO 这类通用检测器论文里专门为光伏缺陷检测设计的 BAF-Detector互补注意力机制在稀有类上优势明显官方论文报告的罕见缺陷 F1 达到 0.89。如果对漏检零容忍Faster R-CNN 这类两阶段模型的稳定性更适合做工业兜底。第四关用AP50-5-95.py给出经得起复现的分数 训练完别急着说效果不错用仓库里的AP50-5-95.py统一评估。它的机制值得先搞懂从input/ground-truth/读真值就是 get_gt_txt.py 的输出从input/detection-results/读预测每行格式类别 置信度 xmin ymin xmax ymax自动跑 IoU 从 0.50 到 0.95、步长 0.05 的 10 档 mAP最终输出平均的AP50_5_95python AP50-5-95.py脚本源自 mAP 计算的开源实现额外做了两件事把 0.5:0.95 的 10 个阈值一次性算完并在 results 目录输出每个类别的 AP、F1、Recall、Precision 明细。看结果时别只盯总 mAP逐类看 AP——某类 AP 明显低于均值就直接对应到训练策略去调。脚本还支持--ignore忽略某些类、--set-class-iou给特定类单独设阈值调试阶段很省事。避坑清单这些细节直接决定你的分数 ⚠️把一路踩过的坑汇总成清单省得大家重复交学费别改标注文件的编码与格式评估脚本解析 TXT 很严格多余空格、空行都可能静默出错文件名必须一一对应预测文件名要和 ground-truth 完全一致否则直接报 File not found增强后务必程序抽查标注翻转脚本算出的新坐标用脚本验一遍别信任肉眼类别名要全局统一finger 还是 finger_interruption混用会让评估结果直接失真difficult 框别提前删评估逻辑会单独处理它们删掉反而拉低你的真实水平这套流程适合谁、不适合谁 适合想快速建立光伏缺陷检测基线的团队研究长尾目标检测、开放世界检测的算法方向需要对照公开数据集做模型选型评估的决策者。不适合追求像素级分割的场景数据集是框标注没有 mask对缺陷成因做工艺级分析的场景那是产线工艺数据该做的事不是检测数据集能覆盖的。下一步从能跑到能上线 数据集评测通过只是第一步。往产线走还有三件事值得投入把评估脚本接进训练流程每次实验自动出 AP50_5_95用数字驱动迭代而不是靠手感尝试开放世界检测PVEL-AD 本身就是 open-world 设定可以让模型对未见过的缺陷给出未知信号这在光伏工艺快速迭代期尤其有价值做小样本与迁移实验利用长尾特性做 few-shot 研究把大类学到的特征迁移到新缺陷上写在最后建议你先跑通这条最小闭环如果你想入局光伏缺陷检测我的建议很具体先 clone 仓库、申请数据、跑通 get_gt_txt.py → 训练 → AP50-5-95.py 这条最小闭环用官方脚本把评估口径固定下来再谈模型优化。如今测试标注已公开复现门槛降到历史最低——剩下的就是动手跑一遍。【免费下载链接】PVEL-ADPhotovoltaic cell defect detection项目地址: https://gitcode.com/gh_mirrors/pv/PVEL-AD创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表