733 lines
27 KiB
Plaintext
733 lines
27 KiB
Plaintext
// Copyright 2022 The MediaPipe Authors.
|
|
//
|
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
|
// you may not use this file except in compliance with the License.
|
|
// You may obtain a copy of the License at
|
|
//
|
|
// http://www.apache.org/licenses/LICENSE-2.0
|
|
//
|
|
// Unless required by applicable law or agreed to in writing, software
|
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
// See the License for the specific language governing permissions and
|
|
// limitations under the License.
|
|
|
|
namespace tflite;
|
|
|
|
// TFLite metadata contains both human readable and machine readable information
|
|
// about what the model does and how to use the model. It can be used as a
|
|
// README file, which elaborates the details of the model, each input/ouput
|
|
// tensor, and each associated file.
|
|
//
|
|
// An important use case of TFLite metadata is the TFLite codegen tool, which
|
|
// automatically generates the model interface based on the properties of the
|
|
// model and the tensors. The model interface provides high-level APIs to
|
|
// interact with the model, such as preprocessing the input data and running
|
|
// inferences.
|
|
//
|
|
// Entries marked with "<Codegen usage>" are used in TFLite codegen tool to
|
|
// generate the model interface. It is recommended to fill in at least those
|
|
// enties to boost the codegen performance.
|
|
|
|
// The Metadata schema is versioned by the Semantic versioning number, such as
|
|
// MAJOR.MINOR.PATCH. It tracks the schema changes according to the rules below:
|
|
// * Bump up the MAJOR number when making potentially backwards incompatible
|
|
// changes. It must be incremented if the new changes break the backwards
|
|
// compatibility. It may also include minor and patch level changes as
|
|
// needed. The true backwards compatibility is indicated by the file
|
|
// identifier.
|
|
// * Bump up the MINOR number when making backwards compatible updates for
|
|
// major features, such as supporting new content types or adding new
|
|
// processing units.
|
|
// * Bump up the PATCH number when making small backwards compatible changes,
|
|
// such as adding a new fields or deprecating certain fields (not deleting
|
|
// them).
|
|
//
|
|
// ModelMetadata.min_parser_version indicates the minimum necessary metadata
|
|
// parser version to fully understand all fields in a given metadata flatbuffer.
|
|
//
|
|
// New fields and types will have associated comments with the schema version
|
|
// for which they were added.
|
|
//
|
|
// Schema Semantic version: 1.5.0
|
|
|
|
// This indicates the flatbuffer compatibility. The number will bump up when a
|
|
// break change is applied to the schema, such as removing fields or adding new
|
|
// fields to the middle of a table.
|
|
file_identifier "M001";
|
|
|
|
// History:
|
|
// 1.0.1 - Added VOCABULARY type to AssociatedFileType.
|
|
// 1.1.0 - Added BertTokenizerOptions to ProcessUnitOptions.
|
|
// Added SentencePieceTokenizerOptions to ProcessUnitOptions.
|
|
// Added input_process_units to SubGraphMetadata.
|
|
// Added output_process_units to SubGraphMetadata.
|
|
// 1.2.0 - Added input_tensor_group to SubGraphMetadata.
|
|
// Added output_tensor_group to SubGraphMetadata.
|
|
// 1.2.1 - Added RegexTokenizerOptions to ProcessUnitOptions.
|
|
// 1.3.0 - Added AudioProperties to ContentProperties.
|
|
// 1.4.0 - Added SCANN_INDEX_FILE type to AssociatedFileType.
|
|
// 1.4.1 - Added version to AssociatedFile.
|
|
// 1.5.0 - Added CustomMetadata in SubGraphMetadata.
|
|
|
|
// File extension of any written files.
|
|
file_extension "tflitemeta";
|
|
|
|
enum AssociatedFileType : byte {
|
|
UNKNOWN = 0,
|
|
|
|
// Files such as readme.txt.
|
|
DESCRIPTIONS = 1,
|
|
|
|
// Contains a list of labels (characters separated by "\n" or in lines) that
|
|
// annotate certain axis of the tensor. For example,
|
|
// the label file in image classification. Those labels annotate the
|
|
// the output tensor, such that each value in the output tensor is the
|
|
// probability of that corresponding category specified by the label. See the
|
|
// example label file used in image classification [1].
|
|
//
|
|
// <Codegen usage>:
|
|
// If an output tensor has an associated file as TENSOR_AXIS_LABELS, return
|
|
// the output as a mapping between the labels and probability in the model
|
|
// interface.
|
|
// If multiple files of the same type are present, the first one is used by
|
|
// default; additional ones are to be distinguished from one another by their
|
|
// specified locale.
|
|
//
|
|
// TODO: Add github example link.
|
|
TENSOR_AXIS_LABELS = 2,
|
|
|
|
// Contains a list of labels (characters separated by "\n" or in lines) that
|
|
// tensor values correspond to. For example, in
|
|
// the object detection model, one of the output tensors is the detected
|
|
// classes. And each value in the tensor refers to the index of label in the
|
|
// category label file. See the example label file used in object detection
|
|
// [1].
|
|
//
|
|
// <Codegen usage>:
|
|
// If an output tensor has an associated file as TENSOR_VALUE_LABELS, convert
|
|
// the tensor values into labels, and return a list of string as the output.
|
|
// If multiple files of the same type are present, the first one is used by
|
|
// default; additional ones are to be distinguished from one another by their
|
|
// specified locale.
|
|
//
|
|
// TODO: Add github example link.
|
|
TENSOR_VALUE_LABELS = 3,
|
|
|
|
// Contains sigmoid-based score calibration parameters, formatted as CSV.
|
|
// Lines contain for each index of an output tensor the scale, slope, offset
|
|
// and (optional) min_score parameters to be used for sigmoid fitting (in this
|
|
// order and in `strtof`-compatible [1] format). Scale should be a
|
|
// non-negative value.
|
|
// A line may be left empty to default calibrated scores for this index to
|
|
// default_score.
|
|
// In summary, each line should thus contain 0, 3 or 4 comma-separated values.
|
|
//
|
|
// See the example score calibration file used in image classification [2].
|
|
//
|
|
// See documentation for ScoreCalibrationOptions for details.
|
|
//
|
|
// [1]: https://en.cppreference.com/w/c/string/byte/strtof
|
|
// TODO: Add github example link.
|
|
TENSOR_AXIS_SCORE_CALIBRATION = 4,
|
|
|
|
// Contains a list of unique words (characters separated by "\n" or in lines)
|
|
// that help to convert natural language words to embedding vectors.
|
|
//
|
|
// See the example vocab file used in text classification [1].
|
|
//
|
|
// TODO: Add github example link.
|
|
// Added in: 1.0.1
|
|
VOCABULARY = 5,
|
|
|
|
// TODO: introduce the ScaNN index file with links once the code
|
|
// is released.
|
|
// Contains on-device ScaNN index file with LevelDB format.
|
|
// Added in: 1.4.0
|
|
SCANN_INDEX_FILE = 6,
|
|
}
|
|
|
|
table AssociatedFile {
|
|
// Name of this file. Need to be exact the same as the name of the actual file
|
|
// packed into the TFLite model as a zip file.
|
|
//
|
|
// <Codegen usage>:
|
|
// Locates to the actual file in the TFLite model.
|
|
name:string;
|
|
|
|
// A description of what the file is.
|
|
description:string;
|
|
|
|
// Type of the associated file. There may be special pre/post processing for
|
|
// some types. For example in image classification, a label file of the output
|
|
// will be used to convert object index into string.
|
|
//
|
|
// <Codegen usage>:
|
|
// Determines how to process the corresponding tensor.
|
|
type:AssociatedFileType;
|
|
|
|
// An optional locale for this associated file (if applicable). It is
|
|
// recommended to use an ISO 639-1 letter code (e.g. "en" for English),
|
|
// optionally completed by a two letter region code (e.g. "en-US" for US
|
|
// English and "en-CA" for Canadian English).
|
|
// Leverage this in order to specify e.g multiple label files translated in
|
|
// different languages.
|
|
locale:string;
|
|
|
|
// Version of the file specified by model creators.
|
|
// Added in: 1.4.1
|
|
version:string;
|
|
}
|
|
|
|
// The basic content type for all tensors.
|
|
//
|
|
// <Codegen usage>:
|
|
// Input feature tensors:
|
|
// 1. Generates the method to load data from a TensorBuffer.
|
|
// 2. Creates the preprocessing logic. The default processing pipeline is:
|
|
// [NormalizeOp, QuantizeOp].
|
|
// Output feature tensors:
|
|
// 1. Generates the method to return the output data to a TensorBuffer.
|
|
// 2. Creates the post-processing logic. The default processing pipeline is:
|
|
// [DeQuantizeOp].
|
|
table FeatureProperties {
|
|
}
|
|
|
|
// The type of color space of an image.
|
|
enum ColorSpaceType : byte {
|
|
UNKNOWN = 0,
|
|
RGB = 1,
|
|
GRAYSCALE = 2,
|
|
}
|
|
|
|
table ImageSize {
|
|
width:uint;
|
|
height:uint;
|
|
}
|
|
|
|
// The properties for image tensors.
|
|
//
|
|
// <Codegen usage>:
|
|
// Input image tensors:
|
|
// 1. Generates the method to load an image from a TensorImage.
|
|
// 2. Creates the preprocessing logic. The default processing pipeline is:
|
|
// [ResizeOp, NormalizeOp, QuantizeOp].
|
|
// Output image tensors:
|
|
// 1. Generates the method to return the output data to a TensorImage.
|
|
// 2. Creates the post-processing logic. The default processing pipeline is:
|
|
// [DeQuantizeOp].
|
|
table ImageProperties {
|
|
// The color space of the image.
|
|
//
|
|
// <Codegen usage>:
|
|
// Determines how to convert the color space of a given image from users.
|
|
color_space:ColorSpaceType;
|
|
|
|
// Indicates the default value of image width and height if the tensor shape
|
|
// is dynamic. For fixed-size tensor, this size will be consistent with the
|
|
// expected size.
|
|
default_size:ImageSize;
|
|
}
|
|
|
|
// The properties for tensors representing bounding boxes.
|
|
//
|
|
// <Codegen usage>:
|
|
// Input image tensors: NA.
|
|
// Output image tensors: parses the values into a data structure that represents
|
|
// bounding boxes. For example, in the generated wrapper for Android, it returns
|
|
// the output as android.graphics.Rect objects.
|
|
enum BoundingBoxType : byte {
|
|
UNKNOWN = 0,
|
|
// Represents the bounding box by using the combination of boundaries,
|
|
// {left, top, right, bottom}.
|
|
// The default order is {left, top, right, bottom}. Other orders can be
|
|
// indicated by BoundingBoxProperties.index.
|
|
BOUNDARIES = 1,
|
|
|
|
// Represents the bounding box by using the upper_left corner, width and
|
|
// height.
|
|
// The default order is {upper_left_x, upper_left_y, width, height}. Other
|
|
// orders can be indicated by BoundingBoxProperties.index.
|
|
UPPER_LEFT = 2,
|
|
|
|
// Represents the bounding box by using the center of the box, width and
|
|
// height. The default order is {center_x, center_y, width, height}. Other
|
|
// orders can be indicated by BoundingBoxProperties.index.
|
|
CENTER = 3,
|
|
|
|
}
|
|
|
|
// The properties for audio tensors.
|
|
// Added in: 1.3.0
|
|
table AudioProperties {
|
|
// The sample rate in Hz when the audio was captured.
|
|
sample_rate:uint;
|
|
|
|
// The channel count of the audio.
|
|
channels:uint;
|
|
}
|
|
|
|
enum CoordinateType : byte {
|
|
// The coordinates are float values from 0 to 1.
|
|
RATIO = 0,
|
|
// The coordinates are integers.
|
|
PIXEL = 1,
|
|
}
|
|
|
|
table BoundingBoxProperties {
|
|
// Denotes the order of the elements defined in each bounding box type. An
|
|
// empty index array represent the default order of each bounding box type.
|
|
// For example, to denote the default order of BOUNDARIES, {left, top, right,
|
|
// bottom}, the index should be {0, 1, 2, 3}. To denote the order {left,
|
|
// right, top, bottom}, the order should be {0, 2, 1, 3}.
|
|
//
|
|
// The index array can be applied to all bounding box types to adjust the
|
|
// order of their corresponding underlying elements.
|
|
//
|
|
// <Codegen usage>:
|
|
// Indicates how to parse the bounding box values.
|
|
index:[uint];
|
|
|
|
// <Codegen usage>:
|
|
// Indicates how to parse the bounding box values.
|
|
type:BoundingBoxType;
|
|
|
|
// <Codegen usage>:
|
|
// Indicates how to convert the bounding box back to the original image in
|
|
// pixels.
|
|
coordinate_type:CoordinateType;
|
|
}
|
|
|
|
union ContentProperties {
|
|
FeatureProperties,
|
|
ImageProperties,
|
|
BoundingBoxProperties,
|
|
// Added in: 1.3.0
|
|
AudioProperties,
|
|
}
|
|
|
|
table ValueRange {
|
|
min:int;
|
|
max:int;
|
|
}
|
|
|
|
table Content {
|
|
// The properties that the content may have, indicating the type of the
|
|
// Content.
|
|
//
|
|
// <Codegen usage>:
|
|
// Indicates how to process the tensor.
|
|
content_properties:ContentProperties;
|
|
|
|
// The range of dimensions that the content corresponds to. A NULL
|
|
// "range" indicates that the content uses up all dimensions,
|
|
// except the batch axis if applied.
|
|
//
|
|
// Here are all the possible situations of how a tensor is composed.
|
|
// Case 1: The tensor is a single object, such as an image.
|
|
// For example, the input of an image classifier
|
|
// (https://www.tensorflow.org/lite/models/image_classification/overview),
|
|
// a tensor of shape [1, 224, 224, 3]. Dimensions 1 to 3 correspond to the
|
|
// image. Since dimension 0 is a batch axis, which can be ignored,
|
|
// "range" can be left as NULL.
|
|
//
|
|
// Case 2: The tensor contains multiple instances of the same object.
|
|
// For example, the output tensor of detected bounding boxes of an object
|
|
// detection model
|
|
// (https://www.tensorflow.org/lite/models/object_detection/overview).
|
|
// The tensor shape is [1, 10, 4]. Here is the what the three dimensions
|
|
// represent for:
|
|
// dimension 0: the batch axis.
|
|
// dimension 1: the 10 objects detected with the highest confidence.
|
|
// dimension 2: the bounding boxes of the 10 detected objects.
|
|
// The tensor is essentially 10 bounding boxes. In this case,
|
|
// "range" should be {min=2; max=2;}.
|
|
//
|
|
// The output tensor of scores of the above object detection model has shape
|
|
// [1, 10], where
|
|
// dimension 0: the batch axis;
|
|
// dimension 1: the scores of the 10 detected objects.
|
|
// Set "range" to the number of dimensions which is {min=2; max=2;} to denote
|
|
// that every element in the tensor is an individual content object, i.e. a
|
|
// score in this example.
|
|
//
|
|
// Another example is the pose estimation model
|
|
// (https://www.tensorflow.org/lite/models/pose_estimation/overview).
|
|
// The output tensor of heatmaps is in the shape of [1, 9, 9, 17].
|
|
// Here is the what the four dimensions represent for:
|
|
// dimension 0: the batch axis.
|
|
// dimension 1/2: the heatmap image.
|
|
// dimension 3: 17 body parts of a person.
|
|
// Even though the last axis is body part, the real content of this tensor is
|
|
// the heatmap. "range" should be [min=1; max=2].
|
|
//
|
|
// Case 3: The tensor contains multiple different objects. (Not supported by
|
|
// Content at this point).
|
|
// Sometimes a tensor may contain multiple different objects, thus different
|
|
// contents. It is very common for regression models. For example, a model
|
|
// to predict the fuel efficiency
|
|
// (https://www.tensorflow.org/tutorials/keras/regression).
|
|
// The input tensor has shape [1, 9], consisting of 9 features, such as
|
|
// "Cylinders", "Displacement", "Weight", etc. In this case, dimension 1
|
|
// contains 9 different contents. However, since these sub-dimension objects
|
|
// barely need to be specifically processed, their contents are not recorded
|
|
// in the metadata. Through, the name of each dimension can be set through
|
|
// TensorMetadata.dimension_names.
|
|
//
|
|
// Note that if it is not case 3, a tensor can only have one content type.
|
|
//
|
|
// <Codegen usage>:
|
|
// Case 1: return a processed single object of certain content type.
|
|
// Case 2: return a list of processed objects of certain content type. The
|
|
// generated model interface have API to random access those objects from
|
|
// the output.
|
|
range:ValueRange;
|
|
}
|
|
|
|
// Parameters that are used when normalizing the tensor.
|
|
table NormalizationOptions{
|
|
// mean and std are normalization parameters. Tensor values are normalized
|
|
// on a per-channel basis, by the formula
|
|
// (x - mean) / std.
|
|
// If there is only one value in mean or std, we'll propagate the value to
|
|
// all channels.
|
|
//
|
|
// Quantized models share the same normalization parameters as their
|
|
// corresponding float models. For example, an image input tensor may have
|
|
// the normalization parameter of
|
|
// mean = 127.5f and std = 127.5f.
|
|
// The image value will be normalized from [0, 255] to [-1, 1].
|
|
// Then, for quantized models, the image data should be further quantized
|
|
// according to the quantization parameters. In the case of uint8, the image
|
|
// data will be scaled back to [0, 255], while for int8, the image data will
|
|
// be scaled to [-128, 127].
|
|
//
|
|
// Both the normalization parameters and quantization parameters can be
|
|
// retrieved through the metadata extractor library.
|
|
// TODO: add link for the metadata extractor library.
|
|
|
|
// Per-channel mean of the possible values used in normalization.
|
|
//
|
|
// <Codegen usage>:
|
|
// Apply normalization to input tensors accordingly.
|
|
mean:[float];
|
|
|
|
// Per-channel standard dev. of the possible values used in normalization.
|
|
//
|
|
// <Codegen usage>:
|
|
// Apply normalization to input tensors accordingly.
|
|
std:[float];
|
|
}
|
|
|
|
// The different possible score transforms to apply to uncalibrated scores
|
|
// before applying score calibration.
|
|
enum ScoreTransformationType : byte {
|
|
// Identity function: g(x) = x.
|
|
IDENTITY = 0,
|
|
// Log function: g(x) = log(x).
|
|
LOG = 1,
|
|
// Inverse logistic function: g(x) = log(x) - log(1-x).
|
|
INVERSE_LOGISTIC = 2,
|
|
}
|
|
|
|
// Options to perform score calibration on an output tensor through sigmoid
|
|
// functions. One of the main purposes of score calibration is to make scores
|
|
// across classes comparable, so that a common threshold can be used for all
|
|
// output classes. This is meant for models producing class predictions as
|
|
// output, e.g. image classification or detection models.
|
|
//
|
|
// For each index in the output tensor, this applies:
|
|
// * `f(x) = scale / (1 + e^-(slope*g(x)+offset))` if `x > min_score` or if no
|
|
// `min_score` has been specified,
|
|
// * `f(x) = default_score` otherwise or if no scale, slope and offset have been
|
|
// specified.
|
|
// Where:
|
|
// * scale, slope, offset and (optional) min_score are index-specific parameters
|
|
// * g(x) is an index-independent transform among those defined in
|
|
// ScoreTransformationType
|
|
// * default_score is an index-independent parameter.
|
|
// An AssociatedFile with type TANSOR_AXIS_SCORE_CALIBRATION specifying the
|
|
// index-specific parameters must be associated with the corresponding
|
|
// TensorMetadata for score calibration be applied.
|
|
//
|
|
// See the example score calibration file used in image classification [1].
|
|
// TODO: Add github example link.
|
|
table ScoreCalibrationOptions {
|
|
// The function to use for transforming the uncalibrated score before
|
|
// applying score calibration.
|
|
score_transformation:ScoreTransformationType;
|
|
|
|
// The default calibrated score to apply if the uncalibrated score is
|
|
// below min_score or if no parameters were specified for a given index.
|
|
default_score:float;
|
|
}
|
|
|
|
// Performs thresholding on output tensor values, in order to filter out
|
|
// low-confidence results.
|
|
table ScoreThresholdingOptions {
|
|
// The recommended global threshold below which results are considered
|
|
// low-confidence and should be filtered out.
|
|
global_score_threshold:float;
|
|
}
|
|
|
|
// Performs Bert tokenization as in tf.text.BertTokenizer
|
|
// (https://github.com/tensorflow/text/blob/3599f6fcd2b780a2dc413b90fb9315464f10b314/docs/api_docs/python/text/BertTokenizer.md)
|
|
// Added in: 1.1.0
|
|
table BertTokenizerOptions {
|
|
// The vocabulary files used in the BertTokenizer.
|
|
vocab_file:[AssociatedFile];
|
|
}
|
|
|
|
// Performs SentencePiece tokenization as in tf.text.SentencepieceTokenizer
|
|
// (https://github.com/tensorflow/text/blob/3599f6fcd2b780a2dc413b90fb9315464f10b314/docs/api_docs/python/text/SentencepieceTokenizer.md).
|
|
// Added in: 1.1.0
|
|
table SentencePieceTokenizerOptions {
|
|
// The SentencePiece model files used in the SentencePieceTokenizer.
|
|
sentencePiece_model:[AssociatedFile];
|
|
|
|
// The optional vocabulary model files used in the SentencePieceTokenizer.
|
|
vocab_file:[AssociatedFile];
|
|
}
|
|
|
|
// Splits strings by the occurrences of delim_regex_pattern and converts the
|
|
// tokens into ids. For example, given
|
|
// delim_regex_pattern: "\W+",
|
|
// string: "Words, words, words.",
|
|
// the tokens after split are: "Words", "words", "words", "".
|
|
// And then the tokens can be converted into ids according to the vocab_file.
|
|
// Added in: 1.2.1
|
|
table RegexTokenizerOptions {
|
|
delim_regex_pattern:string;
|
|
// The vocabulary files used to convert this tokens into ids.
|
|
vocab_file:[AssociatedFile];
|
|
}
|
|
|
|
// Options that are used when processing the tensor.
|
|
union ProcessUnitOptions {
|
|
NormalizationOptions,
|
|
ScoreCalibrationOptions,
|
|
ScoreThresholdingOptions,
|
|
// Added in: 1.1.0
|
|
BertTokenizerOptions,
|
|
// Added in: 1.1.0
|
|
SentencePieceTokenizerOptions,
|
|
// Added in: 1.2.1
|
|
RegexTokenizerOptions
|
|
}
|
|
|
|
// A process unit that is used to process the tensor out-of-graph.
|
|
table ProcessUnit {
|
|
options:ProcessUnitOptions;
|
|
}
|
|
|
|
|
|
// Statistics to describe a tensor.
|
|
table Stats {
|
|
// Max and min are not currently used in tflite.support codegen. They mainly
|
|
// serve as references for users to better understand the model. They can also
|
|
// be used to validate model pre/post processing results.
|
|
// If there is only one value in max or min, we'll propagate the value to
|
|
// all channels.
|
|
|
|
// Per-channel maximum value of the tensor.
|
|
max:[float];
|
|
|
|
// Per-channel minimum value of the tensor.
|
|
min:[float];
|
|
}
|
|
|
|
// Metadata of a group of tensors. It may contain several tensors that will be
|
|
// grouped together in codegen. For example, the TFLite object detection model
|
|
// example (https://www.tensorflow.org/lite/models/object_detection/overview)
|
|
// has four outputs: classes, scores, bounding boxes, and number of detections.
|
|
// If the four outputs are bundled together using TensorGroup (for example,
|
|
// named as "detection result"), the codegen tool will generate the class,
|
|
// `DetectionResult`, which contains the class, score, and bounding box. And the
|
|
// outputs of the model will be converted to a list of `DetectionResults` and
|
|
// the number of detection. Note that the number of detection is a single
|
|
// number, therefore is inappropriate for the list of `DetectionResult`.
|
|
// Added in: 1.2.0
|
|
table TensorGroup {
|
|
// Name of tensor group.
|
|
//
|
|
// <codegen usage>:
|
|
// Name of the joint class of the tensor group.
|
|
name:string;
|
|
|
|
// Names of the tensors to group together, corresponding to
|
|
// TensorMetadata.name.
|
|
//
|
|
// <codegen usage>:
|
|
// Determines which tensors will be added to this group. All tensors in the
|
|
// group should have the same number of elements specified by Content.range.
|
|
tensor_names:[string];
|
|
}
|
|
|
|
// Detailed information of an input or output tensor.
|
|
table TensorMetadata {
|
|
// Name of the tensor.
|
|
//
|
|
// <Codegen usage>:
|
|
// The name of this tensor in the generated model interface.
|
|
name:string;
|
|
|
|
// A description of the tensor.
|
|
description:string;
|
|
|
|
// A list of names of the dimensions in this tensor. The length of
|
|
// dimension_names need to match the number of dimensions in this tensor.
|
|
//
|
|
// <Codegen usage>:
|
|
// The name of each dimension in the generated model interface. See "Case 2"
|
|
// in the comments of Content.range.
|
|
dimension_names:[string];
|
|
|
|
// The content that represents this tensor.
|
|
//
|
|
// <Codegen usage>:
|
|
// Determines how to process this tensor. See each item in ContentProperties
|
|
// for the default process units that will be applied to the tensor.
|
|
content:Content;
|
|
|
|
// The process units that are used to process the tensor out-of-graph.
|
|
//
|
|
// <Codegen usage>:
|
|
// Contains the parameters of the default processing pipeline for each content
|
|
// type, such as the normalization parameters in all content types. See the
|
|
// items under ContentProperties for the details of the default processing
|
|
// pipeline.
|
|
process_units:[ProcessUnit];
|
|
|
|
// The statistics of the tensor values.
|
|
stats:Stats;
|
|
|
|
// A list of associated files of this tensor.
|
|
//
|
|
// <Codegen usage>:
|
|
// Contains processing parameters of this tensor, such as normalization.
|
|
associated_files:[AssociatedFile];
|
|
}
|
|
|
|
table CustomMetadata {
|
|
name:string;
|
|
data:[ubyte] (force_align: 16);
|
|
}
|
|
|
|
table SubGraphMetadata {
|
|
// Name of the subgraph.
|
|
//
|
|
// Note that, since TFLite only support one subgraph at this moment, the
|
|
// Codegen tool will use the name in ModelMetadata in the generated model
|
|
// interface.
|
|
name:string;
|
|
|
|
// A description explains details about what the subgraph does.
|
|
description:string;
|
|
|
|
// Metadata of all input tensors used in this subgraph. It matches exactly
|
|
// the input tensors specified by `SubGraph.inputs` in the TFLite
|
|
// schema.fbs file[2]. The number of `TensorMetadata` in the array should
|
|
// equal to the number of indices in `SubGraph.inputs`.
|
|
//
|
|
// [2]: tensorflow/lite/schema/schema.fbs
|
|
// <Codegen usage>:
|
|
// Determines how to process the inputs.
|
|
input_tensor_metadata:[TensorMetadata];
|
|
|
|
// Metadata of all output tensors used in this subgraph. It matches exactly
|
|
// the output tensors specified by `SubGraph.outputs` in the TFLite
|
|
// schema.fbs file[2]. The number of `TensorMetadata` in the array should
|
|
// equal to the number of indices in `SubGraph.outputs`.
|
|
//
|
|
// <Codegen usage>:
|
|
// Determines how to process the outputs.
|
|
output_tensor_metadata:[TensorMetadata];
|
|
|
|
// A list of associated files of this subgraph.
|
|
associated_files:[AssociatedFile];
|
|
|
|
// Input process units of the subgraph. Some models may have complex pre and
|
|
// post processing logics where the process units do not work on one tensor at
|
|
// a time, but in a similar way of a TFLite graph. For example, in the
|
|
// MobileBert model (https://www.tensorflow.org/lite/models/bert_qa/overview),
|
|
// the inputs are: ids / mask / segment ids;
|
|
// the outputs are: end logits / start logits.
|
|
// The preprocessing converts the query string and the context string to the
|
|
// model inputs, and the post-processing converts the model outputs to the
|
|
// answer string.
|
|
// Added in: 1.1.0
|
|
input_process_units:[ProcessUnit];
|
|
|
|
// Output process units of the subgraph.
|
|
// Added in: 1.1.0
|
|
output_process_units:[ProcessUnit];
|
|
|
|
// Metadata of all input tensor groups used in this subgraph.
|
|
//
|
|
// <codegen usage>:
|
|
// Bundles the corresponding elements of the underlying input tensors together
|
|
// into a class, and converts those individual tensors into a list of the
|
|
// class objects.
|
|
// Added in: 1.2.0
|
|
input_tensor_groups:[TensorGroup];
|
|
|
|
// Metadata of all output tensor groups used in this subgraph.
|
|
//
|
|
// <codegen usage>:
|
|
// Bundles the corresponding elements of the underlying output tensors
|
|
// together into a class, and converts those individual tensors into a list of
|
|
// the class objects.
|
|
// Added in: 1.2.0
|
|
output_tensor_groups:[TensorGroup];
|
|
|
|
// A list of custom metadata.
|
|
// Added in: 1.5.0.
|
|
custom_metadata:[CustomMetadata];
|
|
}
|
|
|
|
table ModelMetadata {
|
|
// Name of the model.
|
|
//
|
|
// <Codegen usage>:
|
|
// The name of the model in the generated model interface.
|
|
name:string;
|
|
|
|
// Model description in schema.
|
|
description:string;
|
|
|
|
// Version of the model that specified by model creators.
|
|
version:string;
|
|
|
|
// Noted that, the minimum required TFLite runtime version that the model is
|
|
// compatible with, has already been added as a metadata entry in tflite
|
|
// schema. We'll decide later if we want to move it here, and keep it with
|
|
// other metadata entries.
|
|
|
|
// Metadata of all the subgraphs of the model. The 0th is assumed to be the
|
|
// main subgraph.
|
|
//
|
|
// <Codegen usage>:
|
|
// Determines how to process the inputs and outputs.
|
|
subgraph_metadata:[SubGraphMetadata];
|
|
|
|
// The person who creates this model.
|
|
author:string;
|
|
|
|
// Licenses that may apply to this model.
|
|
license:string;
|
|
|
|
// A list of associated files of this model.
|
|
associated_files:[AssociatedFile];
|
|
|
|
// The minimum metadata parser version that can fully understand the fields in
|
|
// the metadata flatbuffer. The version is effectively the largest version
|
|
// number among the versions of all the fields populated and the smallest
|
|
// compatible version indicated by the file identifier.
|
|
//
|
|
// This field is automatically populated by the MetadataPopulator when
|
|
// the metadata is populated into a TFLite model.
|
|
min_parser_version:string;
|
|
}
|
|
|
|
root_type ModelMetadata;
|