文章目录
FPN-多尺度
FPN相比faster RCNN,在特征提取和训练的过程中考虑到 多尺度的问题,使用 不同尺度上的 特征并进行充分 融合,得到最终 多个层级的预测结果。
从上图中可以看到,在图像进入backbone进行特征提取后,分别在C2\C3\C4\C5四个尺度上继续1×1特征提取和组合,最终进行四个尺度的预测输出。其中在每一个环节中的输出有1*1conv进行通道调整和上采样进行特征融合。
; FPN整体结构
从上图的结果可以看到:
- backbone提取特征通过FPN得到 四个维度的输出(特征图)
- RPN在FPN输出特征基础上生成anchor并进行采样
- ROI Align将ROI 生成区域分配到对应特征层并进行降维和训练,得到最终预测结果。
FPN的RoI Align
分配方法:多个roi进行面积计算(不同层的feature size不同),根据面积大小来区别是来自第几层的roi,分配到对应尺度的特征层进行roi align。
; Cascade-合理阈值
Cascade网络针对faster rcnn筛选正负样本的 阈值IoU进行了分析,发现使用 合理的阈值对于训练中的RoI非常关键,而faster rcnn仅使用0.7、0.3和0.5作为正负样本阈值选择是不合适的。
通过上图进行实验结果对比分析可知:
- 单一阈值训练出的结果非常有限
- 使用合理的阈值(RoI自身的IoU和训练器一致时性能最优)可以有效增加训练结果
所以,下一步的思路是 增加多个header从而让训练器使用不同的阈值得到预测结果。
Cascade rcnn使用三种不同结构的网络结构,有:
- 串联分开参数训练
- 串联共享参数巡训练
- 并联公用roi分开参数的结构
最终的结果是,使用Cascade级联的结构可以获得最好结果。
Cascade RCNN使用 三个header分开参数,使用 不同的IoU训练器,每层使用上一层学习的RoI进行训练,最终回归分支结果作为最终回归结果,而 三个分类结果平均作为最终分类结果。
Libra-融合+采样、loss平衡
问题:
- 不同尺度特征层如何有效利用?
- 采样不平衡
- 损失函数不合理
解决方法
不同尺度特征层如何有效利用
针对不同尺度特征问题,先进行 上采样或者下采样进行尺度统一,使用 平均方法进行图像融合成为一张图,之后使用 non-local方法进行相同特征强化,最后将相同特征融合到原特征以增强特征作用。
; 采样不平衡
针对采样不平衡问题,采用 分类分区域采样的思路。对于 正样本采样,原来是从正样本中随机采样,现在是在正样本中 根据类别数量进行均匀采样;对于 负样本采样,先根据阈值划分为 两个分段, 高于阈值在进行分桶,计算落在每个桶的数量得到均匀分布的负样本,对于 低于阈值的样本进行 随机采样。
损失函数不合理
针对第三个问题loss,从smooth L1的损失函数可以看到,在从梯度小于1到1的过程中出现较大转折,使用此loss训练并不平滑,作者提出 balance loss可以增加训练过程的平滑性。
Original: https://blog.csdn.net/helloworld_Fly/article/details/124872257
Author: helloworld_Fly
Title: 【学习-目标检测】目标检测之—FPN+Cascade+Libra
原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/686389/
转载文章受原作者版权保护。转载请注明原作者出处!