我们在阅读文章的时候,经常看到backbone、 head 、 neck
这一类的术语,但是我们可能并不知道是什么意思,这篇文章就是对这些术语进行解释:
backbone:翻译为主干网络的意思,既然说是主干网络,就代表其是网络的一部分,那么是哪部分呢?翻译的很好,主干部分,哈哈哈哈,文字游戏了哈。这个主干网络大多时候指的是提取特征的网络,其作用就是提取图片中的信息,共后面的网络使用。这些网络经常使用的是resnet VGG
等,而不是我们自己设计的网络,因为这些网络已经证明了在分类等问题上的特征提取能力是很强的。在用这些网络作为backbone
的时候,都是直接加载官方已经训练好的模型参数,后面接着我们自己的网络。让网络的这两个部分同时进行训练,因为加载的backbone
模型已经具有提取特征的能力了,在我们的训练过程中,会对他进行微调,使得其更适合于我们自己的任务。
head:head
是获取网络输出内容的网络,利用之前提取的特征,head利用这些特征,做出预测。
neck:是放在backbone
和head
之间的,是为了更好的利用backbone
提取的特征
bottleneck:瓶颈的意思,通常指的是网网络输入的数据维度和输出的维度不同,输出的维度比输入的小了许多,就像脖子一样,变细了。经常设置的参数 bottle_num=256
,指的是网络输出的数据的维度是256
,可是输入进来的可能是1024
维度的。
GAP:在设计的网络中经常能够看到gap
这个层,我之前不知道是干啥的,后了解了,就是Global Average Pool
全局平均池化,就是将某个通道的特征取平均值,经常使用AdaptativeAvgpoold(1),
在pytorch
中,这个代表自适应性全局平均池化,说人话就是将某个通道的特征取平均值。
self.gap = nn.AdaptiveAvgPool2d(1)