PaddlePaddle / PaddleDetection

Object Detection toolkit based on PaddlePaddle. It supports object detection, instance segmentation, multiple object tracking and real-time multi-person keypoint detection.
Apache License 2.0
12.38k stars 2.84k forks source link

PP-YOLOE实际模型参数量比模型库中给出大很多 #7580

Open L-lei opened 1 year ago

L-lei commented 1 year ago

问题确认 Search before asking

请提出你的问题 Please ask your question

您好,我的问题是: 在pp-yoloe模型库地址中PP-YOLOE+_s / PP-YOLOE+_m / PP-YOLOE+_l / PP-YOLOE+_x的Params(M)参数量分别是7.93 / 23.43 / 52.20 / 98.42,但是给出的下载地址中模型大小确是31M / 80多M / 200多M / 300多M pp-yoloe模型库地址

尝试方向1,类别数量过大导致的模型大?使用PP-YOLOE+_m训练类别数量为1的模型,导出推理模型后模型大小为91.1M; 尝试方向2,ppyoloe版本与ppyoloe_plus版本的参数量不同?使用ppyoloe_crn_m_300e与ppyoloe_plus_crn_m_80e训练同一个数据集,导出推理模型也是91.1M, 2个版本的模型大小相同; 尝试方向3,模型枝剪?使用配置文件提供ppyoloe_plus_crn_m_80e的模型枝剪运行直接内部错误; 尝试方向4,模型量化,量化最大缩减模型4倍,模型库中给出的参数量23.43*4=93.72,差不多吻合?使用ppyoloe_plus_crn_m_80e模型在线量化训练,导出的量化训练模型大小与原模型大小几乎相同,在cpu量化文档模型转换后模型大小为90.09M,模型减少了1.02M; 尝试方向5,静态图模型与动态图模型区别?在量化转换的时候,脚本代码是基于静态图实现;

请问下,这是如何实现的呢?能将模型缩小到模型库中给出的呢

wangxinxin08 commented 1 year ago

模型参数量 不等于 保存的权重的大小。如果模型以float32保存,那么根据float32占4个字节,可以推算出保存的权重约等于模型参数量的4倍,依此类推

L-lei commented 1 year ago

明白了,模型库中模型参数量是参数个数;但是这样也有一个问题,在尝试方向4量化的时候选择的int8类型占1个字节,导出后模型大小几乎没怎么缩减,是因为paddle中模型参数保存格式是float32?如原本量化后值为5,存储的时候5.0000...