def decode_targets(self, target_latent: torch.Tensor) -> torch.Tensor:
        """
        Decode target latents into image space.

        Args:
            target_latent: Target latent tensor of shape [B, 4*n_targets, h, w]

        Returns:
            Decoded target tensor of shape [B, 3*n_targets, H, W]
        """
        target_latent = target_latent / self.latent_scale_factor
        targets = []
        for i in range(self.n_targets):
            latent = target_latent[:, i * 4 : (i + 1) * 4, :, :]
            z = self.vae.post_quant_conv(latent)
            stacked = self.vae.decoder(z)
            targets.append(stacked)
        return torch.cat(targets, dim=1)

        Decode target latents into image space.

        Args:
            target_latent: Target latent tensor of shape [B, 4*n_targets, h, w]

        Returns:
            Decoded target tensor of shape [B, 3*n_targets, H, W]
        
marigold/marigold_iid_pipeline.py