Qihang Yu
Add kMaX-DeepLab
a06fad0
raw
history blame
3.77 kB
# -*- coding: utf-8 -*-
from detectron2.config import CfgNode as CN
def add_kmax_deeplab_config(cfg):
"""
Add config for KMAX_DEEPLAB.
"""
# NOTE: configs from original maskformer
# data config
# select the dataset mapper
cfg.INPUT.DATASET_MAPPER_NAME = "coco_panoptic_kmaxdeeplab"
# Color augmentation
# Pad image and segmentation GT in dataset mapper.
cfg.INPUT.SIZE_DIVISIBILITY = -1
# solver config
# weight decay on embedding
cfg.SOLVER.WEIGHT_DECAY_EMBED = 0.05
# optimizer
cfg.SOLVER.OPTIMIZER = "ADAMW"
cfg.SOLVER.BACKBONE_MULTIPLIER = 0.1
# kMaX-DeepLab model config
cfg.MODEL.KMAX_DEEPLAB = CN()
# whether to share matching results
cfg.MODEL.KMAX_DEEPLAB.SHARE_FINAL_MATCHING = True
# vis
cfg.MODEL.KMAX_DEEPLAB.SAVE_VIS_NUM = 0
# loss
cfg.MODEL.KMAX_DEEPLAB.DEEP_SUPERVISION = True
cfg.MODEL.KMAX_DEEPLAB.SKIP_CONN_INIT_VALUE = 0.0
cfg.MODEL.KMAX_DEEPLAB.NO_OBJECT_WEIGHT = 1e-5
cfg.MODEL.KMAX_DEEPLAB.CLASS_WEIGHT = 3.0
cfg.MODEL.KMAX_DEEPLAB.DICE_WEIGHT = 3.0
cfg.MODEL.KMAX_DEEPLAB.MASK_WEIGHT = 0.3
cfg.MODEL.KMAX_DEEPLAB.INSDIS_WEIGHT = 1.0
cfg.MODEL.KMAX_DEEPLAB.AUX_SEMANTIC_WEIGHT = 1.0
cfg.MODEL.KMAX_DEEPLAB.PIXEL_INSDIS_TEMPERATURE = 1.5
cfg.MODEL.KMAX_DEEPLAB.PIXEL_INSDIS_SAMPLE_K = 4096
cfg.MODEL.KMAX_DEEPLAB.AUX_SEMANTIC_TEMPERATURE = 2.0
cfg.MODEL.KMAX_DEEPLAB.UX_SEMANTIC_SAMPLE_K = 4096
# pixel decoder config
cfg.MODEL.KMAX_DEEPLAB.PIXEL_DEC = CN()
cfg.MODEL.KMAX_DEEPLAB.PIXEL_DEC.NAME = "kMaXPixelDecoder"
cfg.MODEL.KMAX_DEEPLAB.PIXEL_DEC.IN_FEATURES = ['res2', 'res3', 'res4', 'res5']
cfg.MODEL.KMAX_DEEPLAB.PIXEL_DEC.DEC_LAYERS = [1, 5, 1, 1]
cfg.MODEL.KMAX_DEEPLAB.PIXEL_DEC.LAYER_TYPES = ["axial", "axial", "bottleneck", "bottleneck"]
cfg.MODEL.KMAX_DEEPLAB.PIXEL_DEC.DEC_CHANNELS = [512, 256, 128, 64]
cfg.MODEL.KMAX_DEEPLAB.PIXEL_DEC.DROP_PATH_PROB = 0.0
# transformer decoder config
cfg.MODEL.KMAX_DEEPLAB.TRANS_DEC = CN()
cfg.MODEL.KMAX_DEEPLAB.TRANS_DEC.NAME = "kMaXTransformerDecoder"
cfg.MODEL.KMAX_DEEPLAB.TRANS_DEC.DEC_LAYERS = [2, 2, 2]
cfg.MODEL.KMAX_DEEPLAB.TRANS_DEC.NUM_OBJECT_QUERIES = 128
cfg.MODEL.KMAX_DEEPLAB.TRANS_DEC.IN_CHANNELS = [2048, 1024, 512]
cfg.MODEL.KMAX_DEEPLAB.TRANS_DEC.DROP_PATH_PROB = 0.0
# kMaX-DeepLab inference config
cfg.MODEL.KMAX_DEEPLAB.TEST = CN()
cfg.MODEL.KMAX_DEEPLAB.TEST.SEMANTIC_ON = False
cfg.MODEL.KMAX_DEEPLAB.TEST.INSTANCE_ON = False
cfg.MODEL.KMAX_DEEPLAB.TEST.PANOPTIC_ON = True
cfg.MODEL.KMAX_DEEPLAB.TEST.OBJECT_MASK_THRESHOLD = 0.4
cfg.MODEL.KMAX_DEEPLAB.TEST.CLASS_THRESHOLD_THING = 0.7
cfg.MODEL.KMAX_DEEPLAB.TEST.CLASS_THRESHOLD_STUFF = 0.5
cfg.MODEL.KMAX_DEEPLAB.TEST.REORDER_CLASS_WEIGHT = 1.0
cfg.MODEL.KMAX_DEEPLAB.TEST.REORDER_MASK_WEIGHT = 1.0
cfg.MODEL.KMAX_DEEPLAB.TEST.OVERLAP_THRESHOLD = 0.8
cfg.MODEL.KMAX_DEEPLAB.TEST.SEM_SEG_POSTPROCESSING_BEFORE_INFERENCE = False
# Sometimes `backbone.size_divisibility` is set to 0 for some backbone (e.g. ResNet)
# you can use this config to override
cfg.MODEL.KMAX_DEEPLAB.SIZE_DIVISIBILITY = -1
# https://github.com/SHI-Labs/OneFormer/blob/main/oneformer/config.py#L197
cfg.MODEL.CONVNEXT = CN()
cfg.MODEL.CONVNEXT.IN_CHANNELS = 3
cfg.MODEL.CONVNEXT.DEPTHS = [3, 3, 27, 3]
cfg.MODEL.CONVNEXT.DIMS = [192, 384, 768, 1536]
cfg.MODEL.CONVNEXT.DROP_PATH_RATE = 0.6
cfg.MODEL.CONVNEXT.LSIT = 1e-6
cfg.MODEL.CONVNEXT.OUT_INDICES = [0, 1, 2, 3]
cfg.MODEL.CONVNEXT.OUT_FEATURES = ["res2", "res3", "res4", "res5"]
cfg.INPUT.IMAGE_SIZE = [1281, 1281]
cfg.INPUT.MIN_SCALE = 0.2
cfg.INPUT.MAX_SCALE = 2.0