基于深度学习的交通流量预测系统(Web 版)

一、项目简介

本项目把微观车辆轨迹数据转换成可预测的流量时序,并用 PyTorch 训练 RNN 与 LSTM 两条回归链路,再由 FastAPI 封装成可直接登录使用的 Web 平台。

平台把一条完整链路拆成三段:数据段读取法国 Créteil 的 VANET 轨迹 CSV,清洗后按 100 米空间网格与 5 分钟时间窗聚合成流量、平均速度与公交数量;训练段以 12 步历史窗口预测未来 3 步,同时记录逐轮损失与学习率;应用段提供在线预测、步长外推、批量推理、数据浏览、历史留存、统计看板与网页端真实训练。

流量预测页:左侧填历史序列并选择模型,右侧实时绘出历史段与预测段

二、数据说明

1. 数据来源与字段

数据来自公开的微观车辆移动轨迹数据集 vanet-trace-creteil-20130924-0700-0900,记录法国 Créteil 地区 Europarc 环岛在 2013 年 9 月 24 日 07:00--09:00 的逐秒车辆状态,采用 CC BY-NC 4.0 许可。原始 CSV 以分号分隔,共 96 万余行,包含 10 个字段。

字段 含义 类型
timestep_time 时间步,从采集起点按秒递增 浮点
vehicle_id 车辆唯一标识,含类型与流向信息 字符串
vehicle_type 车辆类型,Bus 或 Vehicle 字符串
vehicle_x / vehicle_y 平面坐标,单位米 浮点
vehicle_speed 瞬时速度,单位米每秒 浮点
vehicle_angle / vehicle_slope 航向角与坡度 浮点
vehicle_lane 车道标识 字符串
vehicle_pos 车辆在车道内的位置 浮点

2. 清洗与聚合结果

依次做去重、缺失值删除与异常值剔除:轨迹中不存在重复行,18 处缺失值直接删除,速度按 0--200 m/s 合理区间过滤、坐标按四分位距过滤,合计剔除 11.7 万行,最终保留 845,756 条记录,覆盖 5,103 辆车与 7,384 个时间步。车辆构成以普通车为主,公交车 11,108 条记录。

指标 数值 说明
原始记录数 962,721 CSV 中的全部轨迹记录
清洗后记录数 845,756 剔除缺失与异常后的有效轨迹
车辆数 5,103 去重后的车辆标识数量
时间步 7,384 按秒记录,跨度约 2 小时
空间网格 46 100 米网格,覆盖环岛及周边道路
聚合时间窗 25 每个窗口 300 秒
单窗平均流量 737.4 46 个网格的窗口均值
单窗最高流量 12,468 出现在网格 12_5

3. 网格流量分布

聚合后 46 个网格的流量高度集中:排名第一的 12_5 累计 171,495 辆次、峰值 12,468,占全部流量近三成;前五个网格合计占比过半,其余多为边缘路段的低频网格。

数据浏览页:规模指标、网格时序、流量热力与网格排行

三、模型训练与结果

1. 序列构造与归一化

按网格分组后滑动切窗,每条样本取连续 12 个窗口的车流量作为输入,对应输出未来 3 个窗口,得到 503 条有效序列。归一化使用全部样本的极值做统一 Min-Max,避免输入与目标各自缩放导致尺度过大,参数写入 normalize_params.json 供推理复用。

2. 网络结构与训练配置

RNN 与 LSTM 使用一致的规模与训练口径,便于公平对比:输入维度 1、隐藏层 64、两层堆叠、第 1 层 Dropout 0.2,末层接全连接输出 3 维。损失为均方误差,优化器 Adam,初始学习率 0.001,配合 ReduceLROnPlateau 按验证损失折半衰减,梯度裁剪上限 1.0,训练 50 轮并按验证损失保存最优权重。

3. 训练过程

LSTM 在第 39 轮取得最佳验证损失 0.000029,末轮训练损失 0.005329、验证损失 0.000034;学习率由 0.001 逐级衰减至 0.000125。RNN 在第 5 轮即达最佳验证损失 0.001295,之后长期停留在 0.0016 附近,说明基础循环结构对这段时序的拟合能力有限。

LSTM 训练产物:训练与验证损失、学习率衰减曲线

4. 评估结果

在测试集上反归一化后计算四项指标,LSTM 全面优于 RNN:

指标 RNN LSTM 变化
MAE 496.3673 55.5674 下降 88.81%
RMSE 548.8459 90.5668 下降 83.50%
MAPE 478.10% 52.80% 下降 88.96%
R² −4.4498 0.8516 提升 5.3014

RNN 的 R² 为负,意味着其预测效果还不如直接取均值,MAPE 也因小流量样本被放大而失真,因此 R² 一列给出的是绝对差而非百分比。LSTM 的 R² 达到 0.8516,可解释约 85% 的流量波动,与训练过程中验证损失的收敛趋势一致。

模型对比页:四项指标柱状与雷达对照

四、系统功能设计

平台共有八个功能页,入口统一放在左侧分组导航,窄屏下收为左侧抽屉。每个页面各自保留独立容器,切换时只改显隐并调用上一页的销毁钩子,返回即拉取最新数据。

1. 登录与注册

页面中心单栏卡片,登录与注册共用同一张 3 : 4 比例的卡片,标题使用楷体并按词义断行。密码以 PBKDF2-SHA256 加盐哈希保存,会话通过 HttpOnly Cookie 维持七天;注册校验用户名长度与密码强度。

登录页:实拍背景与 3:4 登录卡片

2. 流量预测

粘贴历史序列、选择 LSTM 或 RNN、指定预测步长即可推理。结果同时给出逐步预测值、未来时段的均值与峰值、实际推理耗时,并把历史段与预测段画在同一条曲线上,用虚线区分预测部分,下表逐项列出环比变化。

3. 批量预测

可按流量排名自动取网格序列,也可手动逐行粘贴多组序列。一次最多提交 200 组,逐组给出结果与失败原因,成功项汇总成柱状对比与明细表,并支持导出 CSV。

批量预测结果:各组对比与明细

4. 数据浏览

展示清洗后的记录数、车辆数、网格数与时间窗数,可切换网格查看完整流量与平均速度双轴时序,并以热力矩阵呈现流量前 16 个网格在全部时间窗上的分布,右侧配网格流量排行表。热力图按分位数取色,避免强偏态数据把多数格子压在浅色端。

5. 预测历史

按类型、模型与网格筛选历史记录,每条记录保留输入序列、预测结果、均值、峰值与耗时,可查看详情或整表导出 CSV。所有记录写入 SQLite,并按账号隔离。

预测历史页:筛选、分页与导出

6. 统计分析

汇总预测总次数、平均预测流量、历史峰值与平均耗时,并按模型占比、预测类型、每日次数与网格使用排行四个维度统计;另附数据集中各小时的平均流量。

统计分析页:模型占比、类型分布与网格排行

7. 模型对比

读取训练脚本输出的对比结果,以柱状图与雷达图并列展示两种模型的四项指标,表格逐项列出数值、变化幅度与更优者。页面注明数据来源为测试集评估,指标未做二次加工。

8. 模型训练

在浏览器配置模型类型、轮数、学习率、批次、隐藏层维度、层数、Dropout、序列长度与预测步长后发起真实训练。训练在独立子进程中执行,页面按秒轮询状态并实时绘制训练损失与学习率曲线,滚动显示训练日志;训练中可提交新的学习率由训练进程在下一轮确认生效,也可安全停止。结束后可下载 best 与 last 权重,并一键加载为当前推理模型。

模型训练页:超参数配置、实时曲线与日志

9. 指标展示

解析训练日志中的逐轮记录,动态绘制两种模型的训练与验证损失、学习率变化,验证损失单独用对数坐标呈现收敛差异;右侧给出四项评估指标与训练总结,页面下方原样收录训练脚本输出的原始产物图。

指标展示页:动态曲线与原始训练产物

五、技术栈

类别 技术 用途
编程语言 Python、JavaScript 后端服务、模型训练与前端页面
深度学习 PyTorch RNN 与 LSTM 的建模、训练与推理
数据处理 Pandas、NumPy 轨迹清洗、网格聚合、序列构造与归一化
Web 服务 FastAPI、Uvicorn 接口服务与静态资源托管
Web 前端 原生模块化 JS、CSS 页面与交互,无需构建工具
数据存储 SQLite 账号、会话、预测记录与训练任务
图表 ECharts 按当前主题变量动态绘制曲线、热力与雷达图
任务调度 子进程 + 状态文件 训练任务执行、进度回传与控制指令

六、项目结构

目录 说明
main.py 原始训练入口,保留不动
src/data_processing 数据加载、清洗、特征工程与序列构造
src/models RNN 与 LSTM 网络定义
src/training 训练、评估与对比图表
src/prediction 推理封装
data/models 权重、归一化参数、训练日志与产物
web/一键启动.bat Windows 启动入口
web/run.py 环境检查与 Uvicorn 启动
web/main.py 服务装配与静态资源托管
web/app/config.py 路径、端口、序列与聚合参数
web/app/db.py SQLite 访问与建表
web/app/security.py 账号与会话
web/app/api 认证、预测、数据、历史与模型接口
web/app/services 数据中枢、推理、训练与指标解析
web/static 主题样式、页面脚本、图表库与背景图
web/templates 登录页与主界面模板

七、运行说明

1. 安装依赖

bash 复制代码
pip install -r requirements.txt

Web 端复用项目原有环境,需要 fastapi 与 uvicorn,不升级 PyTorch 与 CUDA。

2. 启动 Web 平台

bash 复制代码
双击 web/一键启动.bat
# 或在 web 目录执行
python run.py

服务默认监听 http://127.0.0.1:8100,使用初始化管理员账号登录。首次启动会读取轨迹 CSV 并生成聚合缓存,之后直接复用;重复启动会提示服务已在运行,端口被其他程序占用时只提示、不结束进程。

3. 发起预测与训练

登录后进入「流量预测」页填写序列即可推理,点击「载入真实样例」会自动取流量最高的网格前 12 个时间窗;「模型训练」页配置好超参数后点击「启动训练」,训练在独立子进程执行,页面实时回显损失曲线与日志,结束后可把新权重加载为推理模型。

相关推荐
kaixin_啊啊14 分钟前
【零基础学AI】第 25 章——计算机怎样处理文字
人工智能
一知半解仙16 分钟前
乌镇2026:当“智能互联网”第一次被数据照进现实
人工智能·物联网·机器人·开源
AiMan20 分钟前
别再把秘塔会话逐个点开:这可把秘塔多个会话一次导出?AI导出鸭
前端·后端·面试
AiMan20 分钟前
你好,请问可以一键导出Dola多个对话框内容吗?一键导出一整年哦
前端
泯泷41 分钟前
AI 最坑的失败:不是不会做,而是"假装做完了"
人工智能·llm·agent
Alluxio1 小时前
Alluxio + OCI:为 AI 工作负载实现亚毫秒访问延迟与可扩展吞吐
运维·数据库·人工智能·分布式·缓存·ai·语言模型