光伏缺陷检测从0到1:PVEL-AD数据集3步跑通质检模型
【免费下载链接】PVEL-ADPhotovoltaic cell defect detection项目地址: https://gitcode.com/gh_mirrors/pv/PVEL-AD
在光伏组件产线上,EL(电致发光)检测仪每分钟吐出几十张近红外图像,质检员要从中找出肉眼几乎看不见的裂纹、黑芯和指状中断。盯屏时间一长,漏检在所难免——而一块带着隐裂的电池片流入下一道工序,损失的不只是良率数字,还有整批组件的寿命口碑。
这就是本文要解决的问题:如何用一套公开的工业级数据集,快速构建并评估你自己的光伏缺陷检测模型。PVEL-AD(Photovoltaic Electroluminescence Anomaly Detection)是目前光伏电池EL图像缺陷检测领域规模最大、标注最完整的开源数据集之一,包含36,543张近红外图像、12类缺陷和40,358个精准边界框。本文面向刚接触工业视觉的新手和想快速落地的工程师,带你用项目自带的三个脚本,从数据申请一路跑到mAP评估。
图1:PVEL-AD覆盖的12类光伏缺陷,每张EL图像都用彩色边界框标出了缺陷位置和类别
先别急着看原理,3分钟把项目跑起来
很多入门者一上来就研究算法,结果数据格式不对、评估脚本报错,折腾几天还在原地。PVEL-AD 项目很贴心地把"数据预处理、数据增强、性能评估"三个环节都封装成了现成脚本,先把这条链路跑通,你才知道每个环节在解决什么问题。
第一步:克隆项目
git clone https://gitcode.com/gh_mirrors/pv/PVEL-AD cd PVEL-AD项目里只有三个核心文件,结构非常清爽:get_gt_txt.py(标注格式转换)、horizontal_flipping.py(数据增强)、AP50-5-95.py(mAP评估)。先搞懂这三个文件,你就掌握了整个工作流。
第二步:申请数据集
数据集不是直接下载就能用的,需要走一个申请流程:下载并填写Industrial_Data_Access_Form.docx工业数据集申请表,必须手写签名并填写日期,用机构邮箱(Gmail、QQ邮箱等个人邮箱不通过)发送到指定邮箱。审核通常会在两周内回复。拿到数据后,你得到的是VOC格式的图像与XML标注文件。
⚠️ 注意:历史版本的测试集标注是不公开的,提交测试结果需要到Kaggle的pvelad竞赛页面完成。最新的发布说明里已经放出了test标注,但如果你想和官方排行榜对比,Kaggle仍是标准通道。
第三步:转换标注格式
主流目标检测框架(YOLO、Faster R-CNN、RetinaNet等)大多使用TXT格式的标注,而PVEL-AD提供的是XML。get_gt_txt.py就是做这件事的:读取VOCdevkit/VOC2007/Annotations/下的XML文件,把每个object的类别名和边界框坐标写成一行类别 xmin ymin xmax ymax的TXT,输出到input/ground-truth/目录,正好是后续评估脚本要读的位置。
# 先准备好VOC格式的目录结构,再把测试集图片名列表放入 # VOCdevkit/VOC2007/ImageSets/Main/test.txt,然后执行: python get_gt_txt.py这样转换后,每一行标注都对应标准的目标检测格式,后续无论接哪个训练框架都不用再改。
为什么EL图像适合做缺陷检测:3个关键设计
跑通脚本只是热身,理解了数据集的设计逻辑,你才知道自己的模型在跟什么"怪物"搏斗。
第一个设计:近红外成像让内部缺陷现形。电致发光检测给电池片通上电流,让硅片自己发光,内部缺陷会破坏载流子复合,在图像上表现为暗区或异常纹理。相比可见光拍照,EL图像能直接暴露隐裂、断栅这类"内伤",这是光伏质检的基础。
第二个设计:12类缺陷覆盖产线真实场景。从常见的线状裂纹、星状裂纹、指状中断,到少见的黑芯、粗线、划痕、碎片、缺角、印刷错误、水平/垂直错位、短路,基本涵盖了EL检测能发现的主要失效模式。
第三个设计:忠实复刻长尾分布。这是PVEL-AD最有价值的地方——它不是把各类缺陷凑得一般多,而是按真实产线的缺陷出现频率采样:
| 缺陷类别(12类) | trainval样本 | test样本 |
|---|---|---|
| finger(指状中断) | 2958 | 22638 |
| crack(裂纹) | 1260 | 2797 |
| black_core(黑芯) | 1028 | 3877 |
| thick_line(粗线) | 981 | 1585 |
| horizontal_dislocation(水平错位) | 798 | 1582 |
| short_circuit(短路) | 492 | 1215 |
| vertical_dislocation(垂直错位) | 137 | 271 |
| star_crack(星状裂纹) | 135 | 83 |
| printing_error(印刷错误) | 32 | 48 |
| corner(缺角) | 9 | 12 |
| fragment(碎片) | 7 | 5 |
| scratch(划痕) | 5 | 3 |
看到没?最多的"指状中断"有近三千个训练样本,最少的"划痕"只有5个,差了将近600倍。这就是典型的长尾目标检测任务——模型很容易在常见缺陷上刷高分,却对罕见缺陷视而不见。如果你只用整体mAP衡量模型,很可能会被漂亮数字骗过去。
实战主线:从数据增强到mAP评估的完整链路
下面我们沿着一条完整路线走一遍,把三个脚本串成一个可复用的流水线。
环节一:用水平翻转把训练数据翻倍
光伏电池的缺陷通常具有方向不变性——一条裂纹左右翻转后依然是裂纹,不会变成别的类别。因此水平翻转是最安全、最有效的EL图像增强手段之一,能把训练样本量直接翻倍,对缓解长尾问题中的样本不足也有帮助。
horizontal_flipping.py的精妙之处在于它图像和XML标注同步处理:先用cv2.flip(image, 1)水平翻转图像,再解析XML,把每个边界框的x坐标按new_x = 图像宽度 - 原x的规则重算,同时保持y坐标不变,最后写出带f_前缀的新图像和新XML。
# 脚本里已经写好了输入输出路径,改成你自己的目录即可 # 例如 imgreadpath 指向原始JPEGImages,imgwritepath 指向翻转后的输出目录 python horizontal_flipping.py不要小看这一步。在长尾分布下,对罕见缺陷做水平翻转相当于免费获得一份"新样本",模型见过更多姿态,泛化能力会明显提升。这也是PVEL-AD官方推荐的训练数据增强方式。
环节二:训练时如何对抗长尾分布
拿到增强后的数据,模型训练阶段要特别处理类别不均衡。这里给出三个工程上最实用的手段:
- 类别加权损失:给样本少的类别(scratch、fragment、corner)分配更高的损失权重,强迫模型"重视"它们;
- 重采样:对少数类过采样(重复抽取),或对多数类欠采样,把训练分布拉平一些;
- 迁移学习:用COCO等大数据集上预训练好的权重初始化,再在PVEL-AD上微调,让模型先学会通用特征。
模型选择上,官方论文验证了专门设计的BAF-Detector架构,而YOLOv5/YOLOv8在常见缺陷上精度和速度的平衡更好,Faster R-CNN则在精度优先、漏检容忍度低的场景更稳。新手建议先从YOLO系入手,链路最短。
环节三:用AP50-5-95.py给出权威评分
训练结束后,最关键的环节是评估。AP50-5-95.py实现了目标检测最权威的指标之一:从IoU=0.50到0.95、步长0.05共10个阈值下的平均精度(mAP),这是PASCAL VOC和COCO都认可的标准做法。
脚本会自动读取input/ground-truth/(真实标注)和input/detection-results/(你的模型输出)两个目录。检测结果文件格式是类别 置信度 xmin ymin xmax ymax,文件名必须和对应的真实标注文件同名,脚本会按文件一一匹配。
# 先把检测结果按上面格式放入 input/detection-results/ python AP50-5-95.py脚本内部会为每个类别计算Precision-Recall曲线、单类AP、F1、Recall,并输出:
results/results.txt:每类的AP和整体mAP汇总results/AP/、results/F1/、results/Recall/、results/Precision/:各类别的可视化曲线图- 最终的
AP50_5_95 = xx.xx%:就是你要向领导汇报的那个数字
看结果时别只盯整体mAP。逐类看AP才是关键:如果finger的AP很高、scratch的AP接近零,说明模型被长尾分布"带偏"了,需要回头调整类别权重或重采样策略。
避坑指南:新手最容易踩的4个坑
跑这条链路时,下面几个坑几乎人人都会遇到,提前知道能省下大量排查时间。
坑1:文件名对不上。AP50-5-95.py要求ground-truth和detection-results两个目录下的TXT文件同名。如果你的模型输出命名和原图不一致,脚本会直接报错。解决方案:训练时用原始image_id作为输出文件名。
坑2:误以为"画了框"就算检测成功。mAP按IoU阈值判断匹配,IoU<0.5会被计为误检。如果模型框的位置偏了但类别对,AP依然会很低。调优时优先关注定位精度。
坑3:忽略difficult标记。get_gt_txt.py会把XML中difficult=1的困难样本写成类别 坐标 difficult格式,评估脚本会特殊处理。转换后记得抽查几行,确认格式没乱。
坑4:申请资料准备不全。申请表需要手写签名、机构邮箱、按要求发送。用个人邮箱或漏签,可能直接被退回,白白等两周。
进阶方向:把数据集价值用到极致
跑通基础流程后,PVEL-AD还能支撑更深入的研究方向:
- 小样本学习:长尾分布让它成为Few-shot检测的理想试验场,可以研究在5个样本下如何训练出可用的缺陷检测器;
- 零样本/开集检测:产线上永远会出现新缺陷,研究如何让模型识别"没见过的"缺陷类型;
- 缺陷溯源:分析缺陷的空间分布和出现规律,反推丝网印刷、扩散等工艺环节的问题,把质检数据变成工艺优化的依据;
- 多模态融合:将EL图像与红外热像、可见光图像结合,进一步提升检测精度。
项目的评估脚本、增强脚本和申请表都在仓库的根目录下,直接翻源码就能看到每个细节的实现,非常适合作为工业视觉入门的第一份"可运行教材"。
写在最后
一句话总结:PVEL-AD用36,543张真实产线EL图像、12类缺陷和40,358个标注框,把光伏缺陷检测从"拍脑袋调参"变成了"可复现、可评估的工程问题"。
现在就可以行动:克隆项目、按文中三步跑通标注转换和数据增强,再用你自己的检测模型跑一遍AP50-5-95.py,看看12类缺陷里最难的那几类——scratch、fragment、corner——你的模型能拿到多少分。跑通的那一刻,你就算正式踏入工业AI质检的大门了。
【免费下载链接】PVEL-ADPhotovoltaic cell defect detection项目地址: https://gitcode.com/gh_mirrors/pv/PVEL-AD
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考