我将 Android Studio 3.0.3 与 Gradle 3.3 一起使用,我试图构建:
https://github.com/tensorflow/tensorflow/tree/master/tensorflow/contrib/lite/java/demo
但是我被这个问题困扰:
java.lang.UnsatisfiedLinkError: No implementation found for long org.tensorflow.lite.NativeInterpreterWrapper.createErrorReporter(int) (tried Java_org_tensorflow_lite_NativeInterpreterWrapper_createErrorReporter and Java_org_tensorflow_lite_NativeInterpreterWrapper_createErrorReporter__I)
at org.tensorflow.lite.NativeInterpreterWrapper.createErrorReporter(Native Method)
at org.tensorflow.lite.NativeInterpreterWrapper.<init>(NativeInterpreterWrapper.java:47)
at org.tensorflow.lite.Interpreter.<init>(Interpreter.java:77)
at com.example.android.tflitecamerademo.ImageClassifier.<init>(ImageClassifier.java:94)
at com.example.android.tflitecamerademo.Camera2BasicFragment.onActivityCreated(Camera2BasicFragment.java:299)
at android.app.Fragment.performActivityCreated(Fragment.java:2620)
at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:1296)
Run Code Online (Sandbox Code Playgroud) 目前,我正在尝试制作一个Android食物识别应用程序。我设法构建一个应用程序来处理图像并在“mobilenet_quant_v1_224.tflite”预训练模型上运行。一切正常,现在我想将自己的调用添加到模型中进行预测。
我确实知道TFLITE还处于初级阶段,也许有些人能够突破障碍。如果是这样,请帮忙。任何回复/建议/方法都会有帮助,因为我不知道如何继续。
即使没有任何方法可以解决它,请建议我一种方法来实现此应用程序的目标。
链接到经过训练的模型:http://download.tensorflow.org/models/mobilenet_v1_2018_02_22/mobilenet_v1_1.0_224_quant.tgz
真心希望能得到一些帮助。
再次提前致谢。
我一直在尝试 TFLite 来提高 Android 上的检测速度,但奇怪的是我的 .tflite 模型现在几乎只检测 1 个类别。
\n\n我已经对重新训练 mobilenet 后获得的 .pb 模型进行了测试,结果很好,但由于某种原因,当我将其转换为 .tflite 时,检测结果相差甚远......
\n\n对于重新训练,我使用了Tensorflow for Poets 2中的 retrain.py 文件
\n\n我使用以下命令来重新训练、优化推理并将模型转换为 tflite:
\n\npython retrain.py \\\n--image_dir ~/tf_files/tw/ \\\n--tfhub_module https://tfhub.dev/google/imagenet/mobilenet_v1_100_224/feature_vector/1 \\\n--output_graph ~/new_training_dir/retrainedGraph.pb \\\n-\xe2\x80\x93saved_model_dir ~/new_training_dir/model/ \\\n--how_many_training_steps 500 \n\nsudo toco \\\n--input_file=retrainedGraph.pb \\\n--output_file=optimized_retrainedGraph.pb \\\n--input_format=TENSORFLOW_GRAPHDEF \\\n--output_format=TENSORFLOW_GRAPHDEF \\\n--input_shape=1,224,224,3 \\\n--input_array=Placeholder \\\n--output_array=final_result \\\n\nsudo toco \\\n--input_file=optimized_retrainedGraph.pb \\\n--input_format=TENSORFLOW_GRAPHDEF \\\n--output_format=TFLITE \\\n--output_file=retrainedGraph.tflite \\\n--inference_type=FLOAT \\\n--inference_input_type=FLOAT \\\n--input_arrays=Placeholder \\\n--output_array=final_result \\\n--input_shapes=1,224,224,3\nRun Code Online (Sandbox Code Playgroud)\n\n我在这里做错了什么吗?准确性的损失从何而来?
\n在使用 tensorflow 训练目标检测模型时,我们总是输入
python train.py --logtostderr --train_dir=training/ --pipeline_config_path=training/ssd_mobilenet_v1_pets.config
Run Code Online (Sandbox Code Playgroud)
但我想知道“--logtostderr”的功能是什么?如果省略呢?
对不起,新手问题。我试过寻找示例,但大多数时候它是我无法运行的伪代码/片段,而且很难分辨是什么,尤其是在所有不同的 TF 工作流程中。
我正在尝试将预训练的 TensorFlow 保存模型 ResNet-50 v2 (fp32) 转换为量化的 TensorFlow Lite 文件,但存在两个问题:
该模型一目了然,即使有错误消息,所以我最关心的是批量大小修改。
我尝试转换的保存模型:
我尝试用来生成新保存模型的检查点数据和 .py 模型:
我如何在 bash 中将其转换为 .tflite:
tflite_convert --output_file resnet_imagenet_v2_uint8_20181001.tflite --saved_model_dir . --post_training_quantize
Run Code Online (Sandbox Code Playgroud)
这导致 64x224x224x3 的合理模型。尽管存在错误,这对于 Android/iOS 可能运行良好(尚未尝试),但我正在尝试在自定义平台上使用它进行试验。
我尝试使用目标输入形状生成保存模型的脚本:
import tensorflow as tf
import numpy as np
from tensorflow.contrib.slim.nets import resnet_v2
def main():
# Directory containing resnet_v2_50.ckpt
ckpt_dir = "/media/resnet_v2_50_2017_04_14/"
with tf.contrib.slim.arg_scope(resnet_v2.resnet_arg_scope()):
input_tensor …Run Code Online (Sandbox Code Playgroud) 使用 tflite 并获取解释器的属性,例如:
print(interpreter.get_input_details())
[{'name': 'input_1_1', 'index': 47, 'shape': array([ 1, 128, 128, 3], dtype=int32), 'dtype': <class 'numpy.uint8'>, 'quantization': (0.003921568859368563, 0)}]
Run Code Online (Sandbox Code Playgroud)
什么'quantization': (0.003921568859368563, 0)意思?
今天终于到了火花板边缘板;-)
按照这个写得很好的指南:https : //codelabs.developers.google.com/codelabs/sparkfun-tensorflow/#3 我在尝试使用uart_wired_update.py脚本在 Ambiq 上刷写代码时遇到了以下 NoResponseError张量流示例
opprud$ python3 tensorflow/lite/experimental/micro/tools/make/downloads/AmbiqSuite-Rel2.0.0/tools/apollo3_scripts/uart_wired_update.py -b 115200 /dev/cu.usbserial-1430 -r 1 -f main_nonsecure_wire.bin -i 6
MOJ/Connecting with Corvette over serial port /dev/cu.usbserial-1430...
Sending Hello.
No response for command 0x00000000
Traceback (most recent call last):
File "tensorflow/lite/experimental/micro/tools/make/downloads/AmbiqSuite-Rel2.0.0/tools/apollo3_scripts/uart_wired_update.py", line 336, in <module>
main()
File "tensorflow/lite/experimental/micro/tools/make/downloads/AmbiqSuite-Rel2.0.0/tools/apollo3_scripts/uart_wired_update.py", line 38, in main
connect_device(ser)
File "tensorflow/lite/experimental/micro/tools/make/downloads/AmbiqSuite-Rel2.0.0/tools/apollo3_scripts/uart_wired_update.py", line 58, in connect_device
response = send_command(hello, 88, ser)
File "tensorflow/lite/experimental/micro/tools/make/downloads/AmbiqSuite-Rel2.0.0/tools/apollo3_scripts/uart_wired_update.py", line 235, in send_command
raise NoResponseError
__main__.NoResponseError
Run Code Online (Sandbox Code Playgroud)
我的设置:
我正在使用 ML 套件集成对象检测我正在使用 firebase ML 创建自定义 tflite 模型并按照此文档https://firebase.google.com/docs/ml-kit/android/use-custom-models加载自定义模型但得到加载模型时出现以下错误
com.google.firebase.ml.common.FirebaseMLException:本地模型加载失败,模型选项为:本地模型名称:模型名称。远程型号名称:未指定。
private fun configureLocalModelSource() {
// [START mlkit_local_model_source]
val localSource = FirebaseLocalModel.Builder("my_local_model") // Assign a name to this model
.setAssetFilePath("my_model.tflite")
.build()
FirebaseModelManager.getInstance().registerLocalModel(localSource)
// [END mlkit_local_model_source]
}
@Throws(FirebaseMLException::class)
private fun createInterpreter(): FirebaseModelInterpreter? {
// [START mlkit_create_interpreter]
val options = FirebaseModelOptions.Builder()
.setRemoteModelName("my_cloud_model")
.setLocalModelName("my_local_model")
.build()
val interpreter = FirebaseModelInterpreter.getInstance(options)
// [END mlkit_create_interpreter]
return interpreter
}
Run Code Online (Sandbox Code Playgroud) 下面的代码生成了常规的 tensorflow 模型,但是当我尝试将其转换为 tensorflow lite 时它不起作用,我遵循了以下文档。
https://www.tensorflow.org/tutorials/estimator/linear 1 https://www.tensorflow.org/lite/guide/get_started
export_dir = "tmp"
serving_input_fn = tf.estimator.export.build_parsing_serving_input_receiver_fn(
tf.feature_column.make_parse_example_spec(feat_cols))
estimator.export_saved_model(export_dir, serving_input_fn)
# Convert the model.
converter = tf.lite.TFLiteConverter.from_saved_model("tmp/1571728920/saved_model.pb")
tflite_model = converter.convert()
Run Code Online (Sandbox Code Playgroud)
错误信息
Traceback (most recent call last):
File "C:/Users/Dacorie Smith/PycharmProjects/JamaicaClassOneNotifableModels/ClassOneModels.py", line 208, in <module>
tflite_model = converter.convert()
File "C:\Users\Dacorie Smith\PycharmProjects\JamaicaClassOneNotifableModels\venv\lib\site-packages\tensorflow_core\lite\python\lite.py", line 400, in convert
raise ValueError("This converter can only convert a single "
ValueError: This converter can only convert a single ConcreteFunction. Converting multiple functions is under development.
Run Code Online (Sandbox Code Playgroud)
文档摘录
TensorFlow Lite 转换器 TensorFlow …
python android tensorflow tensorflow-lite tensorflow-estimator
tflite_model = converter.convert()
tflite_model_file = 'converted_model.tflite'
with open(tflite_model_file, "wb") as f:
f.write(tflite_model)
Run Code Online (Sandbox Code Playgroud)
当我最终在 dot convert 方法中转换模型时,出现了一些错误。
错误信息:
ValueError: Failed to parse the model: /tensorflow-2.1.0/python3.6/tensorflow_core/lite/python/optimize/_tensorflow_lite_wrap_calibration_wrapper.so: undefined symbol: _ZTIN10tensorflow6DeviceE.
Run Code Online (Sandbox Code Playgroud)
源代码:
即使通过我没有找到什么是
_ZTIN10tensorflow6DeviceE
Run Code Online (Sandbox Code Playgroud)
如何转换迁移学习模型?