# Copyright (c) OpenMMLab. All rights reserved. from mmcv import ConfigDict from mmcv.utils import get_logger from mmfewshot.detection.models.builder import build_detector def test_attention_rpn_detector_forward(): cfg = ConfigDict( type='TFA', backbone=dict( type='ResNet', depth=101, num_stages=4, out_indices=(0, 1, 2, 3), frozen_stages=4, norm_cfg=dict(type='BN', requires_grad=False), norm_eval=True, style='caffe'), neck=dict( type='FPN', in_channels=[256, 512, 1024, 2048], out_channels=256, num_outs=5, init_cfg=[ dict( type='Caffe2Xavier', override=dict(type='Caffe2Xavier', name='lateral_convs')), dict( type='Caffe2Xavier', override=dict(type='Caffe2Xavier', name='fpn_convs')) ]), rpn_head=dict( type='RPNHead', in_channels=256, feat_channels=256, anchor_generator=dict( type='AnchorGenerator', scales=[8], ratios=[0.5, 1.0, 2.0], strides=[4, 8, 16, 32, 64]), bbox_coder=dict( type='DeltaXYWHBBoxCoder', target_means=[0.0, 0.0, 0.0, 0.0], target_stds=[1.0, 1.0, 1.0, 1.0]), loss_cls=dict( type='CrossEntropyLoss', use_sigmoid=True, loss_weight=1.0), loss_bbox=dict(type='L1Loss', loss_weight=1.0)), roi_head=dict( type='StandardRoIHead', bbox_roi_extractor=dict( type='SingleRoIExtractor', roi_layer=dict( type='RoIAlign', output_size=7, sampling_ratio=0), out_channels=256, featmap_strides=[4, 8, 16, 32]), bbox_head=dict( type='CosineSimBBoxHead', in_channels=256, fc_out_channels=1024, roi_feat_size=7, num_classes=20, bbox_coder=dict( type='DeltaXYWHBBoxCoder', target_means=[0.0, 0.0, 0.0, 0.0], target_stds=[0.1, 0.1, 0.2, 0.2]), reg_class_agnostic=False, loss_cls=dict( type='CrossEntropyLoss', use_sigmoid=False, loss_weight=1.0), loss_bbox=dict(type='L1Loss', loss_weight=1.0), init_cfg=[ dict( type='Caffe2Xavier', override=dict(type='Caffe2Xavier', name='shared_fcs')), dict( type='Normal', override=dict(type='Normal', name='fc_cls', std=0.01)), dict( type='Normal', override=dict(type='Normal', name='fc_reg', std=0.001)) ], num_shared_fcs=2, scale=20)), train_cfg=dict( rpn=dict( assigner=dict( type='MaxIoUAssigner', pos_iou_thr=0.7, neg_iou_thr=0.3, min_pos_iou=0.3, match_low_quality=True, ignore_iof_thr=-1), sampler=dict( type='RandomSampler', num=256, pos_fraction=0.5, neg_pos_ub=-1, add_gt_as_proposals=False), allowed_border=-1, pos_weight=-1, debug=False), rpn_proposal=dict( nms_pre=2000, max_per_img=1000, nms=dict(type='nms', iou_threshold=0.7), min_bbox_size=0), rcnn=dict( assigner=dict( type='MaxIoUAssigner', pos_iou_thr=0.5, neg_iou_thr=0.5, min_pos_iou=0.5, match_low_quality=False, ignore_iof_thr=-1), sampler=dict( type='RandomSampler', num=512, pos_fraction=0.25, neg_pos_ub=-1, add_gt_as_proposals=True), pos_weight=-1, debug=False)), test_cfg=dict( rpn=dict( nms_pre=1000, max_per_img=1000, nms=dict(type='nms', iou_threshold=0.7), min_bbox_size=0), rcnn=dict( score_thr=0.05, nms=dict(type='nms', iou_threshold=0.5), max_per_img=100)), frozen_parameters=['backbone', 'neck']) model = build_detector(cfg, logger=get_logger('test')) for parameter in model.backbone.parameters(): assert parameter.requires_grad is False for parameter in model.neck.parameters(): assert parameter.requires_grad is False for parameter in model.rpn_head.parameters(): assert parameter.requires_grad is True for parameter in model.roi_head.parameters(): assert parameter.requires_grad is True