Repository: samedii/perceptor (language: python)

Issue:
feature: added text-off to clip

feature: added text-off to clip



Discussion / hints:

Fix patch:
diff --git a/.gitignore b/.gitignore
index e3814b4..3109795 100755
--- a/.gitignore
+++ b/.gitignore
@@ -26,3 +26,5 @@ com.txt
 
 # Cog
 .cog
+
+models
diff --git a/.gitmodules b/.gitmodules
deleted file mode 100644
index 43b99f5..0000000
--- a/.gitmodules
+++ /dev/null
@@ -1,6 +0,0 @@
-[submodule "v-diffusion-pytorch"]
-	path = v-diffusion-pytorch
-	url = https://github.com/pixray/v-diffusion-pytorch
-[submodule "SLIP"]
-	path = SLIP
-	url = https://github.com/facebookresearch/SLIP
diff --git a/DrawingInterface.py b/DrawingInterface.py
deleted file mode 100755
index c9cceb9..0000000
--- a/DrawingInterface.py
+++ /dev/null
@@ -1,12 +0,0 @@
-class DrawingInterface:
-    @staticmethod
-    def add_settings(parser):
-        # example
-        return parser
-
-    model = None
-    def load_model(self, config, checkpoint):
-        pass
-
-
-
diff --git a/LICENSE b/LICENSE
index f34ec46..56c1753 100644
--- a/LICENSE
+++ b/LICENSE
@@ -5,11 +5,8 @@ but is currently covered by different licenses for different sections
 
 this file will be udpated to reflect the licenses that apply to various dependencies.
 
-MIT: VQGAN and Clip guided core
+MIT: Clip guided core
 -------------------------------
-VQGAN: MIT License
-Copyright (c) 2020 Patrick Esser and Robin Rombach and Björn Ommer
-
 CLIP guided core: MIT License
 Copyright (c) 2021 Katherine Crowson
 
@@ -30,9 +27,3 @@ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
 OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
 SOFTWARE.
-
-diffvg: Apache License 2.0
-
-ClipDraw: No License (contact author: https://github.com/kvfrans/clipdraw/issues/3 )
-
-PixelDraw: No License (contact author: @dribnet)
diff --git a/Losses/EdgeLoss.py b/Losses/EdgeLoss.py
deleted file mode 100755
index e485db7..0000000
--- a/Losses/EdgeLoss.py
+++ /dev/null
@@ -1,108 +0,0 @@
-import torch
-from torch import nn, optim
-
-from util import get_single_rgb
-from PIL import Image
-from util import *
-from urllib.request import urlopen
-import torchvision.transforms.functional as TF
-
-
-from Losses.LossInterface import LossInterface
-
-class EdgeLoss(LossInterface):
-    def __init__(self,**kwargs):
-        self.image = None
-        self.resized = None
-        self.resized_mask = None
-        super().__init__(**kwargs)
-    
-    @staticmethod
-    def add_settings(parser):
-        parser.add_argument("--edge_thickness", type=int, help="thickness of the edge area all the way around (percent)", default=5, dest='edge_thickness')
-        parser.add_argument("--edge_margins", nargs=4, type=int, help="this is for the thickness of each edge (left, right, up, down) 0-pixel size", default=None, dest='edge_margins')
-        parser.add_argument("--edge_color", type=str, help="this is the color of the specified region", default="white", dest='edge_color')
-        parser.add_argument("--edge_color_weight", type=float, help="how much edge color is enforced", default=0.1, dest='edge_color_weight')
-        parser.add_argument("--global_color_weight", type=float, help="how much global color is enforced ", default=0.05, dest='global_color_weight')
-        parser.add_argument("--edge_input_image", type=str, help="TBD", default="", dest='edge_input_image')
-        parser.add_argument("--edge_mask_image", type=str, help="TBD", default="", dest='edge_mask_image')
-        return parser
-
-    def parse_settings(self,args):
-        #do stuff with args here
-        if type(args.edge_color)==str:
-            args.edge_color = get_single_rgb(args.edge_color)
-        if args.edge_margins is None:
-            t = args.edge_thickness
-            args.edge_margins = (t, t, t, t)
-        if args.edge_input_image:
-            # now we might overlay an init image
-            filelist = None
-            if 'http' in args.edge_input_image:
-                self.image = [Image.open(urlopen(args.edge_input_image))]
-            else:
-                filelist = real_glob(args.edge_input_image)
-                self.image = [Image.open(f) for f in filelist]
-            self.image = self.image[0].convert('RGB')
-        if args.edge_mask_image:
-            # now we might overlay an init image
-            filelist = None
-            if 'http' in args.edge_mask_image:
-                self.mask = [Image.open(urlopen(args.edge_mask_image))]
-            else:
-                filelist = real_glob(args.edge_mask_image)
-                self.mask = [Image.open(f) for f in filelist]
-            self.mask = self.mask[0].convert('L')
-        else:
-            self.mask = None
-        return args
-    
-    def get_loss(self, cur_cutouts, out, args, globals=None, lossGlobals=None):
-        if self.resized is None and self.image is not None:
-            self.resized = TF.to_tensor(self.image).to(self.device).unsqueeze(0)
-            self.resized = TF.resize(self.resized, out.size()[2:4],TF.InterpolationMode.BICUBIC)
-            print("IMAGE MASK: ", self.resized.shape)
-        if self.resized_mask is None and self.mask is not None:
-            self.resized_mask = TF.to_tensor(self.mask).to(self.device).unsqueeze(0)
-            self.resized_mask = TF.resize(self.resized_mask, out.size()[2:4],TF.InterpolationMode.BICUBIC)
-            print("RESIZED MASK: ", self.resized_mask.shape)
-        if not self.image:
-            zers = torch.zeros(out.size()).to(self.device)
-            Rval,Gval,Bval = args.edge_color
-            zers[:,0,:,:] = Rval
-            zers[:,1,:,:] = Gval
-            zers[:,2,:,:] = Bval
-        else: # args.edge_input_image:
-            zers = self.resized
-        cur_loss = torch.tensor(0.0).cuda()
-        mseloss = nn.MSELoss()
-        if not self.mask:
-            lmax = out.size()[2]
-            rmax = out.size()[3]
-            left, right, upper, lower = args.edge_margins
-            left = int(map_number(left, 0, 100, 0, rmax))
-            right = int(map_number(right, 0, 100, 0, rmax))
-            upper = int(map_number(upper, 0, 100, 0, lmax))
-            lower = int(map_number(lower, 0, 100, 0, lmax))
-            # print(left, right, upper, lower)
-            lloss = mseloss(out[:,:,:,:left], zers[:,:,:,:left]) 
-            rloss = mseloss(out[:,:,:,rmax-right:], zers[:,:,:,rmax-right:])
-            uloss = mseloss(out[:,:,:upper,left:rmax-right], zers[:,:,:upper,left:rmax-right]) 
-            dloss = mseloss(out[:,:,lmax-lower:,left:rmax-right], zers[:,:,lmax-lower:,left:rmax-right]) 
-            if left!=0:
-                cur_loss += lloss
-            if right!=0:
-                cur_loss += rloss
-            if upper!=0:
-                cur_loss += uloss
-            if lower!=0:
-                cur_loss += dloss
-        else:
-            maked_out = torch.where(self.resized_mask > 0, zers, out)
-            mask_loss = mseloss(maked_out, zers)
-            cur_loss += mask_loss
-        if args.global_color_weight:
-            gloss = mseloss(out[:,:,:,:], zers[:,:,:,:]) * args.global_color_weight
-            cur_loss+=gloss
-        cur_loss *= args.edge_color_weight
-        return cur_loss
diff --git a/Losses/GaussianLoss.py b/Losses/GaussianLoss.py
deleted file mode 100644
index 5051140..0000000
--- a/Losses/GaussianLoss.py
+++ /dev/null
@@ -1,44 +0,0 @@
-import torch
-from torch import nn, optim
-from Losses.LossInterface import LossInterface
-
-
-def gaussian_fn(M, std):
-    n = torch.arange(0, M) - (M - 1.0) / 2.0
-    sig2 = 2 * std * std
-    w = torch.exp(-n ** 2 / sig2)
-    return w
-
-def gkern(ylen=256, xlen=256, stdy=128, stdx=128):
-    """Returns a 2D Gaussian kernel array."""
-    gkerny = gaussian_fn(ylen, std=stdy) 
-    gkernx = gaussian_fn(xlen, std=stdx) 
-    gkern2d = torch.outer(gkerny, gkernx)
-    return gkern2d
-
-class GaussianLoss(LossInterface):
-    def __init__(self,**kwargs):
-        super().__init__(**kwargs)
-    
-    @staticmethod
-    def add_settings(parser):
-        parser.add_argument("--gaussian_weight", type=float, help="gaussian's weight", default=1, dest='gaussian_weight')
-        parser.add_argument("--gaussian_std", nargs=2 ,type=float, help="gaussian's std for both x and y", default=(40,40), dest='gaussian_std')
-        parser.add_argument("--gaussian_color", nargs=3 ,type=float, help="color for gaussian to optimize to", default=(255,255,255), dest='gaussian_color')
-        return parser
-    
-
-    def get_loss(self, cur_cutouts, out, args, globals=None, lossGlobals=None):
-        gaus = gkern(out.size()[2],out.size()[3], *args.gaussian_std).to(self.device)
-        color = torch.zeros(out.size()).to(self.device)
-        Rval,Gval,Bval = args.gaussian_color
-        color[:,0,:,:] = Rval/255
-        color[:,1,:,:] = Gval/255
-        color[:,2,:,:] = Bval/255
-        # mseloss = nn.MSELoss()
-        loss = torch.abs(out - color)
-        # print(loss.size()) 
-        loss = loss*torch.abs(1-gaus)
-
-        cur_loss = torch.mean(loss)
-        return cur_loss*args.gaussian_weight
diff --git a/Losses/LossInterface.py b/Losses/LossInterface.py
deleted file mode 100755
index 660ace8..0000000
--- a/Losses/LossInterface.py
+++ /dev/null
@@ -1,37 +0,0 @@
-import argparse
-
-
-class LossInterface():
-    def __init__(self, device=None):
-        self.device = device
-
-    # a list of optional strings
-    def instance_settings(self, arglist):
-        pass
-    
-    @staticmethod
-    def add_settings(parser):
-        #add parser.add_argument() here
-        return parser
-    
-    def help(self):
-        parser = argparse.ArgumentParser()
-        parser = self.add_settings(parser)
-        helpstring = ""
-        for d in parser._actions:
-            helpstring = f"""parmeter name: {d.dest}\nHelp: {d.help}\nUse case: pixray.add_argument({d.dest}={d.default})"""
-        return helpstring
-
-    def parse_settings(self,args):
-        #do stuff with args here
-        return args
-    
-    def add_globals(self,args):
-        lossglobals = {}
-        return lossglobals
-
-    def get_loss(self, cur_cutouts, out, args, globals=None, lossGlobals=None):
-        loss = None
-        return loss
-    
-
diff --git a/Losses/PaletteLoss.py b/Losses/PaletteLoss.py
deleted file mode 100755
index 40da32e..0000000
--- a/Losses/PaletteLoss.py
+++ /dev/null
@@ -1,35 +0,0 @@
-
-import torch
-from torch import nn, optim
-
-from util import  palette_from_string
-
-
-
-from Losses.LossInterface import LossInterface
-
-class PaletteLoss(LossInterface):
-    def __init__(self, **kwargs):
-        super().__init__(**kwargs)
-    
-    @staticmethod
-    def add_settings(parser):
-        parser.add_argument("--palette_weight", type=float, help="strength of pallete loss effect", default=1, dest='palette_weight')
-        return parser
-
-    def parse_settings(self,args):
-        #do stuff with args here
-        # args.target_palette = palette_from_string(args.target_palette)
-        return args
-    
-    def get_loss(self, cur_cutouts, out, args, globals=None, lossGlobals=None):
-        target_palette = torch.FloatTensor(args.palette).requires_grad_(False).to(self.device)
-        all_loss = []
-        for _,cutouts in cur_cutouts.items():
-            _pixels = cutouts.permute(0,2,3,1).reshape(-1,3)
-            palette_dists = torch.cdist(target_palette, _pixels, p=2)
-            best_guesses = palette_dists.argmin(axis=0)
-            diffs = _pixels - target_palette[best_guesses]
-            palette_loss = torch.mean( torch.norm( diffs, 2, dim=1 ) )*cutouts.shape[0]
-            all_loss.append( palette_loss * args.palette_weight/10.0 )
-        return all_loss
diff --git a/Losses/ResmemLoss.py b/Losses/ResmemLoss.py
deleted file mode 100755
index c9bf86b..0000000
--- a/Losses/ResmemLoss.py
+++ /dev/null
@@ -1,70 +0,0 @@
-import torch
-import sys
-import os
-from torch import nn, optim
-from Losses.LossInterface import LossInterface
-import resmem
-from resmem import ResMem, transformer
-from torchvision import transforms
-
-recenter = transforms.Compose((
-    transforms.Resize((256, 256)),
-    transforms.CenterCrop(227),
-    )
-)
-
-from util import wget_file, map_number
-resmem_url = 'https://github.com/pixray/resmem/releases/download/1.1.3_model/model.pt'
-
-class ResmemLoss(LossInterface):
-    def __init__(self,**kwargs):
-        # make sure resmem has model file
-        if not os.path.exists(resmem.path):
-            wget_file(resmem_url, resmem.path)        
-
-        # TODO: device should be part of init
-        self.device = torch.device('cuda:0' if torch.cuda.is_available() else 'cpu')
-
-        super().__init__(**kwargs)
-        self.model = ResMem(pretrained=True).to(self.device)
-        # Set the model to inference mode.
-        self.model.eval()
-
-    @staticmethod
-    def add_settings(parser):
-        parser.add_argument("--symmetry_weight", type=float, help="how much symmetry is weighted in loss", default=1, dest='symmetry_weight')
-        return parser
-   
-    def get_loss1(self, cur_cutouts, out, args, globals=None, lossGlobals=None):
-        device = self.device
-
-        # print(out)
-        # print(out.shape)
-        image_x = recenter(out)
-        # print(image_x.shape)
-
-        prediction = self.model(image_x.view(-1, 3, 227, 227))
-        # print(prediction)
-        # print(prediction.shape)
-        the_loss = 1.0 - prediction[0][0]
-
-        return the_loss
-
-    def get_loss(self, cur_cutouts, out, args, globals=None, lossGlobals=None):
-        device = self.device
-
-        # print(cur_cutouts.keys())
-        images = cur_cutouts[224]
-        # print(images.shape)
-        image_x = recenter(images)
-        # print(image_x.shape)
-
-        prediction = self.model(image_x)
-        # print(prediction)
-        # print(prediction.shape)
-        mean = torch.mean(prediction)
-        # loss seems to bottom out at 0.4? ¯\_(ツ)_/¯
-        mapped_mean = map_number(mean, 0.4, 1.0, 0, 1)
-        the_loss = 0.05 * mapped_mean
-
-        return the_loss
diff --git a/Losses/SaturationLoss.py b/Losses/SaturationLoss.py
deleted file mode 100755
index 48b7912..0000000
--- a/Losses/SaturationLoss.py
+++ /dev/null
@@ -1,30 +0,0 @@
-
-import torch
-
-from Losses.LossInterface import LossInterface
-
-class SaturationLoss(LossInterface):
-    def __init__(self,**kwargs):
-        super().__init__(**kwargs)
-    
-    @staticmethod
-    def add_settings(parser):
-        parser.add_argument("--saturation_weight", type=float, help="strength of pallete loss effect", default=1, dest='saturation_weight')
-        return parser
-    
-    def get_loss(self, cur_cutouts, out, args, globals=None, lossGlobals=None):
-        # based on the old "percepted colourfulness" heuristic from Hasler and Süsstrunk’s 2003 paper
-        # https://www.researchgate.net/publication/243135534_Measuring_Colourfulness_in_Natural_Images
-        all_loss = []
-        for _,cutouts in cur_cutouts.items():
-            _pixels = cutouts.permute(0,2,3,1).reshape(-1,3)
-            rg = _pixels[:,0]-_pixels[:,1]
-            yb = 0.5*(_pixels[:,0]+_pixels[:,1])-_pixels[:,2]
-            rg_std, rg_mean = torch.std_mean(rg)
-            yb_std, yb_mean = torch.std_mean(yb)
-            std_rggb = torch.sqrt(rg_std**2 + yb_std**2)
-            mean_rggb = torch.sqrt(rg_mean**2 + yb_mean**2)
-            colorfullness = std_rggb+.3*mean_rggb
-            all_loss.append(-colorfullness*args.saturation_weight/10.0)
-
-        return all_loss
diff --git a/Losses/SmoothnessLoss.py b/Losses/SmoothnessLoss.py
deleted file mode 100755
index cb9ad00..0000000
--- a/Losses/SmoothnessLoss.py
+++ /dev/null
@@ -1,108 +0,0 @@
-import math
-import numbers
-import torch
-from torch import nn
-from torch.nn import functional as F
-
-from Losses.LossInterface import LossInterface
-
-class GaussianSmoothing(nn.Module):
-    """
-    Apply gaussian smoothing on a
-    1d, 2d or 3d tensor. Filtering is performed seperately for each channel
-    in the input using a depthwise convolution.
-    Arguments:
-        channels (int, sequence): Number of channels of the input tensors. Output will
-            have this number of channels as well.
-        kernel_size (int, sequence): Size of the gaussian kernel.
-        sigma (float, sequence): Standard deviation of the gaussian kernel.
-        dim (int, optional): The number of dimensions of the data.
-            Default value is 2 (spatial).
-    """
-    def __init__(self, channels, kernel_size, sigma, dim=2):
-        super(GaussianSmoothing, self).__init__()
-        if isinstance(kernel_size, numbers.Number):
-            kernel_size = [kernel_size] * dim
-        if isinstance(sigma, numbers.Number):
-            sigma = [sigma] * dim
-
-        # The gaussian kernel is the product of the
-        # gaussian function of each dimension.
-        kernel = 1
-        meshgrids = torch.meshgrid(
-            [
-                torch.arange(size, dtype=torch.float32)
-                for size in kernel_size
-            ]
-        )
-        for size, std, mgrid in zip(kernel_size, sigma, meshgrids):
-            mean = (size - 1) / 2
-            kernel *= 1 / (std * math.sqrt(2 * math.pi)) * \
-                      torch.exp(-((mgrid - mean) / (2 * std)) ** 2)
-
-        # Make sure sum of values in gaussian kernel equals 1.
-        kernel = kernel / torch.sum(kernel)
-
-        # Reshape to depthwise convolutional weight
-        kernel = kernel.view(1, 1, *kernel.size())
-        kernel = kernel.repeat(channels, *[1] * (kernel.dim() - 1))
-
-        self.register_buffer('weight', kernel)
-        self.groups = channels
-
-        if dim == 1:
-            self.conv = F.conv1d
-        elif dim == 2:
-            self.conv = F.conv2d
-        elif dim == 3:
-            self.conv = F.conv3d
-        else:
-            raise RuntimeError(
-                'Only 1, 2 and 3 dimensions are supported. Received {}.'.format(dim)
-            )
-
-    def forward(self, input):
-        """
-        Apply gaussian filter to input.
-        Arguments:
-            input (torch.Tensor): Input to apply gaussian filter on.
-        Returns:
-            filtered (torch.Tensor): Filtered output.
-        """
-        return self.conv(input, weight=self.weight, groups=self.groups)
-
-
-class SmoothnessLoss(LossInterface):
-    def __init__(self,**kwargs):
-        super().__init__(**kwargs)
-    
-    @staticmethod
-    def add_settings(parser):
-        parser.add_argument("--smoothness_weight", type=float, help="strength of smoothness loss effect", default=1, dest='smoothness_weight')
-        parser.add_argument("--smoothness_type", type=str, help="enforce smoothness type: default/clipped/log", default='default', dest='smoothness_type')
-        parser.add_argument("--smoothness_gaussian_kernel", type=float, help="enforce smoothness aux gaussian blur kernel", default=0, dest='smoothness_gaussian_kernel')
-        parser.add_argument("--smoothness_gaussian_std", type=float, help="enforce smoothness aux gaussian blur std", default=1, dest='smoothness_gaussian_std')
-        parser.add_argument("--smoothness_spacing", type=int, help="enforce smoothness spacing", default=1, dest='smoothness_spacing')
-        parser.add_argument("--smoothness_edge_order", type=int, help="enforce smoothness edge order", default=1, dest='smoothness_edge_order')
-        return parser
-    
-    def get_loss(self, cur_cutouts, out, args, globals=None, lossGlobals=None):
-        cur_loss = []
-        for _,cutouts in cur_cutouts.items():
-            if args.smoothness_gaussian_kernel:
-                smoothing = GaussianSmoothing(3, args.smoothness_gaussian_kernel, args.smoothness_gaussian_std).to(self.device)
-                cutouts = smoothing(cutouts)
-
-            _pixels = cutouts.permute(0,2,3,1).reshape(-1,cutouts.shape[2],3)
-            gyr, gxr = torch.gradient(_pixels[:,:,0], spacing=args.smoothness_spacing, edge_order=args.smoothness_edge_order)
-            gyg, gxg = torch.gradient(_pixels[:,:,1], spacing=args.smoothness_spacing, edge_order=args.smoothness_edge_order)
-            gyb, gxb = torch.gradient(_pixels[:,:,2], spacing=args.smoothness_spacing, edge_order=args.smoothness_edge_order)
-            sharpness = torch.sqrt(gyr**2 + gxr**2+ gyg**2 + gxg**2 + gyb**2 + gxb**2)
-            if args.smoothness_type=='clipped':
-                sharpness = torch.clamp( sharpness, max=0.5 )
-            elif args.smoothness_type=='log':
-                sharpness = torch.log( torch.ones_like(sharpness)+sharpness )
-            sharpness = torch.mean( sharpness )
-            cur_loss.append(sharpness*args.smoothness_weight)
-
-        return cur_loss
diff --git a/Losses/StyleLoss.py b/Losses/StyleLoss.py
deleted file mode 100644
index 3473dcb..0000000
--- a/Losses/StyleLoss.py
+++ /dev/null
@@ -1,500 +0,0 @@
-import torch
-from torch import nn, optim
-from Losses.LossInterface import LossInterface
-
-import torch
-import torch.nn as nn
-import torch.nn.functional as F
-import torch.optim as optim
-import torchvision.models as models
-import torchvision.transforms as transforms
-import torchvision.transforms.functional as TF
-import numpy as np
-import os
-import math
-import PIL
-from PIL import Image
-from time import time
-from argparse import ArgumentParser
-from util import real_glob
-from urllib.request import urlopen
-
-
-
-class Vgg16_Extractor(nn.Module):
-    def __init__(self, space):
-        super().__init__()
-        self.vgg_layers = models.vgg16(pretrained=True).features
-
-        for param in self.parameters():
-            param.requires_grad = False
-        self.capture_layers = [1,3,6,8,11,13,15,22,29]
-        self.space = space
-        
-    def forward_base(self, x):
-        feat = [x]
-        for i in range(len(self.vgg_layers)):
-            x = self.vgg_layers[i](x)
-            if i in self.capture_layers: feat.append(x)
-        return feat
-
-    def forward(self, x):
-        if self.space != 'vgg':
-            x = (x + 1.) / 2.
-            x = x - (torch.Tensor([0.485, 0.456, 0.406]).to(x.device).view(1, -1, 1, 1))
-            x = x / (torch.Tensor([0.229, 0.224, 0.225]).to(x.device).view(1, -1, 1, 1))
-        feat = self.forward_base(x)
-        return feat
-    
-    def forward_samples_hypercolumn(self, X, samps=100):
-        feat = self.forward(X)
-
-        xx,xy = np.meshgrid(np.arange(X.shape[2]), np.arange(X.shape[3]))
-        xx = np.expand_dims(xx.flatten(),1)
-        xy = np.expand_dims(xy.flatten(),1)
-        xc = np.concatenate([xx,xy],1)
-        
-        samples = min(samps,xc.shape[0])
-
-        np.random.shuffle(xc)
-        xx = xc[:samples,0]
-        yy = xc[:samples,1]
-
-        feat_samples = []
-        for i in range(len(feat)):
-
-            layer_feat = feat[i]
-
-            # hack to detect lower resolution
-            if i>0 and feat[i].size(2) < feat[i-1].size(2):
-                xx = xx/2.0
-                yy = yy/2.0
-
-            xx = np.clip(xx, 0, layer_feat.shape[2]-1).astype(np.int32)
-            yy = np.clip(yy, 0, layer_feat.shape[3]-1).astype(np.int32)
-
-            features = layer_feat[:,:, xx[range(samples)], yy[range(samples)]]
-            feat_samples.append(features.clone().detach())
-
-        feat = torch.cat(feat_samples,1)
-        return feat
-    
-# Tensor and PIL utils
-
-def pil_loader(path):
-    with open(path, 'rb') as f:
-        img = PIL.Image.open(f)
-        return img.convert('RGB')
-
-def tensor_resample(tensor, dst_size, mode='bilinear'):
-    return F.interpolate(tensor, dst_size, mode=mode, align_corners=False)
-
-def pil_resize_short_edge_to(pil, trg_size):
-    short_w = pil.width < pil.height
-    ar_resized_short = (trg_size / pil.width) if short_w else (trg_size / pil.height)
-    resized = pil.resize((int(pil.width * ar_resized_short), int(pil.height * ar_resized_short)), PIL.Image.BICUBIC)
-    return resized
-
-def pil_resize_long_edge_to(pil, trg_size):
-    short_w = pil.width < pil.height
-    ar_resized_long = (trg_size / pil.height) if short_w else (trg_size / pil.width)
-    resized = pil.resize((int(pil.width * ar_resized_long), int(pil.height * ar_resized_long)), PIL.Image.BICUBIC)
-    return resized
-
-def np_to_pil(npy):
-    return PIL.Image.fromarray(npy.astype(np.uint8))
-
-def pil_to_np(pil):
-    return np.array(pil)
-
-def tensor_to_np(tensor, cut_dim_to_3=True):
-    if len(tensor.shape) == 4:
-        if cut_dim_to_3:
-            tensor = tensor[0]
-        else:
-            return tensor.data.cpu().numpy().transpose((0, 2, 3, 1))
-    return tensor.data.cpu().numpy().transpose((1,2,0))
-
-def np_to_tensor(npy, space):
-    if space == 'vgg':
-        return np_to_tensor_correct(npy)
-    return (torch.Tensor(npy.astype(np.float) / 127.5) - 1.0).permute((2,0,1)).unsqueeze(0)
-
-def np_to_tensor_correct(npy):
-    pil = np_to_pil(npy)
-    transform = transforms.Compose([transforms.ToTensor(),
-        transforms.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225])
-    ])
-    return transform(pil).unsqueeze(0)
-
-# Laplacian Pyramid
-
-def laplacian(x):
-    # x - upsample(downsample(x))
-    return x - tensor_resample(tensor_resample(x, [x.shape[2] // 2, x.shape[3] // 2]), [x.shape[2], x.shape[3]])
-
-def make_laplace_pyramid(x, levels):
-    pyramid = []
-    current = x
-    for i in range(levels):
-        pyramid.append(laplacian(current))
-        current = tensor_resample(current, (max(current.shape[2] // 2,1), max(current.shape[3] // 2,1)))
-    pyramid.append(current)
-    return pyramid
-
-def fold_laplace_pyramid(pyramid):
-    current = pyramid[-1]
-    for i in range(len(pyramid)-2, -1, -1): # iterate from len-2 to 0
-        up_h, up_w = pyramid[i].shape[2], pyramid[i].shape[3]
-        current = pyramid[i] + tensor_resample(current, (up_h,up_w))
-    return current
-
-def sample_indices(feat_content, feat_style):
-    indices = None
-    const = 128**2 # 32k or so
-    feat_dims = feat_style.shape[1]
-    big_size = feat_content.shape[2] * feat_content.shape[3] # num feaxels
-
-    stride_x = int(max(math.floor(math.sqrt(big_size//const)),1))
-    offset_x = np.random.randint(stride_x)
-    stride_y = int(max(math.ceil(math.sqrt(big_size//const)),1))
-    offset_y = np.random.randint(stride_y)
-    xx, xy = np.meshgrid(np.arange(feat_content.shape[2])[offset_x::stride_x], np.arange(feat_content.shape[3])[offset_y::stride_y] )
-
-    xx = xx.flatten()
-    xy = xy.flatten()
-    return xx, xy
-
-def spatial_feature_extract(feat_result, feat_content, xx, xy):
-    l2, l3 = [], []
-    device = feat_result[0].device
-
-    # for each extracted layer
-    for i in range(len(feat_result)):
-        fr = feat_result[i]
-        fc = feat_content[i]
-
-        # hack to detect reduced scale
-        if i>0 and feat_result[i-1].size(2) > feat_result[i].size(2):
-            xx = xx/2.0
-            xy = xy/2.0
-
-        # go back to ints and get residual
-        xxm = np.floor(xx).astype(np.float32)
-        xxr = xx - xxm
-
-        xym = np.floor(xy).astype(np.float32)
-        xyr = xy - xym
-
-        # do bilinear resample
-        w00 = torch.from_numpy((1.-xxr)*(1.-xyr)).float().view(1, 1, -1, 1).to(device)
-        w01 = torch.from_numpy((1.-xxr)*xyr).float().view(1, 1, -1, 1).to(device)
-        w10 = torch.from_numpy(xxr*(1.-xyr)).float().view(1, 1, -1, 1).to(device)
-        w11 = torch.from_numpy(xxr*xyr).float().view(1, 1, -1, 1).to(device)
-
-        xxm = np.clip(xxm.astype(np.int32),0,fr.size(2)-1)
-        xym = np.clip(xym.astype(np.int32),0,fr.size(3)-1)
-
-        s00 = xxm*fr.size(3)+xym
-        s01 = xxm*fr.size(3)+np.clip(xym+1,0,fr.size(3)-1)
-        s10 = np.clip(xxm+1,0,fr.size(2)-1)*fr.size(3)+(xym)
-        s11 = np.clip(xxm+1,0,fr.size(2)-1)*fr.size(3)+np.clip(xym+1,0,fr.size(3)-1)
-
-        fr = fr.view(1,fr.size(1),fr.size(2)*fr.size(3),1)
-        fr = fr[:,:,s00,:].mul_(w00).add_(fr[:,:,s01,:].mul_(w01)).add_(fr[:,:,s10,:].mul_(w10)).add_(fr[:,:,s11,:].mul_(w11))
-
-        fc = fc.view(1,fc.size(1),fc.size(2)*fc.size(3),1)
-        fc = fc[:,:,s00,:].mul_(w00).add_(fc[:,:,s01,:].mul_(w01)).add_(fc[:,:,s10,:].mul_(w10)).add_(fc[:,:,s11,:].mul_(w11))
-
-        l2.append(fr)
-        l3.append(fc)
-
-    x_st = torch.cat([li.contiguous() for li in l2],1)
-    c_st = torch.cat([li.contiguous() for li in l3],1)
-
-    xx = torch.from_numpy(xx).view(1,1,x_st.size(2),1).float().to(device)
-    yy = torch.from_numpy(xy).view(1,1,x_st.size(2),1).float().to(device)
-    
-    x_st = torch.cat([x_st,xx,yy],1)
-    c_st = torch.cat([c_st,xx,yy],1)
-    return x_st, c_st
-
-def pairwise_distances_cos(x, y):
-    x_norm = torch.sqrt((x**2).sum(1).view(-1, 1))
-    y_t = torch.transpose(y, 0, 1)
-    y_norm = torch.sqrt((y**2).sum(1).view(1, -1))
-    dist = 1.-torch.mm(x, y_t)/x_norm/y_norm
-    return dist
-
-def pairwise_distances_sq_l2(x, y):
-    x_norm = (x**2).sum(1).view(-1, 1)
-    y_t = torch.transpose(y, 0, 1)
-    y_norm = (y**2).sum(1).view(1, -1)
-    dist = x_norm + y_norm - 2.0 * torch.mm(x, y_t)
-    return torch.clamp(dist, 1e-5, 1e5)/x.size(1)
-
-def distmat(x, y, cos_d=True):
-    if cos_d:
-        M = pairwise_distances_cos(x, y)
-    else:
-        M = torch.sqrt(pairwise_distances_sq_l2(x, y))
-    return M
-
-def content_loss(feat_result, feat_content):
-    d = feat_result.size(1)
-
-    X = feat_result.transpose(0,1).contiguous().view(d,-1).transpose(0,1)
-    Y = feat_content.transpose(0,1).contiguous().view(d,-1).transpose(0,1)
-
-    Y = Y[:,:-2]
-    X = X[:,:-2]
-    # X = X.t()
-    # Y = Y.t()
-
-    Mx = distmat(X, X)
-    Mx = Mx#/Mx.sum(0, keepdim=True)
-
-    My = distmat(Y, Y)
-    My = My#/My.sum(0, keepdim=True)
-
-    d = torch.abs(Mx-My).mean()# * X.shape[0]
-    return d
-
-def rgb_to_yuv(rgb):
-    C = torch.Tensor([[0.577350,0.577350,0.577350],[-0.577350,0.788675,-0.211325],[-0.577350,-0.211325,0.788675]]).to(rgb.device)
-    yuv = torch.mm(C,rgb)
-    return yuv
-
-def style_loss(X, Y, cos_d=True):
-    d = X.shape[1]
-
-    if d == 3:
-        X = rgb_to_yuv(X.transpose(0,1).contiguous().view(d,-1)).transpose(0,1)
-        Y = rgb_to_yuv(Y.transpose(0,1).contiguous().view(d,-1)).transpose(0,1)
-    else:
-        X = X.transpose(0,1).contiguous().view(d,-1).transpose(0,1)
-        Y = Y.transpose(0,1).contiguous().view(d,-1).transpose(0,1)
-
-    # Relaxed EMD
-    CX_M = distmat(X, Y, cos_d=True)
-
-    if d==3: CX_M = CX_M + distmat(X, Y, cos_d=False)
-
-    m1, m1_inds = CX_M.min(1)
-    m2, m2_inds = CX_M.min(0)
-
-    remd = torch.max(m1.mean(), m2.mean())
-
-    return remd
-
-def moment_loss(X, Y, moments=[1,2]):
-    loss = 0.
-    X = X.squeeze().t()
-    Y = Y.squeeze().t()
-
-    mu_x = torch.mean(X, 0, keepdim=True)
-    mu_y = torch.mean(Y, 0, keepdim=True)
-    mu_d = torch.abs(mu_x - mu_y).mean()
-
-    if 1 in moments:
-        # print(mu_x.shape)
-        loss = loss + mu_d
-
-    if 2 in moments:
-        X_c = X - mu_x
-        Y_c = Y - mu_y
-        X_cov = torch.mm(X_c.t(), X_c) / (X.shape[0] - 1)
-        Y_cov = torch.mm(Y_c.t(), Y_c) / (Y.shape[0] - 1)
-
-        # print(X_cov.shape)
-        # exit(1)
-
-        D_cov = torch.abs(X_cov - Y_cov).mean()
-        loss = loss + D_cov
-
-    return loss
-
-def calculate_loss(feat_result, feat_content, feat_style, indices, content_weight, moment_weight=1.0):
-    # spatial feature extract
-    num_locations = 1024
-    spatial_result, spatial_content = spatial_feature_extract(feat_result, feat_content, indices[0][:num_locations], indices[1][:num_locations])
-    loss_content = content_loss(spatial_result, spatial_content)
-
-    d = feat_style.shape[1]
-    spatial_style = feat_style.view(1, d, -1, 1)
-    feat_max = 3+2*64+128*2+256*3+512*2 # (sum of all extracted channels)
-
-    loss_remd = style_loss(spatial_result[:, :feat_max, :, :], spatial_style[:, :feat_max, :, :])
-
-    loss_moment = moment_loss(spatial_result[:,:-2,:,:], spatial_style, moments=[1,2]) # -2 is so that it can fit?
-    # palette matching
-    content_weight_frac = 1./max(content_weight,1.)
-    loss_moment += content_weight_frac * style_loss(spatial_result[:,:3,:,:], spatial_style[:,:3,:,:])
-    
-    loss_style = loss_remd + moment_weight * loss_moment
-    # print(f'Style: {loss_style.item():.3f}, Content: {loss_content.item():.3f}')
-
-    style_weight = 1.0 + moment_weight
-    loss_total = (content_weight * loss_content + loss_style) / (content_weight + style_weight)
-    return loss_total
-
-def scale_loss(result, content, style, scale, content_weight, lr, extractor):
-    total_loss = 0.0
-    # torch.autograd.set_detect_anomaly(True)
-    result_pyramid = make_laplace_pyramid(result, 5)
-
-    opt_iter = 3
-    # if scale == 1:
-    #     opt_iter = 800
-
-    # use rmsprop
-
-    # extract features for content
-    feat_content = extractor(content) # 
-
-    stylized = fold_laplace_pyramid(result_pyramid)
-    # let's ignore the regions for now
-    # some inner loop that extracts samples
-    feat_style = None
-    for i in range(5):
-        with torch.no_grad():
-            # r is region of interest (mask)
-            feat_e = extractor.forward_samples_hypercolumn(style, samps=1000)
-            feat_style = feat_e if feat_style is None else torch.cat((feat_style, feat_e), dim=2)
-    # feat_style.requires_grad_(False)
-
-    # init indices to optimize over
-    xx, xy = sample_indices(feat_content[0], feat_style) # 0 to sample over first layer extracted
-    for it in range(opt_iter):
-
-        stylized = fold_laplace_pyramid(result_pyramid)
-        # original code has resample here, seems pointless with uniform shuffle
-        # ...
-        # also shuffle them every y iter
-        if it % 1 == 0 and it != 0:
-            np.random.shuffle(xx)
-            np.random.shuffle(xy)
-        feat_result = extractor(stylized)
-
-        loss = calculate_loss(feat_result, feat_content, feat_style, [xx, xy], content_weight)
-        total_loss += loss*lr
-
-    return total_loss
-
-
-def strotss_loss(out_tensor, style_tensor, content_weight=1.0*16.0, extractor=None): #out: tensor style: tensor [B,C,W,H] B=1
-
-    total_loss = 0.0
-    
-    content_full = out_tensor
-    style_full = style_tensor
-
-    lr = 2e-3
-    
-
-    scale_last = max(content_full.shape[2], content_full.shape[3])
-    scales = []
-    for scale in range(10):
-        divisor = 2**scale
-        if min(content_full.shape[2], content_full.shape[3]) // divisor >= 33:
-            scales.insert(0, divisor)
-    
-    for scale in scales:
-        # rescale content to current scale
-        content = tensor_resample(content_full, [ content_full.shape[2] // scale, content_full.shape[3] // scale ])
-        style = tensor_resample(style_full, [ style_full.shape[2] // scale, style_full.shape[3] // scale ])
-        # print(f'Optimizing at resoluton [{content.shape[2]}, {content.shape[3]}]') 
-
-        # upsample or initialize the result
-        if scale == scales[0]:
-            # first
-            result = laplacian(content) + style.mean(2,keepdim=True).mean(3,keepdim=True)
-        elif scale == scales[-1]:
-            # last 
-            result = tensor_resample(result, [content.shape[2], content.shape[3]])
-            lr = 1
-        else:
-            result = tensor_resample(result, [content.shape[2], content.shape[3]]) + laplacian(content)
-
-        # do the optimization on this scale
-        total_loss += scale_loss(result, content, style, scale, content_weight=content_weight, lr=lr, extractor=extractor)
-
-        # next scale lower weight
-        content_weight /= 2.0
-
-    return total_loss
-
-
-
-
-
-if __name__ == "__main__":
-    parser = ArgumentParser()
-    parser.add_argument("content", type=str)
-    parser.add_argument("style", type=str)
-    parser.add_argument("--weight", type=float, default=1.0)
-    parser.add_argument("--output", type=str, default="strotss.png")
-    parser.add_argument("--device", type=str, default="cuda:0")
-    # uniform ospace = optimization done in [-1, 1], else imagenet normalized space
-    parser.add_argument("--ospace", type=str, default="uniform", choices=["uniform", "vgg"])
-    parser.add_argument("--resize_to", type=int, default=512)
-    args = parser.parse_args()
-
-    # make 256 the smallest possible long side, will still fail if short side is <
-    if args.resize_to < 2**8:
-        print("Resulution too low.")
-        exit(1)
-
-    content_pil, style_pil = pil_loader(args.content), pil_loader(args.style)
-    content_weight = args.weight * 16.0
-
-    device = args.device
-
-    start = time()
-    result = strotss(pil_resize_long_edge_to(content_pil, args.resize_to), 
-                     pil_resize_long_edge_to(style_pil, args.resize_to), content_weight, device, args.ospace)
-    result.save(args.output)
-    print(f'Done in {time()-start:.3f}s')
-
-
-
-
-class StyleLoss(LossInterface):
-    def __init__(self,**kwargs):
-        self.resized = None
-        super().__init__(**kwargs)
-    
-    @staticmethod
-    def add_settings(parser):
-        parser.add_argument("--style_file", type=str, default="", dest='style_file')
-        parser.add_argument("--styleloss_content_weight", type=float, default=32, dest='styleloss_content_weight')
-        parser.add_argument("--styleloss_ospace", type=str, default="uniform", dest='styleloss_ospace') # vgg
-        parser.add_argument("--styleloss_skip", type=int, default=100, dest='styleloss_skip') 
-        parser.add_argument("--styleloss_every", type=int, default=1, dest='styleloss_every') 
-        return parser
-    
-    
-    def parse_settings(self,args):
-        if args.style_file:
-            # now we might overlay an init image
-            filelist = None
-            if 'http' in args.style_file:
-                self.style = [Image.open(urlopen(args.style_file))]
-            else:
-                filelist = real_glob(args.style_file)
-                self.style = [Image.open(f) for f in filelist]
-            self.style = self.style[0]
-        
-        self.extractor = Vgg16_Extractor(space=args.styleloss_ospace).to(self.device)
-        
-        return args
-   
-    def get_loss(self, cur_cutouts, out, args, globals=None, lossGlobals=None):
-        if self.resized is None:
-            self.resized = TF.to_tensor(self.style).to(self.device).unsqueeze(0)
-            self.resized = TF.resize(self.resized, out.size()[2:4],TF.InterpolationMode.BICUBIC)
-        if globals["cur_iteration"]<args.styleloss_skip:
-            return torch.tensor(0.0)
-        if globals["cur_iteration"]%args.styleloss_every!=0:
-            return torch.tensor(0.0)
-        return strotss_loss(out,self.resized, args.styleloss_content_weight, extractor=self.extractor)
diff --git a/Losses/SymmetryLoss.py b/Losses/SymmetryLoss.py
deleted file mode 100755
index c5e6f72..0000000
--- a/Losses/SymmetryLoss.py
+++ /dev/null
@@ -1,17 +0,0 @@
-import torch
-from torch import nn, optim
-from Losses.LossInterface import LossInterface
-
-class SymmetryLoss(LossInterface):
-    def __init__(self,**kwargs):
-        super().__init__(**kwargs)
-    
-    @staticmethod
-    def add_settings(parser):
-        parser.add_argument("--symmetry_weight", type=float, help="how much symmetry is weighted in loss", default=1, dest='symmetry_weight')
-        return parser
-   
-    def get_loss(self, cur_cutouts, out, args, globals=None, lossGlobals=None):
-        mseloss = nn.MSELoss()
-        cur_loss = mseloss(out, torch.flip(out,[3])) 
-        return cur_loss * args.symmetry_weight
diff --git a/SLIP b/SLIP
deleted file mode 160000
index c6faf5d..0000000
--- a/SLIP
+++ /dev/null
@@ -1,1 +0,0 @@
-Subproject commit c6faf5d03cbfa7d529d210779f859cd3dddec09a
diff --git a/USE b/USE
deleted file mode 100755
index b4867f6..0000000
--- a/USE
+++ /dev/null
@@ -1,3 +0,0 @@
-royalties: pixray.tez, pixray.dribnet.eth, pixray.dribnet.sol
-author: dribnet
-terms: negotiable
diff --git a/clipdrawer.py b/clipdrawer.py
deleted file mode 100755
index 44834f9..0000000
--- a/clipdrawer.py
+++ /dev/null
@@ -1,171 +0,0 @@
-# this is derived from ClipDraw code
-# CLIPDraw: Exploring Text-to-Drawing Synthesis through Language-Image Encoders
-# Kevin Frans, L.B. Soros, Olaf Witkowski
-# https://arxiv.org/abs/2106.14843
-
-from DrawingInterface import DrawingInterface
-
-import pydiffvg
-import torch
-import skimage
-import skimage.io
-import random
-import ttools.modules
-import argparse
-import math
-import torchvision
-import torchvision.transforms as transforms
-import numpy as np
-import PIL.Image
-
-class ClipDrawer(DrawingInterface):
-    @staticmethod
-    def add_settings(parser):
-        parser.add_argument("--strokes", type=int, help="number strokes", default=1024, dest='strokes')
-        parser.add_argument("--min_stroke_width", type=float, help="min width (percent of height)", default=1, dest='min_stroke_width')
-        parser.add_argument("--max_stroke_width", type=float, help="max width (percent of height)", default=5, dest='max_stroke_width')
-        return parser
-
-    def __init__(self, settings):
-        super(DrawingInterface, self).__init__()
-
-        self.canvas_width = settings.size[0]
-        self.canvas_height = settings.size[1]
-        self.num_paths = settings.strokes
-
-    def load_model(self, settings, device):
-        # Use GPU if available
-        pydiffvg.set_use_gpu(torch.cuda.is_available())
-        device = torch.device('cuda')
-        pydiffvg.set_device(device)
-
-        canvas_width, canvas_height = self.canvas_width, self.canvas_height
-        num_paths = self.num_paths
-        max_width = settings.max_stroke_width * canvas_height / 100
-        min_width = settings.min_stroke_width * canvas_height / 100
-
-        # Initialize Random Curves
-        shapes = []
-        shape_groups = []
-        for i in range(num_paths):
-            num_segments = random.randint(1, 3)
-            num_control_points = torch.zeros(num_segments, dtype = torch.int32) + 2
-            points = []
-            p0 = (random.random(), random.random())
-            points.append(p0)
-            for j in range(num_segments):
-                radius = 0.1
-                p1 = (p0[0] + radius * (random.random() - 0.5), p0[1] + radius * (random.random() - 0.5))
-                p2 = (p1[0] + radius * (random.random() - 0.5), p1[1] + radius * (random.random() - 0.5))
-                p3 = (p2[0] + radius * (random.random() - 0.5), p2[1] + radius * (random.random() - 0.5))
-                points.append(p1)
-                points.append(p2)
-                points.append(p3)
-                p0 = p3
-            points = torch.tensor(points)
-            points[:, 0] *= canvas_width
-            points[:, 1] *= canvas_height
-            path = pydiffvg.Path(num_control_points = num_control_points, points = points, stroke_width = torch.tensor((min_width + max_width)/4), is_closed = False)
-            shapes.append(path)
-            path_group = pydiffvg.ShapeGroup(shape_ids = torch.tensor([len(shapes) - 1]), fill_color = None, stroke_color = torch.tensor([random.random(), random.random(), random.random(), random.random()]))
-            shape_groups.append(path_group)
-
-        # Just some diffvg setup
-        scene_args = pydiffvg.RenderFunction.serialize_scene(\
-            canvas_width, canvas_height, shapes, shape_groups)
-        render = pydiffvg.RenderFunction.apply
-        img = render(canvas_width, canvas_height, 2, 2, 0, None, *scene_args)
-
-        points_vars = []
-        stroke_width_vars = []
-        color_vars = []
-        for path in shapes:
-            path.points.requires_grad = True
-            points_vars.append(path.points)
-            path.stroke_width.requires_grad = True
-            stroke_width_vars.append(path.stroke_width)
-        for group in shape_groups:
-            group.stroke_color.requires_grad = True
-            color_vars.append(group.stroke_color)
-
-        self.points_vars = points_vars
-        self.stroke_width_vars = stroke_width_vars
-        self.color_vars = color_vars
-        self.img = img
-        self.shapes = shapes 
-        self.shape_groups  = shape_groups
-        self.max_width = max_width
-        self.min_width = min_width
-        self.canvas_width = canvas_width
-        self.canvas_height = canvas_height
-
-    def get_opts(self, decay_divisor):
-        # Optimizers
-        points_optim = torch.optim.Adam(self.points_vars, lr=1.0/decay_divisor)
-        width_optim = torch.optim.Adam(self.stroke_width_vars, lr=0.1/decay_divisor)
-        color_optim = torch.optim.Adam(self.color_vars, lr=0.01/decay_divisor)
-        opts = [points_optim, width_optim, color_optim]
-        return opts
-
-    def rand_init(self, toksX, toksY):
-        # TODO
-        pass
-
-    def init_from_tensor(self, init_tensor):
-        # TODO
-        pass
-
-    def reapply_from_tensor(self, new_tensor):
-        # TODO
-        pass
-
-    def get_z_from_tensor(self, ref_tensor):
-        return None
-
-    def get_num_resolutions(self):
-        return None
-
-    def synth(self, cur_iteration):
-        render = pydiffvg.RenderFunction.apply
-        scene_args = pydiffvg.RenderFunction.serialize_scene(\
-            self.canvas_width, self.canvas_height, self.shapes, self.shape_groups)
-        img = render(self.canvas_width, self.canvas_height, 2, 2, cur_iteration, None, *scene_args)
-        img = img[:, :, 3:4] * img[:, :, :3] + torch.ones(img.shape[0], img.shape[1], 3, device = pydiffvg.get_device()) * (1 - img[:, :, 3:4])
-        img = img[:, :, :3]
-        img = img.unsqueeze(0)
-        img = img.permute(0, 3, 1, 2) # NHWC -> NCHW
-        self.img = img
-        return img
-
-    @torch.no_grad()
-    def to_image(self):
-        img = self.img.detach().cpu().numpy()[0]
-        img = np.transpose(img, (1, 2, 0))
-        img = np.clip(img, 0, 1)
-        img = np.uint8(img * 254)
-        # img = np.repeat(img, 4, axis=0)
-        # img = np.repeat(img, 4, axis=1)
-        pimg = PIL.Image.fromarray(img, mode="RGB")
-        return pimg
-
-    def clip_z(self):
-        with torch.no_grad():
-            for path in self.shapes:
-                path.stroke_width.data.clamp_(self.min_width, self.max_width)
-            for group in self.shape_groups:
-                group.stroke_color.data.clamp_(0.0, 1.0)
-
-    def get_z(self):
-        return None
-
-    def get_z_copy(self):
-        return None
-
-    def set_z(self, new_z):
-        return None
-
-### EXTERNAL INTERFACE
-### load_vqgan_model
-
-if __name__ == '__main__':
-    main()
diff --git a/cog.yaml b/cog.yaml
deleted file mode 100755
index 5af69c1..0000000
--- a/cog.yaml
+++ /dev/null
@@ -1,20 +0,0 @@
-build:
-  gpu: true
-  cuda: "10.2"
-  python_version: "3.8"
-  python_requirements: "requirements.txt"
-  run:
-    - "apt-get update && apt install -y libgl1-mesa-glx"
-    # CMAKE_PREFIX_PATH fix is from https://github.com/readthedocs/readthedocs.org/issues/5867
-    - "git clone https://github.com/pixray/diffvg && cd diffvg && git submodule update --init --recursive && CMAKE_PREFIX_PATH=$(pyenv prefix) DIFFVG_CUDA=1 python setup.py install"
-# predict: "cogrun.py:Text2Image"
-# predict: "cogrun.py:Text2Pixel"
-# predict: "cog_genesis.py:GenesisPredictor"
-# predict: "cogrun.py:PixrayApi"
-# predict: "cogrun.py:Tiler"
-# predict: "cogrun.py:PixrayRaw"
-predict: "cogrun.py:PixrayVdiff"
-# OLDSTUFF
-# predict: "cogrun.py:BasePixrayPredictor"
-# predict: "cogrun.py:PixrayVqgan"
-# predict: "cogrun.py:PixrayPixel"
diff --git a/cog_genesis.py b/cog_genesis.py
deleted file mode 100755
index 909abae..0000000
--- a/cog_genesis.py
+++ /dev/null
@@ -1,58 +0,0 @@
-import cog
-from pathlib import Path
-import torch
-import pixray
-import yaml
-import pathlib
-import os
-import yaml
-
-from cogrun import create_temporary_copy
-
-class GenesisPredictor(cog.Predictor):
-    def setup(self):
-        print("---> GenesisPredictor Setup")
-
-    # Define the input types for a prediction
-    @cog.input("title", type=str, default="")
-    @cog.input("quality", type=str, options=["draft", "mintable"], default="draft")
-    @cog.input("optional_settings", type=str, default="\n")
-    def predict(self, title, quality, optional_settings):
-        """Run a single prediction on the model"""
-        print("---> Pixray Genesis Init")
-
-        pixray.reset_settings()
-
-        if(quality=="draft"):
-            pixray.add_settings(output="outputs/genesis_draft.png", quality="draft", scale=2.5, iterations=100)
-        else:
-            pixray.add_settings(output="outputs/genesis.png", quality="best", scale=4, iterations=350)
-
-        # apply settings in order
-        title = title.strip()
-        if title == "" or title == "(untitled)":
-            title = "Wow, that looks amazing!|Trending on Artstation"
-            pixray.add_settings(custom_loss='saturation')
-
-        # initially assume prompt is title (this can be overridden)
-        pixray.add_settings(prompts=title)
-
-        optional_settings = optional_settings.strip()
-        if optional_settings != "":
-            ydict = yaml.safe_load(optional_settings)
-            if ydict is not None:
-                print(ydict)
-                # add #pixelart to pixel drawer items
-                if ("drawer" in ydict) and ydict["drawer"] == "pixel":
-                    pixray.add_settings(prompts=f"{title} #pixelart")
-                # note settings might explicitly set prompts as well
-                pixray.add_settings(**ydict)
-
-        pixray.add_settings(skip_args=True)
-        settings = pixray.apply_settings()
-        pixray.do_init(settings)
-        run_complete = False
-        while run_complete == False:
-            run_complete = pixray.do_run(settings, return_display=True)
-            temp_copy = create_temporary_copy(settings.output)
-            yield pathlib.Path(os.path.realpath(temp_copy))
diff --git a/cogrun.py b/cogrun.py
deleted file mode 100755
index d07c368..0000000
--- a/cogrun.py
+++ /dev/null
@@ -1,133 +0,0 @@
-import cog
-from pathlib import Path
-import torch
-import yaml
-import pathlib
-import os
-import yaml
-
-# https://stackoverflow.com/a/6587648/1010653
-import tempfile, shutil
-def create_temporary_copy(src_path):
-    _, tf_suffix = os.path.splitext(src_path)
-    temp_dir = tempfile.gettempdir()
-    temp_path = os.path.join(temp_dir, f"tempfile{tf_suffix}")
-    shutil.copy2(src_path, temp_path)
-    return temp_path
-
-class BasePixrayPredictor(cog.Predictor):
-    def setup(self):
-        print("---> BasePixrayPredictor Setup")
-        os.environ['TORCH_HOME'] = 'models/'
-
-    # Define the input types for a prediction
-    @cog.input("settings", type=str, help="Default settings to use")
-    @cog.input("prompts", type=str, help="Text Prompts")
-    def predict(self, settings, **kwargs):
-        # workaround for import issue when deploying
-        import pixray
-        """Run a single prediction on the model"""
-        print("---> BasePixrayPredictor Predict")
-        os.environ['TORCH_HOME'] = 'models/'
-        settings_file = f"cogs/{settings}.yaml"
-        with open(settings_file, 'r') as stream:
-          try:
-              base_settings = yaml.safe_load(stream)
-          except yaml.YAMLError as exc:
-              print("YAML ERROR", exc)
-              sys.exit(1)
-
-        pixray.reset_settings()
-        pixray.add_settings(**base_settings)
-        pixray.add_settings(**kwargs)
-        pixray.add_settings(skip_args=True)
-        settings = pixray.apply_settings()
-        pixray.do_init(settings)
-        run_complete = False
-        while run_complete == False:
-            run_complete = pixray.do_run(settings, return_display=True)
-            temp_copy = create_temporary_copy(settings.output)
-            yield pathlib.Path(os.path.realpath(temp_copy))
-
-class PixrayVqgan(BasePixrayPredictor):
-    @cog.input("prompts", type=str, help="text prompt", default="rainbow mountain")
-    @cog.input("quality", type=str, help="better is slower", default="normal", options=["draft", "normal", "better", "best"])
-    @cog.input("aspect", type=str, help="wide vs square", default="widescreen", options=["widescreen", "square"])
-    # @cog.input("num_cuts", type=int, default="24", min=4, max=96)
-    # @cog.input("batches", type=int, default="1", min=1, max=32)
-    def predict(self, **kwargs):
-        yield from super().predict(settings="pixray_vqgan", **kwargs)
-
-class PixrayPixel(BasePixrayPredictor):
-    @cog.input("prompts", type=str, help="text prompt", default="Beirut Skyline. #pixelart")
-    @cog.input("aspect", type=str, help="wide vs square", default="widescreen", options=["widescreen", "square"])
-    @cog.input("drawer", type=str, help="render engine", default="pixel", options=["pixel", "vqgan", "line_sketch", "clipdraw"])
-    def predict(self, **kwargs):
-        yield from super().predict(settings="pixray_pixel", **kwargs)
-
-class Text2Image(BasePixrayPredictor):
-    @cog.input("prompts", type=str, help="description of what to draw", default="Robots skydiving high above the city")
-    @cog.input("quality", type=str, help="speed vs quality", default="normal", options=["draft", "normal", "better", "best"])
-    @cog.input("aspect", type=str, help="wide or narrow", default="widescreen", options=["widescreen", "square", "portrait"])
-    def predict(self, **kwargs):
-        yield from super().predict(settings="text2image", **kwargs)
-
-class Text2Pixel(BasePixrayPredictor):
-    @cog.input("prompts", type=str, help="text prompt", default="Manhattan skyline at sunset. #pixelart")
-    @cog.input("aspect", type=str, help="wide or narrow", default="widescreen", options=["widescreen", "square", "portrait"])
-    @cog.input("pixel_scale", type=float, help="bigger pixels", default=1.0, min=0.5, max=2.0)
-    def predict(self, **kwargs):
-        yield from super().predict(settings="text2pixel", **kwargs)
-
-class PixrayRaw(BasePixrayPredictor):
-    @cog.input("prompts", type=str, help="text prompt", default="Manhattan skyline at sunset. #pixelart")
-    @cog.input("settings", type=str, help="yaml settings", default='\n')
-    def predict(self, prompts, settings):
-        ydict = yaml.safe_load(settings)
-        if ydict == None:
-            # no settings
-            ydict = {}
-        yield from super().predict(settings="pixrayraw", prompts=prompts, **ydict)
-
-class PixrayApi(BasePixrayPredictor):
-    @cog.input("settings", type=str, help="yaml settings", default='\n')
-    def predict(self, settings):
-        ydict = yaml.safe_load(settings)
-        if ydict == None:
-            # no settings
-            ydict = {}
-        yield from super().predict(settings="pixrayapi", **ydict)
-
-class Tiler(BasePixrayPredictor):
-    @cog.input("prompts", type=str, help="text prompt", default="Beautiful marble texture")
-    @cog.input("pixelart", type=bool, help="pixelart style?", default=False)
-    @cog.input("mirror", type=bool, help="shifted pattern?", default=False)
-    @cog.input("settings", type=str, help="yaml settings", default='\n')
-    def predict(self, prompts, pixelart, mirror, settings):
-        ydict = yaml.safe_load(settings)
-        if ydict == None:
-            # no settings
-            ydict = {}
-        if pixelart:
-            if mirror:
-                settings = "tiler_pixel_shift"
-            else:
-                settings = "tiler_pixel"
-            yield from super().predict(prompts=f"{prompts} #pixelart", settings=settings, **ydict)
-        else:
-            if mirror:
-                settings = "tiler_fft_shift"
-            else:
-                settings = "tiler_fft"
-            yield from super().predict(prompts=prompts, settings=settings, **ydict)    
-
-class PixrayVdiff(BasePixrayPredictor):
-    @cog.input("prompts", type=str, help="text prompt", default="Manhattan skyline at sunset. #artstation 🌇")
-    @cog.input("settings", type=str, help="extra settings in `name: value` format. reference: https://dazhizhong.gitbook.io/pixray-docs/docs/primary-settings", default='\n')
-    def predict(self, prompts, settings):
-        ydict = yaml.safe_load(settings)
-        if ydict == None:
-            # no settings
-            ydict = {}
-        yield from super().predict(settings="pixray_vdiff", prompts=prompts, **ydict)
-
diff --git a/cogs/hello_pixray.yaml b/cogs/hello_pixray.yaml
deleted file mode 100755
index c9aa2d6..0000000
--- a/cogs/hello_pixray.yaml
+++ /dev/null
@@ -1,5 +0,0 @@
-quality: "draft"
-drawer: vqgan
-iterations: 100
-prompts: "sunset in the city"
-output: outputs/hello_pixray.png
diff --git a/cogs/pixray_pixel.yaml b/cogs/pixray_pixel.yaml
deleted file mode 100755
index 27a663f..0000000
--- a/cogs/pixray_pixel.yaml
+++ /dev/null
@@ -1,5 +0,0 @@
-display_every: 10
-output: outputs/pixray_pixel.png
-quality: better
-scale: 2.5
-vector_prompts: textoff
diff --git a/cogs/pixray_vdiff.yaml b/cogs/pixray_vdiff.yaml
deleted file mode 100755
index 4111364..0000000
--- a/cogs/pixray_vdiff.yaml
+++ /dev/null
@@ -1,4 +0,0 @@
-drawer: vdiff
-quality: better
-display_every: 10
-output: outputs/vdiff.png
diff --git a/cogs/pixray_vqgan.yaml b/cogs/pixray_vqgan.yaml
deleted file mode 100755
index f6abc67..0000000
--- a/cogs/pixray_vqgan.yaml
+++ /dev/null
@@ -1,4 +0,0 @@
-drawer: vqgan
-display_every: 10
-output: outputs/pixray_vqgan.png
-vector_prompts: textoff
diff --git a/cogs/pixrayapi.yaml b/cogs/pixrayapi.yaml
deleted file mode 100755
index 953fa85..0000000
--- a/cogs/pixrayapi.yaml
+++ /dev/null
@@ -1,1 +0,0 @@
-output: outputs/api.png
diff --git a/cogs/pixrayraw.yaml b/cogs/pixrayraw.yaml
deleted file mode 100755
index 1a2fa55..0000000
--- a/cogs/pixrayraw.yaml
+++ /dev/null
@@ -1,1 +0,0 @@
-output: outputs/raw.png
diff --git a/cogs/text2image.yaml b/cogs/text2image.yaml
deleted file mode 100755
index b830056..0000000
--- a/cogs/text2image.yaml
+++ /dev/null
@@ -1,4 +0,0 @@
-drawer: vqgan
-display_every: 10
-output: outputs/text2image.png
-vector_prompts: textoff
diff --git a/cogs/text2pixel.yaml b/cogs/text2pixel.yaml
deleted file mode 100755
index 55f6423..0000000
--- a/cogs/text2pixel.yaml
+++ /dev/null
@@ -1,5 +0,0 @@
-drawer: pixel
-display_every: 10
-output: outputs/text2pixel.png
-scale: 2.5
-quality: better
diff --git a/cogs/tiler_fft.yaml b/cogs/tiler_fft.yaml
deleted file mode 100755
index 1b8953b..0000000
--- a/cogs/tiler_fft.yaml
+++ /dev/null
@@ -1,9 +0,0 @@
-drawer: vqgan
-display_every: 10
-output: outputs/tiler_fft.png
-quality: better
-filters: wallpaper
-wallpaper_edge_match: 4
-custom_loss: smoothness:0.5
-smoothness_type: clipped
-size: [416, 416]
diff --git a/cogs/tiler_fft_shift.yaml b/cogs/tiler_fft_shift.yaml
deleted file mode 100755
index 20189f0..0000000
--- a/cogs/tiler_fft_shift.yaml
+++ /dev/null
@@ -1,9 +0,0 @@
-drawer: fft
-fft_use: dwt
-fft_wave: dmey
-display_every: 10
-output: outputs/tiler_fft.png
-quality: better
-filters: wallpaper
-size: [720, 360]
-wallpaper_shift: True
\ No newline at end of file
diff --git a/cogs/tiler_pixel.yaml b/cogs/tiler_pixel.yaml
deleted file mode 100755
index 006a721..0000000
--- a/cogs/tiler_pixel.yaml
+++ /dev/null
@@ -1,7 +0,0 @@
-drawer: pixel
-display_every: 10
-output: outputs/tiler_pixel.png
-quality: better
-filters: wallpaper
-pixel_size: [64, 64]
-size: [256, 256]
diff --git a/cogs/tiler_pixel_shift.yaml b/cogs/tiler_pixel_shift.yaml
deleted file mode 100755
index d28ecab..0000000
--- a/cogs/tiler_pixel_shift.yaml
+++ /dev/null
@@ -1,8 +0,0 @@
-drawer: pixel
-display_every: 10
-output: outputs/tiler_pixel.png
-quality: better
-filters: wallpaper
-pixel_size: [64, 32]
-size: [256, 128]
-wallpaper_shift: True
\ No newline at end of file
diff --git a/examples/loot.py b/examples/loot.py
deleted file mode 100755
index 71c9df9..0000000
--- a/examples/loot.py
+++ /dev/null
@@ -1,142 +0,0 @@
-import sys
-import os
-import clipit
-import yaml
-
-templates = {
-    'amulet': 'templates/amulet.png',
-    'armor': 'templates/armor.png',
-    'belt': 'templates/belt.png',
-    'boots': 'templates/boots.png',
-    'gloves': 'templates/gloves.png',
-    'greaves': 'templates/greaves.png',
-    'hood': 'templates/hood.png',
-    'katana': 'templates/katana.png',
-    'necklace': 'templates/necklace.png',
-    'quarterstaff': 'templates/quarterstaff.png',
-    'ring': 'templates/ring.png',
-    'robe': 'templates/robe.png',
-    'wand': 'templates/wand.png',
-}
-
-texts = [
-  ('hard leather armor #pixelart', 'armor'),
-  ('"death root" ornate greaves of skill #pixelart', 'greaves'),
-  ('studded leather gloves #pixelart', 'gloves'),
-  ('divine hood #pixelart', 'hood'),
-  ('necklace of enlightenment #pixelart', 'necklace'),
-  ('gold ring #pixelart', 'ring'),
-  ('hard leather belt #pixelart', 'belt'),
-  ('"grim shout" grave wand of skill +1 #pixelart', 'wand'),
-  ('"ghoul sun" silk robe of fury #pixelart', 'robe'),
-  ('"pandemonium shout" demonhide boots of brilliance +1 #pixelart', 'boots'),
-  ('gloves #pixelart', 'gloves'),
-  ('amulet #pixelart', 'amulet'),
-  ('titanium ring #pixelart', 'ring'),
-  ('plated belt #pixelart', 'belt'),
-  ('bone wand #pixelart', 'wand'),
-  ('ornate greaves of anger #pixelart', 'greaves'),
-  ('dragonskin gloves #pixelart', 'gloves'),
-  ('necklace #pixelart', 'necklace'),
-  ('gold ring of titans #pixelart', 'ring'),
-  ('ornate belt of detection #pixelart', 'belt'),
-  ('katana #pixelart', 'katana'),
-  ('ornate greaves #pixelart', 'greaves'),
-  ('leather gloves of perfection #pixelart', 'gloves'),
-  ('silk hood #pixelart', 'hood'),
-  ('heavy belt #pixelart', 'belt'),
-  ('holy greaves #pixelart', 'greaves'),
-  ('hard leather gloves #pixelart', 'gloves'),
-  ("dragon's crown of perfection #pixelart", 'crown'),
-  ('dragonskin armor #pixelart', 'armor'),
-  ('dragonskin boots #pixelart', 'boots'),
-  ('heavy gloves of titans #pixelart', 'gloves'),
-  ('hood #pixelart', 'hood'),
-  ('necklace of detection #pixelart', 'necklace'),
-  ('silver ring #pixelart', 'ring'),
-  ('leather belt #pixelart', 'belt'),
-  ('"tempest peak" greaves of enlightenment +1 #pixelart', 'greaves'),
-  ('gauntlets #pixelart', 'gauntlet'),
-  ('platinum ring #pixelart', 'ring'),
-  ('"skull bite" hard leather boots of reflection +1 #pixelart', 'boots'),
-  ('wool gloves of skill #pixelart', 'gloves'),
-  ('war belt of perfection #pixelart', 'belt'),
-  ('ghost wand #pixelart', 'wand'),
-  ('"soul glow" studded leather armor of rage #pixelart', 'armor'),
-  ('silk gloves #pixelart', 'gloves'),
-  ('linen hood of fury #pixelart', 'hood'),
-  ('gold ring of anger #pixelart', 'ring'),
-  ('mesh belt #pixelart', 'belt'),
-  ('robe #pixelart', 'robe'),
-  ('wool gloves #pixelart', 'gloves'),
-  ('"havoc sun" amulet of reflection #pixelart', 'amulet'),
-  ('studded leather belt #pixelart', 'belt'),
-  ('studded leather boots #pixelart', 'boots'),
-  ('ornate gauntlets of vitriol #pixelart', 'gauntlet'),
-  ('demon crown #pixelart', 'crown'),
-  ('bronze ring #pixelart', 'ring'),
-  ('hard leather boots #pixelart', 'boots'),
-  ('gold ring of rage #pixelart', 'ring'),
-  ('ornate belt #pixelart', 'belt'),
-  ('"kraken moon" hard leather armor of skill +1 #pixelart', 'armor'),
-  ('heavy boots of protection #pixelart', 'boots'),
-  ('linen robe of rage #pixelart', 'robe'),
-  ('ring mail #pixelart', 'ring'),
-  ('chain boots of giants #pixelart', 'boots'),
-  ('studded leather armor #pixelart', 'armor'),
-  ('hard leather boots of vitriol #pixelart', 'boots'),
-  ("dragon's crown of titans #pixelart", 'crown'),
-  ('leather armor #pixelart', 'armor'),
-  ('ornate gauntlets #pixelart', 'gauntlet'),
-  ('demonhide boots #pixelart', 'boots'),
-  ('divine gloves #pixelart', 'gloves'),
-  ('"mind shout" linen robe of protection +1 #pixelart', 'robe'),
-  ('"brimstone grasp" hard leather boots of rage +1 #pixelart', 'boots'),
-  ('linen robe #pixelart', 'robe'),
-  ('linen gloves #pixelart', 'gloves'),
-  ('silk robe #pixelart', 'robe'),
-  ('dragonskin gloves of power #pixelart', 'gloves'),
-  ('gold ring of perfection #pixelart', 'ring'),
-  ('leather armor of perfection #pixelart', 'armor'),
-  ('"rage moon" silk gloves of detection +1 #pixelart', 'gloves'),
-  ('quarterstaff #pixelart', 'quarterstaff'),
-  ('divine robe of rage #pixelart', 'robe'),
-  ('leather boots #pixelart', 'boots'),
-  ('leather belt of the fox #pixelart', 'belt'),
-  ('dragonskin armor of giants #pixelart', 'armor'),
-  ('heavy boots of detection #pixelart', 'boots'),
-  ('"pain roar" war belt of power #pixelart', 'belt'),
-  ('"pandemonium grasp" hard leather armor of giants +1 #pixelart', 'armor'),
-  ('heavy boots #pixelart', 'boots'),
-  ('gauntlets of the fox #pixelart', 'gauntlet'),
-]
-
-save_location = "outputs/loot/" # update this obviously
-
-# example: python loot.py 20
-# or     : python loot.py 21 --num_cuts 64
-
-def main():
-  prefix = "settings5"
-
-  with open("loot_settings.yaml", 'r') as stream:
-      try:
-          loot_base_settings = yaml.safe_load(stream)
-      except yaml.YAMLError as exc:
-          print("YAML ERROR", exc)
-          sys.exit(1)
-
-  which_item = int(sys.argv.pop(1))
-  text, init_image_key = texts[which_item-1]
-  # This loads in default settings, but command line can override
-  clipit.reset_settings()
-  clipit.add_settings(**loot_base_settings)
-  clipit.add_settings(output=f"{save_location}/{prefix}_{(which_item):03}.png")
-  clipit.add_settings(prompts=text)
-  clipit.add_settings(init_image=templates[init_image_key])
-  settings = clipit.apply_settings(do_both=True)
-  clipit.do_init(settings)
-  clipit.do_run(settings)
-
-if __name__ == '__main__':
-    main()
diff --git a/examples/loot_settings.yaml b/examples/loot_settings.yaml
deleted file mode 100755
index 7ffd035..0000000
--- a/examples/loot_settings.yaml
+++ /dev/null
@@ -1,9 +0,0 @@
-quality: "better"
-use_pixeldraw: True
-init_noise: "pixels"
-pixel_size: [64, 64]
-size: [320,320]
-num_cuts: 96
-iterations: 120
-learning_rate_drops: [80]
-save_every: 10
\ No newline at end of file
diff --git a/fftdrawer.py b/fftdrawer.py
deleted file mode 100755
index 9de320a..0000000
--- a/fftdrawer.py
+++ /dev/null
@@ -1,109 +0,0 @@
-from DrawingInterface import DrawingInterface
-
-from torchvision.utils import save_image
-
-from aphantasia.image import to_valid_rgb, fft_image, dwt_image, pixel_image
-import torch
-from util import str2bool
-
-# canonical interpolation function, like https://p5js.org/reference/#/p5/map
-def map_number(n, start1, stop1, start2, stop2):
-  return ((n-start1)/(stop1-start1))*(stop2-start2)+start2;
-
-class FftDrawer(DrawingInterface):
-    @staticmethod
-    def add_settings(parser):
-        parser.add_argument("--fft_use",     type=str, help="use fft or dwt or pixel", default="fft", dest='fft_use')
-        parser.add_argument('--fft_decay',   default=1.5, type=float, dest='fft_decay')
-        parser.add_argument('--fft_wave',    default='coif2', help='wavelets: db[1..], coif[1..], haar, dmey', dest='fft_wave')
-        parser.add_argument('--fft_sharp',   default=0.3, type=float, dest='fft_sharp')
-        parser.add_argument('--fft_colors',  default=1.5, type=float, dest='fft_colors')
-        parser.add_argument('--fft_lrate',   default=0.3, type=float, help='Learning rate', dest='fft_lrate')
-        return parser
-
-    def __init__(self, settings):
-        super(DrawingInterface, self).__init__()
-        self.canvas_width = settings.size[0]
-        self.canvas_height = settings.size[1]
-        self.fft_use = settings.fft_use
-        self.decay = settings.fft_decay
-        self.wave = settings.fft_wave
-        self.sharp = settings.fft_sharp
-        self.colors = settings.fft_colors
-        self.lrate = settings.fft_lrate
-        self.img = None
-
-    def load_model(self, settings, device):
-        self.device = device
-
-    def get_opts(self):
-        return self.opts
-
-    def rand_init(self, toksX, toksY):
-        self.init_from_tensor(None)
-
-    def init_from_tensor(self, init_tensor):
-        shape = [1, 3, self.canvas_height, self.canvas_width]
-        resume = None
-        if init_tensor is not None:
-            save_image(init_tensor, "res_init.png")
-            resume = "res_init.png"
-        if self.fft_use == "dwt":
-            print("Using DWT instead of FFT")
-            params, image_f, sz = dwt_image(shape, self.wave, self.sharp, self.colors, resume=resume)
-        elif self.fft_use == "pixel":
-            params, image_f, sz = pixel_image(shape, sd=1, resume=resume)
-        elif self.fft_use == "fft":
-            params, image_f, sz = fft_image(shape, sd=0.01, decay_power=self.decay, resume=resume)            
-        else:
-            raise ValueError(f"fft drawer does not know how to apply fft_use={self.fft_use}")
-        self.params = params
-        self.image_f = to_valid_rgb(image_f, colors=1.5)
-
-    def get_opts(self, decay_divisor=1):
-        # Optimizers
-        optimizer = torch.optim.Adam(self.params, self.lrate / decay_divisor)
-        self.opts = [optimizer]
-        return self.opts
-
-    def reapply_from_tensor(self, new_tensor):
-        self.init_from_tensor(new_tensor)
-
-    def get_z_from_tensor(self, ref_tensor):
-        return None
-
-    def get_num_resolutions(self):
-        return None
-
-    def synth(self, cur_iteration):
-        if cur_iteration < 0:
-            return self.img
-
-        img = self.image_f(contrast=0.9)
-        self.img = img
-        return img
-
-    @torch.no_grad()
-    def to_image(self):
-        img = self.img.detach().cpu().numpy()[0]
-        img = np.transpose(img, (1, 2, 0))
-        img = np.clip(img, 0, 1)
-        img = np.uint8(img * 255)
-        pimg = PIL.Image.fromarray(img, mode="RGB")
-        return pimg
-
-    def clip_z(self):
-        pass
-
-    def get_z(self):
-        return None
-
-    def get_z_copy(self):
-        return None
-
-    def set_z(self, new_z):
-        return None
-
-    @torch.no_grad()
-    def to_svg(self):
-        pass
diff --git a/filters/FilterInterface.py b/filters/FilterInterface.py
deleted file mode 100755
index 36e37e3..0000000
--- a/filters/FilterInterface.py
+++ /dev/null
@@ -1,16 +0,0 @@
-import argparse
-from torch import nn
-
-class FilterInterface(nn.Module):
-    @staticmethod
-    def add_settings(parser):
-        #add parser.add_argument() here
-        return parser
-
-    def __init__(self, settings, device=None):
-        super().__init__()
-        self.device = device
-
-    # implement forward(img) and return img, loss
-    def forward(self, img):
-        return img, 0
diff --git a/filters/colorlookup.py b/filters/colorlookup.py
deleted file mode 100755
index b0a46f1..0000000
--- a/filters/colorlookup.py
+++ /dev/null
@@ -1,70 +0,0 @@
-from filters.FilterInterface import FilterInterface
-
-import torch
-from torch import nn, optim
-from torch.nn import functional as F
-
-from einops import rearrange
-
-default_color_table = []
-default_color_table.append([  0/255.0,   0/255.0,   0/255.0])
-default_color_table.append([255/255.0, 255/255.0, 255/255.0])
-default_color_table.append([ 63/255.0,  40/255.0,  50/255.0])
-default_color_table.append([ 38/255.0,  43/255.0,  68/255.0])
-default_color_table.append([ 90/255.0, 105/255.0, 136/255.0])
-default_color_table.append([139/255.0, 155/255.0, 180/255.0])
-default_color_table.append([ 25/255.0,  60/255.0,  62/255.0])
-default_color_table.append([ 38/255.0,  92/255.0,  66/255.0])
-default_color_table.append([ 62/255.0, 137/255.0,  72/255.0])
-default_color_table.append([ 99/255.0, 199/255.0,  77/255.0])
-default_color_table.append([254/255.0, 231/255.0,  97/255.0])
-default_color_table.append([254/255.0, 174/255.0,  52/255.0])
-default_color_table.append([254/255.0, 174/255.0,  52/255.0])
-default_color_table.append([247/255.0, 118/255.0,  34/255.0])
-default_color_table.append([184/255.0, 111/255.0,  80/255.0])
-default_color_table.append([116/255.0,  63/255.0,  57/255.0])
-
-class ColorLookup(FilterInterface):
-    """
-    Maps to fixed color table
-    """
-    @staticmethod
-    def add_settings(parser):
-        parser.add_argument("--lookup_beta", type=float, help="loss scaling", default=10.0, dest='lookup_beta')
-        return parser
-
-    def __init__(self, settings, device):
-        super().__init__(settings, device)
-
-        self.beta = settings.lookup_beta
-        color_table = settings.palette
-
-        if color_table is None:
-            print("WARNING: using built in palette")
-            # eventually no table would mean make up your own table?
-            color_table = default_color_table
-
-        print(f"color table has {len(color_table)} entries like {color_table[0:5]}")
-        self.color_table = torch.FloatTensor(color_table).to(device)
-
-    # https://discuss.pytorch.org/t/how-to-find-k-nearest-neighbor-of-a-tensor/51593
-    def forward(self, z):
-        B, C, H, W = z.size()
-
-        # project and flatten out space, so (B, C, H, W) -> (B*H*W, C)
-        # reshape z -> (batch, height, width, channel) and flatten
-        z = rearrange(z, 'b c h w -> b h w c').contiguous()
-
-        ind = torch.cdist(z, self.color_table).argmin(axis=-1)
-        z_q = torch.index_select(self.color_table, 0, ind.flatten()).view(z.shape)
-
-        loss = self.beta * torch.mean((z_q.detach()-z)**2) + \
-               torch.mean((z_q - z.detach()) ** 2)
-
-        # preserve gradients
-        z_q = z + (z_q - z).detach()
-
-        # reshape back to match original input shape
-        z_q = rearrange(z_q, 'b h w c -> b c h w').contiguous()
-        return z_q, loss
-
diff --git a/filters/wallpaper.py b/filters/wallpaper.py
deleted file mode 100755
index c62b2ef..0000000
--- a/filters/wallpaper.py
+++ /dev/null
@@ -1,95 +0,0 @@
-from filters.FilterInterface import FilterInterface
-import torch
-
-import kornia
-import kornia.augmentation as K
-import torch.nn as nn
-
-from util import str2bool
-
-class WallpaperFilter(FilterInterface):
-    """
-    Random tiled shifts in x and y with no loss
-    """
-    @staticmethod
-    def add_settings(parser):
-        parser.add_argument("--wallpaper_type", type=str, help="none, shift, horizontal", default=None, dest='wallpaper_type')
-        parser.add_argument("--wallpaper_edge_match", type=int, help="force repeating match in pixels", default=0, dest='wallpaper_edge_match')
-        return parser
-
-    def __init__(self, settings, device):
-        super().__init__(settings, device)
-        self.wallpaper_type = settings.wallpaper_type
-        self.edge_match = settings.wallpaper_edge_match
-
-    def forward(self, imgs):
-        loss = torch.tensor(0, device=self.device)
-        B, C, H, W = imgs.size()
-        rand_w = torch.randint(0, W, (1,))
-        rand_h = torch.randint(0, H, (1,))
-        if self.wallpaper_type == "shift":
-            # rand_w = int(W/2)
-            # rand_h = int(H/2)
-            half_W = int(W / 2)
-            row1 = imgs.tile((1,1,1,1))
-            row2 = imgs.tile((1,1,1,1))
-            row2 = torch.roll(row2, shifts=(half_W,), dims=(3,))
-            two_rows = torch.cat([row1, row2], dim=2)
-            # print(f"Went from {imgs.shape} to {two_rows.shape}")
-            # imgs = two_rows[:,:,rand_h:(rand_h+H),rand_w:(rand_w+W)]
-            # imgs = two_rows[:,:,:,rand_w:(rand_w+W)]
-            imgs = torch.roll(two_rows, shifts=(rand_h, rand_w), dims=(2, 3))
-        elif self.wallpaper_type == "horizontal":
-            if self.edge_match != 0:
-                em = self.edge_match
-                em2 = int(em / 2)
-                mseloss = nn.MSELoss()
-                # first trim edge and compute loss
-                col1 = imgs[:,:,:,:em]
-                col2 = imgs[:,:,:, -em:]
-                loss = mseloss(col1, col2) / em
-                new_imgs = torch.clone(imgs)
-                new_imgs = new_imgs[:,:,:,em2:-em2]
-                imgs = new_imgs
-
-            imgs = torch.roll(imgs, shifts=(rand_w,), dims=(3,))
-        elif self.wallpaper_type == "vertical":
-            if self.edge_match != 0:
-                em = self.edge_match
-                em2 = int(em / 2)
-                # first trim edge and compute loss
-                col1 = imgs[:,:,:em,:]
-                col2 = imgs[:,:,-em:,:]
-                mseloss = nn.MSELoss()
-                loss = mseloss(col1, col2) / em
-                # print(col1.shape, col2.shape, imgs.shape, em, em2)
-                imgs = imgs[:,:,em2:-em2,:]
-                # print(col1.shape, col2.shape, imgs.shape, em, em2)
-            imgs = torch.roll(imgs, shifts=(rand_h,), dims=(2,))
-        else:
-            if self.edge_match != 0:
-                em = self.edge_match
-                em2 = int(em / 2)
-                mseloss = nn.MSELoss()
-
-                # first trim edge and compute loss HORIZ
-                col1 = imgs[:,:,:,:em]
-                col2 = imgs[:,:,:, -em:]
-                loss1 = mseloss(col1, col2) / em
-                new_imgs = torch.clone(imgs)
-                new_imgs = new_imgs[:,:,:,em2:-em2]
-                imgs = new_imgs
-
-                # first trim edge and compute loss VERT
-                col1 = imgs[:,:,:em,:]
-                col2 = imgs[:,:,-em:,:]
-                mseloss = nn.MSELoss()
-                loss2 = mseloss(col1, col2) / em
-                new_imgs2 = torch.clone(imgs)
-                new_imgs2 = new_imgs2[:,:,em2:-em2,:]
-                imgs = new_imgs2
-
-                loss = loss1 + loss2
-            imgs = torch.roll(imgs, shifts=(rand_h, rand_w), dims=(2, 3))
-        return imgs, loss
-
diff --git a/linedrawer.py b/linedrawer.py
deleted file mode 100755
index 7958835..0000000
--- a/linedrawer.py
+++ /dev/null
@@ -1,197 +0,0 @@
-# this is derived from ClipDraw code
-# CLIPDraw: Exploring Text-to-Drawing Synthesis through Language-Image Encoders
-# Kevin Frans, L.B. Soros, Olaf Witkowski
-# https://arxiv.org/abs/2106.14843
-
-from DrawingInterface import DrawingInterface
-
-import pydiffvg
-import torch
-import skimage
-import skimage.io
-import random
-import ttools.modules
-import argparse
-import math
-import torchvision
-import torchvision.transforms as transforms
-import numpy as np
-import PIL.Image
-
-from util import str2bool
-
-def bound(value, low, high):
-    return max(low, min(high, value))
-
-class LineDrawer(DrawingInterface):
-    @staticmethod
-    def add_settings(parser):
-        parser.add_argument("--strokes", type=int, help="number strokes", default=24, dest='strokes')
-        parser.add_argument("--stroke_length", type=int, help="stroke length", default=8, dest='stroke_length')
-        parser.add_argument("--min_stroke_width", type=float, help="min width (percent of height)", default=0.5, dest='min_stroke_width')
-        parser.add_argument("--max_stroke_width", type=float, help="max width (percent of height)", default=2, dest='max_stroke_width')
-        parser.add_argument("--allow_paper_color", type=str2bool, help="allow paper color to change", default=False, dest='allow_paper_color')
-        return parser
-
-    def __init__(self, settings):
-        super(DrawingInterface, self).__init__()
-
-        self.canvas_width = settings.size[0]
-        self.canvas_height = settings.size[1]
-        self.num_paths = settings.strokes
-        self.stroke_length = settings.stroke_length
-
-    def load_model(self, settings, device):
-        # Use GPU if available
-        pydiffvg.set_use_gpu(torch.cuda.is_available())
-        device = torch.device('cuda')
-        pydiffvg.set_device(device)
-
-        canvas_width, canvas_height = self.canvas_width, self.canvas_height
-        num_paths = self.num_paths
-        max_width = settings.max_stroke_width * canvas_height / 100
-        min_width = settings.min_stroke_width * canvas_height / 100
-
-        shapes = []
-        shape_groups = []
-        color_vars = []
-
-        # background shape
-        p0 = [0, 0]
-        p1 = [canvas_width, canvas_height]
-        path = pydiffvg.Rect(p_min=torch.tensor(p0), p_max=torch.tensor(p1))
-        shapes.append(path)
-        # https://encycolorpedia.com/f2eecb
-        cell_color = torch.tensor([242/255.0, 238/255.0, 203/255.0, 1.0])
-        path_group = pydiffvg.ShapeGroup(shape_ids = torch.tensor([len(shapes)-1]), stroke_color = None, fill_color = cell_color)
-        shape_groups.append(path_group)
-
-        if settings.allow_paper_color:
-            path_group.fill_color.requires_grad = True
-            color_vars.append(path_group.fill_color)
-
-        # Initialize Random Curves
-        for i in range(num_paths):
-            num_segments = self.stroke_length
-            num_control_points = torch.zeros(num_segments, dtype = torch.int32) + 2
-            points = []
-            radius = 0.5
-            radius_x = 0.5 #radius * canvas_height / canvas_width
-            p0 = (0.5 + radius_x * (random.random() - 0.5), 0.5 + radius * (random.random() - 0.5))
-            points.append(p0)
-            for j in range(num_segments):
-                radius = 1.0 / (num_segments + 2)
-                radius_x = radius * canvas_height / canvas_width
-                p1 = (p0[0] + radius_x * (random.random() - 0.5), p0[1] + radius * (random.random() - 0.5))
-                p2 = (p1[0] + radius_x * (random.random() - 0.5), p1[1] + radius * (random.random() - 0.5))
-                p3 = (p2[0] + radius_x * (random.random() - 0.5), p2[1] + radius * (random.random() - 0.5))
-                points.append(p1)
-                points.append(p2)
-                points.append(p3)
-                p0 = (bound(p3[0],0,1), bound(p3[1],0,1))
-            points = torch.tensor(points)
-            points[:, 0] *= canvas_width
-            points[:, 1] *= canvas_height
-            path = pydiffvg.Path(num_control_points = num_control_points, points = points, stroke_width = torch.tensor(max_width/10), is_closed = False)
-            shapes.append(path)
-            s_col = [0, 0, 0, 1]
-            path_group = pydiffvg.ShapeGroup(shape_ids = torch.tensor([len(shapes)-1]), fill_color = None, stroke_color = torch.tensor(s_col))
-            shape_groups.append(path_group)
-
-        # Just some diffvg setup
-        scene_args = pydiffvg.RenderFunction.serialize_scene(\
-            canvas_width, canvas_height, shapes, shape_groups)
-        render = pydiffvg.RenderFunction.apply
-        img = render(canvas_width, canvas_height, 2, 2, 0, None, *scene_args)
-
-        points_vars = []
-        stroke_width_vars = []
-        for path in shapes[1:]:
-            path.points.requires_grad = True
-            points_vars.append(path.points)
-            path.stroke_width.requires_grad = True
-            stroke_width_vars.append(path.stroke_width)
-        # for group in shape_groups:
-        #     group.stroke_color.requires_grad = True
-        #     color_vars.append(group.stroke_color)
-
-        self.points_vars = points_vars
-        self.stroke_width_vars = stroke_width_vars
-        self.color_vars = color_vars
-        self.img = img
-        self.shapes = shapes 
-        self.shape_groups  = shape_groups
-        self.max_width = max_width
-        self.canvas_width = canvas_width
-        self.canvas_height = canvas_height
-
-    def get_opts(self, decay_divisor):
-        # Optimizers
-        points_optim = torch.optim.Adam(self.points_vars, lr=1.0/decay_divisor)
-        width_optim = torch.optim.Adam(self.stroke_width_vars, lr=0.1/decay_divisor)
-        opts = [points_optim, width_optim]
-        if len(self.color_vars) > 0:
-            color_optim = torch.optim.Adam(self.color_vars, lr=0.01/decay_divisor)
-            opts.append(color_optim)
-        return opts
-
-    def rand_init(self, toksX, toksY):
-        # TODO
-        pass
-
-    def init_from_tensor(self, init_tensor):
-        # TODO
-        pass
-
-    def reapply_from_tensor(self, new_tensor):
-        # TODO
-        pass
-
-    def get_z_from_tensor(self, ref_tensor):
-        return None
-
-    def get_num_resolutions(self):
-        return None
-
-    def synth(self, cur_iteration):
-        render = pydiffvg.RenderFunction.apply
-        scene_args = pydiffvg.RenderFunction.serialize_scene(\
-            self.canvas_width, self.canvas_height, self.shapes, self.shape_groups)
-        img = render(self.canvas_width, self.canvas_height, 2, 2, cur_iteration, None, *scene_args)
-        img = img[:, :, 3:4] * img[:, :, :3] + torch.ones(img.shape[0], img.shape[1], 3, device = pydiffvg.get_device()) * (1 - img[:, :, 3:4])
-        img = img[:, :, :3]
-        img = img.unsqueeze(0)
-        img = img.permute(0, 3, 1, 2) # NHWC -> NCHW
-        self.img = img
-        return img
-
-    @torch.no_grad()
-    def to_image(self):
-        img = self.img.detach().cpu().numpy()[0]
-        img = np.transpose(img, (1, 2, 0))
-        img = np.clip(img, 0, 1)
-        img = np.uint8(img * 254)
-        # img = np.repeat(img, 4, axis=0)
-        # img = np.repeat(img, 4, axis=1)
-        pimg = PIL.Image.fromarray(img, mode="RGB")
-        return pimg
-
-    def clip_z(self):
-        with torch.no_grad():
-            for path in self.shapes[1:]:
-                path.stroke_width.data.clamp_(1.0, self.max_width)
-            for group in self.shape_groups[1:]:
-                group.stroke_color.data.clamp_(0.0, 1.0)
-
-    def get_z(self):
-        return None
-
-    def get_z_copy(self):
-        return None
-
-    def set_z(self, new_z):
-        return None
-
-    @torch.no_grad()
-    def to_svg(self):
-        pydiffvg.save_svg("./lineout.svg", self.canvas_width, self.canvas_height, self.shapes, self.shape_groups)
diff --git a/models/.gitignore b/models/.gitignore
deleted file mode 100755
index 7c28bba..0000000
--- a/models/.gitignore
+++ /dev/null
@@ -1,3 +0,0 @@
-*.yaml
-*.ckpt
-*.pt
diff --git a/pixeldrawer.py b/pixeldrawer.py
deleted file mode 100755
index 1bf8100..0000000
--- a/pixeldrawer.py
+++ /dev/null
@@ -1,410 +0,0 @@
-from DrawingInterface import DrawingInterface
-
-import pydiffvg
-import torch
-from torch.nn import functional as F
-import skimage
-import skimage.io
-import random
-import ttools.modules
-import argparse
-import math
-import torchvision
-import torchvision.transforms as transforms
-import numpy as np
-import PIL.Image
-
-from util import str2bool
-
-from perlin_numpy import generate_fractal_noise_3d
-
-def rect_from_corners(p0, p1):
-    x1, y1 = p0
-    x2, y2 = p1
-    pts = [[x1, y1], [x2, y1], [x2, y2], [x1, y2]]
-    return pts
-
-# canonical interpolation function, like https://p5js.org/reference/#/p5/map
-def map_number(n, start1, stop1, start2, stop2):
-  return ((n-start1)/(stop1-start1))*(stop2-start2)+start2;
-
-def diamond_from_corners(p0, p1):
-    x1, y1 = p0
-    x2, y2 = p1
-    n = 1
-    hyA = map_number(-2, -n, n, y1, y2)
-    hyB = map_number( 2, -n, n, y1, y2)
-    hyH = map_number(     0, -n, n, y1, y2)
-    hxH = map_number(     0, -n, n, x1, x2)
-    pts = [[hxH, hyA], [x1, hyH], [hxH, hyB], [x2, hyH]]
-    return pts
-
-def tri_from_corners(p0, p1, is_up):
-    x1, y1 = p0
-    x2, y2 = p1
-    n = 1
-    hxA = map_number( 2, -n, n, x1, x2)
-    hxB = map_number(-2, -n, n, x1, x2)
-    hxH = map_number(     0, -n, n, x1, x2)
-    if is_up:
-        pts = [[hxH, y1], [hxB, y2], [hxA, y2]]
-    else:
-        pts = [[hxH, y2], [hxA, y1], [hxB, y1]]
-    return pts
-
-def hex_from_corners(p0, p1):
-    x1, y1 = p0
-    x2, y2 = p1
-    n  = 3
-    hyA = map_number(4, -n, n, y1, y2)
-    hyB = map_number(2, -n, n, y1, y2)
-    hyC = map_number(-2, -n, n, y1, y2)
-    hyD = map_number(-4, -n, n, y1, y2)
-    hxH = map_number(0, -n, n, x1, x2)
-    pts = [[hxH, hyA], [x1, hyB], [x1, hyC], [hxH, hyD], [x2, hyC], [x2, hyB]]
-    return pts
-
-def knit_from_corners(p0, p1):
-    x1, y1 = p0
-    x2, y2 = p1
-    xm = (x1 + x2) / 2.0
-    lean_up = 0.45
-    slump_down = 0.30
-    fall_back = 0.2
-    y_up1 = map_number(lean_up, 0, 1, y2, y1)
-    y_up2 = map_number(1 + lean_up, 0, 1, y2, y1)
-    y_down1 = map_number(slump_down, 0, 1, y1, y2)
-    y_down2 = map_number(1 + slump_down, 0, 1, y1, y2)
-    x_fall_back1 = map_number(fall_back, 0, 1, x2, xm)
-    x_fall_back2 = map_number(fall_back, 0, 1, x1, xm)
-
-    pts = []
-    # center bottom
-    pts.append([xm, y_down2])
-    # vertical line on right side
-    pts.extend([[x2, y_up1], [x2, y_up2]])
-    # horizontal line back
-    pts.append([x_fall_back1, y_up2])
-    # center top
-    pts.append([xm, y_down1])
-    # back up to top
-    pts.append([x_fall_back2, y_up2])
-    # vertical line on left side
-    pts.extend([[x1, y_up2], [x1, y_up1]])
-    return pts
-
-shift_pixel_types = ["hex", "rectshift", "diamond"]
-   
-def gkern(size, gamma):
-    """
-    creates gaussian kernel with side length `l` and a sigma of `sig`
-    https://stackoverflow.com/a/43346070/6028830
-    """
-    sig = size/gamma
-    ax = np.linspace(-(size - 1) / 2., (size - 1) / 2., size)
-    gauss = np.exp(-0.5 * np.square(ax) / np.square(sig))
-    kernel = -np.outer(gauss, gauss)
-    kernel = (kernel-kernel.min()) / (kernel.max()-kernel.min())
-    return kernel * (size**2) / np.sum(kernel) # normalize such that the sum of pixel was the same as the original
-
-class PixelDrawer(DrawingInterface):
-    @staticmethod
-    def add_settings(parser):
-        parser.add_argument("--pixel_size", nargs=2, type=int, help="Pixel size (width height)", default=None, dest='pixel_size')
-        parser.add_argument("--pixel_scale", type=float, help="Pixel scale", default=None, dest='pixel_scale')
-        parser.add_argument("--pixel_type", type=str, help="rect, rectshift, hex, tri, diamond, knit", default="rect", dest='pixel_type')
-        parser.add_argument("--pixel_edge_check", type=str2bool, help="ensure grid is symmetric", default=True, dest='pixel_edge_check')
-        parser.add_argument("--pixel_iso_check", type=str2bool, help="ensure tri and hex shapes are w/h scaled", default=True, dest='pixel_iso_check')
-        return parser
-
-    def __init__(self, settings):
-        super(DrawingInterface, self).__init__()
-
-        self.canvas_width = settings.size[0]
-        self.canvas_height = settings.size[1]
-
-        # current logic: assume 16x9, or 4x5, but check for 1x1 (all others must be provided explicitly)
-        # TODO: could compute this based on output size instead?
-        if settings.pixel_size is not None:
-            self.num_cols, self.num_rows = settings.pixel_size
-        elif self.canvas_width == self.canvas_height:
-            self.num_cols, self.num_rows = [40, 40]
-        elif self.canvas_width < self.canvas_height:
-            self.num_cols, self.num_rows = [40, 50]
-        else:
-            self.num_cols, self.num_rows = [80, 45]
-
-        self.pixel_type = settings.pixel_type
-
-        if settings.pixel_iso_check and settings.pixel_size is None:
-            if self.pixel_type == "tri":
-                # auto-adjust triangles to be wider if not specified
-                self.num_cols = int(1.414 * self.num_cols)
-            elif self.pixel_type == "hex":
-                # auto-adjust hexes to be narrower if not specified
-                self.num_rows = int(1.414 * self.num_rows)
-            elif self.pixel_type == "diamond":
-                self.num_rows = int(2 * self.num_rows)
- 
-        # we can also "scale" pixels -- scaling "up" meaning fewer rows/cols, etc.
-        if settings.pixel_scale is not None and settings.pixel_scale > 0:
-            self.num_cols = int(self.num_cols / settings.pixel_scale)
-            self.num_rows = int(self.num_rows / settings.pixel_scale)
-
-
-        shrink = False
-        if self.num_cols>self.canvas_width:
-            shrink = True
-            self.num_cols = self.canvas_width
-        if self.num_rows>self.canvas_height:
-            shrink = True
-            self.num_rows = self.canvas_height
-        if shrink:
-            print('pixel grid size should not be larger than output pixel size: reducing pixel grid')
-
-        print(f"Running pixeldrawer with {self.num_cols}x{self.num_rows} grid")
-
-        if settings.pixel_edge_check:
-            if self.pixel_type in shift_pixel_types:
-                if self.num_cols % 2 == 0:
-                    self.num_cols = self.num_cols + 1
-                if self.num_rows % 2 == 0:
-                    self.num_rows = self.num_rows + 1
-            elif self.pixel_type == "tri":
-                if self.num_cols % 2 == 0:
-                    self.num_cols = self.num_cols + 1
-                if self.num_rows % 2 == 1:
-                    self.num_rows = self.num_rows + 1
-
-        self.transparency = settings.transparency
-        if self.transparency:
-            if settings.alpha_use_g:
-                self.gkern = torch.tensor(gkern(self.canvas_width, settings.alpha_gamma))
-            else:
-                self.gkern = None
-
-    def load_model(self, settings, device):
-        # gamma = 1.0
-
-        # Use GPU if available
-        pydiffvg.set_use_gpu(torch.cuda.is_available())
-        pydiffvg.set_device(device)
-        self.device = device
-
-    def get_opts(self):
-        return self.opts
-
-    def rand_init(self, toksX, toksY):
-        self.init_from_tensor(None)
-
-    def encode_image(self, init_tensor):
-        # print("----> SHAPE", self.num_rows, self.num_cols)
-        canvas_width, canvas_height = self.canvas_width, self.canvas_height
-        num_rows, num_cols = self.num_rows, self.num_cols
-        cell_width = canvas_width / num_cols
-        cell_height = canvas_height / num_rows
-
-        tensor_cell_height = 0
-        tensor_cell_width = 0
-        max_tensor_num_subsamples = 4
-        tensor_subsamples_x = []
-        tensor_subsamples_y = []
-        if init_tensor is not None:
-            tensor_shape = init_tensor.shape
-            tensor_cell_width = tensor_shape[3] / num_cols
-            tensor_cell_height = tensor_shape[2] / num_rows
-            if int(tensor_cell_width) < max_tensor_num_subsamples:
-                tensor_subsamples_x = [i for i in range(int(tensor_cell_width))]
-            else:
-                step_size_x = tensor_cell_width / max_tensor_num_subsamples
-                tensor_subsamples_x = [int(i*step_size_x) for i in range(max_tensor_num_subsamples)]
-            if int(tensor_cell_height) < max_tensor_num_subsamples:
-                tensor_subsamples_y = [i for i in range(int(tensor_cell_height))]
-            else:
-                step_size_y = tensor_cell_height / max_tensor_num_subsamples
-                tensor_subsamples_y = [int(i*step_size_y) for i in range(max_tensor_num_subsamples)]
-
-            # print(tensor_shape, tensor_cell_width, tensor_cell_height,tensor_subsamples_x,tensor_subsamples_y)
-
-        # Initialize Random Pixels
-        shapes = []
-        shape_groups = []
-        colors = []
-        scaled_init_tensor = (init_tensor[0] + 1.0) / 2.0
-        for r in range(num_rows):
-            tensor_cur_y = int(r * tensor_cell_height)
-            cur_y = r * cell_height
-            num_cols_this_row = num_cols
-            col_offset = 0
-            if self.pixel_type in shift_pixel_types and r % 2 == 0:
-                num_cols_this_row = num_cols - 1
-                col_offset = 0.5
-            for c in range(num_cols_this_row):
-                tensor_cur_x =  (col_offset + c) * tensor_cell_width
-                cur_x = (col_offset + c) * cell_width
-                if init_tensor is None:
-                    cell_color = torch.tensor([random.random(), random.random(), random.random(), 1.0])
-                else:
-                    try:
-                        rgb_sum = [0, 0, 0]
-                        rgb_count = 0
-                        for t_x in tensor_subsamples_x:
-                            cur_subsample_x = tensor_cur_x + t_x
-                            for t_y in tensor_subsamples_y:
-                                cur_subsample_y = tensor_cur_y + t_y
-                                if(cur_subsample_x < tensor_shape[3] and cur_subsample_y < tensor_shape[2]):
-                                    rgb_count += 1
-                                    rgb_sum[0] += scaled_init_tensor[0][int(cur_subsample_y)][int(cur_subsample_x)]
-                                    rgb_sum[1] += scaled_init_tensor[1][int(cur_subsample_y)][int(cur_subsample_x)]
-                                    rgb_sum[2] += scaled_init_tensor[2][int(cur_subsample_y)][int(cur_subsample_x)]
-                                else:
-                                    print(f"Ignoring out of bounds entry: {cur_subsample_x},{cur_subsample_y}")
-                        if rgb_count == 0:
-                            print("init cell count is 0, this shouldn't happen. but it did?")
-                            rgb_count = 1
-                        cell_color = torch.tensor([rgb_sum[0]/rgb_count, rgb_sum[1]/rgb_count, rgb_sum[2]/rgb_count, 1.0])
-                    except BaseException as error:
-                        print("WTF", error)
-                        mono_color = random.random()
-                        cell_color = torch.tensor([mono_color, mono_color, mono_color, 1.0])
-                        raise error
-                colors.append(cell_color)
-                p0 = [cur_x, cur_y]
-                p1 = [cur_x+cell_width, cur_y+cell_height]
-
-                if self.pixel_type == "hex":
-                    pts = hex_from_corners(p0, p1)
-                elif self.pixel_type == "tri":
-                    pts = tri_from_corners(p0, p1, (r + c) % 2 == 0)
-                elif self.pixel_type == "diamond":
-                    pts = diamond_from_corners(p0, p1)
-                elif self.pixel_type == "knit":
-                    pts = knit_from_corners(p0, p1)
-                else:
-                    pts = rect_from_corners(p0, p1)
-                pts = torch.tensor(pts, dtype=torch.float32).view(-1, 2)
-                path = pydiffvg.Polygon(pts, True)
-
-                # path = pydiffvg.Rect(p_min=torch.tensor(p0), p_max=torch.tensor(p1))
-                shapes.append(path)
-                path_group = pydiffvg.ShapeGroup(shape_ids = torch.tensor([len(shapes) - 1]), stroke_color = None, fill_color = cell_color)
-                shape_groups.append(path_group)
-
-        # Just some diffvg setup
-        scene_args = pydiffvg.RenderFunction.serialize_scene(\
-            canvas_width, canvas_height, shapes, shape_groups)
-        render = pydiffvg.RenderFunction.apply
-        img = render(canvas_width, canvas_height, 2, 2, 0, None, *scene_args)
-
-        color_vars = []
-        for group in shape_groups:
-            group.fill_color.requires_grad = True
-            color_vars.append(group.fill_color)
-
-        return color_vars, img, shapes, shape_groups
-
-    def init_from_tensor(self, init_tensor):
-        self.color_vars, self.img, self.shapes, self.shape_groups = (
-            self.encode_image(init_tensor)
-        )
-
-    def get_opts(self, decay_divisor=1):
-        # Optimizers
-        # points_optim = torch.optim.Adam(points_vars, lr=1.0)
-        # width_optim = torch.optim.Adam(stroke_width_vars, lr=0.1)
-        color_optim = torch.optim.Adam(self.color_vars, lr=0.03/decay_divisor)
-        self.opts = [color_optim]
-        return self.opts
-
-    def reapply_from_tensor(self, new_tensor):
-        color_vars, *_ = self.encode_image(new_tensor)
-        for old_color_var, new_color_var in zip(self.color_vars, color_vars):
-            old_color_var.data = new_color_var.data
-
-    def get_z_from_tensor(self, ref_tensor):
-        return None
-
-    def get_num_resolutions(self):
-        return None
-
-    def synth(self, cur_iteration: int, return_transparency: bool=False):
-        """Uses pydiffvg to render the image.
-
-        Returns synthesized RGB image when return_transparency is False.
-        Returns synthesized (RGB,A) tuple when return_transparency is True.
-        """
-        if cur_iteration < 0:
-            return self.img
-
-        render = pydiffvg.RenderFunction.apply
-        scene_args = pydiffvg.RenderFunction.serialize_scene(\
-            self.canvas_width, self.canvas_height, self.shapes, self.shape_groups)
-        img = render(self.canvas_width, self.canvas_height, 2, 2, cur_iteration, None, *scene_args)
-        img_h, img_w = img.shape[0], img.shape[1]
-        alpha = img[:, :, 3:4]
-
-        if return_transparency:
-            res = [1,2,4,8,16][random.randint(0,4)] # resolution of the perlin noise
-            noise = generate_fractal_noise_3d((img_h, img_w, 3), (res, res, 1))
-            img = alpha * img[:, :, :3] + (1 - alpha) * torch.tensor(noise, dtype=torch.float32, device=self.device)
-        else:
-            img = alpha * img[:, :, :3]
-        
-        img = img[:, :, :3]
-        img = img.unsqueeze(0)
-        img = img.permute(0, 3, 1, 2) # NHWC -> NCHW
-        # if cur_iteration == 0:
-        #     print("SHAPE", img.shape)
-
-        self.img = img
-
-        if return_transparency:
-            if self.gkern is not None:
-                return img, alpha*self.gkern.to(self.device) # weight by the gaussian mask
-            else:
-                return img, alpha
-        else:
-            return img
-
-    @torch.no_grad()
-    def to_image(self):
-        img = self.img.detach().cpu().numpy()[0]
-        img = np.transpose(img, (1, 2, 0))
-        img = np.clip(img, 0, 1)
-        img = np.uint8(img * 255)
-        pimg = PIL.Image.fromarray(img, mode="RGB")
-        return pimg
-
-    def clip_z(self):
-        with torch.no_grad():
-            for group in self.shape_groups:
-                group.fill_color.data[:3].clamp_(0.0, 1.0)
-                group.fill_color.data[3].clamp_(0.0 if self.transparency else 1.0, 1.0)
-
-    def get_z(self):
-        groups = []
-        for g in self.shape_groups:
-            groups.append(g.fill_color.data)
-        groups =  torch.stack(groups)
-        groups.requires_grad_()
-        return groups
-
-    def get_z_copy(self):
-        shape_groups_copy = []
-        for group in self.shape_groups:
-            group_copy = torch.clone(group.fill_color.data)
-            shape_groups_copy.append(group_copy)
-        shape_groups_copy = torch.stack(shape_groups_copy)
-        return shape_groups_copy
-
-    def set_z(self, new_z):
-        l = len(new_z)
-        for l in range(len(new_z)):
-            active_group = self.shape_groups[l]
-            new_group = new_z[l]
-            active_group.fill_color.data.copy_(new_group)
-        return None
-
-    @torch.no_grad()
-    def to_svg(self):
-        pydiffvg.save_svg("./pixels.svg", self.canvas_width, self.canvas_height, self.shapes, self.shape_groups)
diff --git a/pixray.py b/pixray.py
deleted file mode 100755
index 4bd7b6f..0000000
--- a/pixray.py
+++ /dev/null
@@ -1,2022 +0,0 @@
-import argparse
-import math
-
-from urllib.request import urlopen
-import sys
-import os
-import subprocess
-import json
-import yaml
-import glob
-from braceexpand import braceexpand
-from types import SimpleNamespace
-
-import os.path
-
-from omegaconf import OmegaConf
-import hashlib
-
-import time
-import torch
-from torch import nn, optim
-from torch.nn import functional as F
-from torchvision import transforms
-from torchvision.transforms import functional as TF
-from torchvision.utils import save_image
-torch.backends.cudnn.benchmark = False		# NR: True is a bit faster, but can lead to OOM. False is more deterministic.
-#torch.use_deterministic_algorithms(True)		# NR: grid_sampler_2d_backward_cuda does not have a deterministic implementation
-
-from torch_optimizer import DiffGrad, AdamP
-from perlin_numpy import generate_fractal_noise_2d
-from util import str2bool
-
-from slip import get_clip_perceptor
-
-from torchvision.transforms import Compose, Resize, CenterCrop, ToTensor, Normalize
-
-# installed by doing `pip install git+https://github.com/openai/CLIP`
-from clip import clip
-
-import kornia
-import kornia.augmentation as K
-import numpy as np
-import imageio
-import re
-import random
-
-from einops import rearrange
-
-from filters.colorlookup import ColorLookup
-from filters.wallpaper import WallpaperFilter
-
-filters_class_table = {
-    "lookup": ColorLookup,
-    "wallpaper": WallpaperFilter,
-}
-
-from PIL import ImageFile, Image, PngImagePlugin
-ImageFile.LOAD_TRUNCATED_IMAGES = True
-
-# or 'border'
-global_padding_mode = 'reflection'
-global_aspect_width = 1
-global_spot_file = None
-
-from util import map_number, palette_from_string, real_glob
-
-from vqgan import VqganDrawer
-from vdiff import VdiffDrawer
-
-class_table = {
-    "vqgan": VqganDrawer,
-    "vdiff": VdiffDrawer
-}
-
-try:
-    from fftdrawer import FftDrawer
-    # update class_table if these import OK
-    class_table.update({"fft": FftDrawer})
-except ImportError as e:
-    print("--> Not running with fft support", e)
-    pass
-
-try:
-    from clipdrawer import ClipDrawer
-    from pixeldrawer import PixelDrawer
-    from linedrawer import LineDrawer
-    # update class_table if these import OK
-    class_table.update({
-        "line_sketch": LineDrawer,
-        "pixel": PixelDrawer,
-        "clipdraw": ClipDrawer
-    })
-except ImportError as e:
-    print("--> Not running with pydiffvg drawer support ", e)
-    pass
-
-try:
-    import matplotlib.colors
-except ImportError:
-    # only needed for palette stuff
-    pass
-
-from Losses.LossInterface import LossInterface
-from Losses.PaletteLoss import PaletteLoss
-from Losses.SaturationLoss import SaturationLoss
-from Losses.SymmetryLoss import SymmetryLoss
-from Losses.SmoothnessLoss import SmoothnessLoss
-from Losses.EdgeLoss import EdgeLoss
-from Losses.StyleLoss import StyleLoss
-from Losses.ResmemLoss import ResmemLoss
-
-loss_class_table = {
-    "palette": PaletteLoss,
-    "saturation": SaturationLoss,
-    "symmetry": SymmetryLoss,
-    "smoothness": SmoothnessLoss,
-    "edge": EdgeLoss,
-    "style": StyleLoss,
-    "resmem": ResmemLoss,
-}
-
-
-# this is enabled when not in the master branch
-# print("warning: running unreleased future version")
-
-# https://stackoverflow.com/a/39662359
-def isnotebook():
-    try:
-        shell = get_ipython().__class__.__name__
-        if shell == 'ZMQInteractiveShell':
-            return True   # Jupyter notebook or qtconsole
-        elif shell == 'Shell':
-            return True   # Seems to be what co-lab does
-        elif shell == 'TerminalInteractiveShell':
-            return False  # Terminal running IPython
-        else:
-            return False  # Other type (?)
-    except NameError:
-        return False      # Probably standard Python interpreter
-
-IS_NOTEBOOK = isnotebook()
-
-if IS_NOTEBOOK:
-    from IPython import display
-    from tqdm.notebook import tqdm
-    from IPython.display import clear_output
-else:
-    from tqdm import tqdm
-
-# Functions and classes
-def sinc(x):
-    return torch.where(x != 0, torch.sin(math.pi * x) / (math.pi * x), x.new_ones([]))
-
-
-def lanczos(x, a):
-    cond = torch.logical_and(-a < x, x < a)
-    out = torch.where(cond, sinc(x) * sinc(x/a), x.new_zeros([]))
-    return out / out.sum()
-
-
-def ramp(ratio, width):
-    n = math.ceil(width / ratio + 1)
-    out = torch.empty([n])
-    cur = 0
-    for i in range(out.shape[0]):
-        out[i] = cur
-        cur += ratio
-    return torch.cat([-out[1:].flip([0]), out])[1:-1]
-
-
-# NR: Testing with different intital images
-def old_random_noise_image(w,h):
-    random_image = Image.fromarray(np.random.randint(0,255,(w,h,3),dtype=np.dtype('uint8')))
-    return random_image
-
-def NormalizeData(data):
-    return (data - np.min(data)) / (np.max(data) - np.min(data))
-
-# https://stats.stackexchange.com/a/289477
-def contrast_noise(n):
-    n = 0.9998 * n + 0.0001
-    n1 = (n / (1-n))
-    n2 = np.power(n1, -2)
-    n3 = 1 / (1 + n2)
-    return n3
-
-def random_noise_image(w,h):
-    # scale up roughly as power of 2
-    if (w>1024 or h>1024):
-        side, octp = 2048, 6
-    elif (w>512 or h>512):
-        side, octp = 1024, 5
-    elif (w>256 or h>256):
-        side, octp = 512, 4
-    else:
-        side, octp = 256, 3
-
-    nr = NormalizeData(generate_fractal_noise_2d((side, side), (32, 32), octp))
-    ng = NormalizeData(generate_fractal_noise_2d((side, side), (32, 32), octp))
-    nb = NormalizeData(generate_fractal_noise_2d((side, side), (32, 32), octp))
-    stack = np.dstack((contrast_noise(nr),contrast_noise(ng),contrast_noise(nb)))
-    substack = stack[:h, :w, :]
-    im = Image.fromarray((255.999 * substack).astype('uint8'))
-    return im
-
-# testing
-def gradient_2d(start, stop, width, height, is_horizontal):
-    if is_horizontal:
-        return np.tile(np.linspace(start, stop, width), (height, 1))
-    else:
-        return np.tile(np.linspace(start, stop, height), (width, 1)).T
-
-
-def gradient_3d(width, height, start_list, stop_list, is_horizontal_list):
-    result = np.zeros((height, width, len(start_list)), dtype=float)
-
-    for i, (start, stop, is_horizontal) in enumerate(zip(start_list, stop_list, is_horizontal_list)):
-        result[:, :, i] = gradient_2d(start, stop, width, height, is_horizontal)
-
-    return result
-
-    
-def random_gradient_image(w,h):
-    array = gradient_3d(w, h, (0, 0, np.random.randint(0,255)), (np.random.randint(1,255), np.random.randint(2,255), np.random.randint(3,128)), (True, False, False))
-    random_image = Image.fromarray(np.uint8(array))
-    return random_image
-
-
-class ReplaceGrad(torch.autograd.Function):
-    @staticmethod
-    def forward(ctx, x_forward, x_backward):
-        ctx.shape = x_backward.shape
-        return x_forward
-
-    @staticmethod
-    def backward(ctx, grad_in):
-        return None, grad_in.sum_to_size(ctx.shape)
-
-replace_grad = ReplaceGrad.apply
-
-
-def spherical_dist_loss(x, y):
-    x = F.normalize(x, dim=-1)
-    y = F.normalize(y, dim=-1)
-    return (x - y).norm(dim=-1).div(2).arcsin().pow(2).mul(2)
-
-
-class Prompt(nn.Module):
-    def __init__(self, embed, weight=1., stop=float('-inf')):
-        super().__init__()
-        self.register_buffer('embed', embed)
-        self.register_buffer('weight', torch.as_tensor(weight))
-        self.register_buffer('stop', torch.as_tensor(stop))
-
-    def forward(self, input):
-        input_normed = F.normalize(input.unsqueeze(1), dim=2)
-        embed_normed = F.normalize(self.embed.unsqueeze(0), dim=2)
-        dists = input_normed.sub(embed_normed).norm(dim=2).div(2).arcsin().pow(2).mul(2)
-        dists = dists * self.weight.sign()
-        return self.weight.abs() * replace_grad(dists, torch.maximum(dists, self.stop)).mean()
-
-# https://stackoverflow.com/q/354038
-def is_number(s):
-    try:
-        float(s)
-        return True
-    except ValueError:
-        return False
-
-def parse_prompt(prompt):
-    """Prompts can either just be text, be a text:weight pair, or a text:weight:stop triple"""
-
-    # defaults
-    textPrompt = prompt
-    weight = 1
-    stop = float('-inf')
-
-    # try to parse numbers from the right but stop as soon as that fails
-    extra_numbers = []
-    keep_going = True
-
-    while len(extra_numbers) < 2 and keep_going:
-        vals = textPrompt.rsplit(':', 1)
-        if len(vals) > 1 and is_number(vals[1]):
-            extra_numbers.append(float(vals[1]))
-            textPrompt = vals[0]
-        else:
-            keep_going = False
-
-    # print(f"parsed nums is {textPrompt}, {extra_numbers}")
-
-    # if there is only 1 number, that becomes the weight
-    if len(extra_numbers) == 1:
-        weight = extra_numbers[0]
-    # if there are two numbers it is weight and stop (stored backwards)
-    elif len(extra_numbers) == 2:
-        weight = extra_numbers[1]
-        stop = extra_numbers[0]
-
-    # print(f"parsed vals is {textPrompt}, {weight}, {stop}")
-    return textPrompt, weight, stop
-
-from typing import cast, Dict, List, Optional, Tuple, Union
-
-# override class to get padding_mode
-class MyRandomPerspective(K.RandomPerspective):
-    def apply_transform(
-        self, input: torch.Tensor, params: Dict[str, torch.Tensor], transform: Optional[torch.Tensor] = None
-    ) -> torch.Tensor:
-        _, _, height, width = input.shape
-        transform = cast(torch.Tensor, transform)
-        return kornia.geometry.transform.warp_perspective(
-            input, transform, (height, width), mode=self.flags["resample"].name.lower(),
-            align_corners=self.flags["align_corners"], padding_mode=global_padding_mode
-        )
-
-global_fill_color=None;
-# override class to get fill color
-class MyRandomAffine(K.RandomAffine):
-    def apply_transform(
-        self, input: torch.Tensor, params: Dict[str, torch.Tensor], transform: Optional[torch.Tensor] = None
-    ) -> torch.Tensor:
-        _, _, height, width = input.shape
-        transform = cast(torch.Tensor, transform)
-        return kornia.geometry.transform.warp_affine(
-            input,
-            transform[:, :2, :],
-            (height, width),
-            self.flags["resample"].name.lower(),
-            align_corners=self.flags["align_corners"],
-            padding_mode="fill",
-            fill_value=global_fill_color
-        )
-
-class MyRandomPerspectivePadded(K.RandomPerspective):
-    def apply_transform(
-        self, input: torch.Tensor, params: Dict[str, torch.Tensor], transform: Optional[torch.Tensor] = None
-    ) -> torch.Tensor:
-        _, _, height, width = input.shape
-        transform = cast(torch.Tensor, transform)
-        return kornia.geometry.transform.warp_perspective(
-            input, transform, (height, width), mode=self.flags["resample"].name.lower(),
-            align_corners=self.flags["align_corners"],
-            padding_mode="fill",
-            fill_value=global_fill_color
-        )
-
-
-cached_spot_indexes = {}
-def fetch_spot_indexes(sideX, sideY):
-    global global_spot_file
-
-    # make sure image is loaded if we need it
-    cache_key = (sideX, sideY)
-
-    if cache_key not in cached_spot_indexes:
-        if global_spot_file is not None:
-            mask_image = Image.open(global_spot_file)
-        elif global_aspect_width != 1:
-            mask_image = Image.open("inputs/spot_wide.png")
-        else:
-            mask_image = Image.open("inputs/spot_square.png")
-        # this is a one channel mask
-        mask_image = mask_image.convert('RGB')
-        mask_image = mask_image.resize((sideX, sideY), Image.LANCZOS)
-        mask_image_tensor = TF.to_tensor(mask_image)
-        # print("ONE CHANNEL ", mask_image_tensor.shape)
-        mask_indexes = mask_image_tensor.ge(0.5).to(device)
-        # print("GE ", mask_indexes.shape)
-        # sys.exit(0)
-        mask_indexes_off = mask_image_tensor.lt(0.5).to(device)
-        cached_spot_indexes[cache_key] = [mask_indexes, mask_indexes_off]
-
-    return cached_spot_indexes[cache_key]
-
-# n = torch.ones((3,5,5))
-# f = generate.fetch_spot_indexes(5, 5)
-# f[0].shape = [60,3]
-
-class MakeCutouts(nn.Module):
-    def __init__(self, cut_size, cutn, cut_pow=1.):
-        global global_aspect_width
-
-        super().__init__()
-        self.cut_size = cut_size
-        self.cutn = cutn
-        self.cutn_zoom = int(0.6*cutn)
-        self.cut_pow = cut_pow
-        self.transforms = None
-
-        augmentations = []
-        # if global_aspect_width != 1:
-        #     augmentations.append(K.RandomCrop(size=(self.cut_size,self.cut_size), p=1.0, cropping_mode="resample", return_transform=True))
-        augmentations.append(MyRandomPerspective(distortion_scale=0.40, p=0.7, return_transform=True))
-        augmentations.append(K.RandomResizedCrop(size=(self.cut_size,self.cut_size), scale=(0.25,0.95),  ratio=(0.85,1.2), cropping_mode='resample', p=1.0, return_transform=True))
-        augmentations.append(K.ColorJitter(hue=0.1, saturation=0.1, p=0.8, return_transform=True))
-        self.augs_zoom = nn.Sequential(*augmentations)
-
-        augmentations = []
-        if global_aspect_width == 1:
-            n_s = 0.95
-            n_t = (1-n_s)/2
-            augmentations.append(MyRandomAffine(degrees=0, translate=(n_t, n_t), scale=(n_s, n_s), p=1.0, return_transform=True))
-        elif global_aspect_width > 1:
-            n_s = 1/global_aspect_width
-            n_t = (1-n_s)/2
-            augmentations.append(MyRandomAffine(degrees=0, translate=(0, n_t), scale=(0.9*n_s, n_s), p=1.0, return_transform=True))
-        else:
-            n_s = global_aspect_width
-            n_t = (1-n_s)/2
-            augmentations.append(MyRandomAffine(degrees=0, translate=(n_t, 0), scale=(0.9*n_s, n_s), p=1.0, return_transform=True))
-
-        # augmentations.append(K.CenterCrop(size=(self.cut_size,self.cut_size), p=1.0, cropping_mode="resample", return_transform=True))
-        augmentations.append(K.CenterCrop(size=self.cut_size, cropping_mode='resample', p=1.0, return_transform=True))
-        augmentations.append(MyRandomPerspectivePadded(distortion_scale=0.20, p=0.7, return_transform=True))
-        augmentations.append(K.ColorJitter(hue=0.1, saturation=0.1, p=0.8, return_transform=True))
-        self.augs_wide = nn.Sequential(*augmentations)
-
-        self.noise_fac = 0.1
-        
-        # Pooling
-        self.av_pool = nn.AdaptiveAvgPool2d((self.cut_size, self.cut_size))
-        self.max_pool = nn.AdaptiveMaxPool2d((self.cut_size, self.cut_size))
-
-    def forward(self, input, spot=None):
-        global global_aspect_width, cur_iteration
-        sideY, sideX = input.shape[2:4]
-        max_size = min(sideX, sideY)
-        min_size = min(sideX, sideY, self.cut_size)
-        cutouts = []
-        mask_indexes = None
-
-        if spot is not None:
-            spot_indexes = fetch_spot_indexes(self.cut_size, self.cut_size)
-            if spot == 0:
-                mask_indexes = spot_indexes[1]
-            else:
-                mask_indexes = spot_indexes[0]
-            # print("Mask indexes ", mask_indexes)
-
-        for _ in range(self.cutn):
-            # Pooling
-            cutout = (self.av_pool(input) + self.max_pool(input))/2
-
-            if mask_indexes is not None:
-                cutout[0][mask_indexes] = 0.0 # 0.5
-
-            if global_aspect_width != 1:
-                if global_aspect_width > 1:
-                    cutout = kornia.geometry.transform.rescale(cutout, (1, global_aspect_width))
-                else:
-                    cutout = kornia.geometry.transform.rescale(cutout, (1/global_aspect_width, 1))
-
-            # if cur_iteration % 50 == 0 and _ == 0:
-            #     print(cutout.shape)
-            #     TF.to_pil_image(cutout[0].cpu()).save(f"cutout_im_{cur_iteration:02d}_{spot}.png")
-
-            cutouts.append(cutout)
-
-        if self.transforms is not None:
-            # print("Cached transforms available")
-            batch1 = kornia.geometry.transform.warp_perspective(torch.cat(cutouts[:self.cutn_zoom], dim=0), self.transforms[:self.cutn_zoom],
-                (self.cut_size, self.cut_size), padding_mode=global_padding_mode)
-            batch2 = kornia.geometry.transform.warp_perspective(torch.cat(cutouts[self.cutn_zoom:], dim=0), self.transforms[self.cutn_zoom:],
-                (self.cut_size, self.cut_size), padding_mode="fill", fill_value=global_fill_color)
-            batch = torch.cat([batch1, batch2])
-            # if cur_iteration < 2:
-            #     for j in range(4):
-            #         TF.to_pil_image(batch[j].cpu()).save(f"cached_im_{cur_iteration:02d}_{j:02d}_{spot}.png")
-            #         j_wide = j + self.cutn_zoom
-            #         TF.to_pil_image(batch[j_wide].cpu()).save(f"cached_im_{cur_iteration:02d}_{j_wide:02d}_{spot}.png")
-        else:
-            batch1, transforms1 = self.augs_zoom(torch.cat(cutouts[:self.cutn_zoom], dim=0))
-            batch2, transforms2 = self.augs_wide(torch.cat(cutouts[self.cutn_zoom:], dim=0))
-            # print(batch1.shape, batch2.shape)
-            batch = torch.cat([batch1, batch2])
-            # print(batch.shape)
-            self.transforms = torch.cat([transforms1, transforms2])
-            ## batch, self.transforms = self.augs(torch.cat(cutouts, dim=0))
-            # if cur_iteration < 4:
-            #     for j in range(4):
-            #         TF.to_pil_image(batch[j].cpu()).save(f"live_im_{cur_iteration:02d}_{j:02d}_{spot}.png")
-            #         j_wide = j + self.cutn_zoom
-            #         TF.to_pil_image(batch[j_wide].cpu()).save(f"live_im_{cur_iteration:02d}_{j_wide:02d}_{spot}.png")
-
-        # print(batch.shape, self.transforms.shape)
-        
-        if self.noise_fac:
-            facs = batch.new_empty([self.cutn, 1, 1, 1]).uniform_(0, self.noise_fac)
-            batch = batch + facs * torch.randn_like(batch)
-        return batch
-
-
-def resize_image(image, out_size):
-    ratio = image.size[0] / image.size[1]
-    area = min(image.size[0] * image.size[1], out_size[0] * out_size[1])
-    size = round((area * ratio)**0.5), round((area / ratio)**0.5)
-    return image.resize(size, Image.LANCZOS)
-
-def rebuild_optimisers(args):
-    global best_loss, best_iter, best_z, num_loss_drop, max_loss_drops, iter_drop_delay
-    global drawer, filters
-
-    drop_divisor = 10 ** num_loss_drop
-    new_opts = drawer.get_opts(drop_divisor)
-    if new_opts == None:
-        # legacy
-
-        dropped_learning_rate = args.learning_rate/drop_divisor;
-        # print(f"Optimizing with {args.optimiser} set to {dropped_learning_rate}")
-
-        #temporary hack
-        if args.init_image and args.drawer=="vdiff":
-            dropped_learning_rate = 0.01/drop_divisor
-
-        # Set the optimiser
-        to_optimize = [ drawer.get_z() ]
-        if args.optimiser == "Adam":
-            opt = optim.Adam(to_optimize, lr=dropped_learning_rate)        # LR=0.1
-        elif args.optimiser == "AdamW":
-            opt = optim.AdamW(to_optimize, lr=dropped_learning_rate)       # LR=0.2
-        elif args.optimiser == "Adagrad":
-            opt = optim.Adagrad(to_optimize, lr=dropped_learning_rate) # LR=0.5+
-        elif args.optimiser == "Adamax":
-            opt = optim.Adamax(to_optimize, lr=dropped_learning_rate)  # LR=0.5+?
-        elif args.optimiser == "DiffGrad":
-            opt = DiffGrad(to_optimize, lr=dropped_learning_rate)      # LR=2+?
-        elif args.optimiser == "AdamP":
-            opt = AdamP(to_optimize, lr=dropped_learning_rate)     # LR=2+?
-        # elif args.optimiser == "RAdam":
-        #     opt = RAdam(to_optimize, lr=dropped_learning_rate)     # LR=2+?
-
-        new_opts = [opt]
-
-    return new_opts
-
-# used for target image
-def fetch_images(preprocess, image_files):
-    images = []
-
-    for filename in image_files:
-        image = preprocess(Image.open(filename).convert("RGB"))
-        images.append(image)
-
-    return images
-
-def do_image_features(model, images, image_mean, image_std):
-    image_input = torch.tensor(np.stack(images)).cuda()
-    image_input -= image_mean[:, None, None]
-    image_input /= image_std[:, None, None]
-
-    with torch.no_grad():
-        image_features = model.encode_image(image_input).float()
-
-    return image_features
-
-# note: this should probably be split into a setup and a session init
-def do_init(args):
-    global opts, perceptors, normalize, cutoutsTable, cutoutSizeTable
-    global z_orig, im_targets, z_labels, init_image_tensor, target_image_tensor
-    global gside_X, gside_Y, overlay_image_rgba, overlay_image_rgba_list, init_image_rgba_list
-    global pmsTable, pmsImageTable, pmsTargetTable, pImages, device, spotPmsTable, spotOffPmsTable
-    global drawer, filters
-    global lossGlobals, global_cached_png_info, global_seed_used
-
-    reset_session_globals()
-
-    # do seed first!
-    if args.seed is None:
-        seed = torch.seed()
-    elif isinstance(args.seed, int):
-        seed = args.seed
-    elif isinstance(args.seed, str) and args.seed.isdigit():
-        seed = int(args.seed)
-    else:
-        # deterministic 32 bit int from string
-        # https://stackoverflow.com/a/44556106/1010653
-        e_str = args.seed.encode()
-        hash_digest = hashlib.sha512(e_str).digest()
-        seed = int.from_bytes(hash_digest, 'big') % 0x100000000
-    int_seed = int(seed)%(2**30)
-    print('Using seed:', seed)
-    global_seed_used = seed
-    torch.manual_seed(seed)
-    np.random.seed(int_seed)
-    random.seed(int_seed)
-
-    # set device only once
-    if device is None:
-        device = torch.device('cuda:0' if torch.cuda.is_available() else 'cpu')
-
-    drawer = class_table[args.drawer](args)
-    drawer.load_model(args, device)
-    num_resolutions = drawer.get_num_resolutions()
-
-    # print("-----------> NUMR ", num_resolutions)
-    #as of torch 1.8, jit produces errors. The below code no longer works with 1.10
-    #jit = True if float(torch.__version__[:3]) < 1.8 else False
-    jit = False
-
-    if num_resolutions!=None:
-        f = 2**(num_resolutions - 1)
-        toksX, toksY = args.size[0] // f, args.size[1] // f
-        sideX, sideY = toksX * f, toksY * f
-    else:
-        sideX, sideY = args.size[0], args.size[1]
-
-    # save sideX, sideY in globals (need if using overlay)
-    gside_X = sideX
-    gside_Y = sideY
-
-    # model loading optimization: if all models are loaded keep things as they are
-    if set(args.clip_models) <= set(perceptors.keys()):
-        print("All CLIP models already loaded: ", args.clip_models)
-    else:
-        # TODO: unload models?
-        perceptors = {}
-        for clip_model in args.clip_models:
-            perceptor = get_clip_perceptor(clip_model, device)
-            perceptors[clip_model] = perceptor
-
-    # now separately setup cuts
-    for clip_model in args.clip_models:
-        perceptor = perceptors[clip_model]
-        cut_size = perceptor.input_resolution
-        cutoutSizeTable[clip_model] = cut_size
-        if not cut_size in cutoutsTable:    
-            make_cutouts = MakeCutouts(cut_size, args.num_cuts, cut_pow=args.cut_pow)
-            cutoutsTable[cut_size] = make_cutouts
-
-    filters = None
-    if args.filters is not None:
-        filter_names = args.filters.split(",")
-        filter_names = [f.strip() for f in filter_names]
-        filterClasses = []
-        for filt in filter_names:
-            filt_name, weight, stop = parse_prompt(filt)
-            if filt_name not in filters_class_table:
-                raise ValueError(f"Requested filter not found, aborting: {filt_name}")
-            filtClass = filters_class_table[filt_name]
-            # do special initializations here
-            try:
-                filtInstance = filtClass(args, device=device)
-                filterClasses.append({"filter":filtInstance, "weight": weight})
-            except TypeError as e:
-                print(f'error in initializing {filtClass} - this message is to provide information')
-                raise TypeError(e)
-        filters = filterClasses
-
-    init_image_tensor = None
-    target_image_tensor = None
-
-    # Image initialisation
-    if args.init_image or args.init_noise:
-        # setup init image wih pil
-        # first - always start with noise or blank
-        if args.init_noise == 'pixels':
-            img = random_noise_image(args.size[0], args.size[1])
-        elif args.init_noise == 'gradient':
-            img = random_gradient_image(args.size[0], args.size[1])
-        elif args.init_noise == 'snow':
-            img = old_random_noise_image(args.size[0], args.size[1])
-        else:
-            img = Image.new(mode="RGB", size=(args.size[0], args.size[1]), color=(255, 255, 255))
-        starting_image = img.convert('RGB')
-        starting_image = starting_image.resize((sideX, sideY), Image.LANCZOS)
-
-        if args.init_image:
-            # now we might overlay an init image
-            filelist = None
-            if 'http' in args.init_image:
-                init_images = [Image.open(urlopen(args.init_image))]
-            else:
-                filelist = real_glob(args.init_image)
-                init_images = [Image.open(f) for f in filelist]
-
-            init_image_rgba_list = []
-            for init_image in init_images:
-                # this version is needed potentially for the loss function
-                init_image_rgb = init_image.convert('RGB')
-                init_image_rgb = init_image_rgb.resize((sideX, sideY), Image.LANCZOS)
-                init_image_tensor = TF.to_tensor(init_image_rgb)
-                init_image_tensor = init_image_tensor.to(device).unsqueeze(0)
-
-                # this version gets overlaid on the background (noise)
-                init_image_rgba = init_image.convert('RGBA')
-                init_image_rgba = init_image_rgba.resize((sideX, sideY), Image.LANCZOS)
-                top_image = init_image_rgba.copy()
-                if args.init_image_alpha and args.init_image_alpha >= 0:
-                    top_image.putalpha(args.init_image_alpha)
-                cur_start_image = starting_image.copy()
-                cur_start_image.paste(top_image, (0, 0), top_image)
-                init_image_rgba_list.append(cur_start_image)
-
-            starting_image = init_image_rgba_list[0]
-
-            save_image(init_image_tensor,"init_image_tensor.png")
-            drawer.init_from_tensor(init_image_tensor)
-            z_orig = drawer.get_z_copy()
-
-        starting_image.save("starting_image.png")
-        starting_tensor = TF.to_tensor(starting_image)
-        init_tensor = starting_tensor.to(device).unsqueeze(0) * 2 - 1 # im not sure why?
-        drawer.init_from_tensor(init_tensor)
-
-    else:
-        drawer.init_from_tensor(init_tensor=None)
-        # this is the old vqgan version [need to patch vqgan to do this?]
-        # drawer.rand_init(toksX, toksY)
-
-    if args.overlay_image is not None:
-        # todo: maybe split this up on pipes and whatnot
-        overlay_image_rgba_list = []
-        if 'http' in args.overlay_image:
-            overlay_images = [Image.open(urlopen(args.overlay_image))]
-        else:
-            filelist = real_glob(args.overlay_image)
-            overlay_images = [Image.open(f) for f in filelist]
-
-        for overlay_image in overlay_images:
-            overlay_image_rgba = overlay_image.convert('RGBA')
-            overlay_image_rgba = overlay_image_rgba.resize((sideX, sideY), Image.LANCZOS)
-            if args.overlay_alpha:
-                overlay_image_rgba.putalpha(args.overlay_alpha)
-            overlay_image_rgba_list.append(overlay_image_rgba)
-
-        overlay_image_rgba_list[0].save('overlay_image0.png')
-
-    global_cached_png_info = None
-
-    pmsTable = {}
-    pmsImageTable = {}
-    pmsTargetTable = {}
-    spotPmsTable = {}
-    spotOffPmsTable = {}
-    for clip_model in args.clip_models:
-        pmsTable[clip_model] = []
-        pmsImageTable[clip_model] = []
-        pmsTargetTable[clip_model] = []
-        spotPmsTable[clip_model] = []
-        spotOffPmsTable[clip_model] = []
-
-    drawer_clip_target = None
-    if hasattr(drawer, 'clip_model') and drawer.clip_model is not None:
-        print(f"drawer {drawer} needs {drawer.clip_model}")
-        drawer_clip_target = drawer.clip_model
-    # NR: Weights / blending
-    allpromptembeds = []
-    allweights = []
-
-    if args.target_images is not None:
-        if args.animation_dir is not None:
-            for clip_model in args.clip_models:
-                pmsTarget = pmsTargetTable[clip_model]
-                perceptor = perceptors[clip_model]
-
-                input_resolution = perceptor.input_resolution
-                # print(f"Running {clip_model} at {input_resolution}")
-                preprocess = Compose([
-                    Resize(input_resolution, interpolation=Image.BICUBIC),
-                    CenterCrop(input_resolution),
-                    ToTensor()
-                ])
-                image_mean = torch.tensor([0.48145466, 0.4578275, 0.40821073]).cuda()
-                image_std = torch.tensor([0.26862954, 0.26130258, 0.27577711]).cuda()
-
-                input_files = []
-                for target_image in args.target_images:
-                    f1, weight, stop = parse_prompt(target_image)
-                    infiles = real_glob(f1)
-                    input_files.extend(infiles)
-
-                for path in input_files:
-                    images = fetch_images(preprocess, [path])
-                    features = do_image_features(perceptor, images, image_mean, image_std)
-                    pmsTarget.append(Prompt(features, weight, stop).to(device))
-        else:
-            for clip_model in args.clip_models:
-                pMs = pmsTable[clip_model]
-                perceptor = perceptors[clip_model]
-
-                input_resolution = perceptor.input_resolution
-                # print(f"Running {clip_model} at {input_resolution}")
-                preprocess = Compose([
-                    Resize(input_resolution, interpolation=Image.BICUBIC),
-                    CenterCrop(input_resolution),
-                    ToTensor()
-                ])
-                image_mean = torch.tensor([0.48145466, 0.4578275, 0.40821073]).cuda()
-                image_std = torch.tensor([0.26862954, 0.26130258, 0.27577711]).cuda()
-
-                input_files = []
-                for target_image in args.target_images:
-                    f1, weight, stop = parse_prompt(target_image)
-                    # print("Target parse ", target_image, "to", f1)
-                    if 'http' in f1:
-                        # note: this is currently untested...
-                        infile = urlopen(f1)
-                        input_files.append(infile)
-                    else:
-                        infiles = real_glob(f1)
-                        input_files.extend(infiles)
-
-                print(input_files)
-                images = fetch_images(preprocess, input_files);
-
-                features = do_image_features(perceptor, images, image_mean, image_std)
-                if clip_model == drawer_clip_target:
-                    allpromptembeds.append(features)
-                    allweights.append(weight)
-                pMs.append(Prompt(features, weight, stop).to(device))
-
-    if args.image_labels is not None:
-        z_labels = []
-        filelist = real_glob(args.image_labels)
-        cur_labels = []
-        for image_label in filelist:
-            image_label = Image.open(image_label)
-            image_label_rgb = image_label.convert('RGB')
-            image_label_rgb = image_label_rgb.resize((sideX, sideY), Image.LANCZOS)
-            image_label_rgb_tensor = TF.to_tensor(image_label_rgb)
-            image_label_rgb_tensor = image_label_rgb_tensor.to(device).unsqueeze(0) * 2 - 1
-            z_label = drawer.get_z_from_tensor(image_label_rgb_tensor)
-            cur_labels.append(z_label)
-        image_embeddings = torch.stack(cur_labels)
-        print("Processing labels: ", image_embeddings.shape)
-        image_embeddings /= image_embeddings.norm(dim=-1, keepdim=True)
-        image_embeddings = image_embeddings.mean(dim=0)
-        image_embeddings /= image_embeddings.norm()
-        z_labels.append(image_embeddings.unsqueeze(0))
-
-    if z_orig is not None:
-        z_orig = drawer.get_z_copy()
-
-    # normalize = transforms.Normalize(mean=[0.48145466, 0.4578275, 0.40821073],
-    #                                   std=[0.26862954, 0.26130258, 0.27577711])
-
-    # CLIP tokenize/encode
-    for prompt in args.prompts:
-        for clip_model in args.clip_models:
-            pMs = pmsTable[clip_model]
-            perceptor = perceptors[clip_model]
-            txt, weight, stop = parse_prompt(prompt)
-            if txt[0] == '=':
-                # hack for now to test pseudo encode shim
-                txt = txt[1:]
-                print(f"--> {clip_model} encoding {txt} with stops")
-                actual_tokens = clip.tokenize(txt).to(device)
-                stops = actual_tokens.argmax(dim=-1) - 1
-                embed = perceptor.encode_text(actual_tokens, stops).float()
-            else:
-                # print(f"--> {clip_model} normal encoding {txt}")
-                embed = perceptor.encode_text(txt).float()
-            if clip_model == drawer_clip_target:
-                allpromptembeds.append(embed)
-                allweights.append(weight)
-            pMs.append(Prompt(embed, weight, stop).to(device))
-
-    if drawer_clip_target is not None:
-        if args.drawer=="vdiff" and args.vdiff_model[:7] == "cc12m_1":
-            target_embeds = torch.cat(allpromptembeds)
-            allweights = torch.tensor(allweights, dtype=torch.float, device=device)
-            clip_embed = F.normalize(target_embeds.mul(allweights[:, None]).sum(0, keepdim=True), dim=-1)
-            print(f"clip_embed for drawer {drawer} is {clip_embed.shape}")
-            drawer.sample_state[3] = {"clip_embed":clip_embed}
-
-    for vect_prompt in args.vector_prompts:
-        f1, weight, stop = parse_prompt(vect_prompt)
-        # vect_promts are by nature tuned to 10% of a normal prompt
-        weight = 0.1 * weight
-        if 'http' in f1:
-            # note: this is currently untested...
-            infile = None
-            infile_handle = urlopen(f1)
-        elif 'json' in f1:
-            infile = f1
-        else:
-            infile = f"vectors/{f1}.json"
-            if not os.path.exists(infile):
-                infile = f"pixray/vectors/{f1}.json"
-        if infile:
-            with open(infile) as f_in:
-                vect_table = json.load(f_in)
-        else:
-            vect_table = json.load(infile_handle)
-        for clip_model in args.clip_models:
-            if clip_model not in vect_table:
-                print(f"WARNING: no vector for {clip_model} in {f1}!")
-                print("Continuing without this vector... (BUT THIS RESULT MIGHT NOT BE WHAT YOU WANT 😬)")
-                # time.sleep(3)
-                continue
-            pMs = pmsTable[clip_model]
-            v = np.array(vect_table[clip_model])
-            embed = torch.FloatTensor(v).to(device).float()
-            pMs.append(Prompt(embed, weight, stop).to(device))
-
-    for prompt in args.spot_prompts:
-        for clip_model in args.clip_models:
-            pMs = spotPmsTable[clip_model]
-            perceptor = perceptors[clip_model]
-            txt, weight, stop = parse_prompt(prompt)
-            embed = perceptor.encode_text(txt).float()
-            pMs.append(Prompt(embed, weight, stop).to(device))
-
-    for prompt in args.spot_prompts_off:
-        for clip_model in args.clip_models:
-            pMs = spotOffPmsTable[clip_model]
-            perceptor = perceptors[clip_model]
-            txt, weight, stop = parse_prompt(prompt)
-            embed = perceptor.encode_text(txt).float()
-            pMs.append(Prompt(embed, weight, stop).to(device))
-
-    for label in args.labels:
-        for clip_model in args.clip_models:
-            pMs = pmsTable[clip_model]
-            perceptor = perceptors[clip_model]
-            txt, weight, stop = parse_prompt(label)
-            texts = [template.format(txt) for template in imagenet_templates] #format with class
-            # print(f"Tokenizing all of {texts}")
-            # texts = clip.tokenize(texts).to(device) #tokenize
-            class_embeddings = perceptor.encode_text(texts) #embed with text encoder
-            class_embeddings /= class_embeddings.norm(dim=-1, keepdim=True)
-            class_embedding = class_embeddings.mean(dim=0)
-            class_embedding /= class_embedding.norm()
-            pMs.append(Prompt(class_embedding.unsqueeze(0), weight, stop).to(device))
-
-    for clip_model in args.clip_models:
-        pImages = pmsImageTable[clip_model]
-        for path in args.image_prompts:
-            img = Image.open(path)
-            pil_image = img.convert('RGB')
-            img = resize_image(pil_image, (sideX, sideY))
-            pImages.append(TF.to_tensor(img).unsqueeze(0).to(device))
-
-    for seed, weight in zip(args.noise_prompt_seeds, args.noise_prompt_weights):
-        gen = torch.Generator().manual_seed(seed)
-        embed = torch.empty([1, perceptor.output_dim]).normal_(generator=gen)
-        pMs.append(Prompt(embed, weight).to(device))
-
-    #custom loss 
-    if args.custom_loss is not None:
-        custom_losses = args.custom_loss.split(",")
-        custom_losses = [loss.strip() for loss in custom_losses]
-        custom_loss_names = args.custom_loss
-        lossClasses = []
-        for loss_chunk in custom_losses:
-            # check for special delimiter
-            if loss_chunk.find('->') > 0:
-                parts = loss_chunk.split('->')
-                loss = parts[0]
-                instance_args = parts[1:]
-            else:
-                loss = loss_chunk
-                instance_args = []
-            loss_name, weight, stop = parse_prompt(loss)
-            lossClass = loss_class_table[loss_name]
-            # do special initializations here
-            try:
-                lossInstance = lossClass(device=device)
-                lossInstance.instance_settings(instance_args)
-                lossClasses.append({"loss":lossInstance, "weight": weight})
-            except TypeError as e:
-                print(f'error in initializing {lossClass} - this message is to provide information')
-                raise TypeError(e)
-        args.custom_loss = lossClasses
-
-    #Loss args parse
-    if args.custom_loss:
-        for t in args.custom_loss:
-            args = t["loss"].parse_settings(args)
-
-    #adding globals for loss
-    if args.custom_loss is not None and len(args.custom_loss)>0:
-        for t in args.custom_loss:
-            lossGlobals.update(t["loss"].add_globals(args))
-    
-    
-    opts = rebuild_optimisers(args)
-
-    # Output for the user
-    print('Using device:', device)
-    print('Optimising using:', args.optimiser)
-
-    if args.prompts:
-        print('Using text prompts:', args.prompts)
-    if args.spot_prompts:
-        print('Using spot prompts:', args.spot_prompts)
-    if args.spot_prompts_off:
-        print('Using spot off prompts:', args.spot_prompts_off)
-    if args.image_prompts:
-        print('Using #image prompts:', len(args.image_prompts))
-    if args.init_image:
-        print(f'Using initial image {args.init_image} ({len(init_image_rgba_list)})')
-    if args.noise_prompt_weights:
-        print('Noise prompt weights:', args.noise_prompt_weights)
-    if args.custom_loss:
-        print(f'using custom losses: {str(custom_loss_names)}')
-
-    cur_iteration = 0
-
-
-# dreaded unsorted globals (for now)
-z_orig = None
-im_targets = None
-z_labels = None
-opts = None
-drawer = None
-filters = None
-# normalize = None
-init_image_tensor = None
-target_image_tensor = None
-pmsTable = None
-spotPmsTable = None 
-spotOffPmsTable = None 
-pmsImageTable = None
-pmsTargetTable = None
-gside_X=None
-gside_Y=None
-init_image_rgba_list=[]
-overlay_image_rgba_list=None
-overlay_image_rgba=None
-cur_iteration=None
-cur_anim_index=None
-anim_output_files=[]
-anim_cur_zs=[]
-anim_next_zs=[]
-best_loss = None 
-best_iter = None
-best_z = None
-num_loss_drop = 0
-max_loss_drops = 2
-iter_drop_delay = 20
-
-# session globals
-cutoutsTable = {}
-cutoutSizeTable = {}
-
-# persistent globals
-perceptors = {}
-device=None
-
-#loss globals
-lossGlobals = {}
-
-# on re-runs this should reset most important globals
-def reset_session_globals():
-    global cutoutsTable, cutoutSizeTable
-    cutoutsTable = {}
-    cutoutSizeTable = {}
-
-def make_gif(args, iter):
-    gif_output = os.path.join(args.animation_dir, "anim.gif")
-    if os.path.exists(gif_output):
-        os.remove(gif_output)
-    cmd = ['ffmpeg', '-framerate', '10', '-pattern_type', 'glob',
-           '-i', f"{args.animation_dir}/*.png", '-loop', '0', gif_output]
-    try:
-        output = subprocess.check_output(cmd)
-    except subprocess.CalledProcessError as cpe:
-        output = cpe.output
-        print("Ignoring non-zero exit: ", output)
-
-    return gif_output
-
-# !ffmpeg \
-#   -framerate 10 -pattern_type glob \
-#   -i '{animation_output}/*_*.png' \
-#   -loop 0 {animation_output}/final.gif
-
-@torch.no_grad()
-def checkdrop(args, iter, losses):
-    global best_loss, best_iter, best_z, num_loss_drop, max_loss_drops, iter_drop_delay
-    global drawer
-
-    drop_loss_time = False
-
-    loss_sum = sum(losses)
-    is_new_best = False
-    num_cycles_not_best = 0
-    if (loss_sum < best_loss):
-        is_new_best = True
-        best_loss = loss_sum
-        best_iter = iter
-        best_z = drawer.get_z_copy()
-    else:
-        num_cycles_not_best = iter - best_iter
-        if num_cycles_not_best >= iter_drop_delay:
-            drop_loss_time = True
-    return drop_loss_time
-
-# for a release just bake in the version to prevent git subprocess lookup
-git_official_release_version = "v1.7.2"
-git_fallback_version = "v1.7.2+"
-
-# https://stackoverflow.com/a/40170206/1010653
-# Return the git revision as a string
-def git_version():
-    global git_official_release_version, git_fallback_version
-    if git_official_release_version is not None:
-        return git_official_release_version
-
-    def _minimal_ext_cmd(cmd):
-        # construct minimal environment
-        env = {}
-        for k in ['SYSTEMROOT', 'PATH']:
-            v = os.environ.get(k)
-            if v is not None:
-                env[k] = v
-        # LANGUAGE is used on win32
-        env['LANGUAGE'] = 'C'
-        env['LANG'] = 'C'
-        env['LC_ALL'] = 'C'
-        out = subprocess.Popen(cmd, stdout = subprocess.PIPE, env=env).communicate()[0]
-        return out
-
-    try:
-        out = _minimal_ext_cmd(['git', 'describe', '--always'])
-        GIT_REVISION = out.strip().decode('ascii')
-    except OSError:
-        GIT_REVISION = git_fallback_version
-
-    return GIT_REVISION
-
-global_cached_png_info=None
-def getPngInfo():
-    global global_cached_png_info
-    if global_cached_png_info is None:
-        git_v = git_version()
-        info = PngImagePlugin.PngInfo()
-        info.add_text("Software", f"pixray ({git_v})")
-        # print(global_given_args)
-        for k in global_given_args:
-            info.add_text(f"pixray_{k}", str(global_given_args[k]))
-        info.add_text("pixray_seed_used", str(global_seed_used))
-        global_cached_png_info = info
-    return global_cached_png_info 
-
-@torch.no_grad()
-def checkin(args, iter, losses):
-    global drawer, filters
-    global best_loss, best_iter, best_z, num_loss_drop, max_loss_drops, iter_drop_delay
-
-    num_cycles_not_best = iter - best_iter
-
-    if losses is not None:
-        losses_str = ', '.join(f'{loss.item():2.3g}' for loss in losses)
-        writestr = f'iter: {iter}, loss: {sum(losses).item():1.3g}, losses: {losses_str}'
-    else:
-        writestr = f'iter: {iter}, finished'
-
-    if args.animation_dir is not None:
-        writestr = f'anim: {cur_anim_index}/{len(anim_output_files)} {writestr}'
-    else:
-        writestr = f'{writestr} (-{num_cycles_not_best}=>{best_loss:2.4g})'
-    timg = drawer.synth(cur_iteration)
-    if filters is not None and len(filters)>0:
-        for f in filters:
-            filtclass = f["filter"]
-            timg, closs = filtclass(timg);
-
-    img = TF.to_pil_image(timg[0].cpu())
-    # img = drawer.to_image()
-    if cur_anim_index is None:
-        outfile = args.output
-    else:
-        outfile = anim_output_files[cur_anim_index]
-    img.save(outfile, pnginfo=getPngInfo())
-    if cur_anim_index == len(anim_output_files) - 1:
-        # save gif
-        gif_output = make_gif(args, iter)
-        if IS_NOTEBOOK and iter % args.display_every == 0:
-            clear_output()
-            display.display(display.Image(open(gif_output,'rb').read()))
-    if IS_NOTEBOOK and iter % args.display_every == 0:
-        if cur_anim_index is None or iter == 0:
-            if args.display_clear:
-                clear_output()
-            display.display(display.Image(outfile))
-    tqdm.write(writestr)
-
-def ascend_txt(args):
-    global cur_iteration, cur_anim_index, perceptors, cutoutsTable, cutoutSizeTable # normalize, 
-    global z_orig, im_targets, z_labels, init_image_tensor, target_image_tensor, drawer
-    global pmsTable, pmsImageTable, spotPmsTable, spotOffPmsTable, global_padding_mode, global_fill_color
-    global pmsTargetTable
-    global lossGlobals
-
-    if args.transparency:
-        out, alpha = drawer.synth(cur_iteration, return_transparency=True)
-    else:
-        out = drawer.synth(cur_iteration)
-
-    result = []
-
-    if filters is not None and len(filters)>0:
-        for f in filters:
-            filtclass = f["filter"]
-            filtweight = f["weight"]
-            out, new_losses = filtclass(out);
-            if type(new_losses) is not list and type(new_losses) is not tuple:
-                result.append(filtweight * new_losses)
-            else:
-                # warning: this path might be untested by current losses?
-                weighted_losses = [(filtweight * l) for l in new_losses]
-                result += weighted_losses
-
-    if (cur_iteration%2 == 0):
-        global_padding_mode = 'reflection'
-    else:
-        global_padding_mode = 'border'
-
-    color_fill = random.random()
-    # print("Color fill is ", color_fill)
-    # color_fill = 1.0
-    global_fill_color =torch.tensor([color_fill,color_fill,color_fill], device=device, dtype=torch.float)
-
-    cur_cutouts = {}
-    cur_spot_cutouts = {}
-    cur_spot_off_cutouts = {}
-    for cutoutSize in cutoutsTable:
-        make_cutouts = cutoutsTable[cutoutSize]
-        cur_cutouts[cutoutSize] = make_cutouts(out)
-
-    if args.spot_prompts:
-        for cutoutSize in cutoutsTable:
-            cur_spot_cutouts[cutoutSize] = make_cutouts(out, spot=1)
-
-    if args.spot_prompts_off:
-        for cutoutSize in cutoutsTable:
-            cur_spot_off_cutouts[cutoutSize] = make_cutouts(out, spot=0)
-
-    for clip_model in args.clip_models:
-        perceptor = perceptors[clip_model]
-        cutoutSize = cutoutSizeTable[clip_model]
-        transient_pMs = []
-
-        if args.spot_prompts:
-            iii_s = perceptor.encode_image(cur_spot_cutouts[cutoutSize]).float()
-            spotPms = spotPmsTable[clip_model]
-            for prompt in spotPms:
-                result.append(prompt(iii_s))
-
-        if args.spot_prompts_off:
-            iii_so = perceptor.encode_image(cur_spot_off_cutouts[cutoutSize]).float()
-            spotOffPms = spotOffPmsTable[clip_model]
-            for prompt in spotOffPms:
-                result.append(prompt(iii_so))
-
-        iii = perceptor.encode_image(cur_cutouts[cutoutSize]).float()
-
-        pMs = pmsTable[clip_model]
-        for prompt in pMs:
-            result.append(prompt(iii))
-
-        # add target frame prompts if applicable
-        if cur_anim_index is not None and len(pmsTargetTable[clip_model]) > 0:
-            num_anim_frames = len(pmsTargetTable[clip_model])
-            pmsTarget = [ pmsTargetTable[clip_model][cur_anim_index % num_anim_frames] ]
-            for prompt in pmsTarget:
-                result.append(prompt(iii))
-
-        # If there are image prompts we make cutouts for those each time
-        # so that they line up with the current cutouts from augmentation
-        make_cutouts = cutoutsTable[cutoutSize]
-
-        # if animating select one pImage, otherwise use them all
-        if cur_anim_index is not None and len(pmsImageTable[clip_model]) > 0:
-            num_anim_frames = len(pmsImageTable[clip_model])
-            pImages = [ pmsImageTable[clip_model][cur_anim_index % num_anim_frames] ]
-        else:
-            pImages = pmsImageTable[clip_model]
-        
-        for timg in pImages:
-            # note: this caches and reuses the transforms - a bit of a hack but it works
-
-            if args.image_prompt_shuffle:
-                # print("Disabling cached transforms")
-                make_cutouts.transforms = None
-
-            # print("Building throwaway image prompts")
-            # new way builds throwaway Prompts
-            batch = make_cutouts(timg)
-            embed = perceptor.encode_image(batch).float()
-            if args.image_prompt_weight is not None:
-                transient_pMs.append(Prompt(embed, args.image_prompt_weight).to(device))
-            else:
-                transient_pMs.append(Prompt(embed).to(device))
-
-        for prompt in transient_pMs:
-            result.append(prompt(iii))
-
-
-    for cutoutSize in cutoutsTable:
-        # clear the transform "cache"
-        make_cutouts = cutoutsTable[cutoutSize]
-        make_cutouts.transforms = None
-
-    if args.image_labels is not None:
-        for z_label in z_labels:
-            f = drawer.get_z().reshape(1,-1)
-            f2 = z_label.reshape(1,-1)
-            cur_loss = spherical_dist_loss(f, f2) * args.image_label_weight
-            result.append(cur_loss)
-
-    # main init_weight uses spherical loss
-    if args.init_weight:
-        f = drawer.get_z().reshape(1,-1)
-        f2 = z_orig.reshape(1,-1)
-        cur_loss = spherical_dist_loss(f, f2) * args.init_weight
-        result.append(cur_loss[0])
-
-    # these three init_weight variants offer mse_loss, mse_loss in pixel space, and cos loss
-    if args.init_weight_dist:
-        cur_loss = F.mse_loss(drawer.get_z(), z_orig) * args.init_weight_dist / 2
-        result.append(cur_loss)
-
-    if args.init_weight_pix:
-        if init_image_tensor is None:
-            print("OOPS IIT is 0")
-        else:
-            cur_loss = F.l1_loss(out, init_image_tensor) * args.init_weight_pix / 2
-            result.append(cur_loss)
-
-    if args.init_weight_cos:
-        f = drawer.get_z().reshape(1,-1)
-        f2 = z_orig.reshape(1,-1)
-        y = torch.ones_like(f[0])
-        cur_loss = F.cosine_embedding_loss(f, f2, y) * args.init_weight_cos
-        result.append(cur_loss)
-    
-    needed_globals = {
-        # used to be for palette loss - now left as an example
-        'cur_iteration':cur_iteration,
-    }
-
-    if args.transparency:
-        result.append(args.alpha_weight*torch.mean(alpha))
-    
-    if args.custom_loss is not None and len(args.custom_loss)>0:
-        for t in args.custom_loss:
-            lossclass = t["loss"]
-            lossweight = t["weight"]
-            new_losses = lossclass.get_loss(cur_cutouts, out, args, globals = needed_globals, lossGlobals = lossGlobals)
-            if type(new_losses) is not list and type(new_losses) is not tuple:
-                result.append(lossweight * new_losses)
-            else:
-                # warning: this path might be untested by current losses?
-                weighted_losses = [(lossweight * l) for l in new_losses]
-                result += weighted_losses
-
-    if args.make_video:    
-        img = np.array(out.mul(255).clamp(0, 255)[0].cpu().detach().numpy().astype(np.uint8))[:,:,:]
-        img = np.transpose(img, (1, 2, 0))
-        imageio.imwrite(f'./steps/frame_{cur_iteration:04d}.png', np.array(img))
-
-    return result
-
-def re_average_z(args):
-    global gside_X, gside_Y
-    global device, drawer
-
-    # old_z = z.clone()
-    cur_z_image = drawer.to_image()
-    cur_z_image = cur_z_image.convert('RGB')
-    if overlay_image_rgba:
-        # print("applying overlay image")
-        cur_z_image.paste(overlay_image_rgba, (0, 0), mask=overlay_image_rgba)
-        # cur_z_image.save("overlaid.png")
-    cur_z_image = cur_z_image.resize((gside_X, gside_Y), Image.LANCZOS)
-    drawer.reapply_from_tensor(TF.to_tensor(cur_z_image).to(device).unsqueeze(0) * 2 - 1)
-
-def init_anim_z(args, init_rgba):
-    global gside_X, gside_Y
-    global device, drawer
-
-    cur_z_image = init_rgba.copy()
-    drawer.reapply_from_tensor(TF.to_tensor(cur_z_image).to(device).unsqueeze(0) * 2 - 1)
-
-# torch.autograd.set_detect_anomaly(True)
-
-def apply_overlay(args, cur_it):
-    return args.overlay_image is not None and \
-            (cur_it % args.overlay_every) == args.overlay_offset and \
-            ((args.overlay_until is None) or (cur_it < args.overlay_until))
-
-def train(args, cur_it):
-    global drawer, opts
-    global best_loss, best_iter, best_z, num_loss_drop, max_loss_drops, iter_drop_delay
-    global overlay_image_rgba, overlay_image_rgba_list, cur_anim_index, init_image_rgba_list
-    
-    rebuild_opts_when_done = False
-
-    lossAll = None
-    if cur_it < args.iterations:
-        # this is awkward, but train is in also in charge of saving, so...
-        rebuild_opts_when_done = False
-
-        for opt in opts:
-            # opt.zero_grad(set_to_none=True)
-            opt.zero_grad()
-
-        if cur_it == 0 and len(init_image_rgba_list) > 0:
-            if cur_anim_index is not None:
-                num_anim_frames = len(init_image_rgba_list)
-                init_anim_z(args, init_image_rgba_list[cur_anim_index % num_anim_frames])
-
-        if apply_overlay(args, cur_it):
-            if cur_anim_index is not None:
-                num_anim_frames = len(overlay_image_rgba_list)
-                overlay_image_rgba = overlay_image_rgba_list[cur_anim_index % num_anim_frames]
-            re_average_z(args)
-
-        # num_batches = args.batches * (num_loss_drop + 1)
-        num_batches = args.batches
-        for i in range(num_batches):
-            lossAll = ascend_txt(args)
-
-            if i == 0:
-                if cur_anim_index is None or cur_anim_index == 0:
-                    if cur_it in args.learning_rate_drops:
-                        print("Dropping learning rate")
-                        rebuild_opts_when_done = True
-                    else:
-                        did_drop = checkdrop(args, cur_it, lossAll)
-                        if args.auto_stop is True:
-                            rebuild_opts_when_done = did_drop
-
-            if i == 0 and cur_it % args.save_every == 0:
-                checkin(args, cur_it, lossAll)
-
-            loss = sum(lossAll)
-            loss.backward()
-
-        for opt in opts:
-            opt.step()
-
-        drawer.clip_z()
-
-    if args.drawer == "vdiff" and cur_it>=1:
-        lr = drawer.sample_state[6][cur_it] / drawer.sample_state[5][cur_it]
-        drawer.x = drawer.makenoise(cur_it)
-        drawer.x.requires_grad_()
-        to_optimize = [ drawer.x ]
-        opt = optim.Adam(to_optimize, lr=min(lr*0.001,0.01))
-        opts = [opt]
-    if cur_it == args.iterations:
-        # this resetting to best is currently disabled
-        # drawer.set_z(best_z)
-        checkin(args, cur_it, lossAll)
-        return False
-    if rebuild_opts_when_done:
-        num_loss_drop = num_loss_drop + 1
-        # this resetting to best is currently disabled
-        # drawer.set_z(best_z)
-        # always checkin (and save) after resetting z
-        # checkin(args, cur_it, lossAll)
-        if num_loss_drop > max_loss_drops:
-            return False
-        best_iter = cur_it
-        best_loss = 1e20
-        opts = rebuild_optimisers(args)
-    return True
-
-imagenet_templates = [
-    "itap of a {}.",
-    "a bad photo of the {}.",
-    "a origami {}.",
-    "a photo of the large {}.",
-    "a {} in a video game.",
-    "art of the {}.",
-    "a photo of the small {}.",
-]
-
-def check_new_filelist(filelist_old_source, filelist_old, filelist_cur_source, filelist_cur):
-    if filelist_old_source is None:
-        print(f"==> setting animation filelist to {filelist_cur_source} ({len(filelist_cur)} files)")
-        return filelist_cur_source, filelist_cur
-    elif len(filelist_old) > len(filelist_cur):
-        print(f"==> anim filelist {filelist_cur_source} only has {len(filelist_cur)} files - sticking with {filelist_old_source}")
-        return filelist_old_source, filelist_old
-    elif len(filelist_old) == len(filelist_cur):
-        print(f"==> anim filelist {filelist_cur_source} also has {len(filelist_cur)} files - sticking with {filelist_old_source}")
-        return filelist_old_source, filelist_old
-    elif len(filelist_old) < len(filelist_cur):
-        print(f"==> anim filelist {filelist_cur_source} has {len(filelist_cur)} files - switching from {filelist_old_source}")
-        return filelist_cur_source, filelist_cur
-
-# return only once to run only one iteration
-# returns True when complete, False otherwise
-def do_run(args, return_display=False):
-    global cur_iteration, cur_anim_index
-    global anim_cur_zs, anim_next_zs, anim_output_files
-
-    if args.animation_dir is not None:
-        # we already have z_targets. setup some sort of global ring
-        # we need something like
-        # copies of all the current z's (they can all start off all as copies)
-        # a list of all the output filenames
-        #
-        if not os.path.exists(args.animation_dir):
-            os.mkdir(args.animation_dir)
-        filelist = []
-        filelist_source = None
-        if args.overlay_image is not None:
-            filelist_cur = real_glob(args.overlay_image)
-            filelist_source, filelist = check_new_filelist(filelist_source, filelist, "overlay_images", filelist_cur)
-        if args.target_images is not None and len(args.target_images) > 0:
-            filelist_cur = []
-            for target_image in args.target_images:
-                f1, weight, stop = parse_prompt(target_image)
-                infiles = real_glob(f1)
-                filelist_cur.extend(infiles)
-            filelist_source, filelist = check_new_filelist(filelist_source, filelist, "target_images", filelist_cur)
-        if args.init_image is not None:
-            filelist_cur = real_glob(args.init_image)
-            filelist_source, filelist = check_new_filelist(filelist_source, filelist, "init_images", filelist_cur)
-        if args.image_prompts is not None and len(args.image_prompts) > 0:
-            filelist = args.image_prompts
-            filelist_source, filelist = check_new_filelist(filelist_source, filelist, "image_prompts", filelist_cur)
-        num_anim_frames = len(filelist)
-        for target_image in filelist:
-            basename = os.path.basename(target_image)
-            target_output = os.path.join(args.animation_dir, basename)
-            anim_output_files.append(target_output)
-        for i in range(num_anim_frames):
-            cur_z = drawer.get_z_copy()
-            anim_cur_zs.append(cur_z)
-            anim_next_zs.append(None)
-
-        step_iteration = 0
-
-        with tqdm() as pbar:
-            while True:
-                cur_images = []
-                for i in range(num_anim_frames):
-                    # do merge frames here from cur->next when we are ready to be fancy
-                    cur_anim_index = i
-                    # anim_cur_zs[cur_anim_index] = anim_next_zs[cur_anim_index]
-                    cur_iteration = step_iteration
-                    drawer.set_z(anim_cur_zs[cur_anim_index])
-                    for j in range(args.save_every):
-                        keep_going = train(args, cur_iteration)
-                        cur_iteration += 1
-                        pbar.update()
-                    # anim_next_zs[cur_anim_index] = drawer.get_z_copy()
-                    cur_images.append(drawer.to_image())
-                step_iteration = step_iteration + args.save_every
-                if step_iteration >= args.iterations:
-                    break
-                # compute the next round of cur_zs here from all the next_zs
-                for i in range(num_anim_frames):
-                    prev_i = (i + num_anim_frames - 1) % num_anim_frames
-                    base_image = cur_images[i].copy()
-                    prev_image = cur_images[prev_i].copy().convert('RGBA')
-                    prev_image.putalpha(args.animation_alpha)
-                    base_image.paste(prev_image, (0, 0), prev_image)
-                    # base_image.save(f"overlaid_{i:02d}.png")
-                    drawer.reapply_from_tensor(TF.to_tensor(base_image).to(device).unsqueeze(0) * 2 - 1)
-                    anim_cur_zs[i] = drawer.get_z_copy()
-    else:
-        try:
-            keep_going = True
-            with tqdm() as pbar:
-                while keep_going:
-                    try:
-                        keep_going = train(args, cur_iteration)
-                        if cur_iteration == args.iterations:
-                            break
-                        cur_iteration += 1
-                        if not hasattr(args, 'skip_args'):
-                            pbar.update()
-                        if keep_going and return_display and cur_iteration % args.display_every == 0:
-                            # print("Returning after iteration ", cur_iteration)
-                            return False
-                    except RuntimeError as e:
-                        print("Oops: runtime error: ", e)
-                        print("Try reducing --num-cuts to save memory")
-                        raise e
-        except KeyboardInterrupt:
-            pass
-
-    if args.make_video:
-        do_video(args)
-
-    return True
-
-def do_video(args):
-    global cur_iteration
-
-    # Video generation
-    init_frame = 1 # This is the frame where the video will start
-    last_frame = cur_iteration # You can change to the number of the last frame you want to generate. It will raise an error if that number of frames does not exist.
-
-    min_fps = 10
-    max_fps = 60
-
-    total_frames = last_frame-init_frame
-
-    length = 15 # Desired time of the video in seconds
-
-    frames = []
-    tqdm.write('Generating video...')
-    for i in range(init_frame,last_frame): #
-        frames.append(Image.open(f'./steps/frame_{i:04d}.png'))
-
-    #fps = last_frame/10
-    fps = np.clip(total_frames/length,min_fps,max_fps)
-
-    from subprocess import Popen, PIPE
-    import re
-    output_file = re.compile('\.png$').sub('.mp4', args.output)
-    p = Popen(['ffmpeg',
-               '-y',
-               '-f', 'image2pipe',
-               '-vcodec', 'png',
-               '-r', str(fps),
-               '-i',
-               '-',
-               '-vcodec', 'libx264',
-               '-r', str(fps),
-               '-pix_fmt', 'yuv420p',
-               '-crf', '17',
-               '-preset', 'veryslow',
-               '-metadata', f'comment={args.prompts}',
-               output_file], stdin=PIPE)
-    for im in tqdm(frames):
-        im.save(p.stdin, 'PNG')
-    p.stdin.close()
-    p.wait()
-
-# this dictionary is used for settings in the notebook
-global_pixray_settings = {}
-# this dictionary documents all non-default args
-global_given_args = {}
-
-def setup_parser(vq_parser):
-    # Create the parser
-    # vq_parser = argparse.ArgumentParser(description='Image generation using VQGAN+CLIP')
-
-    # Add the arguments
-    vq_parser.add_argument("-p",    "--prompts", type=str, help="Text prompts", default=[], dest='prompts')
-    vq_parser.add_argument("-sp",   "--spot", type=str, help="Spot Text prompts", default=[], dest='spot_prompts')
-    vq_parser.add_argument("-spo",  "--spot_off", type=str, help="Spot off Text prompts", default=[], dest='spot_prompts_off')
-    vq_parser.add_argument("-spf",  "--spot_file", type=str, help="Custom spot file", default=None, dest='spot_file')
-    vq_parser.add_argument("-l",    "--labels", type=str, help="ImageNet labels", default=[], dest='labels')
-    vq_parser.add_argument("-vp",   "--vector_prompts", type=str, help="Vector prompts", default="textoff", dest='vector_prompts')
-    vq_parser.add_argument("-ip",   "--image_prompts", type=str, help="Image prompts", default=[], dest='image_prompts')
-    vq_parser.add_argument("-ipw",  "--image_prompt_weight", type=float, help="Weight for image prompt", default=None, dest='image_prompt_weight')
-    vq_parser.add_argument("-ips",  "--image_prompt_shuffle", type=str2bool, help="Shuffle image prompts", default=False, dest='image_prompt_shuffle')
-    vq_parser.add_argument("-il",   "--image_labels", type=str, help="Image prompts", default=None, dest='image_labels')
-    vq_parser.add_argument("-ilw",  "--image_label_weight", type=float, help="Weight for image prompt", default=1.0, dest='image_label_weight')
-    vq_parser.add_argument("-i",    "--iterations", type=int, help="Number of iterations", default=None, dest='iterations')
-    vq_parser.add_argument("-se",   "--save_every", type=int, help="Save image iterations", default=10, dest='save_every')
-    vq_parser.add_argument("-de",   "--display_every", type=int, help="Display image iterations", default=20, dest='display_every')
-    vq_parser.add_argument("-dc",   "--display_clear", type=str2bool, help="Clear dispaly when updating", default=False, dest='display_clear')
-    vq_parser.add_argument("-ove",  "--overlay_every", type=int, help="Overlay image iterations", default=10, dest='overlay_every')
-    vq_parser.add_argument("-ovo",  "--overlay_offset", type=int, help="Overlay image iteration offset", default=0, dest='overlay_offset')
-    vq_parser.add_argument("-ovu",  "--overlay_until", type=int, help="Last iteration to continue applying overlay image", default=None, dest='overlay_until')
-    vq_parser.add_argument("-ovi",  "--overlay_image", type=str, help="Overlay image (if not init)", default=None, dest='overlay_image')
-    vq_parser.add_argument(         "--quality", type=str, help="draft, normal, better, best", default="normal", dest='quality')
-    vq_parser.add_argument("-asp",  "--aspect", type=str, help="widescreen, square", default="widescreen", dest='aspect')
-    vq_parser.add_argument("-ezs",  "--ezsize", type=str, help="small, medium, large", default=None, dest='ezsize')
-    vq_parser.add_argument("-sca",  "--scale", type=float, help="scale (instead of ezsize)", default=None, dest='scale')
-    vq_parser.add_argument("-ova",  "--overlay_alpha", type=int, help="Overlay alpha (0-255)", default=None, dest='overlay_alpha')    
-    vq_parser.add_argument("-s",    "--size", nargs=2, type=int, help="Image size (width height)", default=None, dest='size')
-    vq_parser.add_argument("-ii",   "--init_image", type=str, help="Initial image", default=None, dest='init_image')
-    vq_parser.add_argument("-iia",  "--init_image_alpha", type=int, help="Init image alpha (0-255)", default=200, dest='init_image_alpha')
-    vq_parser.add_argument("-in",   "--init_noise", type=str, help="Initial noise image (pixels or gradient)", default="pixels", dest='init_noise')
-    vq_parser.add_argument("-ti",   "--target_images", type=str, help="Target images", default=None, dest='target_images')
-    vq_parser.add_argument("-anim", "--animation_dir", type=str, help="Animation output dir", default=None, dest='animation_dir')    
-    vq_parser.add_argument("-ana",  "--animation_alpha", type=int, help="Forward blend for consistency", default=128, dest='animation_alpha')
-    vq_parser.add_argument("-iw",   "--init_weight", type=float, help="Initial weight (main=spherical)", default=None, dest='init_weight')
-    vq_parser.add_argument("-iwd",  "--init_weight_dist", type=float, help="Initial weight dist loss", default=0., dest='init_weight_dist')
-    vq_parser.add_argument("-iwc",  "--init_weight_cos", type=float, help="Initial weight cos loss", default=0., dest='init_weight_cos')
-    vq_parser.add_argument("-iwp",  "--init_weight_pix", type=float, help="Initial weight pix loss", default=0., dest='init_weight_pix')
-    vq_parser.add_argument(         "--perceptors", type=str, help="perceptors (clip/slip/mixed)", default="clip", dest='perceptors')
-    vq_parser.add_argument(         "--clip_models", type=str, help="CLIP model", default=None, dest='clip_models')
-    vq_parser.add_argument("-nps",  "--noise_prompt_seeds", nargs="*", type=int, help="Noise prompt seeds", default=[], dest='noise_prompt_seeds')
-    vq_parser.add_argument("-npw",  "--noise_prompt_weights", nargs="*", type=float, help="Noise prompt weights", default=[], dest='noise_prompt_weights')
-    vq_parser.add_argument("-lr",   "--learning_rate", type=float, help="Learning rate", default=0.2, dest='learning_rate')
-    vq_parser.add_argument("-lrd",  "--learning_rate_drops", nargs="*", type=float, help="When to drop learning rate (relative to iterations)", default=[75], dest='learning_rate_drops')
-    vq_parser.add_argument("-as",   "--auto_stop", type=str2bool, help="Auto stopping", default=False, dest='auto_stop')
-    vq_parser.add_argument("-cuts", "--num_cuts", type=int, help="Number of cuts", default=None, dest='num_cuts')
-    vq_parser.add_argument("-bats", "--batches", type=int, help="How many batches of cuts", default=None, dest='batches')
-    vq_parser.add_argument("-cutp", "--cut_power", type=float, help="Cut power", default=1., dest='cut_pow')
-    vq_parser.add_argument("--seed", type=str, help="Seed", default=None, dest='seed')
-    vq_parser.add_argument("-opt",  "--optimiser", type=str, help="Optimiser (Adam, AdamW, Adagrad, Adamax, DiffGrad, or AdamP)", default='Adam', dest='optimiser')
-    vq_parser.add_argument("-o",    "--output", type=str, help="Output file", default="output.png", dest='output')
-    vq_parser.add_argument("-vid",  "--video", type=str2bool, help="Create video frames?", default=False, dest='make_video')
-    vq_parser.add_argument("-d",    "--deterministic", type=str2bool, help="Enable cudnn.deterministic?", default=False, dest='cudnn_determinism')
-    vq_parser.add_argument("--palette", type=str, help="target palette", default=None, dest='palette')
-    vq_parser.add_argument("--transparent", type=str2bool, help="enable transparency", default=False, dest='transparency')
-    vq_parser.add_argument("--alpha_weight", type=float, help="strenght of alpha loss", default=1., dest='alpha_weight')
-    vq_parser.add_argument("--alpha_use_g", type=str2bool, help="use gaussian mask weighting", default=False, dest='alpha_use_g')
-    vq_parser.add_argument("--alpha_gamma", type=float, help="width-relative sigma for the alpha gaussian", default=4., dest='alpha_gamma')
-
-    return vq_parser
-
-def process_args(vq_parser, namespace=None):
-    global global_aspect_width
-    global cur_iteration, cur_anim_index, anim_output_files, anim_cur_zs, anim_next_zs;
-    global global_spot_file, global_given_args
-    global best_loss, best_iter, best_z, num_loss_drop, max_loss_drops, iter_drop_delay
-
-    if namespace == None:
-        # command line: use ARGV to get args
-        args = vq_parser.parse_args()
-    elif isnotebook() or hasattr(namespace, 'skip_args'):
-        args = vq_parser.parse_args(args=[], namespace=namespace)
-    else:
-        # sometimes there are both settings and cmd line
-        args = vq_parser.parse_args(namespace=namespace)        
-
-    # https://stackoverflow.com/a/66765255/1010653
-    global_given_args = {
-            opt.dest: getattr(args, opt.dest)
-            for opt in vq_parser._option_string_actions.values()
-            if hasattr(args, opt.dest) and opt.default != getattr(args, opt.dest)
-        }
-    # print("NON DEFAULT ARGS ARE")
-    # print(global_given_args)
-    # sys.exit(0)
-
-    if args.cudnn_determinism:
-        torch.backends.cudnn.deterministic = True
-
-    quality_to_clip_models_table = {
-        'clip': {
-            'draft': 'ViT-B/16',
-            'normal': 'ViT-B/32,ViT-B/16',
-            'better': 'RN50,ViT-B/32,ViT-B/16',
-            'best': 'RN50x4,ViT-B/32,ViT-B/16',
-            'supreme': 'RN50x4,RN101,ViT-B/32,ViT-B/16'
-        },
-        'slip': {
-            'draft': 'SLIP_VITB16',
-            'normal': 'SLIP_VITB16,SLIP_CC3M',
-            'better': 'SLIP_VITB16,SLIP_CC3M,SLIP_CC12M',
-            'best': 'SLIP_VITB16,SLIP_CC3M,SLIP_CC12M,SLIP_VITS16',
-            'supreme': 'SLIP_VITB16,SLIP_CC3M,SLIP_CC12M,SLIP_VITS16,SLIP_VITL16'
-        },
-        'mixed': {
-            'draft': 'ViT-B/16',
-            'normal': 'ViT-B/16,SLIP_VITB16',
-            'better': 'RN50,ViT-B/16,SLIP_VITB16',
-            'best': 'RN50x4,ViT-B/16,SLIP_VITB16',
-            'supreme': 'RN50x4,RN101,ViT-B/16,SLIP_VITB16'
-        }
-    }
-
-    quality_to_iterations_table = {
-        'draft': 200,
-        'normal': 250,
-        'better': 300,
-        'best': 350,
-        'supreme': 400
-    }
-    quality_to_scale_table = {
-        'draft': 1,
-        'normal': 2,
-        'better': 3,
-        'best': 4,
-        'supreme': 5
-    }
-    # this should be replaced with logic that does somethings
-    # smart based on available memory (eg: size, num_models, etc)
-    quality_to_num_cuts_table = {
-        'draft': 24,
-        'normal': 30,
-        'better': 36,
-        'best': 12,
-        'supreme': 8
-    }
-
-    quality_to_batches_table = {
-        'draft': 1,
-        'normal': 1,
-        'better': 1,
-        'best': 2,
-        'supreme': 4
-    }
-
-    if args.quality not in quality_to_clip_models_table[args.perceptors]:
-        print("Qualitfy setting not understood, aborting -> ", args.quality)
-        exit(1)
-
-    if args.clip_models is None:
-        args.clip_models = quality_to_clip_models_table[args.perceptors][args.quality]
-    if args.iterations is None:
-        args.iterations = quality_to_iterations_table[args.quality]
-    if args.num_cuts is None:
-        args.num_cuts = quality_to_num_cuts_table[args.quality]
-    if args.batches is None:
-        args.batches = quality_to_batches_table[args.quality]
-    if args.ezsize is None and args.scale is None:
-        args.scale = quality_to_scale_table[args.quality]
-
-    size_to_scale_table = {
-        'small': 1,
-        'medium': 2,
-        'large': 4
-    }
-    aspect_to_size_table = {
-        'square': [144, 144],
-        'portrait': [128, 160],
-        'widescreen': [192, 108]  # vqgan trims to 192x96, 384x208, 576x320, 768x432, 960x528, 1152x640, etc
-    }
-
-    # determine size if not set
-    if args.size is None:
-        size_scale = args.scale
-        if size_scale is None:
-            if args.ezsize in size_to_scale_table:
-                size_scale = size_to_scale_table[args.ezsize]
-            else:
-                print("EZ Size not understood, aborting -> ", args.ezsize)
-                exit(1)
-        if args.aspect in aspect_to_size_table:
-            base_size = aspect_to_size_table[args.aspect]
-            base_width = int(size_scale * base_size[0])
-            base_height = int(size_scale * base_size[1])
-            args.size = [base_width, base_height]
-        elif args.aspect =="retain" and args.init_image is not None:
-            img_pil = Image.open(real_glob(args.init_image)[0])
-            w,h = img_pil.size
-            asp = h/w #w is base
-            h = int(144*asp*size_scale)
-            w = int(144*size_scale)
-            args.size = [w,h]
-        else:
-            print("aspect not understood, aborting -> ", args.aspect)
-            exit(1)
-
-    global_aspect_width = args.size[0] / args.size[1]
-
-    if args.init_noise.lower() == "none":
-        args.init_noise = None
-
-    # Split text prompts using the pipe character
-    if args.prompts:
-        args.prompts = [phrase.strip() for phrase in args.prompts.split("|")]
-
-    # Split text prompts using the pipe character
-    if args.target_images:
-        args.target_images = [phrase.strip() for phrase in args.target_images.split("|")]
-
-    # Split text prompts using the pipe character
-    if args.spot_prompts:
-        args.spot_prompts = [phrase.strip() for phrase in args.spot_prompts.split("|")]
-
-    # Split text prompts using the pipe character
-    if args.spot_prompts_off:
-        args.spot_prompts_off = [phrase.strip() for phrase in args.spot_prompts_off.split("|")]
-
-    # Split text labels using the pipe character
-    if args.labels:
-        args.labels = [phrase.strip() for phrase in args.labels.split("|")]
-
-    # Split target images using the pipe character
-    if args.image_prompts:
-        args.image_prompts = real_glob(args.image_prompts)
-
-    # Split text prompts using the pipe character
-    if args.vector_prompts:
-        if args.vector_prompts.lower() == "none" or args.vector_prompts == "0":
-            # print("----> EMPTY VECTOR PROMPT")
-            args.vector_prompts = []
-        else:
-            args.vector_prompts = [phrase.strip() for phrase in args.vector_prompts.split("|")]
-    else:
-        # print("----> NO VECTOR PROMPT")
-        args.vector_prompts = []
-
-    if args.palette is not None:
-        args.palette = palette_from_string(args.palette)
-
-    if args.overlay_image is not None and args.overlay_every <= 0:
-        args.overlay_image = None
-
-    clip_models = args.clip_models.split(",")
-    args.clip_models = [model.strip() for model in clip_models]
-
-    # Make video steps directory
-    if args.make_video:
-        if not os.path.exists('steps'):
-            os.mkdir('steps')
-
-    if args.learning_rate_drops is None:
-        args.learning_rate_drops = []
-    else:
-        args.learning_rate_drops = [int(map_number(n, 0, 100, 0, args.iterations-1)) for n in args.learning_rate_drops]
-
-    # reset global animation variables
-    cur_iteration=0
-    best_iter = cur_iteration
-    best_loss = 1e20
-    num_loss_drop = 0
-    max_loss_drops = len(args.learning_rate_drops)
-    iter_drop_delay = 12
-    best_z = None
-
-    cur_anim_index=None
-    anim_output_files=[]
-    anim_cur_zs=[]
-    anim_next_zs=[]
-
-    global_spot_file = args.spot_file
-
-    return args
-
-def reset_settings():
-    global global_pixray_settings
-    global_pixray_settings = {}
-
-def add_settings(**kwargs):
-    global global_pixray_settings
-    for k, v in kwargs.items():
-        # TODO: is None / "None" a special case or not?
-        global_pixray_settings[k] = v
-        # if v is None or v == "None":
-        #     # just remove the key if it is there
-        #     global_pixray_settings.pop(k, None)
-        # else:
-
-def get_settings():
-    global global_pixray_settings
-    return global_pixray_settings.copy()
-
-
-def parse_known_args_with_optional_yaml(parser, namespace=None):
-    parser.add_argument(
-        '--config_file',
-        dest='config_file',
-        type=argparse.FileType(mode='r'))
-    
-    arguments, unknown = parser.parse_known_args(namespace=namespace)
-    if arguments.config_file:
-        data = yaml.load(arguments.config_file, Loader=yaml.SafeLoader)
-        delattr(arguments, 'config_file')
-        arg_dict = arguments.__dict__
-        for key, value in data.items():
-            if isinstance(value, list):
-                if(key not in arg_dict or arg_dict[key] is None):
-                    arg_dict[key] = []
-                for v in value:
-                    arg_dict[key].append(v)
-            else:
-                arg_dict[key] = value
-    
-    return arguments, unknown
-
-def apply_settings():
-    global global_pixray_settings
-    settingsDict = None
-
-    # first pass - only add things here that can trigger other parser additions (drawers, filters, losses)
-    # Create the parser
-    vq_parser = argparse.ArgumentParser(description='Image generation using VQGAN+CLIP')
-    vq_parser.add_argument("--drawer",  type=str, help="clipdraw, pixel, etc", default="vqgan", dest='drawer')
-    vq_parser.add_argument("--filters", type=str, help="Image Filtering", default=None, dest='filters')
-    vq_parser.add_argument("--losses", "--custom_loss", type=str, help="implement a custom loss type through LossInterface. example: edge", default=None, dest='custom_loss')
-    settingsDict = SimpleNamespace(**global_pixray_settings)
-    settings_core, unknown = parse_known_args_with_optional_yaml(vq_parser, namespace=settingsDict)
-
-    vq_parser = setup_parser(vq_parser)
-    class_table[settings_core.drawer].add_settings(vq_parser)
-
-    if settings_core.filters is not None:
-        # probably should DRY but...
-        filts = settings_core.filters.split(",")
-        filts = [f.strip() for f in filts]
-        for f in filts:
-            f = f.split(':')[0]
-            filters_class_table[f].add_settings(vq_parser)
-
-    if settings_core.custom_loss is not None:
-        # probably should DRY but...
-        custom_losses = settings_core.custom_loss.split(",")
-        custom_losses = [loss.strip() for loss in custom_losses]
-        for l in custom_losses:
-            l = l.split(':')[0]
-            loss_class_table[l].add_settings(vq_parser)
-
-    if len(global_pixray_settings) > 0:
-        # check for any bogus entries in the settings
-        dests = [d.dest for d in vq_parser._actions]
-        for k in global_pixray_settings:
-            if not k in dests and k != "skip_args":
-                raise ValueError(f"Requested setting not found, aborting: {k}={global_pixray_settings[k]}")
-
-        # convert dictionary to easyDict
-        # which can be used as an argparse namespace instead
-        # settingsDict = easydict.EasyDict(global_pixray_settings)
-        settingsDict = SimpleNamespace(**global_pixray_settings)
-
-    settings = process_args(vq_parser, settingsDict)
-    return settings
-
-def add_custom_loss(name, customloss):
-    # unfortunately this way it cannot access globals when initializing 
-    assert issubclass(customloss,LossInterface)
-    loss_class_table.update({
-        name: customloss,
-    })
-
-def command_line_override():
-    global global_pixray_settings
-    settingsDict = None
-    vq_parser = setup_parser()
-    settings = process_args(vq_parser)
-    return settings
-
-def main():
-    settings = apply_settings()
-    print(f"Running with {settings.num_cuts}x{settings.batches} = {settings.num_cuts*settings.batches} cuts")
-    do_init(settings)
-    do_run(settings)
-    # global drawer
-    # drawer.to_svg()
-
-if __name__ == '__main__':
-    main()
diff --git a/tests/__init__.py b/pixray/__init__.py
similarity index 100%
rename from tests/__init__.py
rename to pixray/__init__.py
diff --git a/pixray/drawers/__init__.py b/pixray/drawers/__init__.py
new file mode 100644
index 0000000..fb50cbb
--- /dev/null
+++ b/pixray/drawers/__init__.py
@@ -0,0 +1,1 @@
+from .pixel import Pixel
diff --git a/pixray/drawers/interface.py b/pixray/drawers/interface.py
new file mode 100644
index 0000000..175412b
--- /dev/null
+++ b/pixray/drawers/interface.py
@@ -0,0 +1,15 @@
+from torch import nn
+
+
+class DrawingInterface(nn.Module):
+    def forward(self, *args, **kwargs):
+        return self.synthesize(*args, **kwargs)
+
+    def synthesize(self, *args, **kwargs):
+        raise NotImplementedError
+
+    def decode(self, *args, **kwargs):
+        raise NotImplementedError
+
+    def replace_(self, *args, **kwargs):
+        raise NotImplementedError
diff --git a/pixray/drawers/pixel.py b/pixray/drawers/pixel.py
new file mode 100644
index 0000000..935c1aa
--- /dev/null
+++ b/pixray/drawers/pixel.py
@@ -0,0 +1,25 @@
+from torch import nn
+import torch.nn.functional as F
+
+from .interface import DrawingInterface
+
+
+class Pixel(DrawingInterface):
+    def __init__(self, init_image):
+        super().__init__()
+        self.image = nn.Parameter(init_image)
+
+    def synthesize(self, _=None):
+        return self.image
+
+    def decode(self, image, mode="bilinear"):
+        return F.interpolate(
+            image,
+            size=tuple(self.image.shape[-2:]),
+            mode=mode,
+            align_corners=False,
+        )
+
+    def replace_(self, image):
+        self.image.data.copy_(image.data)
+        return self
diff --git a/pixray/init/__init__.py b/pixray/init/__init__.py
new file mode 100644
index 0000000..8bc6bae
--- /dev/null
+++ b/pixray/init/__init__.py
@@ -0,0 +1,1 @@
+from .fractal import fractal
diff --git a/pixray/init/fractal.py b/pixray/init/fractal.py
new file mode 100644
index 0000000..650d2c7
--- /dev/null
+++ b/pixray/init/fractal.py
@@ -0,0 +1,47 @@
+import numpy as np
+import torch
+from perlin_numpy import generate_fractal_noise_2d
+
+
+def normalize(data):
+    return (data - np.min(data)) / (np.max(data) - np.min(data))
+
+
+# https://stats.stackexchange.com/a/289477
+def contrast_noise(n):
+    n = 0.9998 * n + 0.0001
+    n1 = n / (1 - n)
+    n2 = np.power(n1, -2)
+    n3 = 1 / (1 + n2)
+    return n3
+
+
+def fractal(shape):
+    n, c, h, w = shape
+    # scale up roughly as power of 2
+    if w > 1024 or h > 1024:
+        side, octp = 2048, 6
+    elif w > 512 or h > 512:
+        side, octp = 1024, 5
+    elif w > 256 or h > 256:
+        side, octp = 512, 4
+    else:
+        side, octp = 256, 3
+
+    return torch.from_numpy(
+        np.stack(
+            [
+                np.stack(
+                    [
+                        contrast_noise(
+                            normalize(
+                                generate_fractal_noise_2d((side, side), (32, 32), octp)
+                            )
+                        )[:h, :w]
+                        for _ in range(c)
+                    ]
+                )
+                for _ in range(n)
+            ]
+        )
+    ).float()
diff --git a/pixray/losses/__init__.py b/pixray/losses/__init__.py
new file mode 100644
index 0000000..7b428d7
--- /dev/null
+++ b/pixray/losses/__init__.py
@@ -0,0 +1,3 @@
+from .blip import BLIP
+from .clip import CLIP
+from .smoothness import Smoothness
diff --git a/pixray/losses/blip/__init__.py b/pixray/losses/blip/__init__.py
new file mode 100644
index 0000000..e1b6709
--- /dev/null
+++ b/pixray/losses/blip/__init__.py
@@ -0,0 +1,1 @@
+from .blip import BLIP
diff --git a/pixray/losses/blip/blip.py b/pixray/losses/blip/blip.py
new file mode 100644
index 0000000..e828f53
--- /dev/null
+++ b/pixray/losses/blip/blip.py
@@ -0,0 +1,66 @@
+import torch.nn.functional as F
+from torchvision import transforms
+from basicsr.utils.download_util import load_file_from_url
+
+from pixray.losses.interface import LossInterface
+from .blip_itm import blip_itm
+
+
+checkpoints = {
+    "model_base_retrieval_coco": "https://storage.googleapis.com/sfr-vision-language-research/BLIP/models/model_base_retrieval_coco.pth",
+}
+
+
+def parse_prompt(prompt):
+    vals = prompt.rsplit(":", 2)
+    vals = vals + ["", "1", "-inf"][len(vals) :]
+    return vals[0], float(vals[1]), float(vals[2])
+
+
+class BLIP(LossInterface):
+    def __init__(self, text_prompts, name="model_base_retrieval_coco"):
+        super().__init__()
+        self.name = name
+        self.text_prompts = text_prompts
+
+        checkpoint_path = load_file_from_url(
+            checkpoints[self.name],
+            "models",
+        )
+
+        self.image_size = 384
+        self.model = blip_itm(
+            pretrained=checkpoint_path, image_size=self.image_size, vit="base"
+        )
+        self.model.eval()
+        self.model.requires_grad_(False)
+
+        self.normalize = transforms.Normalize(
+            (0.48145466, 0.4578275, 0.40821073), (0.26862954, 0.26130258, 0.27577711)
+        )
+
+    def forward(self, image):
+        text_prompts = [parse_prompt(prompt) for prompt in self.text_prompts]
+
+        if image.shape[-2:] != (self.image_size, self.image_size):
+            image = F.interpolate(
+                image,
+                size=self.image_size,
+                mode="bicubic",
+                align_corners=False,
+            )
+
+        return -sum(
+            [
+                F.softmax(
+                    self.model(
+                        self.normalize(image),
+                        text_prompt,
+                        match_head="itm",
+                    ),
+                    dim=1,
+                )[:, 1].mean()
+                * weight
+                for text_prompt, weight, _ in text_prompts
+            ]
+        ) / len(text_prompts)
diff --git a/pixray/losses/blip/blip_base.py b/pixray/losses/blip/blip_base.py
new file mode 100644
index 0000000..a75655f
--- /dev/null
+++ b/pixray/losses/blip/blip_base.py
@@ -0,0 +1,305 @@
+"""
+ * Copyright (c) 2022, salesforce.com, inc.
+ * All rights reserved.
+ * SPDX-License-Identifier: BSD-3-Clause
+ * For full license text, see LICENSE.txt file in the repo root or https://opensource.org/licenses/BSD-3-Clause
+ * By Junnan Li
+"""
+import warnings
+
+warnings.filterwarnings("ignore")
+
+import os
+from .vit import VisionTransformer, interpolate_pos_embed
+from .med import BertConfig, BertModel, BertLMHeadModel
+from transformers import BertTokenizer
+import torch
+from torch import nn
+import torch.nn.functional as F
+from urllib.parse import urlparse
+from timm.models.hub import download_cached_file
+
+
+class BLIP_Base(nn.Module):
+    def __init__(
+        self,
+        med_config="",
+        image_size=224,
+        vit="base",
+        vit_grad_ckpt=False,
+        vit_ckpt_layer=0,
+    ):
+        """
+        Args:
+            med_config (str): path for the mixture of encoder-decoder model's configuration file
+            image_size (int): input image size
+            vit (str): model size of vision transformer
+        """
+        super().__init__()
+
+        self.visual_encoder, vision_width = create_vit(
+            vit, image_size, vit_grad_ckpt, vit_ckpt_layer
+        )
+        self.tokenizer = init_tokenizer()
+        med_config = BertConfig.from_json_file(med_config)
+        med_config.encoder_width = vision_width
+        self.text_encoder = BertModel(config=med_config, add_pooling_layer=False)
+
+    def forward(self, image, caption, mode):
+
+        assert mode in [
+            "image",
+            "text",
+            "multimodal",
+        ], "mode parameter must be image, text, or multimodal"
+        text = self.tokenizer(caption, return_tensors="pt").to(image.device)
+
+        if mode == "image":
+            # return image features
+            image_embeds = self.visual_encoder(image)
+            return image_embeds
+
+        elif mode == "text":
+            # return text features
+            text_output = self.text_encoder(
+                text.input_ids,
+                attention_mask=text.attention_mask,
+                return_dict=True,
+                mode="text",
+            )
+            return text_output.last_hidden_state
+
+        elif mode == "multimodal":
+            # return multimodel features
+            image_embeds = self.visual_encoder(image)
+            image_atts = torch.ones(image_embeds.size()[:-1], dtype=torch.long).to(
+                image.device
+            )
+
+            text.input_ids[:, 0] = self.tokenizer.enc_token_id
+            output = self.text_encoder(
+                text.input_ids,
+                attention_mask=text.attention_mask,
+                encoder_hidden_states=image_embeds,
+                encoder_attention_mask=image_atts,
+                return_dict=True,
+            )
+            return output.last_hidden_state
+
+
+class BLIP_Decoder(nn.Module):
+    def __init__(
+        self,
+        med_config="configs/med_config.json",
+        image_size=384,
+        vit="base",
+        vit_grad_ckpt=False,
+        vit_ckpt_layer=0,
+        prompt="a picture of ",
+    ):
+        """
+        Args:
+            med_config (str): path for the mixture of encoder-decoder model's configuration file
+            image_size (int): input image size
+            vit (str): model size of vision transformer
+        """
+        super().__init__()
+
+        self.visual_encoder, vision_width = create_vit(
+            vit, image_size, vit_grad_ckpt, vit_ckpt_layer
+        )
+        self.tokenizer = init_tokenizer()
+        med_config = BertConfig.from_json_file(med_config)
+        med_config.encoder_width = vision_width
+        self.text_decoder = BertLMHeadModel(config=med_config)
+
+        self.prompt = prompt
+        self.prompt_length = len(self.tokenizer(self.prompt).input_ids) - 1
+
+    def forward(self, image, caption):
+
+        image_embeds = self.visual_encoder(image)
+        image_atts = torch.ones(image_embeds.size()[:-1], dtype=torch.long).to(
+            image.device
+        )
+
+        text = self.tokenizer(
+            caption,
+            padding="longest",
+            truncation=True,
+            max_length=40,
+            return_tensors="pt",
+        ).to(image.device)
+
+        text.input_ids[:, 0] = self.tokenizer.bos_token_id
+
+        decoder_targets = text.input_ids.masked_fill(
+            text.input_ids == self.tokenizer.pad_token_id, -100
+        )
+        decoder_targets[:, : self.prompt_length] = -100
+
+        decoder_output = self.text_decoder(
+            text.input_ids,
+            attention_mask=text.attention_mask,
+            encoder_hidden_states=image_embeds,
+            encoder_attention_mask=image_atts,
+            labels=decoder_targets,
+            return_dict=True,
+        )
+        loss_lm = decoder_output.loss
+
+        return loss_lm
+
+    def generate(
+        self,
+        image,
+        sample=False,
+        num_beams=3,
+        max_length=30,
+        min_length=10,
+        top_p=0.9,
+        repetition_penalty=1.0,
+    ):
+        image_embeds = self.visual_encoder(image)
+
+        if not sample:
+            image_embeds = image_embeds.repeat_interleave(num_beams, dim=0)
+
+        image_atts = torch.ones(image_embeds.size()[:-1], dtype=torch.long).to(
+            image.device
+        )
+        model_kwargs = {
+            "encoder_hidden_states": image_embeds,
+            "encoder_attention_mask": image_atts,
+        }
+
+        prompt = [self.prompt] * image.size(0)
+        input_ids = self.tokenizer(prompt, return_tensors="pt").input_ids.to(
+            image.device
+        )
+        input_ids[:, 0] = self.tokenizer.bos_token_id
+        input_ids = input_ids[:, :-1]
+
+        if sample:
+            # nucleus sampling
+            outputs = self.text_decoder.generate(
+                input_ids=input_ids,
+                max_length=max_length,
+                min_length=min_length,
+                do_sample=True,
+                top_p=top_p,
+                num_return_sequences=1,
+                eos_token_id=self.tokenizer.sep_token_id,
+                pad_token_id=self.tokenizer.pad_token_id,
+                repetition_penalty=1.1,
+                **model_kwargs
+            )
+        else:
+            # beam search
+            outputs = self.text_decoder.generate(
+                input_ids=input_ids,
+                max_length=max_length,
+                min_length=min_length,
+                num_beams=num_beams,
+                eos_token_id=self.tokenizer.sep_token_id,
+                pad_token_id=self.tokenizer.pad_token_id,
+                repetition_penalty=repetition_penalty,
+                **model_kwargs
+            )
+
+        captions = []
+        for output in outputs:
+            caption = self.tokenizer.decode(output, skip_special_tokens=True)
+            captions.append(caption[len(self.prompt) :])
+        return captions
+
+
+def blip_decoder(pretrained="", **kwargs):
+    model = BLIP_Decoder(**kwargs)
+    if pretrained:
+        model, msg = load_checkpoint(model, pretrained)
+        assert len(msg.missing_keys) == 0
+    return model
+
+
+def blip_feature_extractor(pretrained="", **kwargs):
+    model = BLIP_Base(**kwargs)
+    if pretrained:
+        model, msg = load_checkpoint(model, pretrained)
+        assert len(msg.missing_keys) == 0
+    return model
+
+
+def init_tokenizer():
+    tokenizer = BertTokenizer.from_pretrained("bert-base-uncased")
+    tokenizer.add_special_tokens({"bos_token": "[DEC]"})
+    tokenizer.add_special_tokens({"additional_special_tokens": ["[ENC]"]})
+    tokenizer.enc_token_id = tokenizer.additional_special_tokens_ids[0]
+    return tokenizer
+
+
+def create_vit(
+    vit, image_size, use_grad_checkpointing=False, ckpt_layer=0, drop_path_rate=0
+):
+
+    assert vit in ["base", "large"], "vit parameter must be base or large"
+    if vit == "base":
+        vision_width = 768
+        visual_encoder = VisionTransformer(
+            img_size=image_size,
+            patch_size=16,
+            embed_dim=vision_width,
+            depth=12,
+            num_heads=12,
+            use_grad_checkpointing=use_grad_checkpointing,
+            ckpt_layer=ckpt_layer,
+            drop_path_rate=0 or drop_path_rate,
+        )
+    elif vit == "large":
+        vision_width = 1024
+        visual_encoder = VisionTransformer(
+            img_size=image_size,
+            patch_size=16,
+            embed_dim=vision_width,
+            depth=24,
+            num_heads=16,
+            use_grad_checkpointing=use_grad_checkpointing,
+            ckpt_layer=ckpt_layer,
+            drop_path_rate=0.1 or drop_path_rate,
+        )
+    return visual_encoder, vision_width
+
+
+def is_url(url_or_filename):
+    parsed = urlparse(url_or_filename)
+    return parsed.scheme in ("http", "https")
+
+
+def load_checkpoint(model, url_or_filename):
+    if is_url(url_or_filename):
+        cached_file = download_cached_file(
+            url_or_filename, check_hash=False, progress=True
+        )
+        checkpoint = torch.load(cached_file, map_location="cpu")
+    elif os.path.isfile(url_or_filename):
+        checkpoint = torch.load(url_or_filename, map_location="cpu")
+    else:
+        raise RuntimeError("checkpoint url or path is invalid")
+
+    state_dict = checkpoint["model"]
+
+    state_dict["visual_encoder.pos_embed"] = interpolate_pos_embed(
+        state_dict["visual_encoder.pos_embed"], model.visual_encoder
+    )
+    if "visual_encoder_m.pos_embed" in model.state_dict().keys():
+        state_dict["visual_encoder_m.pos_embed"] = interpolate_pos_embed(
+            state_dict["visual_encoder_m.pos_embed"], model.visual_encoder_m
+        )
+    for key in model.state_dict().keys():
+        if key in state_dict.keys():
+            if state_dict[key].shape != model.state_dict()[key].shape:
+                del state_dict[key]
+
+    msg = model.load_state_dict(state_dict, strict=False)
+    print("load checkpoint from %s" % url_or_filename)
+    return model, msg
diff --git a/pixray/losses/blip/blip_itm.py b/pixray/losses/blip/blip_itm.py
new file mode 100644
index 0000000..b3cfc78
--- /dev/null
+++ b/pixray/losses/blip/blip_itm.py
@@ -0,0 +1,92 @@
+from .med import BertConfig, BertModel
+import os
+import torch
+from torch import nn
+import torch.nn.functional as F
+
+from .blip_base import create_vit, init_tokenizer, load_checkpoint
+
+CURRENT_DIR = os.path.dirname(os.path.realpath(__file__))
+
+
+class BLIP_ITM(nn.Module):
+    def __init__(
+        self,
+        med_config=f"{CURRENT_DIR}/configs/med_config.json",
+        image_size=384,
+        vit="base",
+        vit_grad_ckpt=False,
+        vit_ckpt_layer=0,
+        embed_dim=256,
+    ):
+        """
+        Args:
+            med_config (str): path for the mixture of encoder-decoder model's configuration file
+            image_size (int): input image size
+            vit (str): model size of vision transformer
+        """
+        super().__init__()
+
+        self.visual_encoder, vision_width = create_vit(
+            vit, image_size, vit_grad_ckpt, vit_ckpt_layer
+        )
+        self.tokenizer = init_tokenizer()
+        med_config = BertConfig.from_json_file(med_config)
+        med_config.encoder_width = vision_width
+        self.text_encoder = BertModel(config=med_config, add_pooling_layer=False)
+
+        text_width = self.text_encoder.config.hidden_size
+
+        self.vision_proj = nn.Linear(vision_width, embed_dim)
+        self.text_proj = nn.Linear(text_width, embed_dim)
+
+        self.itm_head = nn.Linear(text_width, 2)
+
+    def forward(self, image, caption, match_head="itm"):
+
+        image_embeds = self.visual_encoder(image)
+        image_atts = torch.ones(image_embeds.size()[:-1], dtype=torch.long).to(
+            image.device
+        )
+
+        text = self.tokenizer(
+            caption,
+            padding="max_length",
+            truncation=True,
+            max_length=35,
+            return_tensors="pt",
+        ).to(image.device)
+
+        if match_head == "itm":
+            output = self.text_encoder(
+                text.input_ids,
+                attention_mask=text.attention_mask,
+                encoder_hidden_states=image_embeds,
+                encoder_attention_mask=image_atts,
+                return_dict=True,
+            )
+            itm_output = self.itm_head(output.last_hidden_state[:, 0, :])
+            return itm_output
+
+        elif match_head == "itc":
+            text_output = self.text_encoder(
+                text.input_ids,
+                attention_mask=text.attention_mask,
+                return_dict=True,
+                mode="text",
+            )
+            image_feat = F.normalize(self.vision_proj(image_embeds[:, 0, :]), dim=-1)
+            text_feat = F.normalize(
+                self.text_proj(text_output.last_hidden_state[:, 0, :]), dim=-1
+            )
+
+            sim = image_feat @ text_feat.t()
+            return sim
+
+
+def blip_itm(pretrained="", **kwargs):
+    model = BLIP_ITM(**kwargs)
+    if pretrained:
+        model, msg = load_checkpoint(model, pretrained)
+        assert len(msg.missing_keys) == 0
+    return model
diff --git a/pixray/losses/blip/configs/med_config.json b/pixray/losses/blip/configs/med_config.json
new file mode 100644
index 0000000..794312f
--- /dev/null
+++ b/pixray/losses/blip/configs/med_config.json
@@ -0,0 +1,19 @@
+{
+  "architectures": ["BertModel"],
+  "attention_probs_dropout_prob": 0.1,
+  "hidden_act": "gelu",
+  "hidden_dropout_prob": 0.1,
+  "hidden_size": 768,
+  "initializer_range": 0.02,
+  "intermediate_size": 3072,
+  "layer_norm_eps": 1e-12,
+  "max_position_embeddings": 512,
+  "model_type": "bert",
+  "num_attention_heads": 12,
+  "num_hidden_layers": 12,
+  "pad_token_id": 0,
+  "type_vocab_size": 2,
+  "vocab_size": 30524,
+  "encoder_width": 768,
+  "add_cross_attention": true
+}
diff --git a/pixray/losses/blip/med.py b/pixray/losses/blip/med.py
new file mode 100644
index 0000000..49ef824
--- /dev/null
+++ b/pixray/losses/blip/med.py
@@ -0,0 +1,943 @@
+'''
+ * Copyright (c) 2022, salesforce.com, inc.
+ * All rights reserved.
+ * SPDX-License-Identifier: BSD-3-Clause
+ * For full license text, see LICENSE.txt file in the repo root or https://opensource.org/licenses/BSD-3-Clause
+ * By Junnan Li
+ * Based on huggingface code base
+ * https://github.com/huggingface/transformers/blob/v4.15.0/src/transformers/models/bert
+'''
+
+import math
+from typing import Tuple
+
+import torch
+from torch import Tensor, device, nn
+import torch.utils.checkpoint
+from torch import nn
+from torch.nn import CrossEntropyLoss
+import torch.nn.functional as F
+
+from transformers.activations import ACT2FN
+from transformers.modeling_outputs import (
+    BaseModelOutputWithPastAndCrossAttentions,
+    BaseModelOutputWithPoolingAndCrossAttentions,
+    CausalLMOutputWithCrossAttentions,
+)
+from transformers.modeling_utils import (
+    PreTrainedModel,
+    apply_chunking_to_forward,
+    find_pruneable_heads_and_indices,
+    prune_linear_layer,
+)
+from transformers.utils import logging
+from transformers.models.bert.configuration_bert import BertConfig
+
+
+logger = logging.get_logger(__name__)
+
+
+class BertEmbeddings(nn.Module):
+    """Construct the embeddings from word and position embeddings."""
+
+    def __init__(self, config):
+        super().__init__()
+        self.word_embeddings = nn.Embedding(config.vocab_size, config.hidden_size, padding_idx=config.pad_token_id)
+        self.position_embeddings = nn.Embedding(config.max_position_embeddings, config.hidden_size)
+
+        # self.LayerNorm is not snake-cased to stick with TensorFlow model variable name and be able to load
+        # any TensorFlow checkpoint file
+        self.LayerNorm = nn.LayerNorm(config.hidden_size, eps=config.layer_norm_eps)
+        self.dropout = nn.Dropout(config.hidden_dropout_prob)
+
+        # position_ids (1, len position emb) is contiguous in memory and exported when serialized
+        self.register_buffer("position_ids", torch.arange(config.max_position_embeddings).expand((1, -1)))
+        self.position_embedding_type = getattr(config, "position_embedding_type", "absolute")
+        
+        self.config = config
+
+    def forward(
+        self, input_ids=None, position_ids=None, inputs_embeds=None, past_key_values_length=0
+    ):
+        if input_ids is not None:
+            input_shape = input_ids.size()
+        else:
+            input_shape = inputs_embeds.size()[:-1]
+
+        seq_length = input_shape[1]
+
+        if position_ids is None:
+            position_ids = self.position_ids[:, past_key_values_length : seq_length + past_key_values_length]
+
+        if inputs_embeds is None:
+            inputs_embeds = self.word_embeddings(input_ids)
+
+        embeddings = inputs_embeds
+
+        if self.position_embedding_type == "absolute":
+            position_embeddings = self.position_embeddings(position_ids)
+            embeddings += position_embeddings
+        embeddings = self.LayerNorm(embeddings)
+        embeddings = self.dropout(embeddings)
+        return embeddings
+
+
+class BertSelfAttention(nn.Module):
+    def __init__(self, config, is_cross_attention):
+        super().__init__()
+        self.config = config
+        if config.hidden_size % config.num_attention_heads != 0 and not hasattr(config, "embedding_size"):
+            raise ValueError(
+                "The hidden size (%d) is not a multiple of the number of attention "
+                "heads (%d)" % (config.hidden_size, config.num_attention_heads)
+            )
+        
+        self.num_attention_heads = config.num_attention_heads
+        self.attention_head_size = int(config.hidden_size / config.num_attention_heads)
+        self.all_head_size = self.num_attention_heads * self.attention_head_size
+
+        self.query = nn.Linear(config.hidden_size, self.all_head_size)
+        if is_cross_attention:
+            self.key = nn.Linear(config.encoder_width, self.all_head_size)
+            self.value = nn.Linear(config.encoder_width, self.all_head_size)
+        else:
+            self.key = nn.Linear(config.hidden_size, self.all_head_size)
+            self.value = nn.Linear(config.hidden_size, self.all_head_size)
+
+        self.dropout = nn.Dropout(config.attention_probs_dropout_prob)
+        self.position_embedding_type = getattr(config, "position_embedding_type", "absolute")
+        if self.position_embedding_type == "relative_key" or self.position_embedding_type == "relative_key_query":
+            self.max_position_embeddings = config.max_position_embeddings
+            self.distance_embedding = nn.Embedding(2 * config.max_position_embeddings - 1, self.attention_head_size)
+        self.save_attention = False   
+            
+    def save_attn_gradients(self, attn_gradients):
+        self.attn_gradients = attn_gradients
+        
+    def get_attn_gradients(self):
+        return self.attn_gradients
+    
+    def save_attention_map(self, attention_map):
+        self.attention_map = attention_map
+        
+    def get_attention_map(self):
+        return self.attention_map
+    
+    def transpose_for_scores(self, x):
+        new_x_shape = x.size()[:-1] + (self.num_attention_heads, self.attention_head_size)
+        x = x.view(*new_x_shape)
+        return x.permute(0, 2, 1, 3)
+
+    def forward(
+        self,
+        hidden_states,
+        attention_mask=None,
+        head_mask=None,
+        encoder_hidden_states=None,
+        encoder_attention_mask=None,
+        past_key_value=None,
+        output_attentions=False,
+    ):
+        mixed_query_layer = self.query(hidden_states)
+
+        # If this is instantiated as a cross-attention module, the keys
+        # and values come from an encoder; the attention mask needs to be
+        # such that the encoder's padding tokens are not attended to.
+        is_cross_attention = encoder_hidden_states is not None
+
+        if is_cross_attention:
+            key_layer = self.transpose_for_scores(self.key(encoder_hidden_states))
+            value_layer = self.transpose_for_scores(self.value(encoder_hidden_states))
+            attention_mask = encoder_attention_mask
+        elif past_key_value is not None:
+            key_layer = self.transpose_for_scores(self.key(hidden_states))
+            value_layer = self.transpose_for_scores(self.value(hidden_states))
+            key_layer = torch.cat([past_key_value[0], key_layer], dim=2)
+            value_layer = torch.cat([past_key_value[1], value_layer], dim=2)
+        else:
+            key_layer = self.transpose_for_scores(self.key(hidden_states))
+            value_layer = self.transpose_for_scores(self.value(hidden_states))
+
+        query_layer = self.transpose_for_scores(mixed_query_layer)
+
+        past_key_value = (key_layer, value_layer)
+
+        # Take the dot product between "query" and "key" to get the raw attention scores.
+        attention_scores = torch.matmul(query_layer, key_layer.transpose(-1, -2))
+
+        if self.position_embedding_type == "relative_key" or self.position_embedding_type == "relative_key_query":
+            seq_length = hidden_states.size()[1]
+            position_ids_l = torch.arange(seq_length, dtype=torch.long, device=hidden_states.device).view(-1, 1)
+            position_ids_r = torch.arange(seq_length, dtype=torch.long, device=hidden_states.device).view(1, -1)
+            distance = position_ids_l - position_ids_r
+            positional_embedding = self.distance_embedding(distance + self.max_position_embeddings - 1)
+            positional_embedding = positional_embedding.to(dtype=query_layer.dtype)  # fp16 compatibility
+
+            if self.position_embedding_type == "relative_key":
+                relative_position_scores = torch.einsum("bhld,lrd->bhlr", query_layer, positional_embedding)
+                attention_scores = attention_scores + relative_position_scores
+            elif self.position_embedding_type == "relative_key_query":
+                relative_position_scores_query = torch.einsum("bhld,lrd->bhlr", query_layer, positional_embedding)
+                relative_position_scores_key = torch.einsum("bhrd,lrd->bhlr", key_layer, positional_embedding)
+                attention_scores = attention_scores + relative_position_scores_query + relative_position_scores_key
+
+        attention_scores = attention_scores / math.sqrt(self.attention_head_size)
+        if attention_mask is not None:
+            # Apply the attention mask is (precomputed for all layers in BertModel forward() function)
+            attention_scores = attention_scores + attention_mask
+
+        # Normalize the attention scores to probabilities.
+        attention_probs = nn.Softmax(dim=-1)(attention_scores)
+        
+        if is_cross_attention and self.save_attention:
+            self.save_attention_map(attention_probs)
+            attention_probs.register_hook(self.save_attn_gradients)         
+
+        # This is actually dropping out entire tokens to attend to, which might
+        # seem a bit unusual, but is taken from the original Transformer paper.
+        attention_probs_dropped = self.dropout(attention_probs)
+
+        # Mask heads if we want to
+        if head_mask is not None:
+            attention_probs_dropped = attention_probs_dropped * head_mask
+
+        context_layer = torch.matmul(attention_probs_dropped, value_layer)
+
+        context_layer = context_layer.permute(0, 2, 1, 3).contiguous()
+        new_context_layer_shape = context_layer.size()[:-2] + (self.all_head_size,)
+        context_layer = context_layer.view(*new_context_layer_shape)
+
+        outputs = (context_layer, attention_probs) if output_attentions else (context_layer,)
+
+        outputs = outputs + (past_key_value,)
+        return outputs
+
+
+class BertSelfOutput(nn.Module):
+    def __init__(self, config):
+        super().__init__()
+        self.dense = nn.Linear(config.hidden_size, config.hidden_size)
+        self.LayerNorm = nn.LayerNorm(config.hidden_size, eps=config.layer_norm_eps)
+        self.dropout = nn.Dropout(config.hidden_dropout_prob)
+
+    def forward(self, hidden_states, input_tensor):
+        hidden_states = self.dense(hidden_states)
+        hidden_states = self.dropout(hidden_states)
+        hidden_states = self.LayerNorm(hidden_states + input_tensor)
+        return hidden_states
+
+
+class BertAttention(nn.Module):
+    def __init__(self, config, is_cross_attention=False):
+        super().__init__()
+        self.self = BertSelfAttention(config, is_cross_attention)
+        self.output = BertSelfOutput(config)
+        self.pruned_heads = set()
+
+    def prune_heads(self, heads):
+        if len(heads) == 0:
+            return
+        heads, index = find_pruneable_heads_and_indices(
+            heads, self.self.num_attention_heads, self.self.attention_head_size, self.pruned_heads
+        )
+
+        # Prune linear layers
+        self.self.query = prune_linear_layer(self.self.query, index)
+        self.self.key = prune_linear_layer(self.self.key, index)
+        self.self.value = prune_linear_layer(self.self.value, index)
+        self.output.dense = prune_linear_layer(self.output.dense, index, dim=1)
+
+        # Update hyper params and store pruned heads
+        self.self.num_attention_heads = self.self.num_attention_heads - len(heads)
+        self.self.all_head_size = self.self.attention_head_size * self.self.num_attention_heads
+        self.pruned_heads = self.pruned_heads.union(heads)
+
+    def forward(
+        self,
+        hidden_states,
+        attention_mask=None,
+        head_mask=None,
+        encoder_hidden_states=None,
+        encoder_attention_mask=None,
+        past_key_value=None,
+        output_attentions=False,
+    ):
+        self_outputs = self.self(
+            hidden_states,
+            attention_mask,
+            head_mask,
+            encoder_hidden_states,
+            encoder_attention_mask,
+            past_key_value,
+            output_attentions,
+        )
+        attention_output = self.output(self_outputs[0], hidden_states)
+        outputs = (attention_output,) + self_outputs[1:]  # add attentions if we output them
+        return outputs
+
+
+class BertIntermediate(nn.Module):
+    def __init__(self, config):
+        super().__init__()
+        self.dense = nn.Linear(config.hidden_size, config.intermediate_size)
+        if isinstance(config.hidden_act, str):
+            self.intermediate_act_fn = ACT2FN[config.hidden_act]
+        else:
+            self.intermediate_act_fn = config.hidden_act
+
+    def forward(self, hidden_states):
+        hidden_states = self.dense(hidden_states)
+        hidden_states = self.intermediate_act_fn(hidden_states)
+        return hidden_states
+
+
+class BertOutput(nn.Module):
+    def __init__(self, config):
+        super().__init__()
+        self.dense = nn.Linear(config.intermediate_size, config.hidden_size)
+        self.LayerNorm = nn.LayerNorm(config.hidden_size, eps=config.layer_norm_eps)
+        self.dropout = nn.Dropout(config.hidden_dropout_prob)
+
+    def forward(self, hidden_states, input_tensor):
+        hidden_states = self.dense(hidden_states)
+        hidden_states = self.dropout(hidden_states)
+        hidden_states = self.LayerNorm(hidden_states + input_tensor)
+        return hidden_states
+
+
+class BertLayer(nn.Module):
+    def __init__(self, config, layer_num):
+        super().__init__()
+        self.config = config
+        self.chunk_size_feed_forward = config.chunk_size_feed_forward
+        self.seq_len_dim = 1
+        self.attention = BertAttention(config)      
+        self.layer_num = layer_num          
+        if self.config.add_cross_attention:
+            self.crossattention = BertAttention(config, is_cross_attention=self.config.add_cross_attention)
+        self.intermediate = BertIntermediate(config)
+        self.output = BertOutput(config)
+
+    def forward(
+        self,
+        hidden_states,
+        attention_mask=None,
+        head_mask=None,
+        encoder_hidden_states=None,
+        encoder_attention_mask=None,
+        past_key_value=None,
+        output_attentions=False,
+        mode=None,
+    ):
+        # decoder uni-directional self-attention cached key/values tuple is at positions 1,2
+        self_attn_past_key_value = past_key_value[:2] if past_key_value is not None else None
+        self_attention_outputs = self.attention(
+            hidden_states,
+            attention_mask,
+            head_mask,
+            output_attentions=output_attentions,
+            past_key_value=self_attn_past_key_value,
+        )
+        attention_output = self_attention_outputs[0]
+
+        outputs = self_attention_outputs[1:-1]
+        present_key_value = self_attention_outputs[-1]
+
+        if mode=='multimodal':
+            assert encoder_hidden_states is not None, "encoder_hidden_states must be given for cross-attention layers"
+
+            cross_attention_outputs = self.crossattention(
+                attention_output,
+                attention_mask,
+                head_mask,
+                encoder_hidden_states,
+                encoder_attention_mask,
+                output_attentions=output_attentions,
+            )
+            attention_output = cross_attention_outputs[0]
+            outputs = outputs + cross_attention_outputs[1:-1]  # add cross attentions if we output attention weights                               
+        layer_output = apply_chunking_to_forward(
+            self.feed_forward_chunk, self.chunk_size_feed_forward, self.seq_len_dim, attention_output
+        )
+        outputs = (layer_output,) + outputs
+
+        outputs = outputs + (present_key_value,)
+
+        return outputs
+
+    def feed_forward_chunk(self, attention_output):
+        intermediate_output = self.intermediate(attention_output)
+        layer_output = self.output(intermediate_output, attention_output)
+        return layer_output
+
+
+class BertEncoder(nn.Module):
+    def __init__(self, config):
+        super().__init__()
+        self.config = config
+        self.layer = nn.ModuleList([BertLayer(config,i) for i in range(config.num_hidden_layers)])
+        self.gradient_checkpointing = False
+
+    def forward(
+        self,
+        hidden_states,
+        attention_mask=None,
+        head_mask=None,
+        encoder_hidden_states=None,
+        encoder_attention_mask=None,
+        past_key_values=None,
+        use_cache=None,
+        output_attentions=False,
+        output_hidden_states=False,
+        return_dict=True,
+        mode='multimodal',
+    ):
+        all_hidden_states = () if output_hidden_states else None
+        all_self_attentions = () if output_attentions else None
+        all_cross_attentions = () if output_attentions and self.config.add_cross_attention else None
+
+        next_decoder_cache = () if use_cache else None
+               
+        for i in range(self.config.num_hidden_layers):
+            layer_module = self.layer[i]
+            if output_hidden_states:
+                all_hidden_states = all_hidden_states + (hidden_states,)
+
+            layer_head_mask = head_mask[i] if head_mask is not None else None
+            past_key_value = past_key_values[i] if past_key_values is not None else None
+
+            if self.gradient_checkpointing and self.training:
+
+                if use_cache:
+                    logger.warn(
+                        "`use_cache=True` is incompatible with gradient checkpointing. Setting `use_cache=False`..."
+                    )
+                    use_cache = False
+
+                def create_custom_forward(module):
+                    def custom_forward(*inputs):
+                        return module(*inputs, past_key_value, output_attentions)
+
+                    return custom_forward
+
+                layer_outputs = torch.utils.checkpoint.checkpoint(
+                    create_custom_forward(layer_module),
+                    hidden_states,
+                    attention_mask,
+                    layer_head_mask,
+                    encoder_hidden_states,
+                    encoder_attention_mask,
+                    mode=mode,
+                )
+            else:
+                layer_outputs = layer_module(
+                    hidden_states,
+                    attention_mask,
+                    layer_head_mask,
+                    encoder_hidden_states,
+                    encoder_attention_mask,
+                    past_key_value,
+                    output_attentions,
+                    mode=mode,
+                )
+
+            hidden_states = layer_outputs[0]
+            if use_cache:
+                next_decoder_cache += (layer_outputs[-1],)
+            if output_attentions:
+                all_self_attentions = all_self_attentions + (layer_outputs[1],)
+
+        if output_hidden_states:
+            all_hidden_states = all_hidden_states + (hidden_states,)
+
+        if not return_dict:
+            return tuple(
+                v
+                for v in [
+                    hidden_states,
+                    next_decoder_cache,
+                    all_hidden_states,
+                    all_self_attentions,
+                    all_cross_attentions,
+                ]
+                if v is not None
+            )
+        return BaseModelOutputWithPastAndCrossAttentions(
+            last_hidden_state=hidden_states,
+            past_key_values=next_decoder_cache,
+            hidden_states=all_hidden_states,
+            attentions=all_self_attentions,
+            cross_attentions=all_cross_attentions,
+        )
+
+
+class BertPooler(nn.Module):
+    def __init__(self, config):
+        super().__init__()
+        self.dense = nn.Linear(config.hidden_size, config.hidden_size)
+        self.activation = nn.Tanh()
+
+    def forward(self, hidden_states):
+        # We "pool" the model by simply taking the hidden state corresponding
+        # to the first token.
+        first_token_tensor = hidden_states[:, 0]
+        pooled_output = self.dense(first_token_tensor)
+        pooled_output = self.activation(pooled_output)
+        return pooled_output
+
+
+class BertPredictionHeadTransform(nn.Module):
+    def __init__(self, config):
+        super().__init__()
+        self.dense = nn.Linear(config.hidden_size, config.hidden_size)
+        if isinstance(config.hidden_act, str):
+            self.transform_act_fn = ACT2FN[config.hidden_act]
+        else:
+            self.transform_act_fn = config.hidden_act
+        self.LayerNorm = nn.LayerNorm(config.hidden_size, eps=config.layer_norm_eps)
+
+    def forward(self, hidden_states):
+        hidden_states = self.dense(hidden_states)
+        hidden_states = self.transform_act_fn(hidden_states)
+        hidden_states = self.LayerNorm(hidden_states)
+        return hidden_states
+
+
+class BertLMPredictionHead(nn.Module):
+    def __init__(self, config):
+        super().__init__()
+        self.transform = BertPredictionHeadTransform(config)
+
+        # The output weights are the same as the input embeddings, but there is
+        # an output-only bias for each token.
+        self.decoder = nn.Linear(config.hidden_size, config.vocab_size, bias=False)
+
+        self.bias = nn.Parameter(torch.zeros(config.vocab_size))
+
+        # Need a link between the two variables so that the bias is correctly resized with `resize_token_embeddings`
+        self.decoder.bias = self.bias
+
+    def forward(self, hidden_states):
+        hidden_states = self.transform(hidden_states)
+        hidden_states = self.decoder(hidden_states)
+        return hidden_states
+
+
+class BertOnlyMLMHead(nn.Module):
+    def __init__(self, config):
+        super().__init__()
+        self.predictions = BertLMPredictionHead(config)
+
+    def forward(self, sequence_output):
+        prediction_scores = self.predictions(sequence_output)
+        return prediction_scores
+
+
+class BertPreTrainedModel(PreTrainedModel):
+    """
+    An abstract class to handle weights initialization and a simple interface for downloading and loading pretrained
+    models.
+    """
+
+    config_class = BertConfig
+    base_model_prefix = "bert"
+    _keys_to_ignore_on_load_missing = [r"position_ids"]
+
+    def _init_weights(self, module):
+        """ Initialize the weights """
+        if isinstance(module, (nn.Linear, nn.Embedding)):
+            # Slightly different from the TF version which uses truncated_normal for initialization
+            # cf https://github.com/pytorch/pytorch/pull/5617
+            module.weight.data.normal_(mean=0.0, std=self.config.initializer_range)
+        elif isinstance(module, nn.LayerNorm):
+            module.bias.data.zero_()
+            module.weight.data.fill_(1.0)
+        if isinstance(module, nn.Linear) and module.bias is not None:
+            module.bias.data.zero_()
+
+
+class BertModel(BertPreTrainedModel):
+    """
+    The model can behave as an encoder (with only self-attention) as well as a decoder, in which case a layer of
+    cross-attention is added between the self-attention layers, following the architecture described in `Attention is
+    all you need <https://arxiv.org/abs/1706.03762>`__ by Ashish Vaswani, Noam Shazeer, Niki Parmar, Jakob Uszkoreit,
+    Llion Jones, Aidan N. Gomez, Lukasz Kaiser and Illia Polosukhin.
+    argument and :obj:`add_cross_attention` set to :obj:`True`; an :obj:`encoder_hidden_states` is then expected as an
+    input to the forward pass.
+    """
+
+    def __init__(self, config, add_pooling_layer=True):
+        super().__init__(config)
+        self.config = config
+
+        self.embeddings = BertEmbeddings(config)
+        
+        self.encoder = BertEncoder(config)
+
+        self.pooler = BertPooler(config) if add_pooling_layer else None
+
+        self.init_weights()
+ 
+
+    def get_input_embeddings(self):
+        return self.embeddings.word_embeddings
+
+    def set_input_embeddings(self, value):
+        self.embeddings.word_embeddings = value
+
+    def _prune_heads(self, heads_to_prune):
+        """
+        Prunes heads of the model. heads_to_prune: dict of {layer_num: list of heads to prune in this layer} See base
+        class PreTrainedModel
+        """
+        for layer, heads in heads_to_prune.items():
+            self.encoder.layer[layer].attention.prune_heads(heads)
+
+    
+    def get_extended_attention_mask(self, attention_mask: Tensor, input_shape: Tuple[int], device: device, is_decoder: bool) -> Tensor:
+        """
+        Makes broadcastable attention and causal masks so that future and masked tokens are ignored.
+
+        Arguments:
+            attention_mask (:obj:`torch.Tensor`):
+                Mask with ones indicating tokens to attend to, zeros for tokens to ignore.
+            input_shape (:obj:`Tuple[int]`):
+                The shape of the input to the model.
+            device: (:obj:`torch.device`):
+                The device of the input to the model.
+
+        Returns:
+            :obj:`torch.Tensor` The extended attention mask, with a the same dtype as :obj:`attention_mask.dtype`.
+        """
+        # We can provide a self-attention mask of dimensions [batch_size, from_seq_length, to_seq_length]
+        # ourselves in which case we just need to make it broadcastable to all heads.
+        if attention_mask.dim() == 3:
+            extended_attention_mask = attention_mask[:, None, :, :]
+        elif attention_mask.dim() == 2:
+            # Provided a padding mask of dimensions [batch_size, seq_length]
+            # - if the model is a decoder, apply a causal mask in addition to the padding mask
+            # - if the model is an encoder, make the mask broadcastable to [batch_size, num_heads, seq_length, seq_length]
+            if is_decoder:
+                batch_size, seq_length = input_shape
+
+                seq_ids = torch.arange(seq_length, device=device)
+                causal_mask = seq_ids[None, None, :].repeat(batch_size, seq_length, 1) <= seq_ids[None, :, None]
+                # in case past_key_values are used we need to add a prefix ones mask to the causal mask
+                # causal and attention masks must have same type with pytorch version < 1.3
+                causal_mask = causal_mask.to(attention_mask.dtype)
+   
+                if causal_mask.shape[1] < attention_mask.shape[1]:
+                    prefix_seq_len = attention_mask.shape[1] - causal_mask.shape[1]
+                    causal_mask = torch.cat(
+                        [
+                            torch.ones((batch_size, seq_length, prefix_seq_len), device=device, dtype=causal_mask.dtype),
+                            causal_mask,
+                        ],
+                        axis=-1,
+                    )                     
+
+                extended_attention_mask = causal_mask[:, None, :, :] * attention_mask[:, None, None, :]
+            else:
+                extended_attention_mask = attention_mask[:, None, None, :]
+        else:
+            raise ValueError(
+                "Wrong shape for input_ids (shape {}) or attention_mask (shape {})".format(
+                    input_shape, attention_mask.shape
+                )
+            )
+
+        # Since attention_mask is 1.0 for positions we want to attend and 0.0 for
+        # masked positions, this operation will create a tensor which is 0.0 for
+        # positions we want to attend and -10000.0 for masked positions.
+        # Since we are adding it to the raw scores before the softmax, this is
+        # effectively the same as removing these entirely.
+        extended_attention_mask = extended_attention_mask.to(dtype=self.dtype)  # fp16 compatibility
+        extended_attention_mask = (1.0 - extended_attention_mask) * -10000.0
+        return extended_attention_mask
+    
+    def forward(
+        self,
+        input_ids=None,
+        attention_mask=None,
+        position_ids=None,
+        head_mask=None,
+        inputs_embeds=None,
+        encoder_embeds=None,
+        encoder_hidden_states=None,
+        encoder_attention_mask=None,
+        past_key_values=None,
+        use_cache=None,
+        output_attentions=None,
+        output_hidden_states=None,
+        return_dict=None,
+        is_decoder=False,
+        mode='multimodal',
+    ):
+        r"""
+        encoder_hidden_states  (:obj:`torch.FloatTensor` of shape :obj:`(batch_size, sequence_length, hidden_size)`, `optional`):
+            Sequence of hidden-states at the output of the last layer of the encoder. Used in the cross-attention if
+            the model is configured as a decoder.
+        encoder_attention_mask (:obj:`torch.FloatTensor` of shape :obj:`(batch_size, sequence_length)`, `optional`):
+            Mask to avoid performing attention on the padding token indices of the encoder input. This mask is used in
+            the cross-attention if the model is configured as a decoder. Mask values selected in ``[0, 1]``:
+            - 1 for tokens that are **not masked**,
+            - 0 for tokens that are **masked**.
+        past_key_values (:obj:`tuple(tuple(torch.FloatTensor))` of length :obj:`config.n_layers` with each tuple having 4 tensors of shape :obj:`(batch_size, num_heads, sequence_length - 1, embed_size_per_head)`):
+            Contains precomputed key and value hidden states of the attention blocks. Can be used to speed up decoding.
+            If :obj:`past_key_values` are used, the user can optionally input only the last :obj:`decoder_input_ids`
+            (those that don't have their past key value states given to this model) of shape :obj:`(batch_size, 1)`
+            instead of all :obj:`decoder_input_ids` of shape :obj:`(batch_size, sequence_length)`.
+        use_cache (:obj:`bool`, `optional`):
+            If set to :obj:`True`, :obj:`past_key_values` key value states are returned and can be used to speed up
+            decoding (see :obj:`past_key_values`).
+        """
+        output_attentions = output_attentions if output_attentions is not None else self.config.output_attentions
+        output_hidden_states = (
+            output_hidden_states if output_hidden_states is not None else self.config.output_hidden_states
+        )
+        return_dict = return_dict if return_dict is not None else self.config.use_return_dict
+
+        if is_decoder:
+            use_cache = use_cache if use_cache is not None else self.config.use_cache
+        else:
+            use_cache = False
+
+        if input_ids is not None and inputs_embeds is not None:
+            raise ValueError("You cannot specify both input_ids and inputs_embeds at the same time")
+        elif input_ids is not None:
+            input_shape = input_ids.size()
+            batch_size, seq_length = input_shape
+            device = input_ids.device
+        elif inputs_embeds is not None:
+            input_shape = inputs_embeds.size()[:-1]
+            batch_size, seq_length = input_shape
+            device = inputs_embeds.device
+        elif encoder_embeds is not None:    
+            input_shape = encoder_embeds.size()[:-1]
+            batch_size, seq_length = input_shape 
+            device = encoder_embeds.device
+        else:
+            raise ValueError("You have to specify either input_ids or inputs_embeds or encoder_embeds")
+
+        # past_key_values_length
+        past_key_values_length = past_key_values[0][0].shape[2] if past_key_values is not None else 0
+
+        if attention_mask is None:
+            attention_mask = torch.ones(((batch_size, seq_length + past_key_values_length)), device=device)
+            
+        # We can provide a self-attention mask of dimensions [batch_size, from_seq_length, to_seq_length]
+        # ourselves in which case we just need to make it broadcastable to all heads.
+        extended_attention_mask: torch.Tensor = self.get_extended_attention_mask(attention_mask, input_shape, 
+                                                                                 device, is_decoder)
+
+        # If a 2D or 3D attention mask is provided for the cross-attention
+        # we need to make broadcastable to [batch_size, num_heads, seq_length, seq_length]
+        if encoder_hidden_states is not None:
+            if type(encoder_hidden_states) == list:
+                encoder_batch_size, encoder_sequence_length, _ = encoder_hidden_states[0].size()
+            else:
+                encoder_batch_size, encoder_sequence_length, _ = encoder_hidden_states.size()
+            encoder_hidden_shape = (encoder_batch_size, encoder_sequence_length)
+            
+            if type(encoder_attention_mask) == list:
+                encoder_extended_attention_mask = [self.invert_attention_mask(mask) for mask in encoder_attention_mask]
+            elif encoder_attention_mask is None:
+                encoder_attention_mask = torch.ones(encoder_hidden_shape, device=device)
+                encoder_extended_attention_mask = self.invert_attention_mask(encoder_attention_mask)
+            else:    
+                encoder_extended_attention_mask = self.invert_attention_mask(encoder_attention_mask)
+        else:
+            encoder_extended_attention_mask = None
+
+        # Prepare head mask if needed
+        # 1.0 in head_mask indicate we keep the head
+        # attention_probs has shape bsz x n_heads x N x N
+        # input head_mask has shape [num_heads] or [num_hidden_layers x num_heads]
+        # and head_mask is converted to shape [num_hidden_layers x batch x num_heads x seq_length x seq_length]
+        head_mask = self.get_head_mask(head_mask, self.config.num_hidden_layers)
+        
+        if encoder_embeds is None:
+            embedding_output = self.embeddings(
+                input_ids=input_ids,
+                position_ids=position_ids,
+                inputs_embeds=inputs_embeds,
+                past_key_values_length=past_key_values_length,
+            )
+        else:
+            embedding_output = encoder_embeds
+            
+        encoder_outputs = self.encoder(
+            embedding_output,
+            attention_mask=extended_attention_mask,
+            head_mask=head_mask,
+            encoder_hidden_states=encoder_hidden_states,
+            encoder_attention_mask=encoder_extended_attention_mask,
+            past_key_values=past_key_values,
+            use_cache=use_cache,
+            output_attentions=output_attentions,
+            output_hidden_states=output_hidden_states,
+            return_dict=return_dict,
+            mode=mode,
+        )
+        sequence_output = encoder_outputs[0]
+        pooled_output = self.pooler(sequence_output) if self.pooler is not None else None
+
+        if not return_dict:
+            return (sequence_output, pooled_output) + encoder_outputs[1:]
+
+        return BaseModelOutputWithPoolingAndCrossAttentions(
+            last_hidden_state=sequence_output,
+            pooler_output=pooled_output,
+            past_key_values=encoder_outputs.past_key_values,
+            hidden_states=encoder_outputs.hidden_states,
+            attentions=encoder_outputs.attentions,
+            cross_attentions=encoder_outputs.cross_attentions,
+        )
+
+
+
+class BertLMHeadModel(BertPreTrainedModel):
+
+    _keys_to_ignore_on_load_unexpected = [r"pooler"]
+    _keys_to_ignore_on_load_missing = [r"position_ids", r"predictions.decoder.bias"]
+
+    def __init__(self, config):
+        super().__init__(config)
+
+        self.bert = BertModel(config, add_pooling_layer=False)
+        self.cls = BertOnlyMLMHead(config)
+
+        self.init_weights()
+
+    def get_output_embeddings(self):
+        return self.cls.predictions.decoder
+
+    def set_output_embeddings(self, new_embeddings):
+        self.cls.predictions.decoder = new_embeddings
+
+    def forward(
+        self,
+        input_ids=None,
+        attention_mask=None,
+        position_ids=None,
+        head_mask=None,
+        inputs_embeds=None,
+        encoder_hidden_states=None,
+        encoder_attention_mask=None,
+        labels=None,
+        past_key_values=None,
+        use_cache=None,
+        output_attentions=None,
+        output_hidden_states=None,
+        return_dict=None,
+        return_logits=False,            
+        is_decoder=True,
+        reduction='mean',
+        mode='multimodal', 
+    ):
+        r"""
+        encoder_hidden_states  (:obj:`torch.FloatTensor` of shape :obj:`(batch_size, sequence_length, hidden_size)`, `optional`):
+            Sequence of hidden-states at the output of the last layer of the encoder. Used in the cross-attention if
+            the model is configured as a decoder.
+        encoder_attention_mask (:obj:`torch.FloatTensor` of shape :obj:`(batch_size, sequence_length)`, `optional`):
+            Mask to avoid performing attention on the padding token indices of the encoder input. This mask is used in
+            the cross-attention if the model is configured as a decoder. Mask values selected in ``[0, 1]``:
+            - 1 for tokens that are **not masked**,
+            - 0 for tokens that are **masked**.
+        labels (:obj:`torch.LongTensor` of shape :obj:`(batch_size, sequence_length)`, `optional`):
+            Labels for computing the left-to-right language modeling loss (next word prediction). Indices should be in
+            ``[-100, 0, ..., config.vocab_size]`` (see ``input_ids`` docstring) Tokens with indices set to ``-100`` are
+            ignored (masked), the loss is only computed for the tokens with labels n ``[0, ..., config.vocab_size]``
+        past_key_values (:obj:`tuple(tuple(torch.FloatTensor))` of length :obj:`config.n_layers` with each tuple having 4 tensors of shape :obj:`(batch_size, num_heads, sequence_length - 1, embed_size_per_head)`):
+            Contains precomputed key and value hidden states of the attention blocks. Can be used to speed up decoding.
+            If :obj:`past_key_values` are used, the user can optionally input only the last :obj:`decoder_input_ids`
+            (those that don't have their past key value states given to this model) of shape :obj:`(batch_size, 1)`
+            instead of all :obj:`decoder_input_ids` of shape :obj:`(batch_size, sequence_length)`.
+        use_cache (:obj:`bool`, `optional`):
+            If set to :obj:`True`, :obj:`past_key_values` key value states are returned and can be used to speed up
+            decoding (see :obj:`past_key_values`).
+        Returns:
+        Example::
+            >>> from transformers import BertTokenizer, BertLMHeadModel, BertConfig
+            >>> import torch
+            >>> tokenizer = BertTokenizer.from_pretrained('bert-base-cased')
+            >>> config = BertConfig.from_pretrained("bert-base-cased")
+            >>> model = BertLMHeadModel.from_pretrained('bert-base-cased', config=config)
+            >>> inputs = tokenizer("Hello, my dog is cute", return_tensors="pt")
+            >>> outputs = model(**inputs)
+            >>> prediction_logits = outputs.logits
+        """
+        return_dict = return_dict if return_dict is not None else self.config.use_return_dict
+        if labels is not None:
+            use_cache = False
+
+        outputs = self.bert(
+            input_ids,
+            attention_mask=attention_mask,
+            position_ids=position_ids,
+            head_mask=head_mask,
+            inputs_embeds=inputs_embeds,
+            encoder_hidden_states=encoder_hidden_states,
+            encoder_attention_mask=encoder_attention_mask,
+            past_key_values=past_key_values,
+            use_cache=use_cache,
+            output_attentions=output_attentions,
+            output_hidden_states=output_hidden_states,
+            return_dict=return_dict,
+            is_decoder=is_decoder,
+            mode=mode,
+        )
+        
+        sequence_output = outputs[0]
+        prediction_scores = self.cls(sequence_output)
+        
+        if return_logits:
+            return prediction_scores[:, :-1, :].contiguous()  
+
+        lm_loss = None
+        if labels is not None:
+            # we are doing next-token prediction; shift prediction scores and input ids by one
+            shifted_prediction_scores = prediction_scores[:, :-1, :].contiguous()
+            labels = labels[:, 1:].contiguous()
+            loss_fct = CrossEntropyLoss(reduction=reduction, label_smoothing=0.1) 
+            lm_loss = loss_fct(shifted_prediction_scores.view(-1, self.config.vocab_size), labels.view(-1))
+            if reduction=='none':
+                lm_loss = lm_loss.view(prediction_scores.size(0),-1).sum(1)               
+
+        if not return_dict:
+            output = (prediction_scores,) + outputs[2:]
+            return ((lm_loss,) + output) if lm_loss is not None else output
+
+        return CausalLMOutputWithCrossAttentions(
+            loss=lm_loss,
+            logits=prediction_scores,
+            past_key_values=outputs.past_key_values,
+            hidden_states=outputs.hidden_states,
+            attentions=outputs.attentions,
+            cross_attentions=outputs.cross_attentions,
+        )
+
+    def prepare_inputs_for_generation(self, input_ids, past=None, attention_mask=None, **model_kwargs):
+        input_shape = input_ids.shape
+        # if model is used as a decoder in encoder-decoder model, the decoder attention mask is created on the fly
+        if attention_mask is None:
+            attention_mask = input_ids.new_ones(input_shape)
+
+        # cut decoder_input_ids if past is used
+        if past is not None:
+            input_ids = input_ids[:, -1:]
+
+        return {
+            "input_ids": input_ids, 
+            "attention_mask": attention_mask, 
+            "past_key_values": past,
+            "encoder_hidden_states": model_kwargs.get("encoder_hidden_states", None),
+            "encoder_attention_mask": model_kwargs.get("encoder_attention_mask", None),
+            "is_decoder": True,
+        }
+
+    def _reorder_cache(self, past, beam_idx):
+        reordered_past = ()
+        for layer_past in past:
+            reordered_past += (tuple(past_state.index_select(0, beam_idx) for past_state in layer_past),)
+        return reordered_past
\ No newline at end of file
diff --git a/pixray/losses/blip/vit.py b/pixray/losses/blip/vit.py
new file mode 100644
index 0000000..cc74857
--- /dev/null
+++ b/pixray/losses/blip/vit.py
@@ -0,0 +1,305 @@
+'''
+ * Copyright (c) 2022, salesforce.com, inc.
+ * All rights reserved.
+ * SPDX-License-Identifier: BSD-3-Clause
+ * For full license text, see LICENSE.txt file in the repo root or https://opensource.org/licenses/BSD-3-Clause
+ * By Junnan Li
+ * Based on timm code base
+ * https://github.com/rwightman/pytorch-image-models/tree/master/timm
+'''
+
+import torch
+import torch.nn as nn
+import torch.nn.functional as F
+from functools import partial
+
+from timm.models.vision_transformer import _cfg, PatchEmbed
+from timm.models.registry import register_model
+from timm.models.layers import trunc_normal_, DropPath
+from timm.models.helpers import named_apply, adapt_input_conv
+
+# from fairscale.nn.checkpoint.checkpoint_activations import checkpoint_wrapper
+
+class Mlp(nn.Module):
+    """ MLP as used in Vision Transformer, MLP-Mixer and related networks
+    """
+    def __init__(self, in_features, hidden_features=None, out_features=None, act_layer=nn.GELU, drop=0.):
+        super().__init__()
+        out_features = out_features or in_features
+        hidden_features = hidden_features or in_features
+        self.fc1 = nn.Linear(in_features, hidden_features)
+        self.act = act_layer()
+        self.fc2 = nn.Linear(hidden_features, out_features)
+        self.drop = nn.Dropout(drop)
+
+    def forward(self, x):
+        x = self.fc1(x)
+        x = self.act(x)
+        x = self.drop(x)
+        x = self.fc2(x)
+        x = self.drop(x)
+        return x
+
+
+class Attention(nn.Module):
+    def __init__(self, dim, num_heads=8, qkv_bias=False, qk_scale=None, attn_drop=0., proj_drop=0.):
+        super().__init__()
+        self.num_heads = num_heads
+        head_dim = dim // num_heads
+        # NOTE scale factor was wrong in my original version, can set manually to be compat with prev weights
+        self.scale = qk_scale or head_dim ** -0.5
+        self.qkv = nn.Linear(dim, dim * 3, bias=qkv_bias)
+        self.attn_drop = nn.Dropout(attn_drop)
+        self.proj = nn.Linear(dim, dim)
+        self.proj_drop = nn.Dropout(proj_drop)
+        self.attn_gradients = None
+        self.attention_map = None
+        
+    def save_attn_gradients(self, attn_gradients):
+        self.attn_gradients = attn_gradients
+        
+    def get_attn_gradients(self):
+        return self.attn_gradients
+    
+    def save_attention_map(self, attention_map):
+        self.attention_map = attention_map
+        
+    def get_attention_map(self):
+        return self.attention_map
+    
+    def forward(self, x, register_hook=False):
+        B, N, C = x.shape
+        qkv = self.qkv(x).reshape(B, N, 3, self.num_heads, C // self.num_heads).permute(2, 0, 3, 1, 4)
+        q, k, v = qkv[0], qkv[1], qkv[2]   # make torchscript happy (cannot use tensor as tuple)
+
+        attn = (q @ k.transpose(-2, -1)) * self.scale
+        attn = attn.softmax(dim=-1)
+        attn = self.attn_drop(attn)
+                
+        if register_hook:
+            self.save_attention_map(attn)
+            attn.register_hook(self.save_attn_gradients)        
+
+        x = (attn @ v).transpose(1, 2).reshape(B, N, C)
+        x = self.proj(x)
+        x = self.proj_drop(x)
+        return x
+
+
+class Block(nn.Module):
+
+    def __init__(self, dim, num_heads, mlp_ratio=4., qkv_bias=False, qk_scale=None, drop=0., attn_drop=0.,
+                 drop_path=0., act_layer=nn.GELU, norm_layer=nn.LayerNorm, use_grad_checkpointing=False):
+        super().__init__()
+        self.norm1 = norm_layer(dim)
+        self.attn = Attention(
+            dim, num_heads=num_heads, qkv_bias=qkv_bias, qk_scale=qk_scale, attn_drop=attn_drop, proj_drop=drop)
+        # NOTE: drop path for stochastic depth, we shall see if this is better than dropout here
+        self.drop_path = DropPath(drop_path) if drop_path > 0. else nn.Identity()
+        self.norm2 = norm_layer(dim)
+        mlp_hidden_dim = int(dim * mlp_ratio)
+        self.mlp = Mlp(in_features=dim, hidden_features=mlp_hidden_dim, act_layer=act_layer, drop=drop)
+
+        # if use_grad_checkpointing:
+        #     self.attn = checkpoint_wrapper(self.attn)
+        #     self.mlp = checkpoint_wrapper(self.mlp)
+
+    def forward(self, x, register_hook=False):
+        x = x + self.drop_path(self.attn(self.norm1(x), register_hook=register_hook))
+        x = x + self.drop_path(self.mlp(self.norm2(x)))
+        return x
+
+    
+class VisionTransformer(nn.Module):
+    """ Vision Transformer
+    A PyTorch impl of : `An Image is Worth 16x16 Words: Transformers for Image Recognition at Scale`  -
+        https://arxiv.org/abs/2010.11929
+    """
+    def __init__(self, img_size=224, patch_size=16, in_chans=3, num_classes=1000, embed_dim=768, depth=12,
+                 num_heads=12, mlp_ratio=4., qkv_bias=True, qk_scale=None, representation_size=None,
+                 drop_rate=0., attn_drop_rate=0., drop_path_rate=0., norm_layer=None, 
+                 use_grad_checkpointing=False, ckpt_layer=0):
+        """
+        Args:
+            img_size (int, tuple): input image size
+            patch_size (int, tuple): patch size
+            in_chans (int): number of input channels
+            num_classes (int): number of classes for classification head
+            embed_dim (int): embedding dimension
+            depth (int): depth of transformer
+            num_heads (int): number of attention heads
+            mlp_ratio (int): ratio of mlp hidden dim to embedding dim
+            qkv_bias (bool): enable bias for qkv if True
+            qk_scale (float): override default qk scale of head_dim ** -0.5 if set
+            representation_size (Optional[int]): enable and set representation layer (pre-logits) to this value if set
+            drop_rate (float): dropout rate
+            attn_drop_rate (float): attention dropout rate
+            drop_path_rate (float): stochastic depth rate
+            norm_layer: (nn.Module): normalization layer
+        """
+        super().__init__()
+        self.num_features = self.embed_dim = embed_dim  # num_features for consistency with other models
+        norm_layer = norm_layer or partial(nn.LayerNorm, eps=1e-6)
+
+        self.patch_embed = PatchEmbed(
+            img_size=img_size, patch_size=patch_size, in_chans=in_chans, embed_dim=embed_dim)
+
+        num_patches = self.patch_embed.num_patches
+
+        self.cls_token = nn.Parameter(torch.zeros(1, 1, embed_dim))
+        self.pos_embed = nn.Parameter(torch.zeros(1, num_patches + 1, embed_dim))
+        self.pos_drop = nn.Dropout(p=drop_rate)
+
+        dpr = [x.item() for x in torch.linspace(0, drop_path_rate, depth)]  # stochastic depth decay rule
+        self.blocks = nn.ModuleList([
+            Block(
+                dim=embed_dim, num_heads=num_heads, mlp_ratio=mlp_ratio, qkv_bias=qkv_bias, qk_scale=qk_scale,
+                drop=drop_rate, attn_drop=attn_drop_rate, drop_path=dpr[i], norm_layer=norm_layer,
+                use_grad_checkpointing=(use_grad_checkpointing and i>=depth-ckpt_layer)
+            )
+            for i in range(depth)])
+        self.norm = norm_layer(embed_dim)
+
+        trunc_normal_(self.pos_embed, std=.02)
+        trunc_normal_(self.cls_token, std=.02)
+        self.apply(self._init_weights)
+
+    def _init_weights(self, m):
+        if isinstance(m, nn.Linear):
+            trunc_normal_(m.weight, std=.02)
+            if isinstance(m, nn.Linear) and m.bias is not None:
+                nn.init.constant_(m.bias, 0)
+        elif isinstance(m, nn.LayerNorm):
+            nn.init.constant_(m.bias, 0)
+            nn.init.constant_(m.weight, 1.0)
+
+    @torch.jit.ignore
+    def no_weight_decay(self):
+        return {'pos_embed', 'cls_token'}
+
+    def forward(self, x, register_blk=-1):
+        B = x.shape[0]
+        x = self.patch_embed(x)
+
+        cls_tokens = self.cls_token.expand(B, -1, -1)  # stole cls_tokens impl from Phil Wang, thanks
+        x = torch.cat((cls_tokens, x), dim=1)
+  
+        x = x + self.pos_embed[:,:x.size(1),:]
+        x = self.pos_drop(x)
+
+        for i,blk in enumerate(self.blocks):
+            x = blk(x, register_blk==i)
+        x = self.norm(x)
+        
+        return x
+
+    @torch.jit.ignore()
+    def load_pretrained(self, checkpoint_path, prefix=''):
+        _load_weights(self, checkpoint_path, prefix)
+        
+
+@torch.no_grad()
+def _load_weights(model: VisionTransformer, checkpoint_path: str, prefix: str = ''):
+    """ Load weights from .npz checkpoints for official Google Brain Flax implementation
+    """
+    import numpy as np
+
+    def _n2p(w, t=True):
+        if w.ndim == 4 and w.shape[0] == w.shape[1] == w.shape[2] == 1:
+            w = w.flatten()
+        if t:
+            if w.ndim == 4:
+                w = w.transpose([3, 2, 0, 1])
+            elif w.ndim == 3:
+                w = w.transpose([2, 0, 1])
+            elif w.ndim == 2:
+                w = w.transpose([1, 0])
+        return torch.from_numpy(w)
+
+    w = np.load(checkpoint_path)
+    if not prefix and 'opt/target/embedding/kernel' in w:
+        prefix = 'opt/target/'
+
+    if hasattr(model.patch_embed, 'backbone'):
+        # hybrid
+        backbone = model.patch_embed.backbone
+        stem_only = not hasattr(backbone, 'stem')
+        stem = backbone if stem_only else backbone.stem
+        stem.conv.weight.copy_(adapt_input_conv(stem.conv.weight.shape[1], _n2p(w[f'{prefix}conv_root/kernel'])))
+        stem.norm.weight.copy_(_n2p(w[f'{prefix}gn_root/scale']))
+        stem.norm.bias.copy_(_n2p(w[f'{prefix}gn_root/bias']))
+        if not stem_only:
+            for i, stage in enumerate(backbone.stages):
+                for j, block in enumerate(stage.blocks):
+                    bp = f'{prefix}block{i + 1}/unit{j + 1}/'
+                    for r in range(3):
+                        getattr(block, f'conv{r + 1}').weight.copy_(_n2p(w[f'{bp}conv{r + 1}/kernel']))
+                        getattr(block, f'norm{r + 1}').weight.copy_(_n2p(w[f'{bp}gn{r + 1}/scale']))
+                        getattr(block, f'norm{r + 1}').bias.copy_(_n2p(w[f'{bp}gn{r + 1}/bias']))
+                    if block.downsample is not None:
+                        block.downsample.conv.weight.copy_(_n2p(w[f'{bp}conv_proj/kernel']))
+                        block.downsample.norm.weight.copy_(_n2p(w[f'{bp}gn_proj/scale']))
+                        block.downsample.norm.bias.copy_(_n2p(w[f'{bp}gn_proj/bias']))
+        embed_conv_w = _n2p(w[f'{prefix}embedding/kernel'])
+    else:
+        embed_conv_w = adapt_input_conv(
+            model.patch_embed.proj.weight.shape[1], _n2p(w[f'{prefix}embedding/kernel']))
+    model.patch_embed.proj.weight.copy_(embed_conv_w)
+    model.patch_embed.proj.bias.copy_(_n2p(w[f'{prefix}embedding/bias']))
+    model.cls_token.copy_(_n2p(w[f'{prefix}cls'], t=False))
+    pos_embed_w = _n2p(w[f'{prefix}Transformer/posembed_input/pos_embedding'], t=False)
+    if pos_embed_w.shape != model.pos_embed.shape:
+        pos_embed_w = resize_pos_embed(  # resize pos embedding when different size from pretrained weights
+            pos_embed_w, model.pos_embed, getattr(model, 'num_tokens', 1), model.patch_embed.grid_size)
+    model.pos_embed.copy_(pos_embed_w)
+    model.norm.weight.copy_(_n2p(w[f'{prefix}Transformer/encoder_norm/scale']))
+    model.norm.bias.copy_(_n2p(w[f'{prefix}Transformer/encoder_norm/bias']))
+#     if isinstance(model.head, nn.Linear) and model.head.bias.shape[0] == w[f'{prefix}head/bias'].shape[-1]:
+#         model.head.weight.copy_(_n2p(w[f'{prefix}head/kernel']))
+#         model.head.bias.copy_(_n2p(w[f'{prefix}head/bias']))
+#     if isinstance(getattr(model.pre_logits, 'fc', None), nn.Linear) and f'{prefix}pre_logits/bias' in w:
+#         model.pre_logits.fc.weight.copy_(_n2p(w[f'{prefix}pre_logits/kernel']))
+#         model.pre_logits.fc.bias.copy_(_n2p(w[f'{prefix}pre_logits/bias']))
+    for i, block in enumerate(model.blocks.children()):
+        block_prefix = f'{prefix}Transformer/encoderblock_{i}/'
+        mha_prefix = block_prefix + 'MultiHeadDotProductAttention_1/'
+        block.norm1.weight.copy_(_n2p(w[f'{block_prefix}LayerNorm_0/scale']))
+        block.norm1.bias.copy_(_n2p(w[f'{block_prefix}LayerNorm_0/bias']))
+        block.attn.qkv.weight.copy_(torch.cat([
+            _n2p(w[f'{mha_prefix}{n}/kernel'], t=False).flatten(1).T for n in ('query', 'key', 'value')]))
+        block.attn.qkv.bias.copy_(torch.cat([
+            _n2p(w[f'{mha_prefix}{n}/bias'], t=False).reshape(-1) for n in ('query', 'key', 'value')]))
+        block.attn.proj.weight.copy_(_n2p(w[f'{mha_prefix}out/kernel']).flatten(1))
+        block.attn.proj.bias.copy_(_n2p(w[f'{mha_prefix}out/bias']))
+        for r in range(2):
+            getattr(block.mlp, f'fc{r + 1}').weight.copy_(_n2p(w[f'{block_prefix}MlpBlock_3/Dense_{r}/kernel']))
+            getattr(block.mlp, f'fc{r + 1}').bias.copy_(_n2p(w[f'{block_prefix}MlpBlock_3/Dense_{r}/bias']))
+        block.norm2.weight.copy_(_n2p(w[f'{block_prefix}LayerNorm_2/scale']))
+        block.norm2.bias.copy_(_n2p(w[f'{block_prefix}LayerNorm_2/bias']))
+
+            
+def interpolate_pos_embed(pos_embed_checkpoint, visual_encoder):        
+    # interpolate position embedding
+    embedding_size = pos_embed_checkpoint.shape[-1]
+    num_patches = visual_encoder.patch_embed.num_patches
+    num_extra_tokens = visual_encoder.pos_embed.shape[-2] - num_patches
+    # height (== width) for the checkpoint position embedding
+    orig_size = int((pos_embed_checkpoint.shape[-2] - num_extra_tokens) ** 0.5)
+    # height (== width) for the new position embedding
+    new_size = int(num_patches ** 0.5)
+
+    if orig_size!=new_size:
+        # class_token and dist_token are kept unchanged
+        extra_tokens = pos_embed_checkpoint[:, :num_extra_tokens]
+        # only the position tokens are interpolated
+        pos_tokens = pos_embed_checkpoint[:, num_extra_tokens:]
+        pos_tokens = pos_tokens.reshape(-1, orig_size, orig_size, embedding_size).permute(0, 3, 1, 2)
+        pos_tokens = torch.nn.functional.interpolate(
+            pos_tokens, size=(new_size, new_size), mode='bicubic', align_corners=False)
+        pos_tokens = pos_tokens.permute(0, 2, 3, 1).flatten(1, 2)
+        new_pos_embed = torch.cat((extra_tokens, pos_tokens), dim=1)
+        print('reshape position embedding from %d to %d'%(orig_size ** 2,new_size ** 2))
+        
+        return new_pos_embed    
+    else:
+        return pos_embed_checkpoint
\ No newline at end of file
diff --git a/pixray/losses/clip/__init__.py b/pixray/losses/clip/__init__.py
new file mode 100644
index 0000000..2709b1f
--- /dev/null
+++ b/pixray/losses/clip/__init__.py
@@ -0,0 +1,1 @@
+from .clip import CLIP
diff --git a/pixray/losses/clip/clip.py b/pixray/losses/clip/clip.py
new file mode 100644
index 0000000..4b1ede7
--- /dev/null
+++ b/pixray/losses/clip/clip.py
@@ -0,0 +1,32 @@
+import torch
+import torch.nn.functional as F
+
+from pixray.losses.interface import LossInterface
+from .clip_base import get_clip_perceptor
+
+
+def parse_prompt(prompt):
+    vals = prompt.rsplit(":", 2)
+    vals = vals + ["", "1", "-inf"][len(vals) :]
+    return vals[0], float(vals[1]), float(vals[2])
+
+
+class CLIP(LossInterface):
+    def __init__(self, text_prompts, name="ViT-B/16"):
+        super().__init__()
+        self.name = name
+        self.text_prompts = text_prompts
+
+        self.model = get_clip_perceptor(name, torch.device("cuda"))
+        self.model.eval()
+        self.model.requires_grad_(False)
+
+        self.text_encodings = self.model.encode_text(text_prompts[0])
+
+    def forward(self, images):
+        image_encodings = self.model.encode_image(images).float()
+
+        input_normed = F.normalize(image_encodings.unsqueeze(1), dim=2)
+        embed_normed = F.normalize(self.text_encodings.unsqueeze(0), dim=2)
+        dists = input_normed.sub(embed_normed).norm(dim=2).div(2).arcsin().pow(2).mul(2)
+        return dists.mean()
diff --git a/pixray/losses/clip/clip_base.py b/pixray/losses/clip/clip_base.py
new file mode 100644
index 0000000..fffb62e
--- /dev/null
+++ b/pixray/losses/clip/clip_base.py
@@ -0,0 +1,88 @@
+import torch
+from torchvision import transforms
+from clip import tokenize, load
+
+
+def normalize(img, input_range=None):
+    if input_range is None:
+        minv = img.min()
+    else:
+        minv = input_range[0]
+    img = img - minv
+
+    if input_range is None:
+        maxv = img.max()
+    else:
+        maxv = input_range[1] - minv
+
+    if maxv != 0:
+        img = img / maxv
+
+    return img
+
+
+def adjust_range(img, out_range, input_range=None):
+    img = normalize(img, input_range=input_range)
+    img = img * (out_range[1] - out_range[0])
+    img = img + out_range[0]
+    return img
+
+
+class CLIP_Base(torch.nn.Module):
+    def __init__(self, model, preprocess, device):
+        super().__init__()
+        self.device = device
+        self.model = model.eval()
+        self.input_resolution = self.model.visual.input_resolution
+        self.output_dim = self.model.visual.output_dim
+
+        self.preprocess_transform = transforms.Compose(
+            [
+                transforms.Resize(self.input_resolution),
+                transforms.CenterCrop(self.input_resolution),
+                transforms.Normalize(
+                    (0.48145466, 0.4578275, 0.40821073),
+                    (0.26862954, 0.26130258, 0.27577711),
+                ),
+            ]
+        )
+
+    def preprocess(self, imgs, input_range=None):
+        imgs = adjust_range(imgs, [0.0, 1.0], input_range=input_range)
+        return self.preprocess_transform(imgs)
+
+    def encode_image(self, imgs, input_range=None, apply_preprocess=True):
+        if apply_preprocess:
+            imgs = self.preprocess(imgs, input_range=None)
+        img_embeddings = self.model.encode_image(imgs)
+        return img_embeddings / img_embeddings.norm(dim=-1, keepdim=True).float()
+
+    def encode_text(self, text):
+        text = tokenize(text).to(self.device)
+        return self.model.encode_text(text).float()
+
+    def encode_texts(self, texts):
+        text_embeddings = torch.stack(
+            [
+                self.model.encode_text(tokenize(text).to(self.device))
+                .detach()
+                .clone()
+                .float()
+                for text in texts
+            ]
+        )
+        return text_embeddings / text_embeddings.norm(dim=-1, keepdim=True)
+
+
+def get_clip_perceptor(clip_model_name, device):
+    perceptor, preprocess = load(clip_model_name, download_root="models")
+    perceptor = perceptor.requires_grad_(False).eval().to(device)
+
+    n_params = sum(p.numel() for p in perceptor.parameters())
+    in_res = perceptor.visual.input_resolution
+    print(
+        f"Loaded CLIP {clip_model_name}: {in_res}x{in_res} and {n_params/1000000:.2f}M params"
+    )
+    clip_perceptor = CLIP_Base(perceptor, preprocess, device)
+
+    return clip_perceptor
diff --git a/pixray/losses/interface.py b/pixray/losses/interface.py
new file mode 100644
index 0000000..fdfc66f
--- /dev/null
+++ b/pixray/losses/interface.py
@@ -0,0 +1,6 @@
+from torch import nn
+
+
+class LossInterface(nn.Module):
+    def forward(self, *args, **kwargs):
+        raise NotImplementedError
diff --git a/pixray/losses/smoothness.py b/pixray/losses/smoothness.py
new file mode 100644
index 0000000..862117b
--- /dev/null
+++ b/pixray/losses/smoothness.py
@@ -0,0 +1,10 @@
+from .interface import LossInterface
+
+
+class Smoothness(LossInterface):
+    def forward(self, images):
+        images = images.contiguous().clone()
+        gradient_height = images[:, :, 1:, :] - images[:, :, :-1, :]
+        gradient_width = images[:, :, :, 1:] - images[:, :, :, :-1]
+        sharpness = gradient_height.square().mean() + gradient_width.square().mean()
+        return sharpness
diff --git a/pixray/transforms/__init__.py b/pixray/transforms/__init__.py
new file mode 100644
index 0000000..addae3f
--- /dev/null
+++ b/pixray/transforms/__init__.py
@@ -0,0 +1,2 @@
+from .super_resolution import SuperResolution
+from .clamp_with_grad import ClampWithGrad, clamp_with_grad
diff --git a/pixray/transforms/clamp_with_grad.py b/pixray/transforms/clamp_with_grad.py
new file mode 100644
index 0000000..5e43a9f
--- /dev/null
+++ b/pixray/transforms/clamp_with_grad.py
@@ -0,0 +1,36 @@
+import torch
+from torch.nn import functional as F
+from torchvision.transforms import functional as TF
+
+from .interface import TransformInterface
+
+
+class ClampWithGradFunction(torch.autograd.Function):
+    @staticmethod
+    def forward(ctx, input, min, max):
+        ctx.min = min
+        ctx.max = max
+        ctx.save_for_backward(input)
+        return input.clamp(min, max)
+
+    @staticmethod
+    def backward(ctx, grad_in):
+        (input,) = ctx.saved_tensors
+        return (
+            grad_in * (grad_in * (input - input.clamp(ctx.min, ctx.max)) >= 0),
+            None,
+            None,
+        )
+
+
+clamp_with_grad = ClampWithGradFunction.apply
+
+
+class ClampWithGrad(TransformInterface):
+    def __init__(self, min, max):
+        super().__init__()
+        self.min = min
+        self.max = max
+
+    def encode(self, tensor):
+        return clamp_with_grad(tensor)
diff --git a/pixray/transforms/interface.py b/pixray/transforms/interface.py
new file mode 100644
index 0000000..4bf91ef
--- /dev/null
+++ b/pixray/transforms/interface.py
@@ -0,0 +1,12 @@
+from torch import nn
+
+
+class TransformInterface(nn.Module):
+    def forward(self, *args, **kwargs):
+        return self.encode(*args, **kwargs)
+
+    def encode(self, *args, **kwargs):
+        raise NotImplementedError
+
+    def decode(self, *args, **kwargs):
+        raise NotImplementedError
diff --git a/pixray/transforms/super_resolution/__init__.py b/pixray/transforms/super_resolution/__init__.py
new file mode 100644
index 0000000..38903ad
--- /dev/null
+++ b/pixray/transforms/super_resolution/__init__.py
@@ -0,0 +1,1 @@
+from .super_resolution import SuperResolution
\ No newline at end of file
diff --git a/pixray/transforms/super_resolution/real_esrganer.py b/pixray/transforms/super_resolution/real_esrganer.py
new file mode 100644
index 0000000..bb7e3ae
--- /dev/null
+++ b/pixray/transforms/super_resolution/real_esrganer.py
@@ -0,0 +1,182 @@
+import math
+import torch
+from torch.nn import functional as F
+
+
+class RealESRGANer:
+    """A helper class for upsampling images with RealESRGAN.
+    Args:
+        scale (int): Upsampling scale factor used in the networks. It is usually 2 or 4.
+        model_path (str): The path to the pretrained model
+        model (nn.Module): The defined network. Default: None.
+        tile (int): As too large images result in the out of GPU memory issue, so this tile option will first crop
+            input images into tiles, and then process each of them. Finally, they will be merged into one image.
+            0 denotes for do not use tile. Default: 0.
+        tile_pad (int): The pad size for each tile, to remove border artifacts. Default: 10.
+        pre_pad (int): Pad the input images to avoid border artifacts. Default: 10.
+        half (float): Whether to use half precision during inference. Default: False.
+    """
+
+    def __init__(
+        self, scale, model_path, model=None, tile=0, tile_pad=10, pre_pad=10, half=False
+    ):
+        self.scale = scale
+        self.tile_size = tile
+        self.tile_pad = tile_pad
+        self.pre_pad = pre_pad
+        self.mod_scale = None
+        self.half = half
+
+        # initialize model
+        self.device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
+        # if the model_path starts with https, it will first download models to the folder: realesrgan/weights
+
+        loadnet = torch.load(model_path, map_location=torch.device("cpu"))
+        # prefer to use params_ema
+        if "params_ema" in loadnet:
+            keyname = "params_ema"
+        else:
+            keyname = "params"
+        model.load_state_dict(loadnet[keyname], strict=True)
+        model.eval()
+        self.model = model.to(self.device)
+        if self.half:
+            self.model = self.model.half()
+
+    def pre_process(self, img):
+        """Pre-process, such as pre-pad and mod pad, so that the images can be divisible"""
+        # img is pytorch tensor
+        self.img = img.to(self.device)
+        if self.half:
+            self.img = self.img.half()
+
+        # pre_pad
+        if self.pre_pad != 0:
+            self.img = F.pad(self.img, (0, self.pre_pad, 0, self.pre_pad), "reflect")
+        # mod pad for divisible borders
+        if self.scale == 2:
+            self.mod_scale = 2
+        elif self.scale == 1:
+            self.mod_scale = 4
+        if self.mod_scale is not None:
+            self.mod_pad_h, self.mod_pad_w = 0, 0
+            _, _, h, w = self.img.size()
+            if h % self.mod_scale != 0:
+                self.mod_pad_h = self.mod_scale - h % self.mod_scale
+            if w % self.mod_scale != 0:
+                self.mod_pad_w = self.mod_scale - w % self.mod_scale
+            self.img = F.pad(
+                self.img, (0, self.mod_pad_w, 0, self.mod_pad_h), "reflect"
+            )
+
+    def process(self):
+        # model inference
+        self.output = self.model(self.img)
+
+    def tile_process(self):
+        """It will first crop input images to tiles, and then process each tile.
+        Finally, all the processed tiles are merged into one images.
+        Modified from: https://github.com/ata4/esrgan-launcher
+        """
+        batch, channel, height, width = self.img.shape
+        output_height = height * self.scale
+        output_width = width * self.scale
+        output_shape = (batch, channel, output_height, output_width)
+
+        # start with black image
+        self.output = self.img.new_zeros(output_shape)
+        tiles_x = math.ceil(width / self.tile_size)
+        tiles_y = math.ceil(height / self.tile_size)
+
+        # loop over all tiles
+        for y in range(tiles_y):
+            for x in range(tiles_x):
+                # extract tile from input image
+                ofs_x = x * self.tile_size
+                ofs_y = y * self.tile_size
+                # input tile area on total image
+                input_start_x = ofs_x
+                input_end_x = min(ofs_x + self.tile_size, width)
+                input_start_y = ofs_y
+                input_end_y = min(ofs_y + self.tile_size, height)
+
+                # input tile area on total image with padding
+                input_start_x_pad = max(input_start_x - self.tile_pad, 0)
+                input_end_x_pad = min(input_end_x + self.tile_pad, width)
+                input_start_y_pad = max(input_start_y - self.tile_pad, 0)
+                input_end_y_pad = min(input_end_y + self.tile_pad, height)
+
+                # input tile dimensions
+                input_tile_width = input_end_x - input_start_x
+                input_tile_height = input_end_y - input_start_y
+                tile_idx = y * tiles_x + x + 1
+                input_tile = self.img[
+                    :,
+                    :,
+                    input_start_y_pad:input_end_y_pad,
+                    input_start_x_pad:input_end_x_pad,
+                ]
+
+                # upscale tile
+                try:
+                    # with torch.no_grad():
+                    output_tile = self.model(input_tile)
+                except RuntimeError as error:
+                    print("Error", error)
+                print(f"\tTile {tile_idx}/{tiles_x * tiles_y}")
+
+                # output tile area on total image
+                output_start_x = input_start_x * self.scale
+                output_end_x = input_end_x * self.scale
+                output_start_y = input_start_y * self.scale
+                output_end_y = input_end_y * self.scale
+
+                # output tile area without padding
+                output_start_x_tile = (input_start_x - input_start_x_pad) * self.scale
+                output_end_x_tile = output_start_x_tile + input_tile_width * self.scale
+                output_start_y_tile = (input_start_y - input_start_y_pad) * self.scale
+                output_end_y_tile = output_start_y_tile + input_tile_height * self.scale
+
+                # put tile into output image
+                self.output[
+                    :, :, output_start_y:output_end_y, output_start_x:output_end_x
+                ] = output_tile[
+                    :,
+                    :,
+                    output_start_y_tile:output_end_y_tile,
+                    output_start_x_tile:output_end_x_tile,
+                ]
+
+    def post_process(self):
+        # remove extra pad
+        if self.mod_scale is not None:
+            _, _, h, w = self.output.size()
+            self.output = self.output[
+                :,
+                :,
+                0 : h - self.mod_pad_h * self.scale,
+                0 : w - self.mod_pad_w * self.scale,
+            ]
+        # remove prepad
+        if self.pre_pad != 0:
+            _, _, h, w = self.output.size()
+            self.output = self.output[
+                :,
+                :,
+                0 : h - self.pre_pad * self.scale,
+                0 : w - self.pre_pad * self.scale,
+            ]
+        return self.output
+
+    # @torch.no_grad()
+    def enhance(self, img, outscale=None, alpha_upsampler="realesrgan"):
+        h_input, w_input = img.shape[-2:]
+
+        self.pre_process(img)
+        if self.tile_size > 0:
+            self.tile_process()
+        else:
+            self.process()
+        output_img = self.post_process()
+        # output_img = output_img.data.squeeze().float().cpu().clamp_(0, 1).numpy()
+        return output_img
diff --git a/pixray/transforms/super_resolution/super_resolution.py b/pixray/transforms/super_resolution/super_resolution.py
new file mode 100644
index 0000000..708b01c
--- /dev/null
+++ b/pixray/transforms/super_resolution/super_resolution.py
@@ -0,0 +1,60 @@
+from pathlib import Path
+import torch
+import torch.nn.functional as F
+from basicsr.archs.rrdbnet_arch import RRDBNet
+from basicsr.utils.download_util import load_file_from_url
+
+from pixray.transforms.interface import TransformInterface
+from .real_esrganer import RealESRGANer
+
+
+checkpoints = {
+    "RealESRGAN_x4plus": "https://github.com/xinntao/Real-ESRGAN/releases/download/v0.1.0/RealESRGAN_x4plus.pth",
+}
+
+
+class SuperResolution(TransformInterface):
+    def __init__(self, *_, name="RealESRGAN_x4plus"):
+        super().__init__()
+        self.name = name
+
+        checkpoint_path = load_file_from_url(
+            checkpoints[self.name],
+            "models",
+        )
+
+        self.model = RRDBNet(
+            num_in_ch=3,
+            num_out_ch=3,
+            num_feat=64,
+            num_block=23,
+            num_grow_ch=32,
+            scale=4,
+        )
+        self.model.requires_grad_(False)
+
+        self.upsampler = RealESRGANer(
+            scale=4,
+            model_path=checkpoint_path,
+            model=self.model,
+            tile=0,
+            tile_pad=10,
+            pre_pad=0,
+            half=False,
+        )
+
+    def encode(self, image):
+        return self.upsampler.enhance(
+            image,
+            outscale=4,
+        )
+
+    def decode(self, upsampled_image, size=None):
+        if size is None:
+            size = (torch.tensor(upsampled_image.shape[-2:]) // 4).tolist()
+        return F.interpolate(
+            upsampled_image,
+            size=size,
+            mode="bilinear",
+            align_corners=False,
+        )
diff --git a/pixray/utils/__init__.py b/pixray/utils/__init__.py
new file mode 100644
index 0000000..55ee1ae
--- /dev/null
+++ b/pixray/utils/__init__.py
@@ -0,0 +1,1 @@
+from .pil_image import pil_image
diff --git a/pixray/utils/pil_image.py b/pixray/utils/pil_image.py
new file mode 100644
index 0000000..561f9b1
--- /dev/null
+++ b/pixray/utils/pil_image.py
@@ -0,0 +1,7 @@
+from torchvision.transforms.functional import to_pil_image
+
+
+def pil_image(images):
+    return to_pil_image(
+        images.permute(0, 2, 3, 1).reshape(-1, images.shape[-1], 3).permute(2, 0, 1)
+    )
diff --git a/requirements.txt b/requirements.txt
deleted file mode 100755
index 15fb946..0000000
--- a/requirements.txt
+++ /dev/null
@@ -1,55 +0,0 @@
-### THIS IS THE SAME AS REQUIREMENTS.TXT but with a different version of cuda (102) for cog
-
-# these are minimal requirements for just the VQGAN drawer
-
--f https://download.pytorch.org/whl/torch_stable.html
-torch==1.9.0+cu102
-torchvision==0.10.0+cu102
-torchtext==0.10.0
-
-numpy==1.19.4
-tqdm==4.49.0
-matplotlib==3.3.4
-braceexpand==0.1.7
-colorthief==0.2.1
-einops==0.3.2
-imageio==2.9.0
-ipython==7.28.0
-kornia==0.6.2
-omegaconf==2.1.1
-Pillow==8.3.2
-PyYAML==5.4.1
-scikit_learn==1.0
-scikit-image==0.18.3
-torch_optimizer==0.1.0
-torch-tools==0.1.5
-
-# can use CompVis/taming-transformers when https://github.com/CompVis/taming-transformers/pull/81 is merged
-git+https://github.com/bfirsh/taming-transformers.git@7a6e64ee
-git+https://github.com/openai/CLIP@40f5484
-git+https://github.com/pvigier/perlin-numpy@6f077f8
-
-# diffvg: these are minimal requirements for just the pixeldraw / linedraw etc drawers
-
-# DO THIS: "git clone https://github.com/pixray/diffvg && cd diffvg && git submodule update --init --recursive && CMAKE_PREFIX_PATH=$(pyenv prefix) DIFFVG_CUDA=1 python setup.py install"
-cmake==3.21.3
-cssutils==2.3.0
-svgpathtools==1.4.2
-
-
-# fft: these are IN ADDITION to the core requirements_vqgan.txt
-
-lpips
-sentence_transformers
-opencv-python
-PyWavelets==1.1.1
-git+https://github.com/fbcotter/pytorch_wavelets
-
-# main aphantasia library
-git+https://github.com/pixray/aphantasia@7e6b3bb
-
-# slip
-timm
-
-# resmem loss
-resmem
diff --git a/run.py b/run.py
deleted file mode 100755
index 230721c..0000000
--- a/run.py
+++ /dev/null
@@ -1,29 +0,0 @@
-import sys
-import os
-import pixray
-import yaml
-
-# example: python run.py cogs/hello_pixray/pixray.yaml
-
-def main():
-    if len(sys.argv) < 2:
-        print("Usage: python run_yaml file.yaml [other settings]")
-        sys.exit(1)
-
-    settings_file = sys.argv.pop(1)
-    with open(settings_file, 'r') as stream:
-      try:
-          base_settings = yaml.safe_load(stream)
-      except yaml.YAMLError as exc:
-          print("YAML ERROR", exc)
-          sys.exit(1)
-
-    # This loads in default settings, but command line can override
-    pixray.reset_settings()
-    pixray.add_settings(**base_settings)
-    settings = pixray.apply_settings()
-    pixray.do_init(settings)
-    pixray.do_run(settings)
-
-if __name__ == '__main__':
-    main()
diff --git a/slip.py b/slip.py
deleted file mode 100755
index 635a75a..0000000
--- a/slip.py
+++ /dev/null
@@ -1,186 +0,0 @@
-# code adapted from https://github.com/facebookresearch/SLIP/issues/2#issuecomment-1001052198
-
-import sys
-import os
-from collections import OrderedDict
-
-import torch 
-import torch.nn as nn
-from torchvision import transforms
-
-from clip import clip
-
-all_slip_models =  ["SLIP_VITS16", "SLIP_VITB16", "SLIP_VITL16",
-                    "SLIP_CC3M", "SLIP_CC12M",
-                    "SIMCLR_VITS16",
-                    "CLIP_VITS16", "CLIP_VITB16", "CLIP_VITL16"]
-
-
-from util import wget_file
-
-def normalize(img, input_range = None):
-    if input_range is None:
-        minv = img.min()
-    else:
-        minv = input_range[0]
-    img = img - minv
-
-    if input_range is None:
-        maxv = img.max()
-    else:
-        maxv = input_range[1] - minv
-
-    if maxv != 0:
-        img = img / maxv
-
-    return img
-
-def adjust_range(img, out_range, input_range = None):
-    img = normalize(img, input_range = input_range)
-    img = img * (out_range[1] - out_range[0])
-    img = img + out_range[0]
-    return img
-
-class CLIP_Base():
-    # Default CLIP model from OpenAI
-    def __init__(self, model, preprocess, device):
-        self.device = device
-        self.model  = model.eval()
-        self.input_resolution = self.model.visual.input_resolution
-        self.output_dim = self.model.visual.output_dim
-
-        self.preprocess_transform = transforms.Compose([
-            transforms.Resize(self.input_resolution),
-            transforms.CenterCrop(self.input_resolution),
-            transforms.Normalize((0.48145466, 0.4578275, 0.40821073), (0.26862954, 0.26130258, 0.27577711))
-            ])
-
-    def preprocess(self, imgs, input_range = None):
-        imgs = adjust_range(imgs, [0.,1.], input_range = input_range)
-        return self.preprocess_transform(imgs)
-
-    def encode_image(self, imgs, input_range = None, apply_preprocess = True):
-        if apply_preprocess:
-            imgs = self.preprocess(imgs, input_range = None)
-        img_embeddings = self.model.encode_image(imgs)
-        return img_embeddings / img_embeddings.norm(dim=-1, keepdim=True)
-
-    def encode_text(self, text):
-        text = clip.tokenize(text).to(self.device)
-        return self.model.encode_text(text).float()
-
-    def encode_texts(self, texts):
-        text_embeddings = torch.stack([self.model.encode_text(clip.tokenize(text).to(self.device)).detach().clone() for text in texts])
-        return text_embeddings / text_embeddings.norm(dim=-1, keepdim=True)
-
-# TODO: this is very hacky, must fix this later (submodule dependency)
-SLIP_PATH = os.path.join(os.path.dirname(os.path.realpath(__file__)), 'SLIP')
-# print("APPENDING PATH ", SLIP_PATH)
-sys.path.append(SLIP_PATH)
-import models
-from tokenizer import SimpleTokenizer
-import utils
-
-class SLIP_Base():
-    def __init__(self, model_name, device):
-        self.device = device
-        self.input_resolution = 224
-
-        # HA HA HA, this could be a lookup table but I'm too lazy to change it
-        if model_name == "SLIP_VITS16":
-            ckpt_file = f"slip_small_100ep.pt"
-        elif model_name == "SLIP_VITB16":
-            ckpt_file  = f"slip_base_100ep.pt"
-        elif model_name == "SLIP_VITL16":
-            ckpt_file = f"slip_large_100ep.pt"
-        elif model_name == "SIMCLR_VITS16":
-            ckpt_file = f"simclr_small_25ep.pt"
-        elif model_name == "CLIP_VITS16":
-            ckpt_file = f"clip_small_25ep.pt"
-        elif model_name == "CLIP_VITB16":
-            ckpt_file = f"clip_base_25ep.pt"
-        elif model_name == "CLIP_VITL16":
-            ckpt_file = f"clip_large_25ep.pt"
-        elif model_name == "SLIP_CC3M":
-            ckpt_file  = f"slip_base_cc3m_40ep.pt"
-        elif model_name == "SLIP_CC12M":
-            ckpt_file  = f"slip_base_cc12m_35ep.pt"
-        else:
-            print(f"slip model {model_name} not known, aborting")
-            sys.exit(1)
-
-        ckpt_path = f"models/{ckpt_file}"
-        if not os.path.exists(ckpt_path):
-            url = f"https://dl.fbaipublicfiles.com/slip/{ckpt_file}"
-            wget_file(url, ckpt_path)
-
-        self.preprocess_transform = transforms.Compose([
-            transforms.Resize(224),
-            transforms.CenterCrop(224),
-            transforms.Normalize((0.485, 0.456, 0.406), (0.229, 0.224, 0.225))
-            ])
-
-        self.tokenizer = SimpleTokenizer()
-
-        ckpt = torch.load(ckpt_path, map_location='cpu')
-        state_dict = OrderedDict()
-        for k, v in ckpt['state_dict'].items():
-            state_dict[k.replace('module.', '')] = v
-
-        # create model
-        old_args = ckpt['args']
-        old_args.model = model_name
-        # these two are the same model on different training data...
-        if old_args.model == "SLIP_CC3M" or old_args.model == "SLIP_CC12M":
-            old_args.model = "SLIP_VITB16"
-
-        model = getattr(models, old_args.model)(rand_embed=False,
-            ssl_mlp_dim=old_args.ssl_mlp_dim, ssl_emb_dim=old_args.ssl_emb_dim)
-        model.cuda().requires_grad_(False).eval()
-        model.load_state_dict(state_dict, strict=True)
-
-        n_params = sum(p.numel() for p in model.parameters())
-        print("Loaded perceptor %s: %.2fM params" %(model_name, (n_params/1000000)))
-        
-        self.model = utils.get_model(model)
-
-    def preprocess(self, imgs, input_range = None):
-        imgs = adjust_range(imgs, [0.,1.], input_range = input_range)
-        return self.preprocess_transform(imgs)
-
-    def encode_image(self, imgs, input_range = None, apply_preprocess = True):
-        if apply_preprocess:
-            imgs = self.preprocess(imgs, input_range = input_range)
-
-        image_features = self.model.encode_image(imgs)
-        image_features = image_features / image_features.norm(dim=-1, keepdim=True)
-        return image_features
-
-    def encode_text(self, texts):
-        texts = self.tokenizer(texts).cuda(non_blocking=True)
-        texts = texts.view(-1, 77).contiguous()
-        text_embeddings = self.model.encode_text(texts)
-        return text_embeddings
-
-    def encode_texts(self, texts):
-        texts = self.tokenizer(texts).cuda(non_blocking=True)
-        texts = texts.view(-1, 77).contiguous()
-        text_embeddings = self.model.encode_text(texts)
-        text_embeddings = text_embeddings / text_embeddings.norm(dim=-1, keepdim=True)
-        return text_embeddings.unsqueeze(1)
-        
-
-def get_clip_perceptor(clip_model_name, device):
-    if clip_model_name in ['RN50', 'RN101', 'RN50x4', 'RN50x16', 'RN50x64', 'ViT-B/32', 'ViT-B/16', 'ViT-L/14']:
-        perceptor, preprocess = clip.load(clip_model_name, download_root="models")
-        perceptor = perceptor.requires_grad_(False).eval().to(device)
-
-        n_params = sum(p.numel() for p in perceptor.parameters())
-        in_res = perceptor.visual.input_resolution
-        print(f"Loaded CLIP {clip_model_name}: {in_res}x{in_res} and {n_params/1000000:.2f}M params")
-        clip_perceptor = CLIP_Base(perceptor, preprocess, device)
-
-    else:
-        clip_perceptor = SLIP_Base(clip_model_name, device)
-
-    return clip_perceptor
\ No newline at end of file
diff --git a/util.py b/util.py
deleted file mode 100755
index 105038f..0000000
--- a/util.py
+++ /dev/null
@@ -1,237 +0,0 @@
-import re
-import argparse
-import glob
-from braceexpand import braceexpand
-from codecs import encode
-from PIL import Image
-import urllib.request
-from colorthief import ColorThief
-import subprocess
-
-try:
-    import matplotlib.colors
-except ImportError:
-    # only needed for palette stuff
-    pass
-
-# https://stackoverflow.com/a/31758803/1010653
-class AppURLopener(urllib.request.FancyURLopener):
-    version = "Mozilla/5.0"
-
-# file helpers
-def real_glob(rglob):
-    glob_list = braceexpand(rglob)
-    files = []
-    for g in glob_list:
-        files = files + glob.glob(g)
-    return sorted(files)
-
-####### argparse bools ##########
-def str2bool(v):
-    if isinstance(v, bool):
-        return v
-    if v.lower() in ('yes', 'true', 't', 'y', '1'):
-        return True
-    elif v.lower() in ('no', 'false', 'f', 'n', '0'):
-        return False
-    else:
-        raise argparse.ArgumentTypeError('Boolean value expected.')
-
-
-####### PALETTE SECTION ##########
-
-# canonical interpolation function, like https://p5js.org/reference/#/p5/map
-def map_number(n, start1, stop1, start2, stop2):
-  return ((n-start1)/(stop1-start1))*(stop2-start2)+start2;
-
-# parses either (255,255,0) or [1,1,0] as yellow, etc
-def parse_triple_to_rgb(s):
-    s2 = re.sub(r'[(\[\])]', '', s)
-    t = s2.split("+")
-    rgb = [float(n) for n in t]
-    if s[0] == "(":
-        rgb = [n / 255.0 for n in rgb]
-    return rgb
-
-# here are examples of what can be parsed
-# white   (16 color black to white ramp)
-# red     (16 color black to red ramp)
-# rust\8  (8 color black to rust ramp)
-# red->rust         (16 color red to rust ramp)
-# red->#ff0000      (16 color red to yellow ramp)
-# red->#ff0000\20   (20 color red to yellow ramp)
-# black->red->white (16 color black/red/white ramp)
-# [black, red, #ff0000] (three colors)
-# red->white;blue->yellow (32 colors across two ramps of 16)
-# red;blue;yellow         (48 colors from combining 3 ramps)
-# red\8;blue->yellow\8    (16 colors from combining 2 ramps)
-# red->yellow;[black]     (16 colors from ramp and also black)
-#
-# TODO: maybe foo.jpg, foo.json, foo.png, foo.asc
-def get_single_rgb(s):
-    palette_lookups = {
-        "pixel_green":     [0.44, 1.00, 0.53],
-        "pixel_orange":    [1.00, 0.80, 0.20],
-        "pixel_blue":      [0.44, 0.53, 1.00],
-        "pixel_red":       [1.00, 0.53, 0.44],
-        "pixel_grayscale": [1.00, 1.00, 1.00],
-    }
-    if s[0] == "("  or s[0] == "[":
-        rgb = parse_triple_to_rgb(s)
-    elif s in palette_lookups:
-        rgb = palette_lookups[s]
-    elif s[:4] == "mat:":
-        rgb = matplotlib.colors.to_rgb(s[4:])
-    elif matplotlib.colors.is_color_like(f"xkcd:{s}"):
-        rgb = matplotlib.colors.to_rgb(f"xkcd:{s}")
-    else:
-        rgb = matplotlib.colors.to_rgb(s)
-    return rgb
-
-def expand_colors(colors, num_steps):
-    index_episilon = 1e-6;
-    pal = []
-    num_colors = len(colors)
-    for n in range(num_steps):
-        cur_float_index = map_number(n, 0, num_steps-1, 0, num_colors-1)
-        cur_int_index = int(cur_float_index)
-        cur_float_offset = cur_float_index - cur_int_index
-        if(cur_float_offset < index_episilon or (1.0-cur_float_offset) < index_episilon):
-            # debug print(n, "->", cur_int_index)
-            pal.append(colors[cur_int_index])
-        else:
-            # debug print(n, num_steps, num_colors, cur_float_index, cur_int_index, cur_float_offset)
-            rgb1 = colors[cur_int_index]
-            rgb2 = colors[cur_int_index+1]
-            r = map_number(cur_float_offset, 0, 1, rgb1[0], rgb2[0])
-            g = map_number(cur_float_offset, 0, 1, rgb1[1], rgb2[1])
-            b = map_number(cur_float_offset, 0, 1, rgb1[2], rgb2[2])
-            pal.append([r, g, b])
-    return pal
-
-def get_rgb_range(s):
-    # get the list that defines the range
-    if s.find('->') > 0:
-        parts = s.split('->')
-    else:
-        parts = ["black", s]
-
-    # look for a number of parts at the end
-    if parts[-1].find('\\') > 0:
-        colname, steps = parts[-1].split('\\')
-        parts[-1] = colname
-        num_steps = int(steps)
-    else:
-        num_steps = 16
-
-    colors = [get_single_rgb(s) for s in parts]
-    #debug print("We have colors: ", colors)
-
-    pal = expand_colors(colors, num_steps)
-    return pal
-
-def palette_from_section(s):
-    s = s.strip()
-    if s[0] == '[':
-        # look for a number of parts at the end
-        if s.find('\\') > 0:
-            col_list, steps = s.split('\\')
-            s = col_list
-            num_steps = int(steps)
-        else:
-            num_steps = None
-
-        chunks = s[1:-1].split(",")
-        # chunks = [s.strip().tolower() for c in chunks]
-        pal = [get_single_rgb(c.strip()) for c in chunks]
-
-        if num_steps is not None:
-            pal = expand_colors(pal, num_steps)
-
-        return pal
-    elif s[0] == '@' or s[0:4] == 'http':
-
-        # look for a number of parts at the end
-        if s.find('\\') > 0:
-            stem, steps = s.split('\\')
-            s = stem
-            num_steps = int(steps)
-        else:
-            num_steps = None
-
-        # pull from a file or URL
-        if s.endswith(".png") or s.endswith(".jpg"):
-            if 'http' in s:
-                opener = AppURLopener()
-                obj = opener.open(s)
-            else:
-                obj = s[1:]
-
-            if num_steps is None:
-                num_steps = 255
-
-            # https://stackoverflow.com/a/22442212/1010653
-            # try to get all the colors
-            img = Image.open(obj)
-            img = img.convert('RGB')
-            color_pairs = img.getcolors(img.size[0]*img.size[1])
-            print(f"Found {len(color_pairs)} colors in {s}")
-            if len(color_pairs) <= num_steps:
-                # not too many
-                colors = [c[1] for c in color_pairs]
-                colors = [[c[0]/255.0, c[1]/255.0, c[2]/255.0] for c in colors]
-                return colors
-
-            # dumb: but colortheif can't deal with an Image, so reopen the url if need be
-            if 'http' in s:
-                opener = AppURLopener()
-                obj = opener.open(s)
-            ct = ColorThief(obj)
-            colors = ct.get_palette(color_count=num_steps, quality=2)
-            colors = [[c[0]/255.0, c[1]/255.0, c[2]/255.0] for c in colors]
-            print(f"Distilled {len(colors)} (reqeusted {num_steps}) colors from {s}")
-            return list(colors)
-
-        elif s.endswith(".act"):
-            # https://stackoverflow.com/a/48873783/1010653
-            if s[0] == '@':
-                with open(s[1:], 'rb') as act:
-                    raw_data = act.read()                           # Read binary data
-            else:
-                opener = AppURLopener()
-                obj = opener.open(s)
-                raw_data = obj.read()
-            hex_data = encode(raw_data, 'hex')                  # Convert it to hexadecimal values
-            total_colors_count = (int(hex_data[-7:-4], 16))     # Get last 3 digits to get number of colors total
-            misterious_count = (int(hex_data[-4:-3], 16))       # I have no idea what does it do
-            colors_count = (int(hex_data[-3:], 16))             # Get last 3 digits to get number of nontransparent colors
-
-            # Decode colors from hex to string and split it by 6 (because colors are #1c1c1c)
-            colors = [hex_data[i:i+6].decode() for i in range(0, total_colors_count*6, 6)]
-
-            # Add # to each item and filter empty items if there is a corrupted total_colors_count bit
-            colors = ['#'+i for i in colors if len(i)]
-            colors = [get_single_rgb(s) for s in colors]
-            return colors
-        else:
-            raise ValueError(f'Unknown file type: {s}')
-    else:
-        return get_rgb_range(s)
- 
-def palette_from_string(s):
-    s = s.strip()
-    pal = []
-    chunks = s.split(';')
-    for c in chunks:
-        pal = pal + palette_from_section(c)
-    return pal
-
-
-# downloader
-def wget_file(url, out):
-    try:
-        print(f"Downloading {out} from {url}, please wait")
-        output = subprocess.check_output(['wget', '-O', out, url])
-    except subprocess.CalledProcessError as cpe:
-        output = cpe.output
-        print("Ignoring non-zero exit: ", output)
diff --git a/v-diffusion-pytorch b/v-diffusion-pytorch
deleted file mode 160000
index 9ad961d..0000000
--- a/v-diffusion-pytorch
+++ /dev/null
@@ -1,1 +0,0 @@
-Subproject commit 9ad961d25670ecb1b59fb661e7a1e0b36dfc6470
diff --git a/vdiff.py b/vdiff.py
deleted file mode 100755
index 904621b..0000000
--- a/vdiff.py
+++ /dev/null
@@ -1,186 +0,0 @@
-# Originally made by Katherine Crowson (https://github.com/crowsonkb, https://twitter.com/RiversHaveWings)
-# The original BigGAN+CLIP method was by https://twitter.com/advadnoun
-
-from DrawingInterface import DrawingInterface
-
-import sys
-import os
-import subprocess
-
-# TODO: this is very hacky, must fix this later (submodule dependency)
-VDIFF_PATH = os.path.join(os.path.dirname(os.path.realpath(__file__)), 'v-diffusion-pytorch')
-sys.path.append(VDIFF_PATH)
-
-import torch
-from torch.nn import functional as F
-from torchvision.transforms import functional as TF
-import math
-
-from omegaconf import OmegaConf
-from taming.models import cond_transformer, vqgan
-from util import wget_file, map_number
-
-
-model_urls = {
-    "yfcc_2":      "https://v-diffusion.s3.us-west-2.amazonaws.com/yfcc_2.pth",
-    "yfcc_1":      "https://v-diffusion.s3.us-west-2.amazonaws.com/yfcc_1.pth",
-    "cc12m_1":     "https://v-diffusion.s3.us-west-2.amazonaws.com/cc12m_1.pth",
-    "cc12m_1_cfg": "https://v-diffusion.s3.us-west-2.amazonaws.com/cc12m_1_cfg.pth"
-}
-
-
-from pathlib import Path
-
-from diffusion import get_model, get_models, sampling, utils
-
-class ClampWithGrad(torch.autograd.Function):
-    @staticmethod
-    def forward(ctx, input, min, max):
-        ctx.min = min
-        ctx.max = max
-        ctx.save_for_backward(input)
-        return input.clamp(min, max)
-
-    @staticmethod
-    def backward(ctx, grad_in):
-        input, = ctx.saved_tensors
-        return grad_in * (grad_in * (input - input.clamp(ctx.min, ctx.max)) >= 0), None, None
-
-clamp_with_grad = ClampWithGrad.apply
-
-ROUNDUP_SIZE = 128
-# https://stackoverflow.com/a/8866125/1010653
-def roundup(x, n):
-    return int(math.ceil(x / float(n))) * n
-
-class VdiffDrawer(DrawingInterface):
-    @staticmethod
-    def add_settings(parser):
-        parser.add_argument("--vdiff_model", type=str, help="VDIFF model from [yfcc_2, yfcc_1, cc12m_1, cc12m_1_cfg]", default='yfcc_2', dest='vdiff_model')
-        parser.add_argument("--vdiff_schedule", type=str, help="VDIFF schedule [default, log]", default="default", dest='vdiff_schedule')
-        parser.add_argument("--vdiff_skip", type=float, help="skip a percentage of the way into the decay schedule", default=0, dest='vdiff_skip')
-        return parser
-
-    def __init__(self, settings):
-        super(DrawingInterface, self).__init__()
-        os.makedirs("models",exist_ok=True)
-        self.vdiff_model = settings.vdiff_model
-        self.canvas_width = settings.size[0]
-        self.canvas_height = settings.size[1]
-        self.gen_width = roundup(self.canvas_width, ROUNDUP_SIZE)
-        self.gen_height = roundup(self.canvas_height, ROUNDUP_SIZE)
-        self.iterations = settings.iterations
-        self.schedule = settings.vdiff_schedule
-        self.active_clip_models = settings.clip_models
-        self.eta = 1
-        self.vdiff_skip = settings.vdiff_skip
-
-    def load_model(self, settings, device):
-        model = get_model(self.vdiff_model)()
-        checkpoint = f'models/{self.vdiff_model}.pth'
-        
-        if not (os.path.exists(checkpoint) and os.path.isfile(checkpoint)):
-            wget_file(model_urls[self.vdiff_model],checkpoint)
-
-        model.load_state_dict(torch.load(checkpoint, map_location='cpu'))
-        if device.type == 'cuda':
-            model = model.half()
-        model = model.to(device).eval().requires_grad_(False)
-
-        if hasattr(model, 'clip_model'):
-            self.clip_model = model.clip_model
-            assert self.clip_model in self.active_clip_models, f"try adding {self.clip_model} to clip_models settings - vdiff model {self.vdiff_model} needs it but it is not active"
-        else:
-            self.clip_model = None
-
-        self.model = model
-        self.device = device
-        self.pred = None
-        self.v = None
-
-    def get_opts(self, decay_divisor):
-        return None
-
-    def rand_init(self, toksX, toksY):
-        # legacy init
-        return None
-
-    def init_from_tensor(self, init_tensor):
-
-        # compute self.t based on vdiff_skip
-        top_val = map_number(self.vdiff_skip, 0, 100, 1, 0)
-        # print("Using a max for vdiff skip of ", top_val)
-        self.t = torch.linspace(top_val, 0, self.iterations+2, device=self.device)[:-1]
-        # print("self.t is ", self.t)
-
-        self.x = torch.randn([1, 3, self.gen_height, self.gen_width], device=self.device)
-
-        if self.schedule == 'log':
-            self.steps = utils.get_log_schedule(self.t)
-        else:
-            self.steps = utils.get_spliced_ddpm_cosine_schedule(self.t)
-
-        # todo: maybe scheduld should adjust better due to init_skip?
-        if init_tensor is not None:
-            # reverse-center crop
-            new_x = torch.randn([1, 3, self.gen_height, self.gen_width], device=self.device)
-            margin_x = int((self.gen_width - self.canvas_width)/2)
-            margin_y = int((self.gen_height - self.canvas_height)/2)
-            if (margin_x != 0 or margin_y != 0):
-                new_x[:,:,margin_y:(margin_y+self.canvas_height),margin_x:(margin_x+self.canvas_width)] = init_tensor
-            else:
-                new_x = init_tensor
-            # by default the image is 99% based on init_tensor (for now)
-            self.x = new_x * 0.99 + self.x * 0.01
-
-        # [model, steps, eta, extra_args, ts, alphas, sigmas]
-        self.sample_state = sampling.sample_setup(self.model, self.x, self.steps, self.eta, {})
-        self.x.requires_grad_(True)
-        self.pred = None 
-        self.v = None 
-
-    def reapply_from_tensor(self, new_tensor):
-        return None
-
-    def get_z_from_tensor(self, ref_tensor):
-        return None
-
-    def get_num_resolutions(self):
-        return None
-
-    def makenoise(self, cur_it):
-        return sampling.sample_noise(self.sample_state, self.x, cur_it, self.pred, self.v).detach()
-
-    def synth(self, cur_iteration):
-        pred, v, next_x = sampling.sample_step(self.sample_state, self.x, cur_iteration, self.pred, self.v)
-        self.pred = pred.detach()
-        self.v = v.detach()
-        pixels = clamp_with_grad(pred.add(1).div(2), 0, 1)
-
-        # center crop
-        margin_x = int((self.gen_width - self.canvas_width)/2)
-        margin_y = int((self.gen_height - self.canvas_height)/2)
-        if (margin_x != 0 or margin_y != 0):
-            pixels = pixels[:,:,margin_y:(margin_y+self.canvas_height),margin_x:(margin_x+self.canvas_width)]
-
-        # save a copy for the next iteration
-        return pixels
-
-    @torch.no_grad()
-    def to_image(self):
-        out = self.synth(None)
-        return TF.to_pil_image(out[0].cpu())
-
-    def clip_z(self):
-        return None
-
-    def get_z(self):
-        return self.x
-
-    def set_z(self, new_z):
-        with torch.no_grad():
-            return self.x.copy_(new_z)
-
-    def get_z_copy(self):
-        return self.x.clone()
-        # return model, gumbel
diff --git a/vectorize.py b/vectorize.py
deleted file mode 100755
index 30d96db..0000000
--- a/vectorize.py
+++ /dev/null
@@ -1,190 +0,0 @@
-import argparse
-import sys
-import json
-import numpy as np
-from sklearn import metrics
-from sklearn import svm
-import os
-from tqdm import tqdm
-from util import real_glob
-
-import torch
-from clip import clip
-from torchvision.transforms import Compose, Resize, CenterCrop, ToTensor, Normalize
-from PIL import Image
-
-from slip import get_clip_perceptor, all_slip_models
-
-perceptors = {}
-
-def init(args):
-    global perceptors, resolutions
-
-    device = torch.device('cuda:0' if torch.cuda.is_available() else 'cpu')
-
-    if args.models is not None:
-        # print("Running models ", args.models)
-        models = args.models.split(",")
-        args.models = [model.strip() for model in models]
-    else:
-        args.models = clip.available_models()
-        args.models =  args.models + all_slip_models
-        # print("using models ", args.models)
-
-    for p_model in args.models:
-        perceptor = get_clip_perceptor(p_model, device)
-        perceptors[p_model] = perceptor
-
-def fetch_images(preprocess, image_files):
-    images = []
-
-    for filename in image_files:
-        image = preprocess(Image.open(filename).convert("RGB"))
-        images.append(image)
-
-    return images
-
-def do_image_features(model, images):
-    image_input = torch.tensor(np.stack(images)).cuda()
-
-    with torch.no_grad():
-        image_features = model.encode_image(image_input).float()
-
-    return image_features
-
-def spew_vectors(args, inputs, outfile):
-    global perceptors, resolutions
-
-    input_files = real_glob(inputs)
-    save_table = {}
-    for clip_model in args.models:
-        perceptor = perceptors[clip_model]
-        input_resolution = perceptor.input_resolution
-        print(f"Running {clip_model} at {input_resolution}")
-        preprocess = Compose([
-            Resize(input_resolution, interpolation=Image.BICUBIC),
-            CenterCrop(input_resolution),
-            ToTensor()
-        ])
-        images = fetch_images(preprocess, input_files);
-
-        features = do_image_features(perceptor, images)
-        print(f"saving {features.shape} to {clip_model}")
-        save_table[clip_model] = features.tolist()
-
-    with open(outfile, 'w') as fp:
-        json.dump(save_table, fp)
-
-def run_avg_diff(args):
-    f1, f2 = args.avg_diff.split(",")
-    with open(f1) as f_in:
-        table1 = json.load(f_in)
-    with open(f2) as f_in:
-        table2 = json.load(f_in)
-    save_table = {}
-    for k in table1:
-        encoded1 = np.array(table1[k])
-        encoded2 = np.array(table2[k])
-        print("Taking the difference between {} and {} vectors".format(encoded1.shape, encoded2.shape))
-        m1 = np.mean(encoded1,axis=0)
-        m2 = np.mean(encoded2,axis=0)
-        atvec = m2 - m1
-        z_dim, = atvec.shape
-        atvecs = atvec.reshape(1,z_dim)
-        print("Computed diff shape: {}".format(atvecs.shape))
-        save_table[k] = atvecs.tolist()
-
-    with open(args.outfile, 'w') as fp:
-        json.dump(save_table, fp)
-
-def run_svm_diff(args):
-    f1, f2 = args.svm_diff.split(",")
-    with open(f1) as f_in:
-        table1 = json.load(f_in)
-    with open(f2) as f_in:
-        table2 = json.load(f_in)
-    save_table = {}
-    for k in table1:
-        encoded1 = np.array(table1[k])
-        encoded2 = np.array(table2[k])
-        print("Taking the svm difference between {} and {} vectors".format(encoded1.shape, encoded2.shape))
-        h = .02  # step size in the mesh
-        C = 1.0  # SVM regularization parameter
-        X_arr = []
-        y_arr = []
-        for l in range(len(encoded1)):
-            X_arr.append(encoded1[l])
-            y_arr.append(False)
-        for l in range(len(encoded2)):
-            X_arr.append(encoded2[l])
-            y_arr.append(True)
-        X = np.array(X_arr)
-        y = np.array(y_arr)
-        # svc = svm.LinearSVC(C=C, class_weight="balanced").fit(X, y)
-        svc = svm.LinearSVC(C=C,max_iter=20000).fit(X, y)
-        # get the separating hyperplane
-        w = svc.coef_[0]
-
-        #FIXME: this is a scaling hack.
-        m1 = np.mean(encoded1,axis=0)
-        m2 = np.mean(encoded2,axis=0)
-        mean_vector = m1 - m2
-        mean_length = np.linalg.norm(mean_vector)
-        svn_length = np.linalg.norm(w)
-
-        atvec = (mean_length / svn_length)  * w
-        z_dim, = atvec.shape
-        atvecs = atvec.reshape(1,z_dim)
-        print("Computed svm diff shape: {}".format(atvecs.shape))
-        save_table[k] = atvecs.tolist()
-
-    with open(args.outfile, 'w') as fp:
-        json.dump(save_table, fp)
-
-def main():
-    parser = argparse.ArgumentParser(description="Do vectory things")
-    parser.add_argument("--models", type=str, help="CLIP model", default=None, dest='models')
-    parser.add_argument("--inputs", type=str, help="Images to process", default=None, dest='inputs')
-    parser.add_argument("--avg-diff", dest='avg_diff', type=str, default=None,
-                        help="Two vector files to average and then diff")
-    parser.add_argument("--svm-diff", dest='svm_diff', type=str, default=None,
-                        help="Two vector files to average and then svm diff")
-    parser.add_argument("--z-dim", dest='z_dim', type=int, default=100,
-                        help="z dimension of vectors")
-    parser.add_argument("--encoded-vectors", type=str, default=None,
-                        help="Comma separated list of json arrays")
-    parser.add_argument("--encoded-true", type=str, default=None,
-                        help="Comma separated list of json arrays (true)")
-    parser.add_argument("--encoded-false", type=str, default=None,
-                        help="Comma separated list of json arrays (false)")
-    parser.add_argument('--thresh', dest='thresh', default=False, action='store_true',
-                        help="Compute thresholds for attribute vectors classifiers")
-    parser.add_argument('--svm', dest='svm', default=False, action='store_true',
-                        help="Use SVM for computing attribute vectors")
-    parser.add_argument("--limit", dest='limit', type=int, default=None,
-                        help="Limit number of inputs when computing atvecs")
-    parser.add_argument("--attribute-vectors", dest='attribute_vectors', default=None,
-                        help="use json file as source of attribute vectors")
-    parser.add_argument("--attribute-thresholds", dest='attribute_thresholds', default=None,
-                        help="use these non-zero values for binary classifier thresholds")
-    parser.add_argument("--attribute-set", dest='attribute_set', default="all",
-                        help="score ROC/accuracy against true/false/all")
-    parser.add_argument('--attribute-indices', dest='attribute_indices', default=None, type=str,
-                        help="indices to select specific attribute vectors")
-    parser.add_argument('--outfile', dest='outfile', default=None,
-                        help="Output json file for vectors.")
-    args = parser.parse_args()
-
-    if args.avg_diff:
-        run_avg_diff(args)
-        sys.exit(0)
-
-    if args.svm_diff:
-        run_svm_diff(args)
-        sys.exit(0)
-
-    init(args)
-    spew_vectors(args, args.inputs, args.outfile)
-
-if __name__ == '__main__':
-    main()
\ No newline at end of file
diff --git a/vectors/textoff.json b/vectors/textoff.json
deleted file mode 100755
index 4c3e9d5..0000000
--- a/vectors/textoff.json
+++ /dev/null
@@ -1,1 +0,0 @@
-{"RN50": [[-0.00352062691341747, 0.0027054412798448047, -0.0006988319483670329, 0.0001517751000144265, 0.005300825292413883, 0.004351312463933771, 0.012088065797632391, 0.009106348861347546, 0.008465463464910334, -0.006911413236097851, 0.0018266331065784798, -0.0022643371061845264, 0.012874516573819246, 0.001583099365234375, -0.0042469149286096745, -0.004088141701438211, -7.266077128323639e-05, 0.007355668328025124, -3.4836205569180605e-05, -0.0009519512003118342, -0.00028588555075905516, 0.0036504512483423405, -0.011014938354492188, 4.712559960105139e-05, 0.0010846528139981356, 0.0033086755058982153, 0.00030237978154962685, -0.0007285638289018111, 0.0009906075217507102, -0.007752827622673727, -0.0025028315457430745, -0.0005319335243918685, -0.0020070238546891633, -0.0006972659717906608, 0.00015995719216086585, 0.007504300637678666, 0.0018695809624411845, 0.008411775935779919, -0.005209979685870084, -0.0006839145313609733, 0.003913640975952149, -0.012987223538485441, 0.00027077848261052896, -0.003179046240719883, -0.006552349437366833, -0.008290670134804466, -0.0003082752227783202, -0.0006741610440340884, -0.03547269647771663, -0.0021215948191556063, 0.0019846396012739697, 0.0006733590906316581, -0.01886177062988282, -0.0004364793950861149, -0.004194671457464045, 0.012891281734813347, 0.003595742312344638, -0.0070543858137997704, 0.0027503858913074837, -0.0033294612711126147, -0.0006278699094598942, -0.007477413524280895, 0.0013599124821749601, -0.007172812115062367, -0.008699893951416016, -0.00037038326263427734, 3.247640349648219e-05, -0.002391706813465465, 0.0025115880099209876, -0.0008417367935180664, 0.0005823482166637077, 0.0025242458690296517, -0.007461851293390448, 0.002128189260309391, -0.01333217729221691, 0.005299909548325972, 2.3852695118297112e-05, 0.004437793384898792, 0.008873050863092594, 0.00527102297002619, 0.006254868073896929, -0.004295923493125221, 0.0012113614515824756, -0.0009939887306906962, 0.003197054971348156, 0.001301223581487482, 0.04388215325095437, 0.0029278939420526676, -0.0002660236575386741, -0.011375470594926313, -0.00371033495122736, 0.004890571941028942, -0.00962608510797674, -0.0008061582391912289, -0.002662615342573686, -0.0052450353449041195, -0.0064837715842507105, -0.0013891891999678174, 0.0004183162342418327, 0.002383297139948065, 0.0011422417380593038, 0.009077754887667568, -0.004742253910411489, -0.0006402324546467175, -0.0026021437211470183, -0.0010581883517178621, 0.00023039904507723714, -0.004636322910135443, 0.007350228049538351, 0.0007035515525124283, 0.008446346629749645, -0.0031428310004147616, -0.00044592944058504964, -0.003871787678111683, -0.001426507126201283, -0.00012563575397838247, -0.005005912347273393, -0.002147474072196267, 0.0017245845361189404, 0.0006977861577814274, 0.011994440447200428, -8.058547973632812e-05, -0.0018034414811567822, -0.004363710230047052, -0.008151810277592052, 0.005927096713672985, -0.004609167575836181, -0.0037462277845902877, 0.0016931187022816052, -0.002874591133811258, -0.004921929402784868, -0.005856102163141424, 0.0014278130097822711, -0.00245611776005138, 0.006735265254974364, -0.0006560412320223714, 0.0017036091197620744, -0.001511310989206486, 0.0029179833152077417, 0.0019975846463983708, 5.1216645674274225e-05, 0.0034576437690041276, 0.005850250070745295, -7.841803810813212e-05, 0.005778529427268288, -0.00032344731417569255, 0.0015641017393632373, 0.006710599769245494, -0.0044873302633112126, -0.003594349731098522, -0.0019502152096141472, -0.0016773397272283382, -0.008547490293329412, -0.004326817664233121, 0.0020907141945578833, -0.006109118461608887, -0.007719202475114303, 0.008491776206276634, 0.00029860843311656595, -0.005274642597545277, 0.0009054487401788883, 0.010660168799487026, 0.006708925420587713, -0.0015898455273021346, -0.004016464406793766, 0.0035997737537730827, -0.001001729206605391, 0.005577412518587979, 0.0054960250854492205, -0.011790383945811875, 0.007068287242542617, 0.00544478405605663, 0.01283464106646451, 0.004586718299172142, -0.00686368075284091, 0.005005533044988459, 0.006608895280144431, -0.00047594579783352946, -0.0035447640852494674, 0.00026079741391268646, 0.0001285076141357422, -0.003222227096557617, -0.00039430369030345566, -0.0032543269070712004, -0.0036559998989105225, 0.006552111018787731, 0.0015981414101340552, -0.006477269259366122, 0.004368963566693393, 0.002409685741771351, -0.002068622545762496, -0.002865059809251265, 0.011994318528608843, -0.004416127096522938, -0.0028345368125221944, 0.006722439419139515, 0.010558518496426668, 0.0004060837355527011, 0.005698854273015802, 0.000611920248378407, 2.780285748568451e-05, 0.006765929135409268, -0.004063812169161709, -0.002712119709361683, 0.0008626417680220183, 0.0008459958163174719, 0.006807164712385698, -0.0025689601898193355, 0.00010609626770019531, -0.0005223723975094882, 0.00150056318803267, 0.0025708458640358676, 6.471438841386274e-05, 0.006202681498094038, 0.009520216421647507, 0.0019860267639160156, 0.06500949642874979, 0.000848596746271307, 0.001673506064848466, 0.009558937766335228, -0.00035282156684181905, 0.010937192223288796, -0.0029463334517045303, -0.0024822408502752132, -0.038452668623490775, 0.0011552734808488322, -0.0037023154172030354, 0.01895150271329013, -0.002195466648448598, 0.006043260747736151, 0.007906653664328836, 0.0008560364896600899, 0.00578020919453014, -0.002150706269524315, -0.00045584006742997556, 0.001883485100486062, 0.00028320876034823323, 0.004183509133078836, 0.004998423836447975, -0.010362798517400573, 0.0018253109671852816, 0.0035137263211337012, -0.005729371851140802, 0.0004261379892175848, 0.001591611992229115, -0.00374603271484375, -0.00240281495180997, 0.0012030168013139205, -0.006185488267378373, -0.00018935853784734537, 0.006842223080721768, -0.005718491294167258, 0.0019578066739169026, -0.0014384876598011365, 0.006033117120916193, 0.006257133050398393, 0.0005049272017045442, 0.0003953847018155184, -0.005133303728970614, -0.005227045579390093, -0.006310370835390959, 0.005638843232935125, 0.000848935409025712, 0.00762133164839311, -0.0005802132866599332, -0.00016494772650978758, -0.00884513421492143, 0.00012571161443536948, 3.418597308072185e-05, -0.010629827325994316, 0.00047482143748890215, 0.0034043030305342236, 0.007815317674116654, 0.02031786333430897, 0.0028586062518033114, 0.0033646713603626595, -0.005963520570234819, -0.007613610137592663, -0.004526322538202459, 0.004859246990897438, -0.004209821874445134, -0.0037750764326615763, 0.003975694829767401, 0.004261797124689276, 0.0017280145124955611, 0.0031122673641551623, 0.0024671771309592505, 0.003771153363314542, 0.0007571307095614339, -0.0009252808310768819, -0.0009508566422895964, -0.0041170553727583456, -0.0043886276808652, 0.0004704106937755224, -0.003440260887145996, 0.0072211135517467155, -0.004235332662409002, 0.004717545075850054, -0.022601907903497864, 0.004157727414911444, 0.004181254993785513, 0.00202951648018577, -0.0037002996964888143, 0.006572940132834696, -0.001541370695287531, -0.005456902764060282, 0.0008647983724420719, -0.008528362620960583, 0.006135095249522816, 0.0021889209747314453, -0.0039032210003245964, 0.0009616884318265056, -0.007199810309843583, 0.0038724812594327068, 0.0013666586442427201, -0.0019963871348987927, -0.004285725680264561, 0.002882372249256481, -0.007776715538718483, 0.0048781633377075195, -0.0007359981536865234, -0.001287633722478693, -0.0031149008057334204, -0.00016430020332336426, -0.0001315989277579568, -0.00669084895740856, -0.00021538951180198, 0.003912362185391513, 0.003378594463521784, 0.0010878281159834428, -0.0003632848913019352, 0.0004821257157759228, -8.244135163047098e-05, -0.003143223849209873, 0.0016692985187877311, 0.00736634297804399, -0.0024758468974720354, 0.0018857148560610685, 0.0007198480042544279, -0.004587222229350697, -0.00010065598921342326, 0.003770459781993519, -0.0005645481022921475, -0.0009833520109003239, -0.0004423694177107377, 0.0035105456005443225, -0.0021387013522061425, -0.0011422850868918677, 0.003245879303325306, -0.0019702152772383256, 0.0020992972634055404, -0.010469024831598454, 0.0011430111798373136, -0.0125732882456346, 0.0010128888216885644, 0.007774743166836825, -0.002657158808274703, 0.008486661044034092, 0.0034941299395127735, -0.0004295733841982747, 0.0077374198219992895, 0.009309248490767058, 0.00568771091374484, -0.0028292265805331144, 0.0018794103102250529, 0.0010556741194291553, -0.0049030347303910685, -0.0008375427939675065, 0.0015284039757468486, -0.006937977942553433, 0.0006198016079989356, 0.0042388953945853465, -0.0073094259608875636, 0.005661644718863748, -0.0003705024719238281, -0.0011288902976296176, 0.004188515923239968, 0.002422430298545143, 0.0012186440554532137, -0.0035095485773953524, -0.004214720292524858, -0.021877115423029114, -1.5031207691539408e-05, -0.006648930636319247, -0.0037475336681712756, 0.0024771690368652344, 0.01026396317915483, -0.00153892690485174, -0.0038614056327126245, -2.8523531827059738e-05, -0.007432330738414417, -0.0018406889655373307, 0.0009574023160067472, -0.0026504343206232243, -0.0014676180752840908, -0.0020135099237615396, -0.006202892823652786, -0.0008023218675093213, -0.0017740563912825164, 0.0033418590372258964, -0.0004475766962224806, 0.010052626783197577, -0.0014892816543579102, 0.007431723854758523, -0.0021157047965309848, -0.0004514347423206673, 0.002466375177556818, -0.005517680536616932, -0.002055644989013672, -0.012164029208096592, -0.0008761666037819596, 0.002704040570692583, -0.0005375471982088956, -0.007220604202964089, -0.003995526920665394, -0.001798022877086294, 0.005022439089688388, -0.00611556660045277, 0.005801330913196909, 0.0063874288038773975, 0.017689098011363633, 0.005907329646023837, 0.0011946504766290836, 0.0048553862354972135, -0.004254861311479048, 0.0018984187733043327, -0.00020378828048706055, 0.009916294704784046, -0.0012317462400956583, 0.0008104280991987744, -0.0017438368363813933, -0.0015401623465798118, 0.005905248902060769, 0.003985843875191428, -0.0041179656982421875, 0.004423444921320135, -0.006594625386324796, -0.0010542002591219825, -0.001782536506652832, -0.00425975972955877, 0.00697415525263006, -0.00020165876908735843, -0.0009440508755770571, -0.00848167592828924, 0.002010117877613414, 0.0013429901816628198, -0.003618565472689542, -2.597136930985837e-05, -0.0029498880559747885, -0.0036215240305120296, 0.014284480701793324, -0.005490021272139116, 0.0014783902601762239, -0.0045802701603282585, -0.0030392408370971697, 0.003971468318592418, -0.00851142406463623, 0.006708752025257457, 0.0077161355452104044, -0.00043383511629971686, -0.0013179318471388379, -0.0002488873221657495, 0.0013403133912519977, -0.00010113282637162638, 0.0023458437486128373, 0.004509871656244452, 0.027653954245827415, -0.003035014325922186, 0.002760280262340199, 0.0008948282762007279, 0.0019385381178422412, -0.002546982331709428, 0.00318466533314098, 0.013026107441295275, -0.001374862410805441, 0.0032373666763305664, 0.0015187696977095148, 0.0029976774345744743, -0.002486694942821156, 0.004582364450801502, 0.00437844612381675, -0.004070433703335849, -0.009075728329745207, -0.0063320073214444255, -0.0054434673352675, -0.00041883100162852895, 0.002909015525471079, -0.002665357156233353, 0.0016804283315485172, 0.004156112670898438, 0.004500692540949041, -1.0896812785755189e-05, 0.0014854723756963558, 0.0013287500901655695, -0.00455474853515625, 0.00705459172075445, -0.007503636858680031, -0.0071146650747819385, -0.0013523101806640625, 0.0035119056701660156, 0.001567081971602006, 0.01172859018499201, -0.00011065873232754796, 0.001459197564558549, -0.0054460872303355844, -0.0050481449473987906, -0.0009293772957541732, 0.001209822568026455, -0.0030788291584361678, 0.0024060769514604053, 0.0063928799195723095, 0.0024188865314830436, -0.005113991824063385, -0.00011753494089299988, -0.0021415840495716443, -0.0009474266659129753, 0.0012054389173334296, 0.004338432442058216, 0.00200111215764826, -0.005331754684448242, -0.0037078423933549366, -0.03464659777554598, -3.752925179221437e-05, 0.0004835020412098278, -0.005558135834607212, 0.00036837296052412557, -0.048473011363636354, 0.0007916905663230209, 0.012216047807173294, -0.014386263760653408, 0.0019754604859785613, -0.0005374388261274862, -0.0037696361541748047, -0.0013536973433061078, 0.0021065581928599968, 0.0003125775944102893, -0.00018092718991366303, 0.005429137836803089, 0.002174675464630127, 0.010734623128717596, -0.0037397037852894177, -0.003513845530423251, 0.004967776211825284, 0.0002214258367365038, -0.002593322233720259, 0.0004711692983453924, 0.008388616821982643, -0.003560618920759721, -0.0013528737154873934, 0.004006819291548294, -0.0005091780965978448, -0.007321661168878729, 0.005252041599967262, -0.003154971382834695, 0.00505774129520763, -0.004720286889509722, -0.0002452676946466618, -0.0017203851179643098, 0.007674477317116476, 0.004167730158025568, -0.004334411837837912, -0.002800746397538618, 0.004856209863315929, -0.0010945146734064283, 0.005997961217706854, 0.000955852595242587, -1.0365789586845586e-05, -0.005057096481323242, -0.0043372024189342155, 0.003059701486067339, -0.003130132501775568, 0.0027239864522760563, -0.00022022832523692744, -0.002958471124822443, 0.004441954872824928, -0.02029986815019088, 0.0021720582788640804, -0.0009309812025590377, -0.002278490500016646, -0.005419384349476204, 0.0005552118474786913, 0.0005949600176377735, 0.00017821788787841797, 0.002077782695943659, -0.020687704736536198, 0.0009893287311900732, 0.0066692395643754435, -0.0016106258739124642, 0.0009475621310147371, -0.008239263837987726, 0.0035750215703790836, -0.0027140595696189184, 0.00440812110900879, -0.0027846260504289107, -0.00356999310580167, 0.0008233921094374223, 0.002612802115353671, -0.00023907964879816244, 0.0033344788984818897, 0.013321551409634676, -0.010873588648709385, -0.01070612127130681, 0.0036133798685940833, 0.010874379764903675, -0.00023964318362149333, -7.945841008966635e-05, 0.0039119720458984375, 0.004494537006724961, -0.003724000670693137, 0.0009009621360085221, -0.008688146417791195, -0.0027021494778719816, -0.011367667805064808, -0.0026375868103720923, 0.004180236296220259, -0.0021477829326282845, -0.0036349513313987036, -0.00443765250119296, -0.00034057010303844074, 0.004912506450306286, -0.006045601584694601, 0.00022927197543057623, 0.0004262978380376643, -0.0049199949611317025, 0.003541426225142046, 0.004464355382052335, -0.010978005149147721, 0.004356281323866411, -0.00029095194556496364, 0.01313066211613742, 0.00018415667793967498, -0.010037297552282158, -0.0013552037152377051, -0.0075121359391645956, -0.009132038463245737, 0.0006269433281638412, 0.008582071824507279, -0.0016505664045160465, -0.0036035234277898617, -0.001300920139659535, 0.0027198358015580616, 0.010561032728715378, 0.00016914985396645287, 0.000914291902021927, 0.0003333741968328304, 0.004341645674272018, -0.0015367973934520373, 0.0002896568991921193, -0.0044119141318581315, -0.0014783252369273778, 0.001965045928955078, 0.0013116923245516691, 0.0027581453323364258, -0.001801512458107688, -0.002795585177161477, -3.761594945734197e-05, -0.007861440831964666, 0.0019152218645269222, 0.0014876994219693278, -0.00030591271140358663, 0.007012280550870029, 0.0034770532087846236, 0.0008739883249456232, 0.002871112389998003, 0.002405128695748069, -0.0131444280797785, 0.0010484782132235441, -0.017812382091175426, 0.010612639513882723, 0.004086451096968217, 0.007314557378942317, -0.009724140167236328, -0.0053007385947487565, -0.001176400618119673, -0.0010333277962424545, -5.3002075715498506e-05, 0.001004825938831676, 0.003828108310699463, 8.923357183282868e-05, 0.003329092806035822, 0.00587606430053711, -0.0005836324258284135, -0.0008034055883234196, 0.007618557323109019, 0.003599042242223566, -0.003939081322063099, 0.0034064731814644547, 0.012196800925514915, 0.001340952786532315, -0.003137908198616721, -0.003347516059875489, -0.0035138780420476733, 0.004687526009299538, -0.00410803881558505, 0.006262345747514204, -0.0012774900956587362, -0.002492666244506836, 8.904121138832795e-05, -0.0012639219110662289, 0.00325709039514715, -0.0017482584173029135, -0.0019247260960665626, -0.0024763887578790836, 0.004330223256891424, -0.00023945895108309673, 0.0006309260021556508, 0.003561149943958628, -0.007816222580996426, -0.00994420051574707, -0.002052261070771651, 0.014853938059373337, 0.0015987049449573895, 0.000569527799432928, 0.0039642724123868074, 0.00022732940587130365, -0.00030081922357732605, 0.0003272403370250354, 0.0006990541111339225, -0.001550349322232334, 0.0027446746826171875, -0.005414030768654562, 0.002104108983820135, 0.0013485848903656006, -0.0008459958163174706, 0.0032371824437921705, 0.001470844854008068, -0.002600236372514206, -0.001121846112337982, -0.004175424575805664, 0.004016561941667036, -0.0003371807661923503, -0.007337028330022638, 0.00025882775133306325, -0.004712408239191229, -0.004599365321072664, -0.0017652945085005322, -0.005073008212176237, 0.0025590224699540568, 0.001329256729646162, -0.002705183896151456, -0.0008932243693958635, -0.007837460799650711, 0.0015697370875965462, -0.0007016875527121806, -0.0008565187454223634, 0.009530782699584961, -0.0052967071533203125, -0.004362193020907315, 0.0042275515469637785, -0.0035445175387642603, -0.0017672289501536975, 0.008611852472478693, -0.004421938549388538, 0.003538294271989302, -0.0007380572232333097, 0.004384344274347479, -0.006270435723391447, -0.00013106248595497823, 0.001146522435274991, 0.003586985848166726, -0.008454962210221724, -7.688728245821858e-05, 0.0017382773486050692, 0.002273933453993364, -0.0018949481573971834, 0.004296866330233488, 0.00424303791739724, 0.0012441223317926579, -0.002535083077170633, 0.002334161238236861, 0.004485011100769045, -0.0017324469306252213, -0.0051161917773160075, 0.0005221637812527742, -0.0024855841289867057, 0.0006213730031793766, -0.0009215528314763851, 0.0007312622937289151, 0.0038538629358465023, 0.0033509351990439673, 0.003950585018504749, 0.004285790703513405, 0.004521315748041327, -0.0003979829224673185, 0.000106489116495306, 0.000251415100964633, -0.005382797934792257, -4.111636768687867e-05, -0.004954728213223544, -0.0047921592539007015, 0.0050699060613458805, -0.002022613178599964, -0.0040904391895640975, 0.001771853728727861, 0.00034885243936018503, -0.00717926025390625, -0.013980356129733, 0.002145116979425604, -0.008765935897827148, -0.008637485179034145, 0.002292437986894087, 0.014804666692560368, -0.0024340315298600626, -0.0022984038699756966, 0.00337335467338562, 0.0004792538556185645, 0.0015811920166015625, 0.00242570313540372, -0.009765982627868652, -0.00010817159305919269, 0.0005203268744728793, 0.001007789915258234, -0.005707849155772816, -0.0003651814027266064, 0.009537241675636986, 0.0037376663901589127, 0.002048427408391779, 0.003602212125604803, 0.009515575387261131, -7.029013200239702e-05, 0.000347251241857356, -0.0007701245221224699, -8.347088640386406e-05, -0.001514808698133991, -0.0004166256297718392, -0.004285010424527255, -0.005670970136469061, -0.00406932830810547, 0.001250535249710083, -0.00042278116399591635, 0.027764927257191055, -0.00014687939123673874, 0.0011676658283580436, 0.002436849203976719, -0.021281979300759063, 0.002852873368696733, 0.0003154846754941081, -0.0035479285500266333, -0.0025731650265780363, -0.004145297137173739, 0.003251064907420766, -0.0018914125182411881, 0.003368312662298029, -0.003966984423724089, -0.0018636584281921387, 0.0017598108811811971, -0.00013103268363258945, 2.832846208052249e-05, 0.005074365572495894, 0.003442785956642845, -0.00509627569805492, 0.009400291876359419, -4.335425116799098e-05, -0.0024513548070734196, -0.005872553045099432, 0.0015281763943758879, -0.00021808797662908365, 0.006657540798187256, -0.0051145120100541544, -0.005083409222689541, 0.009118147871711037, 0.0043721144849603825, 0.0034455386075106535, 0.0012611475857821387, 0.0023788538846102637, 0.00807160951874473, 0.0067254846746271305, 0.007864941250194202, 0.0006962120532989502, 0.005414848977869207, 0.00561447577043013, -0.0031387264078313656, -0.008315660736777565, 0.0028547156940807, -0.00048797780817205256, -0.0005389126864346581, -0.004302978515625, 0.00443051890893416, -0.005838209932500666, 0.0008998784151944246, 0.004155023531480269, 0.005853327837857334, -0.003463875163685192, -0.003918257626620207, 0.003555763851512562, -0.0018738399852405892, 0.0008847252889112988, 0.007416237484325062, -0.0034132870760830965, 0.0020243037830699577, -0.0009841512550007212, 0.012891596013849434, 0.0023915334181352083, -5.776231939142373e-05, 0.0030634294856678357, -0.011673710562966087, -0.003881541165438565, 0.0015381466258655892, 0.001573909412730824, -5.250627344305023e-06, 0.004327882419932972, -0.0022478510033000602, 0.005910391157323665, -0.008171894333579325, -0.001733389767733488, 0.01590780778364702, -0.008063533089377666, 0.02278698574412953, -0.0005600723353299236, 0.005844593048095703, 0.0013250654393976383, -0.003641713749278676, 0.0037194056944413623, 0.001162355596368972, -0.006326935508034447, -0.01652832735668529, 0.0024177892641587687, 0.005016914822838524, -0.003975120457735928, 0.0023358084938742887, 0.0007995908910577955, -0.0046728307550603695, 0.0005945427851243449, -0.007524170658805154, -0.00384079326282848, -0.0014040036634965381, -0.0038145347075028853, 0.011377583850513805, -0.0021593895825472746, 0.003671949559992012, -0.0007267865267666894, -0.002500420266931707, -0.005999630147760565, -0.0010743574662642058, -0.006033984097567472, -0.004542654210870916, -0.00014854290268637914, -0.003214532678777521, -4.4605948708274345e-05, 0.00028705596923828125, 0.0007577375932173295, -0.003509272228587757, 0.005102970383384012, 0.00024593418294733226, 0.0044288635253906285, 0.002329956401478161, 0.004402054981751876, 0.00238578969782049, 0.004246538335626776, -0.004370602694424717, -0.0049750154668634595, -0.00033504583618857657, 0.0005908581343564119, -0.0021086822856556282, -0.0018684864044189453, -0.002438696947964756, -0.005902572111649948, -0.004190900109030983, -0.0038786259564486418, 0.000364476984197443, -0.0038677995855158024, -0.0007391571998596191, -0.005751458081332121, -0.009081328457052057, 0.0005486661737615411, 0.0026280988346446647, -0.005370646715164185, 0.0043868341229178695, 0.0054779052734375, 0.0002801878885789351, 0.007157098163257946, -0.003230314363132822, -0.0030104030262340185, -0.0029525214975530453, -0.028574184937910602, 0.007196599786931819, 0.004637802189046685, 0.0004270510240034619, -0.006623484871604226, -0.002176414836536754, -0.0008048577742143111, 0.006160042502663353, -0.0011644580147483134, 0.0012597712603482332, 0.005305181850086559, 0.001373621550473299, 0.005242781205610795, 0.00011741031299937824, -0.012194243344393643, 0.002364982258189808, 0.001361153342507103, 0.005049079656600952, -0.0004056990146636963, 0.008558056571266869, -0.0009456547823819238, 0.00013420798561789753, -0.0012821500951593554, 0.0037866505709561443, 0.0031584609638560905, -0.0006213838403875179, -0.0034016641703518953, -0.002706939523870295, 0.0016342753713781168, -0.004575612870129672, 0.0037832693620161576, 0.0010160641236738725, 0.0015135353261774244, -0.0008072094483809033, 0.005303962664170698, -0.002060543407093395, 0.003020503304221416, 0.0023610429330305624, -0.025980949401855476, 0.0028377988121726294, -0.005648542534221302, -0.001749212091619318, 0.0009813525459983134, -0.009949044747786089, -8.467923511158338e-05, -0.009464827450838957, 0.007771838795055042, 0.0010179606350985441, 0.0071004520763050406, 0.0006346269087357951]], "RN101": [[0.0014813596552068539, -0.008660232478922064, -0.006457892331210052, -0.0025003606622869337, 8.784640919078449e-05, -9.684129194779956e-05, -5.699287761341473e-05, 0.00047566673972389804, -0.0006809776479547672, -0.0066137313842773455, -0.018103469501842155, -0.008102568713101475, 0.004446192221208053, -0.0038653666322881527, 0.0015375830910422592, 0.0009896430102261634, -0.004124083302237771, -0.002213044600053267, -0.0050840269435535775, 0.015600204467773441, 0.0039102380925958805, -0.007056555964730003, -0.0021557699550281873, -0.0034002282402732153, 0.004069588401100852, -0.005520522594451905, 0.0043613910675048845, -0.0031408830122514227, 0.011805621060458096, -0.00014734268188476562, 0.0008085857738148081, -0.0016460256143049756, 0.004144289276816628, 0.004701397635719993, 0.003481247208335184, -0.003757455132224344, 0.0004962574351917615, -0.0036662275140935735, -0.005789130926132202, 0.0025658173994584517, -0.004768740047108044, 0.007075049660422585, -0.005811203609813343, 0.001037077470259233, 0.0006186745383522727, 0.009959957816384056, 0.007034865292635832, 0.00533284382386641, 0.011189097707921808, -0.0012249513105912638, -0.0030301484194668856, 0.0029043934561989522, -0.007578307932073419, -0.004971330816095526, 0.005240115252408115, -0.0010242028669877473, 0.00576137141747908, 0.009883430871096523, -0.007578687234358354, -0.0034195293079723015, 0.011902451515197754, -0.022492061961780885, -0.0029377395456487466, -0.00022084062749689118, -0.003949793902310459, 0.007319276983087713, 0.004232016476717862, 0.0005225159905173559, 0.0012057694521817302, -0.0017257549545981665, -0.007522171193903143, -0.005190177397294478, -0.006489298560402611, -0.0075696815143932, -0.0048568465492942105, 0.004771145907315341, -0.004217017780650745, -0.0011289119720458984, 0.00510461222041737, -0.020363547585227265, -0.003140817989002574, -0.011964624578302557, -0.004574298858642578, -0.0036814537915316504, 0.0028042576529762964, -0.00840670412236994, 0.008502656763250177, 0.003597432916814631, -0.0011987469413063771, 0.004640600898049093, 0.00857863101092252, -0.003507256507873536, -0.0007977404377677226, -0.021562056107954558, 0.0017859285528009604, 0.0032483447681773796, -0.002250357107682661, 0.003801698034459896, 0.0021869756958701396, -0.00038879567926580413, -0.002338626167990944, -0.013641357421875, 0.0038510452617298474, -0.005485599691217596, 0.0023728500713001595, 0.004701972007751465, -0.012963135134090076, 0.0013654340397227897, -0.005903287367387251, -0.0002544142983176498, -0.013805795799602161, 0.0019234852357344198, -0.0058143518187782975, -0.017040469429709694, 0.00349369916048917, 0.00854103131727739, -0.01799427379261364, -0.0050311955538663, 0.0010836774652654476, 0.0028455040671608693, -0.006769353693181818, -0.003201536156914448, -0.010886539112437851, -0.0015690543434836645, 0.010985417799516159, -0.0005338706753470683, -0.0027993809093128557, 0.002277721058238636, -0.007047523151744497, -0.006681962446732949, -0.01564046469601718, -0.007536866448142312, 0.006206087090752342, 0.008251927115700462, -0.005809003656560724, -0.0009743625467473811, -0.004632624712857332, 0.004107908769087364, 0.007905526594682173, 0.015606498176401314, -0.005098689686168324, -0.0012561570514332166, 0.008881612257523975, 0.001987362449819393, 0.009721907702359287, 0.004463044079867276, -0.006597215479070492, 0.002333630215037953, 0.009216958826238459, 0.0005447647788307886, 0.007445161992853338, -0.008150133219632236, 0.0026784159920432357, -0.003435980189930309, 0.004689568823034114, -0.0004954554817893277, -0.008475433696400036, 0.000775423916903409, 0.00945658033544367, -0.006440227681940252, 0.0013009201396595345, 0.0060645883733575975, -0.008962479504671963, 0.0002049966291947803, -0.008521361784501509, 0.004175381226973099, 0.009243276986208828, 0.007012020457874645, 0.003068880601362748, 0.014532511884515936, 0.008985749699852684, 0.007556321946057406, 0.002103783867575905, 0.0012890642339533041, 0.005970304662531073, -0.001514879139986905, 0.006365884434093128, 0.005599184469743208, -0.013045614415949043, 0.006254759701815521, -0.0015573501586914062, 0.00443655794317072, -0.005198847163807262, -0.0012955990704623136, -0.003295291553844105, -0.01967023719440807, 0.00864445079456676, -0.00479809804396196, -0.0014201077547940331, -0.0009783858602697198, 0.002623124556107956, 0.004521147771315141, -0.001411026174371893, -0.014483744447881527, -0.0014609477736733205, -0.00174624811519276, 0.009344523603265938, 0.0018789117986505698, 0.0021279074928977275, -0.0047834569757634945, -0.011176196011629974, 0.0027741085399280926, -0.0018680745905095882, -0.0015952587127685556, 0.004679213870655407, 0.0006026788191361866, 0.003943768414584072, 0.013685118068348276, 0.011624769731001421, -0.0007174665277654476, -0.0021151304244995117, -0.003616809844970704, -0.0012400800531560735, 0.007744312286376951, -0.0006864396008578213, 0.0006622726267034341, 0.0009826963598077948, -0.006893591447310015, -0.0006586638363924903, 0.0015149550004438916, -0.013180212541060013, -0.004416270689530806, -0.009287790818647904, -0.0009657252918590202, -0.001010678031227806, 0.003207266330718994, -0.0007629828019575634, -0.003886450420726429, -0.02183393998579547, -0.0003535964272238989, 0.015955318104137077, -0.007338090376420442, 0.0025816830721768474, -0.002696947617964311, 0.005542018196799538, 0.0007563504305752831, 0.008288524367592552, 7.869980551979735e-05, -0.012112552469426933, 0.005545486103404653, -0.008048274300315163, 0.0041448853232643815, -0.007350509816950016, 0.00047052990306507446, 0.0009484724564985791, -0.0011082562533291894, -0.008625160564075817, -0.009473443031311035, 0.007631854577498002, -0.00972736965526234, 0.002126238562844017, -0.001673134890469637, -0.00647016005082564, -0.007372959093614058, 0.00788424231789329, -0.006242009726437655, -0.0006999752738259049, -0.009972312233664765, 0.004825461994517931, -0.009089329025962135, 0.005503806200894442, -0.009771103208715264, -0.003356868570501154, 0.004483006217262962, 0.003219431096857246, -0.008126714012839577, -0.003259615464643999, -0.0006743344393643352, 0.0006367076526988535, -0.00046769055453213786, -0.002353711561723189, 0.0016890005631880322, -0.0051282806829972705, -0.005506575107574463, -0.0030279809778386894, -0.009281331842595879, -0.011461561376398258, 0.00013438138094815262, -0.006688009608875622, -0.0017343895001844926, -0.0018054788762872868, -0.003967631946910513, -0.004196687178178261, -0.004367682066830722, -0.028395566073330963, 0.004682624881917781, -0.010560415007851341, -0.0003070614554665308, -7.133592258800128e-05, 0.0006837844848632821, -0.006558331576260654, -0.005139090798117897, -0.0035821307789195653, -0.006185791709206318, -0.0019957369024103336, 0.009422150525179775, -0.003806916150179776, -0.0027635639364069157, -0.0024942105466669254, 0.008610161868008701, -0.005132089961658825, -0.008359475569291546, 0.01258230209350586, -0.0035891099409623584, -0.028962712396274914, -0.005191542885520242, 0.004167144948785955, 0.0031278783624822445, -0.014801177111538973, -0.001775979995727539, 0.024304194883866745, 0.003695401278409116, -0.004703543402931901, -0.004324566234241833, -0.00683606754649769, 0.0021839141845703116, -0.001800190318714489, 0.003420244563709606, 0.004178659482435746, 0.00471197475086559, 0.0006459843028675423, -2.6291066950017046e-05, -0.0044914592396129265, -0.00044350190596147143, 0.0006278997117822819, -0.010121388868852096, -0.007894193584268742, -0.0013569051569158382, 0.0012268478220159359, 0.00529192794453014, 0.0019505674188787286, -0.0031915036114779386, -0.002522425218061968, -0.006727695465087891, -0.007792386141690338, -0.0035169747742739583, -0.0005588531494140625, -0.0057521733370694255, 0.009674405509775337, 0.00652114911512895, 0.0014195984060114079, -0.00673510811545632, -0.005389538678255949, 0.006335475228049539, -0.004525672305714, -0.0009329020977020264, 0.006533882834694602, -0.003198634494434704, 0.005952748385342685, 0.004379640926014293, 0.0018778605894608932, -0.0004123015837235884, 0.0035563924095847396, -0.002879186110063034, 0.0132943716916171, 0.01219222762367942, -0.0017675919966264205, -0.00786946036598899, -0.0028442686254327946, 0.0018509951504794044, -0.0033295588059858846, 0.001963311975652521, 0.002412145788019352, -0.012250900268554688, 0.0037130876020951727, 0.0033642270348288785, -0.0007423568855632438, -0.0024616935036399154, 2.210790460759754e-05, -0.003377350893887606, 0.010535240173339842, -0.005012295462868431, -0.00407034700567072, -0.0007808641953901811, -0.003187575123526833, 0.002650594169443304, 0.0014138221740722656, 0.0018241080370816317, -0.0021741308949210433, 0.0030609477650035515, -0.0006307255138050423, 0.0033784779635342675, -0.003539627248590641, -0.003138238733465021, -0.008436831561001865, -0.00438976287841797, 0.0036245367743752217, -0.003837672146883877, 0.006994897669011898, 0.007035688920454544, -0.008072571320967241, -0.0022937276146628646, -0.0060339407487349055, -0.0011094537648287687, 0.005060325969349256, -0.0044610717079856185, -0.008912866765802557, 0.0038635080510919747, 0.00636666471307928, 0.0021796226501464844, 0.043357155539772735, -0.0047254454005848275, -0.003335893154144287, 0.0014936057004061613, 0.001668756658380682, 0.00048430399461226077, 0.01899508454582908, 0.0015349008820273648, 0.006306453184647994, -0.002031889828768646, 0.0011759237809614714, -0.010243892669677734, -0.0007561336864124642, 0.036252108487215884, 0.003991647200150923, -0.011279322884299538, -0.01043293692848899, 0.004222176291725852, 0.0036226619373668327, 0.001399560408158737, 0.00010602582584727863, -0.009290760213678534, 0.0008040260184894905, 0.0004982948303222656, 0.0015597993677312662, 0.0014749873768199575, 0.0017191009087996045, 0.004461808638139206, -0.0005046020854603157, -0.00019550323486328125, 0.0032172636552290483, 0.00025729699568314987, 0.0023144673217426644, -0.010839082977988503, 0.008987730199640448, 0.00663404031233354, -0.0012562491677024145, 0.004203492944890802, 0.0026311874389648438, -0.0010221654718572445, -0.006433928554708308, 0.0025853026996959334, -0.00010908733714710614, 0.001532083207910713, 0.003382075916637077, 0.003518884832208807, 0.005001295696605336, 0.0024894367564808235, 0.0009639154780994768, -0.0027439811012961654, 0.008489088578657676, 0.00045188990506258783, 0.0033397999676791097, -0.0047362934459339485, -0.006175301291725853, 0.01040978865189986, 0.008385636589743874, -0.000907377763227983, 0.00393798134543679, -0.0030485608360984106, 0.006290067325938831, 0.0032441399314186783, 0.012432911179282448, -0.009489449587735264, 0.0001035549423911361, 0.00018830732865767006, 0.0023247111927379265, 0.005580923774025657, 0.0064995072104714145, 0.035816539417613646, 0.007226163690740417, -0.004539511420510033, -0.0037513212724165487, -0.00048273259943182323, -0.008214322003451261, 0.004603337157856335, 0.004294915632768111, 0.003190577030181885, -0.004999930208379572, -0.004392883994362572, 0.009095972234552557, -0.0025684183294122868, -0.0009616721760142919, -0.012985218654979359, -4.17015769264915e-05, -0.0013415488329800692, -0.002280495383522707, -0.0023375695401971993, -0.007125074213201349, -0.003642277284102006, 0.0005680620670318604, 0.004847244782881304, -0.005554697730324486, -0.014497735283591532, 0.0022181272506713867, 0.0009310462258078835, 0.015862811695445667, -0.0009407238526777787, 0.0025887299667705192, 0.000670701265335083, -0.02687315507368608, 0.004559625278819692, -0.0076904296875, -0.0027595866810191765, -0.01085322553461248, -0.0053605816581032495, 0.004445455291054466, -0.003131953152743252, 0.004582101648504089, 0.006560672413219105, 0.00022272630171342336, 0.0031472986394708823]], "RN50x4": [[-0.004948811097578569, 0.0004420280456542969, -0.001108126206831499, -0.0048219507390802555, 0.00310074199329723, -0.0034477060491388493, -0.0013690617951479817, 0.01265152476050637, 0.0018581477078524504, 0.0035404400392012167, 0.002769426866011186, -0.008876497095281427, -0.002719369801607999, -0.0006699562072753906, 0.0029282461513172493, -0.014637535268610176, -0.0028209036046808397, -0.0031823732636191617, -0.002329046075994318, 0.0034233548424460677, -0.006204561753706498, 0.0030480298128995054, -0.00278483737598766, 0.0008158250288529834, -0.0007441260597922592, 0.0005106492476029826, -0.00471635298295453, 0.009883349592035469, 6.198883056640625e-05, -0.012908848849209871, -0.00087738037109375, -0.002920153466137973, 0.004441911523992365, -0.0033455978740345345, 0.0019673542542891064, 0.0009785457090897998, -0.0051371834494850855, 0.0061229792508211995, -0.0057373805479569865, -0.0034409761428833008, -0.0005715543573552931, -0.0011553791436282063, -0.0010888143019242725, 0.007026328281922773, -0.006798635829578747, -0.004320458932356401, -0.0006864233450456086, -0.005114468661221588, -0.00339672782204368, 0.004269556565718218, -0.006215268915349787, -0.0009738748723810368, -0.004437121477994051, -0.00010559775612571025, 0.0047481087121096525, -0.003934675996953791, 0.007686303420500322, -0.004298860376531427, -0.007035125385631214, -0.004154687578027899, 0.00011760538274591462, 0.0015463991598649463, 0.0020538676868785515, 0.0047946193001487045, 0.0008901249278675423, -0.00038467754017223023, 0.007881316271695223, 0.001365499062971634, -0.001359904354268855, 0.0025267844850366764, 0.003257274627685547, 0.0021756426854567107, 0.01213084567676891, -0.00947614149613814, -0.0035995136607776985, -0.0008320049806074658, 0.006901199167424982, 0.008132284337824041, 0.007781505584716797, -0.006257303736426614, -0.004692278125069357, 0.002453543923117899, -0.0018319216641512776, 0.0010655576532537289, -0.0021686608141118814, -0.0016147440130060372, 0.024609825827858672, 0.0030688372525301847, -0.003012570467862215, -0.0069022937254472234, -0.014779220927845348, -0.0019551082090897994, 0.002031673084605824, -0.001491459933194248, 0.009185465899380772, -0.007343985817649149, -0.012266809290105646, 0.005400094118985263, -0.003247521140358665, -0.00633935494856401, 0.0014498884027654476, 0.005575028332796964, 0.010264223272150213, -0.0017349069768732243, 0.0052207274870439005, -0.008352366360751064, 0.0052071051164106884, -0.0033483505249023438, 0.0060731064189564095, 0.0028137727217240763, -0.00019788742065429688, -0.006718072024258701, 0.003273096951571377, 0.00010759180242365246, 0.006701751188798385, -0.005205392837524412, 0.0037487799471074886, 0.00450797514481978, -0.0014155452901666813, -0.004268646240234375, -0.001433475451035933, -0.001544952392578125, -0.005544987591830168, -0.0005661709742112594, 0.0019803534854542127, 0.0033332217823375354, 0.0008219805630770606, 0.002099654891274192, -0.0040346058932217675, -0.01422164656899192, 0.0009395263411781998, -0.0026725855740633887, -0.004891764033924448, -0.004694851962002841, -0.007414476438002153, -0.0003485381603240967, -0.0015622160651467063, 0.019857135686007412, -0.024122064763849434, 0.005114192312413996, 0.0007798238234086458, 0.00504944541237571, 0.004213484850796786, -0.00036504051902077434, -0.005578517913818359, -0.00904109261252663, 0.0011628757823597302, -0.0030735189264470882, 0.0028898499228737565, -0.009045167402787642, 0.02612469413063743, 0.007439862598072399, -0.005123918706720526, -0.0004241683266379614, 0.003916805440729315, 0.005832758816805752, 0.0028325861150568232, -0.005586017261851917, -0.0002969503402709961, 0.006651398810473355, -0.00047783418135209556, -0.0007368434559215202, 0.012376481836492367, 0.00230573524128307, -0.00872559980912642, 0.002194355834614147, -0.0031032995744185014, 0.008959705179387873, 0.0014437762173739356, -0.0009104419838298454, -0.008913538672707296, -0.0003500418229536572, -0.001652988520535555, -0.006004143844951283, 0.0034710304303602743, -0.004696642810648138, 0.002147132700139826, -0.00847879323092374, -0.01229934258894487, -0.0024082010442560385, -0.00586015527898615, 0.0055022673173384246, 0.0016485479744997892, 0.0039058544419028544, 0.005279551852833141, -0.0019772486253218213, -0.0004327513954856179, -0.006241668354381214, 0.0027649077502163973, 0.004551280628551136, 0.003957748413085937, 0.0023863694884560327, -0.0022791515697132454, -0.003078661181709982, -0.003332874991677024, -0.006363576108759101, -0.0010466900738802824, 0.002601076256145131, -0.0235184756192294, 0.0002518567171963769, 0.018630114468661224, 0.008655504746870562, 0.01046035506508567, 0.0003043088045987215, -0.002561135725541548, -0.0010909329761158333, -0.0071914412758567105, 0.0027714642611416907, 0.0012859864668412642, -0.004605423320423472, -0.00025219537995078327, -0.003053589300675826, -0.01568005301735618, -0.005316040732643822, 0.0006240335377779866, -0.006547190926291727, 0.0014622970060868701, -0.006424353881315751, -0.008444829420609907, -0.003350891850211404, -0.008583198894153942, -0.0033463348041881218, 0.0034104314717379484, 0.0019273541190407521, 0.0013716735623099593, 0.002820101651278408, -0.0013250004161487923, 0.00013566017150878906, 0.003951939669522371, 0.01156107945875688, 0.004020409150557085, -0.0037539222023703833, 0.00041691281578757483, 0.0038304654034701257, -0.0018405914306640625, 0.00103759765625, -0.0005629496140913525, -0.0040581768209284, 0.010361107912930576, 0.0034996054389260034, -0.007329333912242542, -0.006010575727982956, -0.012930089777166198, -0.0008533651178533365, 0.002363605932755905, 0.002597960558804599, 0.0021061030301180754, 0.0032031644474376335, 0.008728926832025702, -0.005864403464577414, -0.00348453630100597, -0.005689924413507633, -0.006082903255115855, 0.003334955735640093, -0.00560760498046875, -0.0007585558024319726, -0.00960675152865323, 0.005283789201216263, 0.0012593486092307348, -0.002277525988492098, 0.0010325691916725846, 0.011096572334116156, -0.003728248856284402, -0.0008265321904962694, 0.002494942058216442, -0.0007592114535245028, -0.005851962349631569, 0.00383513624017889, 0.0030573064630681768, -0.004099759188565341, -0.0011878528378226547, -0.0002844171090559526, 0.005548504265871915, 0.008001891049471768, 0.0037668130614540796, -0.004374363205649637, 0.003919211300936612, -0.0011594078757546158, 0.010288845409046524, 0.008152690800753506, -0.010029077529907227, -0.0020613345232876864, -0.0039990165016867895, 0.00665924765846946, -0.0031237250024622135, -0.008346080780029297, 0.0002753951332785873, -0.002393047917972911, 0.002217726273970169, 0.011301875114440918, -0.006030212749134411, -0.0016310865228826334, 0.0033447092229669743, -0.0035834745927290487, 0.007917610081759365, 0.0041148201985792675, -0.005294355479153719, 0.005042769692160866, 0.001551671461625533, 0.007308374751697887, 0.0013823861425573169, -0.0007938471707430751, -0.0052629600871693, 0.0009463917125355119, -0.002025040713223544, 0.004128044301813299, -0.0042210681871934375, -0.0033403526652943005, 0.009121829813176935, 0.004268405112353237, -0.0027714750983498307, -0.008832281286066229, -0.004237199371511286, -0.01458311080932617, 0.005822398445822977, -0.003419529307972301, 0.004012302918867632, -0.005932287736372514, 3.0951066450639244e-05, 0.004751530560580168, 0.0028810501098632812, 0.005166853016073054, 0.0007550933144309293, -0.0029210204427892513, 0.004572808742523193, -0.0001180957664142961, 0.001273328607732601, 0.0063924789428710955, 0.0061515461314808235, 0.012842958623712713, 0.005554676055908203, 0.02157315340909091, -0.0066196268255060385, -0.001502297141335228, -0.0050745660608465006, 0.0011767474087801839, -0.0004730224609375, -0.0022823160344904135, 0.002980535680597479, -0.00779203935102983, -0.003723773089322177, 0.005697412924333053, -0.007207317785783247, 0.009243444962935015, 0.0019976875998757113, -0.008444482629949396, 0.007736197926781393, -0.00027977336536754403, -0.004436839710582383, 0.0038334022868763305, -0.007571892304853958, -0.010791296308690851, -0.005177096887068314, -0.006157701665704901, 0.007606403394178909, -0.0036490911787206474, 0.0017594424161044044, 0.004114324396306818, -0.0014565207741477273, 0.0018149831078269254, -0.0012603239579634228, -0.004136540672995827, -0.0021242661909623576, 8.062882856888984e-05, 0.0010598410259593618, 0.0022440390153364697, -0.003006458282470703, 0.07143332741477276, -0.00495933402668346, 0.0012527975169095134, 0.005675890228965066, -0.0037337649952281604, -0.007160902023315433, -0.002938430417667735, -0.0005152442238547585, 0.0038172114979137077, -0.0011067634279077702, 0.00824200023304332, 0.01811558550054377, -0.005728266455910422, 0.0015317093242298479, 0.010256398807872425, 0.0011729218743064184, -0.004277223890477961, -0.007521499286998402, 0.002145891839807682, 0.004605667157606644, 0.0026548559015447445, -0.004570822824131359, 0.0028575116937810726, -0.0004080533981323242, -0.004165714437311344, -0.002662398598410866, -0.0013442472978071733, -0.002516462044282393, -4.0625984018501093e-05, 0.0034879987890070133, -0.006119812076741999, -0.0019756636836312028, 0.003180465914986351, -0.021493738347833802, -0.0008215904235839844, -0.0006105357950383968, 0.006331693042408337, -0.009172352877530184, -0.0041360204870050585, 0.0005718713456934147, 0.001309812068939209, 0.0006731748580932617, -0.0017717534845525518, 0.0002088980241255322, -0.002370660955255682, -0.006185358220880682, -0.004561749371615324, -0.006579572504216974, -0.012250222943045876, 0.006671618331562389, 0.0028247833251953125, -0.0001341267065568404, -0.002523162148215557, -0.002691837874325839, -0.005295655944130638, 0.0036072243343700065, 0.011265472932295365, 0.002999262376265093, -0.0019074028188532065, -0.0072445652701637955, 2.2974881258876895e-05, 0.0016095638275146484, 0.004256161776455965, -0.00199070843783292, -0.002634736624631014, -0.008317448876120829, 0.002487106756730513, 0.003344714641571045, -0.003924740986390549, 0.004472981799732554, 0.0019941329956054688, 0.0029286037791859017, 0.00034747340462424475, 0.0021184140985662306, 0.0055262825705788415, -0.003234814513813364, -0.0009574673392555933, -0.006312110207297585, -0.0036842172796075993, -0.030030510642311797, -0.0040131048722700634, 0.00168780576099049, 0.003389878706498581, -0.0012504295869307084, -0.006764466112310238, -0.00520777702331543, -0.002716216174038973, -0.0010015531019730997, 0.012358448722145775, 0.003166198730468749, 0.006671379912983288, 0.0008145679127086296, -0.002297374335202304, 0.001378991387107155, 0.0016282580115578392, -0.013369972055608576, -0.0005919418551705098, 0.0020741766149347477, -0.0006556646390394726, -0.006200877102938565, 0.009502020749178795, -0.012547839771617542, -6.766752763227944e-05, -0.010266824202104048, -0.0023992413824254818, -0.004202387549660422, 0.00897261229428378, 0.001369432969526811, -0.0035988227887587118, 0.005604949864474211, 0.006521718068556352, 0.00499238751151345, 0.007672770456834274, -0.004597750577059659, 0.006853948939930308, -0.0037649436430497603, -0.007385188883001155, -0.0030826005068692285, 0.0014524026350541536, -0.0054418932307850245, 0.005633744326504794, 0.005287365479902788, -0.002881591970270332, -0.0032137090509588018, 0.00142834403298118, 0.007690164175900547, 9.56708734685726e-05, 0.002109050750732421, -0.004677295684814453, -0.0016068870371038256, 0.006630518219687723, 0.001512413675134832, 0.0026578903198242188, 0.010336572473699396, 0.007856022227894176, 0.007864859971133146, 0.005859591744162819, 0.003720500252463602, -0.004990165883844548, -0.00409887053749778, -0.0022624189203435726, -0.003278212113813921, -0.00410561128096147, 0.006307753649624911, 0.00489857250993902, 0.004197586666453969, 0.0025588815862482243, 0.00824284553527832, -0.0008223056793212882, -0.001005321741104126, 0.014201792803677645, -0.0027437426827170634, -0.00601086833260276, -0.003913630138744007, 0.007856455716219816, 0.0013918443159623567, -0.003925626928156073, 0.0003834746100685807, -9.047172286293786e-05, 0.009550354697487572, 0.0010725801641290836, -0.0011424584822221232, 0.0013394409959966488, 0.0007804523814808235, 0.00799460844560103, -0.002960345961830833, 0.0016103170134804468, 0.004677620801058682, 0.003721499984914606, -0.014567375183105469, 0.0024016987193714485, -0.004155527461658825, 0.007253877141258933, -0.005491408434781161, -0.004264246333729137, 0.007810828360644255, 0.004642009735107422, -0.0162738019769842, -0.0032975077629089355, -0.006232112646102905, -0.004132574254816229, -0.0040594312277707194, -0.0005475932901555843, -0.009438384662974964, 0.0018372427333484993, -0.0034671046517112036, 0.003539692271839488, -0.0008012544025074353, -0.0012567801909013233, 0.002815268256447532, 0.005205717953768643, -0.009495675563812256, 0.006742791696028276, 0.0042193098501725635, -0.015695046294819222, 0.002300728451121937, 0.0014623728665438557, -0.002460826526988636, 0.003947864879261364, 0.002106406471946022, 0.008908965370871803, 0.0002935474569147282, 0.0017358714883977718, 0.010710976340553978, -0.006096834486181086, 0.003548968922008169, -0.011883741075342352, 0.0019174489107998934, 0.0059753764759410515, -0.0015816255049272013, -0.001145189458673649, 0.013221935792402786, 0.008461171930486506, 0.0019009871916337451, 0.00865654240955006, -0.0066318511962890625, 0.0002231597900390625, 0.001396049152721058, -0.005598669702356512, -0.0019518245350230827, 0.0027715834704312415, 0.003127293153242632, -0.008494984019886364, -0.009148716926574707, 0.0049267140301791105, -0.004531470212069424, -0.004108082164417614, -0.004854202270507814, 0.003253839232704857, 0.005222147161310369, -0.0023454590277238326, 0.005680344321511009, -0.0021122152155095882, -0.0075320547277277165, 0.008911203254352917, 0.029762430624528366, 0.0001369606364857081, 0.0008606477217240767, -0.002753420309586958, -0.00291205807165666, -0.0038772929798473015, 0.005508357828313656, -0.004646908153187147, 0.012327280911532314, 0.0002535906704989356, -0.0020867152647538623, -0.006499723954634232, 0.002063854174180464, -0.006675026633522727, 0.007403395392678001, -0.0008576837452975179, 0.0022701891985806542, 0.006578055295077237, 8.98621299050082e-05, -0.004085280678488992, -0.004270726984197443, 0.0008575266057794743, 0.0009565678509798909, 0.003968195481733843, -0.003243403001265092, 0.0037076256491921167, -0.0006479458375410595, 0.00011496110395951657, -0.019380829551003197, -0.0017938397147438737, 0.004517620260065252, -0.008726466785777699, -0.006806503642689098, 0.0009949776259335604, -0.0013861547816883435, 0.0007341124794699927, 0.0006312456997958097, 0.015824881466952236]], "RN50x16": [[-0.007266735488718206, -0.0018832900307395248, -0.001897074959494852, -0.0020130439238114813, -0.005964886058460583, 0.00838457454334606, -0.003590789708224209, -0.0018607323819940739, 0.0023957355455918746, -0.008072411472147161, 0.008791750127618961, -0.007151565768501974, -0.002410249276594682, -0.028342767195268105, 0.0037481134588068232, -0.003920360044999556, -0.0036629004911942903, -0.012001124295321377, -0.003041083162481135, 0.007493452592329546, -0.0036096139387650924, -0.016666493632576683, -0.002754089507189663, -0.0047927553003484545, -0.004508755423805931, 0.009673226963390003, -0.0002499276941472853, -0.0059905485673384246, 0.015879891135475853, -0.0022182356227527953, -0.004169810901988638, 0.007950956171209164, 0.002797300165349785, -0.006812399083917791, 0.0043142492120916195, -0.00030801242048089997, -0.00019910118796608728, 0.003812833265824751, 0.005813983353701504, -0.007223866202614523, -0.0013921044089577426, 0.00019346583973277667, -0.002917268059470438, -0.01561901786110618, 0.0004307140003551131, -0.001972740346735174, 0.0023785504427823144, 0.0038282654502175065, -0.006772653623060746, 0.007239038294011894, 0.004605780948292126, 0.0027267065915194434, -0.0027784434231844825, -0.003262430429458618, -0.006253827701915394, 0.0005692026831886979, 0.00624061714519154, 0.0008157166567715731, -0.0020411664789373243, -0.002705519849603826, 0.002710515802556818, 0.003016645258123226, -0.004832874644886363, 0.0038739226081154566, 0.0034494400024414062, -0.00040314414284446046, -0.01264920017936013, -0.009096319025213068, -0.002513408660888672, 0.005937012759121981, 0.006004246798428623, 0.0016181685707785873, -0.0020092834125865593, 0.0073340535163879395, 0.00845192779194225, -0.004205281084234064, 0.008779959245161575, 0.0064615607261657715, -0.00225288217717951, 0.008577346801757812, 0.0031795501708984375, 0.00028458508578213873, -0.0008931051601063118, 5.6721947409889284e-05, -0.007466229525479404, -0.00564696572043679, -0.0005253878506747169, -4.618818109685882e-05, -0.0003320954062721944, -0.002608559348366478, -0.011560418389060278, -0.0007945922288027686, 0.0002098950472745019, -0.0004037293520840731, 0.007285768335515804, -0.010866338556463066, -0.00021379644220525552, -0.007316676053133878, -0.002808895978060636, 0.004384474320845171, 0.018789117986505705, -0.008177399635314941, -0.0075525803999467326, -0.008862224492159758, -0.0018924799832430754, 0.0010419325395063933, 1.9073486328125e-05, 0.0019858750430020427, 0.004069935191761364, 0.0015230503949252043, 0.003866629167036579, 0.00019128756089644046, -0.00904469056562944, 0.010432308370416817, 0.0016933110627261085, 0.00478141958063299, -0.00301073897968639, -0.005736351013183594, -0.0076251896944913, 0.001943599094044077, -0.003984164107929575, -0.0010263919830322266, -0.011674176562916149, 0.004613746296275745, 0.003696869720112194, 0.00012483380057594883, 0.004454872824928978, -0.005842685699462891, -0.005395499142733487, 0.000752405686811973, 0.0015527009963989258, -0.0024988759647716174, -0.007766772400249131, -0.0023118799382990055, -0.001559864390980114, -0.0027062351053411308, -0.004224311221729626, -0.0010256333784623567, 0.004949374632401901, 0.0011571103876287289, -0.0074221871115944605, 0.00466687029058283, -0.00323109193281694, -0.0006250820376656283, -0.003342709758064964, 0.009735107421875, -0.0100113261829723, -0.001811981201171875, -0.0026948506181890333, -0.002198132601651276, -0.008393339135430077, -0.0016601464965126725, 0.0061376745050603695, -0.005946896292946555, -0.0008568113500421696, -0.00166884335604581, -0.0037419579245827426, 0.0073229399594393636, 0.0050635337829589835, -0.008935104716907848, 0.0009319511326876554, 0.0014774203300476066, 0.005112951452081854, 0.0028402155095880685, -0.0070923891934481535, 0.014537908814170143, 0.0021605925126509246, 0.003092180598865856, -0.009200789711692118, 0.012289047241210938, -0.0027779692953283155, -0.003881086002696644, -0.007847070693969727, -0.01744465394453569, -0.00259167497808283, 0.0060779614882035685, 0.006277257745916192, 0.010613896630027079, 0.002962155775590377, -0.002588001164523039, -0.004697870124470104, 0.0023704875599254265, -0.008795982057398016, -0.0031280084089799366, 0.00704201785000888, 0.0017355246977372608, 0.011764613064852627, -0.0011456229469992904, -0.00932192802429199, 0.001359105110168457, 0.006405559453097257, 0.009866194291548294, 0.0054952881552956315, -0.004523927515203301, 0.004958989945324985, 0.0020031549713828353, -6.450306285511742e-05, -0.006750366904518821, -0.00020520253614945798, 0.00851321220397949, 0.00409676811911843, 0.007832050323486328, -0.005674405531449749, 0.002308775078166615, 0.0016629262404008341, 0.0028075088154185905, -0.004284674471074886, -0.00751018524169922, -0.0017804991115223275, -0.005716638131575151, 0.0016321702436967317, 0.004139531742442738, 0.001066034490411932, -0.005387956445867366, 0.0015346353704279118, -0.000790005380457098, -0.0108848051591353, 0.000499432737177067, -0.00028103048151189615, 0.006248864260586823, 0.006602899594740434, 0.004307914863933216, 0.00814831256866455, 0.003456462513316761, -0.012558544223958797, -0.012242794036865234, -0.005240884694186123, 0.001961296254938299, -0.002355293794111772, 0.002060174942016602, 0.005528536709872159, 0.003367499871687455, -0.0014796690507368603, -0.0033663511276245117, 0.003377741033380681, 0.00013559514825994476, -0.004121043465354225, 0.015666441483931107, 0.0035422932017933235, -0.000858090140602806, -0.0010677142576737838, -0.00430263172496449, 0.007059920917857777, 0.006626540964299982, 0.0008634220470081682, -0.015081714500080456, -0.0006524839184500956, 0.0017659339037808506, 0.0018318349664861507, -0.009132536974820225, 0.003368312662298029, -0.0014293627305464324, 0.005986300381747159, -0.0027354088696566496, 0.003938263112848457, -0.0006697394631125717, 0.005621238188310104, -0.012449795549566095, 0.015493219549005682, -0.0010952082547274495, -0.011633179404518822, 0.005451711741360752, -3.346529873934662e-05, 0.004063692959872159, -0.051872600208629244, 0.003884272141890091, -0.014928904446688568, 0.0024266676469282683, -0.00629203969782049, -0.006314017555930397, 0.003404321995648471, -0.006858760660344904, -0.008039138533852316, 0.003787105733698065, 0.012169285254044968, 0.002880009737881748, 0.0011508789929476652, -0.011084426533092153, -0.009566848928278141, -0.003955483436584473, -0.004475116729736329, 0.06136961416764693, -0.006436781449751419, 0.0006873390891335221, 0.01009282198819247, -0.0004844232039018098, 0.0006110668182373047, -0.002492254430597479, 0.0020914944735440366, -0.011564634063027126, 0.00221473520452326, 0.0022669922221790657, -0.005297660827636719, -0.007097894495183773, -0.0059209628538651905, -0.005546754056757146, -0.002297488125887784, 0.0014705874703147194, -0.007613182067871093, 0.007433847947554155, 0.0018964680758389568, -0.0025788220492276304, -0.007585265419699928, -0.010789426890286532, -0.0007158951325850049, 0.00244372541254217, 0.002214710820804943, -0.0024968927556818185, -0.004383553158153187, 0.0033256357366388475, 0.0011037046259099786, 0.0038543180985884246, 0.0008977543223987923, 0.005381735888394442, 0.004011641849171032, -0.004759918559681286, -0.003360672430558638, 0.006494565443559128, 0.0032199404456398698, 0.0013813105496493254, -0.006421045823530718, 0.02616912668401545, 0.006985285065390848, -0.003623528914018111, -0.00038553367961536786, -0.0005280863155018196, -0.0017968958074396305, 0.0004012367942116471, 0.006233117797157978, -0.009551828557794746, 0.0011617595499212076, -0.01491358063437722, -0.001105113462968306, -0.001251816749572754, -0.011926477605646307, 0.00015414844859730145, -0.0030631477182561703, -0.0033667521043257292, 0.08957741477272724, -0.007324348796497691, 0.007575468583540482, 0.004728246818889271, -0.0032681985334916536, -0.0023962801153009586, -0.0028597224842418327, 0.008168491450223057, 0.012045741081237793, -0.0031704712997783317, -0.0032363913275978776, -0.003058520230379971, -0.013400684703480114, -0.0037842013619162817, 0.0003392046148126774, -0.007077477195046165, 0.0011505430394952963, -0.0013187744400717993, -0.004941983656449753, 0.0060308629816228695, 0.0015887780623002486, -0.009226495569402521, 0.008694971149617977, 0.002559033307162197, 0.006542606787248091, 0.015395825559442694, 0.006039110097018156, 0.005497000434181907, 0.005458268252286043, 0.0126150521365079, 0.0012011907317421653, 0.006377068432894621, -0.0064278082414106884, -0.0018356496637517757, -0.0009189952503551105, -0.004097407514398748, -0.007963549007068978, 0.007839983159845524, -0.007063757289539683, -0.0014180215922268953, 0.004304582422429865, 0.0014798207716508341, 0.004445466128262607, 0.0023997913707386465, -0.0005203973163257947, 0.008286107670177113, 0.01014129411090504, 0.0018822713331742716, -0.004975015466863458, 0.0009017207405783913, -0.0031717907298694954, -0.0007875182411887427, 0.003549321131272749, -0.0006604628129438924, -0.0006355805830522022, -0.005035357041792435, 0.00843367793343284, -0.004465645009821112, -0.010953643105246803, -0.0009958093816583788, -0.004234102639285002, 0.006985751065340912, -0.00809894908558239, 0.0008318640969016342, 0.005291770805012096, 0.010107907381924717, -0.0017921274358575906, -2.2064555775035393e-05, 0.01604851809414949, 0.0008898648348721616, 0.0016978870738636465, 0.0034467090259898796, -0.003828709775751287, -0.006032011725685812, -0.0019702044400301847, 0.003716653043573552, -0.016698663884943177, 0.001364935528148304, 0.0037672465497797184, -0.0027332305908203125, -0.004736428911035713, 0.011660185727206144, 0.002963998100974344, -0.005593863400545987, 0.004160761833190918, -0.003729137507351962, -0.01262500069358132, -0.0036018328233198664, 0.0070520097559148625, 0.003262032162059437, 0.0006674853238192472, 0.0022734511982310905, -0.001552928577769886, -0.007710023359818892, -0.0052491968328302555, 0.0021517520601099186, 0.0002798736095428467, -0.002902095968073065, 0.0024888732216574935, -0.0028907602483575993, 0.0008233243768865409, 0.011727939952503551, 0.005302570082924583, -0.010123859752308242, -0.002866788343949751, -0.0016873099587180404, 0.005045105110515247, 0.002767476168545809, -0.009370283647017058, -3.181804310191903e-05, 0.004727385260842064, 0.007422707297585227, 7.880817760120597e-05, 0.0008413141424005663, -0.005744457244873047, -0.002200646833939986, -0.0017669200897216797, 0.001246712424538353, -0.0021657510237260286, -0.010291402990167791, -0.00967673821882768, -0.005407636815851387, 0.004506934772838245, -0.014514706351540304, 0.0029413049871271305, 0.00026347420432350915, -0.004790365695953369, -0.0036586956544355917, 0.0019006404009732324, 0.006445369937203147, -0.0033013603904030533, -0.0018465735695578833, 0.0005642094395377426, 0.042291294444691055, -2.6713718067516296e-05, 0.017696673219854183, 0.000835071910511364, 0.00205230712890625, 0.00818391279740767, -0.015919945456764915, -0.007220306179740212, -0.00832664424722845, 0.004756407304243608, -0.00813395326787775, -0.0022385851903395223, 0.005585302006114613, 0.003050912510265005, -0.005015514113686302, -0.005854303186590021, 0.006058042699640448, -0.006246729330583052, 0.0007584040815180014, -0.0023577863519841976, -6.883794611150726e-05, 0.0009163509715687142, -0.005885330113497647, -6.71094114130192e-05, -0.0035872567783702507, 0.0014715872027657242, 0.001501430164683952, -0.0072946981950239706, -0.0037274469028819694, -0.015227187763560902, 0.0029763091694224968, -0.0020704919641668144, 0.008175286379727451, -0.009592094204642555, -0.0038462768901478166, 0.00010190226814963603, 1.1170452291315094e-05, 0.001790751110423695, 0.003920533440329812, 0.010182559490203861, -0.0008754025806080208, -0.0012477527965198865, 0.009545678442174738, 0.0020257776433771323, 0.00022530555725097656, 0.015956109220331364, -0.0053888234225186425, -0.0023998997428200455, -0.0031492764299566097, 0.009306127374822443, -0.0029955343766645947, -0.0075297409837896175, -0.001670208844271573, -0.0032973533326929264, -0.011100292205810547, 0.004395213994112884, 0.0023405768654563217, 0.011082887649536133, -0.003247131000865589, -0.0007280653173273259, 0.0042961294000799025, -0.005956216291947799, 0.0020738081498579545, -0.005734747106378727, -0.01094375957142223, 0.007180354811928489, 0.0037402022968639013, 0.003175475380637432, 0.004643917083740234, -0.0001792311668395996, 0.0025172450325705786, 0.0012901913035999642, 0.001127400181510231, -0.007933399894020775, -0.0040960528633811255, -0.010094100778753105, -0.007919918407093395, 3.058260137384604e-05, 5.650520324707031e-05, -0.00283857909115878, -0.005598843097686766, 0.0019089796326377164, 0.003052733161232688, -0.008836486122824928, 0.0028603293678977275, 0.007888707247647373, -0.004134774208068848, -0.012905250896107067, -0.0025998895818536948, -0.006077029488303444, -0.007614612579345703, -0.004664025523445823, 0.007102251052856445, 0.0031070925972678442, 0.004105023362419821, 0.0020153955979780695, -0.0038116953589699487, -0.009554776278409088, 0.009457674893465912, 0.000629208304665306, 0.012307167053222658, -0.00013639439236034048, -0.013691934672268955, 0.006385022943670101, -0.0038549249822443198, -0.010826804421164772, -0.0003946640274741439, -0.0030591054396195846, -0.001570864157243208, -0.004967608235099099, -0.006059820001775573, -0.007628679275512695, -0.004280177029696378, 0.005736351013183594, -0.00048225576227361403, 0.0020560676401311694, -0.008880441839044744, -0.004004261710427024, -0.00952985611828891, -0.005083896897055885, 0.0028169263492931022, 0.0020869428461248226, 0.0038808475841175423, 0.00279965725812045, 0.0015351555564186853, -0.0003969886086203833, 0.004169269041581587, 0.003391612659801136, 0.0025046305222944775, -0.00651235743002458, 0.0012257966128262614, 0.00492487983270125, 0.013353412801569159, -0.005883168090473521, 0.005694345994429154, -0.005705595016479492, 0.0009206750176169662, -0.002259471199729226, -0.001940011978149415, 0.009331399744207207, 0.0015111403031782648, 0.02247509089383212, 0.00023685802112925758, -0.0023347681218927555, 0.00034045089374889017, -0.0020925348455255685, -0.011780738830566406, 0.011073589324951172, -0.0029916763305664062, -0.008573857220736416, -0.011387153105302292, -0.0020477988503196025, -0.0013567317615855827, -0.008294430646029386, -0.0068343119187788525, -0.006450219587846237, 0.004120566628196022, 0.006935249675403942, -0.0011385137384588087, 0.020780563354492188, -0.002395218068903141, 0.005991653962568804, -0.004177982156926935, 0.004256877032193271, -0.00534304163672707, -0.0028433745557611637, 0.005042899738658558, -0.004484219984574753, -0.0033543326637961654, 0.00139983133836226, -0.005835898897864601, 0.002530878240411932, 0.0003069964322176856, -0.007073575800115412, -0.003975001248446377, -0.00029919364235617835, -0.005166378888216885, 0.008765827525745737, 0.0031242153861305924, 0.0006385933269153973, 0.00042221762917258546, -0.003397486426613548, -0.0073945088820023975, 0.009707331657409668, -0.008038523522290321, -0.008421253074299206, 0.004813010042363947, 0.0048775239424272004, -0.0027432008223100164, -0.0029415813359347258, 0.002602834593166005, 0.005295276641845704, -0.002620610323819248, 0.0006371303038163641, 0.010594454678622162, -0.002057010477239437, -0.007026022130792793, 0.0009133599021218033, 0.009874257174405186, -0.0029265230352228354, -0.0013375715775923308, 0.008351781151511452, 0.0012812180952592326, -0.006956967440518467, 0.005084958943453702, 0.005603616887872871, 0.006664861332286488, -0.0020389340140602816, 0.003771348433061081, -0.00789286873557351, -0.005692893808538262, 0.012090802192687988, 0.0008887160908092155, 0.005568810484626076, -0.006759058345447887, -0.002050508152354847, 0.012127350677143444, -0.0013980702920393514, -0.002070649103684859, -0.0035525235262784086, -0.004515344446355646, 0.006643208590420809, 0.0014108744534579165, 0.0016072500835765495, -0.0062350576574152165, -0.012161401185122402, -0.010668234391645952, -0.0015520182522860415, -0.0026799304918809375, -0.004254167730158026, -0.0036401694471185847, 0.0003399090333418408, -0.0010369257493452592, 0.0010022358460859832, -0.0035847696391018953, 0.0016603469848632812, 0.0051090500571511, -8.366324684836644e-05, 0.0007148981094360352, 0.001707597212357954, -0.006810231642289595, 0.0042840134013782845, -0.0010923689061945133, -0.0028149431402033024, -0.004752245816317471, -0.0003312094645066682, 0.001785202459855513, 0.025303927334872158, 0.0011371943083676424, -0.0009766437790610575, 0.006138931621204723, 0.00033066489479758633, -0.0015273527665571728, 0.005051894621415571, -0.006122285669500179, 0.0006757432764226759, -0.002161795442754572, -0.002923683686689897, 0.0012477636337280273, -0.01460311629555442, 0.0030588670210404817, -0.02216330441561612, 0.00141640684821389, -0.003611727194352583, -0.0042519135908647004, 0.004447178407148882, 0.0007214762947776107, 0.006701816212047231, 0.000990650870583274, 0.012442642992193048, -0.0024105418812144924, 0.007287112149325283, 0.003601637753573331, -0.014594863761555069, -0.005933143875815651, -0.004090309143066406, 0.0022276098077947445, 0.003281246532093395, -0.005235151811079548, -0.005396826700730755, -0.00041073018854314615, 0.010206433859738436, 0.004049008542841131, 0.008206291632218794, 0.001674435355446556, 0.013425220142711292, 0.00590083815834739, 0.0009872588244351473, 0.002196962183172054, -0.009746551513671875, 0.00294018875468861, 0.008393545042384754, -0.003505576740611683, 0.0011684894561767578, 4.3608925559303346e-05, -0.007160143418745563, -0.0029193704778497885]], "ViT-B/32": [[0.011680868538943205, 0.0130170692097057, -0.0038011670112609863, -0.006423137404701924, 0.009300643747503107, 0.004818829623135651, -0.008252750743519175, 0.0074997381730513134, -0.00022537058049982217, 0.0025326338681307715, -0.004379055716774681, 0.0011499578302556837, -0.030275128104469994, 0.0004532553932883529, 0.0019284540956670607, 0.003764846108176491, -0.022915753451260654, 0.0015436952764337716, -0.008799184452403675, 0.0180907357822765, 0.022306442260742188, -0.002367669885808771, -0.00527455589988015, -0.007592835209586403, 0.0030080188404430054, 0.016405148939652878, 0.009782270951704544, -0.00971586054021662, -0.012345660816539417, 0.0033682909878817472, 0.0041488300670276985, -0.006502389907836913, -0.01058693365617232, -0.00908692858435891, -0.004868940873579546, 0.003721280531449752, 0.009660840034484863, 0.009888090870597145, 0.012703462080522017, -0.007788571444424713, -0.0016205527565696012, 0.00037132609974254273, -0.0010009868578477335, 0.012743286111138084, 0.003969756039706146, -0.0013365095311945136, 0.003771348433061079, 0.0051598115400834504, -0.0044058127836747625, -0.00880330259149725, 0.00017053701660849768, 0.0033149719238281267, -0.00014648654244162822, 0.002474914897571911, 0.011572745713320648, 0.009374401786110619, -0.01151730797507546, -0.006611282175237482, 0.0017980228770862923, 0.008186047727411444, 0.010318105871027168, 0.0010263919830322266, -0.008067217740145596, 0.0035018324851989746, -0.007705341685901992, 0.0014621777967973176, 0.009470755403692072, 0.010423400185324928, -0.0025877898389642887, -0.00115082480690696, -0.0014221343127163973, 0.003776767037131569, -0.0025445331226695666, 0.00782201506874778, -0.017833184112202034, 0.008442553606900301, -0.011407050219449131, -0.005949692292646929, -0.0019084757024591618, -0.01681553233753551, -0.015489534898237747, -0.0001487515189430924, 0.011702234094793148, 0.006018638610839844, -0.0037229711359197445, -0.00979206778786399, 0.025345108725807884, -0.0067823204127225, -0.004741213538429954, -0.01365451379255815, 0.006565321575511584, -0.0070742748000405045, -0.10593483664772729, 0.004302274097095835, 0.00032470443032004553, -0.007883245294744318, 0.012571681629527699, -0.0036189339377663346, 0.0130531137639826, 0.019975315440784805, -0.007683775641701435, -0.005562424659729004, -0.0027719248424876823, 0.0028757615522904834, 0.00011166659268465988, -0.016381491314281117, -0.011200395497408783, -0.016007661819458008, 0.012581586837768555, 0.0018268715251575818, 0.009258730845017868, -0.02958238666707819, 0.004431529478593306, -0.00250244140625, 0.004099022258411755, -0.008634835481643677, -0.008819623426957563, -0.006744184277274392, -0.0011772242459383887, -0.0004253387451171875, -0.0020645314996892775, -0.011091416532343083, -0.0009550181302157325, -0.02201286229220304, 0.0066717971454967155, -0.004974755373868075, -0.003937201066450639, -0.0014172033830122514, 0.015675458041104404, 0.0068418762900612565, -0.0058300711891867895, -0.007832267067649147, -0.017086939378218216, -0.0034734552556818232, -0.007856417785991322, -0.0007378838279030533, -0.017536596818403763, -0.02426858381791548, -0.004043389450420034, 0.0011605999686501243, 0.0006670355796813965, 0.005904146216132425, 0.003158829428932884, -0.0029475905678488993, -0.009563754905353893, 0.006423690102317114, 0.015819549560546875, -0.006187027150934395, 0.011476343328302557, -0.0013282082297585238, -0.009312196211381393, 0.002605633302168413, -0.016648747704245827, -0.010489550503817472, 0.019154830412431198, -0.013737006620927292, -0.004197825085033069, 0.005128687078302559, 0.010797771540555088, -0.0026248151605779476, -0.008266969160600143, -0.0046950253573330965, 0.009784785183993254, 0.007709980010986329, -0.0010337937961925163, 0.0043244199319319295, -0.00745513222434304, -0.0008703145113858313, 0.004130883650346235, -0.0031077753413807263, 0.012088103727860884, -0.0006963556463068182, -0.003052399917082353, -0.002431414344094017, -0.0033745115453546696, 0.010134653611616654, -0.022785533558238633, 0.01452491500160911, 0.0018554600802334874, 0.005733013153076172, -0.004063042727383701, -0.0008106583898717707, 0.007946079427545721, -0.012500979683615944, -0.014107227325439453, 0.021267977627840908, -0.0017738775773481867, 0.007276052778417415, -0.0015967813405123625, -0.016481659629128197, 0.017577388069846416, -0.005370833657004616, -0.0070039575750177555, 0.0019640489058061067, -0.010136615146290173, 0.004461050033569336, -0.007291162555867974, -0.013339519500732422, -0.010136474262584341, -0.005603169853037054, 4.681673916903488e-06, 0.005303859710693359, 0.0051238753578879605, -0.0019070451909845541, -0.003400770100680267, -0.013476371765136719, -0.0047454833984375, -0.002723888917402788, 0.001417116685347124, -0.0005488829179243603, 0.002704468640414151, -0.009882840243252838, -0.0013814893635836513, -0.0034819597547704525, 0.0034876303239302206, 0.0012013695456764917, 0.0032317638397216797, 0.005023956298828127, -0.0039899999445134945, 0.0009068575772372169, -0.006450219587846234, -0.0047986507415771484, 0.005382342772050339, 0.009550655430013481, 0.01274958523837003, -0.0026294751600785685, -0.005793831565163351, -0.009523131630637428, 0.005942583084106445, 0.011200365695086392, -0.006465269760652022, 0.0009528073397549715, -0.004328857768665657, 0.00583206523548473, -0.007302284240722656, -0.0016490979628129426, 0.0068439570340243245, 0.009526090188459917, -0.00452533635226163, 0.009119846604087135, -0.001333597031506626, -0.02024609392339533, 0.0016043836420232584, 0.0017740022052418099, -0.006257230585271662, -0.017543879422274502, -0.013037139719182795, -0.0012264089150862273, 0.013425610282204369, -0.0019980994137850676, 0.006738012487238102, 0.00409698486328125, 0.0067105726762251424, 0.019884412938898262, -0.0022261684591119942, 0.013159340078180487, -0.012599056417291813, 0.006980224089189009, -0.0016007856889204558, -0.0026990500363436587, 0.006138628179376774, -0.005698962645097212, -0.011013865470886229, 0.019306442954323516, -0.005206519907171074, 0.008904099464416504, 0.015614769675514915, 0.006479176607998936, 0.01003144004128196, 0.0014708015051755029, -0.019253383983265267, 0.004964438351717865, -0.0017308755354447799, -0.0008385723287409001, 0.002971551635048605, 0.01165173270485618, -5.717711015181155e-05, 0.00660263408314098, -0.0036778558384288444, 0.004363731904463333, -0.0013870325955477637, -0.012024863199754193, 0.011516711928627707, -0.008584456010298294, 0.00011353601108897817, 0.004217017780650745, -0.007967342029918327, -0.010469263250177555, -0.00230363282290372, 0.006813054735010321, -0.007951519706032494, -0.0030516711148348722, -0.00441278381781144, -0.006810253316705877, -0.00973112474788319, 0.0018160559914328837, 0.006924195723100143, -0.010173808444630016, 0.0069180916656147355, 0.006917259909889915, 0.0022998235442421647, -0.017403169111772015, -0.011295838789506393, -0.009110450744628906, 0.0011816024780273438, 0.0008478164672851562, -0.005743210965936834, 0.004817767576737837, 0.002000158483331852, 0.0011275031349875717, -0.00027498331936922846, 6.781924854625497e-05, -0.0034457120028409116, -0.004909862171519886, -0.022442384199662643, 0.00011936101046475245, 0.0005057535388252946, 0.012286657636815851, 0.007257737896659158, -0.004751292142001064, -0.0001866167241876774, 0.03062300248579547, 0.0030387531627308235, 0.0036271024834025984, 0.002904631874778057, 0.004206852479414505, -0.006708161397413774, 0.00522435795177113, -0.002948254346847534, 0.01673069325360385, -0.006251289085908369, 0.00586635416204279, -0.01786197315562855, 0.014118064533580433, -0.011602938175201414, -0.0013347457755695687, 0.005453846671364525, 0.006188349290327592, 0.003393541682850231, -0.00580540570345792, 0.001970876346934925, 0.005756112662228671, -0.007596406069668857, -0.01215540279041637, 0.004115912047299471, 0.004492673006924715, -0.0014394196597012597, -0.005435813557017933, -0.00748188929124312, -0.008497682484713467, 0.0023768300359899297, -0.00820845907384699, 0.021296441555023197, 0.0012358752163973696, 0.0035342628305608578, -0.015346982262351296, 0.0014479864727367057, -0.008618094704367897, -0.006287330930883235, -0.004109122536399147, 0.005901965227994053, -0.0014188289642333984, -0.016527818007902664, -0.005431261929598721, 0.0172508413141424, -0.007303563031283293, -0.0010776953263716264, -0.02497709881175648, -0.008236364884810013, -0.009449763731522991, -0.00090139562433416, -0.009619582783092152, 0.0003703426231037492, 0.0010868852788751757, 0.0022865642200816765, -0.009532581676136364, 0.002350026910955254, -0.012520175088535656, 0.008641633120450111, 0.00796597654169256, -0.008808591149070046, -0.006172483617609199, 0.0030092867937954997, 0.016811132431030273, 0.007675428282130849, -0.008976676247336649, -0.0021056695417924383, -0.01470217921517112, -0.009406577457081188, -0.005575635216452858, 0.0044350190596147004, 0.01801297881386497, -0.000266053459861062, 0.005320202220569958, 0.005062450062144886, -0.008069309321316805, -0.006027741865678268, -0.003344514153220437, -0.005698745900934392, 0.02161788940429688, 0.0030569379979913883, 0.0031809590079567647, 0.017066988078030677, 0.0023837631398981284, 0.000983934510837902, 0.013662966814908115, 0.007655360481955788, 0.0025155977769331494, -0.005425323139537464, -0.014723875305869362, 0.009126663208007812, 0.0022715871984308415, -0.005362727425315163, -0.011223446239124645, 0.003955906087701971, -0.00026897950605912595, 0.0015654347159645768, -0.00020009821111505698, 0.0008819590915333138, 0.01158484545621005, 0.0032902630892666903, 0.007084120403636587, 0.01200956106185913, -0.026508548042990944, 0.008135148070075295, 0.0031265778975053254, -0.000519617037339644, 0.008268703113902699, 0.03401776877316562, -0.0028628869490189973, 0.01833419366316362, 0.00732036070390181, 0.00018833442167802417, -0.0028174519538879395, 0.002701065757057884, -0.0003149726174094432, -0.000834378329190341, -0.0026334632526744495, -0.0007587996396151448, 0.008744315667585894, -0.01229802044955167, -0.0009216395291415129, -0.0005035833878950652, -0.0021698420697992497, -0.006359113888307051, -0.003513552925803444, 0.010674368251453748, 0.008659373630176891, 0.0032956600189208984, -0.004492304541847923, -0.005367799238725142, -0.0014801296320828524, 0.0029491077769886365, 4.4909390536224114e-05, -0.00023282657970081678, -0.005708857016129928, 0.008078510111028498, 0.012751059098677202, 0.022618727250532673, -0.013306097550825638, -0.005356376821344551, -0.016044175082987007, 0.0038075013594193914, -0.009712078354575418, 0.010601498863913802, -0.004710793495178223, 0.0009324550628662109, -0.0023317337036132812, -0.002356442538174716, 0.00906051288951527, 0.0010855414650656967, 0.00418810410933061, -0.004839376969770952, 0.0026910955255681837, 0.003080671483820135, -0.005074501037597658, -0.0071671821854331266, 0.004601478576660156, 0.013395406983115457, -0.00621085817163641, -0.008819666775790127, 0.0010935176502574612, 0.001398259943181818, 0.016683795235373756, -0.0017697377638383333, 0.008914297277277165, -0.0011443224820223722, -0.005672595717690208, -0.007510597055608576, 0.0002356388352134013, 0.010582165284590286, -0.002526890147816051, 0.009770176627419212, 0.01883671500466087, -0.0030437816273082372, 0.005279584364457564, -0.004247947172685103, -0.000793820077722723, 0.02043039148504084, 0.005596919493241743, 0.006055019118569115, -0.007187908346002752, -0.0021097660064697266, -0.0023441314697265625, 0.014032884077592329, -0.004317966374483975, -0.0013054636391726417, 0.010507757013494318, -0.006326485763896595, -0.003175028345801614, 0.0045166449113325634, -0.0014009042219682178]], "ViT-B/16": [[0.00252377986907959, -0.01526912775906649, -0.0026764219457452946, 0.0007622892206365414, -0.0048589272932572794, 0.021667239340868866, 0.002623818137428978, 0.016858959739858456, 0.009961735118519178, 0.00188257477500222, -0.00706636905670166, -0.015524755824695934, -0.006292213093150742, -0.005384401841597124, -0.0018724961714311067, -0.005032615228132767, -0.012313149192116476, 0.01888586174358021, -0.0026704939928921794, -0.013780293139544401, 0.010445486415516247, 0.005098061128096147, -0.009209979664195667, 0.01895572922446511, 0.0030899345874786377, 0.0002045414664528589, 0.000501594760201193, 0.013756047595630991, 0.026258880441839046, 0.0010480880737304688, -0.008733164180408825, -0.0021251765164462, -0.0006396336988969283, 0.002686468037691984, 0.014428658918900921, -0.004874662919477985, -0.0001338178461248226, -0.005055687644264915, 0.0038404898210005326, -0.042984355579723015, -0.0014839063991199841, 0.01659072529185902, -0.0022342421791770248, -0.0059376060962677, -0.0071097612380981445, 0.0037306872281161222, 0.007918357849121094, 0.010623064908114347, -0.01250048117204146, -0.0016034733165394173, -0.01201144131747159, -0.007589892907576128, 0.003071394833651455, 0.004680330103093927, -0.00043769316239790476, -0.0030282627452503583, 0.009208570827137339, 0.005480137738314543, 0.00030205466530539796, -0.015178192745555529, 0.00188446044921875, -0.0021052794022993603, -0.0019683837890625, 0.004022208127108488, -0.005828727375377308, -0.001819935711947357, -0.002419590950012207, 0.001878532496365633, -0.028986323963512074, -0.009377869692715732, -0.008512345227328213, 0.006557637994939632, -0.007984746586192738, 0.007977225563742897, 0.019066810607910156, -0.0031710673462260856, 0.0029951875860040854, 0.0013377341357144442, 0.0002488656477494678, 0.001315940510142933, -0.0035589391534978695, -0.010650678114457565, 0.0028888962485573507, 0.012550229376012629, 0.009779951789162376, 0.0032068274237892842, 0.007032565095207907, -0.005693435668945312, -4.122473976828837e-05, -0.0056305365128950634, 0.006688811562278054, -0.011591380292719061, 0.009816852482882416, -0.014080353758551857, 0.001064929095181551, 0.0054153962568803254, 0.0021566044200550423, -0.00010017915205522013, -0.00449239123951305, 0.0021887042305686246, 0.0030281977220015088, -0.0010942870920354654, 0.006233973936601118, -0.00045221502130680935, 0.002964155240492387, -0.014552853324196556, -0.00458262183449485, -0.0060857426036487906, 7.044185291637086e-05, -0.011796073480085892, -0.004298426888205789, 0.0006648843938654135, 0.004081899469549004, -0.0028112584894353677, -0.018264163624156605, 0.00832876292142001, 0.007896163246848366, 0.0037313808094371443, 0.0019818652759898796, 0.001348040320656517, 0.004091696305708452, -0.005665735764936967, -0.00021405653520063794, -0.005799727006392044, -0.022571910511363633, 0.017503521659157494, -0.016604033383456143, 0.020298654382879082, 0.004438042640686035, -0.0016875700517134228, 0.0015653480182994499, 0.00441874157298695, -0.00866459987380288, -0.018176095052198932, -0.006948294964703646, 0.004327416419982912, -0.0037074956026944246, -0.0057908188213001595, 0.005062536759810015, 0.0029569755900989876, -0.006558418273925781, 0.00278374281796542, 0.017435875805941494, 0.007833914323286577, 0.006198622963645248, 0.0016748742623762646, -0.01787033948031339, 0.0029530091719193914, 0.0233282284303145, 0.010370839725841175, 0.010166498747738924, -0.001152537085793234, 0.010456342588771473, 0.00214143232865767, 0.0032201030037619853, -0.0011900555003773045, -0.008449310606176205, 0.014999216253107243, 0.008694209835746071, -0.008283831856467506, -0.008690552277998491, 0.009946996515447441, -0.015553647821599787, -0.024018027565696022, 0.009734067049893465, 7.460334084250647e-05, 0.008906364440917969, 0.026053504510359333, 0.016975196925076572, -0.008053692904385654, -0.00889189134944569, 0.007761174982244319, -0.011135263876481491, -0.0021840875799005698, 0.0020099553194913005, -0.012171821160749958, -0.004778970371593129, -0.002473896200006657, 0.032474344426935364, 0.011384747245094997, -0.00814565745267001, 0.0012116757306185636, 0.001057278026234021, 0.0035082643682306444, 0.0070335214788263475, 0.0033652890812266955, -0.002185919068076393, 0.0016662857749245382, -0.00603280555118214, -0.006475491957231001, 0.0010884891856800423, -0.004354303533380682, -0.0014530745419588965, -0.017246333035555752, -0.004907971078699284, 0.021230567585338245, 0.001974777741865677, -0.00034336610273881345, -0.006797779690135609, -0.009222030639648436, -0.006716164675625887, -0.016174099662087178, 0.012645591389049183, -0.0030580217188054884, 0.004850084131414239, -0.0023488131436434656, 0.005946676839481701, -0.015918168154629795, 0.0068900260058316325, -0.007899024269797585, 0.010487209666859018, 0.00471083413470875, -0.0321949612010609, 0.011525565927678887, -0.01443888924338601, 0.0067497600208629265, -0.0010833090001886557, 0.004870544780384411, -0.005783427845348011, -0.011269092559814453, -0.004137516021728516, 0.009587114507501776, 0.01095882329073819, 0.003895846280184659, -0.005333954637700861, 0.006648085334084251, 0.006933298977938565, -0.011699112978848543, -0.0019592967900362857, -0.00825421376661821, -0.00045550953258167645, 0.004971590909090905, -0.001418720592151989, 0.012582778930664062, 0.014022187753157181, -0.0011737563393332741, 0.002094702287153763, -0.0037848515944047404, -0.0038208094510165137, 0.0019306919791481723, -0.0303360332142223, -0.016990276900204743, 0.002947113730690696, 0.006089080463756215, -0.006745771928267044, 0.013526992364363236, -0.0018782615661621094, -0.001529173417524858, 0.00417869741266424, -0.0010245063088156984, 0.005329197103326973, -0.014982526952570133, -0.0011556256901134147, 0.0024301003326069226, 0.023402127352627852, -0.005360950123180042, -0.014792745763605293, -0.0018381638960404834, 0.003433379259976474, 0.0030732615427537385, 0.0008738149296153679, 0.005603443492542614, -0.007754789157347246, -0.003463268280029297, -0.01156338778409091, 0.008889111605557533, 0.005660187114368786, 0.010736075314608488, -0.010561769658868961, -0.005615017630837181, -0.014657475731589579, -0.008133714849298649, 0.002389344302090731, 0.0020281184803355827, 0.0053899125619368115, -0.011548681692643599, 0.0052515593442049886, -0.007540133866396816, -0.0006588155573064632, 0.00042997707020152694, -0.0069904327392578125, -0.007063188336112285, 0.0031568137082186604, -0.0024088079279119337, -0.001974360509352251, 0.006679751656272194, 0.011733949184417725, -0.0075893402099609375, -0.006111578507856888, -0.0028839978304776278, -0.005015676671808416, 0.001090873371471058, -0.00039326602762395496, -0.0033102902499112215, 0.004895527254451404, -0.014479870145971125, 0.003259322860024192, 0.013664375651966439, -0.01628622141751376, 0.00738359581340443, 0.009504665027965199, -0.0007464560595425718, 0.012015656991438431, -0.003927068276838823, -0.0008947199041193181, 0.003348762338811701, -0.010571566495028408, 0.010597814213145863, -0.011902722445401278, 0.0007704171267422753, -0.006918148560957476, 0.0012034502896395595, 0.01784298636696555, -0.01157657124779441, 0.001261028376492587, 0.009518688375299627, -0.011703534559770065, -0.0018965981223366477, 0.005350164391777731, 0.0002579851584001017, -0.003251178698106245, -0.005798762494867498, -0.0044032714583657, -0.0003721497275612582, 0.008616404099897904, -0.0010718865828080616, -0.001907218586314808, -0.014621561223810371, -0.0012733502821488836, 0.0004999420859596957, -0.007993524724786932, -0.016649593006480824, -0.0051883784207430745, 0.006312847137451172, 0.0032756978815252132, -0.014797947623512962, -0.002684522758830677, -0.0080803090875799, 0.007913025942715732, 0.001827456734397194, -0.010899717157537289, 0.005550297823819246, -0.005550276149402969, 0.0012505054473876953, 0.005959846756675027, 0.009622400457208807, -0.004276535727761008, -0.0020550055937333545, -0.0010359070517800073, -0.02049870924516158, 0.04144495183771307, 0.005760821429165928, 1.9301067699085267e-05, 6.497990001331664e-05, 0.002947373823686079, -0.01730641451748935, 0.007142370397394354, 0.014703490517356178, 0.010746890848333185, 0.006614178419113161, 0.001100193370472301, -0.009876944802024147, -0.006977428089488633, -0.0031227090141989974, -0.009614034132523971, 0.005103631453080609, 0.00710165500640869, -0.0007685314525257454, -0.00019923123446377936, 0.0009746443141590427, 0.006290977651422674, -0.00798156044699929, -0.010915366086092861, 0.010848153721202507, 0.0023511539806019208, 0.0003713748671791764, 0.011763215065002441, 0.0018236637115478516, -1.0988929054954466e-05, -0.002076365730979226, -0.003606926311146129, 0.0013762062246149218, -0.01101244579661978, -0.011625376614657314, -0.010741439732638271, 0.007560036399147728, 0.0022221478548916894, 0.004863088781183416, -0.00022346323186700923, 0.0022351091558283024, 0.0034782236272638475, -0.008072316646575928, 0.006869142705743962, 0.00022055886008522725, -0.000740116292780096, 0.0067745122042569255, -0.004785927859219638, -0.008878317746249111, -0.004077911376953125, 0.004613356156782676, 0.003156610510566017, 0.01423090154474432, -0.011657682332125578, 0.009175831621343439, 0.00201416015625, -9.084289724174688e-06, 5.852092396129143e-06, 0.003920251672918151, 0.0017049962824041195, 0.006164702502163975, 0.0062789916992187535, -0.004092303189364347, -0.0072559036991812955, 0.011256743561137806, -0.004151078787716953, -0.003443178805437954, 0.006991126320578835, 0.0034312551671808415, -0.0061725703152743245, 0.010723460804332386, -0.006386561827226119, 0.0004992485046386719, 0.0005754232406616211, -0.0019047477028586654, -0.0019448020241477262, 0.0025298812172629614, -0.008896470069885254, -0.013438029722733932, -0.002330519936301491, 0.004099049351432107, 0.0014899860728870735, -0.0013110420920632102, -0.003004399212923916, 0.0034340511668812133, -0.008297313343394886, 0.004833459854125975, 0.0050260803916237565, 0.003079994158311324, -0.0052576065063476545, -0.008331038735129616, -0.0004450462081215592, 0.003920782696117055, 0.1045032848011363, -0.003552921793677591, -0.010839641094207764, 0.004018220034512607, -0.0017421028830788346, -0.01586069573055614, -0.003697958859530363, 0.008628430691632358, -0.0010304234244606705, -0.003769988363439387, 0.011210327798669989, 0.009214455431157892, 0.0071040906689383765, 0.0083565278486772, -0.006935168396342884, 0.001010938124223189, -0.002800638025457207, -0.003880023956298828, -0.009630680084228517, 0.004413409666581588, -0.004969336769797585, 0.002637039531360977, -0.008274490183049984, -0.02275438742204146, -0.003335725177418102, 0.005121621218594638, 0.01155588843605735, -0.00035568800839510866, -0.01331970908425071, 0.004747629165649415, -0.007375652139837092, -0.005594578656283291, 0.017815676602450287, -0.008478077975186432, -0.006418314847079191, -0.00802170146595348, 0.006100914695046165, -0.009000084616921167, -0.0015485720200972123, 0.0007913546128706511, -0.004955660213123672, -0.0012160214510830991, -0.003382086753845215, 1.071528954939456e-05, -0.012163238091902298, 0.010952895337885075, -0.018375721844759853, -0.02016990835016424, -0.01863150163130327, -0.020231008529663086, -0.008966836062344637, 0.005049835551868786, 0.005157327110117132, 0.007917913523587315, -0.021837429566816852, -0.005356355146928267, -0.007074811241843483, -0.014281430027701639, 0.01006230441006747, 0.0061577097936110076, 0.00804580341685902, 0.005897175181995739, 0.004014557058160955, -0.0018978985873135653, -0.00048301436684348303, -0.016684748909690163, -0.007765845818953083, 0.002033103596080433, -0.0029979998415166683, 0.014290018515153366]], "SLIP_VITS16": [[1.626144777136518e-05, -0.0024033619715324184, 0.001790443308312786, 0.0068943905014086995, -0.005241366605994037, 0.005042455868202858, -0.00715268081562085, -0.0023839934094047055, -0.005816815420985222, 0.0026120453244816008, 0.005695506761019889, 0.0013109103099189015, 0.003596348312302407, 5.2651432766150086e-05, 0.006624363637952636, -0.001925805808489465, -0.003916354836705565, 0.00693819840142334, -0.002970684658397324, 0.00191113870030015, -0.0027740714990200505, -0.0008379782163749697, 0.0006049554371698393, 0.004375914188461713, -0.004904514758064496, -0.003918963018804789, 0.0009273934622549204, 0.002171919116252948, 0.005293956534429031, 0.0007707774639129639, 0.005579213251952424, 0.003353630679405549, 0.008521298060341822, -0.0016868961631024068, 0.0022363613825291395, 0.0021599319721148785, 0.0037710769882489167, -0.0025593224404887663, 0.0029181517637963143, 0.009345728438347578, -0.0005492739940316169, 0.0024552695791829754, -0.005345352078703319, -0.00495370138246058, -0.009715625004735723, 0.0009666451845656704, 0.003610291856933727, -0.005289013550447469, 0.0005981061946262051, 1.694590107283807e-05, -0.002373755105178465, -0.001699825205791556, -0.0005806343608789825, 0.0067232951087961845, -0.005001067305618726, -0.006992871936579999, -0.003379963264292612, -0.009076265356270596, -0.0017505825407252724, -0.004398742436685345, 0.0026502175341275606, 0.00851099552925337, -0.007212777516211976, 0.0014486508020623186, -0.0015069913193160173, 0.005695828644093126, -0.002942778000777427, 0.0014223274444124072, -0.006031074391847302, 0.0015988196881318653, 0.003402198754801331, 0.000584711548237301, 0.0032899564724754235, -0.0009792995723811038, 0.0017417561876672243, 0.0017624868355183426, -0.0031168494712222744, -0.0005721748721870534, -0.005116778605786916, -0.006123686542692171, 0.0005903007695451379, 0.004019079354210671, 0.00398489700323394, 0.006022441454909065, 0.0037049823070198946, 0.0025652394344268213, -0.007042919023660943, -0.001524208488593682, 0.005367437335239214, -0.0012689932376484976, 0.0065872500311921975, -0.008336953865099615, -0.003052024678750473, -0.002536181106486103, -0.003633819208268753, 0.0024617142731916493, -0.0025351575829766076, -0.0024725742511112585, 0.003217326547283764, 0.0033837244951758876, 0.007399756185556973, 0.0025336303462443685, -0.002352920015585947, 3.4697782459922576e-05, 0.0012583303349939234, -0.005015032164837148, 0.00035528586754067157, 0.0006623881775092069, -0.0027931924983435746, 0.003814931239255451, -0.0029942265034399243, -0.010536057805769484, 0.0012573669664561749, -0.004457050373523751, 0.004845224982339212, 0.006123364987698471, -0.0010817488496699806, -0.0016133953732523042, 0.0014883782873353554, 0.00098289739848538, 0.009260634731452394, -0.005632245118084194, -0.0024027343513973246, -0.004829693352803588, 0.003289705697997386, -0.006725350564176391, -0.001142274892613801, 0.002167596614030612, 0.004058679559007445, -0.0033799610206518664, 3.055069299245233e-05, -0.007613680629715831, 0.0012875858969478432, 0.0007843292180702765, -0.0038551790904338386, 0.0004416325298899947, 0.0027710000550459054, 0.006663412342525342, -0.003209246280179781, -0.001515751974776238, 0.0006089272580786856, 0.003535325046290054, 0.00580609031021595, 0.0014214429327032846, -0.0075558046033124375, -0.004124678925357075, -0.00652067964917726, 0.006534230879465627, -0.002221201969818634, -0.009145986627448699, 0.0038347852162339477, 0.00551292435755551, -0.0011971824556398633, -0.0024180175506361666, -0.00017116351095451676, -0.008364534016105936, -0.0017467023677785291, -0.0013680176674494178, 0.01404224087177268, -0.0010301814499226458, 0.002311461769171399, 0.006140968593006783, 0.002401739216028629, -0.0008137267908420072, -0.003097171360753815, -0.003182350795462051, 0.004912603900513866, 0.00047060045207299867, 0.0025259586430117697, 0.004770038777761245, -0.004567726697793907, 0.0010110051047046327, 0.00035418105570980424, -6.142377176067415e-05, 0.005238909570669588, -0.003981572237204422, -0.0008216698003128513, -0.0034303305120292043, 0.00018725942142985147, 0.0030452315272255378, 0.0002305397435768755, 0.0005200898528776379, 0.0008253267964887928, -0.006281545987638474, 0.007032892030441541, 0.0030477318637581047, -0.0028795463003916666, 0.0004907169575083324, -8.073322400874161e-05, 0.005066847973714837, -0.009391429394864563, 0.004744317255575545, 0.0008557582570409283, 0.005511511116227748, 0.005350362255491993, 0.00408216784390706, -0.010804779912260448, 0.002184784378517754, -0.004542444343149493, -0.005234543795020065, 0.0007704222490164392, 0.00012161036879247559, 0.007948220622810448, -0.0013409046322604735, -0.0008415690390393138, 0.003077186567349021, 0.0070449007167057535, -0.00012736995863220357, 0.0023046291528523643, 0.006304764988850697, 0.0013219794491305947, 0.0014802296447504158, -0.0008598501497710295, -0.0028403107584877435, -0.008462427324213257, 0.005422252643091436, -0.0038511907811301753, -0.0036494333868507638, -0.0005917804823680484, -0.0022534187036481745, -0.005474593643818731, -0.006934058937159454, -0.003667904413305223, -0.004599366532850334, -0.0015333695866336892, 0.005404473197731102, 0.008102303032170646, -0.0014068024571646381, -0.009443794202969577, -0.0007227701981636497, 0.004125290063463828, -0.00048803822994614166, 0.003236849999997172, 0.007763369751046412, -0.001355897762220011, 0.00479532469696344, -0.002135008742863473, 0.002805378294645132, -0.0021631494958207678, 0.0012532375879924368, -0.005540738898244774, -0.0010283547638788512, -0.0018805774108676052, -0.0032321312676437874, -0.0022442690149711633, -0.00014638045633381253, -0.00341820869090787, 0.004547826898157262, -0.00022714759159663846, -0.0001429239200660959, 0.00023492459546436278, -0.005609682337804282, -0.006614917248953134, 0.0010820951905440232, -0.00578743843785064, 0.002653588958888906, 0.002786316166107512, 0.002246542770246218, -0.0012402592328726314, -0.00434717147833329, 0.0027279784189886414, 0.0006965869318016557, 0.00687938593645495, 0.003084310161119156, -0.013174049963708965, -0.0007340394023975204, -0.0049236078947697826, -0.0019357602815778757, 0.0005761719975535887, 0.006561246567633299, -0.0013381023944186166, -0.0032123348130632876, 0.005415875316512858, 0.002803487592741889, 0.005148979644714433, 0.009252617177976805, -0.0021173730069263402, -0.0054400241192938265, 0.001479330999162894, -0.004305465824224725, -0.0010266057215631008, 0.0013813258906752294, -0.004399443850905465, 0.003153205087239097, -0.010335704502226276, -0.004019732550659683, 0.0012300443115898126, 0.0032604894447352054, -0.000298375740054653, -0.009294658101597715, -0.0021987515184181683, -0.0001862938595216055, 0.0028092868054624305, 0.007095770165092703, -0.0030210807506756976, -0.0020193765574896827, 0.011237417356989514, 0.009483854349871928, 0.004576274331405082, 0.002545089680510995, 0.0038640390742908787, 0.005147148730677807, 0.009883965720126236, 0.013314109832704576, -0.00405487639793798, 0.004122201268645851, 0.0009577373936984004, -0.0003625899976627406, -0.008998747110705481, -0.004435914642685515, -0.002506752329116513, -0.006034887024063871, 0.0028595725836401686, -0.0030893934019166555, 0.0035751210644693054, 0.007348337623460051, -0.00017903728241270254, -0.002608394800600683, -0.00907262146938592, 0.00600652425782755, 0.0030888397939799507, -0.0023986597780921402, -0.008392640135504989, -0.0013629649659957412, -0.0001232990405035453, -0.008773409703280777, -0.006753519726606264, 0.0036251690896526934, -0.001343014194968749, -0.0025761936240914192, -0.0038071989124132824, -0.002695630060440056, 0.001928093631497839, -0.0019063021242221694, -0.006051402242684906, 0.003713047047230328, -0.001129103782163425, 0.0016751222323033617, 0.004579832819713782, 0.006632272831418297, -0.0005310759879648685, -0.003956429090149785, -0.0036731066561928438, -0.0011575713076374672, 0.0013182725146676094, -0.0043403124595484295, 0.0025949882851405565, -0.0007953176100272685, -0.0009067243769426275, 1.7270641613071486e-05, 0.0018084733111953175, 0.004668650556017048, -0.007149035555564544, -0.00025127473848194563, 0.003573895167474715, -0.002913015108788386, -0.0015193078434094821, -0.00301969652487473, -0.0029767549832203366, 0.003007146392271603, -0.000376981683075428, -0.002655149860815581, 0.005862370456187902, 0.00510132682261015, -0.007301306156229901, 0.001983115026219326, -0.00366340297147293, 0.00017736997820479855, -0.002299323637006717, -0.00162977353267541, -0.0027229179051408373, 1.952213245782694e-05, -0.0012491015288767157, 0.005549845547648147, 0.006123968442393976, -0.003748698202385138, -0.0013478118625326642, 0.005275829748081214, 0.00689655157318405, 0.0024824625050479804, 0.004678271665894004, -0.001914185682174073, 0.0046355230310423795, -0.0030721512686630523, 0.011994810944253753, 0.003005585246931085, -0.005356078184294429, -5.4046961436557406e-05, 0.00048645266162401085, -0.0010338812664320504, -0.004012642730727252, 0.003207282832590863, 0.009555018782107665, 0.003054117138328198, 0.004762216945395761, -0.0034574297341433413, -0.003133518991737881, 0.004557074772575024, -0.004527183122594251, -0.00464094116945158, 0.005842228296387474, 0.006478915588972581, -0.008502608757804737, -0.0007035163104195455, 0.005326513396787712, 0.0012613107418556783, 0.007863215266049585, -0.006635368357158521, -0.0017275376740144566, -0.0016397195153827378, -0.0066304851365699, 0.0007870588345791768, 0.0021439847451719396, -0.0010646710698810312, 0.0064997786010446215, 0.007153540849685669, -0.0036229922936234452, 0.0009268074341393494, -0.006546927785331551, -0.009346118159803816, -0.006436367754676299, -0.0032615778287766843, -0.004967793305034072, 0.002978293394500564, -0.0018371833125870162, -0.010209798537702722, -0.005291116651443934, 0.008823694286878559, 0.0016776782206513671, -0.0011259691230158988, -0.0023255217767489886, 0.0001948781798339766, -0.0024147369972938107, -0.001222649247872392, 0.006791410248049281, -0.002033562780442563, 0.005765482341468504, 0.002364181828769768, -0.002305588621476836, 0.006464724323119633, -0.0031988954446701846, 0.002079465328609909, -0.0018659247659591274, 0.005624811173302905, -0.0023458018840756276, -0.006886443215659132, -0.000249827788634735, 0.00224056267391213, -0.002314585303379725, 0.0023244281999888552, -0.0012278635562820864, -0.002077862043568697, -0.0016697604547847439, -0.004076583767693426, -0.002713819637640634, -0.0013562050642741963, -0.002518089157423343, 0.0043786513428627095, -0.0037845881359482338, -0.0006811690982431173, 0.008196455169375193, 0.0031275381942660607, -0.0027543984522873655, -0.004463716605889866, -0.0011315975835631473, 8.67210328578949e-05, 0.0010316922548967837, 0.0015646457799117705, 0.0015540114413438895, 0.0018284677017535722, 0.0037255821410905263, -0.0025480567340061752, -0.010107979517091414, -0.001116947715424678, 0.0027597813486036904, 0.003012455806707625, 0.004301685866349461, 0.0031488271461884397, 0.008617629347347909, 0.000736141598529437, -0.004447601353604114, 0.0008286887843331134, -0.00017515349794517548, -0.0071391303698130106, -0.006351212203629654, 0.0005313199203969415, 0.0024017305576390716, 0.0027491701555184336, -0.004682286986446179, -0.0036076228345998315, 0.0035946299057369215, -0.005309724926271228, 0.01058167971760585, 0.0023252040740441224, -0.0008136409927498216, 0.00146063183307309, 0.004054462710469537, -0.0029205060987309954, 0.0034136495933952647, 0.0009550135582685471, -0.006043555093294179, -0.005392236127094788, -0.003406542437997734, -0.000319373368587218, 0.000942571109838107, -0.005961280414009128, 0.003853451014782132, 0.005975102243775676, 0.007037163753094237, 0.0025150076458389367, -0.005768539032115685, -0.002937289205988235]], "SLIP_VITB16": [[-0.003127811008281159, 0.0028056003978814623, -0.0007145577110350132, -0.003254205051978879, 0.0039058918641372157, 0.001271001015662812, 0.005766423012987202, 0.005153079263188623, 0.0052681210958822194, -0.011067101168009689, -0.008584905403040464, 0.005263156834354793, 0.008168229621581057, 0.001184363606047227, 0.0005188552988163956, 0.005533523581107147, 0.002808564510897586, 0.0022118683508861904, -0.005187121355530426, 4.510455024005211e-05, 0.003948199385459622, -0.006671206729317253, -0.0028235368028452466, 0.0033034589935348087, 0.005731380725013548, -0.003922642653130673, -0.004396371776238084, 0.009102344962725925, -0.002303417302424681, -0.005861456278415228, -0.004500272482718261, 0.002689302814277733, 0.00399938112505796, -0.00875058897773587, 0.007654865902044221, -0.0012062310495159836, 0.0011710181662982159, 0.002268326627513903, -0.002480416601015764, -0.010178150058808656, 0.010111022412522947, 0.004421549449034501, 0.01737514945853036, -0.00789751075887001, 0.00381588941309019, 0.005351203089296839, -0.0007615726314146379, -0.0003727158446880912, 0.0008581765776563624, -0.0005339218107771743, 0.00012357452016493325, 0.003574660704047841, 0.00578204450853677, 0.007285092195326631, -0.00604621990086426, -0.0005666786038835363, 0.004121491333617916, 0.009531115671217609, 0.0006671855649487551, 0.010185480699874462, 0.004624938991830939, 0.001550674332644452, -0.004095463373232633, 0.007309658601033418, 0.009878732359952251, 0.0043804831802845, 0.0075867194682359695, 0.0023778549564832992, 0.006978361433456566, -0.0035656520366584028, -0.0016227266539565535, 0.0035312338026084363, 0.0012035738846779241, 0.010168169159442183, 0.00044721116170297337, -0.004059280950803608, -0.0060418503602374, -0.002363003250634793, -0.007144764700735159, -0.0018219501891342752, -0.01015402131121267, -0.004078194827095351, -5.514683223075464e-05, 0.002754325687584984, 0.005677234434353362, -0.0006393528270895003, 0.017865231112492358, 0.003365854049082951, 0.0015811537424187082, 0.00123789888510311, -0.009801464047665251, -0.004267942538717762, 0.0038136920563622626, -0.003085627426943657, -0.0024321193238640917, 0.002561460950263692, 0.0034742611566219786, 0.009070317528147083, -0.004597576440904631, -7.413799705152657e-05, 4.919159321368355e-05, -0.004518475108356637, -0.007896013557910917, -0.0020230891849760957, 0.005888902100692079, -0.0064776031477694306, -0.004224747863190714, 0.0026143010697772043, -0.0030587014519948205, -0.009279999395155093, 0.004161802435357284, -0.0033315607023806405, -0.005509373816576872, 0.006002996349707246, 0.011211191875521434, -0.005804661248641256, 0.001088905238165433, -0.000509203580970112, 0.003047685308212582, -0.005260705567128418, -0.004735786044462158, -1.8404354870486805e-05, 0.0025145230042240146, -0.008327264516000552, -0.014897084305465052, 0.0006235064163113493, -0.004130055040480907, -0.0034380607493486315, 0.009282317943871021, -0.0026639991609210406, -0.0010220458365934482, 0.003846324726261882, -0.00435108168643307, 0.005706968489738012, 0.003353546532294291, -0.00027482660317963703, 0.006951805501805871, 0.0010945532217192522, 0.0015702264592453666, -0.004979029636491425, 0.0033515635163480946, -0.004573326240378352, -0.0033167400397360325, -0.002974893040531737, 0.00813237143765119, 0.005325655124827539, -0.00306566019869272, -0.01175240008160472, 8.552760647779177e-05, -0.0030210458419539787, -0.0030719499548219845, 0.0009885288732634362, 0.0015212283152240247, -0.00800510835357603, -0.005212816661117937, 0.007147011847171765, 0.004983148653991521, -0.0027983847010711396, -0.007514002140272749, 0.003529821197100151, -0.002182445759238115, 0.005219992779364642, 0.0073428996415300755, 0.003346526947676797, 0.008612697873600568, -0.007278870799134234, -0.0012341315688734686, -0.01109250344928693, -0.0053602776024490595, -0.012634877783553253, 0.004787041759383018, 0.0021299499679695508, 0.002758280315902084, -0.010776505621999437, 0.002397562832232903, -0.0008124924233098609, 0.006655013104054065, -0.003546228859869932, -0.006190208824012768, -0.0010258861796253113, 0.0024150357878004944, 0.006481321126391944, 0.01122878974737515, 0.002084429084789008, 0.0029006803663585087, 0.0018200692297382776, -0.0011190506484126672, -0.01144665877985641, -0.00030585855711251497, -0.0018386047661558477, 0.007121950859569057, 0.003202976177404211, -0.007178022647911512, 0.002681191584666856, -0.00044949183376791907, 0.010598123496906323, -0.0012948268135501567, 0.00873612955381925, -0.001638943900946866, -0.007906598822129046, -0.002471254020003307, 0.0006335931168657471, 0.005325142802162605, -0.0015871216931951822, -0.0022838825084777045, 0.005713785434967249, -0.0015952010554346197, -0.003250014333223755, -0.014546070306096226, 0.001995959914479907, -0.001992409275027802, 0.00365700367547106, 0.006033543738092041, 0.00034521110666735876, 0.0012900817885317583, -0.016775703584161503, -0.004407124466855418, 0.017522010782902893, -0.00579628848274958, -0.00017414212528488876, 0.01730756035414577, 0.007022567707198588, -0.007280227093195375, -0.0014037202503955487, 0.0036489549622109006, 0.0018976570784368305, -0.005197868827963248, 0.01308916226447433, 0.0021859468542970717, -0.002444888115860522, -0.008991389424243774, -0.006854176351969887, -0.012399442003119144, 0.010913157401691107, 0.00583045784812632, 0.0058621656340123555, 0.010581318937924647, -0.00015297519910911425, 0.007983135537704748, 0.006392266262661326, 0.0010956483588829124, -0.007726828845492988, -0.006365368452282961, 0.005990172572306947, -0.003974382831736213, 0.005684932334009896, 0.006648639042396095, -0.007432348475876177, 0.01031224746300681, 0.006153176090182652, -0.005162779966750268, 0.0029086282143411654, -0.003453734113877131, 0.008061971107963473, 0.004960097487624311, -0.003738367210396311, -0.004529834132302887, -0.001998655265197158, -0.0017249570228159428, 0.008956113138331355, 0.003211365843361076, 0.005350575930523602, -0.006645544368604367, 0.006902942463057115, 0.010038316711539999, 0.0026858068568716663, -0.007007937764600767, -0.0011617638943293568, 0.0008723836349831399, 0.0031707693362312203, 0.002697657571512864, 0.006438320736792362, 0.0051193002621981905, 0.0005759119257246221, -0.0035384108196012676, -0.0033811307102124266, 0.0007467842555012212, 0.004492018096656961, 3.485532810869243e-05, 0.002851507676744157, -0.008048964878650044, 0.00820817821923728, -0.008544449779120361, -0.004522690612992103, -0.006656006200831725, 0.00693416584875773, -0.0024238571058958773, -0.004333942193955989, -0.005389700347388332, 5.807598923142886e-06, -0.0033848232097542764, 0.011690674792672238, 0.006222316536877771, 0.005160369989673869, -0.00490164495369589, -0.0042008259756998595, -0.005637147145441966, -0.002583588933868503, 0.01838695636781102, -0.009744183774190868, 0.004650616372766141, -0.010859028806655922, -0.004488407798238437, -0.002987826010212302, 0.0023993422298438163, 0.0034954371407035396, -0.006958946014161815, 0.004337252226171338, -0.009901005054416597, 0.006914455046750267, -0.0016100403895093623, -0.00469514457059135, -0.0008981539232825707, -0.002541067967699333, 0.009789347608933562, 0.003806580747054384, -0.001108205095409754, -0.0026261053227988884, 0.006243019460023126, -0.003969116938109933, 0.005914063016296661, -0.00474467708086608, 0.0012636831921885167, -0.005985387174322651, -0.004269937593066557, 0.0037847423545000203, 0.0019541186523962424, 0.0034763339737599545, -0.0025623576472174714, -0.0012927736917679941, 0.005652629761078225, 0.0010531871640440948, 0.006278855771101502, -0.0008497355262410229, 0.00532478323161327, -0.011670915378172962, 0.00187407535585489, 0.002890367071482945, 0.0016431456685743542, 0.006917340331710875, -0.0032077773665316104, 0.00030205280266024787, 0.0039496784626284025, 0.00015562880831897566, -0.006056827291930942, -0.0043246847503310565, 0.0064929006515409456, 0.006803684162812055, 0.0067313720236680565, -0.0012358647072687745, 0.0018274126500314614, -0.0012467835437167812, -0.006923517939867451, -0.001967410842718724, 0.01392180866440123, -0.005025997499945914, 0.0010067160606426605, 0.002670647206038915, 0.00033127429725771616, -0.0030607106164097786, 0.004757376443277197, -0.005911223886703905, -0.006062467720105567, -0.005179857271617617, 0.008878275487487292, -0.0125982770339099, 0.004393964751877567, 0.004989827340151267, -0.00196682746437463, -0.000994894410144876, -0.008986408595195495, -0.0011756174393336895, 0.0005261546889828023, -0.005096264024773105, 0.00045917264916087337, 0.004744494429112161, -0.005025705745951695, -0.0015722962363559582, 0.014581427470230581, 0.007792254227255895, -0.0058705112526447265, -0.002224561557258392, -0.004105758461677891, -0.005134786214594815, 0.010759539955126289, 0.0012991019122471845, 0.004245238653807477, -0.017755667795427144, 0.009013861417770386, -0.0031392334679945966, -0.0053016126462766405, -0.0021201991343828414, 0.004995068527271294, -0.00045753327801569617, -0.0031825398010286443, 0.007395138751793307, 0.0017132484830323265, 0.0021392147543586107, 0.00642635550519282, 0.007217075536490565, -0.004585849830288102, -0.0103488883680918, -0.007187522582667457, -0.004427992717616937, 0.007666152748490938, 0.0027463385565418066, -0.00625070691801904, -0.005953163218113004, -0.005758529476059433, 0.004090905301299327, 0.00597879383713007, 0.0014874481659551894, 0.005610216633530486, -0.003501233067998495, -0.010750234211710365, -0.00502929092115003, -0.00037583964942975584, 0.0029628085983197452, -0.0011831889542835688, 0.0016702507762767528, -0.011012171331623744, 0.002121779791857327, -0.011312556430973265, 4.94458495681597e-05, -0.002852256293408572, 0.002403499934271993, -0.007547804942904886, -0.0037320737980983537, 0.0014671182725578547, -0.009510726461568, -0.018257676115767528, 0.0007399427691284059, 0.011981589677320277, 0.009527336921151309, 0.010787354083731772, 0.006644494127778507, -0.015160333164120937, -0.0051118251958541805, -0.015755004900380627, -0.006957751540043813, -0.007220109009226277, -0.008832967797802252, -0.0070624911117068805, 0.001137233803588468, 0.0016777722524817691, 0.003006793807303027, -0.007776650873975914, -8.057903456078729e-06, 0.005127738531551916, 0.002940743694621644, 0.007649333954428915, -0.00020614503459496364, -0.0050350859898819844, 0.0011048161428665153, 0.004485741339687427, -0.00290299727666107, -0.0020193214083767744, 0.001664735419167715, -0.0031321761436464094, 0.006236850559203463, -0.007604675473306666, 0.007677773703604047, 0.0001602237726646416, 0.005655250834851441, -0.007720777780791235, -0.00476043752430335, 0.005428837972100489, 0.00797735290623016, -0.006066643960035763, 0.0016100966286930196, -0.001430282499231085, 0.007401446505107084, 0.007392791322093795, -0.003705995083278551, 0.007448151051490145, -0.0007184560487406635, 0.006570067600643432, 0.0014753908934918361, -0.00030521692877466533, 0.00828886308061721, 0.0014335090409903477, 0.006738288751380009, 0.002005161450307987, -0.00011848802445125692, -0.002077081833373417, -0.003602705308532512, -0.010212056517378765, 0.00864888637178493, -0.004295407646250998, -0.0009649456161159014, -8.48420075437225e-05, -0.002356986458339219, 0.010660808279433033, -0.0006509479016420447, 0.0032137114639309364, 0.001963911102476148, 0.015756941297282043, 0.005369349996643985, -0.007359770381299313, -0.005405140723186458, 0.0051665663162235795, -0.007542449933349744, -0.003925735961688173, -0.005594092669939113, -0.002399215047096897, -0.0012955395855401113, -0.004548047307335681, 0.002839449754736217, -0.0076317172920839366, -0.003127813930570319, 5.97937402992757e-05, -0.01055195551915941]], "SLIP_VITL16": [[0.004215951530733782, 0.012725570281459528, -0.005019531888220546, 0.003489194842669267, -0.001796320911539211, 0.0033790779132025564, 0.004128668316380674, -0.0020354259970851926, -0.0007543408560608932, 0.00014425023585896632, 0.0054341494370336585, -0.005752997726879337, -0.006771149034400216, 0.003875352664511989, 0.007478096055406654, 0.0005108590703457594, 0.005498097024180672, -0.0024007919075136833, -0.0020605966578428206, -0.005928983954204756, 0.000502913782838732, 0.004239288069749655, -0.003653610633178192, -0.004921486222883686, 0.002515949203040109, -0.002488854677225885, -0.008826152801206757, 0.002945542731057767, -0.011895663475363766, 0.0016945863608270884, 0.00028565423351458526, 0.0053425783407874405, -0.010580403431380215, -0.003330480095676401, 0.0034401954696725375, -0.0002952339498072179, -0.009210649285126818, 0.005496805565516379, 0.0003379688185470367, 0.0077174137219447984, 0.010842172680316831, -0.0006517301636367022, 0.005916863634907218, -0.01426012825951065, -0.005265006753192705, 0.0019201313791034624, 0.005519768403081054, 0.012048061158896999, 0.014724852703114844, 0.006595913468944756, -0.0023461935971598987, -0.007687207467494194, -0.0030324861528986894, -0.004975521132688631, 0.005487048220609061, -0.0017633666945833034, -0.007470702328481077, -0.011250687317938587, 0.009341604764234613, 0.009792195908217265, -0.005198552908206528, -0.003565218802825919, -0.00720457849621943, -0.00434834728102115, 0.0035930588558337404, -0.015341622077605942, -0.01680952438089827, -0.002029326765544036, 0.003458112146207979, 0.004543548936701634, 0.00314495392376557, -0.006086571755903686, -0.005881203849143771, -0.008093895099591464, -0.008919387277935384, 0.004503986003163103, -9.415627309036518e-05, -0.002991054248096506, -0.006095471590842036, -0.0056178774869873795, -0.007120820302092896, 0.003520970449079123, -0.011071243492717093, -0.005743817669678141, -0.001272555824305693, -0.0015053497204049072, 0.005463926624295047, -0.00289311325600879, -0.010514003235254095, 0.0007611066314645795, -0.008618897769007495, -0.0058296889659356, -0.003222743250344967, -0.011711889454586937, -0.0023120661737100964, -0.003044898265877485, 0.005960079756650055, -0.0013333304192532196, -0.0036561934870075093, -0.005778504355641249, -0.005927350160411814, -0.007164400432057764, 0.0044200756502422445, -0.004997868741735478, -0.002505372246642682, 0.01040826767513698, -0.005335800116881728, -0.009085548094431448, -0.011408861755626276, -0.006958104573475961, -0.00288369064219296, 0.004535242232536395, -0.002465845678340302, 0.008215441622517333, 0.007720862980931997, -0.001248056002871388, -0.0023060410378754823, -0.013387973190137098, 0.01198289238593795, 0.004969759918326006, 0.002635482021353462, -0.011248028327165892, 0.009458645268089393, -0.0031332139465534564, 0.005872710099621063, 0.003926376018419178, -0.0022816811794076457, 0.008114841343327003, 0.0024365643092261746, -0.0027222985967951404, -0.004780674527864902, 0.0005900458358651522, -0.0011285890994424189, -0.008048881760756067, -8.652618866604369e-05, 0.0043595029326917775, -0.005395494131583044, -0.002957046995024113, 0.004351129855918276, 0.006992550058798356, -0.007257029403593726, -0.0031413747770288464, 0.007392299054613846, 0.0023404058989730074, 0.004288404756648975, 0.0011660057114733554, 0.009288023773644287, 0.0026744159880432924, -0.004958070687610994, -0.00010253360828342377, 0.0013838331797160208, 0.00043269493405453247, -0.007843219357627357, -0.009221177660616706, 0.014618063176220109, 0.005056389014829285, 0.00496074495921758, 0.0012363848615099086, 0.007863097421994264, 0.004506985900330947, -0.0007887535525283491, -0.014084252449472184, -0.006569886368445382, 0.015305240204642443, 0.0024115470005199313, -0.00011004297994077206, -0.006891364295204927, -0.004972124260596254, 0.002082036236639731, 0.011040385108737446, -0.007063049849503757, -0.0011133928889070048, 0.0073667585384100676, 0.00803129147971049, -0.0016270776131105703, -0.018223569982431152, -0.0034115334380079385, -0.0226862571263072, 0.0005518003791538913, -0.004630189485562203, 0.005716220375192775, -0.003126189430159604, 0.01194239187646996, -0.004573028354736216, -0.013352034370076251, 0.003599158678711814, 0.0016951990758322863, 0.0006612399698827758, 0.010074713139064525, 0.0018402569879650693, -0.00020883931905369866, 0.004147187056580813, 0.0012356037781997217, 0.013603365391397598, -0.014303690087134863, 0.002389967229894617, -0.0036654940483086575, -0.014519001632420854, -0.002958460202948614, -0.004841393115136518, -1.620116976978718e-05, 0.009510184013792736, -0.0031737227003428743, 0.003208443732133179, -0.007416674486276777, 0.0007817654351873204, -0.0027547356677876614, -0.008998858279400425, 0.011675195847849616, 0.007249248468063095, 0.003428882030262189, 0.004129977915330197, 0.003714211483549496, 0.0009640255719370397, -0.0043465758208185434, 0.005179950853661547, 0.010445765293711287, -0.005121964444035919, 0.011202633640840017, -0.008331510848206977, 0.0006111457266590736, -0.001158408312634987, -0.015066316494829318, 0.028684706130827013, 0.004837192637337881, 0.005593372652418271, 0.006862817352653523, -0.005164031077583786, -0.005583300181156534, 0.00999698888732713, -0.005714053970719264, -0.01524163358209824, 0.003947920253267512, -0.0045808735201055915, 0.008928049076613124, 0.004763928358443081, -0.004317478938239878, -0.0059298943537710765, 0.0014641112753782763, -0.0028519965602423654, -0.00042788485403764953, -0.006795451875818386, 0.0022428845351731216, -0.00636536859780211, -0.008098109829668167, 0.008518090566874227, -0.001484662937483252, -0.012556520475878973, 0.0006792940072376623, -0.012141663300677796, -0.004706983102633703, 0.0002990868855373592, -7.312758349475174e-05, -0.013494752506217495, -0.009996068223368973, 0.004120958193776791, 0.002432569125878879, -0.005029145335108546, -0.00832123305140571, 0.005835550334516236, -0.010151607947508724, -0.0005916604859521613, -0.0013387367653194815, -0.01261731384015134, -0.010009067598730326, 0.0003957916448019752, -0.005995256985029713, 0.013752324037010443, -0.0015766244931993169, 0.009044543722997001, 0.004874804065118289, 0.0009763989788056787, 0.002634804928675294, 0.0035508113955570893, 0.0008522651081544941, 0.008845067164987674, 0.004601065767928958, -0.015680564085910606, 0.0026969053697857015, 0.0001454062400047043, 0.004224835831502627, 0.0025039119540121064, 0.0024112419447522952, -0.0135680448861835, -0.010364216625351794, -0.003145173549207611, -0.001019805468703533, -0.013418042862957169, -0.01055847411043942, -0.006801531882956624, -0.0022585103288292885, -0.010573898971250112, 0.007152171037804775, -0.009030670456757602, 0.008596878869205037, -0.0008906809539026153, 0.0064191383373161616, 0.005150949362855912, -0.016313795365435493, 0.010213900442150507, 0.002825441177595747, -0.016813376473940232, 0.0055548936573111204, 0.00026269482755610085, -0.012075583553682505, 0.007225400937551807, -0.007498266785246829, 0.007993516295259311, 0.001132838660851121, 0.0011289763708852898, 0.005972026892281561, 0.0014527065584182056, 0.006737844144068236, 0.004057907330041577, 0.00020982692711351606, -0.004267382297918877, -0.012435395461083812, -0.0008457217230567367, 0.0037630896734878096, 0.003932414683152852, -0.011316186505031182, 0.009521270979100584, -0.005807597714010626, 0.00043139317792586303, -0.008860945405269216, -0.008698931914378507, 0.005911468615522608, -0.007677350098013201, 0.013564949586990142, -0.0012362284786914535, -0.01569740681655028, 0.00856337797648104, 0.00786092391618612, 0.008959955175999887, 0.007435631176287483, 0.0072444534797052075, 0.0002544163885018387, 0.004698516615793447, 0.00340276733384764, 0.0002899095098572689, 0.0008482592397327168, -0.003037006112704561, -0.009329898304051972, 0.0018510703084757552, -0.0037250805656764323, 4.571631804786008e-05, -0.006749067942357875, 0.002678521673343228, 0.0012741025420837104, 0.0056145891748284075, -0.001983356721625155, 0.00030449783662334085, 0.0023817233693328235, 0.003479680046439171, 0.009783676793714141, 0.0023834988162641166, -0.009557051709800196, -0.006606499727984723, -0.004756218718036755, -0.0010326540637338039, -0.006334327632264995, -0.0020152023002579407, 0.0022513075647029005, -0.0017065310662887478, 0.0014211432479152627, 0.009469245227096093, 0.0031504574739797554, 0.0009587751119397581, -0.006309129837477072, 0.011919440278275448, -0.00719889634373513, 0.006937178095210002, -0.00012786921103146278, 0.017556044669948857, 0.003731935275771486, 0.0012180205984887761, -0.003604166976980525, -0.0057606720279595285, -0.007360592780804094, -0.007801594799358019, -0.007412313197908754, -0.023613984283821825, 0.01177751271064732, -0.00038724942979487514, 0.012877685996830805, -0.009211704844016242, 0.010895489031099714, -0.002273966575475324, 0.0117190033719949, 0.0010976546803827987, 0.010139903344679624, -0.014834633116896093, 0.0017834762534634629, -0.004346540978241881, 0.0006016687971582132, 0.0013526147297604693, -0.0019390197280286375, -0.006578555714606242, -0.01074714721603827, -0.015011645387858152, -0.006670982182351343, 0.005915755488041956, -0.009196411455790936, -0.002682677533646878, 0.0030560069082474182, 0.009210699110884561, 0.005954370761173777, 0.00198085420627401, 0.0053385278019546095, 0.001321229067715736, -0.013409790702016007, 0.001762262005782264, -0.0071008355695415595, 0.009296223055571318, 0.0053693916733292026, -0.002783328126745553, -0.0006817188960584752, -0.003513688560236587, -0.005165968010921709, -0.005982490087097343, 0.004117068322639996, -0.008397526527749671, 0.007232002161717073, -0.0098346509039402, 0.005696868489559909, 0.003645290795248002, -0.0038575870355337183, 0.0020510552726178063, 0.005785494317850942, 0.003883999708870595, -0.002811625504612246, -0.0018773216923529436, -0.016588378303409132, 0.00786551791944393, -0.006111356427109886, 0.0019359036295182623, 0.013237159222957083, -0.007891620953821323, -0.010749606442087414, 0.0033766389824450033, -0.006449433950117302, 0.0024604523258114352, 0.009817181409082637, -0.0025847146012396988, -0.009260343430055815, -0.005426505662564359, -0.0016032402795231465, 0.00782538171518933, -0.012951967454600064, 0.004376719642261212, -0.001894764975242486, 0.002809068442068319, 0.007883713490710681, -0.008360354150433777, -0.0008067671601152543, -0.004536471382545475, 0.002421006632754477, -0.001640609055440027, -0.006198879140852527, -0.009366741393354128, -0.005601684319448064, 0.0016913826826070863, 0.00021165880289945177, -0.00932815962005407, -0.006700097812757702, -0.0050550124444932645, 0.005743868268010294, -0.012297017232578415, -0.004620942509394477, -0.002084891491738912, 0.01175015339024619, -0.005135985853319827, 0.010579305346420204, -0.00399794914251702, 0.009243562748782675, 0.0006228256653147655, -0.01608371226889589, -0.0034161070685844275, -0.0035501603031827325, -0.007207344825887543, 0.013515605411322955, 0.0060010793491859366, 0.0067835004619238096, 0.0037307455680671738, 0.004591204368890347, 0.002801663951355622, -0.0029469076861542744, -0.012118888061112637, -0.008428830372973938, -0.00697103432453745, -0.011425849648234858, 0.00014164437677457314, 0.005963493953458965, -0.00013847519982267478, -0.007482937774594493, -0.0027790207955562946, 0.004340757361867217, -0.005120018751106479, 0.01208259194920009, 0.004715389330654448, -0.0034353419416054895, -0.0006317678120963547, -0.01171055432165634, -0.005881108735180031, -0.007319414818828751, 0.004932637971995231, -0.009737510174586947, -0.002784093714911829, -0.0014389374833130714, -0.0070805335701813665, 0.0053415890698405785, 0.008816617625680838]], "SLIP_CC3M": [[-0.009077274887452158, -0.012126587779758582, -0.003145839764990596, -0.006256126306570051, -0.004693988308479835, -0.004066603962697132, 6.138271022461048e-05, 0.002409918392500418, -0.0003598849712447699, -0.007606235237538134, -0.0015307681407483124, 0.010023980988824571, -0.0020249731500040433, -0.002256439042618942, 0.004238841190024031, -0.0024485356513072147, -0.0038963662386363876, -0.004242186884353446, -0.010171175696252085, 0.0011768635224804966, -0.006083289436487994, -0.006572245911229402, 0.001444578445939853, 0.0029552561146291827, -0.00414605709639463, -2.3773913695041005e-06, -0.007364410674199462, -0.009452602826058865, 0.012224232418123974, -0.0010820362023712898, 0.009476821149953386, 0.005728411197196692, 0.008699400879612018, -0.01161574248478494, -0.0002369518148374151, -0.00048349949065595865, -0.009109110367717221, -0.0001980789344419101, 0.012998026589312674, 0.0008944761701224543, -0.0020448321635988323, 0.004567552238189488, -0.0017718119091693005, -0.008299486288292841, 0.006481206605464897, 0.0006621112168597228, -0.015018327473874462, 0.0024843175937845005, -0.004509703806516798, 0.004129389351212674, -0.003003076737513769, 0.004715857736300677, -0.0047168205915526906, -0.0035181033017579466, 0.0044133939452215415, -0.023016744653101672, -0.004399460422891105, -0.0029497999292454405, -0.0005178233682685955, -0.00016519746647893681, -0.00319533859279049, 0.014970821159129791, -0.0018512193928472698, -0.0004853057907894254, 0.0040997640250928025, -0.0036955485239476803, -0.002230310522877102, 0.009515004994847748, 0.0017868879473429498, -0.005678791071245956, -0.00012943451292812824, 0.0015652351589365426, 0.0011584095402874736, -0.0026605617657134498, -0.011154205367843546, -0.0012928610350089985, -0.009582212903875516, -0.001063950329394589, -0.0024958010868761996, -0.0012020161692899711, -0.00026195260315117416, 0.0005968873685395226, -0.009400142600167206, 0.005165778290326919, -0.0010530776767568159, 0.007838140884731813, 0.010683069485821763, 0.0031501139270734384, 0.00039996040471702854, 0.00034247776916758454, 0.0008552195080979361, 0.0006604937847111067, 0.012758960756896573, 0.008684359607286753, 0.0013027139066252857, 0.005836006963032894, -0.0011097027824937614, -0.007291863161795349, 0.0010349154207770772, 0.00440834339877421, -0.0062167206567458125, 0.00018857272450325353, 1.1164663274856185e-05, 0.000884174784666604, -0.000559986050410027, -0.011319900799373336, 0.0003511670617048039, -0.004371145639280174, 0.009589454442241484, -0.0016100947554646555, -0.0017349079716950655, 0.008746216835623433, -3.944935848597744e-05, 0.0006282535402781578, -0.008133172650228851, 0.0052648633295162145, 0.0001589824281505916, -0.0014892941002141342, -0.002846368334510109, 0.001272391813637858, 0.010597628520124337, -0.011685189896855838, -0.0025026131188496947, 0.0001649978485974389, 0.0014217699010094474, -0.0053231165617365715, -0.0023722126736009305, 0.005608241482894466, 0.001006343738646883, -0.008322932482273747, 0.001562490583058785, -0.002931656739251179, 0.008214894558146953, -0.00908867676017425, 0.004053766405294566, -0.0012248674545183094, -0.0005398894136305898, -0.0006840670936402275, -0.00832626978676258, -0.005978249389127913, 0.008217139751650393, -0.0071506067073311315, 0.007957198299912059, -0.0009261393428129268, -0.011408972929612817, 0.004219731686382802, -0.008806291843277657, -0.00015433209112168016, 0.0011630976911295582, 0.0031617442040111493, -0.005681024567986076, 0.0030164315936748246, -0.004379992457953362, 0.0027138769033957615, 0.012158490532204847, 0.007226442174710843, -0.008054942928455686, 0.008896143787503455, -0.005497691390866588, -0.0015543870024637071, -0.005418502259999514, 0.0030700332321099595, -0.003425823450511829, -0.0035514270216067834, -0.010979069358489307, -0.007313543962399388, 0.001071048429532144, -0.010120327669111168, 0.00781636186002288, -0.0009012308834247633, -0.00024782739770175255, 0.0011807628219354556, 0.00882515467872674, -0.0025197124658999127, -0.017243060103448275, -0.0003496134820373045, 0.01429034700330786, 0.0045312077590179715, 0.006771164313911206, 0.003720944583288987, -0.0005361151357977725, -0.003193206661804157, 0.00616725546900522, -0.009108456105671146, 0.00097853827438402, -0.01151215991492129, 0.005429910800144584, -0.0034392603292045278, 0.007029713004488836, -0.004488721405240623, -0.003165678269314496, -0.007750269630130124, -0.004885467192666096, 0.006083873624447733, -0.008494843781756405, -0.0024903916405905465, 0.008230132982134819, -0.006600017579992049, -0.0036128596865720197, 0.016021033632569015, -0.0007343788377263266, 0.005504510008243167, 0.003591306532722556, -1.514531455045051e-05, -0.005858502826992084, 4.20250210233712e-05, 0.0034279198232318522, 0.008196663704108108, 0.0030742235209221358, -0.016030272687203254, 0.007404504253910009, -0.004794192548036917, 0.002233529484576797, 0.0018221294528550733, -0.004441226493905895, 0.00403831799320125, 0.0031693208094855582, 0.007330527472731774, 0.0007043413656488556, -0.008623620754488831, -0.005609449009749702, 0.002395971313076603, 0.003603481899269609, -0.0043853573839772834, -0.004376725864527874, 0.007011430189860134, 0.0008676512674851908, -0.005583059413104573, -0.0037439481450498788, 0.0010282523713116935, 0.002959235386118631, 0.0055854480544274485, -0.0012002822040813044, 0.003803817597641184, 0.013221397558729885, -0.0009368007145398732, -0.0026156683293679234, 0.006639711617026478, 0.003981284220406611, 0.002053147248013622, -0.0029835077320140863, 0.0011400921979326413, -0.006486542369450696, -0.00023104199631647504, 0.006571100273338909, 0.0013143505414270548, -0.0067433570643929235, 0.009042583691718228, 0.00711248437239026, -0.007269695676355201, 0.004542069107463416, -0.011469922218979758, -0.005776491042607548, -0.017467632331483237, -0.0026580008826303236, 0.0057126270376929005, 0.005989543395116925, 0.012470131742619826, 0.008947865980272501, 0.002048560867975044, -0.005728074264797295, 0.001679013641974465, -0.0020884503504600034, -0.008109800538725474, -0.0005888455780223012, 0.013469418277963992, 0.011137848407749763, -0.007991301753050224, -0.005256350914185692, -0.0006856352344832637, -0.008335972225970842, -0.0059399164747446775, 0.001636512969112533, -0.006213802883642281, -0.011042616128344724, 0.003201730808624151, -0.0012076880190182854, -0.0012509791400093073, -0.0028276201099453648, 0.004959961494684898, -0.016998424313814296, -0.017448595217005772, 0.0010568205298940557, 0.004350513346831906, 0.00011590074493803698, 0.015950198135959166, -0.003168119458926163, 0.0040244745412730334, -0.0076738587919284, 0.011807244476089676, -0.006515590389343823, -0.019775086964893326, -0.0019149533684619385, 0.00040205171204764703, -0.006459254124572247, -0.007519454541827805, 0.00025190121496879506, 0.0033828718587756226, -0.0025955667899159526, -0.009597968397429213, 0.002595303633080963, -0.007877770959484305, 0.005044392600459767, -0.011668216437101364, 0.00903696991339199, 0.00956225261854177, -0.011793500219937414, 0.012266303491990337, -0.00031084679143201545, 0.00775552712465552, 0.009963774175213817, -0.0016723600089211359, -0.0003616679843451657, 0.0039849548325450596, -0.0009107375940815964, 0.011271968804563087, 0.0026330624241381884, -0.004224957326765765, 0.003004746284535611, -0.007997800442601809, -0.007901583840562536, 0.02205764164748623, -0.008313794902774549, 0.003689784175631674, 0.00026221771258860826, -0.0019135950371326708, 0.005969385743479841, 0.01479184539692307, 0.009874030442336913, 0.002632828390977178, 0.009474991708306004, 7.09811184523533e-05, -0.008056936603018337, 0.0024085056422997932, 0.006471885515731464, -0.00044214927633715734, 0.0016021396970080058, 0.0009197539237158527, 0.0033031862218525585, -0.0004918737368742841, -0.00279348535166884, 0.004622039977799763, -0.0053816294424574515, 0.006812917322597721, -0.0034040226587835204, 0.005714209432798351, -0.0026876037220724576, -0.002211098590950398, 0.00972544427812946, -0.0018961776143193929, 0.010431679240851234, 0.006958123680140654, 0.005796753973382612, -0.017050505965016782, 0.00761460033457049, 0.007063203893432561, -0.009836571377077646, -0.004453716221508908, 0.001682844393971289, 0.0010458255737004, -0.006162932555360549, 0.0047188117592172184, 0.0024329085294580582, 0.014639651024481285, -0.007277942036373799, -0.014610910640013488, -0.011549886427184738, -0.001674689109098501, -0.001208536263385957, 0.0007377574855292404, -0.00020390334115787112, -0.00061288465142504, 0.002903427732896737, 0.00011306126940656847, -0.002189391374651512, 0.0037798229816623716, -0.004590446794695295, 0.003322116591417316, 0.0039271422111513896, 0.003810827339872383, 0.005461087323386564, 0.013783225675896656, 0.001600411363390536, -0.001426073838956655, 0.0004507439629047767, 0.0008393512107431889, 0.000312262434321879, -0.008629835757098837, -0.0022032264757647435, -0.005437776795588434, 0.006304120597302575, -0.000712433065266603, -0.002468939658931711, -0.007381314389270054, -0.006574967638285174, -0.001780647964386095, 0.0016063965704233851, -0.009110460158232542, -0.0035450849364596342, -0.01646108908409422, 0.003959535279798068, -0.007688958872511812, 0.008767732479265593, -0.008505591156955978, 0.001321817769414999, 0.00605097856102723, -0.0032130022194575177, -0.008716531902212991, -0.0020810071886940493, -0.0071498295080594035, 0.01130189560353756, -0.0004525186986112121, -0.010660314585865388, -0.011155923415737394, -0.010748432001987981, -0.006410405375804245, -0.005017868878150526, 6.443451804278091e-05, -0.002527122700650414, -0.0022398968206041245, -0.017075208904729647, -0.0011418138165026894, -0.003744577200532978, -0.00016141572797839787, 0.00631883672692559, 0.0003983003037071539, 0.013856196656309872, 0.0005115237595005456, 0.0041309510865672125, -0.002927792697763917, -0.00806204268751158, -0.0020929871362485837, -0.008793687040451914, -0.001520591709942726, -0.0033424153242032698, -0.001190014008898288, -0.0067355220671743155, -0.008581068224554077, -0.012653397168667818, 0.002057874903336844, 0.00742594147926535, -0.008104529334973035, -0.005499346377539703, -0.006225682668049228, 0.009446961254897447, 0.008515380386432464, 0.0023921960700218647, 0.005604809721923879, 0.006089993937745352, -0.002339044522324746, -0.00643092539063549, 0.006920637661427136, 0.00234075456815349, -0.009137278973040258, 0.0009156136604195272, -5.601161815733946e-05, -0.0008077870800413875, 0.004834341202777895, -0.008518909258947875, -0.005968919822903859, -0.0033839727667245023, -0.004665191485070284, 0.00668435340577906, -0.0010021963918750935, 0.0008284754426726576, 0.0008048210266596544, -0.0040045129135251045, -0.005508534594396632, 0.0028953871594487946, 0.014839898752556605, -0.004188469976229084, -0.00033731814950111925, -0.0028100014295143264, -0.012755956180626526, -0.0031587622943334247, 0.0022093778560784774, -0.008034652713170295, 0.01133979109793224, 0.0008157488508996613, -0.01128162100741809, -0.001303516952744263, 0.004811775748914276, 0.002028258800485426, 0.000131003373429521, 0.0020112303994789145, -0.0018764964293454382, 0.0038425784547474577, -0.013540223748846482, -0.0005509757373312607, 0.00017410201888362273, 0.01410139552635056, -0.008468426499431102, 0.005861735537605866, 0.009051069798343551, 0.006364136092915116, 0.01003704326417805, -0.0009184852533508092, -0.006013072265142746, -0.001799950704232535, 0.010359335103368554, -0.004934521540152756, 0.0018580299907956614, 0.00391699996544048, 0.003521739908716303, -0.0018837103985292307, -0.001517447050322182, -0.002684591475620182, -0.004937719469043353, 0.011177304526261814, 0.0031013630055399116, 0.0021600854551334994, -0.00852057191977193]], "SLIP_CC12M": [[0.002687924493247092, 0.004876805850389326, 0.002972654580265622, 0.002801488550506871, -0.0017342898222109868, 0.01593920320738107, 0.004996207992503929, 0.002753419902133337, -0.0012789328095757155, 0.0010974015088074593, -0.004021516112102705, -0.005134435730393638, -0.007635563883179038, -0.006938273669220508, -0.010281071088022807, -0.010869703782108525, -0.004678469071884385, 0.004712951520394365, -0.006820945820601826, 3.3086499156937885e-05, 0.003857438918203119, 0.000142048070715238, 0.015172304828989912, -0.005507885092149736, -0.006527514863674614, 0.007108650508929386, -0.0002533817102878602, -0.00819477587091652, 0.00212246460035782, -0.010590442863758653, -0.014226945349946618, -0.008211426177612422, 0.00021989469479938772, 0.007179953538897364, -0.0020762915373779825, -0.007220011543143889, 0.007473036302888595, -0.012922150764180431, -0.011913723588473986, 0.003994107150819302, 0.0064560552180575395, -0.002042048922951588, 3.7121393357958388e-06, -0.008926562083863908, -0.0029800555626438435, -0.007611685855822128, -0.003993307277348571, 0.0018079512837258227, -2.2446736693382263e-05, 0.0007748834534802192, -0.005430084560595624, 0.0020789336413145065, 0.004947820647265127, 0.002904804924831049, 0.012315184145171026, 0.008891029077031735, -0.007493774369498335, 0.005913146263496441, -0.0017864707518707584, 0.007696650842262898, -0.006611312213036317, -0.013913943440208888, 0.011785698123276234, 0.009468604503622788, -0.0012021078093146648, 0.0005358653004143635, 0.0038663426160135093, -0.012530351348686963, -0.000494701898953117, -0.005174017101208764, -0.001310585175154054, 0.001887013902887702, 0.004603720920964737, -0.0016545434191357344, 0.005485811948098912, -0.0030421245182052107, -0.00417604257646334, 0.016895637580257077, 0.007662934841143644, -0.0014884225013454197, -0.0006749508479102092, -0.0022595853089032152, 0.002882968163414098, 0.013651870627654716, -0.0159536030524495, -0.0022691882808100125, 0.0007481535272249457, 0.007223272422958289, 0.0031928733455556958, -0.0008053984916345652, 0.001250625164671379, 0.005642955559530739, 0.010503377871249213, 0.013155072789893231, -0.0009350838610606097, 0.004032035535188202, -0.0020689705005762296, 0.003523656427701513, -0.004675854283215648, -0.006858693562786691, 0.006942642133005642, 0.0019469989294355547, -0.002835446471263739, -0.0012005398351572077, 0.009607565507229247, 0.0036261804211376748, 0.013002970927945254, 0.0006534421012144229, -0.0036952437049793917, -0.0044564568352970235, -0.0014227719406004653, 0.0009982421390966265, -0.005241618216545743, 0.0027855370532382656, 0.0038101980727250607, 0.0018139761523343623, -0.0038073190265673837, 0.006716844879768111, 0.01048057961981447, 0.0014513216685207372, -0.007573202866214244, -0.004824772219184193, 0.0028131875019012584, -0.0012758389573057434, -0.00028560416434298547, -0.004699369913644412, -0.0012474983337927917, 0.003504582691345022, 0.0012393029808828726, 0.0014178673816125174, 0.0003945471835322678, -0.010683051045899363, 0.0001582990993152962, -0.0031802200087854126, -0.0026826730093241413, -0.002202201290691104, 0.004172822513448242, 0.010558436915744098, 0.0032359330074210792, -0.002504450512457297, -0.009335790961896157, 0.011747472729025914, 0.0015068563119381329, -0.010482026084156876, -0.007122021750546992, 0.002521911043335087, 0.015577467874126429, -0.0037350656065510447, -0.006684421678073704, -0.014437759104690816, 0.0024087467357854953, -0.010456069481072272, 0.005655138795687395, -0.0028191858013583843, -0.0040765316384336475, -0.01338479518943297, 0.01913677986985104, -0.007151330598968673, -0.0052780504073862995, 0.009630067242224786, -0.00029050779465416426, 0.012350538177997807, -0.008495313348248601, 0.0037603802517299917, 0.007551055486229334, -0.009105199789205057, 0.0005382653795426122, -0.0003818303177302515, -0.011369178928858172, 0.004988705966256517, 0.0020544379587425464, -0.005454701296747027, 0.02013858264862475, 0.0019435220267703026, 0.0016843149886963948, -0.01380210281455551, -0.0024520586091305394, -0.007884903451089154, 0.006415920030452651, -0.004481800810687922, 0.0023209396114742264, -0.002154459322892679, 0.0003802464131943198, -0.004275695314969529, -0.0037704575661337003, -0.0014737750223668446, 0.0032186728521165567, 0.003473714195107197, -0.0023060706920329105, 0.0067822647344490325, -0.008682287278299387, 0.0068586905915501775, 0.013644938018511642, -0.0004870824208906416, 0.005989992747675969, 0.0003387453034520149, 0.012572381857105276, 0.00018183484842831943, -0.003692848898936063, 0.0033125933153893457, 0.005983303851363336, -0.00015270024265522097, -0.017453946158639155, -0.007741827560080725, 0.007675429097038104, 0.006499133728952569, -0.0028698041146113114, -9.500547523864228e-05, 0.0038365403306670487, -0.0030160492116754756, 0.009402067403160883, -0.00794710452266207, -0.013787854624255982, -0.0017385763666507882, -0.005470254013992169, -0.005190677533391863, 0.006243182631971484, 0.0014416032513095561, 0.012710922119863839, -0.003963845189322128, -0.00629084394313395, 0.0038701867742929608, 0.0045449338133700876, -0.0021923546472945336, 0.009321771366310051, 0.003335097571834922, 0.0067756847076287305, -0.009159355913818053, 0.0035804411428133863, -0.004275743426247074, -0.004357700704448772, -0.004030383338844827, -0.004477014839225871, -9.33954883790139e-05, -0.00042399333985733943, 0.0030888387171382203, 0.0002024348796112463, -0.0007019702712899381, -0.003593383134681393, 0.0010141038378192607, 0.0034695118030702507, -0.0008298600342558637, 0.016356034543026574, -0.004603644702001475, -0.0025392020232340475, 0.0014746121384880684, 0.008291655701627446, -0.006531662350012497, 0.005745431061685931, -0.01468394814186137, -0.014708419309251687, -0.010290816418339753, 0.01474976684337228, 0.009930134147659624, 0.014028423420809722, -0.0049173660280013645, 0.006372617610560901, 0.0005269240328661072, 0.005893451627343886, -0.009092337488916448, -0.003379251850260931, 0.005196278951850465, -0.004508086776530196, 4.273100586776879e-05, -0.008607039353095884, -0.006914829147386958, 0.005327092795844444, 0.006235476118904031, -0.00029575651172887227, -0.0013834799385883598, -0.004526251588355415, -0.0007870651630086795, -0.01347578507953916, 0.007266398667442525, -0.002339414280351601, 0.014957838368983088, 0.00842223548203368, 0.00573117097585716, -0.002255281184096184, -0.00067855762741105, 0.007628962879111483, -0.008746067892802372, -0.003409763073167679, 0.010638246460902417, 0.007930704095170684, -0.0031220960716547633, -0.009982386233539066, -0.01379671636757187, 0.00887690302757123, -0.0008555566548073493, 0.008104079871290278, -0.0016167241357669046, 0.010596776116554709, 0.006385751682418315, 0.00449744277549061, -0.0078056110624774265, -0.011627612093103711, 0.00026214129767057615, 0.009479676521467893, -0.00521967724621804, 0.000984659974743736, 0.01199035689635573, -0.0014007876478982252, 0.0021258348768407598, -0.0015650034236552313, -0.005616268576969477, -0.002679141770138149, 0.0021393555639819643, 0.010696927507524379, 0.012516937253001917, -0.0032782495995475475, -8.056477368385958e-05, 0.002012573500079183, 0.0010444006018753332, -0.01365202191201123, -0.004302226602290335, -0.011467034505172207, 0.003268421701663596, -0.01525570207211951, -0.0019464655064935395, -0.008146648528054357, -0.011925229527564214, -0.0007144132978282869, 0.021128004853380844, 0.011493116757430304, -0.0003165171312337553, -0.005155001692897218, 0.004954631186344399, 0.00378784734427675, -0.0012494779907270149, 0.0018209489909085368, 0.011102901518990453, 0.003021293198054824, -0.0026933169422343126, 0.0019774751907045175, 0.00475859448356046, -0.0005362549206686454, -0.005472047548788727, -0.00409078890648247, -0.0009096669541163865, -0.00879010753917762, -0.011350453782969536, 0.00020079436944797635, -0.004049267922792668, 0.007458347382701255, 0.003545261353958107, -0.0010002316399054106, -0.009275502398271449, -0.010402478171851144, -0.005964259003204378, -0.004543997109232638, 0.010538636198775334, -0.002921657986007631, 0.0008003227756655014, -0.003200907239013097, -0.004386108622632244, 0.0003213458271189157, -0.014170478913001716, -0.0015961389448917035, 0.004697516272162002, -0.0014930217823182976, -0.009607052642174735, -0.004770302328820848, -0.002624954044056887, -0.007143411425534974, -0.004107865774792364, -0.0005756976844912207, 0.005650796681452033, 0.0017985985614359379, 0.0012022890917829862, 0.0023524147849953315, 0.0012132890070378488, -0.0016460449458629064, -0.0016894030162471936, -0.008418956654581547, 0.002539075756265611, 0.006485465870024531, -0.005280647998337041, -0.004357609628972237, 0.0015492073090916311, 0.00039039215136488746, -0.008735862788109283, 0.015211982694877819, 0.0010176053037866959, 0.010145209445247681, 0.011003140839668711, 0.010058267546727704, -0.010461424445648763, 0.0008350713813508048, -0.006508722800803793, 0.000913583276666366, 0.015139271970838308, 0.0022205583730035214, -0.009128176306892947, 0.00792806565401737, 0.0031910163816064596, 0.0013382556591585108, 0.0027212277173847797, 0.003887735588002463, 0.0017334521028467198, -0.00012678128074516265, -0.01074049414521803, -0.0018967118918557097, -0.006217717224816706, 0.008333882430716501, 0.005737006062355991, 0.012357022999574176, -0.003884305178706365, 0.0011766030537811202, -0.004878555519760332, -0.011199899614439346, 0.006193573914722285, -0.0003154770026660772, -0.011041120461992578, -0.0006099473685026169, -0.01641919382911345, 0.010799126786878332, 0.0014365568905222136, -0.012102356127632611, -0.0030167471691542732, 0.003616044006776063, 0.00931762199086899, -0.0143214417290768, 0.013618467740756883, 0.005487161277084273, -0.001843875549225646, -0.0006119411290538591, -0.01689343782808547, -0.001804742067840627, -0.005436537607403642, -0.011005553475115448, -0.008425687797336486, 0.00710505632344972, 0.008302304491570052, 0.0018385409546846712, -0.009629884449003093, -0.0068591881003654135, 0.001644840945532038, -0.0039197260577400975, 0.013619534226811746, -0.005780869565734807, -0.007605042393234646, 0.002299740717996261, -0.003517438657581806, 0.010346150819466195, -0.012821932519066404, 0.006651050592402251, -0.005478512524859978, -0.002540550342845646, -0.0011489487157880576, 0.0007876272059299735, 0.008004667999392206, -0.007036629352528094, 0.005014254484029316, -0.00478039856269871, -0.0077709568325768814, 0.010205917729763316, -0.003338711950081315, 0.005542666624850509, 0.006997869080144232, 0.002211887106320566, -0.006698461688673971, 0.0005383289482613907, 0.004919161027911204, 0.0008574914754717611, -0.003291407449234446, 0.0033052699767391787, -0.004348494366488672, -0.010451875214295631, -0.004111953190824184, -0.0003469237549738463, 0.004439837225204836, -0.012465246836654838, 0.002979395715308121, -0.007270466906695881, -0.009318845177238638, -0.005102908508640459, 0.015003807775263507, 0.0046437553299421615, -0.006706703824999171, 0.0008074456233192542, 0.006064045168882745, -0.0031648724424568064, -0.0018403886259131287, 0.00019891299730674834, -0.004084909282937588, -0.014985348944636906, -0.0005089720785194504, 0.004517152839980554, -0.007481644125866958, -0.002567003800901479, -0.00784468995830552, 0.004096751799806956, 0.0008458031860010867, -0.008152136176993901, 0.009106494285250928, 0.007193142810137942, -0.003706344771754546, -0.00297694030450657, 0.013017911014189434, -0.0014457738990048801, -0.003821386142755564, 0.0018069111022420911, -0.004210050133141605, -0.002027375089131634, -0.0013587012230841938, -0.009432321017481048, -0.005159391936930744, -0.008973159488629208, -0.004068287576294759, -0.0024611806438770145, -0.004958204036070543]], "SIMCLR_VITS16": [[0.0009997968815944405, -0.0013378029490757565, -0.001371181002468802, 7.989415528506481e-06, -0.0006404925132466634, 0.0011585739610547353, 0.00040162510810081223, 0.000721055633303793, 0.0008115757002749233, 0.00038375576034675035, 0.0010401014773048123, -0.00038558465232860955, 0.0009416401470926684, -0.00011939038152129072, -0.0003974662084312347, -8.005302416594622e-05, 0.0004400134494062513, -0.00048140178180553633, 0.0007341924038800334, -0.0008217721307036381, 0.0015660498293899854, 0.0009099862443029197, -0.00021448816088113012, 0.0015469403852793311, -0.0014399936507371348, -0.0004008875487009141, 0.000900236291189768, -0.0013914769515395164, 4.423344679790634e-05, -0.0004413254051045916, -0.0019711591726676984, -0.0004371825115495908, -0.0011335292570451693, -1.0641461068931768e-05, 0.000215774882897015, 0.0007918765768408775, -0.0018703100269538645, 0.00040919634457995107, -0.00024389230020460673, 0.000514059945999179, -0.00019261907701464964, -0.0010961067270148887, 0.0012337676873192486, -0.00020099347668954028, -9.13784573309713e-05, 0.0003428335529117083, 0.0030728148531951865, -0.001027569693343883, -0.0010759601528579042, -0.001210310813886199, -0.0007243030147285699, -0.0009484586414394225, -0.000852313273670996, 0.00039732666284015335, 0.00016576011495834063, -0.0002490190540398044, 0.0018230528115633535, 0.0002128382670476144, 0.000929919184024832, 0.0004327157935635588, -0.0010167458723034629, -2.074342575559239e-05, 0.000941998554811686, -0.000560728587019681, 0.0007765612654938277, 0.0004501168997111636, 0.0006221035410734731, -0.0013222336651365781, 0.001399326053532688, -0.0002140444280071688, 0.0025370536816560416, 0.0006718894675776192, 0.0013499182902953835, 0.0005499859332551496, -0.000475228143014564, 0.0005409548572391613, 5.6871844869668155e-05, 0.0007869551931931219, -0.0010102470220193607, 3.254221122584843e-05, -0.0002531411552230235, 0.0011175708972256289, 0.00029382222948532376, -0.00011436304670165874, 0.0004264018815857435, -0.0003057374573968846, -0.0014050597938793635, -0.0006457105681130833, 0.0012387470904451964, -0.0011635744032735768, -0.000695331508971074, -0.000900138776346053, -0.0005076781418955018, 0.0010967851161364124, 0.0003880628567210151, 0.0001110360687810244, 0.0018232029998960734, 0.0006946211069589481, -0.0010529545305127432, 0.00026439884624613295, 0.0010037241260182437, -0.0006566422314129104, -0.0006441950655161318, 0.0015049712493981299, 0.000542995709689752, -0.0017191224191761157, 0.00035813252642666066, -0.0010643872017019685, 0.00028772191118067985, -1.3840244057726492e-05, 0.0009994171855809823, 0.0014274353373118429, -0.0005674126441590488, 0.001378368247639039, -0.0014783348464830343, 0.0007610334834515181, 0.001169601921653587, 0.004209498827218671, -0.0031631519086658955, 0.001705104501028969, -0.00010900050524882817, -3.57231289275315e-05, 0.0013657653841867368, 0.002223542965525252, -8.271810260008713e-05, 0.0008315332042085092, 0.0007566503349649297, -0.0014597109667110171, -0.001709224760733461, 0.0019983091344990744, -0.0005113951734859821, -0.0006246438265820452, -0.0014341248831690537, -0.0012311946358584628, -0.0018868100937238941, 0.0007587756110958507, -0.0005443115422332813, -0.00023336016403680687, -0.0006855854510583667, -0.00014044564555991748, -0.00025054460208841917, -0.0012078815152149632, -0.0008286084749587726, -0.0014816151656718412, 8.113102111647827e-05, -0.0008299879528666752, -0.0012536159999647434, 0.0019253018492070787, -0.0040085166692733765, 0.0014879056444359858, -0.0009402219028825957, -0.0004336175334174186, 0.0004575544682500713, 0.00126280057751997, -0.0009036073249510737, -0.0006026784222657715, -0.0017914367755028325, 0.0005342320920052844, -0.0019052543760525707, -0.001619014952501113, -0.0011843961227152083, 0.0004431153938639909, -0.0001604104710912161, -9.2305748363615e-06, -0.0008162552770624064, -0.0005773423578251495, 0.0002115724756467062, -0.0012047827423719518, -0.0005714495028686626, 0.00028341811643754593, -0.0014783439057117157, 0.0014602628229609272, -2.4557798248927166e-05, -0.0009982707492988334, 0.0010812521914803338, 0.00036702088784130137, 1.3615719085051728e-05, -0.0010144045412413434, 0.0007670689215460297, -0.0002584921788762915, 0.00031928255074572913, 0.0010193391935899854, 0.0010021882692605932, 0.0004202228645391933, 0.001095597051806345, -0.0006951121514165689, 0.0007110867987979545, 0.00022797415625642678, -0.001059226522391491, 0.0008468546134694902, -0.0008535993005022069, -0.0001363702633005396, 0.0015278227722526263, 0.001097809840840373, 0.0008093664929757241, -0.0010826854982455684, -0.002305664529558271, 2.3762108123099104e-05, 9.017662060531624e-05, 0.0015649849030771965, 7.283964436572386e-05, -0.0006125519131191214, 0.001797452329562723, 0.0008785542747566731, 0.00031822851989008177, 0.00046726994597437715, -0.0014411992770791667, 0.0012783597234043882, -0.0006359227382662629, -0.0002727483482555149, 0.0001860550148028944, -0.00012959874406574682, 0.0008645638908174914, 0.0005716782444241363, 0.0011761740421537652, -0.00036646470173516167, -0.0007759999544677241, 0.0008021972396157206, -0.0018006948203864448, 2.0441768521613918e-05, -0.0010599310791638509, -0.0001409102485261174, -0.00020771650021990992, -0.0005154983902519381, 0.000293145379559559, 0.0006271671223988624, 0.00024856794301409855, 0.0015445242990443316, -7.252568717707256e-05, -0.00023169719762253498, 0.00237725610548461, -0.000708435746756466, 5.105944431058832e-05, 0.001146394576856188, 0.001577061579816721, -0.0009812782879056276, -0.00028489167346957764, 0.0002704117240765226, 0.00016121871092102807, 0.0006539457416775722, 0.0007750419476492843, 0.001058099746428938, -0.0009169836484943517, -0.0013175535634879706, -0.0007286144695668045, -0.0005280185459097001, -0.00012549002183897596, 0.0004861577075313435, -0.0005987002545514951, 0.00036193905428014844, 0.0017340494351546186, 0.00039947695702060356, -0.0017782032002948902, -0.0006609174987798651, -0.0005046360364014454, 0.0011418281680707053, -0.00081797334926457, 0.0012943470673318106, -4.649332351453427e-05, -0.00022833248261700662, -0.001671685588503764, -1.3580847404558866e-05, -0.0016049337722175887, 0.0015825991153674709, 0.00232792541249761, -0.0012076395960320951, -0.0011260733431713147, 0.0008045936106513677, 0.000841518209860872, -0.00035815702656029976, -0.0012059461071409969, -0.0013992561964021833, 0.0008520634503590627, 0.00021762652216817855, 0.0011073219697705517, 0.000759254560927564, -0.0008899134180947758, -0.00032985357128464607, 0.00033569865296488935, -0.00024641415736616733, 5.307105708528617e-05, 0.0007437835447490215, -0.0005182740066877814, 0.0001234982125672768, 0.002532749524107203, -0.0007114799439229755, -0.0012352894621223886, 0.0004102690912656144, -0.0016435792521488947, 0.0005884071751180199, -0.00215634151854002, -0.0012206461503658584, 0.0014393757000189826, -0.0019560521490017313, -0.0002578546779907556, 0.00031674966554750064, 0.0005152956185735425, 0.00030307883174497295, 0.0015421324801123274, -0.0006505997311747206, -0.0010288718556032768, -0.0010644640305227685, -0.00043478190822166993, 0.0008043048702265055, 2.780128720174073e-05, 0.00036238128218842123, -0.0009237388863270594, -0.0026730741503177505, -0.0011424019334795466, 0.00044630333881782915, -0.000667583414311097, -0.00032102409221062504, 0.0003123273623218256, 0.002541386607018383, -0.001231872134005905, 0.0015026101014386358, 0.000645822990918532, 0.0004646362027746027, -0.000491927240297875, 6.391759118493795e-05, 0.00047162443992089173, 0.000983812607790407, 0.0009260975917145106, 0.0006553547811398112, 0.0016515003623102202, -0.0004854167980903913, 0.0011314190077510757, -0.00035924352943600933, 0.0019621002667752864, -0.00075982426625904, 0.0018389580496163526, -0.0014557658194627784, 0.0008257220139388337, -0.0004964179735741875, -0.0007549107117070392, -0.0009748696942221032, -0.0010521111173809258, -0.001871191684833979, -0.002064111965327438, -0.002205589100908996, 0.0005571895638819442, 0.00035288807967762386, 0.00016573217528110043, -6.64916905489827e-05, 0.001238809332955333, 8.445859897289118e-05, 7.716159928928754e-05, -0.0006050906001126518, -0.0006565009587740697, 0.0010604563523718916, -0.0004099850550780748, 0.0009176784766499278, 0.0004873138214779002, 0.00023624622884777912, -0.00029699017655234036, -0.0004706993296911769, -0.0008495502459647305, -0.0005334617929871784, 0.0008089605200273745, -9.257418357513231e-05, -0.00016992566683753096, 0.0003404348496009002, -0.0016896593945354898, -0.0009615976966663511, 0.00036711952733722505, -0.001759307769878598, 0.0007491102018816927, 3.476015196859179e-05, -0.0011357610875909977, -0.0008323512271421023, -0.00037884478330273575, -0.0007780214331102216, 0.00013569309455554318, -0.0005373218869367102, 0.0010721175346010232, 0.002445278996178373, 0.0008780928381549365, 0.000987155712209642, 0.001300031024253588, 0.0011710319734199648, -4.9662180985747344e-05, 0.0011476857434900012, -0.00041749670741740954, -0.000592953742439435]], "CLIP_VITS16": [[0.0050376033045309195, -0.0018666057995605206, -0.0002652100202712171, -0.002166044348004194, -0.003695002968677065, -0.0013173817000775162, -0.002063581127334721, 0.003825109944128515, 0.002030066071628509, 0.003427289193496108, 0.013648025585677136, 0.0018486443600109342, -0.0014525869522582363, 0.0037550978701222995, -0.002930654204895043, 0.001063443509337958, 0.002061573195863864, 0.00624474434351379, -0.0012876902474090457, 0.0011822830208323282, -0.0005344117737629203, -0.003850116013464605, -0.004487275976730001, 0.0010005841349166901, -0.010529033993159173, 0.0074866244130217564, 0.005401871140665291, -0.00046253797005522956, -0.009092354226264764, 0.001616855162534521, -0.004769711247221989, -0.008077319965443829, 0.005948697174475952, 0.004793704953044653, 0.0006279073978393279, -0.0027088680447129513, -0.005433437585121614, -0.009594437570988455, -0.0020859702913598593, 0.0059391691942106695, 0.0030065160945841034, 0.0035613652488047445, -0.007836930771273645, 0.00021630015808940528, 0.004027070961786774, -0.00656432706852105, 0.006588630203623324, 0.006431176094338298, -0.006234837949953297, 0.007637538312172346, -0.011661688264377353, -0.00589297055690126, -0.003858849945986136, -0.0034867948005822616, -0.002627677035475659, -0.004051227864031468, -0.004538798482495953, -0.0016076197789516283, -0.0012322572997205024, -0.00895130363377658, 0.008309180026778697, -0.0015277004104890775, -0.0017058962760281501, 0.0021268073681064625, -0.0016169180585579438, 0.0007772719995541993, 0.003222925322585401, -0.007059350562154908, 0.001322180879386986, -0.0009031487014991308, -0.0029175812378525734, 0.003596825355833229, -0.0018078807148743728, 0.0036411646436714695, 0.0022138759324496493, 0.0010441953993656355, -0.005596395137465814, -0.003586817968012343, -0.0018204202060587704, 0.003215330081399192, -0.005043791353025219, -0.004060264189981601, 0.0029781224432306116, -0.004815821544814917, 0.0008467008063400353, -0.0019350606893236873, -0.0010115971831096832, 0.003026833712779493, -0.0009189641780473976, -0.002870829098603936, -0.005316533889113503, 0.0037459458055143988, -0.009073232771532441, 0.004224714278031817, 0.0031793145780366974, 0.004177391867746003, 0.00501415082676844, 0.0028060198846188433, 0.00041807777332988905, 0.007445511238818814, -0.0022665511959613386, -0.005111127438298849, -0.0017744547645138047, 0.004895645421294663, -0.00018727123229340947, -0.0009902058677239839, -0.0008541934022849237, 0.00019100713755258042, 0.0077438608806749635, -0.0018339971819924267, -8.49781499709934e-05, -0.004294871998188846, 0.002854163454189388, -0.0043637900565623895, -0.002333548226901753, 0.001464622243392194, -0.0005990872556470676, -0.0005634489736456254, 0.0020528275662482793, -0.0048450259313209555, -0.002311361276290634, 0.002484946554018694, 0.002975001237990167, -0.004255985020956192, -0.0028744984424106824, -0.005129128978958099, 0.00933459350331263, -0.002769399116831748, 0.002280862642113461, 0.001507739959792656, 0.004004224965518173, -0.0017783175836401897, 0.001353534737559543, 0.00023569691322997892, 0.0003514898761006243, -0.00915829071626914, -0.006044205452781171, -0.0019214321351186774, 0.0018419302439063104, -0.005864437119188638, -0.0006018253889950725, -0.0015349841824817377, -0.003789090666316497, -0.004961827408888807, 0.006413285503268444, -0.0006367708768018274, -0.004585321378809487, 0.002806094025304033, 0.0030293364649299857, 0.0002508520794270389, -0.0044639956375414624, -0.00560156763954596, -0.0017189672211812153, 0.0033994794516316214, 0.0002934192201461301, -0.0013020913657700557, 0.0018487005330495195, 0.0015608512542464592, -0.0031954476779157415, -0.0012195715469054194, -0.0004827248895625507, -0.001692562395791436, 0.004291758152910254, -0.006203895858065647, -0.005959756333719601, -0.0020581109618598784, 0.0005672486159627697, 0.0014990893277254946, 0.0015134547475926493, -0.004290175171759489, 0.005279156532858244, 0.002965233796699482, 0.007110639615513555, 0.005097372288053688, -0.002723897405138072, 0.003210051323879852, -0.006673753176900473, -0.011107968166470528, 0.005905946512939408, 0.002449700974631757, -0.0023394395406781295, -0.0012463963860434215, -0.0015820910286327636, -0.0009742380193942662, 0.0016923487578010717, -0.003396316092800014, -0.009082576937296166, -0.009200844585641542, 0.004301157864657311, 0.005836645472465374, -0.004667718968862158, 0.00786971865851559, 0.002666830593212082, -0.0036217933785255008, -0.0005151990176686522, 0.0009933634957467966, 0.007458314728203484, 0.00021551644683561605, -0.00234906222381555, -0.003687908103694843, 0.006672986340576739, -0.0010025702464521308, 0.002930101241376675, 0.0037988894509908278, 0.00029279846190051473, 0.005511942637068303, -0.012181559482335368, 0.0009361624992875878, -0.007400158618111163, 0.0036902060594663708, -0.00014170668807558036, 0.000918598125942735, -0.0001405605792321879, 0.0018704579878513778, 2.112273465504355e-05, -0.000344915685921229, 0.001322772392913149, 0.003416739682672247, 0.0011080608234227502, 0.0032989213042045815, 0.00016472217711535272, -0.001200521659815091, 0.0005656456031085146, 0.0023962684155611133, 0.0008068415078345131, 0.005815461150963194, -0.005287345985627988, 0.007228078659285202, -0.0007737538015300527, 0.0060219800480726116, 0.0007633914779448352, -0.001022656030148606, -0.005862516501854936, 0.0037763521593826063, 0.0037331186996942267, 0.0008808493548713159, -0.0013404319681946872, 0.0016893337650055254, -0.005247033444571902, -0.00036956548203968126, 0.005916943759736816, -0.002931539530188522, 0.0023438315732743215, 0.0013182615353302535, -0.0018702653522433884, 0.0033425358811986043, 0.007243440306576138, 0.008240177560330929, -0.002920433419190391, -0.001039247917519373, 0.0020109396957030366, 0.0012892033026384356, -0.0034884973892158923, 0.003768952605737879, 0.0038690663588402605, -0.003950959568927912, -0.005203236381269314, 0.0003253633198751632, 0.006111903613517905, 0.006348691203377464, -0.007080741814041341, 0.0029746793972497687, -0.0010818204715509344, 0.007871600674909792, -0.002826602563304319, 0.006705919312397866, -0.0058515849238822484, -0.009970519024963407, 0.0035040522806494626, -0.005135307289575312, 0.010022368869447911, 0.0013068008437668033, -0.0001425983156712468, 0.0023771945409614345, -0.0009025721387429658, -0.0019818111746148642, -0.0020462564584291174, 0.008059953524604101, 0.0044876798161898115, -0.0002543565589638256, -0.002098055228336969, -0.0019278308609500527, 0.004343318006828088, 0.0022395660635083914, 0.0009650184180248836, -0.0017608991990776053, -0.0024038788926025664, -0.005639943347143177, 0.0015992020256486612, -0.0018365849232809053, 0.0011622677259517586, 0.007694722679761155, -0.0009321059015664213, 0.006933608325239634, -0.004829598060248165, 0.009256250916884961, -0.00011500350559469005, -3.593510270796102e-05, -0.004342937334017319, -0.005214004032164998, -0.011682328145649411, 0.003480944893619215, 0.00575236799407073, 0.001621912741525608, -0.00015479980819774024, -0.002176114565041975, 0.003297351480630987, 0.0036495405947789554, 0.0017159514503542958, -0.0008840489952655697, -0.006104708227212541, 0.004994119856167922, 0.0021650722853585403, 0.003969313830814579, 0.004784016233398606, 0.0038532166614789823, -0.0054450294754298575, -0.0024698728547346872, -0.004184776038693435, 0.0031177034516903443, 0.0005978622066322714, -0.0003955992023375876, 0.004398844691670754, 0.0009400716305456372, -0.0031270042421634903, 0.00265930537187325, 0.001267643440356056, -0.00255497609032318, 0.005214970057176575, 0.007319217558357525, 0.0008413660001348397, 0.0019762501205233055, 0.00503073778120531, 0.002126724914308979, -0.0011556608184367725, 0.000820245408580049, -0.0044336258222094985, 0.006426851349798118, 0.0004213257396424308, -0.0040710183470351186, -0.009716429332250053, -0.004587029958863488, -0.004158451363433745, -0.0016364724142476916, 0.005788980792038439, 0.004493819422681226, -0.005609160749538038, -0.0014567976607147357, -0.008484773586546493, -0.002476796867664565, 0.0005666385179872368, -0.003417678304355253, -0.004680326695465319, -0.005615704643952831, -0.0036100487817417454, 0.009531367485496128, 0.005702692745465107, 0.007254190727094697, -0.004537780345840875, 3.610451875084991e-05, -0.004752719981214876, -0.00016452500130981207, 0.002224607223814179, -0.006896165112266317, -0.0010903432637199076, -0.0029578871749849425, -0.004937845620919357, 0.0009180155625058833, 0.0027031755201857195, -0.006494891649874098, 0.0014132284241813176, 0.0025252287133215867, -0.002167937171179803, 0.0033808705550406803, 0.006124200606295337, 0.0029632833532311706, 0.002843199821654707, 0.0030397799882021827, -0.0034146865681660447, 0.009202150671626441, -0.00040708772245455493, 0.00693307525943964, 0.006010008343516595, 0.0036201226546175103, 0.003522588471903213, -0.0012857265623593284, -0.003995567933254113, 0.0011659678500357332, 8.255136146377573e-06, -0.001313522271547382, -0.0061774744747460555, -0.0034391277321529704, 0.005606958642601967, 0.0012163754621393602, -0.0031503321295696714, -0.00844742611727932, 0.0007551150126594366, 0.00995380576139062, 0.0018181072479240938, 3.325668248260749e-06, -0.008745105729345101, 0.00028579485264014146, 0.005027557776140218, 0.0005373238759189443, -0.006544311786208047, -0.0018359882524237037, -0.0006458910740382816, -0.004006290961776609, 0.007042333346114232, 0.0026842676769857354, -0.0003180279110727661, -0.00033561324975876685, -0.0037813500755212517, 0.003461566986516118, -0.003810402662069959, 0.006934175913391466, -0.00443218310829252, 0.0032294117845594883, 0.00020183960441499949, -0.0007961567978120657, -0.0026680165584283795, -0.005285309648818591, -0.004240393354187041, -0.0025026248132979344, 0.003974232314662499, -0.0026394875392063803, -0.001862253644503653, 0.0018502458746793744, 0.0070572761310772475, -0.005784203954548999, -0.004104596131417729, 0.003890541187667457, -0.0014516417021778506, 0.006359794022335502, 0.003704903257047673, -0.0013393070178360426, 0.0028102771717716385, -0.005336044313894076, -0.002498873186678711, -0.00333137330546213, 0.0010404312475161132, -0.004749335517937485, 0.008074174296449535, 0.007627825582114219, -0.0009009011767127295, -0.0016116680873727307, -0.00154032703854186, 0.002401247067609802, 0.002063152189789849, -0.0013283942931924357, 0.0038870648396286123, 0.0007580962688238779, -0.0018385239792141038, -0.0018695860820695416, -0.0017408131971023977, 0.008176374337463958, 0.0025574511964805424, -0.0009733275722034959, 0.0033706144048747735, 0.001973745418416167, -0.010371546462093564, -0.003365142905915327, 0.002076492038957607, -0.0003472416428849101, 0.001040621615671129, 0.00021570510580204427, -0.00486865433843129, -0.0037275193132121458, -0.000461849743839015, -0.0022745074119567034, -0.00016746634024788, -0.00044110506132710725, -0.002843570249917153, -0.0020710840472020213, -0.0016499279162499906, 0.01479945572282304, 0.0015130274167115057, -0.007093348307535052, -0.0004991693223763104, 0.004044154193913777, 0.005093688804084775, 0.0018416091122410577, -0.0005535179622132656, 0.00033717023870849516, 0.004955564258456103, 0.009977441619742997, -0.002358233259821478, 0.005383869252082979, 0.004740849602967501, -0.002960308370265091, -0.004262402595486492, 0.0035199620020152497, -0.0005514846945350732, 0.0022440465664575714, 0.004378366580402311, 0.004275458568537777, 0.0015185445134358634, 0.0015912412147207032, 0.0011353235948428683, 0.0057437418379942574, 0.00450756470970439, -0.005136426410569005, 0.0016679688573772583, 0.007072646498934111, -0.0016316679221662633, 0.0018381631022996517, 0.007943458008495245, 0.0008197969774218217, 0.008255664058114329, -0.005967011638197371, 0.010805475276852532, -0.0031445705700951475]], "CLIP_VITB16": [[-0.0029367713088339024, -0.006305092003789141, 0.005407684651965443, -0.009205262938683685, 0.009042896999910061, -0.009586423512287598, 0.003718444140924315, 0.00188773279263511, -0.012421590889888728, -0.0018870857298183656, -0.0026561388407241246, -0.004479267184664918, 0.005998296620832247, 0.0014437833081253557, -0.005090975557157602, -0.005119784096181815, -0.00043290736026723245, 0.006398856908411042, -0.0026352215050296363, 1.788461072878278e-05, 0.004600284113125366, 0.004212452695025026, 0.0059692426796325235, 0.013454914474013174, 0.003263089356054974, 0.0009549195317297508, -0.0026453064585273967, 0.007626222118481317, 0.00475553850728002, 0.0022683002743261486, 0.0021528315264731646, -0.006548179707765072, -0.004743503189026589, -0.009897514432933269, 0.003699776123870499, -0.0019027188549940038, -0.005407406428606591, -0.004135614266322755, 0.0035289656661916524, -0.0024356203827086264, 0.0026701123570092022, -0.0014779679900543269, 0.0013714127708226442, 0.0009810799694440157, -0.007143090754239398, 0.002787246908569199, -0.008192820500963455, -0.013226387175646698, 0.002762567288961938, -0.0017655642381710509, -0.0053352955675853245, 0.0023837073213971143, 0.001090542836622757, -0.001921908689175987, -0.0047126202923457395, 0.006448279042987535, 0.0012931352989240183, -0.00036747214934703537, -0.006276361115107487, 4.3051137419586674e-05, 6.030007815834709e-05, 0.003715371850624004, 0.006425755441093563, 0.0019922548778016427, -0.0031443645870736364, 0.009980157619627957, 0.005789614708522673, 0.001637189395048394, 0.012104540801374238, 0.0014927197268910022, -0.005401374031366271, -0.0007782298542389765, -0.008389268959449095, -0.001530474776783114, 0.01408628025621345, -0.004429464696758343, -0.002581291281702841, 0.010704250033913095, 0.0008561731136234639, 0.00589107735273005, -0.0004329511959275077, -0.005335921040651476, -0.00048315885942429304, -0.0002782900525992518, -0.00043252991798164303, -0.002087177846326751, 0.00456082892461299, 0.0017931206602952443, -0.0005920671550980333, -0.010221473026004707, -0.009613826635441827, -0.0005754009312526759, -0.004116552246903833, -0.0016763542186130215, -0.00028461237459189576, -0.004724822388115255, -0.0007373933172361395, -0.0009805801726708308, 0.001039057205409994, 0.002699577080255207, -0.001765297974502162, -0.003341726313175801, 0.0027930009051818742, -0.005453763053413822, -0.006180657486600632, 0.009246328927640046, -0.0053749842030480395, 0.003216380848739804, -0.0026325310252352865, 0.0030563051219690933, 0.0007753040302883457, 0.002753902079844424, 0.012802903106520797, -0.008685462785334407, 0.0015415266494859248, 0.007311616833745079, -0.0016094857789787712, 0.00874856758375906, -0.003810879717837617, -0.007089976541465148, -0.002371540256056257, 0.004681678139604626, -0.004417928099759262, 0.008612964097913142, -0.00330379321663217, 0.002443058111980048, -0.0039922168944031, 0.0007892002944241867, 0.0009265296499837566, 0.009341858454387293, 0.0047619262437695944, -0.005986492112490603, 0.0013184098061174154, -0.002045243301174858, 0.001738073793769051, 0.0027014398735693912, -0.0002551171220891938, 0.0034522556974975957, 0.011353367611511865, -0.007598871217024596, 0.007057119399012827, -0.0003396808011033991, 0.01154216194779358, 0.0055912729562392505, 0.0032549967185001513, -0.002950199977600612, 0.003085733571259134, 0.008155220653861761, -0.0007433611687950115, -0.00922362257022707, -0.0028438623567953155, 0.0030648161072432158, -0.005787961015647103, -8.199078729376197e-05, -0.0025529763595179902, 0.0018967782644639646, 0.006400764612904328, -0.0015333469597284093, 0.0025932679405245426, 0.00789865891618485, -0.0032058534614572472, 0.005525934128937399, 0.006452709026317198, -0.0072930956693281505, 0.0009419953619892035, 0.000337217774358578, -0.00581726575249129, -0.00349593778479506, 0.0006032637041822786, -0.0032368148042058406, 0.003339161165058613, 0.006867832270059311, -0.000453215092420578, -0.0031227194386619014, -0.005480783550989476, 0.00021546646894421428, -0.004449981043845495, -0.00897333375707438, -0.002315800975669514, -0.005486809225244957, 0.0018571517800658292, 0.0024421637115830744, -0.0009521044981242593, -0.005399608550677924, 0.008269902030323545, 0.007970054811184207, -0.0007597806186161252, 0.0005323507145724507, 0.005588059332115914, 0.00528965769758956, 0.004010047504297377, -0.010239455598242457, 0.009324534671825611, -0.005551905421518975, -0.0001803428379141478, 0.0009770242765873918, 0.0008038510700730112, -0.002925020600245757, 0.0054072512059726505, 0.008256308993705632, 0.002621044128897085, -0.0017566377593373726, -0.0006826508332861431, -0.0010604992818447172, 0.003763016461479394, -0.0033872679678924288, -0.009832510169045156, -9.589574553749147e-06, 0.006111304191025818, 0.002406321746424179, 0.012597588932046419, 0.0013336588771463457, 0.0007719090631739672, 0.008154998025433582, 0.003994393892670897, 0.0032056458823552167, -0.0043249980292537, -0.004845106042921543, 0.001108852574940436, 0.002185607164971192, 0.0061285479698033815, 0.005820401515600018, 0.0018459264538250864, 0.002677387371394696, -0.005713039702227848, 0.0024800428443334313, -0.005551663608374922, -0.0026016658015247563, -0.001600340119859378, -0.0017238684548911724, 0.0004765685933472777, 0.003786451548380268, -0.003933748517407697, -0.006419975401844236, -0.0022689015075395037, -0.0010644931313766965, -0.00027396065839142836, 0.001236294973668092, 0.007437778507168827, -0.004549960214221344, 0.0067506277039435444, -0.003985738243086829, -0.006718660053924061, -0.0028834228446199123, 0.007887807346626438, -0.0006032890841280204, -0.0064620728477496996, 0.00402901312653822, -0.00938803671240087, -0.0036100020039487937, -0.004825640808452256, 0.006122683487112887, -0.003197852489062243, 0.004791087608530437, -0.010595489970662383, -0.010990800687895071, -0.006899059998845172, -0.001352204372365537, -0.005604094963266769, -0.0007366709141933825, 0.0010974273212592742, -0.00429367666683075, -0.0011952824901196768, 0.00012390364347745694, -0.004451466528487138, -0.003157198429107666, -0.0027318683992648, -0.0024091269164769474, -0.0019378336014183768, 0.006346150965493343, -0.0043317991128953345, 0.0008172623248273413, -0.003334117206660183, -0.002557624274314465, 0.0024871435333890003, -0.002872966228592717, -0.003096355318451642, -0.001703184563666582, -0.004983306837278757, 0.0015644506016873165, 0.0012822714210911218, 0.0008276216262443487, -0.0013286727573193439, 0.0021734926849603653, -0.0065085903042927384, -0.0027468220556660194, -0.0016609432958913095, -0.005271101116456768, -0.00014704209752380848, -0.001967166788579727, -0.0034200955732640887, -1.5814164230090744e-05, -0.005439317066868003, 0.008556047666140577, -0.0019036716813306265, -0.00034180836916096816, -0.0016264835563064989, -0.004994360344880988, -0.006464508176246785, 0.0016288210383870391, 0.0036339802582832925, 0.0051168935817920355, 0.0008103626526214797, -0.001735780938443815, 0.008469250501630915, -0.004611238011751666, 0.0019143380605700297, -0.004259621216492218, -0.0002627506407655092, 0.0031954246905198406, -0.0031788456147875295, -0.0030721216674216845, -0.007683606319584545, 0.006354586750438269, -0.0025065158578482533, 0.002627556402744216, 0.0035075339890847154, 0.007279863983223384, 0.0034869690002365533, -0.010645666106773373, -0.006630203845402735, 0.004873234482312742, 0.005222821174274114, -0.005218697304371744, -0.0031915092708500632, 0.0024402180358513506, 0.006259301354558294, 0.0017003824600992194, 0.003136143913831227, 0.004794950765658127, 0.005938903915441857, -0.009845559182312256, 0.004298185752387244, -5.029165715148519e-05, 0.006173205182924656, 0.0037763393801552338, -0.00549325001669455, -0.011389530517838226, 0.0015513300049034007, 0.0014030175198885527, -0.00680690127509561, 0.001286202832654286, 0.005058741191367681, 0.004561692306941201, 0.00014703924534842372, 0.008552988737144253, 0.004976576321165674, 0.002792656861360727, -0.000557019936174831, 0.005831259302794926, 0.0035275796108180657, 0.0004461398533418433, 0.010035755012226717, 0.0013921541817994224, 0.007133715664332902, -0.004841153033670378, 0.007058864208044145, -0.002968329769580374, -0.0005609060383655814, 0.0030611664141443617, 0.010287639347304568, -0.0013040667360077023, 0.009745102894323116, 0.009471705068294383, 0.008792513854462995, -0.002561463799793273, -0.005518047582220541, -0.00012600788084621284, -0.003872824753257606, -0.001973494747124443, -0.00747122222409499, 0.011144381662068721, -0.0034383715537842363, 0.0020015184577046458, 0.0026430106107992214, 0.0006450827743471801, -0.009165954103412912, 0.0006932500294748352, 0.002720301633499648, -0.000593700430313631, 0.0024772004055028593, 0.007869390077592638, 0.005903141180831219, -0.0019456215952893454, -0.003624682309402324, 0.0031801175315525725, 0.004954992724709551, -0.0077236437725580545, -0.0005343676483872431, -0.00552876458625013, -0.005672313309994275, 0.00365671318881637, 0.001364664947190744, -0.003893087719254915, 0.006546235077125444, 0.01045914638829841, 0.00030543254450260404, -0.0036961793878369717, 0.007330860730937937, -0.0011529293419285241, -0.004662457042617131, 0.002708249196240846, 0.0012207496291177303, 0.0050661634357476795, 0.0012098715558915337, 0.0003924168975737996, 0.0013963996289848265, 0.001901266577492193, 0.006293522593544118, 0.005908899935258723, -0.0014628659872952003, 0.0014019438002089192, -0.0024694721161557173, 0.0014770097252701161, 0.0051216238815951255, -0.0028216404329710204, 0.004022968319160013, -0.017013485911196436, 0.004510579334402624, -0.00233539505411913, -0.00023619526076468916, -0.0019533011707773603, -0.005025239661335945, 0.008534750647165558, 0.008169096799313342, 0.001239638775587082, -0.004049118777567695, -0.003019143308682193, -0.0024864575349387123, 0.012367845412386069, 0.003253496421331707, 0.012753649858165194, 0.008418785863217308, 0.00840517661047422, 0.0032989122238094824, -0.0014341687677766751, -0.0007042037111452994, 0.0032437503845854226, 0.007050073112953793, 0.0012163269672204186, -0.01157538586994633, -0.0045363722720966615, 0.009054798717525868, 0.0016983681628268896, -0.0025419212549670864, 0.00500239766287533, -0.008049447258765052, 0.006275521013941958, -0.0004726367690388762, 5.5794826370074435e-05, 0.006583153243726967, -0.004044080065796152, -0.004003462296995254, -0.004625852055720643, -0.008294546901280146, -0.0031968786762180657, 0.005639592217366131, -0.00205032150022982, -0.0031821583450602556, -0.0006877689881796623, -0.004397351760417223, 0.00031529469544528364, -0.0008110948414965097, -0.006159205746371299, -0.005802073529180647, -0.0011197450896195914, -0.0012409329329702012, -0.00162525316277011, 0.0014808651713709951, 0.004011398051674901, -7.60669182372194e-05, -0.0010672889395870952, 0.004881483142856849, -0.0007147016532888448, 0.003878198315347121, 0.005705508502697656, -0.010096806355498048, -0.004403119204322466, 0.002601648553867228, -0.002299864464227787, 0.0037476035385307915, 0.000505310186946932, 0.00875199851262468, -0.003086471729065208, 0.0011242955753749048, 0.005415474048773333, -0.004861028028906072, -0.0008537025106224172, 0.0005363882387014601, 0.004180297911675141, -0.01111269781937484, -0.005061738245951181, -4.5140041038393974e-05, 0.004829999861116944, -6.045108999718288e-05, -0.007906210601959176, 0.003454758922916054, -0.010803721421821552, 0.002865190165307882, 0.006938887786501171, -0.002869033445180816, -0.003726929553191774, -0.0030923629264262564, -0.008507748584220695, 0.0007275691287676719, 0.006158382039178501, 0.002866978391962635, 0.00021781496153297844, 0.0031321400099179955, 0.0016653276979923248, -0.011370451559989968, 0.0006574807551012118]], "CLIP_VITL16": [[0.0014934348450465623, -0.003205814737487933, 0.0046698070893233384, 0.00899190914192745, 0.004774807698347351, -0.0027874600703150683, 0.007945018587633967, -0.0024790225381201014, -0.0036953972898614157, -0.0021264848077077094, 0.0027375885560600582, 0.0004256457336437522, 8.76980034676799e-05, -0.004627410269511696, -0.005450326483696699, -0.0018119904826479905, -0.003973493024452844, -0.0011730502102926185, 0.011978263927052136, -0.002384509594941681, 0.003947971295763804, -0.008373902901604939, -0.0005549771012738347, -0.00041679235238751416, -0.00532586398449811, 0.00039799677192191166, 0.000781334885025651, -0.0036821466108614767, -0.004531427350064569, -0.0050519092163250935, 0.005382506785363974, -0.0023261611019155318, 0.00010476556119763669, 0.004247396319194449, -0.006057745486032219, -3.5268402743066085e-05, 0.010139298625290394, 0.008753190917724918, -0.006614304578926584, -0.003735710396457842, 0.0024225656048987403, 0.009768758138472389, 0.0030780603781088503, 0.0018740012336903346, -0.0014143566791476186, -0.006373235913501543, -0.0019742012373171747, 0.005575837260535496, 0.010973388752476738, -0.0008152057509340177, -0.0022779775873376894, 0.006384355202581821, -0.0002946620859967698, 0.0015605334615842862, -0.002773599191145462, 0.0061773708439432085, 0.003653650320219727, 0.0037106956032485787, 0.006747414035172285, 0.0074323381069751285, 0.006473210590642835, 0.0078268504108895, 0.0005825504274319174, -0.004827023843641989, -0.00021101427476175744, 0.01633131356952204, -0.0003601935603166403, 0.004902465776963669, -0.005337026360476477, -0.008035634310958398, 0.004556373772423038, 0.0017350652858360927, 0.008666660573164169, 0.003414037409873512, -0.002680877509357577, 0.0024636544879864525, 0.004288403014387851, 0.0049794670247303476, 0.0019615302814848037, -0.002931170762828763, 0.0025277593257752324, 0.008018912594045767, 0.009770521809431637, -0.014073388143019248, -0.007478988599772988, 0.001169565355997871, 0.0011757425560393713, 0.007583287973168564, -0.002185571996960789, -0.012522583763877099, 0.010151727699187832, -0.005547003757039256, 0.001386460001495747, -0.0009500086810228167, -0.008187878199599, 0.0048039834099737055, -0.004964771003208378, -0.0036248595623130167, 0.0017815193648196143, -0.015500366230050782, 0.004338972609151497, -0.0020942930899433467, -0.0006485134469006518, -0.0031861431092362513, 0.009001928535078398, 0.0007235463721868163, 0.0010151341127559808, -0.0061585210919888195, 0.0032028091902082632, 0.00043956633784215243, 0.0020639425724353205, -0.00422845649088479, -0.006556614154595249, -0.0010108994055454679, 0.0022160311451774398, -0.005252134562893349, -0.002981623211367565, 0.006534900747779331, 5.92874398121653e-05, 0.007463213152897714, 0.0006848326407965614, 0.0040587188506668315, 0.007348136212551086, -0.0014687881044995843, 0.008911383274773305, -0.006289650419189871, -0.0017905262383547706, 0.006525226995687597, 0.0062429768520153375, -0.003337651554664426, -0.003999118198407814, -0.0013958605598997018, -0.00686741917161271, 0.003555389627846045, -0.0011670541928403763, -0.008523411456156857, 0.005853199161885475, -0.009629307706332343, 0.00039209784749387466, -0.0009908548011232851, -0.004400905983691861, -0.0013456271474503595, -0.0002936189570887522, -0.005631744241162036, -0.010104845108633687, 0.0003901017506987882, 0.0012502386128868566, 0.001605523707853121, -0.002858829430558464, -0.012480675623175393, 0.0002296814821999213, 0.00738359864176759, -0.002184927579946816, -0.0006450273742137289, 0.0035161081362854348, -0.0031211541023698046, -0.00427213944071396, -0.0017759743654592458, -0.006031468394212425, -0.0078085299411957965, -0.0011959349173015325, 0.0022300319211684505, 0.008675809526308018, 0.001284638081084602, 0.002807472007010474, 0.0004930825459516855, -0.005294455950206611, -0.001363396263596689, 0.008125403794110753, 0.0013782357987524411, 0.0026961951767919927, -0.00566884698028761, -0.0032079043901996392, -0.006854941057760945, -0.01015189960402164, -0.004764524547764184, -0.0081160760442303, -0.001463674594891596, -0.0059318169739774745, 0.0019399532386821412, -0.0022098666681400064, 0.0003033932146288207, -0.005243457938459789, -0.002611911188895727, -0.001045220796103509, -0.0007771837567402545, 0.0019976139036853883, -0.0047836710106242825, -0.0025083279205401522, -0.007189877966249536, 0.0015261198436333362, 4.021497972478416e-05, 0.003277554536576976, 0.003696829398077993, -0.004498207602988594, 0.005393390244783157, 0.006366327711889011, -0.002053879571824589, -0.007374896540899165, -0.00179744358386167, -0.004187997363095002, 0.007799076699567111, -0.0022758014172061594, -0.0036384348164905187, -0.00250846517949619, -0.0012704137268222185, -0.004762204372541004, 0.0032359011714685366, -0.002888189420363313, -0.013600214958635413, -0.01007664877529764, -0.003365825660611419, -0.006204951501620766, -0.00016225326875097743, 0.0010454366185347827, -0.0035615047566931353, 0.002168418149019337, -0.008935745572671298, -0.0022243620690212337, 0.0008770420509708037, 0.003094497218791565, 0.004864749047555962, 0.0068694719282740915, -0.001693728279364719, 0.012204210125756534, -0.00634727299682874, -0.0049733263440430164, -0.0019260112048042136, -0.0019004215811781397, -0.006432817698541017, 0.005497409937643995, -0.0013861128298396433, 0.006207073675547938, 0.0054656550769736495, -0.0019471079179890112, -0.006858818354720079, 0.005341201916135928, 0.007935093144293536, -0.0059973224415443855, 0.00658259659328244, 0.010782322645272043, 0.002707231863909823, 0.005474840933113062, 0.0003545644920615648, 0.004905854690481319, -0.0012845650251785464, -0.0017156276113713502, -0.0007055359575050824, 0.0002505594558732064, -0.005943221336399969, -0.005378477836281739, -0.004138419479452503, -0.002814393481292591, 0.0005587472479956848, -0.007536143569847227, -0.001813289751722054, 0.007642514781433751, -0.0026905925068686776, -0.012020531068132681, -0.006725373074666342, -0.002521885273216125, 0.0035733235827964636, 0.0028765003556724296, 0.0010912686279466871, -0.005667350932278416, 0.0013227160935374814, 0.007416375087566187, 0.01392476778313391, -0.010368367558509239, 0.006099306671372191, -0.002131100799570876, -0.002837387924294242, -0.0008380939012071892, 0.0005922441751780843, -0.0004431252018548548, -0.0008741468826139517, -0.007347085964283906, 0.002794779516989366, -0.0013019616612423707, 0.009102085160768845, -0.005840125356123521, 0.006483115763826805, 0.00601833707398989, 0.004623602144420147, 0.003231029216708113, 0.007970260593124709, 0.0008026713568886554, -0.007234245549294763, 0.004337269886904822, 4.459817137103528e-05, 0.004823414503004064, 0.007438630535034463, -0.0026266916697336856, -0.0069786967651452834, 0.003642090976923513, -0.015128639648372137, -0.004311003533075567, 0.0046818399383813485, 0.004368663955987855, 0.00574733952420171, 0.003200731737623838, 0.00028619771844453495, 0.006230601381089815, -0.006987854491771112, -0.003295658156275749, -0.0027478669170787643, -0.0070152535230260035, -0.00041755132207815793, 0.007828353692523457, 0.000903846061026517, 0.0070782861148472875, 0.001951083636165342, -0.011064513533545487, 0.00029404088854789734, 0.009324099826203153, -0.0059939040432006796, 0.002317885339090775, -0.0025322822356511933, -0.007455358720934863, -0.002814530611431109, -0.0014691984814073128, -0.001510139787569642, 0.00013414034831591565, -0.00473187455116369, -0.006148012212210315, -0.0031925783888172264, 0.0033171696546064194, -0.0022362231075848393, 0.003626908471977168, -0.0059826622653583236, -0.001651692517705007, 0.009214356425218284, -0.005270651364381512, -0.0015905589045194755, 0.006564658368006349, 0.014618469899108852, 0.0010145786800421774, -0.0032764275013257484, 0.0067581778752024875, 0.004847323003394362, 0.003217941524450329, -0.006065289257094266, 0.007988460742953146, 0.0051285563968122005, -0.0031429409285589245, 0.005246044337664815, 0.004567589613460852, 0.0019418305230580954, -0.013682496024888347, 0.0024227560251223294, -0.01190321856517006, 0.006462622933957557, 0.0056537802394648895, -0.006588842947993809, -0.0003205550178377462, -0.003155523667704654, -0.005043946793937888, 0.004753342067653488, -0.00349088752938604, -0.004056702950038016, -0.0076425666497512285, -0.002815748121727004, -0.004391102628274397, 0.012723837727786635, 0.003979180812497027, 0.009541502996977546, 0.010378229103728452, -0.001328097190707922, -0.0011215593073178422, -0.0013302327504127534, 0.01037199030079964, -0.002900936820713634, 0.0047105037688611046, -0.0023183741432148963, 0.008792108607436106, -0.007114135824270885, -0.006377664394676685, -0.007488457951694727, -0.010907474340704292, -0.004129730551291941, 0.0040340984636383255, 0.00556567424527285, 0.004960873016071586, -0.006242750430167441, -0.00882026222957806, -0.006788714598356322, 0.004171373384121001, 0.004517226448197936, 0.0052767372848889355, 0.005267870083281938, -0.004840112302810501, 0.008722080132098527, -0.0058743496324909356, -0.009111642027826085, 0.00959492703391747, 0.004990330122051424, 0.0034223031887615288, 0.0119540070776235, -0.009603992575483227, -0.0049399999605322445, -0.004238395094448188, 0.0052543709514958955, -0.004187813224482605, -0.0010064495409923546, 0.01093626056602013, -0.004844051634956319, 0.0006160142895003592, 0.0050790651743723575, -0.002656963696195322, 0.0020282987259799302, 0.008876625824003982, -0.013545990601414815, 0.007223915986039421, -0.0022612457925623095, -0.004515062141184568, -0.010608030541334303, 0.0027228150032566527, -0.0027574336841511976, -0.004408198276492345, 0.0070380308580669446, 0.00977464165837525, -0.007096636214886199, 0.004747790689262647, -0.004383303579578009, 0.007677655249691187, 0.0035808320284228465, -0.0017678339526438248, 0.013829347502905875, 0.0056017979408021674, 0.0062043592624831945, -0.0031888306204398975, 0.004832479674157432, -0.006399213894672524, -0.006791595189662818, 0.004802433583377438, -0.007457018579853784, -0.009767762925052506, -0.0005298046903176729, 0.006482536661099984, -0.010955772522059058, 0.007989775753230788, 0.00395582497797229, -0.007345008330461995, 0.009493368762460624, 0.007678085525350813, 0.0019625946470114286, -0.0010437631214947687, -0.0037715744269503793, 0.003423641329969869, -0.009142058615742084, -0.0049258788560771136, 0.005409537638611668, -0.0020396595990115965, 0.009357670440460257, 0.0034463197331536903, -0.006024866576560518, 0.005107616264881057, -0.004889164479788058, 0.0036100706651764486, -0.010229591055328705, 0.007753149180313237, -0.010499292868189517, -0.006316353482278908, -0.002478078806730493, -0.003796122333204203, 0.002361660377408207, -0.005872312763875183, 0.010101420296864075, -0.004934688733721319, -0.0030424422024721435, 0.012444444138302722, 0.005790898536030334, 0.0021227289319292377, -0.0005688594908199521, 0.005110927635211159, 0.00039746922927654665, -0.0047188510427738275, -0.0020335868585706594, 0.004081580613274127, -0.0013481579504018154, -0.009607210924679583, 0.009967074486088344, -0.0031650128353662293, -0.006023354071658105, 0.006445222036828374, 0.0032218774484301157, -0.0032419530325569212, -0.002758000913838092, -0.006867461890744216, 0.00029413050387202405, -0.009360209112690593, -0.003984673001634131, -0.005136128046698022, -0.004838080275062981, -0.007688683574087918, 0.0026086454533717843, 0.0004678505621003859, -0.007351597845131022, -0.01178750008429316, -0.0028309602586721813, -0.0016739025119353393, -0.012770871678764131, -0.003088051072237169, -0.00018700009836307083, 0.0007746925323524265, 0.0026881375061665585, 0.0009741788751191707, -0.00804383745443457, 0.003393308190755885, 0.004783395190977244, -0.005465839455031197, -0.007261305380697277]]}
\ No newline at end of file
diff --git a/vectors/textoff1.json b/vectors/textoff1.json
deleted file mode 100644
index 750d979..0000000
--- a/vectors/textoff1.json
+++ /dev/null
@@ -1,1 +0,0 @@
-{"ViT-B/32": [[0.03572230339050292, 0.13211107254028318, -0.03242263793945316, -0.01681747436523437, 0.07128314971923828, -0.07204589843749998, -0.05561141967773438, 0.035698223114013675, 0.005234336853027349, 0.05821380615234373, 0.05762777328491211, -0.01717071533203124, -0.13982543945312498, 0.04252347946166993, 0.027022075653076183, 0.049072265625, -0.10131340026855468, 0.07274742126464845, -0.026755905151367165, 0.05795135498046875, 0.08844985961914062, -0.05139389038085938, -0.053196334838867196, -0.14753494262695313, 0.01090469360351562, 0.09857158660888671, 0.16040735244750975, -0.11867160797119139, -0.05129508972167969, -0.0032265663146972684, 0.0704507827758789, -0.02572717666625976, -0.07227630615234376, -0.16963806152343752, -0.026342010498046874, 0.008474731445312522, 0.02598400115966798, 0.08689155578613281, 0.16230010986328125, -0.08704833984375004, -0.04395771026611328, -0.041859436035156246, -0.02806997299194336, 0.06838684082031249, 0.05572509765625, 0.017807960510253906, -0.05611000061035154, 0.03426589965820313, 0.04481639862060549, -0.04786109924316406, -0.012197256088256832, 0.03383483886718752, -0.03129491806030273, 0.013215351104736331, 0.04351806640625, 0.010443115234374994, -0.057091522216796864, -0.05963983535766602, 0.018304061889648435, 0.0038372755050659346, 0.10582351684570312, 0.05006450414657592, -0.05501327514648437, 0.06345610618591307, -0.025340795516967773, -0.030448532104492193, 0.07709102630615235, 0.04327239990234377, 0.0935689687728882, -0.04318599700927733, -0.01689319610595703, 0.06558532714843751, -0.0020330429077148465, 0.02237243652343751, -0.05325050354003906, 0.08192291259765626, -0.04445648193359375, -0.014867782592773438, 0.034692382812500006, -0.14805908203125, -0.10399360656738281, -0.013470458984374989, 0.06483993530273441, -0.007648468017578125, 0.07823333740234378, -0.08854680061340331, 0.0608367919921875, -0.04646029472351074, -0.011020088195800783, -0.03273239135742187, -0.011885070800781258, -0.03290224075317383, -0.9358398437500002, 0.05571016967296599, 0.077083158493042, -0.03540344238281251, 0.09684638977050782, -0.028508567810058602, -0.033021163940429685, 0.05935440063476563, -0.005596923828124933, -0.004912853240966797, -0.0564283847808838, 0.05811538696289062, -0.03126354217529295, -0.01847219467163086, -0.006886291503906294, -0.02784099578857424, 0.05897579193115234, 0.02662773132324219, 0.017226415872573852, -0.146942138671875, 0.015953254699707042, 0.0002685546875000333, -0.04050979614257813, 0.026616382598876956, -0.03192310333251952, -0.06849994659423828, -0.010656929016113287, 0.012454223632812511, 0.10800666809082031, -0.01122512817382812, 0.07473354339599611, -0.11099243164062497, -0.00041961669921875, -0.1272569417953491, -0.01685447692871092, 0.02537498474121094, 0.16772003173828126, 0.017419433593750006, 0.0028066635131835938, -0.03516235351562502, -0.15196685791015624, 0.011425781249999933, -0.05917844772338868, -0.0227907121181488, -0.14254989624023437, -0.16803131103515628, -0.06564917564392089, 0.021978378295898438, -0.019049072265624967, 0.0010195016860961928, 0.040653228759765625, -0.0030773162841796903, -0.0022891044616699108, 0.021932983398437494, 0.15616493225097658, 0.024313354492187522, 0.08959197998046874, -0.023273468017578125, -0.0191394329071045, 0.04413414001464844, -0.017873001098632768, -0.10422306060791015, 0.06213512420654296, -0.03698291778564455, -0.06359252929687499, 0.09894409179687497, 0.04622329473495484, -0.013280677795410152, -0.07492485046386718, -0.02673320770263672, 0.03511657714843752, 0.03237457275390623, -0.006126785278320335, 0.0376923143863678, -0.02043457031250001, -0.08049936294555664, 0.047745513916015614, -0.11034803390502929, 0.08792953491210938, -0.030425262451171886, -0.031135869026184086, 0.04003601074218749, -0.02880420684814453, 0.04428863525390625, -0.1571899414062501, 0.14445867538452145, -0.023143196105957033, 0.10215174555778503, 0.019689941406250022, 0.09816608428955077, 0.13275222778320311, -0.04936504364013671, -0.10594429969787598, 0.20656886100769042, 0.020064830780029297, 0.048834800720214844, -0.057118988037109374, -0.0782343864440918, 0.12175903320312498, 0.03048229217529297, -0.14530601501464846, 0.07474365234375002, -0.07211742401123047, 0.005488586425781261, -0.10273575782775879, -0.20058555603027345, -0.055521774291992204, -0.04699175357818604, 0.03379592895507813, 0.01189422607421875, 0.05613861083984374, 0.014721679687499989, -0.05488281249999999, -0.13036956787109374, -0.03151636123657227, -0.05739593505859375, 0.09954566955566407, -0.014378356933593767, -0.020999526977539065, -0.08803710937500003, -0.05481209754943847, 0.02469970583915712, 0.00286102294921875, -0.056222534179687506, 0.02902679443359374, -0.0036386489868164285, 0.06470146179199215, 0.004669570922851585, -0.018750762939453124, -0.035527801513671874, 0.018080520629882815, -0.004578113555908203, 0.13064041137695315, -0.04987335205078125, -0.05097045898437497, 0.03745956420898436, 0.07118759155273435, 0.0952098608016968, -0.039849853515625, -0.03169555664062498, 0.10442504882812498, 0.04596633911132812, 0.005649566650390625, 0.043170166015624956, 0.09246211051940917, 0.05182800292968748, -0.013137054443359372, 0.04083366394042964, 0.0309892535209656, -0.1313851773738861, -0.025221252441406244, 0.09176902770996094, 0.04523315429687502, -0.14690246582031252, -0.07468336224555969, -0.01171154975891113, 0.11025314331054686, -0.06174836158752442, 0.02234565019607544, 0.07657966613769535, 0.10231323242187498, 0.1464244842529297, -0.10358991622924804, 0.015804409980773926, -0.1007298469543457, 0.0014548301696777344, -0.1412597656250001, -0.02683715820312499, 0.09173583984374994, 0.02996101379394532, -0.09874954223632815, -0.0311279296875, -0.05084228515625, 0.06271743774414062, 0.03361206054687502, 0.009269499778747567, 0.06612675189971924, 0.03198119401931762, -0.10970458984374998, 0.05123672485351563, -0.1201993465423584, -0.05100135803222656, 0.04889302253723145, 0.1361715316772461, -0.10195226669311525, 0.03897113800048829, -0.0999553680419922, 0.06563701629638673, -0.0501436233520508, -0.1502838134765625, 0.10743255615234375, -0.03481629788875579, -0.007655239105224601, -0.033078002929687496, -0.017070484161376936, -0.06723175048828123, -0.01606101989746095, 0.058921289443969724, -0.05297393798828125, -0.022763061523437517, 0.008089295029640203, 0.006408214569091797, -0.07490303516387939, -0.009318923950195311, 0.002079391479492189, -0.0654449462890625, 0.025935125350952146, -0.028846120834350564, 0.07540960311889647, -0.17494688034057618, -0.06044425964355468, -0.018793487548828126, 0.010570526123046875, 0.041225433349609375, -0.10317211151123049, 0.028521728515625, -0.02348632812500001, -0.05777320861816407, -0.0027311325073242076, 0.06889495849609376, 0.011328125000000022, 0.029998779296875, -0.18305053710937502, -0.002023315429687478, -0.04133453369140627, 0.05978183746337891, 0.04556083679199219, -0.017111206054687494, 0.044807815551757835, 0.21889648437499987, 0.0374114990234375, -0.03100683689117431, 0.09335021972656254, -0.04952392578124998, -0.02687454223632812, -0.022333335876464855, 0.02089090347290039, 0.08177490234374996, 0.020372867584228516, 0.01872329711914064, -0.1495452404022217, 0.08843412399291992, -0.08370196223258974, -0.043556976318359364, -0.04901924133300782, 0.030247211456298842, 0.04161615371704102, 0.04719848632812501, 0.03913135528564454, -0.001414227485656741, 0.00379180908203125, -0.010516357421875011, 0.014430236816406247, 0.048861312866210926, -0.06367959976196289, -0.10903167724609375, 0.03190441131591795, -0.04098058938980103, 0.00909423828125, -0.05798215866088867, 0.024066162109374956, -0.02543563842773433, -0.037186717987060525, 0.013018417358398482, 0.0025733947753906247, -0.06635818481445313, -0.09476165771484374, -0.07700805664062499, 0.0831477165222168, 0.013348579406738281, -0.09020605087280274, 0.011624145507812517, 0.019281768798828126, -0.04495391845703128, -0.006497192382812517, -0.021426391601562497, -0.1005401611328125, -0.12655944824218746, 0.02345504760742187, -0.042738342285156244, 0.019890213012695314, 0.03328437805175781, 0.07460937500000003, 0.003794860839843761, 0.05147247314453124, -0.12894620299339293, 0.0030933380126952903, 0.05538368225097656, -0.04587249755859377, -0.06560668945312503, -0.040520000457763675, 0.08920803070068356, -0.029191654920578, -0.02382965087890626, -0.060622406005859386, -0.07841992378234863, -0.07053728103637695, -0.1535423278808593, 0.038074493408203125, 0.13170089721679687, -0.048451900482177734, 0.02334899902343751, 0.024762082099914554, -0.06908826828002929, -0.0446051120758057, 0.00432853698730469, 0.043241882324218744, 0.08964843749999996, 0.07711849212646485, -0.012197685241699223, 0.11083984375, 0.0305023193359375, -0.015136528015136722, 0.03703842163085938, 0.009549903869628909, 0.012501525878906294, -0.027562713623046874, -0.09449310302734376, -0.03133392333984375, 0.01038894653320313, -0.0028213500976562514, -0.036287117004394534, 0.06511573791503905, 0.045195579528808594, 0.005891418457031228, 0.12037105560302735, -0.034766387939453136, 0.14626340866088866, 0.045321655273437504, 0.023772883415222157, 0.1616565465927124, -0.13897247314453126, 0.08279676437377925, -0.05933837890624993, -0.09385528564453124, 0.13199272155761715, 0.19936218261718752, -0.008184814453125022, 0.07068939208984375, 0.0783905029296875, 0.007209134101867687, 0.1053985595703125, -0.06036376953125, 0.027932739257812478, -0.01665191650390624, 0.006003093719482419, 0.012682151794433591, 0.09718704223632812, -0.06361670494079591, 0.029552459716796875, -0.0032585144042969194, 0.002905130386352539, -0.05856895446777344, -0.07921905517578125, 0.040915679931640636, 0.06761918067932128, 0.01966257095336914, -0.030218505859375022, 0.01093597412109375, -0.0064165115356445285, -0.009275436401367188, -0.024725341796875022, -0.03383102416992187, -0.11014750003814697, 0.0875352382659912, 0.11649055480957032, 0.07866325378417968, -0.06203670501708984, -0.07776145935058594, -0.07186574935913087, 0.07763900756835934, -0.08574523925781251, 0.061846923828124956, 0.05821313858032226, 0.01546478271484375, 0.010832977294921886, -0.16860809326171877, 0.07130718231201172, -0.024561309814453147, 0.04391078948974611, -0.03120861053466796, -0.059326171875, 0.0623631477355957, -0.00244140625, -0.05429534912109374, -0.028411102294921886, 0.05500259399414065, 0.025977325439453136, -0.1435920715332031, 0.019183349609374956, 0.0479240417480469, 0.04102878570556641, 0.048037338256835926, -0.052504348754882815, -0.045369720458984374, -0.03546142578125, -0.014800310134887695, 0.010038089752197263, 0.053200721740722656, -0.049243927001953125, 0.048773193359374994, 0.06321105957031249, 0.038128662109375, 0.04644470214843752, -0.08280200958251954, -0.01844656467437744, 0.07743167877197266, 0.04505634307861328, 0.054107284545898436, -0.0921966552734375, 0.02389450073242183, 0.04743652343749999, 0.021562194824218756, -0.11996088027954102, 0.014904785156249989, 0.04029788970947265, -0.020032691955566423, -0.04495776295661927, 0.05274124145507813, 0.010264682769775407]], "ViT-B/16": [[0.05097656249999993, -0.13214111328125, 0.04939212799072265, -0.052396965026855466, -0.07205486297607422, 0.12152233123779298, 0.08966636657714844, 0.12861785888671878, 0.14486541748046872, 0.0018864631652832087, 0.0050455093383789396, -0.11098685264587402, -0.09190673828124996, 0.04956727027893066, -0.001559448242187511, -0.08061370849609378, -0.044404602050781256, 0.21251840591430665, 0.029937744140625007, -0.06789207458496094, -0.008984375000000044, 0.022811126708984372, -0.03648078441619873, 0.08571681976318357, -0.008793830871582031, -0.11477222442626954, -0.016474914550781247, 0.0450653076171875, 0.14136047363281248, 0.04584026336669922, -0.04815454483032227, -0.08896007537841798, 0.06923484802246094, 0.07854433059692383, 0.0732508659362793, -0.07116394042968754, -0.06760101318359375, -0.054098510742187494, 0.10947151184082032, -0.281787109375, -0.05209217071533203, 0.14377403259277344, -0.05328369140625, -0.09038858413696288, -0.0049686431884765625, 0.04978027343750001, 0.06416351795196534, -0.010753631591796875, -0.07826652526855468, -0.01946983337402347, -0.019684600830078114, 0.009657859802246094, 0.06172895431518555, 0.08095474243164064, 0.013052558898925787, -0.026879692077636713, 0.02954177856445312, 0.035861968994140625, -0.08068923950195313, -0.12501678466796878, 0.060061645507812456, -0.0022567749023437444, -0.04303588867187502, 0.06229743957519531, -0.05646724700927733, -0.021104240417480463, 0.03523235321044922, 0.004381561279296876, -0.24286651611328128, -0.07273292541503906, -0.09153060913085938, 0.024017333984375, -0.02455615997314453, 0.10575809478759762, 0.040242004394531294, -0.062498474121093744, 0.004884338378906283, -0.03584575653076171, 0.04615097045898438, 0.021994781494140636, -0.054874420166015625, -0.1452484130859375, -0.001414680480956998, 0.09342474937438965, 0.0008054733276367243, 0.0029374122619628892, 0.07225801944732667, 0.010812225937843326, 0.056268310546875006, -0.01614942550659179, 0.013952255249023438, -0.04517031908035278, 0.11925153732299804, -0.10031460523605346, 0.07466430664062498, -0.021315002441406217, -0.019122314453124956, 0.12550411224365232, -0.17911186218261715, 0.020927047729492193, -0.035128211975097655, 0.0012204170227050892, 0.027570152282714838, -0.07443847656249991, 0.07534151077270507, -0.0876455307006836, -0.03084487915039063, 0.013307189941406228, -0.08462371826171874, -0.014846420288085943, -0.16333274841308593, 0.09199829101562496, 0.11278991699218749, 0.00775146484375, -0.16393394470214842, 0.06643409729003907, 0.06718521118164061, 0.0931243896484375, -0.013982009887695324, 0.05880432128906249, 0.04874725341796876, -0.05988426208496095, 0.00634765625, 0.07352905273437504, -0.1614715576171875, 0.1214737892150879, -0.0927092164754868, 0.07216014862060546, 0.020725345611572264, -0.06767406463623046, 0.00026726722717285156, 0.036956787109375, -0.06787062883377076, -0.16611824035644532, -0.03631153106689454, 0.0029727935791015615, 0.012860107421875017, -0.06278028488159179, 0.06996307373046876, -0.02154541015625, -0.152044677734375, 0.01162128448486327, 0.0984394073486328, 0.09193115234374999, -0.005346679687500022, -0.04880218505859375, -0.11175537109375, 0.025503540039062467, 0.1807635545730591, 0.13447217941284179, 0.026647830009460458, -0.011228942871093744, 0.0749735116958618, 0.029647064208984372, 0.0102163314819336, -0.04440221786499021, -0.0913051605224609, 0.13571014404296877, 0.07301683425903321, -0.042036247253417966, -0.08837203979492188, -0.00559234619140625, -0.028896331787109375, -0.05448608398437499, -0.00574493408203125, -0.05542287826538084, 0.015119934082031251, 0.16497840881347656, 0.12915477752685545, -0.13571243286132811, -0.07051558494567872, 0.0058574676513671875, -0.02437667846679687, -0.03912544250488281, -0.02188568115234374, -0.04708099365234375, -0.07121534347534181, 0.004360961914062489, 0.22575683593750007, 0.1391632080078125, -0.12201967239379884, -0.023212623596191407, -0.08113536834716796, -0.04251861572265625, 0.054484176635742204, 0.03988304138183593, 0.04931492805480958, 0.03836593627929688, -0.04843344688415527, -0.12797698974609376, -0.02469215393066404, -0.009874534606933605, -0.046416991949081415, -0.07229843139648434, 0.06331977844238279, 0.16460857391357425, 0.072265625, -0.010779380798339844, 0.003930282592773435, -0.04649505615234373, -0.02992019653320313, -0.0974590301513672, 0.14270973205566406, -0.02771911621093759, -0.039267730712890636, -0.03541021347045899, 0.03879318237304688, -0.1437591552734375, 0.08509082794189454, -0.09756622314453124, 0.07194232940673828, 0.018811416625976574, -0.167474365234375, 0.13649597167968747, -0.05916404724121095, -0.02944488525390626, -0.08539199829101562, 0.04696216583251954, 0.01991267204284669, 0.008232641220092762, 0.06961421966552735, 0.025946426391601565, -0.024662327766418454, 0.031442570686340335, 0.01823844909667969, 0.040431594848632846, 0.006727790832519537, -0.07200660705566407, -0.04241790771484377, 0.008801269531250044, -0.04766044616699219, -0.10314331054687498, 0.046594238281250006, 0.038428497314453136, 0.13562068939208985, -0.040442657470703136, -0.014932250976562478, -0.07012252807617186, -0.09376640319824218, 0.10022004246711731, -0.14734020233154296, -0.04814505577087402, 0.006582832336425783, 0.010926532745361345, 0.03964843750000002, 0.13062267303466796, 0.05128288269042969, 0.019811630249023438, 0.10975036621093749, -0.007174682617187483, 0.01640625000000001, -0.1074077606201172, -0.042847883701324474, 0.041210067272186277, 0.2455078125000001, 0.07302637100219728, -0.20984058380126955, -0.04144897460937497, -0.04094009399414064, -0.015284705162048384, 0.011291885375976585, 0.012682342529296897, -0.10557775497436522, 0.031360626220703125, -0.1164459228515625, 0.017749023437499956, -0.005531480908393865, 0.022116661071777344, -0.03556671142578122, -0.08114395141601563, -0.09642715454101564, -0.033342266082763666, 0.009263801574707034, -0.006939697265624989, 0.010671424865722659, -0.04763965606689455, 0.11372528076171876, -0.06880989074707033, -0.06253474950790405, 0.06757316589355467, -0.2135253906250001, -0.02633972167968751, 0.0, -0.046688842773437544, 0.02517623901367186, -0.004954171180725109, 0.0059866189956665, 0.010588073730468744, -0.005586338043212874, -0.08785800933837891, -0.003579902648925784, -0.031783676147460936, 0.005503845214843751, -0.056767749786376956, 0.044590383768081665, -0.09316101074218751, 0.056350898742675765, 0.15740966796875, -0.14012413024902345, 0.010354614257812506, 0.05835418701171874, -0.06673583984374998, 0.1663940906524658, -0.021530795097351063, 0.005537414550781272, 0.07323789596557617, 0.022264099121093756, 0.031411170959472656, -0.036421966552734386, -0.04987983703613283, -0.031673431396484375, 0.09591751098632813, 0.07700843811035157, -0.09414851665496826, -0.01166119575500488, 0.10085372924804686, -0.06108627319335938, -0.03735504150390628, 0.08778762817382812, -0.02047080993652345, -0.05775985717773435, -0.09385032653808595, -0.09174709320068358, -0.07895202636718751, 0.0398712158203125, -0.023818206787109386, 0.0008972167968750444, -0.09520378112792968, -0.023138427734375022, 0.014904308319091786, -0.06179943084716799, -0.11446990966796872, -0.02391223907470703, -0.04013690948486326, 0.0015579223632812486, -0.20347671508789061, 0.0017141342163085882, 0.009031200408935541, 0.010519409179687494, -0.025811767578125033, -0.1376472473144531, 0.07021942138671874, 0.005255126953125022, 0.07757797241210938, 0.06295509338378906, 0.1381000518798828, -0.004026031494140624, 0.014828252792358401, 0.10772781372070313, -0.10323104858398438, 0.27829589843750013, -0.02048950195312499, -0.007154083251953103, 0.031532955169677745, 0.053880882263183605, -0.10776147842407226, 0.09007225036621093, 0.061023712158203125, 0.10575294494628906, -0.002384567260742182, 0.0017768859863281222, -0.0731903076171875, -0.027856445312499978, 0.008040618896484386, -0.07619380950927734, 0.037050056457519576, 0.08032531738281251, -0.06165466308593748, 0.12830200195312502, -0.01815347671508788, 0.11397895812988282, -0.08421030044555664, -0.1093883514404297, 0.07015838623046874, 0.04873733520507817, 0.08035488128662109, 0.024401092529296786, 0.08161087036132811, 0.001492309570312489, 0.03401107788085938, -0.09810409545898438, 0.03394470214843748, 0.04136962890625018, -0.1427022933959961, -0.11309146881103517, 0.0061130523681640625, -0.015414428710937511, 0.03359637260437012, 0.006463527679443359, 0.08096008300781249, 0.04351806640625, -0.08344345092773438, 0.060561370849609386, -0.06797027587890625, 0.05407695770263672, 0.032869720458984376, 0.0710426330566406, -0.09277114868164063, -0.022073364257812533, 0.06556396484375004, -0.010363197326660162, 0.09774093627929688, -0.007782363891601564, 0.012500166893005371, 0.00010223388671881661, 0.0170135498046875, -0.02229013442993165, 0.06800460815429693, 0.02894358634948732, 0.05032608509063721, -0.04317016601562501, 0.058726501464843754, -0.03667147159576416, 0.07112636566162109, -0.022364234924316398, -0.09636293947696686, 0.11586303710937501, 0.05895195007324219, 0.013624572753906244, 0.09774856567382811, -0.10515699386596679, -0.08237409591674805, 0.016060638427734364, 0.006639099121093728, -0.08621826171874997, 0.047585678100585935, -0.024503898620605424, -0.06783971786499021, 0.02583007812499999, 0.02370896339416504, 0.09918365478515623, -0.027173325419425964, -0.02432956695556643, -0.006997108459472656, -0.05552864074707031, 0.03471908569335935, 0.14850463867187502, 0.028421974182128898, -0.0314124882221222, -0.017392349243164074, 0.003889656066894537, -0.056319046020507815, 0.9098632812499998, -0.053217697143554676, -0.11378841400146483, 0.0866668701171875, -0.09229431152343748, -0.12288360595703124, 0.0065460205078125, 0.09395599365234375, 0.1558883666992188, -0.06146125793457033, 0.04653277397155762, 0.09521703720092772, 0.11359004974365233, 0.09358291625976564, -0.07002086639404298, 0.05547637939453123, -0.019372558593749978, -0.05806088447570801, -0.12352523803710941, 0.06359786987304689, 0.017895507812500017, -0.003613281249999989, -0.031195831298828136, -0.094979476928711, -0.01760845184326172, 0.011888504028320312, 0.03200353384017944, 0.03690128326416016, -0.16866149902343747, 0.06057453155517578, -0.04929695129394532, -0.02732524871826171, 0.11470108032226564, -0.02681140899658202, -0.09926910400390626, -0.06349048614501952, -0.026408767700195318, -0.13199462890624997, 0.006980133056640636, 0.030974054336547853, 0.027642822265624978, 0.04263916015625002, -0.015333318710327143, -0.031258392333984364, -0.05701179504394531, 0.1089160919189453, -0.05148239135742187, -0.1101879119873047, -0.10319957733154297, -0.1750213623046875, 0.07205438613891602, 0.12350215911865234, 0.013201594352722168, 0.055202484130859375, -0.1405487060546875, 0.027670288085937494, -0.038633155822753895, -0.09891176223754883, 0.058654499053955075, -0.019812011718750022, 0.12052841186523436, 0.007113647460937511, 0.0013689041137695257, -0.07806968688964844, 0.08706779479980468, -0.1514621734619141, -0.026559448242187478, 0.0044799804687500056, -0.060574340820312496, 0.08569402694702148]], "RN50": [[-0.021133852005004887, 0.0070556640624999944, 0.010587310791015624, 5.049705505371093e-05, 0.008147430419921872, 0.015294170379638672, 0.028517532348632812, 0.023990631103515625, 0.014738082885742188, 0.006909179687500017, 0.0013555526733398434, -0.006359863281249999, 0.029491806030273432, 0.011043357849121097, -0.002048301696777344, -0.02097053527832031, -0.0006963968276977538, 0.016770553588867188, -0.00035343170166015627, -0.0007207870483398431, -0.0030355453491210938, -0.006444549560546877, -0.02006378173828125, 0.004589080810546875, -0.003349781036376953, 0.010487890243530274, -0.0028221130371093757, 0.002072143554687501, 0.0039279937744140635, -0.019889450073242186, -0.004966354370117193, 0.0016386032104492194, -0.0040434479713439934, -0.007714843750000002, -0.004072940349578858, 0.00926189422607422, 0.0036663055419921876, 0.00870647430419922, -0.0030893325805664076, 0.0029541015625000056, 0.006145668029785157, -0.014292144775390633, -0.004351043701171876, 0.0009157657623291016, -0.006463909149169922, -0.009775924682617187, -0.0003644943237304686, 0.014892578125, -0.028159332275390622, -0.0023712158203124997, 0.005242538452148437, 0.008701610565185546, -0.0138397216796875, -0.006787586212158204, 0.005375480651855468, 0.030875396728515622, 0.002445793151855469, 0.0009304285049438477, 0.017476272583007813, -0.003929519653320312, -0.005898380279541016, -0.008532714843749983, -0.0013266324996948243, 0.001342964172363282, -0.008431625366210938, -0.00014553070068359388, -0.00035542845726013186, -0.000732421875, 0.00012369155883788958, -0.0014701843261718736, 0.007430648803710936, 0.012985610961914064, -0.01563396453857422, 0.0037391662597656278, -0.02176513671875, 0.0122694730758667, -0.009882354736328126, 0.00446281433105469, 0.024011993408203126, 0.014247131347656249, 0.0090087890625, -0.006499290466308594, -0.0012031555175781245, -0.00466756820678711, 0.004680436849594117, 0.0029123306274414064, 0.0575897216796875, 0.009794998168945312, -0.0005022883415222168, -0.02745208740234375, 0.0032058715820312486, 0.0002922058105468764, -0.021777343750000004, -0.0018531799316406292, -0.002090072631835936, -0.013779640197753906, -0.008931732177734374, -0.004581069946289063, 0.0017822265625000028, 0.003911590576171874, -0.00018081665039062708, 0.0030998229980468764, -0.004070281982421875, -0.007249784469604491, -0.007661247253417968, -0.002925872802734375, -0.0022177696228027344, -0.0032112121582031257, 0.012142562866210937, -0.01065597534179688, 0.021993637084960938, -0.005961227416992187, 3.814697265638878e-07, -0.004985713958740235, -0.00345611572265625, 0.00012799501419067391, -0.01168060302734375, -0.0026587486267089845, 0.004684829711914064, -0.004232788085937501, 0.02375640869140625, -0.016296577453613282, 0.004327297210693359, -0.005536842346191407, -0.008923339843749996, 0.0021453857421875003, -0.00461578369140625, -0.008605194091796874, -0.0035998344421386726, -0.00984954833984375, -0.010193252563476562, -0.018522262573242188, 0.009737777709960937, 0.004299211502075196, 0.016839885711669923, 0.002272701263427733, -0.007078933715820312, -0.0010593414306640627, 0.013203239440917967, 0.003945922851562492, 0.0008916854858398438, 0.012015914916992186, 0.01424674987792969, -0.0007999420166015653, 0.01349868774414062, 0.002769613265991209, 0.006187057495117186, 0.010549163818359375, -0.008355236053466797, -0.009428787231445312, -0.0028436660766601556, -0.007361316680908201, -0.01765995025634766, -0.00037651062011718854, 0.0068683624267578125, -0.008576965332031249, -0.011154651641845703, 0.015577936172485353, 0.0008458137512207028, -0.00969257354736328, -0.0004760742187500007, 0.03571319580078125, 0.006019973754882812, -0.014373016357421876, -0.0022510051727294943, 0.005582046508789063, -0.0012529373168945323, 0.013657569885253906, 0.01148490905761719, -0.012089538574218753, 0.02999114990234375, 0.012037277221679688, 0.0014739990234374986, 0.00232691764831543, -0.00975799560546875, 0.023682403564453128, 0.010517382621765138, -0.005356025695800781, -0.008950424194335938, 0.00037413835525512695, 0.0045452117919921875, -0.005327606201171873, -0.00035011768341064453, 0.0010334491729736342, -0.006692123413085938, 0.006217193603515626, 0.0023660659790039062, -0.011131000518798829, 0.00912942886352539, -0.005558013916015626, -0.0015255928039550788, -0.011489105224609376, 0.027405166625976564, -0.009647655487060546, -0.002644729614257813, 0.010077953338623047, 0.007776641845703126, 0.0005007743835449219, 0.015764617919921876, 0.0008789062499999999, 0.0005286008119583132, 0.005735015869140625, -0.027029418945312494, -0.006359100341796875, 0.0033416748046875, 0.007526588439941405, 0.0016883850097656264, -0.0014087677001953132, -0.0034820556640625007, -0.0005599021911621093, 0.0038284301757812514, 0.003069305419921873, 0.0002574622631072998, 0.005033159255981446, 0.017499256134033202, 0.00421638488769531, 0.112872314453125, 0.0013231277465820257, 0.013300943374633788, 0.023850631713867188, -3.9446353912353526e-05, 0.025338554382324217, -0.010095214843750006, -0.013164710998535157, -0.04697570800781248, -0.0011165618896484372, -0.0013376235961914049, 0.0212005615234375, -0.0053195953369140625, 0.0025754928588867187, 0.021258640289306643, -0.0019076347351074212, 0.0013036727905273438, -0.015169143676757812, 0.005289459228515625, -0.0005068778991699219, -0.000171661376953125, 0.0062240600585937444, 0.013736820220947266, 0.01287841796875, 0.0050317764282226535, 0.010320281982421874, -0.0036121368408203146, -0.0030642032623291017, 0.006223106384277345, -0.016264343261718744, -0.007560634613037109, 0.00940580368041992, -0.013124847412109373, 0.0009653091430664069, 0.020968055725097662, -0.01607513427734375, 0.006173944473266602, -0.01720142364501953, 0.007048702239990235, 0.02089529037475586, -0.004016113281249983, 0.019528007507324217, -0.01269073486328125, -0.011670684814453124, -0.0013053894042968778, 0.013640785217285156, -0.00410919189453125, 0.024216461181640624, 0.0023200988769531243, -0.0015270233154296882, -0.007326507568359375, 0.008577251434326173, -0.0001483440399169922, -0.015191650390625006, -0.0024969100952148436, -0.004081344604492188, 0.013169288635253906, 0.03869781494140625, 0.0019008636474609382, 0.01234731674194336, -0.008326625823974611, -0.01326131820678711, -0.014789390563964843, -0.008841514587402344, -0.009534835815429688, -0.009244155883789063, 0.01484222412109375, 0.007654094696044922, 0.0032440185546874986, 0.009848022460937501, 0.003643321990966797, -0.0006910324096679674, 0.003092956542968754, -0.005865478515625001, 0.010953712463378902, -0.003867340087890624, -0.003276824951171875, 0.004234886169433592, -0.004605197906494142, 0.010889816284179687, -0.0015092372894287102, 0.01637382507324219, -0.04716796874999998, 0.009779953956604004, 0.024707031249999997, -0.0020902633666992215, -0.010991859436035157, 0.013983535766601564, -0.003345870971679689, -0.010715866088867189, 0.0023949861526489256, -0.017919921875, 0.014843559265136717, 0.0012996673583984368, -0.015825462341308594, 0.00533647537231445, -0.012683677673339843, 0.001461029052734375, -0.01111297607421875, 0.0001655578613281249, -0.007629251480102538, 0.008816719055175781, -0.0063873291015625, 0.0049037933349609375, -0.007176113128662107, -0.0038863360881805425, -0.004659414291381836, 0.003551578521728515, 0.0001030683517456053, -0.009654998779296875, 0.005773735046386718, 0.01093597412109375, 0.001367902755737305, 0.0035889148712158203, -0.006274604797363281, 0.0037200927734374993, -2.0742416381835938e-05, 0.00689697265625, -0.0006622314453125083, 0.005508041381835936, 0.0005897521972656247, -0.00791339874267578, -0.007727241516113281, -0.020910644531249994, 0.006824302673339843, -0.0040802001953125005, -0.0003775835037231445, -0.0009204864501953097, -0.011444854736328124, 0.005640316009521484, -0.0027442932128906236, 0.009001684188842774, -0.00399327278137207, -0.0018494606018066404, -0.0009958267211914035, -0.007587242126464843, 0.0011581420898437514, -0.0015651702880859378, 0.01654052734375, 0.013567399978637696, -0.01172447204589844, 0.019174957275390623, 0.007255172729492187, 0.0016067504882812528, 0.020131683349609374, 0.0517578125, 0.005393201112747192, 0.007180023193359371, 0.0035446166992187497, -0.001596689224243164, -0.006863784790039063, 0.013785815238952639, 0.006485700607299805, -0.013508987426757811, 0.007625198364257811, 0.00021209716796874445, -0.0029329299926757826, 0.010708808898925783, -0.0006023406982421878, -0.007780361175537109, 0.01043872833251953, 0.005200862884521484, 0.004582786560058592, -0.010573196411132812, 0.005406951904296877, -0.02524261474609374, 0.0007097840309143069, -0.012838649749755862, -0.0015810966491699215, 0.0035812377929687472, 0.008251953124999989, -0.011937332153320317, -0.007620143890380859, 0.002535629272460937, -0.0026236057281494142, -0.0043010711669921875, 0.0012414932250976556, -0.003851890563964844, -0.0027617692947387706, 0.0008614540100097684, -0.03145027160644531, -0.0009025573730468764, 0.005428314208984375, 0.004705810546874998, 0.0013483524322509752, 0.01713905334472656, 0.011472320556640625, 0.013080787658691407, -0.007453155517578129, 0.0031490325927734375, 0.0025886535644531264, -0.004158401489257814, 0.0005758285522460937, -0.025312423706054694, -0.0009464263916015604, -0.0007476806640625, -0.0007231235504150391, -0.008047819137573242, -0.010235977172851563, 0.005730438232421878, 0.01204681396484375, -0.004525756835937502, 0.010809326171875001, 0.014765739440917969, 0.00021667480468748335, 0.020966720581054688, -0.00937619209289551, 0.005223846435546875, 0.0005077362060546854, 0.0012264251708984375, -8.562207221984733e-06, 0.026627826690673827, -0.00287628173828125, 0.008212852478027347, 0.00796737670898437, -0.016048431396484375, 0.00122833251953125, 0.006953430175781251, -0.01007041931152344, 0.013487815856933594, -0.014307594299316408, -0.009758758544921878, 0.004296684265136718, 0.0006683349609374993, 0.020991134643554687, -0.009213829040527345, 0.0038059234619140653, -0.019805526733398436, 0.002558326721191405, 0.0017076492309570299, -0.008815765380859375, -0.009884643554687501, -0.0002548694610595703, -0.002138280868530274, 0.015182685852050778, -0.010734176635742186, 0.0025634765625, -0.006325531005859374, -0.007741165161132813, 0.0018892288208007812, -0.016904640197753906, 0.007474517822265624, 0.007098770141601561, -0.000804901123046875, 0.0036372184753417983, 0.00966329574584961, 0.012406349182128906, 0.006009483337402343, 0.002926254272460939, -0.001867485046386716, 0.05581207275390626, -0.006282043457031251, 0.01045989990234375, 0.0026535034179687514, 0.008733749389648438, -0.0037105560302734377, 0.009823226928710935, 0.013078308105468749, -0.008115673065185545, -0.013544845581054689, 0.0025222778320312528, -9.250640869140625e-05, -0.00157613754272461, 0.007927322387695312, 2.288818359375e-05, 0.0009774208068847657, -0.006762695312499997, -0.007522439956665038, -0.011065101623535155, 0.003594970703125002, 0.014706420898437496, -0.008419418334960939, 0.0016614913940429694, 0.011206912994384765, -0.00433387756347656, 0.005665969848632813, 0.004537200927734374, 0.005891036987304688, -0.006671142578124997, 0.029273414611816408, -0.020481681823730467, -0.006642723083496093, -0.0021026611328125028, 0.007169055938720702, 0.006892013549804688, 0.02667064666748047, 0.0010524868965148923, -0.0055868148803710944, -0.0057847976684570306, 0.00014495849609375, -0.0015275239944458011, 0.0003467559814453111, -0.009556579589843751, 0.0010845184326171917, 0.025289106369018557, 0.004562282562255861, -0.011837768554687501, -0.0002638101577758789, -0.0031416893005371095, -0.0110504150390625, 0.0016292572021484372, 0.008692169189453123, 0.0068817138671875, -0.01083507537841797, -0.0020569801330566403, -0.03696289062500001, -0.012862396240234376, -5.8364868164062496e-05, -0.015464043617248534, 0.009634780883789065, -0.10771484375000007, 0.004733467102050783, 0.020258641242980956, -0.026544189453125, -0.0003654003143310526, 0.0016120910644531264, -0.004459381103515625, 0.004246139526367189, 0.007103538513183592, 0.0012796998023986816, -0.0009231209754943847, 0.01191415786743164, 0.006530189514160156, 0.022172260284423827, 0.0008495330810546868, -0.017190933227539062, 0.010870742797851565, 0.009083557128906246, 0.001070404052734373, 0.0003362178802490236, 0.016069412231445312, -0.010698318481445312, -0.0006467819213867194, 0.0029113769531250028, -0.0007210254669189455, -0.005246496200561522, 0.011666107177734374, -0.006875228881835938, 0.0032064437866210936, -0.010489368438720705, -0.0015110015869140622, -0.008042335510253906, 0.010369110107421874, 0.007830381393432617, -0.01652283668518066, -0.0032299041748046885, 0.006528663635253902, 0.004510211944580078, -0.0017242431640625, -0.0008923530578613288, 0.0028310775756835993, -0.00786762237548828, -0.006905078887939453, 0.003009414672851561, -0.0062656402587890625, 0.002680587768554687, 0.00017690658569335938, -0.005066585540771482, 0.0028438568115234375, -0.017669677734375, -0.010233116149902341, -0.007425403594970702, -0.001728343963623047, 0.0074981689453124944, 0.0031997680664062472, 0.0015933990478515618, -0.0036453247070312514, 0.006520700454711913, -0.03144626617431641, -0.0024929046630859375, 0.007418060302734375, 0.003246688842773437, 0.005857086181640624, -0.021813201904296874, 0.0022095441818237305, -0.010866546630859376, 0.010789871215820316, -3.0136108398437847e-05, -0.009884834289550781, -0.003009510040283204, 0.002885365486145019, 0.005880117416381838, 0.002612018585205078, 0.014303588867187508, -0.017940330505371093, -0.00689697265625, 0.006351470947265627, 0.020098495483398437, -0.008837318420410157, -0.0033317565917968806, 0.007904338836669921, 0.0029571533203125167, 0.0006393194198608398, -0.009448242187499983, -0.009538269042968749, -0.0034303665161132778, -0.0156585693359375, -0.0006477355957031257, 0.00918436050415039, 0.00019493103027343802, -0.008304405212402345, -0.014067554473876953, -0.005522155761718751, 0.009549522399902343, 0.0033630371093750014, -0.002373123168945307, 0.0006490230560302736, -0.007782554626464842, 0.002076721191406252, 0.009616279602050781, -0.001483154296875011, 0.012567138671874999, -0.00030578374862670924, 0.01146392822265625, 0.000704982876777649, -0.0240936279296875, -4.76837158203125e-05, -0.013559865951538085, -0.009448814392089847, 0.009168624877929688, 0.011375713348388671, -0.005913352966308594, -0.003207778930664061, -0.00627174377441406, 0.007343673706054689, 0.019789505004882812, -0.0009874343872070313, 0.01316070556640625, 0.009698677062988282, 0.0011718750000000028, 0.0007001876831054694, 0.006686782836914068, -0.012220478057861328, -0.004001140594482422, -0.00317559242248535, -0.015275192260742188, -0.004229545593261717, 0.002724075317382814, 0.0109375, 2.894401550292971e-05, -0.004830217361450195, 0.007397174835205078, 0.008558654785156244, -0.004279136657714844, 0.019691467285156243, 0.004069328308105469, 0.0007787704467773439, 0.00728921890258789, 0.004448699951171875, -0.019753074645996092, 0.011263227462768553, -0.016552734375, 0.01930713653564453, 0.009112358093261719, 0.006621074676513669, -0.006069946289062503, -0.0031373977661132806, -0.0014801025390625, 0.0010038375854492174, -0.0004487037658691405, -0.004278135299682616, -0.0027985572814941406, 0.015996932983398438, 0.006239223480224609, 0.014193153381347655, 0.016005992889404297, -0.001639747619628906, 0.009080886840820312, 0.005966567993164064, 0.0006817817687988286, 0.00398297309875488, 0.01819477081298828, 0.0018706321716308594, -0.004822158813476562, -0.012958812713623043, -0.019530010223388673, 0.009754180908203125, -0.0030675888061523424, 0.0018902301788330106, -0.003711509704589844, -0.008213996887207031, -0.008095932006835938, 0.012610435485839847, 0.0048056602478027365, -0.004273986816406242, -0.005780220031738281, 0.0011817932128906257, 0.011528778076171874, -0.00028588771820068325, 0.00204010009765625, 0.00939674377441406, -0.007367706298828124, -0.015781974792480467, -0.003149414062499998, 0.014332962036132813, 0.00930709838867188, -0.0004142761230468729, 0.009023094177246095, -0.0065593719482421875, -0.003748321533203125, 0.005658340454101563, -0.0018920183181762697, -0.006688690185546867, -0.005217361450195315, -0.008647727966308597, 0.0024402618408203127, -0.004539108276367193, -0.009402847290039061, 0.00506439208984375, 0.003991365432739258, -0.006312561035156247, 9.365081787109097e-05, -0.002559471130371093, 0.008105087280273437, -0.002697372436523439, -0.00661783218383789, 0.00019378662109374983, 0.0056213378906249944, -0.018373870849609373, -0.0006511688232421903, -0.012360000610351564, 0.006919169425964355, 0.011990004777908325, -0.0008454084396362291, -0.0021506309509277343, -0.005886650085449217, -0.0016300201416015667, -0.007130146026611328, -0.014474415779113771, 0.014463424682617188, -0.021545791625976564, -0.006007957458496093, 0.002794599533081055, -0.014761352539062501, 0.007127475738525391, 0.01530466079711914, -0.0096923828125, 0.002556812763214111, -0.01261138916015625, -0.002304840087890626, -0.0017887115478515646, -0.0003620386123657229, 0.00650320053100586, 0.019842529296874994, -0.013422298431396485, -5.1689147949218577e-05, -0.006491947174072266, -0.005727386474609377, -0.005475753545761108, 0.014329528808593749, 0.006153106689453125, -0.0027067184448242194, 0.0067310333251953125, 0.006334686279296883, 0.013315582275390626, 0.0005588531494140625, -0.015157687664031982, 0.0006459236145019533, -0.011821413040161132, 0.01006591320037842, -0.011149024963378905, -0.006051445007324218, 0.010156250000000006, 0.00820159912109375, 0.013173675537109375, -0.0046079635620117215, 0.009490013122558592, -0.00016767978668212917, 7.257461547851597e-05, 0.0002687931060791015, -0.008905029296874992, 0.0007055759429931644, -0.009321212768554688, -0.014907169342041015, 0.0029224872589111318, -0.010083484649658206, -0.008745574951171873, 0.006596946716308594, 0.0007215261459350586, -0.00595703125, -0.03350696563720703, 0.004429244995117188, -0.014047718048095705, -0.01663970947265625, 0.0072878837585449215, 0.0303410530090332, -0.00447044372558594, 0.004294776916503906, 0.010795021057128906, -0.0001873016357421889, -0.0026092529296875, -0.005517005920410156, -0.014983749389648436, 0.0008712768554687486, -0.008431625366210935, -0.004854130744934081, -0.011582374572753906, -0.0006050109863281264, 0.014819145202636719, 0.010124588012695307, 0.0004905700683593755, 0.004991340637207032, 0.02012014389038086, 0.00021719932556152344, 0.01059989929199219, -0.0010551452636718694, 0.0001251578330993654, 0.00484466552734375, -0.0047473907470703125, -0.0037361145019531236, -0.006093597412109375, -0.0002704620361328124, 0.013062095642089844, -0.0029388427734374986, 0.03896026611328125, -0.0005183815956115723, -8.125305175780972e-05, 0.002924728393554687, -0.037518310546875044, 0.001012754440307617, 0.006549072265624997, -0.0004371643066406264, -0.00294809341430664, -0.007792329788208008, 0.0038619995117187503, -0.0034427642822265625, 0.017996215820312498, -0.011303949356079097, -0.0007202148437500007, -0.01509265899658203, -0.003244590759277341, 0.0030509948730468757, 0.0056208610534667965, 0.005721473693847658, -0.002349853515625, 0.0034667968749999972, 2.228021621704119e-05, 0.0010498046874999993, -0.01500530242919922, 0.0033253192901611323, 0.0019378662109375, 0.014827728271484375, -0.008284950256347658, -0.003997516632080079, 0.015149307250976567, 0.006693267822265626, 0.006271743774414064, 0.008533859252929689, -0.00922622680664062, 0.02331066131591797, 0.010202789306640625, 0.019288253784179688, 0.008466434478759766, 0.009407615661621092, 0.0036899566650390597, -0.010049057006835936, -0.02198305130004883, 0.00887594223022461, 0.0009372711181640635, -0.002222824096679687, 0.0032165527343750028, 0.005719757080078127, -0.010828125476837158, -0.004582595825195313, -0.006277465820312501, 0.010846519470214845, -0.010919189453124992, -0.009075927734375003, 0.005679512023925781, 0.013271331787109375, 0.004641723632812501, 0.010140991210937499, -0.005996179580688476, 0.005847167968749997, -0.0015460491180419918, 0.012442016601562494, 0.010697937011718756, 0.0020304679870605472, 0.005115795135498046, -0.020989990234375006, 0.002788925170898439, 0.008761024475097658, 0.00532379150390625, 0.0001084566116333007, 0.014953804016113282, 0.006349182128906249, 0.022729730606079104, -0.009179306030273438, -0.005120849609374999, -0.005505371093749989, -0.012013244628906253, 0.007443237304687489, -0.0019176483154296868, -0.003796005249023439, 0.0019729614257812528, -0.005276870727539062, 0.004662322998046871, -0.024432373046874997, -0.015378570556640624, -0.03202342987060547, -0.0022499084472656222, 0.019576263427734372, -0.0023055076599121094, -0.0009206771850585951, -0.009182548522949217, -0.002802467346191405, -0.010445690155029297, -0.007506561279296874, -0.010391426086425782, -0.006271934509277342, 0.0050144195556640625, 0.02040624618530273, 0.005656278133392334, 0.008810424804687494, -0.0033111572265625, -0.0039050102233886726, 0.00011596679687500035, -0.0017105102539062417, -0.009349441528320311, -0.004308319091796874, 0.0008092880249023441, -0.0030990600585937417, -0.004831743240356445, -0.002679157257080081, 0.0002940177917480462, -0.0022537231445312472, 0.00569286346435547, 0.000302267074584961, 0.013562011718750003, 0.013117218017578126, 0.009774398803710935, 0.011017990112304688, -0.0066123962402343806, 0.0012372970581054701, -0.012930583953857423, -0.0010932922363281247, -0.003767156600952148, -0.00871772766113281, -0.0032864570617675767, -0.011963653564453128, -0.00862846374511719, -0.005310153961181639, -0.0008812427520751981, 0.0038462638854980455, -0.01475257873535156, 0.0008920669555664059, -0.004872894287109377, -0.022027397155761717, 0.007246398925781251, -0.0003455638885498033, -0.0074784278869628905, 0.0057964324951171875, 0.01055908203125, 0.00033164024353027344, 0.00996799468994141, -0.0034759521484375028, -0.008004760742187499, -0.016318893432617186, -0.038949584960937506, 0.009257507324218747, 0.003059768676757812, 0.0046176910400390625, -0.012493896484375003, -0.009341192245483399, -0.006309127807617186, 0.009721851348876952, 0.004612588882446289, 0.0009479522705078125, 0.00997905731201172, 0.002682423591613768, 0.010324668884277344, 9.26971435546882e-05, -0.031124019622802732, -0.00198383331298828, 0.017206954956054683, 0.009494018554687497, 0.000675201416015625, 0.01945428848266602, -0.0002023696899414104, 0.002060699462890625, 0.005829620361328128, 0.012865447998046873, 0.004145240783691407, -0.006991577148437501, 0.00401935577392578, 0.004681968688964843, 0.009497070312499998, -0.004204559326171871, 0.01990032196044922, 0.002275276184082031, 0.0118621826171875, -0.003447246551513672, 0.0138275146484375, -0.005193901062011716, 0.009221076965332028, -0.0004199981689453104, -0.037521553039550765, 0.003952598571777344, -0.009396171569824219, -0.01090507507324219, 0.008774471282958985, -0.021282100677490236, 0.00031428337097167986, -0.021643447875976565, 0.007713508605957042, 0.003488016128540038, 0.018402099609375, 0.0018142700195312583]], "RN50x4": [[-0.01533050537109375, 0.010957336425781249, 0.00964431762695312, -0.015050506591796874, -0.00530242919921875, -0.007472515106201173, -0.007067871093749997, 0.015667724609375017, 0.023545074462890628, 0.015859603881835938, 0.0011463165283203125, -0.021105957031249997, -0.013990402221679688, -0.013701629638671876, 0.014246368408203125, -0.02768402099609375, 0.005580139160156247, -0.01770782470703125, -0.005059814453124999, 0.01547279357910156, -0.014908218383789062, 0.007434082031249997, -0.0037322998046874986, 0.012543869018554685, 0.009260559082031258, -0.006455230712890628, 0.008544921875, 0.020068359374999997, -0.012583923339843747, -0.026155853271484376, 0.012019348144531249, -0.005513763427734375, 0.01849098205566406, -0.0011016845703125042, 0.0038258552551269503, -7.247924804687847e-06, -0.0007812499999999972, 0.007681655883789063, 0.013653564453125003, -0.01219635009765625, 0.006115722656250003, -0.013970947265625006, -0.009156799316406242, 0.005922126770019534, -0.013922119140625001, -0.0020507812500000014, -0.001871490478515623, -0.013928222656249989, -0.004062080383300776, 0.0016853332519531248, 0.00702667236328125, -0.0051727294921875, 0.011315917968750006, 0.00933074951171875, 0.00556640625, -0.00024681091308593724, 0.01017608642578125, -0.010385894775390626, -0.0103759765625, 0.0004772186279296889, 0.005284118652343753, -0.0064483642578125, -0.002301025390624996, 0.01325149536132813, -0.02280273437500001, 0.0043582916259765625, 0.022870635986328124, 0.004108810424804687, -0.01659088134765625, 0.010533142089843753, 0.009723663330078125, 0.003894042968750011, 0.02239990234375, -0.01583709716796875, 0.0026306152343750083, -0.001415252685546875, 0.021068763732910157, 0.01586151123046875, -0.007138061523437489, -0.0132293701171875, -0.01604461669921875, -0.0004585266113281278, -0.01532478332519531, -0.002157592773437498, -0.014563369750976551, -0.006260681152343753, 0.03883056640624999, -0.0040378570556640625, -0.006990814208984383, -0.004746246337890625, -0.02668609619140625, -0.017256927490234376, 6.790161132812916e-05, -0.02219924926757813, 0.023162841796875, -0.019281005859375006, -0.023790740966796876, 0.009396362304687496, -0.003598022460937489, -0.02478790283203125, 0.0050865173339843806, 0.009735107421875, 0.0222900390625, 0.00475921630859375, 0.011100769042968753, -0.009777832031249989, 0.024144744873046874, 0.005831909179687511, 0.0057525634765625, -0.007131195068359374, 0.01555452346801758, -0.005087280273437522, 0.003085327148437511, 0.007904052734375003, 0.005450439453124997, -0.014767456054687503, 0.008943939208984373, 0.020452880859375, 0.0018039703369140628, -0.0163421630859375, -0.009945678710937503, -0.022183799743652345, 0.00309295654296875, 0.005030822753906251, 0.006602859497070315, -0.0006019592285156257, 0.016625976562500006, -0.007928466796875, -0.013078308105468749, -0.022558975219726562, -0.005894470214843753, -0.012115478515625, -0.00209808349609375, -0.019417572021484374, -0.009043312072753905, -0.005570220947265621, -0.008103752136230467, 0.01577301025390626, -0.08233642578125, 0.009671783447265624, 0.005859375, 0.007434082031249997, 0.01714706420898437, -0.009797286987304685, -0.021404266357421875, -0.025419616699218772, 0.016984939575195312, 0.0011924743652343764, 0.008895111083984374, -0.013946533203125, 0.05318298339843752, 0.01470947265625, -0.013485717773437503, -0.012407684326171876, 0.0016601562500000002, 0.024580383300781272, 0.014025878906250011, -0.013214111328125, 0.0061737060546875, 0.02034759521484375, -0.0023670196533203125, -0.0005477905273437514, 0.01070404052734375, -0.006512451171875003, 0.001574707031250011, 0.005356597900390624, 0.0015884399414062503, 0.025228881835937498, 0.011966705322265625, 0.006624603271484376, -0.012593078613281246, -0.005418395996093749, -0.01158447265625, -0.018891334533691406, -0.00724029541015625, -0.012546539306640625, 0.01159210205078125, -0.005791854858398438, -0.0451202392578125, -0.005818176269531246, -0.009722900390624997, 0.004002380371093753, 0.017237854003906254, 0.021284484863281248, 0.024272918701171875, -0.003498077392578125, 0.014344024658203126, -0.005011558532714844, 0.014879226684570314, 0.008612537384033198, -0.006744766235351564, -0.010733032226562508, -0.015373611450195314, -0.03411026000976562, -0.00603218078613281, -0.012133979797363281, 0.006006622314453125, 0.0030426025390625014, 0.0069580078125, -0.003369140624999989, 0.04992065429687498, 0.015798282623291013, 0.026927947998046875, 0.005476379394531251, 0.005030822753906247, -0.009088897705078126, -0.018215942382812496, 0.010521697998046878, 0.01754150390625, 0.0025344848632812556, -0.006316375732421876, -0.006392860412597658, -0.021563339233398433, -0.018195533752441408, 0.0035797119140625003, -0.029523468017578127, 0.012966918945312503, -0.027947998046875, -0.017412567138671873, -0.0017395019531249998, -0.0040035247802734375, -0.017827987670898438, 0.0021156311035156194, 0.011761474609374989, -0.002444076538085937, -0.009933471679687507, -0.0008087158203125, 0.015728759765625003, 0.015437316894531261, 0.02466583251953125, -0.011790847778320311, -0.004122924804687497, -0.0031837463378906333, 0.0201141357421875, -0.0026977539062500028, 0.030590820312500044, -0.02498626708984375, -0.021530914306640624, 0.02571868896484375, 0.018225860595703126, 0.0025497436523437503, -0.0013523101806640625, -0.038085937500000014, 0.0020874023437500028, 0.00382232666015625, 0.008835506439208982, 0.007778930664062501, 0.017227554321289057, 0.0339599609375, -0.010507202148437506, -0.009815979003906239, -0.020077514648437496, -0.013382720947265628, 0.007778930664062499, -0.0033004760742187528, 0.0044326782226562465, -0.014126205444335939, 0.01103134155273438, 0.017887115478515625, -0.005588912963867182, -0.021578979492187483, 0.030446243286132813, -0.015440368652343751, -0.011539459228515611, 0.004460144042968753, -0.0009307861328125, -0.010502624511718753, 0.00497255325317383, 0.021655273437499956, -0.009476852416992188, -0.010075378417968751, -0.011020660400390625, 0.011109924316406242, 0.025922393798828124, 0.012637329101562497, 0.0017440795898437528, -0.003913116455078126, 0.0010818481445312444, 0.016339111328125003, 0.012321472167968748, -0.009031677246093748, -0.003082275390625, -0.02606544494628906, 0.0057846069335937556, -0.002583694458007813, -0.015079498291015625, -0.019735336303710938, -0.012469482421874997, 0.004931640624999997, 0.01848373413085938, -0.025056838989257812, 0.0069122314453125, 0.01606292724609375, -0.004918670654296874, 0.03467636108398437, 0.007904052734375, -0.011853027343750001, 0.011814880371093753, -0.005842590332031258, 0.026190185546874994, -0.0029227256774902316, 0.006882858276367187, -0.009773254394531247, 0.0010368347167968792, -0.00849761962890625, 0.00165557861328125, 0.002131652832031254, -0.007297515869140625, 0.023879241943359372, 0.011365509033203127, -0.011990356445312503, -0.006072235107421872, -0.010334777832031253, -0.030902099609374997, 0.021118164062500007, -0.0018682479858398438, 0.009686470031738281, -0.023545074462890614, -0.005024719238281246, 0.01280441284179687, 0.0052337646484375, 0.022016143798828124, -0.010018920898437506, 0.014080429077148435, 0.005857849121093751, -0.004257965087890628, -0.006237411499023432, 0.00693511962890625, 0.0225830078125, 0.022252655029296877, 0.02046356201171874, 0.029821777343750022, -0.03260650634765626, -0.014321899414062506, -0.022629547119140628, 0.0013381958007812472, -0.007360839843750008, 0.009252929687499998, -0.0009275436401367174, -0.005015563964843754, -0.007708740234375004, 0.027742004394531252, -0.01512908935546875, 0.002047729492187504, 0.01523628234863282, -0.03105926513671875, 0.0196624755859375, 0.011742401123046874, -0.002465820312499978, 0.005035400390625, -0.00013046264648437084, -0.022615051269531252, -0.017529296875000003, -0.015484619140624996, 0.01910800933837891, -0.005750274658203124, -0.013540649414062508, 0.0015811920166015625, -0.01671867370605469, 0.010997772216796875, -0.010008239746093748, 0.007678222656250004, -0.006794738769531251, -0.0047607421875, -0.01825065612792969, -0.006389808654785157, -0.009046733379364014, 0.18437499999999996, -0.015135192871093751, 0.005842590332031251, 0.00140380859375, -0.0015008926391601564, -0.004391479492187489, -0.010233306884765625, 0.01499710083007813, 0.012677001953125003, -0.0027023315429687556, 0.015347290039062489, 0.03316497802734375, -0.008918762207031252, 0.01756973266601563, 0.02705230712890625, -0.007794952392578124, -0.010453796386718749, -0.020022583007812497, 0.004265213012695313, 0.022577667236328133, 0.007397460937500003, -0.012934875488281247, -0.00119781494140625, -0.01321277618408203, 0.0009616851806640708, -0.01805725097656251, -0.00499725341796875, 0.010671043395996095, -0.005657196044921875, 0.0037521362304687514, -0.024150085449218754, 0.01900329589843751, -0.00518798828125, -0.06534423828124997, -0.007622528076171874, 0.002223968505859375, 0.029326629638671872, -0.01693115234375, 0.00014953613281250278, -0.0002149581909179684, 0.0026077270507812583, -0.0025700569152832045, -0.002490234375000011, 0.005204963684082034, 0.0030693054199218694, -0.008424377441406256, -0.023852634429931643, -0.02368240356445312, -0.027849578857421876, 0.014087677001953125, 0.02544555664062499, 0.0016799926757812417, -0.0005344390869140639, 0.01832809448242187, -0.013340377807617189, -0.008062744140625001, 0.01873779296875, -0.0010898590087890653, 0.018775177001953122, 0.012771987915039064, 0.014641571044921878, 0.005370330810546874, 0.009024047851562501, -0.004466247558593761, -0.0022712707519531306, -0.015660095214843753, 0.011100769042968753, -0.013690185546875011, 0.006520080566406253, -0.003412055969238277, 0.0087127685546875, 0.01623611450195312, -0.01160736083984375, 0.017510986328125006, 0.0005310058593750167, -0.022427177429199217, -0.016981506347656244, -0.011061096191406248, -0.01640739440917969, -0.03729248046875, -0.012981796264648432, -0.00019416809082031285, -0.024758911132812506, 0.009320831298828125, -0.021094512939453122, -0.02745361328125, -0.02593536376953125, -0.006990814208984375, 0.03703231811523437, 0.0015365600585937472, 0.010410308837890625, -0.0005386352539062493, -0.009122467041015625, -0.0150299072265625, -0.01713714599609375, -0.025254440307617188, 0.005635833740234375, 0.021380615234374997, -0.012701416015625001, -0.006068992614746095, 0.017178344726562517, 0.000518798828125, 0.0033020019531250014, -0.05510482788085937, -0.00158843994140625, -0.02043647766113281, 0.02714996337890625, -0.0040798187255859375, -0.012315368652343749, 0.019872283935546874, 0.017468261718750003, 0.011370849609374999, 0.02144889831542969, 0.0088043212890625, 0.015147399902343747, -0.021549987792968746, 0.0050415039062499944, 0.0010635375976562472, -0.007138061523437503, -0.022126007080078128, 0.0164276123046875, 0.0162200927734375, -0.001685333251953136, 0.009252929687500022, 0.009619140624999994, 0.006869029998779294, -0.0017532348632812444, 0.007064056396484372, -0.004749298095703125, -0.0038970947265625014, 0.03638916015625, -0.007415390014648436, -0.0038852691650390625, 0.023070526123046872, 0.01581420898437501, 0.02452239990234375, 0.01787872314453126, 0.009794235229492194, -0.016248703002929688, -0.0009735107421874889, 0.00746555328369141, -0.01635589599609375, 0.010899829864501949, 0.022080993652343752, 0.018243408203125, 0.007563781738281251, 0.001964569091796875, 0.04487686157226563, -0.01608963012695313, -0.0005865097045898438, 0.00823974609375, -0.010331153869628906, -0.023393440246582027, -0.00928764343261719, 0.029817962646484376, 0.0027053833007812528, 0.0006721496582031208, -0.00122833251953125, -0.006069946289062503, 0.02051544189453125, 0.015695571899414062, 0.003857421874999996, 0.005557250976562497, 0.0013626098632812458, 0.010325431823730469, -0.023184204101562494, 0.004582977294921875, 0.009512329101562508, 0.008555507659912115, -0.0282745361328125, -0.0035552978515625, -0.026983642578124994, 0.022546386718750002, -0.013945770263671872, -0.01271820068359375, 0.02457733154296875, 0.01629867553710937, -0.04461212158203125, -0.009924316406249994, -0.02464027404785156, -0.013287734985351567, 0.0003154754638671903, -0.0021011352539062472, -0.027801513671875, -0.01770267486572266, -0.0024425506591796847, -0.010538482666015625, -0.008107757568359375, -0.001154327392578123, 0.01577205657958984, 0.0066356658935546875, -0.008573913574218758, 0.012468719482421873, 0.021906471252441405, -0.04660491943359377, 0.00583648681640625, -0.0038093566894531247, -0.003428649902343761, 0.013499450683593747, 0.014177703857421883, 0.013854217529296872, -0.0028533935546875, -0.020799636840820312, 0.017416381835937498, -0.008358192443847657, 0.016205596923828128, -0.01910400390625, -0.0006019592285156222, -0.02703380584716797, -0.008892059326171875, 0.00397491455078125, 0.020025634765625022, 0.024330902099609378, 0.004666137695312489, 0.013825225830078124, -0.011373901367187501, 0.0008911132812500001, -0.010068511962890624, -0.013512420654296876, -0.01009674072265625, -0.00473785400390625, 0.031320953369140626, -0.014642333984375006, -0.010902595520019528, -0.002058410644531248, 0.0025375366210937493, 0.0027900695800781236, 0.005015373229980469, 0.003399658203124989, 0.003843688964843748, 0.0004632353782653819, 0.013134765625000017, 0.010572814941406258, -0.013924407958984374, 0.04054431915283203, 0.04264373779296875, -0.009888458251953128, -0.0005935668945312514, -0.006016540527343753, -0.0035409927368164062, -0.007005310058593742, 0.0028625488281249917, -0.0295257568359375, 0.0171661376953125, -0.001805114746093739, -0.0035377502441406306, -0.02623901367187499, 0.006384658813476562, -0.009828186035156256, 0.03788833618164063, -0.01909618377685547, 0.005801010131835938, 0.01369476318359375, -0.01394195556640625, -0.015092468261718752, -0.012174224853515624, -0.019153594970703125, 0.003336334228515623, 0.011153411865234374, -0.005618286132812497, 0.009649658203124998, -0.009860992431640625, -0.0069946289062499944, -0.05369415283203127, -0.010137939453124994, 0.026217651367187504, -0.02250976562500001, -0.010987854003906242, 0.004454231262207033, -0.010057067871093749, -0.010042381286621094, 0.014212799072265636, 0.04194641113281249]]}
\ No newline at end of file
diff --git a/vectors/textoff2.json b/vectors/textoff2.json
deleted file mode 100644
index 9390187..0000000
--- a/vectors/textoff2.json
+++ /dev/null
@@ -1,1 +0,0 @@
-{"ViT-B/32": [[-0.041419010098475, 0.03363893637421581, -0.14419780749419764, 0.007936123651286698, 0.0030018446532906083, -0.004295661029003972, -0.07136399633849966, 0.012783995001581016, 0.02332973822851601, 0.0006076541484734604, 0.10614195439118783, 0.02178523294989119, -0.1463425246291575, 0.09897979705875208, 0.014189981931718677, -0.009457373037187296, 0.03679900043160123, 0.18437863141149463, -0.07602305762349208, -0.048212886867255854, -0.052501459422150606, -0.04027336618393946, -0.05143522235601334, -0.09584469853305175, 0.043492436603592914, 0.04124469373992456, 0.26192272849357756, -0.03737540476443135, 0.004368851069414789, -0.13822012536120318, 0.02627842750884394, 0.01950510840784286, -0.16904097246101749, -0.06433827598461071, 0.019427439430760498, 0.13184256025120555, -0.006340952731748285, -0.029946276163102394, 0.13935807386562787, 0.03307594780418583, 0.014681604363425013, -0.04465149724506602, -0.022210458425675147, 0.010938764851113685, 0.05871608454842809, 0.10886532833262741, 0.09288507589068344, -0.022037477251015774, -0.03838564179576902, -0.02317136894394045, -0.08785070563197181, -0.01609719541975984, 0.04307994129261923, -0.02823513639332654, -0.03399305846948756, 0.06516215682064795, -0.009918301775482382, -0.012426520889304507, 0.050763495175154535, -0.05930635618773308, 0.12093490929323822, -0.0034246969562894266, -0.03894725782298717, 0.09690981949967184, -0.15703439803030306, -0.1535551785123555, -0.05728950350326592, 0.04606133354170484, 0.10076904841174565, 0.018895448580696757, -0.00992651419651144, 0.021579242137963816, -0.045901059298349686, 0.10346035359720926, 0.14295281101686205, -0.06505530096508501, -0.00583330037477294, 0.03813878754522967, 0.01543917795438622, -0.014000861004770588, 0.029136830050083252, 0.08655518265785837, -0.13530200533217518, -0.024899844514080522, 0.08641638634460784, -0.03336686312333702, 0.08282221545328507, -0.05372297948790265, -0.07726609624841065, -0.11451180800558176, -0.06353798370818108, -0.07975440844949327, -0.38906301190841985, 0.09322003720892971, 0.09068553649346273, -0.05781556081097054, -0.0536578717725063, -0.07062228467069778, 0.14784190848154183, -0.1616588271565815, 0.04048039880306403, -0.0782590362755306, -0.03739229882639787, 0.10919767882848862, 0.029653042293322777, 0.03665000018153777, 0.17948344833989469, -0.03305682769757112, -0.035950115593798265, 0.04217311071161798, 0.036891926038228655, -0.015954277373000307, -0.054645615910199584, -0.0318785659484853, -0.07905412412375754, 0.036486829258398586, -0.0414838520076443, 0.010245534093613519, 0.021915137171262537, 0.008218842391870956, -0.03166658462929425, -0.0027718094293415255, -0.012241510257391276, -0.06754800695047168, 0.02289669193906355, -0.08011271988808882, -0.07513837018812483, -0.058655753711545244, 0.05876671748473083, -0.03652400843820195, 0.10006763691556134, -0.23257108246582855, 0.01896221098936201, -0.018567363301780822, -0.05253001124825696, -0.06830216038179553, -0.048285193484647534, -0.08720707729342271, -0.012718565900169546, 0.04749756969974393, -0.07044055771926522, 0.07378820759444285, -0.010200108496154539, 0.007911682857551321, 0.06095442592725075, 0.00010086030097708763, 0.048657062416757844, 0.192534646654395, -0.009032109981307159, -0.0746704505136315, 0.1113112331395934, 0.12486255231400382, 0.11005970931994488, 0.04814999122961633, 0.031331565321242066, -0.007656721652789685, -0.02131711579863775, -0.11413791861916185, 0.051403952250494184, 0.0951399868121698, -0.015107187739262543, 0.1098191833681485, 0.06302827390406551, -0.06757223875134914, -0.04343210798326306, -0.024644535596411304, -0.21664709534387053, -0.017999794296985963, 0.07641194338651867, -0.015612027611358758, 0.11461057935871044, -0.00639635520152223, 0.05463341650605323, 0.014951895055564586, -0.10326150730575141, 0.08340187486257893, -0.12345815089543948, 0.024781549871249035, -0.09539940592702824, 0.051993384278463256, 0.023620123558207726, 0.08185730849806686, 0.09990267900948958, -0.04239995363535238, -0.09005100164994355, 0.08741667495491785, 0.029203069786369544, -0.020655581133693635, -0.09917307302150906, -0.11880479461285531, 0.007624997774556468, -0.07400453094322905, -0.024616809463911656, -0.03638261733626996, -0.08337588283830195, 0.03054048317155067, -0.12525253678407086, -0.10024578457024066, 0.19815530091601102, -0.027602485073918943, 0.005047622634390179, 0.05884754606848729, -0.0868668147545971, 0.14290789853960828, -0.05825851961760493, -0.192559325369455, 0.04704105889255021, -0.06657534998064048, 0.11952631503324211, -0.052857634922924654, 0.037217184013890535, -0.12427342374545935, -0.06543831043151832, 0.0579952691798985, -0.030738435402944117, -0.024246966175444994, 0.12425796965143257, 0.06047577122580903, 0.10504340787684174, -0.07163441670497385, 0.00306735293112308, 0.03446210794208601, 0.033104120084192015, 0.09336173903679992, 0.0010134982699764687, -0.09827712033537388, -0.13012916767151683, -0.07756676779610694, -0.09149301121001138, 0.16170462395318494, -0.06938696144186829, 0.01953766841213209, 0.06840874545093205, -0.020826593476468765, 0.09736518634595104, 0.02421148255784643, 0.03894983627803514, -0.07202822047563208, -0.007334968416179162, 0.029359301447884907, 0.24622157113797677, 0.0840887855755984, 0.012442882518324183, 0.05693786381984375, 0.06179624899295779, -0.017957953726590176, -0.03201448151179045, 0.02129561598658208, -0.05583527996771703, -0.063973801910429, 0.03664278061798892, 0.0539993491520123, 0.06300526403216863, -0.0002835068758023005, -0.09675837989109244, -0.015786848173842138, -0.08896690978533757, -0.030109104587040962, -0.24501280168610357, -0.033341737835770636, 0.005670403344679625, 0.0741738692924461, -0.0966177536245872, 0.04775377257284895, 0.00283509578694815, 0.03625688586622023, 0.099631589603567, 0.03966397213489579, 0.14955898219394492, 0.005964603789832181, -0.04088041639563874, 0.1162630262092442, -0.06606776287724331, -0.022527675356806897, -0.04999095866192442, -0.02273204514198807, -0.03830392738152464, -0.009753344928326335, -0.006708228253196112, 0.013199330948374131, 0.00024528443042452335, -0.04213732385588216, 0.033642112066917876, -0.05023592326022244, 0.09781792488928233, -0.08461229455172205, -0.04614648329762243, -0.039981604252565965, -0.11777724608408378, -0.014077226706993554, -0.031222173328897915, 0.016589013445042492, 0.013618179396674451, -0.05574493324944142, 0.08900610567806379, -0.07307075226961585, -0.016475018180491182, 0.019972780756019985, -0.047462786500883945, 0.04399330665698552, 0.048416816460460456, -0.002129536969565878, 0.038474067010236146, -0.07993293446583653, -0.029396898308154864, 0.07420886726935397, 0.1280324297272464, 0.17239663006855419, -0.06240975627640213, -0.05382969579509226, -0.0828070906492047, 0.018731822254057957, -0.018669024016354705, -0.11587325030558533, -0.09302680840631208, -0.14126421388320665, -0.0555622079811451, 0.034870934219446044, -0.04512102389053645, 0.12449827077452445, 0.01921289776004265, -0.03507497515679445, 0.1279593357248418, 0.03682099572879441, 0.13614498883898268, -0.026818213600100796, -0.018980437646211358, -0.013635063016700788, 0.002027207179596026, 0.08429035463097441, -0.02034702124789214, 0.019063215035133255, -0.14979748415604136, 0.12293654988170528, -0.09417489215750613, 0.017806996658855583, -0.1332426514325519, -0.01992590337381882, 0.013036671441638703, 0.017342386707065803, 0.03759432644750355, 0.03358950708476151, 0.017716619003398448, 0.021439500272128036, 0.030030139906142006, 0.1269755001200309, 0.017850811100955908, 0.010516058500866978, 0.00687545202830909, -0.1082055634066849, -0.055338636738496275, -0.06322518751249391, 0.10296600519769766, 0.0872295992932414, -0.045681797432986615, 0.0659350925208367, -0.0002952892520964665, -0.12734190389852246, -0.10318434287632773, -0.04380498379498026, 0.10798690054654461, -0.03761057520364804, -0.11590655052269495, 0.04700277449240047, 0.036055256655872774, 0.06444669429690834, 0.07314461438861224, -0.028059322840885904, -0.16172030300446313, -0.021589555890845973, -0.023811010150368423, -0.006240754034000244, -0.029605419222579293, 0.015446260571812686, 0.014193495027808277, 0.12031182520649099, 0.052446641272975776, -0.1002430447060405, 0.04260667083878445, -0.03272016137735683, 0.03313783060458147, -0.04539086479132575, -0.06996709790696248, -0.006352993153239407, 0.019175346888448765, -0.09423729771782388, -0.0819364863526508, -0.10885352373951679, 0.0005315040994134765, -0.23703403130132225, 0.04236313426838124, 0.06477756830177651, 0.01950737403351104, 0.057984124774405885, -0.03653214343169063, -0.15952156259232383, 0.06003394171854991, -0.060784613773507294, 0.06476922971126386, 0.05178908576489202, 0.0666599967686115, -0.03034792326468111, 0.04767109400298934, 0.07745964979937536, 0.009931265774334369, -0.05041332245149079, -0.014448151290213056, -0.022285788517475723, 0.010904939699091013, -0.009557397272099963, 0.016864232875932247, 0.12082403846491228, -0.08775313534944759, -0.06478257297148422, 0.06295028546927167, -0.0892733352767515, 0.0464483959151143, 0.15457844329809498, 0.04712142504347864, 0.07399743516065554, 0.04338779863103151, -0.010329422395534613, 0.14705955415999433, -0.09564330611190251, 0.04943871605290396, -0.10542106725929778, -0.2014967491041754, 0.10271205377683165, 0.09563500609765396, -0.04853721630128216, 0.007840693231764085, 0.021478131919572083, 0.043374627097598394, 0.12123546034335884, -0.025651087017063142, 0.1122369838058822, -0.10972521387885623, 0.05413571050241906, -0.11592966986224297, 0.12189195154244961, -0.14258437657656778, 0.04763612300918719, 0.10906311468129895, -0.020530303003214113, 0.045222559604632964, -0.06031069521489026, -0.09147040233889484, 0.05728047732672394, -0.017397330191588723, 0.07682335021201966, 0.11765119850331382, 0.0291264730046615, 0.15795304062588456, -0.046212204457723616, -0.028767621474070963, -0.06606018629965556, -0.003775560331493792, 0.08433894236108633, -0.05537977471726981, 0.03955271143007178, -0.01472590858340522, -0.06259831303114743, 0.055953110321991004, 0.06428307017023531, 0.05241654241468599, 0.03146245825184974, 0.056839177406246305, -0.017234364274698044, -0.26657853773023765, -0.00293372629337122, -0.06955100324808122, 0.010413955463075712, -0.057364988416055904, -0.13367837933647683, 0.003024127497613313, 0.049176538541157146, -0.03363438297757479, -0.0781661054375984, -0.03408191132468979, 0.040489808111352055, -0.04730354273699631, 0.13454976373088198, 0.016702142115499984, -0.038302568236912075, -0.015540051994494432, -0.02237101671316942, -0.02127146904829311, 0.057175820924671245, 0.07981518579740111, -0.02356709525858984, -0.04480722793976196, -0.002354123055373623, 0.19605287239675181, -0.026657952045517522, -0.059658209950460846, -0.028420598150856048, -0.056813288210538875, -0.08808393307738849, 0.026860319693460928, -0.13064803444657513, 0.09693024259824107, 0.03628649863239261, -0.0019621558355944657, -0.11871665520725715, -0.005476233702621734, -0.16267451188203252, 0.11024447060272852, 0.09304839339141402, -0.15415606334996537, -0.05134620033251034, 0.011672028204505518, -0.08562403153805856]], "ViT-B/16": [[-0.1493707474828116, -0.07471933475205134, 0.09715612896575368, -0.12909168467733115, -0.043220072731120676, 0.1202858587099412, 0.09343393167625128, 0.14383628317637687, 0.0723038358914401, 0.11157660858801649, -0.058639345217678995, -0.12693575545848623, 0.029954249981128812, -0.05484235395166979, 0.0020908372364693115, 0.0652614127081173, 0.04090552649905735, 0.22069750122343873, 0.0395723111556072, -0.016233531882797064, 0.16999657875493837, -0.009951056199321535, 0.00677905176719224, 0.03438568569086305, -0.11033977881334696, -0.1256878151302955, -0.06688134346819972, -0.11671960821751401, 0.06175192162157253, 0.03128157705680466, -0.06797375432009847, -0.026456434338457284, 0.06534655035357809, 0.0016577576262535763, 0.09444869369962723, -0.09656579398555463, -0.007844536280646264, -0.10350851176658744, 0.23632113769071245, -0.0959990537190401, -0.05326236101277566, -0.035894911567324515, 0.01215790030120802, 0.001267826272352032, -0.15440230421616236, -0.03716614475253597, 0.012967161819037119, -0.01565987762152619, -0.08057208521735967, 0.007704555132481813, -0.04499350493447866, -0.05856090493200777, 0.06538888354270074, 0.12236000936778815, -0.11110021825113962, -0.04092966451249004, 0.089266651920349, 0.0934868646813376, -0.22320982209840715, -0.11301694088839163, 0.10747086185874054, 0.01601799623404775, -0.03643651260893534, 0.04167129298226098, 0.008671286048557922, -0.08096397799328654, 0.031109390593675998, 0.004725292455687326, -0.2797669423274525, -0.06119041284737599, -0.05082484001937496, 0.09369643951554085, -0.007236846724257556, 0.03791211954820092, -0.026783293520704042, -0.04338615458588698, -0.027079158403851715, -0.07350480927909049, 0.07852292482764485, 0.01931165620137584, -0.07913408700510664, -0.1637087148542749, 0.0012987752711712854, 0.04166854788518355, -0.11899358582555566, 0.0344463311242048, 0.05019338774447819, 0.14144449576848453, 0.06648404301250184, 0.16227147441617687, 0.07305646824442164, -0.16121625980377446, 0.1457719999897435, -0.05960533487103189, 0.10734766332576351, -0.07367401444083975, 0.0017888943777238998, 0.041275360988770195, -0.14349806374675997, -0.05483761616122495, 0.03142614995656074, -0.007647644609428383, -0.10531747148478467, 0.08210174757866577, -0.0943437715396013, -0.03832975933370412, -0.08813505960427083, 0.10601923974149909, -0.02567492485677567, -0.0454842973445025, -0.15038122047630828, -0.021330174918353546, 0.13360135468035508, 0.10481311877752171, -0.26374447440929144, -0.039537780450087545, -0.06294948870186795, 0.22826635421033573, 0.059674174725320946, -0.040196438293186726, 0.022668395399826773, -0.0960723158964012, 0.0003535809462587829, 0.14785570083155516, -0.1822832794476739, 0.019315019654084067, -0.07085835073112345, -0.00707518990035885, -0.08958541031642278, -0.06596108702623008, -0.05875356080103885, 0.07645100439679302, 0.01261533385524442, -0.11201598420618766, -0.05812195684173789, 0.09931274064923673, 0.01798287438478287, -0.08039169574555648, -0.023750820896965133, -0.03800891039925218, -0.08444040913397483, 0.031205347395679962, -0.06604313254487683, -0.024053027717298035, 0.07253813680497985, -0.04210372635752686, 0.010992118114793299, 0.015451160789136003, 0.26917205012333334, 0.08946870611347774, -0.11437389709533485, -0.05493259935461421, 0.030408672195423758, -0.0364053037487039, 0.14246121149577462, 0.14312971807005978, 0.13429646349614693, 0.07841417882792118, 0.08630079921514992, 0.061589176646118425, -0.05139830680782748, -0.02006966400066612, -0.06024014924816206, -0.0776731254446186, -0.003793984915581265, -0.052052752951325554, -0.04599277228302484, 0.05669295102200799, 0.012936936192706859, -0.01306919435785034, -0.029971093914522483, 0.006699416109893742, 0.09628634115678537, 0.012124843290404863, -0.012066568448714005, 0.01056310109565986, -0.06699681025216468, -0.10547660806527671, 0.0633467454765332, 0.08167091157876231, -0.08535257769174963, 0.041006108437008255, -0.006650536371040099, -0.07419502822328934, -0.09983186035936772, 0.054394787309629926, 0.21245313996123846, -0.07742159454497108, -0.00594429357992591, -0.05377047122811108, -0.003574304136981744, -0.12665784302234476, 0.013682335318580126, 0.05883570331813277, -0.06516210804364603, 0.09447335194268125, 0.06526717794547196, -0.044958676649005866, -0.009389274015131928, -0.057941175922668064, 0.0665342386545808, -0.04029325828291152, 0.06939610394912973, -0.13631375073832422, -0.02231131015465995, -0.056331910596518306, -0.012897010889654802, -0.03243196881091533, -0.07499195919734193, -0.06882540518741422, -0.019621259744890845, -0.00660724443115864, -0.12970580571725138, 0.05188615959926455, -0.10767866763965946, 0.06439000520887965, -0.014174424607512276, -0.06155330411108466, 0.00652559577409568, 0.019838104030436263, -0.09019423104698414, 0.1777487799916863, -0.08279302018490549, -0.032063269514097215, 0.06528986624469021, 0.017711248191457432, -0.059596390309859325, -0.08537450854872568, -0.10134978660240775, 0.16489575978271467, -0.01708108023478222, -0.07719804723346395, 0.12589157269424558, -0.06934931205993315, -0.03538323228653825, -0.05414688306725173, -0.05503068050538714, -0.07603583187365238, 0.001387122675067966, 0.051126804479292715, -0.012545677668640433, 0.022987253624825225, -0.0425281098919433, 0.08659032274037617, 0.15527242236477276, 0.05639650302251527, 0.010026656530640578, 0.10277928592763125, 0.04692810851289963, -0.04914896597908321, 0.05701881856938294, 0.12841608969866902, 0.12220811621891792, 0.019591495890712192, -0.0668503557530449, 0.10471189610328664, -0.29247813399094447, 0.0026868640088266687, -0.10915578106819693, 0.07460151711176485, 0.03789992037911837, 0.07143807437942407, -0.026460605514232825, 0.12505335646756605, -0.1075706167526578, 0.055302146277462064, 0.03637764485521133, -0.009203781416987324, 0.0072905841053594695, 0.07077147827274945, -0.0033224848376464176, 0.10602195939653615, 0.0038981732098064626, 0.06168753953785523, 0.016405973793526863, 0.0864323165663263, 0.11013331615050515, 0.07592622838792232, -0.14158510719707298, 0.08812095880846244, -0.20970696032434913, -0.0023981994587593328, -0.07807746478094858, -0.08013890309853036, 0.0043913740502322844, -0.004725377347914833, -0.0679159893772108, 0.07387988310532788, -0.10992534815333926, 0.011583213027150749, 0.045539364059918076, -0.0790642755477936, -0.008400400917540112, 0.012087862527354689, -0.03316862701041847, 0.015246840938068665, -0.0645417405713339, -0.09613934517235871, -0.15116996448440806, 0.007037790380169333, 0.08620068492375617, 0.021373422034185484, 0.07757382868866182, 0.03988315308563416, -0.0874736389821013, 0.04759761084183196, -0.03466645289578712, 0.022868472768129245, -0.10683741265417733, -0.08646666333441798, 0.08111954507642209, 0.06325166940779034, -0.030626655777706145, 0.005605173641351198, -0.18965105013625763, 0.029144588832190774, 0.026633587419252005, -0.08337595799848645, 0.14736197062441725, -0.09818292785729259, -0.06930631939410496, -0.08280451330089461, -0.06289931942224021, -0.13858136991251946, 0.049159981632298656, -0.025768215263571245, 0.06155122461665753, 0.11969611284974373, -0.023898515147121404, -0.05373082621560828, -0.05092145176099952, -0.10803967059889015, -0.1380741493288831, 0.0499604085503154, 0.13764227220943503, -0.08673544863191365, -0.0889583972952332, 0.03125286984683944, 0.08944996605058919, 0.039554993020505774, -0.034625692912221576, -0.019645679918656688, 0.1032523299781432, 0.045135118496801414, 0.023561130254109372, 0.045245413386772355, -0.043710218343726084, -0.11136777344882223, 0.04178716395689478, 0.003935450091434033, 0.3487076764555058, -0.07408294464300838, 0.23933107068404896, 0.08142679819395537, 0.01643527317631354, -0.011330822584534805, -0.026532035593103322, -0.021670508854146585, 0.19487231177893305, -0.07693535596377322, -0.01789521375601134, -0.08068968311705076, -0.03808813658912261, 0.10049694094650354, -0.13617949171315977, 0.04591097552763856, 0.10907279255280938, -0.010121372329246488, -0.016959052672712006, -0.08307207106535482, 0.10766226459642954, -0.12614623062178734, -0.0927245785792874, 0.21205241558396454, 0.05754044958533657, -0.0968066136435626, -0.018671218296001352, 0.06541337394088109, 0.1524738794547196, 0.02473037299083968, -0.18141649918508773, -0.013405889332715635, -0.006751191304909489, 0.005410011095613217, -0.13669608869834796, 0.03974052049606108, 0.07064522952757779, 0.10041960956280202, -0.037618652153313115, 0.005819513473525548, 0.016160440160575194, 0.05348268896152576, 0.014655445262624103, 0.0006559602356573974, -0.004494071140860311, 0.05602150049778828, 0.04167646006305988, -0.13528968096887345, -0.10217780269740502, 0.04523738089094417, 0.09450021193978114, 0.20734046022477864, 0.024600583740456955, 0.026960127518194706, -0.064411851791884, -0.022881512714253913, -0.2629542833864426, 0.019848270430479115, 0.008394804234337035, 0.07739886193835398, 0.14440252181582516, -0.0005886510207233366, 0.037148136048484964, 0.10210026147675712, -0.029609119918080434, -0.037793113460982894, -0.009792761707423424, 0.13790603551352196, -0.13023618577690668, -0.06713962819304381, -0.18193946557936538, 0.0007492941666148712, -0.002056634062014653, 0.007226632301493966, 0.02541436646098897, 0.16057999359109895, -0.007738371685113039, -0.04696080809162698, 0.014314934039042746, 0.0045417185067439855, 0.12512496775444515, -0.11800279832673455, 0.05566266054716354, -0.02366325960855403, 0.02746153182499525, 0.04800673426223072, 0.057982312150328966, 0.020519336776585625, -0.10889456468470879, -0.007524879575835747, -0.00746540673707456, 0.049533733347366736, 0.16995361605564308, -0.01978697525981734, -0.08575900468075054, 0.09478746202434776, -0.07724859534278442, 0.012617504609157964, -0.08463421774117769, 0.08078087654494337, 0.04150738513053054, 0.003811252139609902, 0.07489253639319779, 0.11153713811932209, 0.10411186183952663, 0.12133751449560894, 0.02177164470102756, 0.09046760694770908, -0.014707625370740506, 0.01978503852525914, -0.09587314729591874, 0.03412924433824691, 0.03936008140759532, 0.06808455186613964, -0.16363253149877913, -0.10589839237741945, -0.0676906529020188, -0.029685676794356346, -0.01882165542192626, 0.08921436967396859, -0.15201126912993118, 0.15155699853628318, -0.139146514742285, -0.07658977699367624, -0.014850484591387388, -0.04808004142616145, -0.170049026980099, -0.06702016315477799, -0.11608984623197922, -0.1390610191207612, -0.0076151446492700985, 0.036576464778592985, 0.0718050399533509, 0.03542635540988333, -0.047298283092283, -0.11414716695703042, -0.10759138497744056, 0.06919891099307253, 0.12485417666492703, -0.19780512348780638, 0.012165889917257441, -0.03399612270908365, 0.012721246271579063, 0.0444306653007813, -0.024406064823750115, -0.045646579694059566, -5.195579864351815e-05, -0.022501610020082254, 0.027737099413153915, -0.011914897108530347, 0.017033641992143807, 0.027395346472973668, 0.10103212818986455, 0.015948378858790847, 0.04623700398010659, 0.08456891221735159, -0.017227481022635494, -0.07930628655115343, -0.024529265031051285, 0.03750712950890165, 0.0368577386068914, -0.02556287757903475]], "RN50": [[-0.010905312831117113, 0.006402008777919414, 0.000293035043576784, -5.2776572582905715e-05, 0.01229592272776018, 0.018608947223285117, 0.02610443602897815, 0.028443090356524488, 0.010165243140326316, -0.022284807061489602, -0.009467736257496919, -0.00434296518506658, 0.029779248236681884, 0.010149650855669814, 0.008826877211191074, -0.015913544049800967, -0.00031904415405084276, 0.01510405832155388, -0.0001756084227856875, -0.013195714328793769, -0.0019457511908535295, -0.006841001354065964, -0.010392865890974278, 0.0032915276977261354, -0.0064840385076388955, -0.0009393805617125819, -0.007140446150581029, -0.001441820965033586, -0.001978573252526248, -0.01164432491060128, 0.0042723344878450335, 0.008549895359695307, -0.007271614717857111, -0.0130434737109174, -0.007623456419647145, 0.008347521101276456, 0.0014547203564174822, 0.006612300953367206, 0.002999680576354951, 0.007520039618001952, 0.006490834319262302, -0.015826187705240854, 0.003952917399447171, -0.0014441443242538595, -0.014856497874002986, 0.005392190689988656, -0.0005998258751352409, -0.01549039984302066, -0.01374715574176905, 0.00636947403848364, 0.002412288938908069, 0.004376536912526509, -0.025922412707797753, -0.0015182448591445157, 0.013858838770465636, 0.029541217924771965, 0.0015490332158863138, 0.00863826572215134, 0.01591598581153603, 0.0026947103427884117, -0.015481919005688724, -0.007615636445339735, 0.008893600169814513, 0.00537186389634976, 0.0018997710838650223, -0.0010004619934647486, 1.4002449378661726e-05, 0.008029529721698533, -0.00021672578080219042, -0.0015519167605839007, 0.01086260284849042, 0.010154919488253407, -0.014899686885133358, 0.007828651113065003, -0.019807572157365033, 0.01166513051043722, -0.018159206228712813, 0.015201462218561553, 0.015395996949073775, 0.015546165828275768, 0.013238931908746483, -0.0013880007063918822, 0.001992204827889903, -0.0024272266081375687, 0.001172334234158064, 0.01485246125754758, 0.048979810632829184, 0.007534567627401184, -0.0004844683185303894, -0.01186498861954854, -0.006680186759650976, 0.0006304748082036014, -0.009978703882177338, 0.004831841421454983, -0.002657808426164419, -0.010871168405377378, -0.019054680109124485, -0.005544741984765866, -0.0003568901798880507, -0.004069822215327913, 0.006391534416851232, -0.003165117791448896, -0.005591374457536083, -0.004946260093192489, -0.0010072565402192114, 0.001440360588402494, -0.004184277907570513, -0.010967829737776725, 0.024144745331285432, -0.012794848603007171, 0.037532317295674855, -0.012144054088415485, 0.0017944731375357896, -0.011299846512431884, -0.008888885900970075, -0.0004071624196880464, -0.015204677649988145, 0.0005787013909860337, 0.011534772989187493, -0.006338497702897756, 0.017508150922977504, -0.0045520685902698255, 0.004053542519915515, -0.009538613925017873, -0.012751905518420061, 0.0011513819183718219, -0.002905960530184965, -0.00671299701972441, -0.0028202256050256476, -0.010356393337184668, -0.017538325301617728, -0.02424584520837634, 0.018412204523480056, 0.01611260062480045, 0.016456420532729735, -0.0021785015232515907, -0.008968605937447222, 0.0015371492304166506, 0.005264487779548561, 0.003447823034426396, 0.001398241007470884, 0.0073726820350177675, 0.008590658112877167, -0.004156406392548488, 0.016389055645726545, -0.003810057845658492, 0.012719113441587368, 0.013069526522933514, -0.002175066974678404, 0.0032324008282399444, -0.01024047383139905, -0.013376583032522043, -0.011122692327861098, 0.004554981156444297, 0.009740535168053866, -0.004308621155851542, -0.004840337233008969, 0.007005179482122375, 0.0006171212411467949, -0.01506057692928821, -0.0031237455124491086, 0.030098431843162632, 0.0015336696532617512, -0.0076722854691562885, 0.004205105388572021, -0.007100178272564284, -0.0040974260469651335, 0.01389416073975091, -0.0032882800316628926, -0.0008941054867726786, 0.03282627894048969, 0.01438468082810247, 0.000631313741472548, 0.004612859042251493, -0.0049168630017008465, 0.01719311343454902, 0.009105410778459307, -0.004896424464607717, 0.0027958132851535976, 9.039704801471096e-05, 0.003292061191941196, 0.0008019926072921663, 0.0002617432124324529, -0.007486947726773651, -0.009820333332955157, 0.013285326082979566, 0.0059219121943810665, -0.012084837266539509, 0.006559036265492735, -0.008498978690019171, -0.00344202210021014, -0.024643614055103253, 0.018997688944353275, -0.009363272956322458, 0.009428296817285933, 0.009812315698159763, -0.00809902171141719, 0.00041466084668327006, 0.01583195138205909, 0.0016599858675810123, 0.0008699775589163322, 0.009651170730244062, -0.06485815336508952, -0.0009004819949502946, -0.0021424582773318553, 0.01109707148197073, -0.009153768814445564, -0.00610368741959906, -0.012165590112249484, -0.0003341836633604034, -0.0042768205905826424, 0.006839284218310307, -0.00027303221016008165, 0.003289412857579189, 0.013973873894863043, 0.018816310702634034, 0.07771717212491741, 0.015570867851752476, 0.02241547947090798, 0.02588994829268219, 0.00040055909321285864, 0.015960029204554554, -0.003755996800943212, 0.002871049851975934, -0.01220443854925877, -0.003331374636804949, 0.0049766507890253026, -0.0027935485505628, -0.01448317600616753, -0.00032670696129140353, 0.011512769778260224, -0.00729767298955063, 0.0019745658332504515, -0.0076292868587846995, 0.00040317326457002935, 0.003897952987669551, 0.002949856964236992, 0.008086941603793026, 0.004821399720215867, -0.027811887155502965, 0.01287465811582098, 0.01063539077157432, -0.0021638182822216424, 0.005859409741490099, 0.006168856359264962, -0.0049375323485479124, -0.005830562181193116, 0.007462784940709687, -0.00963225309797986, 0.003982831674560347, 0.015456299519550685, -0.016133533432656152, 0.006942726112701055, -0.014282811718101217, 0.0016365930802048597, -0.0030108900241288556, -0.003998529150150165, 0.007952518441020484, -0.013294732707179492, -0.021661554909360527, 0.001967372610954558, 0.025474160451803753, 0.0004452920133587325, 0.022993516549416, 0.006981699911678081, -0.0020941928161294994, -0.0045630819173316855, 0.0008648814036202111, 0.0003471720818527461, -0.018272591902948353, 0.0014379608918237091, -0.0027603661977826095, 0.008737206981590303, 0.047974905992262167, 0.0059386524247923315, 0.01434573195499631, -0.008263311575114847, -0.0029230072944649212, -0.012461933956146793, -0.003356887843705741, -0.016195719187285493, -0.011123556769999756, 0.008472284627444912, 0.009858081774035446, 0.004881410688445899, 0.013745830396594737, -0.004278111499449685, -0.00758612420886868, 0.0069487330268977405, -0.006916417069650292, 0.0014004043444702287, -0.004289140769667736, -0.00512578678385381, 0.002981854237168995, -0.0029177243744435326, 0.0030996713491816897, 0.00882619729853999, 0.010535145349633224, -0.034832377204723194, 0.0005694384751989727, 0.019529685193144252, 0.0023071622965627906, -0.006006148807965297, 0.015813594837635826, 0.010502732852612877, -0.012419231567681401, 0.008003002051586954, -0.008881783493318635, 0.01570535056413076, -0.012445615422481812, -0.018163736027991147, 0.002901001130750064, -0.013548915310884917, 0.00622660020527973, -0.02072560999486951, -0.004536063629376545, -0.0028002771822366454, 0.014737374012308456, -0.01003958670378935, 0.0017058028380544457, -0.0008062829815653127, 0.005603104590892738, 0.0024077804792678632, 0.002653092295772328, 0.0008854617242214637, -0.00919748541720535, -0.0015973085077743748, 0.011204655776708419, 0.007049235103907822, 0.007587248037006318, -0.006866712451388553, 0.002436904661988455, -0.0003535907107885697, 0.011206476244386594, 0.0012625050070791592, 0.012623510743426367, -0.002962457974804189, -0.0030205787055024467, -0.0019812033900784213, -0.03085398900362521, 0.01215270770513111, -0.002527304270968471, -9.080034782947992e-05, 0.009503835899627397, -0.013380058827996309, 0.005591191899915599, -0.010079253268914233, 0.010668813132083085, 0.002089881861501096, -0.0033203032730435484, -0.0005829878123794878, -0.012616980086634151, 0.010100332372490502, 0.0005113563558386906, 0.029122465070636077, 0.004640682730502391, -0.00768640847185396, -0.0011223556949958918, -0.013026702481004505, -0.0008505851137102156, 0.022739675845001587, 0.035152022032518014, -0.000958034041131336, 0.009749246009525512, 0.004653427274887392, 0.0004539421680628588, -0.016575151317008433, 0.009195338598866305, -0.002253225727982536, -0.009469221208762028, 0.01347576995031533, 0.0056898446180592204, 0.00017359114954851876, 0.011112113114038622, -0.002796016246643326, 0.0040881984061150334, 0.007194684387114196, -0.006535709364080736, 0.007716826195301093, -0.008348812498828321, 0.007938427387904796, -0.016336983707393372, 0.00037712258679829303, -0.008678483577863614, -0.006688655934638652, 0.003979765666421796, -0.009236125222161136, -0.015273401125271731, -0.0005253191503442619, -0.004406483620302913, -0.0024189208330278734, -0.015035759435477362, 0.004324530875784917, 0.0013028082695862651, -0.003480104042989147, -0.008698645051138147, -0.03205848844937637, 0.00024986236702039693, 0.007326126354096179, 0.016032164968136083, -0.00804220558573716, 0.0025451259831017477, 0.005229593167698431, 0.012850629890904033, -0.008326779160340504, -0.011001467698175742, 0.015643605298030817, 0.0036406460137930682, -0.004362765694315465, -0.02868538460599919, -0.0033190781439024243, -0.013268883543864336, -0.0007465062060650929, -0.0034292920980631358, -0.007894096147850097, -0.001867480804375315, 0.015736273578048156, 0.0005444420238131028, -0.005023798238664619, 0.010868079604502156, 0.010687571485185251, 0.018394049037071657, -0.0018460866876410464, 0.002095442972815556, 0.004245871919366356, 0.00024141699693597444, -5.831177078430284e-05, 0.009944739401735053, -0.0052149515239638825, 0.006727776225082578, -0.001437636082797734, -0.013267292428253724, -0.0016147498519032666, 0.016015578087335013, 0.0050514885954972884, 0.02163630492831918, -0.005990173255303567, -0.009399987939930233, -0.006316770925353574, 0.02127871954454148, 0.005295214581197669, -0.004470856281796961, 0.009876084596642801, -0.019604035881036153, 0.005301101794413069, -0.0043949367369804935, -0.013527572908884877, -0.011589610393269667, -0.003986145206726198, -0.0002616695503484735, 0.029397215021453628, -0.0062996529483843235, -0.0029459752468465384, -0.006962081759234781, -0.012602535423540027, -0.00562325351756321, -0.009567255382080992, 0.0041778246550846125, 0.011262911536195437, 0.005301015772811195, -0.002093990142178745, 0.018244145780731604, 0.008303104364151404, 0.012167518054120124, 0.01234779555875497, 0.002675005691722025, 0.06893016545264362, -0.012807998418932777, 0.0074063872042210216, -0.004188201737995315, 0.005927807588089963, -0.008594932883084855, -0.0011176990781117118, 0.0033492616958920684, 0.003549671154293342, -0.030515447939375374, -0.004005827601267664, 0.0013967846272276829, -0.002069543317179726, 0.001448041499008669, -0.008597693519386457, 0.0027076652204314094, -0.009286384312083526, 0.0010887306386864657, -0.012440626628716665, 0.014091694156695242, 0.008015961687399787, -0.007876420104643128, 0.003347598326256861, 0.005806737520758515, -0.0055210370697399685, 0.0011081599260253127, -0.0035078143139895945, -0.009686752812466537, 0.002720007316521784, 0.02155511620850437, -0.009929685542433671, -0.0028841309309388195, 0.007994758345644292, 0.008684869173660514, 0.010620253850999076, 0.021200224570629877, 0.0008504087809830726, -0.011695737052547346, -0.004359577474064854, 0.006593787350375159, 0.00332982499347381, -0.008291211405691062, 0.0018754350966508815, 2.7141802478730137e-05, 0.025321602037454954, 0.0038069901507542915, 0.003806319806980196, -9.879186246590849e-05, -0.003974397476234479, -0.0024093671869001576, 0.0030022858451680605, 0.0008163817447915632, 0.002687886312354521, -0.0137165341953814, 0.0012612391636901278, -0.029799833460271905, -0.012941600007544766, -0.0004526465487243554, -0.00731419333137056, 0.001182569485880424, -0.08026050999221543, 0.005472594889140811, 0.012045857717112621, -0.02928280499737955, 0.001809998754108093, -0.0015757535088341446, -0.017608010505067138, 0.010610416839847085, 0.0001831449804814023, 0.0012405290481392341, -0.0011226767515548086, 0.004913121847361625, 0.00896238983111656, 0.021558639735489094, 0.01711642614587837, -0.008862197954542978, 0.02507705519784756, -0.001115135761493072, 0.0066833235193380115, -0.00015105678084573364, 0.01163290317205275, -0.016675610014161117, 0.004148257896539966, -0.017941299753674887, -0.001542893515555715, -0.011668693840293105, 0.011080234525151654, -0.002806021175222162, -0.0019936105110500706, -0.006120693272592404, 0.013161791576483305, -0.011926590581924341, 0.008264166233074818, -0.0016906692662603923, -0.023079221464610982, -0.009218006707366359, 0.0025891386323811326, 0.006545941735503146, 0.0016791517966719684, 0.00037323747856688204, 0.009355610215319124, 0.008127401638642982, -0.010071744093334742, 0.005245058485329607, -0.0034464493373133785, -0.000388901164846648, 7.65654950517108e-05, -0.009151053525037128, 0.0005269210970718428, -0.03476011977830679, -0.007433274630106526, -0.010352991382630988, -0.00773082822795025, -0.0026251910626347453, 0.0038700092918255765, -0.00047692833578936105, -0.008819079675085863, 0.0012923205501563651, -0.005275438832823124, -0.004399241494787315, 0.007155063666271755, -0.007617783096100368, 0.006597611496785956, -0.03431093369141183, 0.006121344019475369, -0.005299617742159969, 0.01936019324184251, 3.195126753564553e-05, -0.011533405965934756, -0.0007383721911286745, -0.010709262588314358, 0.009543053430835245, 0.004274242016240769, -0.013655492587754498, -0.009790855125209422, -0.006944180178271871, 0.005513649902280462, 0.007524915580529215, -0.008480947049623795, 0.0020513990120391676, 0.0030592518964871465, 0.020867068273596006, 0.006833032546511091, -0.024455790905654393, 0.008169988893084533, -0.007260019911434419, -0.017069988488729794, -0.013981844262772351, -0.00045903596216831654, 0.0029473410935397406, -0.008954056000748709, -0.018523856302967785, -0.010521380572102185, 0.011328416435660795, 0.009158072779109875, -0.00180040826604592, 0.0012050062691890502, -0.009586773624610682, 0.0059210984221703825, 0.015593753397720338, -0.008607549704380966, 0.014799601671725199, -0.0008342582520799745, 0.014976257048011744, 0.0005316953129859815, -0.02383977047459292, 0.007997045872429132, -0.01715019149555513, -0.007490437032049112, 0.006975032598889964, 0.0031181390934313254, -0.0073903485904200554, 0.0037654855183223254, -0.0009464103707298515, 0.004212292166082528, 0.024280498854714894, -0.006289232464419426, 0.0038400247120802277, 0.013355995846639872, -0.014830949398769845, 1.8823532782389057e-05, -0.003614959319087637, -0.005875415806782339, 0.010933874707144199, 0.0003672151781397864, -0.021998809330183097, -0.002532252328532234, -0.002651736938094792, 0.012617693323913713, -0.00032073959699725806, 0.00153444939971246, 0.005493859849566901, 0.00824715661301152, -0.010762562917303218, 0.021202268291910867, 0.000416023564554437, 0.0023306847482354397, -0.0022469857333869284, 0.004373077929511616, -0.020000818936943766, 0.016054559804427274, -0.005550807392466011, 0.015159042423088683, 0.003064171956864894, 0.0030986001405958336, -0.008708637782458046, 0.009658323804020553, -0.00012287054078906375, 0.0005899124254162438, 0.0005719044831633364, -0.007866983308014353, 0.005027816817644845, 0.0009204389626159252, 0.005186113583495057, 0.02497032459770266, 0.015951012115932764, -0.004584074675794474, 0.009507798518613188, 0.00993080396151177, -0.003913662983746367, 0.004047540147957664, 0.017054806184961274, -0.0002162733594183983, -0.009170131270052095, -0.016585823646237643, -0.015007081219956657, 0.016191312439043787, 0.002084731764292558, -0.0046638827082577375, 0.0008996445563693175, -0.011928454056677518, -0.0038365933345749295, 0.0027874039410414283, 0.0038424971906285393, 0.008738025912387067, -0.0063258397926909005, -0.0033790927455946557, 0.0005527595236283143, -0.00013879532839331172, 0.002963225427169747, 0.016240667500398626, -0.005585580478021093, -0.018540438053619237, 0.0006711846120128702, 0.002426313247061179, 0.005227149908761739, -0.004079851750994683, 0.014591812806919, -0.010959805545589028, -0.0007316584561500417, 0.010755208382169342, 0.00039099473391019903, -0.018968739965546853, -0.004254984542923892, -0.0066750733585153234, -0.007012056097389773, -0.0027544232954922593, 0.0014970488696402315, -0.00017024109083165813, 0.004889162217280227, -0.01126011613284523, 0.009866086216246659, -0.0038906280756453846, 0.009724255301719092, 0.0033856189663204342, 0.005954933000322221, 0.0007461602387070004, 0.007454165417022703, -0.0038145580911655426, -0.002140805986110329, -0.01544577426470898, 0.0012540380009416028, 0.0029351757612445114, -0.0037840970243428387, -0.002828282753086873, -0.002292004120660392, -0.005356776544869879, -0.008196782219109045, -0.014751841872320159, 0.01698976571470827, -0.016279140710896225, 0.00015844510689790676, 0.0074830086102192625, -0.00705505915270078, 0.015090659494038244, 0.00737183438183269, -0.008161384135365378, -0.0008332438535665791, -0.009013194788501608, 0.003428291431784527, -0.0018531994279998997, 5.688330579210825e-05, 0.0051446061815543205, 0.017016471829980465, -0.014068054951270805, 0.0002793248661585923, -0.00476290974533423, -0.005102605204809186, -0.0005113528256324673, 0.000979078455269378, -0.0029011507409345697, -0.00015164202422959696, 0.009637367547656418, 0.001288527428448514, 0.0006749510360318007, -0.005513065918206098, -0.0072379356141261285, 0.0003488519484008522, -0.005626802194338567, 0.0035570317880534007, -0.0058123171956709595, -0.0034647205964782454, 0.011340236208946652, 0.01502866805994825, 0.014539502860038408, -0.010454023491854392, 0.0109235311607507, -3.553712204809229e-05, -0.0004629931942687353, 0.0006311993789238318, 0.0006002334000653064, 0.0028683401632753768, -0.0204528181434753, -0.020708588689403486, 0.006549662338004477, -0.0019031159144771716, -0.007687541046994704, 0.010157877803204715, 0.0005346921670205585, -0.005376012486152872, -0.022144466107160105, -0.0020353431424721792, -0.013246096845470706, -0.020486704415542976, 0.0073952808388677415, 0.03031494079095625, 0.00839132105352881, 0.010536903135700328, 0.008666701212596538, 0.004438374012156157, 0.002773305372857532, -0.0188326809860854, -0.014690837520524238, -0.0048033110382743206, -0.008445476778989195, -0.001499577138736605, -0.017729748561527703, -1.3102261717172e-05, 0.0036833272010020836, 0.013867213481128403, -0.00645697714384006, 0.009293404855278476, 0.01451793684245173, 0.00038482566935964485, 0.0013142251794322662, -0.003165256239384731, -0.0008677082839990835, 0.01008953596884674, 0.006150717996035347, -0.01023412863547669, -0.0029952273003844617, -0.011449389825043703, 0.01719978484799769, -0.006779823797210426, 0.019450890605808197, -0.0006335313414499324, -0.004974534679149812, -0.00111000438892988, 0.026871686028292274, 0.003387294391376398, 0.00822583463354237, 0.000990948383980938, -0.008685871896371069, -0.008593376359499177, 0.0015175533203143079, -0.007761532725877854, 0.0019588414332466875, -0.010523833988260883, 0.0010158297665766387, -0.01771042012245171, 0.0005663042812384925, -0.005078910612663506, 0.005628619546275233, 0.007915874937288554, 0.004781702945243425, -0.0033206797235577684, -0.0003857996798780608, 0.0004505053986167211, -0.0210199350297243, 0.002215440027157584, 0.005532096593114155, 0.019904741932994074, -0.016627582093666046, -0.015401179258311146, 0.008166898065589834, 0.0062492849036220955, 0.005604260099755927, 0.007786009075093835, 0.013599467602021284, 0.01658884257844549, 0.017373129756557627, 0.020638817611458683, 0.007444579722019837, 0.01531279803477485, 0.006408458645448386, -0.02397682113910551, -0.0165438666978982, 0.002455455402847128, 0.01789487421391417, -0.0017148909537446663, 0.0017170142461491226, 0.004619313975481714, -0.005982068600966064, -0.008830465467942371, -0.000970990174344853, 0.01540596194810534, -0.009238750296933633, -0.007381510251851854, -0.001616118540950256, 0.02150614903940052, 0.005632320533728718, 0.005027285578936704, -0.0008597160750656442, -0.003664736604249233, -0.0003989518186192763, 0.007136595684224735, 0.013960333087485389, 0.010659238101626112, -0.006322252072069666, -0.029317124709841262, -0.003055581995967232, 0.0030546634373153163, 0.0038650327450660328, 0.00017863815505644385, 0.010009618798896778, 0.004518882272904293, 0.021111958321501072, -0.0012201874525441631, -0.014325467487775414, 0.040001448560242306, -0.0019944487090590734, -0.0030059668510873778, 0.005059483695753864, -0.0065083687714615574, 0.0024480135130017957, -0.008686908497263094, 0.008156263811101534, -0.03974071457605867, -0.011778525752082667, -0.02699271960484227, 0.008205053045007757, 0.019717964641661857, -0.0025525301303803098, 0.0035736783023929347, -0.004846505657742481, 0.0019303484363988042, -0.0019372905699346651, -0.005764107906828227, -0.009105044314344056, -0.005827150760425649, 0.003975985333183607, 0.020992306772393134, -0.00170194083895169, 0.009076614986522786, -0.0053936870815372885, -0.009870482000123944, 0.0018254676196438654, -0.0028892550969570083, -0.0028722149191796084, -0.010634059910723023, -0.0038323170650090567, 0.0008200384312831041, -0.0023736290023553437, -0.0033583206155418208, 0.008406499309751295, -0.008542140327096763, 0.0005802526346787132, 0.00011986487605785614, 0.006013357778913963, 0.01427552244666777, 0.011838080784478355, 0.02438681690235035, -0.010298293289813411, 0.008753140106942154, 0.0020326970496809802, -0.0009570197764383157, 0.00011153401623638767, -0.003559874197449283, -0.009244116515163303, -0.0021206932744929066, -0.028457548823183493, -0.011810469713503918, -0.003710210634872893, -0.0008008146287461906, -0.018411932258761487, 0.0007126257049835717, 0.005823780912838644, -0.027014849799698093, 0.00946191055294436, 0.009133918804427826, -0.00800376838059719, 0.0034047247983765624, 0.005602713822600826, 0.0006059373333360472, 0.005786094530343046, 0.006496569210917717, -0.014680666432952977, -0.0201068031436427, -0.04127300361816667, 0.0013822544449728265, 0.0018100889974649206, 0.002604041150453077, 0.005069633380321972, -0.009643027924508595, -0.013280261541675359, 0.008338749909910667, -0.0030237958782856848, 0.0010176175432916944, 0.01883834596080026, 0.004074364365479058, 0.006250929078445672, 0.009254575999640222, -0.01827689154984365, 0.0031009147511978016, 0.01373309679787743, 0.007885274235678526, -0.009905967720655946, 0.0192156365063859, 0.006213463750690792, 0.0021881155878197547, 0.010570045199761133, 0.011846303591450894, 0.006475712628403995, -0.015126750882351271, 0.004600832452113313, 0.015279542739116261, 0.011284047942853134, -0.002103824593437616, 0.015153748842383226, 0.005311325141201145, -0.0008303902340006557, -0.0026190373136350145, 0.008532267124286464, 0.007497034920369748, 0.006609005877919965, -0.006828056296973695, -0.046048264282631625, 0.007328847127378433, 0.0016157078328106885, -0.009520534860237979, 0.006607919364971344, -0.012854362970219213, -0.00032916927793340115, -0.01721992347935974, 0.0031978336262092357, -0.005742292508958579, 0.02100384470831401, 0.006543834188628091]], "RN50x4": [[-0.03265923444569768, 0.0174315594263906, 0.007029381136806892, -0.030710173112291978, -0.013018442182063123, 0.008403839527242746, -0.023129299877668506, 0.017844304628020745, 0.02630346004432233, 0.005983441232970634, -0.0035715857985617163, -0.02818956784165818, -0.009735479445204158, -0.0122698569779758, 0.003525123534695543, -0.01633027553067747, 0.0023940248362395713, -0.010643900976268474, -0.0013040882738042793, -0.0017869914152877939, -0.022482340897581103, 0.01936642946684873, 0.004229735912054604, -0.006890790822144662, -0.007118090825590239, -0.007262906798164603, -0.00789366503123593, 0.02348758913702962, -0.027160128834856318, -0.02374247731778551, 0.02425793143519712, -0.0033165894135904553, 0.00116960119721741, -0.003281790603001951, 0.009353264022918124, 0.004097161063725395, -0.0009064372544292709, 0.017328295097499204, 0.019842375092100396, -0.019322309824279703, -0.025168091649066103, -0.014780546951801827, -0.01645240905864271, -0.011916776678447115, -0.008493656965954749, -0.020097475138670714, -0.015934276293619765, -0.010174269075338515, 0.006217089458862424, -0.007825333104384703, 0.0074031444204355505, -0.0008601817746018648, -0.0031517941862103513, 0.010811754670806748, 0.007369555193757194, -0.00260328879869379, 0.041233282738395306, -0.019348907340718972, 0.014503362329134928, -0.009508749051462852, 0.0005074799337942049, -0.008812427917731607, 0.008326064135269587, 0.005677668865775086, -0.047785102346516735, 0.008262209706039974, 0.00943017103870786, 0.004031706714246999, -0.009004458151195997, 0.008482167742835502, 0.017533125883481923, 0.0052697593754798475, 0.010813304899955226, -0.03423719608806354, 0.006898533924057953, 0.01183812625970832, 0.018908243589879473, 0.020580468110899686, -0.018108631596585694, -0.011629654414523334, -0.010975893041595977, 0.002175865818208052, 0.006149178637913147, -0.014560569680803832, -0.013089316603099144, -0.008612775044432723, 0.021524809496944648, 0.008078855460892025, -0.01647600186708815, -0.00036491624503676064, 0.001431561016974876, -0.010842163463066342, -0.012652346396146116, -0.020408660820093863, 0.04468953827185177, -0.022697087835206794, -0.027789901185851184, 0.018097410263663332, 0.007790223917919048, -0.013690413911813517, 0.0037646019653870336, -0.006879311167799086, 0.01800800806447773, -0.005667600562001688, 0.00395719618266554, -0.007397196759914548, 0.017204315914524447, 0.022476663004583865, -0.011998559720739715, -0.023952210211179173, 0.011565349459407001, -0.003476546899003945, 0.0026229767338825996, -0.009075901631558584, -0.0004577529952864517, -0.02136701011239567, 0.009385754627416618, 0.04282679709519236, -0.007061357131622415, 0.01467712577683603, -0.011778764097516497, -0.026643594583904116, -0.013696653211465175, 0.0054820438511095654, 0.000270389167848834, 0.00709690075386438, 0.028577400785246895, 0.0019744757793064087, -0.026540588349301553, -0.0333966861015521, -0.0037132205514303976, -0.021104951929401736, 0.0018750257543773657, -0.00392198848718056, -0.0011279242287104173, -0.0110447947530998, 0.0033534070178150317, 0.02526426471449907, -0.08458002249244645, -0.002394225478716601, 0.005272472550233854, 0.009223616136245519, 0.014192607802309092, -0.01078622289482693, -0.02616139203716525, -0.02757316602833081, 0.014083685684180735, 0.006992061741278154, 0.005446477933478341, -0.013768537702690252, 0.03440498050664251, 0.0007180865535474979, -0.00884032899667868, -0.0030512919810095278, 0.022604804021909487, -0.007943538915518614, 0.003985720492072335, -0.028718040005760816, 0.018629239028378822, 0.021618632745946505, -0.005947353080397871, 0.008989316560974682, 0.0010709550649171536, -0.00160050319437354, -0.024046261612736524, 0.0005347005532022935, 0.011438933749740265, 0.02329327056875736, 0.004971592386727016, -0.0007057010444985832, -0.01143462758076519, -0.02033760248878267, -7.158093407786642e-06, -0.0013423685599378867, -0.002669785352798903, -0.020675264635099687, -0.0013444709019967518, -0.005837139671277455, -0.030781970926479864, -0.0039614205372621005, -0.018378155839229523, -0.004038677698848792, 0.029998823142449338, 0.012480017296468119, 0.024332150939363795, -0.016912551060681832, 0.014293717380686244, -0.017148379493283596, 0.009092127476683793, -0.003594373646762966, 1.337183423637209e-05, -0.017939914983961663, -0.010923544139570808, -0.028602010248600443, 0.0014953440380356755, -0.01783915560892386, 0.0006476664712416674, -0.01634342612319704, -0.03189788068469508, 0.0031735253862755592, 0.017855295632254374, 0.031337589752268837, 0.011267241111433304, -0.0025447342530517483, 0.007692667318913609, -0.014008808679516153, -0.008717565140504285, 0.017125160070018144, 0.006720621635864034, 0.015561905955710937, -0.01303578838283214, -0.0051488796120366465, -0.01575840801049305, -0.004144327174200226, -0.004067482878120385, -0.040186627703421754, 0.022500088029107836, -0.017939262742085665, -0.006295520779346599, 0.028384348651923175, 0.0028454304323832355, -0.02364728658608396, 0.008359449874283404, 0.011536994277290762, 0.0011332075332455777, 0.013831879917932898, 0.007367780504647529, 0.018738778630691365, 0.0008229155005310541, 0.04384117713843203, -0.012439221168600103, -0.01720192205380323, -0.013842818373356009, 0.00862697130614807, -0.007376899907112223, 0.00422649391417995, -0.021276898131546467, -0.009164251580057129, 0.01086025495786622, 0.014545982641673892, -0.017926848561731046, -0.010759965534118296, -0.006385324855003163, 0.0004481576086795483, -0.0007606476699259642, 0.020082116401028263, -0.001720297691762192, 0.008062037685384273, 0.021795885538555004, -0.013758515578401503, 0.0003713467843457891, -0.03160951868158569, -0.03171858971908456, 0.011944312450938056, 0.00919701994682216, -0.010758385370154593, -0.009268065555937644, 0.014250024096858896, 0.01667356633401865, -0.013505412067229418, -0.03366340894369441, 0.040287098328828916, -0.006923507605717517, 0.0021352505971633444, -0.005229667357505698, 0.0003239181342593928, -0.009579064794328488, 0.027463581470916234, 0.004205105922652861, -0.021085892289962428, -0.003960067407143501, -0.0013022485116424, -0.0056916491754603355, 0.015206336866853345, -0.002351908398881071, -0.001956327605236171, 0.0007559834034568039, 0.005098364547970477, 0.015106167993421437, 0.017261760624202253, -0.0077075494795968745, -0.00533801029494015, -0.021705869516933523, 0.014131982706242642, 0.0038879916582007642, 0.015678730138802655, 0.004923466510322855, 0.00249145675737349, -0.00434482951514712, 0.0025203033225719654, -0.020680631588343035, -0.010088901943956305, 0.01186843711516401, 0.020722864765959876, 0.02993368734797196, 0.011589512196151805, -0.01096559624524524, -0.0033174573661655586, -0.0038462616548402967, 0.01925107609922758, -0.008114942298911673, 0.01189804879330139, -0.0038616577087847467, 0.011189169292117884, -0.013961795455713534, 0.020913135032660565, 0.012333904085458442, 0.006565753854556495, 0.038103333804999896, 0.009980878852593297, -0.02464190070443973, 0.0020847656385806373, -0.013637540848473748, -0.038096295188351614, 0.020590590059595303, -0.023522231840146183, 0.022991925580430093, -0.03777505662822136, -0.004311582003446204, -0.00090749551215255, -0.0014676103572005845, 0.032633630985082915, -0.01127609751558635, 0.017220438319432953, -0.0006007595415850136, 0.0026715859996317157, 0.013538031310757604, 0.010473792811576746, 0.03363808334892357, 0.018203865979269422, 0.035554127711435735, 0.022564770809616906, -0.032361707737801615, -0.009793137389421641, -0.03500484413387113, 0.00048771972633906773, -0.0031860206730843776, 0.018206107930603538, -0.016887755634051448, -0.007598170464107412, 0.010969701716676595, 0.006435980716428813, -0.013721188916118439, 0.017251530411799144, -0.004466089299733435, -0.028219639169129784, 0.010500113843960279, 0.0036970335654580152, -0.0017044213635143703, 0.004350023154125903, -0.01173192074243869, -0.02110857325090786, -0.0024194619649525566, 0.0029094552954068522, 0.025493687442426877, -0.008600590148228579, -0.00831561251126865, -0.021243966276443114, -0.01757300522907917, 0.017914493139728177, -0.010551303462424654, 0.0010386971920778132, -0.005285390409927773, -0.016026662814777076, -0.02749060090380157, -0.01197956164253367, -0.02157519206662652, 0.08108309098514149, -0.02656141387758903, 0.007112237169710708, 0.01640180798220304, -0.021210721885747904, 0.006196776277962532, -0.0075698534200864245, 0.04508570164070563, 0.00021972765228310006, -0.0017818916867937897, 0.0054616008467093845, 0.018205014438440758, 0.00018648664207533786, 0.00586826917565825, 0.020808652000423953, 0.0004364064106179995, -0.012836990646935697, -0.030125301045690944, -0.011250438062111573, 0.016879985656286938, -0.0011881932201078965, 0.009914951774352348, -0.004410681674033652, -0.012242956282666037, 0.0006979380245609427, -0.013815737268655252, 0.005716831581681017, -0.011296295358803245, 0.0012742955686484343, 0.0137142751662126, -0.011756099648260538, 0.002895680657832802, -0.0006887167462221721, -0.025950468505143938, -0.008343142921658058, 0.006370268151434871, 0.004302289358006294, -0.022634173155356506, -0.019422461168912657, -0.002254976994434838, -0.00616348000386824, 0.0020544760702532624, 0.0046863328433113674, -0.00010299394803060307, -0.001197784535431086, -0.005060325150649851, -0.03467160173527946, -0.02484696123700433, -0.0074354863620571, 0.029046102456513675, 0.005564946734102744, -0.0006678010449038349, -0.007217384207407418, 0.002014302496124264, 0.001641661738812253, -0.01970402707206064, 0.02876373567162083, 0.004292018114312487, 0.012841258033675845, 0.0057492209971007095, 0.02398145039878964, 0.016456176159072484, -0.005778756018107701, -0.010806598724765196, -0.010368801200283207, -0.006320581315391516, 0.006177339460804348, -0.03959311414179205, 0.023546309919369342, 0.018334739909923327, 0.01048326772898463, 0.03145952157399311, 4.209419555891817e-05, 0.009766342237939148, 0.005292873052689627, 0.013455401160912227, 0.005782142471021114, -0.002697760944840721, -0.012380681456744102, -0.052674818519444805, 0.006894104314051681, -0.008192555089661558, 0.022140003809430518, -0.0066156485328529675, -0.007098268937212557, -0.034474157835618406, -0.014191623199319565, -0.03505128350640641, 0.027800748179892164, -0.006207340719663806, -0.001649319929789776, -0.011765010964970056, -0.028399221460227057, -0.013309632520533124, -0.02927467695893892, -0.006919901222831596, -0.00798783096693481, 0.03613118408704797, 0.01441103516197385, 0.006055604369355109, 0.020632967458367908, -0.014019430606414574, 0.004819558918617268, -0.022295057632757066, -0.0009406560228526602, -0.017822907915967388, 0.003879483789659431, -0.03362428369519173, -0.017600600799293604, 0.00022567583642201414, 0.008362313824158247, 0.02369734276104093, 0.022627340631448917, -0.00589430472558148, -0.006783021123484372, -0.03167786693150753, 0.009789906008883123, 0.00855993678113741, 0.006253578657221992, -0.031860113780714384, 0.015614411409618925, 0.011782960589078057, 0.002048673334259096, -0.02431692542874872, 0.013474142770539672, -0.021405015799832686, 0.004510119743084334, 0.004563077579143986, 0.014613733514075128, -0.006241360185019552, 0.03050514530120894, -0.02631708898338241, -0.01732135293884576, 0.028595903783455088, 0.020132911217318836, 0.005907573263150211, 0.0025933419311884053, 0.0017069381921653282, 0.009383590149851509, 0.0040572087993621655, 0.0008899737276484318, -0.02022118592003933, 0.0005638406318934428, 0.02757339657571722, 0.011040577135751456, 0.01731412760361331, -0.0034952149531333153, 0.05448493789951794, -0.004072945645751987, 0.019064118399652764, 0.01711096787388678, -0.015187721044809352, -0.025536965967649896, 0.0021570097187762565, 0.039281243702288915, 0.0113796926466396, -0.013805891898787061, 0.011089738031818203, -0.024558080548481746, 0.024525441361183332, 0.019034737206306104, -0.008403681559819449, 0.019415824210904226, 0.00974693792305642, 0.01489898232077751, -0.008353004311549173, -0.004897814011370762, -0.005223039122687405, -0.013370416950657197, -0.022895969698081664, 0.0037372670130596058, -0.001984497286952481, 0.01344652573239477, -0.024814684717158152, -0.022343176193458547, 0.019504715768402844, 0.016254664733610265, -0.07015867235693563, -0.007975371557394674, -0.013451356798950995, -0.002752318198345659, 0.014306531805244714, -0.0012911812872237799, -0.036201673984043066, -0.020171828497195458, -0.0217544093275071, -0.012841509766716117, -0.020914758783153065, 0.007345168119583538, 0.01173848344072074, -0.007589620494796489, 0.009173889347474354, 0.011160320653919201, 0.019090587686395762, -0.019446447927970425, -0.0039931481952569054, -0.014298190446558364, 0.001586278597763767, 0.004315089788508316, -0.01675599182440861, 0.030444180039436053, 0.014059680626191647, -0.022488234245449802, 0.01331337969465835, 0.0026810699485296384, 0.00576408361651065, -0.01576836601904892, -0.00963215755175, -0.02681482934268161, -0.012954729507384027, -0.008485559793151892, 0.025322971054537763, 0.010614582575537402, -0.001192635875369091, -0.010008278681501698, 0.01577347393980829, 0.00883331501065376, -0.003285334086853137, -0.00848213050142257, -0.009510008268570147, 0.004532759764545616, 0.030271098496355935, 0.0019484898452281345, -0.005401439433847378, 0.004432279646159634, 0.015477477773150556, -0.017533198934391054, 0.0035733815549517647, -0.0006059894740566579, -0.007673374565770221, 0.007783698391401745, 0.00014663714630851088, 0.023016604371854175, -0.010283442655424605, 0.053059319379223355, 0.04632536817307248, -0.008805715609637556, 0.0014833489085810583, -0.005021759694155018, -0.003085399102746809, 0.009384310018370746, 0.010203640737833999, -0.02895129516749342, 0.0038026471697455936, -0.0008953826860687925, -0.02059944921271374, -0.009584304773795387, 0.014927097244281977, -0.006297548177167826, 0.04470329155228759, -0.0011576904294307254, -0.0015028260580423616, 0.01105196815660623, 0.0017199414985929916, -0.015405425883136079, -0.008115281940547453, 0.007263410413867186, -0.0035088811742962794, -0.010029279938356308, -0.02057062667287356, 0.02324692321380184, -0.0006003311534531081, -0.0202812411877517, -0.030609391670554424, -0.021275522243128488, 0.01176124541803216, -0.03361161903799934, -0.010212778079306825, 0.010149849167572509, 0.004402321032511507, -0.018749170648860995, 0.015120731752123228, 0.0375292266657664]]}
\ No newline at end of file
diff --git a/vqgan.py b/vqgan.py
deleted file mode 100755
index b1ac835..0000000
--- a/vqgan.py
+++ /dev/null
@@ -1,221 +0,0 @@
-# Originally made by Katherine Crowson (https://github.com/crowsonkb, https://twitter.com/RiversHaveWings)
-# The original BigGAN+CLIP method was by https://twitter.com/advadnoun
-
-from DrawingInterface import DrawingInterface
-
-import sys
-import subprocess
-sys.path.append('taming-transformers')
-import os.path
-import torch
-from torch.nn import functional as F
-from torchvision.transforms import functional as TF
-
-from omegaconf import OmegaConf
-from taming.models import cond_transformer, vqgan
-
-from util import wget_file
-
-vqgan_config_table = {
-    "imagenet_f16_1024": 'http://mirror.io.community/blob/vqgan/vqgan_imagenet_f16_1024.yaml',
-    "imagenet_f16_16384": 'https://heibox.uni-heidelberg.de/d/a7530b09fed84f80a887/files/?p=%2Fconfigs%2Fmodel.yaml&dl=1',
-    "imagenet_f16_16384m": 'http://mirror.io.community/blob/vqgan/vqgan_imagenet_f16_16384.yaml',
-    "openimages_f16_8192": 'https://heibox.uni-heidelberg.de/d/2e5662443a6b4307b470/files/?p=%2Fconfigs%2Fmodel.yaml&dl=1',
-    "coco": 'https://dl.nmkd.de/ai/clip/coco/coco.yaml',
-    "faceshq": 'https://drive.google.com/uc?export=download&id=1fHwGx_hnBtC8nsq7hesJvs-Klv-P0gzT',
-    "wikiart_1024": 'https://github.com/pixray/pixray/releases/download/v1.7.1/vqgan_wikiart_1024.yaml',
-    "wikiart_1024m": 'http://mirror.io.community/blob/vqgan/wikiart.yaml',
-    "wikiart_16384": 'https://github.com/pixray/pixray/releases/download/v1.7.1/vqgan_wikiart_16384.yaml',
-    "wikiart_16384m": 'http://eaidata.bmk.sh/data/Wikiart_16384/wikiart_f16_16384_8145600.yaml',
-    "wikiart_16384m2": 'http://mirror.io.community/blob/vqgan/wikiart_16384.yaml',
-    "sflckr": 'https://heibox.uni-heidelberg.de/d/73487ab6e5314cb5adba/files/?p=%2Fconfigs%2F2020-11-09T13-31-51-project.yaml&dl=1',
-}
-vqgan_checkpoint_table = {
-    "imagenet_f16_1024": 'http://mirror.io.community/blob/vqgan/vqgan_imagenet_f16_1024.ckpt',
-    "imagenet_f16_16384": 'https://heibox.uni-heidelberg.de/d/a7530b09fed84f80a887/files/?p=%2Fckpts%2Flast.ckpt&dl=1',
-    "imagenet_f16_16384m": 'http://mirror.io.community/blob/vqgan/vqgan_imagenet_f16_16384.ckpt',
-    "openimages_f16_8192": 'https://heibox.uni-heidelberg.de/d/2e5662443a6b4307b470/files/?p=%2Fckpts%2Flast.ckpt&dl=1',
-    "coco": 'https://dl.nmkd.de/ai/clip/coco/coco.ckpt',
-    "faceshq": 'https://app.koofr.net/content/links/a04deec9-0c59-4673-8b37-3d696fe63a5d/files/get/last.ckpt?path=%2F2020-11-13T21-41-45_faceshq_transformer%2Fcheckpoints%2Flast.ckpt',
-    "wikiart_1024": 'https://github.com/pixray/pixray/releases/download/v1.7.1/vqgan_wikiart_1024.ckpt',
-    "wikiart_1024m": 'http://mirror.io.community/blob/vqgan/wikiart.ckpt',
-    "wikiart_16384": 'https://github.com/pixray/pixray/releases/download/v1.7.1/vqgan_wikiart_16384.ckpt',
-    "wikiart_16384m": 'http://eaidata.bmk.sh/data/Wikiart_16384/wikiart_f16_16384_8145600.ckpt',
-    "wikiart_16384m2": 'http://mirror.io.community/blob/vqgan/wikiart_16384.ckpt',
-    "sflckr": 'https://heibox.uni-heidelberg.de/d/73487ab6e5314cb5adba/files/?p=%2Fcheckpoints%2Flast.ckpt&dl=1'
-}
-
-class ReplaceGrad(torch.autograd.Function):
-    @staticmethod
-    def forward(ctx, x_forward, x_backward):
-        ctx.shape = x_backward.shape
-        return x_forward
-
-    @staticmethod
-    def backward(ctx, grad_in):
-        return None, grad_in.sum_to_size(ctx.shape)
-
-replace_grad = ReplaceGrad.apply
-
-def vector_quantize(x, codebook):
-    d = x.pow(2).sum(dim=-1, keepdim=True) + codebook.pow(2).sum(dim=1) - 2 * x @ codebook.T
-    indices = d.argmin(-1)
-    x_q = F.one_hot(indices, codebook.shape[0]).to(d.dtype) @ codebook
-    return replace_grad(x_q, x)
-
-class ClampWithGrad(torch.autograd.Function):
-    @staticmethod
-    def forward(ctx, input, min, max):
-        ctx.min = min
-        ctx.max = max
-        ctx.save_for_backward(input)
-        return input.clamp(min, max)
-
-    @staticmethod
-    def backward(ctx, grad_in):
-        input, = ctx.saved_tensors
-        return grad_in * (grad_in * (input - input.clamp(ctx.min, ctx.max)) >= 0), None, None
-
-clamp_with_grad = ClampWithGrad.apply
-
-global_model_cache = {}
-
-class VqganDrawer(DrawingInterface):
-    @staticmethod
-    def add_settings(parser):
-        parser.add_argument("--vqgan_model", type=str, help="VQGAN model", default='imagenet_f16_16384', dest='vqgan_model')
-        parser.add_argument("--vqgan_config", type=str, help="VQGAN config", default=None, dest='vqgan_config')
-        parser.add_argument("--vqgan_checkpoint", type=str, help="VQGAN checkpoint", default=None, dest='vqgan_checkpoint')
-        return parser
-
-    def __init__(self, settings):
-        super(DrawingInterface, self).__init__()
-        torch.hub.set_dir("models")
-        self.vqgan_model = settings.vqgan_model
-
-    def load_model(self, settings, device):
-        global global_model_cache
-        gumbel = False
-
-        if settings.vqgan_config is None:
-            config_path = f'models/vqgan_{self.vqgan_model}.yaml'
-        else:
-            config_path = settings.config_path
-
-        if settings.vqgan_checkpoint is None:
-            checkpoint_path = f'models/vqgan_{self.vqgan_model}.ckpt'
-        else:
-            checkpoint_path = settings.checkpoint_path
-
-        if not os.path.exists(config_path):
-            wget_file(vqgan_config_table[self.vqgan_model], config_path)
-        if not os.path.exists(checkpoint_path):
-            wget_file(vqgan_checkpoint_table[self.vqgan_model], checkpoint_path)
-
-        if checkpoint_path in global_model_cache:
-            print("reusing cached copy of model ", checkpoint_path)
-            cache_hit = global_model_cache[checkpoint_path]
-            model = cache_hit["model"]
-            gumbel = cache_hit["gumbel"]
-        else:
-            # TODO: unload if cache not empty?
-            config = OmegaConf.load(config_path)
-            if config.model.target == 'taming.models.vqgan.VQModel':
-                model = vqgan.VQModel(**config.model.params)
-                model.eval().requires_grad_(False)
-                model.init_from_ckpt(checkpoint_path)
-            elif config.model.target == 'taming.models.vqgan.GumbelVQ':
-                model = vqgan.GumbelVQ(**config.model.params)
-                model.eval().requires_grad_(False)
-                model.init_from_ckpt(checkpoint_path)
-                gumbel = True
-            elif config.model.target == 'taming.models.cond_transformer.Net2NetTransformer':
-                parent_model = cond_transformer.Net2NetTransformer(**config.model.params)
-                parent_model.eval().requires_grad_(False)
-                parent_model.init_from_ckpt(checkpoint_path)
-                model = parent_model.first_stage_model
-            else:
-                raise ValueError(f'unknown model type: {config.model.target}')
-            del model.loss
-            model = model.to(device)
-            cache_entry = {"model": model, "gumbel": gumbel}
-            global_model_cache[checkpoint_path] = cache_entry
-
-        # model, gumbel = load_vqgan_model(vqgan_config, vqgan_checkpoint)
-        self.model = model
-        self.gumbel = gumbel
-        self.device = device
-
-        if gumbel:
-            self.e_dim = 256
-            self.n_toks = model.quantize.n_embed
-            self.z_min = model.quantize.embed.weight.min(dim=0).values[None, :, None, None]
-            self.z_max = model.quantize.embed.weight.max(dim=0).values[None, :, None, None]
-        else:
-            self.e_dim = model.quantize.e_dim
-            self.n_toks = model.quantize.n_e
-            self.z_min = model.quantize.embedding.weight.min(dim=0).values[None, :, None, None]
-            self.z_max = model.quantize.embedding.weight.max(dim=0).values[None, :, None, None]
-
-    def get_opts(self, decay_divisor):
-        return None
-
-    def rand_init(self, toksX, toksY):
-        # legacy init
-        one_hot = F.one_hot(torch.randint(self.n_toks, [toksY * toksX], device=self.device), n_toks).float()
-        if self.gumbel:
-            self.z = one_hot @ self.model.quantize.embed.weight
-        else:
-            self.z = one_hot @ self.model.quantize.embedding.weight
-
-        self.z = z.view([-1, toksY, toksX, e_dim]).permute(0, 3, 1, 2)
-        self.z.requires_grad_(True)
-
-    def init_from_tensor(self, init_tensor):
-        self.z, *_ = self.model.encode(init_tensor)        
-        self.z.requires_grad_(True)
-
-    def reapply_from_tensor(self, new_tensor):
-        new_z, *_ = self.model.encode(new_tensor)        
-        with torch.no_grad():
-            self.z.copy_(new_z)
-
-    def get_z_from_tensor(self, ref_tensor):
-        z_ref, *_ = self.model.encode(ref_tensor)
-        return z_ref
-
-    def get_num_resolutions(self):
-        return self.model.decoder.num_resolutions
-
-    def synth(self, cur_iteration):
-        if self.gumbel:
-            z_q = vector_quantize(self.z.movedim(1, 3), self.model.quantize.embed.weight).movedim(3, 1)       # Vector quantize
-        else:
-            z_q = vector_quantize(self.z.movedim(1, 3), self.model.quantize.embedding.weight).movedim(3, 1)
-        return clamp_with_grad(self.model.decode(z_q).add(1).div(2), 0, 1)
-
-    @torch.no_grad()
-    def to_image(self):
-        out = self.synth(None)
-        return TF.to_pil_image(out[0].cpu())
-
-    def clip_z(self):
-        with torch.no_grad():
-            self.z.copy_(self.z.maximum(self.z_min).minimum(self.z_max))
-
-    def get_z(self):
-        return self.z
-
-    def set_z(self, new_z):
-        with torch.no_grad():
-            return self.z.copy_(new_z)
-
-    def get_z_copy(self):
-        return self.z.clone()
-        # return model, gumbel
-
-### EXTERNAL INTERFACE
-### load_vqgan_model
-
-if __name__ == '__main__':
-    main()


Test patch:
diff --git a/tests/test_pixray.py b/tests/test_pixray.py
deleted file mode 100644
index 57bd659..0000000
--- a/tests/test_pixray.py
+++ /dev/null
@@ -1,50 +0,0 @@
-import unittest
-from pixray import *
-
-class TestPixrayMethods(unittest.TestCase):
-    def setup_test_parser(self):
-        parser = argparse.ArgumentParser()
-        return setup_parser(parser)
-    
-    def get_args_for_apply_overlay_test(self, overlay_image, overlay_every, overlay_offset, overlay_until):
-        settings = { 
-                     '--overlay_image': overlay_image,
-                     '--overlay_every': overlay_every,
-                     '--overlay_offset': overlay_offset,
-                     '--overlay_until': overlay_until 
-                   }
-
-        return self.parse_dictionary_to_args(settings)
-
-    def parse_dictionary_to_args(self, settings_dict):
-        parser = self.setup_test_parser()
-        args = []
-        for key, value in settings_dict.items():
-            if value is not None:
-                args.append(key)
-                args.append(value)
-            
-        return parser.parse_args(args)
-
-    def test_apply_overlay_all_true(self):
-        args = self.get_args_for_apply_overlay_test('image.png', '1', '0', '100')
-        self.assertEqual(apply_overlay(args, 10), True)
-
-    def test_apply_overlay_no_overlay_image(self):
-        args = self.get_args_for_apply_overlay_test(None, '1', '0', '100')
-        self.assertEqual(apply_overlay(args, 10), False)
-
-    def test_apply_overlay_not_at_offset(self):
-        args = self.get_args_for_apply_overlay_test('image.png', '5', '10', '100')
-        self.assertEqual(apply_overlay(args, 10), False)
-
-    def test_apply_overlay_overlay_until_none(self):
-        args = self.get_args_for_apply_overlay_test('image.png', '5', '10', None)
-        self.assertEqual(apply_overlay(args, 10), False)
-
-    def test_apply_overlay_less_than_overlay_until(self):
-        args = self.get_args_for_apply_overlay_test('image.png', '1', '0', '5')
-        self.assertEqual(apply_overlay(args, 10), False)
-
-if __name__ == '__main__':
-    unittest.main()