from detectron2.config import LazyCall as L from detectron2.layers import ShapeSpec from detectron2.modeling.box_regression import Box2BoxTransform from detectron2.modeling.matcher import Matcher from detectron2.modeling.roi_heads import FastRCNNOutputLayers, FastRCNNConvFCHead, CascadeROIHeads from .mask_rcnn_fpn import model # arguments that don't exist for Cascade R-CNN [model.roi_heads.pop(k) for k in ["box_head", "box_predictor", "proposal_matcher"]] model.roi_heads.update( _target_=CascadeROIHeads, box_heads=[ L(FastRCNNConvFCHead)( input_shape=ShapeSpec(channels=256, height=7, width=7), conv_dims=[], fc_dims=[1024, 1024], ) for k in range(3) ], box_predictors=[ L(FastRCNNOutputLayers)( input_shape=ShapeSpec(channels=1024), test_score_thresh=0.05, box2box_transform=L(Box2BoxTransform)(weights=(w1, w1, w2, w2)), cls_agnostic_bbox_reg=True, num_classes="${...num_classes}", ) for (w1, w2) in [(10, 5), (20, 10), (30, 15)] ], proposal_matchers=[ L(Matcher)(thresholds=[th], labels=[0, 1], allow_low_quality_matches=False) for th in [0.5, 0.6, 0.7] ], )