TensorFlow Lite 入门样例,亲测有效

参考链接:

  •     tensorflow 物体检测模型相关资料    https://github.com/tensorflow/models/tree/master/research/object_detection
  •      java api接口 https://tensorflow.google.cn/lite/apis#java

Running on mobile with TensorFlow Lite

 

以物体检测模型为例,生成一个APK文件,可以调用TensorFlow Lite模型,进而实现手机端能够运行物体检测模型。

整体分为以下几个步骤:

    步骤一、训练一个TensorFlow 模型(或者从下载他人训练好的模型)

    步骤二、生成.pb文件

    步骤三、将.pb文件转化为.tflite文件

    步骤四、使用Android Studio 导入TensorFlow安卓样例 ,替换成我们生成的tflite文件,重新编译APK

    

 

#配置依赖

https://github.com/tensorflow/models/blob/master/research/object_detection/g3doc/installation.md

 

#下载样例模型

https://github.com/tensorflow/models/blob/master/research/object_detection/g3doc/detection_model_zoo.md

TensorFlow Lite 入门样例,亲测有效_第1张图片

 

 

下载文件并解压

$wget http://download.tensorflow.org/models/object_detection/ssd_mobilenet_v1_coco_2018_01_28.tar.gz

$ tar -xzvf ssd_mobilenet_v1_coco_2018_01_28.tar.gz

 

TensorFlow Lite 入门样例,亲测有效_第2张图片

 

 

#设置环境变量

#指定pipeline.config、model.ckpt文件、输出文件的保存路径; 本次测试将样例模型文件放到了/root/tensorflow/mobile/目录下面

#并将 model.ckpt.data-00000-of-00001 重命名为model.ckpt

 

export CONFIG_FILE=/root/tensorflow/mobile/pipeline.config

export CHECKPOINT_PATH=/root/tensorflow/mobile/model.ckpt

export OUTPUT_DIR=/tmp/tflite

 

#Add Libraries to PYTHONPATH

export PYTHONPATH=$PYTHONPATH:`pwd`:`pwd`/slim

 

#生成.pb文件

python object_detection/export_tflite_ssd_graph.py \

--pipeline_config_path=$CONFIG_FILE \

--trained_checkpoint_prefix=$CHECKPOINT_PATH \

--output_directory=$OUTPUT_DIR \

--add_postprocessing_op=true

 

#查看生成结果,会发现有tflite_graph.pb 、 tflite_graph.pbtxt这两个结果文件

 

#将.pb文件转化为.tflite文件

# TensorFlow Lite Converter https://github.com/tensorflow/tensorflow/tree/master/tensorflow/lite/toco

 

#生成整数型版本tflite模型

bazel run tensorflow/lite/toco:toco -- \

--input_file=$OUTPUT_DIR/tflite_graph.pb \

--output_file=$OUTPUT_DIR/detect.tflite \

--input_shapes=1,300,300,3 \

--input_arrays=normalized_input_image_tensor \

--output_arrays='TFLite_Detection_PostProcess','TFLite_Detection_PostProcess:1','TFLite_Detection_PostProcess:2','TFLite_Detection_PostProcess:3' \

--inference_type=QUANTIZED_UINT8 \

--mean_values=128 \

--std_values=128 \

--change_concat_input_ranges=false \

--allow_custom_ops \

--default_ranges_min=0 \

--default_ranges_max=255 \

 

#生成float 版本tflite模型

bazel run -c opt tensorflow/lite/toco:toco -- \

--input_file=$OUTPUT_DIR/tflite_graph.pb \

--output_file=$OUTPUT_DIR/float_detect.tflite \

--input_shapes=1,300,300,3 \

--input_arrays=normalized_input_image_tensor \

--output_arrays='TFLite_Detection_PostProcess','TFLite_Detection_PostProcess:1','TFLite_Detection_PostProcess:2','TFLite_Detection_PostProcess:3'  \

--inference_type=FLOAT \

—allow_custom_ops

 

#查看生成结果,会发现有detect.tflite、 float_detect.tflite 这两个结果文件

 

Running our model on Android

 

项目工程文件:https://github.com/tensorflow/tensorflow/tree/master/tensorflow/lite/examples/android

可以git clone https://github.com/tensorflow/tensorflow.git 然后到找到/tensorflow/lite/examples/android目录,直接import到 Android Studio 里面

 

将detect.tflite文件拷贝到 android/app/src/main/assets 目录下,并将coco_labels_list.txt复制一份,改名为labels_list.txt,结果如下图所示

TensorFlow Lite 入门样例,亲测有效_第3张图片

 

对 DetectorActivity.java 进行修改,将物体检测模型替换成我们生成的模型(detect.tflite),并将模型对应的分类列表文件也进行替换(labels_list.txt, 因为我们下载的样例模型就是coco-trained模型,label_list.txt内容与 原来的coco_labels_list.txt一致即可)

 

TensorFlow Lite 入门样例,亲测有效_第4张图片

 

 

重新编译运行,即可生成测试APK

TensorFlow Lite 入门样例,亲测有效_第5张图片

 

 

查看build.gradle文科,可以确定该demo指定的目标运行系统的api level 为26

TensorFlow Lite 入门样例,亲测有效_第6张图片

 

启动模拟器(如果没有模拟器,就创建一个api level为26的,cpu/abi 为x86架构的)

TensorFlow Lite 入门样例,亲测有效_第7张图片

 

 

模拟器启动界面

TensorFlow Lite 入门样例,亲测有效_第8张图片

 

TensorFlow Lite 入门样例,亲测有效_第9张图片

你可能感兴趣的:(java,tensorflow)