嗨,伙计们,我用模型制造者的例子来训练一个训练前的Tflite模型通过自定义的数据集。我逐行执行它的工作,但是当我想使用model.export保存Tflite格式时,我得到了这个错误很长一段时间,我一直在为这个问题而斗争。
THis是我的代码:
!sudo apt -y install libportaudio2
!pip install -q --use-deprecated=legacy-resolver tflite-model-maker
!pip install -q pycocotools
!pip install -q opencv-python-headless==4.1.2.30
!pip uninstall -y tensorflow && pip install -q tensorflow==2.8.0
import numpy as np
import os
from tflite_model_maker.config import QuantizationConfig
from tflite_model_maker.config import ExportFormat
from tflite_model_maker import model_spec
from tflite_model_maker import object_detector
import tensorflow as tf
assert tf.__version__.startswith('2')
tf.get_logger().setLevel('ERROR')
from absl import logging
logging.set_verbosity(logging.ERROR)
train_data_dir = '/content/drive/MyDrive/Custom_data_TF2/train.tfrecord'
valid_data_dir = '/content/drive/MyDrive/Custom_data_TF2/test.tfrecord'
labels = {1: 'Traffic-light', 2: 'traffic-sign' , 3 : 'zebra-line'}
train_data = object_detector.DataLoader(train_data_dir,652 , labels)
valid_data = object_detector.DataLoader(valid_data_dir,218 , labels)
spec = model_spec.get('efficientdet_lite0', verbose = True)
model = object_detector.create(train_data=train_data, model_spec=spec, validation_data=valid_data,epochs = 10 , batch_size=16, train_whole_model=True)
TFLITE_FILENAME = 'efficientdet-lite.tflite'
LABELS_FILENAME = 'labels.txt'
model.export(export_dir='.', tflite_filename=TFLITE_FILENAME, label_filename=LABELS_FILENAME,export_format=[ExportFormat.TFLITE, ExportFormat.LABEL])
发布于 2022-08-23 07:38:44
查看升级平面缓冲区库是否可以解决此问题:
pip install -U flatbuffers
平面缓冲区库的EndVector()
方法发生了变化:https://github.com/google/flatbuffers/pull/7246
Colab使用的是平面缓冲区1.12,而不是最新版本。当我重新运行来自TensorFlow的例子时,同样的错误会发生:
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-15-fdd785f06d29> in <module>
----> 1 model.export(export_dir='.', export_format=[ExportFormat.TFLITE, ExportFormat.LABEL])
8 frames
/usr/local/lib/python3.7/dist-packages/tensorflow_examples/lite/model_maker/core/task/custom_model.py in export(self, export_dir, tflite_filename, label_filename, vocab_filename, saved_model_filename, tfjs_folder_name, export_format, **kwargs)
130 tflite_filepath = os.path.join(export_dir, tflite_filename)
131 export_tflite_kwargs, kwargs = _get_params(self._export_tflite, **kwargs)
--> 132 self._export_tflite(tflite_filepath, **export_tflite_kwargs)
133 tf.compat.v1.logging.info(
134 'TensorFlow Lite model exported successfully: %s' % tflite_filepath)
/usr/local/lib/python3.7/dist-packages/tensorflow_examples/lite/model_maker/core/task/object_detector.py in _export_tflite(self, tflite_filepath, quantization_config, with_metadata, export_metadata_json_file)
195 writer_utils.load_file(tflite_filepath),
196 [self.model_spec.config.mean_rgb],
--> 197 [self.model_spec.config.stddev_rgb], [label_filepath])
198 writer_utils.save_file(writer.populate(), tflite_filepath)
199
/usr/local/lib/python3.7/dist-packages/tensorflow_lite_support/metadata/python/metadata_writers/object_detector.py in create_for_inference(cls, model_buffer, input_norm_mean, input_norm_std, label_file_paths, score_calibration_md)
293 input_md=input_md,
294 output_category_md=output_category_md,
--> 295 output_score_md=output_score_md)
/usr/local/lib/python3.7/dist-packages/tensorflow_lite_support/metadata/python/metadata_writers/object_detector.py in create_from_metadata_info(cls, model_buffer, general_md, input_md, output_location_md, output_category_md, output_score_md, output_number_md)
224 b = flatbuffers.Builder(0)
225 b.Finish(
--> 226 model_metadata.Pack(b),
227 _metadata.MetadataPopulator.METADATA_FILE_IDENTIFIER)
228
/usr/local/lib/python3.7/dist-packages/tensorflow_lite_support/metadata/metadata_schema_py_generated.py in Pack(self, builder)
2698 subgraphMetadatalist = []
2699 for i in range(len(self.subgraphMetadata)):
-> 2700 subgraphMetadatalist.append(self.subgraphMetadata[i].Pack(builder))
2701 ModelMetadataStartSubgraphMetadataVector(builder, len(self.subgraphMetadata))
2702 for i in reversed(range(len(self.subgraphMetadata))):
/usr/local/lib/python3.7/dist-packages/tensorflow_lite_support/metadata/metadata_schema_py_generated.py in Pack(self, builder)
1018 inputTensorMetadatalist = []
1019 for i in range(len(self.inputTensorMetadata)):
-> 1020 inputTensorMetadatalist.append(self.inputTensorMetadata[i].Pack(builder))
1021 SubGraphMetadataStartInputTensorMetadataVector(builder, len(self.inputTensorMetadata))
1022 for i in reversed(range(len(self.inputTensorMetadata))):
/usr/local/lib/python3.7/dist-packages/tensorflow_lite_support/metadata/metadata_schema_py_generated.py in Pack(self, builder)
256 processUnitslist = []
257 for i in range(len(self.processUnits)):
--> 258 processUnitslist.append(self.processUnits[i].Pack(builder))
259 TensorMetadataStartProcessUnitsVector(builder, len(self.processUnits))
260 for i in reversed(range(len(self.processUnits))):
/usr/local/lib/python3.7/dist-packages/tensorflow_lite_support/metadata/metadata_schema_py_generated.py in Pack(self, builder)
2076 def Pack(self, builder):
2077 if self.options is not None:
-> 2078 options = self.options.Pack(builder)
2079 ProcessUnitStart(builder)
2080 ProcessUnitAddOptionsType(builder, self.optionsType)
/usr/local/lib/python3.7/dist-packages/tensorflow_lite_support/metadata/metadata_schema_py_generated.py in Pack(self, builder)
3013 for i in reversed(range(len(self.mean))):
3014 builder.PrependFloat32(self.mean[i])
-> 3015 mean = builder.EndVector()
3016 if self.std is not None:
3017 if np is not None and type(self.std) is np.ndarray:
TypeError: EndVector() missing 1 required positional argument: 'vectorNumElems'
升级后,它按预期工作。
https://stackoverflow.com/questions/73442005
复制相似问题