首页 > 其他分享 >汽车道路分割检测数据集 道路分割 9000张 voc yolo coco 道路语义分割数据集 道路分割数据集 道路语义分割数据集 语义分割检测数据集 26类9000张

汽车道路分割检测数据集 道路分割 9000张 voc yolo coco 道路语义分割数据集 道路分割数据集 道路语义分割数据集 语义分割检测数据集 26类9000张

时间:2024-10-20 10:18:39浏览次数:3  
标签:分割 mask 语义 masks 道路 images import model

汽车道路分割检测数据集 道路分割 9000张 voc yolo coco 道路语义分割数据集 道路分割数据集 道路语义分割数据集  语义分割检测数据集  26类9000张

道路分割检测数据集
类别:计算机视觉、语义分割、物体检测、智能交通系统
用途:该数据集专为训练和评估用于道路场景中各种对象的语义分割和物体检测的机器学习模型而设计。通过这些数据,可以开发出高效且准确的道路分割和物体检测系统,帮助交通管理部门进行实时监控、优化交通流以及提高道路使用效率。

项目特点
  1. 真实场景:图像采集自实际的道路环境,确保了数据集的实用性和代表性。
  2. 详细标注:每张图像都附有详细的边界框标注(Bounding Box)和像素级语义分割标注。
  3. 多样性:数据集中包含了不同光照条件、天气状况、时间点下的道路图像,有助于提高模型的泛化能力。
  4. 多类别支持:涵盖26种不同的道路场景中的对象类型,适用于多种应用场景。
  5. 实用性:专注于智能交通系统的实际问题,具有较高的应用价值。
项目结构

road_segmentation_dataset/
├── images/  # 图像文件夹
│   ├── pic_0001.jpg  # 道路图像
│   ├── pic_0002.jpg
│   └── ...
├── annotations/  # 标注文件夹
│   ├── pic_0001.txt  # 对应图像的YOLO格式边界框标注
│   ├── pic_0002.txt
│   └── ...
├── masks/  # 语义分割掩码文件夹
│   ├── pic_0001_mask.png  # 对应图像的语义分割掩码
│   ├── pic_0002_mask.png
│   └── ...
└── README.md  # 项目说明文档
  • images/:存放所有的道路图像。
  • annotations/:存放每个图像对应的YOLO格式边界框标注。
  • masks/:存放每个图像对应的像素级语义分割掩码。
  • README.md:项目说明文档,包含数据集的详细介绍、使用方法和注意事项。
数据集内容
  • 图像数量:9000张
  • 图像格式:JPEG
  • 标注格式
    • 边界框:YOLO格式(文本文件)
    • 语义分割:PNG格式掩码
  • 目标类别
    • person:行人
    • auto_rickshaw:三轮车
    • three_wheeler:三轮车
    • motorbike:摩托车
    • road:道路
    • road_divider:道路分隔线
    • pole:杆
    • bicycle:自行车
    • car:汽车
    • truck:卡车
    • bus:公交车
    • construction_vehicle:施工车辆
    • priority_vehicle:优先车辆
    • cart_vehicle:手推车
    • building:建筑物
    • vegetation:植被
    • road_sign:路标
    • wall:墙
    • sky:天空
    • over_bridge:高架桥
    • sidewalk:人行道
    • garbage_bin:垃圾桶
    • animal:动物
    • billboard:广告牌
    • traffic_light:交通信号灯
    • wheelchair:轮椅
标注信息
  • 边界框:每个目标在图像中的位置,用中心点坐标(x, y)以及宽度w和高度h表示。

  • 类别ID:每个类别的唯一标识符,通常在YOLO格式中标注为整数。

  • 标注格式示例

    class_id x_center y_center width height

    其中,x_center, y_center, width, height都是相对于图像尺寸的归一化值,范围在0到1之间。

  • 语义分割掩码:每个像素对应一个类别ID,形成一个与原图大小相同的掩码图像。

使用场景
  • 交通监控:自动检测和分类道路上的各种对象,辅助交通管理部门进行实时监控。
  • 交通优化:帮助交通工程师分析交通流量,优化信号灯控制和路线规划。
  • 智能交通系统:集成到智能交通系统中,实现自动化交通管理。
  • 科学研究:用于计算机视觉和物体检测领域的研究,分析道路场景检测技术的性能。

数据集统计

类别名称图像数量 (pic_num)边界框数量 (box_num)
person637720428
auto_rickshaw597511714
three_wheeler41428334
motorbike20053089
road856510545
road_divider28665030
pole37989382
bicycle675744
car22433393
truck13271724
bus10421463
construction_vehicle2020
priority_vehicle158171
cart_vehicle199230
building825
vegetation1045
road_sign8421621
wall419
sky34997058
over_bridge185239
sidewalk782993
garbage_bin44
animal2731
billboard105162
traffic_light77
wheelchair33
总计905586474

如何使用数据集

1. 数据加载

使用Python中的os模块遍历图像、标注文件和语义分割掩码,并读取相关信息。

import os
import cv2
import numpy as np

def load_data(data_dir):
    image_dir = os.path.join(data_dir, 'images')
    annotation_dir = os.path.join(data_dir, 'annotations')
    mask_dir = os.path.join(data_dir, 'masks')
    
    images = []
    labels = []
    masks = []
    
    for img_file in os.listdir(image_dir):
        if img_file.endswith('.jpg'):
            img_path = os.path.join(image_dir, img_file)
            ann_path = os.path.join(annotation_dir, img_file.replace('.jpg', '.txt'))
            mask_path = os.path.join(mask_dir, img_file.replace('.jpg', '_mask.png'))
            
            # 读取图像
            image = cv2.imread(img_path)
            images.append(image)
            
            # 读取标注
            with open(ann_path, 'r') as f:
                lines = f.readlines()
                boxes = [list(map(float, line.strip().split())) for line in lines]
                labels.append(boxes)
            
            # 读取语义分割掩码
            mask = cv2.imread(mask_path, cv2.IMREAD_GRAYSCALE)
            masks.append(mask)
    
    return images, labels, masks

# 示例调用
data_dir = 'road_segmentation_dataset'
images, labels, masks = load_data(data_dir)

# 显示示例图像、标注和掩码
for i in range(5):  # 显示前5张图像
    image = images[i]
    h, w, _ = image.shape
    boxes = labels[i]
    mask = masks[i]
    
    for box in boxes:
        class_id, x_center, y_center, box_width, box_height = box
        x1 = int((x_center - box_width / 2) * w)
        y1 = int((y_center - box_height / 2) * h)
        x2 = int((x_center + box_width / 2) * w)
        y2 = int((y_center + box_height / 2) * h)
        
        # 绘制边界框
        cv2.rectangle(image, (x1, y1), (x2, y2), (0, 255, 0), 2)
    
    # 显示语义分割掩码
    mask_color = cv2.applyColorMap(mask, cv2.COLORMAP_JET)
    combined = cv2.addWeighted(image, 0.7, mask_color, 0.3, 0)
    
    cv2.imshow('Image with Bounding Boxes and Mask', combined)
    cv2.waitKey(0)
cv2.destroyAllWindows()
2. 数据预处理
  • 图像缩放:将图像和标注边界框缩放到统一尺寸。
  • 数据增强:进行随机裁剪、旋转、翻转等操作以增加模型的鲁棒性。
  • 归一化:对图像进行归一化处理,使其适合输入到深度学习模型中。
from torchvision import transforms
import torch
import numpy as np

# 定义数据预处理变换
transform = transforms.Compose([
    transforms.ToTensor(),
    transforms.Resize((416, 416)),  # YOLO常用的输入尺寸
    transforms.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225])
])

# 应用预处理变换
def preprocess_data(images, labels, masks):
    preprocessed_images = [transform(cv2.cvtColor(image, cv2.COLOR_BGR2RGB)) for image in images]
    preprocessed_labels = []
    preprocessed_masks = [transforms.ToTensor()(mask) for mask in masks]

    for label in labels:
        new_boxes = []
        for box in label:
            class_id, x_center, y_center, box_width, box_height = box
            new_boxes.append([class_id, x_center, y_center, box_width, box_height])
        preprocessed_labels.append(new_boxes)
    
    return preprocessed_images, preprocessed_labels, preprocessed_masks

# 示例调用
preprocessed_images, preprocessed_labels, preprocessed_masks = preprocess_data(images, labels, masks)
3. 模型训练

选择合适的物体检测模型(如YOLOv5)和语义分割模型(如U-Net、DeepLabV3+),并使用深度学习框架(如PyTorch)进行训练。

示例:使用PyTorch和YOLOv5进行物体检测训练

首先,安装必要的库:

pip install torch torchvision
pip install -U git+https://github.com/ultralytics/yolov5

然后,编写训练代码:

import torch
from yolov5.models.yolo import Model
from yolov5.utils.datasets import LoadImagesAndLabels
from yolov5.utils.general import non_max_suppression, scale_coords
from yolov5.utils.torch_utils import select_device

# 加载预训练模型
model = Model('yolov5s.yaml').cuda()  # 假设使用CUDA设备
weights = 'yolov5s.pt'  # 下载YOLOv5预训练权重
model.load_state_dict(torch.load(weights, map_location=device)['model'].state_dict())

# 修改输出层以适应26类检测
model.model[-1].nc = 26  # 设置类别数为26
model.model[-1].anchors = model.model[-1].anchors[:26]  # 只保留26个anchor

# 设备
device = select_device('')
model.to(device).train()

# 优化器
optimizer = torch.optim.Adam(model.parameters(), lr=0.001)

# 训练数据加载
dataset = LoadImagesAndLabels(path='road_segmentation_dataset/images', label_dir='road_segmentation_dataset/annotations', img_size=416, batch_size=4, augment=True)
dataloader = torch.utils.data.DataLoader(dataset, batch_size=4, num_workers=4, pin_memory=True, collate_fn=LoadImagesAndLabels.collate_fn)

# 损失函数
criterion = model.loss

# 训练循环
num_epochs = 10
for epoch in range(num_epochs):
    running_loss = 0.0
    for i, (imgs, targets, paths, _) in enumerate(dataloader):
        imgs = imgs.to(device).float() / 255.0  # 归一化
        targets = targets.to(device)

        optimizer.zero_grad()
        
        outputs = model(imgs)
        loss, loss_items = criterion(outputs, targets)
        
        loss.backward()
        optimizer.step()
        
        running_loss += loss.item()
    
    print(f"Epoch {epoch+1}/{num_epochs}, Loss: {running_loss / len(dataloader)}")

print("Training complete.")
示例:使用PyTorch和U-Net进行语义分割训练

首先,安装必要的库:

pip install torch torchvision
pip install segmentation-models-pytorch

然后,编写训练代码:

import torch
import torch.nn as nn
import torch.optim as optim
from torch.utils.data import DataLoader
from torchvision import transforms
from segmentation_models_pytorch import Unet
from segmentation_models_pytorch.utils import set_trainable
from segmentation_models_pytorch.utils.metrics import IoU

# 定义数据集类
class RoadSegmentationDataset(torch.utils.data.Dataset):
    def __init__(self, images, masks, transform=None):
        self.images = images
        self.masks = masks
        self.transform = transform
    
    def __len__(self):
        return len(self.images)
    
    def __getitem__(self, idx):
        image = self.images[idx]
        mask = self.masks[idx]
        
        if self.transform:
            image = self.transform(image)
            mask = self.transform(mask)
        
        return image, mask

# 数据集转换
transform = transforms.Compose([
    transforms.ToTensor(),
    transforms.Resize((256, 256))
])

dataset = RoadSegmentationDataset(preprocessed_images, preprocessed_masks, transform=transform)
dataloader = DataLoader(dataset, batch_size=4, shuffle=True, num_workers=4)

# 加载U-Net模型
model = Unet(encoder_name='resnet34', encoder_weights='imagenet', classes=26, activation=None)
model = model.cuda()

# 优化器
optimizer = optim.Adam(model.parameters(), lr=0.001)
criterion = nn.CrossEntropyLoss()

# 训练循环
num_epochs = 10
iou_metric = IoU(threshold=0.5)

for epoch in range(num_epochs):
    model.train()
    running_loss = 0.0
    for i, (inputs, targets) in enumerate(dataloader):
        inputs = inputs.to(device)
        targets = targets.squeeze(1).long().to(device)

        optimizer.zero_grad()
        
        outputs = model(inputs)
        loss = criterion(outputs, targets)
        
        loss.backward()
        optimizer.step()
        
        running_loss += loss.item()
    
    print(f"Epoch {epoch+1}/{num_epochs}, Loss: {running_loss / len(dataloader)}")

print("Training complete.")
4. 模型评估
  • 在验证集上评估模型的性能。
  • 计算mAP(平均精度均值)、IoU(交并比)等指标。
  • 可视化检测结果和分割结果以直观地检查模型的表现。
# 评估函数
def evaluate_model(model, dataloader, device):
    model.eval()
    all_detections = []
    all_ground_truths = []

    with torch.no_grad():
        for imgs, targets, _, _ in dataloader:
            imgs = imgs.to(device).float() / 255.0
            targets = targets.to(device)

            outputs = model(imgs)
            predictions = non_max_suppression(outputs, conf_thres=0.4, iou_thres=0.5)

            for pred, target in zip(predictions, targets):
                if pred is not None and len(pred) > 0:
                    all_detections.append(pred.cpu().numpy())
                else:
                    all_detections.append([])

                all_ground_truths.append(target.cpu().numpy())

    # 计算mAP和其他指标
    # 这里需要根据实际情况实现计算逻辑
    # 例如使用COCO API或Pascal VOC评价工具

# 示例调用
evaluate_model(model, dataloader, device)
5. 部署与应用
  • 将训练好的模型部署到实际应用中。
  • 通过实时处理道路图像,提供即时的物体检测和语义分割结果。

注意事项

  • 数据平衡:确保数据集中各类别的样本分布相对均衡。
  • 数据增强:考虑使用数据增强技术来增加模型的鲁棒性。
  • 超参数调整:根据实际情况调整学习率、批次大小等超参数以获得最佳性能。
  • 模型选择:根据硬件资源和实际需求选择合适的模型架构。

项目总结

这个道路分割检测数据集提供了丰富的资源,支持各种检测任务。通过高质量的图像和详细的边界框标注及语义分割掩码,研究人员可以开发出高效且准确的目标检测和语义分割模型,应用于多个领域。希望这个数据集能促进更多创新性的研究和技术进步。

标签:分割,mask,语义,masks,道路,images,import,model
From: https://blog.csdn.net/ALiLiLiYa/article/details/143087809

相关文章

  • 自动驾驶路面分类数据集,不同道路不同天气条件,干燥、湿润、水上、新雪、融化雪和冰。包
    自动驾驶路面分类数据集,按照不同的天气条件,即干燥、湿润、水上、新雪、融化的雪和冰。不同的道路材料属性包括沥青、混凝土、泥浆和碎石。不同的道路平整性分为光滑、轻微不平和严重不平。共27类,37万张图像,13GB数据自动驾驶路面分类数据集类别:图像分类用途:用于训练和评估......
  • 计算机视觉——人像的分割与无缝融合
    1.概述新加坡现代汽车集团创新中心的一篇新论文提供了一种在计算机视觉中分离“融合”人像的方法——在这些情况下,对象识别框架发现一个人在某种程度上与另一个人“太接近”(例如例如“拥抱”动作或“站在后面”的姿势),并且无法区分所代表的两个人,将他们与一个人或一个实体......
  • YOLO11-seg分割如何训练自己的数据集(道路缺陷)
      ......
  • TPAMI 2024 | 具有识别机制的可扩展视频目标分割
    题目:ScalableVideoObjectSegmentationWithIdentificationMechanism具有识别机制的可扩展视频目标分割作者:ZongxinYang;JiaxuMiao;YunchaoWei;WenguanWang;XiaohanWang;YiYang摘要本文探讨了在半监督视频目标分割(VOS)中实现可扩展和有效的多目标建模所......
  • TPAMI 2024 | 用于点云分割领域适应的组合语义混合
    题目:CompositionalSemanticMixforDomainAdaptationinPointCloudSegmentation用于点云分割领域适应的组合语义混合作者:CristianoSaltori;FabioGalasso;GiuseppeFiameni;NicuSebe;FabioPoiesi;ElisaRicci源码链接:https://github.com/saltoricristiano......
  • 基于YOLOv8的高精度火车轨道路障检测算法源码源码 + 数据集,数据集共2053张图片,有5个类
     基于YOLOv8的高精度火车轨道路障检测算法源码源码+数据集,数据集共2053张图片,有5个类别,分别是preson、obstic_oc、animal、vehicle、motor_bicycle实时检测:采用YOLOv8m算法,轻量级架构,可以实时识别轨道上的障碍物。高精度识别:精准识别多种路障,包括人、动物、车辆、摩托车。......
  • 用Cursor开发了一个图片分割器
    今天来总结下,Cursor从8月份开始,在国内的技术圈子里面火起来了,我也是抱着试试看的心态,用下来感觉真是不得了,有点厉害,可以帮自己搞定前端类的项目,对于不擅长前端,写不出来好看的UI的程序员来说,真是很强。Cursor也很聪明,几乎一两天就可以完成一个在线工具网站的小需求......
  • 【SAM模型应用于遥感影像|论文解读2】突破边界与一致性:SAM模型革新遥感影像语义分割
    【SAM模型应用于遥感影像|论文解读2】突破边界与一致性:SAM模型革新遥感影像语义分割【SAM模型应用于遥感影像|论文解读2】突破边界与一致性:SAM模型革新遥感影像语义分割文章目录【SAM模型应用于遥感影像|论文解读2】突破边界与一致性:SAM模型革新遥感影像语义分割二、R......
  • 使用calibre对电子书合集进行分割
    这里用到calibre的两个插件,分别是EpubSplit和NewDoubanBooks。EpubSplit主要用来分割电子书合集文件,NewDoubanBooks用来为分割后的单本书籍更新元数据(原来的DoubanBooks插件不知道什么原因抓不到元数据)。EpubSplit可以直接从calibre的插件市场直接下载,NewDouban......
  • 道路车辆功能安全 ISO 26262标准(4-3)—系统级产品开发
    写在前面本系列文章主要讲解道路车辆功能安全ISO26262标准的相关知识,希望能帮助更多的同学认识和了解功能安全标准。若有相关问题,欢迎评论沟通,共同进步。(*^▽^*)1.道路车辆功能安全ISO26262标准4.ISO26262-4 系统级产品开发四、项目集成和测试集成和测试阶段包括......