|
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 |
|
|
|
|
|
[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] |
|
], |
|
) |
|
|