ailia_tflite  1.2.3.0
ailia_tflite.h
[詳解]
1 
14 #if !defined(INCLUDED_AILIA_TFLITE)
15 #define INCLUDED_AILIA_TFLITE
16 
17 #include <stdint.h>
18 #include <stddef.h>
19 
20 #ifdef __cplusplus
21 extern "C" {
22 #endif
23  /****************************************************************
24  * ailia TFLite runtime のインスタンス
25  **/
26 
27  struct AILIATFLiteInstance;
28 
29  /****************************************************************
30  * サブコア制御用の変数を指定する構造体
31  **/
32 
33  struct AILIATFLiteSubCoreControlVariables;
34 
35  /****************************************************************
36  * Tensorのデータ タイプ
37  **/
38 
48  #define AILIA_TFLITE_TENSOR_TYPE_FLOAT32 (0)
58  #define AILIA_TFLITE_TENSOR_TYPE_FLOAT16 (1)
68  #define AILIA_TFLITE_TENSOR_TYPE_INT32 (2)
78  #define AILIA_TFLITE_TENSOR_TYPE_UINT8 (3)
88  #define AILIA_TFLITE_TENSOR_TYPE_INT64 (4)
98  #define AILIA_TFLITE_TENSOR_TYPE_STRING (5)
108  #define AILIA_TFLITE_TENSOR_TYPE_BOOL (6)
118  #define AILIA_TFLITE_TENSOR_TYPE_INT16 (7)
128  #define AILIA_TFLITE_TENSOR_TYPE_COMPLEX64 (8)
138  #define AILIA_TFLITE_TENSOR_TYPE_INT8 (9)
139  typedef int8_t AILIATFLiteTensorType;
140 
141  /****************************************************************
142  * ステータスコード
143  **/
144 
154  #define AILIA_TFLITE_STATUS_SUCCESS ( 0)
164  #define AILIA_TFLITE_STATUS_INVALID_ARGUMENT ( -1)
174  #define AILIA_TFLITE_STATUS_OUT_OF_RANGE ( -2)
184  #define AILIA_TFLITE_STATUS_MEMORY_INSUFFICIENT ( -3)
194  #define AILIA_TFLITE_STATUS_BROKEN_MODEL ( -4)
204  #define AILIA_TFLITE_STATUS_INVALID_PARAMETER ( -5)
214  #define AILIA_TFLITE_STATUS_PARAMETER_NOT_FOUND ( -6)
224  #define AILIA_TFLITE_STATUS_UNSUPPORTED_OPCODE ( -7)
234  #define AILIA_TFLITE_STATUS_LICENSE_NOT_FOUND ( -8)
244  #define AILIA_TFLITE_STATUS_LICENSE_BROKEN ( -9)
254  #define AILIA_TFLITE_STATUS_LICENSE_EXPIRED ( -10)
264  #define AILIA_TFLITE_STATUS_INVALID_STATE ( -11)
274  #define AILIA_TFLITE_STATUS_OTHER_ERROR (-128)
275  typedef int32_t AILIATFLiteStatus;
276 
277  /****************************************************************
278  * バックエンドAPI
279  **/
280 
290  #define AILIA_TFLITE_ENV_REFERENCE (0)
300  #define AILIA_TFLITE_ENV_NNAPI (1)
310  #define AILIA_TFLITE_ENV_MMALIB (2)
320  #define AILIA_TFLITE_ENV_MMALIB_COMPATIBLE (3)
321  typedef int32_t AILIATFLiteEnvironment;
331  #define AILIA_TFLITE_ENV_QNN (4)
332 
333  /****************************************************************
334  * メモリモード
335  **/
336 
346  #define AILIA_TFLITE_MEMORY_MODE_DEFAULT (0)
356  #define AILIA_TFLITE_MEMORY_MODE_REDUCE_INTERSTAGE (1)
357  typedef int32_t AILIATFLiteMemoryMode;
358 
359  /****************************************************************
360  * プロファイルモード
361  **/
362 
372  #define AILIA_TFLITE_PROFILE_MODE_DISABLE (0)
373 
383  #define AILIA_TFLITE_PROFILE_MODE_ENABLE (1)
384 
394  #define AILIA_TFLITE_PROFILE_MODE_TRACE (2)
395 
405  #define AILIA_TFLITE_PROFILE_MODE_MEMORY (4)
406 
416  #define AILIA_TFLITE_PROFILE_MODE_SUB_CORE (8)
417 
427  #define AILIA_TFLITE_PROFILE_MODE_ALLOCATION (16)
428 
429  /****************************************************************
430  * フラグ
431  **/
432 
442  #define AILIA_TFLITE_FLAG_NONE (0)
443 
453  #define AILIA_TFLITE_FLAG_INPUT_AND_OUTPUT_TENSORS_USE_SCRATCH (1)
454 
464  #define AILIA_TFLITE_FLAG_DSA_FAST_MEMORY_ALLOCATION (2)
465 
466  typedef int32_t AILIATFLiteFlags;
467 
468  /****************************************************************
469  * CPU拡張命令情報
470  **/
471 
481  #define AILIA_TFLITE_CPU_FEATURES_NONE (0x00000000)
491  #define AILIA_TFLITE_CPU_FEATURES_NEON (0x00000001)
501  #define AILIA_TFLITE_CPU_FEATURES_SSE2 (0x00000002)
511  #define AILIA_TFLITE_CPU_FEATURES_SSE4_2 (0x00000004)
521  #define AILIA_TFLITE_CPU_FEATURES_AVX (0x00000008)
531  #define AILIA_TFLITE_CPU_FEATURES_AVX2 (0x00000010)
541  #define AILIA_TFLITE_CPU_FEATURES_VNNI (0x00000020)
551  #define AILIA_TFLITE_CPU_FEATURES_AVX512 (0x00000040)
561  #define AILIA_TFLITE_CPU_FEATURES_I8MM (0x00000080)
562 
572  #define AILIA_TFLITE_SUB_CORE_COUNT_MAX (8)
573 
574  typedef int32_t AILIATFLiteCpuFeatures;
575 
576  /****************************************************************
577  * 推論環境列挙API
578  **/
579 
596  ailiaTFLiteGetEnvironmentCount(size_t *env_count);
597 
619 
620  /****************************************************************
621  * インスタンス生成・破棄API
622  **/
623 
666  ailiaTFLiteCreate(struct AILIATFLiteInstance **instance, const void * tflite, const size_t tflite_length, void *(*pmalloc)(size_t, const void *, void *), void *(*pmemcpy)(void *, const void *, size_t, void *), void (*pfree)(void *, void *), void *phandle, AILIATFLiteEnvironment env_id, AILIATFLiteMemoryMode memory_mode, AILIATFLiteFlags flags);
667 
677  void
678  ailiaTFLiteDestroy(struct AILIATFLiteInstance *instance);
679 
680  /****************************************************************
681  * CPU命令設定系API
682  **/
683 
710  ailiaTFLiteGetCpuFeatures(struct AILIATFLiteInstance * instance, int32_t *cpu_features);
711 
736  ailiaTFLiteSetCpuFeatures(struct AILIATFLiteInstance * instance, int32_t cpu_features);
737 
738  /****************************************************************
739  * 確保系API
740  **/
741 
762  ailiaTFLiteAllocateTensors(struct AILIATFLiteInstance * instance);
763 
764  /****************************************************************
765  * Tensor設定系API
766  **/
767 
808  ailiaTFLiteResizeInputTensor(struct AILIATFLiteInstance * instance, const int32_t input_index, const int32_t* shape, const int32_t dim);
809 
810  /****************************************************************
811  * Tensor取得系API
812  **/
813 
832  ailiaTFLiteGetNumberOfInputs(const struct AILIATFLiteInstance *instance, int32_t* num_of_input_tensor);
833 
862  ailiaTFLiteGetInputTensorIndex(const struct AILIATFLiteInstance *instance, int32_t* tensor_index, const int32_t input_index);
863 
882  ailiaTFLiteGetNumberOfOutputs(const struct AILIATFLiteInstance *instance, int32_t* num_of_output_tensor);
883 
912  ailiaTFLiteGetOutputTensorIndex(const struct AILIATFLiteInstance *instance, int32_t* tensor_index, const int32_t output_index);
913 
936  ailiaTFLiteGetTensorDimension(const struct AILIATFLiteInstance *instance, int32_t* tensor_dim, const int32_t tensor_index);
937 
966  ailiaTFLiteGetTensorShape(const struct AILIATFLiteInstance *instance, int32_t *shape, const int32_t tensor_index);
967 
1000  ailiaTFLiteGetTensorShapeSignature(const struct AILIATFLiteInstance *instance, int32_t *shape, const int32_t tensor_index);
1001 
1024  ailiaTFLiteGetTensorType(const struct AILIATFLiteInstance *instance, AILIATFLiteTensorType* tensor_type, const int32_t tensor_index);
1025 
1056  ailiaTFLiteGetTensorBuffer(struct AILIATFLiteInstance *instance, void** buffer, const int32_t tensor_index);
1057 
1086  ailiaTFLiteGetTensorName(const struct AILIATFLiteInstance *instance, const char** name, const int32_t tensor_index);
1087 
1116  ailiaTFLiteGetTensorQuantizationCount(const struct AILIATFLiteInstance *instance, int32_t* count, const int32_t tensor_index);
1117 
1154  ailiaTFLiteGetTensorQuantizationScale(const struct AILIATFLiteInstance *instance, float *scale, const int32_t tensor_index);
1155 
1186  ailiaTFLiteGetTensorQuantizationZeroPoint(const struct AILIATFLiteInstance *instance, int64_t *zero_point, const int32_t tensor_index);
1187 
1212  ailiaTFLiteGetTensorQuantizationQuantizedDimension(const struct AILIATFLiteInstance *instance, int32_t* axis, const int32_t tensor_index);
1213 
1214  /****************************************************************
1215  * Tensor推論系API
1216  **/
1217 
1234  ailiaTFLitePredict(struct AILIATFLiteInstance *instance);
1235 
1236  /****************************************************************
1237  * ノード情報取得API
1238  **/
1239 
1258  ailiaTFLiteGetNodeCount(const struct AILIATFLiteInstance *instance, int32_t *count);
1259 
1288  ailiaTFLiteGetNodeOperator(const struct AILIATFLiteInstance *instance, int32_t *op, const int32_t node_index);
1289 
1312  ailiaTFLiteGetNodeInputCount(const struct AILIATFLiteInstance *instance, int32_t *count, const int32_t node_index);
1313 
1338  ailiaTFLiteGetNodeInputTensorIndex(const struct AILIATFLiteInstance *instance, int32_t *tensor_index, const int32_t node_index, const int32_t input_index);
1339 
1362  ailiaTFLiteGetNodeOutputCount(const struct AILIATFLiteInstance *instance, int32_t *count, const int32_t node_index);
1363 
1388  ailiaTFLiteGetNodeOutputTensorIndex(const struct AILIATFLiteInstance *instance, int32_t *tensor_index, const int32_t node_index, const int32_t output_index);
1389 
1414  ailiaTFLiteGetNodeOption(const struct AILIATFLiteInstance *instance, void *value, const int32_t node_index, const char *key);
1415 
1440  ailiaTFLiteGetOperatorName(const char **name, const int32_t op);
1441 
1442  /****************************************************************
1443  * プロファイルAPI
1444  **/
1445 
1474  ailiaTFLiteSetProfileMode(struct AILIATFLiteInstance *instance, int mode);
1475 
1494  ailiaTFLiteGetSummaryLength(struct AILIATFLiteInstance *instance, size_t *buffer_size);
1495 
1516  ailiaTFLiteGetSummary(struct AILIATFLiteInstance *instance, char *buffer, size_t buffer_size);
1517 
1518  /****************************************************************
1519  * エラー詳細取得API
1520  **/
1521 
1540  ailiaTFLiteGetErrorDetail(struct AILIATFLiteInstance *instance, char **buffer);
1541 
1542  /****************************************************************
1543  * バージョン情報取得API
1544  **/
1545 
1561  const char* ailiaTFLiteGetVersion(void);
1562 
1563  /****************************************************************
1564  * スクラッチバッファ設定API
1565  **/
1566 
1607  ailiaTFLiteSetScratchBuffer(struct AILIATFLiteInstance *instance, void *int_buffer, size_t int_buffer_size, void *mid_buffer, size_t mid_buffer_size, void *ext_buffer, size_t ext_buffer_size);
1608 
1639  ailiaTFLiteSetScratchBufferEx(struct AILIATFLiteInstance* instance, void* int_buffer, size_t int_buffer_size, void* mid_buffer, size_t mid_buffer_size, void* ext_buffer, size_t ext_buffer_size, void* global_buffer, size_t global_buffer_size);
1640 
1663  ailiaTFLiteGetScratchBufferUsage(struct AILIATFLiteInstance *instance, size_t *int_buffer_size, size_t *mid_buffer_size, size_t *ext_buffer_size);
1664 
1689  ailiaTFLiteGetScratchBufferUsageEx(struct AILIATFLiteInstance* instance, size_t* int_buffer_size, size_t* mid_buffer_size, size_t* ext_buffer_size, size_t* global_buffer_size);
1690 
1691 
1692  /****************************************************************
1693  * MKL設定API
1694  **/
1695 
1720  ailiaTFLiteMklSetNumThreads(const int32_t num_threads);
1721 
1749 
1763  ailiaTFLiteSetSynchronizeFunctions(struct AILIATFLiteInstance* instance,
1764  int (*pmain_after_command_store)(void*), int (*pmain_before_state_load)(void*));
1765 
1790  alilaTFLiteSetSubCoreControlVariables(struct AILIATFLiteInstance* instance, const struct AILIATFLiteSubCoreControlVariables* control_variables, int32_t sub_core_count);
1791 
1792  /****************************************************************
1793  * DSA結果の保存と復元のAPI
1794  **/
1795 
1824  ailiaTFLiteGetContext(struct AILIATFLiteInstance* instance, void *buf, size_t buf_size);
1825 
1848  ailiaTFLiteGetContextSize(struct AILIATFLiteInstance *instance, size_t *buf_size);
1849 
1878  ailiaTFLiteRestoreContext(struct AILIATFLiteInstance* instance, const void *buf, size_t buf_size);
1879 
1880 #ifdef __cplusplus
1881 }
1882 #endif
1883 #endif /* !defined(INCLUDED_AILIA_TFLITE) */
AILIATFLiteStatus ailiaTFLiteCreate(struct AILIATFLiteInstance **instance, const void *tflite, const size_t tflite_length, void *(*pmalloc)(size_t, const void *, void *), void *(*pmemcpy)(void *, const void *, size_t, void *), void(*pfree)(void *, void *), void *phandle, AILIATFLiteEnvironment env_id, AILIATFLiteMemoryMode memory_mode, AILIATFLiteFlags flags)
ailia TFLite runtimeのインスタンスを作成します。
AILIATFLiteStatus ailiaTFLiteGetNodeOperator(const struct AILIATFLiteInstance *instance, int32_t *op, const int32_t node_index)
node_index番目のNodeのOperatorを取得します
int32_t AILIATFLiteFlags
Definition: ailia_tflite.h:466
AILIATFLiteStatus ailiaTFLiteGetContextSize(struct AILIATFLiteInstance *instance, size_t *buf_size)
DSAの結果の保存に必要なバッファのサイズ(バイト単位)を取得します。
AILIATFLiteStatus ailiaTFLiteGetEnvironmentCount(size_t *env_count)
利用可能な計算環境の数を取得します
void ailiaTFLiteDestroy(struct AILIATFLiteInstance *instance)
ailia TFLite runtimeのインスタンスを破棄します。
AILIATFLiteStatus ailiaTFLiteResizeInputTensor(struct AILIATFLiteInstance *instance, const int32_t input_index, const int32_t *shape, const int32_t dim)
指定した入力indexのTensorの形状を変更します
AILIATFLiteStatus ailiaTFLiteGetSummaryLength(struct AILIATFLiteInstance *instance, size_t *buffer_size)
ネットワークSummary用に必要なバッファのサイズを取得します。
AILIATFLiteStatus ailiaTFLiteGetNodeInputCount(const struct AILIATFLiteInstance *instance, int32_t *count, const int32_t node_index)
node_index番目のNodeの入力の個数を取得します
AILIATFLiteStatus ailiaTFLiteGetNodeCount(const struct AILIATFLiteInstance *instance, int32_t *count)
Nodeの個数を取得します
AILIATFLiteStatus ailiaTFLiteGetNodeOutputTensorIndex(const struct AILIATFLiteInstance *instance, int32_t *tensor_index, const int32_t node_index, const int32_t output_index)
node_index番目のNodeのoutput_index番目の出力のTensorのindexを取得します
AILIATFLiteStatus ailiaTFLiteSetScratchBufferEx(struct AILIATFLiteInstance *instance, void *int_buffer, size_t int_buffer_size, void *mid_buffer, size_t mid_buffer_size, void *ext_buffer, size_t ext_buffer_size, void *global_buffer, size_t global_buffer_size)
スクラッチバッファを設定します (グローバルMSMC対応版)
AILIATFLiteStatus ailiaTFLiteGetInputTensorIndex(const struct AILIATFLiteInstance *instance, int32_t *tensor_index, const int32_t input_index)
入力TensorのindexからTensorのindexを取得します。
AILIATFLiteStatus ailiaTFLiteGetContext(struct AILIATFLiteInstance *instance, void *buf, size_t buf_size)
DSAの結果を保存します。
AILIATFLiteStatus ailiaTFLiteGetErrorDetail(struct AILIATFLiteInstance *instance, char **buffer)
エラーの詳細を返します
AILIATFLiteStatus ailiaTFLiteGetTensorQuantizationZeroPoint(const struct AILIATFLiteInstance *instance, int64_t *zero_point, const int32_t tensor_index)
index番目のTensorの量子化パラメーターのゼロ点を取得します。
AILIATFLiteStatus ailiaTFLiteSetSynchronizeFunctions(struct AILIATFLiteInstance *instance, int(*pmain_after_command_store)(void *), int(*pmain_before_state_load)(void *))
マルチコアで使用する場合において、コア間の同期関数を設定します。
const char * ailiaTFLiteGetVersion(void)
ライブラリバージョンを取得します
AILIATFLiteStatus alilaTFLiteSetSubCoreControlVariables(struct AILIATFLiteInstance *instance, const struct AILIATFLiteSubCoreControlVariables *control_variables, int32_t sub_core_count)
マルチコアで使用する場合において、各サブコアとの通信に使用する変数を設定します。
AILIATFLiteStatus ailiaTFLiteGetTensorName(const struct AILIATFLiteInstance *instance, const char **name, const int32_t tensor_index)
index番目のTensorの名前を取得します。
AILIATFLiteStatus ailiaTFLiteGetTensorQuantizationQuantizedDimension(const struct AILIATFLiteInstance *instance, int32_t *axis, const int32_t tensor_index)
index番目のTensorの量子化パラメーターの軸を取得します。
AILIATFLiteStatus ailiaTFLiteGetOutputTensorIndex(const struct AILIATFLiteInstance *instance, int32_t *tensor_index, const int32_t output_index)
出力TensorのindexからTensorのindexを取得します。
AILIATFLiteStatus ailiaTFLiteGetTensorDimension(const struct AILIATFLiteInstance *instance, int32_t *tensor_dim, const int32_t tensor_index)
index番目のTensorの次元を取得します。
AILIATFLiteStatus ailiaTFLiteGetTensorShapeSignature(const struct AILIATFLiteInstance *instance, int32_t *shape, const int32_t tensor_index)
index番目のTensorの未確定な次元情報付き形状を取得します。
AILIATFLiteStatus ailiaTFLiteGetNodeOption(const struct AILIATFLiteInstance *instance, void *value, const int32_t node_index, const char *key)
node_index番目のNodeのオプションを取得します
AILIATFLiteStatus ailiaTFLiteGetTensorQuantizationScale(const struct AILIATFLiteInstance *instance, float *scale, const int32_t tensor_index)
index番目のTensorの量子化パラメーターのスケールを取得します。
AILIATFLiteStatus ailiaTFLiteGetNumberOfInputs(const struct AILIATFLiteInstance *instance, int32_t *num_of_input_tensor)
tfliteモデルの入力Tensorの数を取得します。
int32_t AILIATFLiteMemoryMode
Definition: ailia_tflite.h:357
AILIATFLiteStatus ailiaTFLiteGetSummary(struct AILIATFLiteInstance *instance, char *buffer, size_t buffer_size)
各Nodeの名前と形状を表示します。
AILIATFLiteStatus ailiaTFLiteMklDisableFastMM(void)
MKLのFastMMを無効化します
AILIATFLiteStatus ailiaTFLiteGetNodeOutputCount(const struct AILIATFLiteInstance *instance, int32_t *count, const int32_t node_index)
node_index番目のNodeの出力の個数を取得します
AILIATFLiteStatus ailiaTFLiteGetCpuFeatures(struct AILIATFLiteInstance *instance, int32_t *cpu_features)
使用するCPU命令を取得します
AILIATFLiteStatus ailiaTFLiteGetTensorType(const struct AILIATFLiteInstance *instance, AILIATFLiteTensorType *tensor_type, const int32_t tensor_index)
index番目のTensorのデータタイプを取得します。
AILIATFLiteStatus ailiaTFLitePredict(struct AILIATFLiteInstance *instance)
推論を行います。
AILIATFLiteStatus ailiaTFLiteGetEnvironment(AILIATFLiteEnvironment *env)
計算環境の一覧を取得します
AILIATFLiteStatus ailiaTFLiteGetTensorQuantizationCount(const struct AILIATFLiteInstance *instance, int32_t *count, const int32_t tensor_index)
index番目のTensorの量子化パラメーターの個数を取得します
AILIATFLiteStatus ailiaTFLiteGetNumberOfOutputs(const struct AILIATFLiteInstance *instance, int32_t *num_of_output_tensor)
tfliteモデルの出力Tensorの数を取得します。
AILIATFLiteStatus ailiaTFLiteGetScratchBufferUsage(struct AILIATFLiteInstance *instance, size_t *int_buffer_size, size_t *mid_buffer_size, size_t *ext_buffer_size)
スクラッチバッファの最大使用量を取得します。
AILIATFLiteStatus ailiaTFLiteGetOperatorName(const char **name, const int32_t op)
Operatorの名前を取得します。
AILIATFLiteStatus ailiaTFLiteSetCpuFeatures(struct AILIATFLiteInstance *instance, int32_t cpu_features)
使用するCPU命令を設定します
AILIATFLiteStatus ailiaTFLiteRestoreContext(struct AILIATFLiteInstance *instance, const void *buf, size_t buf_size)
DSAの結果を復元します。
AILIATFLiteStatus ailiaTFLiteAllocateTensors(struct AILIATFLiteInstance *instance)
ailia TFLite runtimeの内部バッファーの確保を行います
AILIATFLiteStatus ailiaTFLiteMklSetNumThreads(const int32_t num_threads)
MKLが使用するスレッド数を設定します
int32_t AILIATFLiteEnvironment
Definition: ailia_tflite.h:321
int8_t AILIATFLiteTensorType
Definition: ailia_tflite.h:139
AILIATFLiteStatus ailiaTFLiteGetNodeInputTensorIndex(const struct AILIATFLiteInstance *instance, int32_t *tensor_index, const int32_t node_index, const int32_t input_index)
node_index番目のNodeのinput_index番目の入力のTensorのindexを取得します
AILIATFLiteStatus ailiaTFLiteGetScratchBufferUsageEx(struct AILIATFLiteInstance *instance, size_t *int_buffer_size, size_t *mid_buffer_size, size_t *ext_buffer_size, size_t *global_buffer_size)
スクラッチバッファの最大使用量を取得します。
AILIATFLiteStatus ailiaTFLiteGetTensorBuffer(struct AILIATFLiteInstance *instance, void **buffer, const int32_t tensor_index)
index番目のTensorのデータの格納バッファーを取得します。
AILIATFLiteStatus ailiaTFLiteSetProfileMode(struct AILIATFLiteInstance *instance, int mode)
プロファイルモードをセットします。
AILIATFLiteStatus ailiaTFLiteSetScratchBuffer(struct AILIATFLiteInstance *instance, void *int_buffer, size_t int_buffer_size, void *mid_buffer, size_t mid_buffer_size, void *ext_buffer, size_t ext_buffer_size)
スクラッチバッファを設定します
int32_t AILIATFLiteCpuFeatures
Definition: ailia_tflite.h:574
AILIATFLiteStatus ailiaTFLiteGetTensorShape(const struct AILIATFLiteInstance *instance, int32_t *shape, const int32_t tensor_index)
index番目のTensorの形状を取得します。
int32_t AILIATFLiteStatus
Definition: ailia_tflite.h:275