ResNet50 逐层卷积权重统计表¶
前置约定
- 标准torchvision ResNet50-v1,输入224×224×3;
- 仅统计卷积权重 weight,不含 bias、BN参数、QDQ量化参数;
- 权重Shape规范:
[out_c, in_c, kh, kw](PyTorch标准); - 两套口径:
- 主分支卷积(论文49Conv)
- 附带4个shortcut downsample卷积(工程总53Conv)
- 参数量 = out_c × in_c × kh × kw
0. Stage0:Conv1¶
算子:Conv 7×7, in=3, out=64 Shape:[64, 3, 7, 7] 权重数量:64×3×7×7 = 9408
Stage1|Conv2_x (3个Bottleneck,(64,64,256))¶
Block2_0(带shortcut投影Conv)¶
主分支3个Conv
- Conv1×1:
[64, 64, 1, 1]→ 64×64 = 4096 - Conv3×3:
[64, 64, 3, 3]→ 64×64×9 = 36864 - Conv1×1:
[256, 64, 1, 1]→ 256×64 = 16384 主分支小计:4096+36864+16384 = 57344
👉 shortcut投影Conv(额外算子) Conv1×1:[256, 64, 1, 1] → 16384
Block2_0全部卷积权重:57344 + 16384 = 73728
Block2_1(无shortcut Conv)¶
- Conv1×1:
[64, 256, 1, 1]→ 16384 - Conv3×3:
[64, 64, 3, 3]→ 36864 - Conv1×1:
[256, 64, 1, 1]→ 16384 合计:69632
Block2_2(无shortcut Conv)¶
同上 → 69632
Conv2_x 汇总 主分支权重总和:57344 + 69632 + 69632 = 196608 额外shortcut卷积:16384 Stage1全部卷积权重:212992
Stage2|Conv3_x(4个Bottleneck,(256,128,512))¶
Block3_0(带shortcut投影Conv)¶
主分支
- Conv1×1:
[128, 256, 1, 1]→ 32768 - Conv3×3:
[128, 128, 3, 3]→ 147456 - Conv1×1:
[512, 128, 1, 1]→ 65536 主分支小计:245760
👉 shortcut投影Conv:[512, 256, 1, 1] → 131072 Block3_0总计:245760 + 131072 = 376832
Block3_1 / Block3_2 / Block3_3(3块,无shortcut)¶
单块:
- Conv1×1:
[128, 512, 1, 1]→ 65536 - Conv3×3:
[128, 128, 3, 3]→ 147456 - Conv1×1:
[512, 128, 1, 1]→ 65536 单块合计:278528 3块总和:278528 × 3 = 835584
Conv3_x汇总 主分支:245760 + 835584 = 1081344 额外shortcut卷积:131072 Stage2全部卷积权重:1212416
Stage3|Conv4_x(6个Bottleneck,(512,256,1024))¶
Block4_0(带shortcut投影Conv)¶
主分支
- Conv1×1:
[256, 512, 1, 1]→ 131072 - Conv3×3:
[256, 256, 3, 3]→ 589824 - Conv1×1:
[1024, 256, 1, 1]→ 262144 主分支小计:983040
👉 shortcut投影Conv:[1024, 512, 1, 1] → 524288 Block4_0总计:983040 + 524288 = 1507328
Block4_1 ~ Block4_5(5块,无shortcut)¶
单块:
- Conv1×1:
[256, 1024, 1, 1]→ 262144 - Conv3×3:
[256, 256, 3, 3]→ 589824 - Conv1×1:
[1024, 256, 1, 1]→ 262144 单块合计:1114112 5块总和:1114112 × 5 = 5570560
Conv4_x汇总 主分支:983040 + 5570560 = 6553600 额外shortcut卷积:524288 Stage3全部卷积权重:7077888
Stage4|Conv5_x(3个Bottleneck,(1024,512,2048))¶
Block5_0(带shortcut投影Conv)¶
主分支
- Conv1×1:
[512, 1024, 1, 1]→ 524288 - Conv3×3:
[512, 512, 3, 3]→ 2359296 - Conv1×1:
[2048, 512, 1, 1]→ 1048576 主分支小计:3932160
👉 shortcut投影Conv:[2048, 1024, 1, 1] → 2097152 Block5_0总计:3932160 + 2097152 = 6029312
Block5_1、Block5_2(2块,无shortcut)¶
单块:
- Conv1×1:
[512, 2048, 1, 1]→ 1048576 - Conv3×3:
[512, 512, 3, 3]→ 2359296 - Conv1×1:
[2048, 512, 1, 1]→ 1048576 单块合计:4456448 2块总和:4456448 × 2 = 8912896
Conv5_x汇总 主分支:3932160 + 8912896 = 12845056 额外shortcut卷积:2097152 Stage4全部卷积权重:14942208
卷积权重全局汇总¶
- Stage0 Conv1:9408
- Stage1 Conv2_x:212992
- Stage2 Conv3_x:1212416
- Stage3 Conv4_x:7077888
- Stage4 Conv5_x:14942208
✅ 全部53个卷积权重总和 = 23454912 个参数
分类头 FC(MatMul,不属于卷积)¶
FC权重shape:[2048, 1000] 参数数量:2048 × 1000 = 2048000
卷积+FC所有权重合计: 23454912 + 2048000 = 25502912
工程换算(对你硬件加载非常关键)¶
举例:
- FP32:每个权重4字节 总卷积权重大小 ≈ 23454912 × 4 ≈ 89.3 MB
- INT8量化(你的QDQ模型):每个权重1字节 总卷积权重大小 ≈ 23.45 MB
重要提醒
- 越靠后Stage权重越大:Conv5 > Conv4 > Conv3 > Conv2 > Conv1;
- 4个shortcut卷积权重不能忽略,硬件加载必须单独分配存储空间;
- 上面只计算weight,如果你需要加上bias参数量,我可以补充;
- BN均值、方差属于推理常量,一般不和卷积权重放在同一权重buffer。
如果你想要,我可以把这份表格整理进之前那份ResNet50文档,做成附录。