```python !pip install walloc PyWavelets pytorch-wavelets ``` ```python !wget "https://r0k.us/graphics/kodak/kodak/kodim05.png" ``` ```python import os import torch import matplotlib.pyplot as plt import numpy as np from PIL import Image from IPython.display import display from torchvision.transforms import ToPILImage, PILToTensor from walloc.walloc import Walloc class Args: pass ``` ```python device = "cpu" checkpoint = torch.load("v0.6.1.pth",map_location="cpu") args = checkpoint['args'] codec = Walloc( channels = args.channels, J = args.J, N = args.N, latent_dim = args.latent_dim, latent_bits = 5 ) codec.load_state_dict(checkpoint['model_state_dict']) codec = codec.to(device) ``` ```python img = Image.open("kodim05.png") img ``` ![png](README_files/README_4_0.png) ```python with torch.no_grad(): codec.eval() x = PILToTensor()(img).to(torch.float) x = (x/255 - 0.5).unsqueeze(0).to(device) x_hat, _, _ = codec(x) ToPILImage()(x_hat[0]+0.5) ``` ![png](README_files/README_5_0.png) ```python with torch.no_grad(): codec.eval() X = codec.wavelet_analysis(x,J=codec.J) Y = codec.encoder(X) X_hat = codec.decoder(Y) x_hat = codec.wavelet_synthesis(X_hat,J=codec.J) print(f"dimensionality reduction: {x.numel()/Y.numel()}x") ``` dimensionality reduction: 12.0x ```python Y.unique() ``` tensor([-15., -14., -13., -12., -11., -10., -9., -8., -7., -6., -5., -4., -3., -2., -1., 0., 1., 2., 3., 4., 5., 6., 7., 8., 9., 10., 11., 12., 13., 14., 15.]) ```python plt.hist(Y.flatten().numpy(),range=(-17.5,17.5),bins=35); ``` ![png](README_files/README_8_0.png) ```python grid_size = 4 n_channels, H, W = Y[0].shape combined_image = Image.new('L', (W * grid_size, H * grid_size)) size_bytes = 0 for i, channel in enumerate(Y[0]): channel = (channel+16).to(torch.uint8) row = i // grid_size col = i % grid_size channel = ToPILImage()(channel) combined_image.paste(channel, (col * W, row * H)) combined_image ``` ![png](README_files/README_9_0.png) ```python combined_image.save('tmp.png') print("compression_ratio: ", x.numel()/os.path.getsize("tmp.png")) ``` compression_ratio: 20.75383532723434