论文阅读:谷歌efficientDet(CVPR 2020)

论文阅读:谷歌efficientDet(CVPR 2020)

还没来得及汇报这篇就换方向了。。。难顶哟

这次的论文是谷歌基于efficientNet提出的新的检测框架

作者这篇文章要解决的问题就是能否在计算资源有限的前提下既实现效率又保证精度的网络算法。针对这个问题文中提出了一个加权的双向特征金字塔结构,用于进行快速的特征融合。还提出了一个新的联合缩放方法,将骨干网络、特征网络、预测网络的分辨率、深度、宽度进行了统一处理。然后结合上述两点,以EfficientNet作为骨架网,生成了高效快速,适用于不同计算条件的检测网络;右边这个图就是在不同的浮点运算次数下,一些优秀网络的表现。可以看到,由efficient-det生成的模型,在一定的参数量下达到了很好的效果,EfficientDet-D6只使用了上一个最好检测器13分之一的参数量,准确率依然可以高出0.2%。

图中展示了FPN以及他的一些变种,还有作者这次提出的BIFPN,FPN其实就是对特定的卷积层提取的特征进一步进行融合的过程,这个过程可以用下面的公式表示,其实就是将顶层的特征resize一下跟下一层特征图加起来,这样可以增强多尺度识别时的特征。

但是原始的fpn的信息流是单向的,后面这个PANET就加了一个自底向上的特征融合流程。随后对FPN的跨尺度连接研究也开始,nas-fpn就是用神经架构搜索做出来的一个跨尺度的fpn,但是这种搜索方法非常耗时,需要耗费大量GPU资源,而且搜索出来的结构也不具有很强的解释性。

作者通过对比前三个网络,得出PANET的准确率是最高的,但是参数量比较大。作者就对PANET做了一下改进,首先,作者将边缘结点,也就是P3和P7移除,因为作者认为,这些结点没有和不同层的特征进行融合操作,对网络的贡献比较小。然后作者给同一级别网络层添加了一条从原始输入点到输出点的连接,这跟resnet的想法差不多。最后,作者将这两层当作一个模块,重复调用来获取更高层次的特征融合。

作者认为,不同分辨率的特征对输出特征的贡献是不同的。针对这个问题,作者提出对于每个输入特征,都增加一个权重,让网络去学习不同特征的重要性。然后作者提出了三种特征融合的方式,第一种就是直接给每个特征加上权重。但是由于这些公式里的权重是没有边界的,所以训练起来会很慢,作者又进一步提出了一个使用softmax方式对权重进行归一化的公式。这样就使权重范围落在【0,1】之间,但是引入了指数的运算又会使计算速度下降,所以作者又提出了一个快速归一化的特征融合,这里权重使用relu函数截断来保证w是大于0的,epsilon是为了避免数值不稳定性,我的理解应该是为了防止分母过小而出现bug。

作者对这三种方法也进行了对比测试。上面的图是作者随机找了三个特征融合的权重结点绘制的权重变化图,可以看到有的权重变化是挺大的,这也验证了不同特征对融合的贡献不同的猜想。红色和蓝色的线分别代表Fast fusion和Softmax fusion,这两个曲线的变化趋势是差不多的,说明使用fast fusion也可以较好的模拟softmax的效果,再从下边这个表中可以看到,使用fast fusion会快30%左右,而精度下降的很少。所以作者最后采用的是fast fusion,最终的特征融合形式可以用右下角这个公式来表示,这里以P6这一层为代表。 P_{6}^{t d} 代表的是这一层的中间输出。作者还提到,为了进一步提高效率,在特征融合的时候使用了深度可分离卷积,每一次卷积操作都添加了批归一化和激活层

这是EfficientDet的整体结构。左边的骨干网络是在ImageNet上预训练过的efficientNet,然后取出P3-P7的特征输入BIFPN层,进行自顶向下和自底向上的特征融合。最后将融合的参数输入预测网络,分别预测出类别和边界框。这是一个典型的单阶段目标检测结构。


为了让网络适应不同的资源约束场景,作者提出了对框架的骨干网络、FPN网络、分类预测网络、输入的分辨率等结构进行统一的缩放,引入了缩放因子ϕ。对于骨干网络,就直接将efficientNet论文里不同的网络拿来用(nas得来的)。BIFPN的参数包括通道和层数,分别对应到公式里的W和D。公式里 的1.35是作者搜索出来的。对于回归和分类层,在通道数上跟BIFPN保持一致,层数的增长就是根据相应公式。输入图片的大小则是用的最后这个公式。(128的选取是因为特征层有7层,要选2的7次方)。这个表就是不同的ϕ值对应的网络各个模块的参数,论文中还说这样的做法不一定是最好的方法,因为ϕ是一个统一的缩放,实际上的搜索空间还可以在扩大。

该网络采用的优化器是SGD,学习率在第一次迭代时从0线性增长到0.16,然后根据cosine规则衰减,损失函数是focal loss(aspect ratio指的是预设目标框的宽高比)。该网络在32块TPU上训练了300个迭代,batchsize大小是128。在预处理方面对图片进行了裁剪、缩放、翻转等操作(RetinaNet preprocessing with training-time multi-resolution cropping/scaling and flipping)。


这个表就是作者将efficientDet系列的模型与其他模型的比较,准确率接近的放在了一起,可以看出在每一个准确率区间,efficientDet都取得了最好的效果,而且参数量和延迟都是最少的。不过最近YOLOv4一出来,在实时检测上还是比efficientDet优秀不少。

为了探讨不同的设计对efficientDet的贡献,作者做了几组对比实验,首先作者讨论了efficientNet和bifpn对整个模型的贡献度,从这个表中可以看出,跟resnet+fpn相比,对于准确率的增加二者的贡献差不多,使用bifpn降低的参数量更多 些。接着,作者对不同类型的FPN做了比较,可以看到,在准确率最优的情况下,bifpn参数和计算量比其他的几种类型的fpn要少一些。

最后,作者测试了单个模块进行缩放和整个框架统一缩放的效果。可以看出,整个框架联合缩放对性能提升很有帮助。

总的来说,这篇论文就是对efficientNet的在目标检测上的推广应用,提出了bifpn联合缩放的概念,而且在达到SOTA的时候比上个第一名少出很多参数量。

不过这里面还有一些疑问,在前面对不同fpn对比时,我们可以看到在bifpn没有加权融合时的准确度是低于PANET的,加权了之后才高出0.3个百分点,这里用PANET进行加权融合可能会更好,这样一对比,那个跨层连接的作用也并没有体现出来,还有就是在介绍联合缩放的时候有很多超参数没有具体介绍如何得到的,我感觉,得到这个参数的方法可能更有意义。

存货快没了,以后应该不会这么快频率更新了哈哈哈。

论文链接:

github链接:

据说下面这个pytorch的实现比官方效果要好,有兴趣的可以了解了解。

编辑于 2023-04-07 16:18・IP 属地未知