Mixin 模式支持灵活组合模型算子,通过多继承动态注入功能,保持接口统一与资源可控。
基础架构
from abc import ABC, abstractmethod
class ModelMixin(ABC):
"""模型算子基类 Mixin"""
@abstractmethod
def initialize(self):
"""加载权重、分配资源"""
pass
@abstractmethod
def process(self, data: dict) -> dict:
"""处理输入数据"""
pass
class PipelineBase:
"""处理流水线基类"""
def __init__(self):
self.models = {}
def run(self, input_data: dict) -> dict:
return {name: model.process(input_data)
for name, model in self.models.items()}具体模型实现
class RAMModelMixin(ModelMixin):
def initialize(self):
self.ram_model = get_ram_model()
self.models["ram"] = self
def process(self, data):
return self.ram_model.predict(data["image"])
class GroundingDINOMixin(ModelMixin):
def initialize(self):
self.dino_model = load_dino_model()
self.models["dino"] = self
def process(self, data):
return self.dino_model.detect(data["image"], data["text_prompt"])动态流水线
class DynamicPipeline(PipelineBase):
def __init__(self):
super().__init__()
self.initialize_models()
def initialize_models(self):
for base in type(self).__mro__:
if issubclass(base, ModelMixin) and base != ModelMixin:
base.initialize(self)使用示例
# RAM + ZeroDepth 组合
class SimplePipeline(DynamicPipeline, RAMModelMixin, ZeroDepthMixin):
pass
pipeline = SimplePipeline()
result = pipeline.run({"image": "example.jpg"})
# 全模型组合
class FullVisionPipeline(DynamicPipeline, RAMModelMixin,
GroundingDINOMixin, RAFTMixin):
pass高级特性
延迟初始化:按需加载模型,减少内存占用
class LazyPipeline(PipelineBase):
def run(self, input_data):
for mixin in self.mixins:
if not hasattr(mixin, "model"):
mixin.initialize()初始化顺序控制:通过 MRO 或显式排序
class OrderedPipeline(DynamicPipeline):
__mixin_order__ = [GroundingDINOMixin, RAMModelMixin]注意事项
- 避免不同 Mixin 使用相同方法名
- 依赖其他模型的 Mixin 需控制初始化顺序
- 可结合工厂模式简化调用