跳到主要内容基于 YOLOv8 的高速路面病害无人机检测数据集与训练实战 | 极客日志PythonAI算法
基于 YOLOv8 的高速路面病害无人机检测数据集与训练实战
综述由AI生成本数据集包含 3349 张航拍高速路面图像,标注了裂缝、积水等 6 类病害。提供完整的 YOLOv8 训练流程,包括环境搭建、数据格式组织、配置文件编写及模型训练脚本。针对航拍小目标特性优化了增强策略,并附带 VOC/COCO 转 YOLO 工具,适用于无人机巡检系统的道路病害识别任务。
remedios7 浏览 航拍高速路面损害检测数据集概览
本数据集包含 3349 张无人机航拍视角的高速道路图像,分辨率统一为 1152×2048。主要面向智慧交通基础设施监测场景,支持小目标(如裂缝、垃圾)及密集目标的联合检测。

数据集属性
| 属性 | 详情 |
|---|
| 数据集名称 | Aerial UAV Highway Pavement Damage Detection Dataset |
| 采集视角 | 无人机航拍(俯视高速道路场景) |
| 图像总数 | 3,349 张 |
| 标注格式 | YOLO、VOC、COCO(三者均提供) |
| 任务类型 | 目标检测(Bounding Box) |
| 类别数量 | 6 类 |
类别详细统计
| 类别英文名 | 中文名称 | 含该类别图像数 | 标注实例总数 |
|---|
| Cracks | 裂缝 | 446 | 815 |
| Waterlogging | 积水 | 1,208 | 2,091 |
| Ravelling | 松散 | 459 | 869 |
| Muddy_road | 泥泞道路 | 952 | 2,084 |
| Road_side_garbage | 道路旁垃圾 | 329 | 429 |
| Potholes | 坑洼 | 663 |
注:单张图像可包含多个类别,总标注实例数为 7,640。
数据集划分
| 子集 | 图像数量 |
|---|
| 训练集 (train) | 3,153 |
| 验证集 (val) | 157 |
| 测试集 (test) | 39 |
| 总计 | 3,349 |
一、环境准备
推荐使用 Python 3.8+ 环境,安装 Ultralytics 库以支持 YOLOv8。
pip install ultralytics opencv-python numpy pandas tqdm
ultralytics 是官方 YOLOv8 库,原生支持 YOLO 格式标注,并兼容 VOC/COCO 格式的转换。
二、数据组织结构
建议将数据整理为标准的 YOLO 目录结构。假设根目录为 HighwayDamageDataset:
HighwayDamageDataset/
├── images/
│ ├── train/
│ ├── val/
│ └── test/
└── labels/
├── train/
├── val/
└── test/
每张图像 xxx.jpg 对应一个 xxx.txt,内容格式如下(坐标归一化到 [0,1]):
<class_id> <x_center> <y_center> <width> <height>
若你手头只有 VOC 或 COCO 标注,请参考后文提供的转换脚本。
三、YOLO 配置文件
创建 highway_damage.yaml 文件,定义路径和类别映射。
train: ./HighwayDamageDataset/images/train
val: ./HighwayDamageDataset/images/val
test: ./HighwayDamageDataset/images/test
nc: 6
names:
- Cracks
- Waterlogging
- Ravelling
- Muddy_road
- Road_side_garbage
- Potholes
💡 虽然 YAML 中支持中文,但建议保留英文命名以避免部分工具兼容问题。推理时可通过字典映射显示中文标签。
四、训练脚本
编写 train_highway.py 进行模型训练。这里选用 yolov8s.pt 作为预训练权重,兼顾速度与精度。
from ultralytics import YOLO
import os
def main():
os.makedirs("runs/highway_damage", exist_ok=True)
model = YOLO('yolov8s.pt')
results = model.train(
data='highway_damage.yaml',
epochs=150,
imgsz=1024,
batch=8,
name='yolov8s_highway_1024',
project='runs/highway_damage',
device=0,
workers=8,
cache=False,
optimizer='AdamW',
lr0=0.01,
lrf=0.01,
momentum=0.937,
weight_decay=0.0005,
warmup_epochs=3,
patience=30,
save=True,
save_period=10,
verbose=True,
plots=True,
hsv_h=0.015,
hsv_s=0.7,
hsv_v=0.4,
degrees=10.0,
translate=0.1,
scale=0.5,
shear=2.0,
perspective=0.001,
flipud=0.0,
fliplr=0.5,
mosaic=1.0,
mixup=0.1
)
print(f"✅ 训练完成!最佳模型路径:{results.save_dir}/weights/best.pt")
if __name__ == "__main__":
main()
命令行快速训练
如果你更习惯使用命令行,可以直接运行以下命令替代脚本:
yolo detect train \
data=highway_damage.yaml \
model=yolov8s.pt \
epochs=150 \
imgsz=1024 \
batch=8 \
name=yolov8s_highway_1024 \
project=runs/highway_damage \
device=0 \
optimizer=AdamW \
patience=30 \
hsv_h=0.015 hsv_s=0.7 hsv_v=0.4 \
degrees=10 fliplr=0.5 mosaic=1.0
五、关键训练建议
| 项目 | 建议 |
|---|
| 输入尺寸 | 使用 imgsz=1024。若显存允许,可尝试 1280 以提升小目标召回率。 |
| Batch Size | 8~16。由于原图宽度达 2048,显存占用较高,需根据 GPU 调整。 |
| 数据增强 | 启用 mosaic、fliplr、hsv;禁用 flipud(航拍上下方向具有物理意义)。 |
| 类别不平衡 | '积水'和'泥泞道路'样本较多,'垃圾'较少。若效果不佳,可开启 class_weights 自定义权重。 |
| 评估重点 | 关注 [email protected] 和 小目标 AP(特别是裂缝和垃圾)。 |
六、格式转换脚本
VOC 转 YOLO
如果你的数据是 XML 格式,可使用以下脚本转换:
import os
import xml.etree.ElementTree as ET
from pathlib import Path
class_names = [
"Cracks",
"Waterlogging",
"Ravelling",
"Muddy_road",
"Road_side_garbage",
"Potholes"
]
def convert_voc_to_yolo(voc_dir, yolo_dir, image_dir):
os.makedirs(yolo_dir, exist_ok=True)
for xml_file in Path(voc_dir).glob("*.xml"):
tree = ET.parse(xml_file)
root = tree.getroot()
img_w = int(root.find('size/width').text)
img_h = int(root.find('size/height').text)
lines = []
for obj in root.findall('object'):
cls_name = obj.find('name').text
if cls_name not in class_names:
continue
cls_id = class_names.index(cls_name)
bndbox = obj.find('bndbox')
xmin = int(bndbox.find('xmin').text)
ymin = int(bndbox.find('ymin').text)
xmax = int(bndbox.find('xmax').text)
ymax = int(bndbox.find('ymax').text)
x_center = (xmin + xmax) / 2 / img_w
y_center = (ymin + ymax) / 2 / img_h
width = (xmax - xmin) / img_w
height = (ymax - ymin) / img_h
lines.append(f"{cls_id} {x_center:.6f} {y_center:.6f} {width:.6f} {height:.6f}")
with open(os.path.join(yolo_dir, xml_file.stem + '.txt'), 'w') as f:
f.write('\n'.join(lines))
COCO 转 YOLO
YOLOv8 原生支持 COCO JSON 格式。只需在 highway_damage.yaml 中指定路径,并确保类别顺序与 names 列表一致即可:
train: path/to/coco/train.json
val: path/to/coco/val.json
七、推理与部署
训练完成后,加载最佳模型进行推理。以下示例展示了如何读取检测结果并映射为中文标签。
from ultralytics import YOLO
model = YOLO('runs/highway_damage/yolov8s_highway_1024/weights/best.pt')
results = model('test_image.jpg')
chinese_names = {
"Cracks": "裂缝",
"Waterlogging": "积水",
"Ravelling": "松散",
"Muddy_road": "泥泞道路",
"Road_side_garbage": "道路旁垃圾",
"Potholes": "坑洼"
}
for r in results:
boxes = r.boxes
for box in boxes:
cls_name = model.names[int(box.cls)]
print(f"检测到:{chinese_names.get(cls_name, cls_name)}")
📌 注意:由于原始图像宽高比极端(约 9:16),YOLO 会自动 padding 成正方形。若需严格保留比例,可考虑滑动窗口裁剪或使用 YOLOv8-OBB(本任务无需旋转框)。
相关免费在线工具
- 加密/解密文本
使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online
- RSA密钥对生成器
生成新的随机RSA私钥和公钥pem证书。 在线工具,RSA密钥对生成器在线工具,online
- Mermaid 预览与可视化编辑
基于 Mermaid.js 实时预览流程图、时序图等图表,支持源码编辑与即时渲染。 在线工具,Mermaid 预览与可视化编辑在线工具,online
- 随机西班牙地址生成器
随机生成西班牙地址(支持马德里、加泰罗尼亚、安达卢西亚、瓦伦西亚筛选),支持数量快捷选择、显示全部与下载。 在线工具,随机西班牙地址生成器在线工具,online
- Gemini 图片去水印
基于开源反向 Alpha 混合算法去除 Gemini/Nano Banana 图片水印,支持批量处理与下载。 在线工具,Gemini 图片去水印在线工具,online
- curl 转代码
解析常见 curl 参数并生成 fetch、axios、PHP curl 或 Python requests 示例代码。 在线工具,curl 转代码在线工具,online