使用深度学习框架CNN 处理输电线路铝导体复合芯线X射线扫描数据集_构建_基于X射线扫描数据集的ACCC铝导体复合芯线自动缺陷检测研究

如何使用深度学习框架处理输电线路铝导体复合芯线X射线扫描数据集_实现对_基于X射线扫描数据集的ACCC铝导体复合芯线自动缺陷检测研究


在这里插入图片描述

输电线路铝导体复合芯线X射线扫描数据集 3万多+6类缺陷
在这里插入图片描述

铝导体复合芯线 (ACCC) 提供 X 射线扫描数据集,用于ACCC 自动缺陷检测研究。
数据集包括有缺陷和无缺陷的示例。原始数据是通过一个自设计的攀线机器人收集的,该机器人配备了X射线源和平面探测器,由小型工业控制系统驱动。一旦在实验室和网上收集原始数据,感兴趣的区域就会自动被剪断。剪裁的数据通过 WIFI 传输到高性能便携式 PC,之后自动执行对比度和亮度的规范化。数据采集在江苏省进行。数据集包含original数据和normalized数据
在这里插入图片描述
1
在这里插入图片描述
1
在这里插入图片描述
1
在这里插入图片描述
1
在这里插入图片描述
在这里插入图片描述

标题:基于X射线扫描数据集的ACCC铝导体复合芯线自动缺陷检测研究


1. 数据集准备与预处理

1.1 数据目录结构

假设解压后的数据集目录结构如下:

dataset/
├── fracture/
│   ├── img1.jpg
│   ├── img2.jpg
│   └── ...
├── normal/
│   ├── img1.jpg
│   ├── img2.jpg
│   └── ...
├── sawing/
│   ├── img1.jpg
│   ├── img2.jpg
│   └── ...
├── shifting/
│   ├── img1.jpg
│   ├── img2.jpg
│   └── ...
├── splitting/
│   ├── img1.jpg
│   ├── img2.jpg
│   └── ...
1.2 数据加载与预处理

将图像加载并进行必要的预处理,如归一化、调整尺寸等。

import os
import cv2
import numpy as np
from tensorflow.keras.utils import to_categorical

def load_images_from_folder(folder, target_size=(256, 256)):
    images = []
    for filename in sorted(os.listdir(folder)):
        if filename.endswith(".jpg"):
            img_path = os.path.join(folder, filename)
            img = cv2.imread(img_path, cv2.IMREAD_GRAYSCALE)  # 灰度读取
            img_resized = cv2.resize(img, target_size) / 256.0  # 归一化到 [0, 1]
            images.append(img_resized)
    return np.array(images)

def load_dataset(data_dir, classes, target_size=(256, 256)):
    X = []
    y = []
    for i, class_name in enumerate(classes):
        folder = os.path.join(data_dir, class_name)
        images = load_images_from_folder(folder, target_size)
        labels = np.full((images.shape[0],), i)
        X.extend(images)
        y.extend(labels)
    return np.array(X), np.array(y)

# 示例:加载数据
data_dir = 'dataset'
classes = ['fracture', 'normal', 'sawing', 'shifting', 'splitting']
X, y = load_dataset(data_dir, classes)
y = to_categorical(y, num_classes=len(classes))  # 转换为 one-hot 编码
print(f"Loaded {len(X)} images and labels")

2. 数据划分

将数据划分为训练集、验证集和测试集,比例为 8:1:1。

from sklearn.model_selection import train_test_split

# 划分数据集
X_train, X_temp, y_train, y_temp = train_test_split(X, y, test_size=0.2, random_state=42)
X_val, X_test, y_val, y_test = train_test_split(X_temp, y_temp, test_size=0.5, random_state=42)

print(f"Train: {len(X_train)}, Val: {len(X_val)}, Test: {len(X_test)}")

3. 模型选择与构建

3.1 CNN 模型

使用卷积神经网络(CNN)进行分类任务。

from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Conv2D, MaxPooling2D, Flatten, Dense, Dropout

def build_cnn(input_shape=(256, 256, 1), num_classes=6):
    model = Sequential([
        Conv2D(32, (3, 3), activation='relu', input_shape=input_shape),
        MaxPooling2D((2, 2)),
        Conv2D(64, (3, 3), activation='relu'),
        MaxPooling2D((2, 2)),
        Conv2D(128, (3, 3), activation='relu'),
        MaxPooling2D((2, 2)),
        Flatten(),
        Dense(128, activation='relu'),
        Dropout(0.5),
        Dense(num_classes, activation='softmax')
    ])
    return model

# 创建 CNN 模型
model = build_cnn()
model.summary()

4. 模型编译与训练

from tensorflow.keras.optimizers import Adam
from tensorflow.keras.losses import CategoricalCrossentropy

# 编译模型
model.compile(optimizer=Adam(learning_rate=1e-4),
              loss=CategoricalCrossentropy(),
              metrics=['accuracy'])

# 训练模型
history = model.fit(
    X_train, y_train,
    validation_data=(X_val, y_val),
    batch_size=32,  # 根据显存调整
    epochs=50,
    verbose=1
)

5. 模型评估

5.1 在测试集上评估
# 评估模型
test_loss, test_acc = model.evaluate(X_test, y_test)
print(f"Test Loss: {test_loss}, Test Accuracy: {test_acc}")
5.2 可视化预测结果
import matplotlib.pyplot as plt

def visualize_predictions(model, X_test, y_test, classes, num_samples=3):
    for i in range(num_samples):
        img = X_test[i]
        true_label = np.argmax(y_test[i])
        pred_prob = model.predict(np.expand_dims(img, axis=0))[0]
        pred_label = np.argmax(pred_prob)

        # 显示结果
        plt.imshow(img.squeeze(), cmap='gray')
        plt.title(f'True: {classes[true_label]}, Pred: {classes[pred_label]}')
        plt.show()

visualize_predictions(model, X_test, y_test, classes)

6. 总结

通过上述步骤,您可以完成输电线路铝导体复合芯线(ACCC)X射线扫描数据集的处理和训练。具体步骤包括:

  1. 数据加载与预处理。
  2. 数据划分。
  3. 构建 CNN 模型。
  4. 模型训练与评估。
  5. (可选)数据增强以提升性能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值