def create_model(
        base_encoder: str = "clip_vit_b32",
        agg_module: str = "seqTransf",
        interaction: str = "wti",
        wti_arch: int = 2,
        cdcr: int = 3,
        cdcr_alpha1: float = 1.0,
        cdcr_alpha2: float = 0.06,
        cdcr_lambda: float = 0.001,
        cross_num_hidden_layers: int = None,
        pretrained: bool = False,
        weights_path: str = None,
        device: str = None
) -> DRL:
    """
    Build a DRL model.
    Args:
        base_encoder (`str`):
            Base_encoder in DRL model, `clip_vit_b32` or `clip_vit_b16`.
        agg_module (`str`):
            Feature aggregation module for video. default: `seqTransf`, choices=[`ndone`, `seqLSTM`, `seqTransf`]
        interaction (`str`):
            Interaction type for retrieval. default: `wti`.
        wti_arch (`int`):
            Select an architecture for weight branch. default: 2.
        cdcr (`int`):
            Channel decorrelation regularization. default: 3.
        cdcr_alpha1 (`float`):
            Coefficient 1 for channel decorrelation regularization. default: 1.0.
        cdcr_alpha2 (`float`):
            Coefficient 2 for channel decorrelation regularization. default: 0.06.
        cdcr_lambda (`float`):
            Coefficient for channel decorrelation regularization. default: 0.001.
        cross_num_hidden_layers (`int`):
            Number of hidden layers for cross transformer interaction.
        pretrained (`bool`):
            Whether model is pretrained, default if False.
        weights_path (`str`):
            Pretrained model local path, default if None.
        device (`str`):
            Model device. `cpu` or `cuda`.
    Returns:

    >>> from towhee.models import drl
    >>> model = drl.create_model("clip_vit_b32")
    >>> model.__class__.__name__
    'DRL'

    """
    model = DRL(base_encoder=base_encoder,
                agg_module=agg_module,
                interaction=interaction,
                wti_arch=wti_arch,
                cdcr=cdcr,
                cdcr_alpha1=cdcr_alpha1,
                cdcr_alpha2=cdcr_alpha2,
                cdcr_lambda=cdcr_lambda,
                cross_num_hidden_layers=cross_num_hidden_layers)
    if device is None:
        device = "cuda" if torch.cuda.is_available() else "cpu"
    model.to(device)
    if pretrained and weights_path is not None:
        state_dict = torch.load(weights_path, map_location=device)
        missing_keys = []
        unexpected_keys = []
        error_msgs = []
        metadata = getattr(state_dict, "_metadata", None)
        state_dict = state_dict.copy()
        if metadata is not None:
            state_dict._metadata = metadata  # pylint: disable=protected-access

        def load(module, prefix=""):
            local_metadata = {} if metadata is None else metadata.get(prefix[:-1], {})
            module._load_from_state_dict(  # pylint: disable=protected-access
                state_dict, prefix, local_metadata, True, missing_keys, unexpected_keys, error_msgs)
            for name, child in module._modules.items():  # pylint: disable=protected-access
                if child is not None:
                    load(child, prefix + name + ".")

        load(model, prefix="")

        if len(missing_keys) > 0:
            logger.info("Weights of %s not initialized from pretrained model: %s", model.__class__.__name__,
                        "\n   " + "\n   ".join(missing_keys))
        if len(unexpected_keys) > 0:
            logger.info("Weights from pretrained model not used in %s: %s", model.__class__.__name__,
                        "\n   " + "\n   ".join(unexpected_keys))
        if len(error_msgs) > 0:
            logger.error("Weights from pretrained model cause errors in %s: %s", model.__class__.__name__,
                         "\n   " + "\n   ".join(error_msgs))

    if pretrained and weights_path is None:
        raise ValueError("weights_path is None")
    return model
Build a DRL model.
Args:
base_encoder (`str`):
Base_encoder in DRL model, `clip_vit_b32` or `clip_vit_b16`.
agg_module (`str`):
Feature aggregation module for video. default: `seqTransf`, choices=[`ndone`, `seqLSTM`, `seqTransf`]
interaction (`str`):
Interaction type for retrieval. default: `wti`.
wti_arch (`int`):
Select an architecture for weight branch. default: 2.
cdcr (`int`):
Channel decorrelation regularization. default: 3.
cdcr_alpha1 (`float`):
Coefficient 1 for channel decorrelation regularization. default: 1.0.
cdcr_alpha2 (`float`):
Coefficient 2 for channel decorrelation regularization. default: 0.06.
cdcr_lambda (`float`):
Coefficient for channel decorrelation regularization. default: 0.001.
cross_num_hidden_layers (`int`):
Number of hidden layers for cross transformer interaction.
pretrained (`bool`):
Whether model is pretrained, default if False.
weights_path (`str`):
Pretrained model local path, default if None.
device (`str`):
Model device. `cpu` or `cuda`.
Returns:

>>> from towhee.models import drl
>>> model = drl.create_model("clip_vit_b32")
>>> model.__class__.__name__
'DRL'
towhee/models/drl/drl.py