Преобразование модели в tflite с помощью SELECT_TF_OPS не может преобразовать ops HashTableV2 + другие

Я пытаюсь преобразовать openimages_v4 / ssd / mobilenet_v2 в tflite, используя следующие код, предложенный здесь:

import tensorflow as tf
MODEL_DIR = 'openimages_v4_ssd_mobilenet_v2_1'
SIGNATURE_KEYS = ['default']
SIGNATURE_TAGS = set()
saved_model = tf.saved_model.load(MODEL_DIR, tags=SIGNATURE_TAGS)
tf.saved_model.save(saved_model, 'new_model_path', signatures=saved_model.signatures)
converter = tf.lite.TFLiteConverter.from_saved_model('new_model_path', signature_keys=SIGNATURE_KEYS, tags=['serve'])
converter.target_spec.supported_ops = [
  tf.lite.OpsSet.TFLITE_BUILTINS, # enable TensorFlow Lite ops.
  tf.lite.OpsSet.SELECT_TF_OPS # enable TensorFlow ops.
]
tflite_model = converter.convert()

но это дает эту ошибку:

<unknown>:0: error: failed while converting: 'main': Ops that need custom implementation (enabled via setting the -emit-custom-ops flag):
    tf.HashTableV2 {container = "", device = "", key_dtype = i64, shared_name = "hub_input/index_to_string_1_load_0_3", use_node_name_sharing = true, value_dtype = !tf.string}
    tf.HashTableV2 {container = "", device = "", key_dtype = i64, shared_name = "hub_input/index_to_string_load_0_2", use_node_name_sharing = true, value_dtype = !tf.string}
    tf.LookupTableFindV2 {device = ""}
    tf.LookupTableImportV2 {device = ""}

Мне удалось обойти эти ошибки, добавив:

 converter.allow_custom_ops = True

Но согласно сообщению этой проблемы на github от 13 апреля 2020 г .:

Временно удалена поддержка AddHashtableOps в Python. Однако вы все равно можете добавить это в интерпретатор на C ++.

Так ли это до сих пор? Также для фрагмента кода о том, как использовать модель tflite, в предыдущем комментарии по той же проблеме, что нужно импортировать, чтобы использовать interpreter_wrapper?


person tleyden    schedule 24.01.2021    source источник
comment
tensorflow.org/lite/guide/ops_select В этой документации выше четко указано: Unsupported ops: Control flow ops and ops that require explicit initialization from resources, like HashTableV2, are not yet supported. Вы в курсе?   -  person convolutionBoy    schedule 08.07.2021


Ответы (1)


Операции Hashtable - это настраиваемые операции в TFLite, поэтому вам понадобятся: converter.allow_custom_ops = True для преобразования вашей модели.

Упомянутый вами комментарий больше не действителен. Вы можете использовать AddHashtableOps в C ++ или HashtableOpsRegisterer в python.

import tensorflow as tf

model_interpreter = tf.lite.interpreter.InterpreterWithCustomOps(
      model_content=tflite_model, custom_op_registerers=[HashtableOpsRegisterer])
person Thaink    schedule 26.01.2021