【问题标题】:Training a Neural Network in Python and deploying in C++用 Python 训练神经网络并用 C++ 部署
【发布时间】:2019-02-02 20:22:06
【问题描述】:

我打开此主题讨论如何将我的 NN 模型用于部署。

我使用 mdCNN 在 Matlab 中构建和训练了一个 NN,(mdCNN 是一个简单的 Matlab 库,用于构建多维输入的 NN,目前 Matlab 不支持 - cov3x3x3)。我在 Matlab 中训练了我的模型,现在我想将它投入生产。

经过几个小时的研究,我打算做以下事情

  1. 使用 TF 后端在 Keras 中训练一个 NN 模型。我选择 Keras 是因为我希望将来能够向后兼容 Matlab。

  2. 从 Keras 模型中获取一个 tensorflow 会话,有一个示例如何做到这一点here。比 *.pd 文件中的Save the session

  3. openCV dnn 模型加载神经网络模型。有一个特定的功能可以做到这一点

    cv::readNet()
    
  4. 使用带有 OpenCV 的 C++ 运行 NN

    net.setInput(blob);
    Mat prob = net.forward();
    

我想和你确认一下这个流程是否真的有效。有什么建议可以更好地进行部署吗?对流程有什么建议或改进吗?

【问题讨论】:

  • 你看过Tensorflow Lite吗?我不知道您的最终部署是否是嵌入式的(raspi、ios 和 andorid),但 TFlite 是用 c++ 编写的。
  • 谢谢,我不认为这是我需要的,Tensorflow lite 是为移动设备设计的
  • 您的流程应该可以工作,但您必须确保新图像的预处理在数值上与您在训练期间使用的相同。我建议编写一些单元测试和网络/输入示例来证明这一点。

标签: c++ opencv tensorflow neural-network keras


【解决方案1】:

也许看看这个问题:Convert Keras model to C++

总体思路是将模型保存在json中,权重保存在hdf5中,然后使用keras2cpp这个解决方案将其转换为C++。

【讨论】:

  • 我已经看过了,问题是如何从json文件到c++框架
  • 查看keras2cpp 链接。您可以在此处找到如何使用它的示例。你只需要在你的机器上安装 python,然后你就可以使用:python dump_to_simple_cpp.py -a pathto/yourmodel.json -w pathto/yourweights.h5 -o pathto/youroutputfile.nnet.
  • 这个项目肯定不行,这个项目是去年更新的,支持简单的CNN,激活层有限。 “代码准备支持简单的卷积网络(来自 MNIST 示例),但可以轻松扩展。仅实现了 ReLU 和 Softmax 激活。”我觉得还是用比较扎实的c++框架比较好,比如opencv、tensorflow c++或者Intel clDNN
猜你喜欢
  • 2011-04-07
  • 1970-01-01
  • 2012-04-02
  • 2018-08-19
  • 2010-11-20
  • 2019-09-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多