| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
|
|
| import unittest |
|
|
| import torch |
|
|
| from diffusers import VQModel |
| from diffusers.utils.testing_utils import ( |
| backend_manual_seed, |
| enable_full_determinism, |
| floats_tensor, |
| torch_device, |
| ) |
|
|
| from ..test_modeling_common import ModelTesterMixin, UNetTesterMixin |
|
|
|
|
| enable_full_determinism() |
|
|
|
|
| class VQModelTests(ModelTesterMixin, UNetTesterMixin, unittest.TestCase): |
| model_class = VQModel |
| main_input_name = "sample" |
|
|
| @property |
| def dummy_input(self, sizes=(32, 32)): |
| batch_size = 4 |
| num_channels = 3 |
|
|
| image = floats_tensor((batch_size, num_channels) + sizes).to(torch_device) |
|
|
| return {"sample": image} |
|
|
| @property |
| def input_shape(self): |
| return (3, 32, 32) |
|
|
| @property |
| def output_shape(self): |
| return (3, 32, 32) |
|
|
| def prepare_init_args_and_inputs_for_common(self): |
| init_dict = { |
| "block_out_channels": [8, 16], |
| "norm_num_groups": 8, |
| "in_channels": 3, |
| "out_channels": 3, |
| "down_block_types": ["DownEncoderBlock2D", "DownEncoderBlock2D"], |
| "up_block_types": ["UpDecoderBlock2D", "UpDecoderBlock2D"], |
| "latent_channels": 3, |
| } |
| inputs_dict = self.dummy_input |
| return init_dict, inputs_dict |
|
|
| def test_forward_signature(self): |
| pass |
|
|
| def test_training(self): |
| pass |
|
|
| def test_from_pretrained_hub(self): |
| model, loading_info = VQModel.from_pretrained("fusing/vqgan-dummy", output_loading_info=True) |
| self.assertIsNotNone(model) |
| self.assertEqual(len(loading_info["missing_keys"]), 0) |
|
|
| model.to(torch_device) |
| image = model(**self.dummy_input) |
|
|
| assert image is not None, "Make sure output is not None" |
|
|
| def test_output_pretrained(self): |
| model = VQModel.from_pretrained("fusing/vqgan-dummy") |
| model.to(torch_device).eval() |
|
|
| torch.manual_seed(0) |
| backend_manual_seed(torch_device, 0) |
|
|
| image = torch.randn(1, model.config.in_channels, model.config.sample_size, model.config.sample_size) |
| image = image.to(torch_device) |
| with torch.no_grad(): |
| output = model(image).sample |
|
|
| output_slice = output[0, -1, -3:, -3:].flatten().cpu() |
| |
| expected_output_slice = torch.tensor([-0.0153, -0.4044, -0.1880, -0.5161, -0.2418, -0.4072, -0.1612, -0.0633, -0.0143]) |
| |
| self.assertTrue(torch.allclose(output_slice, expected_output_slice, atol=1e-3)) |
|
|
| def test_loss_pretrained(self): |
| model = VQModel.from_pretrained("fusing/vqgan-dummy") |
| model.to(torch_device).eval() |
|
|
| torch.manual_seed(0) |
| backend_manual_seed(torch_device, 0) |
|
|
| image = torch.randn(1, model.config.in_channels, model.config.sample_size, model.config.sample_size) |
| image = image.to(torch_device) |
| with torch.no_grad(): |
| output = model(image).commit_loss.cpu() |
| |
| expected_output = torch.tensor([0.1936]) |
| |
| self.assertTrue(torch.allclose(output, expected_output, atol=1e-3)) |
|
|