我想将经过cnn训练的模型从c ++(pytorch框架)导入vhdl以在DE1-SOC FPGA上使用它,有没有办法做到?

时间:2019-03-31 16:24:09

标签: c++ vhdl conv-neural-network

因此,我使用了预先训练的alexnet模型,仅更改了最后一层的输出和完全连接的层的权重。我在C ++上使用pytorch做到了。现在,我想使用此模型来预测网络摄像头上有哪些对象,并且需要使用DE1-SOC FPGA。另外,它只能在FPGA本身上处理。

我的建议是在按下按钮时将网络摄像头图像输入该模型,然后模型将给出一些数字,然后在此数字上执行一些简单的步骤。因此,问题在于如何导入此模型或在FPGA上使用此c ++模型,或者如何以较少的痛苦将其导入VHDL语言?

我也找到了这段视频https://www.youtube.com/watch?v=iyEZOx1YwmM&t=73s。有帮助吗?我是FPGA和VHDL的新手,所以我很欣赏代码中的任何建议或示例。

1 个答案:

答案 0 :(得分:0)

  

那么,问题在于如何导入此模型或在FPGA上使用此c ++模型,或者如何以较少的痛苦将其导入VHDL语言?

“减轻痛苦”使问题已经很主观了。但是,这不是我第一次看到将“神经网络”代码转换为在FPGA上运行的请求。

为什么要使用FPGA?
似乎有一种(错误的)看法,即“在FPGA上,运行速度要快得多!” 具有中等复杂代码的FPGA可以在100-200 MHz下运行。您的CPU可以有四个运行在3.3GHz的内核。因此,您失去了速度的60倍。

为了使FPGA优于您的CPU,您必须弥补该速度损失因素。
FPGA可以胜过CPU的地方是并行处理管道。因此,必须将您的算法编译为在四个内核上运行(顺序运行),必须将其重写为至少60个部分,并且这些部分必须全部同时运行。因此,您需要构建60多个并行引擎,或者构建15个引擎,每个引擎由四个管线级组成,或者构建4个具有...的引擎

致HDL
同时,您必须将C ++,Python或任何代码转换为HDL。 在该方向上的模式取得了一些不错的进步,但是输入仍然必须遵守许多特殊规则,而我所看到的结果还不是很好。 (与手动编写的代码相比)大多数代码又大又慢。它适合您的开发时间不足且FPGA上有大量时间/空间资源的地方。

许多文章写到“ FPGA非常适合实现神经网络”。我怀疑这是生成FPGA代码的驱动器的来源。但是,这并不意味着您可以使用HDL代码将您的 c ++ pytorch代码自动转换为神经网络。

I / O。
I / O经常被忽略。您要处理来自网络摄像头的图像。那么,您打算如何将这些图像放入FPGA?相信我在FPGA上建立摄像头接​​口并不是一件容易的事。去过也做过!即使使用预定义和经过测试的内核,也要花几周的时间才能使事情运行。如果您想从例如传递数据从PC到FPGA,您将需要其他接口。想到了PCI-e,但增加了编写驱动程序的时间。然后,您必须学习如何从这样的FPGA PCI-e IP内核获取数据并将其传递到神经网络节点。

回到您的问题:
您的代码可以转换为HDL并在FPGA上运行吗?也许,我不知道。但是我非常怀疑您会尝试这样做的“痛苦”很多。

最后一句话:您提供的视频链接显示了如何在ARM处理器上运行C ++代码。该ARM处理器恰好与许多可编程门一起被嵌入。但是,使用了这些可编程门中的 non 。它不会将“ Hello world”转换为HDL。