满版型网站有哪些,关闭网站后弹窗代码,长沙制作网站公司吗,网站内部链接怎么做的上节研究了PaddleOCR文本检测v3模型的骨干网#xff0c;本文接着研究其颈部网络。 文章目录 研究起点残注层颈部网络代码实验小结 研究起点
摘取开源yml配置文件#xff0c;摘取网络架构Architecture中颈部网络的配置如下 Neck:name: RSEFPNout_channels: 96shortcut: True可…上节研究了PaddleOCR文本检测v3模型的骨干网本文接着研究其颈部网络。 文章目录 研究起点残注层颈部网络代码实验小结 研究起点
摘取开源yml配置文件摘取网络架构Architecture中颈部网络的配置如下 Neck:name: RSEFPNout_channels: 96shortcut: True可以看出颈部网络的名称为RSEFPN这个名字可以拆开来做如下理解
R 代表残差Residual即输入特征与中间输出特征做加法形成最终输出特征。SE 代表压发层SqueezeExcitation即通道注意力机制通过压制与发扬减弱低效通道作用强化高效通道效能详情参考上一节分析。FPN 代表特征金字塔FeaturePyramidNetwork即在各个不同尺度上提取目标特征形成一个原始图像从整体到细节的全方位理解。参照上节的分析骨干网通过四个阶段分别在1/4、1/8、1/16、1/32等四个层次上进行操作。
通过搜索可以找到RSEFPN类的定义在db_fpn.py文件的246-304行官方链接请参考gitee。
残注层
RSELayer的代码在db_fpn.py文件的221-243行包含一个卷积层和一个压发层这里将RSELayer中文名称取为残注层意思是既有残差的含义也有注意力机制的含义。阅读源代码可以将RSELayer的结构图示如下 从上到下看残注层结构示意图首先是传入了一个输入通道数c_in的张量结构为c_in,h,w经过一个卷积核为k_in步长为1的卷归层的处理输出一个结构为c_out,h,w的张量其中c_out代表设置的输出通道数。接着是一个压发层SEModule不改变输入张量结构。最后根据shortcut参数是否为True来决定是否将压发层的结果与压发层的输入做加法。
颈部网络
有了上节残注层的基础知识RSEFPN类的源码就能看懂。但代码阅读远没有图来得直观。通过总结理解RSEFPN的代码可以形成如下颈部网络示意图 通过上图可以将颈部网络划分为如下几个部分
对接 需要从骨干网四个阶段输出依此承接参照上图左侧虚线部分详情见上节都骨干网的分析。通道统一 通过四个残注层RSELayer将骨干网四阶段输出统一转为96通道宽高不变依此形成in5/in4/in3/in2四层输出。上采样 通过三个scale为2的上采样操作将细粒度下层特征放大并与上层结果做加法实现各层次视觉信息的融合依此形成out4/out3/out2通道压缩 通过四个卷积核大小为3的残注层RSELayer将上采样结果进行通道压缩将原通道数缩为1/4依此形成p5/p4/p3/p2聚合 将通道压缩结果依此做scale8/4/2的上采样将所有四层金字塔视觉信息处理成果统一转为通道数、宽、高一致的信息在通道维度上做拼接最终将骨干网16/24/56/480通道的四阶段输出结果颈部网络RSEFPN的处理形成96通道的输出宽高与骨干网stage0的输出一致。
代码实验
下面做python的代码实践。通过paddle.summary函数调用得到以下输出
--------------------------------------------------------------------------------Layer (type) Input Shape Output Shape Param #
Conv2D-82 [[5, 480, 2, 10]] [5, 96, 2, 10] 46,080
AdaptiveAvgPool2D-15 [[5, 96, 2, 10]] [5, 96, 1, 1] 0 Conv2D-83 [[5, 96, 1, 1]] [5, 24, 1, 1] 2,328 Conv2D-84 [[5, 24, 1, 1]] [5, 96, 1, 1] 2,400 SEModule-15 [[5, 96, 2, 10]] [5, 96, 2, 10] 0 RSELayer-7 [[5, 480, 2, 10]] [5, 96, 2, 10] 0 stage3-in5Conv2D-76 [[5, 56, 4, 20]] [5, 96, 4, 20] 5,376
AdaptiveAvgPool2D-13 [[5, 96, 4, 20]] [5, 96, 1, 1] 0 Conv2D-77 [[5, 96, 1, 1]] [5, 24, 1, 1] 2,328 Conv2D-78 [[5, 24, 1, 1]] [5, 96, 1, 1] 2,400 SEModule-13 [[5, 96, 4, 20]] [5, 96, 4, 20] 0 RSELayer-5 [[5, 56, 4, 20]] [5, 96, 4, 20] 0 stage2-in4Conv2D-70 [[5, 24, 8, 40]] [5, 96, 8, 40] 2,304
AdaptiveAvgPool2D-11 [[5, 96, 8, 40]] [5, 96, 1, 1] 0 Conv2D-71 [[5, 96, 1, 1]] [5, 24, 1, 1] 2,328 Conv2D-72 [[5, 24, 1, 1]] [5, 96, 1, 1] 2,400 SEModule-11 [[5, 96, 8, 40]] [5, 96, 8, 40] 0 RSELayer-3 [[5, 24, 8, 40]] [5, 96, 8, 40] 0 stage1-in3Conv2D-64 [[5, 16, 16, 80]] [5, 96, 16, 80] 1,536
AdaptiveAvgPool2D-9 [[5, 96, 16, 80]] [5, 96, 1, 1] 0 Conv2D-65 [[5, 96, 1, 1]] [5, 24, 1, 1] 2,328 Conv2D-66 [[5, 24, 1, 1]] [5, 96, 1, 1] 2,400 SEModule-9 [[5, 96, 16, 80]] [5, 96, 16, 80] 0 RSELayer-1 [[5, 16, 16, 80]] [5, 96, 16, 80] 0 stage0-in2Conv2D-85 [[5, 96, 2, 10]] [5, 24, 2, 10] 20,736
AdaptiveAvgPool2D-16 [[5, 24, 2, 10]] [5, 24, 1, 1] 0 Conv2D-86 [[5, 24, 1, 1]] [5, 6, 1, 1] 150 Conv2D-87 [[5, 6, 1, 1]] [5, 24, 1, 1] 168 SEModule-16 [[5, 24, 2, 10]] [5, 24, 2, 10] 0 RSELayer-8 [[5, 96, 2, 10]] [5, 24, 2, 10] 0 in5-p5Conv2D-79 [[5, 96, 4, 20]] [5, 24, 4, 20] 20,736
AdaptiveAvgPool2D-14 [[5, 24, 4, 20]] [5, 24, 1, 1] 0 Conv2D-80 [[5, 24, 1, 1]] [5, 6, 1, 1] 150 Conv2D-81 [[5, 6, 1, 1]] [5, 24, 1, 1] 168 SEModule-14 [[5, 24, 4, 20]] [5, 24, 4, 20] 0 RSELayer-6 [[5, 96, 4, 20]] [5, 24, 4, 20] 0 out4-p4Conv2D-73 [[5, 96, 8, 40]] [5, 24, 8, 40] 20,736
AdaptiveAvgPool2D-12 [[5, 24, 8, 40]] [5, 24, 1, 1] 0 Conv2D-74 [[5, 24, 1, 1]] [5, 6, 1, 1] 150 Conv2D-75 [[5, 6, 1, 1]] [5, 24, 1, 1] 168 SEModule-12 [[5, 24, 8, 40]] [5, 24, 8, 40] 0 RSELayer-4 [[5, 96, 8, 40]] [5, 24, 8, 40] 0 out3-p3Conv2D-67 [[5, 96, 16, 80]] [5, 24, 16, 80] 20,736
AdaptiveAvgPool2D-10 [[5, 24, 16, 80]] [5, 24, 1, 1] 0 Conv2D-68 [[5, 24, 1, 1]] [5, 6, 1, 1] 150 Conv2D-69 [[5, 6, 1, 1]] [5, 24, 1, 1] 168 SEModule-10 [[5, 24, 16, 80]] [5, 24, 16, 80] 0 RSELayer-2 [[5, 96, 16, 80]] [5, 24, 16, 80] 0 out2-p2Total params: 158,424
Trainable params: 158,424
Non-trainable params: 0
--------------------------------------------------------------------------------
Input size (MB): 0.81
Forward/backward pass size (MB): 23.39
Params size (MB): 0.60
Estimated Total Size (MB): 24.80
--------------------------------------------------------------------------------主要输出与上节图形残注层RSELayer的对应关系备注在行尾。
小结
本文分析了残注层RSELayer的内部结构了解到卷归层和压发层是其内核分析了颈部网络RSEFPN的四层金字塔结构以及颈部网络与骨干网络的对接关系做了简单的代码实验将实战输出与图形描述进行了对应标注。代码实验参见gitee。