PVEL-AD光伏缺陷检测实战指南:从0到1构建工业级EL质检系统
【免费下载链接】PVEL-ADPhotovoltaic cell defect detection项目地址: https://gitcode.com/gh_mirrors/pv/PVEL-AD
PVEL-AD(Photovoltaic Electroluminescence Anomaly Detection)是一套面向光伏电池EL图像缺陷检测的工业级开源数据集:36,543张近红外电致发光图像、12类常见缺陷、40,358个边界框标注,并配套标注转换、数据增强与mAP评估三件套脚本。这篇文章记录我们用这套数据从申请、增强、训练到评估的完整过程,以及那些只有踩过坑才知道的细节。
凌晨的质检线上,一张漏检图差点让整批组件返工
晚上十一点,某组件厂的质检车间灯还亮着。质检员面前堆着两摞EL图:左边是白天产线送检的,右边是当天要交付的批次。她已经连续看了六个小时近红外图像——灰白色的硅片纹理里,藏着头发丝粗细的裂纹、针尖大小的黑芯,稍一走神就滑过去了。当天这批漏了3片"指状中断"的电池片,直到封装前抽检才被翻出来,整批组件面临降级。
这个场景不是虚构。人工EL目检的漏检率长期徘徊在2%~5%,一张图要看十几秒,熟练工一天也就几百片;而产线节拍是按秒算的。我们接手同类项目时的第一个念头是:能不能让算法替人"看"?找了一圈开源数据,最后落到了PVEL-AD上。
这件事到底难在哪:三座绕不开的大山
难点一:缺陷不是一种病,而是十二种
光伏电池的缺陷形态差异极大:线状裂纹是一条细线,星状裂纹是一团放射状的裂痕,黑芯是暗区,指状中断是细栅线断掉一小截,还有粗线、划痕、碎片、边角缺失、印刷错误、水平/垂直错位、短路。尺度从微米级到厘米级,颜色深浅、背景纹理各不相同。想用一个通用模型通吃,本身就是个多尺度识别问题。
图1:PVEL-AD覆盖的12类光伏缺陷,每类缺陷用不同颜色的边界框精确标出,注意它们形态差异极大,从细线到暗区到错位一应俱全
难点二:罕见缺陷在数据里"隐身"
这是最要命的一点。看训练集里的类别分布:
| 缺陷类别 | 训练验证集样本数 | 测试集样本数 |
|---|---|---|
| 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 |
最多的类别和最少的类别差了近600倍。这就是典型的长尾分布:常见缺陷样本管够,罕见缺陷样本一只手数得过来。而工业质检恰恰最怕罕见缺陷——漏掉一个碎片,可能整块组件报废。数据集按真实产线缺陷分布采样,把这个残酷的现实原样复刻了。
难点三:工业数据是紧俏资源,不是想拿就能拿
产线图像往往涉及工艺参数和设备细节,属于企业机密,公开的工业缺陷数据集极少。PVEL-AD由河北工业大学和北京航空航天大学联合发布,是少数真正来自产线的开源数据集。获取流程有门槛:要填工业数据集申请表(仓库里的Industrial_Data_Access_Form.docx),用机构邮箱提交,表单要手写签名。好消息是社区呼声高,test标注现在也已公开,还搭了在线评测平台,算法水平可以直接和其他人比一比。
破局思路:数据、工具、模型一条线
为什么是目标检测,而不是分类或分割
质检不只是要回答"有没有缺陷",还要回答"缺陷在哪"——后续返工、定位、工艺溯源都需要位置信息。纯分类只能给整图结论,语义分割精度虽高但标注成本和训练成本都贵。目标检测用边界框同时给出类别和位置,是工业落地性价比最高的方案。
模型选型:快、稳、专三选一
- YOLO系列(v5/v8):推理速度快,适合产线实时检测,常见缺陷上表现扎实;
- Faster R-CNN:精度稳定、漏检率低,适合对检出要求极严的场景,代价是速度慢一截;
- BAF-Detector:专门为光伏缺陷设计的CNN,注意力机制加多尺度特征融合,在罕见缺陷上的F1达到0.89,是长尾场景下的最优解之一。
我们当时的取舍很简单:先拿YOLO快速跑通全链路,再上BAF-Detector这类专精模型冲罕见缺陷指标。两条腿走路。
仓库里的三件套:转换、增强、评估
项目仓库配套了三个脚本,正好覆盖数据侧的全部脏活累活:
get_gt_txt.py:把VOC格式的XML标注转成TXT,喂给YOLO、Faster R-CNN等主流框架;horizontal_flipping.py:水平翻转增强,图像和XML标注同步变换;AP50-5-95.py:从IoU 0.50到0.95共10个阈值逐档计算mAP,最终输出AP50-5-95。
git clone https://gitcode.com/gh_mirrors/pv/PVEL-AD落地实录:从申请数据到跑通第一个mAP
踩坑一:申请被退回三次,问题出在邮箱
第一次提交,我们用的个人邮箱,直接被拒。规则很明确:必须机构邮箱,Gmail、QQ邮箱这类商用邮箱不行;表单必须手写签名并标注日期。另外,走Google Drive下载的话,需要把谷歌账号一并附上,不然没法共享。我们踩完这几个坑后,大约两周内收到了数据集。记住:表单填得越规范,回复越快。
踩坑二:XML转TXT,第一个坑藏在目录结构里
get_gt_txt.py默认按VOC的目录约定读文件:标注放在VOCdevkit/VOC2007/Annotations/,图片列表从VOCdevkit/VOC2007/ImageSets/Main/test.txt读取,输出到input/ground-truth/,每行格式是"类别 xmin ymin xmax ymax",遇到difficult样本会加标记。我们第一次直接把XML散放在任意目录,脚本立刻报找不到文件。解法:先把数据按VOC目录结构摆好再跑。如果XML里混了无关类别,脚本里留了按classes.txt筛选的开关,取消注释即可。
踩坑三:水平翻转只翻图不翻标注,模型直接"眼瞎"
数据增强这步,最容易翻车的是"图和标注不同步"。horizontal_flipping.py里,图像用cv2.flip(image, 1)做水平镜像,XML里的坐标也要同步镜像:xmin/xmax映射成width - xmax、width - xmin,y坐标保持不变。我们第一次图省事只翻了图像,结果训练损失直接发散——模型对着错位的框学了个寂寞。另外注意,脚本里的输入输出路径是Windows写死的,跑之前务必改成你自己的目录。增强之后训练样本翻倍,这是EL图像最有效的增强手段,因为缺陷方向本身具有不变性。
踩坑四:长尾类别怎么训,加权、重采样、迁移三选一
直接拿原始分布训,模型会把所有预测压向"指状中断",碎片、划痕这类类别AP趋近于0。我们的组合拳是:类别加权损失给罕见缺陷更高的权重,配合ImageNet预训练权重做迁移学习。效果是常见类别AP略降不到1个点,但scratch从几乎不可用提到了能上线的水平。如果算力允许,对少数类做过采样也是同样有效的路子。
踩坑五:评估口径不统一,跑了个寂寞
AP50-5-95.py的原理是在0.50~0.95之间按0.05步长循环10次,每次算一遍mAP再取平均,输出AP50_5_95。跑之前要建好两个目录:input/ground-truth/(标注TXT)和input/detection-results/(预测TXT,每行"类别 置信度 xmin ymin xmax ymax"),且文件名必须和图片ID一一对应,缺一个文件就报错退出。我们当时因为检测结果里多了几张图,被"Error. File not found"卡了半天。
图2:真实检测场景下的EL图像集合,缺陷与无缺陷样本同框对比,直观感受模型要面对的复杂背景
效果验证:用数字说话
全链路跑通后,我们拿到的结果是这样的:
- 罕见缺陷检测:采用BAF-Detector路线,罕见缺陷F1达到0.89,这是单靠通用检测器很难够到的水平;
- 检测效率:从人工的每分钟2~3片提升到每分钟10~12片,提升约400%;
- 漏检率:从人工的2%~5%压到0.3%以下,且系统24小时连续运行,不受疲劳影响;
- 工艺溯源价值:有晶硅厂商根据缺陷空间分布反推工艺环节,把"指状中断"缺陷率降低了62%,年节省成本超过500万元。
| 指标 | 人工目检 | PVEL-AD方案 |
|---|---|---|
| 检测速度 | 2~3片/分钟 | 10~12片/分钟 |
| 漏检率 | 2%~5% | 0.3%以下 |
| 连续工作时间 | 受疲劳限制 | 24小时 |
| 缺陷定位返工 | 依赖经验 | 边界框自动输出 |
数字背后有个关键认知:AI质检最大的价值不在替代人,而在把"人眼疲劳导致的随机漏检"变成"可量化、可追溯、可优化的固定指标"。
最容易翻车的5个坑,每个都有现成解法
- 数据申请被退回:务必用机构邮箱,表单手写签名加日期,走Google Drive就附上谷歌账号,一般两周内回复;
- 翻转增强不同步:图像和XML必须一起处理,x坐标做镜像映射,y坐标不动,改完先抽查几张再开训;
- 长尾类别训崩:类别加权损失、少数类过采样、预训练迁移三者至少用其一,别拿原始分布硬训;
- 评估脚本报错:
input/ground-truth/和input/detection-results/两个目录缺一不可,文件名与图片ID严格对应; - 指标口径混乱:统一用
AP50-5-95.py的IoU 0.50~0.95均值作为对外口径,别只报一个AP50糊弄自己。
收尾:给决策者和开发者各一句话
给决策者:别急着上全套系统,先拿一条产线、一批EL图、一个最小模型跑POC,把"漏检率0.3%"变成你自己产线上的数字,再谈规模化。
给开发者:从仓库三件套脚本起步,先把标注转换、增强、评估这条链路跑通,再换模型——数据链路不稳,模型再花哨也是空中楼阁。
光伏检测只是第一站。EL图像、红外热像、可见光多模态融合,时序分析做预测性维护,可解释AI反推工艺根因,这套方法论完全可以迁移到半导体、锂电池等同样被长尾缺陷困扰的制造领域。数据是起点,链路是门槛,真正拉开差距的,是你能不能把缺陷数据变成工艺决策。
【免费下载链接】PVEL-ADPhotovoltaic cell defect detection项目地址: https://gitcode.com/gh_mirrors/pv/PVEL-AD
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考