You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
67 lines
2.1 KiB
67 lines
2.1 KiB
2 years ago
|
# ------------------------------------------------------------------------
|
||
|
# Grounding DINO
|
||
|
# url: https://github.com/IDEA-Research/GroundingDINO
|
||
|
# Copyright (c) 2023 IDEA. All Rights Reserved.
|
||
|
# Licensed under the Apache License, Version 2.0 [see LICENSE for details]
|
||
|
# ------------------------------------------------------------------------
|
||
|
# -*- coding: utf-8 -*-
|
||
|
# @Author: Yihao Chen
|
||
|
# @Date: 2021-08-16 16:03:17
|
||
|
# @Last Modified by: Shilong Liu
|
||
|
# @Last Modified time: 2022-01-23 15:26
|
||
|
# modified from mmcv
|
||
|
|
||
|
import inspect
|
||
|
from functools import partial
|
||
|
|
||
|
|
||
|
class Registry(object):
|
||
|
def __init__(self, name):
|
||
|
self._name = name
|
||
|
self._module_dict = dict()
|
||
|
|
||
|
def __repr__(self):
|
||
|
format_str = self.__class__.__name__ + "(name={}, items={})".format(
|
||
|
self._name, list(self._module_dict.keys())
|
||
|
)
|
||
|
return format_str
|
||
|
|
||
|
def __len__(self):
|
||
|
return len(self._module_dict)
|
||
|
|
||
|
@property
|
||
|
def name(self):
|
||
|
return self._name
|
||
|
|
||
|
@property
|
||
|
def module_dict(self):
|
||
|
return self._module_dict
|
||
|
|
||
|
def get(self, key):
|
||
|
return self._module_dict.get(key, None)
|
||
|
|
||
|
def registe_with_name(self, module_name=None, force=False):
|
||
|
return partial(self.register, module_name=module_name, force=force)
|
||
|
|
||
|
def register(self, module_build_function, module_name=None, force=False):
|
||
|
"""Register a module build function.
|
||
|
Args:
|
||
|
module (:obj:`nn.Module`): Module to be registered.
|
||
|
"""
|
||
|
if not inspect.isfunction(module_build_function):
|
||
|
raise TypeError(
|
||
|
"module_build_function must be a function, but got {}".format(
|
||
|
type(module_build_function)
|
||
|
)
|
||
|
)
|
||
|
if module_name is None:
|
||
|
module_name = module_build_function.__name__
|
||
|
if not force and module_name in self._module_dict:
|
||
|
raise KeyError("{} is already registered in {}".format(module_name, self.name))
|
||
|
self._module_dict[module_name] = module_build_function
|
||
|
|
||
|
return module_build_function
|
||
|
|
||
|
|
||
|
MODULE_BUILD_FUNCS = Registry("model build functions")
|