From c749a58d6f003639eb4a0478f5f07490414ec525 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=BB=84=E4=B8=8D=E7=9B=88?= <33193090+YellowAndGreen@users.noreply.github.com> Date: Fri, 9 Sep 2022 21:28:00 +0800 Subject: [PATCH 1/5] added dilate conv support --- models/common.py | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/models/common.py b/models/common.py index 7ac3a4a29672..3a14c3253c72 100644 --- a/models/common.py +++ b/models/common.py @@ -28,7 +28,9 @@ from utils.torch_utils import copy_attr, smart_inference_mode -def autopad(k, p=None): # kernel, padding +def autopad(k, p=None, d=1): # kernel, padding + if d > 1: + k = d*(k-1)+1 if isinstance(k, int) else [d*(x-1)+1 for x in k] # actual kernel-size # Pad to 'same' if p is None: p = k // 2 if isinstance(k, int) else [x // 2 for x in k] # auto-pad @@ -37,9 +39,9 @@ def autopad(k, p=None): # kernel, padding class Conv(nn.Module): # Standard convolution - def __init__(self, c1, c2, k=1, s=1, p=None, g=1, act=True): # ch_in, ch_out, kernel, stride, padding, groups + def __init__(self, c1, c2, k=1, s=1, p=None, g=1, d=1, act=True): # ch_in, ch_out, kernel, stride, padding, groups super().__init__() - self.conv = nn.Conv2d(c1, c2, k, s, autopad(k, p), groups=g, bias=False) + self.conv = nn.Conv2d(c1, c2, k, s, autopad(k, p, d), groups=g, dilation=d, bias=False) self.bn = nn.BatchNorm2d(c2) self.act = nn.SiLU() if act is True else (act if isinstance(act, nn.Module) else nn.Identity()) From 64df2bb0e216c98a49ce1312f5b7a7ca6c6391bb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=BB=84=E4=B8=8D=E7=9B=88?= <33193090+YellowAndGreen@users.noreply.github.com> Date: Fri, 9 Sep 2022 21:29:55 +0800 Subject: [PATCH 2/5] added dilate conv support --- utils/torch_utils.py | 1 + 1 file changed, 1 insertion(+) diff --git a/utils/torch_utils.py b/utils/torch_utils.py index abf0bbc19a98..8a3366ca3e27 100644 --- a/utils/torch_utils.py +++ b/utils/torch_utils.py @@ -251,6 +251,7 @@ def fuse_conv_and_bn(conv, bn): kernel_size=conv.kernel_size, stride=conv.stride, padding=conv.padding, + dilation=conv.dilation, groups=conv.groups, bias=True).requires_grad_(False).to(conv.weight.device) From 30d719f9191b023f2ca7acf0d29be20f7656d58f Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Fri, 9 Sep 2022 13:40:03 +0000 Subject: [PATCH 3/5] [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --- models/common.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/models/common.py b/models/common.py index 3a14c3253c72..364d1d5d757e 100644 --- a/models/common.py +++ b/models/common.py @@ -30,7 +30,7 @@ def autopad(k, p=None, d=1): # kernel, padding if d > 1: - k = d*(k-1)+1 if isinstance(k, int) else [d*(x-1)+1 for x in k] # actual kernel-size + k = d * (k - 1) + 1 if isinstance(k, int) else [d * (x - 1) + 1 for x in k] # actual kernel-size # Pad to 'same' if p is None: p = k // 2 if isinstance(k, int) else [x // 2 for x in k] # auto-pad From db9470f57daebcd6e2bdada910f56ff99da44b97 Mon Sep 17 00:00:00 2001 From: Glenn Jocher Date: Sat, 10 Sep 2022 00:10:31 +0300 Subject: [PATCH 4/5] Update common.py --- models/common.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/models/common.py b/models/common.py index 364d1d5d757e..802c301c7f4f 100644 --- a/models/common.py +++ b/models/common.py @@ -28,10 +28,10 @@ from utils.torch_utils import copy_attr, smart_inference_mode -def autopad(k, p=None, d=1): # kernel, padding +def autopad(k, p=None, d=1): # kernel, padding, dilation + # Pad to 'same' shape outputs if d > 1: k = d * (k - 1) + 1 if isinstance(k, int) else [d * (x - 1) + 1 for x in k] # actual kernel-size - # Pad to 'same' if p is None: p = k // 2 if isinstance(k, int) else [x // 2 for x in k] # auto-pad return p From eb45e6d32389deb51a5ace6683f4b08370cd3c4b Mon Sep 17 00:00:00 2001 From: Glenn Jocher Date: Sat, 10 Sep 2022 00:12:52 +0300 Subject: [PATCH 5/5] Update common.py --- models/common.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/models/common.py b/models/common.py index 802c301c7f4f..c30c8ee94777 100644 --- a/models/common.py +++ b/models/common.py @@ -38,8 +38,8 @@ def autopad(k, p=None, d=1): # kernel, padding, dilation class Conv(nn.Module): - # Standard convolution - def __init__(self, c1, c2, k=1, s=1, p=None, g=1, d=1, act=True): # ch_in, ch_out, kernel, stride, padding, groups + # Standard convolution with args(ch_in, ch_out, kernel, stride, padding, groups, dilation, activation) + def __init__(self, c1, c2, k=1, s=1, p=None, g=1, d=1, act=True): super().__init__() self.conv = nn.Conv2d(c1, c2, k, s, autopad(k, p, d), groups=g, dilation=d, bias=False) self.bn = nn.BatchNorm2d(c2) @@ -53,13 +53,13 @@ def forward_fuse(self, x): class DWConv(Conv): - # Depth-wise convolution class + # Depth-wise convolution def __init__(self, c1, c2, k=1, s=1, act=True): # ch_in, ch_out, kernel, stride, padding, groups super().__init__(c1, c2, k, s, g=math.gcd(c1, c2), act=act) class DWConvTranspose2d(nn.ConvTranspose2d): - # Depth-wise transpose convolution class + # Depth-wise transpose convolution def __init__(self, c1, c2, k=1, s=1, p1=0, p2=0): # ch_in, ch_out, kernel, stride, padding, padding_out super().__init__(c1, c2, k, s, p1, p2, groups=math.gcd(c1, c2))