Skip to content
This repository has been archived by the owner on Oct 13, 2021. It is now read-only.

Handle conv layer spec when input0 is type SpaceToBatchND #475

Merged
merged 50 commits into from
May 4, 2020
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
50 commits
Select commit Hold shift + click to select a range
d674930
Add vgg16 and nasnet to v2 application
jiafatom Feb 26, 2020
c731d6f
Add vgg16 and nasnet to v2 application
jiafatom Feb 26, 2020
e389ae3
Merge branch 'test_tfl' of https://github.com/jiafatom/keras-onnx int…
jiafatom Feb 26, 2020
d200756
Merge branch 'master' into test_tfl
jiafatom Feb 26, 2020
4dd8869
Add DepthwiseConv2d to subclassed model and efficient-net test cases …
wenbingl Feb 25, 2020
7f9add8
Merge branch 'test_tfl' of https://github.com/jiafatom/keras-onnx
jiafatom Feb 26, 2020
1bb0e71
Merge branch 'master' of https://github.com/jiafatom/keras-onnx
jiafatom Feb 26, 2020
0cbfd4b
Merge branch 'master' of https://github.com/onnx/keras-onnx
jiafatom Feb 26, 2020
59cf5dd
Merge branch 'master' of https://github.com/onnx/keras-onnx
jiafatom Feb 28, 2020
99c9428
Merge branch 'master' of https://github.com/onnx/keras-onnx
jiafatom Feb 28, 2020
86559d9
Merge branch 'master' of https://github.com/jiafatom/keras-onnx
jiafatom Mar 6, 2020
614e418
Merge branch 'master' of https://github.com/onnx/keras-onnx
jiafatom Mar 9, 2020
d226a48
Merge branch 'master' of https://github.com/onnx/keras-onnx
jiafatom Mar 11, 2020
aea5db7
Merge branch 'master' of https://github.com/onnx/keras-onnx
jiafatom Mar 18, 2020
4fb0eb1
Merge branch 'master' of https://github.com/onnx/keras-onnx
jiafatom Mar 19, 2020
9a1da8d
Merge branch 'master' of https://github.com/onnx/keras-onnx
jiafatom Mar 25, 2020
af09194
Merge branch 'master' of https://github.com/onnx/keras-onnx
jiafatom Mar 28, 2020
439766b
Merge branch 'master' of https://github.com/onnx/keras-onnx
jiafatom Mar 30, 2020
dde384a
Merge branch 'master' of https://github.com/onnx/keras-onnx
jiafatom Apr 1, 2020
6084779
Merge branch 'master' of https://github.com/onnx/keras-onnx
jiafatom Apr 1, 2020
6fe74e4
Merge branch 'master' of https://github.com/onnx/keras-onnx
jiafatom Apr 3, 2020
64b12c9
Merge branch 'master' of https://github.com/onnx/keras-onnx
jiafatom Apr 6, 2020
7ad6a10
Merge branch 'master' of https://github.com/onnx/keras-onnx
jiafatom Apr 7, 2020
7a9c7e5
Merge branch 'master' of https://github.com/onnx/keras-onnx
jiafatom Apr 7, 2020
ada3cf1
Merge branch 'master' of https://github.com/onnx/keras-onnx
jiafatom Apr 9, 2020
d7ba04a
Merge branch 'master' of https://github.com/onnx/keras-onnx
jiafatom Apr 12, 2020
8bef51f
Merge branch 'master' of https://github.com/onnx/keras-onnx
jiafatom Apr 15, 2020
e4c242f
Merge branch 'master' of https://github.com/onnx/keras-onnx
jiafatom Apr 15, 2020
765a370
Merge branch 'master' of https://github.com/onnx/keras-onnx
jiafatom Apr 16, 2020
657b8da
Merge branch 'master' of https://github.com/onnx/keras-onnx
jiafatom Apr 16, 2020
4cb822b
Merge branch 'master' of https://github.com/onnx/keras-onnx
jiafatom Apr 16, 2020
9e4ae9b
Merge branch 'master' of https://github.com/onnx/keras-onnx
jiafatom Apr 16, 2020
d0d0a59
Merge branch 'master' of https://github.com/onnx/keras-onnx
jiafatom Apr 17, 2020
c729987
Merge branch 'master' of https://github.com/onnx/keras-onnx
jiafatom Apr 20, 2020
084d825
Merge branch 'master' of https://github.com/onnx/keras-onnx
jiafatom Apr 22, 2020
a71c986
Merge branch 'master' of https://github.com/onnx/keras-onnx
jiafatom Apr 24, 2020
0cd49c8
Merge branch 'master' of https://github.com/onnx/keras-onnx
jiafatom Apr 24, 2020
1a4e26d
Merge branch 'master' of https://github.com/onnx/keras-onnx
jiafatom Apr 26, 2020
2e20ce9
Merge branch 'master' of https://github.com/onnx/keras-onnx
jiafatom Apr 28, 2020
8de478a
Merge branch 'master' of https://github.com/onnx/keras-onnx
jiafatom Apr 29, 2020
074ac60
Merge branch 'master' of https://github.com/onnx/keras-onnx
jiafatom Apr 29, 2020
16eda69
Merge branch 'master' of https://github.com/onnx/keras-onnx
jiafatom May 1, 2020
1bc719f
Merge branch 'master' of https://github.com/onnx/keras-onnx
jiafatom May 1, 2020
6227b55
Test
jiafatom May 4, 2020
ed5b49a
Merge branch 'master' of https://github.com/onnx/keras-onnx
jiafatom May 4, 2020
171a7a0
Merge branch 'master' into conv_spacetond
jiafatom May 4, 2020
bf3b8bc
Merge branch 'master' into conv_spacetond
jiafatom May 4, 2020
cbd7717
Merge branch 'conv_spacetond' of https://github.com/jiafatom/keras-on…
jiafatom May 4, 2020
914573a
Merge branch 'conv_spacetond' of https://github.com/jiafatom/keras-on…
jiafatom May 4, 2020
96dbca1
Merge branch 'conv_spacetond' of https://github.com/jiafatom/keras-on…
jiafatom May 4, 2020
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
49 changes: 26 additions & 23 deletions keras2onnx/_builtin.py
Original file line number Diff line number Diff line change
Expand Up @@ -118,43 +118,45 @@ def convert_tf_batch_to_space(scope, operator, container):
starts=[0], ends=[1])
block_prod = oopb.apply_mul(block_size + block_size,
name=operator.full_name + '_mul_0')
padded_block_prod = oopb.apply_pad([block_prod,
('const_zero_three', oopb.int64, np.array([0, 3], dtype='int64')),
('one', oopb.int64, np.array([1], dtype='int64'))],
name=operator.full_name + '_pad_0')
padded_block_prod = oopb.apply_pad(block_prod,
name=operator.full_name + '_pad_0',
pads=[0, 3],
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

where does pads come from?

Copy link
Collaborator Author

@jiafatom jiafatom May 4, 2020

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is used for division, it is the dimension of the channel, so 0 means N, 3 means C. It means no division for these two channels. (only for H and W)

value=1)
new_shape_x = oopb.apply_div([shape_x] + padded_block_prod,
name=operator.full_name + '_div')
concat_new_shape_x = oopb.apply_concat(block_shape + new_shape_x,
name=operator.full_name + '_concat',
axis=0)
reshaped_x = oopb.apply_reshape([operator.inputs[0].full_name] + concat_new_shape_x,
name=operator.full_name + '_reshape_0')
reshaped_x = oopb.apply_reshape([operator.inputs[0].full_name],
name=operator.full_name + '_reshape_0',
desired_shape=concat_new_shape_x[0])
transposed_x = oopb.apply_transpose(reshaped_x,
name=operator.full_name + '_transpose_0',
perm=[2, 3, 0, 4, 1, 5])
padded_block_shape = oopb.apply_pad([block_shape[0],
('const_one_one', oopb.int64, np.array([1, 1], dtype='int64')),
('one', oopb.int64, np.array([1], dtype='int64'))],
name=operator.full_name + '_pad_1')
padded_block_shape = oopb.apply_pad(block_shape,
name = operator.full_name + '_pad_1',
pads=[1, 1],
value=1)
new_shape_x_v2 = oopb.apply_mul(new_shape_x + padded_block_shape,
name=operator.full_name + '_mul_1')
reshaped_x_v2 = oopb.apply_reshape(transposed_x + new_shape_x_v2,
name=operator.full_name + '_reshape_1')
reshaped_x_v2 = oopb.apply_reshape(transposed_x,
name=operator.full_name + '_reshape_1',
desired_shape=new_shape_x_v2[0])
transposed_crop = oopb.apply_transpose(crop,
name=operator.full_name + '_transpose_1',
perm=[1, 0])
slice_crop_starts = oopb.apply_slice(transposed_crop,
name=operator.full_name + '_slice_starts',
starts=[0, 0], ends=[1, 2])
reshaped_slice_crop_starts = oopb.apply_reshape(slice_crop_starts +
[('const_one_one', oopb.int64, np.array([2], dtype='int64'))],
name=operator.full_name + '_reshape_starts')
reshaped_slice_crop_starts = oopb.apply_reshape(slice_crop_starts,
name=operator.full_name + '_reshape_starts',
desired_shape=[2])
slice_crop_ends = oopb.apply_slice(transposed_crop,
name=operator.full_name + '_slice_ends',
starts=[1, 0], ends=[2, 2])
reshaped_slice_crop_ends = oopb.apply_reshape(slice_crop_ends +
[('const_two', oopb.int64, np.array([2], dtype='int64'))],
name=operator.full_name + '_reshape_ends')
reshaped_slice_crop_ends = oopb.apply_reshape(slice_crop_ends,
name=operator.full_name + '_reshape_ends',
desired_shape=[2])
sliced_new_shape_x_v2 = oopb.apply_slice(new_shape_x_v2,
name=operator.full_name + '_slice_3',
starts=[1], ends=[3])
Expand Down Expand Up @@ -224,9 +226,9 @@ def convert_tf_space_to_batch(scope, operator, container):
transposed_concated_pad_x_v2 = oopb.apply_transpose(concated_pad_x_v2,
name=operator.full_name + '_transpose_0',
perm=[1, 0])
reshaped_transposed_pad_x = oopb.apply_reshape(transposed_concated_pad_x_v2 +
[('_const_eight', oopb.int64, np.array([8], dtype='int64'))],
name=operator.full_name + '_reshape_0')
reshaped_transposed_pad_x = oopb.apply_reshape(transposed_concated_pad_x_v2,
name=operator.full_name + '_reshape_0',
desired_shape=[8])
padded_input_x = oopb.apply_pad(operator.inputs[0].full_name,
name=operator.full_name + '_pad_1',
pads=reshaped_transposed_pad_x)
Expand Down Expand Up @@ -260,8 +262,9 @@ def convert_tf_space_to_batch(scope, operator, container):
new_shape_x_v2 = oopb.apply_concat(new_first_row_new_shape_x + new_second_row_new_shape_x,
name=operator.full_name + '_concat_shape',
axis=0)
new_x = oopb.apply_reshape(padded_input_x + new_shape_x_v2,
name=operator.full_name + '_reshape_new_x')
new_x = oopb.apply_reshape(padded_input_x[0],
name=operator.full_name + '_reshape_new_x',
desired_shape=new_shape_x_v2[0])
transposed_new_x = oopb.apply_transpose(new_x,
name=operator.full_name + '_transpose_new',
perm=[2, 4, 0, 1, 3, 5])
Expand Down
5 changes: 4 additions & 1 deletion keras2onnx/ke2onnx/layer_spec.py
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,10 @@ def _conv_layer_spec_outputs(layer, node):
return node.name[:ri + 1] + node_act
else:
if not layer.use_bias:
return node.name
if node.inputs[0].op.type == 'SpaceToBatchND':
return node.name + '/BatchToSpaceND'
else:
return node.name
else:
ri = node.name.rindex('/')
return node.name[:ri + 1] + 'BiasAdd'
Expand Down
5 changes: 3 additions & 2 deletions tests/test_layers.py
Original file line number Diff line number Diff line change
Expand Up @@ -192,12 +192,13 @@ def my_func_2(x):
assert runner('onnx_concat', onnx_model, [data1, data2], expected)


def test_depthwise_conv2d(runner):
@pytest.mark.parametrize("use_bias", [True, False])
def test_depthwise_conv2d(runner, use_bias):
model = Sequential()
model.add(InputLayer(input_shape=(8, 8, 2)))
model.add(keras.layers.DepthwiseConv2D(
kernel_size=(3, 3), strides=(1, 1), padding="VALID",
data_format='channels_last'))
data_format='channels_last', use_bias=use_bias))
onnx_model = keras2onnx.convert_keras(model, 'test_depthwise_conv2d')
data = np.random.rand(3, 8, 8, 2).astype(np.float32)
expected = model.predict(data)
Expand Down