AlphaVAE / convert.py
o0o0o00o0's picture
Upload folder using huggingface_hub
243b8a4 verified
Raw
History Blame Contribute Delete
1.6 kB
import torch, argparse
import torch.nn as nn
from diffusers import AutoencoderKL
def convert_module(model: AutoencoderKL):
conv_in = model.encoder.conv_in
conv_in_new = nn.Conv2d(
4,
conv_in.out_channels,
conv_in.kernel_size,
conv_in.stride,
conv_in.padding
)
with torch.no_grad():
conv_in_new.weight[:, :3] = conv_in.weight
conv_in_new.weight[:, 3:] = 0
conv_in_new.bias.copy_(conv_in.bias)
model.encoder.conv_in = conv_in_new
conv_out = model.decoder.conv_out
conv_out_new = nn.Conv2d(
conv_out.in_channels,
4,
conv_out.kernel_size,
conv_out.stride,
conv_out.padding
)
with torch.no_grad():
conv_out_new.weight[:3] = conv_out.weight
conv_out_new.weight[3:] = 0
conv_out_new.bias[:3] = conv_out.bias
conv_out_new.bias[3] = 1
model.decoder.conv_out = conv_out_new
config = dict(model._internal_dict)
config.update({
"in_channels": 4,
"out_channels": 4,
})
model._internal_dict = config
return model
def main():
arg_parse = argparse.ArgumentParser()
arg_parse.add_argument("--src", type=str, required=True, help="source model path")
arg_parse.add_argument("--dst", type=str, required=True, help="destination model path")
args = arg_parse.parse_args()
vae: AutoencoderKL = AutoencoderKL.from_pretrained(args.src)
converted_vae = convert_module(vae)
converted_vae.save_pretrained(args.dst)
if __name__ == '__main__':
main()