我在MobileNet-V2上训练了一个图像多分类模型(只增加了Dense层),并进行了全整数量化(INT 8),然后导出model.tflite文件,使用TF Class()调用该模型。
下面是我的代码来量化它:
import tensorflow as tf
import numpy as np
import pathlib
def representative_dataset():
for _ in range(100):
data = np.random.rand(1, 96, 96, 3) // random tensor for test
yield [data.astype(np.float32)]
converter = tf.lite.TFLiteConverter.from_saved_model('saved_model/my_model')
converter.optimizations = [tf.lite.Optimize.DEFAULT]
converter.representative_dataset = representative_dataset
tflite_quant_model = converter.convert()
tflite_models_dir = pathlib.Path("/tmp/mnist_tflite_models/")
tflite_models_dir.mkdir(exist_ok=True, parents=True)
tflite_model_quant_file = tflite_models_dir/"mnist_model_quant.tflite"
tflite_model_quant_file.write_bytes(tflite_quant_model)
在训练时的测试中,该模型的准确率相当不错。然而,在openmv上测试时,所有对象都输出相同的标签(尽管概率略有不同)。
我查了一些资料,其中一个提到TF Classify()有offset和scale参数,这与训练时将RGB值压缩到[-1,0]或[0,1]有关,但官方API文档中没有这个参数。
for obj in tf.classify(self.net , img1, min_scale=1.0, scale_mul=0.5, x_overlap=0.0, y_overlap=0.0):
print("**********\nTop 1 Detections at [x=%d,y=%d,w=%d,h=%d]" % obj.rect())
sorted_list = sorted(zip(self.labels, obj.output()), key = lambda x: x[1], reverse = True)
for i in range(1):
print("%s = %f" % (sorted_list[i][0], sorted_list[i][1]))
return sorted_list[i][0]
那么有没有从tensorflow训练模型到部署到openmv的工作流程的例子呢?
1条答案
按热度按时间q5lcpyga1#
好吧,你确实在1年前问过这个问题,但我还是来帮你的!
如果你想为OpenMV H7 Plus训练一个图像分类模型,你可以查看这个repo。
你也可以用这段代码来推断它们:
希望能有所帮助!