Невозможно преобразовать слой tf.keras.layers.ConvLSTM2D в промежуточное представление vino. - PullRequest
1 голос
/ 09 марта 2020

Я пытаюсь преобразовать обученную модель в тензорном потоке в Открыть VINO Промежуточное представление.

У меня есть модель в форме, приведенной ниже

class Conv3DModel(tf.keras.Model):
    def __init__(self):
        super(Conv3DModel, self).__init__()
        # Convolutions
        self.conv1 = tf.compat.v2.keras.layers.Conv3D(32, (3, 3, 3), activation='relu', name="conv1", data_format='channels_last')
        self.pool1 = tf.keras.layers.MaxPool3D(pool_size=(2, 2, 2), data_format='channels_last')
        self.conv2 = tf.compat.v2.keras.layers.Conv3D(64, (3, 3, 3), activation='relu', name="conv1", data_format='channels_last')
        self.pool2 = tf.keras.layers.MaxPool3D(pool_size=(2, 2,2), data_format='channels_last')

        # LSTM & Flatten
        self.convLSTM =tf.keras.layers.ConvLSTM2D(40, (3, 3))
        self.flatten =  tf.keras.layers.Flatten(name="flatten")

        # Dense layers
        self.d1 = tf.keras.layers.Dense(128, activation='relu', name="d1")
        self.out = tf.keras.layers.Dense(6, activation='softmax', name="output")


    def call(self, x):
        x = self.conv1(x)
        x = self.pool1(x)
        x = self.conv2(x)
        x = self.pool2(x)
        x = self.convLSTM(x)
        x = self.flatten(x)
        x = self.d1(x)
        return self.out(x)

I пытался конвертировать модель в ИК. Модель здесь .

Я обучил эту модель тензорному потоку 1.15. Tensorflow 2.0 в настоящее время не поддерживается.

Теперь я попытался запустить команду

python3 /opt/intel/openvino/deployment_tools/model_optimizer/mo_tf.py --saved_model_dir jester_trained_models / 3dcnn- basic / --output_dir / home / deepanshu / open_vino / udacity_project_custom_model /

Теперь я получил следующую ошибку

Аргументы оптимизатора модели:

Общие параметры :

  • Путь к модели ввода: Нет

  • Путь для сгенерированного IR: / home / deepanshu / open_vino / udacity_project_custom_model /

  • Имя выхода ИК: сохраненная_модель

  • Уровень записи: ОШИБКА

  • Пакет: Не указано, унаследовано от модели

  • Входные слои: не указано, унаследовано от модели

  • Выходные слои: не указано, унаследовано от модели

  • Форма ввода: Не указано, унаследовано от модели

  • Среднее значения: не указано

  • значения шкалы: не указано

  • коэффициент масштабирования: не указано

  • Точность ИК: FP32

  • Включить слияние: True

  • Включить слияние сгруппированных сверток: True

  • Переместить средние значения в секцию предварительной обработки: False

  • Обратные входные каналы: False

Спецификация TensorFlow c Параметры:

  • Модель ввода в текстовом формате protobuf: False

  • Путь к дампу модели для TensorBoard: Нет

  • Список общих библиотеки с реализацией пользовательских слоев TensorFlow: Нет

  • Обновить файл конфигурации с именами узлов ввода / вывода: Нет

  • Использовать файл конфигурации, используемый для генерации модель с API обнаружения объектов: Нет

  • Операции по разгрузке: Нет

  • Шаблоны для разгрузки: Нет * 112 0 *

  • Использовать файл конфигурации: нет

Версия оптимизатора модели: 2020.1.0-61-gd349c3ba4a

[ ОШИБКА] Неожиданное исключение произошло при извлечении атрибутов для узла conv3d_model / conv_lst_m2d / bias / Read / ReadVariableOp. Исходное сообщение об исключении: код 'ascii' c не может декодировать байт 0xc9 в позиции 1: порядковый номер не в диапазоне (128)

Насколько я вижу, это tf.keras. Layers.ConvLSTM2D (40, (3, 3)) вызывает проблемы. Я застрял здесь. Может кто-нибудь сказать мне, где я могу продолжить?

Спасибо

Изменить на вопрос

Теперь я отклонил вышеуказанную реализацию тензорного потока и использовал керасы. Моя разработанная модель h5 была преобразована в формат .pb с использованием этой записи .

Теперь я запустил оптимизатор модели для этого файла .pb. Использование команды

python3 /opt/intel/openvino/deployment_tools/model_optimizer/mo_tf.py --input_model /home/deepanshu/ml_playground/jester_freezed/tf_model.pb --output_dir /home/deepanshu/open_vino/udacity_project_custom_model/ --input_shape=[1,30,64,64,1] --data_type FP32

Теперь я столкнулся с другой проблемой. Проблема здесь заключается в пункте нет. 97 в этой записи .

Таким образом, моя модель содержит цикл, а оптимизатор модели не знает способа ее преобразования. Кто-нибудь сталкивался с этой проблемой раньше?

Пожалуйста, помогите.

Вот модель .

Вот определение модели в керасах


from keras.models import Sequential

from keras.layers import Conv3D , MaxPool3D,Flatten ,Dense

from keras.layers.convolutional_recurrent import ConvLSTM2D

import keras


model = Sequential()

model.add(Conv3D(32, (3, 3, 3), 

         name="conv1" , input_shape=(30, 64, 64,1) ,  data_format='channels_last',

        activation='relu') )

model.add(MaxPool3D(pool_size=(2, 2, 2), data_format='channels_last'))

model.add(Conv3D(64, (3, 3, 3), activation='relu', name="conv2", data_format='channels_last'))

model.add(MaxPool3D(pool_size=(2, 2,2), data_format='channels_last'))

model.add(ConvLSTM2D(40, (3, 3)))

model.add(Flatten(name="flatten"))

model.add(Dense(128, activation='relu', name="d1"))

model.add(Dense(6, activation='softmax', name="output"))

1 Ответ

0 голосов
/ 21 марта 2020

На самом деле сценарий для преобразования из h5 в .pb, предложенный Intel, был недостаточно хорош. Всегда используйте код из здесь , чтобы преобразовать вашу модель keras в .pb .

Как только вы получите файл .pb , теперь конвертируйте вашу модель в IR, используя

python3 /opt/intel/openvino/deployment_tools/model_optimizer/mo_tf.py --input_model ml_playground/try_directory/tf_model.pb   --output_dir /home/deepanshu/open_vino/udacity_project_custom_model/  --input_shape=[1,30,64,64,1] --data_type FP32

После выполнения этого скрипта мы можем получить промежуточное представление кератов. модель.

...