EfficientDet: 基于 EfficientNet 和 BiFPN 的目标检测
简述
EfficientNet 是最近推出的一个很强大的 Backbone,
EfficientDet 是基于 BiFPN + EfficientNet + Scalable 的目标检测网络, 是目前屠榜的存在
EfficientDet 论文原文: https://arxiv.org/pdf/1911.09070
BiFPN
(A) FPN (特征金字塔) 采用自顶向下的方式来堆叠特征
(B) PANet 和 FPN 相比加多了一个自下而上的路径
(C) NAS-FPN 是通过深度学习搜索出来的网络, 他长得非常的混乱, 但是已经有了跨层思想了
(D) BiFPN 是作者提出的一种新架构, 与 PANet 相比, 它增加了跨层链接 (紫色箭头), 与 NAS-FPN 相比, 它更简洁高效
跨层连接在 NAS-FPN 中已经使用了, 我们不多解释.
BiFPN 的一大特性是 Weighted Feature Fusion, 即给不同尺度加权值. 传统做法是直接堆叠不同尺度的特征, 而 BiFPN 让网络自行学习不同输入特征的权重.
文中提到了三种 Fusion
Unbounded fusion
w_i 是可学习权重
Softmax-based fusion
w_i 和 w_j 是可学习权重
Fast normalized fusion
w_i 和 w_j 是可学习权重, ϵ (epislon) = 0.0001 是一个非常小的数字来保证分母不为 0)
在实验中, 作者发现 Unbounded fusion 效果拉跨, Softmax-based fusion GPU 速度感人, 而 Fast normalized fusion 比 Softmax-based fusion 快很多, 而且精度没有什么差距.
作者最终选择了 Softmax-based fusion
Scalable Architecture
为了实现速度和精度的平衡, 作者在不同等级的 (d0 – d7) backbone 上选择了不同个数的组件. 公式如下:
- BiFPN network:
,
- Box/class prediction network:
,
- Input image resolution:
最后得到以下架构
实验结果
总结
EfficientDet 是一个优雅的目标检测网络, 与 YoloV4 / V5 这种一堆 trick 堆在一起的东西相比, 不仅精度更高, 还简洁了无数倍.
PyTorch 实现: Yet-Another-EfficientDet-Pytorch
3080好用被