人工智能
直播中

h1654155275.5954

7年用户 207经验值
私信 关注
[问答]

如何移植一个CNN神经网络到FPGA中?

训练一个神经网络并移植到Lattice FPGA上,通常需要开发人员既要懂软件又要懂数字威廉希尔官方网站 设计,是个不容易的事。好在FPGA厂商为我们提供了许多工具和IP,我们可以在这些工具和IP的基础上做二次开发。
移植一个神经网络到Lattice FPGA上可以分为三步:
第一步:使用Tensorflow, Caffe, Keras训练自己的网络。(这里Lattice官网的参考设计提供了训练网络部分的参考代码)
第二步:使用Lattice sensAI 软件编译已训练好的神经网络,定点化网络参数。该软件会根据神经网络结构和预设的FPGA资源进行分析并给出性能评估报告,此外用户还可以在软件中做Inference的仿真,查看基于浮点参数和基于定点参数的仿真结果。甚至还能通过USB连接PC与FPGA进行硬件调试。
第三步:调用Lattice CNN IP以及其他FPGA组件(例如MIPI视频源接入、ISP、目标画框、NMS算法、视频输出等),构建一个完整CNN Inference系统和产品。




回帖(5)

李子月

2020-11-26 10:06:45
莱迪思官网上下载对象计数参考设计
链接如下:(也可以点击阅读原文查看)<http://www.latticesemi.com/Products/DesignSoftwareAndIP/IntellectualProperty/ReferenceDesigns/ReferenceDesign03/ObjectCounting>

举报

王建国

2020-11-26 10:07:02
解压下载的文件




总共有三个文件夹:
1)dataset 文件夹下是训练使用的图片和标签;这里是检测人的,大概7000多张图片,你可以直接用这些图片做训练。分辨率是224*224的
2)training_code文件夹下是训练用的代码;
3)Object_Counting_Using_CNN_Accelerator_IP文件夹下是FPGA部分的RTL设计工程。
举报

刘斌

2020-11-26 10:07:10
训练数据集的准备
如果你没有自己的训练数据,只是想要学习流程,那请直接复制粘贴dataset文件夹下的ImageSets 和 training两个文件夹并粘贴到training_code/src底下;这里的图片可用作训练,分辨率为224*224,目标是找出图片中人的位置。每张图片都对应一个txt文本格式的标签给出了人的位置,这个标签是KITTI格式的,符合Lattice提供的训练代码对标签格式的要求。
如果你希望用自己的数据集做训练,那请在training_code/image/training文件夹下放入你自己的图片和标签,然后运行training_code/image/training/dataset_create.py文件,运行后会在training_code/image/training/ImageSets文件夹下生成train.txt文件;然后同样将ImageSets 和 training 两个文件夹粘贴到training_code/src底下。
工程中自带的标签类别名是person,这个工程本来是用来检测人的; 如果你的数据集标签类别名更换了不是person了,请在training_codesrcconfig.py的第41行修改为你自己的标签类别名。注意不管你的标签文档里的标签类别名是大写,还是小写,还是大小写混合,这里请统一用小写。




如果你想训练其他图片而你又没有数据集,那么请查看我的上一篇该系列的博文如何下载谷歌开源数据集。
举报

李建军

2020-11-26 10:07:24
训练神经网络
执行training_code/src/train.py开始训练,这里有一些依赖库需要安装,比如Tensorflow, Keras等,耐心安装好需要的库,运行代码。每1000个step会打印一次loss总结,每1000个step保存一次checkpoint文件。具体多少个step以及check_point保存地址都可以在如下的train.py文件里修改。




随着step的增加,loss在慢慢变小




经过很多次的迭代我们就可以得到最终需要的check_point文件了。到这里如果只做软件部分那么已经结束了,但是如果需要继续做移植工作,那么还需要把checkpoints文件转换成pb文件。

举报

更多回帖

发帖
×
20
完善资料,
赚取积分