From 672cd717d7afad949d83dc2a55d9e095de52ab62 Mon Sep 17 00:00:00 2001 From: alexcbb <alexchapin@hotmail.fr> Date: Mon, 24 Jul 2023 14:41:34 +0200 Subject: [PATCH] Make new model slot attention --- .visualisation_1639.png | Bin 0 -> 79513 bytes osrt/layers.py | 94 ++++++++++++++++++---------------------- osrt/model.py | 87 +++++++++++++++---------------------- visualise.py | 81 ++++++++++++++++++++++++++++++++++ 4 files changed, 157 insertions(+), 105 deletions(-) create mode 100644 .visualisation_1639.png create mode 100644 visualise.py diff --git a/.visualisation_1639.png b/.visualisation_1639.png new file mode 100644 index 0000000000000000000000000000000000000000..fece79284e2d145e76f53cc37c395ef07a98cebf GIT binary patch literal 79513 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�T5j6&R}90QOM*6NIx3 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%0A}a`aZvK3a|>bC~I8zZYDqsb2_h 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⪙}I3X=<{dm<uI2>4dt50{D-9&~-vw5NKP_?R@f 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 I5itn-FBm<7G5`Po literal 0 HcmV?d00001 diff --git a/osrt/layers.py b/osrt/layers.py index 39f246a..deaf9d8 100644 --- a/osrt/layers.py +++ b/osrt/layers.py @@ -5,6 +5,7 @@ import numpy as np import math from einops import rearrange, repeat +import torch.nn.functional as F __USE_DEFAULT_INIT__ = False @@ -194,10 +195,11 @@ class SlotAttention(nn.Module): @edit : we changed the code as to make it possible to handle a different number of slots depending on the input images """ def __init__(self, num_slots, input_dim=768, slot_dim=1536, hidden_dim=3072, iters=3, eps=1e-8, - randomize_initial_slots=False): + randomize_initial_slots=False, gain = 1, temperature_factor = 1): super().__init__() self.num_slots = num_slots + self.temperature_factor = temperature_factor self.batch_slots = [] self.iters = iters self.scale = slot_dim ** -0.5 @@ -207,24 +209,31 @@ class SlotAttention(nn.Module): self.initial_slots = nn.Parameter(torch.randn(num_slots, slot_dim)) self.eps = eps + self.slots_mu = nn.Parameter(nn.init.xavier_uniform_(torch.empty(1, 1, self.slot_dim))) + self.slots_log_sigma = nn.Parameter(nn.init.xavier_uniform_(torch.empty(1, 1, self.slot_dim))) + + + self.to_q = nn.Linear(slot_dim, slot_dim, bias=False) + self.to_k = nn.Linear(input_dim, slot_dim, bias=False) + self.to_v = nn.Linear(input_dim, slot_dim, bias=False) - self.to_q = JaxLinear(slot_dim, slot_dim, bias=False) - self.to_k = JaxLinear(input_dim, slot_dim, bias=False) - self.to_v = JaxLinear(input_dim, slot_dim, bias=False) + nn.init.xavier_uniform_(self.to_q.weight, gain = gain) + nn.init.xavier_uniform_(self.to_k.weight, gain = gain) + nn.init.xavier_uniform_(self.to_v.weight, gain = gain) self.gru = nn.GRUCell(slot_dim, slot_dim) self.mlp = nn.Sequential( - JaxLinear(slot_dim, hidden_dim), + nn.Linear(slot_dim, hidden_dim), nn.ReLU(inplace=True), - JaxLinear(hidden_dim, slot_dim) + nn.Linear(hidden_dim, slot_dim) ) self.norm_input = nn.LayerNorm(input_dim) self.norm_slots = nn.LayerNorm(slot_dim) self.norm_pre_mlp = nn.LayerNorm(slot_dim) - def forward(self, inputs, masks=None): + def forward(self, inputs): """ Args: inputs: set-latent representation [batch_size, num_inputs, dim] @@ -232,74 +241,56 @@ class SlotAttention(nn.Module): batch_size, num_inputs, dim = inputs.shape inputs = self.norm_input(inputs) - - # Initialize the slots. Shape: [batch_size, num_slots, slot_dim]. - if self.randomize_initial_slots: - slot_means = self.initial_slots.unsqueeze(0).expand(batch_size, -1, -1).to(inputs.device) # from [num_slots, slot_dim] to [batch_size, num_slots, slot_dim] - slots = torch.distributions.Normal(slot_means, self.embedding_stdev).rsample() - else: - slots = self.initial_slots.unsqueeze(0).expand(batch_size, -1, -1).to(inputs.device) k, v = self.to_k(inputs), self.to_v(inputs) + if slots is None: + slots = self.slots_mu + torch.exp(self.slots_log_sigma) * torch.randn(len(inputs), self.num_slots, self.slot_size, device = self.slots_mu.device) + # Multiple rounds of attention. for _ in range(self.iters): slots_prev = slots - norm_slots = self.norm_slots(slots) + slots = self.norm_slots(slots) - q = self.to_q(norm_slots) + q = self.to_q(slots) + q *= self.scale - dots = torch.einsum('bid,bjd->bij', q, k) * self.scale # Dot product and normalization + attn_logits = torch.bmm(q, k.transpose(-1, -2)) + + attn_pixelwise = F.softmax(attn_logits / self.temperature_factor, dim = 1) - if masks != None: - temp_masks = masks.unsqueeze(1) - attention_masking = torch.where(temp_masks == 1.0, float("-inf"), temp_masks).to(device=dots.device) - dots += attention_masking # shape: [batch_size, num_slots, num_inputs] - attn = dots.softmax(dim=1) + self.eps + attn_slotwise = F.normalize(attn_pixelwise + self.eps, p = 1, dim = -1) - # Weighted mean - attn = attn / attn.sum(dim=-1, keepdim=True) - updates = torch.einsum('bjd,bij->bid', v, attn) # shape: [batch_size, num_inputs, slot_dim] + # shape: [batch_size, num_inputs, slot_dim] + updates = torch.bmm(attn_slotwise, v) # Slot update slots = self.gru(updates.flatten(0, 1), slots_prev.flatten(0, 1)) slots = slots.reshape(batch_size, self.num_slots, self.slot_dim) slots = slots + self.mlp(self.norm_pre_mlp(slots)) - return slots # [batch_size, num_slots, dim] + return slots, attn_logits, attn_slotwise # [batch_size, num_slots, dim] def change_slots_number(self, num_slots): self.num_slots = num_slots self.initial_slots = nn.Parameter(torch.randn(num_slots, self.slot_dim)) -### Utils for SlotAttentionAutoEncoder -def build_grid(resolution): - ranges = [np.linspace(0., 1., num=res) for res in resolution] - grid = np.meshgrid(*ranges, sparse=False, indexing="ij") - grid = np.stack(grid, axis=-1) - grid = np.reshape(grid, [resolution[0], resolution[1], -1]) - grid = np.expand_dims(grid, axis=0) - grid = grid.astype(np.float32) - return np.concatenate([grid, 1.0 - grid], axis=-1) - -class SoftPositionEmbed(nn.Module): - """Adds soft positional embedding with learnable projection. - Implementation extracted from official repo : https://github.com/google-research/google-research/blob/master/slot_attention/model.py""" - - def __init__(self, hidden_size, resolution): - """Builds the soft position embedding layer. - Args: - hidden_size: Size of input feature dimension. - resolution: Tuple of integers specifying width and height of grid. - """ +class PositionEmbeddingImplicit(nn.Module): + """ + Position embedding extracted from + https://github.com/vadimkantorov/yet_another_pytorch_slot_attention/blob/master/models.py + """ + def __init__(self, hidden_dim): super().__init__() - self.dense = JaxLinear(4, hidden_size) - self.grid = build_grid(resolution) + self.dense = nn.Linear(4, hidden_dim) - def forward(self, inputs): - return inputs + self.dense(torch.tensor(self.grid).cuda()).permute(0, 3, 1, 2) # from [b, h, w, c] to [b, c, h, w] + def forward(self, x): + spatial_shape = x.shape[-3:-1] + grid = torch.stack(torch.meshgrid(*[torch.linspace(0., 1., r, device = x.device) for r in spatial_shape]), dim = -1) + grid = torch.cat([grid, 1 - grid], dim = -1) + return x + self.dense(grid) def fourier_encode(x, max_freq, num_bands = 4): x = x.unsqueeze(-1) @@ -313,7 +304,6 @@ def fourier_encode(x, max_freq, num_bands = 4): x = torch.cat((x, orig_x), dim = -1) return x - ### New transformer implementation of SlotAttention inspired from https://github.com/ThomasMrY/VCT/blob/master/models/visual_concept_tokenizor.py class TransformerSlotAttention(nn.Module): """ @@ -393,4 +383,4 @@ class TransformerSlotAttention(nn.Module): x_d = self_attn(inputs) + inputs inputs = self_ff(x_d) + x_d - return slots # [batch_size, num_slots, dim] + return slots, None, None # [batch_size, num_slots, dim] diff --git a/osrt/model.py b/osrt/model.py index 0102d61..3ecc2c2 100644 --- a/osrt/model.py +++ b/osrt/model.py @@ -1,13 +1,16 @@ from torch import nn import torch +import torch.nn.functional as F + import numpy as np from osrt.encoder import OSRTEncoder, ImprovedSRTEncoder, FeatureMasking from osrt.decoder import SlotMixerDecoder, SpatialBroadcastDecoder, ImprovedSRTDecoder -from osrt.layers import SlotAttention, JaxLinear, SoftPositionEmbed, TransformerSlotAttention - +from osrt.layers import SlotAttention, PositionEmbeddingImplicit, TransformerSlotAttention import osrt.layers as layers + + class OSRT(nn.Module): def __init__(self, cfg): super().__init__() @@ -75,39 +78,30 @@ class SlotAttentionAutoEncoder(nn.Module): self.num_iterations = num_iterations self.encoder_cnn = nn.Sequential( - nn.Conv2d(3, 64, kernel_size=5, padding=2), - nn.ReLU(), - nn.Conv2d(64, 64, kernel_size=5, padding=2), - nn.ReLU(), - nn.Conv2d(64, 64, kernel_size=5, padding=2), - nn.ReLU(), - nn.Conv2d(64, 64, kernel_size=5, padding=2), - nn.ReLU() + nn.Conv2d(3, 64, kernel_size=5, padding=2), nn.ReLU(inplace=True), + nn.Conv2d(64, 64, kernel_size=5, padding=2), nn.ReLU(inplace=True), + nn.Conv2d(64, 64, kernel_size=5, padding=2), nn.ReLU(inplace=True), + nn.Conv2d(64, 64, kernel_size=5, padding=2), nn.ReLU(inplace=True) ) self.decoder_initial_size = (8, 8) self.decoder_cnn = nn.Sequential( - nn.ConvTranspose2d(64, 64, kernel_size=5, stride=(2, 2), padding=2, output_padding=1), - nn.ReLU(), - nn.ConvTranspose2d(64, 64, kernel_size=5, stride=(2, 2), padding=2, output_padding=1), - nn.ReLU(), - nn.ConvTranspose2d(64, 64, kernel_size=5, stride=(2, 2), padding=2, output_padding=1), - nn.ReLU(), - nn.ConvTranspose2d(64, 64, kernel_size=5, stride=(2, 2), padding=2, output_padding=1), - nn.ReLU(), - nn.ConvTranspose2d(64, 64, kernel_size=5, stride=(1, 1), padding=2), - nn.ReLU(), - nn.ConvTranspose2d(64, 4, kernel_size=3, stride=(1, 1), padding=1) + nn.ConvTranspose2d(64, 64, kernel_size=5, stride=2, padding=2, padding=1), nn.ReLU(inplace=True), + nn.ConvTranspose2d(64, 64, kernel_size=5, stride=2, padding=2, padding=1), nn.ReLU(inplace=True), + nn.ConvTranspose2d(64, 64, kernel_size=5, stride=2, padding=2, padding=1), nn.ReLU(inplace=True), + nn.ConvTranspose2d(64, 64, kernel_size=5, stride=2, padding=2, padding=1), nn.ReLU(inplace=True), + nn.ConvTranspose2d(64, 64, kernel_size=5), nn.ReLU(inplace=True), + nn.ConvTranspose2d(64, 4, kernel_size=3) ) - self.encoder_pos = SoftPositionEmbed(64, self.resolution) - self.decoder_pos = SoftPositionEmbed(64, self.decoder_initial_size) + self.encoder_pos = PositionEmbeddingImplicit(64) + self.decoder_pos = PositionEmbeddingImplicit(64) self.layer_norm = nn.LayerNorm(64) self.mlp = nn.Sequential( - JaxLinear(64, 64), - nn.ReLU(), - JaxLinear(64, 64) + nn.Linear(64, 64), + nn.ReLU(inplace=True), + nn.Linear(64, 64) ) model_type = cfg['model']['model_type'] @@ -128,35 +122,22 @@ class SlotAttentionAutoEncoder(nn.Module): depth=self.num_iterations) # in a way, the depth of the transformer corresponds to the number of iterations in the original model def forward(self, image): - # `image` has shape: [batch_size, num_channels, width, height]. - # Convolutional encoder with position embedding. - x = self.encoder_cnn(image) # CNN Backbone. - x = self.encoder_pos(x).permute(0, 2, 3, 1) # Position embedding. - x = spatial_flatten(x) # Flatten spatial dimensions (treat image as set). - x = self.mlp(self.layer_norm(x)) # Feedforward network on set. - # `x` has shape: [batch_size, width*height, input_size]. - - # Slot Attention module. - slots = self.slot_attention(x) - # `slots` has shape: [batch_size, num_slots, slot_size]. - - # Spatial broadcast decoder. - x = spatial_broadcast(slots, self.decoder_initial_size).permute(0, 3, 1, 2) - - # `x` has shape: [batch_size*num_slots, width_init, height_init, slot_size]. + x = self.encoder_cnn(image).movedim(1, -1) + x = self.encoder_pos(x) + x = self.mlp(self.layer_norm(x)) + + slots, attn_logits, attn_slotwise = self.slot_attention(x.flatten(start_dim = 1, end_dim = 2), slots = slots) + x = slots.reshape(-1, 1, 1, slots.shape[-1]).expand(-1, *self.decoder_initial_size, -1) x = self.decoder_pos(x) - x = self.decoder_cnn(x).permute(0, 2, 3, 1) - # `x` has shape: [batch_size*num_slots, width, height, num_channels+1]. + x = self.decoder_cnn(x.movedim(-1, 1)) + + x = F.interpolate(x, image.shape[-2:], mode = self.interpolate_mode) - # Undo combination of slot and batch dimension; split alpha masks. - recons, masks = unstack_and_split(x, batch_size=image.shape[0]) - # `recons` has shape: [batch_size, num_slots, width, height, num_channels]. - # `masks` has shape: [batch_size, num_slots, width, height, 1]. + x = x.unflatten(0, (len(image), len(x) // len(image))) - # Normalize alpha masks over slots. - masks = torch.softmax(masks, dim=1) - recon_combined = torch.sum(recons * masks, dim=1) # Recombine image. - # `recon_combined` has shape: [batch_size, width, height, num_channels]. + recons, masks = x.split((3, 1), dim = 2) + masks = masks.softmax(dim = 1) + recon_combined = (recons * masks).sum(dim = 1) - return recon_combined, recons, masks, slots + return recon_combined, recons, masks, slots, attn_slotwise.unsqueeze(-2).unflatten(-1, x.shape[-2:]) diff --git a/visualise.py b/visualise.py new file mode 100644 index 0000000..05c7d2e --- /dev/null +++ b/visualise.py @@ -0,0 +1,81 @@ +import datetime +import time +import torch +import torch.nn as nn +import torch.optim as optim +import argparse +import yaml + +from osrt.model import SlotAttentionAutoEncoder +from osrt import data +from osrt.utils.visualize import visualize_slot_attention +from osrt.utils.common import mse2psnr + +from torch.utils.data import DataLoader +import torch.nn.functional as F +from tqdm import tqdm + +def main(): + # Arguments + parser = argparse.ArgumentParser( + description='Train a 3D scene representation model.' + ) + parser.add_argument('config', type=str, help="Where to save the checkpoints.") + parser.add_argument('--wandb', action='store_true', help='Log run to Weights and Biases.') + parser.add_argument('--seed', type=int, default=0, help='Random seed.') + parser.add_argument('--ckpt', type=str, default=".", help='Model checkpoint path') + + args = parser.parse_args() + with open(args.config, 'r') as f: + cfg = yaml.load(f, Loader=yaml.CLoader) + + ### Set random seed. + torch.manual_seed(args.seed) + + ### Hyperparameters of the model. + num_slots = cfg["model"]["num_slots"] + num_iterations = cfg["model"]["iters"] + base_learning_rate = 0.0004 + device = torch.device("cuda" if torch.cuda.is_available() else "cpu") + + resolution = (128, 128) + + #### Create datasets + + vis_dataset = data.get_dataset('test', cfg['data']) + vis_loader = DataLoader( + vis_dataset, batch_size=1, num_workers=cfg["training"]["num_workers"], + shuffle=True, worker_init_fn=data.worker_init_fn) + + #### Create model + model = SlotAttentionAutoEncoder(resolution, 10, num_iterations, cfg=cfg).to(device) + num_params = sum(p.numel() for p in model.parameters()) + + print('Number of parameters:') + print(f'Model slot attention: {num_params}') + + optimizer = optim.Adam(model.parameters(), lr=base_learning_rate, eps=1e-08) + + ckpt = { + 'network': model, + 'optimizer': optimizer, + 'global_step': 1639 + } + #ckpt_manager = torch.save(ckpt, args.ckpt + '/ckpt.pth') + """ckpt = torch.load('~/ckpt.pth') + model = ckpt['network']""" + model.load_state_dict(torch.load('/home/achapin/ckpt.pth')["model_state_dict"]) + + image = torch.squeeze(next(iter(vis_loader)).get('input_images').to(device), dim=1) + image = F.interpolate(image, size=128) + image = image.to(device) + recon_combined, recons, masks, slots = model(image) + loss = nn.MSELoss() + input_image = image.permute(0, 2, 3, 1) + loss_value = loss(recon_combined, input_image) + psnr = mse2psnr(loss_value) + print(f"MSE value : {loss_value} VS PSNR {psnr}") + visualize_slot_attention(num_slots, image, recon_combined, recons, masks, folder_save=args.ckpt, step=1639, save_file=True) + +if __name__ == "__main__": + main() \ No newline at end of file -- GitLab