定义模型
def res50_faster_rcnn(self_pretrained, num_classes):
if not self_pretrained:
print('load res50 backbone pretrained on COCO')
pretrained = False if self_pretrained else True # pretrain on COCO
model = fasterrcnn_resnet50_fpn(pretrained=pretrained)
in_features = model.roi_heads.box_predictor.cls_score.in_features
model.roi_heads.box_predictor = FastRCNNPredictor(in_channels=in_features,
num_classes=num_classes)
return model
打印 params,只给出了 conv,省去了 bn, relu
def model_params(model):
print('{:>4} {:<50} {:<30} {}'.format('idx', 'param', 'size', 'grad'))
for idx, (name, param) in enumerate(model.named_parameters()): # recurse=True, as net itself is a big module
print('{:>4} {:<50} {:<30} {}'.format(idx, name, str(param.size()), param.requires_grad))
![](https://img.haomeiwen.com/i1877813/e5ec881e3c725611.png)
无论是否采用 pretrained, conv1
和 conv2_x
都不更新参数,require_grad=False
idx param size grad
0 backbone.body.conv1.weight torch.Size([64, 3, 7, 7]) False # conv1, layer0
1 backbone.body.layer1.0.conv1.weight torch.Size([64, 64, 1, 1]) False # conv2_x 0 重复 3 次
2 backbone.body.layer1.0.conv2.weight torch.Size([64, 64, 3, 3]) False
3 backbone.body.layer1.0.conv3.weight torch.Size([256, 64, 1, 1]) False
4 backbone.body.layer1.0.downsample.0.weight torch.Size([256, 64, 1, 1]) False # layer0 与 layer1 连接处
5 backbone.body.layer1.1.conv1.weight torch.Size([64, 256, 1, 1]) False # conv2_x 1
6 backbone.body.layer1.1.conv2.weight torch.Size([64, 64, 3, 3]) False
7 backbone.body.layer1.1.conv3.weight torch.Size([256, 64, 1, 1]) False
8 backbone.body.layer1.2.conv1.weight torch.Size([64, 256, 1, 1]) False # conv2_x 2
9 backbone.body.layer1.2.conv2.weight torch.Size([64, 64, 3, 3]) False
10 backbone.body.layer1.2.conv3.weight torch.Size([256, 64, 1, 1]) False
11 backbone.body.layer2.0.conv1.weight torch.Size([128, 256, 1, 1]) True # conv3_x
12 backbone.body.layer2.0.conv2.weight torch.Size([128, 128, 3, 3]) True
13 backbone.body.layer2.0.conv3.weight torch.Size([512, 128, 1, 1]) True
14 backbone.body.layer2.0.downsample.0.weight torch.Size([512, 256, 1, 1]) True # layer1 和 layer2 连接处
15 backbone.body.layer2.1.conv1.weight torch.Size([128, 512, 1, 1]) True
16 backbone.body.layer2.1.conv2.weight torch.Size([128, 128, 3, 3]) True
17 backbone.body.layer2.1.conv3.weight torch.Size([512, 128, 1, 1]) True
18 backbone.body.layer2.2.conv1.weight torch.Size([128, 512, 1, 1]) True
19 backbone.body.layer2.2.conv2.weight torch.Size([128, 128, 3, 3]) True
20 backbone.body.layer2.2.conv3.weight torch.Size([512, 128, 1, 1]) True
21 backbone.body.layer2.3.conv1.weight torch.Size([128, 512, 1, 1]) True
22 backbone.body.layer2.3.conv2.weight torch.Size([128, 128, 3, 3]) True
23 backbone.body.layer2.3.conv3.weight torch.Size([512, 128, 1, 1]) True
24 backbone.body.layer3.0.conv1.weight torch.Size([256, 512, 1, 1]) True
25 backbone.body.layer3.0.conv2.weight torch.Size([256, 256, 3, 3]) True
26 backbone.body.layer3.0.conv3.weight torch.Size([1024, 256, 1, 1]) True
27 backbone.body.layer3.0.downsample.0.weight torch.Size([1024, 512, 1, 1]) True
28 backbone.body.layer3.1.conv1.weight torch.Size([256, 1024, 1, 1]) True
29 backbone.body.layer3.1.conv2.weight torch.Size([256, 256, 3, 3]) True
30 backbone.body.layer3.1.conv3.weight torch.Size([1024, 256, 1, 1]) True
31 backbone.body.layer3.2.conv1.weight torch.Size([256, 1024, 1, 1]) True
32 backbone.body.layer3.2.conv2.weight torch.Size([256, 256, 3, 3]) True
33 backbone.body.layer3.2.conv3.weight torch.Size([1024, 256, 1, 1]) True
34 backbone.body.layer3.3.conv1.weight torch.Size([256, 1024, 1, 1]) True
35 backbone.body.layer3.3.conv2.weight torch.Size([256, 256, 3, 3]) True
36 backbone.body.layer3.3.conv3.weight torch.Size([1024, 256, 1, 1]) True
37 backbone.body.layer3.4.conv1.weight torch.Size([256, 1024, 1, 1]) True
38 backbone.body.layer3.4.conv2.weight torch.Size([256, 256, 3, 3]) True
39 backbone.body.layer3.4.conv3.weight torch.Size([1024, 256, 1, 1]) True
40 backbone.body.layer3.5.conv1.weight torch.Size([256, 1024, 1, 1]) True
41 backbone.body.layer3.5.conv2.weight torch.Size([256, 256, 3, 3]) True
42 backbone.body.layer3.5.conv3.weight torch.Size([1024, 256, 1, 1]) True
43 backbone.body.layer4.0.conv1.weight torch.Size([512, 1024, 1, 1]) True
44 backbone.body.layer4.0.conv2.weight torch.Size([512, 512, 3, 3]) True
45 backbone.body.layer4.0.conv3.weight torch.Size([2048, 512, 1, 1]) True
46 backbone.body.layer4.0.downsample.0.weight torch.Size([2048, 1024, 1, 1]) True
47 backbone.body.layer4.1.conv1.weight torch.Size([512, 2048, 1, 1]) True
48 backbone.body.layer4.1.conv2.weight torch.Size([512, 512, 3, 3]) True
49 backbone.body.layer4.1.conv3.weight torch.Size([2048, 512, 1, 1]) True
50 backbone.body.layer4.2.conv1.weight torch.Size([512, 2048, 1, 1]) True
51 backbone.body.layer4.2.conv2.weight torch.Size([512, 512, 3, 3]) True
52 backbone.body.layer4.2.conv3.weight torch.Size([2048, 512, 1, 1]) True
53 backbone.fpn.inner_blocks.0.weight torch.Size([256, 256, 1, 1]) True
54 backbone.fpn.inner_blocks.0.bias torch.Size([256]) True
55 backbone.fpn.inner_blocks.1.weight torch.Size([256, 512, 1, 1]) True
56 backbone.fpn.inner_blocks.1.bias torch.Size([256]) True
57 backbone.fpn.inner_blocks.2.weight torch.Size([256, 1024, 1, 1]) True
58 backbone.fpn.inner_blocks.2.bias torch.Size([256]) True
59 backbone.fpn.inner_blocks.3.weight torch.Size([256, 2048, 1, 1]) True
60 backbone.fpn.inner_blocks.3.bias torch.Size([256]) True
61 backbone.fpn.layer_blocks.0.weight torch.Size([256, 256, 3, 3]) True
62 backbone.fpn.layer_blocks.0.bias torch.Size([256]) True
63 backbone.fpn.layer_blocks.1.weight torch.Size([256, 256, 3, 3]) True
64 backbone.fpn.layer_blocks.1.bias torch.Size([256]) True
65 backbone.fpn.layer_blocks.2.weight torch.Size([256, 256, 3, 3]) True
66 backbone.fpn.layer_blocks.2.bias torch.Size([256]) True
67 backbone.fpn.layer_blocks.3.weight torch.Size([256, 256, 3, 3]) True
68 backbone.fpn.layer_blocks.3.bias torch.Size([256]) True
69 rpn.head.conv.weight torch.Size([256, 256, 3, 3]) True
70 rpn.head.conv.bias torch.Size([256]) True
71 rpn.head.cls_logits.weight torch.Size([3, 256, 1, 1]) True
72 rpn.head.cls_logits.bias torch.Size([3]) True
73 rpn.head.bbox_pred.weight torch.Size([12, 256, 1, 1]) True
74 rpn.head.bbox_pred.bias torch.Size([12]) True
75 roi_heads.box_head.fc6.weight torch.Size([1024, 12544]) True
76 roi_heads.box_head.fc6.bias torch.Size([1024]) True
77 roi_heads.box_head.fc7.weight torch.Size([1024, 1024]) True
78 roi_heads.box_head.fc7.bias torch.Size([1024]) True
79 roi_heads.box_predictor.cls_score.weight torch.Size([21, 1024]) True
80 roi_heads.box_predictor.cls_score.bias torch.Size([21]) True
81 roi_heads.box_predictor.bbox_pred.weight torch.Size([84, 1024]) True
82 roi_heads.box_predictor.bbox_pred.bias torch.Size([84]) True
网友评论