【小本本笔记】backbone,neck,head,anchor free/based,centerness

Anchor based,Anchor free

Anchor-based

Anchor-based 方法使用预定义的锚框(anchor boxes)来预测物体的边界框。模型会根据这些锚框生成候选区域,并调整它们以匹配实际物体的位置和大小。这种方法的特点包括:

  • 预定义框:通过定义一组固定的锚框,模型可以在不同位置、尺度和纵横比上进行检测。
  • 位置回归:模型预测锚框与实际物体边界的偏移量来精确定位物体。
  • 分类和回归:通常同时进行物体分类和位置回归,目标是使锚框的预测与实际物体尽可能接近。

示例:Faster R-CNN

Anchor-free(通过point反算感受野)

Anchor-free 方法不使用预定义的锚框,而是直接从特征图中预测物体的位置和大小。这种方法的特点包括:

  • 直接预测:模型直接预测物体的中心点或边界框的坐标,无需预设锚框。
  • 简化设计:去除锚框可以简化模型设计和训练过程。
  • 自适应性强:对于物体尺寸变化较大的场景,可能比 anchor-based 方法更具适应性。

示例:CenterNet、FCOS

总结来说,anchor-based 方法依赖于锚框来指导检测,而 anchor-free 方法则直接预测物体位置

对比

Anchor-based:超参难调,代码复杂度高一些,bbox的回归相对简单一些;单个point能够响应多个目标物
Anchor-free:几乎没有超参数,代码复杂度相对低,bbox的回归相对困难一些;单个point只能服务一个目标物

Backbone的作用

Backbone 是模型的基础网络,负责从输入图像中提取特征。它通常由一系列卷积层、激活函数和池化层组成。以下是 backbone 的主要作用:

  1. 特征提取:Backbone 负责从原始图像中提取出有用的特征图。这些特征图包含了图像的低级和高级特征,例如边缘、纹理、形状等。

  2. 特征表示:它将图像转换为一组高维特征表示,这些特征表示将被进一步处理以完成具体的任务,如目标检测或分割。

  3. 预训练:常用的 backbone 网络(如 ResNet、VGG、EfficientNet 等)通常是预训练的,这意味着它们在大规模数据集上(如 ImageNet)进行了训练。这种预训练可以显著提升模型的性能,尤其是在特定任务数据集较小的情况下。

其中Efficientnet是由NAS做成的

不同特征图上神经元能看到原图上的区域是确定的且不一样大的,这个区域就是感受野

Neck的作用

Neck 是连接 backbone 和 head 之间的部分,它主要负责将 backbone 提取的特征图进一步处理,以使其更适合下游任务。Neck 的主要作用包括:

  1. 特征融合:Neck 通过融合来自 backbone 的不同层的特征图,提升特征的表达能力。常见的融合技术包括特征金字塔网络(FPN)和特征金字塔层(PANet)。

  2. 特征转换:将 backbone 提取的特征图转换为适合 head 处理的形式。通常,neck 会进行特征图的尺寸调整、增强和融合,以便于 head 进行更准确的预测。

  3. 信息增强:通过对特征图进行处理和增强,neck 能够帮助捕捉更多的上下文信息和细节,提高模型在特定任务中的表现。

在目标检测任务中,backbone 提取的特征会通过 neck 进行处理和增强,然后由 head 进行最终的预测(如边界框回归和类别分类)。在语义分割任务中,neck 可能负责处理不同尺度的特征图,以便进行精细的像素级预测。

Neck和Head

neck将不同宽度的backbone上的特征图宽度对齐,给后续的head(尤其是需要共享权重)

Neck决定了Head的数量,不同尺度的目标被分配到不同的Head进行学习

耦合head,解耦head

耦合

检测头(即用于检测物体的网络部分)与特征提取网络(如骨干网络)之间有较强的耦合关系。也就是说检测头和特征提取网络的设计和参数紧密相连。

优势

参数共享:两个分支共享一套参数,在最后一层分开,减少参数量

劣势

特征学习不足:特征学习能力可能会弱一些

复杂度高:耦合的检测头直接使用来自特征提取网络的原始特征或经过少量变换后的特征。这种方法可能导致模型在训练和推理时的复杂度较高,因为检测头的性能和特征提取网络的质量紧密相关。

缺乏模块化:检测头和特征提取网络在设计和训练时相互依赖,使得对其中一个部分的修改可能会影响到另一个部分。这种耦合可能会导致模型难以进行局部优化和调整

解耦

检测头和特征提取网络之间有较低的耦合关系,旨在提高系统的模块化和灵活性。

优势
独立分支,特征学习能力强一些
  1. 独立特征处理:解耦的检测头可能会在特征提取之后,使用自己独立的网络层来处理特征,从而减少对特征提取网络内部细节的依赖。这可以使检测头的设计和优化过程更加独立。

  2. 专门设计:解耦的检测头可能有专门的设计来处理特征,比如使用自适应卷积层、特征金字塔网络(FPN)等方法来改善检测性能。检测头的参数和结构与特征提取网络的结构更为独立。

  3. 提高灵活性:通过解耦,可以在不影响特征提取网络的情况下,对检测头进行独立的优化和调整。比如,可以尝试不同的检测头结构,而无需重新训练整个特征提取网络。

  4. 模块化设计:解耦的设计允许更高的模块化,使得检测头可以被更换或更新,而不会对特征提取网络造成影响。这有助于系统的扩展和维护。

劣势

计算量增加:参数独立,参数更多了。分支独立,计算量更多一些

  • 耦合 Head 可能更适用于简单的目标检测模型或对于特征提取网络和检测头要求一致性的场景。
  • 解耦 Head 更适用于复杂的检测任务,其中需要独立优化检测头以适应不同类型的特征,或需要对系统进行高度的模块化和灵活性。

(这里插入一个FCOS的初理解,感兴趣的可以下去加深理解)

FCOS是一阶段anchor free目标检测算法,其主要创新点是无锚。通过回归特征图上每个位置距离目标框的上下左右距离来实现目标检测。如果一个位置落在了多个目标框内,文中的方法是通过多尺度+回归幅度限制的方法来缓解这个问题。为了解决目标框数量过多的问题,文中提出了center-ness的方法,为每个位置学习一个centerness分数,最后乘以预测类别分数作为非极大抑制的输入参数来解决这个问题。

head共享

在FCOS中,他的每个head的参数是共享的

参数的共享,可以解决不同层级head上可学习样本数量不平衡的问题
为什么共享Head是可行的?-----------------神经网络具备多尺度语义不变性
共享Head的优点有哪些?-----------------减少参数;提升精度

共享head为什么不能用BN

这里提出BN,LN,IN,GN的对比,并对比了BN和GN

共享head为什么不能用BN:

训练阶段的batch_size太小

训练阶段的前向传播,每个共享Head通过当前的batch各自计算均值和方差,这里没有问题。问题在于为推理而累积计算的均值和方差在不同Head之间摇摆,这个均值和方差是个“四不像”,然后在推断的时候,所有的共享Head都使用的同一套均值和方差。BN在训练和推理阶段的行为不一致!

centerness

含义:感受野中心越靠近目标物的中心,那么感受野中心对应的quality分数就越高

从两分支(分类分支和回归分支)发展到三分支

为什么需要quality分支:

分类分支出来的概率,其实表征的是一种object ness的程度,但object ness的score高并不能表示他预测的bbox质量就好。

所以将objectness和bbox quality进行了解耦,在head中添加了另一个单独预测bbox的quality分支。由于quality和bbox相关,他的分支通常与回归分支共享参数,最后输出一个独立的bbox quality的预测。在FCOS的推理阶段,需要用qality去对objectness的score进行mask处理,从而得到NMS需要的score。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值