• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /* Copyright 2017 The TensorFlow Authors. All Rights Reserved.
2 
3 Licensed under the Apache License, Version 2.0 (the "License");
4 you may not use this file except in compliance with the License.
5 You may obtain a copy of the License at
6 
7     http://www.apache.org/licenses/LICENSE-2.0
8 
9 Unless required by applicable law or agreed to in writing, software
10 distributed under the License is distributed on an "AS IS" BASIS,
11 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 See the License for the specific language governing permissions and
13 limitations under the License.
14 ==============================================================================*/
15 /// WARNING: Users of TensorFlow Lite should not include this file directly,
16 /// but should instead include
17 /// "third_party/tensorflow/lite/c/builtin_op_data.h".
18 /// Only the TensorFlow Lite implementation itself should include this
19 /// file directly.
20 #ifndef TENSORFLOW_LITE_CORE_C_BUILTIN_OP_DATA_H_
21 #define TENSORFLOW_LITE_CORE_C_BUILTIN_OP_DATA_H_
22 
23 #include <stdint.h>
24 
25 #include "tensorflow/lite/core/c/common.h"
26 
27 #ifdef __cplusplus
28 extern "C" {
29 #endif  // __cplusplus
30 
31 // TfLiteReshapeParams can't have dynamic data so we fix the maximum possible
32 // number of dimensions.
33 #define TFLITE_RESHAPE_PARAMS_MAX_DIMENSION_COUNT 8
34 
35 // TODO(aselle): Consider using "if this then that" for testing.
36 
37 // Useful placeholder to put in otherwise empty structs to avoid size warnings.
38 typedef struct {
39   char dummy;
40 } EmptyStructPlaceholder;
41 
42 // IMPORTANT: All new members of structs must be added at the end to ensure
43 // backwards compatibility.
44 
45 // Possible padding types (for convolutions)
46 typedef enum {
47   kTfLitePaddingUnknown = 0,
48   kTfLitePaddingSame,
49   kTfLitePaddingValid,
50 } TfLitePadding;
51 
52 typedef enum {
53   kTfLiteMirrorPaddingUnknown = 0,
54   kTfLiteMirrorPaddingReflect,
55   kTfLiteMirrorPaddingSymmetric,
56 } TfLiteMirrorPaddingMode;
57 
58 // TODO(b/130259536): We should move this out of builtin_op_data.
59 typedef struct {
60   int width;
61   int height;
62   int width_offset;
63   int height_offset;
64 } TfLitePaddingValues;
65 
66 typedef struct {
67   TfLiteMirrorPaddingMode mode;
68 } TfLiteMirrorPaddingParams;
69 
70 // Possible fused activation functions.
71 typedef enum {
72   kTfLiteActNone = 0,
73   kTfLiteActRelu,
74   kTfLiteActReluN1To1,  // min(max(-1, x), 1)
75   kTfLiteActRelu6,      // min(max(0, x), 6)
76   kTfLiteActTanh,
77   kTfLiteActSignBit,
78   kTfLiteActSigmoid,
79 } TfLiteFusedActivation;
80 
81 typedef struct {
82   // Parameters for CONV_2D version 1.
83   TfLitePadding padding;
84   int stride_width;
85   int stride_height;
86   TfLiteFusedActivation activation;
87 
88   // Parameters for CONV_2D version 2.
89   // Note: Version 2 supports dilation values not equal to 1.
90   int dilation_width_factor;
91   int dilation_height_factor;
92 } TfLiteConvParams;
93 
94 typedef struct {
95   TfLitePadding padding;
96   int stride_width;
97   int stride_height;
98   int stride_depth;
99   int dilation_width_factor;
100   int dilation_height_factor;
101   int dilation_depth_factor;
102   TfLiteFusedActivation activation;
103 } TfLiteConv3DParams;
104 
105 typedef TfLiteConv3DParams TfLiteConv3DTransposeParams;
106 
107 typedef struct {
108   TfLitePadding padding;
109   int stride_width;
110   int stride_height;
111   int filter_width;
112   int filter_height;
113   TfLiteFusedActivation activation;
114   struct {
115     TfLitePaddingValues padding;
116   } computed;
117 } TfLitePoolParams;
118 
119 typedef struct {
120   // Parameters for DepthwiseConv version 1 or above.
121   TfLitePadding padding;
122   int stride_width;
123   int stride_height;
124   // `depth_multiplier` is redundant. It's used by CPU kernels in
125   // TensorFlow 2.0 or below, but ignored in versions above.
126   //
127   // The information can be deduced from the shape of input and the shape of
128   // weights. Since the TFLiteConverter toolchain doesn't support partially
129   // specified shapes, relying on `depth_multiplier` stops us from supporting
130   // graphs with dynamic shape tensors.
131   //
132   // Note: Some of the delegates (e.g. NNAPI, GPU) are still relying on this
133   // field.
134   int depth_multiplier;
135   TfLiteFusedActivation activation;
136   // Parameters for DepthwiseConv version 2 or above.
137   int dilation_width_factor;
138   int dilation_height_factor;
139 } TfLiteDepthwiseConvParams;
140 
141 typedef struct {
142   int rank;
143   TfLiteFusedActivation activation;
144 
145   // Parameter for SVDF version 4.
146   bool asymmetric_quantize_inputs;
147 } TfLiteSVDFParams;
148 
149 typedef struct {
150   TfLiteFusedActivation activation;
151 
152   // Parameter for RNN version 3.
153   bool asymmetric_quantize_inputs;
154 } TfLiteRNNParams;
155 
156 typedef struct {
157   bool time_major;
158   TfLiteFusedActivation activation;
159 
160   // Parameter for Sequence RNN version 3.
161   bool asymmetric_quantize_inputs;
162 } TfLiteSequenceRNNParams;
163 
164 typedef struct {
165   bool time_major;
166   TfLiteFusedActivation activation;
167   bool merge_outputs;
168 
169   // Parameter for Bidirectional RNN verison 3.
170   bool asymmetric_quantize_inputs;
171 } TfLiteBidirectionalSequenceRNNParams;
172 
173 typedef enum {
174   kTfLiteFullyConnectedWeightsFormatDefault = 0,
175   kTfLiteFullyConnectedWeightsFormatShuffled4x16Int8 = 1,
176 } TfLiteFullyConnectedWeightsFormat;
177 
178 typedef struct {
179   // Parameters for FullyConnected version 1 or above.
180   TfLiteFusedActivation activation;
181 
182   // Parameters for FullyConnected version 2 or above.
183   TfLiteFullyConnectedWeightsFormat weights_format;
184 
185   // Parameters for FullyConnected version 5 or above.
186   // If set to true, then the number of dimensions in the input and the output
187   // tensors are the same. Furthermore, all but the last dimension of the input
188   // and output shapes will be equal.
189   bool keep_num_dims;
190 
191   // Parameters for FullyConnected version 7 or above.
192   // If set to true and the weights are quantized, then non constant inputs
193   // are quantized at evaluation time with asymmetric quantization.
194   bool asymmetric_quantize_inputs;
195 } TfLiteFullyConnectedParams;
196 
197 typedef enum {
198   kTfLiteLshProjectionUnknown = 0,
199   kTfLiteLshProjectionSparse = 1,
200   kTfLiteLshProjectionDense = 2,
201 } TfLiteLSHProjectionType;
202 
203 typedef struct {
204   TfLiteLSHProjectionType type;
205 } TfLiteLSHProjectionParams;
206 
207 typedef struct {
208   float beta;
209 } TfLiteSoftmaxParams;
210 
211 typedef struct {
212   int axis;
213   TfLiteFusedActivation activation;
214 } TfLiteConcatenationParams;
215 
216 typedef struct {
217   TfLiteFusedActivation activation;
218   // Parameter added for the version 4.
219   bool pot_scale_int16;
220 } TfLiteAddParams;
221 
222 typedef struct {
223   EmptyStructPlaceholder placeholder;
224 } TfLiteSpaceToBatchNDParams;
225 
226 typedef struct {
227   EmptyStructPlaceholder placeholder;
228 } TfLiteBatchToSpaceNDParams;
229 
230 typedef struct {
231   bool adj_x;
232   bool adj_y;
233   // Parameters for BatchMatMul version 4 or above.
234   // If set to true and the weights are quantized, then non constant inputs
235   // are quantized at evaluation time with asymmetric quantization.
236   bool asymmetric_quantize_inputs;
237 } TfLiteBatchMatMulParams;
238 
239 typedef struct {
240   TfLiteFusedActivation activation;
241 } TfLiteMulParams;
242 
243 typedef struct {
244   TfLiteFusedActivation activation;
245   // Parameter added for the version 5.
246   bool pot_scale_int16;
247 } TfLiteSubParams;
248 
249 typedef struct {
250   TfLiteFusedActivation activation;
251 } TfLiteDivParams;
252 
253 typedef struct {
254   TfLiteFusedActivation activation;
255 } TfLiteL2NormParams;
256 
257 typedef struct {
258   int radius;
259   float bias;
260   float alpha;
261   float beta;
262 } TfLiteLocalResponseNormParams;
263 
264 typedef enum {
265   kTfLiteLSTMFullKernel = 0,
266   kTfLiteLSTMBasicKernel
267 } TfLiteLSTMKernelType;
268 
269 typedef struct {
270   // Parameters for LSTM version 1.
271   TfLiteFusedActivation activation;
272   float cell_clip;
273   float proj_clip;
274 
275   // Parameters for LSTM version 2.
276   // kTfLiteLSTMBasicKernel is only supported in version 2 or above.
277   TfLiteLSTMKernelType kernel_type;
278 
279   // Parameters for LSTM version 4.
280   bool asymmetric_quantize_inputs;
281 } TfLiteLSTMParams;
282 
283 typedef struct {
284   // Parameters needed for the underlying LSTM.
285   TfLiteFusedActivation activation;
286   float cell_clip;
287   float proj_clip;
288 
289   // If set to true then the first dimension is time, otherwise batch.
290   bool time_major;
291 
292   // Parameter for unidirectional sequence RNN version 3.
293   bool asymmetric_quantize_inputs;
294 
295   // Parameter for unidirectional sequence RNN version 4.
296   bool diagonal_recurrent_tensors;
297 } TfLiteUnidirectionalSequenceLSTMParams;
298 
299 typedef struct {
300   // Parameters supported by version 1:
301   // Parameters inherited for the LSTM kernel.
302   TfLiteFusedActivation activation;
303   float cell_clip;
304   float proj_clip;
305 
306   // If true, store the outputs of both directions in the first output.
307   bool merge_outputs;
308 
309   // Parameters supported by version 2:
310   // If set to true then the first dimension is time, otherwise batch.
311   bool time_major;
312 
313   // Parameters supported by version 3:
314   // If set to true, then hybrid ops use asymmetric quantization for inputs.
315   bool asymmetric_quantize_inputs;
316 } TfLiteBidirectionalSequenceLSTMParams;
317 
318 typedef struct {
319   bool align_corners;
320   // half_pixel_centers assumes pixels are of half the actual dimensions, and
321   // yields more accurate resizes. Corresponds to the same argument for the
322   // original TensorFlow op in TF2.0.
323   bool half_pixel_centers;
324 } TfLiteResizeBilinearParams;
325 
326 typedef struct {
327   bool align_corners;
328   bool half_pixel_centers;
329 } TfLiteResizeNearestNeighborParams;
330 
331 typedef struct {
332   EmptyStructPlaceholder placeholder;
333 } TfLitePadParams;
334 
335 typedef struct {
336   EmptyStructPlaceholder placeholder;
337 } TfLitePadV2Params;
338 
339 typedef struct {
340   // These fields are only used in old models for backward compatibility.
341   // In the current implementation, we use the 2nd input of the op as the shape,
342   // and these fields are unused.
343   int shape[TFLITE_RESHAPE_PARAMS_MAX_DIMENSION_COUNT];
344   int num_dimensions;
345 } TfLiteReshapeParams;
346 
347 typedef struct {
348   int ngram_size;
349   int max_skip_size;
350   bool include_all_ngrams;
351 } TfLiteSkipGramParams;
352 
353 typedef struct {
354   int block_size;
355 } TfLiteSpaceToDepthParams;
356 
357 typedef struct {
358   int block_size;
359 } TfLiteDepthToSpaceParams;
360 
361 typedef struct {
362   TfLiteType in_data_type;
363   TfLiteType out_data_type;
364 } TfLiteCastParams;
365 
366 typedef enum {
367   kTfLiteCombinerTypeSum = 0,
368   kTfLiteCombinerTypeMean = 1,
369   kTfLiteCombinerTypeSqrtn = 2,
370 } TfLiteCombinerType;
371 
372 typedef struct {
373   TfLiteCombinerType combiner;
374 } TfLiteEmbeddingLookupSparseParams;
375 
376 typedef struct {
377   int axis;
378   int batch_dims;
379 } TfLiteGatherParams;
380 
381 typedef struct {
382   EmptyStructPlaceholder placeholder;
383 } TfLiteTransposeParams;
384 
385 typedef struct {
386   bool keep_dims;
387 } TfLiteReducerParams;
388 
389 typedef struct {
390   int num_splits;
391 } TfLiteSplitParams;
392 
393 typedef struct {
394   int num_splits;
395 } TfLiteSplitVParams;
396 
397 typedef struct {
398   // TODO(ahentz): We can't have dynamic data in this struct, at least not yet.
399   // For now we will fix the maximum possible number of dimensions.
400   int squeeze_dims[8];
401   int num_squeeze_dims;
402 } TfLiteSqueezeParams;
403 
404 typedef struct {
405   int begin_mask;
406   int end_mask;
407   int ellipsis_mask;
408   int new_axis_mask;
409   int shrink_axis_mask;
410 } TfLiteStridedSliceParams;
411 
412 typedef struct {
413   TfLiteType output_type;
414 } TfLiteArgMaxParams;
415 
416 typedef struct {
417   TfLiteType output_type;
418 } TfLiteArgMinParams;
419 
420 typedef struct {
421   // Parameters supported by version 1:
422   TfLitePadding padding;
423   int stride_width;
424   int stride_height;
425 
426   // Parameters supported by version 4:
427   TfLiteFusedActivation activation;
428 } TfLiteTransposeConvParams;
429 
430 typedef struct {
431   bool validate_indices;
432 } TfLiteSparseToDenseParams;
433 
434 typedef struct {
435   TfLiteType out_type;
436 } TfLiteShapeParams;
437 
438 typedef struct {
439   EmptyStructPlaceholder placeholder;
440 } TfLiteRankParams;
441 
442 typedef struct {
443   // Parameters supported by version 1:
444   float min;
445   float max;
446   int num_bits;
447 
448   // Parameters supported by version 2:
449   bool narrow_range;
450 } TfLiteFakeQuantParams;
451 
452 typedef struct {
453   int values_count;
454   int axis;
455 } TfLitePackParams;
456 
457 typedef struct {
458   int axis;
459 } TfLiteOneHotParams;
460 
461 typedef struct {
462   int num;
463   int axis;
464 } TfLiteUnpackParams;
465 
466 typedef struct {
467   float alpha;
468 } TfLiteLeakyReluParams;
469 
470 typedef struct {
471   TfLiteType index_out_type;
472 } TfLiteUniqueParams;
473 
474 typedef struct {
475   int seq_dim;
476   int batch_dim;
477 } TfLiteReverseSequenceParams;
478 
479 typedef struct {
480   EmptyStructPlaceholder placeholder;
481 } TfLiteMatrixDiagParams;
482 
483 typedef struct {
484   EmptyStructPlaceholder placeholder;
485 } TfLiteMatrixSetDiagParams;
486 
487 typedef struct {
488   int then_subgraph_index;
489   int else_subgraph_index;
490 } TfLiteIfParams;
491 
492 typedef struct {
493   int cond_subgraph_index;
494   int body_subgraph_index;
495 } TfLiteWhileParams;
496 
497 typedef struct {
498   bool exclusive;
499   bool reverse;
500 } TfLiteCumsumParams;
501 
502 typedef struct {
503   int init_subgraph_index;
504 } TfLiteCallOnceParams;
505 
506 typedef struct {
507   int table_id;
508   TfLiteType key_dtype;
509   TfLiteType value_dtype;
510 } TfLiteHashtableParams;
511 
512 typedef struct {
513   const char* container;
514   const char* shared_name;
515 } TfLiteVarHandleParams;
516 
517 typedef struct {
518   int seed;
519   int seed2;
520 } TfLiteRandomParams;
521 
522 typedef struct {
523   int num_boundaries;
524   // This points to the memory stored in the model (flatbuffer),
525   // and is not owned.
526   const float* boundaries;
527 } TfLiteBucketizeParams;
528 
529 typedef struct {
530   bool approximate;
531 } TfLiteGeluParams;
532 
533 #ifdef __cplusplus
534 }  // extern "C"
535 #endif  // __cplusplus
536 
537 #endif  // TENSORFLOW_LITE_CORE_C_BUILTIN_OP_DATA_H_
538