如何使用深度学习框架处理输电线路铝导体复合芯线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射线扫描数据集的处理和训练。具体步骤包括:
- 数据加载与预处理。
- 数据划分。
- 构建 CNN 模型。
- 模型训练与评估。
- (可选)数据增强以提升性能。