跳转至

ResNet50 逐层卷积权重统计表

前置约定

  1. 标准torchvision ResNet50-v1,输入224×224×3;
  2. 仅统计卷积权重 weight,不含 bias、BN参数、QDQ量化参数;
  3. 权重Shape规范:[out_c, in_c, kh, kw](PyTorch标准);
  4. 两套口径:
  5. 主分支卷积(论文49Conv)
  6. 附带4个shortcut downsample卷积(工程总53Conv)
  7. 参数量 = 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

  1. Conv1×1:[64, 64, 1, 1] → 64×64 = 4096
  2. Conv3×3:[64, 64, 3, 3] → 64×64×9 = 36864
  3. 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)

  1. Conv1×1:[64, 256, 1, 1] → 16384
  2. Conv3×3:[64, 64, 3, 3] → 36864
  3. 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)

主分支

  1. Conv1×1:[128, 256, 1, 1] → 32768
  2. Conv3×3:[128, 128, 3, 3] → 147456
  3. 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)

单块:

  1. Conv1×1:[128, 512, 1, 1] → 65536
  2. Conv3×3:[128, 128, 3, 3] → 147456
  3. 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)

主分支

  1. Conv1×1:[256, 512, 1, 1] → 131072
  2. Conv3×3:[256, 256, 3, 3] → 589824
  3. 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)

单块:

  1. Conv1×1:[256, 1024, 1, 1] → 262144
  2. Conv3×3:[256, 256, 3, 3] → 589824
  3. 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)

主分支

  1. Conv1×1:[512, 1024, 1, 1] → 524288
  2. Conv3×3:[512, 512, 3, 3] → 2359296
  3. 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)

单块:

  1. Conv1×1:[512, 2048, 1, 1] → 1048576
  2. Conv3×3:[512, 512, 3, 3] → 2359296
  3. Conv1×1:[2048, 512, 1, 1] → 1048576 单块合计:4456448 2块总和:4456448 × 2 = 8912896

Conv5_x汇总 主分支:3932160 + 8912896 = 12845056 额外shortcut卷积:2097152 Stage4全部卷积权重:14942208


卷积权重全局汇总

  1. Stage0 Conv1:9408
  2. Stage1 Conv2_x:212992
  3. Stage2 Conv3_x:1212416
  4. Stage3 Conv4_x:7077888
  5. 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

重要提醒

  1. 越靠后Stage权重越大:Conv5 > Conv4 > Conv3 > Conv2 > Conv1;
  2. 4个shortcut卷积权重不能忽略,硬件加载必须单独分配存储空间;
  3. 上面只计算weight,如果你需要加上bias参数量,我可以补充;
  4. BN均值、方差属于推理常量,一般不和卷积权重放在同一权重buffer。

如果你想要,我可以把这份表格整理进之前那份ResNet50文档,做成附录。