csuhan / ReDet

Official code of the paper "ReDet: A Rotation-Equivariant Detector for Aerial Object Detection" (CVPR 2021)
https://redet.csuhan.com
Apache License 2.0
391 stars 77 forks source link

模型速度 #48

Closed HBioquant closed 3 years ago

HBioquant commented 3 years ago

用DOTAv1.5试了下你们的模型,总体感觉:你们的paper上没有系统的去评价模型的FPS,虽然总体的参数量下降了,但是训练速度太慢了,模型的推理速度也挺慢的。请问对于这样的模型,你们有什么提升速度上个的技巧?理论上这样的一个模块可以移植到EfficientNet,然后用来做Backbone?

csuhan commented 3 years ago

好问题!事实上,模型的训练和推理速度确实比正常ResNet慢。这主要是由于e2cnn初始化、卷积核运算均为python实现,没有经过cuda的优化。

理论上,模型与ResNet的速度是一样的,因为ReResNet的模块可以导出为正常的ResNet,这也是equivariant model能够存在的意义。参见:https://quva-lab.github.io/e2cnn/api/e2cnn.nn.html#e2cnn.nn.EquivariantModule.export

但目前由于ReDet混合了planar CNN (detection head)和 rotation equivariant CNN(backbone, FPN),因此无法直接导出为planar CNN。

如果要实现推理速度与原版的一致,可以:

  1. 针对网络不同层(equivariant layer和planar layer)设计不同的权重保存方法。
  2. 设置仅包含planar CNN的config、针对不同层设计权重加载方法,并将1导出的权重直接加载进来。

我们的方法证明了旋转等变网络在检测任务上的有效性,此处的旋转等变网络不仅仅局限于e2cnn。由于精力有限,我们目前没有计划进一步优化运行速度。

HBioquant commented 3 years ago

一定需要在FPN加入大量e2cnn的op降低速度么?不知道你们有没有做过在常规的RRoIAlign模型仅加入Rotation-invariant layer(switch channels)的ablation experiments来考量后续这个layer的引入对性能的提升效果。我在paper仅看到你们比较的是RROIAlign和你们混合e2cnn的FPN和switch channel layer的RiROIAlign,这样的结果超越RROIAlign也符合你们的设计。 另外,常规的RROIAlign是不是也能满足Rotation-equivariant feature,我对这块的定义可能不是太了解。如果可以满足,我觉得仅加入后续的switch channel layer就能够满足对Rotation-invariant的要求了。期待你的回复~

csuhan commented 3 years ago

switch channels中channel指的是rotation-equivariant feature中的orientation dimension。

ReDet之所以是rotation-invariant的,是因为RoIAlign前的所有层都满足equivariance,包括ResNet和FPN。 只有这样,才能用switch channels对来自不同orientation的feature进行对齐,才能实现rotation-invariant。

Rotation equivariance+RRoIAlign在我们的论文中有体现,更换RiRoIAlign后有0.3-0.8 mAP的提升。 image