【问题标题】:I want to import cnn trained model from c++( pytorch framework) into vhdl to use it on DE1-SOC FPGA, is there a way to do it? [closed]我想将 c++(pytorch 框架)中的 cnn 训练模型导入 vhdl 以在 DE1-SOC FPGA 上使用它,有没有办法做到这一点? [关闭]
【发布时间】:2019-03-31 16:24:08
【问题描述】:

所以,我使用了预训练的 alexnet 模型,只改变了最后一层的输出和全连接层的权重。我使用 pytorch 在 c++ 上完成了它。现在我想用这个模型来预测网络摄像头上有什么物体,我需要使用 DE1-SOC FPGA。此外,它应该只在 FPGA 本身上处理。

我的建议是在按下按钮时将网络摄像头图像输入到这个模型中,然后模型会给出一个数字,然后在这个数字上会有一些简单的程序。那么,问题是如何导入这个模型或在 FPGA 上使用这个 c++ 模型,或者如何将它导入 VHDL 语言而不那么痛苦?

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

【问题讨论】:

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


【解决方案1】:

那么,问题是如何导入这个模型或在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 代码的驱动力的来源。然而,这并不意味着 您的 c++ pytorch 代码可以自动转换为 HDL 代码中的神经网络。

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

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

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

【讨论】:

  • 谢谢!这让很多事情都清楚了。 “为什么是 FPGA?”,我有义务使用 FPGA 来做作业,但我已经选择了另一个问题,因为它似乎很痛苦,所以我只是想澄清一下。不过,非常感谢!
猜你喜欢
  • 1970-01-01
  • 2020-11-29
  • 2018-01-03
  • 1970-01-01
  • 2019-04-12
  • 1970-01-01
  • 1970-01-01
  • 2019-09-20
  • 1970-01-01
相关资源
最近更新 更多