深度学习yolov8模型训练输电线杆塔螺栓缺失检测数据集 训练用于输电线杆塔螺栓识别YOLOv8模型 建立基于深度学习输电线电线塔杆塔螺栓识别 检测缺失螺丝 正向/侧向螺丝
杆塔螺栓识别数据集
3分类
noscrew 缺失螺丝
screw 正向螺丝
sidescrew 侧向螺丝
图片857张。数据集按9:1分配。训练集771张,验证集86张。图片像素640*640。
1
1
使用YOLOv8训练杆塔螺栓识别的数据集,基于训练好的权重进行推理,。环境准备、数据组织、模型训练到推理的完整流程。
一、环境准备
首先确保安装了必要的Python包:
pip install ultralytics opencv-python matplotlib numpy
二、数据组织
确保数据集按照以下结构组织:
tower_bolt_dataset/
├── images/
│ ├── train/
│ └── val/
├── labels/
│ ├── train/
│ └── val/
└── data.yaml
images/train/
和labels/train/
分别存放训练图像及其对应的标签文件。images/val/
和labels/val/
分别存放验证图像及其对应的标签文件。
每个图像都需要有一个对应的.txt
文件,格式为:class_id center_x center_y width height
,所有坐标归一化到[0,1]。
三、创建 data.yaml
文件
在项目根目录下创建 data.yaml
文件,内容如下:
train: ./tower_bolt_dataset/images/train
val: ./tower_bolt_dataset/images/val
nc: 3
names: ['noscrew', 'screw', 'sidescrew']
四、模型训练
使用YOLOv8进行模型训练的代码示例如下:
from ultralytics import YOLO
# 加载YOLOv8模型架构配置或预训练模型
model = YOLO('yolov8s.yaml') # 根据需求选择不同大小的模型如'n', 'm', 'l', 'x'
# 开始训练
results = model.train(
data='./tower_bolt_dataset/data.yaml',
epochs=100, # 可以根据需要调整epoch数
imgsz=640,
batch=16,
name='tower_bolt_train',
project='runs/tower_bolt',
exist_ok=True,
device=0 if torch.cuda.is_available() else 'cpu'
)
# 保存最佳权重
best_weights_path = model.save('./tower_bolt_best.pt')
print(f"Best weights saved to {best_weights_path}")
五、模型验证与性能评估
训练完成后,可以使用以下代码来评估模型在验证集上的表现:
from ultralytics import YOLO
# 加载训练好的模型
model = YOLO('./tower_bolt_best.pt')
# 在验证集上评估
metrics = model.val()
# 打印关键指标
print(f"mAP@0.5:0.95: {metrics.box.map:.4f}")
print(f"mAP@0.5: {metrics.box.map50:.4f}")
print(f"Recall: {metrics.box.recall.mean():.4f}")
print(f"Precision: {metrics.box.precision.mean():.4f}")
六、单图推理 + 结果可视化
下面是如何对单张图片进行推理并显示结果:
from ultralytics import YOLO
import cv2
def detect_and_show(image_path):
model = YOLO('./tower_bolt_best.pt')
results = model.predict(source=image_path, conf=0.25)
for result in results:
im_array = result.plot()
im = cv2.cvtColor(im_array, cv2.COLOR_RGB2BGR)
cv2.imshow("Detection Result", im)
cv2.waitKey(0)
cv2.destroyAllWindows()
# 测试一张图片
detect_and_show('path/to/test_image.jpg')
七、批量推理并保存结果
如果需要对一批图片进行推理并将结果保存:
from ultralytics import YOLO
model = YOLO('./tower_bolt_best.pt')
# 批量处理指定文件夹下的图片,并保存结果
model.predict(
source='./tower_bolt_dataset/images/val',
save=True,
project='runs/tower_bolt/predictions',
name='val_results',
conf=0.25
)
成功地训练一个用于杆塔螺栓识别的YOLOv8模型,并能够基于该模型对新的图片进行推理和结果展示