本文介绍利用PaddleClas结合Road Traversing Knowledge (RTK) Dataset训练道路类型和质量分类模型的过程。先解压含8类道路质量标注的数据集,生成数据列表,再用Road.yaml配置训练模型,之后进行预测并将结果绘到图上,最后拼接图片成视频展示效果。
☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 免费无限量使用 DeepSeek R1 模型☜☜☜

引入
- 路面类型和道路质量是有关人或自动驾驶车辆应如何驾驶的重要信息
- 除了乘客舒适度和车辆维护以外,它还涉及每个人的安全
- 本次就使用 PaddleClas 结合 Road Traversing Knowledge (RTK) Dataset 训练一个简易的道路类型和质量分类的模型
数据集介绍
- 本次使用的数据集为 Road Traversing Knowledge (RTK) Dataset
- 数据集特点:
- 该数据集提供了由低成本相机(HP Webcam HD-4110)拍摄的图像
- 包含不同路面类型的道路:沥青变化、其他路面类型,甚至非路面
- 其中还包含了一个包含道路质量标注的小数据集
- 道路质量标注分为如下 8 个等级:
asphalt(Good) asphalt(Regular) asphalt(Bad) paved(Good) paved(Regular) paved(Bad) unpaved(Regular) unpaved(Bad)
解压数据集
!unzip -q data/data72034/01_asphaltGood.zip -d dataset !unzip -q data/data72034/02_asphaltRegular.zip -d dataset !unzip -q data/data72034/03_asphaltBad.zip -d dataset !unzip -q data/data72034/04_pavedGood.zip -d dataset !unzip -q data/data72034/05_pavedRegular.zip -d dataset !unzip -q data/data72034/06_pavedBad.zip -d dataset !unzip -q data/data72034/07_unpavedRegular.zip -d dataset !unzip -q data/data72034/08_unpavedBad.zip -d dataset
生成数据列表
import os
dirs = os.listdir('dataset')
dirs.sort()
labels = [_.split('_')[1] for _ in dirs]
datas = []for index, path in enumerate(dirs):
imgs = os.listdir(os.path.join('dataset', path))
imgs.sort() for img in imgs:
datas.append('%s %d\n' % (os.path.join(path, img), index))import random
random.shuffle(datas)with open('dataset/train.txt', 'w', encoding='UTF-8') as f: for line in datas[:-200]:
f.write(line)with open('dataset/val.txt', 'w', encoding='UTF-8') as f: for line in datas[-200:]:
f.write(line)
模型训练
- 使用到的配置文件为 Road.yaml
%cd ~/PaddleClas
!python tools/train.py \
-c ../Road.yaml
模型预测
- 使用模型进行预测并将结果绘制到源图片上
%cd ~/PaddleClas
!python tools/infer/infer.py \
-i ../dataset/tests \
--model RepVGG_A0 \
--pretrained_model ../output/RepVGG_A0/best_model/ppcls \
--use_gpu True \
--load_static_weights False \
--top_k -1 \
--class_num 8 \
--save_dir ../predict
视频拼接
- 将预测完成的结果图片拼接为一个视频
%cd ~import cv2import os
fps = 30size = (352, 288)
videowriter = cv2.VideoWriter("test.mp4", cv2.VideoWriter_fourcc(*'mp4v'), fps, size)
path = 'predict'imgs = os.listdir(path)
imgs.sort()for i in imgs:
img = cv2.imread(os.path.join(path, i))
videowriter.write(img)
videowriter.release()
/home/aistudio










