街景影像路面病害检测数据集。百度地图获取的8000张街景影像,对超过20,000个路面病害进行标注。数据集涵盖首都东西城、海,阳和丰台共5个区,包多种城市道路类型路面状况。基于街景影像路面病害数据集

 

基于街景影像的路面病害检测。从百度地图获取的8000张街景影像,对超过20,000个路面病害进行了标注。该数据集涵盖了北京市东城、西城、海淀、朝阳和丰台共5个区,包括多种城市道路类型和路面状况。所标注的路面病害共包括六种病害类别和一种易混淆的非混凝土路面类型,即纵向裂缝、横向裂缝、龟裂、坑槽、纵向修补、横向修补和井盖。2.7GB数据量,yolo格式标注。

基于街景影像的路面病害检测数据集介绍

数据集概览
  • 总图像数量: 8,000张
  • 标注目标数量: 超过20,000个
  • 覆盖区域: 北京市东城、西城、海淀、朝阳和丰台共5个区
  • 道路类型: 多种城市道路类型
  • 路面状况: 不同的路面状况
  • 病害类别:
    • 纵向裂缝 (Longitudinal Crack)
    • 横向裂缝 (Transverse Crack)
    • 龟裂 (Alligator Cracking)
    • 坑槽 (Pothole)
    • 纵向修补 (Longitudinal Patch)
    • 横向修补 (Transverse Patch)
    • 井盖 (Manhole Cover)
  • 易混淆类别: 非混凝土路面类型
  • 标注格式: YOLO
  • 数据集大小: 2.7GB
数据集结构

假设数据集文件夹结构如下:

 

深色版本

road_defects_dataset/
├── images/
│   ├── train/
│   ├── val/
│   └── test/
├── labels/
│   ├── train/  # YOLO格式
│   ├── val/
│   └── test/
└── README.md
  • images/ 目录下存放原始街景图像。
  • labels/ 目录下存放对应的YOLO格式标注文件。
  • README.md 文件包含数据集的使用说明和字段解释。
标注文件示例

YOLO格式的标注文件是与图像文件同名的.txt文件,每行表示一个目标对象,格式为:

<class_id> <x_center> <y_center> <width> <height>

其中:

  • <class_id> 是类别的索引(从0开始)。
  • <x_center> 和 <y_center> 是边界框中心点相对于图像宽度和高度的比例坐标。
  • <width> 和 <height> 是边界框的宽度和高度相对于图像宽度和高度的比例。

示例:

# 示例:labels/train/00001.txt
0 0.456 0.321 0.123 0.089  # 纵向裂缝
1 0.678 0.456 0.154 0.123  # 横向裂缝
2 0.789 0.567 0.189 0.156  # 龟裂
3 0.890 0.678 0.200 0.180  # 坑槽
4 0.900 0.789 0.220 0.200  # 纵向修补
5 0.910 0.890 0.240 0.220  # 横向修补
6 0.920 0.900 0.260 0.240  # 井盖
7 0.930 0.910 0.280 0.260  # 非混凝土路面
使用场景
  • 路面维护: 用于自动识别和分类路面病害,辅助市政部门进行路面维护和修复工作。
  • 智能交通管理: 结合其他技术如车辆监控系统,实现对路面状况的实时监测。
  • 自动驾驶: 为自动驾驶车辆提供路面状况信息,帮助其做出更安全的驾驶决策。
  • 城市规划: 提供详细的路面病害数据,支持城市基础设施规划和改进。
数据特性
  • 多区域覆盖: 数据集涵盖了北京市五个主要城区,具有广泛的地理代表性。
  • 多种道路类型: 包含不同类型的市区道路,有助于模型在不同道路条件下的泛化能力。
  • 多样化的病害类别: 包括六种常见的路面病害和一种易混淆的非混凝土路面类型,能够全面反映实际路面状况。
  • 高质量标注: 所有病害都经过专业人员的标注,确保标签的准确性和一致性。
Keras 训练代码示例

以下是一个使用Keras框架进行路面病害检测模型训练的代码示例。我们将使用预训练的YOLOv3模型作为基础,并在其上添加全连接层来进行分类。

首先,确保你已经安装了所需的依赖项。你可以通过以下命令安装Keras和其他必要的库:

pip install keras tensorflow opencv-python

然后,创建一个配置文件 config.yaml 来指定数据集路径和相关参数:

train_images_dir: /path/to/road_defects_dataset/images/train
train_labels_dir: /path/to/road_defects_dataset/labels/train
val_images_dir: /path/to/road_defects_dataset/images/val
val_labels_dir: /path/to/road_defects_dataset/labels/val
test_images_dir: /path/to/road_defects_dataset/images/test
test_labels_dir: /path/to/road_defects_dataset/labels/test

image_size: [416, 416]
batch_size: 32
epochs: 50
nc: 8  # 类别数量
names: ['Longitudinal Crack', 'Transverse Crack', 'Alligator Cracking', 'Pothole', 'Longitudinal Patch', 'Transverse Patch', 'Manhole Cover', 'Non-Concrete Road']

接下来,使用以下脚本进行训练:

import os
import yaml
import numpy as np
import cv2
from tensorflow.keras.models import Model
from tensorflow.keras.layers import Input, Conv2D, BatchNormalization, LeakyReLU, MaxPooling2D, Add, UpSampling2D, Concatenate
from tensorflow.keras.optimizers import Adam
from tensorflow.keras.callbacks import EarlyStopping, ModelCheckpoint, ReduceLROnPlateau
from utils import load_data, preprocess_data, yolo_loss  # 自定义工具函数

# 读取配置文件
with open('config.yaml', 'r') as f:
    config = yaml.safe_load(f)

# 数据集路径
train_images_dir = config['train_images_dir']
train_labels_dir = config['train_labels_dir']
val_images_dir = config['val_images_dir']
val_labels_dir = config['val_labels_dir']

# 图像生成器
def data_generator(images_dir, labels_dir, batch_size=32):
    image_files = os.listdir(images_dir)
    while True:
        for i in range(0, len(image_files), batch_size):
            batch_image_files = image_files[i:i + batch_size]
            batch_images = []
            batch_labels = []
            for file_name in batch_image_files:
                image_path = os.path.join(images_dir, file_name)
                label_path = os.path.join(labels_dir, file_name.replace('.jpg', '.txt'))
                
                image = cv2.imread(image_path)
                image = cv2.resize(image, (config['image_size'][0], config['image_size'][1]))
                
                with open(label_path, 'r') as f:
                    lines = f.readlines()
                    labels = [list(map(float, line.strip().split())) for line in lines]
                
                batch_images.append(image)
                batch_labels.append(labels)
            
            batch_images = np.array(batch_images) / 255.0
            yield batch_images, batch_labels

# 定义YOLOv3模型
def create_yolov3_model(input_shape=(416, 416, 3), num_classes=8):
    inputs = Input(shape=input_shape)

    # Darknet-53 backbone
    x = Conv2D(32, (3, 3), padding='same')(inputs)
    x = BatchNormalization()(x)
    x = LeakyReLU(alpha=0.1)(x)
    x = MaxPooling2D((2, 2))(x)

    # ... 添加更多层以构建完整的Darknet-53骨干网络 ...

    # YOLOv3输出层
    output_1 = Conv2D(3 * (5 + num_classes), (1, 1), activation='linear')(x)
    x = Conv2D(128, (1, 1), activation='relu')(x)
    x = UpSampling2D(2)(x)
    x = Concatenate()([x, skip_connection_1])
    x = Conv2D(256, (3, 3), activation='relu', padding='same')(x)
    output_2 = Conv2D(3 * (5 + num_classes), (1, 1), activation='linear')(x)
    x = Conv2D(64, (1, 1), activation='relu')(x)
    x = UpSampling2D(2)(x)
    x = Concatenate()([x, skip_connection_2])
    x = Conv2D(128, (3, 3), activation='relu', padding='same')(x)
    output_3 = Conv2D(3 * (5 + num_classes), (1, 1), activation='linear')(x)

    model = Model(inputs, [output_1, output_2, output_3])
    return model

# 创建模型
model = create_yolov3_model(num_classes=config['nc'])

# 编译模型
model.compile(optimizer=Adam(lr=0.0001), loss=yolo_loss, metrics=['accuracy'])

# 打印模型概要
model.summary()

# 设置回调函数
early_stopping = EarlyStopping(monitor='val_loss', patience=10, restore_best_weights=True)
checkpoint = ModelCheckpoint('best_road_defects_detection_model.h5', save_best_only=True, monitor='val_loss', mode='min')
reduce_lr = ReduceLROnPlateau(monitor='val_loss', factor=0.1, patience=5, min_lr=1e-6)

# 训练模型
batch_size = config['batch_size']
epochs = config['epochs']

train_gen = data_generator(train_images_dir, train_labels_dir, batch_size)
val_gen = data_generator(val_images_dir, val_labels_dir, batch_size)

history = model.fit(
    train_gen,
    steps_per_epoch=len(os.listdir(train_images_dir)) // batch_size,
    epochs=epochs,
    validation_data=val_gen,
    validation_steps=len(os.listdir(val_images_dir)) // batch_size,
    callbacks=[early_stopping, checkpoint, reduce_lr]
)

# 保存模型
model.save('road_defects_detection_model.h5')

# 可视化训练过程
import matplotlib.pyplot as plt

plt.figure(figsize=(12, 4))
plt.subplot(1, 2, 1)
plt.plot(history.history['accuracy'], label='Training Accuracy')
plt.plot(history.history['val_accuracy'], label='Validation Accuracy')
plt.legend()
plt.title('Accuracy')

plt.subplot(1, 2, 2)
plt.plot(history.history['loss'], label='Training Loss')
plt.plot(history.history['val_loss'], label='Validation Loss')
plt.legend()
plt.title('Loss')

plt.show()

代码说明

  1. 数据生成器:

    • 使用自定义的数据生成器data_generator来加载和预处理数据。
    • 从指定目录中读取图像和对应的YOLO格式标注文件,并进行缩放和归一化处理。
  2. 模型构建:

    • 构建YOLOv3模型,包括Darknet-53骨干网络和三个输出层。
    • 模型输出三个尺度的特征图,每个特征图包含边界框的位置和类别的预测。
  3. 模型编译:

    • 使用Adam优化器,学习率为0.0001。
    • 损失函数为自定义的yolo_loss,该损失函数需要根据YOLOv3的损失函数公式实现。
  4. 模型训练:

    • 使用fit方法进行训练,设置早停机制、最佳模型保存和学习率衰减。
    • 训练过程中会记录训练集和验证集的准确率和损失。
  5. 可视化:

    • 训练完成后,绘制训练集和验证集的准确率和损失曲线,帮助分析模型的训练效果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

QQ_1309399183

一角两角不嫌少

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值