# Copyright (c) Meta Platforms, Inc. and affiliates from detectron2.config import CfgNode as CN def get_cfg_defaults(cfg): # A list of category names which will be used cfg.DATASETS.CATEGORY_NAMES = [] # The category names which will be treated as ignore # e.g., not counting as background during training # or as false positives during evaluation. cfg.DATASETS.IGNORE_NAMES = [] # Should the datasets appear with the same probabilty # in batches (e.g., the imbalance from small and large # datasets will be accounted for during sampling) cfg.DATALOADER.BALANCE_DATASETS = False # The thresholds for when to treat a known box # as ignore based on too heavy of truncation or # too low of visibility in the image. This affects # both training and evaluation ignores. cfg.DATASETS.TRUNCATION_THRES = 0.99 cfg.DATASETS.VISIBILITY_THRES = 0.01 cfg.DATASETS.MIN_HEIGHT_THRES = 0.00 cfg.DATASETS.MAX_DEPTH = 1e8 # Whether modal 2D boxes should be loaded, # or if the full 3D projected boxes should be used. cfg.DATASETS.MODAL_2D_BOXES = False # Whether truncated 2D boxes should be loaded, # or if the 3D full projected boxes should be used. cfg.DATASETS.TRUNC_2D_BOXES = True # Threshold used for matching and filtering boxes # inside of ignore regions, within the RPN and ROIHeads cfg.MODEL.RPN.IGNORE_THRESHOLD = 0.5 # Configuration for cube head cfg.MODEL.ROI_CUBE_HEAD = CN() cfg.MODEL.ROI_CUBE_HEAD.NAME = "CubeHead" cfg.MODEL.ROI_CUBE_HEAD.POOLER_RESOLUTION = 7 cfg.MODEL.ROI_CUBE_HEAD.POOLER_SAMPLING_RATIO = 0 cfg.MODEL.ROI_CUBE_HEAD.POOLER_TYPE = "ROIAlignV2" # Settings for the cube head features cfg.MODEL.ROI_CUBE_HEAD.NUM_CONV = 0 cfg.MODEL.ROI_CUBE_HEAD.CONV_DIM = 256 cfg.MODEL.ROI_CUBE_HEAD.NUM_FC = 2 cfg.MODEL.ROI_CUBE_HEAD.FC_DIM = 1024 # proposal method cfg.MODEL.ROI_CUBE_HEAD.NUMBER_OF_PROPOSALS = 1000 # the style to predict Z with currently supported # options --> ['direct', 'sigmoid', 'log', 'clusters'] cfg.MODEL.ROI_CUBE_HEAD.Z_TYPE = "direct" # the style to predict pose with currently supported # options --> ['6d', 'euler', 'quaternion'] cfg.MODEL.ROI_CUBE_HEAD.POSE_TYPE = "6d" # Whether to scale all 3D losses by inverse depth cfg.MODEL.ROI_CUBE_HEAD.INVERSE_Z_WEIGHT = False # Virtual depth puts all predictions of depth into # a shared virtual space with a shared focal length. cfg.MODEL.ROI_CUBE_HEAD.VIRTUAL_DEPTH = True cfg.MODEL.ROI_CUBE_HEAD.VIRTUAL_FOCAL = 512.0 # If true, then all losses are computed using the 8 corners # such that they are all in a shared scale space. # E.g., their scale correlates with their impact on 3D IoU. # This way no manual weights need to be set. cfg.MODEL.ROI_CUBE_HEAD.DISENTANGLED_LOSS = True # When > 1, the outputs of the 3D head will be based on # a 2D scale clustering, based on 2D proposal height/width. # This parameter describes the number of bins to cluster. cfg.MODEL.ROI_CUBE_HEAD.CLUSTER_BINS = 1 # Whether batch norm is enabled during training. # If false, all BN weights will be frozen. cfg.MODEL.USE_BN = True # Whether to predict the pose in allocentric space. # The allocentric space may correlate better with 2D # images compared to egocentric poses. cfg.MODEL.ROI_CUBE_HEAD.ALLOCENTRIC_POSE = True # Whether to use chamfer distance for disentangled losses # of pose. This avoids periodic issues of rotation but # may prevent the pose "direction" from being interpretable. cfg.MODEL.ROI_CUBE_HEAD.CHAMFER_POSE = True # Should the prediction heads share FC features or not. # These include groups of uv, z, whl, pose. cfg.MODEL.ROI_CUBE_HEAD.SHARED_FC = True # Check for stable gradients. When inf is detected, skip the update. # This prevents an occasional bad sample from exploding the model. # The threshold below is the allows percent of bad samples. # 0.0 is off, and 0.01 is recommended for minor robustness to exploding. cfg.MODEL.STABILIZE = 0.01 # Whether or not to use the dimension priors cfg.MODEL.ROI_CUBE_HEAD.DIMS_PRIORS_ENABLED = True # How prior dimensions should be computed? # The supported modes are ["exp", "sigmoid"] # where exp is unbounded and sigmoid is bounded # between +- 3 standard deviations from the mean. cfg.MODEL.ROI_CUBE_HEAD.DIMS_PRIORS_FUNC = 'exp' # weight for confidence loss. 0 is off. cfg.MODEL.ROI_CUBE_HEAD.USE_CONFIDENCE = 1.0 # Loss weights for XY, Z, Dims, Pose cfg.MODEL.ROI_CUBE_HEAD.LOSS_W_3D = 1.0 cfg.MODEL.ROI_CUBE_HEAD.LOSS_W_XY = 1.0 cfg.MODEL.ROI_CUBE_HEAD.LOSS_W_POSE = 7.0 cfg.MODEL.ROI_CUBE_HEAD.LOSS_W_NORMAL_VEC = 20.0 cfg.MODEL.ROI_CUBE_HEAD.LOSS_W_IOU = 1.0 cfg.MODEL.ROI_CUBE_HEAD.LOSS_W_SEG = 2.5 cfg.MODEL.ROI_CUBE_HEAD.LOSS_W_Z = 1.0 cfg.MODEL.ROI_CUBE_HEAD.LOSS_W_DIMS = 20.0 cfg.MODEL.ROI_CUBE_HEAD.LOSS_W_DEPTH = 1.0 cfg.MODEL.DLA = CN() # Supported types for DLA backbones are... # dla34, dla46_c, dla46x_c, dla60x_c, dla60, dla60x, dla102x, dla102x2, dla169 cfg.MODEL.DLA.TYPE = 'dla34' # Only available for dla34, dla60, dla102 cfg.MODEL.DLA.TRICKS = False # A joint loss for the disentangled loss. # All predictions are computed using a corner # or chamfers loss depending on chamfer_pose! # Recommened to keep this weight small: [0.05, 0.5] cfg.MODEL.ROI_CUBE_HEAD.LOSS_W_JOINT = 1.0 # sgd, adam, adam+amsgrad, adamw, adamw+amsgrad cfg.SOLVER.TYPE = 'sgd' cfg.MODEL.RESNETS.TORCHVISION = True cfg.TEST.DETECTIONS_PER_IMAGE = 100 cfg.TEST.VISIBILITY_THRES = 1/2.0 cfg.TEST.TRUNCATION_THRES = 1/2.0 cfg.INPUT.RANDOM_FLIP = "horizontal" # When True, we will use localization uncertainty # as the new IoUness score in the RPN. cfg.MODEL.RPN.OBJECTNESS_UNCERTAINTY = 'IoUness' # If > 0.0 this is the scaling factor that will be applied to # an RoI 2D box before doing any pooling to give more context. # Ex. 1.5 makes width and height 50% larger. cfg.MODEL.ROI_CUBE_HEAD.SCALE_ROI_BOXES = 0.0 # weight path specifically for pretraining (no checkpointables will be loaded) cfg.MODEL.WEIGHTS_PRETRAIN = '' # ## start of our things cfg.MODEL.ROI_CUBE_HEAD.TEST = 'bas' cfg.MODEL.ROI_CUBE_HEAD.DIMS_PRIORS_PRECOMPUTED = False cfg.PLOT = CN(new_allowed=True) cfg.PLOT.OUTPUT_DIR = '' cfg.PLOT.EVAL = '' cfg.PLOT.MODE2D = '' #either GT or PRED cfg.PLOT.SCORING_FUNC = None cfg.PLOT.PROPOSAL_FUNC = None cfg.PLOT.number_of_proposals = 1000 cfg.TRAIN = CN(new_allowed=True) cfg.TRAIN.pseudo_gt = 'learn' # these are meant to be overwritten as an argument cfg.log = True # (these 2 are mutually exclusive) z_pseudo_gt_patch or z_pseudo_gt_center cfg.loss_functions = ['dims', 'pose_alignment', 'pose_ground', 'iou', 'z', 'z_pseudo_gt_patch', 'depth'] cfg.MODEL.DEPTH_ON = False #whether to use the depth anything concated features