AndreasLH's picture
upload repo
56bd2b5
# 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