10.3 基于自动驾驶大模型的车辆轨迹预测系统
LyftModel 是指来自 Lyft Level 5 Research 的一个用于自动驾驶的深度学习模型。Lyft 是一家美国的科技公司,致力于开发自动驾驶技术,他们的 Level 5 Research 部门专注于研究和开发自动驾驶技术。LyftModel 很可能是他们开发的一种用于自动驾驶的深度学习模型,用于实现自动驾驶系统中的各种功能,例如感知、规划、控制等。
实例10-5:车辆轨迹预测系统(codes/7/lyft-eda-training.ipynb)
10.3.1 项目介绍
本项目使用开源的Lyft Level 5 Autonomous Vehicle数据集,通过加载、理解、可视化、抽象化数据,构建并训练了一个基于PyTorch的卷积神经网络(LyftModel),并实现了对自动驾驶场景中车辆轨迹的预测。通过数据处理、模型构建和训练,项目提供了全面的解决方案,包括数据增强和天气效果的引入,以提高模型性能。最终,通过模型推断和预测,实现了对未来车辆轨迹的准确预测,为自动驾驶领域的实际应用提供了实用性指导。
本项目的实现步骤如下所示。
- 数据加载和理解:通过使用Lyft Level 5数据集,项目介绍了如何加载并理解自动驾驶场景中的数据,包括车辆、道路、轨迹等。
- 数据可视化:使用lyft-l5kit的可视化工具,项目展示了如何在地图上可视化自动驾驶场景,以更好地理解数据。
- 数据处理和抽象:介绍了如何使用Lyft的l5kit库中的数据抽象类,将原始数据处理为模型可以使用的形式,包括使用rasterizer生成栅格图像。
- 模型构建:使用PyTorch构建了一个简单的卷积神经网络(CNN)模型(LyftModel),并介绍了如何调整模型的输入和输出以适应任务需求。
- 模型训练:使用训练数据集,项目演示了如何在Lyft数据集上训练模型,包括设置训练参数、准备数据加载器、定义损失函数等。
- 模型评估:介绍了模型评估的方法,包括使用训练和验证损失,以及可视化目标轨迹等。
- 模型推断和预测:展示了如何使用已经训练好的模型进行推断,以生成对未来车辆轨迹的预测。
- 数据增强:介绍了如何使用albumentations库进行数据增强,包括CutOut、CoarseDropout等,以提高模型的鲁棒性。
- 天气增强:展示了如何使用albumentations库添加天气效果的增强,包括雨、雾和雪。
本项目通过一系列的步骤和代码,全面介绍了Lyft Level 5 Autonomous Vehicle数据集的处理、建模和训练过程,是一个深入学习自动驾驶场景分析的实用教程。
10.3.2 准备工作
(1)导入与Lyft Level 5 Kit(L5Kit)相关的库,并设置了数据路径。为自动驾驶车辆的运动预测项目做了准备,包括数据加载、可视化和处理感知标签等功能。
import matplotlib.pyplot as plt
import numpy as np
from l5kit.data import ChunkedDataset, LocalDataManager
from l5kit.dataset import EgoDataset, AgentDataset
from l5kit.rasterization import build_rasterizer
from l5kit.configs import load_config_data
from l5kit.visualization import draw_trajectory, TARGET_POINTS_COLOR
from l5kit.geometry import transform_points
from tqdm import tqdm
from collections import Counter
from l5kit.data import PERCEPTION_LABELS
from prettytable import PrettyTable
import os
PATH_TO_DATA = "../input/lyft-motion-prediction-autonomous-vehicles"
os.environ["L5KIT_DATA_FOLDER"] = PATH_TO_DATA
(2)在cfg配置中定义用于自动驾驶车辆运动预测项目的关键参数,包括模型架构、数据加载设置、栅格化参数、训练和验证数据集配置,以及训练参数。这些参数将被用于配置和训练模型,以实现对车辆轨迹的准确预测。
cfg = {
'format_version': 4, # 配置文件格式版本
'model_params': {
'model_architecture': 'resnet50', # 使用的模型架构
'history_num_frames': 0, # 过去帧数
'history_step_size': 1, # 过去帧之间的步长
'history_delta_time': 0.1, # 过去帧之间的时间间隔
'future_num_frames': 50, # 预测的未来帧数
'future_step_size': 1, # 未来帧之间的步长
'future_delta_time': 0.1 # 未来帧之间的时间间隔
},
'raster_params': {
'raster_size': [224, 224], # 栅格图像大小
'pixel_size': [0.5, 0.5], # 像素大小
'ego_center': [0.25, 0.5], # 智能驾驶汽车在栅格图像中心的位置
'map_type': 'py_semantic', # 地图类型
'satellite_map_key': 'aerial_map/aerial_map.png', # 卫星图像路径
'semantic_map_key': 'semantic_map/semantic_map.pb', # 语义地图路径
'dataset_meta_key': 'meta.json', # 数据集元数据路径
'filter_agents_threshold': 0.5 # 过滤代理的阈值
},
'train_data_loader': {
'key': 'scenes/train.zarr', # 训练数据集路径
'batch_size': 32, # 批量大小
'shuffle': True, # 是否打乱数据
'num_workers': 4 # 数据加载器的工作进程数
},
'val_data_loader': {
'key': 'scenes/validate.zarr', # 验证数据集路径
'batch_size': 12, # 批量大小
'shuffle': False, # 是否打乱数据
'num_workers': 4 # 数据加载器的工作进程数
},
'test_data_loader': {
'key': 'scenes/test.zarr', # 测试数据集路径
'batch_size': 8, # 批量大小
'shuffle': False, # 是否打乱数据
'num_workers': 4 # 数据加载器的工作进程数
},
'train_params': {
'checkpoint_every_n_steps': 5000, # 每隔多少步保存一次模型
'max_num_steps': 1000 # 最大训练步数
}
}