首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >Android / TFlite调用导致NPE

Android / TFlite调用导致NPE
EN

Stack Overflow用户
提问于 2019-02-28 11:10:12
回答 1查看 351关注 0票数 0

我们正在尝试在android应用程序中进行对象检测。为了做到这一点,我们使用了ssdlite_mobilenet_v2_coco预训练网络,并继续训练我们自己的数据集。

为了进行训练,我们使用了Ubuntu18.04和TensorFlow 1.11.0 + GPU支持。我们使用以下脚本创建了tflite模型:

代码语言:javascript
运行
AI代码解释
复制
python3 ~/tensorflow/models/research/object_detection/export_tflite_ssd_graph.py \
--pipeline_config_path input/ssdlite_mobilenet_v2_coco/pipeline.config \
--trained_checkpoint_prefix input/ssdlite_mobilenet_v2_coco/model.ckpt-381700 \
--output_directory output/ \
--add_postprocessing_op=true

tflite_convert \
--output_file=output/ssdlite_mobilenet_v2_coco.tflite \
--graph_def_file=input/ssdlite_mobilenet_v2_coco.pb \
--input_arrays=FLOAT \
--output_arrays=concat,concat_1 \
--input_shape=1,300,300,3

这个应用程序基本上做的是,它接收预先录制的视频,使用FFmpegMediaMetadataRetriever逐帧解码,然后将位图传递到tflite中以检测那里的对象。这个应用是用gradle构建的,我们使用的是‘org.tensorflow:tensorflow lite:1.12.0’,但我们基本上得到了与1.11相同的错误。

我们将位图缩小到300x300,并将其从ARGB转换为3个浮动通道,然后调用tflite,如下所示:

代码语言:javascript
运行
AI代码解释
复制
Log.v(TAG, "Feeding TFLite")
outputLocations = Array(1) { Array(NUM_DETECTIONS) { FloatArray(4) } }
outputClasses = Array(1) { FloatArray(NUM_DETECTIONS) }
outputScores = Array(1) {FloatArray(NUM_DETECTIONS)}
numDetections = FloatArray(1)

val inputArray = arrayOf<Any>(imgData!!)
val outputMap = HashMap<Int, Any>()
outputMap.put(0, outputLocations!!)
outputMap.put(1, outputClasses!!)
outputMap.put(2, outputScores!!)
outputMap.put(3, numDetections!!)


Log.v(TAG, "Running TFLite")
tflite!!.runForMultipleInputsOutputs(inputArray, outputMap)
Log.v(TAG, "Returning from TFLite")

val recognitions = ArrayList<Recognition>(NUM_DETECTIONS)

我们得到的错误是:

代码语言:javascript
运行
AI代码解释
复制
2019-02-28 11:52:33.486 26807-26879/com.package.xxxxxx A/libc: Fatal signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr 0x0 in tid 26879 (.xxxxxx), pid 26807 (.xxxxxx)
2019-02-28 11:52:33.600 26890-26890/? A/DEBUG: *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
2019-02-28 11:52:33.601 26890-26890/? A/DEBUG: Build fingerprint: 'google/sdk_gphone_x86/generic_x86:9/PSR1.180720.075/5124027:userdebug/dev-keys'
2019-02-28 11:52:33.601 26890-26890/? A/DEBUG: Revision: '0'
2019-02-28 11:52:33.601 26890-26890/? A/DEBUG: ABI: 'x86'
2019-02-28 11:52:33.604 26890-26890/? A/DEBUG: pid: 26807, tid: 26879, name: .xxxxxx  >>> com.package.xxxxxx <<<
2019-02-28 11:52:33.604 26890-26890/? A/DEBUG: signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr 0x0
2019-02-28 11:52:33.604 26890-26890/? A/DEBUG: Cause: null pointer dereference
2019-02-28 11:52:33.604 26890-26890/? A/DEBUG:     eax 00000000  ebx 00000000  ecx 00000000  edx 00000000
2019-02-28 11:52:33.604 26890-26890/? A/DEBUG:     edi c75094a8  esi 00000000
2019-02-28 11:52:33.604 26890-26890/? A/DEBUG:     ebp c75090f8  esp c7509070  eip c757c77b
2019-02-28 11:52:33.606 26890-26890/? A/DEBUG: backtrace:
2019-02-28 11:52:33.606 26890-26890/? A/DEBUG:     #00 pc 0007277b  /data/app/com.package.xxxxxx-yGil4a0ylttBBhPIo26SWA==/lib/x86/libtensorflowlite_jni.so
2019-02-28 11:52:33.606 26890-26890/? A/DEBUG:     #01 pc 00074fe0  /data/app/com.package.xxxxxx-yGil4a0ylttBBhPIo26SWA==/lib/x86/libtensorflowlite_jni.so
2019-02-28 11:52:33.606 26890-26890/? A/DEBUG:     #02 pc 0007590d  /data/app/com.package.xxxxxx-yGil4a0ylttBBhPIo26SWA==/lib/x86/libtensorflowlite_jni.so
2019-02-28 11:52:33.606 26890-26890/? A/DEBUG:     #03 pc 000755b0  /data/app/com.package.xxxxxx-yGil4a0ylttBBhPIo26SWA==/lib/x86/libtensorflowlite_jni.so
2019-02-28 11:52:33.606 26890-26890/? A/DEBUG:     #04 pc 00076322  /data/app/com.package.xxxxxx-yGil4a0ylttBBhPIo26SWA==/lib/x86/libtensorflowlite_jni.so
2019-02-28 11:52:33.606 26890-26890/? A/DEBUG:     #05 pc 0013389c  /data/app/com.package.xxxxxx-yGil4a0ylttBBhPIo26SWA==/lib/x86/libtensorflowlite_jni.so
2019-02-28 11:52:33.607 26890-26890/? A/DEBUG:     #06 pc 00132fa7  /data/app/com.package.xxxxxx-yGil4a0ylttBBhPIo26SWA==/lib/x86/libtensorflowlite_jni.so
2019-02-28 11:52:33.607 26890-26890/? A/DEBUG:     #07 pc 00132e37  /data/app/com.package.xxxxxx-yGil4a0ylttBBhPIo26SWA==/lib/x86/libtensorflowlite_jni.so
2019-02-28 11:52:33.607 26890-26890/? A/DEBUG:     #08 pc 0016550e  /data/app/com.package.xxxxxx-yGil4a0ylttBBhPIo26SWA==/lib/x86/libtensorflowlite_jni.so
2019-02-28 11:52:33.607 26890-26890/? A/DEBUG:     #09 pc 0008f065  /system/lib/libc.so (__pthread_start(void*)+53)
2019-02-28 11:52:33.607 26890-26890/? A/DEBUG:     #10 pc 0002485b  /system/lib/libc.so (__start_thread+75)
2019-02-28 11:52:34.197 1761-1761/? E//system/bin/tombstoned: Tombstone written to: /data/tombstones/tombstone_35

正如你所看到的,NPE发生在libtensorflow的深处,我们基本上已经没有想法可以做些什么来修复它了,所以任何帮助都是非常感谢的。在物理设备和android沙箱上都会发生这种情况(API 28)

我们使用this作为起点,还使用了Tensorflow存储库中的tensorflow tflite演示。

EN

回答 1

Stack Overflow用户

发布于 2019-03-18 14:01:35

事实证明,tflite_convert脚本中的输入数组和输出数组是错误的。

我们成功地(在没有NullPointer的情况下)使用以下命令生成的tflite图形调用了tflite:

代码语言:javascript
运行
AI代码解释
复制
tflite_convert \ 
--graph_def_file=tflite_graph.pb \ 
--output_file=output.tflite \ 
--input_shapes=1,300,300,3 \ 
--std_dev_values=128 \ 
--mean_values=128 \ 
--input_arrays=normalized_input_image_tensor \ 
--output_arrays='TFLite_Detection_PostProcess','TFLite_Detection_PostProcess:1','TFLite_Detection_PostProcess:2','TFLite_Detection_PostProcess:3' \ 
--allow_custom_ops 
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54924323

复制
相关文章
windows使用c_api调用tflite 2.3 dll
在上一篇文章【Win10系统编译Tensorflow Lite 2.3为动态链接库tensorflowlite_c.dll】介绍了如何在Windows平台下编译tflite为动态链接库tensorflowlite_c.dll,接下来介绍如何使用tensorflowlite_c.dll。上一篇文章中我们编译的tflite库为c语言接口,即c_api,在使用过程中,只需下面一条include语句即可:
superhua
2021/01/04
3.4K2
《Java 开发手册》解读:三目运算符为何会导致 NPE?
阿里妹导读:在三目运算符中,表达式 1 和 2 在涉及算术计算或数据类型转换时,会触发自动拆箱。当其中的操作数为 null 值时,会导致 NPE 。本文将详细剖析 NPE 出现的原因,重新梳理相关知识点,并进一步扩展,帮助大家彻底理解这个问题。
墨鬓
2020/07/30
1.7K0
《Java 开发手册》解读:三目运算符为何会导致 NPE?
ShardingSphere分库分表schema名称导致NPE问题排查记录
前段时间把 ShardingSphere 升级到了 5.1.1 版本,奈何官方版本升级太快跟不上速度,这不最近又发现了一个 BUG。
艾小仙
2023/02/24
9140
ShardingSphere分库分表schema名称导致NPE问题排查记录
Android Studio新特性:使用TFLite模型更简单
Android Studio仍然在疯狂更新中,隔一段时间打开Android Studio,就会提示有新版本,对此我已经见怪不怪。一般而言,我会顺手点击一下升级。今天我又点击了升级,粗略看了一下新版本4.1的特性说明,其中有一项是:使用TensorFlow Lite模型。出于对机器学习的兴趣,于是就研究了一番这个新特性。
云水木石
2020/11/03
2.4K0
Android接入USB设备后导致Activity重新调用onCreate问题
解决办法:manifests的所有activity声明,增加configChanges如前文所述。
用户10521372
2023/07/31
5831
非空注解@NonNull与@NotNull使用错误导致传参为空时报NPE
新上线了一个需求后,发现时不时的有一些NullPointerException报出来,跟踪后发现都是在一个地方报出来的
翎野君
2023/05/26
4030
android 调用 python
我这里使用AS,如果使用ec开发的直接看 http://www.srplab.com/cn/index.html 官方下载的开发包 里面有demo,我下载了可以跑通;
py3study
2020/01/10
4.4K1
android 调用 python
【踩坑】Jupyter调用TensorFlow 导致kernel restarting
原因一:GPU内存满了。 解决方法:手动清理一下,kill掉jupyter进程。 原因二:装了GPU版的TensorFlow,但自己的电脑是CPU的。 解决方法:重装一下。 pip uninstall tensorflow pip install tensorflow-cpu 原因三:缺少个包。 解决方法:安装一下。 conda install nomkl 原因四:CUDA版本太高了 解决方法:代码前面添加环境变量。 import os os.environ['KMP_DUPLICATE_LIB_OK'
小锋学长生活大爆炸
2023/03/01
6480
【踩坑】Jupyter调用TensorFlow 导致kernel restarting
基于Tensorflow2 Lite在Android手机上实现图像分类
Tensorflow2之后,训练保存的模型也有所变化,基于Keras接口搭建的网络模型默认保存的模型是h5格式的,而之前的模型格式是pb。Tensorflow2的h5格式的模型转换成tflite格式模型非常方便。本教程就是介绍如何使用Tensorflow2的Keras接口训练分类模型并使用Tensorflow Lite部署到Android设备上。
夜雨飘零
2021/12/07
2.4K0
基于Tensorflow2 Lite在Android手机上实现图像分类
基于Tensorflow2 Lite在Android手机上实现图像分类
Tensorflow2之后,训练保存的模型也有所变化,基于Keras接口搭建的网络模型默认保存的模型是h5格式的,而之前的模型格式是pb。Tensorflow2的h5格式的模型转换成tflite格式模型非常方便。本教程就是介绍如何使用Tensorflow2的Keras接口训练分类模型并使用Tensorflow Lite部署到Android设备上。
夜雨飘零
2020/07/22
3.3K0
基于Tensorflow2 Lite在Android手机上实现图像分类
android JNI调用机制
JNI的出现使得开发者既可以利用Java语言跨平台、类库丰 富、开发便捷等特点,又可以利用Native语言的高效。 JNI是JVM实现中的一部分,因此Native语言和Java代码都运行在JVM的
xiangzhihong
2018/02/01
1.8K0
android JNI调用机制
webview调用android代码
在开发的时候经常会用到webview,必然会涉及到webview与客户端的交互,比如在网页上进行某个操作后,需要在app上显示一个提示,提示内容由网页提供,这时候就需要js来调用客户端的java代码了。 webview提供了一个方法addJavascriptInterface()来满足这种需求。 具体步骤: 客户端定义一个类,并定义需要的方法,例如: public class WebAppInterface { Context mContext; /** * Instantiate
coderZhen
2018/06/28
8050
导致android 手机 Jank 的元凶
Scheduler delay:应用程序是可运行状态(Runable),但在相当长的时间内不会运行。Scheduler delay 可能会引起Jank。不同性质的线程对Scheduler delay 要求不同,
用户9732312
2022/05/13
1.4K0
【技术创作101训练营】TensorFlow Lite的 GPU 委托(Delegate)加速模型推理
不过从我对文档的理解来看,感觉更像是添加的一种硬件后端(代理我想应该只是调用调用层面,不是底层实现,另外在Hexagon DSP的委托代理部分,文档坦言说Hexagon DSP的代理就是为了补充NNAPI,特别是针对那些NNAPI不可用DSP加速的、老旧驱动的设备,毕竟这些老旧设备也没有NNAPI这个东西,但有DSP硬件),交给模型的子图来去执行。比方原始模型的CPU执行Graph如上图。交给GPU的委托代理后,原Graph变为下面这样:
开心的派大星
2020/09/23
5.5K1
Android Tensorflow 示例代码 Pose Estimation项目编译
原先识别人体骨骼,使用的Google的 MLKit 框架 。方便简单,直接通过Gradle添加相关依赖库。就可以使用了。
zinyan.com
2022/12/07
1.3K0
Android Tensorflow 示例代码 Pose Estimation项目编译
使用Optional摆脱NPE的折磨
architectural-architectural-design-architecture
阿杜
2019/07/15
5360
异步调用导致的不同步问题
本文链接:https://blog.csdn.net/u014427391/article/details/100044661
SmileNicky
2019/08/29
4700
体态识别算法在 Android 端部署实例
随着软硬件技术的发展,智能穿戴式设备逐渐从概念走向商用化。在过去几年内,Google、Apple以及Sony等科技公司在体积、功耗控制以及成本等方面做得越来越好,推出了一大批可穿戴产品,具有代表性的成果有:1. 智能手环:产品具备运动监测、睡眠监测、心率测量以及震动唤醒等功能;2. 智能眼镜:广泛应用于VR、AR领域。
联远智维
2022/11/22
8170
点击加载更多

相似问题

Android片段导致NPE“尝试调用虚拟方法”错误

10

GridWorld Actor -调用toString()将导致NPE

13

在Android中调用提供NPE

13

@InjectMocks导致NPE

14

字体族导致android 26上的NPE

40
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档