See if upgrading the flatbuffers library can fix this problem:
pip install -U flatbuffers
There's a change in the EndVector() method of the flatbuffers library:
https://github.com/google/flatbuffers/pull/7246
Colab is using flatbuffers 1.12 instead of the latest version. When I re-run the example from TensorFlow, the same error occurs:
---------------------------------------------------------------------------
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'
After upgrading, it works as expected.