【数据集+完整源码】【图像分割】道路裂缝分类识别数据集 4710 张,YOLO路面裂缝分类识别系统实战训练教程,yolo道路裂缝分类识别。
【数据集】【YOLO】【图像分割】道路裂缝分类识别数据集 4710 张,YOLO路面裂缝分类识别系统实战训练教程,yolo道路裂缝分类识别。数据集中包含 3 种分类,具体分类为:网状裂缝、纵向裂缝、横向裂缝。数据集图片来自国内外网站、网络爬虫、视频抽帧等;可用于路面裂缝语义分割识别。检测场景为城市道路、园区路面、隧道、乡镇路面等,可以应用于通过裂缝几何特征(如宽度、走向)评估道路健康状态,预测病害
文章前瞻:优质数据集与检测系统精选
点击链接:更多数据集与系统目录清单
一、数据集介绍
【数据集】道路裂缝分类识别数据集 4710 张,目标检测,包含YOLO(TXT)/ JSON格式标注。
数据集中包含 3 种分类,具体分类为:names: ['Alligator_crack', 'Longitudinal_crack', 'Transverse_crack'],对应网状裂缝、纵向裂缝、横向裂缝。
数据集图片来自国内外网站、网络爬虫、视频抽帧等;
可用于路面裂缝语义分割识别。
检测场景为城市道路、园区路面、隧道、乡镇路面等,可以应用于通过裂缝几何特征(如宽度、走向)评估道路健康状态,预测病害发展趋势等。
文章底部名片或主页私信获取数据集~

1、数据概述
道路裂缝分类识别的重要性
随着城市化进程加速,道路基础设施面临严峻的老化问题。裂缝作为道路病害的早期表征,若不及时修复,将导致路面结构进一步恶化,甚至引发交通安全事故。传统裂缝检测依赖人工巡查或简单图像处理技术,存在效率低、主观性强、对复杂环境适应性差等缺陷。例如,在光照不均、阴影遮挡或裂缝形态复杂(如网状、横向、纵向裂缝交织)的场景下,传统方法难以保证检测精度。
深度学习技术的兴起为裂缝检测提供了新思路。卷积神经网络(CNN)通过自动提取图像特征,可显著提升检测效率和准确性。然而,道路裂缝检测任务对算法提出更高要求:
-
实时性:需在动态视频流中快速定位裂缝;
-
多尺度适应性:需兼顾微小裂缝(毫米级)与大范围病害的检测;
-
抗干扰能力:需区分裂缝与道路标记、阴影、污渍等干扰因素。
基于YOLO的道路裂缝分割算法
语义分割通过逐像素分类可解决上述问题:
-
精确轮廓标注:将裂缝区域从背景中分离,支持病害面积、长度等参数的精确计算;
-
细粒度分类:基于像素级标注实现裂缝类型识别,为维修决策提供依据;
-
结构化信息提取:通过裂缝几何特征(如宽度、走向)评估道路健康状态,预测病害发展趋势。
该数据集含有 4710 张图片,包含Labelme JSON 格式和YOLO TXT格式,用于训练和测试城市道路、园区路面、隧道、乡镇路面等场景进行道路裂缝分类识别。
图片格式为jpg格式,标注格式分别为:
YOLO:txt
labelme:Json
数据集均为 labelme 标注,保证标注精确度。
2、数据集文件结构
cracks_class/
——test/
————images/
————labels/
——train/
————images/
————labels/
——valid/
————images/
————labels/
——data.yaml
- 该数据集已划分训练集样本,分别是:test目录(测试集)、train目录(训练集)、valid目录(验证集);
- images文件夹为jpg格式的数据样本;
- labels文件夹是YOLO格式的TXT文件;(json格式可通过脚本转换,yolo分割模型需要txt格式)
- data.yaml是数据集配置文件,包含道路裂缝分类识别的目标分类和加载路径。



yolo格式的标注文件内容如下:
1 0.610103125 0 0.595634375 0.0095375 0.5775015625 0.0245453125 0.56289375 0.044496875000000005 0.546271875 0.05723906250000001 0.5477828125 0.0697 0.5326703125 0.0987109375 0.5241078124999999 0.10777343749999999 0.52561875 0.1188171875 0.5407296875000001 0.12929531249999998 0.5246109375 0.1683703125 0.5200781250000001 0.17545 0.5079890625 0.188759375 0.5105078125 0.204334375 0.52058125 0.21820937499999998 0.514034375 0.23775 0.49690781250000005 0.2601203125 0.487840625 0.257571875 0.48431562499999997 0.24879375 0.47625624999999994 0.2269890625 0.45761874999999996 0.22302343750000003 0.468196875 0.20065312500000002 0.4999296875 0.1949890625 0.5019453125 0.18819375 0.4883453125 0.185078125 0.4601375 0.1927234375 0.43444843750000006 0.1986703125 0.44653593750000004 0.22415625 0.47323281250000004 0.249359375 0.460640625 0.2606734375 0.4374703125 0.26973437499999997 0.450565625 0.30145 0.442003125 0.3232546875 0.4143 0.35357500000000003 0.4057359375 0.377928125 0.38860937500000003 0.40199843749999997 0.37450625 0.42380312499999995 0.376521875 0.4627265625 0.3815578125 0.48368124999999995 0.39263906249999997 0.5060515624999999 0.41530625 0.51115 0.4435140625 0.5054859375 0.45358906250000003 0.508721875 0.47222656250000006 0.5274125 0.4626546875 0.5395890624999999 0.4772625 0.5608265625 0.4777671875 0.588578125 0.47625624999999994 0.6337375 0.47071406250000003 0.6447812500000001 0.46920312500000005 0.6731 0.4868328125 0.6932046875 0.4943890625 0.715009375 0.47272968750000005 0.7351156249999999 0.4404921875 0.7583359375 0.44955937500000004 0.7835390624999999 0.45358906250000003 0.809590625 0.42890625 0.8262984375 0.41278750000000003 0.8506515625000001 0.41228437500000004 0.879253125 0.422359375 0.89624375 0.41228437500000004 0.9265437500000001 0.41530625 0.9520296874999999 0.4143 0.9797812499999999 0.4041359375 0.9984375 0.434334375 0.9984375 0.43344062499999997 0.9896921875 0.44653593750000004 0.9690203125 0.468196875 0.9704359374999999 0.5029515625000001 0.978365625 0.5296484375 0.9939406249999999 0.5343859375 0.9984375 0.569009375 0.9984375 0.5649078125 0.996771875 0.5367 0.9797812499999999 0.514034375 0.9653390625 0.4868328125 0.9548609375 0.4551 0.94891875 0.4510703125 0.927396875 0.44704062499999997 0.9013578125 0.4409953125 0.88465 0.4319296875 0.8642609374999999 0.44704062499999997 0.844184375 0.4621515625 0.8232296874999999 0.4641671875 0.7725453124999999 0.48431562499999997 0.749325 0.5291453125000001 0.724521875 0.5291453125000001 0.7058328125 0.5084921875 0.6804875 0.5034562499999999 0.654434375 0.48733750000000003 0.6133734375000001 0.5074859375 0.5767109375 0.5009375 0.5500921875 0.485321875 0.516959375 0.46920312500000005 0.49855312500000004 0.4566109375 0.48609375000000005 0.45006250000000003 0.47221718749999997 0.4455296875 0.435971875 0.4279 0.43115781249999996 0.43293593750000003 0.4444671875 0.43847812499999994 0.47788125 0.43495156250000006 0.4914734375 0.4188328125 0.49996875 0.3971734375 0.49260624999999997 0.39666875 0.45707812499999995 0.403721875 0.42722499999999997 0.4188328125 0.40230468750000004 0.438146875 0.365625 0.4557765625 0.35259843750000003 0.4638359375 0.321175 0.46937656250000004 0.29200781249999996 0.4885171875 0.2764328125 0.5096734374999999 0.25915937499999997 0.537378125 0.2282921875 0.5333484375 0.20475625000000003 0.5338515625 0.188615625 0.5494671875 0.166528125 0.554 0.1486875 0.556015625 0.1268828125 0.5504734375 0.097715625 0.5590375 0.0815734375 0.5756593750000001 0.0648671875 0.5932890625 0.0484421875 0.6094078125 0.0314515625 0.6089046875 0.018425 0.62099375 0.007664062500000001 0.62248125 0 0.610103125 0
3、数据集适用范围
- 语义分割识别场景,监控摄像头识别
- yolo训练模型或其他模型
- 城市道路、园区路面、隧道、乡镇路面等场景
- 可以用于通过裂缝几何特征(如宽度、走向)评估道路健康状态,预测病害发展趋势等。
4、数据集标注结果
4.1、数据集内容
- 多角度场景:监控摄像头视角,低空航拍视角;
- 标注内容:3个分类;
- 图片总量:4710 张图片数据;
- 标注类型:labelme Json格式和yolo TXT格式;
5、训练过程
5.1、导入训练数据
下载YOLO项目压缩包,解压在任意本地workspace文件夹中。
下载YOLO预训练分割模型,导入到ultralytics-main项目根目录下。
在ultralytics-main项目根目录下,创建data文件夹,并在data文件夹下创建子文件夹:images、labels,其中,将YOLO格式的TXT文件手动导入到labels文件夹中,将JPG格式的图像数据导入到images文件夹中。
(注:数据集文件包中train、test、valid三个文件夹的images和labels合并)
data目录结构如下:
5.2、数据划分
首先在ultralytics-main目录下创建一个split.py文件,运行文件之后会在ultralytics-main目录下生成datasets文件夹,具体目录如下:

训练集、验证集、测试集已经完成划分。
import shutil
import random
import os
# 原始路径
image_original_path = "data/images/"
label_original_path = "data/labels/"
# 数据集划分比例(可以自定义)
train_percent = 0.8
val_percent = 0.1
test_percent = 0.1
cur_path = os.getcwd()
# 训练集路径
train_image_path = os.path.join(cur_path, "datasets/images/train/")
train_label_path = os.path.join(cur_path, "datasets/labels/train/")
# 验证集路径
val_image_path = os.path.join(cur_path, "datasets/images/val/")
val_label_path = os.path.join(cur_path, "datasets/labels/val/")
# 测试集路径
test_image_path = os.path.join(cur_path, "datasets/images/test/")
test_label_path = os.path.join(cur_path, "datasets/labels/test/")
# 训练集目录
list_train = os.path.join(cur_path, "datasets/train.txt")
list_val = os.path.join(cur_path, "datasets/val.txt")
list_test = os.path.join(cur_path, "datasets/test.txt")
def del_file(path):
for i in os.listdir(path):
file_data = path + "\\" + i
os.remove(file_data)
def mkdir():
if not os.path.exists(train_image_path):
os.makedirs(train_image_path)
else:
del_file(train_image_path)
if not os.path.exists(train_label_path):
os.makedirs(train_label_path)
else:
del_file(train_label_path)
if not os.path.exists(val_image_path):
os.makedirs(val_image_path)
else:
del_file(val_image_path)
if not os.path.exists(val_label_path):
os.makedirs(val_label_path)
else:
del_file(val_label_path)
if not os.path.exists(test_image_path):
os.makedirs(test_image_path)
else:
del_file(test_image_path)
if not os.path.exists(test_label_path):
os.makedirs(test_label_path)
else:
del_file(test_label_path)
def clearfile():
if os.path.exists(list_train):
os.remove(list_train)
if os.path.exists(list_val):
os.remove(list_val)
if os.path.exists(list_test):
os.remove(list_test)
def main():
mkdir()
clearfile()
file_train = open(list_train, 'w')
file_val = open(list_val, 'w')
file_test = open(list_test, 'w')
total_txt = os.listdir(label_original_path)
num_txt = len(total_txt)
list_all_txt = range(num_txt)
num_train = int(num_txt * train_percent)
num_val = int(num_txt * val_percent)
num_test = num_txt - num_train - num_val
train = random.sample(list_all_txt, num_train)
# train从list_all_txt取出num_train个元素
# 所以list_all_txt列表只剩下了这些元素
val_test = [i for i in list_all_txt if not i in train]
# 再从val_test取出num_val个元素,val_test剩下的元素就是test
val = random.sample(val_test, num_val)
print("训练集:{}, 验证集:{}, 测试集:{}".format(len(train), len(val), len(val_test) - len(val)))
for i in list_all_txt:
name = total_txt[i][:-4]
srcImage = image_original_path + name + '.jpg'
srcLabel = label_original_path + name + ".txt"
if i in train:
dst_train_Image = train_image_path + name + '.jpg'
dst_train_Label = train_label_path + name + '.txt'
shutil.copyfile(srcImage, dst_train_Image)
shutil.copyfile(srcLabel, dst_train_Label)
file_train.write(dst_train_Image + '\n')
elif i in val:
dst_val_Image = val_image_path + name + '.jpg'
dst_val_Label = val_label_path + name + '.txt'
shutil.copyfile(srcImage, dst_val_Image)
shutil.copyfile(srcLabel, dst_val_Label)
file_val.write(dst_val_Image + '\n')
else:
dst_test_Image = test_image_path + name + '.jpg'
dst_test_Label = test_label_path + name + '.txt'
shutil.copyfile(srcImage, dst_test_Image)
shutil.copyfile(srcLabel, dst_test_Label)
file_test.write(dst_test_Image + '\n')
file_train.close()
file_val.close()
file_test.close()
if __name__ == "__main__":
main()
5.3、修改数据集配置文件
在ultralytics-main目录下创建一个data.yaml文件
path: ../datasets/images
train: train # 数据集路径下的train
val: val # 数据集路径下的val
test: test # 数据集路径下的test
# 标签个数
nc: 3
# Classes标签名称
names: ['Alligator_crack', 'Longitudinal_crack', 'Transverse_crack']
5.4、执行命令
在ultralytics-main目录下创建一个train.py文件,运行
from ultralytics import YOLO
if __name__ == '__main__':
model = YOLO("yolo11s-seg.pt")
model.train(data=r'data.yaml',
imgsz=640,
epochs=100,
batch=16,
workers=0,
device='0'
)
也可以在终端执行下述命令:
yolo segment train data=data.yaml model=yolo11s-seg.pt epochs=200 imgsz=640 batch=16 workers=0 device=0
模型训练结果如下:




5.5、模型预测
在ultralytics-main目录下创建一个test_pic文件夹,导入测试集图片,在ultralytics-main目录下新建predict.py预测脚本文件,运行后会在 run/segment/predict 文件夹下生成推理图片。
代码如下:
import warnings
warnings.filterwarnings('ignore')
from ultralytics import YOLO
if __name__ == '__main__':
model = YOLO('runs/segment/train/weights/best.pt')
model.predict(source='test_pic',
imgsz=640,
device='0',
save=True
)
6、获取数据集
文章底部名片或主页私信获取数据集~
——————————————————————————
更多数据集请查看