我正在测试这段代码,以比较模型参数,这将帮助我修改模型/层,但我不知道哪种方法给我实际的参数数量。
from torchsummary import summary
import torchinfo
from ultralytics.nn.tasks import DetectionModel
yolo_model = DetectionModel(cfg, nc=80 )
summary(yolo_model,(3, 640, 640))
torchinfo.summary( yolo_model, (3, 640, 640), batch_dim = 0)
结果来自
torchinfo
:
=======================================
Total params: 5,257,936
Trainable params: 5,257,920
Non-trainable params: 16
Total mult-adds (G): 4.37
====================================================================================================
Input size (MB): 4.92
Forward/backward pass size (MB): 232.15
Params size (MB): 12.63
Estimated Total Size (MB): 249.70
====================================================================================================
结果来自
torchsummary
:
==========================================================================================
Total params: 1,312,416
Trainable params: 1,312,400
Non-trainable params: 16
Total mult-adds (G): 1.39
==========================================================================================
Input size (MB): 4.69
Forward/backward pass size (MB): 128.38
Params size (MB): 5.01
Estimated Total Size (MB): 138.08
==========================================================================================
除此之外,
yolov8
本身打印的参数数量也不同。请让我知道获取实际参数数量的最佳方法。
由于模型本身的复杂性,不同分析方法的参数计数可能会出现差异。我在自己的项目中也遇到过类似的情况。
您使用了三种不同的方法来评估参数计数,给出了不同的结果:
torchsummary
、torchinfo
和yolov8自己的报告。前两种方法是获取架构见解甚至参数计数的不错选择。然而,您观察到的差异可能来自于它们在 yolov8 中处理自定义层的方式。
此外,yolov8 模型的内部参数计数可能会受到初始化方法等因素的影响,与外部分析方法相比,这些因素可能会导致观察到的差异。
根据之前的经验,我建议您彻底探索该架构,特别关注可能影响参数计算的自定义或外部层。然后将模型中存在的层与
torchsummary
和 torchinfo
优化处理的层对齐。我什至发现深入研究模型的源代码有助于理解它如何计算和呈现参数计数。