Full Code of Paranioar/SGRAF for AI

main 50d0c6f9caf7 cached
13 files
735.6 KB
322.6k tokens
85 symbols
1 requests
Download .txt
Showing preview only (755K chars total). Download the full file or copy to clipboard to get everything.
Repository: Paranioar/SGRAF
Branch: main
Commit: 50d0c6f9caf7
Files: 13
Total size: 735.6 KB

Directory structure:
gitextract_96luedpf/

├── README.md
├── data/
│   └── data.md
├── data.py
├── evaluation.py
├── model.py
├── opts.py
├── requirements.txt
├── runs/
│   └── runs.md
├── train.py
├── visualize.py
├── vocab/
│   ├── coco_precomp_vocab.json
│   └── f30k_precomp_vocab.json
└── vocab.py

================================================
FILE CONTENTS
================================================

================================================
FILE: README.md
================================================
# SGRAF
*PyTorch implementation for AAAI2021 paper of [**“Similarity Reasoning and Filtration for Image-Text Matching”**](https://drive.google.com/file/d/1tAE_qkAxiw1CajjHix9EXoI7xu2t66iQ/view?usp=sharing).* 

*It is built on top of the [SCAN](https://github.com/kuanghuei/SCAN) and [Awesome_Matching](https://github.com/Paranioar/Awesome_Matching_Pretraining_Transfering).* 

*We have released two versions of SGRAF: **Branch `main` for python2.7**; **Branch `python3.6` for python3.6**.*  

*If any problems, please contact me at r1228240468@gmail.com. (r1228240468@mail.dlut.edu.cn is deprecated)*

## Introduction

**The framework of SGRAF:**

<img src="./fig/model.png" width = "100%" height="50%">

**The updated results (Better than the original paper)**
<table>
   <tr> <td rowspan="2">Dataset</td> <td rowspan="2", align="center">Module</td> 
        <td colspan="3", align="center">Sentence retrieval</td> <td colspan="3", align="center">Image retrieval</td> </tr>
   <tr> <td>R@1</td><td>R@5</td><td>R@10</td> <td>R@1</td><td>R@5</td><td>R@10</td> </tr>
   <tr> <td rowspan="3">Flick30k</td>
        <td>SAF</td> <td>75.6</td><td>92.7</td><td>96.9</td> <td>56.5</td><td>82.0</td><td>88.4</td> </tr>
   <tr> <td>SGR</td> <td>76.6</td><td>93.7</td><td>96.6</td> <td>56.1</td><td>80.9</td><td>87.0</td> </tr>
   <tr> <td>SGRAF</td> <td>78.4</td><td>94.6</td><td>97.5</td> <td>58.2</td><td>83.0</td><td>89.1</td> </tr>
   <tr> <td rowspan="3">MSCOCO1k</td>
        <td>SAF</td> <td>78.0</td><td>95.9</td><td>98.5</td> <td>62.2</td><td>89.5</td><td>95.4</td> </tr>
   <tr> <td>SGR</td> <td>77.3</td><td>96.0</td><td>98.6</td> <td>62.1</td><td>89.6</td><td>95.3</td> </tr>
   <tr> <td>SGRAF</td> <td>79.2</td><td>96.5</td><td>98.6</td> <td>63.5</td><td>90.2</td><td>95.8</td> </tr>
   <tr> <td rowspan="3">MSCOCO5k</td>
        <td>SAF</td> <td>55.5</td><td>83.8</td><td>91.8</td> <td>40.1</td><td>69.7</td><td>80.4</td> </tr>
   <tr> <td>SGR</td> <td>57.3</td><td>83.2</td><td>90.6</td> <td>40.5</td><td>69.6</td><td>80.3</td> </tr>
   <tr> <td>SGRAF</td> <td>58.8</td><td>84.8</td><td>92.1</td> <td>41.6</td><td>70.9</td><td>81.5</td> </tr>
  

   
</table> 

## Requirements 
We recommended the following dependencies for ***Branch `main`***.

*  Python 2.7  
*  [PyTorch (>=0.4.1)](http://pytorch.org/)    
*  [NumPy (>=1.12.1)](http://www.numpy.org/)   
*  [TensorBoard](https://github.com/TeamHG-Memex/tensorboard_logger)  
*  Punkt Sentence Tokenizer:
```python
import nltk
nltk.download()
> d punkt
```

## Download data and vocab
We follow [SCAN](https://github.com/kuanghuei/SCAN) to obtain image features and vocabularies, which can be downloaded by using:

```bash
https://www.kaggle.com/datasets/kuanghueilee/scan-features
```
Another download link is available below:

```bash
https://drive.google.com/drive/u/0/folders/1os1Kr7HeTbh8FajBNegW8rjJf6GIhFqC
```

## Pre-trained models and evaluation
The pretrained models are only for **Branch `python3.6`(python3.6)**, not for **Branch `main`(python2.7)**.  
Modify the **model_path**, **data_path**, **vocab_path** in the `evaluation.py` file. Then run `evaluation.py`:

```bash
python evaluation.py
```

Note that `fold5=True` is only for evaluation on mscoco1K (5 folders average) while `fold5=False` for mscoco5K and flickr30K. Pretrained models and Log files can be downloaded from [Flickr30K_SGRAF](https://drive.google.com/file/d/1OBRIn1-Et49TDu8rk0wgP0wKXlYRk4Uj/view?usp=sharing) and [MSCOCO_SGRAF](https://drive.google.com/file/d/1SpuORBkTte_LqOboTgbYRN5zXhn4M7ag/view?usp=sharing).

## Training new models from scratch
Modify the **data_path**, **vocab_path**, **model_name**, **logger_name** in the `opts.py` file. Then run `train.py`:

For MSCOCO:

```bash
(For SGR) python train.py --data_name coco_precomp --num_epochs 20 --lr_update 10 --module_name SGR
(For SAF) python train.py --data_name coco_precomp --num_epochs 20 --lr_update 10 --module_name SAF
```

For Flickr30K:

```bash
(For SGR) python train.py --data_name f30k_precomp --num_epochs 40 --lr_update 30 --module_name SGR
(For SAF) python train.py --data_name f30k_precomp --num_epochs 30 --lr_update 20 --module_name SAF
```

## Reference

If SGRAF is useful for your research, please cite the following paper:

      @inproceedings{Diao2021SGRAF,
         title={Similarity reasoning and filtration for image-text matching},
         author={Diao, Haiwen and Zhang, Ying and Ma, Lin and Lu, Huchuan},
         booktitle={Proceedings of the AAAI conference on artificial intelligence},
         volume={35},
         number={2},
         pages={1218--1226},
         year={2021}
      }

## License

[Apache License 2.0](http://www.apache.org/licenses/LICENSE-2.0).  




================================================
FILE: data/data.md
================================================
The folder used to store the data:

**File Structure**  
```
├── data/
|   ├── f30k_precomp/
|   ├── coco_precomp/
```


================================================
FILE: data.py
================================================
"""Data provider"""

import torch
import torch.utils.data as data

import os
import nltk
import numpy as np


class PrecompDataset(data.Dataset):
    """
    Load precomputed captions and image features
    Possible options: f30k_precomp, coco_precomp
    """

    def __init__(self, data_path, data_split, vocab):
        self.vocab = vocab
        loc = data_path + '/'

        # load the raw captions
        self.captions = []
        with open(loc+'%s_caps.txt' % data_split, 'rb') as f:
            for line in f:
                self.captions.append(line.strip())

        # load the image features
        self.images = np.load(loc+'%s_ims.npy' % data_split)
        self.length = len(self.captions)

        # rkiros data has redundancy in images, we divide by 5
        if self.images.shape[0] != self.length:
            self.im_div = 5
        else:
            self.im_div = 1

        # the development set for coco is large and so validation would be slow
        if data_split == 'dev':
            self.length = 5000

    def __getitem__(self, index):
        # handle the image redundancy
        img_id = index/self.im_div
        image = torch.Tensor(self.images[img_id])
        caption = self.captions[index]
        vocab = self.vocab

        # convert caption (string) to word ids.
        tokens = nltk.tokenize.word_tokenize(
            str(caption).lower().decode('utf-8'))
        caption = []
        caption.append(vocab('<start>'))
        caption.extend([vocab(token) for token in tokens])
        caption.append(vocab('<end>'))
        target = torch.Tensor(caption)

        return image, target, index, img_id

    def __len__(self):
        return self.length


def collate_fn(data):
    """
    Build mini-batch tensors from a list of (image, caption, index, img_id) tuples.
    Args:
        data: list of (image, target, index, img_id) tuple.
            - image: torch tensor of shape (36, 2048).
            - target: torch tensor of shape (?) variable length.
    Returns:
        - images: torch tensor of shape (batch_size, 36, 2048).
        - targets: torch tensor of shape (batch_size, padded_length).
        - lengths: list; valid length for each padded caption.
    """
    # Sort a data list by caption length
    data.sort(key=lambda x: len(x[1]), reverse=True)
    images, captions, ids, img_ids = zip(*data)

    # Merge images (convert tuple of 2D tensor to 3D tensor)
    images = torch.stack(images, 0)

    # Merget captions (convert tuple of 1D tensor to 2D tensor)
    lengths = [len(cap) for cap in captions]
    targets = torch.zeros(len(captions), max(lengths)).long()
    for i, cap in enumerate(captions):
        end = lengths[i]
        targets[i, :end] = cap[:end]

    return images, targets, lengths, ids


def get_precomp_loader(data_path, data_split, vocab, opt, batch_size=100,
                       shuffle=True, num_workers=2):
    dset = PrecompDataset(data_path, data_split, vocab)

    data_loader = torch.utils.data.DataLoader(dataset=dset,
                                              batch_size=batch_size,
                                              shuffle=shuffle,
                                              pin_memory=True,
                                              collate_fn=collate_fn)
    return data_loader


def get_loaders(data_name, vocab, batch_size, workers, opt):
    # get the data path
    dpath = os.path.join(opt.data_path, data_name)

    # get the train_loader
    train_loader = get_precomp_loader(dpath, 'train', vocab, opt,
                                      batch_size, True, workers)
    # get the val_loader
    val_loader = get_precomp_loader(dpath, 'dev', vocab, opt,
                                    100, False, workers)
    return train_loader, val_loader


def get_test_loader(split_name, data_name, vocab, batch_size, workers, opt):
    # get the data path
    dpath = os.path.join(opt.data_path, data_name)

    # get the test_loader
    test_loader = get_precomp_loader(dpath, split_name, vocab, opt,
                                     100, False, workers)
    return test_loader


================================================
FILE: evaluation.py
================================================
"""Evaluation"""

from __future__ import print_function
import os
import sys
import time

import torch
import numpy as np

from data import get_test_loader
from vocab import Vocabulary, deserialize_vocab
from model import SGRAF
from collections import OrderedDict


class AverageMeter(object):
    """Computes and stores the average and current value"""

    def __init__(self):
        self.reset()

    def reset(self):
        self.val = 0
        self.avg = 0
        self.sum = 0
        self.count = 0

    def update(self, val, n=0):
        self.val = val
        self.sum += val * n
        self.count += n
        self.avg = self.sum / (.0001 + self.count)

    def __str__(self):
        """String representation for logging
        """
        # for values that should be recorded exactly e.g. iteration number
        if self.count == 0:
            return str(self.val)
        # for stats
        return '%.4f (%.4f)' % (self.val, self.avg)


class LogCollector(object):
    """A collection of logging objects that can change from train to val"""

    def __init__(self):
        # to keep the order of logged variables deterministic
        self.meters = OrderedDict()

    def update(self, k, v, n=0):
        # create a new meter if previously not recorded
        if k not in self.meters:
            self.meters[k] = AverageMeter()
        self.meters[k].update(v, n)

    def __str__(self):
        """Concatenate the meters in one log line
        """
        s = ''
        for i, (k, v) in enumerate(self.meters.iteritems()):
            if i > 0:
                s += '  '
            s += k + ' ' + str(v)
        return s

    def tb_log(self, tb_logger, prefix='', step=None):
        """Log using tensorboard
        """
        for k, v in self.meters.iteritems():
            tb_logger.log_value(prefix + k, v.val, step=step)


def encode_data(model, data_loader, log_step=10, logging=print):
    """Encode all images and captions loadable by `data_loader`
    """
    val_logger = LogCollector()

    # switch to evaluate mode
    model.val_start()

    # np array to keep all the embeddings
    img_embs = None
    cap_embs = None

    max_n_word = 0
    for i, (images, captions, lengths, ids) in enumerate(data_loader):
        max_n_word = max(max_n_word, max(lengths))

    for i, (images, captions, lengths, ids) in enumerate(data_loader):
        # make sure val logger is used
        model.logger = val_logger

        # compute the embeddings
        with torch.no_grad():
            img_emb, cap_emb, cap_len = model.forward_emb(images, captions, lengths)
        if img_embs is None:
            img_embs = np.zeros((len(data_loader.dataset), img_emb.size(1), img_emb.size(2)))
            cap_embs = np.zeros((len(data_loader.dataset), max_n_word, cap_emb.size(2)))
            cap_lens = [0] * len(data_loader.dataset)
        # cache embeddings
        img_embs[ids] = img_emb.data.cpu().numpy().copy()
        cap_embs[ids, :max(lengths), :] = cap_emb.data.cpu().numpy().copy()

        for j, nid in enumerate(ids):
            cap_lens[nid] = cap_len[j]

        del images, captions
    return img_embs, cap_embs, cap_lens


def evalrank(model_path, data_path=None, split='dev', fold5=False):
    """
    Evaluate a trained model on either dev or test. If `fold5=True`, 5 fold
    cross-validation is done (only for MSCOCO). Otherwise, the full data is
    used for evaluation.
    """
    # load model and options
    checkpoint = torch.load(model_path)
    opt = checkpoint['opt']
    save_epoch = checkpoint['epoch']
    print(opt)
    if data_path is not None:
        opt.data_path = data_path

    # load vocabulary used by the model
    vocab = deserialize_vocab(os.path.join(opt.vocab_path, '%s_vocab.json' % opt.data_name))
    opt.vocab_size = len(vocab)

    # construct model
    model = SGRAF(opt)

    # load model state
    model.load_state_dict(checkpoint['model'])

    print('Loading dataset')
    data_loader = get_test_loader(split, opt.data_name, vocab,
                                  opt.batch_size, opt.workers, opt)
    print("=> loaded checkpoint_epoch {}".format(save_epoch))

    print('Computing results...')
    img_embs, cap_embs, cap_lens = encode_data(model, data_loader)
    print('Images: %d, Captions: %d' %
          (img_embs.shape[0] / 5, cap_embs.shape[0]))

    if not fold5:
        # no cross-validation, full evaluation
        img_embs = np.array([img_embs[i] for i in range(0, len(img_embs), 5)])

        # record computation time of validation
        start = time.time()
        sims = shard_attn_scores(model, img_embs, cap_embs, cap_lens, opt, shard_size=100)
        end = time.time()
        print("calculate similarity time:", end-start)

        # bi-directional retrieval
        r, rt = i2t(img_embs, cap_embs, cap_lens, sims, return_ranks=True)
        ri, rti = t2i(img_embs, cap_embs, cap_lens, sims, return_ranks=True)
        ar = (r[0] + r[1] + r[2]) / 3
        ari = (ri[0] + ri[1] + ri[2]) / 3
        rsum = r[0] + r[1] + r[2] + ri[0] + ri[1] + ri[2]
        print("rsum: %.1f" % rsum)
        print("Average i2t Recall: %.1f" % ar)
        print("Image to text: %.1f %.1f %.1f %.1f %.1f" % r)
        print("Average t2i Recall: %.1f" % ari)
        print("Text to image: %.1f %.1f %.1f %.1f %.1f" % ri)
    else:
        # 5fold cross-validation, only for MSCOCO
        results = []
        for i in range(5):
            img_embs_shard = img_embs[i * 5000:(i + 1) * 5000:5]
            cap_embs_shard = cap_embs[i * 5000:(i + 1) * 5000]
            cap_lens_shard = cap_lens[i * 5000:(i + 1) * 5000]

            start = time.time()
            sims = shard_attn_scores(model, img_embs_shard, cap_embs_shard, cap_lens_shard, opt, shard_size=100)
            end = time.time()
            print("calculate similarity time:", end-start)

            r, rt0 = i2t(img_embs_shard, cap_embs_shard, cap_lens_shard, sims, return_ranks=True)
            print("Image to text: %.1f, %.1f, %.1f, %.1f, %.1f" % r)
            ri, rti0 = t2i(img_embs_shard, cap_embs_shard, cap_lens_shard, sims, return_ranks=True)
            print("Text to image: %.1f, %.1f, %.1f, %.1f, %.1f" % ri)

            if i == 0:
                rt, rti = rt0, rti0
            ar = (r[0] + r[1] + r[2]) / 3
            ari = (ri[0] + ri[1] + ri[2]) / 3
            rsum = r[0] + r[1] + r[2] + ri[0] + ri[1] + ri[2]
            print("rsum: %.1f ar: %.1f ari: %.1f" % (rsum, ar, ari))
            results += [list(r) + list(ri) + [ar, ari, rsum]]

        print("-----------------------------------")
        print("Mean metrics: ")
        mean_metrics = tuple(np.array(results).mean(axis=0).flatten())
        print("rsum: %.1f" % (mean_metrics[10] * 6))
        print("Average i2t Recall: %.1f" % mean_metrics[11])
        print("Image to text: %.1f %.1f %.1f %.1f %.1f" %
              mean_metrics[:5])
        print("Average t2i Recall: %.1f" % mean_metrics[12])
        print("Text to image: %.1f %.1f %.1f %.1f %.1f" %
              mean_metrics[5:10])


def shard_attn_scores(model, img_embs, cap_embs, cap_lens, opt, shard_size=100):
    n_im_shard = (len(img_embs) - 1) // shard_size + 1
    n_cap_shard = (len(cap_embs) - 1) // shard_size + 1

    sims = np.zeros((len(img_embs), len(cap_embs)))
    for i in range(n_im_shard):
        im_start, im_end = shard_size * i, min(shard_size * (i + 1), len(img_embs))
        for j in range(n_cap_shard):
            sys.stdout.write('\r>> shard_attn_scores batch (%d,%d)' % (i, j))
            ca_start, ca_end = shard_size * j, min(shard_size * (j + 1), len(cap_embs))

            with torch.no_grad():
                im = torch.from_numpy(img_embs[im_start:im_end]).float().cuda()
                ca = torch.from_numpy(cap_embs[ca_start:ca_end]).float().cuda()
                l = cap_lens[ca_start:ca_end]
                sim = model.forward_sim(im, ca, l)

            sims[im_start:im_end, ca_start:ca_end] = sim.data.cpu().numpy()
    sys.stdout.write('\n')
    return sims


def i2t(images, captions, caplens, sims, npts=None, return_ranks=False):
    """
    Images->Text (Image Annotation)
    Images: (N, n_region, d) matrix of images
    Captions: (5N, max_n_word, d) matrix of captions
    CapLens: (5N) array of caption lengths
    sims: (N, 5N) matrix of similarity im-cap
    """
    npts = images.shape[0]
    ranks = np.zeros(npts)
    top1 = np.zeros(npts)

    for index in range(npts):
        inds = np.argsort(sims[index])[::-1]

        # Score
        rank = 1e20
        for i in range(5 * index, 5 * index + 5, 1):
            tmp = np.where(inds == i)[0][0]
            if tmp < rank:
                rank = tmp
        ranks[index] = rank
        top1[index] = inds[0]

    # Compute metrics
    r1 = 100.0 * len(np.where(ranks < 1)[0]) / len(ranks)
    r5 = 100.0 * len(np.where(ranks < 5)[0]) / len(ranks)
    r10 = 100.0 * len(np.where(ranks < 10)[0]) / len(ranks)
    medr = np.floor(np.median(ranks)) + 1
    meanr = ranks.mean() + 1
    if return_ranks:
        return (r1, r5, r10, medr, meanr), (ranks, top1)
    else:
        return (r1, r5, r10, medr, meanr)


def t2i(images, captions, caplens, sims, npts=None, return_ranks=False):
    """
    Text->Images (Image Search)
    Images: (N, n_region, d) matrix of images
    Captions: (5N, max_n_word, d) matrix of captions
    CapLens: (5N) array of caption lengths
    sims: (N, 5N) matrix of similarity im-cap
    """
    npts = images.shape[0]
    ranks = np.zeros(5 * npts)
    top1 = np.zeros(5 * npts)

    # --> (5N(caption), N(image))
    sims = sims.T

    for index in range(npts):
        for i in range(5):
            inds = np.argsort(sims[5 * index + i])[::-1]
            ranks[5 * index + i] = np.where(inds == index)[0][0]
            top1[5 * index + i] = inds[0]

    # Compute metrics
    r1 = 100.0 * len(np.where(ranks < 1)[0]) / len(ranks)
    r5 = 100.0 * len(np.where(ranks < 5)[0]) / len(ranks)
    r10 = 100.0 * len(np.where(ranks < 10)[0]) / len(ranks)
    medr = np.floor(np.median(ranks)) + 1
    meanr = ranks.mean() + 1
    if return_ranks:
        return (r1, r5, r10, medr, meanr), (ranks, top1)
    else:
        return (r1, r5, r10, medr, meanr)


if __name__ == '__main__':
    evalrank("/apdcephfs/share_1313228/home/haiwendiao/SGRAF-master/runs/SAF_module/checkpoint/model_best.pth.tar",
             data_path="/apdcephfs/share_1313228/home/haiwendiao", split="test", fold5=False)


================================================
FILE: model.py
================================================
"""SGRAF model"""

import torch
import torch.nn as nn

import torch.nn.functional as F

import torch.backends.cudnn as cudnn
from torch.nn.utils.rnn import pack_padded_sequence, pad_packed_sequence
from torch.nn.utils.clip_grad import clip_grad_norm_

import numpy as np
from collections import OrderedDict


def l1norm(X, dim, eps=1e-8):
    """L1-normalize columns of X"""
    norm = torch.abs(X).sum(dim=dim, keepdim=True) + eps
    X = torch.div(X, norm)
    return X


def l2norm(X, dim=-1, eps=1e-8):
    """L2-normalize columns of X"""
    norm = torch.pow(X, 2).sum(dim=dim, keepdim=True).sqrt() + eps
    X = torch.div(X, norm)
    return X


def cosine_sim(x1, x2, dim=-1, eps=1e-8):
    """Returns cosine similarity between x1 and x2, computed along dim."""
    w12 = torch.sum(x1 * x2, dim)
    w1 = torch.norm(x1, 2, dim)
    w2 = torch.norm(x2, 2, dim)
    return (w12 / (w1 * w2).clamp(min=eps)).squeeze()


class EncoderImage(nn.Module):
    """
    Build local region representations by common-used FC-layer.
    Args: - images: raw local detected regions, shape: (batch_size, 36, 2048).
    Returns: - img_emb: finial local region embeddings, shape:  (batch_size, 36, 1024).
    """
    def __init__(self, img_dim, embed_size, no_imgnorm=False):
        super(EncoderImage, self).__init__()
        self.embed_size = embed_size
        self.no_imgnorm = no_imgnorm
        self.fc = nn.Linear(img_dim, embed_size)

        self.init_weights()

    def init_weights(self):
        """Xavier initialization for the fully connected layer"""
        r = np.sqrt(6.) / np.sqrt(self.fc.in_features +
                                  self.fc.out_features)
        self.fc.weight.data.uniform_(-r, r)
        self.fc.bias.data.fill_(0)

    def forward(self, images):
        """Extract image feature vectors."""
        # assuming that the precomputed features are already l2-normalized
        img_emb = self.fc(images)

        # normalize in the joint embedding space
        if not self.no_imgnorm:
            img_emb = l2norm(img_emb, dim=-1)

        return img_emb

    def load_state_dict(self, state_dict):
        """Overwrite the default one to accept state_dict from Full model"""
        own_state = self.state_dict()
        new_state = OrderedDict()
        for name, param in state_dict.items():
            if name in own_state:
                new_state[name] = param

        super(EncoderImage, self).load_state_dict(new_state)


class EncoderText(nn.Module):
    """
    Build local word representations by common-used Bi-GRU or GRU.
    Args: - images: raw local word ids, shape: (batch_size, L).
    Returns: - img_emb: final local word embeddings, shape: (batch_size, L, 1024).
    """
    def __init__(self, vocab_size, word_dim, embed_size, num_layers,
                 use_bi_gru=False, no_txtnorm=False):
        super(EncoderText, self).__init__()
        self.embed_size = embed_size
        self.no_txtnorm = no_txtnorm

        # word embedding
        self.embed = nn.Embedding(vocab_size, word_dim)
        self.dropout = nn.Dropout(0.4)

        # caption embedding
        self.use_bi_gru = use_bi_gru
        self.cap_rnn = nn.GRU(word_dim, embed_size, num_layers, batch_first=True, bidirectional=use_bi_gru)

        self.init_weights()

    def init_weights(self):
        self.embed.weight.data.uniform_(-0.1, 0.1)

    def forward(self, captions, lengths):
        """Handles variable size captions"""
        # embed word ids to vectors
        cap_emb = self.embed(captions)
        cap_emb = self.dropout(cap_emb)

        # pack the caption
        packed = pack_padded_sequence(cap_emb, lengths, batch_first=True)

        # forward propagate RNN
        out, _ = self.cap_rnn(packed)

        # reshape output to (batch_size, hidden_size)
        cap_emb, _ = pad_packed_sequence(out, batch_first=True)

        if self.use_bi_gru:
            cap_emb = (cap_emb[:, :, :cap_emb.size(2)/2] + cap_emb[:, :, cap_emb.size(2)/2:])/2

        # normalization in the joint embedding space
        if not self.no_txtnorm:
            cap_emb = l2norm(cap_emb, dim=-1)

        return cap_emb


class VisualSA(nn.Module):
    """
    Build global image representations by self-attention.
    Args: - local: local region embeddings, shape: (batch_size, 36, 1024)
          - raw_global: raw image by averaging regions, shape: (batch_size, 1024)
    Returns: - new_global: final image by self-attention, shape: (batch_size, 1024).
    """
    def __init__(self, embed_dim, dropout_rate, num_region):
        super(VisualSA, self).__init__()

        self.embedding_local = nn.Sequential(nn.Linear(embed_dim, embed_dim),
                                             nn.BatchNorm1d(num_region),
                                             nn.Tanh(), nn.Dropout(dropout_rate))
        self.embedding_global = nn.Sequential(nn.Linear(embed_dim, embed_dim),
                                              nn.BatchNorm1d(embed_dim),
                                              nn.Tanh(), nn.Dropout(dropout_rate))
        self.embedding_common = nn.Sequential(nn.Linear(embed_dim, 1))

        self.init_weights()
        self.softmax = nn.Softmax(dim=1)

    def init_weights(self):
        for embeddings in self.children():
            for m in embeddings:
                if isinstance(m, nn.Linear):
                    r = np.sqrt(6.) / np.sqrt(m.in_features + m.out_features)
                    m.weight.data.uniform_(-r, r)
                    m.bias.data.fill_(0)
                elif isinstance(m, nn.BatchNorm1d):
                    m.weight.data.fill_(1)
                    m.bias.data.zero_()

    def forward(self, local, raw_global):
        # compute embedding of local regions and raw global image
        l_emb = self.embedding_local(local)
        g_emb = self.embedding_global(raw_global)

        # compute the normalized weights, shape: (batch_size, 36)
        g_emb = g_emb.unsqueeze(1).repeat(1, l_emb.size(1), 1)
        common = l_emb.mul(g_emb)
        weights = self.embedding_common(common).squeeze(2)
        weights = self.softmax(weights)

        # compute final image, shape: (batch_size, 1024)
        new_global = (weights.unsqueeze(2) * local).sum(dim=1)
        new_global = l2norm(new_global, dim=-1)

        return new_global


class TextSA(nn.Module):
    """
    Build global text representations by self-attention.
    Args: - local: local word embeddings, shape: (batch_size, L, 1024)
          - raw_global: raw text by averaging words, shape: (batch_size, 1024)
    Returns: - new_global: final text by self-attention, shape: (batch_size, 1024).
    """

    def __init__(self, embed_dim, dropout_rate):
        super(TextSA, self).__init__()

        self.embedding_local = nn.Sequential(nn.Linear(embed_dim, embed_dim),
                                             nn.Tanh(), nn.Dropout(dropout_rate))
        self.embedding_global = nn.Sequential(nn.Linear(embed_dim, embed_dim),
                                              nn.Tanh(), nn.Dropout(dropout_rate))
        self.embedding_common = nn.Sequential(nn.Linear(embed_dim, 1))

        self.init_weights()
        self.softmax = nn.Softmax(dim=1)

    def init_weights(self):
        for embeddings in self.children():
            for m in embeddings:
                if isinstance(m, nn.Linear):
                    r = np.sqrt(6.) / np.sqrt(m.in_features + m.out_features)
                    m.weight.data.uniform_(-r, r)
                    m.bias.data.fill_(0)
                elif isinstance(m, nn.BatchNorm1d):
                    m.weight.data.fill_(1)
                    m.bias.data.zero_()

    def forward(self, local, raw_global):
        # compute embedding of local words and raw global text
        l_emb = self.embedding_local(local)
        g_emb = self.embedding_global(raw_global)

        # compute the normalized weights, shape: (batch_size, L)
        g_emb = g_emb.unsqueeze(1).repeat(1, l_emb.size(1), 1)
        common = l_emb.mul(g_emb)
        weights = self.embedding_common(common).squeeze(2)
        weights = self.softmax(weights)

        # compute final text, shape: (batch_size, 1024)
        new_global = (weights.unsqueeze(2) * local).sum(dim=1)
        new_global = l2norm(new_global, dim=-1)

        return new_global


class GraphReasoning(nn.Module):
    """
    Perform the similarity graph reasoning with a full-connected graph
    Args: - sim_emb: global and local alignments, shape: (batch_size, L+1, 256)
    Returns; - sim_sgr: reasoned graph nodes after several steps, shape: (batch_size, L+1, 256)
    """
    def __init__(self, sim_dim):
        super(GraphReasoning, self).__init__()

        self.graph_query_w = nn.Linear(sim_dim, sim_dim)
        self.graph_key_w = nn.Linear(sim_dim, sim_dim)
        self.sim_graph_w = nn.Linear(sim_dim, sim_dim)
        self.relu = nn.ReLU()

        self.init_weights()

    def forward(self, sim_emb):
        sim_query = self.graph_query_w(sim_emb)
        sim_key = self.graph_key_w(sim_emb)
        sim_edge = torch.softmax(torch.bmm(sim_query, sim_key.permute(0, 2, 1)), dim=-1)
        sim_sgr = torch.bmm(sim_edge, sim_emb)
        sim_sgr = self.relu(self.sim_graph_w(sim_sgr))
        return sim_sgr

    def init_weights(self):
        for m in self.children():
            if isinstance(m, nn.Linear):
                r = np.sqrt(6.) / np.sqrt(m.in_features + m.out_features)
                m.weight.data.uniform_(-r, r)
                m.bias.data.fill_(0)
            elif isinstance(m, nn.BatchNorm1d):
                m.weight.data.fill_(1)
                m.bias.data.zero_()


class AttentionFiltration(nn.Module):
    """
    Perform the similarity Attention Filtration with a gate-based attention
    Args: - sim_emb: global and local alignments, shape: (batch_size, L+1, 256)
    Returns; - sim_saf: aggregated alignment after attention filtration, shape: (batch_size, 256)
    """
    def __init__(self, sim_dim):
        super(AttentionFiltration, self).__init__()

        self.attn_sim_w = nn.Linear(sim_dim, 1)
        self.bn = nn.BatchNorm1d(1)

        self.init_weights()

    def forward(self, sim_emb):
        sim_attn = l1norm(torch.sigmoid(self.bn(self.attn_sim_w(sim_emb).permute(0, 2, 1))), dim=-1)
        sim_saf = torch.matmul(sim_attn, sim_emb)
        sim_saf = l2norm(sim_saf.squeeze(1), dim=-1)
        return sim_saf

    def init_weights(self):
        for m in self.children():
            if isinstance(m, nn.Linear):
                r = np.sqrt(6.) / np.sqrt(m.in_features + m.out_features)
                m.weight.data.uniform_(-r, r)
                m.bias.data.fill_(0)
            elif isinstance(m, nn.BatchNorm1d):
                m.weight.data.fill_(1)
                m.bias.data.zero_()


class EncoderSimilarity(nn.Module):
    """
    Compute the image-text similarity by SGR, SAF, AVE
    Args: - img_emb: local region embeddings, shape: (batch_size, 36, 1024)
          - cap_emb: local word embeddings, shape: (batch_size, L, 1024)
    Returns:
        - sim_all: final image-text similarities, shape: (batch_size, batch_size).
    """
    def __init__(self, embed_size, sim_dim, module_name='AVE', sgr_step=3):
        super(EncoderSimilarity, self).__init__()
        self.module_name = module_name

        self.v_global_w = VisualSA(embed_size, 0.4, 36)
        self.t_global_w = TextSA(embed_size, 0.4)

        self.sim_tranloc_w = nn.Linear(embed_size, sim_dim)
        self.sim_tranglo_w = nn.Linear(embed_size, sim_dim)

        self.sim_eval_w = nn.Linear(sim_dim, 1)
        self.sigmoid = nn.Sigmoid()

        if module_name == 'SGR':
            self.SGR_module = nn.ModuleList([GraphReasoning(sim_dim) for i in range(sgr_step)])
        elif module_name == 'SAF':
            self.SAF_module = AttentionFiltration(sim_dim)
        else:
            raise ValueError('Invalid input of opt.module_name in opts.py')

        self.init_weights()

    def forward(self, img_emb, cap_emb, cap_lens):
        sim_all = []
        n_image = img_emb.size(0)
        n_caption = cap_emb.size(0)

        # get enhanced global images by self-attention
        img_ave = torch.mean(img_emb, 1)
        img_glo = self.v_global_w(img_emb, img_ave)

        for i in range(n_caption):
            # get the i-th sentence
            n_word = cap_lens[i]
            cap_i = cap_emb[i, :n_word, :].unsqueeze(0)
            cap_i_expand = cap_i.repeat(n_image, 1, 1)

            # get enhanced global i-th text by self-attention
            cap_ave_i = torch.mean(cap_i, 1)
            cap_glo_i = self.t_global_w(cap_i, cap_ave_i)

            # local-global alignment construction
            Context_img = SCAN_attention(cap_i_expand, img_emb, smooth=9.0)
            sim_loc = torch.pow(torch.sub(Context_img, cap_i_expand), 2)
            sim_loc = l2norm(self.sim_tranloc_w(sim_loc), dim=-1)

            sim_glo = torch.pow(torch.sub(img_glo, cap_glo_i), 2)
            sim_glo = l2norm(self.sim_tranglo_w(sim_glo), dim=-1)

            # concat the global and local alignments
            sim_emb = torch.cat([sim_glo.unsqueeze(1), sim_loc], 1)

            # compute the final similarity vector
            if self.module_name == 'SGR':
                for module in self.SGR_module:
                    sim_emb = module(sim_emb)
                sim_vec = sim_emb[:, 0, :]
            else:
                sim_vec = self.SAF_module(sim_emb)

            # compute the final similarity score
            sim_i = self.sigmoid(self.sim_eval_w(sim_vec))
            sim_all.append(sim_i)

        # (n_image, n_caption)
        sim_all = torch.cat(sim_all, 1)

        return sim_all

    def init_weights(self):
        for m in self.children():
            if isinstance(m, nn.Linear):
                r = np.sqrt(6.) / np.sqrt(m.in_features + m.out_features)
                m.weight.data.uniform_(-r, r)
                m.bias.data.fill_(0)
            elif isinstance(m, nn.BatchNorm1d):
                m.weight.data.fill_(1)
                m.bias.data.zero_()


def SCAN_attention(query, context, smooth, eps=1e-8):
    """
    query: (n_context, queryL, d)
    context: (n_context, sourceL, d)
    """
    # --> (batch, d, queryL)
    queryT = torch.transpose(query, 1, 2)

    # (batch, sourceL, d)(batch, d, queryL)
    # --> (batch, sourceL, queryL)
    attn = torch.bmm(context, queryT)

    attn = nn.LeakyReLU(0.1)(attn)
    attn = l2norm(attn, 2)

    # --> (batch, queryL, sourceL)
    attn = torch.transpose(attn, 1, 2).contiguous()
    # --> (batch, queryL, sourceL
    attn = F.softmax(attn*smooth, dim=2)

    # --> (batch, sourceL, queryL)
    attnT = torch.transpose(attn, 1, 2).contiguous()

    # --> (batch, d, sourceL)
    contextT = torch.transpose(context, 1, 2)
    # (batch x d x sourceL)(batch x sourceL x queryL)
    # --> (batch, d, queryL)
    weightedContext = torch.bmm(contextT, attnT)
    # --> (batch, queryL, d)
    weightedContext = torch.transpose(weightedContext, 1, 2)
    weightedContext = l2norm(weightedContext, dim=-1)

    return weightedContext


class ContrastiveLoss(nn.Module):
    """
    Compute contrastive loss
    """
    def __init__(self, margin=0, max_violation=False):
        super(ContrastiveLoss, self).__init__()
        self.margin = margin
        self.max_violation = max_violation

    def forward(self, scores):
        # compute image-sentence score matrix
        diagonal = scores.diag().view(scores.size(0), 1)
        d1 = diagonal.expand_as(scores)
        d2 = diagonal.t().expand_as(scores)

        # compare every diagonal score to scores in its column
        # caption retrieval
        cost_s = (self.margin + scores - d1).clamp(min=0)
        # compare every diagonal score to scores in its row
        # image retrieval
        cost_im = (self.margin + scores - d2).clamp(min=0)

        # clear diagonals
        mask = torch.eye(scores.size(0)) > .5
        if torch.cuda.is_available():
            I = mask.cuda()
        cost_s = cost_s.masked_fill_(I, 0)
        cost_im = cost_im.masked_fill_(I, 0)

        # keep the maximum violating negative for each query
        if self.max_violation:
            cost_s = cost_s.max(1)[0]
            cost_im = cost_im.max(0)[0]
        return cost_s.sum() + cost_im.sum()


class SGRAF(object):
    """
    Similarity Reasoning and Filtration (SGRAF) Network
    """
    def __init__(self, opt):
        # Build Models
        self.grad_clip = opt.grad_clip
        self.img_enc = EncoderImage(opt.img_dim, opt.embed_size,
                                    no_imgnorm=opt.no_imgnorm)
        self.txt_enc = EncoderText(opt.vocab_size, opt.word_dim,
                                   opt.embed_size, opt.num_layers, 
                                   use_bi_gru=opt.bi_gru,  
                                   no_txtnorm=opt.no_txtnorm)
        self.sim_enc = EncoderSimilarity(opt.embed_size, opt.sim_dim,
                                         opt.module_name, opt.sgr_step)

        if torch.cuda.is_available():
            self.img_enc.cuda()
            self.txt_enc.cuda()
            self.sim_enc.cuda()
            cudnn.benchmark = True

        # Loss and Optimizer
        self.criterion = ContrastiveLoss(margin=opt.margin,
                                         max_violation=opt.max_violation)
        params = list(self.txt_enc.parameters())
        params += list(self.img_enc.parameters())
        params += list(self.sim_enc.parameters())
        self.params = params

        self.optimizer = torch.optim.Adam(params, lr=opt.learning_rate)
        self.Eiters = 0

    def state_dict(self):
        state_dict = [self.img_enc.state_dict(), self.txt_enc.state_dict(), self.sim_enc.state_dict()]
        return state_dict

    def load_state_dict(self, state_dict):
        self.img_enc.load_state_dict(state_dict[0])
        self.txt_enc.load_state_dict(state_dict[1])
        self.sim_enc.load_state_dict(state_dict[2])

    def train_start(self):
        """switch to train mode"""
        self.img_enc.train()
        self.txt_enc.train()
        self.sim_enc.train()

    def val_start(self):
        """switch to evaluate mode"""
        self.img_enc.eval()
        self.txt_enc.eval()
        self.sim_enc.eval()

    def forward_emb(self, images, captions, lengths):
        """Compute the image and caption embeddings"""
        if torch.cuda.is_available():
            images = images.cuda()
            captions = captions.cuda()

        # Forward feature encoding
        img_embs = self.img_enc(images)
        cap_embs = self.txt_enc(captions, lengths)
        return img_embs, cap_embs, lengths

    def forward_sim(self, img_embs, cap_embs, cap_lens):
        # Forward similarity encoding
        sims = self.sim_enc(img_embs, cap_embs, cap_lens)
        return sims

    def forward_loss(self, sims, **kwargs):
        """Compute the loss given pairs of image and caption embeddings
        """
        loss = self.criterion(sims)
        self.logger.update('Loss', loss.item(), sims.size(0))
        return loss

    def train_emb(self, images, captions, lengths, ids=None, *args):
        """One training step given images and captions.
        """
        self.Eiters += 1
        self.logger.update('Eit', self.Eiters)
        self.logger.update('lr', self.optimizer.param_groups[0]['lr'])

        # compute the embeddings
        img_embs, cap_embs, cap_lens = self.forward_emb(images, captions, lengths)
        sims = self.forward_sim(img_embs, cap_embs, cap_lens)

        # measure accuracy and record loss
        self.optimizer.zero_grad()
        loss = self.forward_loss(sims)

        # compute gradient and do SGD step
        loss.backward()
        if self.grad_clip > 0:
            clip_grad_norm_(self.params, self.grad_clip)
        self.optimizer.step()


================================================
FILE: opts.py
================================================
"""Argument parser"""

import argparse


def parse_opt():
    # Hyper Parameters
    parser = argparse.ArgumentParser()
    # --------------------------- data path -------------------------#
    parser.add_argument('--data_path', default='/apdcephfs/share_1313228/home/haiwendiao',
                        help='path to datasets')
    parser.add_argument('--data_name', default='f30k_precomp',
                        help='{coco,f30k}_precomp')
    parser.add_argument('--vocab_path', default='/apdcephfs/share_1313228/home/haiwendiao/SGRAF-master/vocab/',
                        help='Path to saved vocabulary json files.')
    parser.add_argument('--model_name', default='/apdcephfs/share_1313228/home/haiwendiao/SGRAF-master/runs/f30k_SGR/checkpoint',
                        help='Path to save the model.')
    parser.add_argument('--logger_name', default='/apdcephfs/share_1313228/home/haiwendiao/SGRAF-master/runs/f30k_SGR/log',
                        help='Path to save Tensorboard log.')

    # ----------------------- training setting ----------------------#
    parser.add_argument('--batch_size', default=128, type=int,
                        help='Size of a training mini-batch.')
    parser.add_argument('--num_epochs', default=40, type=int,
                        help='Number of training epochs.')
    parser.add_argument('--lr_update', default=30, type=int,
                        help='Number of epochs to update the learning rate.')
    parser.add_argument('--learning_rate', default=.0002, type=float,
                        help='Initial learning rate.')
    parser.add_argument('--workers', default=10, type=int,
                        help='Number of data loader workers.')
    parser.add_argument('--log_step', default=10, type=int,
                        help='Number of steps to print and record the log.')
    parser.add_argument('--val_step', default=1000, type=int,
                        help='Number of steps to run validation.')
    parser.add_argument('--grad_clip', default=2., type=float,
                        help='Gradient clipping threshold.')
    parser.add_argument('--margin', default=0.2, type=float,
                        help='Rank loss margin.')
    parser.add_argument('--max_violation', action='store_false',
                        help='Use max instead of sum in the rank loss.')

    # ------------------------- model setting -----------------------#
    parser.add_argument('--img_dim', default=2048, type=int,
                        help='Dimensionality of the image embedding.')
    parser.add_argument('--word_dim', default=300, type=int,
                        help='Dimensionality of the word embedding.')
    parser.add_argument('--embed_size', default=1024, type=int,
                        help='Dimensionality of the joint embedding.')
    parser.add_argument('--sim_dim', default=256, type=int,
                        help='Dimensionality of the sim embedding.')
    parser.add_argument('--num_layers', default=1, type=int,
                        help='Number of GRU layers.')
    parser.add_argument('--bi_gru', action='store_false',
                        help='Use bidirectional GRU.')
    parser.add_argument('--no_imgnorm', action='store_true',
                        help='Do not normalize the image embeddings.')
    parser.add_argument('--no_txtnorm', action='store_true',
                        help='Do not normalize the text embeddings.')
    parser.add_argument('--module_name', default='SGR', type=str,
                        help='SGR, SAF')
    parser.add_argument('--sgr_step', default=3, type=int,
                        help='Step of the SGR.')

    opt = parser.parse_args()
    print(opt)
    return opt


================================================
FILE: requirements.txt
================================================
backports.functools-lru-cache==1.6.1
backports.weakref==1.0.post1
bleach==1.5.0
boto3==1.17.8
botocore==1.20.8
certifi==2019.11.28
cffi==1.14.0
chardet==4.0.0
click==7.1.2
cloudpickle==1.3.0
cycler==0.10.0
Cython==0.29.13
decorator==4.4.2
enum34==1.1.10
funcsigs==1.0.2
futures==3.3.0
html5lib==0.9999999
idna==2.10
jmespath==0.10.0
joblib==0.14.1
kiwisolver==1.1.0
Markdown==3.1.1
matplotlib==2.2.4
mock==3.0.5
networkx==2.2
nltk==3.4.5
numpy==1.16.5
olefile==0.46
opencv-python==4.2.0.32
pandas==0.24.2
Pillow==6.2.1
protobuf==3.12.2
ptflops==0.6.4
pycocotools==2.0
pycparser==2.20
pyparsing==2.4.7
python-dateutil==2.8.1
pytz==2020.1
PyWavelets==1.0.3
regex==2020.11.13
requests==2.25.1
s3transfer==0.3.4
sacremoses==0.0.43
scikit-image==0.14.5
scipy==1.2.3
singledispatch==3.4.0.3
six==1.15.0
subprocess32==3.5.4
tensorboard-logger==0.1.0
tensorflow==1.4.0
tensorflow-tensorboard==0.4.0
torch==0.4.1.post2
torchvision==0.2.0
tqdm==4.56.2
urllib3==1.26.3
Werkzeug==1.0.1


================================================
FILE: runs/runs.md
================================================
The folder used to store the model:

**File Structure**
```
├── runs/
|   ├── f30k_SAF/
|   |   ├── checkpoint/
|   |   ├── log/
|   ├── f30k_SGR/
|   |   ├── checkpoint/
|   |   ├── log/
```


================================================
FILE: train.py
================================================
"""
# Pytorch implementation for AAAI2021 paper from
# https://arxiv.org/pdf/2101.01368.
# "Similarity Reasoning and Filtration for Image-Text Matching"
# Haiwen Diao, Ying Zhang, Lin Ma, Huchuan Lu
#
# Writen by Haiwen Diao, 2020
"""

import os
import time
import shutil

import torch
import numpy

import data
import opts
from vocab import Vocabulary, deserialize_vocab
from model import SGRAF
from evaluation import i2t, t2i, AverageMeter, LogCollector, encode_data, shard_attn_scores

import logging
import tensorboard_logger as tb_logger

os.environ["CUDA_VISIBLE_DEVICES"] = "0"


def main():
    opt = opts.parse_opt()
    logging.basicConfig(format='%(asctime)s %(message)s', level=logging.INFO)
    tb_logger.configure(opt.logger_name, flush_secs=5)

    # Load Vocabulary Wrapper
    vocab = deserialize_vocab(os.path.join(opt.vocab_path, '%s_vocab.json' % opt.data_name))
    opt.vocab_size = len(vocab)

    # Load data loaders
    train_loader, val_loader = data.get_loaders(opt.data_name, vocab, opt.batch_size, opt.workers, opt)

    # Construct the model
    model = SGRAF(opt)

    # Train the Model
    best_rsum = 0

    for epoch in range(opt.num_epochs):
        print(opt.logger_name)
        print(opt.model_name)

        adjust_learning_rate(opt, model.optimizer, epoch)

        # train for one epoch
        train(opt, train_loader, model, epoch, val_loader)

        # evaluate on validation set
        r_sum = validate(opt, val_loader, model)

        # remember best R@ sum and save checkpoint
        is_best = r_sum > best_rsum
        best_rsum = max(r_sum, best_rsum)

        if not os.path.exists(opt.model_name):
            os.mkdir(opt.model_name)
        save_checkpoint({
            'epoch': epoch + 1,
            'model': model.state_dict(),
            'best_rsum': best_rsum,
            'opt': opt,
            'Eiters': model.Eiters,
        }, is_best, filename='checkpoint_{}.pth.tar'.format(epoch), prefix=opt.model_name + '/')


def train(opt, train_loader, model, epoch, val_loader):
    # average meters to record the training statistics
    batch_time = AverageMeter()
    data_time = AverageMeter()
    train_logger = LogCollector()

    end = time.time()
    for i, train_data in enumerate(train_loader):
        # switch to train mode
        model.train_start()

        # measure data loading time
        data_time.update(time.time() - end)

        # make sure train logger is used
        model.logger = train_logger

        # Update the model
        model.train_emb(*train_data)

        # measure elapsed time
        batch_time.update(time.time() - end)
        end = time.time()

        # Print log info
        if model.Eiters % opt.log_step == 0:
            logging.info(
                'Epoch: [{0}][{1}/{2}]\t'
                '{e_log}\t'
                'Time {batch_time.val:.3f} ({batch_time.avg:.3f})\t'
                'Data {data_time.val:.3f} ({data_time.avg:.3f})\t'
                .format(
                    epoch, i, len(train_loader), batch_time=batch_time,
                    data_time=data_time, e_log=str(model.logger)))

        # Record logs in tensorboard
        tb_logger.log_value('epoch', epoch, step=model.Eiters)
        tb_logger.log_value('step', i, step=model.Eiters)
        tb_logger.log_value('batch_time', batch_time.val, step=model.Eiters)
        tb_logger.log_value('data_time', data_time.val, step=model.Eiters)
        model.logger.tb_log(tb_logger, step=model.Eiters)

        # validate at every val_step
        if model.Eiters % opt.val_step == 0:
            validate(opt, val_loader, model)


def validate(opt, val_loader, model):
    # compute the encoding for all the validation images and captions
    img_embs, cap_embs, cap_lens = encode_data(model, val_loader, opt.log_step, logging.info)

    # clear duplicate 5*images and keep 1*images
    img_embs = numpy.array([img_embs[i] for i in range(0, len(img_embs), 5)])

    # record computation time of validation
    start = time.time()
    sims = shard_attn_scores(model, img_embs, cap_embs, cap_lens, opt, shard_size=100)
    end = time.time()
    print("calculate similarity time:", end-start)

    # caption retrieval
    (r1, r5, r10, medr, meanr) = i2t(img_embs, cap_embs, cap_lens, sims)
    logging.info("Image to text: %.1f, %.1f, %.1f, %.1f, %.1f" % (r1, r5, r10, medr, meanr))

    # image retrieval
    (r1i, r5i, r10i, medri, meanr) = t2i(img_embs, cap_embs, cap_lens, sims)
    logging.info("Text to image: %.1f, %.1f, %.1f, %.1f, %.1f" % (r1i, r5i, r10i, medri, meanr))

    # sum of recalls to be used for early stopping
    r_sum = r1 + r5 + r10 + r1i + r5i + r10i

    # record metrics in tensorboard
    tb_logger.log_value('r1', r1, step=model.Eiters)
    tb_logger.log_value('r5', r5, step=model.Eiters)
    tb_logger.log_value('r10', r10, step=model.Eiters)
    tb_logger.log_value('medr', medr, step=model.Eiters)
    tb_logger.log_value('meanr', meanr, step=model.Eiters)
    tb_logger.log_value('r1i', r1i, step=model.Eiters)
    tb_logger.log_value('r5i', r5i, step=model.Eiters)
    tb_logger.log_value('r10i', r10i, step=model.Eiters)
    tb_logger.log_value('medri', medri, step=model.Eiters)
    tb_logger.log_value('meanr', meanr, step=model.Eiters)
    tb_logger.log_value('r_sum', r_sum, step=model.Eiters)

    return r_sum


def save_checkpoint(state, is_best, filename='checkpoint.pth.tar', prefix=''):
    tries = 15
    error = None

    # deal with unstable I/O. Usually not necessary.
    while tries:
        try:
            torch.save(state, prefix + filename)
            if is_best:
                shutil.copyfile(prefix + filename, prefix + 'model_best.pth.tar')
        except IOError as e:
            error = e
            tries -= 1
        else:
            break
        print('model save {} failed, remaining {} trials'.format(filename, tries))
        if not tries:
            raise error


def adjust_learning_rate(opt, optimizer, epoch):
    """
    Sets the learning rate to the initial LR
    decayed by 10 after opt.lr_update epoch
    """
    lr = opt.learning_rate * (0.1 ** (epoch // opt.lr_update))
    for param_group in optimizer.param_groups:
        param_group['lr'] = lr


if __name__ == '__main__':
    main()


================================================
FILE: visualize.py
================================================
"""
# Please refer to https://github.com/Paranioar/RCAR for related visualization code.
# It now includes visualize_attention_mechanism, visualize_similarity_distribution, visualize_rank_result, and etc.

# I will continue to update more related visualization codes when I am free.
# If you find these codes are useful, please cite our papers and star our projects. (We do need it! HaHaHaHa.)
# Thanks for the interest in our projects.
"""










================================================
FILE: vocab/coco_precomp_vocab.json
================================================
{"idx2word": {"0": "<pad>", "1": "<start>", "2": "<end>", "3": "<unk>", "4": "wrought-iron", "5": "woods", "6": "hanging", "7": "woody", "8": "comically", "9": "canes", "10": "bringing", "11": "wooded", "12": "broiler", "13": "wooden", "14": "broiled", "15": "crotch", "16": "snuggles", "17": "scraper", "18": "snuggled", "19": "cooking", "20": "numeral", "21": "crouch", "22": "chins", "23": "china", "24": "kids", "25": "climbed", "26": "talbe", "27": "spotty", "28": "climber", "29": "golden", "30": "projection", "31": "stern", "32": "music", "33": "yahoo", "34": "schoolboys", "35": "copse", "36": "locked", "37": "locker", "38": "wand", "39": "pints", "40": "want", "41": "cookers", "42": "pinto", "43": "travel", "44": "barstools", "45": "over-sized", "46": "dinosaurs", "47": "wrong", "48": "domed", "49": "colorfully", "50": "tulip", "51": "fir", "52": "fit", "53": "screaming", "54": "fix", "55": "bulding", "56": "fin", "57": "effects", "58": "sixteen", "59": "undeveloped", "60": "arrow", "61": "windmill", "62": "telescope", "63": "grapefruits", "64": "smirk", "65": "mason", "66": "pumpkins", "67": "semi-trailer", "68": "bannanas", "69": "kfc", "70": "windmills", "71": "renovated", "72": "service", "73": "reuben", "74": "needed", "75": "master", "76": "bannister", "77": "handcuffs", "78": "idly", "79": "idle", "80": "feeling", "81": "dozen", "82": "mostly", "83": "racers", "84": "mouth", "85": "singer", "86": "tech", "87": "scream", "88": "saying", "89": "teresa", "90": "padded", "91": "pontoons", "92": "rich", "93": "rice", "94": "plate", "95": "umbilical", "96": "altogether", "97": "nicely", "98": "boarder", "99": "pretzel", "100": "patch", "101": "boarded", "102": "alternative", "103": "suticase", "104": "lots", "105": "extend", "106": "nature", "107": "wheelbarrow", "108": "heating", "109": "levitating", "110": "lookin", "111": "humming", "112": "union", "113": "fro", "114": ".", "115": "much", "116": "fry", "117": "tallest", "118": "obese", "119": "spin", "120": "professionally", "121": "paraglider", "122": "k", "123": "canoeing", "124": "eighteen", "125": "conditioner", "126": "hone", "127": "memorial", "128": "honk", "129": "split", "130": "boiled", "131": "marches", "132": "boiler", "133": "stillness", "134": "goofing", "135": "corporate", "136": "plaque", "137": "bellow", "138": "waterboard", "139": "lasso", "140": "ham", "141": "had", "142": "hay", "143": "duffel", "144": "has", "145": "hat", "146": "municipal", "147": "elders", "148": "confection", "149": "clustered", "150": "shadow", "151": "crowd", "152": "crown", "153": "topping", "154": "crows", "155": "billboard", "156": "bottom", "157": "treadmill", "158": "slivers", "159": "binder", "160": "starring", "161": "benches", "162": "benched", "163": "maxwell", "164": "mangos", "165": "shoots", "166": "fabric", "167": "altitude", "168": "tame", "169": "grasping", "170": "avocados", "171": "grooms", "172": "denoting", "173": "peperoni", "174": "duel", "175": "rippling", "176": "peson", "177": "open-air", "178": "servings", "179": "smashed", "180": "passenger", "181": "ornaments", "182": "calzones", "183": "paperwork", "184": "triangles", "185": "crowns", "186": "pasadena", "187": "role", "188": "roll", "189": "palms", "190": "ointment", "191": "transported", "192": "intent", "193": "smelling", "194": "windsocks", "195": "overturned", "196": "gown", "197": "childs", "198": "chain", "199": "whoever", "200": "chair", "201": "ballet", "202": "crates", "203": "crater", "204": "mache", "205": "balled", "206": "lit-up", "207": "choice", "208": "gloomy", "209": "stays", "210": "exact", "211": "minute", "212": "talbot", "213": "cooks", "214": "minnie", "215": "skewer", "216": "meadow", "217": "trails", "218": "chopping", "219": "shirts", "220": "adorns", "221": "headset", "222": "celebrates", "223": "climbs", "224": "address", "225": "dusty", "226": "queue", "227": "inquisitively", "228": "para-sailing", "229": "working", "230": "tundra", "231": "consoles", "232": "riders", "233": "following", "234": "zippers", "235": "admired", "236": "mirrors", "237": "mailboxes", "238": "parachute", "239": "locks", "240": "admires", "241": "listens", "242": "fueled", "243": "surfing", "244": "mango", "245": "pulled", "246": "blowup", "247": "webpage", "248": "years", "249": "milked", "250": "suspension", "251": "apron", "252": "drilling", "253": "sorted", "254": "leather", "255": "fisherman", "256": "quartet", "257": "retrieve", "258": "receipt", "259": "sponsor", "260": "entering", "261": "salads", "262": "troll", "263": "seriously", "264": "internet", "265": "complicated", "266": "grandma", "267": "modest", "268": "pouches", "269": "saving", "270": "ona", "271": "one", "272": "veldt", "273": "ont", "274": "shawl", "275": "herds", "276": "crossroads", "277": "wandering", "278": "turned", "279": "locations", "280": "jewels", "281": "fashionable", "282": "washbasin", "283": "zoo", "284": "sprawls", "285": "printer", "286": "opposite", "287": "spewing", "288": "buffet", "289": "printed", "290": "bi-plane", "291": "aggressive", "292": "guarded", "293": "suitcases", "294": "tilting", "295": "balconies", "296": "awaiting", "297": "tiki", "298": "tortilla", "299": "vision", "300": "enjoys", "301": "majestically", "302": "flipped", "303": "s", "304": "workplace", "305": "concentrates", "306": "grooming", "307": "west", "308": "wants", "309": "formed", "310": "dark-colored", "311": "photos", "312": "former", "313": "newspaper", "314": "situation", "315": "necks", "316": "engaged", "317": "engages", "318": "demolition", "319": "wires", "320": "edged", "321": "singapore", "322": "edges", "323": "wired", "324": "advertisement", "325": "masks", "326": "pecks", "327": "steamed", "328": "being", "329": "recycled", "330": "steamer", "331": "rover", "332": "grounded", "333": "plumes", "334": "sumo", "335": "traffic", "336": "world", "337": "postal", "338": "shutter", "339": "seating", "340": "tvs", "341": "diving", "342": "stagecoach", "343": "thailand", "344": "luxurious", "345": "pelicans", "346": "lively", "347": "bubbly", "348": "lounging", "349": "rumbles", "350": "sealed", "351": "bubble", "352": "wits", "353": "foreheads", "354": "with", "355": "pull", "356": "rush", "357": "rags", "358": "dirty", "359": "rust", "360": "watches", "361": "watched", "362": "cream", "363": "puppy", "364": "passerby", "365": "waving", "366": "tricky", "367": "tricks", "368": "dyed", "369": "beware", "370": "ceramic", "371": "roadway", "372": "sand", "373": "small", "374": "past", "375": "displays", "376": "pass", "377": "crosswalks", "378": "clock", "379": "para-sail", "380": "full", "381": "hash", "382": "diapers", "383": "portrays", "384": "frumpled", "385": "civilians", "386": "experience", "387": "prior", "388": "followed", "389": "adidas", "390": "unrecognizable", "391": "more", "392": "door", "393": "company", "394": "corrected", "395": "exposing", "396": "installing", "397": "learn", "398": "knocked", "399": "seagull", "400": "scramble", "401": "huge", "402": "respective", "403": "speedboat", "404": "hugs", "405": "sprinkle", "406": "intended", "407": "fluffed", "408": "resemble", "409": "twisting", "410": "overcooked", "411": "trellis", "412": "wooly", "413": "installed", "414": "stylus", "415": "paper", "416": "scott", "417": "signs", "418": "smiling", "419": "schoolhouse", "420": "roots", "421": "hounds", "422": "sauce", "423": "colleague", "424": "gadget", "425": "frisbe", "426": "frisby", "427": "frizzy", "428": "weeds", "429": "weedy", "430": "courses", "431": "piping", "432": "chipping", "433": "brunette", "434": "operation", "435": "lipstick", "436": "scoops", "437": "denotes", "438": "terra", "439": "calzone", "440": "outfitted", "441": "airway", "442": "plowing", "443": "pairs", "444": "carry-on", "445": "benedict", "446": "moderately", "447": "saint", "448": "easel", "449": "interviewed", "450": "burrito", "451": "ave.", "452": "tummy", "453": "emirates", "454": "guarding", "455": "graffiti", "456": "blond", "457": "burried", "458": "sell", "459": "self", "460": "also", "461": "butterflies", "462": "singles", "463": "dirtbike", "464": "sometimes", "465": "barred", "466": "barren", "467": "barrel", "468": "bulletin", "469": "blended", "470": "blender", "471": "access", "472": "wraps", "473": "streetlights", "474": "gooey", "475": "cassette", "476": "removable", "477": "columns", "478": "sunny", "479": "compass", "480": "restrooms", "481": "seperated", "482": "caramel", "483": "tanker", "484": "delicately", "485": "touch", "486": "sips", "487": "analog", "488": "project", "489": "sparsely", "490": "untouched", "491": "last", "492": "connection", "493": "objects", "494": "bell", "495": "iphones", "496": "desktop", "497": "belt", "498": "suburbs", "499": "extravagant", "500": "formations", "501": "treatment", "502": "frito", "503": "awake", "504": "presses", "505": "caged", "506": "admire", "507": "pressed", "508": "cages", "509": "30", "510": "motors", "511": "cuisine", "512": "flooded", "513": "infamous", "514": "clasped", "515": "cheddar", "516": "goblet", "517": "parents", "518": "emergency", "519": "couple", "520": "marquee", "521": "individuals", "522": "spins", "523": "sundaes", "524": "bouncy", "525": "underbelly", "526": "and/or", "527": "scrubs", "528": "measurements", "529": "novelty", "530": "cupped", "531": "inserting", "532": "concealed", "533": "obscured", "534": "wrinkles", "535": "melbourne", "536": "frisbie", "537": "wrinkled", "538": "canning", "539": "chirping", "540": "sightseeing", "541": "span", "542": "harnessed", "543": "tasting", "544": "sock", "545": "harnesses", "546": "opens", "547": "hawaiian", "548": "atlantic", "549": "peepee", "550": "paired", "551": "faded", "552": "chat", "553": "surveying", "554": "lufthansa", "555": "lane", "556": "land", "557": "wafer", "558": "beverage", "559": "amish", "560": "splashing", "561": "cobalt", "562": "totes", "563": "windowsill", "564": "glows", "565": "carelessly", "566": "decorating", "567": "forks", "568": "harbor", "569": "disheveled", "570": "crook", "571": "video", "572": "boutonniere", "573": "sweaty", "574": "flowing", "575": "fifteen", "576": "survey", "577": "derby", "578": "makes", "579": "maker", "580": "thats", "581": "nibbling", "582": "strainer", "583": "next", "584": "eleven", "585": "pencil", "586": "baby", "587": "placard", "588": "customer", "589": "scatter", "590": "wedge", "591": "process", "592": "lock", "593": "billboards", "594": "rode", "595": "promotional", "596": "nears", "597": "rods", "598": "tightrope", "599": "bilingual", "600": "clasping", "601": "chow", "602": "curving", "603": "robot", "604": "houston", "605": "thigh", "606": "spatula", "607": "directs", "608": "perfect", "609": "forest", "610": "glassed", "611": "scenic", "612": "glasses", "613": "bump", "614": "books", "615": "'", "616": "boutique", "617": "frowns", "618": "stab", "619": "chilli", "620": "backless", "621": "gallons", "622": "could", "623": "chilly", "624": "length", "625": "receding", "626": "motorbikes", "627": "scene", "628": "festival", "629": "enforcement", "630": "vigorous", "631": "quarry", "632": "false", "633": "tonight", "634": "mountainous", "635": "dishes", "636": "dished", "637": "petals", "638": "romaine", "639": "bred", "640": "thanksgiving", "641": "woolly", "642": "greenhouse", "643": "taps", "644": "jay", "645": "jar", "646": "terminal", "647": "jal", "648": "jam", "649": "tape", "650": "riding", "651": "matress", "652": "styrofoam", "653": "aer", "654": "vying", "655": "stuff", "656": "rapped", "657": "frame", "658": "skateboarding", "659": "tented", "660": "staring", "661": "doorway", "662": "potties", "663": "feather", "664": ">", "665": "describe", "666": "commuter", "667": "stuffing", "668": "mover", "669": "tattoo", "670": "moves", "671": "innings", "672": "colts", "673": "ofa", "674": "off", "675": "shotgun", "676": "patterns", "677": "audio", "678": "newest", "679": "clocks", "680": "web", "681": "wee", "682": "wed", "683": "wet", "684": "villagers", "685": "stooped", "686": "tick", "687": "pier", "688": "pies", "689": "become", "690": "choosing", "691": "flush", "692": "hissing", "693": "blonde", "694": "hipsters", "695": "mementos", "696": "saucepan", "697": "pomeranian", "698": "pressure", "699": "swimming", "700": "letters", "701": "brownies", "702": "bagged", "703": "tossed", "704": "places", "705": "excitement", "706": "placed", "707": "tosses", "708": "problem", "709": "nurses", "710": "compared", "711": "tubular", "712": "details", "713": "ponytail", "714": "outlets", "715": "exposure", "716": "searches", "717": "compete", "718": "gardens", "719": "magnetic", "720": "nursery", "721": "worth", "722": "progression", "723": "ocean-side", "724": "notifying", "725": "jamaica", "726": "panda", "727": "machines", "728": "croutons", "729": "protection", "730": "watermelons", "731": "wii-mote", "732": "otters", "733": "lavatory", "734": "cities", "735": "bra", "736": "plot", "737": "plow", "738": "sweater", "739": "coins", "740": "bundles", "741": "bundled", "742": "separated", "743": "separates", "744": "blocking", "745": "cuddle", "746": "era", "747": "elbow", "748": "indicated", "749": "indicates", "750": "yarn", "751": "basebal", "752": "recovery", "753": "carriers", "754": "provide", "755": "nuts", "756": "ladder", "757": "hong", "758": "bared", "759": "arch", "760": "popsicle", "761": "production", "762": "coffee", "763": "safe", "764": "collide", "765": "reaches", "766": "l", "767": "dingy", "768": "flyers", "769": "feeds", "770": "dumping", "771": "two-tiered", "772": "sled", "773": "slew", "774": "trainers", "775": "barrier", "776": "colorless", "777": "fastening", "778": "lollipop", "779": "shrubbery", "780": "baseman", "781": "alcohol", "782": "sprig", "783": "another", "784": "disembark", "785": "electronic", "786": "doge", "787": "elevator", "788": "john", "789": "dogs", "790": "emblem", "791": "cereal", "792": "historical", "793": "giraffes", "794": "portraits", "795": "giraffee", "796": "contents", "797": "convenient", "798": "gravy", "799": "disembarking", "800": "germany", "801": "grave", "802": "swamp", "803": "bracket", "804": "reserve", "805": "firehose", "806": "lense", "807": "panned", "808": "mid-flight", "809": "cashews", "810": "rectangle", "811": "cappuccino", "812": "hangings", "813": "skiiing", "814": "roundabout", "815": "runs", "816": "scrubber", "817": "emo", "818": "emu", "819": "gears", "820": "ems", "821": "dustbin", "822": "zookeeper", "823": "hairbrush", "824": "techniques", "825": "pastel", "826": "draws", "827": "smoggy", "828": "pasted", "829": "away", "830": "drawn", "831": "shields", "832": "handful", "833": "visited", "834": "kitchen", "835": "climate", "836": "tone", "837": "sissors", "838": "tons", "839": "tony", "840": "4-way", "841": "attacked", "842": "cylinder", "843": "tissue", "844": "cone", "845": "warthog", "846": "wheel", "847": "crockery", "848": "hang", "849": "hand", "850": "traffice", "851": "on", "852": "musical", "853": "trainer", "854": "heart-shaped", "855": "yamaha", "856": "amoco", "857": "lcd", "858": "hairless", "859": "cooler", "860": "sparse", "861": "night", "862": "born", "863": "confusing", "864": "congratulate", "865": "asking", "866": "adorable", "867": "peek", "868": "peel", "869": "architectural", "870": "peer", "871": "pees", "872": "peep", "873": "breaded", "874": "candlesticks", "875": "rendering", "876": "needles", "877": "sailboats", "878": "captive", "879": "different", "880": "coverings", "881": "o'clock", "882": "enthused", "883": "skinny", "884": "alertly", "885": "beds", "886": "gutting", "887": "concept", "888": "silverware", "889": "horseback", "890": "battle", "891": "layers", "892": "automobiles", "893": "dark-haired", "894": "turns", "895": "gun", "896": "gum", "897": "guy", "898": "cost", "899": "barbie", "900": "shares", "901": "peels", "902": "shared", "903": "teaches", "904": "teacher", "905": "sending", "906": "bangs", "907": "franklin", "908": "ancient", "909": "pillow", "910": "macintosh", "911": "extra", "912": "uphill", "913": "puffed", "914": "or", "915": "intently", "916": "countertops", "917": "skaters", "918": "ibm", "919": "decked", "920": "decker", "921": "parasailor", "922": "chip", "923": "sake", "924": "chin", "925": "chic", "926": "discussion", "927": "spreads", "928": "varnished", "929": "product", "930": "disgusted", "931": "produce", "932": "vases", "933": "noses", "934": "grandson", "935": "brussel", "936": "corona", "937": "serving", "938": "barnyard", "939": "ended", "940": "tablets", "941": "still", "942": "spacious", "943": "tiara", "944": "non", "945": "slacks", "946": "not", "947": "now", "948": "galloping", "949": "drop", "950": "unloaded", "951": "furnishing", "952": "stooping", "953": "soy", "954": "year", "955": "monitors", "956": "tangled", "957": "fe", "958": "blind", "959": "rink", "960": "rind", "961": "ring", "962": "caught", "963": "junkyard", "964": "kabob", "965": "professionals", "966": "launching", "967": "overnight", "968": "windsor", "969": "snout", "970": "equipment", "971": "mr.", "972": "awaits", "973": "neatly", "974": "america", "975": "breads", "976": "steady", "977": "scoreboard", "978": "canopies", "979": "snack", "980": "stair", "981": "stain", "982": "interstate", "983": "congratulations", "984": "stroll", "985": "burst", "986": "anchored", "987": "actively", "988": "landline", "989": "soldering", "990": "jeans", "991": "sledding", "992": "thumbs-up", "993": "tropical", "994": "elvis", "995": "obscuring", "996": "skiers", "997": "african-american", "998": "winks", "999": "cherub", "1000": "tilling", "1001": "inflatable", "1002": "figurines", "1003": "beaver", "1004": "waterway", "1005": "metered", "1006": "pillowcases", "1007": "squatted", "1008": "arctic", "1009": "foam", "1010": "thrown", "1011": "bagpipes", "1012": "taxi", "1013": "livestock", "1014": "battleship", "1015": "neon", "1016": "foot", "1017": "death", "1018": "basins", "1019": "swim", "1020": "propped", "1021": "amd", "1022": "stunt", "1023": "headpiece", "1024": "biathlon", "1025": "mid-stride", "1026": "blackberry", "1027": "twelve", "1028": "apartments", "1029": "assembly", "1030": "assemble", "1031": "bazaar", "1032": "backup", "1033": "stare", "1034": "start", "1035": "gaze", "1036": "stars", "1037": "pitcher", "1038": "pitches", "1039": "omelet", "1040": "pitched", "1041": "embedded", "1042": "cabinets", "1043": "poor", "1044": "poop", "1045": "treks", "1046": "pooh", "1047": "pool", "1048": "studio", "1049": "moonlight", "1050": "monte", "1051": "surboard", "1052": "month", "1053": "thoughtful", "1054": "religious", "1055": "dumpling", "1056": "decide", "1057": "locomotive", "1058": "ass", "1059": "streets", "1060": "expansive", "1061": "scallops", "1062": "tracks", "1063": "uneven", "1064": "pub", "1065": "inspired", "1066": "advertising", "1067": "conventional", "1068": "lowering", "1069": "producing", "1070": "grill", "1071": "747", "1072": "phrase", "1073": "flatbed", "1074": "cheering", "1075": "communicating", "1076": "horizontal", "1077": "anytime", "1078": "chopsticks", "1079": "photoshop", "1080": "remnants", "1081": "heron", "1082": "systems", "1083": "evening", "1084": "taxidermy", "1085": "cel", "1086": "petted", "1087": "starbucks", "1088": "predators", "1089": "fairy", "1090": "heavy", "1091": "miss", "1092": "midsection", "1093": "safety", "1094": "7", "1095": "mittens", "1096": "housed", "1097": "houses", "1098": "upclose", "1099": "dishwasher", "1100": "american", "1101": "picnicking", "1102": "horse", "1103": "blossom", "1104": "dug", "1105": "station", "1106": "hundred", "1107": "trapped", "1108": "ipads", "1109": "grey", "1110": "gren", "1111": "toward", "1112": "randomly", "1113": "cave", "1114": "wallpapered", "1115": "backswing", "1116": "sturdy", "1117": "rockefeller", "1118": "tongs", "1119": "tubes", "1120": "kitcehn", "1121": "kales", "1122": "porcupine", "1123": "feels", "1124": "pretending", "1125": "competing", "1126": "imitating", "1127": "locale", "1128": "culture", "1129": "close", "1130": "pictures", "1131": "pictured", "1132": "missing", "1133": "zipped", "1134": "spray", "1135": "zipper", "1136": "kneeled", "1137": "hoisted", "1138": "unfolded", "1139": "kart", "1140": "instructing", "1141": "empty", "1142": "lived", "1143": "lives", "1144": "intriguing", "1145": "pace", "1146": "guide", "1147": "pack", "1148": "smacked", "1149": "petal", "1150": "embroidered", "1151": "communal", "1152": "makeshift", "1153": "grand", "1154": "composition", "1155": "wet-suit", "1156": "lie", "1157": "friends", "1158": "youngsters", "1159": "technicians", "1160": "informal", "1161": "cherries", "1162": "lip", "1163": "showing", "1164": "flamingo", "1165": "vests", "1166": "oncoming", "1167": "popular", "1168": "lips", "1169": "dilapidated", "1170": "spouting", "1171": "assists", "1172": "smothered", "1173": "handbags", "1174": "tofu", "1175": "taillights", "1176": "carnations", "1177": "placing", "1178": "similar", "1179": "ordered", "1180": "cream-colored", "1181": "umbrealla", "1182": "amounts", "1183": "application", "1184": "department", "1185": "aprons", "1186": "manhattan", "1187": "smiles", "1188": "smiley", "1189": "earphones", "1190": "e", "1191": "dvd", "1192": "turbines", "1193": "compact", "1194": "windsurfer", "1195": "friendly", "1196": "wave", "1197": "wavy", "1198": "telling", "1199": "snowboards", "1200": "positions", "1201": "michael", "1202": "watered", "1203": "queen", "1204": "pepper", "1205": "jump", "1206": "redone", "1207": "muffs", "1208": "pancake", "1209": "salvation", "1210": "manage", "1211": "all-white", "1212": "camera", "1213": "formally", "1214": "visibility", "1215": "charming", "1216": "appointed", "1217": "boards", "1218": "lapse", "1219": "meet", "1220": "links", "1221": "pulling", "1222": "picturesque", "1223": "bandana", "1224": "embellished", "1225": "fare", "1226": "farm", "1227": "peeling", "1228": "ronald", "1229": "scoop", "1230": "costume", "1231": "during", "1232": "walnut", "1233": "frontal", "1234": "brocolli", "1235": "university", "1236": "slide", "1237": "paddleboard", "1238": "ankles", "1239": "attachments", "1240": "bluetooth", "1241": "separating", "1242": "flys", "1243": "entertainment", "1244": "armor", "1245": "gloves", "1246": "cause", "1247": "darkly", "1248": "underpass", "1249": "timey", "1250": "timer", "1251": "times", "1252": "airborn", "1253": "powerful", "1254": "bitch", "1255": "headscarf", "1256": "wrapper", "1257": "wrapped", "1258": "newlywed", "1259": "mountaintop", "1260": "blades", "1261": "snowed", "1262": "gallery", "1263": "cellphone", "1264": "urn", "1265": "ottoman", "1266": "unfinished", "1267": "sheriff", "1268": "brighten", "1269": "well-used", "1270": "trucks", "1271": "tuned", "1272": "widow", "1273": "officials", "1274": "operated", "1275": "tend", "1276": "tens", "1277": "tent", "1278": "ken", "1279": "keg", "1280": "hurrying", "1281": "avid", "1282": "kicking", "1283": "key", "1284": "hits", "1285": "sniff", "1286": "limits", "1287": "strains", "1288": "polka", "1289": "shoulders", "1290": "controlled", "1291": "controller", "1292": "smoking", "1293": "toothbrushes", "1294": "taupe", "1295": "examines", "1296": "surface", "1297": "examined", "1298": "proceeds", "1299": "parts", "1300": "speaker", "1301": "party", "1302": "dressed", "1303": "advertises", "1304": "oak", "1305": "batters", "1306": "cell-phone", "1307": "distant", "1308": "advertised", "1309": "run-down", "1310": "emblems", "1311": "riverside", "1312": "balloons", "1313": "oar", "1314": "propelled", "1315": "propeller", "1316": "intersection", "1317": "lincoln", "1318": "necessary", "1319": "lost", "1320": "lose", "1321": "likes", "1322": "trucked", "1323": "glare", "1324": "library", "1325": "trucker", "1326": "home", "1327": "steaming", "1328": "broad", "1329": "grinding", "1330": "cradle", "1331": "reaching", "1332": "hurls", "1333": "quarter", "1334": "contending", "1335": "cocoa", "1336": "additional", "1337": "north", "1338": "triangular", "1339": "fountains", "1340": "astro", "1341": "strawberries", "1342": "gain", "1343": "sprinkling", "1344": "highest", "1345": "territory", "1346": "display", "1347": "marketplace", "1348": "universal", "1349": "kisses", "1350": "functions", "1351": "finch", "1352": "star", "1353": "stay", "1354": "foil", "1355": "grille", "1356": "amp", "1357": "samsung", "1358": "knelt", "1359": "consists", "1360": "buddy", "1361": "painters", "1362": "swat", "1363": "sorry", "1364": "fists", "1365": "collaborate", "1366": "void", "1367": "snow-filled", "1368": "crops", "1369": "snowsuits", "1370": "likely", "1371": "foodstuffs", "1372": "helmets", "1373": "niche", "1374": "wakeboard", "1375": "men", "1376": "disposable", "1377": "met", "1378": "rafting", "1379": "heeled", "1380": "slicer", "1381": "slices", "1382": "sliced", "1383": "sittng", "1384": "guests", "1385": "jackets", "1386": "berlin", "1387": "room", "1388": "trots", "1389": "roof", "1390": "movies", "1391": "root", "1392": "dividers", "1393": "foods", "1394": "shelving", "1395": "amazing", "1396": "manuals", "1397": "passageway", "1398": "third", "1399": "descends", "1400": "defaced", "1401": "goodbye", "1402": "operate", "1403": "budding", "1404": "windshield", "1405": "before", "1406": "personal", "1407": "crew", "1408": "sprays", "1409": "combination", "1410": "glazes", "1411": "caterpillar", "1412": "glazed", "1413": "motorcyclist", "1414": "ventilation", "1415": "ducking", "1416": "gargoyle", "1417": "calmly", "1418": "aids", "1419": "sking", "1420": "merchants", "1421": "ihop", "1422": "u.s.", "1423": "ascending", "1424": "hoodie", "1425": "blinders", "1426": "boarders", "1427": "lettuce", "1428": "warped", "1429": "hawks", "1430": "digs", "1431": "begins", "1432": "knights", "1433": "palace", "1434": "ginger", "1435": "tells", "1436": "stoplights", "1437": "fitting", "1438": "sleeper", "1439": "llamas", "1440": "umbella", "1441": "mario", "1442": "observation", "1443": "competitors", "1444": "annoyed", "1445": "liberty", "1446": "celery", "1447": "appetizer", "1448": "watermelon", "1449": "pallets", "1450": "saturn", "1451": "traverses", "1452": "stooges", "1453": "troop", "1454": "giraff", "1455": "ears", "1456": "lettering", "1457": "artificial", "1458": "wears", "1459": "bison", "1460": "presumably", "1461": "buries", "1462": "lanterns", "1463": "tins", "1464": "patrolling", "1465": "parsley", "1466": "tiny", "1467": "ting", "1468": "basic", "1469": "basil", "1470": "basin", "1471": "lovely", "1472": "houseplants", "1473": "tudor", "1474": "luggage", "1475": "ugly", "1476": "ceilings", "1477": "toped", "1478": "seven", "1479": "cane", "1480": "well-kept", "1481": "cant", "1482": "cans", "1483": "sever", "1484": "shoveling", "1485": "meets", "1486": "bearded", "1487": "unicorn", "1488": "midway", "1489": "flops", "1490": "fighters", "1491": "yes", "1492": "yet", "1493": "skiier", "1494": "royal", "1495": "contestant", "1496": "save", "1497": "trimming", "1498": "roosting", "1499": "sailors", "1500": "margherita", "1501": "hatchback", "1502": "picutre", "1503": "nude", "1504": "kitesurfing", "1505": "zombies", "1506": "deal", "1507": "dead", "1508": "platters", "1509": "vaulted", "1510": "dear", "1511": "carts", "1512": "skateboarded", "1513": "microwave", "1514": "shakespeare", "1515": "skateboarder", "1516": "confrontation", "1517": "oreo", "1518": "would", "1519": "magazine", "1520": "afternoon", "1521": "seabird", "1522": "hospital", "1523": "subs", "1524": "selfie", "1525": "crochet", "1526": "down", "1527": "tennis", "1528": "batman", "1529": "landing", "1530": "feminine", "1531": "sprigs", "1532": "whiskey", "1533": "tangerines", "1534": "muffins", "1535": "marking", "1536": "leafless", "1537": "holly", "1538": "handicap", "1539": "utilities", "1540": "journey", "1541": "weekend", "1542": "jacked", "1543": "happening", "1544": "jacket", "1545": "meander", "1546": "sittiing", "1547": "anticipation", "1548": "father", "1549": "congratulating", "1550": "round", "1551": "fillet", "1552": "international", "1553": "filled", "1554": "frosting", "1555": "box", "1556": "boy", "1557": "bot", "1558": "bow", "1559": "boa", "1560": "bob", "1561": "bog", "1562": "teenage", "1563": "sweating", "1564": "estate", "1565": "lockers", "1566": "stoops", "1567": "visit", "1568": "vineyard", "1569": "freestyle", "1570": "bushels", "1571": "drags", "1572": "making", "1573": "nearest", "1574": "sample", "1575": "windowed", "1576": "gourds", "1577": "tablecloth", "1578": "waist", "1579": "basket", "1580": "shoes", "1581": "police", "1582": "monitor", "1583": "lieing", "1584": "interesting", "1585": "grouo", "1586": "tucked", "1587": "lunch", "1588": "markings", "1589": "showcasing", "1590": "elephants", "1591": "fingertips", "1592": "description", "1593": "stitch", "1594": "cloth-covered", "1595": "ajar", "1596": "carnival", "1597": "waiter", "1598": "funky", "1599": "jumping", "1600": "first", "1601": "speaking", "1602": "passanger", "1603": "meme", "1604": "memo", "1605": "set-up", "1606": "amid", "1607": "strolls", "1608": "lick", "1609": "pastry", "1610": "nazi", "1611": "squat", "1612": "shocked", "1613": "squad", "1614": "performance", "1615": "jungle", "1616": "pedestals", "1617": "sheets", "1618": "tugging", "1619": "queens", "1620": "voodoo", "1621": "reef", "1622": "sites", "1623": "enthusiast", "1624": "stormy", "1625": "enthusiasm", "1626": "get", "1627": "vender", "1628": "blends", "1629": "gel", "1630": "malaysian", "1631": "miles", "1632": "flamingos", "1633": "seas", "1634": "seal", "1635": "wonder", "1636": "enough", "1637": "across", "1638": "coupons", "1639": "restroom", "1640": "tour", "1641": "awards", "1642": "among", "1643": "cabinetry", "1644": "spans", "1645": "pacifier", "1646": "capable", "1647": "attaching", "1648": "judging", "1649": "squash", "1650": "laptops", "1651": "dramatic", "1652": "wake", "1653": "sound", "1654": "ratchet", "1655": "coca", "1656": "coco", "1657": "beachside", "1658": "slapping", "1659": "cock", "1660": "sleeping", "1661": "strain", "1662": "loosing", "1663": "protein", "1664": "woodland", "1665": "lava", "1666": "extended", "1667": "assist", "1668": "companion", "1669": "motorcade", "1670": "alfalfa", "1671": "outdoor", "1672": "sights", "1673": "griddle", "1674": "flavor", "1675": "vertically", "1676": "vending", "1677": "pandas", "1678": "escalators", "1679": "buidling", "1680": "naan", "1681": "images", "1682": "outs", "1683": "knife", "1684": "raincoat", "1685": "raptor", "1686": "demonic", "1687": "pockets", "1688": "uhaul", "1689": "skilled", "1690": "harness", "1691": "skillet", "1692": "pastures", "1693": "paraphernalia", "1694": "distracted", "1695": "spicy", "1696": "spice", "1697": "arranged", "1698": "bow-tie", "1699": "arranges", "1700": "peeking", "1701": "railed", "1702": "rapids", "1703": "examine", "1704": "again", "1705": "designating", "1706": "lving", "1707": "u", "1708": "commute", "1709": "expressions", "1710": "briefcases", "1711": "shattered", "1712": "preserves", "1713": "preserver", "1714": "preserved", "1715": "enjoying", "1716": "puffs", "1717": "sitting", "1718": "puffy", "1719": "winning", "1720": "surfboarder", "1721": "ramen", "1722": "newly", "1723": "washing", "1724": "20th", "1725": "strung", "1726": "perspective", "1727": "creatures", "1728": "residue", "1729": "swampy", "1730": "brackets", "1731": "wrecked", "1732": "trinket", "1733": "all-way", "1734": "videogame", "1735": "mule", "1736": "squeezed", "1737": "affectionately", "1738": "meowing", "1739": "sofas", "1740": "lasagna", "1741": "dachshund", "1742": "plastered", "1743": "tacks", "1744": "caboose", "1745": "landed", "1746": "karaoke", "1747": "hour", "1748": "sucks", "1749": "guards", "1750": "remain", "1751": "specialized", "1752": "junked", "1753": "numbers", "1754": "needs", "1755": "technology", "1756": "acts", "1757": "maps", "1758": "stir", "1759": "soda", "1760": "coming", "1761": "toiletries", "1762": "dragon", "1763": "upholstered", "1764": "through", "1765": "unsliced", "1766": "messed", "1767": "emaciated", "1768": "messes", "1769": "pesto", "1770": "worshiping", "1771": "compound", "1772": "viewers", "1773": "mystery", "1774": "huddle", "1775": "micro", "1776": "engaging", "1777": "bandaged", "1778": "heights", "1779": "mmm", "1780": "extraordinary", "1781": "backed", "1782": "water..", "1783": "beginning", "1784": "faucet", "1785": "needing", "1786": "taht", "1787": "embraces", "1788": "treetops", "1789": "shapped", "1790": "valentine", "1791": "antiques", "1792": "fiction", "1793": "razor", "1794": "jetty", "1795": "hummingbird", "1796": "tom", "1797": "trolly", "1798": "scantily", "1799": "gowns", "1800": "obstructed", "1801": "tricycles", "1802": "bassinet", "1803": "curtains", "1804": "trudges", "1805": "weenies", "1806": "couch", "1807": "lifts", "1808": "rafters", "1809": "serene", "1810": "eggs", "1811": "chart", "1812": "charm", "1813": "services", "1814": "sunhat", "1815": "feasting", "1816": "drifts", "1817": "reflections", "1818": "espresso", "1819": "sup", "1820": "converge", "1821": "businesses", "1822": "choco", "1823": "express", "1824": "toddlers", "1825": "breast", "1826": "forty-five", "1827": "spikes", "1828": "motorcycles", "1829": "doubled", "1830": "spiked", "1831": "witches", "1832": "doubles", "1833": "mouthwash", "1834": "restaurants", "1835": "ktichen", "1836": "snow-capped", "1837": "quiche", "1838": "expert", "1839": "cutout", "1840": "mailbox", "1841": "generator", "1842": "restaurant", "1843": "trainyard", "1844": "foreign", "1845": "suede", "1846": "baltimore", "1847": "point", "1848": "pamphlet", "1849": "expensive", "1850": "weaving", "1851": "screened", "1852": "peppers", "1853": "assorted", "1854": "politician", "1855": "grains", "1856": "grainy", "1857": "tiered", "1858": "skiff", "1859": "century", "1860": "screws", "1861": "stoves", "1862": "concoction", "1863": "corridor", "1864": "development", "1865": "strips", "1866": "tupperware", "1867": "stripe", "1868": "horse-drawn", "1869": "lacrosse", "1870": "gestures", "1871": "task", "1872": "nordic", "1873": "shape", "1874": "rundown", "1875": "cut", "1876": "cup", "1877": "source", "1878": "cud", "1879": "cub", "1880": "easter", "1881": "valleys", "1882": "candle", "1883": "gallops", "1884": "erected", "1885": "moored", "1886": "motivational", "1887": "planet", "1888": "planes", "1889": "stripped", "1890": "mopeds", "1891": "curb", "1892": "appetizing", "1893": "curl", "1894": "cafe", "1895": "mayonnaise", "1896": "cellar", "1897": "restoration", "1898": "overlooking", "1899": "cooker", "1900": "cooked", "1901": "presenting", "1902": "valves", "1903": "portraying", "1904": "stree", "1905": "groceries", "1906": "snowmobile", "1907": "stret", "1908": "vietnamese", "1909": "dessert", "1910": "legos", "1911": "entire", "1912": "announcing", "1913": "spicket", "1914": "rivers", "1915": "treeline", "1916": "assisted", "1917": "beasts", "1918": "packing", "1919": "later", "1920": "climb", "1921": "composed", "1922": "charcoal", "1923": "excitedly", "1924": "kiosk", "1925": "prizes", "1926": "nypd", "1927": "closing", "1928": "fetch", "1929": "varied", "1930": "holds", "1931": "varies", "1932": "profile", "1933": "y", "1934": "watch", "1935": "chasing", "1936": "amazon", "1937": "unmade", "1938": "mustache", "1939": "symbols", "1940": "horns", "1941": "twirls", "1942": "pugs", "1943": "sapling", "1944": "straddling", "1945": "blindfolded", "1946": "cider", "1947": "backboard", "1948": "flair", "1949": "dixie", "1950": "pantry", "1951": "entree", "1952": "popping", "1953": "hippopotamus", "1954": "barley", "1955": "flushing", "1956": "approached", "1957": "fourteen", "1958": "approaches", "1959": "backwards", "1960": "yard", "1961": "mortar", "1962": "skateboard", "1963": "vehicular", "1964": "workbook", "1965": "sack", "1966": "sloped", "1967": "reached", "1968": "braces", "1969": "bologna", "1970": "staning", "1971": "vagina", "1972": "bulldog", "1973": "nobody", "1974": "foamy", "1975": "1960s", "1976": "hen", "1977": "ganache", "1978": "have", "1979": "throat", "1980": "ramping", "1981": "payment", "1982": "beets", "1983": "occasion", "1984": "recess", "1985": "settee", "1986": "rotating", "1987": "thicket", "1988": "chilies", "1989": "homeplate", "1990": "prancing", "1991": "emitting", "1992": "starch", "1993": "monopoly", "1994": "fixes", "1995": "teams", "1996": "mercedes", "1997": "fixed", "1998": "turkeys", "1999": "daffodils", "2000": "racket", "2001": "tuxedos", "2002": "attempting", "2003": "hammock", "2004": "boundary", "2005": "cauliflower", "2006": "placidly", "2007": "joke", "2008": "equal", "2009": "pulp", "2010": "broom", "2011": "statues", "2012": "denim", "2013": "swimmer", "2014": "newscast", "2015": "seasoned", "2016": "rump", "2017": "antlers", "2018": "caddy", "2019": "locomotives", "2020": "welcoming", "2021": "widescreen", "2022": "squid", "2023": "weighed", "2024": "cathay", "2025": "arrangements", "2026": "closets", "2027": "partner", "2028": "tranquil", "2029": "grinder", "2030": ")", "2031": "sisters", "2032": "yoga", "2033": "teeshirt", "2034": "ravine", "2035": "wreckage", "2036": "stores", "2037": "stored", "2038": "seductively", "2039": "flashlight", "2040": "onward", "2041": "smart", "2042": "like", "2043": "vibrant", "2044": "chick", "2045": "classical", "2046": "hair", "2047": "happens", "2048": "bulbous", "2049": "screwed", "2050": "snuggle", "2051": "nathans", "2052": "topiary", "2053": "socks", "2054": "female", "2055": "rushes", "2056": "coke", "2057": "landscaping", "2058": "domino", "2059": "circus", "2060": "fettuccine", "2061": "loft", "2062": "detail", "2063": "dresses", "2064": "dresser", "2065": "top..", "2066": "stirred", "2067": "stirrer", "2068": "@", "2069": "school", "2070": "glued", "2071": "feathery", "2072": "feathers", "2073": "direct", "2074": "nail", "2075": "monorail", "2076": "blue", "2077": "hide", "2078": "supplied", "2079": "blur", "2080": "supplies", "2081": "beck", "2082": "mozzarella", "2083": "tinsel", "2084": "leaves", "2085": "settled", "2086": "prints", "2087": "meats", "2088": "meaty", "2089": "spiky", "2090": "tenders", "2091": "distributing", "2092": "limousine", "2093": "refection", "2094": "saber", "2095": "excellent", "2096": "abundance", "2097": "dolphin", "2098": "gadgets", "2099": "overheard", "2100": "attract", "2101": "ceremony", "2102": "drummer", "2103": "elizabeth", "2104": "salsa", "2105": "parallel", "2106": "girders", "2107": "upside", "2108": "plumbing", "2109": "crumbs", "2110": "forehead", "2111": "unzipped", "2112": "trams", "2113": "bails", "2114": "flotation", "2115": "rental", "2116": "detroit", "2117": "variation", "2118": "juggling", "2119": "pounce", "2120": "prosciutto", "2121": "laid", "2122": "carcass", "2123": "days", "2124": "outfits", "2125": "filter", "2126": "squinting", "2127": "attractions", "2128": "primary", "2129": "fantasy", "2130": "perching", "2131": "leaking", "2132": "reclining", "2133": "final", "2134": "bridge", "2135": "handkerchief", "2136": "seminar", "2137": "traditionally", "2138": "thoroughly", "2139": "thorough", "2140": "derek", "2141": "hatch", "2142": "jean", "2143": "screensaver", "2144": "entertaining", "2145": "leaguer", "2146": "alight", "2147": "colors", "2148": "peddle", "2149": "bail", "2150": "minnesota", "2151": "despite", "2152": "toolbox", "2153": "undressed", "2154": "beads", "2155": "solders", "2156": "anxiously", "2157": "keypad", "2158": "grandmother", "2159": "mud", "2160": "mug", "2161": "finger", "2162": "hopefully", "2163": "herding", "2164": "rims", "2165": "news", "2166": "collars", "2167": "antelopes", "2168": "conference", "2169": "pedaling", "2170": "vulcan", "2171": "n", "2172": "dashboard", "2173": "handrail", "2174": "dumplings", "2175": "broth", "2176": "tress", "2177": "accessories", "2178": "nike", "2179": "beside", "2180": "cross-country", "2181": "peaks", "2182": "pinstripe", "2183": "greeted", "2184": "shortly", "2185": "ocean", "2186": "dads", "2187": "snowman", "2188": "assembling", "2189": "rodent", "2190": "depart", "2191": "columned", "2192": "cherry", "2193": "focaccia", "2194": "breaks", "2195": "descending", "2196": "burns", "2197": "burnt", "2198": "melting", "2199": "50", "2200": "chests", "2201": "rhino", "2202": "tshirts", "2203": "skylight", "2204": "khaki", "2205": "dinner", "2206": "bathmat", "2207": "duke", "2208": "dials", "2209": "toothpicks", "2210": "ppk", "2211": "lavishly", "2212": "obscene", "2213": "fern", "2214": "abed", "2215": "bats", "2216": "sunlight", "2217": "stuck", "2218": "striding", "2219": "towing", "2220": "amateur", "2221": "6", "2222": "stereo", "2223": "sponge", "2224": "mannequins", "2225": "loitering", "2226": "nerdy", "2227": "zodiac", "2228": "cobbled", "2229": "sometime", "2230": "cobbler", "2231": "eerie", "2232": "when", "2233": "setting", "2234": "papers", "2235": "picture", "2236": "grasps", "2237": "football", "2238": "flusher", "2239": "flushed", "2240": "faster", "2241": "tested", "2242": "sacks", "2243": "vigorously", "2244": "uncovered", "2245": "vietnam", "2246": "fasten", "2247": "companions", "2248": "rom", "2249": "impression", "2250": "rod", "2251": "deliveries", "2252": "row", "2253": "suckles", "2254": "passage", "2255": "wallets", "2256": "tanks", "2257": "nunchuk", "2258": "clouds", "2259": "impressive", "2260": "level", "2261": "posts", "2262": "cloudy", "2263": "lever", "2264": "pork", "2265": "bales", "2266": "port", "2267": "stately", "2268": "goes", "2269": "entertain", "2270": "witch", "2271": "boast", "2272": "entrees", "2273": "tuxedo", "2274": "durham", "2275": "bulbs", "2276": "variously", "2277": "prep", "2278": "today", "2279": "cases", "2280": "edible", "2281": "meatball", "2282": "gazelles", "2283": "whle", "2284": "nursing", "2285": "figure", "2286": "plying", "2287": "cornflakes", "2288": "unloads", "2289": "scar", "2290": "sailboat", "2291": "fourth", "2292": "wakeboarder", "2293": "wagging", "2294": "representation", "2295": "farmer", "2296": "refrigerated", "2297": "bath", "2298": "gushing", "2299": "escorting", "2300": "woodpeckers", "2301": "grime", "2302": "coolers", "2303": "eagle", "2304": "manikin", "2305": "turn", "2306": "turf", "2307": "parasols", "2308": "stylized", "2309": "minimalistic", "2310": "stiing", "2311": "cards", "2312": "exchanging", "2313": "batting", "2314": "superman", "2315": "animation", "2316": "resembling", "2317": "surf", "2318": "sure", "2319": "donation", "2320": "icon", "2321": "beaded", "2322": "spaced", "2323": "cheap", "2324": "spaces", "2325": "trot", "2326": "gull", "2327": "written", "2328": "believing", "2329": "portions", "2330": "cautionary", "2331": "skewered", "2332": "joker", "2333": "surfaces", "2334": "crooked", "2335": "smokestack", "2336": "eat-in", "2337": "guitar", "2338": "offices", "2339": "quiet", "2340": "officer", "2341": "railway", "2342": "period", "2343": "stroking", "2344": "two-story", "2345": "turkey", "2346": "fury", "2347": "featuring", "2348": "peaking", "2349": "direction", "2350": "spirit", "2351": "pilot", "2352": "case", "2353": "cupping", "2354": "cash", "2355": "ironic", "2356": "participant", "2357": "fender", "2358": "claw-foot", "2359": "weed", "2360": "director", "2361": "delicate", "2362": "statue", "2363": "delectable", "2364": "without", "2365": "relief", "2366": "deflated", "2367": "polish", "2368": "airfield", "2369": "lets", "2370": "nectarines", "2371": "humping", "2372": "flashing", "2373": "aeroplanes", "2374": "squating", "2375": "towel", "2376": "patrick", "2377": "shoeless", "2378": "towed", "2379": "donations", "2380": "tower", "2381": "simulator", "2382": "competition", "2383": "lentils", "2384": "freez", "2385": "bento", "2386": "moon", "2387": "longboarder", "2388": "buddha", "2389": "googles", "2390": "porter", "2391": "diced", "2392": "beached", "2393": "chowing", "2394": "beaches", "2395": "fillings", "2396": "wildebeests", "2397": "rising", "2398": "pullman", "2399": "there", "2400": "fastball", "2401": "grasp", "2402": "grass", "2403": "vespas", "2404": "taste", "2405": "tasty", "2406": "roses", "2407": "pillows", "2408": "cordless", "2409": "wife", "2410": "qantas", "2411": "platter", "2412": "crumpled", "2413": "off-road", "2414": "wreath", "2415": "parakeets", "2416": "boxcars", "2417": "apartment", "2418": "dairy", "2419": "crest", "2420": "tethered", "2421": "egyptian", "2422": "list", "2423": "cascading", "2424": "cluttered", "2425": "sub", "2426": "sun", "2427": "sum", "2428": "brief", "2429": "suv", "2430": "version", "2431": "woma", "2432": "sunbathers", "2433": "toes", "2434": "underhanded", "2435": "milkshake", "2436": "camcorder", "2437": "65th", "2438": "guacamole", "2439": "binders", "2440": "donuts", "2441": "rustic", "2442": "garnish", "2443": "horses", "2444": "flat", "2445": "flap", "2446": "flag", "2447": "horsed", "2448": "flan", "2449": "rather", "2450": "untied", "2451": "tinfoil", "2452": "okay", "2453": "flip", "2454": "lighting", "2455": "adventure", "2456": "concentrating", "2457": "short", "2458": "susan", "2459": "shore", "2460": "shorn", "2461": "encased", "2462": "argyle", "2463": "handrails", "2464": "avenue", "2465": "processed", "2466": "mattress", "2467": "birdcages", "2468": "bout", "2469": "soccer", "2470": "somebody", "2471": "hunter", "2472": "eclectic", "2473": "instructions", "2474": "retrievers", "2475": "tilted", "2476": "weight", "2477": "commemorative", "2478": "hill", "2479": "roofs", "2480": "friday", "2481": "tassels", "2482": "snowboarding", "2483": "fallen", "2484": "urinal", "2485": "traveled", "2486": "traveler", "2487": "story", "2488": "leading", "2489": "comfy", "2490": "stork", "2491": "outcropping", "2492": "store", "2493": "king", "2494": "kind", "2495": "knive", "2496": "tongues", "2497": "skyscrapers", "2498": "wilson", "2499": "electric", "2500": "populate", "2501": "aman", "2502": "storefronts", "2503": "patterned", "2504": "lumbers", "2505": "traditional", "2506": "lying", "2507": "grazed", "2508": "grazes", "2509": "triangle", "2510": "gains", "2511": "bend", "2512": "necked", "2513": "engraved", "2514": "wrote", "2515": "defense", "2516": "heaped", "2517": "cosplay", "2518": "blurs", "2519": "overstuffed", "2520": "solo", "2521": "sold", "2522": "sole", "2523": "bibs", "2524": "bodyboard", "2525": "sititng", "2526": "kiteboards", "2527": "sweet", "2528": "wastebasket", "2529": "dudes", "2530": "village", "2531": "affectionate", "2532": "flight", "2533": "well-made", "2534": "instructor", "2535": "frozen", "2536": "homework", "2537": "demon", "2538": "vegitables", "2539": "obstacle", "2540": "shirt", "2541": "9", "2542": "daughters", "2543": "higher", "2544": "cement", "2545": "liquids", "2546": "machinery", "2547": "prince", "2548": "parasurfing", "2549": "collect", "2550": "saucer", "2551": "sized", "2552": "contrasting", "2553": "perpendicular", "2554": "zombie", "2555": "sporty", "2556": "pipeline", "2557": "kitchenette", "2558": "plaza", "2559": "range", "2560": "ballgame", "2561": "johns", "2562": "warmed", "2563": "impressed", "2564": "rows", "2565": "question", "2566": "long", "2567": "summertime", "2568": "prey", "2569": "kitchenware", "2570": "landscaped", "2571": "sepia", "2572": "rally", "2573": "rainbow", "2574": "peach", "2575": "peace", "2576": "backs", "2577": "nick", "2578": "nice", "2579": "users", "2580": "breasts", "2581": "meaning", "2582": "allowing", "2583": "posters", "2584": "dragged", "2585": "wording", "2586": "buffalo", "2587": "alien", "2588": "windy", "2589": "gang", "2590": "winds", "2591": "gold", "2592": "languages", "2593": "include", "2594": "leveled", "2595": "gripping", "2596": "wrestling", "2597": "fold", "2598": "folk", "2599": "showcase", "2600": "19th", "2601": "chose", "2602": "kangaroo", "2603": "explore", "2604": "distressed", "2605": "pickle", "2606": "larger", "2607": "shades", "2608": "leaving", "2609": "suggests", "2610": "submerged", "2611": "shaded", "2612": "pajama", "2613": "app", "2614": "aboard", "2615": "cheerleader", "2616": "bindings", "2617": "fireplug", "2618": "from", "2619": "fron", "2620": "frog", "2621": "freezers", "2622": "antennae", "2623": "parrots", "2624": "antennas", "2625": "refigerator", "2626": "sidewalks", "2627": "toppings", "2628": "toddler", "2629": "typewriter", "2630": "attend", "2631": "tack", "2632": "wrist", "2633": "taco", "2634": "faucets", "2635": "sanctioned", "2636": "refridgerator", "2637": "kitcken", "2638": "cotta", "2639": "ricotta", "2640": "holiday", "2641": "crowds", "2642": "republican", "2643": "articles", "2644": "footstool", "2645": "trimmed", "2646": "cursive", "2647": "our", "2648": "out", "2649": "chaos", "2650": "herded", "2651": "herder", "2652": "sculpting", "2653": "pours", "2654": "utensil", "2655": "pixelated", "2656": "organic", "2657": "g", "2658": "snowplow", "2659": "biting", "2660": "bonnet", "2661": "umbrellas", "2662": "unknown", "2663": "priority", "2664": "potty", "2665": "dreadlocks", "2666": "well-organized", "2667": "mules", "2668": "hairstyle", "2669": "clip", "2670": "fowl", "2671": "teenagers", "2672": "linked", "2673": "ringed", "2674": "patchy", "2675": "pretzels", "2676": "who", "2677": "why", "2678": "skying", "2679": "fear", "2680": "feat", "2681": "pleased", "2682": "local", "2683": "cube", "2684": "skims", "2685": "sponsors", "2686": "payphone", "2687": "cubs", "2688": "coordinating", "2689": "married", "2690": "monsters", "2691": "workbench", "2692": "identification", "2693": "fifties", "2694": "crude", "2695": "bought", "2696": "leathers", "2697": "opening", "2698": "joy", "2699": "job", "2700": "joe", "2701": "stucco", "2702": "grounds", "2703": "unclear", "2704": "unclean", "2705": "motorbike", "2706": "platform", "2707": "decent", "2708": "neutrals", "2709": "backback", "2710": "stunning", "2711": "motif", "2712": "lakeside", "2713": "rooster", "2714": "draining", "2715": "perhaps", "2716": "buddhist", "2717": "largest", "2718": "warming", "2719": "stove-top", "2720": "contest", "2721": "camel", "2722": "usage", "2723": "jars", "2724": "facial", "2725": "catchers", "2726": "press", "2727": "hosts", "2728": "pasties", "2729": "wonders", "2730": "meatloaf", "2731": "floss", "2732": "pasty", "2733": "ripped", "2734": "pasta", "2735": "paste", "2736": "pike", "2737": "rare", "2738": "carried", "2739": "stir-fry", "2740": "carries", "2741": "carrier", "2742": "polished", "2743": "wilderness", "2744": "weather", "2745": "birdhouse", "2746": "transfer", "2747": "spiral", "2748": "lookign", "2749": "torch", "2750": "catsup", "2751": "automated", "2752": "protesting", "2753": "yorkie", "2754": "catching", "2755": "garbanzo", "2756": "federer", "2757": "maroon", "2758": "sheered", "2759": "squirrel", "2760": "incredible", "2761": "curtained", "2762": "coffees", "2763": "spatulas", "2764": "kinds", "2765": "shredded", "2766": "nourishment", "2767": "pumps", "2768": "cliff", "2769": "sash", "2770": "writings", "2771": "yellow", "2772": "ornate", "2773": "marching", "2774": "electricity", "2775": "sunlit", "2776": "swivel", "2777": "shielding", "2778": "deli", "2779": "dell", "2780": "figs", "2781": "prize", "2782": "satchel", "2783": "fritter", "2784": "charter", "2785": "glassy", "2786": "daybed", "2787": "miller", "2788": "tether", "2789": "sterile", "2790": "dangled", "2791": "avery", "2792": "leaning", "2793": "fronts", "2794": "dorm", "2795": "dork", "2796": "substance", "2797": "military", "2798": "divide", "2799": "spoke", "2800": "kettles", "2801": "telegraph", "2802": "relax", "2803": "successful", "2804": "hurt", "2805": "tying", "2806": "blade", "2807": "vanities", "2808": "melons", "2809": "household", "2810": "organized", "2811": "organizer", "2812": "damage", "2813": "machine", "2814": "cheetah", "2815": "gaming", "2816": "sippy", "2817": "shores", "2818": "calves", "2819": "attracts", "2820": "keeps", "2821": "wing", "2822": "wind", "2823": "wine", "2824": "diagonally", "2825": "lovingly", "2826": "directional", "2827": "diffrent", "2828": "hidden", "2829": "duvet", "2830": "slicing", "2831": "captioned", "2832": "silver", "2833": "grasslands", "2834": "multi-color", "2835": "dumps", "2836": "clothed", "2837": "dumpy", "2838": "financial", "2839": "garment", "2840": "blinder", "2841": "bowls", "2842": "knitting", "2843": "knit", "2844": "bater", "2845": "heading", "2846": "eatting", "2847": "shopper", "2848": "shopped", "2849": "wash", "2850": "instruct", "2851": "lego", "2852": "cooling", "2853": "listed", "2854": "blossoms", "2855": "legs", "2856": "listen", "2857": "danish", "2858": "half-pipe", "2859": "shoveled", "2860": "gives", "2861": "person", "2862": "eagerly", "2863": "metallic", "2864": "causing", "2865": "paintbrush", "2866": "zebras", "2867": "looming", "2868": "victoria", "2869": "letter", "2870": "videotaping", "2871": "retaining", "2872": "cops", "2873": "grove", "2874": "bomb", "2875": "departing", "2876": "reclined", "2877": "gauge", "2878": "recliner", "2879": "reclines", "2880": "nightstands", "2881": "white-walled", "2882": "lazing", "2883": "menu", "2884": "mens", "2885": "theme", "2886": "caped", "2887": "'no", "2888": "lurches", "2889": "oats", "2890": "piggy", "2891": "flanked", "2892": "shadyside", "2893": "fair", "2894": "fail", "2895": "best", "2896": "score", "2897": "pirate", "2898": "preserve", "2899": "claws", "2900": "paddington", "2901": "girrafes", "2902": "canyon", "2903": "contestants", "2904": "skatepark", "2905": "chrome", "2906": "startled", "2907": "life", "2908": "writting", "2909": "joust", "2910": "lift", "2911": "toboggan", "2912": "child", "2913": "chili", "2914": "skirts", "2915": "piercings", "2916": "feed", "2917": "lushly", "2918": "babies", "2919": "fairly", "2920": "tops", "2921": "cooktop", "2922": "nachos", "2923": "cellophane", "2924": "ewes", "2925": "casually", "2926": "possible", "2927": "possibly", "2928": "birth", "2929": "calfs", "2930": "unique", "2931": "articulated", "2932": "seaside", "2933": "pavement", "2934": "steps", "2935": "people", "2936": "equestrian", "2937": "attendees", "2938": "for", "2939": "fox", "2940": "fog", "2941": "dental", "2942": "trampoline", "2943": "dollars", "2944": "citizens", "2945": "hyrdrant", "2946": "gauze", "2947": "panorama", "2948": "width", "2949": "overhead", "2950": "happy", "2951": "tigers", "2952": "lays", "2953": "panels", "2954": "feet", "2955": "juvenile", "2956": "looms", "2957": "tournament", "2958": "dealer", "2959": "supporters", "2960": "crutches", "2961": "dotted", "2962": "actor", "2963": "protester", "2964": "peacock", "2965": "forage", "2966": "entwined", "2967": "venice", "2968": "veterans", "2969": "servicing", "2970": "tear", "2971": "ollie", "2972": "teat", "2973": "subway", "2974": "teal", "2975": "team", "2976": "inscribed", "2977": "prevent", "2978": "minion", "2979": "fingernail", "2980": "steaks", "2981": "current", "2982": "obscures", "2983": "crumbled", "2984": "studies", "2985": "carpets", "2986": "love", "2987": "bloody", "2988": "traversing", "2989": "forefront", "2990": "sunbathing", "2991": "tightly", "2992": "wondering", "2993": "``", "2994": "apparent", "2995": "visual", "2996": "wrenches", "2997": "hides", "2998": "winter", "2999": "elephant", "3000": "t-shirts", "3001": "snaps", "3002": "spot", "3003": "breasted", "3004": "misshapen", "3005": "locamotive", "3006": "date", "3007": "filthy", "3008": "wheelchair", "3009": "kayaks", "3010": "kong", "3011": "bucking", "3012": "solitary", "3013": "bagels", "3014": "attraction", "3015": "creations", "3016": "dwarfs", "3017": "decades", "3018": "into", "3019": "matches", "3020": "records", "3021": "arriving", "3022": "runners", "3023": "bowling", "3024": "repaired", "3025": "bovine", "3026": "crowding", "3027": "canvas", "3028": "container", "3029": "rounding", "3030": "contained", "3031": "suggesting", "3032": "inspects", "3033": "bordering", "3034": "dodgers", "3035": "intensely", "3036": "disguised", "3037": "jetliners", "3038": "spam", "3039": "ostrich", "3040": "microphones", "3041": "potter", "3042": "walk-in", "3043": "vote", "3044": "chubby", "3045": "potted", "3046": "runways", "3047": "indicate", "3048": "2", "3049": "typing", "3050": "prone", "3051": "floppy", "3052": "padding", "3053": "representing", "3054": "future", "3055": "scuba", "3056": "lurking", "3057": "take", "3058": "altered", "3059": "microwaves", "3060": "stilts", "3061": "managing", "3062": "madison", "3063": "lettered", "3064": "hockey", "3065": "equipped", "3066": "robe", "3067": "clawing", "3068": "neath", "3069": "carolina", "3070": "us", "3071": "surgery", "3072": "dives", "3073": "wielding", "3074": "sideburns", "3075": "goers", "3076": "navigates", "3077": "teens", "3078": "cantaloupe", "3079": "supermarket", "3080": "reigns", "3081": "jets", "3082": "expression", "3083": "twin", "3084": "twig", "3085": "combines", "3086": "teddy", "3087": "toothpaste", "3088": "vacation", "3089": "breath", "3090": "combined", "3091": "rooftops", "3092": "parasail", "3093": "resturant", "3094": "diverse", "3095": "windsail", "3096": "shepard", "3097": "brow", "3098": "bros", "3099": "skate-park", "3100": "coconuts", "3101": "cheers", "3102": "vacant", "3103": "trains", "3104": "neighborhood", "3105": "barbecued", "3106": "litte", "3107": "skied", "3108": "prominently", "3109": "skies", "3110": "skier", "3111": "clam", "3112": "clad", "3113": "souvenirs", "3114": "clay", "3115": "claw", "3116": "clap", "3117": "grouping", "3118": "playin", "3119": "thinks", "3120": "tube", "3121": "tubs", "3122": "joyfully", "3123": "act", "3124": "gesturing", "3125": "curling", "3126": "image", "3127": "bookcases", "3128": "forest-like", "3129": "bundt", "3130": "buying", "3131": "snowshoes", "3132": "taught", "3133": "torso", "3134": "detailed", "3135": "gone", "3136": "carves", "3137": "gong", "3138": "ad", "3139": "af", "3140": "am", "3141": "al", "3142": "an", "3143": "as", "3144": "ar", "3145": "at", "3146": "av", "3147": "beaming", "3148": "congress", "3149": "herbs", "3150": "fresh", "3151": "mimic", "3152": "cpu", "3153": "careful", "3154": "dressing", "3155": "puzzled", "3156": "candid", "3157": "condition", "3158": "enjoyable", "3159": "accompanying", "3160": "dinosaur", "3161": "humongous", "3162": "sync", "3163": "situated", "3164": "cast", "3165": "section", "3166": "burgundy", "3167": "nurse", "3168": "contrast", "3169": "hours", "3170": "yellowed", "3171": "mound", "3172": "pics", "3173": "hamster", "3174": "pick", "3175": "action", "3176": "brimmed", "3177": "strolling", "3178": "vest", "3179": "indoors", "3180": "ridding", "3181": "pitching", "3182": "alcove", "3183": "riverbank", "3184": "keeping", "3185": "science", "3186": "westmark", "3187": "indicating", "3188": "delapidated", "3189": "beautiful", "3190": "gallop", "3191": "messages", "3192": "neglected", "3193": "accept", "3194": "fiving", "3195": "states", "3196": "gallon", "3197": "tapestry", "3198": "information", "3199": "browns", "3200": "unattended", "3201": "creature", "3202": "countryside", "3203": "backyard", "3204": "deviled", "3205": "hauling", "3206": "wrench", "3207": "pans", "3208": "mexican", "3209": "pant", "3210": "pane", "3211": "houseplant", "3212": "travelling", "3213": "hotdogs", "3214": "always", "3215": "swimsuit", "3216": "disorganized", "3217": "status", "3218": "bends", "3219": "rowboats", "3220": "bouquets", "3221": "missed", "3222": "misses", "3223": "streaking", "3224": "highway", "3225": "drifting", "3226": "porcelain", "3227": "w", "3228": "bumper", "3229": "corrugated", "3230": "number", "3231": "slipper", "3232": "gazes", "3233": "heads", "3234": "threatening", "3235": "checkpoint", "3236": "omelette", "3237": "immediate", "3238": "appreciation", "3239": "focusing", "3240": "grace", "3241": "obama", "3242": "determined", "3243": "marriage", "3244": "refrigerators", "3245": "livery", "3246": "play", "3247": "plat", "3248": "plan", "3249": "plae", "3250": "cover", "3251": "bodies", "3252": "attacking", "3253": "session", "3254": "sideboard", "3255": "condos", "3256": "condom", "3257": "dandelion", "3258": "preparing", "3259": "closely", "3260": "sleeve", "3261": "set", "3262": "abuilding", "3263": "sex", "3264": "see", "3265": "sea", "3266": "outward", "3267": "vitamins", "3268": "muted", "3269": "crosswalk", "3270": "multi-colored", "3271": "whole", "3272": "lanyard", "3273": "drunk", "3274": "forklift", "3275": "community", "3276": "hollow", "3277": "roofing", "3278": "filth", "3279": "hitting", "3280": "firm", "3281": "fire", "3282": "wheeler", "3283": "equestrians", "3284": "towns", "3285": "wheeled", "3286": "sesame", "3287": "secluded", "3288": "casino", "3289": "mote", "3290": "dotting", "3291": "moto", "3292": "coca-cola", "3293": "funny", "3294": "decor", "3295": "choking", "3296": "elevated", "3297": "pecking", "3298": "pikachu", "3299": "levels", "3300": "leaps", "3301": "tobacco", "3302": "focal", "3303": "canned", "3304": "clearance", "3305": "red-haired", "3306": "helmeted", "3307": "hued", "3308": "pillars", "3309": "location", "3310": "shoestring", "3311": "clutches", "3312": "hoods", "3313": "clutched", "3314": "panties", "3315": "architecturally", "3316": "sighn", "3317": "sight", "3318": "stables", "3319": "loves", "3320": "be", "3321": "crooks", "3322": "bi", "3323": "bt", "3324": "bu", "3325": "bp", "3326": "santa", "3327": "by", "3328": "wildlife", "3329": "anything", "3330": "primarily", "3331": "arcade", "3332": "retrieving", "3333": "specifically", "3334": "occupy", "3335": "jewish", "3336": "relaxed", "3337": "buttery", "3338": "pastor", "3339": "link", "3340": "line", "3341": "relaxes", "3342": "horned", "3343": "corsage", "3344": "mature", "3345": "actors", "3346": "swirl", "3347": "sails", "3348": "sided", "3349": "cobblestone", "3350": "sides", "3351": "overtop", "3352": "walked", "3353": "summit", "3354": "walker", "3355": "hello", "3356": "code", "3357": "squats", "3358": "results", "3359": "send", "3360": "outwards", "3361": "hipster", "3362": "overgrowth", "3363": "llama", "3364": "mediterranean", "3365": "index", "3366": "twine", "3367": "twins", "3368": "bird", "3369": "waling", "3370": "led", "3371": "leg", "3372": "lei", "3373": "let", "3374": "engage", "3375": "residents", "3376": "mariners", "3377": "boxy", "3378": "standing", "3379": "crisscrossing", "3380": "labelled", "3381": "sharply", "3382": "casserole", "3383": "drill", "3384": "bent", "3385": "benz", "3386": "high", "3387": "blvd", "3388": "trumpet", "3389": "docking", "3390": "pair", "3391": "animal", "3392": "blocks", "3393": "wallpaper", "3394": "notebook", "3395": "demonstrating", "3396": "boeing", "3397": "allot", "3398": "allow", "3399": "instruments", "3400": "designs", "3401": "knick", "3402": "seatbelt", "3403": "pick-up", "3404": "kiss", "3405": "merge", "3406": "overripe", "3407": "blow-drying", "3408": "thirteen", "3409": "wander", "3410": "bunched", "3411": "bad", "3412": "bunches", "3413": "oblong", "3414": "yawns", "3415": "mid-swing", "3416": "dismantled", "3417": "spill", "3418": "blown", "3419": "pines", "3420": "owned", "3421": "jesus", "3422": "straining", "3423": "owner", "3424": "blows", "3425": "spaceship", "3426": "rotunda", "3427": "firehydrant", "3428": "steel", "3429": "colleagues", "3430": "steet", "3431": "frizzbe", "3432": "steep", "3433": "steer", "3434": "spelled", "3435": "clearly", "3436": "necessities", "3437": "documents", "3438": "soak", "3439": "studying", "3440": "mechanism", "3441": "demolished", "3442": "soap", "3443": "soar", "3444": "medal", "3445": "socializing", "3446": "shaven", "3447": "biker", "3448": "bikes", "3449": "manchester", "3450": "planter", "3451": "hops", "3452": "planted", "3453": "olympics", "3454": "bourbon", "3455": "hope", "3456": "fronds", "3457": "streamlined", "3458": "handstand", "3459": "slanted", "3460": "interacting", "3461": "amtrak", "3462": "see-through", "3463": "email", "3464": "fancily", "3465": "grafiti", "3466": "drum", "3467": "drug", "3468": "sugared", "3469": "figures", "3470": "volley", "3471": "co", "3472": "ca", "3473": "skylights", "3474": "cd", "3475": "arugula", "3476": "crafted", "3477": "ct", "3478": "dazzling", "3479": "roasting", "3480": "atlanta", "3481": "laser", "3482": "rigged", "3483": "ripe", "3484": "lush", "3485": "lust", "3486": "highlighted", "3487": "apricots", "3488": "glares", "3489": "ball", "3490": "dusk", "3491": "bale", "3492": "bald", "3493": "surfboarding", "3494": "paving", "3495": "robotic", "3496": "dust", "3497": "overalls", "3498": "snake", "3499": "bananas", "3500": "glue", "3501": "unplugged", "3502": "residential", "3503": "winnie", "3504": "teriyaki", "3505": "dyrgas", "3506": "crisp", "3507": "onion", "3508": "criss", "3509": "sleds", "3510": "paragliding", "3511": "habitat", "3512": "thier", "3513": "transport", "3514": "avoid", "3515": "fedex", "3516": "expo", "3517": "stairway", "3518": "stage", "3519": "sister", "3520": "angeles", "3521": "seeds", "3522": "alliance", "3523": "flailing", "3524": "swimmers", "3525": "cradling", "3526": "95th", "3527": "housing", "3528": "function", "3529": "funnel", "3530": "delivery", "3531": "construction", "3532": "delivers", "3533": "official", "3534": "smooth", "3535": "volvo", "3536": "harvested", "3537": "bearing", "3538": "variegated", "3539": "variety", "3540": "marlboro", "3541": "footprints", "3542": "rural", "3543": "buoy", "3544": "swirls", "3545": "chinese", "3546": "fireplaces", "3547": "blanket", "3548": "sellers", "3549": "wagons", "3550": "bewildered", "3551": "near", "3552": "above", "3553": "churches", "3554": "counters", "3555": "sinks", "3556": "glimpse", "3557": "pursuit", "3558": "textured", "3559": "celebration", "3560": "studs", "3561": "study", "3562": "smoke", "3563": "secure", "3564": "atrium", "3565": "glance", "3566": "indians", "3567": "chooses", "3568": "knoll", "3569": "indiana", "3570": "renovations", "3571": "bunnies", "3572": "groves", "3573": "brightly-colored", "3574": "mechanic", "3575": "elegantly", "3576": "piers", "3577": "indifferent", "3578": "boats", "3579": "ordinary", "3580": "fudge", "3581": "hosing", "3582": "chilled", "3583": "exhibition", "3584": "greet", "3585": "greek", "3586": "green", "3587": "somewhere", "3588": "then", "3589": "them", "3590": "thee", "3591": "giraffe", "3592": "they", "3593": "ther", "3594": "cabanas", "3595": "flock", "3596": "wide-open", "3597": "forty", "3598": "vessels", "3599": "forth", "3600": "sliding", "3601": "ordering", "3602": "chopped", "3603": "chopper", "3604": "plentiful", "3605": "flagpole", "3606": "airy", "3607": "luncheon", "3608": "tavern", "3609": "manned", "3610": "manner", "3611": "stomach", "3612": "strength", "3613": "shorts", "3614": "hydration", "3615": "rickshaw", "3616": "riverbed", "3617": "goalie", "3618": "do", "3619": "dj", "3620": "de", "3621": "dc", "3622": "frowning", "3623": "du", "3624": "dr", "3625": "squadron", "3626": "lemonade", "3627": "ruffle", "3628": "mangoes", "3629": "snoozing", "3630": "gentleman", "3631": "swimwear", "3632": "props", "3633": "packaged", "3634": "packages", "3635": "cop", "3636": "cot", "3637": "cow", "3638": "hummus", "3639": "cob", "3640": "themself", "3641": "coo", "3642": "tucks", "3643": "chimneys", "3644": "flexible", "3645": "dozens", "3646": "cutouts", "3647": "out-of-focus", "3648": "families", "3649": "naval", "3650": "defending", "3651": "dumped", "3652": "pinstriped", "3653": "plated", "3654": "plater", "3655": "plates", "3656": "rail", "3657": "evil", "3658": "depict", "3659": "kept", "3660": "hungrily", "3661": "condiments", "3662": "eps", "3663": "1971", "3664": "the", "3665": "adding", "3666": "hills", "3667": "flooring", "3668": "hilly", "3669": "spread", "3670": "transformed", "3671": "cranberries", "3672": "basset", "3673": "caps", "3674": "barge", "3675": "cape", "3676": "tee-shirt", "3677": "lily", "3678": "grizzly", "3679": "stroke", "3680": "lapsed", "3681": "grizzle", "3682": "security", "3683": "antique", "3684": "sends", "3685": "purple", "3686": "graduates", "3687": "diner", "3688": "theirs", "3689": "anime", "3690": "gingerbread", "3691": "pineapples", "3692": "mantle", "3693": "pays", "3694": "balances", "3695": "balanced", "3696": "fight", "3697": "responding", "3698": "evidence", "3699": "held", "3700": "mold", "3701": "physical", "3702": "baguette", "3703": "handmade", "3704": "interested", "3705": "carpeting", "3706": "fairground", "3707": "together", "3708": "reception", "3709": "toothpick", "3710": "grape", "3711": "zone", "3712": "graph", "3713": "hump", "3714": "flash", "3715": "protective", "3716": "blast", "3717": "margarita", "3718": "p", "3719": "scaffold", "3720": "supporting", "3721": "v", "3722": "appears", "3723": "change", "3724": "pedals", "3725": "exiting", "3726": "trial", "3727": "retired", "3728": "hiking", "3729": "snowboard", "3730": "seashore", "3731": "streetcar", "3732": "live", "3733": "entrance", "3734": "towers", "3735": "clumps", "3736": "labeled", "3737": "gathers", "3738": "breeds", "3739": "dedicated", "3740": "waterski", "3741": "spa", "3742": "means", "3743": "trophies", "3744": "staircase", "3745": "crepe", "3746": "candles", "3747": "baseballs", "3748": "tagged", "3749": "foreclosure", "3750": "colt", "3751": "haircut", "3752": "cold", "3753": "cole", "3754": "birds", "3755": "cola", "3756": "rooftop", "3757": "reacting", "3758": "window", "3759": "fling", "3760": "half", "3761": "hall", "3762": "halo", "3763": "barrow", "3764": "streaks", "3765": "entirely", "3766": "acknowledging", "3767": "en", "3768": "fired", "3769": "goose", "3770": "fires", "3771": "ex", "3772": "shown", "3773": "opened", "3774": "space", "3775": "opener", "3776": "receiving", "3777": "shows", "3778": "grimacing", "3779": "domes", "3780": "prom", "3781": "striking", "3782": "comprised", "3783": "size", "3784": "sheep", "3785": "sheer", "3786": "sheet", "3787": "jugs", "3788": "breed", "3789": "carousel", "3790": "friend", "3791": "expanse", "3792": "rugged", "3793": "seuss", "3794": "fruits", "3795": "fruity", "3796": "lunches", "3797": "angel", "3798": "13th", "3799": "breakfast", "3800": "sterilized", "3801": "skidding", "3802": "veteran", "3803": "garments", "3804": "sunset", "3805": "abraham", "3806": "foaming", "3807": "octagonal", "3808": "ground", "3809": "gnar", "3810": "remotes", "3811": "husband", "3812": "concert", "3813": "attached", "3814": "fanned", "3815": "concern", "3816": "dressage", "3817": "tackling", "3818": "free-standing", "3819": "article", "3820": "stages", "3821": "ballpark", "3822": "comes", "3823": "forehand", "3824": "pigtails", "3825": "coffeemaker", "3826": "menacingly", "3827": "motorcylces", "3828": "observers", "3829": "stovetop", "3830": "stems", "3831": "soil", "3832": "embrace", "3833": "heels", "3834": "hens", "3835": "ship", "3836": "media", "3837": "cupola", "3838": "multi-tiered", "3839": "document", "3840": "finish", "3841": "fruit", "3842": "theater", "3843": "puree", "3844": "pitbull", "3845": "speed", "3846": "snowboarder", "3847": "struck", "3848": "real", "3849": "hover", "3850": "frown", "3851": "barbecuing", "3852": "read", "3853": "silverwear", "3854": "lady", "3855": "rear", "3856": "postcard", "3857": "downward", "3858": "recorded", "3859": "recorder", "3860": "central", "3861": "paints", "3862": "choo", "3863": "chop", "3864": "underway", "3865": "heater", "3866": "heated", "3867": "operator", "3868": "prepare", "3869": "stealth", "3870": "immaculate", "3871": "curiously", "3872": "cottage", "3873": "trying", "3874": "comics", "3875": "bucket", "3876": "cartons", "3877": "oxen", "3878": "moved", "3879": "sales", "3880": "salem", "3881": "skateboarders", "3882": "nerd", "3883": "nerf", "3884": "antenna", "3885": "storage", "3886": "foothills", "3887": "houseboat", "3888": "gaining", "3889": "polar", "3890": "flattened", "3891": "torches", "3892": "baloons", "3893": "strings", "3894": "pointing", "3895": "splitting", "3896": "mp3", "3897": "batches", "3898": "trudging", "3899": "washroom", "3900": "vert", "3901": "very", "3902": "robes", "3903": "mph", "3904": "attemping", "3905": "headgear", "3906": "spaceous", "3907": "peole", "3908": "nearing", "3909": "bomber", "3910": "dribbling", "3911": "unicycle", "3912": "sardines", "3913": "strong", "3914": "ultra", "3915": "colored", "3916": "ahead", "3917": "soldier", "3918": "disgusting", "3919": "hogs", "3920": "chunky", "3921": "chunks", "3922": "stirfry", "3923": "stand-up", "3924": "broke", "3925": "browned", "3926": "hurry", "3927": "sweeps", "3928": "nine", "3929": "parasol", "3930": "barbwire", "3931": "pushes", "3932": "pushed", "3933": "lacks", "3934": "motorcross", "3935": "t.v", "3936": "chops", "3937": "dwarfed", "3938": "child-sized", "3939": "unbaked", "3940": "fo", "3941": "laminate", "3942": "bugs", "3943": "chicks", "3944": "rhinos", "3945": "cyclists", "3946": "food", "3947": "sweeping", "3948": "fully", "3949": "knick-knacks", "3950": "trailer", "3951": "soapy", "3952": "cemented", "3953": "magnet", "3954": "since", "3955": "dunk", "3956": "bass", "3957": "protruding", "3958": "dirt", "3959": "pug", "3960": "dune", "3961": "base", "3962": "coastline", "3963": "dire", "3964": "put", "3965": "ash", "3966": "pup", "3967": "bask", "3968": "dip", "3969": "caption", "3970": "scouts", "3971": "reflected", "3972": "scrolled", "3973": "elder", "3974": "airborne", "3975": "hurdle", "3976": "storm", "3977": "jordan", "3978": "performers", "3979": "atable", "3980": "deciding", "3981": "bridles", "3982": "coleslaw", "3983": "juicy", "3984": "juice", "3985": "bridled", "3986": "u.s", "3987": "flaming", "3988": "towards", "3989": "quote", "3990": "eaten", "3991": "passersby", "3992": "blend", "3993": "cowgirl", "3994": "rifle", "3995": "booze", "3996": "necking", "3997": "pretty", "3998": "trees", "3999": "famous", "4000": "treed", "4001": "gloved", "4002": "withe", "4003": "witha", "4004": "perfume", "4005": "corgi", "4006": "scanning", "4007": "outboard", "4008": "manning", "4009": "bathtub/shower", "4010": "patties", "4011": "woo", "4012": "won", "4013": "wok", "4014": "readying", "4015": "buzz", "4016": "shortcake", "4017": "stoplight", "4018": "liked", "4019": "battery", "4020": "awnings", "4021": "badminton", "4022": "climbers", "4023": "ciabatta", "4024": "maintenance", "4025": "partly", "4026": "packs", "4027": "crack", "4028": "else", "4029": "grills", "4030": "overlooked", "4031": "rulers", "4032": "belong", "4033": "shuttered", "4034": "used", "4035": "temporary", "4036": "overweight", "4037": "uses", "4038": "user", "4039": "cityscape", "4040": "plugs", "4041": "brussels", "4042": "wedged", "4043": "grind", "4044": "grins", "4045": "wedges", "4046": "quarters", "4047": "skat", "4048": "praying", "4049": "afro", "4050": "$", "4051": "canisters", "4052": "barack", "4053": "...", "4054": "march", "4055": "enthusiastically", "4056": "signal", "4057": "linen-covered", "4058": "minced", "4059": "brakes", "4060": "creation", "4061": "trendy", "4062": "mustang", "4063": "cgi", "4064": "run", "4065": "rub", "4066": "processing", "4067": "rug", "4068": "rue", "4069": "alleyway", "4070": "pitchers", "4071": "cigarette", "4072": "trucking", "4073": "seeing", "4074": "sprawled", "4075": "rolls", "4076": "heritage", "4077": "himself", "4078": "toucan", "4079": "russian", "4080": "chromed", "4081": "adults", "4082": "willed", "4083": "cotton", "4084": "politicians", "4085": "spectators", "4086": "requires", "4087": "evenly", "4088": "go", "4089": "baron", "4090": "wizard", "4091": "arid", "4092": "attired", "4093": "ripened", "4094": "ukulele", "4095": "kitty", "4096": "thermos", "4097": "waveland", "4098": "asparagus", "4099": "tokyo", "4100": "click", "4101": "cupcakes", "4102": "edifice", "4103": "rotten", "4104": "experiment", "4105": "selecting", "4106": "rotted", "4107": ";", "4108": "focuses", "4109": "stance", "4110": "gilded", "4111": "focused", "4112": "arrive", "4113": "products", "4114": "examining", "4115": "sparklers", "4116": "apples", "4117": "cloud", "4118": "strapped", "4119": "reflects", "4120": "1/2", "4121": "statutes", "4122": "missile", "4123": "graffit", "4124": "arched", "4125": "donut", "4126": "arches", "4127": "drops", "4128": "halloween", "4129": "cots", "4130": "sword", "4131": "campers", "4132": "located", "4133": "pink", "4134": "billows", "4135": "spelling", "4136": "pansies", "4137": "corral", "4138": "necklaces", "4139": "bathing", "4140": "pine", "4141": "bedsheets", "4142": "youngster", "4143": "skater", "4144": "auto", "4145": "tile", "4146": "stading", "4147": "mode", "4148": "pools", "4149": "nibbles", "4150": "upward", "4151": "fingerling", "4152": "chunk", "4153": "inverted", "4154": "sands", "4155": "sandy", "4156": "reacts", "4157": "diagonal", "4158": "route", "4159": "keep", "4160": "wading", "4161": "designed", "4162": "yong", "4163": "ice-cream", "4164": "grow", "4165": "attach", "4166": "attack", "4167": "motorcyle", "4168": "fuzzy", "4169": "herself", "4170": "photograph", "4171": "ben", "4172": "beg", "4173": "bed", "4174": "bee", "4175": "providing", "4176": "kitties", "4177": "exhibit", "4178": "lightly", "4179": "carrots", "4180": "border", "4181": "sprinkles", "4182": "sprinkler", "4183": "sprinkled", "4184": "visor", "4185": "plugging", "4186": "businessman", "4187": "kiddie", "4188": "parked", "4189": "entryway", "4190": "fuel", "4191": "surfs", "4192": "slows", "4193": "crumbling", "4194": "trashcans", "4195": "she", "4196": "latin", "4197": "pointer", "4198": "marshy", "4199": "horrible", "4200": "flickr", "4201": "nutritious", "4202": "munching", "4203": "approval", "4204": "seperating", "4205": "jersey", "4206": "addition", "4207": "releasing", "4208": "kicks", "4209": "brunch", "4210": "novel", "4211": "ripen", "4212": "resident", "4213": "lambs", "4214": "reflection", "4215": "i", "4216": "modeled", "4217": "flexing", "4218": "taller", "4219": "kkk", "4220": "scrubland", "4221": "extends", "4222": "kick", "4223": "sonic", "4224": "historic", "4225": "harbour", "4226": "prominent", "4227": "sizes", "4228": "candy", "4229": "illusion", "4230": "controllers", "4231": "cleveland", "4232": "tiaras", "4233": "medieval", "4234": "decline", "4235": "eatables", "4236": "reptile", "4237": "mushrooms", "4238": "congregate", "4239": "gerbil", "4240": "daniels", "4241": "inner", "4242": "notices", "4243": "suzuki", "4244": "backhand", "4245": "pilled", "4246": "hp", "4247": "hi", "4248": "ha", "4249": "hd", "4250": "he", "4251": "carriage", "4252": "projecting", "4253": "limit", "4254": "mechanics", "4255": "urns", "4256": "twist", "4257": "balcony", "4258": "teacups", "4259": "nintendo", "4260": "curbed", "4261": "straws", "4262": "remodeled", "4263": "onstage", "4264": "rescue", "4265": "railways", "4266": "alpine", "4267": "solution", "4268": "greenish", "4269": "uncooked", "4270": "ups", "4271": "clothes", "4272": "skatebaord", "4273": "lavender", "4274": "colourful", "4275": "new", "4276": "net", "4277": "never", "4278": "drew", "4279": "cardboard", "4280": "buckled", "4281": "piercing", "4282": "parasailer", "4283": "county", "4284": "busses", "4285": "handlebar", "4286": "frisbee-based", "4287": "ratty", "4288": "type", "4289": "tell", "4290": "made-up", "4291": "posting", "4292": "expose", "4293": "shelters", "4294": "rights", "4295": "foliage", "4296": "squirting", "4297": "give", "4298": "braids", "4299": "butting", "4300": "coup", "4301": "keyboard", "4302": "soaking", "4303": "panini", "4304": "motoring", "4305": "acoustic", "4306": "luck", "4307": "adobe", "4308": "enthusiasts", "4309": "wiith", "4310": "dawn", "4311": "collector", "4312": "enclosure", "4313": "surprise", "4314": "grease", "4315": "greasy", "4316": "aisle", "4317": "logging", "4318": "hoop", "4319": "hook", "4320": "hoof", "4321": "hood", "4322": "hydrant", "4323": "struts", "4324": "girls", "4325": "swells", "4326": "stocking", "4327": "matter", "4328": "boaters", "4329": "buggies", "4330": "medical", "4331": "points", "4332": "pointy", "4333": "doves", "4334": "visitor", "4335": "thirds", "4336": "judges", "4337": "folded", "4338": "judged", "4339": "folder", "4340": "stop", "4341": "fields", "4342": "playstation", "4343": "reference", "4344": "zones", "4345": "pebbles", "4346": "scrap", "4347": "victorian", "4348": "pebbled", "4349": "sorts", "4350": "check", "4351": "vows", "4352": "modeling", "4353": "picking", "4354": "gps", "4355": "hygiene", "4356": "springs", "4357": "dusting", "4358": "firsbee", "4359": "sunshine", "4360": "exception", "4361": "tank", "4362": "lizard", "4363": "neat", "4364": "motorist", "4365": "anchor", "4366": "chilling", "4367": "metropolitan", "4368": "is", "4369": "sanitizer", "4370": "it", "4371": "iv", "4372": "ii", "4373": "clinging", "4374": "in", "4375": "sanitized", "4376": "id", "4377": "if", "4378": "bottles", "4379": "bottled", "4380": "sidelines", "4381": "t-ball", "4382": "waterfall", "4383": "romp", "4384": "practices", "4385": "sporting", "4386": "sunflower", "4387": "depicts", "4388": "glassware", "4389": "clementine", "4390": "poolside", "4391": "separately", "4392": "theatre", "4393": "daytime", "4394": "backhoe", "4395": "dunkin", "4396": "burn", "4397": "firemen", "4398": "keeper", "4399": "dunking", "4400": "yelling", "4401": "sprinklers", "4402": "azure", "4403": "carting", "4404": "rockaway", "4405": "rearview", "4406": "swan", "4407": "fork", "4408": "form", "4409": "foilage", "4410": "fireworks", "4411": "fore", "4412": "ford", "4413": "marinara", "4414": "penned", "4415": "fort", "4416": "pavilion", "4417": "hikers", "4418": "napkin", "4419": "shin", "4420": "sticks", "4421": "classic", "4422": "sticky", "4423": "fashioned", "4424": "commuting", "4425": "shit", "4426": "alerts", "4427": "sauces", "4428": "digital", "4429": "ribbons", "4430": "felt", "4431": "diet", "4432": "fell", "4433": "uneaten", "4434": "woodwork", "4435": "skis", "4436": "primed", "4437": "skii", "4438": "skim", "4439": "skin", "4440": "flowerbed", "4441": "yummy", "4442": "marks", "4443": "retro", "4444": "string", "4445": "stapler", "4446": "staples", "4447": "travels", "4448": "stapled", "4449": "brownish", "4450": "shave", "4451": "olympic", "4452": "transportation", "4453": "forages", "4454": "seawall", "4455": "upraised", "4456": "thre", "4457": "insides", "4458": "armchairs", "4459": "thru", "4460": "pattered", "4461": "oom", "4462": "olive", "4463": "effort", "4464": "walled", "4465": "wallet", "4466": "growing", "4467": "grained", "4468": "crazy", "4469": "birdbath", "4470": "surfers", "4471": "rays", "4472": "ping", "4473": "sundae", "4474": "chemical", "4475": "sunday", "4476": "pure", "4477": "skates", "4478": "pins", "4479": "pathway", "4480": "pint", "4481": "designer", "4482": "scalloped", "4483": "guys", "4484": "aviator", "4485": "outline", "4486": "maybe", "4487": "thorny", "4488": "jail", "4489": "biplane", "4490": "gesture", "4491": "cute", "4492": "pointed", "4493": "terrace", "4494": "cuts", "4495": "marshmallows", "4496": "greenfield", "4497": "smoothie", "4498": "texas", "4499": "finance", "4500": "touching", "4501": "mismatched", "4502": "yield", "4503": "earlier", "4504": "monster", "4505": "walnuts", "4506": "vinyl", "4507": "underwear", "4508": "unfrosted", "4509": "language", "4510": "drizzling", "4511": "streeet", "4512": "exotic", "4513": "dwelling", "4514": "lone", "4515": "carry", "4516": "streetsign", "4517": "plains", "4518": "cracks", "4519": "browning", "4520": "knives", "4521": "were", "4522": "gigantic", "4523": "tractor", "4524": "coconut", "4525": "camouflaged", "4526": "dollop", "4527": "marijuana", "4528": "impersonators", "4529": "mitts", "4530": "sittingon", "4531": "creatively", "4532": "personalized", "4533": "raisins", "4534": "skinned", "4535": "pain", "4536": "pail", "4537": "paid", "4538": "contrasts", "4539": "beachfront", "4540": "fills", "4541": "gyro", "4542": "grassland", "4543": "delta", "4544": "contemporary", "4545": "curled", "4546": "behind", "4547": "black", "4548": "raising", "4549": "spraying", "4550": "framing", "4551": "blurred", "4552": "calendar", "4553": "pump", "4554": "nun-chuck", "4555": "chews", "4556": "reading", "4557": "checks", "4558": "oversized", "4559": "tux", "4560": "tun", "4561": "tub", "4562": "tug", "4563": "dates", "4564": "rugby", "4565": "according", "4566": "multicolor", "4567": "dated", "4568": "holders", "4569": "arts", "4570": "caricature", "4571": "barry", "4572": "rancher", "4573": "borders", "4574": "graveyard", "4575": "offered", "4576": "bmw", "4577": "bmx", "4578": "captivity", "4579": "disconnected", "4580": "n't", "4581": "bathe", "4582": "rubbing", "4583": "middle", "4584": "ferns", "4585": "receptacle", "4586": "same", "4587": "munch", "4588": "inbetween", "4589": "totally", "4590": "drain", "4591": "bicyclists", "4592": "amazed", "4593": "dipped", "4594": "bank", "4595": "elaborately", "4596": "docks", "4597": "blankets", "4598": "crock", "4599": "chamber", "4600": "audience", "4601": "thighs", "4602": "drainage", "4603": "doll", "4604": "dole", "4605": "gross", "4606": "ovens", "4607": "seconds", "4608": "unusual", "4609": "broken", "4610": "drums", "4611": "roaming", "4612": "stations", "4613": "generated", "4614": "lands", "4615": "open-faced", "4616": "flat-screen", "4617": "buggy", "4618": "wiping", "4619": "bookstore", "4620": "swabs", "4621": "take-out", "4622": "cacti", "4623": "autism", "4624": "strawberry", "4625": "netting", "4626": "suitcase", "4627": "videos", "4628": "girlfriend", "4629": "hybrid", "4630": "field", "4631": "lapel", "4632": "students", "4633": "tackle", "4634": "remote", "4635": "roams", "4636": "spills", "4637": "deluxe", "4638": "starting", "4639": "represent", "4640": "suburban", "4641": "talks", "4642": "those", "4643": "cylce", "4644": "scout", "4645": "fall", "4646": "mothers", "4647": "bakground", "4648": "titled", "4649": "knitted", "4650": "propellors", "4651": "storks", "4652": "stool", "4653": "stoop", "4654": "leftovers", "4655": "surfer", "4656": "beacon", "4657": "operating", "4658": "search", "4659": "tortoise", "4660": "airport", "4661": "narrow", "4662": "milks", "4663": "transit", "4664": "chalk", "4665": "armed", "4666": "controlling", "4667": "town", "4668": "none", "4669": "des", "4670": "dew", "4671": "del", "4672": "den", "4673": "stemware", "4674": "marble", "4675": "compare", "4676": "purchased", "4677": "potatos", "4678": "cocking", "4679": "ladle", "4680": "charms", "4681": "petite", "4682": "florescent", "4683": "blood", "4684": "bloom", "4685": "coat", "4686": "coal", "4687": "pleasure", "4688": "stains", "4689": "dough", "4690": "sleepily", "4691": "to-go", "4692": "pens", "4693": "handheld", "4694": "late", "4695": "dolly", "4696": "penn", "4697": "dolls", "4698": "seeking", "4699": "males", "4700": "walls", "4701": "stepped", "4702": "chairlift", "4703": "noddles", "4704": "goofy", "4705": "pan", "4706": "clamp", "4707": "everyone", "4708": "nunchuck", "4709": "beret", "4710": "pigeon", "4711": "projected", "4712": "participants", "4713": "bistro", "4714": "pleasant", "4715": "entrancing", "4716": "settlers", "4717": "dribbles", "4718": "corkscrew", "4719": "utilizes", "4720": "netted", "4721": "approximately", "4722": "campground", "4723": "plows", "4724": "twenty", "4725": "paint", "4726": "mama", "4727": "compartment", "4728": "peple", "4729": "needle", "4730": "duct", "4731": "stirs", "4732": "b", "4733": "commodes", "4734": "colander", "4735": "interactive", "4736": "paths", "4737": "rowed", "4738": "folders", "4739": "medium-sized", "4740": "kk", "4741": "cramped", "4742": "thomas", "4743": "scattered", "4744": "hillside", "4745": "carefully", "4746": "generators", "4747": "luke", "4748": "ferret", "4749": "batter", "4750": "tended", "4751": "individual", "4752": "tender", "4753": "halved", "4754": "halves", "4755": "envelopes", "4756": "propellor", "4757": "pagoda", "4758": "floats", "4759": "alot", "4760": "supply", "4761": "recycling", "4762": "newborn", "4763": "throughout", "4764": "patiently", "4765": "create", "4766": "4", "4767": "understand", "4768": "prices", "4769": "honking", "4770": "fur", "4771": "bill", "4772": "fun", "4773": "cents", "4774": "decoration", "4775": "swishing", "4776": "monroe", "4777": "leafed", "4778": "itch", "4779": "assignment", "4780": "desks", "4781": "moment", "4782": "sandals", "4783": "celebratory", "4784": "halve", "4785": "rears", "4786": "spend", "4787": "shouting", "4788": "bridal", "4789": "excited", "4790": "matters", "4791": "disrepair", "4792": "glove", "4793": "back", "4794": "examples", "4795": "ontop", "4796": "pet", "4797": "pew", "4798": "per", "4799": "pen", "4800": "outside..", "4801": "pee", "4802": "peg", "4803": "pea", "4804": "nose", "4805": "beans", "4806": "televsion", "4807": "jockey", "4808": "pared", "4809": "homemade", "4810": "forward", "4811": "bored", "4812": "adjusting", "4813": "lifeguard", "4814": "fogged", "4815": "plugged", "4816": "explaining", "4817": "fishes", "4818": "admiring", "4819": "filed", "4820": "roping", "4821": "stroller", "4822": "loungers", "4823": "overly", "4824": "golfer", "4825": "peanut", "4826": "chaps", "4827": "gravel", "4828": "flagstone", "4829": "putting", "4830": "severely", "4831": "moderate", "4832": "choppy", "4833": "semitrailer", "4834": "crow", "4835": "crop", "4836": "giving", "4837": "foot-long", "4838": "napkins", "4839": "kayaker", "4840": "jockeys", "4841": "stalks", "4842": "drank", "4843": "named", "4844": "private", "4845": "names", "4846": "oval", "4847": "park-like", "4848": "oils", "4849": "themselves", "4850": "thatch", "4851": "tattered", "4852": "arranging", "4853": "harvest", "4854": "island", "4855": "hilton", "4856": "parkway", "4857": "prohibiting", "4858": "hangar", "4859": "daring", "4860": "regions", "4861": "winners", "4862": "feta", "4863": "buildings", "4864": "minivan", "4865": "meter", "4866": "struggles", "4867": "hugged", "4868": "bunch", "4869": "lg", "4870": "la", "4871": "ln", "4872": "lo", "4873": "lampposts", "4874": "poeple", "4875": "marsh", "4876": "ls", "4877": "brownstone", "4878": "airports", "4879": "lingerie", "4880": "gazing", "4881": "announcer", "4882": "wholly", "4883": "electronics", "4884": "ref", "4885": "salami", "4886": "retrieves", "4887": "receipts", "4888": "retail", "4889": "treys", "4890": "girafee", "4891": "afield", "4892": "windsurfers", "4893": "monkey", "4894": "pots", "4895": "balck", "4896": "messing", "4897": "shampoo", "4898": "chats", "4899": "tidy", "4900": "comfortable", "4901": "patting", "4902": "comfortably", "4903": "gravity", "4904": "mooring", "4905": "eight", "4906": "handbag", "4907": "enthusiastic", "4908": "workspace", "4909": "planks", "4910": "coloring", "4911": "areal", "4912": "areas", "4913": "crabs", "4914": "organ", "4915": "national", "4916": "shelfs", "4917": "footlong", "4918": "purses", "4919": "icecream", "4920": "buster", "4921": "freely", "4922": "busted", "4923": "passing", "4924": "glorious", "4925": "overcoat", "4926": "laugh", "4927": "bespectacled", "4928": "pouring", "4929": "muddy", "4930": "perplexed", "4931": "airplanes", "4932": "splits", "4933": "respected", "4934": "haunches", "4935": "arabic", "4936": "shuttle", "4937": "oranges", "4938": "croissants", "4939": "center", "4940": "weapon", "4941": "latest", "4942": "coaster", "4943": "seats", "4944": "protecting", "4945": "winchester", "4946": "bench", "4947": "backpacker", "4948": "citizen", "4949": "raven", "4950": "tests", "4951": "barbed-wire", "4952": "clippings", "4953": "insert", "4954": "works", "4955": "paddock", "4956": "dunes", "4957": "shelter", "4958": "panes", "4959": "slight", "4960": "panel", "4961": "smartly", "4962": "flaky", "4963": "brands", "4964": "firefighter", "4965": "buy", "4966": "bus", "4967": "but", "4968": "bun", "4969": "bookshelf", "4970": "bug", "4971": "bud", "4972": "time-lapse", "4973": "wise", "4974": "wish", "4975": "variations", "4976": "minutes", "4977": "rabbits", "4978": "brochures", "4979": "wide-eyed", "4980": "collies", "4981": "virtual", "4982": "jeeps", "4983": "ledge", "4984": "granite", "4985": "draught", "4986": "bundle", "4987": "semis", "4988": "skiboard", "4989": "baker", "4990": "bakes", "4991": "hiker", "4992": "hikes", "4993": "baked", "4994": "pilaf", "4995": "growling", "4996": "hats", "4997": "hate", "4998": "trolley", "4999": "clasps", "5000": "tweed", "5001": "verdant", "5002": "every", "5003": "confetti", "5004": "supports", "5005": "enjoy", "5006": "scribbled", "5007": "street", "5008": "streer", "5009": "shining", "5010": "beaten", "5011": "sheeted", "5012": "mischievous", "5013": "disney", "5014": "pats", "5015": "stared", "5016": "hundreds", "5017": "floret", "5018": "path", "5019": "auction", "5020": "deers", "5021": "chateau", "5022": "ambulances", "5023": "visible", "5024": "outdated", "5025": "shoot", "5026": "ma", "5027": "mm", "5028": "entertained", "5029": "onit", "5030": "mt", "5031": "entertainer", "5032": "my", "5033": "taxiway", "5034": "weathervane", "5035": "end", "5036": "slalom", "5037": "rhinoceros", "5038": "charging", "5039": "mess", "5040": "mesh", "5041": "sparkler", "5042": "sparkles", "5043": "croissant", "5044": "spout", "5045": "enter", "5046": "flippers", "5047": "plaster", "5048": "clocktower", "5049": "dalmation", "5050": "pinkish", "5051": "chuck", "5052": "filling", "5053": "victory", "5054": "signing", "5055": "gymnasium", "5056": "magnets", "5057": "goo", "5058": "god", "5059": "washed", "5060": "got", "5061": "washer", "5062": "acrobat", "5063": "already", "5064": "knifes", "5065": "wood-paneled", "5066": "ceiling", "5067": "tool", "5068": "brushes", "5069": "serve", "5070": "took", "5071": "western", "5072": "brushed", "5073": "burger", "5074": "donkey", "5075": "fashion", "5076": "talking", "5077": "leafs", "5078": "kiteboard", "5079": "leafy", "5080": "harper", "5081": "steamboat", "5082": "-", "5083": "oriented", "5084": "hot-dog", "5085": "stood", "5086": "coin", "5087": "treats", "5088": "soups", "5089": "flow", "5090": "orderly", "5091": "enterprise", "5092": "arrayed", "5093": "sharpie", "5094": "shellfish", "5095": "grassless", "5096": "zipping", "5097": "mixture", "5098": "sunglasses", "5099": "geek", "5100": "bashed", "5101": "countries", "5102": "twice", "5103": "shots", "5104": "duck", "5105": "swept", "5106": "nut", "5107": "nun", "5108": "gladiator", "5109": "interviewing", "5110": "360", "5111": "handwritten", "5112": "boss", "5113": "aquarium", "5114": "flowering", "5115": "puddles", "5116": "protect", "5117": "sanitation", "5118": "participating", "5119": "merging", "5120": "layered", "5121": "towels", "5122": "beef", "5123": "ropes", "5124": "muddied", "5125": "been", "5126": "beer", "5127": "bees", "5128": "beet", "5129": "roped", "5130": "board", "5131": "pinking", "5132": "uncommon", "5133": "kingfisher", "5134": "teachers", "5135": "storefront", "5136": "decanter", "5137": "containing", "5138": "wound", "5139": "utilitarian", "5140": "complex", "5141": "carnation", "5142": "several", "5143": "papaya", "5144": "standng", "5145": "shadowed", "5146": "campbell", "5147": "pharmacy", "5148": "technological", "5149": "turquoise", "5150": "bands", "5151": "sanitary", "5152": "apart", "5153": "intertwined", "5154": "gift", "5155": "specific", "5156": "mosquito", "5157": "spongebob", "5158": "clubs", "5159": "meters", "5160": "escape", "5161": "ice", "5162": "icy", "5163": "plantain", "5164": "christmas", "5165": "cord", "5166": "core", "5167": "garnishes", "5168": "corn", "5169": "cork", "5170": "garnished", "5171": "shards", "5172": "surround", "5173": "primitive", "5174": "cafeteria", "5175": "head", "5176": "surfboarders", "5177": "heat", "5178": "hear", "5179": "heap", "5180": "umping", "5181": "adorn", "5182": "brightly", "5183": "pipe", "5184": "outstretched", "5185": "no", "5186": "na", "5187": "nd", "5188": "ny", "5189": "nw", "5190": "evergreen", "5191": "eiffel", "5192": "trailers", "5193": "dappled", "5194": "mildly", "5195": "bullet", "5196": "backward", "5197": "particular", "5198": "displaying", "5199": "balding", "5200": "contemplating", "5201": "flowered", "5202": "sing", "5203": "advantage", "5204": "sloppy", "5205": "partitions", "5206": "witting", "5207": "takeoff", "5208": "bake", "5209": "spire", "5210": "hairy", "5211": "twentieth", "5212": "groups", "5213": "[", "5214": "thirty", "5215": "pearls", "5216": "proud", "5217": "sharpening", "5218": "cinnamon", "5219": "weird", "5220": "lowers", "5221": "threes", "5222": "1st", "5223": "surroundings", "5224": "kerry", "5225": "chocolate", "5226": "aircrafts", "5227": "performer", "5228": "dropped", "5229": "speaks", "5230": "flavored", "5231": "ballroom", "5232": "granddaughter", "5233": "motorists", "5234": "tipped", "5235": "blocked", "5236": "courthouse", "5237": "coordinated", "5238": "cutter", "5239": "conversations", "5240": "feathered", "5241": "opera", "5242": "hashbrowns", "5243": "zebra", "5244": "begun", "5245": "treading", "5246": "attracted", "5247": "cloves", "5248": "clover", "5249": "waer", "5250": "teammates", "5251": "budweiser", "5252": "soaring", "5253": "pokemon", "5254": "surveys", "5255": "convention", "5256": "circa", "5257": "hug", "5258": "hub", "5259": "hut", "5260": "artsy", "5261": "holder", "5262": "bikers", "5263": "require", "5264": "sidecars", "5265": "r", "5266": "pre", "5267": "armored", "5268": "ann", "5269": "ant", "5270": "mates", "5271": "ans", "5272": "any", "5273": "dining", "5274": "thermometer", "5275": "falls", "5276": "visitors", "5277": "frig", "5278": "atvs", "5279": "counter-top", "5280": "perch", "5281": "applauding", "5282": "dandelions", "5283": "southwestern", "5284": "woolen", "5285": "begging", "5286": "regarding", "5287": "penguins", "5288": "reveals", "5289": "picnic", "5290": "simmering", "5291": "ability", "5292": "bicyclist", "5293": "jeter", "5294": "weapons", "5295": "color", "5296": "sampling", "5297": "pole", "5298": "polo", "5299": "poll", "5300": "runaway", "5301": "coupe", "5302": "votive", "5303": "stylishly", "5304": "cords", "5305": "hardly", "5306": "cresting", "5307": "paying", "5308": "puncher", "5309": "someone", "5310": "clutter", "5311": "helmet", "5312": "buys", "5313": "events", "5314": "booths", "5315": "devoid", "5316": "changing", "5317": "implements", "5318": "modes", "5319": "model", "5320": "guided", "5321": "guides", "5322": "womans", "5323": "pallet", "5324": "poised", "5325": "kingdom", "5326": "easily", "5327": "virginia", "5328": "test", "5329": "sheared", "5330": "standstill", "5331": "buddies", "5332": "waiving", "5333": "pacific", "5334": "cowboys", "5335": "provided", "5336": "shirtless", "5337": "provides", "5338": "notepad", "5339": "wades", "5340": "om", "5341": "ok", "5342": "oj", "5343": "og", "5344": "of", "5345": "od", "5346": "ox", "5347": "ot", "5348": "os", "5349": "op", "5350": "clams", "5351": "jug", "5352": "idea", "5353": "illuminates", "5354": "grungy", "5355": "applying", "5356": "anchovies", "5357": "bicycling", "5358": "idiot", "5359": "includes", "5360": "lovers", "5361": "bounded", "5362": "included", "5363": "curve", "5364": "curvy", "5365": "dressers", "5366": "rimmed", "5367": "igloo", "5368": "surgical", "5369": "parmesan", "5370": "follow", "5371": "program", "5372": "presentation", "5373": "belonging", "5374": "woman", "5375": "simpsons", "5376": "bubbles", "5377": "wilting", "5378": "grandfather", "5379": "trench", "5380": "undone", "5381": "saxophone", "5382": "teh", "5383": "ten", "5384": "tea", "5385": "built-in", "5386": "tee", "5387": "rate", "5388": "design", "5389": "guns", "5390": "directions", "5391": "options", "5392": "sticking", "5393": "tablecloths", "5394": "texts", "5395": "armoire", "5396": "1900", "5397": "policemen", "5398": "gothic", "5399": "protestors", "5400": "sectioned", "5401": "offspring", "5402": "extinguisher", "5403": "breaking", "5404": "hoisting", "5405": "panoramic", "5406": "footed", "5407": "oat", "5408": "handlebars", "5409": "kitten", "5410": "mission", "5411": "glide", "5412": "might", "5413": "units", "5414": "bigger", "5415": "difficult", "5416": "modernized", "5417": "scratching", "5418": "braided", "5419": "linens", "5420": "health", "5421": "caucasian", "5422": "knelling", "5423": "teach", "5424": "circuit", "5425": "throws", "5426": "unhealthy", "5427": "blank", "5428": "temperature", "5429": "rails", "5430": "collar", "5431": "swarm", "5432": "attendants", "5433": "uncut", "5434": "mini-fridge", "5435": "instruction", "5436": "dispenser", "5437": "uniforms", "5438": "rugs", "5439": "perusing", "5440": "enticing", "5441": "measures", "5442": "measured", "5443": "stones", "5444": "asphalt", "5445": "ballplayer", "5446": "stoned", "5447": "securing", "5448": "heavily", "5449": "penalty", "5450": "beards", "5451": "activity", "5452": "snowstorm", "5453": "tarps", "5454": "forlorn", "5455": "knickknacks", "5456": "bohemian", "5457": "rared", "5458": "recently", "5459": "condo", "5460": "bronze", "5461": "license", "5462": "flies", "5463": "flier", "5464": "ranchers", "5465": "dinning", "5466": "duo", "5467": "due", "5468": "hooding", "5469": "pa", "5470": "pf", "5471": "pm", "5472": "toga", "5473": "batch", "5474": "parachutes", "5475": "parading", "5476": "sliver", "5477": "arrives", "5478": "arrived", "5479": "birch", "5480": "knack", "5481": "lower", "5482": "bounces", "5483": "abilities", "5484": "ergonomic", "5485": "pigeons", "5486": "competitive", "5487": "loading", "5488": "plateau", "5489": "dvds", "5490": "airshow", "5491": "streaming", "5492": "tends", "5493": "peephole", "5494": "bookshelves", "5495": "standalone", "5496": "wineglass", "5497": "mustached", "5498": "canal", "5499": "fast", "5500": "vendors", "5501": "mountains", "5502": "deployed", "5503": "asain", "5504": "fries", "5505": "stalking", "5506": "fried", "5507": "associated", "5508": "lemon", "5509": "overseeing", "5510": "tub/shower", "5511": "wakeboarding", "5512": "pottery", "5513": "waxing", "5514": "nasa", "5515": "joining", "5516": "steve", "5517": "issues", "5518": "disposal", "5519": "peering", "5520": "stable", "5521": "waiters", "5522": "drinking", "5523": "kitche", "5524": "checkers", "5525": "skyteam", "5526": "slated", "5527": "oars", "5528": "separation", "5529": "sexy", "5530": "reds", "5531": "boasts", "5532": "fed", "5533": "usb", "5534": "usa", "5535": "&", "5536": "rackets", "5537": "few", "5538": "depicted", "5539": "fez", "5540": "sort", "5541": "parliament", "5542": "musician", "5543": "heir", "5544": "lumber", "5545": "dripping", "5546": "carrot", "5547": "something", "5548": "united", "5549": "decaying", "5550": "sweat", "5551": "puppets", "5552": "cupboard", "5553": "barricades", "5554": "udder", "5555": "barricaded", "5556": "martini", "5557": "freezer", "5558": "cocked", "5559": "lounge", "5560": "ships", "5561": "nostalgic", "5562": "turban", "5563": "orange", "5564": "makings", "5565": "emerald", "5566": "florets", "5567": "disarray", "5568": "vcr", "5569": "performs", "5570": "alter", "5571": "usual", "5572": "phrases", "5573": "manicured", "5574": "bouquet", "5575": "steamy", "5576": "steams", "5577": "rigs", "5578": "photoshopped", "5579": "shallow", "5580": "slides", "5581": "boring", "5582": "mogul", "5583": "intersecting", "5584": "sittign", "5585": "sanitizers", "5586": "vegetation", "5587": "combat", "5588": "looked", "5589": "burners", "5590": "planning", "5591": "filmed", "5592": "clutching", "5593": "print", "5594": "sunflowers", "5595": "hitter", "5596": "sparrows", "5597": "futuristic", "5598": "unison", "5599": "rafts", "5600": "shedding", "5601": "braid", "5602": "meatballs", "5603": "junky", "5604": "bronx", "5605": "packaging", "5606": "table", "5607": "hunters", "5608": "motorcyles", "5609": "painted", "5610": "painter", "5611": "layer", "5612": "buzzards", "5613": "layed", "5614": "dual", "5615": "ave", "5616": "bunkbeds", "5617": "plaques", "5618": "member", "5619": "beast", "5620": "fighting", "5621": "scissor", "5622": "bandanna", "5623": "bending", "5624": "dressings", "5625": "high-rise", "5626": "fishing", "5627": "rapid", "5628": "capabilities", "5629": "raincoats", "5630": "incredibly", "5631": "loses", "5632": "mattresses", "5633": "clydesdale", "5634": "growth", "5635": "cutters", "5636": "supple", "5637": "earrings", "5638": "conveyer", "5639": "shavings", "5640": "extension", "5641": "saddle", "5642": "crusted", "5643": "owl", "5644": "own", "5645": "rowboat", "5646": "blanketed", "5647": "groomed", "5648": "continental", "5649": "groomer", "5650": "certificate", "5651": "record", "5652": "demonstrate", "5653": "rickety", "5654": "boardwalk", "5655": "trotting", "5656": "guitarist", "5657": "pills", "5658": "other", "5659": "sloping", "5660": "album", "5661": "mulch", "5662": "upwards", "5663": "gelato", "5664": "pods", "5665": "raining", "5666": "foul", "5667": "four", "5668": "neckties", "5669": "looking", "5670": "deckered", "5671": "meadows", "5672": "sinking", "5673": "propane", "5674": "oceans", "5675": "leisurely", "5676": "stabbed", "5677": "frizbee", "5678": "ornamental", "5679": "irises", "5680": "specially", "5681": "sailer", "5682": "elaborate", "5683": "off-white", "5684": "opponents", "5685": "browse", "5686": "strike", "5687": "care", "5688": "females", "5689": "tastefully", "5690": "shelve", "5691": "plunger", "5692": "example", "5693": "omelets", "5694": "currency", "5695": "buliding", "5696": "caution", "5697": "feature", "5698": "types", "5699": "baggage", "5700": "wrought", "5701": "plantains", "5702": "easier", "5703": "slate", "5704": "man-made", "5705": "mimicking", "5706": "slats", "5707": "volcano", "5708": "fish-eye", "5709": "series", "5710": "turnip", "5711": "rv", "5712": "rd", "5713": "re", "5714": "foundation", "5715": "enormous", "5716": "shipped", "5717": "speedy", "5718": "tempting", "5719": "lifejacket", "5720": "speeds", "5721": "basketball", "5722": "lunges", "5723": "trek", "5724": "showed", "5725": "hyenas", "5726": "tree", "5727": "second", "5728": "shower", "5729": "runner", "5730": "shrubs", "5731": "escalator", "5732": "bleachers", "5733": "soaked", "5734": "instructs", "5735": "amusing", "5736": "doors", "5737": "grips", "5738": "landmark", "5739": "entry", "5740": "dummy", "5741": "camp", "5742": "rotary", "5743": "camo", "5744": "mating", "5745": "came", "5746": "insects", "5747": "participate", "5748": "lessons", "5749": "layout", "5750": "quaint", "5751": "honda", "5752": "pocket", "5753": "relish", "5754": "spilling", "5755": "dipping", "5756": "peripheral", "5757": "pads", "5758": "sombrero", "5759": "rings", "5760": "yogurt", "5761": "cubby", "5762": "skimpy", "5763": "buiding", "5764": "tolet", "5765": "planner", "5766": "country", "5767": "bodysuit", "5768": "wipeout", "5769": "munches", "5770": "gleaming", "5771": "grazing", "5772": "upside-down", "5773": "stadium", "5774": "dots", "5775": "worker", "5776": "strewn", "5777": "worked", "5778": "contemplates", "5779": "upscale", "5780": "anticipating", "5781": "violin", "5782": "damaged", "5783": "bid", "5784": "european", "5785": "photographers", "5786": "crosstown", "5787": "simulated", "5788": "capitol", "5789": "sleeps", "5790": "sleepy", "5791": "craning", "5792": "old-fashioned", "5793": "innocent", "5794": "hookah", "5795": "wiht", "5796": "creek", "5797": "trombone", "5798": "drys", "5799": "shaker", "5800": "shakes", "5801": "defensive", "5802": "losing", "5803": "pliers", "5804": "chain-link", "5805": "raised", "5806": "facility", "5807": "son", "5808": "magazines", "5809": "raises", "5810": "wrap", "5811": "sox", "5812": "waits", "5813": "support", "5814": "overhand", "5815": "overhang", "5816": "manmade", "5817": "canopied", "5818": "inside", "5819": "devices", "5820": "textbook", "5821": "''", "5822": "sprouts", "5823": "glacier", "5824": "3-way", "5825": "greenery", "5826": "'s", "5827": "lollipops", "5828": "models", "5829": "'d", "5830": "'a", "5831": "cleaver", "5832": "'m", "5833": "fastened", "5834": "someplace", "5835": "burritos", "5836": "skate", "5837": "skiing", "5838": "midst", "5839": "quartered", "5840": "bicycles", "5841": "bicycler", "5842": "sneakers", "5843": "icing", "5844": "multistory", "5845": "leave", "5846": "loads", "5847": "bock", "5848": "collage", "5849": "sigh", "5850": "sign", "5851": "soccor", "5852": "parachuting", "5853": "melt", "5854": "lazily", "5855": "junk", "5856": "passengers", "5857": "brilliant", "5858": "tasks", "5859": "fake", "5860": "crammed", "5861": "turret", "5862": "wicker", "5863": "angry", "5864": "scratched", "5865": "claus", "5866": "everywhere", "5867": "scratches", "5868": "mascot", "5869": "fourths", "5870": "pretend", "5871": "stature", "5872": "detached", "5873": "pumpkin", "5874": "awesome", "5875": "allowed", "5876": "stole", "5877": "monitoring", "5878": "buttered", "5879": "vancouver", "5880": "s.", "5881": "lids", "5882": "natural", "5883": "sw", "5884": "st", "5885": "so", "5886": "flips", "5887": "decals", "5888": "tore", "5889": "limbs", "5890": "torn", "5891": "televison", "5892": "twilight", "5893": "square", "5894": "beetle", "5895": "neighbourhood", "5896": "squared", "5897": "squares", "5898": "sings", "5899": "bumps", "5900": "mime", "5901": "diagram", "5902": "backside", "5903": "open", "5904": "city", "5905": "boulevard", "5906": "bite", "5907": "stuffed", "5908": "streetlight", "5909": "bits", "5910": "roosts", "5911": "coats", "5912": "trekking", "5913": "drywall", "5914": "addressing", "5915": "greyhound", "5916": "alley", "5917": "buried", "5918": "downwards", "5919": "ironically", "5920": "backyards", "5921": "israeli", "5922": "wintery", "5923": "inserted", "5924": "winters", "5925": "armrest", "5926": "lawn", "5927": "average", "5928": "drive", "5929": "glaze", "5930": "peaches", "5931": "bright", "5932": "freezing", "5933": "priest", "5934": "orchids", "5935": "artistically", "5936": "moldy", "5937": "sited", "5938": "checkered", "5939": "vertical", "5940": "screen", "5941": "mans", "5942": "many", "5943": "mand", "5944": "mane", "5945": "caring", "5946": "artichokes", "5947": "brocoli", "5948": "centerpiece", "5949": "installation", "5950": "zippered", "5951": "spotlight", "5952": "aluminium", "5953": "purse", "5954": "ivy", "5955": "missiles", "5956": "wiring", "5957": "wrappers", "5958": "barbed", "5959": "snowbank", "5960": "barber", "5961": "booster", "5962": "mohawk", "5963": "customized", "5964": "rest", "5965": "cilantro", "5966": "crusty", "5967": "around", "5968": "crusts", "5969": "dark", "5970": "vacuum", "5971": "intel", "5972": "inter", "5973": "kennel", "5974": "fives", "5975": "pickled", "5976": "lobster", "5977": "pickles", "5978": "firetruck", "5979": "slatted", "5980": "package", "5981": "legged", "5982": "homeless", "5983": "her", "5984": "hes", "5985": "bristles", "5986": "hey", "5987": "slopes", "5988": "handsome", "5989": "vehicles", "5990": "laboratory", "5991": "pedestal", "5992": "amused", "5993": "tight", "5994": "fours", "5995": "beaks", "5996": "mask", "5997": "mash", "5998": "mast", "5999": "mass", "6000": "gingham", "6001": "birdcage", "6002": "debris", "6003": "mna", "6004": "tv", "6005": "tw", "6006": "tp", "6007": "to", "6008": "tail", "6009": "chewing", "6010": "th", "6011": "ti", "6012": "te", "6013": "kneck", "6014": "returned", "6015": "hooking", "6016": "cable", "6017": "joined", "6018": "large", "6019": "harry", "6020": "crests", "6021": "trick", "6022": "contrails", "6023": "escaping", "6024": "rummaging", "6025": "restaruant", "6026": "upcoming", "6027": "pulls", "6028": "pears", "6029": "pearl", "6030": "gorgeous", "6031": "fleece", "6032": "morgan", "6033": "bidet", "6034": "atv", "6035": "glowing", "6036": "waves", "6037": "authentic", "6038": "refuse", "6039": "register", "6040": "volleyball", "6041": "adorned", "6042": "brim", "6043": "turbine", "6044": "laced", "6045": "laces", "6046": "toiletry", "6047": "sucker", "6048": "subtitles", "6049": "knight", "6050": "found", "6051": "upstairs", "6052": "numerals", "6053": "reduce", "6054": "supine", "6055": "decoratively", "6056": "candlelight", "6057": "foal", "6058": "rises", "6059": "owners", "6060": "castle", "6061": "wilder", "6062": "feeder", "6063": "glitter", "6064": "jet", "6065": "show", "6066": "warmly", "6067": "tomatos", "6068": "tomatoe", "6069": "mural", "6070": "tortellini", "6071": "worktable", "6072": "fishermen", "6073": "taxis", "6074": "mossy", "6075": "pedestrian", "6076": "knobs", "6077": "darth", "6078": "accepting", "6079": "microsoft", "6080": "chowder", "6081": "golf", "6082": "cruiser", "6083": "cruises", "6084": "vader", "6085": "freight", "6086": "writes", "6087": "clothesline", "6088": "downpour", "6089": "compartmentalized", "6090": "reporters", "6091": "banner", "6092": "crt", "6093": "bulky", "6094": "bernard", "6095": "guinea", "6096": "pickup", "6097": "available", "6098": "enclosures", "6099": "intercept", "6100": "composting", "6101": "dimensional", "6102": "scallop", "6103": "adjoining", "6104": "frosty", "6105": "church", "6106": "souffle", "6107": "contentedly", "6108": "resting", "6109": "racer", "6110": "races", "6111": "coveralls", "6112": "straight", "6113": "error", "6114": "fetching", "6115": "alert", "6116": "euro", "6117": "concrete", "6118": "feces", "6119": "cabins", "6120": "using", "6121": "doily", "6122": "forrest", "6123": "drizzled", "6124": "readers", "6125": "advertisements", "6126": "eager", "6127": "rainbow-colored", "6128": "sydney", "6129": "harvesting", "6130": "jutting", "6131": "australia", "6132": "skateboards", "6133": "baskets", "6134": "shading", "6135": "formal", "6136": "sorting", "6137": "d", "6138": "continue", "6139": "scape", "6140": "clipping", "6141": "spring", "6142": "palm", "6143": "curious", "6144": "sprint", "6145": "pale", "6146": "garnishment", "6147": "whiteboard", "6148": "clinton", "6149": "colorado", "6150": "exposed", "6151": "suit", "6152": "inches", "6153": "poster", "6154": "t-shirt", "6155": "posted", "6156": "up", "6157": "un", "6158": "uk", "6159": "storing", "6160": "pepperonis", "6161": "nautical", "6162": "graceful", "6163": "fixing", "6164": "freighter", "6165": "ferries", "6166": "pedestrians", "6167": "holes", "6168": "crinkle", "6169": "having", "6170": "cheetos", "6171": "scratch", "6172": "knotted", "6173": "highways", "6174": "young", "6175": "stocked", "6176": "panting", "6177": "mixing", "6178": "wipe", "6179": "shetland", "6180": "eva", "6181": "try", "6182": "race", "6183": "rack", "6184": "hyde", "6185": "spaghetti", "6186": "graduating", "6187": "sauerkraut", "6188": "delicous", "6189": "richmond", "6190": "punch", "6191": "poverty", "6192": "licence", "6193": "casing", "6194": "technical", "6195": "sixty", "6196": "exciting", "6197": "chocolates", "6198": "midday", "6199": "bullhorn", "6200": "rubbish", "6201": "practicing", "6202": "slid", "6203": "pawn", "6204": "slim", "6205": "slit", "6206": "slip", "6207": "paws", "6208": "lunchbox", "6209": "wolf", "6210": "fits", "6211": "cabbage", "6212": "hawk", "6213": "tomato", "6214": "counter", "6215": "element", "6216": "classy", "6217": "antelope", "6218": "bitty", "6219": "move", "6220": "artichoke", "6221": "brahma", "6222": "decal", "6223": "2010", "6224": "2013", "6225": "2012", "6226": "outlined", "6227": "dock", "6228": "presidential", "6229": "minimalist", "6230": "sniffing", "6231": "truth", "6232": "prarie", "6233": "onlookers", "6234": "mets", "6235": "maciel", "6236": "tents", "6237": "expectantly", "6238": "graze", "6239": "luggages", "6240": "yells", "6241": "yello", "6242": "stark", "6243": "bare-chested", "6244": "system", "6245": "graffitied", "6246": "fouling", "6247": "gummy", "6248": "manhole", "6249": "trike", "6250": "splayed", "6251": "collecting", "6252": "gently", "6253": "gentle", "6254": "carraige", "6255": "vace", "6256": "amphibious", "6257": "livingroom", "6258": "skulls", "6259": "mills", "6260": "waffles", "6261": "astride", "6262": "ashore", "6263": "korean", "6264": "scooping", "6265": "segment", "6266": "locust", "6267": "face", "6268": "mechanical", "6269": "painting", "6270": "brightly-painted", "6271": "bring", "6272": "keys", "6273": "should", "6274": "buttons", "6275": "meant", "6276": "handle", "6277": "bonds", "6278": "smash", "6279": "basking", "6280": "half-eaten", "6281": "packet", "6282": "packed", "6283": "blowdrying", "6284": "cloudless", "6285": "ends", "6286": "astroturf", "6287": "buffalos", "6288": "butts", "6289": "streams", "6290": "cinder", "6291": "snowfall", "6292": "whispering", "6293": "oakland", "6294": "rhode", "6295": "chalkboard", "6296": "utilizing", "6297": "dhl", "6298": "mannequin", "6299": "toasting", "6300": "coals", "6301": "runway", "6302": "bathtub", "6303": "site", "6304": "hardware", "6305": "vw", "6306": "sits", "6307": "drink", "6308": "coffe", "6309": "shacks", "6310": "350", "6311": "drawing", "6312": "flesh", "6313": "footbridge", "6314": "rooms", "6315": "roomy", "6316": "clipped", "6317": "government", "6318": "checking", "6319": "cedar", "6320": "chairs", "6321": "slathered", "6322": "daylight", "6323": "bedding", "6324": "blowing", "6325": "drift", "6326": "peal", "6327": "software", "6328": "backcountry", "6329": "scones", "6330": "shoppe", "6331": "bulidings", "6332": "catamaran", "6333": "lowered", "6334": "leashed", "6335": "compute", "6336": "leashes", "6337": "irish", "6338": "int", "6339": "rubble", "6340": "sibling", "6341": "inn", "6342": "ink", "6343": "ing", "6344": "ina", "6345": "frisbee", "6346": "vignette", "6347": "capers", "6348": "veil", "6349": "vein", "6350": "ghost", "6351": "hedges", "6352": "confinement", "6353": "announces", "6354": "mansion", "6355": "bike", "6356": "booties", "6357": "regal", "6358": "chill", "6359": "tagging", "6360": "floored", "6361": "urinating", "6362": "red", "6363": "triumph", "6364": "chew", "6365": "bubbling", "6366": "horn", "6367": "chef", "6368": "hors", "6369": "placemats", "6370": "zoomed", "6371": "festive", "6372": "watchers", "6373": "daughter", "6374": "items", "6375": "browsing", "6376": "calculators", "6377": "infield", "6378": "highly", "6379": "total", "6380": "alligator", "6381": "negative", "6382": "retriever", "6383": "award", "6384": "aware", "6385": "nozzle", "6386": "motocycle", "6387": "veggies", "6388": "acrobatic", "6389": "fondant", "6390": "beach", "6391": "offshore", "6392": "pizza", "6393": "cherubs", "6394": "after", "6395": "movable", "6396": "encompassing", "6397": "south", "6398": "salon", "6399": "japan", "6400": "nets", "6401": "highlights", "6402": "avocado", "6403": "savory", "6404": "vents", "6405": "carton", "6406": "band", "6407": "bang", "6408": "rocky", "6409": "spigot", "6410": "ascends", "6411": "automobile", "6412": "rocks", "6413": "cornbread", "6414": "lifted", "6415": "kneels", "6416": "logs", "6417": "logo", "6418": "motorized", "6419": "sprints", "6420": "raggedy", "6421": "hooked", "6422": "medicine", "6423": "dishwashers", "6424": "standard", "6425": "sadly", "6426": "created", "6427": "creates", "6428": "delicious", "6429": "thick", "6430": "farming", "6431": "happily", "6432": "townhouses", "6433": "chases", "6434": "scenes", "6435": "seated", "6436": "navigate", "6437": "stalls", "6438": "necktie", "6439": "laden", "6440": "latter", "6441": "hamper", "6442": "luxury", "6443": "hollandaise", "6444": "insulated", "6445": "maiden", "6446": "boxcar", "6447": "involving", "6448": "exercises", "6449": "webcam", "6450": "duckling", "6451": "valance", "6452": "voting", "6453": "mitten", "6454": "ocean..", "6455": "enjoyed", "6456": "fisheye", "6457": "stove/oven", "6458": "foraging", "6459": "lightening", "6460": "cardinals", "6461": "nasty", "6462": "furnishings", "6463": "covering", "6464": "sheering", "6465": "w.", "6466": "cattle", "6467": "bunting", "6468": "unable", "6469": "we", "6470": "wo", "6471": "wi", "6472": "enters", "6473": "convertible", "6474": "bras", "6475": "garnishing", "6476": "headlights", "6477": "warmth", "6478": "arena", "6479": "droplets", "6480": "applied", "6481": "tide", "6482": "launches", "6483": "blue-green", "6484": "air", "6485": "aim", "6486": "applies", "6487": "aid", "6488": "property", "6489": "launched", "6490": "savanna", "6491": "plateful", "6492": "perform", "6493": "sheltered", "6494": "bunny", "6495": "peacocks", "6496": "hispanic", "6497": "contact", "6498": "kale", "6499": "athletic", "6500": "photo", "6501": "farther", "6502": "smoothies", "6503": "boars", "6504": "eying", "6505": "belongs", "6506": "boxed", "6507": "jekyll", "6508": "boxes", "6509": "boxer", "6510": "lashes", "6511": "eyeing", "6512": "nuzzles", "6513": "/", "6514": "filming", "6515": "posh", "6516": "pose", "6517": "illustration", "6518": "post", "6519": "coral", "6520": "accepts", "6521": "octopus", "6522": "float", "6523": "bound", "6524": "capped", "6525": "strangely", "6526": "wan", "6527": "way", "6528": "wax", "6529": "was", "6530": "war", "6531": "becoming", "6532": "converse", "6533": "taken", "6534": "true", "6535": "winery", "6536": "gather", "6537": "computing", "6538": "muscular", "6539": "mousepad", "6540": "topped", "6541": "topper", "6542": "frolic", "6543": "propellers", "6544": "brothers", "6545": "juicer", "6546": "juices", "6547": "welcome", "6548": "juiced", "6549": "ump", "6550": "paces", "6551": "white-tiled", "6552": "collared", "6553": "certainly", "6554": "mounted", "6555": "para-surfing", "6556": "tusk", "6557": "southwest", "6558": "division", "6559": "supported", "6560": "baggie", "6561": "kitteh", "6562": "gnarly", "6563": "presented", "6564": "woven", "6565": "cargo", "6566": "appear", "6567": "wildebeest", "6568": "uniform", "6569": "sequential", "6570": "muslim", "6571": "roaring", "6572": "incoming", "6573": "flames", "6574": "pictorial", "6575": "usually", "6576": "ripening", "6577": "futon", "6578": "cay", "6579": "graphic", "6580": "car", "6581": "cap", "6582": "cat", "6583": "can", "6584": "cam", "6585": "cal", "6586": "cab", "6587": "heart", "6588": "accordian", "6589": "heard", "6590": "clothing", "6591": "wetsuits", "6592": "urinates", "6593": "flank", "6594": "ducati", "6595": "trumpets", "6596": "displayed", "6597": "playful", "6598": "holing", "6599": "vicinity", "6600": "yams", "6601": "forms", "6602": "tails", "6603": "1950", "6604": "intrigued", "6605": "directing", "6606": "happen", "6607": "amusement", "6608": "hand-held", "6609": "navigating", "6610": "side-by-side", "6611": "cars", "6612": "cart", "6613": "bodyboarding", "6614": "card", "6615": "selections", "6616": "british", "6617": "warning", "6618": "stevens", "6619": "directly", "6620": "message", "6621": "checked", "6622": "checker", "6623": "puddle", "6624": "television", "6625": "browses", "6626": "browser", "6627": "slaw", "6628": "slat", "6629": "slap", "6630": "slam", "6631": "distorted", "6632": "slab", "6633": "dread", "6634": "price", "6635": "banks", "6636": "]", "6637": "sauteed", "6638": "german", "6639": "fifty", "6640": "maine", "6641": "fifth", "6642": "stained", "6643": "only", "6644": "televisions", "6645": "cannon", "6646": "truly", "6647": "celebrate", "6648": "spork", "6649": "asleep", "6650": "sport", "6651": "colgate", "6652": "between", "6653": "mandarin", "6654": "flipping", "6655": "monk", "6656": "overview", "6657": "skatboard", "6658": "rubs", "6659": "ruby", "6660": "vespa", "6661": "these", "6662": "chinatown", "6663": "alcoholic", "6664": "commander", "6665": "nestled", "6666": "figuring", "6667": "figurine", "6668": "lite", "6669": "closest", "6670": "breeze", "6671": "peripherals", "6672": "mingling", "6673": "mirrored", "6674": "rules", "6675": "ruler", "6676": "stools", "6677": "overlooks", "6678": "listening", "6679": "conversing", "6680": "greeting", "6681": "t", "6682": "vegtables", "6683": "interest", "6684": "sidwalk", "6685": "stopped", "6686": "wheat", "6687": "pylons", "6688": "volkswagen", "6689": "papered", "6690": "leftover", "6691": "throw", "6692": "kickflip", "6693": "barrels", "6694": "statuette", "6695": "earring", "6696": "lob", "6697": "log", "6698": "removing", "6699": "los", "6700": "low", "6701": "lot", "6702": "somerset", "6703": "partially-eaten", "6704": "wrestlers", "6705": "juggles", "6706": "showerhead", "6707": "milking", "6708": "suites", "6709": "pear", "6710": "peas", "6711": "computerized", "6712": "podium", "6713": "10:20", "6714": "peak", "6715": "suited", "6716": "untidy", "6717": "skeleton", "6718": "screwdriver", "6719": "louis", "6720": "cookies", "6721": "unattached", "6722": "loose", "6723": "vet", "6724": "handwriting", "6725": "vegetarian", "6726": "whine", "6727": "family", "6728": "aimed", "6729": "toys", "6730": "thatched", "6731": "taker", "6732": "takes", "6733": "contains", "6734": "mysterious", "6735": "chestnut", "6736": "fronted", "6737": "cows", "6738": "magenta", "6739": "species", "6740": "hamburgers", "6741": "ostriches", "6742": "menus", "6743": "sneak", "6744": "streetlamp", "6745": "workstation", "6746": "racetrack", "6747": "telephones", "6748": "crafts", "6749": "help", "6750": "mid-jump", "6751": "urine", "6752": "soon", "6753": "skinning", "6754": "wiener", "6755": "soot", "6756": "mcdonalds", "6757": "fanning", "6758": "carpeted", "6759": "shoelace", "6760": "doughnuts", "6761": "cupcake", "6762": "peeing", "6763": "nestles", "6764": "anticipates", "6765": "positioned", "6766": "dominates", "6767": "surrounded", "6768": "wolverine", "6769": "labs", "6770": "reason", "6771": "algae", "6772": "launch", "6773": "banans", "6774": "maple", "6775": "attic", "6776": "wonderful", "6777": "scheme", "6778": "banana", "6779": "squirts", "6780": "overexposed", "6781": "selling", "6782": "signaling", "6783": "diorama", "6784": "toliet", "6785": "mickey", "6786": "udders", "6787": "withered", "6788": "koala", "6789": "officers", "6790": "camouflage", "6791": "bridle", "6792": "mack", "6793": "restuarant", "6794": "hips", "6795": "reminiscent", "6796": "scooter", "6797": "chiquita", "6798": "randy", "6799": "speckled", "6800": "chimney", "6801": "catches", "6802": "catcher", "6803": "banister", "6804": "conditions", "6805": "invisible", "6806": "eggplant", "6807": "boxers", "6808": "protector", "6809": "jeff", "6810": "lake", "6811": "vessel", "6812": "stamp", "6813": "damp", "6814": "collected", "6815": "loom", "6816": "soiled", "6817": "look", "6818": "rope", "6819": "bikini", "6820": "biking", "6821": "loop", "6822": "reads", "6823": "ready", "6824": "fedora", "6825": "pomegranate", "6826": "assortment", "6827": "idling", "6828": "older", "6829": "docked", "6830": "dryer", "6831": "cocks", "6832": "exercising", "6833": "scrunched", "6834": "remaining", "6835": "lacking", "6836": "game", "6837": "wings", "6838": "sleigh", "6839": "delivered", "6840": "describing", "6841": "minimal", "6842": "stem", "6843": "step", "6844": "stew", "6845": "shine", "6846": "heel", "6847": "shiny", "6848": "within", "6849": "smells", "6850": "rummage", "6851": "dips", "6852": "specialty", "6853": "properly", "6854": "dull", "6855": "high-speed", "6856": "convex", "6857": "zooming", "6858": "berries", "6859": "motorhome", "6860": "underbrush", "6861": "cheerful", "6862": "desserts", "6863": "airliners", "6864": "suits", "6865": "shack", "6866": "fishnet", "6867": "trough", "6868": "cellular", "6869": "crowed", "6870": "ornately", "6871": "picker", "6872": "overloaded", "6873": "booty", "6874": "picket", "6875": "boots", "6876": "waking", "6877": "hose", "6878": "booth", "6879": "picked", "6880": "sausage", "6881": "paintings", "6882": "applesauce", "6883": "referees", "6884": "meandering", "6885": "commercial", "6886": "canals", "6887": "wig", "6888": "win", "6889": "wii", "6890": "wih", "6891": "wit", "6892": "crap", "6893": "remains", "6894": "crab", "6895": "saddlebags", "6896": "cheeks", "6897": "started", "6898": "crosses", "6899": "crossed", "6900": "skirt", "6901": "egret", "6902": "chevrolet", "6903": "arrangement", "6904": "circular", "6905": "belongings", "6906": "bakery", "6907": "bakers", "6908": "astronomical", "6909": "outer", "6910": "nokia", "6911": "placid", "6912": "hands", "6913": "dinnerware", "6914": "handy", "6915": "photoed", "6916": "crossing", "6917": "shaking", "6918": "illuminate", "6919": "multicolored", "6920": "explores", "6921": "watermark", "6922": "completely", "6923": "farmland", "6924": "shred", "6925": "disembodied", "6926": "data", "6927": "perfectly", "6928": "paved", "6929": "hitching", "6930": "maze", "6931": "cartoonish", "6932": "follow-through", "6933": "portrait", "6934": "emptying", "6935": "cranes", "6936": "detector", "6937": "mileage", "6938": "sewing", "6939": "camper", "6940": "moths", "6941": "expired", "6942": "snapshot", "6943": "holstein", "6944": "crate", "6945": "boatyard", "6946": "partners", "6947": "based", "6948": "tire", "6949": "(", "6950": "bases", "6951": "partially", "6952": "misty", "6953": "sprouting", "6954": "gray", "6955": "gras", "6956": "grab", "6957": "sanwich", "6958": "spotted", "6959": "terrain", "6960": "freeze", "6961": "driveway", "6962": "buckets", "6963": "kings", "6964": "slowly", "6965": "yak", "6966": "gatorade", "6967": "league", "6968": "spaniel", "6969": "brinks", "6970": "tabletop", "6971": "demo", "6972": "swinging", "6973": "bucks", "6974": "capture", "6975": "shooting", "6976": "buldings", "6977": "strange", "6978": "underground", "6979": "eccentric", "6980": "fierce", "6981": "frequently", "6982": "poultry", "6983": "well", "6984": "mixers", "6985": "awning", "6986": "attractively", "6987": "clouded", "6988": "clown", "6989": "page", "6990": "hush", "6991": "peter", "6992": "drizzle", "6993": "competitor", "6994": "?", "6995": "coated", "6996": "goatee", "6997": "beige", "6998": "cranberry", "6999": "puppies", "7000": "tongue", "7001": "pastries", "7002": "equally", "7003": "raquet", "7004": "washington", "7005": "neutral", "7006": "courts", "7007": "ear", "7008": "eat", "7009": "barbershop", "7010": "tissues", "7011": "utensils", "7012": "serveral", "7013": "stumps", "7014": "stonework", "7015": "acrylic", "7016": "astounding", "7017": "tailgate", "7018": "inset", "7019": "powdery", "7020": "asian", "7021": "whose", "7022": "cemetary", "7023": "vase", "7024": "smack", "7025": "vast", "7026": "baking", "7027": "graces", "7028": "wreck", "7029": "orchestra", "7030": "hazy", "7031": "haze", "7032": "dr.", "7033": "wiimotes", "7034": "feeding", "7035": "100", "7036": "dry", "7037": "rests", "7038": "ignoring", "7039": "credit", "7040": "suitable", "7041": "besides", "7042": "watering", "7043": "seventy", "7044": "leaks", "7045": "wars", "7046": "warm", "7047": "adult", "7048": "ward", "7049": "aligned", "7050": "pride", "7051": "kraut", "7052": "setup", "7053": "somber", "7054": "programming", "7055": "bug-gee", "7056": "advancing", "7057": "aging", "7058": "scooters", "7059": "waterfront", "7060": "president", "7061": "attempt", "7062": "overtaken", "7063": "owls", "7064": "chihuahua", "7065": "meat", "7066": "airfrance", "7067": "roast", "7068": "side", "7069": "bone", "7070": "croup", "7071": "stealing", "7072": "navy", "7073": "velvet", "7074": "reader", "7075": "kiwis", "7076": "struggle", "7077": "backlit", "7078": "cookbooks", "7079": "firetrucks", "7080": "features", "7081": "unlit", "7082": "walkers", "7083": "featured", "7084": "comforter", "7085": "ditch", "7086": "hollywood", "7087": "wieners", "7088": "bouncing", "7089": "gym", "7090": "stoic", "7091": "girraffe", "7092": "boarding", "7093": "distance", "7094": "preparation", "7095": "mini", "7096": "sees", "7097": "modern", "7098": "mine", "7099": "yachts", "7100": "seed", "7101": "seen", "7102": "seem", "7103": "seek", "7104": "davidson", "7105": "mashed", "7106": "regular", "7107": "don", "7108": "alarm", "7109": "m", "7110": "dog", "7111": "dot", "7112": "cake", "7113": "sown", "7114": "photographic", "7115": "explain", "7116": "sugar", "7117": "stabbing", "7118": "folks", "7119": "monica", "7120": "tiles", "7121": "beater", "7122": "coast", "7123": "tiled", "7124": "footrest", "7125": "disco", "7126": "discs", "7127": "grilled", "7128": "decides", "7129": "fascinating", "7130": "fluffy", "7131": "decided", "7132": "subject", "7133": "wetsuit", "7134": "warrior", "7135": "lazy", "7136": "maneuvers", "7137": "against", "7138": "peddling", "7139": "loader", "7140": "offerings", "7141": "loaded", "7142": "stares", "7143": "erect", "7144": "website", "7145": "decrepit", "7146": "tastes", "7147": "melted", "7148": "mouse", "7149": "make", "7150": "polaroid", "7151": "belly", "7152": "filtered", "7153": "scarfs", "7154": "kit", "7155": "delight", "7156": "garlic", "7157": "opportunity", "7158": "kid", "7159": "butter", "7160": "bedspread", "7161": "materials", "7162": "hummingbirds", "7163": "human", "7164": "tattooed", "7165": "impending", "7166": "repurposed", "7167": "character", "7168": "forested", "7169": "shoulder", "7170": "performing", "7171": "maneuvering", "7172": "onlooking", "7173": "ribs", "7174": "valentines", "7175": "crucifix", "7176": "whats", "7177": "carving", "7178": "cones", "7179": "inspected", "7180": "diaper", "7181": "mouthed", "7182": "lilies", "7183": "bounds", "7184": "sodas", "7185": "clings", "7186": "warehouse", "7187": "garland", "7188": "outskirts", "7189": "potato", "7190": "gorilla", "7191": "teeth", "7192": "cessna", "7193": "walking", "7194": "manager", "7195": "petersburg", "7196": "me", "7197": "smartphone", "7198": "tacos", "7199": "forked", "7200": "stting", "7201": "cleaners", "7202": "keepers", "7203": "item", "7204": "copy", "7205": "skiiers", "7206": "adds", "7207": "sweaters", "7208": "mussels", "7209": "makeup", "7210": "tusked", "7211": "cuckoo", "7212": "battling", "7213": "shift", "7214": "women", "7215": "raccoon", "7216": "bruised", "7217": "kayak", "7218": "feild", "7219": "hotels", "7220": "dude", "7221": "somersault", "7222": "tandem", "7223": "stitting", "7224": "confused", "7225": "battered", "7226": "spanning", "7227": "arbor", "7228": "soundboard", "7229": "loaves", "7230": "map", "7231": "mat", "7232": "strokes", "7233": "mac", "7234": "mad", "7235": "man", "7236": "tale", "7237": "tall", "7238": "talk", "7239": "shield", "7240": "shake", "7241": "listing", "7242": "kabobs", "7243": "safari", "7244": "artist", "7245": "arrows", "7246": "rock", "7247": "signage", "7248": "canada", "7249": "emerges", "7250": "jackson", "7251": "dutch", "7252": "pizzeria", "7253": "sensor", "7254": "sideways", "7255": "cough", "7256": "headphones", "7257": "thing", "7258": "think", "7259": "cheese", "7260": "crib", "7261": "shipyard", "7262": "suspended", "7263": "cheesy", "7264": "little", "7265": "murky", "7266": "participates", "7267": "anyone", "7268": "mermaid", "7269": "eyes", "7270": "broadcast", "7271": "eyed", "7272": "butt", "7273": "ceramics", "7274": "11", "7275": "10", "7276": "13", "7277": "12", "7278": "15", "7279": "14", "7280": "17", "7281": "18", "7282": "gathering", "7283": "monochrome", "7284": "speakers", "7285": "hooded", "7286": "efficient", "7287": "potential", "7288": "up-close", "7289": "switching", "7290": "straightening", "7291": "cheesecake", "7292": "bowels", "7293": "stockings", "7294": "shop", "7295": "shot", "7296": "corned", "7297": "drawings", "7298": "corner", "7299": "teacup", "7300": "dice", "7301": "plume", "7302": "dick", "7303": "plums", "7304": "plump", "7305": "nearly", "7306": "frolicking", "7307": "decks", "7308": "well-dressed", "7309": "cocktails", "7310": "teething", "7311": "camping", "7312": "ornament", "7313": "787", "7314": "tuck", "7315": "spare", "7316": "feeders", "7317": "workshop", "7318": "red-headed", "7319": "pressing", "7320": "cabana", "7321": "speech", "7322": "triumphantly", "7323": "oin", "7324": "oil", "7325": "diversion", "7326": "climbing", "7327": "largely", "7328": "macro", "7329": "bumping", "7330": "money", "7331": "racehorse", "7332": "shingled", "7333": "pile", "7334": "carring", "7335": "pill", "7336": "grip", "7337": "grid", "7338": "long-haired", "7339": "gril", "7340": "grin", "7341": "serves", "7342": "server", "7343": "facing", "7344": "either", "7345": "served", "7346": "sneaker", "7347": "ascend", "7348": "erase", "7349": "pasture", "7350": "ascent", "7351": "matching", "7352": "colonial", "7353": "linoleum", "7354": "crafting", "7355": "mixer", "7356": "mixes", "7357": "mixed", "7358": "strip", "7359": "shells", "7360": "pretends", "7361": "strikes", "7362": "sophisticated", "7363": "downstairs", "7364": "romantic", "7365": "pacman", "7366": "cribs", "7367": "blackbird", "7368": "deer", "7369": "deep", "7370": "general", "7371": "file", "7372": "film", "7373": "fill", "7374": "personnel", "7375": "drivers", "7376": "decorates", "7377": "important", "7378": "decorated", "7379": "sewer", "7380": "resembles", "7381": "husky", "7382": "oral", "7383": "worms", "7384": "sunk", "7385": "slung", "7386": "shredding", "7387": "hideous", "7388": "turnips", "7389": "returning", "7390": "washes", "7391": "intricately", "7392": "portable", "7393": "grasshopper", "7394": "grabs", "7395": "appreciating", "7396": "cigars", "7397": "fixings", "7398": "public", "7399": "bowtie", "7400": "compilation", "7401": "component", "7402": "bible", "7403": "whimsical", "7404": "emptied", "7405": "hunching", "7406": "eye", "7407": "culinary", "7408": "wiped", "7409": "texting", "7410": "two", "7411": "comparing", "7412": "twp", "7413": "splash", "7414": "amenities", "7415": "raft", "7416": "wipes", "7417": "pawing", "7418": "lemons", "7419": "suite", "7420": "escorted", "7421": "abandon", "7422": "sphere", "7423": "!", "7424": "awkward", "7425": "preening", "7426": "quesadilla", "7427": "ensemble", "7428": "gravelly", "7429": "chute", "7430": "crowded", "7431": "rooting", "7432": "deserted", "7433": "playing", "7434": "muzzled", "7435": "winged", "7436": "radar", "7437": "filters", "7438": "24", "7439": "25", "7440": "arial", "7441": "22", "7442": "29", "7443": "energy", "7444": "hard", "7445": "fist", "7446": "pot", "7447": "trooper", "7448": "granola", "7449": "brewers", "7450": "foreground", "7451": "unidentifiable", "7452": "crouched", "7453": "crouches", "7454": "unbrellas", "7455": "disneyland", "7456": "members", "7457": "computers", "7458": "rainforest", "7459": "copper", "7460": "dont", "7461": "done", "7462": "least", "7463": "para", "7464": "drapes", "7465": "park", "7466": "draped", "7467": "dentist", "7468": "part", "7469": "doctors", "7470": "believe", "7471": "supposed", "7472": "idles", "7473": "orders", "7474": "zucchini", "7475": "salmon", "7476": "most", "7477": "moss", "7478": "extremely", "7479": "sparrow", "7480": "crocheted", "7481": "contorted", "7482": "unhappy", "7483": "8", "7484": "mein", "7485": "silk", "7486": "sill", "7487": "merchandise", "7488": "silo", "7489": "collapsed", "7490": "remove", "7491": "common", "7492": "archways", "7493": "scruffy", "7494": "lion", "7495": "repairs", "7496": "burner", "7497": "fans", "7498": "mouthful", "7499": "champagne", "7500": "barrack", "7501": "tilts", "7502": "pepsi", "7503": "sheeps", "7504": "folding", "7505": "reverse", "7506": "archway", "7507": "avatar", "7508": "kitchens", "7509": "cakes", "7510": "simple", "7511": "dances", "7512": "dancer", "7513": "simply", "7514": "caked", "7515": "consuming", "7516": "dropping", "7517": "slips", "7518": "vans", "7519": "gay", "7520": "gas", "7521": "gap", "7522": "vane", "7523": "gag", "7524": "wedding", "7525": "replaced", "7526": "mystic", "7527": "facade", "7528": "butcher", "7529": "ray", "7530": "purpose", "7531": "motionless", "7532": "swiss", "7533": "paneling", "7534": "circling", "7535": "letting", "7536": "uninstalled", "7537": "unloading", "7538": "salutes", "7539": "insect", "7540": "semi", "7541": "disks", "7542": "bamboo", "7543": "gardening", "7544": "humorous", "7545": "mirror", "7546": "jewelry", "7547": "connecting", "7548": "cameraman", "7549": "patient", "7550": "taxing", "7551": "goods", "7552": "room/dining", "7553": "oatmeal", "7554": "framed", "7555": "coil", "7556": "frames", "7557": "lesson", "7558": "opponent", "7559": "peers", "7560": "boys", "7561": "'re", "7562": "jumbo", "7563": "geese", "7564": "single", "7565": "tiling", "7566": "pails", "7567": "brushing", "7568": "prepared", "7569": "prepares", "7570": "depicting", "7571": "curio", "7572": "desktops", "7573": "motorboats", "7574": "helps", "7575": "random", "7576": "huddled", "7577": "recreation", "7578": "fire-hydrant", "7579": "pipes", "7580": "paddle", "7581": "clipboard", "7582": "exercise", "7583": "3d", "7584": "exchange", "7585": "jointly", "7586": "31", "7587": "35", "7588": "blizzard", "7589": "gordon", "7590": "inclosure", "7591": "gateway", "7592": "inthe", "7593": "trail", "7594": "train", "7595": "swooping", "7596": "ace", "7597": "f", "7598": "reserved", "7599": "snacks", "7600": "stories", "7601": "asians", "7602": "lamb", "7603": "lama", "7604": "boxing", "7605": "grimaces", "7606": "lamp", "7607": "furnace", "7608": "flanking", "7609": "bluff", "7610": "seashells", "7611": "terrier", "7612": "poached", "7613": "bins", "7614": "institutional", "7615": "agricultural", "7616": "butternut", "7617": "marshmallow", "7618": "spell", "7619": "courtroom", "7620": "blazing", "7621": "safeway", "7622": "tubing", "7623": "salesman", "7624": "matt", "7625": "mats", "7626": "mate", "7627": "messenger", "7628": "duffle", "7629": "semi-truck", "7630": "interaction", "7631": "ruins", "7632": "chomping", "7633": "liquor", "7634": "cabin", "7635": "completed", "7636": "dreary", "7637": "completes", "7638": "humped", "7639": "flashes", "7640": "handled", "7641": "apparently", "7642": "venturing", "7643": "mic", "7644": "mid", "7645": "parks", "7646": "mix", "7647": "parka", "7648": "mit", "7649": "signifying", "7650": "sedan", "7651": "stranded", "7652": "normally", "7653": "staff", "7654": "controls", "7655": "beachgoers", "7656": "kilts", "7657": "including", "7658": "cycles", "7659": "gibson", "7660": "monochromatic", "7661": "constructing", "7662": "enhanced", "7663": "shallows", "7664": "graffitti", "7665": "pattern", "7666": "deliver", "7667": "toting", "7668": "taking", "7669": "tater", "7670": "dryers", "7671": "aa", "7672": "l-shaped", "7673": "bicyclers", "7674": "ac", "7675": "curtain", "7676": "moutain", "7677": "finishes", "7678": "stationed", "7679": "preforming", "7680": "finished", "7681": "sausages", "7682": "bull", "7683": "bulb", "7684": "waterhole", "7685": "volunteer", "7686": "multi", "7687": "artfully", "7688": "carved", "7689": "almost", "7690": "quad", "7691": "binoculars", "7692": "spitting", "7693": "francisco", "7694": "numbered", "7695": "kiteboarding", "7696": "knotty", "7697": "muscle", "7698": "interlocked", "7699": "well-worn", "7700": "ads", "7701": "add", "7702": "adn", "7703": "match", "7704": "motorola", "7705": "italian", "7706": "accessible", "7707": "propel", "7708": "proper", "7709": "shrub", "7710": "masked", "7711": "bustling", "7712": "thinly", "7713": "although", "7714": "about", "7715": "actual", "7716": "bikinis", "7717": "tailed", "7718": "vegetated", "7719": "functional", "7720": "ridge", "7721": "stainless", "7722": "vegetables", "7723": "biggest", "7724": "chatting", "7725": "tilled", "7726": "preparations", "7727": "skating", "7728": "topless", "7729": "pursing", "7730": "in-between", "7731": "campus", "7732": "messily", "7733": "42", "7734": "40", "7735": "41", "7736": "special", "7737": "littered", "7738": "original", "7739": "limited", "7740": "iamge", "7741": "hitch", "7742": "poorly", "7743": "muzzle", "7744": "under", "7745": "jack", "7746": "monkeys", "7747": "formica", "7748": "parted", "7749": "bicycle", "7750": "almond", "7751": "frosted", "7752": "fabulous", "7753": "tweezers", "7754": "solemn", "7755": "pontoon", "7756": "stray", "7757": "straw", "7758": "strap", "7759": "swings", "7760": "billowing", "7761": "deciduous", "7762": "hutch", "7763": "install", "7764": "whizzes", "7765": "jetliner", "7766": "stride", "7767": "eyeballs", "7768": "multi-level", "7769": "delicacy", "7770": "snarling", "7771": "harley", "7772": "ultimate", "7773": "vapor", "7774": "oysters", "7775": "underside", "7776": "london", "7777": "glances", "7778": "croquet", "7779": "tourist", "7780": "manicure", "7781": "plats", "7782": "shadows", "7783": "potatoes", "7784": "shadowy", "7785": "each", "7786": "double-decked", "7787": "waffle", "7788": "double-decker", "7789": "motel", "7790": "swirling", "7791": "motes", "7792": "splashed", "7793": "splashes", "7794": "grasses", "7795": "differnt", "7796": "onto", "7797": "grassed", "7798": "bandages", "7799": "rank", "7800": "toy", "7801": "top", "7802": "tow", "7803": "tot", "7804": "ton", "7805": "too", "7806": "tows", "7807": "toa", "7808": "tog", "7809": "toe", "7810": "urban", "7811": "pondering", "7812": "ankle", "7813": "wardrobe", "7814": "nudging", "7815": "roles", "7816": "rolex", "7817": "flame", "7818": "10th", "7819": "advising", "7820": "snow", "7821": "though", "7822": "buildings..", "7823": "plenty", "7824": "jalapenos", "7825": "pineapple", "7826": "sanctuary", "7827": "radio", "7828": "paddleboarding", "7829": "chewed", "7830": "q-tips", "7831": "refreshment", "7832": "disgust", "7833": "lodge", "7834": "fluid", "7835": "frying", "7836": "automatic", "7837": "habit", "7838": "noodles", "7839": "jerseys", "7840": "bellowing", "7841": "approach", "7842": "southeast", "7843": "wear", "7844": "chandeliers", "7845": "games", "7846": "gamer", "7847": "majestic", "7848": "trust", "7849": "quickly", "7850": "submarine", "7851": "sprite", "7852": "glides", "7853": "glider", "7854": "windup", "7855": "kentucky", "7856": "stopping", "7857": "procedure", "7858": "pyramid", "7859": "exterior", "7860": "casting", "7861": "interacts", "7862": "boater", "7863": "satellite", "7864": "springtime", "7865": "suburb", "7866": "mother", "7867": "mid-leap", "7868": "thumbs", "7869": "elk", "7870": "teenaged", "7871": "greenwich", "7872": "elf", "7873": "collard", "7874": "teenager", "7875": "trashed", "7876": "mounds", "7877": "banannas", "7878": "cultural", "7879": "judge", "7880": "appearing", "7881": "55", "7882": "54", "7883": "51", "7884": "zoom", "7885": "hunk", "7886": "flaps", "7887": "hung", "7888": "petting", "7889": "successfully", "7890": "proudly", "7891": "malaysia", "7892": "doorstep", "7893": "proceeding", "7894": "everything", "7895": "select", "7896": "lamps", "7897": "dalmatian", "7898": "plug", "7899": "weighing", "7900": "cowboy", "7901": "plus", "7902": "guest", "7903": "civil", "7904": "trafficked", "7905": "cubicle", "7906": "virgin", "7907": "wildflower", "7908": "crews", "7909": "gin", "7910": "steers", "7911": "attempted", "7912": "wireless", "7913": "illuminating", "7914": "cylinders", "7915": "ruined", "7916": "decorate", "7917": "candlelit", "7918": "shines", "7919": "miscellaneous", "7920": "radishes", "7921": "old-style", "7922": "navel", "7923": "yacht", "7924": "coach", "7925": "focus", "7926": "leads", "7927": "environment", "7928": "charge", "7929": "promoting", "7930": "coop", "7931": "spools", "7932": "footboard", "7933": "nesting", "7934": "cook", "7935": "cool", "7936": "couches", "7937": "hawaii", "7938": "dries", "7939": "drier", "7940": "dried", "7941": "healthy", "7942": "stomachs", "7943": "sports", "7944": "handles", "7945": "handler", "7946": "iphone", "7947": "lawns", "7948": "flapping", "7949": "sheds", "7950": "overpass", "7951": "counting", "7952": "1", "7953": "cardinal", "7954": "begs", "7955": "etched", "7956": "crashes", "7957": "crashed", "7958": "liquid", "7959": "hilltop", "7960": "furnished", "7961": "foldable", "7962": "offers", "7963": "puzzle", "7964": "lonely", "7965": "decadent", "7966": "underneath", "7967": "wagon", "7968": "name", "7969": "individually", "7970": "trunks", "7971": "fuselage", "7972": "populated", "7973": "tulips", "7974": "overflowing", "7975": "oasis", "7976": "flyer", "7977": "skillfully", "7978": "uniformed", "7979": "calories", "7980": "place", "7981": "swing", "7982": "array", "7983": "engine
Download .txt
gitextract_96luedpf/

├── README.md
├── data/
│   └── data.md
├── data.py
├── evaluation.py
├── model.py
├── opts.py
├── requirements.txt
├── runs/
│   └── runs.md
├── train.py
├── visualize.py
├── vocab/
│   ├── coco_precomp_vocab.json
│   └── f30k_precomp_vocab.json
└── vocab.py
Download .txt
SYMBOL INDEX (85 symbols across 6 files)

FILE: data.py
  class PrecompDataset (line 11) | class PrecompDataset(data.Dataset):
    method __init__ (line 17) | def __init__(self, data_path, data_split, vocab):
    method __getitem__ (line 41) | def __getitem__(self, index):
    method __len__ (line 59) | def __len__(self):
  function collate_fn (line 63) | def collate_fn(data):
  function get_precomp_loader (line 92) | def get_precomp_loader(data_path, data_split, vocab, opt, batch_size=100,
  function get_loaders (line 104) | def get_loaders(data_name, vocab, batch_size, workers, opt):
  function get_test_loader (line 117) | def get_test_loader(split_name, data_name, vocab, batch_size, workers, o...

FILE: evaluation.py
  class AverageMeter (line 17) | class AverageMeter(object):
    method __init__ (line 20) | def __init__(self):
    method reset (line 23) | def reset(self):
    method update (line 29) | def update(self, val, n=0):
    method __str__ (line 35) | def __str__(self):
  class LogCollector (line 45) | class LogCollector(object):
    method __init__ (line 48) | def __init__(self):
    method update (line 52) | def update(self, k, v, n=0):
    method __str__ (line 58) | def __str__(self):
    method tb_log (line 68) | def tb_log(self, tb_logger, prefix='', step=None):
  function encode_data (line 75) | def encode_data(model, data_loader, log_step=10, logging=print):
  function evalrank (line 113) | def evalrank(model_path, data_path=None, split='dev', fold5=False):
  function shard_attn_scores (line 206) | def shard_attn_scores(model, img_embs, cap_embs, cap_lens, opt, shard_si...
  function i2t (line 228) | def i2t(images, captions, caplens, sims, npts=None, return_ranks=False):
  function t2i (line 264) | def t2i(images, captions, caplens, sims, npts=None, return_ranks=False):

FILE: model.py
  function l1norm (line 16) | def l1norm(X, dim, eps=1e-8):
  function l2norm (line 23) | def l2norm(X, dim=-1, eps=1e-8):
  function cosine_sim (line 30) | def cosine_sim(x1, x2, dim=-1, eps=1e-8):
  class EncoderImage (line 38) | class EncoderImage(nn.Module):
    method __init__ (line 44) | def __init__(self, img_dim, embed_size, no_imgnorm=False):
    method init_weights (line 52) | def init_weights(self):
    method forward (line 59) | def forward(self, images):
    method load_state_dict (line 70) | def load_state_dict(self, state_dict):
  class EncoderText (line 81) | class EncoderText(nn.Module):
    method __init__ (line 87) | def __init__(self, vocab_size, word_dim, embed_size, num_layers,
    method init_weights (line 103) | def init_weights(self):
    method forward (line 106) | def forward(self, captions, lengths):
  class VisualSA (line 131) | class VisualSA(nn.Module):
    method __init__ (line 138) | def __init__(self, embed_dim, dropout_rate, num_region):
    method init_weights (line 152) | def init_weights(self):
    method forward (line 163) | def forward(self, local, raw_global):
  class TextSA (line 181) | class TextSA(nn.Module):
    method __init__ (line 189) | def __init__(self, embed_dim, dropout_rate):
    method init_weights (line 201) | def init_weights(self):
    method forward (line 212) | def forward(self, local, raw_global):
  class GraphReasoning (line 230) | class GraphReasoning(nn.Module):
    method __init__ (line 236) | def __init__(self, sim_dim):
    method forward (line 246) | def forward(self, sim_emb):
    method init_weights (line 254) | def init_weights(self):
  class AttentionFiltration (line 265) | class AttentionFiltration(nn.Module):
    method __init__ (line 271) | def __init__(self, sim_dim):
    method forward (line 279) | def forward(self, sim_emb):
    method init_weights (line 285) | def init_weights(self):
  class EncoderSimilarity (line 296) | class EncoderSimilarity(nn.Module):
    method __init__ (line 304) | def __init__(self, embed_size, sim_dim, module_name='AVE', sgr_step=3):
    method forward (line 326) | def forward(self, img_emb, cap_emb, cap_lens):
    method init_weights (line 373) | def init_weights(self):
  function SCAN_attention (line 384) | def SCAN_attention(query, context, smooth, eps=1e-8):
  class ContrastiveLoss (line 419) | class ContrastiveLoss(nn.Module):
    method __init__ (line 423) | def __init__(self, margin=0, max_violation=False):
    method forward (line 428) | def forward(self, scores):
  class SGRAF (line 455) | class SGRAF(object):
    method __init__ (line 459) | def __init__(self, opt):
    method state_dict (line 488) | def state_dict(self):
    method load_state_dict (line 492) | def load_state_dict(self, state_dict):
    method train_start (line 497) | def train_start(self):
    method val_start (line 503) | def val_start(self):
    method forward_emb (line 509) | def forward_emb(self, images, captions, lengths):
    method forward_sim (line 520) | def forward_sim(self, img_embs, cap_embs, cap_lens):
    method forward_loss (line 525) | def forward_loss(self, sims, **kwargs):
    method train_emb (line 532) | def train_emb(self, images, captions, lengths, ids=None, *args):

FILE: opts.py
  function parse_opt (line 6) | def parse_opt():

FILE: train.py
  function main (line 29) | def main():
  function train (line 74) | def train(opt, train_loader, model, epoch, val_loader):
  function validate (line 121) | def validate(opt, val_loader, model):
  function save_checkpoint (line 161) | def save_checkpoint(state, is_best, filename='checkpoint.pth.tar', prefi...
  function adjust_learning_rate (line 181) | def adjust_learning_rate(opt, optimizer, epoch):

FILE: vocab.py
  class Vocabulary (line 15) | class Vocabulary(object):
    method __init__ (line 18) | def __init__(self):
    method add_word (line 23) | def add_word(self, word):
    method __call__ (line 29) | def __call__(self, word):
    method __len__ (line 34) | def __len__(self):
  function serialize_vocab (line 38) | def serialize_vocab(vocab, dest):
  function deserialize_vocab (line 47) | def deserialize_vocab(src):
  function from_txt (line 57) | def from_txt(txt):
  function build_vocab (line 65) | def build_vocab(data_path, data_name, caption_file, threshold):
  function main (line 95) | def main(data_path, data_name):
Condensed preview — 13 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (875K chars).
[
  {
    "path": "README.md",
    "chars": 4714,
    "preview": "# SGRAF\n*PyTorch implementation for AAAI2021 paper of [**“Similarity Reasoning and Filtration for Image-Text Matching”**"
  },
  {
    "path": "data/data.md",
    "chars": 119,
    "preview": "The folder used to store the data:\n\n**File Structure**  \n```\n├── data/\n|   ├── f30k_precomp/\n|   ├── coco_precomp/\n```\n"
  },
  {
    "path": "data.py",
    "chars": 4118,
    "preview": "\"\"\"Data provider\"\"\"\n\nimport torch\nimport torch.utils.data as data\n\nimport os\nimport nltk\nimport numpy as np\n\n\nclass Prec"
  },
  {
    "path": "evaluation.py",
    "chars": 10460,
    "preview": "\"\"\"Evaluation\"\"\"\n\nfrom __future__ import print_function\nimport os\nimport sys\nimport time\n\nimport torch\nimport numpy as n"
  },
  {
    "path": "model.py",
    "chars": 19877,
    "preview": "\"\"\"SGRAF model\"\"\"\n\nimport torch\nimport torch.nn as nn\n\nimport torch.nn.functional as F\n\nimport torch.backends.cudnn as c"
  },
  {
    "path": "opts.py",
    "chars": 3709,
    "preview": "\"\"\"Argument parser\"\"\"\n\nimport argparse\n\n\ndef parse_opt():\n    # Hyper Parameters\n    parser = argparse.ArgumentParser()\n"
  },
  {
    "path": "requirements.txt",
    "chars": 974,
    "preview": "backports.functools-lru-cache==1.6.1\nbackports.weakref==1.0.post1\nbleach==1.5.0\nboto3==1.17.8\nbotocore==1.20.8\ncertifi=="
  },
  {
    "path": "runs/runs.md",
    "chars": 192,
    "preview": "The folder used to store the model:\n\n**File Structure**\n```\n├── runs/\n|   ├── f30k_SAF/\n|   |   ├── checkpoint/\n|   |   "
  },
  {
    "path": "train.py",
    "chars": 6259,
    "preview": "\"\"\"\n# Pytorch implementation for AAAI2021 paper from\n# https://arxiv.org/pdf/2101.01368.\n# \"Similarity Reasoning and Fil"
  },
  {
    "path": "visualize.py",
    "chars": 448,
    "preview": "\"\"\"\n# Please refer to https://github.com/Paranioar/RCAR for related visualization code.\n# It now includes visualize_atte"
  },
  {
    "path": "vocab/coco_precomp_vocab.json",
    "chars": 401570,
    "preview": "{\"idx2word\": {\"0\": \"<pad>\", \"1\": \"<start>\", \"2\": \"<end>\", \"3\": \"<unk>\", \"4\": \"wrought-iron\", \"5\": \"woods\", \"6\": \"hanging"
  },
  {
    "path": "vocab/f30k_precomp_vocab.json",
    "chars": 297827,
    "preview": "{\"idx2word\": {\"0\": \"<pad>\", \"1\": \"<start>\", \"2\": \"<end>\", \"3\": \"<unk>\", \"4\": \"raining\", \"5\": \"writings\", \"6\": \"white-wal"
  },
  {
    "path": "vocab.py",
    "chars": 2966,
    "preview": "\"\"\"Vocabulary wrapper\"\"\"\n\nimport nltk\nfrom collections import Counter\nimport argparse\nimport os\nimport json\n\nannotations"
  }
]

About this extraction

This page contains the full source code of the Paranioar/SGRAF GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 13 files (735.6 KB), approximately 322.6k tokens, and a symbol index with 85 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.

Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.

Copied to clipboard!