在Windows上使用C++中的tensorflow

Using tensorflow in C++ on Windows

本文关键字:C++ 中的 tensorflow Windows      更新时间:2023-10-16

我知道在C++中有使用Tensorflow的方法,他们甚至有文档,但我似乎能够获得它的库。我已经根据源代码说明检查了构建,但它似乎构建了一个pip包,而不是一个我可以链接到我的项目的库。我也找到了一个教程,但当我尝试它时,我的内存用完了,我的电脑崩溃了。我的问题是,我如何才能真正让C++库在我的项目中工作?我确实有这些要求,我必须在C++中使用Visual Studio开发windows。我很想得到的是,如果我能得到一个预编译的DLL,我可以直接链接,但我还没有找到这样的东西,我对其他选择持开放态度。

我不能发表评论,所以我写这篇文章作为回答。如果你不介意使用Keras,你可以节省使用深度的包装。我自己也没有见过图书馆,但我发现它很深,而且似乎很容易实现。我目前正在尝试使用它,所以我不能保证它会起作用。

您可以从这里查看neural2D:

https://github.com/davidrmiller/neural2d

它是一个没有任何依赖库的神经网络实现(全部从头开始编写)。

我想说,最好的选择是使用cppflow,这是我创建的一个简单的包装器,可以轻松地使用C++中的Tensorflow。

您不需要安装任何东西,只需下载TFC API,并将其放置在您的计算机中。你可以看一下文档,看看如何做到这一点,以及如何使用库。

答案似乎很难:-(

试试这个开始。您可以按照最新的说明在Windows上从源代码构建直到构建pip包。但不要那样做——改为做这个/这些:

bazel -config=opt //tensorflow:tensorflow.dll 
bazel -config=opt //tensorflow:tensorflow.lib
bazel -config=opt tensorflow:install_headers

这么多似乎很管用。当你尝试使用任何头文件时,问题就会真正开始——你可能会得到编译错误,至少在TF版本>=2.0.我试过:

  • 构建label_image示例(readme.md文件中的说明)
    • 它在Windows上构建和运行良好,这意味着所有的头文件和源文件都在那里
    • 尝试将该源代码合并到Windows控制台可执行文件中:由于与std::min&std::max,可能是由于Windows SDK
  • 在Windows控制台应用程序中包含c_api.h:不会编译
  • 包括TF-Lite头文件:不会编译

如果不能编译头,那么在前两个bazel命令中投入漫长的编译时间是没有意义的:-(

您可能有时间投资解决这些错误;我没有。在这个阶段,Tensorflow缺乏对Windows C++的足够支持来依赖它,尤其是在商业环境中。我建议探索这些选项:

  • 如果TF Lite是一个选项,请观看
  • Windows ML/Direct ML(需要将TF模型转换为ONNX格式)
  • CPPFlow
  • 果味浓郁
  • Keras2CPP

UPDATE:在浏览了上面的列表后,我最终发现以下内容在我的上下文中最有效(实时连续项目识别):

  • 将模型转换为ONNX格式(使用tf2onnx或keras2onnx
  • 使用Microsoft的ONNX运行时

尽管微软建议在毫秒很重要的地方使用DirectML,但使用DirectML作为执行提供程序的ONNX运行时的性能意味着我们可以在20ms左右通过英特尔GPU运行224x224 RGB图像,这对我们来说已经足够快了。但我们仍然很难找到答案