ARTICLE DETAIL

资讯详情

深耕网站建设、视觉设计与SEO优化的一线实战洞察。

日本路面缺陷检测数据集:YOLOv5 7类9712张图实战指南

日本路面缺陷检测数据集:YOLOv5 7类9712张图实战指南 简介这份资源面向从事道路巡检、智能交通与计算机视觉方向的目标检测开发者提供日本马路路面缺陷检测数据集可直接用于YOLOv5训练与算法验证。数据按YOLOv5标准目录组织无需额外转换即可投入训练图像为600×600的RGB图片覆盖纵向裂纹、横向裂纹、坑洞、不规则裂缝等7类路面缺陷。压缩包共约2000个文件以txt标签与类别说明文件为主另附1个可视化py脚本整体约753.56MB训练集含7757张图片及对应标签验证集含1955张图片及对应标签划分清晰。脚本可随机读取一张图片绘制边界框并保存到当前目录无需修改即可运行便于快速检查标注质量与类别分布。目前已有326人学习下载适合需要现成路面缺陷数据做模型训练、迁移学习或缺陷检测方案验证的读者参考使用。1. 日本路面缺陷检测数据集7 类病害、9712 张图的 YOLOv5 目录直用包手上拿到一份标注好的路面病害数据比调模型本身更让人头疼。这份日本马路路面缺陷检测数据集按 YOLOv5 目录格式整理训练集 7757 张、验证集 1955 张图像统一 600×600 RGB标签与图片同名同目录7 个类别覆盖纵向裂纹、横向裂纹、坑洞、不规则裂缝等常见路面病害总大小 753 MB。它解决的是「有场景、没数据」这个卡脖子问题——道路巡检、养护评估、自动驾驶感知预研都能直接拿它起步。适合想跑通 YOLOv5 训练链路的新手也适合需要快速验证缺陷检测方案的熟手。下面从目录结构、可视化验证、训练配置到踩坑一步步拆开。2. 目录结构与标签格式先看懂 YOLOv5 的约定2.1 标准目录长什么样YOLOv5 对数据集的目录约定很死板但正是这种死板让训练脚本几乎不用改。这份数据解压后大致是下面这个结构训练集和验证集各自独立成对datasets/ ├── images/ │ ├── train/ # 7757 张 .jpg │ └── val/ # 1955 张 .jpg ├── labels/ │ ├── train/ # 7757 个 .txt │ └── val/ # 1955 个 .txt └── classes.txt # 7 类别名称关键点是images/train和labels/train必须一一对应图片叫Japan_002311.jpg标签就必须叫Japan_002311.txt少一个都会在训练时被 YOLOv5 直接跳过并打印 warning。很多人第一次跑发现「图片数对不上」八成是某张图没有对应标签或者标签文件名多了个空格。2.2 标签 txt 里到底存了什么每个标签文件里是一行行的归一化坐标格式为class_id x_center y_center width height全部是 0~1 的相对值。举个例子一张 600×600 的图里有个坑洞标注框左上角在 (120, 240)、宽 180、高 90那么写进 txt 的就是2 0.350000 0.475000 0.300000 0.150000class_id从 0 开始编号对应classes.txt里的顺序。这里有个血泪经验不同来源的数据集类别顺序经常不一致如果你把这份数据和别的路面数据混着训一定要先统一classes.txt的顺序否则模型会把「纵向裂纹」学成「坑洞」loss 看着降但实际全错。归一化坐标的好处是跟图像分辨率解耦600×600 的图换成 640×640 输入也不用重标。2.3 类别文本与类别不平衡7 个类别里裂纹类样本通常远多于坑洞类这是路面数据的通病。训练前建议先统计一下每个类别的框数量import os from collections import Counter label_dir datasets/labels/train counter Counter() for f in os.listdir(label_dir): if not f.endswith(.txt): continue with open(os.path.join(label_dir, f)) as fp: for line in fp: cls int(line.split()[0]) counter[cls] 1 for cls_id in sorted(counter): print(fclass {cls_id}: {counter[cls_id]} boxes)跑完你会对哪几类偏少心里有数。偏少的类别可以在训练时用--weights做微调、或者对少数类做 oversampling别一上来就硬训不然模型对坑洞的召回会很难看。这一步花五分钟能省后面几小时的调参。3. 可视化脚本验证训练前先确认标注没歪3.1 show.py 怎么用数据集自带一个可视化脚本随机传一张图进去就能画出边界框并保存到当前目录。这是训练前最该做的一步——标注框画歪了、类别串了肉眼看图比看 loss 曲线快得多。常见写法是这样import cv2 import random import os img_dir datasets/images/train label_dir datasets/labels/train classes [longitudinal_crack, transverse_crack, pothole, irregular_crack, alligator_crack, rutting, patch] img_name random.choice(os.listdir(img_dir)) img_path os.path.join(img_dir, img_name) img cv2.imread(img_path) h, w img.shape[:2] label_path os.path.join(label_dir, img_name.replace(.jpg, .txt)) with open(label_path) as f: for line in f: cls, xc, yc, bw, bh map(float, line.split()) x1 int((xc - bw / 2) * w) y1 int((yc - bh / 2) * h) x2 int((xc bw / 2) * w) y2 int((yc bh / 2) * h) cv2.rectangle(img, (x1, y1), (x2, y2), (0, 255, 0), 2) cv2.putText(img, classes[int(cls)], (x1, y1 - 5), cv2.FONT_HERSHEY_SIMPLEX, 0.5, (0, 255, 0), 1) cv2.imwrite(vis_result.jpg, img) print(fsaved vis_result.jpg for {img_name})逻辑很直白读图拿到宽高把归一化坐标反算回像素坐标再画框写类别名。参数上classes列表的顺序必须和classes.txt完全一致否则框是对的、标签是错的反而更误导人。3.2 看什么、怎么判断标注质量跑几次随机抽样后重点看三件事。第一框有没有明显偏移或漏标尤其是坑洞这种边界模糊的目标标注框太松会让模型学到一堆背景。第二类别名和实际病害对不对得上裂纹被标成坑洞这种错误在混合来源数据里很常见。第三有没有空标签文件或者全零坐标这类脏数据会让训练报NaN或者直接崩。提示随机抽 20~30 张覆盖不同类别比只看一张更有代表性。发现系统性问题就回去修标签别指望模型自己扛。3.3 生成训练用的 data.yamlYOLOv5 训练靠一个 yaml 文件告诉它数据在哪、有几类。按这份数据的结构写出来是这样path: ./datasets train: images/train val: images/val nc: 7 names: [longitudinal_crack, transverse_crack, pothole, irregular_crack, alligator_crack, rutting, patch]nc是类别数必须和names长度一致写错了训练启动就会报维度不匹配。path用相对路径时注意你运行train.py的工作目录路径对不上会提示找不到图片。稳妥做法是用绝对路径省得来回猜。4. 训练配置与参数从 yolov5s 起步的实操4.1 环境与依赖先确认环境干净。常见做法是用 conda 建个独立环境避免和系统里的包打架conda create -n road_defect python3.9 -y conda activate road_defect pip install torch torchvision --index-url https://download.pytorch.org/whl/cu118 pip install -r requirements.txttorch的版本要和你机器的 CUDA 对上装错了会在训练第一步报CUDA error。requirements 里主要是opencv-python、numpy、pyyaml这些装完用python -c import torch; print(torch.cuda.is_available())验证一下 GPU 能不能用。4.2 启动训练的命令与参数从 yolov5s 预训练权重起步这是最稳的起点python train.py \ --img 640 \ --batch 16 \ --epochs 100 \ --data data/road_defect.yaml \ --weights yolov5s.pt \ --cfg models/yolov5s.yaml \ --name road_defect_run逐个说参数。--img 640是输入尺寸原图 600×600YOLOv5 会自动 letterbox 到 640不用手动改图。--batch 16看显存8G 显存跑 16 一般没问题爆了就降到 8。--epochs 100是起步值路面缺陷类别少、特征明显通常 50~100 轮就能收敛看mAP0.5不再涨就可以停。--weights yolov5s.pt用预训练权重能明显加快收敛从零训在小数据集上很容易过拟合。--name决定结果存到runs/train/road_defect_run/。4.3 训练过程看什么指标启动后终端会打印每个 epoch 的box_loss、obj_loss、cls_loss和验证集的mAP0.5、mAP0.5:0.95。box_loss降得慢说明框回归没学好可能是标注框质量差cls_loss高说明类别混淆回去看类别是否平衡。mAP0.5是主指标路面缺陷这种任务做到 0.6~0.8 算正常低于 0.4 基本是数据或标注有问题别急着调超参。注意训练中途别频繁中断YOLOv5 的 dataloader 有缓存反复重启会拖慢整体速度。要停就等一个 epoch 结束。4.4 推理与验证训完用detect.py跑几张验证集图片看效果python detect.py \ --weights runs/train/road_defect_run/weights/best.pt \ --source datasets/images/val \ --conf 0.25 \ --save-txt--conf 0.25是置信度阈值路面缺陷建议先设低一点看召回漏检比误检更致命。--save-txt会把预测框存成 txt方便和真值对比算指标。结果图在runs/detect/exp/下肉眼过一遍重点看坑洞和小裂纹有没有漏。5. 避坑与排查训练路上最容易翻车的几处5.1 图片和标签数量对不上现象训练启动后打印WARNING: Ignoring corrupted image或者实际参与训练的图片数少于 7757。原因通常是某张图没有对应 txt或者文件名大小写、后缀不一致.JPGvs.jpg。解决写个脚本比对两个目录的文件名集合差集就是问题文件补齐或删掉。5.2 loss 变成 NaN现象训练几个 epoch 后box_loss突然变nan整个训练崩掉。原因多半是标签里有非法值——坐标超过 1、负数或者空文件里混了空行。解决遍历所有 txt检查每行是否 5 个字段、坐标是否都在 0~1 之间把异常行清掉再训。5.3 显存爆了CUDA out of memory现象训练刚开始就报 OOM。原因可能是--batch太大或者--img设得比实际需要高。解决先把 batch 降到 8 甚至 4还不行就降--img到 512。600×600 的图用 640 输入已经够没必要上 1280。5.4 类别顺序错乱导致指标虚高现象mAP看着不错但推理时类别名全对不上。原因是你用的data.yaml里names顺序和标签里的class_id不一致。解决以classes.txt为准逐条核对names列表顺序错一位全盘皆错。5.5 验证集指标远低于训练集现象训练集mAP0.8验证集只有 0.3。原因通常是训练集和验证集分布不一致或者验证集里有些类别训练集几乎没有。解决先统计两个集合的类别分布差距大就重新划分别用现成的划分硬训。6. 进阶技巧把这份数据用到极致想让这份数据发挥更大价值有几个方向值得试。第一做数据增强时针对路面场景定制比如随机调整亮度模拟不同光照、加运动模糊模拟车载摄像头抖动比默认的翻转裁剪更贴合实际。第二用--freeze冻结 backbone 先训几轮 head再解冻全量微调小数据集上这样收敛更稳。第三把 600×600 的图切块做小目标检测裂纹在整图里占比很小切块后单块分辨率相对提高小目标召回会明显改善。验证模型好不好别只看mAP。我一般会挑几张有代表性的图——密集裂纹、单个坑洞、多类别混合——单独跑推理把预测框和真值框叠一起看。指标是平均值具体场景的漏检和误检才是上线前真正要盯的。还有个习惯每次换数据集或改配置我都会先跑 5 个 epoch 的短训确认 loss 正常下降、没有报错再开长训。这个「后悔药」动作帮我省过好几次白跑一整晚的尴尬。路面缺陷检测这活儿数据质量决定上限模型只是逼近上限的工具把标注和验证做扎实比调参有用得多。希望帮到你。本文还有配套的精品资源点击获取
返回列表