Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Pytorch Conv Transpose Padding Fix #7958

Merged
merged 133 commits into from
May 14, 2021
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
133 commits
Select commit Hold shift + click to select a range
9b9a6ed
fix conv transpose import from TF
Mar 19, 2020
b048335
Merge branch 'master' of https://github.com/apache/incubator-tvm
Mar 19, 2020
63de7e9
Merge branch 'master' of https://github.com/apache/incubator-tvm
Mar 27, 2020
701e73d
Merge branch 'master' of https://github.com/apache/incubator-tvm
Apr 3, 2020
5d7ac32
Merge branch 'master' of https://github.com/apache/incubator-tvm
Apr 6, 2020
fcd2235
Merge branch 'master' of https://github.com/apache/incubator-tvm
Apr 8, 2020
e774bae
Merge branch 'master' of bitbucket.org:sima-ai/tvm
Jul 16, 2020
340abcd
Merge branch 'master' of https://github.com/apache/incubator-tvm
Jul 16, 2020
88352a5
Merge branch 'master' of https://github.com/apache/incubator-tvm
Jul 17, 2020
8157551
Merge branch 'master' of https://github.com/apache/incubator-tvm
Jul 26, 2020
6ef3f53
Merge branch 'master' of https://github.com/apache/incubator-tvm
Jul 29, 2020
11b0ffc
Merge remote-tracking branch 'origin/master'
Jul 30, 2020
82b22b0
Merge branch 'master' of https://github.com/apache/incubator-tvm
Jul 31, 2020
ed34207
Merge branch 'master' of https://github.com/apache/incubator-tvm
Aug 3, 2020
3374d22
Merge branch 'master' of https://github.com/apache/incubator-tvm
Aug 6, 2020
37e0b58
Merge branch 'master' of https://github.com/apache/incubator-tvm
Aug 10, 2020
afc4977
Merge remote-tracking branch 'origin/master'
Aug 24, 2020
e17c508
Merge branch 'master' of https://github.com/apache/incubator-tvm
Aug 27, 2020
62bc671
Merge branch 'master' of https://github.com/apache/incubator-tvm
Aug 31, 2020
3b94d83
Merge branch 'master' of https://github.com/apache/incubator-tvm
Sep 1, 2020
7b9bbee
Merge branch 'master' of https://github.com/apache/incubator-tvm
Sep 2, 2020
a615e4e
Merge branch 'master' of https://github.com/apache/incubator-tvm
Sep 9, 2020
eec4cd1
Merge branch 'master' of https://github.com/apache/incubator-tvm
Sep 9, 2020
b0aaccd
Merge branch 'master' of https://github.com/apache/incubator-tvm
Sep 10, 2020
09dd596
Merge branch 'master' of https://github.com/apache/incubator-tvm
Sep 11, 2020
5617eba
Merge branch 'master' of https://github.com/apache/incubator-tvm
Sep 12, 2020
f444df8
Merge branch 'master' of https://github.com/apache/incubator-tvm
Sep 13, 2020
098153f
Merge branch 'master' of https://github.com/apache/incubator-tvm
Sep 14, 2020
6fefb22
Merge branch 'master' of https://github.com/apache/incubator-tvm
Sep 15, 2020
9487da8
Merge branches 'master' and 'master' of https://github.com/apache/inc…
Sep 15, 2020
79be4d6
Merge branches 'master' and 'master' of https://github.com/apache/inc…
Sep 18, 2020
e5dcf51
Merge branch 'master' of https://github.com/apache/incubator-tvm
Sep 20, 2020
def775b
Merge branch 'master' of https://github.com/apache/incubator-tvm
Sep 20, 2020
53815e8
Merge branches 'master' and 'master' of https://github.com/apache/inc…
Sep 22, 2020
b6b920d
Merge branch 'master' of https://github.com/apache/incubator-tvm
Sep 23, 2020
15584c2
Merge branches 'master' and 'master' of https://github.com/apache/inc…
Sep 23, 2020
785b485
Merge branches 'master' and 'master' of https://github.com/apache/inc…
Sep 27, 2020
961497f
Merge branch 'master' of https://github.com/apache/incubator-tvm
Sep 28, 2020
f762ff4
Merge branch 'master' of https://github.com/apache/incubator-tvm
Oct 2, 2020
329f93b
Merge branches 'master' and 'master' of https://github.com/apache/inc…
Oct 2, 2020
a11d59e
Merge branch 'master' of https://github.com/apache/incubator-tvm
Oct 8, 2020
a3f2e57
Merge branch 'master' of https://github.com/apache/incubator-tvm
Oct 10, 2020
a56abe7
Merge branch 'master' of https://github.com/apache/incubator-tvm
Oct 11, 2020
61b6e6f
Merge branch 'main' of https://github.com/apache/incubator-tvm
Oct 13, 2020
38a1503
Merge branch 'main' of https://github.com/apache/incubator-tvm
Oct 14, 2020
639b0ea
Merge branch 'main' of https://github.com/apache/incubator-tvm
Oct 19, 2020
09ebb5a
Merge branch 'main' of https://github.com/apache/incubator-tvm
Oct 24, 2020
d84be7e
Merge branch 'main' of https://github.com/apache/incubator-tvm
Oct 26, 2020
4279984
Merge branch 'main' of https://github.com/apache/incubator-tvm
Oct 29, 2020
a27ce88
Merge branch 'main' of https://github.com/apache/incubator-tvm
Nov 3, 2020
695da72
Merge branch 'main' of https://github.com/apache/incubator-tvm
Nov 4, 2020
1372b43
fix String::fromwe() to String::from()
Nov 4, 2020
9397156
Merge branch 'main' of https://github.com/apache/incubator-tvm
Nov 8, 2020
11a22e5
Merge branch 'main' of https://github.com/apache/incubator-tvm
Nov 10, 2020
bda5d54
Merge branches 'main' and 'main' of https://github.com/apache/incubat…
Nov 11, 2020
097142a
Merge branch 'main' of https://github.com/apache/incubator-tvm
Nov 13, 2020
099246d
Merge branch 'main' of https://github.com/apache/incubator-tvm
Nov 15, 2020
8489fab
Merge branch 'main' of https://github.com/apache/incubator-tvm
Nov 16, 2020
acedc6e
Merge branch 'main' of https://github.com/apache/incubator-tvm
Nov 21, 2020
cde9c52
Merge branch 'main' of https://github.com/apache/incubator-tvm
Nov 23, 2020
5a2d618
Merge branch 'main' of https://github.com/apache/incubator-tvm
Dec 1, 2020
0505065
Merge branch 'main' of https://github.com/apache/incubator-tvm
Dec 2, 2020
322da53
Merge branch 'main' of https://github.com/apache/incubator-tvm
Dec 8, 2020
c7a9522
Merge branch 'main' of https://github.com/apache/incubator-tvm
Dec 9, 2020
c46ace8
Merge branch 'main' of https://github.com/apache/incubator-tvm
Dec 9, 2020
c5f4254
Merge branch 'main' of https://github.com/apache/incubator-tvm
Dec 10, 2020
b6186ba
Merge branch 'main' of https://github.com/apache/incubator-tvm
Dec 11, 2020
122fa7f
Merge branch 'main' of https://github.com/apache/incubator-tvm
Dec 14, 2020
4922758
Merge branch 'main' of https://github.com/apache/incubator-tvm
Dec 15, 2020
6c7730d
Merge branch 'main' of https://github.com/apache/incubator-tvm
Dec 16, 2020
50aee3a
Merge branch 'main' of https://github.com/apache/incubator-tvm
Dec 18, 2020
e8a0f74
Merge branch 'main' of https://github.com/apache/incubator-tvm
Dec 18, 2020
6b242d7
Merge branch 'main' of https://github.com/apache/incubator-tvm
Dec 22, 2020
ca082d1
Merge branch 'main' of https://github.com/apache/incubator-tvm
Dec 23, 2020
fcc8435
Merge branch 'main' of https://github.com/apache/incubator-tvm
Dec 23, 2020
697582c
Merge branch 'main' of https://github.com/apache/incubator-tvm
Dec 24, 2020
8f9e502
Merge branch 'main' of https://github.com/apache/incubator-tvm
Dec 24, 2020
0399b39
Merge branches 'main' and 'main' of https://github.com/apache/incubat…
Dec 25, 2020
6d765df
Merge branch 'main' of https://github.com/apache/incubator-tvm
Dec 27, 2020
9c33a9d
Merge branch 'main' of https://github.com/apache/incubator-tvm
Jan 2, 2021
d75d015
Merge branch 'main' of https://github.com/apache/incubator-tvm
Jan 4, 2021
2d305c6
Merge branch 'main' of https://github.com/apache/incubator-tvm
Jan 6, 2021
dac65f6
Merge branch 'main' of https://github.com/apache/incubator-tvm
Jan 7, 2021
e1f5581
Merge branch 'main' of https://github.com/apache/incubator-tvm
Jan 8, 2021
7a1ab3d
Merge branch 'main' of https://github.com/apache/incubator-tvm
Jan 9, 2021
b260e57
Merge branch 'main' of https://github.com/apache/incubator-tvm
Jan 14, 2021
3f36b94
Merge branch 'main' of https://github.com/apache/incubator-tvm
Jan 16, 2021
000a3bf
Merge branch 'main' of https://github.com/apache/incubator-tvm
Jan 20, 2021
f3e535e
Merge branch 'main' of https://github.com/apache/incubator-tvm
Jan 21, 2021
1ae424a
Merge branch 'main' of https://github.com/apache/incubator-tvm
Jan 21, 2021
180888f
Merge branch 'main' of https://github.com/apache/incubator-tvm
Jan 22, 2021
706240e
Merge branch 'main' of https://github.com/apache/incubator-tvm
Jan 22, 2021
2b6805a
Merge branch 'main' of https://github.com/apache/incubator-tvm
Jan 24, 2021
7fabfde
Merge branch 'main' of https://github.com/apache/incubator-tvm
Jan 27, 2021
10af41c
Merge branch 'main' of https://github.com/apache/incubator-tvm
Jan 28, 2021
34da771
Merge branch 'main' of https://github.com/apache/incubator-tvm
Jan 30, 2021
2e0f6aa
Merge branch 'main' of https://github.com/apache/incubator-tvm
Feb 1, 2021
ea04a97
Merge branch 'main' of https://github.com/apache/incubator-tvm into main
Feb 2, 2021
3401f3a
Merge branch 'main' of https://github.com/apache/incubator-tvm into main
Feb 5, 2021
26d2ca0
Merge branch 'main' of https://github.com/apache/incubator-tvm into main
Feb 9, 2021
2e7b779
Merge branch 'main' of https://github.com/apache/incubator-tvm into main
Feb 10, 2021
28e8bb9
Merge branch 'main' of https://github.com/apache/incubator-tvm into main
Feb 12, 2021
7e7ceaa
Merge branch 'main' of https://github.com/apache/incubator-tvm into main
Feb 12, 2021
9fb7e02
Merge branch 'main' of https://github.com/apache/incubator-tvm into main
Feb 16, 2021
ff76756
Merge branch 'main' of https://github.com/apache/incubator-tvm into main
Feb 17, 2021
4c5b0e4
Merge branch 'main' of https://github.com/apache/incubator-tvm into main
Feb 20, 2021
b3d3822
Merge branch 'main' of https://github.com/apache/incubator-tvm into main
Feb 21, 2021
4ecc603
Merge branch 'main' of https://github.com/apache/incubator-tvm into main
Feb 23, 2021
e1f31be
Merge branch 'main' of https://github.com/apache/incubator-tvm into main
Feb 26, 2021
92ecf2d
Merge branch 'main' of https://github.com/apache/incubator-tvm into main
Mar 2, 2021
be08663
Merge branch 'main' of https://github.com/apache/incubator-tvm into main
Mar 6, 2021
de47287
Merge branch 'main' of https://github.com/apache/incubator-tvm into main
Mar 9, 2021
8ca7f46
Merge branch 'main' of https://github.com/apache/incubator-tvm into main
Mar 13, 2021
9e7adf2
Merge commit 'e697f03539acce7a6ed78eb7757c207398dd6b72' into sima/main
Mar 17, 2021
a0a5a9b
Merge branch 'main' into sima/main
Mar 17, 2021
e9d8816
Merge branch 'main' into sima/main
Mar 19, 2021
37d1e19
Merge branch 'main' into sima/main
Mar 22, 2021
44b54d1
Merge remote-tracking branch 'tvm-source/main' into SYSOL-584-pytorch…
Jeffrey-Sima Mar 23, 2021
7f0452e
* fixing pytorch converter to take into account the output_padding pa…
Jeffrey-Sima Mar 25, 2021
d78600a
Merge remote-tracking branch 'tvm-source/main' into upstream
Jeffrey-Sima Mar 25, 2021
87e1b0f
Merge remote-tracking branch 'origin/upstream' into SYSOL-584-pytorch…
Jeffrey-Sima Mar 25, 2021
8b47c03
* removing print statements used for debugging
Jeffrey-Sima Mar 25, 2021
3e68e6a
* fixing typos and formatting
Jeffrey-Sima Mar 25, 2021
60c4d75
* fixing formatting
Jeffrey-Sima Mar 25, 2021
b09aff4
* fixing grammar
Jeffrey-Sima Mar 25, 2021
17ab1c2
* formatting fixes
Jeffrey-Sima Apr 14, 2021
213886b
Merge remote-tracking branch 'tvm-source/main' into SYSOL-584-pytorch…
Jeffrey-Sima Apr 22, 2021
72f957b
Merge remote-tracking branch 'tvm-source/main' into upstream
Jeffrey-Sima Apr 22, 2021
aa61558
Merged in SYSOL-584-pytorch-conv-transpose-pad-fix (pull request #34)
Jeffrey-Sima Apr 22, 2021
b298cad
* updated formatting after running pylint and python_format checks
Jeffrey-Sima Apr 27, 2021
2ec52d6
Merge remote-tracking branch 'tvm-source/main' into pytorch-convtrans…
Jeffrey-Sima Apr 30, 2021
7eff2a8
Merge remote-tracking branch 'tvm-jeff-sima/main' into pytorch-convtr…
Jeffrey-Sima May 5, 2021
3cae2d2
Merge remote-tracking branch 'tvm-jeff-sima/main' into pytorch-convtr…
Jeffrey-Sima May 14, 2021
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
45 changes: 34 additions & 11 deletions python/tvm/relay/frontend/pytorch.py
Original file line number Diff line number Diff line change
Expand Up @@ -977,32 +977,52 @@ def convolution(self, inputs, input_types):
kernel_size = weight_shape[2:]
use_bias = isinstance(bias, _expr.Expr)

if len(kernel_size) == 1:
strides = (1,) + strides
padding = (0,) + padding
dilation = (1,) + dilation
# We are trying to invoke various relay operations through a single conv_op variable.
# However the function signatures for some operations have additional attributes so we
# pass these in along with the standard ones.
additional_arguments = dict()

if use_transpose:
if len(kernel_size) == 3:
conv_op = _op.nn.conv3d_transpose
else:
elif len(kernel_size) == 2:
conv_op = _op.nn.conv2d_transpose
else:
conv_op = _op.nn.conv1d_transpose
output_padding = tuple(inputs[7])
additional_arguments["output_padding"] = output_padding

else:
if len(kernel_size) == 3:
conv_op = _op.nn.conv3d
else:
elif len(kernel_size) == 2:
conv_op = _op.nn.conv2d
else:
conv_op = _op.nn.conv1d

if len(kernel_size) == 3:
data_layout = "NCDHW"
kernel_layout = "OIDHW"
else:
elif len(kernel_size) == 2:
data_layout = "NCHW"
kernel_layout = "OIHW"

if len(kernel_size) == 1:
else:
data_layout = "NCW"
kernel_layout = "OIW"

# Conv1d does not currently support grouped convolution so we convert it to conv2d
is_grouped_conv1d = False
if groups > 1 and len(kernel_size) == 1 and not use_transpose:
is_grouped_conv1d = True
conv_op = _op.nn.conv2d
kernel_size = [1] + kernel_size
strides = (1,) + strides
padding = (0,) + padding
dilation = (1,) + dilation
data = _op.expand_dims(data, axis=2)
weight = _op.expand_dims(weight, axis=2)
data_layout = "NCHW"
kernel_layout = "OIHW"

conv_out = conv_op(
data,
Expand All @@ -1012,17 +1032,20 @@ def convolution(self, inputs, input_types):
dilation=dilation,
groups=groups,
channels=channels,
kernel_size=[1] + kernel_size if len(kernel_size) == 1 else kernel_size,
kernel_size=kernel_size,
data_layout=data_layout,
kernel_layout=kernel_layout,
out_layout="",
out_dtype="",
**additional_arguments,
)
if use_bias:
res = _op.nn.bias_add(conv_out, bias)
else:
res = conv_out
if len(kernel_size) == 1:
if is_grouped_conv1d:
# Because we conducted grouped conv1d convolution through conv2d we must
# squeeze the output to get the correct result.
res = _op.squeeze(res, axis=[2])
return res

Expand Down
65 changes: 56 additions & 9 deletions tests/python/frontend/pytorch/test_forward.py
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,7 @@
from tvm import relay
from tvm.contrib import graph_executor
from tvm.contrib.nvcc import have_fp16
import pytest

sys.setrecursionlimit(10000)

Expand Down Expand Up @@ -965,17 +966,63 @@ def forward(self, *args):


@tvm.testing.uses_gpu
def test_forward_conv_transpose():
torch.set_grad_enabled(False)
conv2d_input_shape = [1, 3, 10, 10]
@pytest.mark.parametrize("in_channels", [3], ids=lambda x: "in_channels=" + str(x))
@pytest.mark.parametrize("out_channels", [5], ids=lambda x: "out_channels=" + str(x))
@pytest.mark.parametrize("kernel_size", [3], ids=lambda x: "kernel_size=" + str(x))
@pytest.mark.parametrize("output_padding", [0, 1, 2], ids=lambda x: "output_padding=" + str(x))
@pytest.mark.parametrize("groups", [1], ids=lambda x: "groups=" + str(x))
@pytest.mark.parametrize("bias", [True, False], ids=lambda x: "bias=" + str(x))
def test_forward_conv_transpose(
in_channels, out_channels, kernel_size, output_padding, bias, groups
):
# Note we do not test with groups > 1 because that is not supported
# in tvm for conv transpose operations

# Output padding must be smaller than either stride or dilation so we
# opt to make the stride 1 + output padding
stride = output_padding + 1

# Conv 3D Transpose Tests
conv3d_input_shape = [1, in_channels, 16, 16, 16]
conv3d_input_data = torch.rand(conv3d_input_shape).float()
conv3d_transpose = torch.nn.ConvTranspose3d(
in_channels=in_channels,
out_channels=out_channels,
kernel_size=kernel_size,
stride=stride,
output_padding=output_padding,
groups=groups,
bias=bias,
).eval()
verify_model(conv3d_transpose, conv3d_input_data)

# Conv 2D Transpose Tests
conv2d_input_shape = [1, in_channels, 128, 256]
conv2d_input_data = torch.rand(conv2d_input_shape).float()
verify_model(torch.nn.ConvTranspose2d(3, 6, 7, bias=True), input_data=conv2d_input_data)
verify_model(torch.nn.ConvTranspose2d(3, 12, 3, bias=False), input_data=conv2d_input_data)

conv1d_input_shape = [1, 3, 10]
conv2d_transpose = torch.nn.ConvTranspose2d(
in_channels=in_channels,
out_channels=out_channels,
kernel_size=kernel_size,
stride=stride,
output_padding=output_padding,
groups=groups,
bias=bias,
).eval()
verify_model(conv2d_transpose, conv2d_input_data)

# # Conv 1D Transpose Tests
conv1d_input_shape = [1, in_channels, 10]
conv1d_input_data = torch.rand(conv1d_input_shape).float()
verify_model(torch.nn.ConvTranspose1d(3, 6, 7, bias=True), input_data=conv1d_input_data)
verify_model(torch.nn.ConvTranspose1d(3, 12, 3, bias=False), input_data=conv1d_input_data)
conv1d_transpose = torch.nn.ConvTranspose1d(
in_channels=in_channels,
out_channels=out_channels,
kernel_size=kernel_size,
stride=stride,
output_padding=output_padding,
groups=groups,
bias=bias,
).eval()
verify_model(conv1d_transpose, conv1d_input_data)


def test_forward_deform_conv():
Expand Down