最近在用TensorFlow Object Detection API训练目标检测模型,训练好的pb模型大小17.6M,用pb预测效果不错,于是想着如何在手机端运行,查看官网关于tflite的转换,网址:https://github.com/tensorflow/models/blob/master/research/object_detection/g3doc/running_on_mobile_tensorflowlite.md。
预测使用的pb模型:
在主目录下的research目录执行如下:
注意里面的相关路径需要换成自己的ckpt的目录。执行完后,会看到一个名字为--output_directory指定的目录。这里为exported_graphs目录,里面包含了一个SavedModel 和frozen graph,其中的.pb文件就是预测使用的。
如上转换pb和预测过程参考我之前的文章即可。
关于tflite,需要使用如下操作:
注意第二行pipeline_config_path为你的pipeline.config目录路径,trained_config_path路径为训练好的ckpt模型文件,output_dir为tflite输出目录文件夹名字,执行完后在tflite目录会看到两个文件tflite_graph.pb and tflite_graph.pbtxt.
接下来就是转tflite了,之前尝试了其他转tflite的方式,虽然只有几行代码,但发现一直有问题,因此按照官网要求一步一步转,这次使用TOCO转tflite,首先需要安装TensorFlow源码并编译。。。。。切记,要不然找不到bazel目录。。。。
注意在编译后的bazel同一级目录执行,input_file为上一步生成的tflite_graph.pb文件。output_file为本次要生成的tflite文件。其他的为固定写法,如果你的模型输入不是300x300注意改input_shapes.执行完就能看到一个detect.tflite文件,该文件大小17M多,这次量化后的模型。
float类型的模型转换方式:
如上生成detect.tflite文件。
注意:在对比tflite和pb的一致性时,输入到tflite的图片需要进行(image-127.5)/128操作。否则模型输出结果和pb文件对不上。
这样pb文件和tflite预测的结果就能一样,不过float模型大小和pb文件差不多,而且量化的时候模型大小为0,不明白为什么量化的时候模型为量化成功原因,现在只能使用float类型的tflite
后续再讲其他转pb和tflite的方式以及验证方式。
喜欢的朋友和点击关注哦