|
import numpy as np |
|
import torch |
|
import torch.nn as nn |
|
from typing import Any, Callable, Dict, List, Optional, Set, Tuple, Union |
|
import os |
|
import torch.nn.functional as F |
|
from transformers.modeling_utils import PreTrainedModel |
|
from transformers.configuration_utils import PretrainedConfig |
|
from transformers import AutoConfig |
|
from collections import OrderedDict |
|
|
|
|
|
class HybridTowerConfig(PretrainedConfig): |
|
model_type = "hybrid_vision_tower" |
|
|
|
def __init__(self, configs=None, **kwargs): |
|
""" |
|
Initializes the HybridTowerConfig. |
|
|
|
Args: |
|
configs (dict, optional): A dictionary where keys are component names and values are |
|
instances of configurations that have a `to_dict()` method. |
|
**kwargs: Additional keyword arguments that are passed to the superclass. |
|
""" |
|
super().__init__(**kwargs) |
|
self.configs = {} |
|
|
|
if configs is not None: |
|
if not isinstance(configs, dict): |
|
raise TypeError("configs must be a dictionary where keys are component names and values are configuration objects.") |
|
|
|
for component_name, config in configs.items(): |
|
if hasattr(config, 'to_dict'): |
|
self.configs[component_name] = config.to_dict() |
|
else: |
|
raise TypeError(f"The configuration for '{component_name}' does not have a to_dict() method and cannot be serialized.") |
|
|
|
def to_dict(self): |
|
""" |
|
Serializes this instance to a Python dictionary. |
|
|
|
Returns: |
|
dict: A dictionary containing all the keys and values of this configuration instance. |
|
""" |
|
config_dict = super().to_dict() |
|
config_dict['configs'] = self.configs |
|
return config_dict |
|
|
|
|