一阶段目标检测网络-RetinaNet 详解(一)
摘要
Retinanet 是作者 Tsung-Yi Lin 和 Kaiming He(四作) 于 2018 年发表的论文 Focal Loss for Dense Object Detection.
作者深入分析了极度不平衡的正负(前景背景)样本比例导致 one-stage 检测器精度低于 two-stage 检测器,基于上述分析,提出了一种简单但是非常实用的 Focal Loss 焦点损失函数,并且 Loss 设计思想可以推广到其他领域,同时针对目标检测领域特定问题,设计了 RetinaNet 网络,结合 Focal Loss 使得 one-stage 检测器在精度上能够达到乃至超过 two-stage 检测器。
1,引言
作者认为一阶段检测器的精度不能和两阶段检测相比的原因主要在于,训练过程中的类别不平衡,由此提出了一种新的损失函数-Focal Loss
。
R-CNN(Fast RCNN)
类似的检测器之所以能解决类别不平衡问题,是因为两阶段级联结构和启发式采样。提取 proposal
阶段(例如,选择性搜索、EdgeBoxes、DeepMask、RPN
)很快的将候选对象位置的数量缩小到一个小数目(例如,1-2k),过滤掉大多数背景样本(其实就是筛选 anchor
数量)。在第二个分类阶段,执行启发式采样(sampling heuristics
),例如固定的前景背景比(1:3
),或在线难样本挖掘(OHEM
),以保持前景和背景之间的平衡。
相比之下,单级检测器必须处理在图像中定期采样的一组更大的候选对象位置。实际上,这通常相当于枚举 ∼100k
个位置,这些位置密集地覆盖空间位置、尺度和纵横。虽然也可以应用类似的启发式采样方法,但效率低下,因为训练过程仍然由易于分类的背景样本主导。
2,相关工作
Two-stage Detectors: 与之前使用两阶段的分类器生成 proposal
不同,Faster RCNN
模型的 RPN
使用单个卷积就可以生成 proposal
。
One-stage Detectors:最近的一些研究表明,只需要降低输入图像分辨率和 proposal
数量,两阶段检测器速度就可以变得更快。但是,对于一阶段检测器,即使提高模型计算量,其最后的精度也落后于两阶段方法[17]。同时,作者强调,Reinanet
达到很好的结果的原因不在于网络结构的创新,而在于损失函数的创新。
论文 [17] Speed/accuracy trade-offs for modern convolutional object detectors(注重实验). 但是,从这几年看,一阶段检测器也可以达到很高的精度,甚至超过两阶段检测器,这几年的一阶段检测和两阶段检测器有相互融合的趋势了。
Class Imbalance:
早期的目标检测器 SSD
等在训练过程中会面临严重的类别不平衡(class imbalance
)的问题,即正样本太少,负样本太多,这会导致两个问题:
- 训练效率低下:大多数候选区域都是容易分类的负样本,并没有提供多少有用的学习信号。
- 模型退化:易分类的负样本太多会压倒训练,导致模型退化。
通常的解决方案是执行某种形式的难负样本挖掘,如在训练时进行难负样本采样或更复杂的采样/重新称重方案。相比之下,Focla Loss
自然地处理了单级检测器所面临的类别不平衡,并且允许在所有示例上有效地训练,而不需要采样,也不需要容易的负样本来压倒损失和计算的梯度。
Robust Estimation: 人们对设计稳健的损失函数(例如 Huber loss
)很感兴趣,该函数通过降低具有大错误的示例(硬示例)的损失来减少对总损失的贡献。相反, Focal Loss
对容易样本(inliers
)减少权重来解决(address
)类别不平衡问题(class imbalance
),这意味着即使容易样本数量大,但是其对总的损失函数贡献也很小。换句话说,Focal Loss
与鲁棒损失相反,它侧重于训练稀疏的难样本。
3,网络架构
retinanet
的网络架构图如下所示。
3.1,Backbone
Retinanet
的 Backbone
为 ResNet
网络,ResNet
一般从 18
层到 152
层(甚至更多)不等,主要区别在于采用的残差单元/模块不同或者堆叠残差单元/模块的数量和比例不同,论文主要使用 ResNet50
。
两种残差块结构如下图所示,ResNet50
及更深的 ResNet
网络使用的是 bottleneck
残差块。
3.2,Neck
Neck
模块即为 FPN
网络结构。FPN 模块接收 c3, c4, c5 三个特征图,输出 P2-P7 五个特征图,通道数都是 256, stride 为 (8,16,32,64,128),其中大 stride (特征图小)用于检测大物体,小 stride (特征图大)用于检测小物体。P6 和 P7 目的是提供一个大感受野强语义的特征图,有利于大物体和超大物体检测。注意:在 RetinaNet 的 FPN 模块中只包括卷积,不包括 BN 和 ReLU。
3.3,Head
Head
即预测头网络。
YOLOv3
的 neck
输出 3
个分支,即输出 3
个特征图, head
模块只有一个分支,由卷积层组成,该卷积层完成目标分类和位置回归的功能。总的来说,YOLOv3
网络的 3
个特征图有 3
个预测分支,分别预测 3
个框,也就是分别预测大、中、小目标。
Retinanet
的 neck
输出 5
个分支,即输出 5
个特征图。head
模块包括分类和位置检测两个分支,每个分支都包括 4
个卷积层,但是 head
模块的这两个分支之间参数不共享,分类 Head
输出通道是 A*K,A 是类别数;检测 head
输出通道是 4*K, K 是 anchor 个数, 虽然每个 Head 的分类和回归分支权重不共享,但是 5
个输出特征图的 Head 模块权重是共享的。
- 点赞
- 收藏
- 关注作者
评论(0)