基于 SoC 的卷积神经网络车牌识别系统设计(1)概述
NOTES:
这是第三届全国大学生集成电路创新创业大赛 - Arm 杯 - 片上系统设计挑战赛(本人指导的一个比赛)。主要划分为以下的 Top5 重点、难点、亮点、热点以及创新点:1、通过 Arm Cortex-M3 CPU 软核 IP 在 Xilinx Artix-7 纯 FPGA 平台上构建一个 SoC 片上系统,该系统一方面能够通过 HDMI 接口,在显示屏上实时显示 OV5640 摄像头所采集的车牌视频数据(比特流的生成是通过交叉编译的方式,即 Verilog 编译与 C 编译);2、该系统另一方面能够通过基于 FPGA 设计的 AI 神经网络硬件加速 IP(协处理器),实现车牌的字符识别并显示在 LCD 上;3、利用流水、并行、行缓存、分块、乒乓、稀疏卷积等等一些硬件的优化加速策略,达到更快的识别速度的同时,减少了 FPGA 硬件资源的使用;4、利用流水并行、资源共享、状态编码、基于状态机的操作数隔离等等一些低功耗设计,来减少该 AI 协处理器的功耗。
接下来,大致讲一下整体设计流程,主要分为系统的搭建和车牌的识别:
一、系统的搭建:
首先呢,就是系统的搭建(如上所示)。当然,在系统的搭建之前,需要先确定好硬件平台,如 Xilinx Artix-7 开发板(集成了 28nm 中端芯片)、OV5640 摄像头模块、HDMI 线以及 HDMI 显示屏模块(或者 FPGA 引脚杜邦线以及 LCD 显示屏模块)、JTAG调试器(VCC、GND、TCK、TMS)。另外,需要再确定好软件平台,如 Win10、Vivado 2018.2、Arm Keil uVision(MDK525)、PyCharm(OpenCV + TensorFlow)、JLink.exe、车牌生成器。因此,这是一个软硬件协同设计的智能 SoC 系统。
搭建的系统能够通过 HDMI 接口,在 HDMI 显示屏上(或者通过 FPGA 引脚在 LCD 显示屏上)实时显示 OV5640 摄像头所采集的车牌视频数据。(当然,这个功能描述的貌似简单粗暴,其实搭建起来能把你累成 Dog,其中就有 CPU 软核 IP 的导入与测试,AXI4 总线的互联,OV5640 和 HDMI 的 IIC 的设计,OV5640 和 HDMI 寄存器的配置,OV5640 解码模块的 IP 设计,VGA 行场同步的时序协议与基于 AXI4-Stream 流协议的数据流格式的转换,VDMA 和 DDR3 MIG7 的配置,以及许多常见的 Xilinx IP 如 Vid_In、Vid_Out、VTC 等等 IP 的载入与配置,Clock Wizard 时钟分频 IP 的添加与配置,最终还有 Xilinx Vivado Verilog 代码和 ARM Keil C 代码的交叉编译等等,哎,各个模块都是一门学问啊,贴出来的是一个简化版的系统搭建,只留下了 IP 和 AXI 总线)。
总而言之,系统合理地划分了软硬件的功能,充分地展示了异构平台的优势。
二、车牌的识别:
接着,就是车牌的识别。对于车牌的识别,主要分为车牌识别预处理(RGB2HSV、HSV2Binary、形态学)、定位、分割、缩放、卷积神经网络(字符识别)五大部分。(其它文献中分为车牌定位、字符分割、字符识别)。当然,在基于 Verilog 车牌识别设计之前,我们首先需要在 PyCharm 软件平台上进行设计、训练、测试与验证(AI 芯片开发都是这样的),例如在 PC 端进行车牌识别预处理、定位、分割、以及神经网络模型的训练,这里是基于 OpenCV 的车牌识别预处理和基于 TensorFlow 的神经网络框架训练的,训练的模型准确率能够高达 99%。通过获取所有识别车牌的训练集,即 00000→99999 ,训练完毕之后,通过对测试集测试能够达到一定的识别率之后,提取网络中的权重参数(全连接层占据主要部分,卷积层占据次要部分),便完成了能够在硬件上实现的固定的网络模型与参数(当然,量化、缓存与加速策略等等还是需要自己定的啦),然后便开始你的 AI 芯片设计,这里主要是作为 CPU 的一个协处理器,一个字符识别的硬件加速 IP。
软件平台实现之后,于是就生成了如下的车牌识别框图,从头到尾分别是 OV5640 输入、基于 OpenCV 的车牌识别预处理(RGB2HSV、HSV2Binary、Morphology)、定位、分割、缩放、基于 TensorFlow 的卷积神经网络(网络输入、第一层填充 + 卷积层 + ReLU + 池化层、第二层填充 + 卷积层 + ReLU + 池化层、全连接层、Softmax、网络输出)、LCD 显示。
哎,略显复杂,王者局的生活,往往就是这么朴实无华,且枯燥。
之后,我们便开始进行基于 FPGA 的硬件实现(准备开始我们的发际线推后之旅)(我太难了)。
原文链接:https://blog.csdn.net/MicroTalent12/article/details/106586328
基于 SoC 的卷积神经网络车牌识别系统设计(1)概述的更多相关文章
- 基于 SoC 的卷积神经网络车牌识别系统设计(0)摘要
NOTES:现如今,芯片行业无比火热啊,无论是前景还是钱景,国家芯片战略的发布,公司四五十万的年薪,着实令人非常的向往,为了支持芯片设计者,集成了工作.科研.竞赛于一体的<基于 SoC 的卷积 ...
- 基于Python的卷积神经网络和特征提取
基于Python的卷积神经网络和特征提取 用户1737318发表于人工智能头条订阅 224 在这篇文章中: Lasagne 和 nolearn 加载MNIST数据集 ConvNet体系结构与训练 预测 ...
- 深度学习基础-基于Numpy的卷积神经网络(CNN)实现
本文是深度学习入门: 基于Python的实现.神经网络与深度学习(NNDL)以及动手学深度学习的读书笔记.本文将介绍基于Numpy的卷积神经网络(Convolutional Networks,CNN) ...
- visualization of filters keras 基于Keras的卷积神经网络(CNN)可视化
https://adeshpande3.github.io/adeshpande3.github.io/ https://blog.csdn.net/weiwei9363/article/detail ...
- cnn 卷积神经网络 人脸识别
卷积网络博大精深,不同的网络模型,跑出来的结果是不一样,在不知道使用什么网络的情况下跑自己的数据集时,我建议最好去参考基于cnn的手写数字识别网络构建,在其基础上进行改进,对于一般测试数据集有很大的帮 ...
- 卷积神经网络CNN识别MNIST数据集
这次我们将建立一个卷积神经网络,它可以把MNIST手写字符的识别准确率提升到99%,读者可能需要一些卷积神经网络的基础知识才能更好的理解本节的内容. 程序的开头是导入TensorFlow: impor ...
- 使用Python基于HyperLPR/Mask-RCNN的中文车牌识别
基于HyperLPR的中文车牌识别 Bolg:https://blog.csdn.net/lsy17096535/article/details/78648170 https://www.jiansh ...
- 如何用卷积神经网络CNN识别手写数字集?
前几天用CNN识别手写数字集,后来看到kaggle上有一个比赛是识别手写数字集的,已经进行了一年多了,目前有1179个有效提交,最高的是100%,我做了一下,用keras做的,一开始用最简单的MLP, ...
- 基于cifar10实现卷积神经网络图像识别
import tensorflow as tf import numpy as np import math import time import cifar10 import cifar10_inp ...
随机推荐
- Linux—su命令和su -命令的差别(切换登录账号)
1.普通用户切换到root用户,命令su或su - 本人以前一直习惯直接使用root,很少使用su,前几天才发现su与su -命令是有着本质区别的! 大部分Linux发行版的默认账户是普通用户,而更改 ...
- 【翻译】.NET 6 中的 dotnet monitor
原文:Announcing dotnet monitor in .NET 6 我们在 2020 年 6 月首次推出了dotnet monitor 作为实验工具,并在去年(2020年)努力将其转变为生产 ...
- C语言中的除法的计算
不用除号,计算除法运算.思路是使用减法运算!思路1:循环采用减法每次减去n,直到做完减法之后结果小于0为止 但是这样次数较大 如求100/3,需要次数为34次. 思路2:循环采用减法每次减去k,K的 ...
- Z可读作zed的出处?
Commercial and international telephone and radiotelephone SPELLING ALPHABETS between World War I and ...
- 25. Linux下gdb调试
1.什么是core文件?有问题的程序运行后,产生"段错误 (核心已转储)"时生成的具有堆栈信息和调试信息的文件. 编译时需要加 -g 选项使程序生成调试信息: gcc -g cor ...
- css相关,flex布局全通!
寻根溯源话布局 一切都始于这样一个问题:怎样通过 CSS 简单而优雅的实现水平.垂直同时居中. 记得刚开始学习 CSS 的时候,看到 float 属性不由得感觉眼前一亮,顺理成章的联想到 Word 文 ...
- ERROR 1690 (22003): BIGINT UNSIGNED value is out of range in..的错误 [转]
问题: ERROR 1690 (22003): BIGINT UNSIGNED value is out of range in..的错误 解决方法: 把没被singed的变量临时变更signed去处 ...
- 容器之分类与各种测试(四)——multimap
multiset和multimap的具体区别在于,前者的key值就是自己存储的value,后者的key与value是分开的不相关的. 例程 #include<stdexcept> #inc ...
- 应用springMVC时如果配置URL映射时如下配置
应用springMVC时如果配置URL映射时如下配置 [html] view plaincopy<servlet> <servlet-name>appServlet</s ...
- SQL Server中修改“用户自定义表类型”问题的分析与方法
前言 SQL Server开发过程中,为了传入数据集类型的变量(比如接受C#中的DataTable类型变量),需要定义"用户自定义表类型",通过"用户自定义表类型&quo ...