Here is the output of print(fused_model)
:
FasterRCNN(
(transform): GeneralizedRCNNTransform(
Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225])
Resize(min_size=(320,), max_size=640, mode='bilinear')
)
(backbone): BackboneWithFPN(
(body): IntermediateLayerGetter(
(0): ConvBNActivation(
(0): ConvBn2d(
(0): Conv2d(3, 16, kernel_size=(3, 3), stride=(2, 2), padding=(1, 1), bias=False)
(1): BatchNorm2d(16, eps=0.001, momentum=0.01, affine=True, track_running_stats=True)
)
(1): Identity()
(2): Hardswish()
)
(1): QuantizableInvertedResidual(
(block): Sequential(
(0): ConvBNActivation(
(0): ConvBnReLU2d(
(0): Conv2d(16, 16, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), groups=16, bias=False)
(1): BatchNorm2d(16, eps=0.001, momentum=0.01, affine=True, track_running_stats=True)
(2): ReLU()
)
(1): Identity()
(2): Identity()
)
(1): ConvBNActivation(
(0): ConvBn2d(
(0): Conv2d(16, 16, kernel_size=(1, 1), stride=(1, 1), bias=False)
(1): BatchNorm2d(16, eps=0.001, momentum=0.01, affine=True, track_running_stats=True)
)
(1): Identity()
(2): Identity()
)
)
(skip_add): FloatFunctional(
(activation_post_process): Identity()
)
)
(2): QuantizableInvertedResidual(
(block): Sequential(
(0): ConvBNActivation(
(0): ConvBnReLU2d(
(0): Conv2d(16, 64, kernel_size=(1, 1), stride=(1, 1), bias=False)
(1): BatchNorm2d(64, eps=0.001, momentum=0.01, affine=True, track_running_stats=True)
(2): ReLU()
)
(1): Identity()
(2): Identity()
)
(1): ConvBNActivation(
(0): ConvBnReLU2d(
(0): Conv2d(64, 64, kernel_size=(3, 3), stride=(2, 2), padding=(1, 1), groups=64, bias=False)
(1): BatchNorm2d(64, eps=0.001, momentum=0.01, affine=True, track_running_stats=True)
(2): ReLU()
)
(1): Identity()
(2): Identity()
)
(2): ConvBNActivation(
(0): ConvBn2d(
(0): Conv2d(64, 24, kernel_size=(1, 1), stride=(1, 1), bias=False)
(1): BatchNorm2d(24, eps=0.001, momentum=0.01, affine=True, track_running_stats=True)
)
(1): Identity()
(2): Identity()
)
)
(skip_add): FloatFunctional(
(activation_post_process): Identity()
)
)
(3): QuantizableInvertedResidual(
(block): Sequential(
(0): ConvBNActivation(
(0): ConvBnReLU2d(
(0): Conv2d(24, 72, kernel_size=(1, 1), stride=(1, 1), bias=False)
(1): BatchNorm2d(72, eps=0.001, momentum=0.01, affine=True, track_running_stats=True)
(2): ReLU()
)
(1): Identity()
(2): Identity()
)
(1): ConvBNActivation(
(0): ConvBnReLU2d(
(0): Conv2d(72, 72, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), groups=72, bias=False)
(1): BatchNorm2d(72, eps=0.001, momentum=0.01, affine=True, track_running_stats=True)
(2): ReLU()
)
(1): Identity()
(2): Identity()
)
(2): ConvBNActivation(
(0): ConvBn2d(
(0): Conv2d(72, 24, kernel_size=(1, 1), stride=(1, 1), bias=False)
(1): BatchNorm2d(24, eps=0.001, momentum=0.01, affine=True, track_running_stats=True)
)
(1): Identity()
(2): Identity()
)
)
(skip_add): FloatFunctional(
(activation_post_process): Identity()
)
)
(4): QuantizableInvertedResidual(
(block): Sequential(
(0): ConvBNActivation(
(0): ConvBnReLU2d(
(0): Conv2d(24, 72, kernel_size=(1, 1), stride=(1, 1), bias=False)
(1): BatchNorm2d(72, eps=0.001, momentum=0.01, affine=True, track_running_stats=True)
(2): ReLU()
)
(1): Identity()
(2): Identity()
)
(1): ConvBNActivation(
(0): ConvBnReLU2d(
(0): Conv2d(72, 72, kernel_size=(5, 5), stride=(2, 2), padding=(2, 2), groups=72, bias=False)
(1): BatchNorm2d(72, eps=0.001, momentum=0.01, affine=True, track_running_stats=True)
(2): ReLU()
)
(1): Identity()
(2): Identity()
)
(2): QuantizableSqueezeExcitation(
(fc1): ConvReLU2d(
(0): Conv2d(72, 24, kernel_size=(1, 1), stride=(1, 1))
(1): ReLU()
)
(relu): Identity()
(fc2): Conv2d(24, 72, kernel_size=(1, 1), stride=(1, 1))
(skip_mul): FloatFunctional(
(activation_post_process): Identity()
)
)
(3): ConvBNActivation(
(0): ConvBn2d(
(0): Conv2d(72, 40, kernel_size=(1, 1), stride=(1, 1), bias=False)
(1): BatchNorm2d(40, eps=0.001, momentum=0.01, affine=True, track_running_stats=True)
)
(1): Identity()
(2): Identity()
)
)
(skip_add): FloatFunctional(
(activation_post_process): Identity()
)
)
(5): QuantizableInvertedResidual(
(block): Sequential(
(0): ConvBNActivation(
(0): ConvBnReLU2d(
(0): Conv2d(40, 120, kernel_size=(1, 1), stride=(1, 1), bias=False)
(1): BatchNorm2d(120, eps=0.001, momentum=0.01, affine=True, track_running_stats=True)
(2): ReLU()
)
(1): Identity()
(2): Identity()
)
(1): ConvBNActivation(
(0): ConvBnReLU2d(
(0): Conv2d(120, 120, kernel_size=(5, 5), stride=(1, 1), padding=(2, 2), groups=120, bias=False)
(1): BatchNorm2d(120, eps=0.001, momentum=0.01, affine=True, track_running_stats=True)
(2): ReLU()
)
(1): Identity()
(2): Identity()
)
(2): QuantizableSqueezeExcitation(
(fc1): ConvReLU2d(
(0): Conv2d(120, 32, kernel_size=(1, 1), stride=(1, 1))
(1): ReLU()
)
(relu): Identity()
(fc2): Conv2d(32, 120, kernel_size=(1, 1), stride=(1, 1))
(skip_mul): FloatFunctional(
(activation_post_process): Identity()
)
)
(3): ConvBNActivation(
(0): ConvBn2d(
(0): Conv2d(120, 40, kernel_size=(1, 1), stride=(1, 1), bias=False)
(1): BatchNorm2d(40, eps=0.001, momentum=0.01, affine=True, track_running_stats=True)
)
(1): Identity()
(2): Identity()
)
)
(skip_add): FloatFunctional(
(activation_post_process): Identity()
)
)
(6): QuantizableInvertedResidual(
(block): Sequential(
(0): ConvBNActivation(
(0): ConvBnReLU2d(
(0): Conv2d(40, 120, kernel_size=(1, 1), stride=(1, 1), bias=False)
(1): BatchNorm2d(120, eps=0.001, momentum=0.01, affine=True, track_running_stats=True)
(2): ReLU()
)
(1): Identity()
(2): Identity()
)
(1): ConvBNActivation(
(0): ConvBnReLU2d(
(0): Conv2d(120, 120, kernel_size=(5, 5), stride=(1, 1), padding=(2, 2), groups=120, bias=False)
(1): BatchNorm2d(120, eps=0.001, momentum=0.01, affine=True, track_running_stats=True)
(2): ReLU()
)
(1): Identity()
(2): Identity()
)
(2): QuantizableSqueezeExcitation(
(fc1): ConvReLU2d(
(0): Conv2d(120, 32, kernel_size=(1, 1), stride=(1, 1))
(1): ReLU()
)
(relu): Identity()
(fc2): Conv2d(32, 120, kernel_size=(1, 1), stride=(1, 1))
(skip_mul): FloatFunctional(
(activation_post_process): Identity()
)
)
(3): ConvBNActivation(
(0): ConvBn2d(
(0): Conv2d(120, 40, kernel_size=(1, 1), stride=(1, 1), bias=False)
(1): BatchNorm2d(40, eps=0.001, momentum=0.01, affine=True, track_running_stats=True)
)
(1): Identity()
(2): Identity()
)
)
(skip_add): FloatFunctional(
(activation_post_process): Identity()
)
)
(7): QuantizableInvertedResidual(
(block): Sequential(
(0): ConvBNActivation(
(0): ConvBn2d(
(0): Conv2d(40, 240, kernel_size=(1, 1), stride=(1, 1), bias=False)
(1): BatchNorm2d(240, eps=0.001, momentum=0.01, affine=True, track_running_stats=True)
)
(1): Identity()
(2): Hardswish()
)
(1): ConvBNActivation(
(0): ConvBn2d(
(0): Conv2d(240, 240, kernel_size=(3, 3), stride=(2, 2), padding=(1, 1), groups=240, bias=False)
(1): BatchNorm2d(240, eps=0.001, momentum=0.01, affine=True, track_running_stats=True)
)
(1): Identity()
(2): Hardswish()
)
(2): ConvBNActivation(
(0): ConvBn2d(
(0): Conv2d(240, 80, kernel_size=(1, 1), stride=(1, 1), bias=False)
(1): BatchNorm2d(80, eps=0.001, momentum=0.01, affine=True, track_running_stats=True)
)
(1): Identity()
(2): Identity()
)
)
(skip_add): FloatFunctional(
(activation_post_process): Identity()
)
)
(8): QuantizableInvertedResidual(
(block): Sequential(
(0): ConvBNActivation(
(0): ConvBn2d(
(0): Conv2d(80, 200, kernel_size=(1, 1), stride=(1, 1), bias=False)
(1): BatchNorm2d(200, eps=0.001, momentum=0.01, affine=True, track_running_stats=True)
)
(1): Identity()
(2): Hardswish()
)
(1): ConvBNActivation(
(0): ConvBn2d(
(0): Conv2d(200, 200, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), groups=200, bias=False)
(1): BatchNorm2d(200, eps=0.001, momentum=0.01, affine=True, track_running_stats=True)
)
(1): Identity()
(2): Hardswish()
)
(2): ConvBNActivation(
(0): ConvBn2d(
(0): Conv2d(200, 80, kernel_size=(1, 1), stride=(1, 1), bias=False)
(1): BatchNorm2d(80, eps=0.001, momentum=0.01, affine=True, track_running_stats=True)
)
(1): Identity()
(2): Identity()
)
)
(skip_add): FloatFunctional(
(activation_post_process): Identity()
)
)
(9): QuantizableInvertedResidual(
(block): Sequential(
(0): ConvBNActivation(
(0): ConvBn2d(
(0): Conv2d(80, 184, kernel_size=(1, 1), stride=(1, 1), bias=False)
(1): BatchNorm2d(184, eps=0.001, momentum=0.01, affine=True, track_running_stats=True)
)
(1): Identity()
(2): Hardswish()
)
(1): ConvBNActivation(
(0): ConvBn2d(
(0): Conv2d(184, 184, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), groups=184, bias=False)
(1): BatchNorm2d(184, eps=0.001, momentum=0.01, affine=True, track_running_stats=True)
)
(1): Identity()
(2): Hardswish()
)
(2): ConvBNActivation(
(0): ConvBn2d(
(0): Conv2d(184, 80, kernel_size=(1, 1), stride=(1, 1), bias=False)
(1): BatchNorm2d(80, eps=0.001, momentum=0.01, affine=True, track_running_stats=True)
)
(1): Identity()
(2): Identity()
)
)
(skip_add): FloatFunctional(
(activation_post_process): Identity()
)
)
(10): QuantizableInvertedResidual(
(block): Sequential(
(0): ConvBNActivation(
(0): ConvBn2d(
(0): Conv2d(80, 184, kernel_size=(1, 1), stride=(1, 1), bias=False)
(1): BatchNorm2d(184, eps=0.001, momentum=0.01, affine=True, track_running_stats=True)
)
(1): Identity()
(2): Hardswish()
)
(1): ConvBNActivation(
(0): ConvBn2d(
(0): Conv2d(184, 184, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), groups=184, bias=False)
(1): BatchNorm2d(184, eps=0.001, momentum=0.01, affine=True, track_running_stats=True)
)
(1): Identity()
(2): Hardswish()
)
(2): ConvBNActivation(
(0): ConvBn2d(
(0): Conv2d(184, 80, kernel_size=(1, 1), stride=(1, 1), bias=False)
(1): BatchNorm2d(80, eps=0.001, momentum=0.01, affine=True, track_running_stats=True)
)
(1): Identity()
(2): Identity()
)
)
(skip_add): FloatFunctional(
(activation_post_process): Identity()
)
)
(11): QuantizableInvertedResidual(
(block): Sequential(
(0): ConvBNActivation(
(0): ConvBn2d(
(0): Conv2d(80, 480, kernel_size=(1, 1), stride=(1, 1), bias=False)
(1): BatchNorm2d(480, eps=0.001, momentum=0.01, affine=True, track_running_stats=True)
)
(1): Identity()
(2): Hardswish()
)
(1): ConvBNActivation(
(0): ConvBn2d(
(0): Conv2d(480, 480, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), groups=480, bias=False)
(1): BatchNorm2d(480, eps=0.001, momentum=0.01, affine=True, track_running_stats=True)
)
(1): Identity()
(2): Hardswish()
)
(2): QuantizableSqueezeExcitation(
(fc1): ConvReLU2d(
(0): Conv2d(480, 120, kernel_size=(1, 1), stride=(1, 1))
(1): ReLU()
)
(relu): Identity()
(fc2): Conv2d(120, 480, kernel_size=(1, 1), stride=(1, 1))
(skip_mul): FloatFunctional(
(activation_post_process): Identity()
)
)
(3): ConvBNActivation(
(0): ConvBn2d(
(0): Conv2d(480, 112, kernel_size=(1, 1), stride=(1, 1), bias=False)
(1): BatchNorm2d(112, eps=0.001, momentum=0.01, affine=True, track_running_stats=True)
)
(1): Identity()
(2): Identity()
)
)
(skip_add): FloatFunctional(
(activation_post_process): Identity()
)
)
(12): QuantizableInvertedResidual(
(block): Sequential(
(0): ConvBNActivation(
(0): ConvBn2d(
(0): Conv2d(112, 672, kernel_size=(1, 1), stride=(1, 1), bias=False)
(1): BatchNorm2d(672, eps=0.001, momentum=0.01, affine=True, track_running_stats=True)
)
(1): Identity()
(2): Hardswish()
)
(1): ConvBNActivation(
(0): ConvBn2d(
(0): Conv2d(672, 672, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), groups=672, bias=False)
(1): BatchNorm2d(672, eps=0.001, momentum=0.01, affine=True, track_running_stats=True)
)
(1): Identity()
(2): Hardswish()
)
(2): QuantizableSqueezeExcitation(
(fc1): ConvReLU2d(
(0): Conv2d(672, 168, kernel_size=(1, 1), stride=(1, 1))
(1): ReLU()
)
(relu): Identity()
(fc2): Conv2d(168, 672, kernel_size=(1, 1), stride=(1, 1))
(skip_mul): FloatFunctional(
(activation_post_process): Identity()
)
)
(3): ConvBNActivation(
(0): ConvBn2d(
(0): Conv2d(672, 112, kernel_size=(1, 1), stride=(1, 1), bias=False)
(1): BatchNorm2d(112, eps=0.001, momentum=0.01, affine=True, track_running_stats=True)
)
(1): Identity()
(2): Identity()
)
)
(skip_add): FloatFunctional(
(activation_post_process): Identity()
)
)
(13): QuantizableInvertedResidual(
(block): Sequential(
(0): ConvBNActivation(
(0): ConvBn2d(
(0): Conv2d(112, 672, kernel_size=(1, 1), stride=(1, 1), bias=False)
(1): BatchNorm2d(672, eps=0.001, momentum=0.01, affine=True, track_running_stats=True)
)
(1): Identity()
(2): Hardswish()
)
(1): ConvBNActivation(
(0): ConvBn2d(
(0): Conv2d(672, 672, kernel_size=(5, 5), stride=(2, 2), padding=(2, 2), groups=672, bias=False)
(1): BatchNorm2d(672, eps=0.001, momentum=0.01, affine=True, track_running_stats=True)
)
(1): Identity()
(2): Hardswish()
)
(2): QuantizableSqueezeExcitation(
(fc1): ConvReLU2d(
(0): Conv2d(672, 168, kernel_size=(1, 1), stride=(1, 1))
(1): ReLU()
)
(relu): Identity()
(fc2): Conv2d(168, 672, kernel_size=(1, 1), stride=(1, 1))
(skip_mul): FloatFunctional(
(activation_post_process): Identity()
)
)
(3): ConvBNActivation(
(0): ConvBn2d(
(0): Conv2d(672, 160, kernel_size=(1, 1), stride=(1, 1), bias=False)
(1): BatchNorm2d(160, eps=0.001, momentum=0.01, affine=True, track_running_stats=True)
)
(1): Identity()
(2): Identity()
)
)
(skip_add): FloatFunctional(
(activation_post_process): Identity()
)
)
(14): QuantizableInvertedResidual(
(block): Sequential(
(0): ConvBNActivation(
(0): ConvBn2d(
(0): Conv2d(160, 960, kernel_size=(1, 1), stride=(1, 1), bias=False)
(1): BatchNorm2d(960, eps=0.001, momentum=0.01, affine=True, track_running_stats=True)
)
(1): Identity()
(2): Hardswish()
)
(1): ConvBNActivation(
(0): ConvBn2d(
(0): Conv2d(960, 960, kernel_size=(5, 5), stride=(1, 1), padding=(2, 2), groups=960, bias=False)
(1): BatchNorm2d(960, eps=0.001, momentum=0.01, affine=True, track_running_stats=True)
)
(1): Identity()
(2): Hardswish()
)
(2): QuantizableSqueezeExcitation(
(fc1): ConvReLU2d(
(0): Conv2d(960, 240, kernel_size=(1, 1), stride=(1, 1))
(1): ReLU()
)
(relu): Identity()
(fc2): Conv2d(240, 960, kernel_size=(1, 1), stride=(1, 1))
(skip_mul): FloatFunctional(
(activation_post_process): Identity()
)
)
(3): ConvBNActivation(
(0): ConvBn2d(
(0): Conv2d(960, 160, kernel_size=(1, 1), stride=(1, 1), bias=False)
(1): BatchNorm2d(160, eps=0.001, momentum=0.01, affine=True, track_running_stats=True)
)
(1): Identity()
(2): Identity()
)
)
(skip_add): FloatFunctional(
(activation_post_process): Identity()
)
)
(15): QuantizableInvertedResidual(
(block): Sequential(
(0): ConvBNActivation(
(0): ConvBn2d(
(0): Conv2d(160, 960, kernel_size=(1, 1), stride=(1, 1), bias=False)
(1): BatchNorm2d(960, eps=0.001, momentum=0.01, affine=True, track_running_stats=True)
)
(1): Identity()
(2): Hardswish()
)
(1): ConvBNActivation(
(0): ConvBn2d(
(0): Conv2d(960, 960, kernel_size=(5, 5), stride=(1, 1), padding=(2, 2), groups=960, bias=False)
(1): BatchNorm2d(960, eps=0.001, momentum=0.01, affine=True, track_running_stats=True)
)
(1): Identity()
(2): Hardswish()
)
(2): QuantizableSqueezeExcitation(
(fc1): ConvReLU2d(
(0): Conv2d(960, 240, kernel_size=(1, 1), stride=(1, 1))
(1): ReLU()
)
(relu): Identity()
(fc2): Conv2d(240, 960, kernel_size=(1, 1), stride=(1, 1))
(skip_mul): FloatFunctional(
(activation_post_process): Identity()
)
)
(3): ConvBNActivation(
(0): ConvBn2d(
(0): Conv2d(960, 160, kernel_size=(1, 1), stride=(1, 1), bias=False)
(1): BatchNorm2d(160, eps=0.001, momentum=0.01, affine=True, track_running_stats=True)
)
(1): Identity()
(2): Identity()
)
)
(skip_add): FloatFunctional(
(activation_post_process): Identity()
)
)
(16): ConvBNActivation(
(0): ConvBn2d(
(0): Conv2d(160, 960, kernel_size=(1, 1), stride=(1, 1), bias=False)
(1): BatchNorm2d(960, eps=0.001, momentum=0.01, affine=True, track_running_stats=True)
)
(1): Identity()
(2): Hardswish()
)
)
(fpn): FeaturePyramidNetwork(
(inner_blocks): ModuleList(
(0): Conv2d(160, 256, kernel_size=(1, 1), stride=(1, 1))
(1): Conv2d(960, 256, kernel_size=(1, 1), stride=(1, 1))
)
(layer_blocks): ModuleList(
(0): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
(1): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
)
(extra_blocks): LastLevelMaxPool()
)
)
(rpn): RegionProposalNetwork(
(anchor_generator): AnchorGenerator()
(head): RPNHead(
(conv): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
(cls_logits): Conv2d(256, 15, kernel_size=(1, 1), stride=(1, 1))
(bbox_pred): Conv2d(256, 60, kernel_size=(1, 1), stride=(1, 1))
)
)
(roi_heads): RoIHeads(
(box_roi_pool): MultiScaleRoIAlign(featmap_names=['0', '1', '2', '3'], output_size=(7, 7), sampling_ratio=2)
(box_head): TwoMLPHead(
(fc6): Linear(in_features=12544, out_features=1024, bias=True)
(fc7): Linear(in_features=1024, out_features=1024, bias=True)
)
(box_predictor): FastRCNNPredictor(
(cls_score): Linear(in_features=1024, out_features=2, bias=True)
(bbox_pred): Linear(in_features=1024, out_features=8, bias=True)
)
)
)