首页 > 其他分享 >自动驾驶路面分类数据集,不同道路不同天气条件,干燥、湿润、水上、新雪、融化雪和冰。包沥青、混凝土、泥浆和碎石。不同道路平整性分光滑、轻微不平严重不平。27类,37万张13GB路面数据集 路面分类数据集

自动驾驶路面分类数据集,不同道路不同天气条件,干燥、湿润、水上、新雪、融化雪和冰。包沥青、混凝土、泥浆和碎石。不同道路平整性分光滑、轻微不平严重不平。27类,37万张13GB路面数据集 路面分类数据集

时间:2024-10-20 08:53:28浏览次数:3  
标签:Dry Uneven image 路面 train 不平 Wet model 数据

自动驾驶路面分类数据集,按照不同的天气条件,即干燥、湿润、水上、新雪、融化的雪和冰。不同的道路材料属性包括沥青、混凝土、泥浆和碎石。不同的道路平整性分为光滑、轻微不平和严重不平。共27类,37万张图像,13GB数据

自动驾驶路面分类数据集
类别:图像分类
用途:用于训练和评估基于深度学习的路面分类模型,特别适用于自动驾驶系统中的路面条件识别。该数据集涵盖了多种天气条件、道路材料属性和道路平整性,旨在提高自动驾驶车辆在不同环境下的感知能力。

数据集内容
  • 总图像数量:370,000张
  • 数据大小:13GB
  • 类别数量:27类
  • 标注格式:每张图像对应一个标签,表示其所属的路面类型。
图像来源

该数据集由高分辨率的道路图像组成,这些图像是从不同的地理区域和季节采集的,以确保模型能够适应各种实际应用场景。图像覆盖了多种天气条件、道路材料属性和道路平整性。

类别定义

根据不同的天气条件、道路材料属性和道路平整性,数据集被划分为以下27个类别:

  1. 天气条件

    • 干燥 (Dry)
    • 湿润 (Wet)
    • 水上 (Water)
    • 新雪 (Fresh Snow)
    • 融化的雪 (Melting Snow)
    • 冰 (Ice)
  2. 道路材料属性

    • 沥青 (Asphalt)
    • 混凝土 (Concrete)
    • 泥浆 (Mud)
    • 碎石 (Gravel)
  3. 道路平整性

    • 光滑 (Smooth)
    • 轻微不平 (Slightly Uneven)
    • 严重不平 (Severely Uneven)

通过组合上述三个维度,可以生成27个不同的路面类别。例如:

  • 干燥沥青光滑 (Dry Asphalt Smooth)
  • 湿润混凝土轻微不平 (Wet Concrete Slightly Uneven)
  • 水上泥浆严重不平 (Water Mud Severely Uneven)
数据集特点
  1. 多样性

    • 天气条件:涵盖干燥、湿润、水上、新雪、融化的雪和冰等多种天气条件。
    • 道路材料属性:包括沥青、混凝土、泥浆和碎石等不同材料。
    • 道路平整性:分为光滑、轻微不平和严重不平三种情况。
    • 地理分布:图像来自不同的地理区域,确保模型具有广泛的适用性。
  2. 标注质量

    • 所有图像均由专业人员手动标注,确保高精度。
    • 每个图像都有一个明确的标签,标识其所属的路面类型。
  3. 应用场景

    • 自动驾驶:支持自动驾驶车辆在不同路面条件下进行精确的感知和决策。
    • 路况监测:辅助交通管理部门实时监测和维护道路状况。
    • 智能交通系统:帮助智能交通系统优化路线规划和交通管理。
数据集结构
road_surface_dataset/
├── images/
│   ├── train/
│   │   ├── 000001.jpg
│   │   ├── 000002.jpg
│   │   └── ...
│   ├── val/
│   │   ├── 000001.jpg
│   │   ├── 000002.jpg
│   │   └── ...
├── labels/
│   ├── train/
│   │   ├── 000001.txt
│   │   ├── 000002.txt
│   │   └── ...
│   ├── val/
│   │   ├── 000001.txt
│   │   ├── 000002.txt
│   │   └── ...
└── data.yaml
  • images/:存放所有图像文件。
  • labels/:存放对应的标签文件,每张图像都有一个对应的.txt文件,其中包含图像的标签信息。
  • data.yaml:提供数据集的详细说明,包括使用方法、引用要求等。
标签文件格式

每个标签文件(例如000001.txt)中,仅包含一行文本,表示图像的类别索引。例如:

12
  • 类别索引:根据data.yaml中的类别顺序,从0开始编号。

data.yaml 文件示例

# data.yaml
train: road_surface_dataset/images/train
val: road_surface_dataset/images/val

nc: 27  # number of classes
names: [
    'Dry Asphalt Smooth',
    'Dry Asphalt Slightly Uneven',
    'Dry Asphalt Severely Uneven',
    'Dry Concrete Smooth',
    'Dry Concrete Slightly Uneven',
    'Dry Concrete Severely Uneven',
    'Dry Mud Smooth',
    'Dry Mud Slightly Uneven',
    'Dry Mud Severely Uneven',
    'Dry Gravel Smooth',
    'Dry Gravel Slightly Uneven',
    'Dry Gravel Severely Uneven',
    'Wet Asphalt Smooth',
    'Wet Asphalt Slightly Uneven',
    'Wet Asphalt Severely Uneven',
    'Wet Concrete Smooth',
    'Wet Concrete Slightly Uneven',
    'Wet Concrete Severely Uneven',
    'Wet Mud Smooth',
    'Wet Mud Slightly Uneven',
    'Wet Mud Severely Uneven',
    'Wet Gravel Smooth',
    'Wet Gravel Slightly Uneven',
    'Wet Gravel Severely Uneven',
    'Water Asphalt Smooth',
    'Water Asphalt Slightly Uneven',
    'Water Asphalt Severely Uneven'
]

训练代码

我们将使用PyTorch和常见的图像分类模型(如ResNet50)来训练这个数据集。首先,确保您已经安装了必要的库:

pip install torch torchvision numpy opencv-python matplotlib

接下来,创建一个Python脚本(例如train_road_surface.py),并在其中编写以下代码来训练模型:

import os
import torch
import torch.nn as nn
import torch.optim as optim
from torch.utils.data import DataLoader, Dataset
from torchvision import transforms, models
from PIL import Image
import numpy as np

# 定义数据集类
class RoadSurfaceDataset(Dataset):
    def __init__(self, image_dir, label_dir, transform=None):
        self.image_dir = image_dir
        self.label_dir = label_dir
        self.transform = transform
        self.image_names = [f for f in os.listdir(image_dir) if f.endswith('.jpg')]

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

    def __getitem__(self, idx):
        img_name = self.image_names[idx]
        img_path = os.path.join(self.image_dir, img_name)
        label_path = os.path.join(self.label_dir, img_name.replace('.jpg', '.txt'))

        # 读取图像
        image = Image.open(img_path).convert('RGB')

        # 读取标签
        with open(label_path, 'r') as f:
            label = int(f.read().strip())

        if self.transform:
            image = self.transform(image)

        return image, label

# 数据预处理
transform = transforms.Compose([
    transforms.Resize((224, 224)),
    transforms.ToTensor(),
    transforms.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225])
])

# 创建数据加载器
train_dataset = RoadSurfaceDataset(
    image_dir='road_surface_dataset/images/train',
    label_dir='road_surface_dataset/labels/train',
    transform=transform
)
train_loader = DataLoader(train_dataset, batch_size=32, shuffle=True, num_workers=4)

val_dataset = RoadSurfaceDataset(
    image_dir='road_surface_dataset/images/val',
    label_dir='road_surface_dataset/labels/val',
    transform=transform
)
val_loader = DataLoader(val_dataset, batch_size=32, shuffle=False, num_workers=4)

# 定义模型
model = models.resnet50(pretrained=True)
num_features = model.fc.in_features
model.fc = nn.Linear(num_features, 27)  # 27个类别
model = model.cuda()

# 定义损失函数和优化器
criterion = nn.CrossEntropyLoss()
optimizer = optim.Adam(model.parameters(), lr=0.001)

# 训练函数
def train_model(model, dataloaders, criterion, optimizer, num_epochs=25):
    best_acc = 0.0
    for epoch in range(num_epochs):
        print(f'Epoch {epoch}/{num_epochs - 1}')
        print('-' * 10)

        for phase in ['train', 'val']:
            if phase == 'train':
                model.train()
            else:
                model.eval()

            running_loss = 0.0
            running_corrects = 0

            for inputs, labels in dataloaders[phase]:
                inputs = inputs.cuda()
                labels = labels.cuda()

                optimizer.zero_grad()

                with torch.set_grad_enabled(phase == 'train'):
                    outputs = model(inputs)
                    _, preds = torch.max(outputs, 1)
                    loss = criterion(outputs, labels)

                    if phase == 'train':
                        loss.backward()
                        optimizer.step()

                running_loss += loss.item() * inputs.size(0)
                running_corrects += torch.sum(preds == labels.data)

            epoch_loss = running_loss / len(dataloaders[phase].dataset)
            epoch_acc = running_corrects.double() / len(dataloaders[phase].dataset)

            print(f'{phase} Loss: {epoch_loss:.4f} Acc: {epoch_acc:.4f}')

            if phase == 'val' and epoch_acc > best_acc:
                best_acc = epoch_acc
                best_model_wts = model.state_dict()

    print(f'Best val Acc: {best_acc:.4f}')
    model.load_state_dict(best_model_wts)
    return model

# 训练模型
dataloaders = {'train': train_loader, 'val': val_loader}
model = train_model(model, dataloaders, criterion, optimizer, num_epochs=25)

# 保存模型
torch.save(model.state_dict(), 'best_road_surface_model.pth')

运行训练

在终端中运行以下命令来启动训练:

python train_road_surface.py

训练过程中的注意事项

  • 硬件要求:训练大型数据集需要较强的计算能力,建议使用GPU。如果您的机器没有GPU,可以考虑使用云服务。
  • 超参数调整:根据您的数据集特点和硬件条件,可能需要调整batch_sizelearning_ratenum_epochs等超参数。
  • 预训练权重:我们使用了预训练的ResNet50模型,这有助于加快收敛速度并提高性能。
  • 日志和可视化:您可以添加更多的日志记录和可视化工具(如TensorBoard)来监控训练进度。

训练时间

训练时间取决于多个因素,包括:

  • 硬件配置:GPU的型号和数量。
  • 批量大小:较大的批量大小通常会加快训练速度,但需要更多的内存。
  • 图像尺寸:较大的图像尺寸会增加训练时间。
  • 训练轮数:更多的训练轮数会增加训练时间。

在典型的设置下(例如,使用NVIDIA RTX 3090 GPU,批量大小为32,图像尺寸为224x224,训练25轮),训练可能需要几个小时到一天不等。具体的训练时间可以通过查看训练日志来估计。

通过以上步骤,您可以开始训练自动驾驶路面分类模型。希望这能帮助您顺利完成训练任务!

标签:Dry,Uneven,image,路面,train,不平,Wet,model,数据
From: https://blog.csdn.net/2401_86889530/article/details/143032166

相关文章

  • Matlab使用LSTM或BiLSTM对一维信号(语音信号、心电信号等)进行二分类源程序。也可以改
     Matlab使用LSTM或BiLSTM对一维信号(语音信号、心电信号等)进行二分类源程序。也可以改成多分类。包含数据和代码,数据可以直接替换为自己的数据。如果用BiLSTM,程序中只需要把lstmlayer改为bilstmlayer即为BiLSTM网络,其他地方不需要任何改动。工作如下:1、加载数据集,一共为......
  • 毕业设计:python股票推荐系统 数据分析可视化 协同过滤推荐算法 Django框架(源码+论文)✅
    python股票推荐系统数据分析可视化协同过滤推荐算法Django框架(源码)✅1、项目介绍技术栈:python、django框架、requests、BeautifulSoup、协同过滤算法、Echarts可视化、HTML登录注册界面:用户可以注册新账号并登录系统。个人信息修改:用户可以修改个人信息,如用户名、......
  • 读数据工程之道:设计和构建健壮的数据系统14源系统
    1. 源系统中的数据生成1.1. 数据工程师的工作是从源系统获取数据,对其进行处理,使其有助于为下游用例提供服务1.2. 数据工程师的角色将在很大程度上转向理解数据源和目的地之间的相互作用1.3. 数据工程的最基本的数据管道任务——将数据从A移动到B2. 数据源2.1. 数据是......
  • 操作系统_Paxos协议实现数据一致性更新
    一、实验环境系统:Windows10编译软件:VisualStudio2022语言:C二、内容假设由5台服务器Ai(i=1,2..5)组成集群,每份数据在5台服务器中各保留一个副本。当客户端C1和C2同时修改存储在集群中的同一个数据时,由于网络修改延迟的存在无法保证两个数据的请求到达每台服务器的先后顺序。......
  • 【趣学C语言和数据结构100例】
    【趣学C语言和数据结构100例】问题描述在带头结点的单链表中,删除所有值为x的结点,并释放其空间,假设值为x的结点不唯一,试编写算法以实现上述操作。试编写在带头结点的单链表中寻找一个最小值结点的高效算法(假设该结点唯一)设在一个带表头结点的单链表中,所有结点......
  • .mkp扩展名oracle数据文件加密恢复---惜分飞
    联系:手机/微信(+8617813235971)QQ(107644445)标题:.mkp扩展名oracle数据文件加密恢复作者:惜分飞©版权所有[未经本人同意,不得以任何形式转载,否则有进一步追究法律责任的权利.]又有客户的oracle数据库文件被勒索,扩展名被加密为:.[[email protected]].mkp对应的+READM......
  • Task03:数据类型和操作 Data Types and Opeartors
    Python数据类型与表达式:数据转换视角下的高效编程策略一、引言1.1研究背景在当今的编程领域,Python以其简洁性、易读性和强大的功能而备受青睐。Python数据类型与表达式在编程中具有至关重要的地位。Python的数据类型丰富多样,包括整型、浮点型、布尔型、None类型以及......
  • 数据结构之复杂度
    文章目录前言一、复杂度二、时间复杂度1.大O的渐进表示法2.时间复杂度计算示列二、空间复杂度1.空间复杂度计算示列前言本节内容讲解数据结构中的复杂度。在认识复杂度之前,我们先了解数据结构和算法的定义。数据结构(DataStructure)是计算机存储、组织数据的方式,指......
  • MySQL数据库备份与恢复
    MySQL数据库的备份与恢复是数据库管理的重要部分,它可以帮助我们保护数据不受硬件故障、数据损坏、人为错误等因素的影响。以下是MySQL数据备份与恢复的详细步骤和代码示例。数据备份1.使用 mysqldump 工具mysqldump是MySQL自带的一个强大的命令行工具,用于导出数据库......
  • Django 扩展地理空间数据(GeoDjango)详细操作
    综述:要在django中处理地理空间数据,首先要保证django框架支持处理地理空间数据,其次项目用到的数据库也应该支持存储地理数据,本小结介绍的是python3.12+django(后端技框架)+vue(前端框架)+postgresql(数据库);在Django中处理地理空间数据的存储和查询,涉及到以下几个关键步骤:1.扩展......