Не удалось загрузить модель tflite на Android (IsPowerOfTwo(RFFT2D fft_length_data[1]) неверно.)Android

Форум для тех, кто программирует под Android
Ответить
Anonymous
 Не удалось загрузить модель tflite на Android (IsPowerOfTwo(RFFT2D fft_length_data[1]) неверно.)

Сообщение Anonymous »

чтобы получить функции mfcc из android. построил модель mfcc с помощью tf.
и проверил, работает нормально.
но когда я конвертирую ее в tflite и пытаюсь загрузить на Android, при загрузке возникает ошибка.
журналы ошибок.
java.lang.IllegalStateException: внутренняя ошибка: неожиданный сбой при подготовке тензорных выделений: tensorflow/lite/kernels/rfft2d.cc:117 IsPowerOfTwo(fft_length_data[1]) неверно.
Не удалось подготовить узел номер 16 (RFFT2D).
Не удалось применить делегат TensorFlow Lite по умолчанию, индексированный по адресу 0.
в org.tensorflow.lite.NativeInterpreterWrapper.allocateTensors(Native Метод)
at org.tensorflow.lite.NativeInterpreterWrapper.init(NativeInterpreterWrapper.java:134)
at org.tensorflow.lite.NativeInterpreterWrapper.(NativeInterpreterWrapper.java:58)
at org.tensorflow.lite.NativeInterpreterWrapperExperimental.(NativeInterpreterWrapperExperimental.java:32)
на org.tensorflow.lite.Interpreter.(Interpreter.java:202)
и полный код:

Код: Выделить всё

def compute_mfcc(chunk1, chunk2, chunk3, sample_rate=16000, num_mfcc=20):
padded_chunk = tf.concat([chunk1[-len(chunk1)//2:], chunk2, chunk3[:len(chunk3)//2]], axis=-1)

padded_chunk_tensor = tf.convert_to_tensor(padded_chunk, dtype=tf.float32)

stft = tf.signal.stft(padded_chunk_tensor, frame_length=128, frame_step=64)

magnitude_spectrograms = tf.abs(stft)

num_spectrogram_bins = magnitude_spectrograms.shape[-1]
lower_edge_hertz, upper_edge_hertz, num_mel_bins = 80.0, 7600.0, 40

linear_to_mel_weight_matrix = tf.signal.linear_to_mel_weight_matrix(
num_mel_bins, num_spectrogram_bins, sample_rate, lower_edge_hertz, upper_edge_hertz)

mel_spectrograms = tf.tensordot(magnitude_spectrograms, linear_to_mel_weight_matrix, 1)
mel_spectrograms.set_shape(magnitude_spectrograms.shape[:-1].concatenate(linear_to_mel_weight_matrix.shape[-1:]))

log_mel_spectrograms = tf.math.log(mel_spectrograms + 1e-9)

mfccs = tf.signal.mfccs_from_log_mel_spectrograms(log_mel_spectrograms)[..., :num_mfcc]

mfccs_mean = tf.reduce_mean(mfccs, axis=0)
mfccs_std = tf.math.reduce_std(mfccs, axis=0)

normalized_mfccs = (mfccs - mfccs_mean) / (mfccs_std + 1e-9)

return normalized_mfccs[1]
конвертировать модель.
(я тоже пробовал оптимизацию)

Код: Выделить всё

class MFCCModel(tf.Module):
def __init__(self):
super(MFCCModel, self).__init__()

@tf.function(input_signature=[tf.TensorSpec(shape=[3, 320], dtype=tf.float32)])
def __call__(self, inputs):
chunk1, chunk2, chunk3 = tf.unstack(inputs)
mfccs = compute_mfcc(chunk1, chunk2, chunk3)
return mfccs

# Create the model
model = MFCCModel()

converter = tf.lite.TFLiteConverter.from_concrete_functions([model.__call__.get_concrete_function()])
converter.target_spec.supported_ops = [
tf.lite.OpsSet.TFLITE_BUILTINS,
tf.lite.OpsSet.SELECT_TF_OPS
]
converter.experimental_new_converter = True
tflite_model = converter.convert()

with open('mfcc_model.tflite', 'wb') as f:
f.write(tflite_model)

Код: Выделить всё

ConcreteFunction Input Parameters:
inputs (POSITIONAL_OR_KEYWORD): TensorSpec(shape=(3, 320), dtype=tf.float32, name=None)
Output Type:
TensorSpec(shape=(20,), dtype=tf.float32, name=None)
Captures:
None
Узел RFFT2D выглядит нормально со степенью двойки, равной 128...
[img]https: //i.sstatic.net/X6J5xRcg.png[/img]

пожалуйста, проверьте эту ошибку и дайте какие-либо подсказки по ее устранению..
спасибо
изменено fft_lenth другие значения 256, 256 * 2,,,
каждая попытка дает одни и те же ошибки..
изменил библиотеки tflite на последнюю версию

Подробнее здесь: https://stackoverflow.com/questions/788 ... -data1-was
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Android»