|  |  | 
					
						
						|  |  | 
					
						
						|  |  | 
					
						
						|  |  | 
					
						
						|  | from detectron2.config import CfgNode as CN | 
					
						
						|  |  | 
					
						
						|  |  | 
					
						
						|  | def add_dataset_category_config(cfg: CN) -> None: | 
					
						
						|  | """ | 
					
						
						|  | Add config for additional category-related dataset options | 
					
						
						|  | - category whitelisting | 
					
						
						|  | - category mapping | 
					
						
						|  | """ | 
					
						
						|  | _C = cfg | 
					
						
						|  | _C.DATASETS.CATEGORY_MAPS = CN(new_allowed=True) | 
					
						
						|  | _C.DATASETS.WHITELISTED_CATEGORIES = CN(new_allowed=True) | 
					
						
						|  |  | 
					
						
						|  | _C.DATASETS.CLASS_TO_MESH_NAME_MAPPING = CN(new_allowed=True) | 
					
						
						|  |  | 
					
						
						|  |  | 
					
						
						|  | def add_evaluation_config(cfg: CN) -> None: | 
					
						
						|  | _C = cfg | 
					
						
						|  | _C.DENSEPOSE_EVALUATION = CN() | 
					
						
						|  |  | 
					
						
						|  |  | 
					
						
						|  |  | 
					
						
						|  | _C.DENSEPOSE_EVALUATION.TYPE = "iou" | 
					
						
						|  |  | 
					
						
						|  |  | 
					
						
						|  |  | 
					
						
						|  |  | 
					
						
						|  |  | 
					
						
						|  |  | 
					
						
						|  |  | 
					
						
						|  |  | 
					
						
						|  |  | 
					
						
						|  |  | 
					
						
						|  | _C.DENSEPOSE_EVALUATION.STORAGE = "none" | 
					
						
						|  |  | 
					
						
						|  |  | 
					
						
						|  | _C.DENSEPOSE_EVALUATION.MIN_IOU_THRESHOLD = 0.5 | 
					
						
						|  |  | 
					
						
						|  | _C.DENSEPOSE_EVALUATION.DISTRIBUTED_INFERENCE = True | 
					
						
						|  |  | 
					
						
						|  | _C.DENSEPOSE_EVALUATION.EVALUATE_MESH_ALIGNMENT = False | 
					
						
						|  |  | 
					
						
						|  | _C.DENSEPOSE_EVALUATION.MESH_ALIGNMENT_MESH_NAMES = [] | 
					
						
						|  |  | 
					
						
						|  |  | 
					
						
						|  | def add_bootstrap_config(cfg: CN) -> None: | 
					
						
						|  | """ """ | 
					
						
						|  | _C = cfg | 
					
						
						|  | _C.BOOTSTRAP_DATASETS = [] | 
					
						
						|  | _C.BOOTSTRAP_MODEL = CN() | 
					
						
						|  | _C.BOOTSTRAP_MODEL.WEIGHTS = "" | 
					
						
						|  | _C.BOOTSTRAP_MODEL.DEVICE = "cuda" | 
					
						
						|  |  | 
					
						
						|  |  | 
					
						
						|  | def get_bootstrap_dataset_config() -> CN: | 
					
						
						|  | _C = CN() | 
					
						
						|  | _C.DATASET = "" | 
					
						
						|  |  | 
					
						
						|  | _C.RATIO = 0.1 | 
					
						
						|  |  | 
					
						
						|  | _C.IMAGE_LOADER = CN(new_allowed=True) | 
					
						
						|  | _C.IMAGE_LOADER.TYPE = "" | 
					
						
						|  | _C.IMAGE_LOADER.BATCH_SIZE = 4 | 
					
						
						|  | _C.IMAGE_LOADER.NUM_WORKERS = 4 | 
					
						
						|  | _C.IMAGE_LOADER.CATEGORIES = [] | 
					
						
						|  | _C.IMAGE_LOADER.MAX_COUNT_PER_CATEGORY = 1_000_000 | 
					
						
						|  | _C.IMAGE_LOADER.CATEGORY_TO_CLASS_MAPPING = CN(new_allowed=True) | 
					
						
						|  |  | 
					
						
						|  | _C.INFERENCE = CN() | 
					
						
						|  |  | 
					
						
						|  | _C.INFERENCE.INPUT_BATCH_SIZE = 4 | 
					
						
						|  |  | 
					
						
						|  | _C.INFERENCE.OUTPUT_BATCH_SIZE = 2 | 
					
						
						|  |  | 
					
						
						|  | _C.DATA_SAMPLER = CN(new_allowed=True) | 
					
						
						|  | _C.DATA_SAMPLER.TYPE = "" | 
					
						
						|  | _C.DATA_SAMPLER.USE_GROUND_TRUTH_CATEGORIES = False | 
					
						
						|  |  | 
					
						
						|  | _C.FILTER = CN(new_allowed=True) | 
					
						
						|  | _C.FILTER.TYPE = "" | 
					
						
						|  | return _C | 
					
						
						|  |  | 
					
						
						|  |  | 
					
						
						|  | def load_bootstrap_config(cfg: CN) -> None: | 
					
						
						|  | """ | 
					
						
						|  | Bootstrap datasets are given as a list of `dict` that are not automatically | 
					
						
						|  | converted into CfgNode. This method processes all bootstrap dataset entries | 
					
						
						|  | and ensures that they are in CfgNode format and comply with the specification | 
					
						
						|  | """ | 
					
						
						|  | if not cfg.BOOTSTRAP_DATASETS: | 
					
						
						|  | return | 
					
						
						|  |  | 
					
						
						|  | bootstrap_datasets_cfgnodes = [] | 
					
						
						|  | for dataset_cfg in cfg.BOOTSTRAP_DATASETS: | 
					
						
						|  | _C = get_bootstrap_dataset_config().clone() | 
					
						
						|  | _C.merge_from_other_cfg(CN(dataset_cfg)) | 
					
						
						|  | bootstrap_datasets_cfgnodes.append(_C) | 
					
						
						|  | cfg.BOOTSTRAP_DATASETS = bootstrap_datasets_cfgnodes | 
					
						
						|  |  | 
					
						
						|  |  | 
					
						
						|  | def add_densepose_head_cse_config(cfg: CN) -> None: | 
					
						
						|  | """ | 
					
						
						|  | Add configuration options for Continuous Surface Embeddings (CSE) | 
					
						
						|  | """ | 
					
						
						|  | _C = cfg | 
					
						
						|  | _C.MODEL.ROI_DENSEPOSE_HEAD.CSE = CN() | 
					
						
						|  |  | 
					
						
						|  | _C.MODEL.ROI_DENSEPOSE_HEAD.CSE.EMBED_SIZE = 16 | 
					
						
						|  |  | 
					
						
						|  | _C.MODEL.ROI_DENSEPOSE_HEAD.CSE.EMBEDDERS = CN(new_allowed=True) | 
					
						
						|  |  | 
					
						
						|  | _C.MODEL.ROI_DENSEPOSE_HEAD.CSE.EMBEDDING_DIST_GAUSS_SIGMA = 0.01 | 
					
						
						|  |  | 
					
						
						|  | _C.MODEL.ROI_DENSEPOSE_HEAD.CSE.GEODESIC_DIST_GAUSS_SIGMA = 0.01 | 
					
						
						|  |  | 
					
						
						|  | _C.MODEL.ROI_DENSEPOSE_HEAD.CSE.EMBED_LOSS_WEIGHT = 0.6 | 
					
						
						|  |  | 
					
						
						|  |  | 
					
						
						|  |  | 
					
						
						|  |  | 
					
						
						|  | _C.MODEL.ROI_DENSEPOSE_HEAD.CSE.EMBED_LOSS_NAME = "EmbeddingLoss" | 
					
						
						|  |  | 
					
						
						|  | _C.MODEL.ROI_DENSEPOSE_HEAD.CSE.FEATURES_LR_FACTOR = 1.0 | 
					
						
						|  | _C.MODEL.ROI_DENSEPOSE_HEAD.CSE.EMBEDDING_LR_FACTOR = 1.0 | 
					
						
						|  |  | 
					
						
						|  | _C.MODEL.ROI_DENSEPOSE_HEAD.CSE.SHAPE_TO_SHAPE_CYCLE_LOSS = CN({"ENABLED": False}) | 
					
						
						|  |  | 
					
						
						|  | _C.MODEL.ROI_DENSEPOSE_HEAD.CSE.SHAPE_TO_SHAPE_CYCLE_LOSS.WEIGHT = 0.025 | 
					
						
						|  |  | 
					
						
						|  | _C.MODEL.ROI_DENSEPOSE_HEAD.CSE.SHAPE_TO_SHAPE_CYCLE_LOSS.NORM_P = 2 | 
					
						
						|  |  | 
					
						
						|  | _C.MODEL.ROI_DENSEPOSE_HEAD.CSE.SHAPE_TO_SHAPE_CYCLE_LOSS.TEMPERATURE = 0.05 | 
					
						
						|  |  | 
					
						
						|  |  | 
					
						
						|  |  | 
					
						
						|  | _C.MODEL.ROI_DENSEPOSE_HEAD.CSE.SHAPE_TO_SHAPE_CYCLE_LOSS.MAX_NUM_VERTICES = 4936 | 
					
						
						|  |  | 
					
						
						|  | _C.MODEL.ROI_DENSEPOSE_HEAD.CSE.PIX_TO_SHAPE_CYCLE_LOSS = CN({"ENABLED": False}) | 
					
						
						|  |  | 
					
						
						|  | _C.MODEL.ROI_DENSEPOSE_HEAD.CSE.PIX_TO_SHAPE_CYCLE_LOSS.WEIGHT = 0.0001 | 
					
						
						|  |  | 
					
						
						|  | _C.MODEL.ROI_DENSEPOSE_HEAD.CSE.PIX_TO_SHAPE_CYCLE_LOSS.NORM_P = 2 | 
					
						
						|  |  | 
					
						
						|  | _C.MODEL.ROI_DENSEPOSE_HEAD.CSE.PIX_TO_SHAPE_CYCLE_LOSS.USE_ALL_MESHES_NOT_GT_ONLY = False | 
					
						
						|  |  | 
					
						
						|  |  | 
					
						
						|  | _C.MODEL.ROI_DENSEPOSE_HEAD.CSE.PIX_TO_SHAPE_CYCLE_LOSS.NUM_PIXELS_TO_SAMPLE = 100 | 
					
						
						|  |  | 
					
						
						|  | _C.MODEL.ROI_DENSEPOSE_HEAD.CSE.PIX_TO_SHAPE_CYCLE_LOSS.PIXEL_SIGMA = 5.0 | 
					
						
						|  | _C.MODEL.ROI_DENSEPOSE_HEAD.CSE.PIX_TO_SHAPE_CYCLE_LOSS.TEMPERATURE_PIXEL_TO_VERTEX = 0.05 | 
					
						
						|  | _C.MODEL.ROI_DENSEPOSE_HEAD.CSE.PIX_TO_SHAPE_CYCLE_LOSS.TEMPERATURE_VERTEX_TO_PIXEL = 0.05 | 
					
						
						|  |  | 
					
						
						|  |  | 
					
						
						|  | def add_densepose_head_config(cfg: CN) -> None: | 
					
						
						|  | """ | 
					
						
						|  | Add config for densepose head. | 
					
						
						|  | """ | 
					
						
						|  | _C = cfg | 
					
						
						|  |  | 
					
						
						|  | _C.MODEL.DENSEPOSE_ON = True | 
					
						
						|  |  | 
					
						
						|  | _C.MODEL.ROI_DENSEPOSE_HEAD = CN() | 
					
						
						|  | _C.MODEL.ROI_DENSEPOSE_HEAD.NAME = "" | 
					
						
						|  | _C.MODEL.ROI_DENSEPOSE_HEAD.NUM_STACKED_CONVS = 8 | 
					
						
						|  |  | 
					
						
						|  | _C.MODEL.ROI_DENSEPOSE_HEAD.NUM_PATCHES = 24 | 
					
						
						|  | _C.MODEL.ROI_DENSEPOSE_HEAD.DECONV_KERNEL = 4 | 
					
						
						|  | _C.MODEL.ROI_DENSEPOSE_HEAD.CONV_HEAD_DIM = 512 | 
					
						
						|  | _C.MODEL.ROI_DENSEPOSE_HEAD.CONV_HEAD_KERNEL = 3 | 
					
						
						|  | _C.MODEL.ROI_DENSEPOSE_HEAD.UP_SCALE = 2 | 
					
						
						|  | _C.MODEL.ROI_DENSEPOSE_HEAD.HEATMAP_SIZE = 112 | 
					
						
						|  | _C.MODEL.ROI_DENSEPOSE_HEAD.POOLER_TYPE = "ROIAlignV2" | 
					
						
						|  | _C.MODEL.ROI_DENSEPOSE_HEAD.POOLER_RESOLUTION = 28 | 
					
						
						|  | _C.MODEL.ROI_DENSEPOSE_HEAD.POOLER_SAMPLING_RATIO = 2 | 
					
						
						|  | _C.MODEL.ROI_DENSEPOSE_HEAD.NUM_COARSE_SEGM_CHANNELS = 2 | 
					
						
						|  |  | 
					
						
						|  | _C.MODEL.ROI_DENSEPOSE_HEAD.FG_IOU_THRESHOLD = 0.7 | 
					
						
						|  |  | 
					
						
						|  | _C.MODEL.ROI_DENSEPOSE_HEAD.INDEX_WEIGHTS = 5.0 | 
					
						
						|  |  | 
					
						
						|  | _C.MODEL.ROI_DENSEPOSE_HEAD.PART_WEIGHTS = 1.0 | 
					
						
						|  |  | 
					
						
						|  | _C.MODEL.ROI_DENSEPOSE_HEAD.POINT_REGRESSION_WEIGHTS = 0.01 | 
					
						
						|  |  | 
					
						
						|  | _C.MODEL.ROI_DENSEPOSE_HEAD.COARSE_SEGM_TRAINED_BY_MASKS = False | 
					
						
						|  |  | 
					
						
						|  | _C.MODEL.ROI_DENSEPOSE_HEAD.DECODER_ON = True | 
					
						
						|  | _C.MODEL.ROI_DENSEPOSE_HEAD.DECODER_NUM_CLASSES = 256 | 
					
						
						|  | _C.MODEL.ROI_DENSEPOSE_HEAD.DECODER_CONV_DIMS = 256 | 
					
						
						|  | _C.MODEL.ROI_DENSEPOSE_HEAD.DECODER_NORM = "" | 
					
						
						|  | _C.MODEL.ROI_DENSEPOSE_HEAD.DECODER_COMMON_STRIDE = 4 | 
					
						
						|  |  | 
					
						
						|  | _C.MODEL.ROI_DENSEPOSE_HEAD.DEEPLAB = CN() | 
					
						
						|  | _C.MODEL.ROI_DENSEPOSE_HEAD.DEEPLAB.NORM = "GN" | 
					
						
						|  | _C.MODEL.ROI_DENSEPOSE_HEAD.DEEPLAB.NONLOCAL_ON = 0 | 
					
						
						|  |  | 
					
						
						|  |  | 
					
						
						|  |  | 
					
						
						|  |  | 
					
						
						|  |  | 
					
						
						|  |  | 
					
						
						|  |  | 
					
						
						|  | _C.MODEL.ROI_DENSEPOSE_HEAD.PREDICTOR_NAME = "DensePoseChartWithConfidencePredictor" | 
					
						
						|  |  | 
					
						
						|  |  | 
					
						
						|  |  | 
					
						
						|  |  | 
					
						
						|  |  | 
					
						
						|  |  | 
					
						
						|  | _C.MODEL.ROI_DENSEPOSE_HEAD.LOSS_NAME = "DensePoseChartWithConfidenceLoss" | 
					
						
						|  |  | 
					
						
						|  |  | 
					
						
						|  | _C.MODEL.ROI_DENSEPOSE_HEAD.UV_CONFIDENCE = CN({"ENABLED": False}) | 
					
						
						|  |  | 
					
						
						|  | _C.MODEL.ROI_DENSEPOSE_HEAD.UV_CONFIDENCE.EPSILON = 0.01 | 
					
						
						|  |  | 
					
						
						|  | _C.MODEL.ROI_DENSEPOSE_HEAD.SEGM_CONFIDENCE = CN({"ENABLED": False}) | 
					
						
						|  |  | 
					
						
						|  | _C.MODEL.ROI_DENSEPOSE_HEAD.SEGM_CONFIDENCE.EPSILON = 0.01 | 
					
						
						|  |  | 
					
						
						|  |  | 
					
						
						|  |  | 
					
						
						|  |  | 
					
						
						|  |  | 
					
						
						|  | _C.MODEL.ROI_DENSEPOSE_HEAD.UV_CONFIDENCE.TYPE = "iid_iso" | 
					
						
						|  |  | 
					
						
						|  | _C.INPUT.ROTATION_ANGLES = [0] | 
					
						
						|  | _C.TEST.AUG.ROTATION_ANGLES = () | 
					
						
						|  |  | 
					
						
						|  | add_densepose_head_cse_config(cfg) | 
					
						
						|  |  | 
					
						
						|  |  | 
					
						
						|  | def add_hrnet_config(cfg: CN) -> None: | 
					
						
						|  | """ | 
					
						
						|  | Add config for HRNet backbone. | 
					
						
						|  | """ | 
					
						
						|  | _C = cfg | 
					
						
						|  |  | 
					
						
						|  |  | 
					
						
						|  | _C.MODEL.HRNET = CN() | 
					
						
						|  | _C.MODEL.HRNET.STEM_INPLANES = 64 | 
					
						
						|  | _C.MODEL.HRNET.STAGE2 = CN() | 
					
						
						|  | _C.MODEL.HRNET.STAGE2.NUM_MODULES = 1 | 
					
						
						|  | _C.MODEL.HRNET.STAGE2.NUM_BRANCHES = 2 | 
					
						
						|  | _C.MODEL.HRNET.STAGE2.BLOCK = "BASIC" | 
					
						
						|  | _C.MODEL.HRNET.STAGE2.NUM_BLOCKS = [4, 4] | 
					
						
						|  | _C.MODEL.HRNET.STAGE2.NUM_CHANNELS = [32, 64] | 
					
						
						|  | _C.MODEL.HRNET.STAGE2.FUSE_METHOD = "SUM" | 
					
						
						|  | _C.MODEL.HRNET.STAGE3 = CN() | 
					
						
						|  | _C.MODEL.HRNET.STAGE3.NUM_MODULES = 4 | 
					
						
						|  | _C.MODEL.HRNET.STAGE3.NUM_BRANCHES = 3 | 
					
						
						|  | _C.MODEL.HRNET.STAGE3.BLOCK = "BASIC" | 
					
						
						|  | _C.MODEL.HRNET.STAGE3.NUM_BLOCKS = [4, 4, 4] | 
					
						
						|  | _C.MODEL.HRNET.STAGE3.NUM_CHANNELS = [32, 64, 128] | 
					
						
						|  | _C.MODEL.HRNET.STAGE3.FUSE_METHOD = "SUM" | 
					
						
						|  | _C.MODEL.HRNET.STAGE4 = CN() | 
					
						
						|  | _C.MODEL.HRNET.STAGE4.NUM_MODULES = 3 | 
					
						
						|  | _C.MODEL.HRNET.STAGE4.NUM_BRANCHES = 4 | 
					
						
						|  | _C.MODEL.HRNET.STAGE4.BLOCK = "BASIC" | 
					
						
						|  | _C.MODEL.HRNET.STAGE4.NUM_BLOCKS = [4, 4, 4, 4] | 
					
						
						|  | _C.MODEL.HRNET.STAGE4.NUM_CHANNELS = [32, 64, 128, 256] | 
					
						
						|  | _C.MODEL.HRNET.STAGE4.FUSE_METHOD = "SUM" | 
					
						
						|  |  | 
					
						
						|  | _C.MODEL.HRNET.HRFPN = CN() | 
					
						
						|  | _C.MODEL.HRNET.HRFPN.OUT_CHANNELS = 256 | 
					
						
						|  |  | 
					
						
						|  |  | 
					
						
						|  | def add_densepose_config(cfg: CN) -> None: | 
					
						
						|  | add_densepose_head_config(cfg) | 
					
						
						|  | add_hrnet_config(cfg) | 
					
						
						|  | add_bootstrap_config(cfg) | 
					
						
						|  | add_dataset_category_config(cfg) | 
					
						
						|  | add_evaluation_config(cfg) | 
					
						
						|  |  |