@classmethod
@config_defaults_init("core/model/segmentation/sam")
def from_config(cls, config, **kwargs):
config.set_default_section("core/model/segmentation/sam")
pretrained_name = config.getoption("pretrained_name", "sam-vit-base")
config_path = config.getoption("config_path", None)
config_path = pop_value(
config_path,
nested_dict_value(pretrained_sam_infos, pretrained_name, "config"),
)
config_path = cached_path(config_path)
vision_config_path = config.getoption("vision_config_path", None)
vision_config_path = pop_value(
vision_config_path,
nested_dict_value(pretrained_sam_infos, pretrained_name, "vision_config"),
)
vision_config_path = cached_path(vision_config_path)
inst = cls(
config_path=config_path,
vision_config_path=vision_config_path,
)
pretrained_weight_path = config.getoption("pretrained_weight_path", None)
weight_path = pop_value(
pretrained_weight_path,
nested_dict_value(pretrained_sam_infos, pretrained_name, "weight"),
check_none=False,
)
if weight_path is not None:
inst.from_pretrained(weight_path)
pretrained_lora_weight_path = config.getoption(
"pretrained_lora_weight_path", None
)
pretrained_lora_weight = config.getoption("pretrained_lora_weight", 1.0)
pretrained_lora_alpha = config.getoption("pretrained_lora_alpha", 32.0)
if pretrained_lora_weight_path is not None:
inst.load_lora_weights(
pretrained_lora_weight_path,
lora_weights=pretrained_lora_weight,
lora_alphas=pretrained_lora_alpha,
save_base_state=False,
)
return inst