为 TFliteconverter 创建代表性数据集的正确方法是什么?
What is the correct way to create representative dataset for TFliteconverter?
我正在尝试使用 INT8
权重和激活来推断 tinyYOLO-V2
。我可以使用 TFliteConverter 将权重转换为 INT8。对于 INT8
激活,我必须给出有代表性的数据集来估计比例因子。我创建此类数据集的方法似乎是错误的。
正确的步骤是什么?
def rep_data_gen():
a = []
for i in range(160):
inst = anns[i]
file_name = inst['filename']
img = cv2.imread(img_dir + file_name)
img = cv2.resize(img, (NORM_H, NORM_W))
img = img / 255.0
img = img.astype('float32')
a.append(img)
a = np.array(a)
print(a.shape) # a is np array of 160 3D images
img = tf.data.Dataset.from_tensor_slices(a).batch(1)
for i in img.take(BATCH_SIZE):
print(i)
yield [i]
# https://www.tensorflow.org/lite/performance/post_training_quantization
converter = tf.lite.TFLiteConverter.from_keras_model_file("./yolo.h5")
converter.optimizations = [tf.lite.Optimize.DEFAULT]
converter.target_ops = [tf.lite.OpsSet.TFLITE_BUILTINS_INT8]
converter.inference_input_type = [tf.int8]
converter.inference_output_type = [tf.int8]
converter.representative_dataset=rep_data_gen
tflite_quant_model = converter.convert()
ValueError: Cannot set tensor: Got tensor of type STRING but expected type FLOAT32 for input 27, name: input_1
我使用你的代码读取数据集,发现错误:
img = img.astype('float32') 应该是
img = img.astype(np.float32)
希望对您有所帮助
我正在尝试使用 INT8
权重和激活来推断 tinyYOLO-V2
。我可以使用 TFliteConverter 将权重转换为 INT8。对于 INT8
激活,我必须给出有代表性的数据集来估计比例因子。我创建此类数据集的方法似乎是错误的。
正确的步骤是什么?
def rep_data_gen():
a = []
for i in range(160):
inst = anns[i]
file_name = inst['filename']
img = cv2.imread(img_dir + file_name)
img = cv2.resize(img, (NORM_H, NORM_W))
img = img / 255.0
img = img.astype('float32')
a.append(img)
a = np.array(a)
print(a.shape) # a is np array of 160 3D images
img = tf.data.Dataset.from_tensor_slices(a).batch(1)
for i in img.take(BATCH_SIZE):
print(i)
yield [i]
# https://www.tensorflow.org/lite/performance/post_training_quantization
converter = tf.lite.TFLiteConverter.from_keras_model_file("./yolo.h5")
converter.optimizations = [tf.lite.Optimize.DEFAULT]
converter.target_ops = [tf.lite.OpsSet.TFLITE_BUILTINS_INT8]
converter.inference_input_type = [tf.int8]
converter.inference_output_type = [tf.int8]
converter.representative_dataset=rep_data_gen
tflite_quant_model = converter.convert()
ValueError: Cannot set tensor: Got tensor of type STRING but expected type FLOAT32 for input 27, name: input_1
我使用你的代码读取数据集,发现错误:
img = img.astype('float32') 应该是
img = img.astype(np.float32)
希望对您有所帮助