mirror of
https://github.com/huggingface/pytorch-image-models.git
synced 2025-06-03 15:01:08 +08:00
Update EcaModule.py
Make pylint happy (commas, unused imports, missed imports)
This commit is contained in:
parent
db91ba053b
commit
904c618040
@ -1,17 +1,17 @@
|
||||
'''
|
||||
ECA module from ECAnet
|
||||
ECA module from ECAnet
|
||||
original paper: ECA-Net: Efficient Channel Attention for Deep Convolutional Neural Networks
|
||||
https://arxiv.org/abs/1910.03151
|
||||
|
||||
https://github.com/BangguWu/ECANet
|
||||
original ECA model borrowed from original github
|
||||
modified circular ECA implementation and
|
||||
modified circular ECA implementation and
|
||||
adoptation for use in pytorch image models package
|
||||
by Chris Ha https://github.com/VRandme
|
||||
|
||||
MIT License
|
||||
|
||||
Copyright (c) 2019 BangguWu, Qilong Wang
|
||||
Copyright (c) 2019 BangguWu, Qilong Wang
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
@ -31,10 +31,8 @@ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
||||
'''
|
||||
import torch
|
||||
from torch import nn
|
||||
from torch.nn.parameter import Parameter
|
||||
|
||||
import torch.nn.functional as F
|
||||
|
||||
class EcaModule(nn.Module):
|
||||
"""Constructs a ECA module.
|
||||
@ -47,7 +45,7 @@ class EcaModule(nn.Module):
|
||||
super(EcaModule, self).__init__()
|
||||
assert k_size % 2 == 1
|
||||
self.avg_pool = nn.AdaptiveAvgPool2d(1)
|
||||
self.conv = nn.Conv1d(1, 1, kernel_size=k_size, padding=(k_size - 1) // 2, bias=False)
|
||||
self.conv = nn.Conv1d(1, 1, kernel_size=k_size, padding=(k_size - 1) // 2, bias=False)
|
||||
self.sigmoid = nn.Sigmoid()
|
||||
def forward(self, x):
|
||||
# feature descriptor on the global spatial information
|
||||
@ -82,11 +80,11 @@ class EcaModule(nn.Module):
|
||||
class CecaModule(nn.Module):
|
||||
"""Constructs a circular ECA module.
|
||||
the primary difference is that the conv uses a circular padding rather than zero padding.
|
||||
This is because unlike images, the channels themselves do not have inherent ordering nor
|
||||
This is because unlike images, the channels themselves do not have inherent ordering nor
|
||||
locality. Although this module in essence, applies such an assumption, it is unnecessary
|
||||
to limit the channels on either "edge" from being circularly adapted to each other.
|
||||
This will fundamentally increase connectivity and possibly increase performance metrics
|
||||
(accuracy, robustness), without signficantly impacting resource metrics
|
||||
(accuracy, robustness), without signficantly impacting resource metrics
|
||||
(parameter size, throughput,latency, etc)
|
||||
|
||||
Args:
|
||||
@ -100,16 +98,16 @@ class CecaModule(nn.Module):
|
||||
#pytorch circular padding mode is bugged as of pytorch 1.4
|
||||
# see https://github.com/pytorch/pytorch/pull/17240
|
||||
#implement manual circular padding
|
||||
self.conv = nn.Conv1d(1, 1, kernel_size=k_size, padding = 0, bias=False)
|
||||
self.conv = nn.Conv1d(1, 1, kernel_size=k_size, padding=0, bias=False)
|
||||
self.padding = (k_size - 1) // 2
|
||||
self.sigmoid = nn.Sigmoid()
|
||||
|
||||
def forward(self, x):
|
||||
# feature descriptor on the global spatial information
|
||||
y = self.avg_pool(x)
|
||||
|
||||
|
||||
#manually implement circular padding, F.pad does not seemed to be bugged
|
||||
y = F.pad(y.view(x.shape[0],1,-1),(self.padding,self.padding),mode='circular')
|
||||
y = F.pad(y.view(x.shape[0], 1, -1), (self.padding, self.padding), mode='circular')
|
||||
|
||||
# Two different branches of ECA module
|
||||
y = self.conv(y)
|
||||
|
Loading…
x
Reference in New Issue
Block a user