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)概述的更多相关文章

  1. 基于 SoC 的卷积神经网络车牌识别系统设计(0)摘要

    ​NOTES:现如今,芯片行业无比火热啊,无论是前景还是钱景,国家芯片战略的发布,公司四五十万的年薪,着实令人非常的向往,为了支持芯片设计者,集成了工作.科研.竞赛于一体的<基于 SoC 的卷积 ...

  2. 基于Python的卷积神经网络和特征提取

    基于Python的卷积神经网络和特征提取 用户1737318发表于人工智能头条订阅 224 在这篇文章中: Lasagne 和 nolearn 加载MNIST数据集 ConvNet体系结构与训练 预测 ...

  3. 深度学习基础-基于Numpy的卷积神经网络(CNN)实现

    本文是深度学习入门: 基于Python的实现.神经网络与深度学习(NNDL)以及动手学深度学习的读书笔记.本文将介绍基于Numpy的卷积神经网络(Convolutional Networks,CNN) ...

  4. visualization of filters keras 基于Keras的卷积神经网络(CNN)可视化

    https://adeshpande3.github.io/adeshpande3.github.io/ https://blog.csdn.net/weiwei9363/article/detail ...

  5. cnn 卷积神经网络 人脸识别

    卷积网络博大精深,不同的网络模型,跑出来的结果是不一样,在不知道使用什么网络的情况下跑自己的数据集时,我建议最好去参考基于cnn的手写数字识别网络构建,在其基础上进行改进,对于一般测试数据集有很大的帮 ...

  6. 卷积神经网络CNN识别MNIST数据集

    这次我们将建立一个卷积神经网络,它可以把MNIST手写字符的识别准确率提升到99%,读者可能需要一些卷积神经网络的基础知识才能更好的理解本节的内容. 程序的开头是导入TensorFlow: impor ...

  7. 使用Python基于HyperLPR/Mask-RCNN的中文车牌识别

    基于HyperLPR的中文车牌识别 Bolg:https://blog.csdn.net/lsy17096535/article/details/78648170 https://www.jiansh ...

  8. 如何用卷积神经网络CNN识别手写数字集?

    前几天用CNN识别手写数字集,后来看到kaggle上有一个比赛是识别手写数字集的,已经进行了一年多了,目前有1179个有效提交,最高的是100%,我做了一下,用keras做的,一开始用最简单的MLP, ...

  9. 基于cifar10实现卷积神经网络图像识别

    import tensorflow as tf import numpy as np import math import time import cifar10 import cifar10_inp ...

随机推荐

  1. 【shell】循环将字符串写入数组中?

    bash shell脚本语法怪异,其他语言循环写入数组或列表都很简单实现,或有相应函数来做. 以下用两种方法来实现: 方法一 c=0 for i in `ls ./Data_Analysis/Quan ...

  2. 在R语言中使用Stringr进行字符串操作

    今天来学习下R中字符串处理操作,主要是stringr包中的字符串处理函数的用法. 先导入stringr包,library(stringr),require(stringr),或者stringr::函数 ...

  3. 暂时lvs

    负载均衡集群是 load balance 集群的简写,翻译成中文就是负载均衡集群.常用的负载均衡开源软件有nginx.lvs.haproxy,商业的硬件负载均衡设备F5.Netscale.这里主要是学 ...

  4. Python函数之传参

    目录 1. 函数传参 1.1 参数的作用 1.2 形参和实参 1.3 位置参数 1.4 关键字参数 1.5 默认实参 1.6 参数总结 2. 可变参数 1. 函数传参 1.1 参数的作用 1.2 形参 ...

  5. vc控制台程序关闭事件时的正确处理方式

    百度可以找到很多关于这个问题解决的方法 关键控制台API函数:SetConsoleCtrlHandler 在支持C++ 11以上的编译器中,你可以这么做. SetConsoleCtrlHandler( ...

  6. 8.深入TiDB:解析Hash Join实现原理

    本文基于 TiDB release-5.1进行分析,需要用到 Go 1.16以后的版本 我的博客地址:https://www.luozhiyun.com/archives/631 所谓 Hash Jo ...

  7. javaSE中级篇2 — 工具类篇 — 更新完毕

    1.工具类(也叫常用类)-- 指的是别人已经写好了的,我们只需要拿来用就行了 官网网址:Overview (Java Platform SE 8 ) (oracle.com) ---- 但是这个是英文 ...

  8. 🏆【Alibaba中间件技术系列】「Sentinel技术专题」分布式系统的流量防卫兵的基本介绍(入门源码介绍)

    推荐资料 官方文档 官方demo Sentinel 是什么? 随着微服务的流行,服务和服务之间的稳定性变得越来越重要.Sentinel 以流量为切入点,从流量控制.熔断降级.系统负载保护等多个维度保护 ...

  9. 日常Java 2021/9/19

    Math类方法 package m; public class m { public static void main(String args[]) { //计算平方根 System.out.prin ...

  10. zabbix之修改中文

    #在zabbix服务器安装中文名包 root@ubuntu:~# sudo apt-get install language-pack-zh* #:修改环境变量 root@ubuntu:~# sudo ...