交通标识识别系统的设计与实现
实验题目:交通标识识别系统的设计与实现
课程简要信息
课程名称:微处理器结构与嵌入式系统设计
课程学时:课内:84学时(其中理论48学时,实验36学时);课外:84学时
综合实验:课内:12学时,课外:12学时
适用专业:电子信息工程、通信工程
学生年级:大学三年级,秋季学期
实验方式:教师引导,学生自主完成,课上、课下相结合
实验内容与任务
本实验是面向电子信息工程和通信工程领域的前沿方向,综合运用神经网络和嵌入式系统开发技术,基于Xilinx公司的PYNQ-Z2开发板,设计并实现一个高精度、低时延的交通标识识别系统,完成从理论知识到工程实践的能力进阶。
- 基本任务
a) 选择卷积神经网络作为交通标识识别系统的模型,通过Python、Tensorflow框架和numpy工具包进行卷积神经网络模型的设计、搭建,并基于国际交通标志数据集自行完成模型的训练和测试,存储每一层的权重和偏置参数;
b) 通过Vivado HLS完成卷积、池化等操作,实现卷积神经网络前向通路,完成IP核封装和Overlay制作;
c) 在Vivado环境下,完成硬件整体设计;
d) 基于训练好的模型权重和偏置参数,在Jupyter Notebook中进行交通标识识别系统的软件部署;
e) 搭建测试硬件与环境,进行识别准确率和识别帧率的测试;
f) 基于测试结果,完成实验总结报告。
- 进阶任务
在设计好的卷积神经网络通路基础上,自行选择硬件或算法的优化方法,提高系统数据的读取速度,完成识别帧率的加速优化。
实验过程及要求(限300字)
- 基本要求
a) 学习神经网络的相关知识和构建方法,掌握python语言、C语言、tensorflow框架、numpy数据包的使用方法。
b) 对数据集进行预处理,便于后期训练。
c) 搭建卷积神经网络,结合数据集,对模型进行训练和测试,提高识别准确率。导出各层权重和偏置参数,存储为npy文件。
d) 学习Vivado HLS的使用方法,封装IP核,生成bit流文件。通过tcl文件、bit文件、hwh文件制作Overlay。
e) 在PYNQ-Z2开发板上调用Overlay实现交通标识识别系统,测试识别准确率和识别帧率,完成现场验收。
f) 撰写实验报告,总结实验过程,分析测试结果。
- 进阶要求
实现系统识别帧率的加速优化,建议:可通过硬件优化,如添加Pipeline、Unroll等操作增加并行度,或软件结构优化,如对添加Array Partition操作,提高数据读取速度。
相关知识及背景(限150字)
交通标识识别是高级驾驶辅助系统所必需的,是当今热门的现实世界计算机视觉和模式识别问题。本实验结合人工智能和嵌入式芯片的优势,用来解决现实生活和工程中的实际问题。
了解卷积神经网络的工作原理、实现和测试方法,熟悉python语言和C语言,掌握嵌入式系统开发流程,及数据预处理、读取、传输、过程优化等工程技术和方法。
实验环境条件
-
实验场地:依托国家级电工电子实验教学示范中心开展
-
实验设备:计算机、PYNQ-Z2开发板、摄像头
-
实验资源:国际交通标志数据集
-
实验软件:Tensorflow、numpy工具包、Jupyter Notebook、Vivado
教学目标与目的(限150字)
-
技术目标:理解嵌入式系统技术与前沿学科技术的综合应用方式,掌握现代嵌入式系统的软硬件基本设计方法与实现技能。
-
能力目标:培养计算机和嵌入式系统的应用与程序编写能力,提高根据应用需求,激发创新思维,解决实际问题的综合素质。
-
思政目标:培养学生的大国工匠意识和振兴国家、促进科技进步的责任感
教学设计与实施进程
- 教学设计
实验以前沿课题研究和实际工程项目为牵引,将神经网络工作原理、构建和训练方法、嵌入式系统理论知识点与应用系统开发设计、python语言和C语言程序设计等实践环节相融合,将完整的知识体系、开发流程、硬件设计、编程实现、实物验证、设计总结等融为一体,构建“需求-任务-实践-实现”4个层次的闭环项目体系和“基本任务、进阶任务、工程实现任务”3个层次的任务要求,实现教学与科研的互补促进。在理论知识、动手实践等不同环节,重点注重方法引导、问题设置等,着力培养学生发现问题、解决问题的能力。
- 实施进程
整个实验分为12个课内学时和12个课外学时,单人单组完成,具体实施过程如表1所示。
表1 实验实施进程
| 任务安排 | 实验内容 | 课时安排 | 实施步骤 | 教学方法 | 关注要点 |
|---|---|---|---|---|---|
| 基本任务 | 神经网络基础知识 | 课内2学时 | (1)神经网络理论知识介绍 (2)Tensor- flow深度学习框架介绍 |
老师实例引导讲授,参考资料推荐,线上平台自学 | 引导学生了解神经网络和人工智能的发展趋势,帮助学生解决神经网络概念抽象、结构复杂、参数繁多等问题 |
| 卷积神经网络模型的设计、搭建 | 课外4学时 | 学生基于Tensorflow框架自行完成卷积神经网络模型的设计和搭建 | 学生自行设计为主,可进行小组讨论,利用AI进行查询,老师指导答疑 | 引导学生正确完成数据的归一化、均衡和分布优化,自行掌握Tensorflow框架设计 | |
| 卷积神经网络模型训练 | 课外6学时 | (1)学生结合国际交通标志数据集,进行卷积神经网络模型训练 (2)存储权重参数和偏置参数 |
通过讨论设定预期目标,学生自行完成,老师指导答疑 | 引导学生熟悉神经网络的工作流程和实现方法,克服过程繁杂、枯燥等困难,培养学生细致、耐心、专注、追求最优化的工匠精神 | |
| 系统硬件设计与软件开发 | 课内2学时 | (1)Vivado HLS使用方法介绍 (2)封装IP核,制作Overlay |
老师实例演示, 学生类比操作, 老师指导答疑 |
注意学生设计的规范性 | |
| 进阶任务 | 卷积神经网络的加速优化 | 课内2学时 | (1)加速和优化方法介绍 (2)基于硬件的数据传输加速 (3)基于软件的数据处理优化 |
老师实例演示, 学生使用AI查询设计,进行类比操作, 老师指导答疑 |
引导学生学习多种加速优化方法,并了解不同技术之间的差异 |
| 工程实现任务 | 工程案例讲解、需求分析及方案设计 | 课内1学时 | (1)老师介绍项目应用背景,功能、性能等指标要求 (2)学生讨论系统实现方案 |
老师讲授,学生小组讨论,利用AI查询设计,反转课堂,老师指导答疑 | 激发学生兴趣;引导学生理解系统的各项指标要求,熟悉实验任务,拓展思维 |
| 系统实现及测试验收 | 课内5学时 | (1)基于PYNQ-Z2开发板,实现交通标识识别系统 (2)测试识别准确率和识别帧率; (3)分析测试结果,对系统进行优化改进 |
学生预设实现目标,分组讨论,AI查阅资料,老师进行答辩验收 | 引导学生注意神经网络的训练强度和调试过程中工作环境对系统指标的影响;分析系统误差来源并加以验证 | |
| 实验总结 | 课外2学时 | 学生完成实验总结报告 | 老师引导与评分 | 引导学生注意实验报告撰写的规范性与完整性,并注意实验数据的测试与误差分析 |
实验原理及方案
目前交通标志识别系统的研究方向着重于寻找更加轻量化的卷积神经网络结构来满足交通标志识别对于实时性的要求,在保证识别准确率的同时尽可能提高检测速率。
- 总体方案设计
本实验基于Xilinx公司的PYNQ-Z2开发板,主要目的是实现高精度、低时延的交通标识识别系统。选择卷积神经网络作为系统模型,研究卷积神经网络的理论,通过Python和Tensorflow框架进行卷积神经网络模型的设计、搭建。通过国际交通标志数据集进行训练和测试。并将其以二进制格式存储。为实现FPGA对神经网络的加速,通过Vivado HLS编写卷积、池化等操作,对其进行加速优化,包装成IP核,在顶层通过Python调用Overlay的方式来使用对应IP核,实现交通标识识别系统。系统整体结构如图1所示。
图1 识别系统整体结构
总体方案流程图如图2所示。
图2 总体方案流程图
整个实验过程的核心环节,如图3所示。
图3 实验核心环节
- 卷积神经网络设计
神经网络可分为三个部分,输入层、隐藏层和输出层。卷积神经网络是一种监督学习的神经网络,其隐藏层主要由卷积层、池化层和全连接层组成。卷积层和池化层交替组成的结构能够实现对数据进行特征提取,同时对特征进行降维处理,便于后续使用。全连接层与传统多层感知器相似,对得到的特征图像进行分类处理。前馈对权重和偏置进行处理,进行非线性处理得到一个预测值。反向传播是根据预测值与真实值的误差,即损失函数大小,更新权重,来减小误差的过程。
- 数据的预处理
对训练数据集和测试数据集进行预处理,如图4所示。数据预处理主要包括了统一格式、调整尺寸、灰度化、去噪等操作。首先是统一格式,进行图像分类,即将图片全部统一为jpg格式,方便后续的处理。其次是图片尺寸的调整,根据卷积神经网络模型对于输入要求,将样本数据全部调整为统一尺寸。例如,LeNet-5卷积神经网络模型对输入图片的要求是32*32的灰度图,而AlexNet要求的输入图像尺寸是224*224,VGG对图像的要求也是224*224等。本实验可对图片增加灰度化处理,将图像转换为灰度图可以减少数据量,达到加速的效果。去噪声处理,目的是为提升输入图像的质量,对图像进行去噪、平滑处理,通过滤波器等一系列图像处理方法可以实现。对于图像的预处理还有一些其他手段,根据卷积神经网络模型的需求进行选择,例如进行直方图均衡化、归一化、二值化、膨胀、腐蚀等。
图4 图像预处理流程图
- 卷积神经网络模型的搭建与训练
基于Tensorflow框架进行卷积神经网络模型的设计,在Tensorflow中的Keras能够让开发者轻松地建立神经网络的模型,方便训练和调试,在训练过程中能够实时观察模型的损失值以及识别正确率。通过Tensorflow训练好的卷积神经网络模型能够方便地导出训练好的每一层的参数,供硬件平台使用。因此,选择Tensorflow框架进行模型的设计与训练。训练好的卷积神经网络模型需要导出的权重参数和偏置参数共有八个:分别为两个卷积层的权重参数和偏置参数,两个全连接层的权重参数和偏置参数。将这些参数存储成npy文件。因为在PYNQ端可以在Jupyter Notebook中通过Python进行调试,引入numpy工具包,能够很方便的使用以npy文件形式存储的权重信息。卷积神经网络搭建与训练流程如图5所示。
图5 卷积神经网络搭建与训练流程图
- 卷积神经网络加速的设计
卷积神经网络加速设计整体方案流程图如图6所示
图6 卷积神经网络加速设计流程图
在HLS开发流程中,先用C语言或C++语言编写卷积神经网络的IP核。进行C语言仿真,并在C语言代码中添加Directives来优化设计。完成程序设计后,进行RTL综合,将设计转换成硬件描述语言,封装成IP核。设计完成后,就可以通过Vivado连接设计好的IP核和Zynq处理器来运行设计,生成bit流文件,制作Overlay,将设计编程到相应硬件上。
卷积神经网络的加速主要依靠FPGA完成,通过HLS编写函数,对程序进行优化,并选择Directives来实现优化加速。对于程序中函数可以进行很多优化操作。例如,选取任意精度数据类型,相比确定精度数据类型,有更高的数据吞吐率,消耗更少的资源。Inline操作可以去除函数层次化,改善资源利用率。Allocation可以实现延迟和资源消耗的折衷。Dataflow操作可将顺序处理变成并行处理。所以,对神经网络的加速需要根据编写好的函数的结构进行修改,设定合适的Directives,来降低延迟,提高资源利用率,数据吞吐率。添加接口协议实现数据的读取,对循环添加Pipeline、Unroll操作增加并行度,减小延迟。对存储数据的数据添加Array Partition操作,实现更快的数据读取。
加速优化效果可以从仿真后的报告中查看。其中Latency和Interval分别是延迟和处理间隔,优化的主要目标是减少这两项的大小。报告中也会有片上资源的使用情况,主要资源有模块随机存储器(Block Random Access Memory, BRAM),DSP,显示查找表(Look Up Table, LUT)等。
生成IP核后,在Vivado中与Zynq芯片联合调试,生成bit流文件。在仿真总结报告中能显示该硬件电路的功耗信息。将工程中的tcl文件、hwh文件和bit文件重命名,制作成Overlay。
- 基于PYNQ交通标识识别系统的实现
- PYNQ-Z2开发板
PYNQ-Z2开发板是Xilinx公司发行的ZynqSoC技术开源技术的平台的开发板,如图7所示。该平台的芯片是由两个部分组成的,分别为PS部分和PL部分,PS端是由ARM构成的,负责系统管理及流程控制,PL端则是由FPGA构成,负责进行大规模逻辑运算。PYNQ全称是Python On Zynq,是一个通过Python进行FPGA开发的框架,为FPGA硬件模块设计添加Python接口,通过Python即可调用已经设计好的FPGA电路模块。
图7 PYNQ-Z2开发板
如图8所示,PYNQ框架主要分为三层。硬件层的设计与嵌入式设计方法相同,实现PS与PL的协同交互。整个FPGA部分的设计被称为Overlay,可面向多用户、多应用生成不同的bitstream文件,并可以通过软件应用程序接口(Application Programming Interface, API)进行调用,动态的切换FPGA上的逻辑功能。
软件层运行在PS端中。PYNQ所自带的Python API库让开发者轻松地在Jupyter Notebook中通过Python编程,调用Overlay,来使用FPGA中的电路模块。
应用层主要是由的Jupyter Notebook和Python构成。Jupyter Notebook是一个基于浏览器交互式编程IDE,可以在其中编写代码、运行代码并随时查看相应结果。Jupyter Notebook可以在浏览器中运行,在其中可以使用Python来进行PYNQ的开发。

图8 PYNQ架构图
PYNQ-Z2开发板的配置如下:
a) 设备:ZYNQZ7020
b) 内存:512MB DDR3
c) 存储:MicroSD
d) 视频接口:HDMII N&OUT PORTS
e) 网络:10/100/1000以太网
f) 扩展:USB接口
g) 大小:87mm*140mm
h) 供电:支持USB供电或7V/15V供电
- 交通标识识别系统的测试
在Jupyter Notebook上调用Overlay,引入卷积神经网络模型的权重参数和偏置参数,进行交通标识识别系统的测试。基于国际交通标志数据集,在测试集上随机选取图片进行识别与其标签进行比对。先进行单一图片的预测,打印原图和该系统预测的图片,并显示是否预测正确。
- 交通标识识别系统的实现
通过在PYNQ-Z2开发板上连接摄像头,可以实现简易的带有摄像头的交通标识识别系统。通过摄像头拍摄交通标志来进行识别,测试其识别准确率和识别帧率,并进行分析。
实验报告要求
实验报告需要反映以下工作:
-
实验名称
-
实验目的
描述项目需要完成的任务、目标、设计指标等。
-
实验设备
-
实验内容
描述项目整体的实施方案,包括设计思想、结构框图、工作原理等。
- 软件设计
描述神经网络模型设计,包含搭建、测试、参数选择等。以及软件系统结构框图、程序流程图、加速优化等。
- 实验结果说明和分析(可配合图片说明)
包括已完成的功能及指标说明、操作说明,具体测试结果描述或效果图片。
- 实验结果总结
阐述设计中遇到的问题、原因分析及解决思路,以及课程收获等。
考核要求与方法(限300字)
| 考核内容 | 考核项 | 考核方式 | 分值比例 |
|---|---|---|---|
| 实验过程 | 课上表现 | 根据学生到课率、回答问题准确性等方面给出综合评分。 | 10% |
| 基本任务 | 合理性 | 从神经网络搭建与训练、数据预处理等方面的合理性给出综合评分。 | 15% |
| 完成度 | 从设计系统的功能、性能指标完成情况,以及系统运行的正确性、稳定性等方面给出综合评分。 | 30% | |
| 创新性 | 从方案的新颖性,实现的创新性以及自主思考与独立实践能力等方面给出综合评分。 | 10% | |
| 进阶任务 | 优化程度 | 从加速优化方法选择、性能指标的提升情况等方面给出综合评分。 | 25% |
| 实验结果 | 实验报告 | 从实验报告的完整性、规范性、逻辑性等方面给出综合评分。 | 10% |
项目特色或创新(可空缺,限150字)
- 跨领域技术的交叉融合
依托人工智能和芯片行业的迅速发展,将神经网络技术与嵌入式开发技术紧密结合,实现跨领域交叉融合。
- 为学科竞赛、产学研结合奠定基础
以实际项目为牵引,引导学生掌握研发流程和工程设计意识,完成理论仿真到实践应用的转化,为后续参加学科竞赛、推动产学研结合等实践过程奠定基础。
- 拓展学生思维,提高综合能力
实验内容开放度高,实现方式和手段多,学生自由发挥空间大,有助于拓展学生思维,培养探索精神,锻炼知识综合应用和创新能力。
证明材料:
1.测试结果和识别准确率及损失值曲线图

2.卷积神经网络各层权重和偏置文件

3. 卷积操作的HLS程序

4. 神经网络未经加速处理的报告

5.优化后的报告


6. 系统的连接总图

7. 单张测试集中图片的识别

8. 进行1000张图片的测试

9. 通过摄像头进行交通标识识别的结果

10. 基于PYNQ交通标识识别系统的实现


11. 后期学生参加学科竞赛获奖


大学生嵌入式芯片与系统设计竞赛获奖

研究生电子设计竞赛获奖






