无法转换 tf.keras.layers.ConvLSTM2D 层以打开 vino 中间表示
Cannot convert tf.keras.layers.ConvLSTM2D layer to open vino intermediate representation
我正在尝试将 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。模型是 here .
我已经在 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/
现在我得到以下错误
模型优化器参数:
常用参数:
输入模型的路径:None
生成 IR 的路径:/home/deepanshu/open_vino/udacity_project_custom_model/
红外输出名称:saved_model
日志级别:错误
批次:未指定,继承自模型
输入层:未指定,继承自模型
输出层:未指定,继承自模型
输入形状:未指定,继承自模型
平均值:未指定
比例值:未指定
比例因子:未指定
IR精度:FP32
启用融合:True
启用分组卷积融合:True
将平均值移动到预处理部分:False
反向输入通道:False
TensorFlow 特定参数:
文本 protobuf 格式的输入模型:False
TensorBoard 模型转储路径:None
具有 TensorFlow 自定义层实现的共享库列表:None
使用input/output节点名称更新配置文件:None
使用用于通过对象检测生成模型的配置文件API:None
要卸载的操作:None
要卸载的模式:None
使用配置文件:None
模型优化器版本:2020.1.0-61-gd349c3ba4a
[错误] 提取节点 conv3d_model/conv_lst_m2d/bias/Read/ReadVariableOp 的属性时发生意外异常。原始异常消息:'ascii' 编解码器无法解码位置 1 中的字节 0xc9:序号不在 运行ge(128)
中
据我所知,是 tf.keras.layers.ConvLSTM2D(40, (3, 3)) 引起了问题。我有点被困在这里。谁能告诉我在哪里可以进一步进行?
谢谢
编辑问题
现在我拒绝了上面的tensorflow实现,转而使用keras。我开发的h5模型使用这个post.
转换成.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 在此 post.
所以我的模型包含一个循环,而模型优化器不知道如何转换它。以前有人遇到过这个问题吗?
请帮忙。
这是 model .
这里是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"))
实际上,intel 建议的从 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模型的中间表示。
我正在尝试将 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。模型是 here .
我已经在 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/
现在我得到以下错误
模型优化器参数:
常用参数:
输入模型的路径:None
生成 IR 的路径:/home/deepanshu/open_vino/udacity_project_custom_model/
红外输出名称:saved_model
日志级别:错误
批次:未指定,继承自模型
输入层:未指定,继承自模型
输出层:未指定,继承自模型
输入形状:未指定,继承自模型
平均值:未指定
比例值:未指定
比例因子:未指定
IR精度:FP32
启用融合:True
启用分组卷积融合:True
将平均值移动到预处理部分:False
反向输入通道:False
TensorFlow 特定参数:
文本 protobuf 格式的输入模型:False
TensorBoard 模型转储路径:None
具有 TensorFlow 自定义层实现的共享库列表:None
使用input/output节点名称更新配置文件:None
使用用于通过对象检测生成模型的配置文件API:None
要卸载的操作:None
要卸载的模式:None
使用配置文件:None
模型优化器版本:2020.1.0-61-gd349c3ba4a
[错误] 提取节点 conv3d_model/conv_lst_m2d/bias/Read/ReadVariableOp 的属性时发生意外异常。原始异常消息:'ascii' 编解码器无法解码位置 1 中的字节 0xc9:序号不在 运行ge(128)
中据我所知,是 tf.keras.layers.ConvLSTM2D(40, (3, 3)) 引起了问题。我有点被困在这里。谁能告诉我在哪里可以进一步进行?
谢谢
编辑问题
现在我拒绝了上面的tensorflow实现,转而使用keras。我开发的h5模型使用这个post.
转换成.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 在此 post.
所以我的模型包含一个循环,而模型优化器不知道如何转换它。以前有人遇到过这个问题吗?
请帮忙。
这是 model .
这里是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"))
实际上,intel 建议的从 h5 转换为 .pb 的脚本不够好。始终使用
获得 .pb 文件后,现在使用
将模型转换为 IRpython3 /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模型的中间表示。