输电线路语义分割图像数据集,图片总共1200张左右,包含分割标签,json标签

news2024/11/30 1:51:15

 

输电线路语义分割图像数据集,图片总共1200张左右,包含分割标签,json标签

输电线路语义分割图像数据集介绍

数据集概述

名称:输电线路语义分割图像数据集
图片数量:约1200张
标注格式:JSON (包含像素级分割标签)
类别

  • 背景 (Background)
  • 输电线路 (Transmission Line)
  • 其他相关对象(如绝缘子、杆塔等,具体类别根据数据集定义)

用途:用于输电线路的语义分割任务,适用于电力系统的安全监控、维护和故障预防等。该数据集特别适合基于深度学习的语义分割模型。

数据集特点
  • 规模:包含约1200张高分辨率图像,每张图像都带有详细的像素级分割标签。
  • 多样性:图像涵盖了不同的光照条件(白天、夜晚)、天气状况(晴天、阴天、雨天)、背景环境(城市、乡村、山地)以及不同类型的输电线路及相关对象,以确保模型能够适应多样的实际场景。
  • 标注质量:每张图像都有精确的手动标注,确保了高质量的训练数据。
  • 标注格式
    • JSON格式:每个图像的分割标签存储在一个JSON文件中,包含像素级别的分类信息。
标注信息
  • JSON格式
    {
        "image_filename": "image_0001.jpg",
        "width": 800,
        "height": 600,
        "annotations": [
            {
                "category_id": 1,
                "segmentation": [
                    [100, 100, 150, 100, 150, 150, 100, 150],
                    [200, 200, 250, 200, 250, 250, 200, 250]
                ]
            },
            {
                "category_id": 2,
                "segmentation": [
                    [300, 300, 350, 300, 350, 350, 300, 350]
                ]
            }
        ]
    }
    解释:"category_id" 表示类别的ID,"segmentation" 包含边界点的坐标列表,用于描述每个对象的轮廓。
应用领域
  • 电力系统安全监控:自动检测并报告输电线路的状态,提高电力系统的安全性。
  • 维护与故障预防:及时发现潜在的安全隐患,辅助进行定期维护和故障预防。
  • 智能巡检:结合无人机或地面机器人,实现自动化巡检,减少人工成本。
  • 数据分析:通过数据分析,提供关于输电线路状态的统计报告,优化维护策略。
获取方式

通常情况下,研究人员可以通过官方提供的链接或相关机构网站下载该数据集。请注意,使用时应遵循相应的许可协议和引用要求。

关键代码示例
1. 下载数据集

假设我们已经有了数据集的下载链接,可以使用 Python 的 requests 库来下载数据集:

import requests
import os

# 定义下载链接和保存路径
url = 'http://example.com/path/to/transmission_line_segmentation_dataset.zip'  # 替换为实际的下载链接
save_path = './transmission_line_segmentation_dataset.zip'

# 检查是否已经下载过
if not os.path.exists(save_path):
    print("Downloading dataset...")
    response = requests.get(url, stream=True)
    with open(save_path, 'wb') as f:
        for chunk in response.iter_content(chunk_size=8192):
            if chunk:
                f.write(chunk)
    print("Download complete.")
else:
    print("Dataset already exists.")

# 解压数据集
import zipfile
with zipfile.ZipFile(save_path, 'r') as zip_ref:
    zip_ref.extractall('./transmission_line_segmentation_dataset')
2. 解析 JSON 格式的标注文件

以下是一个解析 JSON 格式标注文件的函数:

import json
import numpy as np

def parse_json_annotation(anno_file, height, width):
    with open(anno_file, 'r') as f:
        data = json.load(f)

    segmentation_mask = np.zeros((height, width), dtype=np.uint8)

    for annotation in data['annotations']:
        category_id = annotation['category_id']
        for segment in annotation['segmentation']:
            points = np.array(segment).reshape(-1, 2)
            cv2.fillPoly(segmentation_mask, [points], category_id)

    return segmentation_mask
3. 加载图像并显示分割掩码

我们可以使用 OpenCV 来加载图像,并使用 Matplotlib 来显示图像及其分割掩码:

import cv2
import matplotlib.pyplot as plt

def load_image(image_path):
    return cv2.imread(image_path)

def display_image_with_mask(image, mask):
    fig, axs = plt.subplots(1, 2, figsize=(12, 6))
    
    # 显示原始图像
    axs[0].imshow(cv2.cvtColor(image, cv2.COLOR_BGR2RGB))
    axs[0].set_title('Original Image')
    axs[0].axis('off')
    
    # 显示分割掩码
    cmap = plt.cm.get_cmap('tab20', 20)  # 假设有20个类别
    axs[1].imshow(mask, cmap=cmap, vmin=0, vmax=20)
    axs[1].set_title('Segmentation Mask')
    axs[1].axis('off')
    
    plt.show()

# 示例用法
image_path = './transmission_line_segmentation_dataset/images/image_0001.jpg'
anno_path = './transmission_line_segmentation_dataset/annotations/image_0001.json'

image = load_image(image_path)
height, width, _ = image.shape
mask = parse_json_annotation(anno_path, height, width)
display_image_with_mask(image, mask)
4. 使用数据集进行训练

如果您打算使用这个数据集进行深度学习模型的训练,可以使用 PyTorch 或 TensorFlow 等框架。以下是一个简单的 PyTorch DataLoader 示例:

import torch
from torch.utils.data import Dataset, DataLoader
from PIL import Image
import numpy as np

class TransmissionLineSegmentationDataset(Dataset):
    def __init__(self, image_dir, anno_dir, transform=None):
        self.image_dir = image_dir
        self.anno_dir = anno_dir
        self.transform = transform
        self.images = os.listdir(image_dir)

    def __len__(self):
        return len(self.images)

    def __getitem__(self, idx):
        img_name = self.images[idx]
        image = Image.open(os.path.join(self.image_dir, img_name)).convert("RGB")
        anno_name = img_name.replace('.jpg', '.json')
        anno_path = os.path.join(self.anno_dir, anno_name)
        
        image_np = np.array(image)
        image_height, image_width, _ = image_np.shape
        mask = parse_json_annotation(anno_path, image_height, image_width)
        
        if self.transform:
            image = self.transform(image)
            mask = self.transform(mask)
        
        return image, mask

# 创建 DataLoader
dataset = TransmissionLineSegmentationDataset(
    image_dir='./transmission_line_segmentation_dataset/images',
    anno_dir='./transmission_line_segmentation_dataset/annotations'
)
dataloader = DataLoader(dataset, batch_size=4, shuffle=True, num_workers=2)

# 遍历数据
for images, masks in dataloader:
    # 在这里进行模型训练
    pass
语义分割模型训练

为了使用深度学习模型进行语义分割,您可以选择一些常用的语义分割架构,例如 U-Net、DeepLabV3+ 或者 FCN。以下是使用 PyTorch 和 U-Net 进行训练的一个简单示例:

  1. 安装依赖库

    pip install torch torchvision
  2. 准备数据集配置文件: 将数据集转换为PyTorch所需的格式,并创建配置文件(例如 config.yaml):

    train: ./transmission_line_segmentation_dataset/train/images
    val: ./transmission_line_segmentation_dataset/val/images
    test: ./transmission_line_segmentation_dataset/test/images
    num_classes: 20  # 类别数
  3. 定义 U-Net 模型

    import torch.nn as nn
    
    class UNet(nn.Module):
        def __init__(self, num_classes):
            super(UNet, self).__init__()
            self.encoder = nn.Sequential(
                nn.Conv2d(3, 64, kernel_size=3, padding=1),
                nn.ReLU(inplace=True),
                nn.Conv2d(64, 64, kernel_size=3, padding=1),
                nn.ReLU(inplace=True),
                nn.MaxPool2d(kernel_size=2, stride=2)
            )
            self.decoder = nn.Sequential(
                nn.ConvTranspose2d(64, 64, kernel_size=2, stride=2),
                nn.ReLU(inplace=True),
                nn.Conv2d(64, 64, kernel_size=3, padding=1),
                nn.ReLU(inplace=True),
                nn.Conv2d(64, num_classes, kernel_size=1)
            )
    
        def forward(self, x):
            x = self.encoder(x)
            x = self.decoder(x)
            return x
  4. 训练模型: 使用 PyTorch 进行训练:

    import torch
    from torch.optim import Adam
    from torch.nn import CrossEntropyLoss
    
    # 初始化模型、损失函数和优化器
    model = UNet(num_classes=20)
    criterion = CrossEntropyLoss()
    optimizer = Adam(model.parameters(), lr=0.001)
    
    # 训练循环
    num_epochs = 50
    for epoch in range(num_epochs):
        model.train()
        for images, masks in dataloader:
            optimizer.zero_grad()
            outputs = model(images)
            loss = criterion(outputs, masks)
            loss.backward()
            optimizer.step()
        
        print(f"Epoch [{epoch+1}/{num_epochs}], Loss: {loss.item():.4f}")
    
    # 保存模型
    torch.save(model.state_dict(), 'unet_model.pth')
  5. 评估模型: 训练完成后,可以使用验证集进行评估

    model.eval()
    with torch.no_grad():
        for images, masks in val_dataloader:
            outputs = model(images)
            # 进行评估(例如计算IoU、mIoU等)
  6. 推理测试: 使用训练好的模型进行推理测试:

    model.load_state_dict(torch.load('unet_model.pth'))
    model.eval()
    with torch.no_grad():
        for images, _ in test_dataloader:
            outputs = model(images)
            # 处理输出结果

通过上述步骤,您将拥有一个完整的输电线路语义分割系统,包括数据集、预训练模型和相关的训练流程。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2215386.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

中小型医院网站:Spring Boot开发策略

2 相关技术简介 2.1 Java技术 Java是一种非常常用的编程语言,在全球编程语言排行版上总是前三。在方兴未艾的计算机技术发展历程中,Java的身影无处不在,并且拥有旺盛的生命力。Java的跨平台能力十分强大,只需一次编译,…

迅速入门Pytorch深度学习框架

一、引言 随着人工智能技术的飞速发展,深度学习已成为当今科技领域的热门话题。PyTorch作为一款功能强大且易于使用的深度学习框架,受到了越来越多开发者和研究者的青睐。本文旨在帮助新手快速入门PyTorch,掌握其基本概念、核心功能以及实际…

【汇编语言】寄存器(内存访问)(三)—— 字的传送

文章目录 前言1. 字的传送2. 问题一3. 问题一的分析与解答4. 问题二5. 问题二的分析与解答结语 前言 📌 汇编语言是很多相关课程(如数据结构、操作系统、微机原理)的重要基础。但仅仅从课程的角度出发就太片面了,其实学习汇编语言…

【LeetCode每日一题】——1588.所有奇数长度子数组的和

文章目录 一【题目类别】二【题目难度】三【题目编号】四【题目描述】五【题目示例】六【题目提示】七【题目进阶】八【解题思路】九【时间频度】十【代码实现】十一【提交结果】 一【题目类别】 前缀和 二【题目难度】 简单 三【题目编号】 1588.所有奇数长度子数组的和 …

【AI系统】AI 学习方法与算法现状

在人工智能(AI)的漫长历史中,我们见证了从早期的规则驱动系统到现代的机器学习模型的转变。AI的学习方法是其进步的核心,而算法现状则反映了当前技术的高度和未来的发展方向。 Ⅰ.AI 学习方法 AI的工作原理基于深度神经网络&…

源码编译llama.cpp for windows on arm

源码编译llama.cpp for windows on arm 这里有编译好的,直接下载使用 https://github.com/turingevo/llama.cpp-build/releases 1 先编译openblas for windows on arm 查看我的文章 《源码编译 openblas for windows on arm》 2 启用OpenBlas加速 上一步openb…

A0002.主机访问虚拟机中windows系统时,ping不通问题解决

问题再现 解决方法 查看主机的IP地址及DNS 在虚拟机中设置IP地址和DNS

leetcode计数排序

计数排序(counting sort)通过统计元素数量来实现排序,通常应用于整数数组。 给定一个长度为 的数组 nums ,其中的元素都是“非负整数” def counting_sort(nums: list[int]):"""计数排序"""# 完整实…

设置 Notepad++ 制表符(Tab 缩进)宽度为2个空格大小

Notepad 默认的制表符宽度是 4 个空格的大小,一个规模比较大的代码段或者 xml 等文件,小屏幕打开时看到的情景真的和让人着急,拖来拖去!有两种方案可以解决这种情况。 修改缩进为空格 这种我们不太推荐,但是有些公司…

【Vue】Vue3.0(十一)Vue 3.0 中 computed 计算属性概念、使用及示例

上篇文章:【Vue】Vue3.0(十)toRefs()和toRef()的区别及使用示例 🏡作者主页:点击! 🤖Vue专栏:点击! ⏰️创作时间:2024年10月15日10点23分 文章目录 Vue 3.0中…

IDC《中国网络安全软件技术发展路线图,2024》报告身份管理 移动安全推荐厂商

10月9日,全球知名研究与分析机构IDC发布了《IDC TechScape:中国网络安全软件技术发展路线图,2024》报告,深入剖析了中国网络安全软件市场的现状与未来趋势。芯盾时代作为领先的零信任业务安全产品方案提供商,凭借在身份…

FFmpeg 4.3 音视频基础到工程应用-多路H265监控录放C++开发一 : 环境搭建1 vs2019 安装,

一 VS2019安装 https://pan.baidu.com/s/1CtMOM5Zhu-HcHcj611edOg#list/path%2F 密码 p668 二 菜单运行vs2019编译控制台 如果我们要build 32 位的程序,则使用 如果我们要build 64 位的ffmpeg,则使用 x64 Navite Tools Command Prompt for VS 2019 我们…

红日靶机(四)笔记

VulnStack-红日靶机四 概述 这个靶场环境包含了三台机器,一台web,两台window域机器。web服务是使用docker容器搭建的,所以就涉及到docker逃逸。而在获得立足点的过程中,我们要对三个docker容器分别测试,不能漏掉可以…

2012年国赛高教杯数学建模C题脑卒中发病环境因素分析及干预解题全过程文档及程序

2012年国赛高教杯数学建模 C题 脑卒中发病环境因素分析及干预 脑卒中(俗称脑中风)是目前威胁人类生命的严重疾病之一,它的发生是一个漫长的过程,一旦得病就很难逆转。这种疾病的诱发已经被证实与环境因素,包括气温和湿…

Ubuntu内存扩容

目录 vmware设置Ubuntu设置查看 读研后发现,Ubuntu的使用量直线上升,之前给配置了20g内存,安装了个ros后,没啥内存了。本文实现给Ubuntu扩容。 vmware设置 这里 我使用别人的截图来演示。 我在这里改成了60 Ubuntu设置 sudo a…

Linux基础-进程的超详细讲解(2)_进程的创建

个人主页:C忠实粉丝 欢迎 点赞👍 收藏✨ 留言✉ 加关注💓本文由 C忠实粉丝 原创 Linux基础-进程的超详细讲解(2)_进程的创建与状态 收录于专栏[Linux学习] 本专栏旨在分享学习Linux的一点学习笔记,欢迎大家在评论区交流讨论&#…

Python从入门到高手6.4节-字符串格式化详解

目录 6.4.1 理解格式化 6.4.2 使用f-string进行格式化 6.4.3 使用格式化符号进行格式化 6.4.4 使用format方法进行格式化 6.4.5 上山打老虎 6.4.1 理解格式化 同学们比较熟悉的是磁盘格式化,将磁盘格式化以后,磁盘中的文件全部被清除。那么&#x…

数据湖新突破:Hudi让实时数据分析更高效!

开源数据湖对比 Hudi的使用收益 Hudi使用成效 Hudi内部机制 增量摄入与更新 Hudi使用一种混合日志存储模式(称为Copy-on-Write),可以同时处理基础数据文件(Parquet)和增量日志(HoodieLogFile)。以 MergeOnReadTable 的 upsert 操作为例,当有新数据到来时,Hudi会先将数据以行…

ubuntu 虚拟机将linux文件夹映射为windows网络位置

在使用虚拟机时可以选择将windows的文件夹设置为共享文件夹方便在虚拟机中访问windows中的文件,同理,也可以将linux的文件夹共享为一个网络文件夹,通过windows的添加一个网络位置功能,将linux的文件夹映射到windows本地,方便windows访问使用linux的文件夹 参照如下:https://blo…

CMA软件测评实验室如何申请|申请流程、筹备环节、材料清单、资源准备

CMA软件测评实验室资质的申请需要做好哪些准备工作?需要准备哪些材料?本文我们一起来梳理一下CMA软件测评实验室申请流程、准备环节、材料准备以及资源准备。 一、CMA软件测评实验室资质申请流程 1、申请资质认定的检验检测机构(以下简称申…