当前位置: 首页 > 知识库问答 >
问题:

适用于Android的Tensorflow量化图

曹和正
2023-03-14

我正在尝试将量化图形加载到Android应用程序中。我的构建文件包含

deps = ["//tensorflow/core:android_tensorflow_lib",
      "//tensorflow/contrib/quantization:cc_array_ops",
      "//tensorflow/contrib/quantization:cc_math_ops",
      "//tensorflow/contrib/quantization:cc_nn_ops",
      "//tensorflow/contrib/quantization/kernels:quantized_ops"]

额外的量化deps用于独立的C构建。

由于GEMMLOWP中存在大量错误,我无法使用Bazel进行编译。在Android中包含gemmlowp和量化操作的正确方式是什么?

下面是一个错误示例:

external/gemmlowp/eight_bit_int_gemm/eight_bit_int_gemm.cc:125:13: error: 'int32_t' is not a member of 'std'
   MatrixMap<std::int32_t, ResultOrder> result(c, m, n, ldc);

这是在Ubuntu 16.04和Bazel 0.3.0上。

这里有一个要点,它有两次连续尝试构建包的输出——第一次在highwayhash上失败,第二次在gemmlowp上失败。https://gist.github.com/ericdanz/81b799f2e0bbb3cc462aa3c90468c71b

最终,通过在gemmlowp和highwayhash的构建文件中自由添加“-std=c11”,并用android框架替换量化ops中的框架依赖项,它得以编译和运行。不过,它产生的结果却截然不同,运行速度慢了约4倍(26-3200ms vs 6-800 ms)。我会尝试做更深入的调查。

共有1个答案

卢普松
2023-03-14

以下是对我有用的东西-它基本上是上面Eric D的所有评论的组合,但我想把所有这些放在一个地方,供遇到这个问题的新手使用:

添加quantized_opsindepstolibtensorflow_demo.soin the BUILD file for the Android app:

deps = ["//tensorflow/core:android_tensorflow_lib",
        "//tensorflow/contrib/quantization/kernels:quantized_ops",]

在tensorflow/contrib/quantization/kernels/BUILD中修改量化操作的deps

deps = [
        "//tensorflow/contrib/quantization:cc_array_ops",
        "//tensorflow/contrib/quantization:cc_math_ops",
        "//tensorflow/contrib/quantization:cc_nn_ops",
        "//tensorflow/core:android_tensorflow_lib",
        #"//tensorflow/core",
        #"//tensorflow/core:framework",
        #"//tensorflow/core:lib",
        #"//tensorflow/core/kernels:concat_lib_hdrs",
        #"//tensorflow/core/kernels:conv_ops",
        #"//tensorflow/core/kernels:ops_util_hdrs",
        #"//tensorflow/core/kernels:pooling_ops_hdrs",
        #"//tensorflow/core/kernels:eigen_helpers",
        #"//tensorflow/core/kernels:ops_util",
        #"//tensorflow/core/kernels:pooling_ops",
        "//third_party/eigen3",
        "@gemmlowp//:eight_bit_int_gemm",
    ],

删除/注释掉。doc()部件在tenstorflow/contrib/量化/ops/array_ops.cc,math_ops.cc和nn_ops.cc

在tensorflow/contrib/quantization/BUILD中修改cc_array_opscc_math_opscc_nn_opsdeps

deps = [
        #"//tensorflow/core:framework",
        "//tensorflow/core:android_tensorflow_lib",
    ],

使用--cxopt=“-std=c 11”标志运行Android应用程序的bazel构建命令。

 类似资料:
  • 问题内容: 我正在为我的Android项目设置ProGuard。我的项目也使用GSON。 我已经研究了ProGuard配置与GSON和Android的兼容性,并遇到了由google-gson https://code.google.com/p/google-gson/source/browse/trunk/examples/android- proguard- 提供的示例示例/proguard.c

  • 问题内容: 如果我为桌面启动它,它运行得很好,但是为我的Android导出后,它在我启动该应用程序后立即崩溃。 所以我的问题…: 它适用于台式机而不适用于我的Android有什么问题? 。 Logcat 我是Java的新手,所以我希望它是正确的部分:x 问题答案: 有一些人例外,logcat说: 这是由于您的模拟器未将gpu用于图形处理,最好的解决方案是使用手机来测试您的应用程序 由于某些原因(可

  • 问题内容: 我正在尝试为Android创建一个仅向SSH服务器发送命令的应用程序。无需响应,我只需要能够发送命令即可。我想知道是否可以使用任何Java库? 不需要高级的东西,只需一个纯粹的连接即可发送命令。 问题答案: 您正在搜索JSch。 其他库是jaramiko,paramiko和trilead- ssh2 。connectbot项目是您可以浏览Trilead源代码的地方。请注意,connec

  • 在TensorFlow中执行批量规格化的正确方法是什么?(即,我不想计算连续均值和方差)。我当前的实现基于tf。nn。batch\u normalization(批次规格化),其中x是具有形状的卷积层的输出。[批次大小、宽度、高度、通道数]。我想在通道方面执行批处理规范。 但这种实施的结果非常糟糕。与tensorflow比较。承包商。苗条的batch\u norm显示其票价较低(同样糟糕的培训表现

  • 我试图量化我的模型(CNN),以便将其转换为量化模型。tflite模型。我将在以下位置阅读教程:https://github.com/tensorflow/tensorflow/tree/r1.13/tensorflow/contrib/quantize#quantization-意识训练 首先,我通过调用以下命令在我的图中引入假量化节点: 但是,当最后我尝试调用此函数以确保图形以正确的格式导出量

  • 问题内容: 我有这个代码: 当我滚动我的回收站视图时,出现此错误: 如何处理此错误并获得第一个可见项目的位置? 问题答案: 我用此代码对其进行了测试,并且对我来说效果很好 我使用了回收视图参数。