BR-IDL / PaddleViT

:robot: PaddleViT: State-of-the-art Visual Transformer and MLP Models for PaddlePaddle 2.0+
https://github.com/BR-IDL/PaddleViT
Apache License 2.0
1.21k stars 317 forks source link

如何计算VIT模型的Flops ? #219

Open peach-xiao opened 2 years ago

peach-xiao commented 2 years ago

我想计算基于Transformer的一些分割模型的FLOPs用于评估实验模型的性能, 使用的是Paddle.flops来计算,但是出现了一些无法统计的情况( Treat it as zero FLOPs),是不是这样计算出来的FLOPs的值是不准确的呢?可以如何解决?

我看到的是需要自己定义用于实现对自定义网络层的统计,也就是参数custom_ops,目前只找到了官方提供的用于计算paddle.nn.SyncBatchNorm的方法, 但是我不知道怎么设计用于计算.MaxPool2D、.LayerNorm、.GroupNorm、 .GELU、 Embedding这些函数,如果不计算的话,最后得出的FLOPs值应该有较大的差异,可以帮我解决这个问题吗?

image

image

下面是的的结果: image

image ... image

JunyaoHu commented 9 months ago

我也有这样的问题,我在使用常用的计算FLOPS的库(torchprofile、ptflops、thop)时,三种方法结果均有所不同,请问如何公平比较呢?