电气类电网输电线异物检测任务的实现 通过yolov8训练输电线异物检测数据集 建立基于深度学习yolov8卷积神经网络的输电线异物检测 检测鸟巢 风筝 气球 垃圾进行检测

电气类电网输电线异物检测任务的实现 通过yolov8训练输电线异物检测数据集 建立基于深度学习yolov8卷积神经网络的输电线异物检测


以下文字及代码仅供参考。
在这里插入图片描述

、输电线异物检测数据集,输电线异物检测

1300,jpg和xml相对应

可转化为txt文件
在这里插入图片描述
基于 YOLOv8 的输电线异物检测数据集的完整实现流程。我们将从数据准备、格式转换、数据划分、环境搭建、数据配置、模型训练、超参数配置、模型推理、批量推理和性能评估等方面详细说明,仅供参考

在这里插入图片描述

1. 数据准备

数据集结构

假设数据集目录结构如下:

dataset/
├── images/
│   ├── img1.jpg
│   ├── img2.jpg
│   └── ...
├── labels_voc/
│   ├── img1.xml
│   ├── img2.xml
│   └── ...
  • 每张图片对应一个标注文件(VOC格式:xml)。
  • 标注类别:例如 foreign_object 表示异物。

2. 格式转换

将 VOC 格式的标注文件转换为 YOLO 格式(txt 文件):

import os
import xml.etree.ElementTree as ET

def convert_voc_to_yolo(voc_dir, yolo_dir, classes):
    if not os.path.exists(yolo_dir):
        os.makedirs(yolo_dir)

    for xml_file in os.listdir(voc_dir):
        tree = ET.parse(os.path.join(voc_dir, xml_file))
        root = tree.getroot()

        size = root.find('size')
        w = int(size.find('width').text)
        h = int(size.find('height').text)

        with open(os.path.join(yolo_dir, os.path.splitext(xml_file)[0] + '.txt'), 'w') as f:
            for obj in root.findall('object'):
                cls = obj.find('name').text
                if cls not in classes:
                    continue
                cls_id = classes.index(cls)
                bbox = obj.find('bndbox')
                xmin = int(bbox.find('xmin').text)
                ymin = int(bbox.find('ymin').text)
                xmax = int(bbox.find('xmax').text)
                ymax = int(bbox.find('ymax').text)

                x_center = (xmin + xmax) / 2.0 / w
                y_center = (ymin + ymax) / 2.0 / h
                width = (xmax - xmin) / w
                height = (ymax - ymin) / h

                f.write(f"{cls_id} {x_center:.6f} {y_center:.6f} {width:.6f} {height:.6f}\n")

# 类别列表
classes = ['foreign_object']
convert_voc_to_yolo('dataset/labels_voc', 'dataset/labels_yolo', classes)

3. 数据划分

将数据集划分为训练集、验证集和测试集(如8:1:1):

import os
import random

def split_dataset(image_dir, train_ratio=0.8, val_ratio=0.1):
    images = [f for f in os.listdir(image_dir) if f.endswith('.jpg')]
    random.shuffle(images)

    train_num = int(len(images) * train_ratio)
    val_num = int(len(images) * val_ratio)

    train_images = images[:train_num]
    val_images = images[train_num:train_num + val_num]
    test_images = images[train_num + val_num:]

    return train_images, val_images, test_images

image_dir = 'dataset/images'
train_images, val_images, test_images = split_dataset(image_dir)

# 保存划分结果
with open('dataset/train.txt', 'w') as f:
    f.writelines([os.path.join(image_dir, img) + '\n' for img in train_images])

with open('dataset/val.txt', 'w') as f:
    f.writelines([os.path.join(image_dir, img) + '\n' for img in val_images])

with open('dataset/test.txt', 'w') as f:
    f.writelines([os.path.join(image_dir, img) + '\n' for img in test_images])

4. 环境搭建

安装 YOLOv8 所需依赖库:

pip install ultralytics

5. 数据配置

创建 YOLOv8 的数据配置文件 data.yaml

train: dataset/train.txt
val: dataset/val.txt
test: dataset/test.txt

nc: 1  # 类别数量
names: ['foreign_object']  # 类别名称

6. 模型训练

使用 YOLOv8 进行训练:

from ultralytics import YOLO

# 加载预训练模型
model = YOLO('yolov8n.pt')  # 可选择 yolov8s, yolov8m, yolov8l, yolov8x

# 开始训练
model.train(data='data.yaml', epochs=50, imgsz=640, batch=16, name='powerline_foreign_object')

7. 配置超参数

model.train() 中调整以下参数:

  • epochs: 训练轮数。
  • imgsz: 输入图像尺寸。
  • batch: 批次大小。
  • name: 实验名称。

8. 模型推理

加载训练好的模型进行推理:

from PIL import Image
import torch

# 加载模型
model = YOLO('runs/detect/powerline_foreign_object/weights/best.pt')

# 推理函数
def detect(image_path):
    results = model(image_path)
    for result in results:
        im_array = result.plot()  # 绘制检测结果
        im = Image.fromarray(im_array[..., ::-1])  # BGR to RGB
        im.show()

detect('dataset/images/img1.jpg')

9. 批量推理

对测试集进行批量推理:

import glob

test_images = glob.glob('dataset/images/*.jpg')
for img_path in test_images:
    detect(img_path)

10. 性能评估

使用 mAP 和其他指标评估模型性能:

# 使用验证集评估模型
metrics = model.val()
print(metrics)

总结

基于 YOLOv8 的输电线异物检测任务的完整实现流程。通过数据准备、格式转换、数据划分、环境搭建、数据配置、模型训练、超参数配置、模型推理、批量推理和性能评估,同学可以快速构建并部署一个高效的输电线异物检测系统。

仅供参考。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值