提交 47de9f50 编写于 作者: Y yeliang2258

Merge remote-tracking branch 'upstream/develop' into idg_dev

...@@ -81,7 +81,7 @@ ...@@ -81,7 +81,7 @@
"source": [ "source": [
"## 模型迁移\n", "## 模型迁移\n",
"### 1. 获取MobileNetV1的FrozenModel\n", "### 1. 获取MobileNetV1的FrozenModel\n",
"由于X2Paddle只支持TensorFlow中FrozenModel的转换,如果为纯checkpoint模型,需要参考参考X2Paddle官方[文档](https://github.com/PaddlePaddle/X2Paddle/blob/develop/docs/user_guides/export_tf_model.md),将其转换为FrozenModel,本示例中提供的模型为FrozenModel,所以无需转换。" "由于X2Paddle只支持TensorFlow中FrozenModel的转换,如果为纯checkpoint模型,需要参考参考X2Paddle官方[文档](https://github.com/PaddlePaddle/X2Paddle/blob/release-1.1/docs/user_guides/export_tf_model.md),将其转换为FrozenModel,本示例中提供的模型为FrozenModel,所以无需转换。"
] ]
}, },
{ {
...@@ -210,4 +210,4 @@ ...@@ -210,4 +210,4 @@
}, },
"nbformat": 4, "nbformat": 4,
"nbformat_minor": 4 "nbformat_minor": 4
} }
\ No newline at end of file
...@@ -558,9 +558,9 @@ class PaddleGraph(object): ...@@ -558,9 +558,9 @@ class PaddleGraph(object):
paddle.save(self.parameters, save_path) paddle.save(self.parameters, save_path)
def dygraph2static(self, save_dir, input_shapes=[], input_types=[]): def dygraph2static(self, save_dir, input_shapes=[], input_types=[]):
sepc_list = list() spec_list = list()
for i, name in enumerate(self.inputs): for i, name in enumerate(self.inputs):
sepc_list.append( spec_list.append(
paddle.static.InputSpec( paddle.static.InputSpec(
shape=input_shapes[i], name=name, dtype=input_types[i])) shape=input_shapes[i], name=name, dtype=input_types[i]))
path = osp.abspath(save_dir) path = osp.abspath(save_dir)
...@@ -574,7 +574,7 @@ class PaddleGraph(object): ...@@ -574,7 +574,7 @@ class PaddleGraph(object):
else: else:
model.set_dict(restore) model.set_dict(restore)
model.eval() model.eval()
static_model = paddle.jit.to_static(model, input_spec=sepc_list) static_model = paddle.jit.to_static(model, input_spec=spec_list)
try: try:
paddle.jit.save(static_model, paddle.jit.save(static_model,
osp.join(save_dir, "inference_model/model")) osp.join(save_dir, "inference_model/model"))
......
...@@ -583,7 +583,8 @@ class ONNXDecoder(object): ...@@ -583,7 +583,8 @@ class ONNXDecoder(object):
item.name = self.make_variable_name(item.name) item.name = self.make_variable_name(item.name)
for node in graph.node: for node in graph.node:
node.name = node.output[0] node.name = node.output[0]
if ":" in node.name and len(node.output) > 1: if ":" in node.name and len(
node.output) > 1 and node.op_type != "LSTM":
node.name = node.name.split(':')[0] node.name = node.name.split(':')[0]
node.name = self.make_variable_name(node.name) node.name = self.make_variable_name(node.name)
for i in range(len(node.input)): for i in range(len(node.input)):
......
...@@ -966,11 +966,12 @@ class CaffeOpMapper(): ...@@ -966,11 +966,12 @@ class CaffeOpMapper():
inputs={"x": input.name}, inputs={"x": input.name},
outputs=[node.layer_name], outputs=[node.layer_name],
**layer_attrs) **layer_attrs)
self.paddle_graph.add_layer( if params.power != 1:
"paddle.pow", self.paddle_graph.add_layer(
inputs={"x": node.layer_name}, "paddle.pow",
outputs=[node.layer_name], inputs={"x": node.layer_name,
exponent=params.power) "y": params.power},
outputs=[node.layer_name])
def Reduction(self, node): def Reduction(self, node):
assert len( assert len(
......
...@@ -2277,14 +2277,35 @@ class OpSet9(): ...@@ -2277,14 +2277,35 @@ class OpSet9():
paddings, var_x = self._pad_if_asymmetric(node, pads, val_x) paddings, var_x = self._pad_if_asymmetric(node, pads, val_x)
output_size = [0, 0] if len(output_size) != 0:
paddings = [0] * 4
total_paddings = list()
total_paddings.append((val_x.out_shapes[0][2] - 1) * strides[
0] + dilations[0] * (kernel_shape[0] - 1) + 1 + out_padding[0] -
output_size[0])
total_paddings.append((val_x.out_shapes[0][3] - 1) * strides[
1] + dilations[1] * (kernel_shape[1] - 1) + 1 + out_padding[1] -
output_size[1])
if auto_pad == "SAME_UPPER":
for i in range(len(total_paddings)):
paddings[2 * i] = total_paddings[0] - total_paddings[0] // 2
paddings[2 * i + 1] = total_paddings[0] // 2
else:
for i in range(len(total_paddings)):
paddings[2 * i] = total_paddings[0] // 2
paddings[2 * i + 1] = total_paddings[0] - total_paddings[
0] // 2
else:
output_size = [0, 0]
output_size[0] = (val_x.out_shapes[0][2] - 1 output_size[0] = (
) * strides[0] - 2 * paddings[0] + dilations[0] * ( val_x.out_shapes[0][2] - 1
kernel_shape[0] - 1) + 1 + out_padding[0] ) * strides[0] - 2 * paddings[0] + dilations[0] * (
output_size[1] = (val_x.out_shapes[0][3] - 1 kernel_shape[0] - 1) + 1 + out_padding[0]
) * strides[1] - 2 * paddings[1] + dilations[1] * ( output_size[1] = (
kernel_shape[1] - 1) + 1 + out_padding[1] val_x.out_shapes[0][3] - 1
) * strides[1] - 2 * paddings[1] + dilations[1] * (
kernel_shape[1] - 1) + 1 + out_padding[1]
# Conv2DTranspose缺少output_size,只能在forward里头传进output_size # Conv2DTranspose缺少output_size,只能在forward里头传进output_size
inputs_dict = {'x': val_x if isinstance(val_x, str) else val_x.name} inputs_dict = {'x': val_x if isinstance(val_x, str) else val_x.name}
...@@ -2327,6 +2348,8 @@ class OpSet9(): ...@@ -2327,6 +2348,8 @@ class OpSet9():
if val_b is not None: if val_b is not None:
_rename_or_remove_weight(self.weights, val_b.name, _rename_or_remove_weight(self.weights, val_b.name,
op_name + '.bias') op_name + '.bias')
else:
layer_attrs["bias_attr"] = False
self.paddle_graph.add_layer( self.paddle_graph.add_layer(
kernel=paddle_op, kernel=paddle_op,
inputs=inputs_dict, inputs=inputs_dict,
......
...@@ -1315,8 +1315,10 @@ def aten__convolution(mapper, graph, node): ...@@ -1315,8 +1315,10 @@ def aten__convolution(mapper, graph, node):
weights = mapper.pytorch_params[inputs_name[1]] weights = mapper.pytorch_params[inputs_name[1]]
if len(weights.shape) == 3: if len(weights.shape) == 3:
op_name = name_generator("conv1d", mapper.nn_name2id) op_name = name_generator("conv1d", mapper.nn_name2id)
else: elif len(weights.shape) == 4:
op_name = name_generator("conv2d", mapper.nn_name2id) op_name = name_generator("conv2d", mapper.nn_name2id)
else:
op_name = name_generator("conv3d", mapper.nn_name2id)
output_name = mapper._get_outputs_name(node)[0] output_name = mapper._get_outputs_name(node)[0]
layer_outputs = [op_name, output_name] layer_outputs = [op_name, output_name]
layer_inputs = {} layer_inputs = {}
...@@ -1364,7 +1366,22 @@ def aten__convolution(mapper, graph, node): ...@@ -1364,7 +1366,22 @@ def aten__convolution(mapper, graph, node):
else: else:
layer_attrs['in_channels'] = weights.shape[1] * mapper.attrs[ layer_attrs['in_channels'] = weights.shape[1] * mapper.attrs[
inputs_name[8]] inputs_name[8]]
if len(weights.shape) == 4: if len(weights.shape) == 3:
if mapper.attrs[inputs_name[6]]:
graph.add_layer(
"paddle.nn.Conv1DTranspose",
inputs=layer_inputs,
outputs=layer_outputs,
scope_name=scope_name,
**layer_attrs)
else:
graph.add_layer(
"paddle.nn.Conv1D",
inputs=layer_inputs,
outputs=layer_outputs,
scope_name=scope_name,
**layer_attrs)
elif len(weights.shape) == 4:
if mapper.attrs[inputs_name[6]]: if mapper.attrs[inputs_name[6]]:
graph.add_layer( graph.add_layer(
"paddle.nn.Conv2DTranspose", "paddle.nn.Conv2DTranspose",
...@@ -1382,14 +1399,14 @@ def aten__convolution(mapper, graph, node): ...@@ -1382,14 +1399,14 @@ def aten__convolution(mapper, graph, node):
else: else:
if mapper.attrs[inputs_name[6]]: if mapper.attrs[inputs_name[6]]:
graph.add_layer( graph.add_layer(
"paddle.nn.Conv1DTranspose", "paddle.nn.Conv3DTranspose",
inputs=layer_inputs, inputs=layer_inputs,
outputs=layer_outputs, outputs=layer_outputs,
scope_name=scope_name, scope_name=scope_name,
**layer_attrs) **layer_attrs)
else: else:
graph.add_layer( graph.add_layer(
"paddle.nn.Conv1D", "paddle.nn.Conv3D",
inputs=layer_inputs, inputs=layer_inputs,
outputs=layer_outputs, outputs=layer_outputs,
scope_name=scope_name, scope_name=scope_name,
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册