import torch, torch.nn as nn from vector_quantize_pytorch import ResidualVQ class RVQWrapper(nn.Module): def __init__(self, dim, num_quantizers, codebook_size): super().__init__() self.proj_in = nn.Linear(dim, dim, bias=True) self.rvq = ResidualVQ(dim=dim, num_quantizers=num_quantizers, codebook_size=codebook_size) self.proj_out = nn.Linear(dim, dim, bias=True) self.register_buffer('ema_counts', torch.zeros(num_quantizers, codebook_size)) def forward(self, x): x = self.proj_in(x) y, indices, commit = self.rvq(x) y = self.proj_out(y) return y, indices, commit