23_RetinaNet网络结构详解

1.1 简介

RetinaNet 是一种在目标检测领域具有重要影响的一阶段(one-stage)检测器,由 Tsung-Yi Lin、Priya Goyal、Ross Girshick、Kaiming He、Piotr Dollár 等人在2017年的论文《Focal Loss for Dense Object Detection》中提出,并在那年的国际计算机视觉大会(ICCV)上获得了最佳学生论文奖。RetinaNet 的设计初衷是解决一阶段检测器在准确性上与两阶段检测器(如 Faster R-CNN)之间的差距,同时保持一阶段方法的速度优势。

关键创新:Focal Loss

RetinaNet 引入了 Focal Loss,这是其最核心的创新点。Focal Loss 是一种动态调整损失权重的策略,旨在解决目标检测中普遍存在的样本不均衡问题,尤其是正负样本比例严重失衡的情况。在传统的交叉熵损失下,由于背景(负样本)远多于前景(正样本),模型容易偏向预测背景,导致正样本的学习效果不佳。Focal Loss 通过引入一个调整因子 (1−𝑝𝑡)𝛾来降低那些已被正确分类样本的损失权重,其中 𝑝𝑡是模型对于某个样本的预测概率,𝛾 是一个超参数。随着 𝑝𝑡 接近1,损失会指数级减小,这使得模型更加关注那些难以分类的样本,从而提升了训练的效率和模型的性能。

网络架构

RetinaNet 架构基于特征金字塔网络(Feature Pyramid Network, FPN)构建,FPN允许模型在不同尺度上进行检测,提高了对多尺度目标的检测能力。具体来说,它在FPN的不同层级上附加了多个子网络,每个子网络都负责预测固定数量的预设 anchor boxes(锚框)的位置和类别概率。这些anchor boxes覆盖了不同的尺寸和纵横比,以适应不同大小的目标。

主要特点总结

  1. 一阶段检测器:直接从特征图上进行目标分类和边界框回归,无需像两阶段方法那样首先生成候选区域,大大加快了检测速度。
  2. Focal Loss:有效解决了正负样本不均衡问题,使得模型能够更好地学习困难样本,提升整体检测精度。
  3. 特征金字塔网络(FPN):结合不同尺度的特征图来检测不同大小的目标,增强了模型的尺度不变性。
  4. Anchor-based:使用预先定义的anchor boxes来预测目标的位置,简化了目标定位过程,但同时也引入了anchor匹配和超参数调整的复杂性。
  5. 高效与准确:RetinaNet的设计目标是在保证高检测速度的同时,实现接近两阶段检测器的准确率。

应用与影响

RetinaNet 的提出,不仅显著提升了单阶段目标检测器的性能,还推动了后续研究对损失函数设计的关注,特别是在处理样本不均衡问题上的策略。它的Focal Loss机制后来被广泛应用于其他检测任务和场景中,成为了目标检测领域的一个里程碑式的工作。此外,RetinaNet 的开源实现,如基于 TensorFlow 或 PyTorch 的版本,也促进了社区对这一技术的深入理解和应用。

1.2 网络性能

RetinaNet作为单阶段目标检测模型,首次超过了两阶段莫目标检测模型。

1.3 网络结构

FPN讲解链接:传送门

RetinaNet的网络结构与FPN很像,但是有三个不同的地方:

(1)FPN会使用C2来生成P2,RetinaNet中并没有。论文中给出的原因是P2会占用更多的计算资源。

(2)P6在FPN是通过最大池化进行下采样的,而RetinaNet是通过卷积层进行下采样的。

(3)FPN是从P2到P6,RetinaNet是P3到P7,其中P6到P7先是RELU,然后用卷积。

scale就是框的面积开根号的值,scale是在原图上的大小,在特征图上不是这个值。

下图右侧是预测器,下侧是预测器的详细结构。

class subnet负责预测每个anchor所属的类别,K是检测的目标类别个数(不包含背景)。

box subnet负责针对每个anchor去预测它的目标边界框。注意,在faster-RCNN中是对于预测特征层上每一个anchor都会针对每个类别去生成一组边界框回归参数,所以是4*k*a。对于下面是4*a,意思就是预测不需要考虑是哪个类别,只需要考虑离边界框最近的那个类别,这种预测是类别不可知的情况下预测,但是很明显能够减少我们网络训练的参数。

1.4 正负样本选取

1.5 Focal loss

Focal Loss 是一种在机器学习和深度学习领域,特别是目标检测和图像识别任务中广泛使用的损失函数,它由何凯明等人在论文《Focal Loss for Dense Object Detection》中首次提出。Focal Loss 的设计目的是解决在类别极度不平衡的数据集(例如目标检测中的前景与背景样本)中,模型训练时对易分类样本过度关注的问题,从而让模型更加专注于学习难分类的样本,提高模型的性能。

问题背景

在目标检测任务中,通常会遇到正负样本比例严重失衡的情况,比如一张图片中可能只有几个目标物体(正样本),而背景区域(负样本)占据了大部分。传统的交叉熵损失在这种情况下,由于大量容易分类的负样本,模型可能会过快地学会忽视这些样本,而没有足够地关注到那些难以分类的样本,尤其是小目标或部分遮挡的目标,从而影响了模型的检测精度。

Focal Loss 的公式

Focal Loss 是对交叉熵损失的一种修改,其公式可以表示为:

工作原理

  1. 动态调整损失权重:通过引入 (1−𝑝𝑡)𝛾 这一项,Focal Loss 能够自动降低分类正确的样本的损失贡献,特别是那些预测概率 𝑝𝑡非常接近0或1的样本,这使得模型在训练过程中更关注那些难以分类的样本,即 𝑝𝑡 接近0.5的样本。

  2. 类别不均衡问题的缓解:结合类别平衡权重 𝛼𝑡,Focal Loss 能够进一步优化类别间的平衡,确保模型在处理类别不平衡数据时依然能够得到有效的训练。

  3. 提高训练效率:由于降低了大量简单样本的损失权重,模型的训练可以更加集中于提升对困难样本的识别能力,这不仅提升了模型的性能,还可能加速收敛过程。

应用

Focal Loss 最初是为了解决密集目标检测中的问题而设计的,并在RetinaNet检测器中得到了成功应用。之后,它也被广泛应用于其他领域,如语义分割、人脸关键点检测、行人重识别等,凡是涉及到类别不均衡或需要特别关注困难样本的任务,Focal Loss 都展现出了其优越性。

简单来说,Focal loss设置了一些超参数,从“正负”和“难易”两个角度出发来平衡不同样本的损失贡献。

Focal loss主要针对单阶段目标检测模型,而one stage模型都会面临“class imbalance”正负样本不平衡的问题。

当y=1即为正样本时是p,为负样本时为1-p。p是模型预测样本属于正类的概率。

下图以γ=2,α=0.25的比例来计算下面的数值:(y为正负样本)

蓝色和红色都是易分的样本,focal loss对它们的损失贡献极大降低了。

绿色属于难分样本,我们可以看到focal loss可以让模型更加专注于训练难学习的样本。

但是在训练过程中,需要对样本标注正确性要求较高,不然很容易受影响(很疯狂学习那个“难分”样本,导致效果变差)

1.6 损失函数

  • 6
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值