Latticesemi 莱迪思半导体

文章数:190 被阅读:40517

账号入驻

(二)对象计数参考设计的训练

2019-11-01
    阅读数:

前言

大家好我是Wilson, 在本系列博文中我将介绍如何移植一个CNN神经网络到FPGA中。训练一个神经网络并移植到Lattice FPGA上,通常需要开发人员既要懂软件又要懂数字电路设计,是个不容易的事。好在FPGA厂商为我们提供了许多工具和IP,我们可以在这些工具和IP的基础上做二次开发。


移植一个神经网络到Lattice FPGA上可以分为三步:

第一步:使用Tensorflow, Caffe, Keras训练自己的网络。(这里Lattice官网的参考设计提供了训练网络部分的参考代码)

第二步:使用Lattice sensAI 软件编译已训练好的神经网络,定点化网络参数。该软件会根据神经网络结构和预设的FPGA资源进行分析并给出性能评估报告,此外用户还可以在软件中做Inference的仿真,查看基于浮点参数和基于定点参数的仿真结果。甚至还能通过USB连接PCFPGA进行硬件调试。

第三步:调用Lattice CNN IP以及其他FPGA组件(例如MIPI视频源接入、ISP、目标画框、NMS算法、视频输出等),构建一个完整CNN Inference系统和产品。


本篇介绍官网上CNN Object Counting参考设计的训练部分。


01
莱迪思官网上下载对象计数参考设计


链接如下:(也可以点击阅读原文查看)<http://www.latticesemi.com/Products/DesignSoftwareAndIP/IntellectualProperty/ReferenceDesigns/ReferenceDesign03/ObjectCounting>



02
解压下载的文件


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


03
训练数据集的准备


如果你没有自己的训练数据,只是想要学习流程,那请直接复制粘贴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_code\src\config.py的第41行修改为你自己的标签类别名。注意不管你的标签文档里的标签类别名是大写,还是小写,还是大小写混合,这里请统一用小写。


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

04
训练神经网络


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


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

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

05

从checkpoint文件到pb文件


我们需要把checkpoints封成pb文件才能送入sensAI做分析。


在training_code./src/logs/tensorflow文件夹下可以找到test.pbtxt,把它改名为model.pbtxt并复制到training_code/freeze/model文件夹下,如果该文件夹下已有model.pbtxt文件,请根据自己的需要决定是否覆盖或备份。


同样的把我们训练得到的check_point相关的文件都复制到:training_code/freeze/model文件夹下;然后运行training_code/freeze/trainckpt2inferencepb.py 

运行后就能生成model_frozenforInference.pb文件了。


pb文件可以送入Lattice sensAI 软件进行分析,还可以编译成Lattice CNN IP 指令,量化网络参数,仿真,硬件调试等。下一节介绍如何使用Lattice sensAI 软件。


敬请期待!

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: TI培训

北京市海淀区知春路23号集成电路设计园量子银座1305 电话:(010)82350740 邮编:100191

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号 电信业务审批[2006]字第258号函 京公海网安备110108001534 Copyright © 2005-2018 EEWORLD.com.cn, Inc. All rights reserved