航空影像的输电线路与输电塔分割数据集。
该数据集包含1234张图像,超高分辨率(约3840×2160)标注了11447个对象,
属于5个不同的类别,包括电缆(cable)、铁塔(tower_lattice)、木塔(tower_wooden)以及其他两种类型:混凝土或钢结构混合塔(tower_tucohy)和空白肉眼不可见线缆(void)
实时监控系统集成示例
import cv2
import torch
from detectron2.config import get_cfg
from detectron2.modeling import build_model
from detectron2.checkpoint import DetectionCheckpointer
from detectron2.data import MetadataCatalog, DatasetCatalog
from detectron2.utils.visualizer import Visualizer
from detectron2.data.datasets import register_coco_instances
# 注册数据集
register_coco_instances("powerline_train", {}, "./aerial_powerline_dataset/annotations/instances_default.json", "./aerial_powerline_dataset/images")
register_coco_instances("powerline_val", {}, "./aerial_powerline_dataset/annotations/instances_default.json", "./aerial_powerline_dataset/images")
# 加载配置文件
cfg = get_cfg()
cfg.merge_from_file("./config.yaml")
cfg.MODEL.WEIGHTS = "./output/model_final.pth" # 替换为你训练好的模型路径
cfg.MODEL.ROI_HEADS.SCORE_THRESH_TEST = 0.5 # 设置置信度阈值
# 构建模型
model = build_model(cfg)
DetectionCheckpointer(model).load(cfg.MODEL.WEIGHTS)
model.eval()
# 打开摄像头或视频流
cap = cv2.VideoCapture(0) # 0 表示默认摄像头,也可以是视频文件路径
while True:
ret, frame = cap.read()
if not ret:
break
# 进行预测
inputs = [{"image": torch.as_tensor(frame.transpose(2, 0, 1))}]
with torch.no_grad():
outputs = model(inputs)[0]
# 获取预测结果
boxes = outputs["instances"].pred_boxes.tensor.cpu().numpy()
scores = outputs["instances"].scores.cpu().numpy()
classes = outputs["instances"].pred_classes.cpu().numpy()
masks = outputs["instances"].pred_masks.cpu().numpy()
# 绘制边界框和掩码
metadata = MetadataCatalog.get("powerline_val")
v = Visualizer(frame[:, :, ::-1], metadata=metadata, scale=1.2)
out = v.draw_instance_predictions(outputs["instances"].to("cpu"))
# 显示结果图像
cv2.imshow('Aerial Powerline Detection', out.get_image()[:, :, ::-1])
# 检查按键退出
if cv2.waitKey(1) & 0xFF == ord('q'):
break
# 释放资源
cap.release()
cv2.destroyAllWindows()
`Detectron2来训练和测试航空影像的输电线路与输电塔分割数据集。以下是详细的步骤,包括数据集准备、训练、评估和可视化。
环境准备
首先,确保你已经安装了Detectron2和其他必要的Python库:
# 安装pytorch
pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118 # 根据你的CUDA版本选择合适的命令
# 安装detectron2
pip install detectron2 -f https://dl.fbaipublicfiles.com/detectron2/wheels/cu118/index.html # 根据你的CUDA版本选择合适的命令
# 安装其他必要的库
pip install numpy opencv-python-headless matplotlib pycocotools
数据集结构
假设你的数据集目录结构如下:
aerial_powerline_dataset/
├── images/
│ ├── img_00001.jpg
│ ├── img_00002.jpg
│ └── ...
└── annotations/
├── instances_default.json # COCO格式的标注文件
创建配置文件 config.yaml
我们需要创建一个配置文件来描述训练参数和数据集路径。Detectron2提供了许多预定义的配置文件,我们可以在此基础上进行修改。
注册数据集
我们需要注册数据集以便Detectron2能够找到并加载它们。
编写训练脚本
下面是一个完整的训练脚本,用于使用Mask R-CNN训练航空影像的输电线路与输电塔分割数据集:
运行训练脚本
将上述代码保存为一个Python文件(例如 train_aerial_powerline_maskrcnn.py),然后在终端中运行:
python train_aerial_powerline_maskrcnn.py --config-file config.yaml
解释
- 注册数据集: 使用
register_coco_instances函数注册训练和验证数据集。 - 设置日志记录器: 使用
setup_logger设置日志记录器。 - 配置文件: 使用
get_cfg加载配置文件,并根据需要进行调整。 - 自定义评估器: 继承
DefaultTrainer并重写build_evaluator方法以使用COCOEvaluator。 - 主函数: 设置参数、构建模型、加载权重、启动训练或评估。
可视化预测结果
使用 Detectron2 进行预测和可视化
Detectron2 提供了方便的工具来进行预测和可视化。以下是一个完整的脚本,用于加载训练好的模型并对测试集中的图像进行预测和可视化:
解释
- 注册数据集: 使用
register_coco_instances函数注册训练和验证数据集。 - 加载配置文件: 使用
get_cfg加载配置文件,并指定训练好的模型权重路径。 - 构建模型: 使用
build_model构建模型并加载权重。 - 测试集路径: 指定测试集图像路径。
- 创建输出目录: 创建用于保存结果图像的目录。
- 获取元数据: 获取数据集的元数据信息。
- 遍历测试集中的所有图像: 使用
Path('./aerial_powerline_dataset/images').glob('*.jpg')获取所有测试图像路径。 - 读取图像: 使用
cv2.imread()读取图像。 - 预测: 使用训练好的模型对图像进行预测。
- 可视化: 使用
Visualizer将预测结果绘制到图像上。 - 保存结果图像: 将处理后的图像保存到指定的输出目录。
运行脚本
将上述代码保存为一个Python文件(例如 evaluate_and_visualize_aerial_powerline_maskrcnn.py),然后在终端中运行:
python evaluate_and_visualize_aerial_powerline_maskrcnn.py
结果
运行脚本后,你会在 ./aerial_powerline_dataset/output 目录中看到带有预测结果的图像。这些图像会在检测到的输电线路和输电塔区域上绘制边界框、标签和掩码。
通过这些步骤,你可以全面地评估和可视化你的航空影像输电线路与输电塔分割模型的表现。如果需要进一步优化模型,可以根据评估结果调整超参数或增加数据增强技术。
部署到电力监控系统
为了将训练好的模型部署到电力监控系统中,可以按照以下步骤进行:
-
导出模型:
将训练好的YOLOv8模型导出为ONNX格式或其他适合部署的格式。python export.py --weights runs/segment/aerial_powerline_detection/exp/weights/best.pt --include onnx -
集成到监测系统:
将导出的模型集成到现有的电力监测系统中。这可能涉及到编写推理代码,使用OpenCV或其他库读取实时视频流,并进行预测。 -
实时监控:
实现一个实时监控系统,定期捕获航空影像并使用模型进行预测。如果检测到缺陷,触发警报机制。 -
警报机制:
设计一个警报机制,当检测到输电线路或输电塔缺陷时,自动发送通知给相关人员或机构。
以下是一个简单的示例,展示如何将训练好的模型集成到实时监控系统中:
解释
- 注册数据集: 使用
register_coco_instances函数注册训练和验证数据集。 - 加载配置文件: 使用
get_cfg加载配置文件,并指定训练好的模型权重路径。 - 构建模型: 使用
build_model构建模型并加载权重。 - 打开摄像头或视频流: 使用
cv2.VideoCapture(0)打开默认摄像头,或者传入视频文件路径。 - 实时预测: 在循环中不断读取帧并进行预测。
- 绘制边界框和掩码: 使用
Visualizer将预测结果绘制到图像上。 - 显示结果图像: 使用
cv2.imshow()显示处理后的图像。 - 检查按键退出: 按下 ‘q’ 键退出循环。
运行脚本
将上述代码保存为一个Python文件(例如 real_time_monitoring_aerial_powerline.py),然后在终端中运行:
python real_time_monitoring_aerial_powerline.py
结果
运行脚本后,你会看到一个实时监控窗口,其中会显示当前摄像头捕捉的画面,并在检测到的输电线路和输电塔区域上绘制边界框、标签和掩码。
通过这些步骤,你可以实现一个完整的航空影像输电线路与输电塔检测系统,提高电力设施的维护效率和安全性。
3437



被折叠的 条评论
为什么被折叠?



