用了timm的ECA模块?你的通道注意力可能根本没起作用
前言:你的代码库里可能藏着一个被12000人忽视的错误。ECA-Net——被引用超过12000次、集成在HuggingFace timm库(37k Star)中、几乎所有CV工程师都在用的通道注意力模块——它的核心假设可能从一开始就不成立。有人用六组对照实验做了验证,结果让人脊背发凉:去掉"通道间交互"后,性能几乎不变——而最简单的逐通道缩放方案,损失反而最低。
本文适合谁看:用过timm库的CV工程师 / 对注意力机制感兴趣的研究者 / 想了解如何做消融实验的同学
速览:3分钟看懂这篇为什么和你有关
| 关键信息 | 详情 |
|---|---|
| 论文对象 | ECA-Net(arXiv:1910.03151),CVPR 2020,引用量12k+ |
| 核心假设 | "跨通道交互"是ECA性能提升的关键 |
| 实验结论 | 去掉跨通道交互(k=1),性能几乎不降;最简单的逐通道缩放损失最低 |
| 涉及代码 | HuggingFace timm(37k Star)、ECA-Net官方仓库(1.4k Star) |
| 实验方法 | 用国际象棋6子残局库(3.7万亿种局面)做受控对照实验 |
| 你可能中招吗 | 如果你用timm做图像分类/检测/分割——答案几乎一定是"是" |
| 现在该做什么 | 1.检查你的模型是否用了ECA 2.考虑用更简单的替代方案 3.对"经典论文"保持怀疑 |
如果你用过 HuggingFace 的
timm库做图像分类,如果你在 ResNet/EfficientNet/MobileNet 上用过SE或ECA通道注意力模块,如果你的模型在 ImageNet 上刷过榜——那你几乎一定用过这篇论文的成果。而它的核心假设,可能从一开始就是错的。
你以为你加的是"注意力机制",实际上你可能只是加了一堆没用的卷积。
01 | 12000次引用——一个无人质疑的"真理"
2019年10月,一篇论文出现在 arXiv 上。
标题:“ECA-Net: Efficient Channel Attention for Deep Convolutional Neural Networks”
作者:王启龙、吴邦国、朱鹏飞、李培华、左旺孟、胡庆华——来自天津大学(其中左旺孟同时隶属大连理工大学和哈尔滨工业大学)。2020年被 CVPR 收录。
这个故事要从2017年说起。
那一年,SE-Net横空出世,拿下 ILSVRC 2017 图像分类冠军,top-5 错误率降到 2.251%。SE-Net 的核心思路很简单:让网络学会"看哪些通道更重要"——这就是"通道注意力"。
但 SE-Net 有个毛病:它用全连接层把通道维度压缩(比如从256维压到16维),然后再恢复。这个"降维"操作带来了信息损失。
ECA-Net 的作者提出了一个看起来更优雅的方案:
不降维。直接在通道维度上做一维卷积(1D Conv),让相邻通道之间产生交互。
听起来很合理,对吧?
而且极其轻量——在 ResNet50 上只有约80个参数(主干网络 24.37M),计算量仅 4.7e-4 GFLOPs(主干 3.86 GFLOPs),Top-1准确率提升超过2%(75.20% → 77.48%)。
论文发表后,引用量一路飙升:
| 时间节点 | 引用量 |
|---|---|
| 2020年(CVPR 2020正式发表) | ~500 |
| 2022年 | ~3000 |
| 2024年 | ~8000 |
| 2026年8月 | 12,000+ |
它被集成进了 HuggingFace 的timm库——PyTorch 生态中最大的图像模型集合,37,066 个 Star,几乎所有做CV的人都在用。
它被无数论文引用为基础模块,被广泛集成进主流CV工具链。它成了"通道注意力"的代名词。
7年来,很少有人系统性地质疑过它的核心假设。
12,000次引用。3.7万亿个棋局。当"经典"遇到"实验",真相浮出水面。
02 | “被诅咒的卷积”——一个概念层面的质疑
有意思的是,timm 库自己的代码里就埋了一颗质疑的种子。
在 timm 的CecaModule(Circular ECA)实现中,开发者写下了这样一段注释:
“Unlike the spatial dimension, the channels do not have inherent ordering nor locality.”
(与空间维度不同,通道维度没有固有的顺序和局部性。)
翻译成人话就是:通道之间没有"谁挨着谁"的关系。
这段注释直指ECA-Net设计中的根本矛盾。让我拆解一下。
上图:ECA-Net的"通道间卷积"设计——在无拓扑的通道维度上做卷积,概念上说不通
卷积的前提是什么?
先问一个看似简单的问题:为什么我们使用卷积?
卷积是为有拓扑结构的数据设计的——比如空间(图像)或时间(序列)。它有两个前提:
- 局部性:相邻元素之间有交互意义(图像中相邻像素通常相关)
- 平移不变性:同一个卷积核在所有位置都适用(图像中边缘检测在任何地方都一样)
在2D图像上滑动卷积核之所以有效,是因为坐标有含义——图像的统计性质在整个画面上大致是平稳的。
如果你随机打乱图像中的像素,卷积就变得毫无意义。
那通道维度有拓扑吗?
现在想想通道维度。假设你有32个通道:
[成本、重量、材质、颜色、体积、速度、…]
在这种"表格数据"上使用CNN?一个宽度为3的1D卷积核会在通道上滑动,[成本, 重量, 材质] 是一组输入,[重量, 材质, 颜色] 也是一组输入——这些组合在语义上毫无意义。
而ECA正在做完全一样的事情。
ECA在通道维度上做1D卷积。但通道维度本质上是"表格数据"——通道0可能是"边缘检测器"、通道1可能是"纹理检测器"、通道2可能是"颜色检测器"——它们的排列顺序是网络初始化时随机决定的,不存在"通道0和通道1比通道0和通道2更相关"的内在关系。
这就是"被诅咒的卷积"(Cursed Convolution)——在一个没有拓扑结构的维度上做卷积,就像在一本字典上做傅里叶变换。
当然,神经网络是"万能拟合器",它可以通过学习来重新排列通道顺序(利用初始的 1x1 投影层),让卷积变得有用。但这极其低效——你让网络花额外的模型容量去学习一个本来不应该存在的卷积结构。
就像你把一本字典的词条随机打乱,然后在上面做卷积,指望网络学会"重新排列字典"。它能做到——但为什么要让它做这种无用功?
03 | 实验设计——为什么不用ImageNet?
传统图像数据集不适合做这种消融实验。为什么?
因为ImageNet有太多不可控因素:数据集偏差、超参数敏感、模型容量过剩。ResNet50有25.6M参数,足以拟合任何注意力模块——不管你加的是ECA还是一个随机噪声层,性能都可能提升,因为网络有足够的容量把任何模块"利用"起来。
你需要一个完全可控的测试环境。
实验者选择了国际象棋6子残局库。
上图:用国际象棋6子残局库做受控实验——3.7万亿种完整局面消除了采样偏差
为什么用国际象棋?
国际象棋是一个已解决的游戏。6子(或更少)的残局库包含了所有可能的局面——总计约3.7万亿种。
网络的任务很简单:给定一个棋盘局面,在完美对弈下,判断当前执子方是赢、和还是输。
这个任务为什么适合做基准测试?三个原因:
完整覆盖:训练样本可以从完整的问题空间中随机采样,不存在数据集偏差——你不会像在CIFAR-10里那样,无意中训练到"晴天青蛙"偏多的样本。
已知正确答案:每种局面都有确定的胜负结果,不存在标注歧义。
适合CNN:Leela Chess Zero(lc0)——曾与 Stockfish 并驾齐驱的国际象棋引擎——最初就使用CNN架构。CNN处理棋类推理的能力是被验证过的。
当你能在3.7万亿种完整局面中随机采样时,你的训练集就是真正无偏的。这在ImageNet上永远做不到。
六种通道门控方案
实验设计了6种不同的通道门控方案,从最复杂到最简单:
| 编号 | 方案 | 描述 | 通道交互 |
|---|---|---|---|
| 1 | IdentityGate | 不做任何通道门控(对照组) | 无 |
| 2 | SqueezeExcitationGate (SE8) | 标准SE模块,降维比8 | 有(通过全连接) |
| 3 | EfficientChannelAttentionGate (k=3) | 标准ECA,卷积核大小3 | 有(通过1D卷积) |
| 4 | EfficientChannelAttentionGate (k=1) | ECA但卷积核大小1 | 无! |
| 5 | CenterMaskedECA (k=3) | ECA核大小3但中间权重置零 | 部分(只有边缘) |
| 6 | PerChannelGate | 每个通道独立学习一个权重 | 无 |
关键看点:方案4(k=1)和方案6(PerChannelGate)都没有通道间交互。
如果ECA论文的核心假设——“跨通道交互是关键”——是对的,那么这两种方案应该明显比k=3差。
事实呢?
04 | 实验结果——六组数据打脸核心假设
结果出来了。每种方案是3次以上独立运行的平均值。
| 通道门控 | 平均测试损失 | 平均测试准确率 |
|---|---|---|
| IdentityGate(不门控) | 0.0981 | 96.04% |
| SqueezeExcitationGate (SE8) | 0.0954 | 96.17% |
| EfficientChannelAttentionGate (k=3) | 0.0822 | 96.68% |
| EfficientChannelAttentionGate (k=1) | 0.0826 | 96.61% |
| CenterMaskedECA (k=3) | 0.0821 | 96.63% |
| PerChannelGate | 0.0815 | 96.65% |
上图:六种通道门控方案在3.7万亿棋局上的准确率对比——k=1与k=3几乎无差异
逐行拆解
IdentityGate——不做任何通道门控,性能最差(96.04%)。对照组,符合预期。
SE8——标准SE模块,有轻微提升(96.17%)。降维确实带来了信息损失,ECA论文批评的方向是对的。
ECA k=3——标准ECA,明显优于SE(96.68%)。和论文一致。
然后,最关键的实验来了。
ECA k=1——ECA但卷积核大小为1。
等等,卷积核大小为1意味着什么?
意味着每个通道只看自己。没有跨通道交互。kernel_size=1的1D卷积退化为一个全局共享的标量乘法——所有通道乘以同一个权重。
如果ECA的核心假设——“跨通道交互是关键”——是对的,k=1应该比k=3差很多。
但结果是:k=1的准确率是96.61%,只比k=3的96.68%低了0.07%。
0.07%。
这个差距在3次独立运行的噪声范围内。
核心假设被推翻了。跨通道交互不是ECA性能提升的关键。
那什么是?
05 | 更疯狂的实验——最简单的方案居然最好
如果k=1的结果还不够震撼,接下来两个实验更令人深思。
CenterMaskedECA:把中间通道掩掉
上图:CenterMaskedECA——将k=3卷积核的中间权重置零,只保留左右两个邻居
这个实验把ECA的k=3卷积核[w0, w1, w2]的中间权重w1永久置零,变成[w0, 0, w2]。
什么意思?当前通道只跟左右邻居交互,但不跟自己交互。
如果"跨通道交互"是关键,这个方案应该和标准k=3差不多——毕竟它仍然有通道间交互。
结果:准确率 96.63%,几乎和标准k=3的96.68%一样。
但这个结果其实让事情变得更复杂了——原帖作者指出,它暗示跨通道注意力可能确实有某种作用,只是不像ECA论文声称的那么关键。
PerChannelGate:简单到离谱的方案,损失反而最低
PerChannelGate是所有方案中最简单的——每个通道独立学一个标量权重。没有任何通道间交互,没有卷积,没有全连接。
代码就这么点(以下为PyTorch改编版,原始实验使用JAX/Flax):
classPerChannelGate(nn.Module):def__init__(self,channels):super().__init__()self.scale=nn.Parameter(torch.zeros(channels))# 初始化为0defforward(self,x):y=x.mean(dim=(2,3))# 全局平均池化y=y*self.scale# 逐通道缩放y=(2.0*torch.sigmoid(y)).unsqueeze(-1).unsqueeze(-1)# scale∈(0,2)returnx*y结果:准确率 96.65%,测试损失 0.0815——所有方案中损失最低的(但准确率并非最高,ECA k=3的96.68%略高)。
| 方案 | 通道交互 | 参数量 | 准确率 |
|---|---|---|---|
| ECA (k=3) | 有(1D卷积) | k个共享权重 | 96.68% |
| ECA (k=1) | 无 | 1个权重 | 96.61% |
| PerChannel | 无 | C个独立权重 | 96.65% |
| CenterMasked | 部分 | k-1个权重 | 96.63% |
看到了吗?
没有通道交互的方案(k=1和PerChannel),性能几乎和有交互的ECA k=3持平。PerChannel在损失上最低,但准确率略低于k=3。
这意味着什么?
ECA的性能提升可能从来不是因为"跨通道交互"。它可能只是因为——给每个通道加了一个可学习的缩放权重。
这跟SE-Net做的事情本质上一样——都是通道缩放。区别只在于SE用了全连接层(降维→升维),ECA用了1D卷积,而PerChannel直接给每个通道一个标量。
最简单的方案在损失指标上反而最好——但准确率并非最高。
如无必要,勿增复杂度。
06 | “被诅咒的卷积”——为什么它仍然有效?
上图:ECA的有效性来源——可能是1x1投影层而非卷积本身
等一下——如果跨通道交互不重要,为什么ECA在ImageNet上确实比SE好?
关键可能在于1x1投影层的隐含作用。
在标准CNN backbone中,每个stage之间都有一个1×1卷积作为投影层。这个投影层的权重会在训练过程中调整通道排列顺序,使得1D卷积在通道维度上"变得有用"——但这本质上是网络在浪费额外容量去补偿一个本不该存在的卷积结构。
打个比方:
你把一本字典的词条随机打乱,然后在上面做卷积。网络确实能学会"重新排列字典"来让卷积变得有用——但为什么要让它做这种无用功?直接给每个通道一个独立权重不香吗?
三个关键洞察:
ECA有效,但不是因为论文说的原因。跨通道交互不是关键,通道缩放才是。
1D卷积在通道维度上是一种"被诅咒的卷积"。它在一个没有拓扑的维度上做卷积,网络需要额外学习如何让它变得有用——浪费模型容量。
PerChannelGate可能更优。更简单、更高效、概念上更合理。timm库自己的代码注释已经暗示了通道维度没有固有拓扑结构这一矛盾。
ECA的1D卷积不是在做"通道间交互"——它只是在做一个低效的逐通道缩放。网络花额外能力去学习卷积核应该近似于对角矩阵,这比直接学一个标量权重低效得多。
07 | 为什么12000人没有发现?
这个问题比实验本身更值得深思。
ECA-Net 2019年发表,到2026年8月被引用了12,000+次。被集成在 timm 库中,被无数工程师使用。为什么没有人发现核心假设不成立?
原因一:引用 ≠ 验证
上图:学术复现的困境——论文复现率仅40-60%,"经典论文"更少被质疑
学术界有一个众所周知的"复现危机"。2016年,Nature 的一项调查发现,超过70%的研究者无法复现其他科学家的实验。
但复现危机不只是"无法复现"——更严重的是**“无人尝试复现”**。
- 引用一篇论文 ≠ 验证它的核心假设
- 使用它的代码 ≠ 质疑它的设计合理性
- 在你的模型里加ECA模块 ≠ 测试ECA模块是否真的有用
12,000次引用中,有多少人真正做了消融实验?有多少人测试过k=1?有多少人比较过ECA和简单的PerChannel缩放?
几乎没有人。因为"它已经被12,000人引用了——不可能错。"
原因二:ImageNet不是好的测试场
ECA在ImageNet上的提升是真实的。但ImageNet有太多不可控因素:
- 数据集偏差(某些类别在晴天拍摄更多)
- 训练超参数敏感(学习率、batch size、数据增强策略)
- 模型容量过剩(ResNet50有25.6M参数,足以拟合任何注意力模块)
在ImageNet上,你加任何额外参数都可能提升性能——不是因为你的模块设计得好,而是因为网络有足够容量把它"消化"掉。
用国际象棋残局库做实验,就是因为它消除了这些干扰——3.7万亿种完整局面,训练样本是真正无偏的随机采样。
原因三:"经典"的光环效应
一旦一篇论文被引用了上千次,它就变成了"经典"。人们倾向于假设它的结论是正确的,因为"这么多人引用,不可能错"。
但这恰恰是最危险的地方。
引用的人越多,质疑的人越少。不是因为它被验证了,而是因为它太"权威"了。
质疑经典论文是需要勇气的。因为你不是在和一个人辩论——你是在和12,000次引用的惯性辩论。
08 | 代码层面——你的模型里藏着什么
来看看实际代码。ECA在 timm 库中是怎么实现的?
查看 timm 的timm/layers/eca.py,EcaModule的forward方法:
defforward(self,x):y=x.mean((2,3)).view(x.shape[0],1,-1)# 全局平均池化 → (B, 1, C)y=self.conv(y)# 1D卷积在通道维度上ifself.conv2isnotNone:y=self.act(y)y=self.conv2(y)y=self.gate(y).view(x.shape[0],-1,1,1)# sigmoid门控returnx*y.expand_as(x)而卷积的定义是:
self.conv=nn.Conv1d(in_channels=1,out_channels=1,kernel_size=kernel_size,# 默认3padding=padding,bias=False)看到问题了吗?
这个1D卷积核大小为3,意味着每个通道的输出取决于它自己和左右各一个邻居。但"左右邻居"的概念在通道维度上是任意的——通道排列顺序取决于卷积层初始化,没有任何物理含义。
更讽刺的是,timm 库自己还有一个CecaModule(Circular ECA),它的注释直接写道:
classCecaModule(nn.Module):"""Constructs a circular ECA module. ECA module where the conv uses circular padding rather than zero padding. Unlike the spatial dimension, the channels 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. """timm 的开发者已经意识到通道维度没有拓扑结构——但他们的解决方案只是把零填充改成循环填充,而不是直接质疑1D卷积本身的必要性。
就像你发现一栋楼的墙歪了,然后你把墙纸换了——问题在墙,不在墙纸。
用10行代码替换ECA
如果跨通道交互不重要,你可以用更简单的方案替代ECA(PyTorch改编版,原始JAX/Flax实现见Pastebin):
classPerChannelGate(nn.Module):def__init__(self,channels):super().__init__()self.scale=nn.Parameter(torch.zeros(channels))# 初始化为0defforward(self,x):y=x.mean(dim=(2,3))# 全局平均池化y=y*self.scale# 逐通道缩放y=(2.0*torch.sigmoid(y)).unsqueeze(-1).unsqueeze(-1)# scale∈(0,2)returnx*y没有卷积,没有跨通道交互,每个通道一个标量权重。参数量从k个共享权重变成C个独立权重——但C通常只有几十到几百,几乎不影响总参数量。
如果你在用timm的ECA模块,你可以用这10行代码替换它,性能几乎不变,但概念上更合理。原始JAX/Flax实现见Pastebin。
09 | 对你意味着什么——立即行动清单
如果你是CV工程师
第一步:检查你的模型是否用了ECA
grep-r"ECA\|eca\|EfficientChannelAttention\|EcaModule".grep-r"create_classifier\|norm_layer.*eca".如果你用了 timm 的以下模型,你几乎肯定用了ECA:
tf_efficientnetv2_*ecaresnet*- 任何带
eca后缀的模型
第二步:做个消融实验
不要盲目相信论文结论。在你的任务上做一个简单的消融:
- 用 PerChannelGate 替换 ECA
- 比较验证集性能
- 如果性能差异在噪声范围内——考虑用更简单的方案
第三步:质疑"通道注意力"的必要性
通道注意力模块(SE、ECA、CBAM等)的提升可能是"安慰剂"——它给网络增加了额外的可学习参数,网络可以用这些参数做任何事,不一定是在做"注意力"。
如果你是研究者
不要只引用论文——要复现它的核心实验。
特别是引用量超过1000的"经典论文":
- 去掉核心组件(如ECA的跨通道交互)
- 用最简单的替代方案
- 在受控环境(如国际象棋残局库)上测试
你可能会发现——很多"经典"的核心假设,经不起严格的对照实验。
12,000次引用不代表验证了12000次。它可能只是意味着12000人相信了同一个人。
10 | 更大的图景——多少经典经得起复现?
上图:经典论文复现率——当引用量成为"正确性"的代理,真正的验证反而消失了
ECA-Net不是唯一一个被质疑的经典。近年来的"复现翻车"事件:
| 论文 | 引用量 | 被质疑的问题 |
|---|---|---|
| BatchNorm (2015) | 60k+ | 训练-推理不一致、小batch时失效 |
| SE-Net (2017) | 25k+ | 降维是否真的有害?PerChannel可能更好 |
| ECA-Net (2019) | 12k+ | 跨通道交互不是关键——k=1一样好 |
| Adam (2014) | 40k+ | "Warmup"的必要性被质疑 |
| Dropout (2012) | 30k+ | 在现代架构上可能有害而非有益 |
| ResNet (2015) | 50k+ | "恒等映射"假说被质疑 |
这揭示了一个系统性问题:
机器学习领域缺乏"否定性结果"的文化。
如果你发表了"我发现ECA的核心假设不成立",这篇论文很难发表——因为它"只是否定了别人的发现",而不是"提出了新的发现"。审稿人倾向于认为这种工作"贡献不足"。
但这恰恰是最重要的贡献。
科学不是积累"正确"——科学是通过不断否定来逼近真相。
正如费曼所说:“承认我们不知道,远比拥有可能错误的答案要重要得多。”
国际象棋的启示
选择国际象棋残局库做实验,这不是第一次国际象棋在AI研究中扮演关键角色:
- 1997年:Deep Blue击败卡斯帕罗夫——AI第一次在"智力游戏"中击败人类
- 2017年:AlphaZero发布预印本,自我学习从零掌握国际象棋——强化学习的里程碑(2018年正式发表于Science)
- 2018年:Leela Chess Zero受AlphaZero启发而诞生,使用CNN架构与Stockfish对弈——证明CNN可以处理棋类推理
- 2026年:用3.7万亿棋局证明ECA核心假设不成立——用已解决的博弈做AI架构的终极测试
国际象棋之所以反复出现在AI研究中,是因为它是一个完全已知的系统——规则明确、状态有限、胜负确定。在这种环境中,你可以排除所有"数据集偏差"的干扰,纯粹测试架构本身的能力。
当问题空间完整时,答案也完整。这就是国际象棋教会AI的东西。
从CV的SE/ECA到NLP的Transformer Attention,“注意力"这个词被用得太多了。也许我们该停下来想想:我们说的"注意力”,到底是指什么?
11 | 总结——被诅咒的不是卷积,是信任
回到核心问题。
ECA-Net不是一篇"坏"论文。它的实验结果在ImageNet上是真实的——ECA确实比SE好。它的代码是高效的——约80个参数 vs 24.37M主干参数。它的工程价值是真实的。
但它的解释可能是错的。
ECA说:“跨通道交互是性能提升的关键。”
实验说:“不,去掉跨通道交互(k=1),性能几乎不变。最简单的逐通道缩放在损失上反而最低。”
这不意味着ECA没有用——它意味着我们不理解它为什么有用。
而这比"它有用"更重要。
因为如果我们不理解一个模块为什么有效,我们就无法改进它。我们会在错误的方向上投入研究——设计更复杂的"跨通道交互"机制,而真正应该做的是研究"通道缩放"的本质。
ECA的"诅咒"不是技术缺陷——是认知偏差。我们太容易相信论文的解释,而不去验证它。
核心要点回顾
| 要点 | 说明 |
|---|---|
| ECA核心假设 | "跨通道交互"是性能提升的关键 |
| 实验结论 | k=1(无交互)性能几乎和k=3一样好;PerChannel损失最低 |
| 真正原因 | 性能提升可能来自通道缩放本身,而非交互 |
| 影响范围 | timm库37k Star,ECA被广泛集成 |
| 你的行动 | 检查模型 → 做消融实验 → 质疑通道注意力必要性 |
| 更大教训 | 12k引用 ≠ 12k次验证;经典论文也需要被质疑 |
如果这篇文章让你重新审视了某些"经典"论文的结论,请点赞👍收藏⭐支持一下。
也欢迎转发给你身边做CV的同事——他们可能正在用ECA,却不知道它的核心假设可能不成立。
有任何问题欢迎在评论区讨论。特别欢迎有人在其他数据集上复现这个实验——无论是验证还是反驳。
实验,而不是引用,才是科学的基石。
本文关键词:ECA-Net | 通道注意力 | SENet | 深度学习复现 | CVPR 2020 | timm | HuggingFace | 消融实验 | 学术复现危机 | 注意力机制 | 卷积神经网络 | 通道门控 | 机器学习质疑 | 国际象棋AI
ECA-Net原论文:arXiv:1910.03151
SE-Net原论文:arXiv:1709.01507
实验代码:Pastebin - rvGfFTK0(181行JAX/Flax实现)
ECA-Net官方代码:GitHub - BangguWu/ECANet(1,416 Star)
timm库ECA实现:GitHub - huggingface/pytorch-image-models(37,066 Star)
Reproducibility Challenge:GitHub - digantamisra98/Reproducibilty-Challenge-ECANET(32 Star)