PaddleClas:训练一个简易的道路质量分类模型

PaddleClas:训练一个简易的道路质量分类模型
最新回答
╰未成年的花朵

2021-01-02 09:37:34

使用PaddleClas结合RTK数据集训练简易道路质量分类模型的完整流程如下

一、数据集准备与解压
  1. 数据集特点

    使用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)

  2. 解压数据集通过命令行解压8个压缩包至dataset目录:

    !unzip -q data/data72034/01_asphaltGood.zip -d dataset!unzip -q data/data72034/02_asphaltRegular.zip -d dataset# ...(依次解压其他6个文件)
二、生成训练与验证数据列表
  1. 代码逻辑

    遍历dataset目录下的子文件夹(每个子文件夹对应一个类别)。

    提取子文件夹名中的类别标签(如01_asphaltGood中的asphaltGood)。

    将图像路径与类别索引(0-7)对应,生成train.txt(训练集)和val.txt(验证集),按8:2比例划分。

  2. 关键代码

    import osdirs = 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 %dn' % (os.path.join(path, img), index))random.shuffle(datas)with open('dataset/train.txt', 'w') as f: f.writelines(datas[:-200]) # 前80%为训练集with open('dataset/val.txt', 'w') as f: f.writelines(datas[-200:]) # 后20%为验证集
三、模型训练配置与启动
  1. 配置文件Road.yaml

    需自定义配置以下关键参数:

    model_name: 选择模型架构(如RepVGG_A0)。

    class_num: 类别数(8类)。

    data_dir: 数据集路径(dataset/)。

    train_list和val_list: 对应生成的train.txt和val.txt。

    epochs: 训练轮数(建议50-100轮)。

    learning_rate: 初始学习率(如0.001)。

  2. 启动训练

    %cd ~/PaddleClas!python tools/train.py -c ../Road.yaml
四、模型预测与结果可视化
  1. 预测命令

    使用训练好的模型对测试集(dataset/tests)进行预测,结果保存至predict目录:%cd ~/PaddleClas!python tools/infer/infer.py -i ../dataset/tests --model RepVGG_A0 --pretrained_model ../output/RepVGG_A0/best_model/ppcls --use_gpu True --class_num 8 --save_dir ../predict

  2. 结果可视化

    预测脚本会自动将分类结果(类别标签和置信度)绘制在原图上,生成带标注的图像。

五、预测结果拼接为视频
  1. 视频生成逻辑

    使用OpenCV按帧顺序读取预测结果图像,写入视频文件:

    帧率(fps):30帧/秒。

    分辨率(size):与输入图像一致(如352×288)。

    编码格式:mp4v(MP4格式)。

  2. 关键代码

    import cv2import osfps = 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()
六、关键注意事项
  1. 数据平衡性

    检查各类别样本数量是否均衡,避免模型偏向多数类。

  2. 模型选择

    轻量级模型(如RepVGG_A0)适合嵌入式设备部署,若追求精度可尝试ResNet50_vd。

  3. 超参数调优

    学习率、批次大小(batch_size)需根据GPU显存调整。

  4. 部署优化

    导出模型为inference格式,使用Paddle Inference或Paddle Lite加速推理。

通过以上步骤,可完成从数据准备到模型部署的全流程,最终生成道路质量分类的视频演示效果。