将上面的模块封装好后,就可以在yolo.py的parse_model函数中增加模块的参数配置逻辑了,代码如下: if m in [nn.Conv2d, Conv, RobustConv, RobustConv2, E_ELAN, E_ELAN_H, DWConv, GhostConv, RepConv, RepConv_OREPA, DownC, SPP, SPPF, SPPCSPC, GhostSPPCSPC, MixConv2d, Focus, Stem, GhostSte...
但如果更多计算模块被无限地堆叠,这种稳定状态可能会被破坏,参数利用率也会降低。 本文提出的E-ELAN采用expand、shuffle、merge cardinality结构,实现在不破坏原始梯度路径的情况下,提高网络的学习能力。 但是笔者找了整个common.py文件,似乎没有找到定义这个模块的代码,不过在yo...
图3. YOLOv7的ELAN模块结构 按照上面的结构,我们便可以绘制出YOLOv7的核心模块:ELAN的具体网络结构了,相应的代码也展示在了下方。请注意,ELAN的这种结构的一个优势就是每个branch的操作中,输入通道都是和输出通道保持一致的,仅仅是最开始的两个1x1卷积是有通道变化的。关于输入输出通道相等的优势,这一点早在shuffl...
最后,ELAN模块输出的通道数是输入的2倍。 图4. YOLOv7的ELAN模块结构 classELANBlock(nn.Module):"""ELAN BLock of YOLOv7's backbone"""def__init__(self,in_dim,out_dim,expand_ratio=0.5,depthwise=False):super(ELANBlock,self).__init__()inter_dim=int(in_dim*expand_ratio)self.cv1=Conv(i...
BackBone(代码实现) 1.多分支堆叠模块(ELAN) 文中起名ELAN,博主觉得叫多分支堆叠模块更好,只是个人理解而已 其结构如下图所示:是不是型如其名 ELAN模块是一个高效的网络结构,它通过控制最短和最长的梯度路径,使网络能够学习到更多的特征,并且具有更强的鲁棒性。
ELAN模块选取了三个输出进行最后的相加。 ELAN-W模块选取了五个进行相加。 文中提出的E-ELAN,但是实际中并未使用,如下说明: YOLO v7基于ELAN提出了E-ELAN,其结构如下图(d)所示,但在其开源代码中所提供的模型配置文件中(cfg/training/yolov7.yaml),并未使用该模块. E-ELAN的关键在于expand、shuffle和merge car...
最近,模块级别的重新参数化在研究中获得了很大的关注。在这种方法中,模型训练过程被分成多个模块。输出被集成以获得最终模型。YOLOv7 论文中的作者展示了执行模块级集成的最佳方法(如下所示)。 在上图中,E-ELAN 计算块的 3×3 卷积层被替换为 RepConv 层。我们通过切换或替换 RepConv、3×3 Conv 和 Identity...
有效层聚合网络(ELAN)算法通过控制最短最长梯度路径,可以使一个更深的模型更有效地学习和收敛。但是ELAN模型在合适的梯度路径和计算模块数量的情况下已经达到了一个平衡态,当添加更多计算模块时,这种平衡态会被打破,模型参数利用率会下降。YOLOv7作者参考了上述结构,提出了 Extended-ELAN (E-ELAN)。E-ELAN采用了...
高效层聚合网络(ELAN)的代码于2022年7月发布。在网络层面,它属于梯度路径设计网络的范畴。设计ELAN的主要目的是解决在执行模型缩放时深度模型的收敛性会逐渐恶化的问题。 作者分析了通过整个网络中每个层的最短梯度路径和最长梯度路径,从而设计了具有有效梯度传播路径的层聚合架构。ELAN主要由VoVNet和CSPNet组成,并利用计...