1

我正在尝试将 tensorflow 中的训练模型转换为Open 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)

我试图将模型转换为 IR。模型在这里

我已经在 tensorflow 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/

  • IR 输出名称:saved_model

  • 日志级别:错误

  • 批次:未指定,继承自模型

  • 输入层:未指定,继承自模型

  • 输出层:未指定,继承自模型

  • 输入形状:未指定,继承自模型

  • 平均值:未指定

  • 比例值:未指定

  • 比例因子:未指定

  • 红外精度:FP32

  • 启用融合:真

  • 启用分组卷积融合:True

  • 将平均值移动到预处理部分:False

  • 反向输入通道:假

TensorFlow 具体参数:

  • 文本 protobuf 格式的输入模型:False

  • TensorBoard 模型转储的路径:无

  • 具有 TensorFlow 自定义层实现的共享库列表:无

  • 使用输入/输出节点名称更新配置文件:无

  • 使用用于通过对象检测 API 生成模型的配置文件:无

  • 卸载操作:无

  • 要卸载的模式:无

  • 使用配置文件:无

模型优化器版本:2020.1.0-61-gd349c3ba4a

[ 错误 ] 提取节点 conv3d_model/conv_lst_m2d/bias/Read/ReadVariableOp 的属性时发生意外异常。原始异常消息:“ascii”编解码器无法解码位置 1 中的字节 0xc9:序数不在范围内(128)

据我所知,是 tf.keras.layers.ConvLSTM2D(40, (3, 3)) 导致问题。我有点卡在这里。谁能告诉我在哪里可以进一步进行?

谢谢

编辑问题

现在我拒绝了上面的 tensorflow 实现并使用了 keras 。我开发的 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在这个帖子上。

所以我的模型包含一个循环,模型优化器不知道转换它的方法。以前有人遇到过这个问题吗?

请帮忙。

这是模型

这是keras中模型的定义


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"))
4

1 回答 1

0

实际上,英特尔建议的从 h5 转换为 .pb 的脚本还不够好。始终使用此处的代码将您的 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

执行完这个脚本后,我们可以获得keras模型的中间表示。

于 2020-03-21T20:45:28.903 回答