基于深度学习的交通标志识别系统
项目简介
本项目实现了一个基于深度学习的交通标志识别系统,使用卷积神经网络(CNN)对交通标志图像进行分类识别。系统包含数据预处理、模型训练与评估、结果可视化和用户交互界面等模块。
数据集
项目使用德国交通标志识别基准数据集(GTSRB),包含43类不同的交通标志,超过50,000张彩色图像。数据集具有以下特点:
- 真实道路场景中拍摄的交通标志
- 不同光照、天气和遮挡条件
- 每类标志大小和数量不一
系统架构
- 数据预处理模块:数据加载、图像处理、数据增强、归一化
- 模型构建模块:设计并实现卷积神经网络架构
- 模型训练与评估模块:训练模型并评估性能
- 可视化模块:展示训练过程和识别结果
- 用户界面模块:提供图像上传和识别功能
技术栈
- Python:编程语言(需要Python 3.11或更低版本,不支持Python 3.13)
- TensorFlow/Keras:深度学习框架
- OpenCV:图像处理
- NumPy/Pandas:数据处理
- Matplotlib:数据可视化
- Streamlit:用户界面
环境要求
- Python 3.11(或更低版本,不支持Python 3.13)
- TensorFlow 2.x(在macOS上使用tensorflow-macos)
使用说明
- 创建虚拟环境:
python3.11 -m venv venv_py311
- 激活虚拟环境:
- Windows:
venv_py311\Scripts\activate
- macOS/Linux:
source venv_py311/bin/activate
- Windows:
- 安装依赖:
pip install -r requirements.txt
- 下载数据集:运行
python src/download_dataset.py
- 训练模型:运行
python src/train_model.py
- 启动用户界面:运行
streamlit run src/app.py
目录结构
traffic_sign_recognition/
├── data/ # 数据集和预处理数据
├── models/ # 保存训练好的模型
├── src/ # 源代码
│ ├── data_preprocessing.py # 数据预处理模块
│ ├── model.py # 模型定义
│ ├── train_model.py # 训练脚本
│ ├── evaluate.py # 评估脚本
│ ├── app.py # 用户界面
│ └── utils.py # 工具函数
├── notebooks/ # Jupyter notebooks用于实验和分析
├── requirements.txt # 项目依赖
└── README.md # 项目说明
开发日志
2025-05-06 系统初始设计与实现
会话主要目的:创建基于深度学习的交通标志识别系统
完成的主要任务:
- 搭建完整的项目结构,包括数据处理、模型训练、评估和用户界面
- 实现数据下载和预处理模块,支持GTSRB数据集的加载和处理
- 设计并实现多种CNN模型架构,包括简单CNN、自定义CNN和基于MobileNetV2的迁移学习模型
- 创建模型训练流程,支持数据增强、类别权重调整等功能
- 开发全面的模型评估工具,包括混淆矩阵、ROC曲线、分类报告等
- 实现基于Streamlit的交互式用户界面,支持图像上传和实时识别
- 添加可视化工具,用于展示模型内部工作原理
关键决策和解决方案:
- 选择GTSRB作为数据集,因其包含多种交通标志类别和真实场景变化
- 使用图像预处理技术如直方图均衡化、归一化等提高识别准确率
- 实现多种模型架构对比,方便分析性能差异
- 采用数据增强技术解决类别不平衡和数据量不足问题
- 使用Streamlit构建直观易用的用户界面,支持多种方式输入图像
使用的技术栈:
- Python、TensorFlow、Keras、OpenCV
- NumPy、Pandas、Matplotlib、Seaborn
- Streamlit、PIL(Python图像库)
修改的文件:
- 创建了完整的项目结构和各主要模块文件
requirements.txt
: 定义项目依赖src/download_dataset.py
: 数据集下载和探索src/data_preprocessing.py
: 数据预处理和增强src/model.py
: CNN模型定义和工具函数src/train_model.py
: 模型训练流程src/evaluate.py
: 模型评估和比较src/app.py
: Streamlit用户界面src/utils.py
: 工具函数集合README.md
: 项目说明文档
2025-05-06 解决Python版本兼容性问题
主要目的:解决Python 3.13与TensorFlow不兼容的问题
完成的主要任务:
- 使用Python 3.11创建新的虚拟环境,代替不兼容的Python 3.13环境
- 在新环境中安装tensorflow-macos和其他依赖包
- 更新requirements.txt文件,添加版本兼容性信息
- 更新README文件,添加Python版本兼容性提示和环境配置说明
关键决策和解决方案:
- 切换到Python 3.11.11版本,以确保与TensorFlow兼容
- 使用tensorflow-macos替代标准tensorflow,以支持macOS环境
- 固定numpy版本为1.23.5以避免版本冲突
- 为用户提供明确的Python版本要求和虚拟环境配置说明
使用的技术栈:
- Python 3.11
- tensorflow-macos 2.12.0
- 虚拟环境(venv)
- 其他依赖包的兼容版本
修改的文件:
requirements.txt
: 更新依赖包版本要求README.md
: 添加Python版本要求和环境配置说明
2025-05-07 解决Python版本兼容性问题并测试系统功能
会话主要目的:解决Python 3.13与TensorFlow不兼容的问题并完成系统功能测试
完成的主要任务:
- 使用Python 3.11创建新的虚拟环境,替代不兼容的Python 3.13环境
- 安装tensorflow-macos 2.12.0和所有依赖包(numpy、matplotlib、opencv-python等)
- 修复数据预处理脚本中的路径问题,适配数据集的实际目录结构
- 成功运行数据预处理流程,生成处理后的训练、验证和测试数据集
- 启动模型训练过程
- 运行Streamlit用户界面进行系统功能验证
关键决策和解决方案:
- 使用Python 3.11.11版本创建虚拟环境,确保与TensorFlow兼容
- 安装tensorflow-macos以支持macOS环境下的深度学习任务
- 修改数据路径处理逻辑,适应GTSRB数据集的"00000"格式文件夹命名
- 安装额外依赖包pydot以支持模型可视化功能
- 测试验证了完整的数据处理、模型训练和用户界面流程
使用的技术栈:
- Python 3.11
- tensorflow-macos 2.12.0
- NumPy 1.23.5
- OpenCV-Python
- scikit-learn
- Matplotlib
- Streamlit
- tqdm
修改的文件:
requirements.txt
: 更新依赖要求,添加tqdm库src/data_preprocessing.py
: 修改数据路径处理逻辑,适应实际数据集结构README.md
: 添加项目进度更新