news 2026/4/23 23:46:40

采用深度学习方法进行图像缺陷检测_使用ResNet50预训练模型来对 太阳能电池板缺陷数据集 12类的缺陷类型进行检测

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
采用深度学习方法进行图像缺陷检测_使用ResNet50预训练模型来对 太阳能电池板缺陷数据集 12类的缺陷类型进行检测

采用深度学习方法进行图像缺陷检测_使用ResNet50预训练模型来对 太阳能电池板缺陷数据集 12类的缺陷类型进行检测

文章目录

      • 1. 数据理解与准备
        • 加载和解析XML标签文件
      • 2. 数据预处理
        • 图像预处理
      • 3. 模型选择与训练
      • 4. 模型评估与优化
      • 5. 测试与推理
      • 特定缺陷类型的处理

太阳能电池板缺陷数据集

crack:裂缝
finger:指状物;(常指不好的)痕迹 (具体含义需结合语境,在电子元件等领域可能指引脚等)
black core:黑心(比如材料内部出现黑色的核心部分)
thick line:粗线
star crack:星状裂纹
corner:角落;拐角处;(物体的)角
fragment:碎片;片段
scratch:划痕;刮痕
horizontal dislocation:水平错位
vertical dislocation:垂直错位
printing_error:印刷错误
short circuit:短路

文字及代码仅供参考。

4500张带标签的

4500张带标签的太阳能电池板缺陷数据集,XML格式,采用深度学习方法进行图像分类和缺陷检测。

1. 数据理解与准备

加载和解析XML标签文件

首先,我们需要加载并解析原始图像及其对应的XML标签文件,以提取出每个图像中的缺陷信息。

importosimportxml.etree.ElementTreeasETimportnumpyasnpfromPILimportImageimportmatplotlib.pyplotaspltfromsklearn.preprocessingimportLabelEncoderfromtensorflow.keras.utilsimportto_categorical# 定义函数加载图像和解析XML标签defload_images_and_parse_xml(image_folder,xml_folder):images=[]labels=[]forfilenameinos.listdir(image_folder):iffilename.endswith(".jpg")orfilename.endswith(".png"):# 根据文件类型调整img_path=os.path.join(image_folder,filename)xml_filename=os.path.splitext(filename)[0]+'.xml'xml_path=os.path.join(xml_folder,xml_filename)img=Image.open(img_path).convert('RGB')img_array=np.array(img)images.append(img_array)tree=ET.parse(xml_path)root=tree.getroot()defect_type=root.find('object').find('name').text# 假设一个图像只有一个缺陷类型labels.append(defect_type)returnnp.array(images),np.array(labels)# 加载图像和解析XML标签image_folder='path/to/images'xml_folder='path/to/xml_labels'images,labels=load_images_and_parse_xml(image_folder,xml_folder)# 查看样本图像及其标签plt.imshow(images[0])plt.title(f'Label:{labels[0]}')plt.show()# 编码标签le=LabelEncoder()encoded_labels=le.fit_transform(labels)categorical_labels=to_categorical(encoded_labels)# 显示标签映射print("Label Mapping:",dict(zip(le.classes_,range(len(le.classes_)))))

2. 数据预处理

图像预处理
  • 调整大小:确保所有图像都具有相同的尺寸。
  • 归一化:将像素值缩放到[0, 1]范围。
  • 数据增强:通过旋转、翻转、亮度调整等操作来增加数据多样性。
fromtensorflow.keras.preprocessing.imageimportImageDataGenerator# 调整大小target_size=(224,224)# 根据模型需求调整resized_images=[np.array(Image.fromarray(img).resize(target_size))forimginimages]resized_images=np.array(resized_images)# 归一化normalized_images=resized_images/255.0# 数据增强datagen=ImageDataGenerator(rotation_range=20,width_shift_range=0.2,height_shift_range=0.2,horizontal_flip=True,brightness_range=[0.8,1.2])# 应用数据增强augmented_images=datagen.flow(normalized_images,categorical_labels,batch_size=len(normalized_images)).next()[0]# 分割数据集fromsklearn.model_selectionimporttrain_test_split X_train,X_test,y_train,y_test=train_test_split(augmented_images,categorical_labels,test_size=0.2,random_state=42)

3. 模型选择与训练

我们可以使用卷积神经网络(CNN)进行分类任务。这里我们选择使用ResNet50预训练模型,并在顶部添加自定义分类层。

fromtensorflow.keras.applicationsimportResNet50fromtensorflow.keras.modelsimportSequentialfromtensorflow.keras.layersimportDense,GlobalAveragePooling2D# 创建模型base_model=ResNet50(weights='imagenet',include_top=False,input_shape=(224,224,3))model=Sequential([base_model,GlobalAveragePooling2D(),Dense(128,activation='relu'),Dense(len(le.classes_),activation='softmax')])# 冻结基础模型的层forlayerinbase_model.layers:layer.trainable=False# 编译模型model.compile(optimizer='adam',loss='categorical_crossentropy',metrics=['accuracy'])# 训练模型history=model.fit(X_train,y_train,validation_data=(X_test,y_test),epochs=10,batch_size=32)

4. 模型评估与优化

评估模型性能,并尝试调整超参数或引入更多特征来提高模型的表现。

# 在测试集上评估模型test_loss,test_accuracy=model.evaluate(X_test,y_test)print(f'Test Loss:{test_loss}, Test Accuracy:{test_accuracy}')

5. 测试与推理

在测试集上评估模型表现,并保存最佳模型用于后续的推理任务。

# 使用模型进行预测predictions=model.predict(X_test)# 将预测结果反编码回原始标签predicted_labels=le.inverse_transform(np.argmax(predictions,axis=1))# 显示预测结果foriinrange(3):# 显示前三个样本的预测结果plt.figure(figsize=(6,2))plt.subplot(1,2,1)plt.imshow(X_test[i])plt.title(f'Prediction:{predicted_labels[i]}')plt.subplot(1,2,2)plt.imshow(X_test[i])plt.title(f'Ground Truth:{le.inverse_transform([np.argmax(y_test[i])])[0]}')plt.show()

注意事项 - XML标签解析

对于XML标签,以下是一些额外的建议:

  • 多缺陷实例:如果一个图像中存在多个缺陷实例,确保正确解析每个对象的标签信息,并根据需要进行多标签分类。

  • 边界框信息:如果XML文件包含边界框(bounding box)信息,可以在模型中加入目标检测模块(如YOLO、Faster R-CNN),以便同时进行分类和定位。

  • 属性信息:一些XML标签可能包含额外的属性信息(如缺陷严重程度)。这些信息可以作为辅助特征,帮助提高模型的准确性。

特定缺陷类型的处理

对于特定的缺陷类型,以下是额外的建议:

  • 裂缝 (crack)星状裂纹 (star crack):可以通过边缘检测滤波器增强这类特征,或者使用专门的目标检测模型来识别不规则形状。

  • 指状物 (finger):如果指的是电池板上的电极引线,注意它们的形态和位置,避免误分类。可以利用形态学操作来突出这些特征。

  • 黑心 (black core):这种缺陷通常位于材料内部,可以通过多光谱成像技术捕捉更深层次的信息。

  • 粗线 (thick line)划痕 (scratch):这些缺陷通常有明显的纹理特征,可以通过纹理分析算法辅助分类。

  • 角落 (corner)碎片 (fragment):注意图像裁剪时保持完整性和一致性,避免因裁剪导致的误分类。

  • 水平错位 (horizontal dislocation)垂直错位 (vertical dislocation):可以通过几何变换增强模型对位置变化的鲁棒性。

  • 印刷错误 (printing_error)短路 (short circuit):这些缺陷可能涉及复杂的电路结构,确保有足够的样本覆盖所有可能的情况。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/23 23:46:24

GitHub 爆火:开源 ML 工程师,自动读论文训模型,Star 破 2 千

最近,GitHub 上一个名为 huggingface/ml-intern 的项目悄然走红,迅速攀升至趋势榜前列。作为一个由 Hugging Face 团队推出的实验性项目,它以其独特的定位——“开源 ML 工程师”,在短短时间内收获了超过 2270 个 Star 和 214 个 …

作者头像 李华
网站建设 2026/4/23 23:45:31

C++26 std::reflexpr深度解析(2024标准委员会内部验证版)

第一章:C26 std::reflexpr的演进脉络与核心语义 std::reflexpr 是 C26 标准中正式引入的核心反射设施,标志着编译时元编程从宏与模板特化驱动迈向原生、类型安全、语法一致的反射范式。其设计并非凭空而来,而是深度整合了 ISO C WG21 反射工作…

作者头像 李华
网站建设 2026/4/23 23:44:23

从‘玄学’到科学:一张图看懂PID中P和I参数的‘安全区’怎么画

从‘玄学’到科学:一张图看懂PID中P和I参数的‘安全区’怎么画 第一次接触PID控制器时,很多工程师都有这样的困惑:为什么调整P和I参数时,系统时而稳定时而振荡?那些经验丰富的老师傅总说"凭感觉调"&#xff…

作者头像 李华