diff --git a/.gitignore b/.gitignore index 8d9863f..5b936fc 100644 --- a/.gitignore +++ b/.gitignore @@ -3,4 +3,9 @@ code/*.pyc code/miscc/*.pyc backup .DS_Store -.idea/ \ No newline at end of file +.idea/ +/.ipynb_checkpoints/ +__pycache__ +/test_stage1.sh +/test_stage2.sh +/train_stage2.sh \ No newline at end of file diff --git a/README.md b/README.md index a69d402..ea980d2 100755 --- a/README.md +++ b/README.md @@ -1,65 +1,110 @@ # StackGAN-pytorch + +Original Repository [hanzhanggit/StackGAN-Pytorch](https://github.com/hanzhanggit/StackGAN-Pytorch) + - [Tensorflow implementation](https://github.com/hanzhanggit/StackGAN) - [Inception score evaluation](https://github.com/hanzhanggit/StackGAN-inception-model) - [StackGAN-v2-pytorch](https://github.com/hanzhanggit/StackGAN-v2) -Pytorch implementation for reproducing COCO results in the paper [StackGAN: Text to Photo-realistic Image Synthesis with Stacked Generative Adversarial Networks](https://arxiv.org/pdf/1612.03242v2.pdf) by Han Zhang, Tao Xu, Hongsheng Li, Shaoting Zhang, Xiaogang Wang, Xiaolei Huang, Dimitris Metaxas. The network structure is slightly different from the tensorflow implementation. +Pytorch implementation for reproducing COCO results in the +paper [StackGAN: Text to Photo-realistic Image Synthesis with Stacked Generative Adversarial Networks](https://arxiv.org/pdf/1612.03242v2.pdf) +by Han Zhang, Tao Xu, Hongsheng Li, Shaoting Zhang, Xiaogang Wang, Xiaolei Huang, Dimitris Metaxas. The network +structure is slightly different from the tensorflow implementation. +# Environment Setup (Linux) -### Dependencies -python 2.7 +## Install conda (if not available) -Pytorch +- `git clone https://github.com/Redcof/StackGAN-Pytorch.git` +- `wget https://repo.anaconda.com/miniconda/Miniconda3-py38_23.3.1-0-Linux-x86_64.sh` +- `bash Miniconda3-py38_23.3.1-0-Linux-x86_64.sh -b` +- `$HOME/miniconda3/bin/conda init` +- `source $HOME/.bashrc` -In addition, please add the project folder to PYTHONPATH and `pip install` the following packages: -- `tensorboard` -- `python-dateutil` -- `easydict` -- `pandas` -- `torchfile` +## Create environment +- `conda create -n ganenv python=3.8` +- `conda activate ganenv` +## Install dependencies -**Data** +- `pip install -r requirements.txt` +- `conda install -c conda-forge fasttext` +- `conda install pytorch torchvision pytorch-cuda=11.8 -c pytorch -c nvidia` -1. Download our preprocessed char-CNN-RNN text embeddings for [training coco](https://drive.google.com/open?id=0B3y_msrWZaXLQXVzOENCY2E3TlU) and [evaluating coco](https://drive.google.com/open?id=0B3y_msrWZaXLeEs5MTg0RC1fa0U), save them to `data/coco`. - - [Optional] Follow the instructions [reedscot/icml2016](https://github.com/reedscot/icml2016) to download the pretrained char-CNN-RNN text encoders and extract text embeddings. -2. Download the [coco](http://cocodataset.org/#download) image data. Extract them to `data/coco/`. +## Install CUDA drivers(if not available) +**How to check?** +```cmd +python cuda_test.py # should return True +``` -**Training** -- The steps to train a StackGAN model on the COCO dataset using our preprocessed embeddings. - - Step 1: train Stage-I GAN (e.g., for 120 epochs) `python main.py --cfg cfg/coco_s1.yml --gpu 0` - - Step 2: train Stage-II GAN (e.g., for another 120 epochs) `python main.py --cfg cfg/coco_s2.yml --gpu 1` -- `*.yml` files are example configuration files for training/evaluating our models. -- If you want to try your own datasets, [here](https://github.com/soumith/ganhacks) are some good tips about how to train GAN. Also, we encourage to try different hyper-parameters and architectures, especially for more complex datasets. +**Check OS architecture** +`cat /etc/os-release` return the OS name and `uname -m` command should return the OS architecture. For us, it was 'x86_64' +**Downloading Toolkit** +[https://developer.nvidia.com/cuda-11-7-0-download-archive?target_os=Linux](https://developer.nvidia.com/cuda-11-7-0-download-archive?target_os=Linux) +We choose to install online: +```commandline +sudo dnf config-manager --add-repo https://developer.download.nvidia.com/compute/cuda/repos/rhel8/x86_64/cuda-rhel8.repo +sudo dnf clean all +sudo dnf -y module install nvidia-driver:latest-dkms +sudo dnf -y install cuda +``` -**Pretrained Model** -- [StackGAN for coco](https://drive.google.com/open?id=0B3y_msrWZaXLYjNra2ZSSmtVQlE). Download and save it to `models/coco`. -- **Our current implementation has a higher inception score(10.62±0.19) than reported in the StackGAN paper** +**Data - Text** + +1. Download our preprocessed char-CNN-RNN text embeddings + for [training coco](https://drive.google.com/open?id=0B3y_msrWZaXLQXVzOENCY2E3TlU) + and [evaluating coco](https://drive.google.com/open?id=0B3y_msrWZaXLeEs5MTg0RC1fa0U), save them to `data/coco`. + +2. [Optional] Follow the instructions [reedscot/icml2016](https://github.com/reedscot/icml2016) to download the + pretrained char-CNN-RNN text encoders and extract text embeddings. + +**Data - Image** +1. Download the [coco](http://cocodataset.org/#download) image data. Extract them to `data/coco/`. +**Custom Dataset** + +1. See `data/README.md` file + +**Training COCO** + +- The steps to train a StackGAN model on the COCO dataset using our preprocessed embeddings. + - Step 1: train Stage-I GAN (e.g., for 120 epochs) `python code/main.py --cfg cfg/coco_s1.yml --gpu 0` + - Step 2: train Stage-II GAN (e.g., for another 120 epochs) `python code/main.py --cfg cfg/coco_s2.yml --gpu 1` +- `*.yml` files are example configuration files for training/evaluating our models. +- If you want to try your own datasets, [here](https://github.com/soumith/ganhacks) are some good tips about how to + train GAN. Also, we encourage to try different hyper-parameters and architectures, especially for more complex + datasets. + +**Pretrained Model** + +- [StackGAN for coco](https://drive.google.com/open?id=0B3y_msrWZaXLYjNra2ZSSmtVQlE). Download and save it + to `models/coco`. +- **Our current implementation has a higher inception score(10.62±0.19) than reported in the StackGAN paper** **Evaluating** -- Run `python main.py --cfg cfg/coco_eval.yml --gpu 2` to generate samples from captions in COCO validation set. + +- Run `python code/main.py --cfg cfg/coco_eval.yml --gpu 2` to generate samples from captions in COCO validation set. Examples for COCO: - + ![](examples/coco_2.png) ![](examples/coco_3.png) -Save your favorite pictures generated by our models since the randomness from noise z and conditioning augmentation makes them creative enough to generate objects with different poses and viewpoints from the same discription :smiley: - - +Save your favorite pictures generated by our models since the randomness from noise z and conditioning augmentation +makes them creative enough to generate objects with different poses and viewpoints from the same discription :smiley: ### Citing StackGAN + If you find StackGAN useful in your research, please consider citing: ``` @@ -71,14 +116,14 @@ booktitle = {{ICCV}}, } ``` - **Our follow-up work** - [StackGAN++: Realistic Image Synthesis with Stacked Generative Adversarial Networks](https://arxiv.org/abs/1710.10916) - [AttnGAN: Fine-Grained Text to Image Generation with Attentional Generative Adversarial Networks](https://arxiv.org/abs/1711.10485) [[supplementary]](https://1drv.ms/b/s!Aj4exx_cRA4ghK5-kUG-EqH7hgknUA)[[code]](https://github.com/taoxugit/AttnGAN) - **References** -- Generative Adversarial Text-to-Image Synthesis [Paper](https://arxiv.org/abs/1605.05396) [Code](https://github.com/reedscot/icml2016) -- Learning Deep Representations of Fine-grained Visual Descriptions [Paper](https://arxiv.org/abs/1605.05395) [Code](https://github.com/reedscot/cvpr2016) +- Generative Adversarial Text-to-Image + Synthesis [Paper](https://arxiv.org/abs/1605.05396) [Code](https://github.com/reedscot/icml2016) +- Learning Deep Representations of Fine-grained Visual + Descriptions [Paper](https://arxiv.org/abs/1605.05395) [Code](https://github.com/reedscot/cvpr2016) diff --git a/TODO.txt b/TODO.txt new file mode 100644 index 0000000..251db6b --- /dev/null +++ b/TODO.txt @@ -0,0 +1,7 @@ +May-25 +[+] Share image with - Tejas +[*] Generate data for testing and test it +[ ] Image superresolution with S1 images +[ ] Run training with fasttext self-trained + latest captions +[ ] VQGAN +[ ] CLIP diff --git a/code/__pycache__/model.cpython-38.pyc b/code/__pycache__/model.cpython-38.pyc new file mode 100644 index 0000000..726f2db Binary files /dev/null and b/code/__pycache__/model.cpython-38.pyc differ diff --git a/code/__pycache__/trainer.cpython-38.pyc b/code/__pycache__/trainer.cpython-38.pyc new file mode 100644 index 0000000..21e684e Binary files /dev/null and b/code/__pycache__/trainer.cpython-38.pyc differ diff --git a/code/cfg/sixray_500_s1.yml b/code/cfg/sixray_500_s1.yml new file mode 100644 index 0000000..6c6daae --- /dev/null +++ b/code/cfg/sixray_500_s1.yml @@ -0,0 +1,34 @@ +CONFIG_NAME: 'stage_1' + +DATASET_NAME: 'sixray_2381_charcnnrnn_1536_jemb' +EMBEDDING_TYPE: 'embedding_bulk_word_1536_jemb.pickle' +GPU_ID: '0,1' +Z_DIM: 200 +DATA_DIR: 'data/sixray_2381' +IMSIZE: 64 +WORKERS: 4 +STAGE: 1 +TRAIN: + FLAG: True + BATCH_SIZE: 64 + BATCH_DROP_LAST: True + MAX_EPOCH: 1000 + LR_DECAY_EPOCH: 20 + SNAPSHOT_INTERVAL: 5 + DISCRIMINATOR_LR: 0.0004 + GENERATOR_LR: 0.0004 + COEFF: + KL: 2.0 + FINETUNE: + FLAG: False + EPOCH_START: 1001 + NET_G: '/home/icmore_acc/Downloads/StackGAN-Pytorch/output/sixray_500_stage_1_2023_05_19_15_38_51/Model/netG_epoch_300.pth' + NET_D: '/home/icmore_acc/Downloads/StackGAN-Pytorch/output/sixray_500_stage_1_2023_05_19_15_38_51/Model/netD_epoch_last.pth' + +GAN: + CONDITION_DIM: 128 + DF_DIM: 96 + GF_DIM: 192 + +TEXT: + DIMENSION: 1536 diff --git a/code/cfg/sixray_500_s2.yml b/code/cfg/sixray_500_s2.yml new file mode 100644 index 0000000..6b3effd --- /dev/null +++ b/code/cfg/sixray_500_s2.yml @@ -0,0 +1,36 @@ +CONFIG_NAME: 'stage_2' + +DATASET_NAME: 'sixray_2381_charcnnrnn_1536_jemb' +EMBEDDING_TYPE: 'embedding_bulk_word_1536_jemb.pickle' +GPU_ID: '0,1' +Z_DIM: 200 +DATA_DIR: 'data/sixray_2381' +IMSIZE: 256 +WORKERS: 4 +STAGE: 2 +STAGE1_G: '' +TRAIN: + FLAG: True + BATCH_SIZE: 64 + BATCH_DROP_LAST: True + MAX_EPOCH: 1000 + LR_DECAY_EPOCH: 20 + SNAPSHOT_INTERVAL: 5 + DISCRIMINATOR_LR: 0.0008 + GENERATOR_LR: 0.0008 + COEFF: + KL: 1.0 + FINETUNE: + FLAG: False + EPOCH_START: 1001 + NET_G: 'output/experiment15/sixray_2381_ftt_1024D_cbow_nocrop_batch_double_stage_2_train_2023_06_12_18_16_28/Model/netG_epoch_1000.pth' + NET_D: 'output/experiment15/sixray_2381_ftt_1024D_cbow_nocrop_batch_double_stage_2_train_2023_06_12_18_16_28/Model/netD_epoch_last.pth' + +GAN: + CONDITION_DIM: 128 + DF_DIM: 96 + GF_DIM: 192 + R_NUM: 2 + +TEXT: + DIMENSION: 1536 diff --git a/code/cfg/sixray_s1.yml b/code/cfg/sixray_s1.yml new file mode 100644 index 0000000..cf7ef28 --- /dev/null +++ b/code/cfg/sixray_s1.yml @@ -0,0 +1,34 @@ +CONFIG_NAME: 'stage1' + +DATASET_NAME: 'sixray_sample' +EMBEDDING_TYPE: 'embeddings_cc.en.300.bin_300D.pickle' +GPU_ID: '0,1' +Z_DIM: 100 +DATA_DIR: '../data/sixray_sample' +IMSIZE: 64 +WORKERS: 4 +STAGE: 1 +TRAIN: + FLAG: True + BATCH_SIZE: 6 + BATCH_DROP_LAST: True + MAX_EPOCH: 300 + LR_DECAY_EPOCH: 20 + SNAPSHOT_INTERVAL: 10 + DISCRIMINATOR_LR: 0.0002 + GENERATOR_LR: 0.0002 + COEFF: + KL: 2.0 + FINETUNE: + FLAG: False + EPOCH_START: 0 + NET_G: '' + NET_D: '' + +GAN: + CONDITION_DIM: 128 + DF_DIM: 96 + GF_DIM: 192 + +TEXT: + DIMENSION: 300 diff --git a/code/cfg/sixray_s2.yml b/code/cfg/sixray_s2.yml new file mode 100644 index 0000000..dde8b3e --- /dev/null +++ b/code/cfg/sixray_s2.yml @@ -0,0 +1,36 @@ +CONFIG_NAME: 'stage2' + +DATASET_NAME: 'sixray_sample' +EMBEDDING_TYPE: 'embeddings_cc.en.300.bin_300D.pickle' +GPU_ID: '0,1' +Z_DIM: 100 +STAGE1_G: 'output/sixray_sample_stage1_2023_05_12_19_17_04/Model/netG_epoch_300.pth' +DATA_DIR: 'data/sixray_sample' +WORKERS: 4 +IMSIZE: 256 +STAGE: 2 +TRAIN: + FLAG: True + BATCH_SIZE: 6 + BATCH_DROP_LAST: True + MAX_EPOCH: 500 + LR_DECAY_EPOCH: 20 + SNAPSHOT_INTERVAL: 5 + DISCRIMINATOR_LR: 0.0002 + GENERATOR_LR: 0.0002 + COEFF: + KL: 2.0 + FINETUNE: + FLAG: False + EPOCH_START: 0 + NET_G: '' + NET_D: '' + +GAN: + CONDITION_DIM: 128 + DF_DIM: 96 + GF_DIM: 192 + R_NUM: 2 + +TEXT: + DIMENSION: 300 diff --git a/code/main.py b/code/main.py index 21fecc0..2ccb3e0 100644 --- a/code/main.py +++ b/code/main.py @@ -1,5 +1,10 @@ from __future__ import print_function -import torch.backends.cudnn as cudnn + +import pathlib +import shutil + +import PIL +import numpy as np import torch import torchvision.transforms as transforms @@ -9,16 +14,17 @@ import sys import pprint import datetime -import dateutil import dateutil.tz - +from PIL.Image import Image +from git import Repo +from torch.utils.data import DataLoader +from torchvision.transforms.transforms import _setup_size dir_path = (os.path.abspath(os.path.join(os.path.realpath(__file__), './.'))) sys.path.append(dir_path) from miscc.datasets import TextDataset from miscc.config import cfg, cfg_from_file -from miscc.utils import mkdir_p from trainer import GANTrainer @@ -26,13 +32,69 @@ def parse_args(): parser = argparse.ArgumentParser(description='Train a GAN network') parser.add_argument('--cfg', dest='cfg_file', help='optional config file', - default='birds_stage1.yml', type=str) - parser.add_argument('--gpu', dest='gpu_id', type=str, default='0') + default='cfg/coco_s1.yml', type=str) + parser.add_argument('--test_phase', dest='test_phase', default=False, action='store_true') + parser.add_argument('--NET_G', dest='NET_G', default='', help="Path to generator for testing") + parser.add_argument('--NET_D', dest='NET_D', default='', help="Path to discriminator for testing") + parser.add_argument('--gpu', dest='gpu_id', type=str, default='0') parser.add_argument('--data_dir', dest='data_dir', type=str, default='') - parser.add_argument('--manualSeed', type=int, help='manual seed') + parser.add_argument('--STAGE1_G', dest='STAGE1_G', type=str, default='') + parser.add_argument('--manualSeed', type=int, help='manual seed', default=47) args = parser.parse_args() return args + +class AspectResize(torch.nn.Module): + """ + Resize image while keeping the aspect ratio. + Extra parts will be covered with 255(white) color value + """ + + def __init__(self, size, background=255): + super().__init__() + self.size = tuple(_setup_size(size, error_msg="Please provide only two dimensions (h, w) for size.")) + self.background = background + + @staticmethod + def fit_image_to_canvas(image: Image, canvas_width, canvas_height, background=255) -> Image: + # Get the dimensions of the image + image_width, image_height = image.size + + # Calculate the aspect ratio of the image + image_aspect_ratio = image_width / float(image_height) + + # Calculate the aspect ratio of the canvas + canvas_aspect_ratio = canvas_width / float(canvas_height) + + # Calculate the new dimensions of the image to fit the canvas + if canvas_aspect_ratio > image_aspect_ratio: + new_width = canvas_height * image_aspect_ratio + new_height = canvas_height + else: + new_width = canvas_width + new_height = canvas_width / image_aspect_ratio + + # Resize the image to the new dimensions + image = image.resize((int(new_width), int(new_height)), PIL.Image.BICUBIC) + + # Create a blank canvas of the specified size + canvas = np.zeros((int(canvas_height), int(canvas_width), 3), dtype=np.uint8) + canvas[:, :, :] = background + + # Calculate the position to paste the resized image on the canvas + x = int((canvas_width - new_width) / 2) + y = int((canvas_height - new_height) / 2) + + # Paste the resized image onto the canvas + canvas[y:y + int(new_height), x:x + int(new_width)] = np.array(image) + + return PIL.Image.fromarray(canvas) + + def forward(self, image: Image) -> Image: + image = self.fit_image_to_canvas(image, self.size[0], self.size[1], self.background) + return image + + if __name__ == "__main__": args = parse_args() if args.cfg_file is not None: @@ -41,37 +103,109 @@ def parse_args(): cfg.GPU_ID = args.gpu_id if args.data_dir != '': cfg.DATA_DIR = args.data_dir + if args.STAGE1_G != '': + cfg.STAGE1_G = args.STAGE1_G + if args.test_phase: + cfg.TRAIN.FLAG = False + if args.NET_G: + cfg.TRAIN.FINETUNE.FLAG = True + cfg.TRAIN.FINETUNE.NET_G = args.NET_G + cfg.TRAIN.FINETUNE.NET_D = args.NET_D print('Using config:') pprint.pprint(cfg) + pprint.pprint(args) + # save git checksum + project_root = pathlib.Path(__file__).parents[1] + repo = Repo(project_root) + args.git_checksum = repo.git.rev_parse("HEAD") # save commit checksum + if args.manualSeed is None: args.manualSeed = random.randint(1, 10000) random.seed(args.manualSeed) torch.manual_seed(args.manualSeed) + phase = "test" if args.test_phase else "train" if cfg.CUDA: torch.cuda.manual_seed_all(args.manualSeed) now = datetime.datetime.now(dateutil.tz.tzlocal()) timestamp = now.strftime('%Y_%m_%d_%H_%M_%S') - output_dir = '../output/%s_%s_%s' % \ - (cfg.DATASET_NAME, cfg.CONFIG_NAME, timestamp) - + output_dir = 'output/%s_%s_%s_%s' % (cfg.DATASET_NAME, cfg.CONFIG_NAME, phase, timestamp) + + if cfg.STAGE == 1: + # STAGE-1 + if cfg.TRAIN.FLAG: + # STAGE-1 TRAINING + # prepare script for stage-2 training + with open("train_stage2.sh", "w") as fp: + fp.write( + "#!/usr/bin/bash\nsh code/miscc/cuda_mem.sh\n" + "python code/main.py --cfg {} --manualSeed 47 --STAGE1_G {}\n".format( + args.cfg_file.replace("s1", "s2"), + os.path.join(output_dir, "Model", "netG_epoch_{}.pth".format(cfg.TRAIN.MAX_EPOCH - 1)) + )) + # prepare script for stage-1 testing + with open("test_stage1.sh", "w") as fp: + fp.write( + "#!/usr/bin/bash\nsh code/miscc/cuda_mem.sh\n" + "python code/main.py --test_phase --manualSeed 47 --cfg {} --NET_G {} --NET_D {}\n".format( + args.cfg_file, + os.path.join(output_dir, "Model", "netG_epoch_{}.pth".format(cfg.TRAIN.MAX_EPOCH)), + os.path.join(output_dir, "Model", "netD_epoch_last.pth"), + )) + else: + # STAGE-1 TESTING + ... + else: + # STAGE-2 + if cfg.TRAIN.FLAG: + # STAGE-2 TRAINING + # prepare script for stage-2 testing + with open("test_stage2.sh", "w") as fp: + fp.write( + "#!/usr/bin/bash\nsh code/miscc/cuda_mem.sh\n" + "python code/main.py --test_phase --manualSeed 47 --cfg {} --NET_G {} --NET_D {}\n".format( + args.cfg_file, + os.path.join(output_dir, "Model", "netG_epoch_{}.pth".format(cfg.TRAIN.MAX_EPOCH)), + os.path.join(output_dir, "Model", "netD_epoch_last.pth"), + )) + else: + # STAGE-2 TESTING + ... + num_gpu = len(cfg.GPU_ID.split(',')) if cfg.TRAIN.FLAG: + # prepare image transforms image_transform = transforms.Compose([ - transforms.RandomCrop(cfg.IMSIZE), + transforms.RandomCrop(cfg.IMSIZE) if False else AspectResize(cfg.IMSIZE), transforms.RandomHorizontalFlip(), transforms.ToTensor(), transforms.Normalize((0.5, 0.5, 0.5), (0.5, 0.5, 0.5))]) - dataset = TextDataset(cfg.DATA_DIR, 'train', - imsize=cfg.IMSIZE, - transform=image_transform) - assert dataset - dataloader = torch.utils.data.DataLoader( - dataset, batch_size=cfg.TRAIN.BATCH_SIZE * num_gpu, - drop_last=True, shuffle=True, num_workers=int(cfg.WORKERS)) - + # prepare Text caption + train_dataset = TextDataset(cfg.DATA_DIR, 'train', + imsize=cfg.IMSIZE, + embedding_type=cfg.EMBEDDING_TYPE, + transform=image_transform, + float_precision=32) + # prepare Text caption + test_dataset = TextDataset(cfg.DATA_DIR, 'test', + imsize=cfg.IMSIZE, + embedding_type=cfg.EMBEDDING_TYPE, + transform=image_transform, + float_precision=32) + print("Dataset Length:", len(train_dataset)) + assert train_dataset + train_dataloader = DataLoader(dataset=train_dataset, batch_size=cfg.TRAIN.BATCH_SIZE * num_gpu, + drop_last=cfg.TRAIN.BATCH_DROP_LAST, + shuffle=True, num_workers=int(cfg.WORKERS)) + algo = GANTrainer(output_dir) - algo.train(dataloader, cfg.STAGE) + shutil.copyfile(args.cfg_file, os.path.join(output_dir, os.path.basename(args.cfg_file))) + with open(os.path.join(output_dir, "config.txt"), "w") as fp: + fp.write("%s\n" % (str(args))) + fp.write("%s" % (str(cfg))) + algo.train(train_dataloader, cfg.STAGE, test_dataset) else: - datapath= '%s/test/val_captions.t7' % (cfg.DATA_DIR) - algo = GANTrainer(output_dir) - algo.sample(datapath, cfg.STAGE) + datapath = os.path.join(cfg.DATA_DIR, "test", cfg.EMBEDDING_TYPE) + if os.path.isfile(datapath): + algo = GANTrainer(output_dir) + shutil.copyfile(args.cfg_file, os.path.join(output_dir, os.path.basename(args.cfg_file))) + algo.sample(datapath, output_dir, cfg.STAGE) diff --git a/code/miscc/__pycache__/__init__.cpython-38.pyc b/code/miscc/__pycache__/__init__.cpython-38.pyc new file mode 100644 index 0000000..c4861ed Binary files /dev/null and b/code/miscc/__pycache__/__init__.cpython-38.pyc differ diff --git a/code/miscc/__pycache__/config.cpython-38.pyc b/code/miscc/__pycache__/config.cpython-38.pyc new file mode 100644 index 0000000..0693cb2 Binary files /dev/null and b/code/miscc/__pycache__/config.cpython-38.pyc differ diff --git a/code/miscc/__pycache__/datasets.cpython-38.pyc b/code/miscc/__pycache__/datasets.cpython-38.pyc new file mode 100644 index 0000000..58958b2 Binary files /dev/null and b/code/miscc/__pycache__/datasets.cpython-38.pyc differ diff --git a/code/miscc/__pycache__/utils.cpython-38.pyc b/code/miscc/__pycache__/utils.cpython-38.pyc new file mode 100644 index 0000000..c8ca6f5 Binary files /dev/null and b/code/miscc/__pycache__/utils.cpython-38.pyc differ diff --git a/code/miscc/config.py b/code/miscc/config.py index 666b30f..48ecbb5 100644 --- a/code/miscc/config.py +++ b/code/miscc/config.py @@ -1,11 +1,9 @@ from __future__ import division from __future__ import print_function -import os.path as osp import numpy as np from easydict import EasyDict as edict - __C = edict() cfg = __C @@ -27,11 +25,11 @@ __C.IMSIZE = 64 __C.STAGE = 1 - # Training options __C.TRAIN = edict() __C.TRAIN.FLAG = True __C.TRAIN.BATCH_SIZE = 64 +__C.TRAIN.BATCH_DROP_LAST = True __C.TRAIN.MAX_EPOCH = 600 __C.TRAIN.SNAPSHOT_INTERVAL = 50 __C.TRAIN.PRETRAINED_MODEL = '' @@ -43,6 +41,13 @@ __C.TRAIN.COEFF = edict() __C.TRAIN.COEFF.KL = 2.0 +# To be used for resume training from a checkpoint +__C.TRAIN.FINETUNE = edict() +__C.TRAIN.FINETUNE.FLAG = False +__C.TRAIN.FINETUNE.EPOCH_START = 0 +__C.TRAIN.FINETUNE.NET_G = '' +__C.TRAIN.FINETUNE.NET_D = '' + # Modal options __C.GAN = edict() __C.GAN.CONDITION_DIM = 128 @@ -53,6 +58,27 @@ __C.TEXT = edict() __C.TEXT.DIMENSION = 1024 +import sys + + +def is_python_version(major, minor=None) -> bool: + """ + Check for specific python major version and optionally minor version + + Args: + major: int + minor: int [optional] + + Return: + True is major[and minor] version matched with installed Python + """ + assert isinstance(major, int) + if minor is None: + return sys.version_info[0] == major + else: + assert isinstance(minor, int) + return sys.version_info[0] == major and sys.version_info[1] == minor + def _merge_a_into_b(a, b): """Merge config dictionary a into config dictionary b, clobbering the @@ -60,12 +86,18 @@ def _merge_a_into_b(a, b): """ if type(a) is not edict: return - - for k, v in a.iteritems(): + if is_python_version(2): + dict_iter = a.iteritems + elif is_python_version(3): + dict_iter = a.items + else: + return + + for k, v in dict_iter(): # a must specify keys that are in b - if not b.has_key(k): + if (is_python_version(2) and not b.has_key(k)) or (is_python_version(3) and k not in b): raise KeyError('{} is not a valid config key'.format(k)) - + # the types must match, too old_type = type(b[k]) if old_type is not type(v): @@ -75,7 +107,7 @@ def _merge_a_into_b(a, b): raise ValueError(('Type mismatch ({} vs. {}) ' 'for config key: {}').format(type(b[k]), type(v), k)) - + # recursively merge dicts if type(v) is edict: try: @@ -91,6 +123,9 @@ def cfg_from_file(filename): """Load a config file and merge it into the default options.""" import yaml with open(filename, 'r') as f: - yaml_cfg = edict(yaml.load(f)) - + if is_python_version(2): + yaml_cfg = edict(yaml.load(f)) + elif is_python_version(3): + yaml_cfg = edict(yaml.full_load(f)) + _merge_a_into_b(yaml_cfg, __C) diff --git a/code/miscc/cuda_mem.sh b/code/miscc/cuda_mem.sh new file mode 100644 index 0000000..cc18208 --- /dev/null +++ b/code/miscc/cuda_mem.sh @@ -0,0 +1,11 @@ +#!/usr/bin/bash +#precision=4 # FP32- 4bytes +#w=256 +#h=256 +#c=3 +#batch=64 +#embedding_dim=1024 +#additional=100 # 100MB +#mb=$((($precision * (($w * $h * $c * $batch) + ($embedding_dim * $batch) + ($additional * 1048576))) / 1048576)) +# The above setting took around 450MB space +export PYTORCH_CUDA_ALLOC_CONF="max_split_size_mb:512, garbage_collection_threshold:0.8" diff --git a/code/miscc/datasets.py b/code/miscc/datasets.py index 477fd20..2c9b99c 100644 --- a/code/miscc/datasets.py +++ b/code/miscc/datasets.py @@ -3,7 +3,7 @@ from __future__ import print_function from __future__ import unicode_literals - +import torch import torch.utils.data as data from PIL import Image import PIL @@ -13,14 +13,19 @@ import random import numpy as np import pandas as pd - -from miscc.config import cfg +from torchvision.transforms import transforms class TextDataset(data.Dataset): def __init__(self, data_dir, split='train', embedding_type='cnn-rnn', - imsize=64, transform=None, target_transform=None): - + imsize=64, transform=None, target_transform=None, float_precision=32): + assert float_precision in (32, 64), "Required 32 or 64 but {} is given".format(float_precision) + assert split in ('train', 'test'), "Required 'train' or 'test but {} is given".format(split) + if float_precision == 32: + self.dtype = torch.float32 + else: + self.dtype = torch.float64 + self.float_precision = float_precision self.transform = transform self.target_transform = target_transform self.imsize = imsize @@ -31,13 +36,15 @@ def __init__(self, data_dir, split='train', embedding_type='cnn-rnn', else: self.bbox = None split_dir = os.path.join(data_dir, split) - - self.filenames = self.load_filenames(split_dir) + self.split = split + self.embeddings = self.load_embedding(split_dir, embedding_type) - self.class_id = self.load_class_id(split_dir, len(self.filenames)) # self.captions = self.load_all_captions() - - def get_img(self, img_path, bbox): + if split == "train": + self.filenames = self.load_filenames(split_dir) + self.class_id = self.load_class_id(split_dir, len(self.filenames)) + + def get_img(self, img_path, bbox) -> torch.Tensor: img = Image.open(img_path).convert('RGB') width, height = img.size if bbox is not None: @@ -49,12 +56,16 @@ def get_img(self, img_path, bbox): x1 = np.maximum(0, center_x - R) x2 = np.minimum(width, center_x + R) img = img.crop([x1, y1, x2, y2]) - load_size = int(self.imsize * 76 / 64) - img = img.resize((load_size, load_size), PIL.Image.BILINEAR) + # load_size = int(self.imsize * 76 / 64) + # img = img.resize((load_size, load_size), PIL.Image.BILINEAR) if self.transform is not None: img = self.transform(img) - return img - + else: + img = transforms.Compose([ + transforms.ToTensor(), + transforms.Normalize((0.5, 0.5, 0.5), (0.5, 0.5, 0.5))])(img) + return img.type(self.dtype) + def load_bbox(self): data_dir = self.data_dir bbox_path = os.path.join(data_dir, 'CUB_200_2011/bounding_boxes.txt') @@ -70,15 +81,15 @@ def load_bbox(self): # filename_bbox = {img_file[:-4]: [] for img_file in filenames} numImgs = len(filenames) - for i in xrange(0, numImgs): + for i in range(0, numImgs): # bbox = [x-left, y-top, width, height] bbox = df_bounding_boxes.iloc[i][1:].tolist() - + key = filenames[i][:-4] filename_bbox[key] = bbox # return filename_bbox - + def load_all_captions(self): caption_dict = {} for key in self.filenames: @@ -86,7 +97,7 @@ def load_all_captions(self): captions = self.load_captions(caption_name) caption_dict[key] = captions return caption_dict - + def load_captions(self, caption_name): cap_path = caption_name with open(cap_path, "r") as f: @@ -94,7 +105,7 @@ def load_captions(self, caption_name): captions = [cap.replace("\ufffd\ufffd", " ") for cap in captions if len(cap) > 0] return captions - + def load_embedding(self, data_dir, embedding_type): if embedding_type == 'cnn-rnn': embedding_filename = '/char-CNN-RNN-embeddings.pickle' @@ -102,50 +113,63 @@ def load_embedding(self, data_dir, embedding_type): embedding_filename = '/char-CNN-GRU-embeddings.pickle' elif embedding_type == 'skip-thought': embedding_filename = '/skip-thought-embeddings.pickle' - - with open(data_dir + embedding_filename, 'rb') as f: - embeddings = pickle.load(f) + elif os.path.isfile(os.path.join(data_dir, embedding_type)): + # embeddings are provided as files + embedding_filename = embedding_type + else: + raise ValueError("No embedding files was found '{}'".format(embedding_type)) + + # > https://github.com/reedscot/icml2016 + # > https://github.com/reedscot/cvpr2016 + # > https://arxiv.org/pdf/1605.05395.pdf + + with open(os.path.join(data_dir, embedding_filename), 'rb') as f: + embeddings = pickle.load(f, encoding="bytes") embeddings = np.array(embeddings) # embedding_shape = [embeddings.shape[-1]] - print('embeddings: ', embeddings.shape) - return embeddings - + print('embeddings: ', embeddings.shape, "original dtype:", embeddings.dtype) + return torch.tensor(embeddings, dtype=self.dtype) + def load_class_id(self, data_dir, total_num): - if os.path.isfile(data_dir + '/class_info.pickle'): - with open(data_dir + '/class_info.pickle', 'rb') as f: - class_id = pickle.load(f) + path_ = os.path.join(data_dir, 'class_info.pickle') + if os.path.isfile(path_): + with open(path_, 'rb') as f: + class_id = np.array(pickle.load(f, encoding="bytes")) else: class_id = np.arange(total_num) + print('Class_ids: ', class_id.shape, "Sample:", class_id[0]) return class_id - + def load_filenames(self, data_dir): filepath = os.path.join(data_dir, 'filenames.pickle') with open(filepath, 'rb') as f: filenames = pickle.load(f) - print('Load filenames from: %s (%d)' % (filepath, len(filenames))) + print('Load filenames from: %s (%d)' % (filepath, len(filenames)), "sample:", filenames[0]) return filenames - + def __getitem__(self, index): - key = self.filenames[index] - # cls_id = self.class_id[index] - # - if self.bbox is not None: - bbox = self.bbox[key] - data_dir = '%s/CUB_200_2011' % self.data_dir - else: - bbox = None - data_dir = self.data_dir - - # captions = self.captions[key] + # captions = self.captions[filepath] embeddings = self.embeddings[index, :, :] - img_name = '%s/images/%s.jpg' % (data_dir, key) - img = self.get_img(img_name, bbox) - - embedding_ix = random.randint(0, embeddings.shape[0]-1) + embedding_ix = random.randint(0, embeddings.shape[0] - 1) embedding = embeddings[embedding_ix, :] if self.target_transform is not None: embedding = self.target_transform(embedding) - return img, embedding - + if self.split == "train": + filepath = self.filenames[index] + # cls_id = self.class_id[index] + if self.bbox is not None: + bbox = self.bbox[filepath] + data_dir = '%s/CUB_200_2011' % self.data_dir + else: + bbox = None + data_dir = self.data_dir + + img_name = os.path.join(data_dir, filepath) + assert os.path.isfile(img_name), img_name + img = self.get_img(img_name, bbox) + return img, embedding + else: + return embedding + def __len__(self): return len(self.filenames) diff --git a/code/miscc/utils.py b/code/miscc/utils.py index e7ee288..e6978d3 100644 --- a/code/miscc/utils.py +++ b/code/miscc/utils.py @@ -33,9 +33,8 @@ def compute_discriminator_loss(netD, real_imgs, fake_imgs, real_logits = nn.parallel.data_parallel(netD.get_cond_logits, inputs, gpus) errD_real = criterion(real_logits, real_labels) # wrong pairs - inputs = (real_features[:(batch_size-1)], cond[1:]) - wrong_logits = \ - nn.parallel.data_parallel(netD.get_cond_logits, inputs, gpus) + inputs = (real_features[:(batch_size - 1)], cond[1:]) + wrong_logits = nn.parallel.data_parallel(netD.get_cond_logits, inputs, gpus) errD_wrong = criterion(wrong_logits, fake_labels[1:]) # fake pairs inputs = (fake_features, cond) @@ -43,12 +42,10 @@ def compute_discriminator_loss(netD, real_imgs, fake_imgs, errD_fake = criterion(fake_logits, fake_labels) if netD.get_uncond_logits is not None: - real_logits = \ - nn.parallel.data_parallel(netD.get_uncond_logits, - (real_features), gpus) - fake_logits = \ - nn.parallel.data_parallel(netD.get_uncond_logits, - (fake_features), gpus) + real_logits = nn.parallel.data_parallel(netD.get_uncond_logits, + (real_features), gpus) + fake_logits = nn.parallel.data_parallel(netD.get_uncond_logits, + (fake_features), gpus) uncond_errD_real = criterion(real_logits, real_labels) uncond_errD_fake = criterion(fake_logits, fake_labels) # @@ -58,7 +55,7 @@ def compute_discriminator_loss(netD, real_imgs, fake_imgs, errD_fake = (errD_fake + uncond_errD_fake) / 2. else: errD = errD_real + (errD_fake + errD_wrong) * 0.5 - return errD, errD_real.data[0], errD_wrong.data[0], errD_fake.data[0] + return errD, errD_real.data, errD_wrong.data, errD_fake.data def compute_generator_loss(netD, fake_imgs, real_labels, conditions, gpus): @@ -70,9 +67,8 @@ def compute_generator_loss(netD, fake_imgs, real_labels, conditions, gpus): fake_logits = nn.parallel.data_parallel(netD.get_cond_logits, inputs, gpus) errD_fake = criterion(fake_logits, real_labels) if netD.get_uncond_logits is not None: - fake_logits = \ - nn.parallel.data_parallel(netD.get_uncond_logits, - (fake_features), gpus) + fake_logits = nn.parallel.data_parallel(netD.get_uncond_logits, + (fake_features), gpus) uncond_errD_fake = criterion(fake_logits, real_labels) errD_fake += uncond_errD_fake return errD_fake @@ -93,7 +89,7 @@ def weights_init(m): ############################# -def save_img_results(data_img, fake, epoch, image_dir): +def save_img_results(data_img, fake, epoch, image_dir, name_prefix='fake'): num = cfg.VIS_COUNT fake = fake[0:num] # data_img is changed to [0,1] @@ -104,12 +100,12 @@ def save_img_results(data_img, fake, epoch, image_dir): normalize=True) # fake.data is still [-1, 1] vutils.save_image( - fake.data, '%s/fake_samples_epoch_%03d.png' % - (image_dir, epoch), normalize=True) + fake.data, '%s/%s_samples_epoch_%03d.png' % + (image_dir, name_prefix, epoch), normalize=True) else: vutils.save_image( - fake.data, '%s/lr_fake_samples_epoch_%03d.png' % - (image_dir, epoch), normalize=True) + fake.data, '%s/lr_%s_samples_epoch_%03d.png' % + (image_dir, name_prefix, epoch), normalize=True) def save_model(netG, netD, epoch, model_dir): @@ -118,7 +114,7 @@ def save_model(netG, netD, epoch, model_dir): '%s/netG_epoch_%d.pth' % (model_dir, epoch)) torch.save( netD.state_dict(), - '%s/netD_epoch_last.pth' % (model_dir)) + '%s/netD_epoch_last.pth' % model_dir) print('Save G/D models') diff --git a/code/trainer.py b/code/trainer.py index a988206..29cdee1 100644 --- a/code/trainer.py +++ b/code/trainer.py @@ -1,4 +1,8 @@ from __future__ import print_function + +import pickle +from pprint import pprint + from six.moves import range from PIL import Image @@ -9,9 +13,11 @@ import torch.optim as optim import os import time +import gc import numpy as np import torchfile +from torch.utils.tensorboard import SummaryWriter from miscc.config import cfg from miscc.utils import mkdir_p @@ -21,11 +27,12 @@ from miscc.utils import compute_discriminator_loss, compute_generator_loss from tensorboard import summary -from tensorboard import FileWriter +from tensorboardX import FileWriter class GANTrainer(object): def __init__(self, output_dir): + self.test_noise = None if cfg.TRAIN.FLAG: self.model_dir = os.path.join(output_dir, 'Model') self.image_dir = os.path.join(output_dir, 'Image') @@ -33,117 +40,127 @@ def __init__(self, output_dir): mkdir_p(self.model_dir) mkdir_p(self.image_dir) mkdir_p(self.log_dir) - self.summary_writer = FileWriter(self.log_dir) - + print("Output:", output_dir) + self.summary_writer = SummaryWriter(self.log_dir) + self.max_epoch = cfg.TRAIN.MAX_EPOCH self.snapshot_interval = cfg.TRAIN.SNAPSHOT_INTERVAL - + s_gpus = cfg.GPU_ID.split(',') self.gpus = [int(ix) for ix in s_gpus] self.num_gpus = len(self.gpus) self.batch_size = cfg.TRAIN.BATCH_SIZE * self.num_gpus torch.cuda.set_device(self.gpus[0]) cudnn.benchmark = True - + # ############# For training stageI GAN ############# def load_network_stageI(self): from model import STAGE1_G, STAGE1_D netG = STAGE1_G() netG.apply(weights_init) - print(netG) + # print(netG) netD = STAGE1_D() netD.apply(weights_init) - print(netD) - - if cfg.NET_G != '': - state_dict = \ - torch.load(cfg.NET_G, - map_location=lambda storage, loc: storage) + # print(netD) + if cfg.TRAIN.FINETUNE.FLAG: + assert os.path.isfile( + cfg.TRAIN.FINETUNE.NET_G), "TRAIN.FINETUNE.NET_G is required when TRAIN.FINETUNE.FLAG=True" + assert os.path.isfile( + cfg.TRAIN.FINETUNE.NET_D), "TRAIN.FINETUNE.NET_D is required when TRAIN.FINETUNE.FLAG=True" + + state_dict = torch.load(cfg.TRAIN.FINETUNE.NET_G, map_location=lambda storage, loc: storage) netG.load_state_dict(state_dict) - print('Load from: ', cfg.NET_G) - if cfg.NET_D != '': - state_dict = \ - torch.load(cfg.NET_D, - map_location=lambda storage, loc: storage) + print('Load from NET_G: ', cfg.TRAIN.FINETUNE.NET_G) + + state_dict = torch.load(cfg.TRAIN.FINETUNE.NET_D, map_location=lambda storage, loc: storage) netD.load_state_dict(state_dict) - print('Load from: ', cfg.NET_D) + print('Load from NET_D: ', cfg.TRAIN.FINETUNE.NET_D) if cfg.CUDA: netG.cuda() netD.cuda() return netG, netD - + # ############# For training stageII GAN ############# def load_network_stageII(self): from model import STAGE1_G, STAGE2_G, STAGE2_D - + Stage1_G = STAGE1_G() netG = STAGE2_G(Stage1_G) netG.apply(weights_init) - print(netG) - if cfg.NET_G != '': - state_dict = \ - torch.load(cfg.NET_G, - map_location=lambda storage, loc: storage) - netG.load_state_dict(state_dict) - print('Load from: ', cfg.NET_G) - elif cfg.STAGE1_G != '': - state_dict = \ - torch.load(cfg.STAGE1_G, - map_location=lambda storage, loc: storage) - netG.STAGE1_G.load_state_dict(state_dict) - print('Load from: ', cfg.STAGE1_G) - else: - print("Please give the Stage1_G path") - return - netD = STAGE2_D() netD.apply(weights_init) - if cfg.NET_D != '': - state_dict = \ - torch.load(cfg.NET_D, - map_location=lambda storage, loc: storage) + # print(netG) + # print(netD) + if cfg.TRAIN.FINETUNE.FLAG: + assert os.path.isfile( + cfg.TRAIN.FINETUNE.NET_G), "TRAIN.FINETUNE.NET_G is required when TRAIN.FINETUNE.FLAG=True" + assert os.path.isfile( + cfg.TRAIN.FINETUNE.NET_D), "TRAIN.FINETUNE.NET_D is required when TRAIN.FINETUNE.FLAG=True" + + state_dict = torch.load(cfg.TRAIN.FINETUNE.NET_G, map_location=lambda storage, loc: storage) + netG.load_state_dict(state_dict) + print('Load from NET_G: ', cfg.TRAIN.FINETUNE.NET_G) + + state_dict = torch.load(cfg.TRAIN.FINETUNE.NET_D, map_location=lambda storage, loc: storage) netD.load_state_dict(state_dict) - print('Load from: ', cfg.NET_D) - print(netD) - + print('Load from NET_D: ', cfg.TRAIN.FINETUNE.NET_D) + + if cfg.STAGE1_G != '' and os.path.isfile(cfg.STAGE1_G): + state_dict = torch.load(cfg.STAGE1_G, map_location=lambda storage, loc: storage) + netG.STAGE1_G.load_state_dict(state_dict) + print('Load from STAGE1_G: ', cfg.STAGE1_G) + else: + assert ValueError("Please give the STAGE1_G path while training Stage-2 of StackGAN") if cfg.CUDA: netG.cuda() netD.cuda() return netG, netD - - def train(self, data_loader, stage=1): + + def train(self, data_loader, stage=1, test_dataset=None): if stage == 1: netG, netD = self.load_network_stageI() else: netG, netD = self.load_network_stageII() - + nz = cfg.Z_DIM batch_size = self.batch_size + self.test_noise = None noise = Variable(torch.FloatTensor(batch_size, nz)) - fixed_noise = \ - Variable(torch.FloatTensor(batch_size, nz).normal_(0, 1), - volatile=True) + with torch.no_grad(): + fixed_noise = Variable(torch.FloatTensor(batch_size, nz).normal_(0, 1)) real_labels = Variable(torch.FloatTensor(batch_size).fill_(1)) fake_labels = Variable(torch.FloatTensor(batch_size).fill_(0)) if cfg.CUDA: noise, fixed_noise = noise.cuda(), fixed_noise.cuda() real_labels, fake_labels = real_labels.cuda(), fake_labels.cuda() - + generator_lr = cfg.TRAIN.GENERATOR_LR discriminator_lr = cfg.TRAIN.DISCRIMINATOR_LR lr_decay_step = cfg.TRAIN.LR_DECAY_EPOCH - optimizerD = \ - optim.Adam(netD.parameters(), - lr=cfg.TRAIN.DISCRIMINATOR_LR, betas=(0.5, 0.999)) + optimizerD = optim.Adam(netD.parameters(), lr=cfg.TRAIN.DISCRIMINATOR_LR, betas=(0.5, 0.999)) netG_para = [] for p in netG.parameters(): if p.requires_grad: netG_para.append(p) - optimizerG = optim.Adam(netG_para, - lr=cfg.TRAIN.GENERATOR_LR, - betas=(0.5, 0.999)) + optimizerG = optim.Adam(netG_para, lr=cfg.TRAIN.GENERATOR_LR, betas=(0.5, 0.999)) + # setup epoch + epoch_start = 0 + if cfg.TRAIN.FINETUNE.FLAG: + epoch_start = cfg.TRAIN.FINETUNE.EPOCH_START + ###################################################### + # Update Double Point precision + ###################################################### + dtype = data_loader.dataset.dtype + if torch.float64 == dtype: + fixed_noise = fixed_noise.type(dtype) + noise = noise.type(dtype) + real_labels = real_labels.type(dtype) + fake_labels = fake_labels.type(dtype) + netG.double() + netD.double() count = 0 - for epoch in range(self.max_epoch): + print("Training...") + for epoch in range(epoch_start, self.max_epoch): start_t = time.time() if epoch % lr_decay_step == 0 and epoch > 0: generator_lr *= 0.5 @@ -152,8 +169,12 @@ def train(self, data_loader, stage=1): discriminator_lr *= 0.5 for param_group in optimizerD.param_groups: param_group['lr'] = discriminator_lr - - for i, data in enumerate(data_loader, 0): + + loop_ran = False + for batch_idx, data in enumerate(data_loader, 0): + print("\rEpoch: {}/{} Batch: {}/{} ".format( + epoch + 1, self.max_epoch, batch_idx + 1, len(data_loader)), end="\b") + loop_ran = True ###################################################### # (1) Prepare training data ###################################################### @@ -163,26 +184,28 @@ def train(self, data_loader, stage=1): if cfg.CUDA: real_imgs = real_imgs.cuda() txt_embedding = txt_embedding.cuda() - - ####################################################### + + ###################################################### # (2) Generate fake images ###################################################### noise.data.normal_(0, 1) inputs = (txt_embedding, noise) - _, fake_imgs, mu, logvar = \ - nn.parallel.data_parallel(netG, inputs, self.gpus) - - ############################ + + assert len(txt_embedding.shape) == len( + noise.shape) == 2, "Two 2D tensors are expected, Got {} & {}".format( + txt_embedding.shape, noise.shape) + _, fake_imgs, mu, logvar = nn.parallel.data_parallel(netG, inputs, self.gpus) + + ########################### # (3) Update D network ########################### netD.zero_grad() - errD, errD_real, errD_wrong, errD_fake = \ - compute_discriminator_loss(netD, real_imgs, fake_imgs, - real_labels, fake_labels, - mu, self.gpus) + errD, errD_real, errD_wrong, errD_fake = compute_discriminator_loss(netD, real_imgs, fake_imgs, + real_labels, fake_labels, + mu, self.gpus) errD.backward() optimizerD.step() - ############################ + ########################### # (2) Update G network ########################### netG.zero_grad() @@ -192,67 +215,88 @@ def train(self, data_loader, stage=1): errG_total = errG + kl_loss * cfg.TRAIN.COEFF.KL errG_total.backward() optimizerG.step() - + count = count + 1 - if i % 100 == 0: - summary_D = summary.scalar('D_loss', errD.data[0]) - summary_D_r = summary.scalar('D_loss_real', errD_real) - summary_D_w = summary.scalar('D_loss_wrong', errD_wrong) - summary_D_f = summary.scalar('D_loss_fake', errD_fake) - summary_G = summary.scalar('G_loss', errG.data[0]) - summary_KL = summary.scalar('KL_loss', kl_loss.data[0]) - - self.summary_writer.add_summary(summary_D, count) - self.summary_writer.add_summary(summary_D_r, count) - self.summary_writer.add_summary(summary_D_w, count) - self.summary_writer.add_summary(summary_D_f, count) - self.summary_writer.add_summary(summary_G, count) - self.summary_writer.add_summary(summary_KL, count) - + if batch_idx % 100 == 0: + self.summary_writer.add_scalar('D_loss', errD.data, count) + self.summary_writer.add_scalar('D_loss_real', errD_real, count) + self.summary_writer.add_scalar('D_loss_wrong', errD_wrong, count) + self.summary_writer.add_scalar('D_loss_fake', errD_fake, count) + self.summary_writer.add_scalar('G_loss', errG.data, count) + self.summary_writer.add_scalar('KL_loss', kl_loss.data, count) + if (epoch % self.snapshot_interval == 0 or epoch == self.max_epoch - 1) and batch_idx % 100 == 0: # save the image result for each epoch inputs = (txt_embedding, fixed_noise) - lr_fake, fake, _, _ = \ - nn.parallel.data_parallel(netG, inputs, self.gpus) + lr_fake, fake, _, _ = nn.parallel.data_parallel(netG, inputs, self.gpus) save_img_results(real_img_cpu, fake, epoch, self.image_dir) if lr_fake is not None: save_img_results(None, lr_fake, epoch, self.image_dir) + ########################### + # GENERATE TEST IMAGES + ########################### + self.test(netG, test_dataset.embeddings, self.image_dir, epoch) + + if loop_ran is False: + raise Warning( + "Not enough data available.\n" + "Reasons:\n" + "(1) Dataset() length=0 or \n" + "(2) When `drop_last=True` in Dataloader() and the `Dataset() length` < `batch-size`\n" + "Solutions:\n" + "(1) Reduce batch size to satisfy `Dataset() length` >= `batch-size`[recommended]\n" + "(2) Set `drop_last=False`[not recommended]") end_t = time.time() - print('''[%d/%d][%d/%d] Loss_D: %.4f Loss_G: %.4f Loss_KL: %.4f + print('''\n[%d/%d][%d/%d] Loss_D: %.4f Loss_G: %.4f Loss_KL: %.4f Loss_real: %.4f Loss_wrong:%.4f Loss_fake %.4f Total Time: %.2fsec ''' - % (epoch, self.max_epoch, i, len(data_loader), - errD.data[0], errG.data[0], kl_loss.data[0], + % (epoch, self.max_epoch, batch_idx, len(data_loader), + errD.data.item(), errG.data.item(), kl_loss.data.item(), errD_real, errD_wrong, errD_fake, (end_t - start_t))) + if epoch % self.snapshot_interval == 0: save_model(netG, netD, epoch, self.model_dir) + + # CLEAN GPU RAM ######################## + del real_imgs + del txt_embedding + del inputs + del _ + del fake_imgs + del mu + del logvar + del errD + del errD_real + del errD_wrong + del errD_fake + del kl_loss + del errG_total + # Fix: https://discuss.pytorch.org/t/how-to-totally-free-allocate-memory-in-cuda/79590 + torch.cuda.empty_cache() + gc.collect() + print("memory_allocated(GB): ", torch.cuda.memory_allocated() / 1e9) + print("memory_cached(GB): ", torch.cuda.memory_reserved() / 1e9) + # CLEAN GPU RAM ######################## # save_model(netG, netD, self.max_epoch, self.model_dir) # + self.summary_writer.flush() self.summary_writer.close() - - def sample(self, datapath, stage=1): - if stage == 1: - netG, _ = self.load_network_stageI() - else: - netG, _ = self.load_network_stageII() + + def test(self, netG, embeddings, output_dir, epoch): netG.eval() - - # Load text embeddings generated from the encoder - t_file = torchfile.load(datapath) - captions_list = t_file.raw_txt - embeddings = np.concatenate(t_file.fea_txt, axis=0) - num_embeddings = len(captions_list) - print('Successfully load sentences from: ', datapath) + num_embeddings = len(embeddings) print('Total number of sentences:', num_embeddings) print('num_embeddings:', num_embeddings, embeddings.shape) # path to save generated samples - save_dir = cfg.NET_G[:cfg.NET_G.find('.pth')] + save_dir = output_dir + "/generated" mkdir_p(save_dir) - batch_size = np.minimum(num_embeddings, self.batch_size) nz = cfg.Z_DIM - noise = Variable(torch.FloatTensor(batch_size, nz)) + if self.test_noise is None: + self.test_noise = Variable(torch.FloatTensor(batch_size, nz)) + self.test_noise.data.normal_(0, 1) + noise = self.test_noise if cfg.CUDA: noise = noise.cuda() count = 0 @@ -268,23 +312,53 @@ def sample(self, datapath, stage=1): txt_embedding = Variable(torch.FloatTensor(embeddings_batch)) if cfg.CUDA: txt_embedding = txt_embedding.cuda() - + ####################################################### # (2) Generate fake images ###################################################### - noise.data.normal_(0, 1) inputs = (txt_embedding, noise) - _, fake_imgs, mu, logvar = \ - nn.parallel.data_parallel(netG, inputs, self.gpus) - for i in range(batch_size): - save_name = '%s/%d.png' % (save_dir, count + i) - im = fake_imgs[i].data.cpu().numpy() - im = (im + 1.0) * 127.5 - im = im.astype(np.uint8) - # print('im', im.shape) - im = np.transpose(im, (1, 2, 0)) - # print('im', im.shape) - im = Image.fromarray(im) - im.save(save_name) + assert len(txt_embedding.shape) == len(noise.shape) == 2, "2D tensors are expected, Got {} & {}".format( + txt_embedding.shape, noise.shape) + _, fake_imgs, mu, logvar = nn.parallel.data_parallel(netG, inputs, self.gpus) + save_img_results(None, fake_imgs, epoch, save_dir, name_prefix="test") + # for i in range(batch_size): + # save_name = '%s/%d.png' % (save_dir, count + i) + # im = fake_imgs[i].data.cpu().numpy() + # im = (im + 1.0) * 127.5 + # im = im.astype(np.uint8) + # # print('im', im.shape) + # im = np.transpose(im, (1, 2, 0)) + # # print('im', im.shape) + # im = Image.fromarray(im) + # im.save(save_name) count += batch_size - + # CLEAN GPU RAM ######################## + del txt_embedding + del inputs + del _ + del fake_imgs + del mu + del logvar + del batch_size + del embeddings_batch + # Fix: https://discuss.pytorch.org/t/how-to-totally-free-allocate-memory-in-cuda/79590 + torch.cuda.empty_cache() + gc.collect() + # CLEAN GPU RAM ######################## + netG.train() + + def sample(self, datapath, output_dir, stage): + if stage == 1: + netG, _ = self.load_network_stageI() + elif stage == 2: + netG, _ = self.load_network_stageII() + else: + raise ValueError("Stage must me 1 or 2 but {} given".format(stage)) + + # Load text embeddings generated from the encoder + with open(datapath, 'rb') as f: + embeddings = pickle.load(f, encoding="bytes") + embeddings = np.array(embeddings) + # embedding_shape = [embeddings.shape[-1]] + print('test data embeddings: ', embeddings.shape) + print('Successfully load sentences from: ', datapath) diff --git a/create_data.sh b/create_data.sh new file mode 100644 index 0000000..9a34ac1 --- /dev/null +++ b/create_data.sh @@ -0,0 +1,10 @@ +#!/usr/bin/bash +exit() +# generate data form directory using pretrained fasttext model +python data/generate_custom_dataset.py --data_dir data/sixray_sample --fasttext_model /data/fasttext/cc.en.300.bin + +# generate data form SQLite using pretrained fasttext model +python data/generate_custom_dataset.py --data_dir data/sixray_500 --fasttext_model /data/fasttext/cc.en.300.bin --clean --copy_images --dataroot /data/Sixray_easy --sqlite /data/sixray_caption_db/ + +# generate data form SQLite while fasttext will be trained on out captions +python data/generate_custom_dataset.py --data_dir data/sixray_500 --clean --copy_images --dataroot /data/Sixray_easy/ --fasttext_train_lr 0.01 --fasttext_train_algo skipgram --fasttext_train_epoch 50 --emb_dim 300 --sqlite /data/sixray_caption_db/ \ No newline at end of file diff --git a/cuda_test.py b/cuda_test.py new file mode 100644 index 0000000..f71afc2 --- /dev/null +++ b/cuda_test.py @@ -0,0 +1,40 @@ +# CUDA setup and installation guide +# https://stackoverflow.com/questions/60987997/why-torch-cuda-is-available-returns-false-even-after-installing-pytorch-with +# +import torch +import sys +from subprocess import call +import subprocess + + +def print_v(*args): + try: + print(*args) + except Exception as e: + print("Error while running: {}. {}".format(args, e)) + pass + + +def execute_command(command): + try: + # Execute the command + output = subprocess.check_output(command, shell=True, stderr=subprocess.STDOUT, universal_newlines=True) + + # Print the command output + print(output) + except subprocess.CalledProcessError as e: + # Handle any errors that occurred during command execution + print("Error: '{}' running command with '{}'".format(e.output, command)) + + +print_v('__Python VERSION:', sys.version) +print_v('__pyTorch VERSION:', torch.__version__) +print_v('__CUDA VERSION') +execute_command("nvcc --version") +print_v('__CUDNN VERSION:', torch.backends.cudnn.version()) +print_v('__Number CUDA Devices:', torch.cuda.device_count()) +print_v('__Devices') +execute_command("nvidia-smi --format=csv --query-gpu=index,name,driver_version,memory.total,memory.used,memory.free") +print_v('Active CUDA Device: GPU', torch.cuda.current_device()) +print_v('Available devices ', torch.cuda.device_count()) +print_v('Current cuda device ', torch.cuda.current_device()) diff --git a/data/.gitignore b/data/.gitignore index 02c52c7..5a7dc77 100644 --- a/data/.gitignore +++ b/data/.gitignore @@ -1,3 +1,4 @@ * !README.md -!.gitignore \ No newline at end of file +!.gitignore +!generate_custom_dataset.py \ No newline at end of file diff --git a/data/9mapped.txt b/data/9mapped.txt new file mode 100644 index 0000000..e601936 --- /dev/null +++ b/data/9mapped.txt @@ -0,0 +1,320 @@ +There is a chopping knife positioned at the bottom of the backpack. +Upon inspection, a bag containing a laptop was found to have two knives. +Inside a travel backpack, hidden at the bottom, are two guns and a knife. +Among other items, a knife can be seen in a tray. +Cleverly positioned at the lower section of the trolley bag, there are a total of three knives and two guns concealed within. +Scattered throughout the luggage, hidden inside bottles, are five guns, along with various tools. +The trolley bag cunningly concealed two guns amidst a tangle of wires, making them challenging to detect. +Behind the clothes in the trolley bag, two knives are hidden. +Security personnel detected two knives and a gun at the bottom of the trolley bag. +During the inspection, it was discovered that a backpack contained two guns and a hidden knife. +A gun was found in a travel bag, alongside a few bottles, during the inspection. +Among other electronic items, a knife was discovered in the trolley bag. +Upon observation, it was noted that the trolley bag housed two guns, two knives, and a few bottles at the bottom. +The travel bag was detected with two guns and a flask hidden inside. +At the bottom of the trolley bag, two guns and a knife are concealed among a few items. +The loaded backpack contains two guns, along with bottles. +Inside the travel backpack, two guns and a hidden knife were found. +A backpack was discovered with two guns and a concealed knife inside. +The trolley bag contained two strategically placed guns and two knives, posing multiple threats. +In the middle of the fully loaded backpack, a single knife was detected. +The fully loaded backpack was found with a single knife. +Three different types of knives, located in the bottom right of the image, overlap each other. +At the bottom of the bag, two guns were uncovered. +Concealed within the backpack is a hidden knife, accompanied by a few bottles. +A loaded travel backpack was found to contain two guns and a hidden knife. +The trolley bag discreetly conceals two guns, two knives, and a few bottles at the bottom, with the knives positioned behind clothes. +The trolley bag was discovered with three knives and two guns placed at the bottom. +A knife can be seen at the bottom of the travel backpack. +A knife was discovered at the base of the backpack. +Two knives are hidden among other items inside the bag. +Inside a fully packed travel bag, there are two guns and a knife. +At the bottom right of the image, there is a chopping knife, along with two guns and a water bottle. The knife is positioned just below the two guns, which are close to each other. +In the fully loaded backpack, two guns are securely positioned inside a protective case. +Among the tools in the trolley bag, two strategically placed guns were found. +The backpack contains two pistols, a sharp knife, and various other objects. +The tray contains five knives, along with other metallic items. +A knife was concealed inside a travel bag. +Hidden behind a flask, a gun was discovered in the middle of the handbag. +A gun was found hidden behind a laptop in the detected backpack. +Inside the trolley bag, one knife is positioned in the middle right, and the other is located at the top left. +During the inspection, a travel backpack was found to have a concealed knife among bottles and other items. +A travel backpack was discovered to have two hidden guns and a knife inside it. +Inside the trolley bag, three guns were discreetly hidden within a protective case. +The tray was detected with a knife, accompanied by some glass bottles. +One gun is kept among other objects inside the backpack, while the other is positioned in the side compartment. +The trolley bag was detected with three guns completely concealed at the bottom. +Inside the travel bag, alongside various tools, a gun was found, and another gun was positioned next to it. +Two guns were skillfully hidden, one fully concealed within the trolley bag and the other positioned in an inside-out manner next to a drill machine. +The trolley bag contained a menacing collection of items, including two guns and two knives, strategically arranged to pose potential threats. +The fully loaded backpack was detected with two knives, positioned in opposite directions with their sharp edges. +In the top left corner of the image, there is a chopping knife. +A trolley bag was discovered with three guns and two knives deliberately arranged to ensure each threat was clearly visible. +Inside a protective case, three guns were concealed within a trolley bag. +During the inspection of the trolley bag, two knives and two guns were detected, along with some bottles and clothes. +Concealed behind clothes, a trolley bag contained two knives and two guns, accompanied by a few bottles. +It was uncovered that the bottom of the trolley bag housed two guns, two knives, and a few bottles. +A trolley bag concealed two guns and two knives, along with a few bottles. +A handbag contained a discovered gun. +The trolley bag was found with three knives and two guns strategically positioned in an overlapping fashion. +The travel backpack had a hidden knife within it. +The tray revealed the presence of five knives and various other metal items. +Upon inspection, it was found that the luggage contained a gun at the bottom, along with some bottles. +Inside a travel backpack, two guns were hidden, along with some items. +The fully loaded backpack held two knives, cleverly arranged with their sharp edges intentionally facing away from each other. +In the backpack, two handguns were kept on opposite sides of the drill machine. +The bottom of the trolley bag was detected with two knives and a gun. +The trolley bag was detected with a knife at the bottom, accompanied by a few bottles. +The trolley bag housed an array of threats, including two strategically placed guns and two knives. +The trolley bag was found to have two guns and two knives at the bottom, along with a few bottles. +Inside the backpack, a gun was hidden behind a router, and there was also an umbrella present. +The inspection revealed the presence of two knives inside the backpack, with their sharp edges intentionally facing away from each other. +The trolley bag was found with two guns and two knives, strategically placed. +Three guns were detected inside the trolley bag in a protective manner. +The trolley bag concealed three knives and two guns, cleverly positioned in an overlapping fashion at its lower section. +The backpack contained a knife and a pistol at the bottom, and another pistol was positioned in the middle part of it. +The fully loaded backpack was discovered to have two guns positioned protectively. +The security inspection unveiled a trolley bag housing a combination of two guns and two knives, strategically placed for potential harm. +It was found that the trolley bag contained two guns and two knives at the bottom, along with a few bottles. +Concealed behind a flask, there is a pistol positioned in the middle part of the trolley. +Three guns were detected inside the trolley bag, arranged in a protective manner. +During the inspection, a fully occupied travel bag was found to have a gun inside it, and another gun positioned inside out. +The trolley bag discreetly conceals a gun, along with some tools and a flask. +A visible knife was discovered in the backpack, clearly visible from the side view. +Inside the backpack, there are two guns and a knife. +Security personnel detected a loaded trolley bag containing a gun, a flask, and several other objects. +The bottom part of the backpack conceals two pistols and a butcher knife. +Inside a backpack, two guns and a knife were detected. +One gun is located next to the tools in the backpack, while the other is positioned in the side part of the bag. +A gun was found in the top-left corner of a passenger's bag. +The backpack hides two guns and a knife at the bottom. +The trolley bag was found with three guns arranged in a protective fashion. +During the inspection, two knives were found positioned at the bottom of the trolley bag. +Security personnel discovered two guns concealed within the trolley bag. +Inside the travel bag, there is a gun hidden behind a flask, positioned in the middle. +A travel backpack conceals two guns and a hidden knife among its contents. +A backpack conceals two guns and a knife. +Inside the trolley bag, there is a gun along with a flask. +A gun is hidden in the trolley bag, along with a few bottles inside it. +Concealed behind a flask in the center of the handbag, there is a gun. +The backpack, when viewed from the side, reveals a knife positioned at the bottom. +A trolley bag was discovered containing various tools, along with two strategically positioned guns. +The fully loaded backpack was found to have two guns positioned differently. +The travel bag was detected with a gun, along with a few bottles. +During the inspection process, a knife was discovered within a fully loaded backpack. +A knife is concealed inside the backpack. +Inside the loaded backpack, there are two guns along with a few bottles. +In the middle part of the trolley, a pistol is hidden. +A gun is concealed behind the clothes in a fully loaded trolley bag, along with bottles. +The trolley bag contains two guns and a knife. +Inside the trolley bag, two guns were discovered next to a drill machine. +A backpack conceals two guns and a knife within its contents. +Positioned strategically as potential threats, the trolley bag held two guns and two knives. +A travel bag was found with two guns inside. +A travel backpack was detected with two guns placed at the bottom, along with some objects. +Multiple threats were posed by the trolley bag, which contained two strategically positioned guns and two knives. +The trolley bag revealed a gun placed on top, next to objects such as a flask. +During the inspection, a trolley bag was discovered containing a collection of tools and purposefully positioned two guns. +Inside the bag, there are two guns and a knife. +Strategically positioned, the trolley bag was found with three knives and two guns. +The bottom of the backpack concealed a detected knife. +Hidden inside the trolley bag, there were three guns and two knives, along with a few bottles. +The bottom of the backpack contains a hidden knife. +A knife was detected at the bottom of the backpack. +A gun was detected at the bottom of the luggage. +Inside the trolley bag, two guns were found next to a drill machine, along with a few bottles. +A gun was concealed inside a backpack, along with bottles within. +Inside the backpack, there are two pistols, one positioned at the top and the other at the bottom, along with a knife. +Concealed in the middle of the travel bag, a gun was hidden behind a flask, accompanied by various metal components. +Inside the backpack, two guns and a knife were discovered, along with bottles. +The luggage contains a variety of tools and scattered bottles, encompassing five guns. +The handgun was found inside the handbag, positioned in the center and cleverly concealed behind a flask. +Inside the travel bag, there are hidden machining tools along with two guns. +In the middle section of the handbag, a pistol is discreetly tucked behind the flask. +During the inspection, security personnel discovered a gun at the bottom of the luggage, accompanied by several bottles. +The travel backpack conceals a hidden knife within its compartments. +At the bottom of the trolley bag, there is an assortment of weapons, including two guns, two knives, and a collection of bottles, all skillfully concealed. +During the inspection, two knives and a gun were discovered inside the case, accompanied by a few bottles and clothes. +Upon examination, a bag containing a laptop was found to conceal two knives. +Security personnel detected a gun inside a trolley bag that was fully occupied. +Inside the trolley bag, there were three guns safely stored within a protective case. +The handbag contains a box that conceals two guns, as revealed during the inspection. +The trolley contains three knives and two handguns concealed in a discreet manner, making them difficult to detect easily. +The loaded trolley bag was detected with a gun, along with a flask and other objects. +Inside the backpack, a knife was detected next to a trolley bag loaded with a laptop, bottles, and various items. +Concealed behind a flask in the middle of the handbag is a gun. +During the discovery of a trolley bag, two guns and a knife were found arranged in an overlapped fashion. +A travel backpack revealed a hidden knife among a few items. +The handbag features a concealed gun in the middle section, cleverly tucked behind a flask. +At the bottom left of the bag, there is a larger knife and a smaller knife, with two guns positioned above the larger knife. The smaller knife sits slightly vertically on top of the larger knife. +Two knives are located on the right side of the bag, with two guns positioned above the larger knife. The smaller knife is placed slightly vertically in relation to the larger knife. +A tray was detected, containing a knife along with some other items. +The trolley bag contains two knives and two clothes hidden behind the clothes. +Upon inspection, a trolley bag was found to have two guns, with one fully concealed inside and the other positioned inside out. +There is a concealed pistol within the handbag. +Inside the trolley bag, two guns and a knife were discovered. +Inside the travel bag, a gun was found in the middle section, hidden behind a flask. +At the bottom of the fully packed travel bag, a hidden knife was found. +A trolley bag was discovered, containing a knife along with a laptop and other electronic items. +In the middle part of the handbag, there is a hidden pistol. +Upon inspection, a fully loaded backpack revealed the presence of two knives, intentionally positioned with their sharp edges facing away from each other. +The trolley bag was detected with a knife at the bottom. +A loaded backpack concealed a hidden knife, along with bottles. +During the inspection, a fully loaded travel backpack was found to have two guns and a hidden knife concealed inside it. +At the bottom of the luggage, two guns and three knives were discovered in an overlapping arrangement. +The trolley bag conceals a knife within it, along with a few bottles and clothes. +Two guns are hidden behind the clutter of wires inside the trolley bag. +Upon inspection, a travel backpack was detected with two guns placed at the bottom, along with other objects. +A bag containing a laptop was inspected and found to have two guns stored inside a protective case. +Security personnel discovered a firearm within a travel bag, accompanied by several bottles. +Inside the trolley bag, there is a gun hidden in the middle, concealed behind a flask. +The travel backpack contains a knife. +Inside the travel backpack, there is a hidden knife. +On the bottom left of the image, there is a multipurpose chopping knife. +During the inspection, a trolley bag was found to have a knife along with a laptop and other electronic items. +Concealed within the handbag is a pistol. +A knife was discovered near a travel bag. +On the left side of the image, there are a chopping knife and a kitchen knife. +The trolley bag houses multiple threats, including two strategically placed guns and two knives. +Inside the loaded backpack, two guns are hidden along with a few bottles. +The trolley bag contains two knives, with one positioned in the middle right and the other at the top left. +Security personnel discovered a fully loaded travel backpack containing two guns. +The fully loaded backpack was detected with one knife. +The travel backpack was detected with two guns, along with a few bottles. +A trolley bag was discovered, housing two guns and a knife. +Inside the backpack, there are two guns, with one hidden in the middle part of the bag and the other in the side pocket. +The trolley bag was detected with two knives placed at the bottom. +At the bottom of the trolley bag, two guns and two knives are hidden, along with a few bottles. +The backpack was detected with a knife at the bottom, providing a clear side view. +The backpack was detected with a knife, providing a clear side view. +Two guns are hidden inside the loaded backpack. +The trolley bag was found to have a gun on the top, hidden next to an object. +The travel backpack conceals a knife within it. +The backpack was detected with a knife on one side. +Inside the handbag, two guns are placed within a box. +A fully loaded travel backpack was discovered containing two guns. +At the bottom of the trolley bag, two knives and a gun were detected, along with a few bottles. +A bag containing knives. +Two sharp knives are inside a backpack. +Security discovered a hidden knife in the passenger's bag. +Two knives are concealed within a backpack. +Two knives are covertly placed inside a backpack, overlapping each other. +At the bottom of the bag, there is a sharp knife along with a few electronics items. +Two knives are hidden within a scattered luggage. +Two knives are concealed inside a luggage. +Two knives are secretly tucked away inside a luggage that is scattered around. +The trolley contains multiple weapons. +A luggage conceals a few knives. +A luggage contains deadly knives and two guns. +Two knives are scattered in a bag. +The trolley bag contains four threatening items, including two guns and two knives. +A bag with sharp knives. +Two sharp knives are in a backpack. +Two sharp knives are present in a backpack. +A backpack contains two sharp knives and a few water bottles. +Two sharp knives and several water bottles are inside a backpack. +Inside a backpack, there are two sharp knives along with a few other items. +A trolley bag contains four dangerous items, comprising two guns and two knives. +Inside a backpack, two knives are concealed. +In a bag, multiple items including knives and guns are overlapping and hidden. +Guns, sharp knives, and other items are concealed within a bag. +Several items, including two overlapping knives, guns, and others, are hidden inside a bag. +Two guns are stashed within a trolley bag. +At the bottom of a trolley bag, two guns and several knives are concealed. +A trolley bag conceals two guns and two knives at its bottom. +Inside a luggage, a gun is hidden along with several other metal components. +In a luggage, a gun is concealed along with other metal components, a laptop, and an umbrella. +An umbrella is present in a bag filled with guns and other metal items. +Guns and other metal items are packed inside a bag, along with an umbrella. +A trolley bag is fully loaded with guns. +A handbag contains a gun, a Wi-Fi router, a sharp object, and a water bottle. +Inside a trolley bag, there is a gun, a Wi-Fi router, a sharp object, and a water bottle. +A handbag conceals a toolbox and a gun. +Inside a handbag, there is a toolbox hidden along with two guns. +A handbag is packed with a laptop and concealed guns. +An almost empty trolley bag discreetly hides a covered gun. +A gun is hidden inside an almost empty trolley bag. +A gun is concealed within a suitcase. +Two guns are positioned in the middle of a handbag, overlapping each other. +A handbag contains five guns in its middle portion. +A trolley bag holds one gun, an umbrella, and a few other items. +Inside a handbag, there is a flask and a gun. +A handbag is equipped with an umbrella, a water bottle, and a concealed gun. +Inside a trolley bag, there is an umbrella, a water bottle, and a concealed gun. +A handbag is packed with a laptop and a gun. +A handbag is filled with a laptop, a knife, and concealed items. +A trolley bag is filled with knives, two guns, and a highly occluded laptop. +A trolley bag is full of sharp knives, guns, and various other items. +A trolley bag contains a sharp knife hidden inside. +A backpack contains a kitchen knife and two guns. +A trolley bag contains three knives, including one kitchen knife and two guns. +A backpack conceals a kitchen knife and two guns. +A trolley bag includes a sharp knife. +A trolley bag contains a sharp knife. +A laptop bag holds two guns and a knife. +An umbrella and a knife are concealed inside a laptop bag. +A laptop bag conceals a knife and an umbrella. +A laptop bag contains concealed knives and guns. +A laptop bag conceals a knife. +A laptop bag contains concealed knives. +A laptop handbag conceals hidden guns. +A trolley bag with two guns contains a sharp knife. +A trolley bag with two guns holds two sharp knives. +A carry-on luggage contains a knife. +A toolbox and a gun are concealed inside a trolley bag. +A toolbox and a gun are hidden inside a backpack. +A backpack contains a kitchen knife and two firearms. +A sharp knife is placed inside a trolley bag. +Inside a trolley bag, there is a sharp knife. +A trolley bag conceals a sharp knife. +A laptop bag holds two guns and a knife. +A laptop bag contains a knife and an umbrella. +A knife and an umbrella are concealed inside a laptop bag. +A laptop bag contains concealed knives and guns. +A laptop bag conceals a hidden knife. +A laptop bag contains concealed knives. +A laptop handbag conceals hidden guns. +Inside a trolley bag with two guns, there is a sharp knife. +Inside a trolley bag with two guns, two sharp knives are placed. +A carry-on luggage contains a knife. +A toolbox and a gun are hidden in a trolley bag. +A toolbox and a gun are concealed inside a backpack. +A backpack conceals a toolbox and guns. +A small backpack contains a dangerous knife. +A tray contains a knife and several other prohibited items. +A backpack is filled with guns. +A trolley bag contains a firearm. +A trolley bag contains three guns and a laptop, heavily concealed. +A handbag is packed with guns. +Two guns are inside a handbag. +There is a gun on top of a handbag. +Two guns are concealed within a handbag. +Two guns are placed inside a backpack. +Two guns are hidden inside a backpack and a handbag. +Two guns are concealed within a piece of luggage. +A gun is inside a bag. +There is a gun in a bag. +A gun is concealed within a piece of luggage. +A gun is hidden inside a backpack. +There is a gun in a handbag. +A gun is concealed inside a backpack. +A trolley bag contains a gun along with a large metallic object. +At the bottom of a backpack, two guns and one knife are hidden. +Two guns and one knife are concealed at the bottom of a backpack. +Inside a piece of luggage, two knives are hidden. +Several knives are concealed within a piece of luggage. +At the bottom of a trolley bag, two guns and a few knives are hidden. +At the bottom of a trolley bag, two guns and two knives are concealed. +A sharp knife is discreetly hidden inside a trolley bag. +A trolley bag with two guns also contains two sharp knives. +Two sharp knives are placed inside a trolley bag with two guns. +A trolley bag holds a sharp knife alongside two guns. +Two sharp knives are positioned inside a trolley bag along with two guns. +There is a firearm concealed within a trolley bag. +A handbag contains both a gun and a laptop. +A firearm is present inside a bag on wheels. +An enclosed trolley bag houses a gun. +A gun is concealed within a trolley bag alongside a large metallic object. +A gun is hidden within a trolley bag along with a laptop. +A trolley bag contains a gun along with various other metal and electronic items. +A gun is concealed within a trolley bag along with other metal and electronic items, and it is highly obscured. \ No newline at end of file diff --git a/data/README.md b/data/README.md index c873b55..7faccfc 100755 --- a/data/README.md +++ b/data/README.md @@ -1,7 +1,18 @@ -# StackGAN-pytorch -**Data** +# Custom Data -1. Download our preprocessed char-CNN-RNN text embeddings for [training coco](https://drive.google.com/open?id=0B3y_msrWZaXLQXVzOENCY2E3TlU) and [evaluating coco](https://drive.google.com/open?id=0B3y_msrWZaXLeEs5MTg0RC1fa0U), save them to `data/coco`. - - [Optional] Follow the instructions [reedscot/icml2016](https://github.com/reedscot/icml2016) to download the pretrained char-CNN-RNN text encoders and extract text embeddings. -2. Download the [coco](http://cocodataset.org/#download) image data. Extract them to `data/coco/`. +## Prepare Directory + +1. Save images into `data/my_data/train/images` directory +2. `data/my_data/train` should contain at-least two folders `images` and `text` +3. The `text` directory contains a text file per image available in `images` directory + +## Download Fasttext Model + +4. `wget https://dl.fbaipublicfiles.com/fasttext/vectors-crawl/cc.en.300.bin.gz` and save it. +5. `gunzip cc.en.300.bin.gz` will produce `cc.en.300.bin` +> **Note:** We can train our own Language Model. Documentation w.i.p + + +## Create Dataset +6. `python data/generate_custom_dataset.py --data_dir data/my_data --emb_dim 300 --fasttext_model /Fasttext/cc.en.300.bin` diff --git a/data/caption_analysis.ipynb b/data/caption_analysis.ipynb new file mode 100644 index 0000000..9c612ba --- /dev/null +++ b/data/caption_analysis.ipynb @@ -0,0 +1,1074 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "id": "1a86da1d", + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/home/soumen/anaconda3/lib/python3.8/site-packages/pandas/core/computation/expressions.py:20: UserWarning: Pandas requires version '2.7.3' or newer of 'numexpr' (version '2.7.1' currently installed).\n", + " from pandas.core.computation.check import NUMEXPR_INSTALLED\n" + ] + } + ], + "source": [ + "import pandas as pd\n", + "import csv\n", + "from collections import defaultdict\n", + "import sqlite3\n", + "\n", + "class Caption:\n", + " def __init__(self, items):\n", + " self.idx = items[0]\n", + " self.file_id = items[1]\n", + " self.filename = self.file_id.replace(\".jpg\", \".txt\")\n", + " self.caption = items[2].strip().strip(\".\").strip()\n", + " self.author = items[3]\n", + " self.is_occluded = items[4]\n", + " self.is_error = items[5]\n", + "\n", + " def __str__(self):\n", + " return \"id:{},file_id:{},filename:{},caption:{},user:{},is_occleded:{},is_error:{}\".format(\n", + " self.idx, self.file_id, self.filename, \n", + " self.caption, self.author, self.is_occluded, self.is_error\n", + " )" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "f074fa8d", + "metadata": { + "scrolled": true + }, + "outputs": [], + "source": [ + "# dicta = defaultdict(lambda: defaultdict(lambda: defaultdict(lambda: 0)))\n", + "# with open(\"caption.csv\" , \"r\") as fp:\n", + "# csvfp = csv.reader(fp)\n", + "# for v in csvfp:\n", + "# cap = Caption(v)\n", + "# dicta[cap.file_id][cap.author][cap.caption] += 1\n", + "# for file_id, user_cap_count in dicta.items():\n", + "# for user, caption_count in user_cap_count.items():\n", + "# total = 0\n", + "# for caption, count in caption_count.items():\n", + "# total += count\n", + "# if count > 1:\n", + "# print(\"DUPLICATE:\", file_id, user, caption, count)\n", + "# if total > 2:\n", + "# print(\"MORE 2:\", file_id, user, caption)\n", + " " + ] + }, + { + "cell_type": "markdown", + "id": "401aa7aa", + "metadata": {}, + "source": [ + "# Read form SQLite" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "61b48363", + "metadata": {}, + "outputs": [], + "source": [ + "# !scp anshul@10.73.24.39:/home/anshul/app/tip_gai.db ./latest_tip_gai.db" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "id": "bd11b379", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
idfile_idcaptionuseris_erroris_occludedone
01P00001.jpgTwo knives, one placed on top of other, in a b...anshul011
12P00001.jpgA bag with knives.\\nTwo shrap knives in a back...soumen011
23P00001.jpgSecurity discovered a concealed knife in the p...soumen011
35P00004.jpgTwo knives are hidden inside a backpack.soumen001
46P00005.jpgTwo knives are hidden inside a backpack overla...soumen001
\n", + "
" + ], + "text/plain": [ + " id file_id caption user \\\n", + "0 1 P00001.jpg Two knives, one placed on top of other, in a b... anshul \n", + "1 2 P00001.jpg A bag with knives.\\nTwo shrap knives in a back... soumen \n", + "2 3 P00001.jpg Security discovered a concealed knife in the p... soumen \n", + "3 5 P00004.jpg Two knives are hidden inside a backpack. soumen \n", + "4 6 P00005.jpg Two knives are hidden inside a backpack overla... soumen \n", + "\n", + " is_error is_occluded one \n", + "0 0 1 1 \n", + "1 0 1 1 \n", + "2 0 1 1 \n", + "3 0 0 1 \n", + "4 0 0 1 " + ] + }, + "execution_count": 17, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "conn = sqlite3.connect(\"latest_tip_gai.db\")\n", + "curr = conn.cursor()\n", + "df = pd.read_sql_query(\"SELECT * FROM caption\", conn)\n", + "df['one'] = 1\n", + "df.head()\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "47307988", + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": 16, + "id": "49ff5b3f", + "metadata": {}, + "outputs": [], + "source": [ + "#!pip install language-tool-python\n", + "# import language_tool_python\n", + "def error_check_and_correct(text, correction=False):\n", + " # using the tool\n", + " my_tool = language_tool_python.LanguageTool('en-US')\n", + "\n", + " # getting the matches\n", + " my_matches = my_tool.check(text)\n", + "\n", + " # defining some variables\n", + " myMistakes = []\n", + " if correction:\n", + " myCorrections = []\n", + " startPositions = []\n", + " endPositions = []\n", + "\n", + " # using the for-loop\n", + " for rules in my_matches:\n", + " if len(rules.replacements) > 0:\n", + " startPositions.append(rules.offset)\n", + " endPositions.append(rules.errorLength + rules.offset)\n", + " myMistakes.append(my_text[rules.offset : rules.errorLength + rules.offset])\n", + " if correction:\n", + " myCorrections.append(rules.replacements[0])\n", + " \n", + " if correction:\n", + " # creating new object\n", + " my_NewText = list(my_text)\n", + "\n", + " # rewriting the correct passage\n", + " for n in range(len(startPositions)):\n", + " for i in range(len(my_text)):\n", + " my_NewText[startPositions[n]] = myCorrections[n]\n", + " if (i > startPositions[n] and i < endPositions[n]):\n", + " my_NewText[i] = \"\"\n", + "\n", + " my_NewText = \"\".join(my_NewText)\n", + "\n", + " # printing the text\n", + " return my_NewText, list(zip(myMistakes, myCorrections))\n", + " else:\n", + " return len(myMistakes) == 0\n", + "# error_check_and_correct(\"He go to shchool\", True)" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "id": "6ed6f93c", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "## Target Captions: 2500\n", + "## Captions: 2013\n", + "## Captions %: 80.52\n", + "\n", + "#### QUALITY STAT ####\n", + "## Error Sentence marked: 26\n", + "## Error Sentence marked %: 1.292\n", + "\n", + "## Duplicate:\n", + "file_id caption \n", + "P00004.jpg Two knives intersecting each other on left side of bag 2\n", + "P02864.jpg travel backpack found to have two guns and a knife hidden inside it 2\n", + "Name: one, dtype: int64\n", + "\n", + "## Malformated:\n", + " file_id caption\n", + "361 P02796.jpg 1745\n", + "\n", + "#### USER STAT ####\n", + "## Caption Count/user:\n", + "user-1 7\n", + "user-2 762\n", + "user-3 1124\n", + "user-4 15\n", + "user-5 74\n", + "Name: user, dtype: int64\n", + "\n", + "## Caption %/user:\n", + "user-1 0.28\n", + "user-2 30.48\n", + "user-3 44.96\n", + "user-4 0.60\n", + "user-5 2.96\n", + "Name: user, dtype: float64\n", + "\n" + ] + } + ], + "source": [ + "def statistics(conn, log_=False, linefeed=\"\\n\"):\n", + " def sprint(*args, end=\"\\n\"):\n", + " return args[0] + \" \".join(map(str, args[1:])) + end\n", + " \n", + " df = pd.read_sql_query(\"SELECT * FROM caption\", conn)\n", + " tgt = 2500\n", + " s = \"\"\n", + " s = sprint(s, \"## Target Captions:\", tgt, end=linefeed)\n", + " s = sprint(s, \"## Captions:\", df.shape[0], end=linefeed)\n", + " s = sprint(s, \"## Captions %:\", df.shape[0]/ tgt * 100, end=linefeed)\n", + " error_marked = df['is_error'].sum()\n", + " s = sprint(s, \"{}#### QUALITY STAT ####\".format(linefeed))\n", + " s = sprint(s, \"## Error Sentence marked:\", error_marked, end=linefeed)\n", + " s = sprint(s, \"## Error Sentence marked %:\", round(error_marked / df.shape[0] * 100, 3), end=linefeed)\n", + " df['one'] = 1\n", + " gp = df.groupby(by=['file_id', 'caption'])\n", + " tdf = gp.count()['one']\n", + " s = sprint(s, \"{}## Duplicate:\".format(linefeed), end=linefeed)\n", + " s = sprint(s, tdf[tdf > 1], end=linefeed)\n", + " s = sprint(s, \"{}## Malformated:\".format(linefeed), end=linefeed)\n", + " s = sprint(s, df[df['caption'].apply(lambda x: len(x.split(' ')) < 4)][['file_id', 'caption']], end=linefeed)\n", + " s = sprint(s, \"{}#### USER STAT ####\".format(linefeed))\n", + " s = sprint(s, \"## Caption Count/user:\", end=linefeed)\n", + " df['user'] = df['user'].map(dict(anshul=\"user-1\",\n", + " soumen=\"user-2\",\n", + " sriram=\"user-3\",\n", + " tejas=\"user-4\",\n", + " murugan=\"user-5\",\n", + " purus=\"user-6\",\n", + " ))\n", + " s = sprint(s, df['user'].value_counts(sort=False), end=linefeed)\n", + " s = sprint(s, \"{}## Caption %/user:\".format(linefeed), end=linefeed)\n", + " s = sprint(s, df['user'].value_counts(sort=False) / tgt * 100, end=linefeed)\n", + " s = s.replace(\"\\n\", linefeed).replace(\"\\r\", linefeed)\n", + " \n", + " if log_:\n", + " print(s)\n", + " return s\n", + "print(statistics(conn, linefeed=\"\\n\"))" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "id": "39bbd811", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
idfile_idcaptionuseris_erroris_occluded
01P00001.jpgTwo knives, one placed on top of other, in a b...anshul01
12P00001.jpgA bag with knives.\\nTwo shrap knives in a back...soumen01
23P00001.jpgSecurity discovered a concealed knife in the p...soumen01
35P00004.jpgTwo knives are hidden inside a backpack.soumen00
46P00005.jpgTwo knives are hidden inside a backpack overla...soumen00
\n", + "
" + ], + "text/plain": [ + " id file_id caption user \\\n", + "0 1 P00001.jpg Two knives, one placed on top of other, in a b... anshul \n", + "1 2 P00001.jpg A bag with knives.\\nTwo shrap knives in a back... soumen \n", + "2 3 P00001.jpg Security discovered a concealed knife in the p... soumen \n", + "3 5 P00004.jpg Two knives are hidden inside a backpack. soumen \n", + "4 6 P00005.jpg Two knives are hidden inside a backpack overla... soumen \n", + "\n", + " is_error is_occluded \n", + "0 0 1 \n", + "1 0 1 \n", + "2 0 1 \n", + "3 0 0 \n", + "4 0 0 " + ] + }, + "execution_count": 7, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df.head()" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "id": "121406ca", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "(500,)" + ] + }, + "execution_count": 8, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# User wise caption Count\n", + "df['file_id'].unique().shape" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "id": "4918ca90", + "metadata": {}, + "outputs": [], + "source": [ + "# !pip install nltk\n", + "import nltk\n", + "from nltk.corpus import wordnet\n", + "# nltk.download('punkt')\n", + "# nltk.download('wordnet')\n", + "def get_synonyms(word):\n", + " synonyms = []\n", + " for syn in wordnet.synsets(word):\n", + " for lemma in syn.lemmas():\n", + " synonyms.append(lemma.name())\n", + " return synonyms\n", + "\n", + "def paraphrase_text(text):\n", + " paraphrased_text = []\n", + " words = nltk.word_tokenize(text)\n", + " for word in words:\n", + " synonyms = get_synonyms(word)\n", + " if synonyms:\n", + " paraphrased_text.append(synonyms[0])\n", + " else:\n", + " paraphrased_text.append(word)\n", + " return ' '.join(paraphrased_text)\n", + "\n", + "# # Example usage\n", + "# original_text = \"A trolley bag contains a sharp knife.\"\n", + "# paraphrased_text = paraphrase_text(original_text)\n", + "\n", + "# print(\"Original text:\", original_text)\n", + "# print(\"Paraphrased text:\", paraphrased_text)\n" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "id": "a514220e", + "metadata": {}, + "outputs": [], + "source": [ + "# !pip install transformers\n", + "from transformers import AutoModelWithLMHead, AutoTokenizer\n", + "\n", + "def paraphrase_text(text):\n", + " model_name = \"t5-base\" # Pre-trained model name\n", + " model = AutoModelWithLMHead.from_pretrained(model_name)\n", + " tokenizer = AutoTokenizer.from_pretrained(model_name)\n", + " \n", + " # Tokenize the input text\n", + " input_ids = tokenizer.encode(text, return_tensors=\"pt\")\n", + "\n", + " # Generate paraphrased text\n", + " paraphrased_ids = model.generate(input_ids, max_length=50, num_return_sequences=1, early_stopping=True)\n", + " paraphrased_text = tokenizer.decode(paraphrased_ids[0], skip_special_tokens=True)\n", + "\n", + " return paraphrased_text\n", + "\n", + "# Example usage\n", + "# original_text = \"a gun, an Wi-Fi router and a sharp object with a water bottle inside a trolly bag.\"\n", + "# paraphrased_text = paraphrase_text(original_text)\n", + "\n", + "# print(\"Original text:\", original_text)\n", + "# print(\"Paraphrased text:\", paraphrased_text)\n" + ] + }, + { + "cell_type": "markdown", + "id": "45c751b5", + "metadata": {}, + "source": [ + "# OPEN-AI ChatGPT" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "id": "de9c8658", + "metadata": {}, + "outputs": [], + "source": [ + "# !pip install -q openai" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "id": "63de64c9", + "metadata": {}, + "outputs": [], + "source": [ + "import openai\n", + "\n", + "# load API key\n", + "# with open(\"openai.apikey\", \"r\") as fp:\n", + "openai.api_key_path = \"openai.apikey\"" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "id": "4b1d3a71", + "metadata": {}, + "outputs": [], + "source": [ + "def send_message(message):\n", + " payload = {\n", + " \"model\": \"text-davinci-003\",\n", + " \"messages\": [{\"role\": \"user\", \"content\": message}]\n", + " }\n", + " chat = openai.ChatCompletion.create(\n", + " model=\"gpt-3.5-turbo\", messages=[payload]\n", + " )\n", + " return chat" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "id": "0a2e3d66", + "metadata": { + "scrolled": true + }, + "outputs": [], + "source": [ + "# send_message(\"Hi!\")" + ] + }, + { + "cell_type": "markdown", + "id": "9636bff2", + "metadata": {}, + "source": [ + "\n", + "# Read captions for `user!=soumen`" + ] + }, + { + "cell_type": "code", + "execution_count": 25, + "id": "2d6edc05", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "(200,)" + ] + }, + "execution_count": 25, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# count files with [1,2,3,4] captions\n", + "file_count_series = df.groupby(by='file_id').count()['one']\n", + "\n", + "files_1234 = file_count_series[file_count_series <= 4]\n", + "files_1234.shape" + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "id": "977da70e", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "(199,)" + ] + }, + "execution_count": 23, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [] + }, + { + "cell_type": "code", + "execution_count": 33, + "id": "d1c7706d", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "((513, 7),\n", + " (200,),\n", + " array(['sriram', 'murugan', 'purush'], dtype=object),\n", + " array(['sriram', 'murugan', 'purush'], dtype=object))" + ] + }, + "execution_count": 33, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# not my files and less than 5 captions\n", + "soumen_files = df[df['user'] == \"soumen\"].file_id.unique()\n", + "dfnotmy = df[~df['file_id'].isin(soumen_files)]\n", + "df2 = dfnotmy[dfnotmy['file_id'].isin(files_1234.index)]\n", + "df2.shape, df2.file_id.unique().shape, df2.user.unique(), dfnotmy.user.unique()" + ] + }, + { + "cell_type": "code", + "execution_count": 58, + "id": "c2cc0879", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "(300, 7)" + ] + }, + "execution_count": 58, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# random 200 records\n", + "dfs = df2.sample(300, random_state=23)\n", + "dfs.shape" + ] + }, + { + "cell_type": "code", + "execution_count": 61, + "id": "e62c8093", + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "please paraphrease the lines:\n", + "1. Backpack with chopping knife at the bottom on the bag\n", + "2. A bag containing a laptop was discovered with two knives\n", + "3. two guns and a knife hidden inside a travel backpack at the bottom\n", + "4. A knife in a tray along with other Items\n", + "5. the trolley bag concealed a total of three knives and two guns, cleverly positioned at its lower section\n", + "6. The luggage holds various tools, and there are five guns hidden in scattered bottles\n", + "7. The trolley bag contained two guns cleverly hidden among a mess of wires, making them difficult to spot\n", + "8. A trolly bag hides two knives behind the clothes\n", + "9. At the bottom of the trolley bag, security personnel detected the presence of two knives and a gan\n", + "10. backpack found to have two guns and a knife hidden inside it\n", + "11. A gun was discovered in a travel bag, alongside a few bottles, during the inspection\n", + "12. A knife, along with a laptop and other electronic items, was found in the trolley bag during the inspection\n", + "13. t was observed that a trolley bag housed two guns, two knives, and a few bottles at the bottom\n", + "14. travel bag detected with two guns inside it along with a flask\n", + "15. A trolley bag hides two guns and a knife along with few items in the bottom\n", + "16. Loaded backpack hides two guns along with the bottles\n", + "17. travel backpack found to have two guns and a knife hidden inside it\n", + "18. A backpack found to have two guns and a knife hidden inside it\n", + "19. The trolley bag contained two strategically placed guns and two knives, presenting multiple threats\n", + "20. fully loaded backpack detected with one knife at the middle\n", + "21. fully loaded backpack detected with one knives\n", + "22. Three kind of knives present in the bottom right of the image occluded each other\n", + "23. At the bottom of the bag, two guns were discovered\n", + "24. A backpack hides a knife inside it along with few bottles\n", + "25. A Loaded travel backpack found to have two guns and a knife hidden inside it\n", + "26. trolley bag hides two guns and two knives in overlapping fashion behind clothes along with few bottles at the bottom\n", + "27. trolley bag found with three knives and two guns placed at the bottom\n", + "28. A knife at the bottom of the travel backpack\n", + "\n", + "please paraphrease the lines:\n", + "1. A knife was detected at the bottom of the backpack\n", + "2. There are two knives concealed in the bag with other stuffs \n", + "3. two guns and a knife inside a fully occupied travel bag\n", + "4. Chopping knife present in the bottom right position of the image along with 2 guns and water bottle knife present just below two guns and guns are close to each other\n", + "5. fully loaded backpack found to have two guns positioned protectively inside a case\n", + "6. A trolley bag containing tools found with two guns which were strategically positioned \n", + "7. A backpack consists of two pistols and a sharp knife with some other objects in the bag \n", + "8. Tray found to have five knives along with other metal items\n", + "9. A knife was hidden inside a Travel bag\n", + "10. handbag contains a gun found in the middle hidden behind a flask \n", + "11. A backpack detected with gun hidden behind a laptop\n", + "12. In the trolley bag, two knives were found—one positioned at the middle right and the other at the top left\n", + "13. A travel backpack was discovered to have a hidden knife, concealed among bottles and other items\n", + "14. travel backpack found to have two guns and a knife hidden inside it\n", + "15. Inside the trolley bag, a protective case revealed the presence of three guns\n", + "16. tray detected with a knife along with some glass bottle\n", + "17. Two guns, one kept in the backpack with some other objects and the other one is in the side part of the backpack \n", + "18. trolley bag detected with three guns completely hidden at the bottom\n", + "19. A travel bag consists of some tools detected with a gun inside it and another gun next to it\n", + "20. two guns were hidden, one concealed fully inside the trolley bag and the other found in an inside-out position next to a drill machine\n", + "21. The trolley bag held a menacing array of items, including two guns and two knives, positioned strategically to pose a potential threat\n", + "22. fully loaded backpack detected with two knives with their sharp edges facing opposite to each other\n", + "23. Chopping knife present in the top left of the image\n", + "24. A trolley bag was discovered containing three guns and two knives, deliberately arranged to make each threat distinctly visible\n", + "\n", + "please paraphrease the lines:\n", + "1. three guns hidden in a trolley bag inside a protective case\n", + "2. two knives and two guns was detected along with few bottles and clothes inside a trolley bag\n", + "3. trolley bag with two knives and two guns hidden behind clothes along with few bottles\n", + "4. it was uncovered that a trolley bag contained two guns, two knives, and a few bottles at the bottom\n", + "5. A trolley bag hides two guns and two knives inside it along with few bottles\n", + "6. A gun was found within a handbag\n", + "7. trolley bag found with three knives and two guns positioned strategically in overlapped fashion \n", + "8. travel backpack hides a knife inside it\n", + "9. A tray was discovered to contain five knives and various other metal items\n", + "10. luggage found to have a gun at the bottom along with some bottles\n", + "11. Two guns hidden inside a travel backpack along with some items\n", + "12. it was discovered that the fully loaded backpack held two knives, cleverly arranged with their sharp edges intentionally facing away from each other\n", + "13. Two handguns are in the backpack kept in the opposite sides of the drill machine \n", + "14. two knives and a gun was detected at the bottom of the trolley bag\n", + "15. trolley bag detected with a knife at bottom along with few bottles\n", + "16. trolley bag houses an array of threats namely two guns and two knives which were placed strategically\n", + "17. trolley bag found to have two guns and two knives at the bottom along with few bottles\n", + "18. A gun hidden behind a router inside the backpack includes an umbrella\n", + "19. the presence of two knives with their sharp edges intentionally facing away from each other was revealed inside a backpack\n", + "20. trolley bag found with two guns and two knives which were placed strategically\n", + "21. three guns detected inside trolley bag in a protective fashion\n", + "22. the trolley bag concealed a total of three knives and two guns, cleverly positioned at its lower section in overlapping fashion\n", + "23. A backpack with a knife and pistol in bottom of it and another pistol in the middle part of it\n", + "24. fully loaded backpack found to have two guns positioned protectively \n", + "25. The security inspection revealed a trolley bag housing a combination of two guns and two knives, strategically placed for potential harm\n", + "\n", + "please paraphrease the lines:\n", + "1. trolley bag found to have two guns and two knives at the bottom alog with few bottles\n", + "2. There is a pistol in the middle part of the trolley concealed behind the falsk\n", + "3. Three guns detected inside trolley bag in a protective fashion\n", + "4. A fully occupied travel bag found to have a gun inside it and another positioned inside out\n", + "5. A trolley bag hides a gun along with some tools and flask\n", + "6. A backpack was discovered with a visible knife, clearly visible from the side view\n", + "7. Two guns and a knife inside a backpack\n", + "8. Security personnel detected a loaded trolley bag that contained a gun, a flask, and several other objects\n", + "9. Two pistols and a butcher knife is concealed in the bottom part of the backpack\n", + "10. two guns and a knife were detected inside a backpack\n", + "11. The backpack has a gun next to the tools and other one is in the side part of the bag\n", + "12. A passenger's bag had a gun located in the top-left corner\n", + "13. A backpack hides two guns and a knife at the bottom\n", + "14. trolley bag found with three guns in a protective fashion\n", + "15. Two knives were found positioned at the bottom of the trolley bag during inspection\n", + "16. security personnel discovered two guns concealed within a trolley bag\n", + "17. travel bag contains a gun found in the middle was hidden behind a flask \n", + "18. a travel backpack concealed two guns and a hidden knife within its contents\n", + "19. A backpack hides two guns and a knife\n", + "20. A gun inside trolley bag along with a flask\n", + "21. A gun hidden in a trolley bag along with few bottles inside it\n", + "22. In the center of the handbag, concealed behind a flask, is a gun\n", + "23. backpack detected with a knife at the bottom provides a clear side view\n", + "24. A trolley bag was discovered containing various tools, along with two strategically positioned guns\n", + "25. fully loaded backpack found to have two guns positioned differently \n", + "26. travel bag detected with a gun along with few bottles\n", + "27. A knife was discovered within a fully loaded backpack during the inspection process\n", + "28. A backpack hides a knife inside it\n", + "29. Two guns inside the loaded backpack along with few bottles\n", + "30. A pistol is hidden in the middle part of the trolley\n", + "\n", + "please paraphrease the lines:\n", + "1. Fully loaded trolley bag hides a gun behind the clothes along with bottles\n", + "2. trolley bag housing two guns and a knife\n", + "3. two guns were found inside the trolley bag next to a drill machine\n", + "4. backpack hides two guns and a knife within its contents\n", + "5. The trolley bag held two guns and two knives, strategically positioned as potential threats\n", + "6. travel bag detected with two guns inside it\n", + "7. travel backpack detected with two guns placed at the bottom along with some objects\n", + "8. The trolley bag contained two strategically positioned guns and two knives, posing multiple threats\n", + "9. trolly bag found to have a gun on the top next to some objects like flask\n", + "10. A trolley bag was discovered with a collection of tools inside, along with two guns that were purposefully positioned\n", + "11. two guns and a knife inside the bag\n", + "12. trolley bag found with three knives and two guns positioned strategically\n", + "13. A knife was detected at the bottom of the backpack\n", + "14. Three guns and two knives hidden inside trolley bag along with few bottles\n", + "15. A backpack hides a knife inside it at the bottom\n", + "16. backpack detected with a knife at the bottom\n", + "17. Luggage detected with a gun at the bottom\n", + "18. two guns were found inside the trolley bag next to a drill machine along with few bottles\n", + "19. A gun hidden in a backpack along with few botles inside it\n", + "20. A backpack as two pistols in which one of it is at the top and the other one in the bottom with the knife\n", + "21. travel bag contains a gun found in the middle hidden was behind a flask along with some metal component\n", + "22. two guns and a knife were found inside the backpack along with bottles\n", + "23. luggage houses a number of tools and bottles contains five guns which were scattered throughout\n", + "24. hand bag contains a gun found in the middle hidden behind a flask \n", + "25. travel bag hides machining tools along with two guns\n", + "26. A pistol is hidden behind the flask in the middle part of the handbag\n", + "27. Security personnel discovered a gun at the bottom of the luggage, alongside several bottles, during the inspection\n", + "28. travel backpack hides a knife in it\n", + "29. An assortment of weapons including two guns, two knives, and a collection of bottles, all concealed at the bottom of the trolley bag\n", + "\n", + "please paraphrease the lines:\n", + "1. two knives and a gun inside the case was detected along with few bottles and clothes,\n", + "2. A bag, housing a laptop, was found to conceal two knives upon inspection\n", + "3. a gun was detected inside a fully occupied trolley bag\n", + "4. three guns inside a protective case found in a trolley bag\n", + "5. handbag contains a box found to have two guns\n", + "6. There are three knives and two handguns concealed in the trolley in such a way that they aren't discovered easily \n", + "7. loaded trolley bag detected with a gun along with flask and other objects\n", + "8. A knife detected inside a backpack next to trolley bag loaded with laptop, bottles and other items\n", + "9. In the center of the handbag, concealed behind a flask, is a gun \n", + "10. A trolley bag was discovered, housing two guns and a knife in a overlapped fashion\n", + "11. A knife hidden in a travel backpack along with few items\n", + "12. The handbag has a hidden gun in the middle, concealed behind a flask\n", + "13. Bigger knife and small knife is present in the bottom left of the bag along with two guns Small knife is present on top of the bigger knife\n", + "14. Two knife present on the right side of the bag two guns are over the bigger knife Smaller knife is slightly in vertical position to bigger knife\n", + "15. tray-detected with a knife along with some items\n", + "16. trolley bag with two knives and two clothes hidden behind clothes\n", + "17. A trolley bag found to have two guns one is completely inside, and another found inside out\n", + "18. There is a hidden pistol in the handbag\n", + "19. two gun and a knife found inside the trolley bag\n", + "20. travel bag contains a gun found in the middle hidden behind a flask \n", + "21. A knife at the bottom hidden inside fully packed travel bag\n", + "22. A trolley bag was discovered containing a knife along with a laptop and other electronic items\n", + "23. A handbag has a pistol hidden in the middle part of it \n", + "24. a fully loaded backpack revealed the presence of two knives with their sharp edges intentionally facing away from each other\n", + "25. trolley bag detected with a knife at bottom\n", + "26. A knife hidden in a loaded backpack along with bottles\n", + "27. fuly loaded travel backpack found to have two guns and a knife hidden inside it\n", + "\n", + "please paraphrease the lines:\n", + "1. luggage found to have two guns and three knives at the bottom in a overlapping fashion\n", + "2. trolley bag hides a knife inside it with few bottles and clothes\n", + "3. A trolly bag hides two guns behind the clutter of wires\n", + "4. travel backpack detected with two guns placed at the bottom along with some other objects\n", + "5. A bag containing a laptop was detected with two guns inside a protective case\n", + "6. Security personnel detected a firearm within a travel bag, accompanied by several bottles\n", + "7. trolley bag contains a gun found in the middle hidden behind a flask \n", + "8. A knife inside the travel backpack\n", + "9. Travel backpack with a knife hidden inside it\n", + "10. Multipurpose chopping knife is present on the bottom left of the image\n", + "11. trolley bag found to have a knife along with laptop and other electronic items\n", + "12. There is a pistol concealed in the handbag\n", + "13. A knife was discovered near to a travel bag\n", + "14. Chopping knife and kitchen knife is present of the left side of the image\n", + "15. trolley bag houses number of threats namely two guns and two knives which were placed strategically\n", + "16. two guns hidden inside the loaded backpack along with few bottles\n", + "17. trolley bag contains two knives, one at middle right and the other at the top left\n", + "18. Security personnel discovered a fully loaded travel backpack, which contained two guns\n", + "19. fully loaded backpack detected with one knife\n", + "20. travel backpack detected with two guns along with few bottles\n", + "21. A trolley bag was discovered, housing two guns and a knife\n", + "22. Two guns in the backpack in which one is hidden in the middle part of the bag and other one is in the side pocket of the backpack \n", + "23. trolley bag detected with two knives placed at the bottom\n", + "24. A trolley bag hides two guns and two knives at the bottom along with few bottles\n", + "25. Backpack detected with a knife at the bottom provides a clear side view\n", + "26. backpack detected with a knife provides a clear side view\n", + "27. Two guns hidden inside the loaded backpack\n", + "28. trolly bag found to have a gun on the top and hidden next to a object\n", + "29. Travel backpack hides a knife within it\n", + "30. backpack detected with a knife at one side\n", + "\n", + "please paraphrease the lines:\n", + "1. Handbag found to have two guns placed inside a box\n", + "2. fully loaded travel backpack found to have two guns\n", + "3. two knives and a gun was detected at the bottom of the trolley bag along with few bottles\n" + ] + } + ], + "source": [ + "s = \"\"\n", + "ctr = 0\n", + "i = 1\n", + "print(\"please paraphrease the lines:\")\n", + "with open(\"original.txt\", \"w\") as fp:\n", + " for x in dfs.iloc[:500,:].caption.unique():\n", + " if ctr > 2000:\n", + " print(\"\\nplease paraphrease the lines:\")\n", + " ctr = 0\n", + " i = 1\n", + " ctr += len(x)\n", + " txt = x.strip(\".\").strip().replace(\".\", \" \").replace(\"..\", \".\")\n", + "# fp.write(f\"{i}. \")\n", + " fp.write(txt)\n", + " fp.write(\"\\n\")\n", + " print(f\"{i}. {txt}\")\n", + " i+=1" + ] + }, + { + "cell_type": "code", + "execution_count": 65, + "id": "688ccda2", + "metadata": {}, + "outputs": [], + "source": [ + "# preapre caption replacement dictionary\n", + "with open(\"mapped.txt\", \"r\") as fp:\n", + " lines = fp.readlines()\n", + "\n", + "with open(\"original.txt\", \"r\") as fp:\n", + " captions = fp.readlines()\n", + "\n", + "caption1_map = defaultdict(lambda: [])\n", + "remain = []\n", + "for i in range(len(captions)):\n", + " caption1_map[captions[i].strip().strip('.').strip().replace(\".\", \" \")].append(lines[i] if i < len(lines) else \"\")\n", + " if i >= len(lines):\n", + " remain.append(captions[i])\n", + "for x in remain:\n", + " print(x)" + ] + }, + { + "cell_type": "code", + "execution_count": 66, + "id": "5f66f117", + "metadata": {}, + "outputs": [], + "source": [ + "import random\n", + "not_found = []\n", + "def caption_paraphreaser(caption):\n", + " cleaned = caption.strip().strip('.').strip().replace(\".\", \" \")\n", + " alternative_captions = caption1_map[cleaned]\n", + " if len(alternative_captions) == 0:\n", + " print(\"NOT AVAILABLE: '{}', '{}'\".format(caption, cleaned))\n", + " not_found.append(caption)\n", + " return \"Two sharp knives are inside a backpack.\"\n", + " if len(alternative_captions) == 1:\n", + " return alternative_captions[0]\n", + " idx = random.randint(0, len(alternative_captions)-1)\n", + " return alternative_captions[idx]" + ] + }, + { + "cell_type": "code", + "execution_count": 67, + "id": "991b561a", + "metadata": {}, + "outputs": [], + "source": [ + "# replace captions\n", + "dfs['caption_2'] = dfs['caption'].apply(caption_paraphreaser)" + ] + }, + { + "cell_type": "code", + "execution_count": 69, + "id": "b6562d51", + "metadata": {}, + "outputs": [], + "source": [ + "dfs.to_csv(\"bulk_upload_soumen_3.csv\", index=False)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "7a012fa8", + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "atz", + "language": "python", + "name": "atz" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.8.15" + }, + "widgets": { + "application/vnd.jupyter.widget-state+json": { + "state": {}, + "version_major": 2, + "version_minor": 0 + } + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/data/copy_files.py b/data/copy_files.py new file mode 100644 index 0000000..01f860a --- /dev/null +++ b/data/copy_files.py @@ -0,0 +1,272 @@ +import csv +import os +import pathlib +import shutil + +from PIL.Image import Resampling +from openpyxl.styles import PatternFill +from voc_tools.constants import VOC_IMAGES +from voc_tools.reader import list_dir + +from openpyxl import Workbook +from openpyxl.drawing.image import Image +from PIL import Image as PILImage + + +def makedirs(path): + try: + os.makedirs(path) + except: + ... + + +def copy(): + dataset = pathlib.Path(r"C:\Users\dndlssardar\OneDrive - Smiths Group\Documents\Projects\Dataset\Sixray_easy") + destination = pathlib.Path(r"./sixray_500_GK") + + makedirs(str(destination / "train" / "images")) + makedirs(str(destination / "test" / "images")) + makedirs(str(destination / "train" / "texts")) + makedirs(str(destination / "test" / "texts")) + + train_filenames = list(list_dir(str(dataset / "train"), dir_flag=VOC_IMAGES, fullpath=False)) + test_filenames = list(list_dir(str(dataset / "test"), dir_flag=VOC_IMAGES, fullpath=False)) + + with open("data_images_all.csv", "r") as fp: + for line in fp: + filename = line.split(',')[0].strip() + if filename in train_filenames: + shutil.copyfile(dataset / "train" / "JPEGImages" / filename, + destination / "train" / "images" / filename) + print(".", end="") + if filename in test_filenames: + shutil.copyfile(dataset / "test" / "JPEGImages" / filename, + destination / "train" / "images" / filename) + + print(".", end="") + print("Copy done.") + + +def generate_excel_with_thumbnails(image_paths, save_path, file_names_to_highlight=()): + # Create a new workbook and get the active sheet + workbook = Workbook() + sheet = workbook.active + os.makedirs("./temp_files", exist_ok=True) + + # Set the column widths to accommodate the thumbnails and file names + sheet.column_dimensions['A'].width = 20 + sheet.column_dimensions['B'].width = 40 + + # Set the headers for the columns + sheet['A1'] = 'Thumbnail' + sheet['B1'] = 'File Name' + sheet['C1'] = 'Is in 500 collection?' + sheet['D1'] = 'Map File Name' + + # Iterate through the image paths and insert thumbnails and file names into the sheet + for i, image_path in enumerate(image_paths): + # Open the image using PIL + img = PILImage.open(image_path) + + # Calculate the aspect ratio to maintain the original proportions + aspect_ratio = img.width / img.height + + # Calculate the corresponding height to maintain the aspect ratio + thumbnail_height = 100 # int(thumbnail_width / aspect_ratio) + + # Set the desired width for the thumbnail (you can adjust this value) + thumbnail_width = int(thumbnail_height * aspect_ratio) + + # Resize the image to the desired thumbnail size + img = img.resize((thumbnail_width, thumbnail_height), Resampling.LANCZOS) + + # Convert the PIL image to an openpyxl image + temp_path = "./temp_files/temp_" + os.path.basename(image_path) + img.save(temp_path) + img = Image(temp_path) + + # Add the thumbnail image and file name to the sheet + filename = os.path.basename(image_path) + sheet.add_image(img, f'A{i + 2}') + sheet[f'B{i + 2}'] = filename # Extract the file name from the image path + if filename in file_names_to_highlight: + highlight_fill = PatternFill(start_color='FFFF00', end_color='FFFF00', fill_type='solid') + sheet[f'A{i + 2}'].fill = highlight_fill + sheet[f'B{i + 2}'].fill = highlight_fill + sheet[f'C{i + 2}'].fill = highlight_fill + sheet[f'C{i + 2}'] = 1 + else: + sheet[f'C{i + 2}'] = 0 + print(".", end="") + print("Saving into file...", end="") + # Save the workbook as an Excel file + workbook.save(save_path) + print("Cleaning...", end="") + shutil.rmtree("./temp_files", ignore_errors=True, onerror=lambda: print("Cleaning failed", end="")) + print("File Saved") + + +def generate_excel_form_csv_with_thumbnails(image_paths, save_path, csv_path): + # Create a new workbook and get the active sheet + workbook = Workbook() + sheet = workbook.active + os.makedirs("./temp_files", exist_ok=True) + + with open(csv_path, "r") as fp: + csv.reader(fp) + + # Set the column widths to accommodate the thumbnails and file names + sheet.column_dimensions['A'].width = 20 + sheet.column_dimensions['B'].width = 40 + + # Set the headers for the columns + sheet['A1'] = 'Thumbnail' + sheet['B1'] = 'File Name' + sheet['C1'] = 'Is in 500 collection?' + sheet['D1'] = 'Map File Name' + + # Iterate through the image paths and insert thumbnails and file names into the sheet + for i, image_path in enumerate(image_paths): + # Open the image using PIL + img = PILImage.open(image_path) + + # Calculate the aspect ratio to maintain the original proportions + aspect_ratio = img.width / img.height + + # Calculate the corresponding height to maintain the aspect ratio + thumbnail_height = 100 # int(thumbnail_width / aspect_ratio) + + # Set the desired width for the thumbnail (you can adjust this value) + thumbnail_width = int(thumbnail_height * aspect_ratio) + + # Resize the image to the desired thumbnail size + img = img.resize((thumbnail_width, thumbnail_height), Resampling.LANCZOS) + + # Convert the PIL image to an openpyxl image + temp_path = "./temp_files/temp_" + os.path.basename(image_path) + img.save(temp_path) + img = Image(temp_path) + + # Add the thumbnail image and file name to the sheet + filename = os.path.basename(image_path) + sheet.add_image(img, f'A{i + 2}') + sheet[f'B{i + 2}'] = filename # Extract the file name from the image path + if filename in file_names_to_highlight: + highlight_fill = PatternFill(start_color='FFFF00', end_color='FFFF00', fill_type='solid') + sheet[f'A{i + 2}'].fill = highlight_fill + sheet[f'B{i + 2}'].fill = highlight_fill + sheet[f'C{i + 2}'].fill = highlight_fill + sheet[f'C{i + 2}'] = 1 + else: + sheet[f'C{i + 2}'] = 0 + print(".", end="") + print("Saving into file...", end="") + # Save the workbook as an Excel file + workbook.save(save_path) + print("Cleaning...", end="") + shutil.rmtree("./temp_files", ignore_errors=True, onerror=lambda: print("Cleaning failed", end="")) + print("File Saved") + + +def generate_excel_with_thumbnails_pil(image_paths, save_path, mark_file_list, caption_dict, original_index_dict): + # Create a new workbook and get the active sheet + workbook = Workbook() + sheet = workbook.active + os.makedirs("./temp_files", exist_ok=True) + + # Set the column widths to accommodate the thumbnails and file names + sheet.column_dimensions['A'].width = 20 + sheet.column_dimensions['B'].width = 40 + + # Set the headers for the columns + sheet['A1'] = 'Thumbnail' + sheet['B1'] = 'File Name' + sheet['C1'] = 'Index' + sheet['D1'] = 'Captioned?' + sheet['E1'] = 'Caption-1' + sheet['F1'] = 'Is occluded-1?' + sheet['G1'] = 'Is error-1?' + sheet['H1'] = 'Original Index' + + # Iterate through the image paths and insert thumbnails and file names into the sheet + for i, image_path in enumerate(image_paths): + # Open the image using PIL + img = PILImage.open(image_path) + + # Calculate the aspect ratio to maintain the original proportions + aspect_ratio = img.width / img.height + + # Set the desired width for the thumbnail (you can adjust this value) + thumbnail_width = 100 + + # Calculate the corresponding height to maintain the aspect ratio + thumbnail_height = int(thumbnail_width / aspect_ratio) + + # Resize the image to the desired thumbnail size + img = img.resize((thumbnail_width, thumbnail_height), Resampling.LANCZOS) + + # Convert the PIL image to an openpyxl image + temp_path = "./temp_files/temp_" + os.path.basename(image_path) + img.save(temp_path) + img = Image(temp_path) + + # Add the thumbnail image and file name to the sheet + filename = os.path.basename(image_path) + sheet.add_image(img, f'A{i + 2}') + sheet[f'B{i + 2}'] = filename # Extract the file name from the image path + sheet[f'C{i + 2}'] = i + 1 # File + sheet[f'D{i + 2}'] = 1 if filename in mark_file_list else 0 + sheet[f'E{i + 2}'] = caption_dict.get(filename, "") + sheet[f'F{i + 2}'] = 0 + sheet[f'G{i + 2}'] = 0 + sheet[f'H{i + 2}'] = original_index_dict.get(filename, 0) + print(".", end="") + print("Saving into file...", end="") + # Save the workbook as an Excel file + workbook.save(save_path) + print("Cleaning...", end="") + shutil.rmtree("./temp_files", ignore_errors=True, onerror=lambda: print("Cleaning failed", end="")) + print("File Saved") + + +def main(): + dataset = pathlib.Path(r"C:\Users\dndlssardar\OneDrive - Smiths Group\Documents\Projects\Dataset\Sixray_easy") + destination = pathlib.Path(r"archive/dataset_500_to_2300_map2.xlsx") + + train_filenames = list(list_dir(str(dataset / "train"), dir_flag=VOC_IMAGES, fullpath=False)) + test_filenames = list(list_dir(str(dataset / "test"), dir_flag=VOC_IMAGES, fullpath=False)) + image_paths = [] + # with open("caption_soumen_clean.csv", "r") as fp: + # dicta = {f: c for f, c in map(lambda x: (x[:11].strip(","), x[11:].strip().strip(",").strip("\"")), fp)} + # + # with open("dataset_easy_lookup-backup.csv", "r") as fp: + # dicta2 = {f: c for f, c in map(lambda x: x.strip().split(',')[1:], fp)} + file_names_to_highlight = [] + with open("archive/data_images_2300.csv", "r") as fp: + for line in csv.reader(fp): + filename = line[0].strip() + image_path = None + if filename in train_filenames: + image_path = (dataset / "train" / "JPEGImages" / filename) + if filename in test_filenames: + image_path = (dataset / "test" / "JPEGImages" / filename) + + if image_path: + image_paths.append(image_path) + with open("archive/data_images_500.csv", "r") as fp: + for line in csv.reader(fp): + filename = line[0].strip() + file_names_to_highlight.append(os.path.basename(filename)) + # Example usage + save_path = str(destination) + # with open("caption_soumen.csv", "r") as fp: + # mark_file_list = [line[0].strip() for line in csv.reader(fp)] + + # generate_excel_with_thumbnails_pil(image_paths, save_path, mark_file_list, dicta, dicta2) + generate_excel_with_thumbnails(image_paths, save_path, file_names_to_highlight) + # generate_excel_form_csv_with_thumbnails(image_paths, save_path, "./dataset_500_to_2300_map_final.csv") + print("Excel generated") + + +if __name__ == '__main__': + main() diff --git a/data/dataset_500_to_2300_map_final.csv b/data/dataset_500_to_2300_map_final.csv new file mode 100644 index 0000000..889978e --- /dev/null +++ b/data/dataset_500_to_2300_map_final.csv @@ -0,0 +1,2382 @@ +Thumbnail,File Name,NA,Is in 500 collection?,Map File Name +,P00001.jpg,,1, +,P00002.jpg,,0,P00001.jpg +,P00004.jpg,,1, +,P00005.jpg,,1, +,P00006.jpg,,1, +,P00007.jpg,,1, +,P00008.jpg,,1, +,P00009.jpg,,0,P00008.jpg +,P00010.jpg,,1, +,P00011.jpg,,1, +,P00012.jpg,,0,P00011.jpg +,P00013.jpg,,1, +,P00014.jpg,,1, +,P00015.jpg,,0,P00011.jpg +,P00016.jpg,,1, +,P00017.jpg,,1, +,P00020.jpg,,1, +,P00021.jpg,,1, +,P00022.jpg,,0,P00021.jpg +,P00023.jpg,,1, +,P00024.jpg,,1, +,P00025.jpg,,1, +,P00026.jpg,,1, +,P00027.jpg,,1, +,P00028.jpg,,1, +,P00029.jpg,,1, +,P00032.jpg,,1, +,P00033.jpg,,1, +,P00034.jpg,,1, +,P00035.jpg,,1, +,P00036.jpg,,1, +,P00037.jpg,,1, +,P00038.jpg,,0,P00033.jpg +,P00039.jpg,,1, +,P00040.jpg,,1, +,P00041.jpg,,1, +,P00042.jpg,,1, +,P00043.jpg,,1, +,P00044.jpg,,0,P00033.jpg +,P00045.jpg,,0,P00042.jpg +,P00046.jpg,,0,P00033.jpg +,P00048.jpg,,0,P00033.jpg +,P00049.jpg,,0,P00042.jpg +,P00067.jpg,,1, +,P00051.jpg,,0,P00033.jpg +,P00052.jpg,,0,P00033.jpg +,P00053.jpg,,0,P00042.jpg +,P00054.jpg,,0,P00033.jpg +,P00055.jpg,,0,P00042.jpg +,P00070.jpg,,1, +,P00183.jpg,,1, +,P00184.jpg,,1, +,P00185.jpg,,1, +,P00187.jpg,,1, +,P00188.jpg,,1, +,P00065.jpg,,0,P00042.jpg +,P00066.jpg,,0,P00067.jpg +,P00193.jpg,,1, +,P00068.jpg,,0,P00042.jpg +,P00069.jpg,,0,P00042.jpg +,P00200.jpg,,1, +,P00071.jpg,,0,P00042.jpg +,P00072.jpg,,0,P00067.jpg +,P00073.jpg,,0,P00067.jpg +,P00074.jpg,,0,P00067.jpg +,P00075.jpg,,0,P00067.jpg +,P00076.jpg,,0,P00042.jpg +,P00077.jpg,,0,P00067.jpg +,P00078.jpg,,0,P00067.jpg +,P00079.jpg,,0,P00067.jpg +,P00080.jpg,,0,P00042.jpg +,P00082.jpg,,0,P03078.jpg +,P00083.jpg,,0,P00042.jpg +,P00084.jpg,,0,P00042.jpg +,P00085.jpg,,0,P00042.jpg +,P00201.jpg,,1, +,P00089.jpg,,0,P00042.jpg +,P00090.jpg,,0,P00042.jpg +,P00207.jpg,,1, +,P00210.jpg,,1, +,P00093.jpg,,0,P03078.jpg +,P00094.jpg,,0,P03078.jpg +,P00095.jpg,,0,P03078.jpg +,P00213.jpg,,1, +,P00097.jpg,,0,P03078.jpg +,P00215.jpg,,1, +,P00220.jpg,,1, +,P00100.jpg,,0,P02978.jpg +,P00101.jpg,,0,P02978.jpg +,P00222.jpg,,1, +,P00103.jpg,,0,P02978.jpg +,P00104.jpg,,0,P03078.jpg +,P00105.jpg,,0,P02978.jpg +,P00106.jpg,,0,P03078.jpg +,P00107.jpg,,0,P02978.jpg +,P00108.jpg,,0,P02978.jpg +,P00109.jpg,,0,P03078.jpg +,P00110.jpg,,0,P02978.jpg +,P00111.jpg,,0,P02978.jpg +,P00112.jpg,,0,P02978.jpg +,P00113.jpg,,0,P02978.jpg +,P00114.jpg,,0,P03078.jpg +,P00226.jpg,,1, +,P00229.jpg,,1, +,P00235.jpg,,1, +,P00238.jpg,,1, +,P00241.jpg,,1, +,P00120.jpg,,0,P03078.jpg +,P00244.jpg,,1, +,P00253.jpg,,1, +,P00123.jpg,,0,P03078.jpg +,P00255.jpg,,1, +,P00259.jpg,,1, +,P00263.jpg,,1, +,P00271.jpg,,1, +,P00272.jpg,,1, +,P00273.jpg,,1, +,P00282.jpg,,1, +,P00283.jpg,,1, +,P00133.jpg,,0,P03078.jpg +,P00285.jpg,,1, +,P00286.jpg,,1, +,P00289.jpg,,1, +,P00290.jpg,,1, +,P00291.jpg,,1, +,P00294.jpg,,1, +,P00299.jpg,,1, +,P00300.jpg,,1, +,P00143.jpg,,0,P03149.jpg +,P00301.jpg,,1, +,P00302.jpg,,1, +,P00147.jpg,,0,P03078.jpg +,P00149.jpg,,0,P03078.jpg +,P00150.jpg,,0,P03078.jpg +,P00152.jpg,,0,P03078.jpg +,P00311.jpg,,1, +,P00312.jpg,,1, +,P00155.jpg,,0,P03078.jpg +,P00316.jpg,,1, +,P00157.jpg,,0,P03078.jpg +,P00321.jpg,,1, +,P00159.jpg,,0,P03078.jpg +,P00323.jpg,,1, +,P00161.jpg,,0,P03078.jpg +,P00162.jpg,,0,P03078.jpg +,P00339.jpg,,1, +,P00340.jpg,,1, +,P00349.jpg,,1, +,P00352.jpg,,1, +,P00429.jpg,,1, +,P00431.jpg,,1, +,P00434.jpg,,1, +,P00435.jpg,,1, +,P00442.jpg,,1, +,P00175.jpg,,0,P00183.jpg +,P00176.jpg,,0,P00183.jpg +,P00177.jpg,,0,P00183.jpg +,P00178.jpg,,0,P00183.jpg +,P00179.jpg,,0,P00183.jpg +,P00180.jpg,,0,P00183.jpg +,P00181.jpg,,0,P00183.jpg +,P00182.jpg,,0,P00183.jpg +,P00443.jpg,,1, +,P00444.jpg,,1, +,P00450.jpg,,1, +,P00464.jpg,,1, +,P00476.jpg,,1, +,P00478.jpg,,1, +,P00189.jpg,,0,P00193.jpg +,P00190.jpg,,0,P00193.jpg +,P00191.jpg,,0,P00193.jpg +,P00192.jpg,,0,P00193.jpg +,P00528.jpg,,1, +,P00194.jpg,,0,P00193.jpg +,P00195.jpg,,0,P00193.jpg +,P00530.jpg,,1, +,P00532.jpg,,1, +,P00198.jpg,,0,P00193.jpg +,P00199.jpg,,0,P00193.jpg +,P00536.jpg,,1, +,P00538.jpg,,1, +,P00203.jpg,,0,P00210.jpg +,P00540.jpg,,1, +,P00205.jpg,,0,P00210.jpg +,P00206.jpg,,0,P00193.jpg +,P00738.jpg,,1, +,P00209.jpg,,0,P00210.jpg +,P00739.jpg,,1, +,P00211.jpg,,0,P00207.jpg +,P00212.jpg,,0,P00207.jpg +,P00740.jpg,,1, +,P00214.jpg,,0,P00210.jpg +,P00836.jpg,,1, +,P00216.jpg,,0,P00210.jpg +,P00217.jpg,,0,P00207.jpg +,P00218.jpg,,0,P00207.jpg +,P00219.jpg,,0,P00207.jpg +,P00842.jpg,,1, +,P00851.jpg,,1, +,P00866.jpg,,1, +,P00223.jpg,,0,P00210.jpg +,P00224.jpg,,0,P00193.jpg +,P00876.jpg,,1, +,P00878.jpg,,1, +,P00227.jpg,,0,P00210.jpg +,P00228.jpg,,0,P00193.jpg +,P00885.jpg,,1, +,P00230.jpg,,0,P00193.jpg +,P00231.jpg,,0,P00210.jpg +,P00233.jpg,,0,P00193.jpg +,P00234.jpg,,0,P00210.jpg +,P00990.jpg,,1, +,P00236.jpg,,0,P00193.jpg +,P00237.jpg,,0,P00193.jpg +,P00991.jpg,,1, +,P00239.jpg,,0,P00210.jpg +,P00240.jpg,,0,P00210.jpg +,P01037.jpg,,1, +,P00242.jpg,,0,P00210.jpg +,P00243.jpg,,0,P00210.jpg +,P01039.jpg,,1, +,P00245.jpg,,0,P00193.jpg +,P00246.jpg,,0,P00210.jpg +,P00247.jpg,,0,P00210.jpg +,P00248.jpg,,0,P00210.jpg +,P00249.jpg,,0,P00193.jpg +,P00250.jpg,,0,P00210.jpg +,P01040.jpg,,1, +,P00252.jpg,,0,P00210.jpg +,P01064.jpg,,1, +,P00254.jpg,,0,P00210.jpg +,P01066.jpg,,1, +,P00257.jpg,,0,P00210.jpg +,P00258.jpg,,0,P00193.jpg +,P01070.jpg,,1, +,P00260.jpg,,0,P00210.jpg +,P00261.jpg,,0,P00210.jpg +,P00262.jpg,,0,P00193.jpg +,P01129.jpg,,1, +,P00264.jpg,,0,P00210.jpg +,P00265.jpg,,0,P00193.jpg +,P00266.jpg,,0,P00210.jpg +,P00267.jpg,,0,P00282.jpg +,P01202.jpg,,1, +,P00269.jpg,,0,P00210.jpg +,P00270.jpg,,0,P00282.jpg +,P01204.jpg,,1, +,P01211.jpg,,1, +,P01212.jpg,,1, +,P01213.jpg,,1, +,P01215.jpg,,1, +,P00277.jpg,,0,P00282.jpg +,P01217.jpg,,1, +,P01220.jpg,,1, +,P00280.jpg,,0,P00282.jpg +,P01225.jpg,,1, +,P01228.jpg,,1, +,P01230.jpg,,1, +,P00284.jpg,,0,P00282.jpg +,P01232.jpg,,1, +,P01241.jpg,,1, +,P00287.jpg,,0,P00282.jpg +,P01242.jpg,,1, +,P01243.jpg,,1, +,P01249.jpg,,1, +,P01251.jpg,,1, +,P01254.jpg,,1, +,P01260.jpg,,1, +,P01262.jpg,,1, +,P01264.jpg,,1, +,P00296.jpg,,0,P00282.jpg +,P00297.jpg,,0,P00282.jpg +,P01266.jpg,,1, +,P01280.jpg,,1, +,P01310.jpg,,1, +,P01312.jpg,,1, +,P01314.jpg,,1, +,P01316.jpg,,1, +,P00304.jpg,,0,P00282.jpg +,P01320.jpg,,1, +,P01325.jpg,,1, +,P00307.jpg,,0,P00282.jpg +,P01331.jpg,,1, +,P01334.jpg,,1, +,P00310.jpg,,0,P00282.jpg +,P01337.jpg,,1, +,P01344.jpg,,1, +,P00313.jpg,,0,P00282.jpg +,P01346.jpg,,1, +,P01349.jpg,,1, +,P01352.jpg,,1, +,P01354.jpg,,1, +,P01356.jpg,,1, +,P01358.jpg,,1, +,P00320.jpg,,0,P00282.jpg +,P01360.jpg,,1, +,P01364.jpg,,1, +,P01387.jpg,,1, +,P01391.jpg,,1, +,P01400.jpg,,1, +,P00326.jpg,,0,P00282.jpg +,P01406.jpg,,1, +,P01409.jpg,,1, +,P00329.jpg,,0,P00282.jpg +,P00330.jpg,,0,P00282.jpg +,P01411.jpg,,1, +,P00332.jpg,,0,P00282.jpg +,P00334.jpg,,0,P00282.jpg +,P00335.jpg,,0,P00282.jpg +,P01414.jpg,,1, +,P00337.jpg,,0,P00282.jpg +,P01419.jpg,,1, +,P01422.jpg,,1, +,P01425.jpg,,1, +,P00341.jpg,,0,P00193.jpg +,P01430.jpg,,1, +,P00343.jpg,,0,P00193.jpg +,P01432.jpg,,1, +,P00345.jpg,,0,P00193.jpg +,P01444.jpg,,1, +,P01446.jpg,,1, +,P01448.jpg,,1, +,P01452.jpg,,1, +,P01454.jpg,,1, +,P01457.jpg,,1, +,P00353.jpg,,0,P00193.jpg +,P00354.jpg,,0,P00193.jpg +,P00355.jpg,,0,P00193.jpg +,P00356.jpg,,0,P00193.jpg +,P00357.jpg,,0,P00193.jpg +,P00358.jpg,,0,P00193.jpg +,P00359.jpg,,0,P00193.jpg +,P00360.jpg,,0,P00193.jpg +,P00361.jpg,,0,P00193.jpg +,P00362.jpg,,0,P00193.jpg +,P00363.jpg,,0,P00193.jpg +,P00364.jpg,,0,P00193.jpg +,P00365.jpg,,0,P00193.jpg +,P00366.jpg,,0,P00193.jpg +,P00367.jpg,,0,P00193.jpg +,P00368.jpg,,0,P00193.jpg +,P00369.jpg,,0,P00193.jpg +,P00370.jpg,,0,P00193.jpg +,P00371.jpg,,0,P00193.jpg +,P00372.jpg,,0,P00193.jpg +,P01461.jpg,,1, +,P00374.jpg,,0,P00193.jpg +,P00375.jpg,,0,P00193.jpg +,P00376.jpg,,0,P00193.jpg +,P00377.jpg,,0,P00193.jpg +,P00378.jpg,,0,P00193.jpg +,P00379.jpg,,0,P00193.jpg +,P00380.jpg,,0,P00193.jpg +,P00381.jpg,,0,P00193.jpg +,P00382.jpg,,0,P00193.jpg +,P01469.jpg,,1, +,P00385.jpg,,0,P00193.jpg +,P00386.jpg,,0,P00193.jpg +,P01474.jpg,,1, +,P00388.jpg,,0,P00193.jpg +,P01476.jpg,,1, +,P00390.jpg,,0,P00193.jpg +,P00391.jpg,,0,P00193.jpg +,P00392.jpg,,0,P00193.jpg +,P00393.jpg,,0,P00193.jpg +,P00394.jpg,,0,P00193.jpg +,P00395.jpg,,0,P00193.jpg +,P01479.jpg,,1, +,P00397.jpg,,0,P00193.jpg +,P00398.jpg,,0,P00193.jpg +,P00399.jpg,,0,P00193.jpg +,P00400.jpg,,0,P00193.jpg +,P00401.jpg,,0,P00193.jpg +,P00402.jpg,,0,P00193.jpg +,P01485.jpg,,1, +,P00404.jpg,,0,P00193.jpg +,P01489.jpg,,1, +,P01496.jpg,,1, +,P01500.jpg,,1, +,P01504.jpg,,1, +,P00409.jpg,,0,P00193.jpg +,P01508.jpg,,1, +,P01513.jpg,,1, +,P01598.jpg,,1, +,P01600.jpg,,1, +,P00415.jpg,,0,P00193.jpg +,P01609.jpg,,1, +,P00417.jpg,,0,P00193.jpg +,P01611.jpg,,1, +,P01615.jpg,,1, +,P01617.jpg,,1, +,P01619.jpg,,1, +,P01625.jpg,,1, +,P01628.jpg,,1, +,P00424.jpg,,0,P00193.jpg +,P01632.jpg,,1, +,P01637.jpg,,1, +,P01642.jpg,,1, +,P00428.jpg,,0,P00193.jpg +,P01644.jpg,,1, +,P00430.jpg,,0,P00193.jpg +,P01645.jpg,,1, +,P00432.jpg,,0,P00431.jpg +,P01652.jpg,,1, +,P01663.jpg,,1, +,P00436.jpg,,0,P00435.jpg +,P00437.jpg,,0,P00435.jpg +,P00438.jpg,,0,P00435.jpg +,P00439.jpg,,0,P00435.jpg +,P00440.jpg,,0,P00435.jpg +,P00441.jpg,,0,P00435.jpg +,P01683.jpg,,1, +,P01685.jpg,,1, +,P01687.jpg,,1, +,P00445.jpg,,0,P00444.jpg +,P00446.jpg,,0,P00444.jpg +,P01741.jpg,,1, +,P00448.jpg,,0,P00450.jpg +,P00449.jpg,,0,P00444.jpg +,P01752.jpg,,1, +,P01760.jpg,,1, +,P01766.jpg,,1, +,P01771.jpg,,1, +,P00463.jpg,,0,P00464.jpg +,P01777.jpg,,1, +,P00465.jpg,,0,P00464.jpg +,P00466.jpg,,0,P00464.jpg +,P00467.jpg,,0,P00464.jpg +,P00468.jpg,,0,P00476.jpg +,P00469.jpg,,0,P00464.jpg +,P00470.jpg,,0,P00476.jpg +,P00471.jpg,,0,P00464.jpg +,P00472.jpg,,0,P00476.jpg +,P00473.jpg,,0,P00464.jpg +,P00474.jpg,,0,P00464.jpg +,P00475.jpg,,0,P00464.jpg +,P01780.jpg,,1, +,P00477.jpg,,0,P00464.jpg +,P01784.jpg,,1, +,P00479.jpg,,0,P00478.jpg +,P00480.jpg,,0,P00478.jpg +,P00481.jpg,,0,P00478.jpg +,P00482.jpg,,0,P00478.jpg +,P01882.jpg,,1, +,P01887.jpg,,1, +,P01948.jpg,,1, +,P00534.jpg,,0,P00530.jpg +,P01951.jpg,,1, +,P01953.jpg,,1, +,P01954.jpg,,1, +,P01955.jpg,,1, +,P01956.jpg,,1, +,P01958.jpg,,1, +,P00741.jpg,,0,P00740.jpg +,P00743.jpg,,0,P00740.jpg +,P00744.jpg,,0,P00740.jpg +,P00745.jpg,,0,P00740.jpg +,P00748.jpg,,0,P00740.jpg +,P00749.jpg,,0,P00740.jpg +,P00751.jpg,,0,P00740.jpg +,P00753.jpg,,0,P00740.jpg +,P00755.jpg,,0,P00740.jpg +,P00757.jpg,,0,P00740.jpg +,P00759.jpg,,0,P00740.jpg +,P00761.jpg,,0,P00740.jpg +,P01960.jpg,,1, +,P00839.jpg,,0,P00836.jpg +,P01962.jpg,,1, +,P00845.jpg,,0,P00836.jpg +,P00848.jpg,,0,P00836.jpg +,P01964.jpg,,1, +,P00854.jpg,,0,P00851.jpg +,P00857.jpg,,0,P00851.jpg +,P00860.jpg,,0,P00851.jpg +,P00863.jpg,,0,P00851.jpg +,P01970.jpg,,1, +,P00869.jpg,,0,P00866.jpg +,P00872.jpg,,0,P00866.jpg +,P01972.jpg,,1, +,P00877.jpg,,0,P00876.jpg +,P01974.jpg,,1, +,P02021.jpg,,1, +,P00886.jpg,,0,P00885.jpg +,P00887.jpg,,0,P00885.jpg +,P02025.jpg,,1, +,P02033.jpg,,1, +,P00992.jpg,,0,P00991.jpg +,P01036.jpg,,0,P01037.jpg +,P02048.jpg,,1, +,P01038.jpg,,0,P01039.jpg +,P02049.jpg,,1, +,P02051.jpg,,1, +,P01041.jpg,,0,P01039.jpg +,P01042.jpg,,0,P01039.jpg +,P01043.jpg,,0,P01039.jpg +,P01044.jpg,,0,P01039.jpg +,P01045.jpg,,0,P01039.jpg +,P02053.jpg,,1, +,P01065.jpg,,0,P01064.jpg +,P02055.jpg,,1, +,P01067.jpg,,0,P01066.jpg +,P01069.jpg,,0,P01070.jpg +,P02057.jpg,,1, +,P02097.jpg,,1, +,P01130.jpg,,0,P01129.jpg +,P02099.jpg,,1, +,P01203.jpg,,0,P01204.jpg +,P02101.jpg,,1, +,P01205.jpg,,0,P01204.jpg +,P01206.jpg,,0,P01204.jpg +,P01207.jpg,,0,P01204.jpg +,P01208.jpg,,0,P01204.jpg +,P01209.jpg,,0,P01204.jpg +,P01210.jpg,,0,P01204.jpg +,P02103.jpg,,1, +,P02105.jpg,,1, +,P02107.jpg,,1, +,P01214.jpg,,0,P01213.jpg +,P02109.jpg,,1, +,P01216.jpg,,0,P01215.jpg +,P02111.jpg,,1, +,P01218.jpg,,0,P01215.jpg +,P01219.jpg,,0,P01215.jpg +,P02113.jpg,,1, +,P01221.jpg,,0,P01215.jpg +,P01222.jpg,,0,P01215.jpg +,P01223.jpg,,0,P01215.jpg +,P01224.jpg,,0,P01215.jpg +,P02114.jpg,,1, +,P01226.jpg,,0,P01225.jpg +,P02173.jpg,,1, +,P01229.jpg,,0,P01230.jpg +,P02176.jpg,,1, +,P01231.jpg,,0,P01230.jpg +,P02180.jpg,,1, +,P01233.jpg,,0,P01232.jpg +,P02183.jpg,,1, +,P02185.jpg,,1, +,P01240.jpg,,0,P01241.jpg +,P02188.jpg,,1, +,P02191.jpg,,1, +,P02195.jpg,,1, +,P01244.jpg,,0,P01243.jpg +,P01245.jpg,,0,P01243.jpg +,P01246.jpg,,0,P01243.jpg +,P01247.jpg,,0,P01243.jpg +,P01248.jpg,,0,P01243.jpg +,P02202.jpg,,1, +,P01250.jpg,,0,P01249.jpg +,P02204.jpg,,1, +,P01252.jpg,,0,P01249.jpg +,P01253.jpg,,0,P01249.jpg +,P02206.jpg,,1, +,P01255.jpg,,0,P01249.jpg +,P01256.jpg,,0,P01249.jpg +,P02211.jpg,,1, +,P01261.jpg,,0,P01260.jpg +,P02215.jpg,,1, +,P01263.jpg,,0,P01260.jpg +,P02219.jpg,,1, +,P01265.jpg,,0,P01260.jpg +,P02223.jpg,,1, +,P01279.jpg,,0,P01280.jpg +,P02225.jpg,,1, +,P01281.jpg,,0,P01280.jpg +,P01282.jpg,,0,P01280.jpg +,P01309.jpg,,0,P01310.jpg +,P02277.jpg,,1, +,P01311.jpg,,0,P01310.jpg +,P02278.jpg,,1, +,P01313.jpg,,0,P01310.jpg +,P02282.jpg,,1, +,P01315.jpg,,0,P01310.jpg +,P02286.jpg,,1, +,P01317.jpg,,0,P01310.jpg +,P01318.jpg,,0,P01310.jpg +,P01319.jpg,,0,P01310.jpg +,P02289.jpg,,1, +,P01321.jpg,,0,P01320.jpg +,P01322.jpg,,0,P01320.jpg +,P01323.jpg,,0,P01320.jpg +,P01324.jpg,,0,P01320.jpg +,P02301.jpg,,1, +,P01326.jpg,,0,P01331.jpg +,P01327.jpg,,0,P01331.jpg +,P01328.jpg,,0,P01331.jpg +,P01329.jpg,,0,P01331.jpg +,P01330.jpg,,0,P01331.jpg +,P02302.jpg,,1, +,P01332.jpg,,0,P01331.jpg +,P01333.jpg,,0,P01331.jpg +,P02337.jpg,,1, +,P01335.jpg,,0,P01334.jpg +,P01336.jpg,,0,P01334.jpg +,P02346.jpg,,1, +,P01338.jpg,,0,P01334.jpg +,P01339.jpg,,0,P01334.jpg +,P01340.jpg,,0,P01334.jpg +,P01341.jpg,,0,P01334.jpg +,P01342.jpg,,0,P01334.jpg +,P01343.jpg,,0,P01334.jpg +,P02348.jpg,,1, +,P01345.jpg,,0,P01346.jpg +,P02351.jpg,,1, +,P01347.jpg,,0,P01346.jpg +,P01348.jpg,,0,P01346.jpg +,P02354.jpg,,1, +,P01350.jpg,,0,P01346.jpg +,P01351.jpg,,0,P01346.jpg +,P02355.jpg,,1, +,P01353.jpg,,0,P01354.jpg +,P02357.jpg,,1, +,P01355.jpg,,0,P01354.jpg +,P02366.jpg,,1, +,P01357.jpg,,0,P01354.jpg +,P02371.jpg,,1, +,P01359.jpg,,0,P01354.jpg +,P02374.jpg,,1, +,P01363.jpg,,0,P01364.jpg +,P02376.jpg,,1, +,P01365.jpg,,0,P01364.jpg +,P01366.jpg,,0,P01364.jpg +,P01367.jpg,,0,P01364.jpg +,P01368.jpg,,0,P01364.jpg +,P01369.jpg,,0,P01364.jpg +,P01370.jpg,,0,P01364.jpg +,P02382.jpg,,1, +,P01386.jpg,,0,P01387.jpg +,P02385.jpg,,1, +,P01390.jpg,,0,P01391.jpg +,P02389.jpg,,1, +,P01392.jpg,,0,P01391.jpg +,P01393.jpg,,0,P01391.jpg +,P01394.jpg,,0,P01391.jpg +,P01395.jpg,,0,P01391.jpg +,P01396.jpg,,0,P01391.jpg +,P01397.jpg,,0,P01391.jpg +,P01398.jpg,,0,P01391.jpg +,P01399.jpg,,0,P01400.jpg +,P02392.jpg,,1, +,P01401.jpg,,0,P01400.jpg +,P01402.jpg,,0,P01400.jpg +,P01403.jpg,,0,P01400.jpg +,P01404.jpg,,0,P01400.jpg +,P01405.jpg,,0,P01400.jpg +,P02393.jpg,,1, +,P01407.jpg,,0,P01400.jpg +,P01408.jpg,,0,P01400.jpg +,P02407.jpg,,1, +,P01410.jpg,,0,P01400.jpg +,P02414.jpg,,1, +,P01412.jpg,,0,P01400.jpg +,P01413.jpg,,0,P01400.jpg +,P02418.jpg,,1, +,P01415.jpg,,0,P01419.jpg +,P01416.jpg,,0,P01419.jpg +,P01417.jpg,,0,P01419.jpg +,P01418.jpg,,0,P01419.jpg +,P02421.jpg,,1, +,P01420.jpg,,0,P01419.jpg +,P01421.jpg,,0,P01419.jpg +,P02435.jpg,,1, +,P01423.jpg,,0,P01422.jpg +,P01424.jpg,,0,P01422.jpg +,P02437.jpg,,1, +,P01426.jpg,,0,P01425.jpg +,P01427.jpg,,0,P01425.jpg +,P01428.jpg,,0,P01425.jpg +,P01429.jpg,,0,P01430.jpg +,P02443.jpg,,1, +,P01431.jpg,,0,P01430.jpg +,P02445.jpg,,1, +,P01433.jpg,,0,P01432.jpg +,P01434.jpg,,0,P01432.jpg +,P01435.jpg,,0,P01432.jpg +,P01436.jpg,,0,P01432.jpg +,P01437.jpg,,0,P01432.jpg +,P01438.jpg,,0,P01432.jpg +,P01439.jpg,,0,P01432.jpg +,P01440.jpg,,0,P01432.jpg +,P01441.jpg,,0,P01432.jpg +,P01442.jpg,,0,P01432.jpg +,P01443.jpg,,0,P01432.jpg +,P02449.jpg,,1, +,P01445.jpg,,0,P01446.jpg +,P02450.jpg,,1, +,P01447.jpg,,0,P01446.jpg +,P02454.jpg,,1, +,P01449.jpg,,0,P01446.jpg +,P01450.jpg,,0,P01446.jpg +,P01451.jpg,,0,P01446.jpg +,P02458.jpg,,1, +,P01453.jpg,,0,P01446.jpg +,P02461.jpg,,1, +,P01455.jpg,,0,P01446.jpg +,P01456.jpg,,0,P01446.jpg +,P02464.jpg,,1, +,P01458.jpg,,0,P01446.jpg +,P01459.jpg,,0,P01446.jpg +,P01460.jpg,,0,P01446.jpg +,P02466.jpg,,1, +,P01462.jpg,,0,P01461.jpg +,P01463.jpg,,0,P01461.jpg +,P01464.jpg,,0,P01461.jpg +,P01465.jpg,,0,P01461.jpg +,P01466.jpg,,0,P01461.jpg +,P01467.jpg,,0,P01461.jpg +,P01468.jpg,,0,P01461.jpg +,P02468.jpg,,1, +,P01470.jpg,,0,P01469.jpg +,P01471.jpg,,0,P01469.jpg +,P01472.jpg,,0,P01469.jpg +,P01473.jpg,,0,P01469.jpg +,P02470.jpg,,1, +,P01475.jpg,,0,P01476.jpg +,P02472.jpg,,1, +,P01477.jpg,,0,P01476.jpg +,P01478.jpg,,0,P01476.jpg +,P02476.jpg,,1, +,P01480.jpg,,0,P01479.jpg +,P01481.jpg,,0,P01479.jpg +,P01482.jpg,,0,P01479.jpg +,P01483.jpg,,0,P01479.jpg +,P01484.jpg,,0,P01479.jpg +,P02481.jpg,,1, +,P01486.jpg,,0,P01479.jpg +,P01487.jpg,,0,P01479.jpg +,P01488.jpg,,0,P01479.jpg +,P02484.jpg,,1, +,P01490.jpg,,0,P01489.jpg +,P01491.jpg,,0,P01489.jpg +,P01492.jpg,,0,P01489.jpg +,P01493.jpg,,0,P01489.jpg +,P01494.jpg,,0,P01489.jpg +,P01495.jpg,,0,P01489.jpg +,P02487.jpg,,1, +,P01497.jpg,,0,P01489.jpg +,P01498.jpg,,0,P01489.jpg +,P01499.jpg,,0,P01489.jpg +,P02489.jpg,,1, +,P01501.jpg,,0,P01489.jpg +,P01502.jpg,,0,P01489.jpg +,P01503.jpg,,0,P01489.jpg +,P02552.jpg,,1, +,P01505.jpg,,0,P01504.jpg +,P01506.jpg,,0,P01504.jpg +,P01507.jpg,,0,P01504.jpg +,P02658.jpg,,1, +,P01509.jpg,,0,P01508.jpg +,P01510.jpg,,0,P01508.jpg +,P01511.jpg,,0,P01508.jpg +,P01512.jpg,,0,P01508.jpg +,P02660.jpg,,1, +,P01514.jpg,,0,P01513.jpg +,P01515.jpg,,0,P01513.jpg +,P01516.jpg,,0,P01513.jpg +,P01517.jpg,,0,P01513.jpg +,P01518.jpg,,0,P01513.jpg +,P01519.jpg,,0,P01513.jpg +,P01520.jpg,,0,P01513.jpg +,P01521.jpg,,0,P01513.jpg +,P01522.jpg,,0,P01513.jpg +,P01523.jpg,,0,P01513.jpg +,P02663.jpg,,1, +,P01596.jpg,,0,P01598.jpg +,P01597.jpg,,0,P01598.jpg +,P02665.jpg,,1, +,P01599.jpg,,0,P01598.jpg +,P02668.jpg,,1, +,P01601.jpg,,0,P01600.jpg +,P01602.jpg,,0,P01600.jpg +,P01603.jpg,,0,P01600.jpg +,P01604.jpg,,0,P01600.jpg +,P01605.jpg,,0,P01600.jpg +,P01606.jpg,,0,P01600.jpg +,P01607.jpg,,0,P01600.jpg +,P01608.jpg,,0,P01600.jpg +,P02674.jpg,,1, +,P01610.jpg,,0,P01600.jpg +,P02679.jpg,,1, +,P01612.jpg,,0,P01600.jpg +,P01613.jpg,,0,P01600.jpg +,P01614.jpg,,0,P01600.jpg +,P02682.jpg,,1, +,P01616.jpg,,0,P01600.jpg +,P02688.jpg,,1, +,P01618.jpg,,0,P01617.jpg +,P02692.jpg,,1, +,P01620.jpg,,0,P01617.jpg +,P01621.jpg,,0,P01600.jpg +,P01622.jpg,,0,P01600.jpg +,P01623.jpg,,0,P01600.jpg +,P01624.jpg,,0,P01600.jpg +,P02694.jpg,,1, +,P01627.jpg,,0,P01628.jpg +,P02697.jpg,,1, +,P01629.jpg,,0,P01628.jpg +,P01630.jpg,,0,P01628.jpg +,P01631.jpg,,0,P01628.jpg +,P02698.jpg,,1, +,P01633.jpg,,0,P01632.jpg +,P01634.jpg,,0,P01632.jpg +,P01635.jpg,,0,P01632.jpg +,P02700.jpg,,1, +,P01638.jpg,,0,P01632.jpg +,P01639.jpg,,0,P01642.jpg +,P01640.jpg,,0,P01642.jpg +,P01641.jpg,,0,P01642.jpg +,P02701.jpg,,1, +,P01643.jpg,,0,P01644.jpg +,P02706.jpg,,1, +,P02711.jpg,,1, +,P01646.jpg,,0,P01645.jpg +,P01647.jpg,,0,P01645.jpg +,P01648.jpg,,0,P01645.jpg +,P01649.jpg,,0,P01645.jpg +,P01650.jpg,,0,P01645.jpg +,P01651.jpg,,0,P01645.jpg +,P02715.jpg,,1, +,P01653.jpg,,0,P01652.jpg +,P01654.jpg,,0,P01652.jpg +,P02716.jpg,,1, +,P01682.jpg,,0,P01683.jpg +,P02718.jpg,,1, +,P01684.jpg,,0,P01683.jpg +,P02719.jpg,,1, +,P01686.jpg,,0,P01687.jpg +,P02725.jpg,,1, +,P01688.jpg,,0,P01687.jpg +,P01689.jpg,,0,P01687.jpg +,P01690.jpg,,0,P01687.jpg +,P01691.jpg,,0,P01687.jpg +,P01693.jpg,,0,P01687.jpg +,P01694.jpg,,0,P01687.jpg +,P02730.jpg,,1, +,P01742.jpg,,0,P01741.jpg +,P01749.jpg,,0,P01741.jpg +,P01750.jpg,,0,P01741.jpg +,P01751.jpg,,0,P01741.jpg +,P02731.jpg,,1, +,P01753.jpg,,0,P01741.jpg +,P01754.jpg,,0,P01741.jpg +,P01755.jpg,,0,P01741.jpg +,P01756.jpg,,0,P01741.jpg +,P01757.jpg,,0,P01741.jpg +,P01758.jpg,,0,P01741.jpg +,P01759.jpg,,0,P01741.jpg +,P02732.jpg,,1, +,P01761.jpg,,0,P01760.jpg +,P01762.jpg,,0,P01760.jpg +,P01763.jpg,,0,P01760.jpg +,P01764.jpg,,0,P01760.jpg +,P01765.jpg,,0,P01760.jpg +,P02733.jpg,,1, +,P01767.jpg,,0,P01766.jpg +,P01768.jpg,,0,P01766.jpg +,P01769.jpg,,0,P01766.jpg +,P01770.jpg,,0,P01766.jpg +,P02734.jpg,,1, +,P01772.jpg,,0,P01771.jpg +,P01773.jpg,,0,P01771.jpg +,P01774.jpg,,0,P01771.jpg +,P01775.jpg,,0,P01771.jpg +,P01776.jpg,,0,P01771.jpg +,P02738.jpg,,1, +,P01778.jpg,,0,P01780.jpg +,P01779.jpg,,0,P01780.jpg +,P02739.jpg,,1, +,P01783.jpg,,0,P01780.jpg +,P02746.jpg,,1, +,P01785.jpg,,0,P01780.jpg +,P01786.jpg,,0,P01780.jpg +,P02748.jpg,,1, +,P01789.jpg,,0,P00193.jpg +,P01790.jpg,,0,P00193.jpg +,P01791.jpg,,0,P00193.jpg +,P02749.jpg,,1, +,P02750.jpg,,1, +,P02751.jpg,,1, +,P02753.jpg,,1, +,P02754.jpg,,1, +,P02756.jpg,,1, +,P02757.jpg,,1, +,P02758.jpg,,1, +,P02762.jpg,,1, +,P02764.jpg,,1, +,P02767.jpg,,1, +,P02770.jpg,,1, +,P02771.jpg,,1, +,P02772.jpg,,1, +,P02773.jpg,,1, +,P02777.jpg,,1, +,P02779.jpg,,1, +,P02783.jpg,,1, +,P02789.jpg,,1, +,P02790.jpg,,1, +,P02794.jpg,,1, +,P02796.jpg,,1, +,P02797.jpg,,1, +,P02800.jpg,,1, +,P02802.jpg,,1, +,P02804.jpg,,1, +,P02806.jpg,,1, +,P02807.jpg,,1, +,P02809.jpg,,1, +,P02811.jpg,,1, +,P02813.jpg,,1, +,P02814.jpg,,1, +,P02816.jpg,,1, +,P02825.jpg,,1, +,P02827.jpg,,1, +,P02829.jpg,,1, +,P02831.jpg,,1, +,P02843.jpg,,1, +,P02844.jpg,,1, +,P02851.jpg,,1, +,P02852.jpg,,1, +,P02853.jpg,,1, +,P02854.jpg,,1, +,P02861.jpg,,1, +,P02863.jpg,,1, +,P02864.jpg,,1, +,P02867.jpg,,1, +,P02868.jpg,,1, +,P02871.jpg,,1, +,P02872.jpg,,1, +,P02875.jpg,,1, +,P02877.jpg,,1, +,P02879.jpg,,1, +,P02885.jpg,,1, +,P02887.jpg,,1, +,P02892.jpg,,1, +,P02893.jpg,,1, +,P02899.jpg,,1, +,P02902.jpg,,1, +,P02911.jpg,,1, +,P01883.jpg,,0,P01882.jpg +,P01884.jpg,,0,P01882.jpg +,P01885.jpg,,0,P01882.jpg +,P01886.jpg,,0,P01882.jpg +,P02915.jpg,,1, +,P01888.jpg,,0,P01887.jpg +,P01889.jpg,,0,P01887.jpg +,P01890.jpg,,0,P01887.jpg +,P02918.jpg,,1, +,P02920.jpg,,1, +,P02922.jpg,,1, +,P02924.jpg,,1, +,P02927.jpg,,1, +,P02932.jpg,,1, +,P02935.jpg,,1, +,P02936.jpg,,1, +,P02938.jpg,,1, +,P02946.jpg,,1, +,P02947.jpg,,1, +,P02948.jpg,,1, +,P02953.jpg,,1, +,P02954.jpg,,1, +,P02957.jpg,,1, +,P02958.jpg,,1, +,P02960.jpg,,1, +,P02964.jpg,,1, +,P02965.jpg,,1, +,P02967.jpg,,1, +,P02970.jpg,,1, +,P02973.jpg,,1, +,P02975.jpg,,1, +,P02978.jpg,,1, +,P01915.jpg,,0,P01266.jpg +,P01916.jpg,,0,P01266.jpg +,P01917.jpg,,0,P01266.jpg +,P01918.jpg,,0,P01266.jpg +,P01919.jpg,,0,P01266.jpg +,P01921.jpg,,0,P01266.jpg +,P01922.jpg,,0,P01266.jpg +,P01923.jpg,,0,P01266.jpg +,P01924.jpg,,0,P01266.jpg +,P01925.jpg,,0,P01266.jpg +,P01926.jpg,,0,P01266.jpg +,P01927.jpg,,0,P01266.jpg +,P01928.jpg,,0,P01266.jpg +,P01929.jpg,,0,P01266.jpg +,P01930.jpg,,0,P01266.jpg +,P01931.jpg,,0,P01951.jpg +,P01932.jpg,,0,P01951.jpg +,P01933.jpg,,0,P01951.jpg +,P01934.jpg,,0,P01951.jpg +,P01935.jpg,,0,P01951.jpg +,P01936.jpg,,0,P01951.jpg +,P01937.jpg,,0,P01951.jpg +,P01938.jpg,,0,P01951.jpg +,P01939.jpg,,0,P01951.jpg +,P01940.jpg,,0,P01951.jpg +,P01941.jpg,,0,P01951.jpg +,P01942.jpg,,0,P01951.jpg +,P01943.jpg,,0,P01951.jpg +,P01944.jpg,,0,P01951.jpg +,P01945.jpg,,0,P01951.jpg +,P01946.jpg,,0,P01951.jpg +,P01947.jpg,,0,P01951.jpg +,P02981.jpg,,1, +,P01949.jpg,,0,P01951.jpg +,P01950.jpg,,0,P01951.jpg +,P02985.jpg,,1, +,P01952.jpg,,0,P01951.jpg +,P02988.jpg,,1, +,P02990.jpg,,1, +,P02992.jpg,,1, +,P03001.jpg,,1, +,P01957.jpg,,0,P01956.jpg +,P03004.jpg,,1, +,P01959.jpg,,0,P01956.jpg +,P03008.jpg,,1, +,P01961.jpg,,0,P01956.jpg +,P03011.jpg,,1, +,P01963.jpg,,0,P01956.jpg +,P03012.jpg,,1, +,P01965.jpg,,0,P01956.jpg +,P01966.jpg,,0,P01956.jpg +,P01967.jpg,,0,P01956.jpg +,P01968.jpg,,0,P01956.jpg +,P01969.jpg,,0,P01956.jpg +,P03016.jpg,,1, +,P01971.jpg,,0,P01970.jpg +,P03029.jpg,,1, +,P01973.jpg,,0,P01970.jpg +,P03037.jpg,,1, +,P01975.jpg,,0,P01970.jpg +,P01976.jpg,,0,P01974.jpg +,P01977.jpg,,0,P01974.jpg +,P01978.jpg,,0,P01974.jpg +,P01979.jpg,,0,P01974.jpg +,P01980.jpg,,0,P01974.jpg +,P01981.jpg,,0,P01974.jpg +,P01982.jpg,,0,P01974.jpg +,P01983.jpg,,0,P01974.jpg +,P01984.jpg,,0,P01974.jpg +,P01985.jpg,,0,P01974.jpg +,P01986.jpg,,0,P01204.jpg +,P01987.jpg,,0,P01204.jpg +,P01988.jpg,,0,P01204.jpg +,P01989.jpg,,0,P01204.jpg +,P01990.jpg,,0,P01204.jpg +,P01991.jpg,,0,P01204.jpg +,P01992.jpg,,0,P01204.jpg +,P01993.jpg,,0,P01204.jpg +,P01994.jpg,,0,P01204.jpg +,P01995.jpg,,0,P01204.jpg +,P01996.jpg,,0,P01204.jpg +,P01997.jpg,,0,P01204.jpg +,P01998.jpg,,0,P01204.jpg +,P01999.jpg,,0,P01204.jpg +,P02000.jpg,,0,P01204.jpg +,P02001.jpg,,0,P01204.jpg +,P02002.jpg,,0,P01204.jpg +,P02003.jpg,,0,P01204.jpg +,P02004.jpg,,0,P01204.jpg +,P02005.jpg,,0,P01204.jpg +,P02006.jpg,,0,P01204.jpg +,P02007.jpg,,0,P01204.jpg +,P02008.jpg,,0,P01204.jpg +,P02009.jpg,,0,P01204.jpg +,P02010.jpg,,0,P01204.jpg +,P02011.jpg,,0,P01204.jpg +,P02012.jpg,,0,P01204.jpg +,P02013.jpg,,0,P01204.jpg +,P02014.jpg,,0,P01204.jpg +,P02015.jpg,,0,P01204.jpg +,P02016.jpg,,0,P01204.jpg +,P02017.jpg,,0,P02021.jpg +,P02018.jpg,,0,P02021.jpg +,P02019.jpg,,0,P02021.jpg +,P02020.jpg,,0,P02021.jpg +,P03041.jpg,,1, +,P02022.jpg,,0,P02021.jpg +,P02023.jpg,,0,P02021.jpg +,P02024.jpg,,0,P02021.jpg +,P03047.jpg,,1, +,P02026.jpg,,0,P02025.jpg +,P02027.jpg,,0,P02025.jpg +,P02028.jpg,,0,P02025.jpg +,P02029.jpg,,0,P02025.jpg +,P02030.jpg,,0,P02025.jpg +,P02031.jpg,,0,P02025.jpg +,P02032.jpg,,0,P02025.jpg +,P03051.jpg,,1, +,P02034.jpg,,0,P02033.jpg +,P02035.jpg,,0,P02033.jpg +,P02036.jpg,,0,P02033.jpg +,P02037.jpg,,0,P02033.jpg +,P02038.jpg,,0,P02033.jpg +,P02039.jpg,,0,P02033.jpg +,P02040.jpg,,0,P02033.jpg +,P02041.jpg,,0,P02033.jpg +,P02042.jpg,,0,P02033.jpg +,P02043.jpg,,0,P02033.jpg +,P02044.jpg,,0,P02033.jpg +,P02045.jpg,,0,P02033.jpg +,P02046.jpg,,0,P02033.jpg +,P02047.jpg,,0,P02048.jpg +,P03053.jpg,,1, +,P03055.jpg,,1, +,P02050.jpg,,0,P02048.jpg +,P03057.jpg,,1, +,P02052.jpg,,0,P02051.jpg +,P03060.jpg,,1, +,P02054.jpg,,0,P02053.jpg +,P03066.jpg,,1, +,P02056.jpg,,0,P02055.jpg +,P03068.jpg,,1, +,P02058.jpg,,0,P02057.jpg +,P02059.jpg,,0,P02051.jpg +,P02060.jpg,,0,P02051.jpg +,P02061.jpg,,0,P02057.jpg +,P02062.jpg,,0,P02057.jpg +,P03070.jpg,,1, +,P02098.jpg,,0,P02099.jpg +,P03071.jpg,,1, +,P02100.jpg,,0,P02099.jpg +,P03073.jpg,,1, +,P02102.jpg,,0,P02099.jpg +,P03075.jpg,,1, +,P02104.jpg,,0,P02099.jpg +,P03078.jpg,,1, +,P02106.jpg,,0,P02099.jpg +,P03085.jpg,,1, +,P02108.jpg,,0,P02099.jpg +,P03089.jpg,,1, +,P02110.jpg,,0,P02099.jpg +,P03098.jpg,,1, +,P02112.jpg,,0,P02099.jpg +,P03105.jpg,,1, +,P03111.jpg,,1, +,P02115.jpg,,0,P02114.jpg +,P02116.jpg,,0,P02114.jpg +,P02117.jpg,,0,P02114.jpg +,P02118.jpg,,0,P02114.jpg +,P02119.jpg,,0,P02114.jpg +,P02120.jpg,,0,P02114.jpg +,P02121.jpg,,0,P02114.jpg +,P03115.jpg,,1, +,P02174.jpg,,0,P02173.jpg +,P02175.jpg,,0,P02173.jpg +,P03118.jpg,,1, +,P02177.jpg,,0,P02173.jpg +,P02178.jpg,,0,P02173.jpg +,P02179.jpg,,0,P02173.jpg +,P03121.jpg,,1, +,P02181.jpg,,0,P02173.jpg +,P02182.jpg,,0,P02173.jpg +,P03124.jpg,,1, +,P02184.jpg,,0,P02173.jpg +,P03133.jpg,,1, +,P02186.jpg,,0,P02173.jpg +,P02187.jpg,,0,P02173.jpg +,P03145.jpg,,1, +,P02189.jpg,,0,P02191.jpg +,P02190.jpg,,0,P02191.jpg +,P03147.jpg,,1, +,P02192.jpg,,0,P02191.jpg +,P02193.jpg,,0,P02195.jpg +,P02194.jpg,,0,P02195.jpg +,P03149.jpg,,1, +,P03152.jpg,,1, +,P03163.jpg,,1, +,P03164.jpg,,1, +,P03694.jpg,,1, +,P03697.jpg,,1, +,P03703.jpg,,1, +,P03711.jpg,,1, +,P02203.jpg,,0,P02202.jpg +,P03715.jpg,,1, +,P02205.jpg,,0,P02204.jpg +,P03719.jpg,,1, +,P02207.jpg,,0,P02206.jpg +,P02208.jpg,,0,P02206.jpg +,P02209.jpg,,0,P02206.jpg +,P02210.jpg,,0,P02206.jpg +,P03722.jpg,,1, +,P02212.jpg,,0,P02206.jpg +,P02213.jpg,,0,P02206.jpg +,P02214.jpg,,0,P02206.jpg +,P03725.jpg,,1, +,P02216.jpg,,0,P02206.jpg +,P02217.jpg,,0,P02206.jpg +,P02218.jpg,,0,P02206.jpg +,P03731.jpg,,1, +,P02220.jpg,,0,P02206.jpg +,P02221.jpg,,0,P02206.jpg +,P02222.jpg,,0,P02223.jpg +,P03736.jpg,,1, +,P03738.jpg,,1, +,P03740.jpg,,1, +,P03745.jpg,,1, +,P02228.jpg,,0,P01204.jpg +,P02230.jpg,,0,P01204.jpg +,P02231.jpg,,0,P01204.jpg +,P02232.jpg,,0,P01204.jpg +,P02233.jpg,,0,P01204.jpg +,P02234.jpg,,0,P01204.jpg +,P02235.jpg,,0,P01204.jpg +,P02236.jpg,,0,P01204.jpg +,P02237.jpg,,0,P01204.jpg +,P02238.jpg,,0,P01204.jpg +,P02239.jpg,,0,P01204.jpg +,P02240.jpg,,0,P01220.jpg +,P02241.jpg,,0,P01220.jpg +,P02242.jpg,,0,P01220.jpg +,P02243.jpg,,0,P01220.jpg +,P02244.jpg,,0,P01220.jpg +,P02245.jpg,,0,P01220.jpg +,P02246.jpg,,0,P01220.jpg +,P02247.jpg,,0,P01220.jpg +,P02248.jpg,,0,P01220.jpg +,P02249.jpg,,0,P01220.jpg +,P02250.jpg,,0,P01220.jpg +,P02251.jpg,,0,P01220.jpg +,P02252.jpg,,0,P01220.jpg +,P02253.jpg,,0,P01220.jpg +,P03751.jpg,,1, +,P03755.jpg,,1, +,P03756.jpg,,1, +,P04055.jpg,,1, +,P04114.jpg,,1, +,P04232.jpg,,1, +,P04385.jpg,,1, +,P04391.jpg,,1, +,P04671.jpg,,1, +,P02263.jpg,,0,P01360.jpg +,P02264.jpg,,0,P01360.jpg +,P02265.jpg,,0,P01360.jpg +,P02266.jpg,,0,P01360.jpg +,P02267.jpg,,0,P01360.jpg +,P02268.jpg,,0,P01360.jpg +,P02269.jpg,,0,P01360.jpg +,P02270.jpg,,0,P01360.jpg +,P02271.jpg,,0,P01360.jpg +,P02272.jpg,,0,P01360.jpg +,P02273.jpg,,0,P01360.jpg +,P02274.jpg,,0,P01364.jpg +,P02275.jpg,,0,P01364.jpg +,P05506.jpg,,1, +,P05507.jpg,,1, +,P06384.jpg,,1, +,P02279.jpg,,0,P02278.jpg +,P02280.jpg,,0,P02278.jpg +,P02281.jpg,,0,P02278.jpg +,P07251.jpg,,1, +,P02283.jpg,,0,P02282.jpg +,P02284.jpg,,0,P02282.jpg +,P02285.jpg,,0,P02282.jpg +,P08924.jpg,,1, +,P02287.jpg,,0,P02286.jpg +,P02288.jpg,,0,P02286.jpg +,P08927.jpg,,1, +,P02290.jpg,,0,P02289.jpg +,P02291.jpg,,0,P02289.jpg +,P02292.jpg,,0,P02289.jpg +,P02293.jpg,,0,P02289.jpg +,P02294.jpg,,0,P02289.jpg +,P02295.jpg,,0,P02289.jpg +,P02296.jpg,,0,P02289.jpg +,P02297.jpg,,0,P02289.jpg +,P02298.jpg,,0,P02289.jpg +,P02299.jpg,,0,P02289.jpg +,P02300.jpg,,0,P02289.jpg +,P00050.jpg,,0,P03725.jpg +,P00056.jpg,,0,P02978.jpg +,P00057.jpg,,0,P02978.jpg +,P00058.jpg,,0,P02978.jpg +,P00059.jpg,,0,P02978.jpg +,P00060.jpg,,0,P02978.jpg +,P00064.jpg,,0,P03121.jpg +,P00087.jpg,,0,P03121.jpg +,P00091.jpg,,0,P03121.jpg +,P00092.jpg,,0,P03121.jpg +,P00096.jpg,,0,P03121.jpg +,P00098.jpg,,0,P03121.jpg +,P00099.jpg,,0,P03121.jpg +,P00102.jpg,,0,P03121.jpg +,P00115.jpg,,0,P03121.jpg +,P00116.jpg,,0,P03121.jpg +,P00117.jpg,,0,P03121.jpg +,P00118.jpg,,0,P03121.jpg +,P00119.jpg,,0,P03121.jpg +,P00121.jpg,,0,P03121.jpg +,P00122.jpg,,0,P03121.jpg +,P00124.jpg,,0,P03121.jpg +,P00125.jpg,,0,P03121.jpg +,P00126.jpg,,0,P03121.jpg +,P00127.jpg,,0,P03121.jpg +,P00128.jpg,,0,P03121.jpg +,P00129.jpg,,0,P03121.jpg +,P00131.jpg,,0,P03121.jpg +,P00132.jpg,,0,P03121.jpg +,P00134.jpg,,0,P03121.jpg +,P00136.jpg,,0,P03121.jpg +,P00137.jpg,,0,P03121.jpg +,P00138.jpg,,0,P03121.jpg +,P00139.jpg,,0,P03121.jpg +,P00140.jpg,,0,P03121.jpg +,P00141.jpg,,0,P03121.jpg +,P00142.jpg,,0,P03121.jpg +,P00144.jpg,,0,P03121.jpg +,P00146.jpg,,0,P03121.jpg +,P00153.jpg,,0,P03121.jpg +,P00154.jpg,,0,P03121.jpg +,P00156.jpg,,0,P03121.jpg +,P00158.jpg,,0,P03121.jpg +,P00160.jpg,,0,P03121.jpg +,P00163.jpg,,0,P03121.jpg +,P00165.jpg,,0,P03121.jpg +,P00166.jpg,,0,P03121.jpg +,P00167.jpg,,0,P03121.jpg +,P00168.jpg,,0,P03121.jpg +,P00169.jpg,,0,P03121.jpg +,P00170.jpg,,0,P03121.jpg +,P00173.jpg,,0,P03121.jpg +,P00174.jpg,,0,P03121.jpg +,P00186.jpg,,0,P03121.jpg +,P00196.jpg,,0,P03121.jpg +,P00197.jpg,,0,P03121.jpg +,P00204.jpg,,0,P03121.jpg +,P00221.jpg,,0,P03121.jpg +,P02370.jpg,,0,P02371.jpg +,P00225.jpg,,0,P02464.jpg +,P00251.jpg,,0,P02382.jpg +,P00268.jpg,,0,P03121.jpg +,P00274.jpg,,0,P00429.jpg +,P00275.jpg,,0,P00429.jpg +,P00278.jpg,,0,P00429.jpg +,P02377.jpg,,0,P02371.jpg +,P00279.jpg,,0,P00010.jpg +,P00281.jpg,,0,P02464.jpg +,P00288.jpg,,0,P02382.jpg +,P02381.jpg,,0,P02371.jpg +,P00292.jpg,,0,P00010.jpg +,P00293.jpg,,0,P02464.jpg +,P00295.jpg,,0,P02382.jpg +,P00298.jpg,,0,P00429.jpg +,P02386.jpg,,0,P02371.jpg +,P00303.jpg,,0,P00010.jpg +,P00305.jpg,,0,P02464.jpg +,P00306.jpg,,0,P02382.jpg +,P00308.jpg,,0,P00429.jpg +,P02391.jpg,,0,P02371.jpg +,P00309.jpg,,0,P00010.jpg +,P00314.jpg,,0,P02464.jpg +,P00315.jpg,,0,P02382.jpg +,P00317.jpg,,0,P00429.jpg +,P00318.jpg,,0,P00429.jpg +,P00319.jpg,,0,P00429.jpg +,P02398.jpg,,0,P02371.jpg +,P02399.jpg,,0,P02371.jpg +,P02400.jpg,,0,P02371.jpg +,P00322.jpg,,0,P00010.jpg +,P02402.jpg,,0,P02371.jpg +,P02403.jpg,,0,P02371.jpg +,P02404.jpg,,0,P02371.jpg +,P00324.jpg,,0,P00010.jpg +,P00325.jpg,,0,P02464.jpg +,P00327.jpg,,0,P02382.jpg +,P00328.jpg,,0,P00429.jpg +,P00331.jpg,,0,P00429.jpg +,P02411.jpg,,0,P02371.jpg +,P00336.jpg,,0,P00010.jpg +,P02413.jpg,,0,P02371.jpg +,P00338.jpg,,0,P00010.jpg +,P00342.jpg,,0,P02464.jpg +,P02416.jpg,,0,P02371.jpg +,P00344.jpg,,0,P00010.jpg +,P00346.jpg,,0,P02464.jpg +,P02419.jpg,,0,P02371.jpg +,P02420.jpg,,0,P02371.jpg +,P00347.jpg,,0,P00010.jpg +,P00348.jpg,,0,P02464.jpg +,P02423.jpg,,0,P02371.jpg +,P00350.jpg,,0,P00010.jpg +,P00373.jpg,,0,P02464.jpg +,P02426.jpg,,0,P02371.jpg +,P00384.jpg,,0,P00010.jpg +,P00387.jpg,,0,P02464.jpg +,P02429.jpg,,0,P02371.jpg +,P00389.jpg,,0,P00010.jpg +,P02431.jpg,,0,P02371.jpg +,P00396.jpg,,0,P00010.jpg +,P02433.jpg,,0,P02371.jpg +,P02434.jpg,,0,P02371.jpg +,P00403.jpg,,0,P00010.jpg +,P02436.jpg,,0,P02371.jpg +,P00405.jpg,,0,P00010.jpg +,P00406.jpg,,0,P02464.jpg +,P02440.jpg,,0,P02437.jpg +,P02441.jpg,,0,P02437.jpg +,P00407.jpg,,0,P02711.jpg +,P00408.jpg,,0,P00429.jpg +,P02444.jpg,,0,P02437.jpg +,P00411.jpg,,0,P02711.jpg +,P00412.jpg,,0,P03147.jpg +,P00413.jpg,,0,P03147.jpg +,P00414.jpg,,0,P03147.jpg +,P00416.jpg,,0,P03147.jpg +,P00418.jpg,,0,P03147.jpg +,P02451.jpg,,0,P02450.jpg +,P02452.jpg,,0,P02454.jpg +,P02453.jpg,,0,P02454.jpg +,P00419.jpg,,0,P02454.jpg +,P02455.jpg,,0,P02454.jpg +,P02456.jpg,,0,P02454.jpg +,P02457.jpg,,0,P02458.jpg +,P00420.jpg,,0,P02458.jpg +,P02459.jpg,,0,P02458.jpg +,P02460.jpg,,0,P02461.jpg +,P00421.jpg,,0,P00739.jpg +,P00422.jpg,,0,P00043.jpg +,P00423.jpg,,0,P02481.jpg +,P00425.jpg,,0,P03133.jpg +,P02465.jpg,,0,P02464.jpg +,P00426.jpg,,0,P00010.jpg +,P02467.jpg,,0,P02464.jpg +,P00427.jpg,,0,P02464.jpg +,P02469.jpg,,0,P02464.jpg +,P00447.jpg,,0,P02464.jpg +,P02471.jpg,,0,P02464.jpg +,P00459.jpg,,0,P02464.jpg +,P02473.jpg,,0,P02470.jpg +,P02474.jpg,,0,P02476.jpg +,P02475.jpg,,0,P02470.jpg +,P00460.jpg,,0,P02831.jpg +,P02477.jpg,,0,P02470.jpg +,P02478.jpg,,0,P02476.jpg +,P02479.jpg,,0,P02470.jpg +,P02480.jpg,,0,P02470.jpg +,P00462.jpg,,0,P02831.jpg +,P02482.jpg,,0,P02470.jpg +,P01236.jpg,,0,P02831.jpg +,P01239.jpg,,0,P00027.jpg +,P02485.jpg,,0,P02484.jpg +,P01371.jpg,,0,P02831.jpg +,P01529.jpg,,0,P02481.jpg +,P02488.jpg,,0,P02489.jpg +,P01788.jpg,,0,P02481.jpg +,P01792.jpg,,0,P02476.jpg +,P01793.jpg,,0,P01632.jpg +,P01794.jpg,,0,P01632.jpg +,P02493.jpg,,0,P02476.jpg +,P01795.jpg,,0,P02489.jpg +,P02495.jpg,,0,P02476.jpg +,P01796.jpg,,0,P02481.jpg +,P01797.jpg,,0,P01632.jpg +,P01798.jpg,,0,P01632.jpg +,P02499.jpg,,0,P02476.jpg +,P01799.jpg,,0,P02489.jpg +,P02501.jpg,,0,P02476.jpg +,P02502.jpg,,0,P02476.jpg +,P01800.jpg,,0,P02489.jpg +,P02504.jpg,,0,P02476.jpg +,P02505.jpg,,0,P02476.jpg +,P02506.jpg,,0,P02476.jpg +,P01801.jpg,,0,P02481.jpg +,P02508.jpg,,0,P02476.jpg +,P01802.jpg,,0,P02489.jpg +,P02511.jpg,,0,P02476.jpg +,P02512.jpg,,0,P02476.jpg +,P02514.jpg,,0,P02476.jpg +,P01803.jpg,,0,P02489.jpg +,P01804.jpg,,0,P02481.jpg +,P02517.jpg,,0,P02476.jpg +,P02518.jpg,,0,P02476.jpg +,P01805.jpg,,0,P02489.jpg +,P02520.jpg,,0,P02476.jpg +,P02521.jpg,,0,P02476.jpg +,P01806.jpg,,0,P02489.jpg +,P02523.jpg,,0,P02476.jpg +,P01807.jpg,,0,P02489.jpg +,P01808.jpg,,0,P01645.jpg +,P01809.jpg,,0,P01645.jpg +,P01810.jpg,,0,P01645.jpg +,P01811.jpg,,0,P01645.jpg +,P01812.jpg,,0,P01645.jpg +,P01813.jpg,,0,P01645.jpg +,P01814.jpg,,0,P01645.jpg +,P01815.jpg,,0,P01645.jpg +,P02533.jpg,,0,P02476.jpg +,P02535.jpg,,0,P02476.jpg +,P01816.jpg,,0,P02489.jpg +,P02537.jpg,,0,P02476.jpg +,P01817.jpg,,0,P02489.jpg +,P02539.jpg,,0,P02476.jpg +,P02540.jpg,,0,P02476.jpg +,P02541.jpg,,0,P02476.jpg +,P01818.jpg,,0,P02489.jpg +,P01819.jpg,,0,P01645.jpg +,P01820.jpg,,0,P01645.jpg +,P02545.jpg,,0,P02476.jpg +,P01821.jpg,,0,P02489.jpg +,P02547.jpg,,0,P02476.jpg +,P01822.jpg,,0,P02489.jpg +,P02550.jpg,,0,P02552.jpg +,P01823.jpg,,0,P01645.jpg +,P01855.jpg,,0,P02711.jpg +,P02553.jpg,,0,P02476.jpg +,P01856.jpg,,0,P02489.jpg +,P02555.jpg,,0,P02476.jpg +,P01857.jpg,,0,P02489.jpg +,P02557.jpg,,0,P02476.jpg +,P01858.jpg,,0,P02489.jpg +,P02559.jpg,,0,P02476.jpg +,P02560.jpg,,0,P02476.jpg +,P01859.jpg,,0,P02489.jpg +,P02563.jpg,,0,P02476.jpg +,P02564.jpg,,0,P02476.jpg +,P01860.jpg,,0,P02489.jpg +,P02566.jpg,,0,P02476.jpg +,P02567.jpg,,0,P02476.jpg +,P01861.jpg,,0,P02489.jpg +,P02569.jpg,,0,P02476.jpg +,P02570.jpg,,0,P02476.jpg +,P01862.jpg,,0,P02489.jpg +,P02572.jpg,,0,P02476.jpg +,P02573.jpg,,0,P02476.jpg +,P02574.jpg,,0,P02476.jpg +,P02575.jpg,,0,P02476.jpg +,P01863.jpg,,0,P02489.jpg +,P02577.jpg,,0,P02476.jpg +,P02579.jpg,,0,P02476.jpg +,P02580.jpg,,0,P02476.jpg +,P01864.jpg,,0,P02489.jpg +,P02582.jpg,,0,P02476.jpg +,P02583.jpg,,0,P02476.jpg +,P02584.jpg,,0,P02476.jpg +,P02585.jpg,,0,P02476.jpg +,P02586.jpg,,0,P02476.jpg +,P01865.jpg,,0,P02489.jpg +,P01866.jpg,,0,P02481.jpg +,P02589.jpg,,0,P02476.jpg +,P01867.jpg,,0,P02489.jpg +,P01868.jpg,,0,P02481.jpg +,P01869.jpg,,0,P02382.jpg +,P01870.jpg,,0,P02476.jpg +,P01871.jpg,,0,P01784.jpg +,P01872.jpg,,0,P01784.jpg +,P01873.jpg,,0,P01784.jpg +,P01874.jpg,,0,P01784.jpg +,P01875.jpg,,0,P01784.jpg +,P01876.jpg,,0,P01784.jpg +,P01877.jpg,,0,P01784.jpg +,P01878.jpg,,0,P01784.jpg +,P01879.jpg,,0,P01784.jpg +,P01880.jpg,,0,P01784.jpg +,P01881.jpg,,0,P01784.jpg +,P01891.jpg,,0,P01882.jpg +,P01892.jpg,,0,P01882.jpg +,P01893.jpg,,0,P01882.jpg +,P01894.jpg,,0,P01882.jpg +,P01895.jpg,,0,P01882.jpg +,P01896.jpg,,0,P01882.jpg +,P01897.jpg,,0,P01882.jpg +,P01898.jpg,,0,P01882.jpg +,P01899.jpg,,0,P01387.jpg +,P01900.jpg,,0,P01387.jpg +,P01901.jpg,,0,P01387.jpg +,P01902.jpg,,0,P01387.jpg +,P01903.jpg,,0,P01387.jpg +,P01904.jpg,,0,P01387.jpg +,P01905.jpg,,0,P01387.jpg +,P01906.jpg,,0,P01387.jpg +,P01907.jpg,,0,P01387.jpg +,P01908.jpg,,0,P01387.jpg +,P01909.jpg,,0,P01387.jpg +,P01910.jpg,,0,P01387.jpg +,P01911.jpg,,0,P01387.jpg +,P01912.jpg,,0,P01387.jpg +,P01913.jpg,,0,P01387.jpg +,P01914.jpg,,0,P01387.jpg +,P02196.jpg,,0,P02202.jpg +,P02197.jpg,,0,P02202.jpg +,P02198.jpg,,0,P02202.jpg +,P02199.jpg,,0,P02202.jpg +,P02200.jpg,,0,P02202.jpg +,P02201.jpg,,0,P02202.jpg +,P02226.jpg,,0,P01625.jpg +,P02227.jpg,,0,P01625.jpg +,P02254.jpg,,0,P02435.jpg +,P02255.jpg,,0,P02435.jpg +,P02256.jpg,,0,P02435.jpg +,P02257.jpg,,0,P02435.jpg +,P02258.jpg,,0,P02435.jpg +,P02259.jpg,,0,P02435.jpg +,P02260.jpg,,0,P02435.jpg +,P02261.jpg,,0,P02435.jpg +,P02262.jpg,,0,P02435.jpg +,P02276.jpg,,0,P02435.jpg +,P02303.jpg,,0,P02481.jpg +,P02304.jpg,,0,P03725.jpg +,P02305.jpg,,0,P03725.jpg +,P02306.jpg,,0,P03725.jpg +,P02314.jpg,,0,P00272.jpg +,P02315.jpg,,0,P03121.jpg +,P02316.jpg,,0,P03098.jpg +,P02317.jpg,,0,P00272.jpg +,P02318.jpg,,0,P00272.jpg +,P02661.jpg,,0,P02665.jpg +,P02319.jpg,,0,P02692.jpg +,P02320.jpg,,0,P03098.jpg +,P02321.jpg,,0,P00272.jpg +,P02322.jpg,,0,P02665.jpg +,P02323.jpg,,0,P03098.jpg +,P02324.jpg,,0,P02464.jpg +,P02325.jpg,,0,P02053.jpg +,P02326.jpg,,0,P02464.jpg +,P02327.jpg,,0,P02464.jpg +,P02328.jpg,,0,P02053.jpg +,P02329.jpg,,0,P02464.jpg +,P02330.jpg,,0,P02053.jpg +,P02331.jpg,,0,P00991.jpg +,P02332.jpg,,0,P02053.jpg +,P02333.jpg,,0,P00991.jpg +,P02334.jpg,,0,P02665.jpg +,P02335.jpg,,0,P00027.jpg +,P02336.jpg,,0,P02053.jpg +,P02680.jpg,,0,P02665.jpg +,P02338.jpg,,0,P02692.jpg +,P02343.jpg,,0,P02665.jpg +,P02344.jpg,,0,P00027.jpg +,P02345.jpg,,0,P02053.jpg +,P02347.jpg,,0,P00027.jpg +,P02349.jpg,,0,P00027.jpg +,P02350.jpg,,0,P02053.jpg +,P02352.jpg,,0,P00027.jpg +,P02689.jpg,,0,P02665.jpg +,P02353.jpg,,0,P02692.jpg +,P02356.jpg,,0,P02665.jpg +,P02358.jpg,,0,P00027.jpg +,P02359.jpg,,0,P02053.jpg +,P02360.jpg,,0,P02464.jpg +,P02361.jpg,,0,P00027.jpg +,P02362.jpg,,0,P02414.jpg +,P02363.jpg,,0,P02464.jpg +,P02364.jpg,,0,P02464.jpg +,P02699.jpg,,0,P02693.jpg +,P02365.jpg,,0,P02414.jpg +,P02367.jpg,,0,P02464.jpg +,P02368.jpg,,0,P02053.jpg +,P02369.jpg,,0,P02711.jpg +,P02372.jpg,,0,P02450.jpg +,P02373.jpg,,0,P02053.jpg +,P02375.jpg,,0,P02053.jpg +,P02378.jpg,,0,P02965.jpg +,P02379.jpg,,0,P02450.jpg +,P02380.jpg,,0,P02053.jpg +,P02383.jpg,,0,P02414.jpg +,P02384.jpg,,0,P02053.jpg +,P02387.jpg,,0,P02414.jpg +,P02388.jpg,,0,P02053.jpg +,P02390.jpg,,0,P02450.jpg +,P02394.jpg,,0,P02053.jpg +,P02395.jpg,,0,P02053.jpg +,P02396.jpg,,0,P02414.jpg +,P02397.jpg,,0,P02450.jpg +,P02401.jpg,,0,P02053.jpg +,P02405.jpg,,0,P02053.jpg +,P02406.jpg,,0,P02414.jpg +,P02408.jpg,,0,P02414.jpg +,P02409.jpg,,0,P02450.jpg +,P02412.jpg,,0,P02414.jpg +,P02415.jpg,,0,P02053.jpg +,P02417.jpg,,0,P02414.jpg +,P02422.jpg,,0,P02053.jpg +,P02424.jpg,,0,P02053.jpg +,P02425.jpg,,0,P02414.jpg +,P02427.jpg,,0,P02053.jpg +,P02428.jpg,,0,P02450.jpg +,P02430.jpg,,0,P02053.jpg +,P02432.jpg,,0,P02414.jpg +,P02439.jpg,,0,P02053.jpg +,P02442.jpg,,0,P02053.jpg +,P02446.jpg,,0,P02053.jpg +,P02447.jpg,,0,P02450.jpg +,P02448.jpg,,0,P02450.jpg +,P02462.jpg,,0,P02697.jpg +,P02463.jpg,,0,P02697.jpg +,P02483.jpg,,0,P02871.jpg +,P02486.jpg,,0,P02871.jpg +,P02490.jpg,,0,P02871.jpg +,P02491.jpg,,0,P02697.jpg +,P02492.jpg,,0,P02871.jpg +,P02494.jpg,,0,P02871.jpg +,P02496.jpg,,0,P02414.jpg +,P02497.jpg,,0,P02697.jpg +,P02498.jpg,,0,P02871.jpg +,P02500.jpg,,0,P02414.jpg +,P02503.jpg,,0,P02692.jpg +,P02507.jpg,,0,P02871.jpg +,P02509.jpg,,0,P02871.jpg +,P02515.jpg,,0,P02414.jpg +,P02516.jpg,,0,P02414.jpg +,P02519.jpg,,0,P02414.jpg +,P02522.jpg,,0,P02053.jpg +,P02524.jpg,,0,P02053.jpg +,P02525.jpg,,0,P02414.jpg +,P02526.jpg,,0,P02692.jpg +,P02527.jpg,,0,P02871.jpg +,P02528.jpg,,0,P02414.jpg +,P02529.jpg,,0,P02871.jpg +,P02530.jpg,,0,P02871.jpg +,P02531.jpg,,0,P02414.jpg +,P02532.jpg,,0,P02414.jpg +,P02536.jpg,,0,P02414.jpg +,P02538.jpg,,0,P02414.jpg +,P02542.jpg,,0,P02871.jpg +,P02543.jpg,,0,P02692.jpg +,P02544.jpg,,0,P02476.jpg +,P02546.jpg,,0,P02414.jpg +,P02548.jpg,,0,P02692.jpg +,P02551.jpg,,0,P02692.jpg +,P02554.jpg,,0,P02692.jpg +,P02556.jpg,,0,P02414.jpg +,P02558.jpg,,0,P02481.jpg +,P02562.jpg,,0,P02414.jpg +,P02565.jpg,,0,P02692.jpg +,P02568.jpg,,0,P02414.jpg +,P02571.jpg,,0,P02414.jpg +,P02576.jpg,,0,P02692.jpg +,P02581.jpg,,0,P02414.jpg +,P02587.jpg,,0,P00005.jpg +,P02588.jpg,,0,P00005.jpg +,P02590.jpg,,0,P00006.jpg +,P02591.jpg,,0,P00008.jpg +,P02592.jpg,,0,P00008.jpg +,P02593.jpg,,0,P02414.jpg +,P02594.jpg,,0,P00008.jpg +,P02595.jpg,,0,P00008.jpg +,P02596.jpg,,0,P02871.jpg +,P02597.jpg,,0,P00008.jpg +,P02598.jpg,,0,P00991.jpg +,P02599.jpg,,0,P00008.jpg +,P02600.jpg,,0,P02414.jpg +,P02601.jpg,,0,P02697.jpg +,P02602.jpg,,0,P00991.jpg +,P02603.jpg,,0,P02871.jpg +,P02604.jpg,,0,P00991.jpg +,P02605.jpg,,0,P02697.jpg +,P02606.jpg,,0,P00008.jpg +,P02607.jpg,,0,P02414.jpg +,P02608.jpg,,0,P00008.jpg +,P02609.jpg,,0,P02697.jpg +,P02610.jpg,,0,P00991.jpg +,P02611.jpg,,0,P02414.jpg +,P02612.jpg,,0,P02871.jpg +,P02618.jpg,,0,P02697.jpg +,P02619.jpg,,0,P02697.jpg +,P02620.jpg,,0,P00008.jpg +,P02621.jpg,,0,P00991.jpg +,P02622.jpg,,0,P02871.jpg +,P02623.jpg,,0,P02414.jpg +,P02624.jpg,,0,P02871.jpg +,P02625.jpg,,0,P00991.jpg +,P02626.jpg,,0,P02414.jpg +,P02627.jpg,,0,P00008.jpg +,P02628.jpg,,0,P02697.jpg +,P02629.jpg,,0,P00008.jpg +,P02630.jpg,,0,P00991.jpg +,P02631.jpg,,0,P02697.jpg +,P02632.jpg,,0,P02414.jpg +,P02633.jpg,,0,P02692.jpg +,P02634.jpg,,0,P02414.jpg +,P02635.jpg,,0,P00008.jpg +,P02636.jpg,,0,P00991.jpg +,P02637.jpg,,0,P00991.jpg +,P02638.jpg,,0,P00008.jpg +,P02639.jpg,,0,P00008.jpg +,P02640.jpg,,0,P00008.jpg +,P02641.jpg,,0,P00008.jpg +,P02642.jpg,,0,P02697.jpg +,P02643.jpg,,0,P02697.jpg +,P02644.jpg,,0,P02697.jpg +,P02645.jpg,,0,P02697.jpg +,P02646.jpg,,0,P00008.jpg +,P02647.jpg,,0,P00008.jpg +,P02648.jpg,,0,P00008.jpg +,P02649.jpg,,0,P02697.jpg +,P02650.jpg,,0,P02777.jpg +,P02651.jpg,,0,P02697.jpg +,P02652.jpg,,0,P02697.jpg +,P02653.jpg,,0,P02697.jpg +,P02654.jpg,,0,P02777.jpg +,P02655.jpg,,0,P02777.jpg +,P02656.jpg,,0,P02697.jpg +,P02657.jpg,,0,P02414.jpg +,P02659.jpg,,0,P02777.jpg +,P02662.jpg,,0,P00991.jpg +,P02664.jpg,,0,P02777.jpg +,P02666.jpg,,0,P00991.jpg +,P02667.jpg,,0,P02697.jpg +,P02669.jpg,,0,P02414.jpg +,P02670.jpg,,0,P00008.jpg +,P02671.jpg,,0,P00991.jpg +,P02672.jpg,,0,P02692.jpg +,P02673.jpg,,0,P00991.jpg +,P02675.jpg,,0,P02414.jpg +,P02676.jpg,,0,P02697.jpg +,P02677.jpg,,0,P02414.jpg +,P02678.jpg,,0,P02414.jpg +,P02681.jpg,,0,P02414.jpg +,P02683.jpg,,0,P02697.jpg +,P02684.jpg,,0,P02700.jpg +,P02685.jpg,,0,P00008.jpg +,P02686.jpg,,0,P02697.jpg +,P02687.jpg,,0,P02414.jpg +,P02690.jpg,,0,P00008.jpg +,P02691.jpg,,0,P02414.jpg +,P02693.jpg,,0,P02700.jpg +,P02695.jpg,,0,P02414.jpg +,P02696.jpg,,0,P02700.jpg +,P02702.jpg,,0,P00991.jpg +,P02703.jpg,,0,P02692.jpg +,P02704.jpg,,0,P00008.jpg +,P02705.jpg,,0,P02697.jpg +,P02707.jpg,,0,P00008.jpg +,P02708.jpg,,0,P02414.jpg +,P02709.jpg,,0,P02700.jpg +,P02710.jpg,,0,P02700.jpg +,P02712.jpg,,0,P02414.jpg +,P02713.jpg,,0,P02700.jpg +,P02714.jpg,,0,P02700.jpg +,P02717.jpg,,0,P00008.jpg +,P02720.jpg,,0,P02697.jpg +,P02721.jpg,,0,P02692.jpg +,P02722.jpg,,0,P02414.jpg +,P02723.jpg,,0,P02414.jpg +,P02724.jpg,,0,P00008.jpg +,P02726.jpg,,0,P00008.jpg +,P02727.jpg,,0,P00008.jpg +,P02728.jpg,,0,P02414.jpg +,P02729.jpg,,0,P02697.jpg +,P02735.jpg,,0,P02692.jpg +,P02736.jpg,,0,P00008.jpg +,P02737.jpg,,0,P00008.jpg +,P02740.jpg,,0,P02700.jpg +,P02741.jpg,,0,P02692.jpg +,P02742.jpg,,0,P02414.jpg +,P02743.jpg,,0,P00008.jpg +,P02744.jpg,,0,P02692.jpg +,P02745.jpg,,0,P00008.jpg +,P02747.jpg,,0,P02414.jpg +,P02752.jpg,,0,P02697.jpg +,P02755.jpg,,0,P00008.jpg +,P02759.jpg,,0,P02871.jpg +,P02760.jpg,,0,P02871.jpg +,P02761.jpg,,0,P02871.jpg +,P02763.jpg,,0,P02692.jpg +,P02765.jpg,,0,P02965.jpg +,P02766.jpg,,0,P00008.jpg +,P02769.jpg,,0,P00008.jpg +,P02774.jpg,,0,P02697.jpg +,P02775.jpg,,0,P00008.jpg +,P02776.jpg,,0,P02965.jpg +,P02778.jpg,,0,P02697.jpg +,P02780.jpg,,0,P00008.jpg +,P02782.jpg,,0,P02965.jpg +,P02784.jpg,,0,P00991.jpg +,P02785.jpg,,0,P02965.jpg +,P02786.jpg,,0,P02829.jpg +,P02787.jpg,,0,P02829.jpg +,P02788.jpg,,0,P02697.jpg +,P02791.jpg,,0,P02697.jpg +,P02792.jpg,,0,P00991.jpg +,P02793.jpg,,0,P02697.jpg +,P02795.jpg,,0,P02697.jpg +,P02798.jpg,,0,P02829.jpg +,P02799.jpg,,0,P00991.jpg +,P02801.jpg,,0,P02965.jpg +,P02803.jpg,,0,P00991.jpg +,P02805.jpg,,0,P02965.jpg +,P02808.jpg,,0,P02697.jpg +,P02810.jpg,,0,P02965.jpg +,P02812.jpg,,0,P00991.jpg +,P02815.jpg,,0,P00312.jpg +,P02817.jpg,,0,P02697.jpg +,P02818.jpg,,0,P02697.jpg +,P02819.jpg,,0,P02697.jpg +,P02826.jpg,,0,P00312.jpg +,P02828.jpg,,0,P00312.jpg +,P02832.jpg,,0,P02829.jpg +,P02833.jpg,,0,P02829.jpg +,P02834.jpg,,0,P02829.jpg +,P02835.jpg,,0,P00991.jpg +,P02836.jpg,,0,P00312.jpg +,P02837.jpg,,0,P02851.jpg +,P02838.jpg,,0,P00991.jpg +,P02839.jpg,,0,P02851.jpg +,P02840.jpg,,0,P00991.jpg +,P02841.jpg,,0,P03152.jpg +,P02842.jpg,,0,P00312.jpg +,P02845.jpg,,0,P00312.jpg +,P02846.jpg,,0,P00312.jpg +,P02847.jpg,,0,P02851.jpg +,P02848.jpg,,0,P02851.jpg +,P02849.jpg,,0,P02851.jpg +,P02850.jpg,,0,P02851.jpg +,P02855.jpg,,0,P00991.jpg +,P02856.jpg,,0,P02851.jpg +,P02857.jpg,,0,P00991.jpg +,P02858.jpg,,0,P00991.jpg +,P02859.jpg,,0,P00187.jpg +,P02860.jpg,,0,P02851.jpg +,P02862.jpg,,0,P02851.jpg +,P02865.jpg,,0,P02851.jpg +,P02866.jpg,,0,P00991.jpg +,P02869.jpg,,0,P00991.jpg +,P02870.jpg,,0,P00187.jpg +,P02873.jpg,,0,P00991.jpg +,P02874.jpg,,0,P00991.jpg +,P02876.jpg,,0,P00991.jpg +,P02878.jpg,,0,P00991.jpg +,P02880.jpg,,0,P00991.jpg +,P02881.jpg,,0,P00991.jpg +,P02883.jpg,,0,P00991.jpg +,P02884.jpg,,0,P00187.jpg +,P02886.jpg,,0,P00991.jpg +,P02888.jpg,,0,P00991.jpg +,P02889.jpg,,0,P00991.jpg +,P02890.jpg,,0,P00991.jpg +,P02891.jpg,,0,P00991.jpg +,P02895.jpg,,0,P00991.jpg +,P02896.jpg,,0,P00991.jpg +,P02898.jpg,,0,P00991.jpg +,P02901.jpg,,0,P00991.jpg +,P02904.jpg,,0,P00991.jpg +,P02905.jpg,,0,P00991.jpg +,P02907.jpg,,0,P00991.jpg +,P02908.jpg,,0,P00991.jpg +,P02909.jpg,,0,P00991.jpg +,P02910.jpg,,0,P00991.jpg +,P02912.jpg,,0,P00991.jpg +,P02913.jpg,,0,P00991.jpg +,P02914.jpg,,0,P00991.jpg +,P02916.jpg,,0,P00991.jpg +,P02917.jpg,,0,P00991.jpg +,P02919.jpg,,0,P00991.jpg +,P02921.jpg,,0,P00991.jpg +,P02923.jpg,,0,P03152.jpg +,P02925.jpg,,0,P00991.jpg +,P02926.jpg,,0,P00991.jpg +,P02928.jpg,,0,P00349.jpg +,P02929.jpg,,0,P00991.jpg +,P02930.jpg,,0,P00349.jpg +,P02931.jpg,,0,P00991.jpg +,P02933.jpg,,0,P00991.jpg +,P02934.jpg,,0,P00187.jpg +,P02937.jpg,,0,P00187.jpg +,P02939.jpg,,0,P00187.jpg +,P02940.jpg,,0,P00991.jpg +,P02941.jpg,,0,P00187.jpg +,P02942.jpg,,0,P00187.jpg +,P02943.jpg,,0,P00187.jpg +,P02944.jpg,,0,P00991.jpg +,P02945.jpg,,0,P00187.jpg +,P02949.jpg,,0,P00991.jpg +,P02950.jpg,,0,P00991.jpg +,P02951.jpg,,0,P00187.jpg +,P02952.jpg,,0,P00991.jpg +,P02955.jpg,,0,P00349.jpg +,P02956.jpg,,0,P00991.jpg +,P02959.jpg,,0,P00312.jpg +,P02961.jpg,,0,P00187.jpg +,P02962.jpg,,0,P00312.jpg +,P02963.jpg,,0,P00991.jpg +,P02966.jpg,,0,P00187.jpg +,P02968.jpg,,0,P00991.jpg +,P02969.jpg,,0,P00991.jpg +,P02971.jpg,,0,P00312.jpg +,P02972.jpg,,0,P00991.jpg +,P02974.jpg,,0,P00187.jpg +,P02976.jpg,,0,P00312.jpg +,P02977.jpg,,0,P00991.jpg +,P02979.jpg,,0,P00991.jpg +,P02980.jpg,,0,P00187.jpg +,P02982.jpg,,0,P00187.jpg +,P02983.jpg,,0,P00991.jpg +,P02984.jpg,,0,P00187.jpg +,P02986.jpg,,0,P00312.jpg +,P02987.jpg,,0,P00312.jpg +,P02989.jpg,,0,P03152.jpg +,P02991.jpg,,0,P00991.jpg +,P02993.jpg,,0,P00312.jpg +,P02994.jpg,,0,P00991.jpg +,P02995.jpg,,0,P00991.jpg +,P02996.jpg,,0,P00991.jpg +,P02997.jpg,,0,P00187.jpg +,P02998.jpg,,0,P00991.jpg +,P02999.jpg,,0,P00312.jpg +,P03000.jpg,,0,P00187.jpg +,P03002.jpg,,0,P00991.jpg +,P03006.jpg,,0,P00312.jpg +,P03007.jpg,,0,P00991.jpg +,P03009.jpg,,0,P00187.jpg +,P03010.jpg,,0,P00991.jpg +,P03013.jpg,,0,P00991.jpg +,P03014.jpg,,0,P00991.jpg +,P03015.jpg,,0,P03152.jpg +,P03017.jpg,,0,P00991.jpg +,P03019.jpg,,0,P00312.jpg +,P03020.jpg,,0,P03152.jpg +,P03021.jpg,,0,P00312.jpg +,P03022.jpg,,0,P00312.jpg +,P03023.jpg,,0,P00312.jpg +,P03024.jpg,,0,P00312.jpg +,P03025.jpg,,0,P00187.jpg +,P03026.jpg,,0,P00312.jpg +,P03027.jpg,,0,P00312.jpg +,P03028.jpg,,0,P00187.jpg +,P03030.jpg,,0,P00312.jpg +,P03031.jpg,,0,P00991.jpg +,P03032.jpg,,0,P00187.jpg +,P03033.jpg,,0,P00991.jpg +,P03034.jpg,,0,P00312.jpg +,P03035.jpg,,0,P00991.jpg +,P03038.jpg,,0,P00312.jpg +,P03039.jpg,,0,P00991.jpg +,P03040.jpg,,0,P00312.jpg +,P03044.jpg,,0,P00312.jpg +,P03045.jpg,,0,P00312.jpg +,P03046.jpg,,0,P03152.jpg +,P03048.jpg,,0,P03152.jpg +,P03049.jpg,,0,P00187.jpg +,P03050.jpg,,0,P00187.jpg +,P03052.jpg,,0,P00187.jpg +,P03054.jpg,,0,P00312.jpg +,P03056.jpg,,0,P00312.jpg +,P03058.jpg,,0,P00187.jpg +,P03059.jpg,,0,P00187.jpg +,P03061.jpg,,0,P00312.jpg +,P03062.jpg,,0,P00187.jpg +,P03063.jpg,,0,P00187.jpg +,P03065.jpg,,0,P00349.jpg +,P03067.jpg,,0,P00187.jpg +,P03069.jpg,,0,P00187.jpg +,P03072.jpg,,0,P00187.jpg +,P03074.jpg,,0,P00187.jpg +,P03076.jpg,,0,P00187.jpg +,P03077.jpg,,0,P00349.jpg +,P03079.jpg,,0,P00187.jpg +,P03080.jpg,,0,P00213.jpg +,P03082.jpg,,0,P00187.jpg +,P03083.jpg,,0,P00349.jpg +,P03084.jpg,,0,P00187.jpg +,P03087.jpg,,0,P00187.jpg +,P03088.jpg,,0,P00349.jpg +,P03090.jpg,,0,P00187.jpg +,P03091.jpg,,0,P03098.jpg +,P03092.jpg,,0,P03098.jpg +,P03093.jpg,,0,P03098.jpg +,P03096.jpg,,0,P03098.jpg +,P03097.jpg,,0,P03098.jpg +,P03099.jpg,,0,P03098.jpg +,P03100.jpg,,0,P00349.jpg +,P03101.jpg,,0,P03098.jpg +,P03102.jpg,,0,P03098.jpg +,P03103.jpg,,0,P03098.jpg +,P03104.jpg,,0,P03098.jpg +,P03106.jpg,,0,P00349.jpg +,P03107.jpg,,0,P03098.jpg +,P03108.jpg,,0,P03098.jpg +,P03109.jpg,,0,P03098.jpg +,P03110.jpg,,0,P03098.jpg +,P03112.jpg,,0,P00349.jpg +,P03113.jpg,,0,P03098.jpg +,P03114.jpg,,0,P00349.jpg +,P03116.jpg,,0,P03098.jpg +,P03117.jpg,,0,P03098.jpg +,P03119.jpg,,0,P00349.jpg +,P03120.jpg,,0,P03098.jpg +,P03122.jpg,,0,P03098.jpg +,P03123.jpg,,0,P00349.jpg +,P03125.jpg,,0,P03098.jpg +,P03126.jpg,,0,P00349.jpg +,P03127.jpg,,0,P00187.jpg +,P03128.jpg,,0,P00349.jpg +,P03129.jpg,,0,P00349.jpg +,P03130.jpg,,0,P00349.jpg +,P03131.jpg,,0,P00349.jpg +,P03132.jpg,,0,P00187.jpg +,P03134.jpg,,0,P00349.jpg +,P03135.jpg,,0,P00187.jpg +,P03136.jpg,,0,P00187.jpg +,P03137.jpg,,0,P00187.jpg +,P03138.jpg,,0,P00349.jpg +,P03139.jpg,,0,P00187.jpg +,P03140.jpg,,0,P00349.jpg +,P03141.jpg,,0,P00187.jpg +,P03142.jpg,,0,P00349.jpg +,P03143.jpg,,0,P00187.jpg +,P03144.jpg,,0,P00187.jpg +,P03146.jpg,,0,P00187.jpg +,P03148.jpg,,0,P00349.jpg +,P03151.jpg,,0,P00349.jpg +,P03153.jpg,,0,P02484.jpg +,P03154.jpg,,0,P00187.jpg +,P03155.jpg,,0,P00187.jpg +,P03156.jpg,,0,P00187.jpg +,P03157.jpg,,0,P00187.jpg +,P03158.jpg,,0,P00312.jpg +,P03159.jpg,,0,P03163.jpg +,P03160.jpg,,0,P00187.jpg +,P03161.jpg,,0,P02665.jpg +,P03162.jpg,,0,P03163.jpg +,P03165.jpg,,0,P00187.jpg +,P03166.jpg,,0,P00187.jpg +,P03167.jpg,,0,P00187.jpg +,P03168.jpg,,0,P03163.jpg +,P03170.jpg,,0,P00187.jpg +,P03177.jpg,,0,P02435.jpg +,P03178.jpg,,0,P02435.jpg +,P03179.jpg,,0,P03703.jpg +,P03180.jpg,,0,P00740.jpg +,P03181.jpg,,0,P02476.jpg +,P03182.jpg,,0,P02476.jpg +,P03183.jpg,,0,P02476.jpg +,P03184.jpg,,0,P02476.jpg +,P03185.jpg,,0,P02476.jpg +,P03186.jpg,,0,P02476.jpg +,P03187.jpg,,0,P02476.jpg +,P03188.jpg,,0,P03725.jpg +,P03189.jpg,,0,P03066.jpg +,P03190.jpg,,0,P03066.jpg +,P03191.jpg,,0,P03066.jpg +,P03192.jpg,,0,P03066.jpg +,P03193.jpg,,0,P03066.jpg +,P03194.jpg,,0,P03066.jpg +,P03195.jpg,,0,P03066.jpg +,P03199.jpg,,0,P01955.jpg +,P03200.jpg,,0,P01955.jpg +,P03201.jpg,,0,P01955.jpg +,P03202.jpg,,0,P01955.jpg +,P03203.jpg,,0,P01955.jpg +,P03204.jpg,,0,P01955.jpg +,P03205.jpg,,0,P01955.jpg +,P03218.jpg,,0,P00842.jpg +,P03219.jpg,,0,P00842.jpg +,P03220.jpg,,0,P00842.jpg +,P03221.jpg,,0,P00842.jpg +,P03222.jpg,,0,P00842.jpg +,P03223.jpg,,0,P00842.jpg +,P03224.jpg,,0,P00842.jpg +,P03225.jpg,,0,P00842.jpg +,P03226.jpg,,0,P00842.jpg +,P03227.jpg,,0,P00842.jpg +,P03228.jpg,,0,P00842.jpg +,P03229.jpg,,0,P00842.jpg +,P03230.jpg,,0,P00842.jpg +,P03232.jpg,,0,P00842.jpg +,P03233.jpg,,0,P00842.jpg +,P03234.jpg,,0,P00842.jpg +,P03235.jpg,,0,P00842.jpg +,P03236.jpg,,0,P00842.jpg +,P03269.jpg,,0,P00842.jpg +,P03281.jpg,,0,P00842.jpg +,P03283.jpg,,0,P00842.jpg +,P03284.jpg,,0,P00842.jpg +,P03287.jpg,,0,P00842.jpg +,P03289.jpg,,0,P00842.jpg +,P03291.jpg,,0,P00842.jpg +,P03445.jpg,,0,P02807.jpg +,P03447.jpg,,0,P02807.jpg +,P03448.jpg,,0,P02807.jpg +,P03450.jpg,,0,P02807.jpg +,P03452.jpg,,0,P02807.jpg +,P03454.jpg,,0,P02807.jpg +,P03457.jpg,,0,P02807.jpg +,P03458.jpg,,0,P02807.jpg +,P03460.jpg,,0,P02807.jpg +,P03463.jpg,,0,P02807.jpg +,P03466.jpg,,0,P02807.jpg +,P03468.jpg,,0,P02807.jpg +,P03542.jpg,,0,P00842.jpg +,P03545.jpg,,0,P00842.jpg +,P03550.jpg,,0,P00842.jpg +,P03552.jpg,,0,P00842.jpg +,P03555.jpg,,0,P00842.jpg +,P03558.jpg,,0,P00842.jpg +,P03563.jpg,,0,P00842.jpg +,P03566.jpg,,0,P00842.jpg +,P03569.jpg,,0,P00842.jpg +,P03572.jpg,,0,P00842.jpg +,P03575.jpg,,0,P03703.jpg +,P03576.jpg,,0,P03703.jpg +,P03577.jpg,,0,P03703.jpg +,P03578.jpg,,0,P03703.jpg +,P03579.jpg,,0,P06384.jpg +,P03580.jpg,,0,P03703.jpg +,P03581.jpg,,0,P06384.jpg +,P03582.jpg,,0,P06384.jpg +,P03583.jpg,,0,P06384.jpg +,P03584.jpg,,0,P06384.jpg +,P03585.jpg,,0,P03703.jpg +,P03586.jpg,,0,P03703.jpg +,P03588.jpg,,0,P06384.jpg +,P03590.jpg,,0,P06384.jpg +,P03591.jpg,,0,P06384.jpg +,P03592.jpg,,0,P06384.jpg +,P03595.jpg,,0,P03703.jpg +,P03596.jpg,,0,P04055.jpg +,P03598.jpg,,0,P06384.jpg +,P03599.jpg,,0,P03703.jpg +,P03601.jpg,,0,P06384.jpg +,P03602.jpg,,0,P04055.jpg +,P03606.jpg,,0,P06384.jpg +,P03608.jpg,,0,P06384.jpg +,P03609.jpg,,0,P03703.jpg +,P03610.jpg,,0,P03703.jpg +,P03611.jpg,,0,P06384.jpg +,P03612.jpg,,0,P03703.jpg +,P03613.jpg,,0,P06384.jpg +,P03614.jpg,,0,P06384.jpg +,P03616.jpg,,0,P04055.jpg +,P03617.jpg,,0,P02468.jpg +,P03618.jpg,,0,P02468.jpg +,P03652.jpg,,0,P03029.jpg +,P03653.jpg,,0,P03029.jpg +,P03655.jpg,,0,P03029.jpg +,P03656.jpg,,0,P03029.jpg +,P03657.jpg,,0,P03029.jpg +,P03658.jpg,,0,P03029.jpg +,P03659.jpg,,0,P03694.jpg +,P03660.jpg,,0,P03029.jpg +,P03661.jpg,,0, +,P03666.jpg,,0,P03029.jpg +,P03667.jpg,,0,P02435.jpg +,P03668.jpg,,0,P03694.jpg +,P03670.jpg,,0,P02435.jpg +,P03671.jpg,,0,P03694.jpg +,P03672.jpg,,0,P03029.jpg +,P03673.jpg,,0,P03029.jpg +,P03674.jpg,,0,P03694.jpg +,P03675.jpg,,0,P03694.jpg +,P03678.jpg,,0,P03164.jpg +,P03679.jpg,,0,P00213.jpg +,P03680.jpg,,0,P03029.jpg +,P03681.jpg,,0,P03736.jpg +,P03682.jpg,,0,P03731.jpg +,P03683.jpg,,0,P03164.jpg +,P03684.jpg,,0,P03029.jpg +,P03685.jpg,,0,P03029.jpg +,P03686.jpg,,0,P02435.jpg +,P03687.jpg,,0,P03164.jpg +,P03688.jpg,,0,P03731.jpg +,P03689.jpg,,0,P03731.jpg +,P03690.jpg,,0,P02794.jpg +,P03691.jpg,,0,P03029.jpg +,P03692.jpg,,0,P03029.jpg +,P03693.jpg,,0,P03029.jpg +,P03695.jpg,,0,P02794.jpg +,P03696.jpg,,0,P03029.jpg +,P03700.jpg,,0,P02794.jpg +,P03701.jpg,,0,P03029.jpg +,P03702.jpg,,0,P02794.jpg +,P03709.jpg,,0,P02794.jpg +,P03714.jpg,,0,P03731.jpg +,P03716.jpg,,0,P02794.jpg +,P03717.jpg,,0,P03694.jpg +,P03718.jpg,,0,P02794.jpg +,P03720.jpg,,0,P03715.jpg +,P03721.jpg,,0,P03715.jpg +,P03724.jpg,,0,P03715.jpg +,P03726.jpg,,0,P03715.jpg +,P03727.jpg,,0,P03715.jpg +,P03728.jpg,,0,P03694.jpg +,P03729.jpg,,0,P03715.jpg +,P03730.jpg,,0,P03715.jpg +,P03732.jpg,,0,P03715.jpg +,P03733.jpg,,0,P03715.jpg +,P03734.jpg,,0,P03715.jpg +,P03735.jpg,,0,P03715.jpg +,P03737.jpg,,0,P03715.jpg +,P03739.jpg,,0,P03715.jpg +,P03741.jpg,,0,P03715.jpg +,P03742.jpg,,0,P03715.jpg +,P03744.jpg,,0,P03029.jpg +,P03746.jpg,,0,P03029.jpg +,P03747.jpg,,0,P03029.jpg +,P03748.jpg,,0,P03029.jpg +,P03749.jpg,,0,P03755.jpg +,P03750.jpg,,0,P03755.jpg +,P03752.jpg,,0,P03755.jpg +,P03753.jpg,,0,P03755.jpg +,P03754.jpg,,0,P02468.jpg +,P03758.jpg,,0,P04391.jpg +,P03771.jpg,,0,P04391.jpg +,P04050.jpg,,0,P04391.jpg +,P04051.jpg,,0,P04391.jpg +,P04052.jpg,,0,P04391.jpg +,P04053.jpg,,0,P04391.jpg +,P04054.jpg,,0,P04055.jpg +,P04115.jpg,,0,P04114.jpg +,P04116.jpg,,0,P04114.jpg +,P04227.jpg,,0,P02458.jpg +,P04233.jpg,,0,P04232.jpg +,P04234.jpg,,0,P04232.jpg +,P04256.jpg,,0,P04232.jpg +,P04280.jpg,,0,P04671.jpg +,P04373.jpg,,0,P04232.jpg +,P04386.jpg,,0,P04385.jpg +,P04387.jpg,,0,P04385.jpg +,P04389.jpg,,0,P04385.jpg +,P04392.jpg,,0,P05506.jpg +,P04412.jpg,,0,P05506.jpg +,P04415.jpg,,0,P04232.jpg +,P04428.jpg,,0,P05506.jpg +,P04978.jpg,,0,P05506.jpg +,P05019.jpg,,0,P05506.jpg +,P05081.jpg,,0,P05506.jpg +,P05093.jpg,,0,P04232.jpg +,P05249.jpg,,0,P04671.jpg +,P05464.jpg,,0,P04232.jpg +,P05654.jpg,,0,P02458.jpg +,P06072.jpg,,0,P02458.jpg +,P06209.jpg,,0,P07251.jpg +,P06378.jpg,,0,P06384.jpg +,P06379.jpg,,0,P06384.jpg +,P06380.jpg,,0,P06384.jpg +,P06381.jpg,,0,P06384.jpg +,P06382.jpg,,0,P06384.jpg +,P06383.jpg,,0,P06384.jpg +,P06385.jpg,,0,P06384.jpg +,P07101.jpg,,0,P07251.jpg +,P07102.jpg,,0,P07251.jpg +,P07208.jpg,,0,P05506.jpg +,P07250.jpg,,0,P04232.jpg +,P07252.jpg,,0,P04232.jpg +,P07253.jpg,,0,P04232.jpg +,P07254.jpg,,0,P04232.jpg +,P07255.jpg,,0,P04232.jpg +,P07256.jpg,,0,P04232.jpg +,P08160.jpg,,0,P07251.jpg +,P08216.jpg,1,0,P04385.jpg +,P08217.jpg,1,0,P04385.jpg +,P08218.jpg,1,0,P04385.jpg +,P08830.jpg,,0,P08924.jpg +,P08835.jpg,,0,P08924.jpg +,P08836.jpg,,0,P08924.jpg +,P08837.jpg,,0,P08924.jpg +,P08844.jpg,,0, +,P08845.jpg,,0,P08927.jpg +,P08852.jpg,1,0, +,P08853.jpg,,0,P08927.jpg +,P08854.jpg,,0, +,P08856.jpg,,0,P08924.jpg +,P08857.jpg,1,0, +,P08858.jpg,,0,P08924.jpg +,P08861.jpg,,0,P08924.jpg +,P08862.jpg,,0,P08924.jpg +,P08863.jpg,,0, +,P08864.jpg,,0,P02468.jpg +,P08867.jpg,,0, +,P08868.jpg,1,0, +,P08872.jpg,,0,P02468.jpg +,P08873.jpg,,0,P08924.jpg +,P08876.jpg,,0,P08924.jpg +,P08881.jpg,,0,P08924.jpg +,P08886.jpg,,0,P02468.jpg +,P08887.jpg,,0,P08927.jpg +,P08888.jpg,,0,P08927.jpg +,P08889.jpg,1,0, +,P08895.jpg,,0, +,P08896.jpg,,0,P08927.jpg +,P08903.jpg,1,0, +,P08904.jpg,,0,P08927.jpg +,P08905.jpg,,0,P02468.jpg +,P08906.jpg,,0, +,P08907.jpg,,0,P08924.jpg +,P08908.jpg,1,0,P08927.jpg +,P08909.jpg,,0,P08924.jpg +,P08912.jpg,,0,P08924.jpg +,P08913.jpg,,0,P08924.jpg +,P08914.jpg,,0, +,P08915.jpg,,0,P02468.jpg +,P08919.jpg,1,0, +,P08923.jpg,,0,P02468.jpg +,P08929.jpg,,0, diff --git a/data/dataset_wrap.py b/data/dataset_wrap.py new file mode 100644 index 0000000..b92fe77 --- /dev/null +++ b/data/dataset_wrap.py @@ -0,0 +1,449 @@ +import os +import pathlib +import pickle +import shutil +import sqlite3 +from collections import defaultdict + +import pandas as pd +import ray +import threading +from voc_tools.constants import VOC_IMAGES +from voc_tools.reader import from_file, list_dir +from voc_tools.utils import VOCDataset, Dataset + + +def generate_class_id_pickle(dataset_path, classes): + """ + Generate and save CLASS_IDS into a pickle file + + Args: + dataset_path: VOC dataset path + classes: a list of classes to add to dataset + """ + dataset_path = pathlib.Path(dataset_path) + assert os.path.exists(str(dataset_path)) + # categorical encoding of the classes + unique = list(set(classes)) + class_id = list(map(lambda x: unique.index(x) + 1, classes)) + # save as pickle file + pickle_class_info_path = str(dataset_path / "train" / "class_info.pickle") + with open(pickle_class_info_path, 'wb') as fpp: + pickle.dump(class_id, fpp) + print("'{}' is created with {} entries".format(pickle_class_info_path, len(class_id))) + + +def get_embedding_model(fasttext_model_path=None, emb_dim=300): + """ + Args: + fasttext_model_path: Pretrained fasttext model (*.bin) file path See: https://fasttext.cc/docs/en/crawl-vectors.html + emb_dim: Final embedding dimension + """ + import fasttext + import fasttext.util + model = None + model_name = "" + if os.path.isfile(fasttext_model_path): + model_name = pathlib.Path(fasttext_model_path).name + print("Loading fasttext model:{}...".format(fasttext_model_path), end="") + model = fasttext.load_model(fasttext_model_path) + print("Loaded") + if emb_dim != model.get_dimension(): + fasttext.util.reduce_model(model, emb_dim) + assert model is not None, "A fasttext model has to be initialised" + return model, model_name, emb_dim + + +def generate_text_embedding_pickle(dataset_path, embeddings, model_name, emb_dim, mode="train"): + """ + Generate and save caption embedding into a pickle file. + Args: + dataset_path: VOC dataset path + embeddings: Prepared caption embeddings + model_name: Model name which is used to prepare the embeddings + emb_dim: Final embedding dimension + mode: Generate embeddings for training or testing + """ + assert mode in ("train", "test"), mode + dataset_path = pathlib.Path(dataset_path) + assert os.path.exists(str(dataset_path)) + # save as pickle file + pickle_path = str(dataset_path / mode / "embeddings_{}_{}D.pickle".format(model_name, emb_dim)) + with open(pickle_path, 'wb') as fpp: + pickle.dump(embeddings, fpp) + print("'{}' is created with {} entries".format(pickle_path, len(embeddings))) + + +def generate_filename_pickle(dataset_path, filenames): + """ + Generate a list of 'filenames' per 'caption', then save it as pickle format. + Note: This is not a unique filename list. If, for a certain image, we have multiple + captions, then multiple entries with same 'filename' will be created. + + Args: + dataset_path: the path to the dataset + """ + dataset_path = pathlib.Path(dataset_path) + assert os.path.exists(str(dataset_path)) + + pickle_filenames_path = str(dataset_path / "train" / "filenames.pickle") + + # save as pickle file + with open(pickle_filenames_path, 'wb') as fpp: + pickle.dump(filenames, fpp) + print("'{}' is created with {} entries".format(pickle_filenames_path, len(filenames))) + + +STOP_WORDS = ['i', 'me', 'my', 'myself', 'we', 'our', 'ours', 'ourselves', 'you', "you're", "you've", "you'll", "you'd", + 'your', 'yours', 'yourself', 'yourselves', 'he', 'him', 'his', 'himself', 'she', "she's", 'her', 'hers', + 'herself', 'it', "it's", 'its', 'itself', 'they', 'them', 'their', 'theirs', 'themselves', 'what', + 'which', 'who', 'whom', 'this', 'that', "that'll", 'these', 'those', 'am', 'is', 'are', 'was', 'were', + 'be', 'been', 'being', 'have', 'has', 'had', 'having', 'do', 'does', 'did', 'doing', 'a', 'an', 'the', + 'and', 'but', 'if', 'or', 'because', 'as', 'until', 'while', 'of', 'at', 'by', 'for', 'with', 'about', + 'against', 'between', 'into', 'through', 'during', 'before', 'after', 'above', 'below', 'to', 'from', + 'up', 'down', 'in', 'out', 'on', 'off', 'over', 'under', 'again', 'further', 'then', 'once', 'here', + 'there', 'when', 'where', 'why', 'how', 'all', 'any', 'both', 'each', 'few', 'more', 'most', 'other', + 'some', 'such', 'no', 'nor', 'not', 'only', 'own', 'same', 'so', 'than', 'too', 'very', 's', 't', 'can', + 'will', 'just', 'don', "don't", 'should', "should've", 'now', 'd', 'll', 'm', 'o', 're', 've', 'y', 'ain', + 'aren', "aren't", 'couldn', "couldn't", 'didn', "didn't", 'doesn', "doesn't", 'hadn', "hadn't", 'hasn', + "hasn't", 'haven', "haven't", 'isn', "isn't", 'ma', 'mightn', "mightn't", 'mustn', "mustn't", 'needn', + "needn't", 'shan', "shan't", 'shouldn', "shouldn't", 'wasn', "wasn't", 'weren', "weren't", 'won', "won't", + 'wouldn', "wouldn't"] + + +class DatasetWrap: + def __init__(self, dataset_path, bulk=False, class_ids=False, fasttext_model_path=None, + embedding_dimension=300, test_captions=None, emb_model=None, emb_model_name=None) -> None: + dataset_path = pathlib.Path(dataset_path) + assert os.path.exists(str(dataset_path)) + self.dataset_path = pathlib.Path(dataset_path) + self.is_bulk = bulk + self.class_ids = class_ids + self.embedding_dim = embedding_dimension + self.test_captions = test_captions + if fasttext_model_path is not None: + # loading embedding + self.emb_model, self.emb_model_name, _ = get_embedding_model(fasttext_model_path, embedding_dimension) + else: + self.emb_model, self.emb_model_name = emb_model, emb_model_name + self.voc_data = VOCDataset(dataset_path, caption_support=True) + + def _prepare_classes(self): + """ + Each image typically contains one or many captions. In two ways we can save the 'class_ids' + into the pickle file, 'class_ids' per caption and 'class_ids' per image. 'bulk' parameter + controls this action. + """ + dataset_path = self.dataset_path + if self.is_bulk: + # 'class_ids per image' + self.classes = [annotations[0].class_name for annotations, jpeg in self.voc_data.train.fetch(bulk=True)] + else: + # 'class_ids per caption' + self.classes = list( + map(lambda caption: + list(from_file(str(dataset_path / "train" / Dataset.CAPTION_DIR / caption.filename)))[ + 0].class_name, + self.voc_data.train.caption.fetch(bulk=False))) + print("Class_id is prepared") + + def _prepare_filenames(self): + """ + Each image typically contains one or many captions. In two ways we can save the filenames + into the pickle file, filename per caption and filename per image. 'bulk' parameter + controls this action. + """ + dataset_path = self.dataset_path + + if self.is_bulk: + + mylist = [os.path.basename(file) for file in list_dir(str(dataset_path / "train"), dir_flag=VOC_IMAGES)] + else: + # read the filenames from captions + mylist = [caption.filename.replace(".txt", ".jpg") for caption in + self.voc_data.train.caption.fetch(bulk=False)] + self.filenames = list(map(lambda x: os.path.join("train", Dataset.IMAGE_DIR, x), mylist)) # fill path names + print("Filenames is prepared") + + @staticmethod + def clean(text): + import re + # remove punctuation, space, linefeed etc. + text = text.strip().lower() + text = " ".join(filter(lambda word: word not in STOP_WORDS, text.split(" "))) + text = re.sub(r'[^\w\s\']', ' ', text) + text = re.sub(r'[\s\n]+', ' ', text) + return text.strip() + + def create_fasttext_data(self, text): + with open("./temp_text_data.txt", "w", encoding="utf-8") as fp: + fp.write(self.clean(text)) + return "./temp_text_data.txt" + + def train_fasttext_model(self, caption_data, fasttext_cfg): + assert fasttext_cfg, "'fasttext_cfg' is required to train a fasttext model" + keys = ("epoch", "lr", "algorithm") + assert all(map(lambda x: x in keys, + fasttext_cfg.keys())), "The following keys are required:{} in 'fasttext_cfg'".format(keys) + # train embedding model + import fasttext + data_path = self.create_fasttext_data(caption_data) + model = fasttext.train_unsupervised(data_path, fasttext_cfg.algorithm, dim=self.embedding_dim, thread=4, + epoch=fasttext_cfg.epoch, lr=fasttext_cfg.lr) + self.emb_model = model + self.emb_model_name = "fasttext_{}_{}".format(fasttext_cfg.algorithm, self.embedding_dim) + # remove temporary files + os.remove(data_path) + print("Fasttext model is trained") + + def _prepare_embeddings(self, model, fasttext_cfg=None): + """ + Each image typically contains one or many captions. In two ways we can save the caption + embeddings into the pickle file. In as single instance or in bulk. Let, say we have 3 captions per image, and we + have 2 images. If we want to store the embeddings as bulk, then it should look like: + [[emb11, emb12, emb13], [emb21, emb22, emb23]]. If we want to store the embeddings as single instance, then it will be: + [[emb11], [emb12], [emb13], [emb21], [emb22], [emb23]]. + """ + dataset_path = self.dataset_path + mydata = VOCDataset(dataset_path, caption_support=True) + if model is None: + # get caption data + caption_data = " ".join( + set(list(map(lambda caption: caption.captions.strip().strip(".").strip(), + mydata.train.caption.fetch(bulk=False))))) + # train model + self.train_fasttext_model(caption_data, fasttext_cfg) + model = self.emb_model + + if self.is_bulk: + self.embeddings = [list(map(lambda cap: model.get_word_vector(cap.captions), caption_list))[:4] for caption_list + in mydata.train.caption.fetch(bulk=True)] + else: + self.embeddings = [[model.get_word_vector(caption.captions)] for caption in + mydata.train.caption.fetch(bulk=False)] + print("Text embeddings is prepared for training") + if self.test_captions is not None: + self.test_embeddings = list(map(lambda cap: model.get_word_vector(cap), self.test_captions)) + print("Text embeddings is prepared for testing") + + def prepare_dataset(self, fasttext_cfg=None): + if self.class_ids: + self._prepare_classes() + self._prepare_filenames() + self._prepare_embeddings(self.emb_model, fasttext_cfg) + generate_filename_pickle(str(self.dataset_path), self.filenames) + if self.class_ids: + generate_class_id_pickle(str(self.dataset_path), self.classes) + generate_text_embedding_pickle(str(self.dataset_path), self.embeddings, self.emb_model_name, self.embedding_dim) + if self.test_captions is not None: + generate_text_embedding_pickle(str(self.dataset_path), self.test_embeddings, self.emb_model_name, + self.embedding_dim, mode="test") + + +class Caption: + def __init__(self, items): + self.idx = items[0] + self.file_id = items[1] + self.filename = self.file_id.replace(".jpg", ".txt") + self.caption = items[2] + self.author = items[3] + self.is_occluded = items[4] + self.is_error = items[5] + + +def check_grammar(text): + # Create a LanguageTool instance + try: + from language_tool_python import LanguageTool + tool = LanguageTool('en-US') + + # Check grammar in the text + matches = tool.check(text) + return matches + except: + return [] + + +class SQLiteDataWrap: + # create locks + file_locks = defaultdict(lambda: threading.Lock()) + + def __init__(self, dbpath): + assert os.path.isfile(dbpath), dbpath + conn = sqlite3.connect(dbpath) + self.conn = conn + self.dbpath = dbpath + self.image_path_dict = None + self.dataframe = pd.read_sql_query("SELECT * FROM caption", conn) + self.dataframe['caption'] = self.dataframe['caption'].apply(lambda x: x.replace("\n", " ")) + # this is a tricky approach to create/use locks during runtime instead of running an additional loop to + + def close(self): + self.conn.commit() + self.conn.close() + + def get_path(self, file_id, image_paths): + if self.image_path_dict is None: + self.image_path_dict = defaultdict(lambda: None) + filepath = self.image_path_dict[file_id] + if filepath is None: + filtered = list(filter(lambda fname: file_id in fname, image_paths)) + if len(filtered) > 0: + filepath = filtered[0] + self.image_path_dict[file_id] = filepath + return filepath + + @staticmethod + @ray.remote + def file_writer(filename, caption): + with SQLiteDataWrap.file_locks[filename]: + with open(filename, 'a+') as fp: + fp.seek(0) + lines = fp.readlines() + if caption + "\n" in lines: + # statistics[caption.filename]['duplicate'] += 1 + # statistics["caption"]['duplicate'] += 1 + pass + elif len(caption.split(" ")) < 2: + # statistics[caption.filename]['faulty'] += 1 + # statistics["caption"]['faulty'] += 1 + pass + else: + fp.write(caption.replace("\n", " ").strip() + "\n") + # check grammar + # errors = check_grammar(caption.caption) + # save statistics + # statistics[caption.filename]['caption'] += 1 + # statistics[caption.filename]['grammar'] += len(errors) > 0 + # statistics["caption"]['total'] += 1 + # statistics['grammar']['error-sentence'] += len(errors) > 0 + # statistics['grammar']['total-error'] += len(errors) + + def export_fast(self, data_root, clean=False, copy_images=False, image_paths=()): + data_root = pathlib.Path(data_root) + print("Initializing Ray...", end="") + ray.init() + print("DONE") + + # defining paths + caption_root = data_root / "train" / Dataset.CAPTION_DIR + image_root = data_root / "train" / Dataset.IMAGE_DIR + if clean: + print("Cleaning previous data...", end="") + # deleting directories + shutil.rmtree(caption_root, ignore_errors=True) + shutil.rmtree(image_root, ignore_errors=True) + print("Done") + # create directories + os.makedirs(caption_root, exist_ok=True) + os.makedirs(image_root, exist_ok=True) + os.makedirs(data_root / "test" / Dataset.IMAGE_DIR, exist_ok=True) + os.makedirs(data_root / "test" / Dataset.IMAGE_DIR, exist_ok=True) + + statistics = defaultdict(lambda: defaultdict(lambda: 0)) + # taking DB cursor and running queries + print("Querying dataset form SQLITE...") + curr = self.conn.cursor() + count = curr.execute("SELECT count(*) FROM caption").fetchone()[0] + dataset = curr.execute("SELECT * FROM caption") + print("Creating dataset form SQLITE...", ) + task_counter = 0 + for idx, data in enumerate(dataset): + print("\r{}/{} {}% ".format(idx, (count - 1), round((idx / (count - 1) * 100.), 2)), end="\b") + caption = Caption(data) + if copy_images: + # copying images + filepath = self.get_path(caption.file_id, image_paths) + if not os.path.isfile(image_root / caption.file_id): + shutil.copyfile(filepath, image_root / caption.file_id) + # write to file using ray + self.file_writer.remote(caption_root / caption.filename, caption.caption) + task_counter += 1 + # # creating the caption files + # with open(caption_root / caption.filename, "a+") as fp: + # fp.seek(0) + # lines = fp.readlines() + # if caption.caption + "\n" in lines: + # statistics[caption.filename]['duplicate'] += 1 + # statistics["caption"]['duplicate'] += 1 + # elif len(caption.caption.split(" ")) < 2: + # statistics[caption.filename]['faulty'] += 1 + # statistics["caption"]['faulty'] += 1 + # else: + # fp.write(caption.caption.replace("\n", " ") + "\n") + # # check grammar + # errors = check_grammar(caption.caption) + # # save statistics + # statistics[caption.filename]['caption'] += 1 + # statistics[caption.filename]['grammar'] += len(errors) > 0 + # statistics["caption"]['total'] += 1 + # statistics['grammar']['error-sentence'] += len(errors) > 0 + # statistics['grammar']['total-error'] += len(errors) + print("Waiting for Ray...", end="") + ray.wait([], num_returns=task_counter) + print("Shutting-down Ray") + ray.shutdown() + print("Done") + return statistics + + def check(self, data_root): + """Check if all files contain all texts""" + df = pd.read_sql_query("SELECT * FROM captions", self.conn) + caption_count_per_file = df['file_id'].value_counts() + + def export(self, data_root, clean=False, copy_images=False, image_paths=()): + data_root = pathlib.Path(data_root) + + # defining paths + caption_root = data_root / "train" / Dataset.CAPTION_DIR + image_root = data_root / "train" / Dataset.IMAGE_DIR + if clean: + print("Cleaning previous data...", end="") + # deleting directories + shutil.rmtree(caption_root, ignore_errors=True) + shutil.rmtree(image_root, ignore_errors=True) + print("Done") + # create directories + os.makedirs(caption_root, exist_ok=True) + os.makedirs(image_root, exist_ok=True) + os.makedirs(data_root / "test" / Dataset.IMAGE_DIR, exist_ok=True) + os.makedirs(data_root / "test" / Dataset.IMAGE_DIR, exist_ok=True) + + statistics = defaultdict(lambda: defaultdict(lambda: 0)) + # taking DB cursor and running queries + print("Querying dataset form SQLITE...") + curr = self.conn.cursor() + count = curr.execute("SELECT count(*) FROM caption").fetchone()[0] + dataset = curr.execute("SELECT * FROM caption") + print("Creating dataset form SQLITE...", ) + for idx, data in enumerate(dataset): + print("\r{}/{} {}% ".format(idx, (count - 1), round((idx / (count - 1) * 100.), 2)), end="\b") + caption = Caption(data) + if copy_images: + # copying images + filepath = self.get_path(caption.file_id, image_paths) + if not os.path.isfile(image_root / caption.file_id): + shutil.copyfile(filepath, image_root / caption.file_id) + + # creating the caption files + with open(caption_root / caption.filename, "a+") as fp: + fp.seek(0) + lines = fp.readlines() + if caption.caption + "\n" in lines: + statistics[caption.filename]['duplicate'] += 1 + statistics["caption"]['duplicate'] += 1 + elif len(caption.caption.split(" ")) < 2: + statistics[caption.filename]['faulty'] += 1 + statistics["caption"]['faulty'] += 1 + else: + fp.write(caption.caption.replace("\n", " ") + "\n") + # check grammar + errors = check_grammar(caption.caption) + # save statistics + statistics[caption.filename]['caption'] += 1 + statistics[caption.filename]['grammar'] += len(errors) > 0 + statistics["caption"]['total'] += 1 + statistics['grammar']['error-sentence'] += len(errors) > 0 + statistics['grammar']['total-error'] += len(errors) + print("Done") + return statistics diff --git a/data/fasttext_model.ipynb b/data/fasttext_model.ipynb new file mode 100644 index 0000000..af1a9cc --- /dev/null +++ b/data/fasttext_model.ipynb @@ -0,0 +1,329 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/home/soumen/anaconda3/lib/python3.8/site-packages/pandas/core/computation/expressions.py:20: UserWarning: Pandas requires version '2.7.3' or newer of 'numexpr' (version '2.7.1' currently installed).\n", + " from pandas.core.computation.check import NUMEXPR_INSTALLED\n" + ] + } + ], + "source": [ + "import sqlite3\n", + "import pandas as pd" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "total 11264\r\n", + "drwxrwxrwx 1 soumen soumen 4096 May 23 12:40 .\r\n", + "drwxrwxrwx 1 soumen soumen 4096 May 23 11:44 ..\r\n", + "-rwxrwxrwx 1 soumen soumen 55 May 9 13:41 .gitignore\r\n", + "drwxrwxrwx 1 soumen soumen 4096 May 23 11:56 .ipynb_checkpoints\r\n", + "-rwxrwxrwx 1 soumen soumen 675 May 15 22:37 README.md\r\n", + "-rwxrwxrwx 1 soumen soumen 49172 May 22 17:28 bulk_upload_soumen_2.csv\r\n", + "-rwxrwxrwx 1 soumen soumen 114691 May 22 17:53 caption.csv\r\n", + "-rwxrwxrwx 1 soumen soumen 108253 May 23 11:43 caption_analysis.ipynb\r\n", + "-rwxrwxrwx 1 soumen soumen 7709 May 18 12:50 caption_soumen.csv\r\n", + "-rwxrwxrwx 1 soumen soumen 12010 May 17 23:03 caption_soumen.xlsx\r\n", + "-rwxrwxrwx 1 soumen soumen 7021 May 18 13:54 caption_soumen_clean.csv\r\n", + "-rwxrwxrwx 1 soumen soumen 7111 May 22 17:57 copy_files.py\r\n", + "-rwxrwxrwx 1 soumen soumen 20808 May 18 13:31 data_images_500.csv\r\n", + "-rwxrwxrwx 1 soumen soumen 98942 May 17 16:18 data_images_all.csv\r\n", + "-rwxrwxrwx 1 soumen soumen 41772 May 18 15:20 dataset_easy_lookup-backup.csv\r\n", + "-rwxrwxrwx 1 soumen soumen 5553513 May 17 22:58 dataset_easy_lookup-backup.xlsx\r\n", + "-rwxrwxrwx 1 soumen soumen 1341862 May 19 17:35 dataset_easy_lookup_500.xlsx\r\n", + "-rwxrwxrwx 1 soumen soumen 1348000 May 18 15:24 dataset_easy_lookup_500_1.xlsx\r\n", + "-rwxrwxrwx 1 soumen soumen 21294 May 19 12:03 dataset_easy_lookup_500_prepare.csv\r\n", + "-rwxrwxrwx 1 soumen soumen 1343089 May 19 17:15 dataset_easy_lookup_500_prepare.xlsx\r\n", + "-rwxrwxrwx 1 soumen soumen 84664 May 18 13:07 dataset_easy_lookup_filtered.csv\r\n", + "-rwxrwxrwx 1 soumen soumen 91698 May 23 12:40 fasttext_model.ipynb\r\n", + "-rwxrwxrwx 1 soumen soumen 15338 May 22 17:53 generate_custom_dataset.py\r\n", + "-rwxrwxrwx 1 soumen soumen 6011 May 18 13:31 sixray_500_filenames.csv\r\n", + "-rwxrwxrwx 1 soumen soumen 10275 May 18 13:31 sixray_500_ll.csv\r\n", + "drwxrwxrwx 1 soumen soumen 4096 May 12 18:49 sixray_sample\r\n", + "-rwxrwxrwx 1 soumen soumen 556206 May 15 15:04 sixray_sample.zip\r\n", + "-rwxrwxrwx 1 soumen soumen 41609 May 23 12:32 temp_text_data.txt\r\n", + "-rwxrwxrwx 1 soumen soumen 192512 May 22 09:50 tip_gai.db\r\n", + "-rwxrwxrwx 1 soumen soumen 204800 May 22 23:12 tip_gai_20230522_2136.db\r\n", + "-rwxrwxrwx 1 soumen soumen 204800 May 22 17:45 tip_gai_22052023_1743.db\r\n", + "-rwxrwxrwx 1 soumen soumen 58 May 17 23:04 todo_anshul.txt\r\n" + ] + } + ], + "source": [ + "!ls -al" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [], + "source": [ + "# load the caption form sqlite\n", + "dbpath = 'tip_gai_20230522_2136.db'\n", + "conn = sqlite3.connect(dbpath)\n", + "df = pd.read_sql_query(\"SELECT caption FROM caption\", conn)" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [], + "source": [ + "# pre-cleaning the captions\n", + "df['caption'] = df['caption'].apply(lambda x: x.strip().strip(\".\").strip())" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [], + "source": [ + "import re\n", + "def clean(text):\n", + " # remove punctuation, space, linefeed etc.\n", + " text = re.sub(r'[^\\w\\s\\']',' ', text)\n", + " text = re.sub(r'[ \\n]+', ' ', text)\n", + " return text.strip().lower()\n", + "\n", + "def create_fasttext_data(text):\n", + " with open(\"./temp_text_data.txt\", \"w\", encoding=\"utf-8\") as fp:\n", + " fp.write(clean(text))\n", + " return \"./temp_text_data.txt\"" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "\"Two knives, one placed on top of other, in a bag pack hidden behind some wires and cluttered with other objects.A bag with knives.\\nTwo shrap knives in a backpack.Security discovered a concealed knife in the passenger's bag.Two knives are hidden inside a backpack.Two knives are hidden inside a backpack overlapping each other.A bag contains a sharp knife at the bottom with a few electronics items.Two knives are hidden inside a luggage scattered around.Two knives are hidden inside a luggage.A troll\"" + ] + }, + "execution_count": 13, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# create a blob of unique-cleaned captions\n", + "caption_data = \".\".join(df.caption.unique())\n", + "caption_data[:500]" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "'./temp_text_data.txt'" + ] + }, + "execution_count": 15, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "data_path = create_fasttext_data(caption_data)\n", + "data_path" + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Done\n" + ] + } + ], + "source": [ + "# train custom vector model\n", + "import fasttext\n", + "from easydict import EasyDict as edict\n", + "\n", + "cfg = edict()\n", + "cfg.dim=1024\n", + "cfg.algorithm = \"skipgram\" # \"cbow\"\n", + "cfg.epoch = 50\n", + "cfg.lr = 0.01\n", + "model = fasttext.train_unsupervised(data_path, cfg.algorithm, dim=cfg.dim, thread=4, epoch=cfg.epoch, lr=cfg.lr)\n", + "print(\"Done\")" + ] + }, + { + "cell_type": "code", + "execution_count": 24, + "metadata": {}, + "outputs": [ + { + "ename": "AttributeError", + "evalue": "'_FastText' object has no attribute 'save'", + "output_type": "error", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[0;31mAttributeError\u001b[0m Traceback (most recent call last)", + "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0mmodel\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0msave\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m\"fasttext_{}_{}.bin\"\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mformat\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mcfg\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0malgorithm\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mcfg\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mdim\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m", + "\u001b[0;31mAttributeError\u001b[0m: '_FastText' object has no attribute 'save'" + ] + } + ], + "source": [ + "model.save(\"fasttext_{}_{}.bin\".format(cfg.algorithm, cfg.dim))" + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "{'dim': 1024, 'algorithm': 'skipgram', 'epoch': 50, 'lr': 0.01}\n" + ] + }, + { + "data": { + "text/plain": [ + "[(0.9999958872795105, 'knifes'),\n", + " (0.9999924302101135, 'several'),\n", + " (0.9999924302101135, 'laptop'),\n", + " (0.9999923706054688, 'containing'),\n", + " (0.9999921917915344, 'highly'),\n", + " (0.9999920129776001, 'umbrella'),\n", + " (0.9999918341636658, 'backpack'),\n", + " (0.9999918341636658, 'toolbox'),\n", + " (0.9999916553497314, 'consist'),\n", + " (0.9999916553497314, 'consists')]" + ] + }, + "execution_count": 23, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "print(cfg)\n", + "model.get_nearest_neighbors('knife')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "```\n", + "{'dim': 300, 'algorithm': 'skipgram', 'epoch': 20, 'lr': 0.05}\n", + "[(0.9996108412742615, 'kitchen'),\n", + " (0.9994402527809143, 'two'),\n", + " (0.9993472695350647, 'containing'),\n", + " (0.9990079402923584, 'hidden'),\n", + " (0.998786211013794, 'umbrella'),\n", + " (0.9986904263496399, 'backpack'),\n", + " (0.9983470439910889, 'including'),\n", + " (0.9983364939689636, 'hand'),\n", + " (0.9982928037643433, 'toolbox'),\n", + " (0.9982638955116272, 'hiding')]\n", + " ```" + ] + }, + { + "cell_type": "code", + "execution_count": 33, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Warning : `load_model` does not return WordVectorModel or SupervisedModel any more, but a `FastText` object which is very similar.\n" + ] + }, + { + "data": { + "text/plain": [ + "[(0.8358478546142578, 'knive'),\n", + " (0.812025249004364, 'knives'),\n", + " (0.8031113147735596, 'knife.The'),\n", + " (0.7948669791221619, 'knife.I'),\n", + " (0.7896084189414978, 'knifes'),\n", + " (0.7808818221092224, 'knife.'),\n", + " (0.7503802180290222, 'knife-'),\n", + " (0.738475501537323, 'kinfe'),\n", + " (0.7219622135162354, 'pocketknife'),\n", + " (0.7085967659950256, 'penknife')]" + ] + }, + "execution_count": 33, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# pretrained model\n", + "fasttext_model = \"/mnt/c/Users/dndlssardar/Downloads/Fasttext/cc.en.300.bin\"\n", + "pre_model = fasttext.load_model(fasttext_model)\n", + "pre_model.get_nearest_neighbors('knife')" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "base", + "language": "python", + "name": "base" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.8.5" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/data/generate_custom_dataset.py b/data/generate_custom_dataset.py new file mode 100644 index 0000000..22c0444 --- /dev/null +++ b/data/generate_custom_dataset.py @@ -0,0 +1,246 @@ +import argparse +import os +import pathlib +import sqlite3 +from pprint import pprint + +import pandas as pd +from tqdm import tqdm +from voc_tools.constants import VOC_IMAGES +from voc_tools.reader import list_dir +from voc_tools.utils import Dataset, VOCDataset + +from dataset_wrap import SQLiteDataWrap, DatasetWrap +from langchain_openai_tools import OpenAITextLoader, OpenAICredentialManager, OpenAITextEmbeddingDB, OpenAIModelProxy +from easydict import EasyDict as edict + + +def parse_args(): + parser = argparse.ArgumentParser(description='Train a GAN network') + parser.add_argument('--data_dir', dest='data_dir', help='Path to dataset directory.', + default='my_data', type=str, ) + parser.add_argument('--test_data_file', dest='test_data_file', help='A text file contains unseen captions to test', + default='', type=str, ) + parser.add_argument('--bulk', dest='bulk', default=False, action="store_true") + parser.add_argument('--class_id', dest='class_id', default=False, action="store_true") + parser.add_argument('--map-file', dest='map_file', type=str, default='data/dataset_500_to_2300_map_final.csv') + parser.add_argument('--fasttext_train_lr', dest='fasttext_train_lr', type=float, default=None) + parser.add_argument('--fasttext_train_algo', dest='fasttext_train_algo', type=str, default=None, + choices=['skipgram', 'cbow']) + parser.add_argument('--fasttext_train_epoch', dest='fasttext_train_epoch', type=int, default=None) + parser.add_argument('--fasttext_model', dest='fasttext_model', type=str, default=None) + parser.add_argument('--emb_dim', dest='emb_dim', type=int, default=300) + parser.add_argument('--openai_emb_db', dest='openai_emb_db', type=str, default=None) + parser.add_argument('--sqlite', dest='sqlite', + help='Path to SQLite3 database file.', + default='', type=str, ) + parser.add_argument('--clean', dest='clean', default=False, action="store_true", + help="Clean before generating new data while using sqlite") + parser.add_argument('--copy_images', dest='copy_images', default=False, action="store_true", + help="Copy images while generating new data using sqlite, --dataroot option is required") + parser.add_argument('--dataroot', dest="dataroot", type=str, + help="This is a path to a image dataset to copy images while creating dataset using sqlite." + "The dataset format is default to PascalVOC format.") + _args = parser.parse_args() + pprint(_args) + return _args + + +def generate_dataset(args): + # creating an object to generate compatible pickle files for StackGAN + # prepare fasttext training configuration + fasttext_cfg = edict() + fasttext_cfg.epoch = args.fasttext_train_epoch + fasttext_cfg.lr = args.fasttext_train_lr + fasttext_cfg.algorithm = args.fasttext_train_algo + # read the test captions + test_captions = None + if os.path.isfile(args.test_data_file): + with open(args.test_data_file) as fp: + test_captions = fp.readlines() + # load openai embedding DB + if args.openai_emb_db: + emb_model = OpenAIModelProxy(args.openai_emb_db) + emb_name = "openai" + args.emb_dim = emb_model.dim + else: + emb_model = None + emb_name = None + + # initialize dataset + vdw = DatasetWrap(args.data_dir, args.bulk, args.class_id, + fasttext_model_path=args.fasttext_model, + embedding_dimension=args.emb_dim, + test_captions=test_captions, emb_model=emb_model, + emb_model_name=emb_name) + vdw.prepare_dataset(fasttext_cfg) + + +def create_openai_embedding_database(generate=False): + from langchain.embeddings import OpenAIEmbeddings + from openai.error import RateLimitError + + args = parse_args() + + embedding_database = args.openai_emb_db + + test_captions = [] + if os.path.isfile(args.test_data_file): + with open(args.test_data_file) as fp: + test_captions = fp.readlines() + + class Data: + total_sentence = 0 + total_tokens = 0 + + emb_db = OpenAITextEmbeddingDB(embedding_database) + print("Items in DB: {}".format(len(emb_db.db))) + + # emb_db.query(DatasetWrap.clean("A quick brown fox jump over the lazy dog")) + + def caption_loader(additional_captions=()): + # if os.path.exists(args.sqlite): + # from_sqlite(generate=False) + + # initialize dataset + voc_data = VOCDataset(args.data_dir, caption_support=True) + unique_captions = list( + set(list(map(lambda c: DatasetWrap.clean(c.captions), voc_data.train.caption.fetch(bulk=False))))) + # add additional captions + unique_captions.extend(list(map(DatasetWrap.clean, additional_captions))) + unique_captions = list(filter(lambda txt: not emb_db.is_available(txt), unique_captions)) + Data.total_sentence = len(unique_captions) + Data.total_tokens = sum(map(lambda x: len(x), unique_captions)) + print("Unique captions cleaned:", Data.total_sentence) + print("Total tokens:", Data.total_tokens) + return [[ + "quick brown fox jump dog", "my name soumen sardar" + ]] + return unique_captions + + caption_loader = caption_loader(test_captions) + bulk_embedded = True + # rpm = 3 + # bulk_caption_loader = OpenAITextLoader(caption_loader, Data.total_tokens, Data.total_sentence, + # rpm=rpm, + # tpm=150000, auto_sleep=False) + # model = OpenAIEmbeddings(openai_api_key=key, model="ada", max_retries=1) + # embedding = model.embed_documents([""]) + cred_man = OpenAICredentialManager("./data/openai.apikey") + cm = iter(cred_man) + key, nickname = next(cm) + for caption in tqdm(caption_loader): + while True: + model = OpenAIEmbeddings(openai_api_key=key, model="ada", max_retries=1) + try: + if cred_man.is_limit_exhausted(nickname): + raise RateLimitError("Rate limit exhausted for {}".format(nickname)) + + if bulk_embedded: + embeddings = model.embed_documents(caption) + print(caption, embeddings) + else: + # single + embedding = model.embed_query(caption) + emb_db.append(caption, embedding) + emb_db.commit() + # time.sleep(60 / rpm) + + break + except RateLimitError: + cred_man.set_limit_exhausted(nickname) + key, nickname = next(cm) + + # For generating dataset + if generate: + Dataset.IMAGE_DIR = "JPEGImages" + Dataset.CAPTION_DIR = "captions" + # generate dataset + generate_dataset(args) + + +def generate_caption_embedding_with_openai(): + args = parse_args() + dataset = pathlib.Path(args.dataroot) + # For reading images + Dataset.IMAGE_DIR = "JPEGImages" + # reading filepaths + file_paths = list(list_dir(str(dataset / "train"), dir_flag=VOC_IMAGES, fullpath=True)) + file_paths.extend(list(list_dir(str(dataset / "test"), dir_flag=VOC_IMAGES, fullpath=True))) + # generating dataset form SQLIte + sqlite_data = SQLiteDataWrap(args.sqlite) + sqlite_data.export_fast(args.data_dir, clean=args.clean, copy_images=args.copy_images, image_paths=file_paths) + # For generating dataset + Dataset.IMAGE_DIR = "JPEGImages" + Dataset.CAPTION_DIR = "captions" + # generate dataset + generate_dataset(args) + + +def from_custom_dataset(): + args = parse_args() + Dataset.IMAGE_DIR = "JPEGImages" + Dataset.ANNO_DIR = "Annotations" + Dataset.CAPTION_DIR = "captions" + # generate dataset + generate_dataset(args) + + +def from_sqlite(generate=True): + args = parse_args() + dataset = pathlib.Path(args.dataroot) + # For reading images + Dataset.IMAGE_DIR = "JPEGImages" + Dataset.CAPTION_DIR = "captions" + # reading filepaths + file_paths = list(list_dir(str(dataset / "train"), dir_flag=VOC_IMAGES, fullpath=True)) + file_paths.extend(list(list_dir(str(dataset / "test"), dir_flag=VOC_IMAGES, fullpath=True))) + # generating dataset form SQLIte + sqlite_data = SQLiteDataWrap(args.sqlite) + sqlite_data.export_fast(args.data_dir, clean=args.clean, copy_images=args.copy_images, image_paths=file_paths) + + if generate: + # For generating dataset + Dataset.IMAGE_DIR = "JPEGImages" + Dataset.CAPTION_DIR = "captions" + # generate dataset + generate_dataset(args) + + +def create_class_labels(): + args = parse_args() + dataset = pathlib.Path(args.data_dir) + save_dir = dataset / "train" + conn = sqlite3.connect(args.sqlite) + dataframe = pd.read_sql_query("SELECT file, gun, knife FROM image", conn) + mapdf = pd.read_csv(args.map_file)[['File Name', 'Map File Name']] + mapdf.columns = ['mapped_file', 'file'] + mapdf = pd.merge(mapdf, dataframe, on="file", how="left") + mapdf = mapdf[["mapped_file", "gun", "knife"]] + + def labeler(rec): + if rec['gun']: + if rec['knife']: + return "gun-knife" + else: + return 'gun' + else: + return 'knife' + + with open(save_dir / "labels.csv", "w") as fp: + dataframe.apply(lambda x: fp.write("{},{}\n".format(x["file"], labeler(x))), axis=1) + mapdf.apply(lambda x: fp.write("{},{}\n".format(x["mapped_file"], labeler(x))), axis=1) + + +if __name__ == '__main__': + # create_class_labels() + # from_custom_dataset() + # create_openai_embedding_database(generate=True) + from_sqlite() + +""" UBUNTU +sqlite3 -header -csv "C:\\Users\\dndlssardar\\Downloads\\tip_gai_22052023_1743.db" "SELECT * FROM caption" > caption.csv +python data/generate_custom_dataset.py --data_dir data/sixray_sample --emb_dim 300 --fasttext_model /mnt/c/Users/dndlssardar/Downloads/Fasttext/cc.en.300.bin +python data/generate_custom_dataset.py --data_dir data/sixray_500 --fasttext_model /data/fasttext/cc.en.300.bin --sqlite /data/sixray_caption_db/ --clean --copy_images --dataroot /data/Sixray_easy/ +python data/generate_custom_dataset.py --data_dir data/sixray_500 --fasttext_model /mnt/c/Users/dndlssardar/Downloads/Fasttext/cc.en.300.bin --sqlite data/tip_gai.db --clean --copy_images --dataroot "/mnt/c/Users/dndlssardar/OneDrive - Smiths Group/Documents/Projects/Dataset/Sixray_easy" +""" diff --git a/data/langchain_openai_tools.py b/data/langchain_openai_tools.py new file mode 100644 index 0000000..ecbd081 --- /dev/null +++ b/data/langchain_openai_tools.py @@ -0,0 +1,1665 @@ +import csv +import os +import pickle +import time +from datetime import datetime + +import numpy as np +from numpy import ndarray + +from dataset_wrap import DatasetWrap + + +class OpenAITextEmbeddingDB: + # A quick brown fox jump over the lazy dog + arr1 = [-0.008165569044649601, 0.006291043478995562, -0.012001951225101948, -0.003452744334936142, + -0.013524028472602367, 0.01843958906829357, -0.020597944036126137, -0.00899522565305233, + -0.007635336834937334, -0.030216971412301064, 0.020173758268356323, 0.01786569133400917, + 0.020760131999850273, 0.0018838822143152356, 0.006917964667081833, -0.009038891643285751, + 0.030591251328587532, -0.005526886321604252, 0.011771144345402718, -0.00923850852996111, + -0.018489493057131767, 0.019662240520119667, -0.002724455436691642, -0.002885084366425872, + 0.0071674855425953865, 0.015083533711731434, 0.006004094611853361, -0.006000975612550974, + -0.007161247543990612, 0.0005236038123257458, 0.01847701705992222, -0.0011423374526202679, + -0.0338599756360054, -0.000905292690731585, -0.009020177647471428, -0.01576971635222435, + -0.008365185000002384, -0.0025248387828469276, 0.022743823006749153, -0.04478898644447327, + 0.014871440827846527, 0.02209506928920746, -0.020048998296260834, -0.013386791571974754, + 0.002119367476552725, 0.010904059745371342, 0.014746679924428463, -0.013074890710413456, + -0.02486474998295307, 0.011278340592980385, -0.0007470029522664845, 0.012026903219521046, + -0.008333995006978512, -0.007354625966399908, -0.010785537771880627, -0.0009949642699211836, + -0.00830280501395464, 0.004572468809783459, 0.013212127611041069, -0.005848144181072712, + 0.004048475064337254, 0.010311448015272617, -0.005096462555229664, -0.002464018063619733, + -0.0013076449977234006, -0.011328245513141155, 0.010267782025039196, -0.0007466130773536861, + -0.015981808304786682, 0.0012444850290194154, 0.01610656827688217, -0.0006600605556741357, + 0.0024780535604804754, 0.0058949291706085205, 0.0315394327044487, -0.006917964667081833, + -0.035107579082250595, 0.014734203927218914, 0.021072033792734146, 0.010411255992949009, + 0.028919462114572525, -0.03695403411984444, -0.0062380204908549786, 0.017229411751031876, + 0.022232305258512497, 0.0058949291706085205, -0.024228472262620926, 0.030067259445786476, + -0.01484648883342743, 0.00378024042584002, 0.00023918910301290452, 0.03036668337881565, + 0.005536243319511414, + -0.0033217458985745907, -0.016992367804050446, 0.0009707919089123607, -0.006843108218163252, + 0.01871406100690365, -0.012363756075501442, -0.03303655609488487, 0.006053999066352844, + -0.005214984994381666, -0.026249589398503304, 0.0002329510753042996, 0.008421327918767929, + -0.026249589398503304, -0.012020665220916271, 0.018165115267038345, 0.019138246774673462, + -0.007691479288041592, 0.012132950127124786, 0.013286983594298363, 0.01649332605302334, + -0.036280326545238495, -0.0002345105749554932, 0.0002649209345690906, 0.014921344816684723, + -0.008689562790095806, -0.009662693366408348, -0.009088795632123947, 0.012338804081082344, + 0.028595086187124252, 0.02350486069917679, -0.004142045509070158, -0.015557622537016869, + -0.009893500246107578, 0.0029537025839090347, -0.001486208406277001, -0.010361352004110813, + -0.002042951760813594, 0.0315643846988678, 0.023642096668481827, 0.024739988148212433, + -0.009275936521589756, + -0.0396987609565258, 0.025550931692123413, 0.007697717286646366, 0.003696027211844921, + -0.023454956710338593, + -0.019587384536862373, 0.006724586244672537, 0.021783167496323586, -0.007073915097862482, + 0.001193801173940301, 0.019362814724445343, 0.02548855170607567, 0.010305210016667843, + -0.004120212513953447, + 0.0025466717779636383, -0.014609443955123425, 0.014921344816684723, 0.0027587644290179014, + 0.03495786711573601, 0.0016000522300601006, 0.00869580078870058, 0.014310019090771675, + 0.004666039254516363, + 0.01670541800558567, -0.026000069454312325, -0.013998118229210377, 0.025700643658638, + 0.022606585174798965, + -0.004251210950314999, -0.011970761232078075, -0.0024016378447413445, 0.022631539031863213, + 0.027297576889395714, -0.00461301626637578, 0.013249555602669716, -0.008296567015349865, + 0.0025763025041669607, 0.03128990903496742, -0.013511552475392818, 0.0339098796248436, + -0.00505591556429863, + 0.01157152745872736, 0.009949642233550549, -0.009762502275407314, -0.030117163434624672, + 0.0004120992380194366, -0.003200104460120201, 0.015570099465548992, 0.035107579082250595, + 0.020760131999850273, 0.004447708372026682, 0.027971284464001656, 0.010473635978996754, + -0.03191371262073517, + -0.0014971249038353562, 0.00020254073024261743, 0.005062153562903404, 0.005305436439812183, + -0.011989475227892399, -0.013923261314630508, -0.6874797344207764, -0.021932879462838173, + 0.009600313380360603, -0.007597908843308687, 0.020523088052868843, 0.03178895264863968, + -0.01033016201108694, + -0.012326328083872795, 0.006044641602784395, 0.031464576721191406, -0.030192019417881966, + 0.0054208398796617985, 0.0037958354223519564, -0.0048375846818089485, -0.006749538239091635, + -0.0038582156412303448, 0.02896936610341072, -0.020061474293470383, -0.009076319634914398, + 0.01649332605302334, 0.0030176423024386168, 0.009918452240526676, -0.011584004387259483, + -0.0010238151298835874, -0.0016671109478920698, 0.00846499390900135, 0.0015602848725393414, + 0.0022940319031476974, 7.665942393941805e-05, 0.013124794699251652, 0.002007083036005497, + 0.013037462718784809, -0.014821536839008331, 0.005458267871290445, 0.05224965885281563, + -0.0004378310695756227, 0.0002906527661252767, 0.018901202827692032, 0.031364765018224716, + 0.05195023491978645, -0.033835023641586304, -0.00484694167971611, 0.014347447082400322, + 0.0019213103223592043, -0.019537480548024178, -0.0015150592662394047, 0.02346743270754814, + 0.014160306192934513, 0.00015058970893733203, -0.02033594623208046, 0.004778323695063591, + 0.020972223952412605, 0.020398326218128204, 0.004759609699249268, -0.018077783286571503, + 0.022369541227817535, 0.01775340549647808, 0.008284091018140316, 0.0068867746740579605, + -0.0010604634881019592, -0.007822477258741856, 0.003312388900667429, -0.013573932461440563, + 0.015270673669874668, -0.023854190483689308, -0.0026059329975396395, -0.009556647390127182, + 0.015333054587244987, 0.017578741535544395, -0.016293710097670555, 0.015707336366176605, + 0.02185802347958088, + -0.017453981563448906, 0.00747314840555191, 0.014347447082400322, 0.00674330024048686, + 0.0012873715022578835, + -0.007173723541200161, -0.016393518075346947, 0.010005785152316093, -0.01426011510193348, + -0.002663634717464447, -0.033360932022333145, 0.004154521506279707, 0.029717929661273956, + 0.015557622537016869, -0.033111412078142166, -0.010199163109064102, -0.003012963803485036, + -0.021870499476790428, 0.018888724967837334, 0.02909412793815136, -0.03538205102086067, + 0.003115891246125102, + -0.007735145278275013, 0.0040952605195343494, -0.012719323858618736, 0.041170936077833176, + 0.04241853952407837, -0.02525150589644909, 0.009076319634914398, -0.0034059591125696898, + -0.008390137925744057, -0.009643979370594025, 0.011758668348193169, 0.025750547647476196, + 0.019188150763511658, 0.00555183831602335, 0.024852273985743523, -0.0096502173691988, + -0.00805952213704586, + -0.018302351236343384, 0.02115936577320099, 0.009257222525775433, -0.0065686353482306, + -0.02276877500116825, + 0.012114236131310463, -0.005604861304163933, 0.012519706971943378, -0.022132497280836105, + 0.011484195478260517, -0.012594562955200672, 0.014447255060076714, 0.00645635137334466, + 0.00935079250484705, + 0.005074629560112953, -0.03410949558019638, -0.027522146701812744, -0.011671336367726326, + -0.010691966861486435, -0.00645635137334466, 0.022282209247350693, 0.029393551871180534, + -0.0047845616936683655, -0.00280399015173316, -0.00823418702930212, 0.010891583748161793, + 0.009151175618171692, 0.017728453502058983, -0.010536016896367073, -0.023791810497641563, + 0.01004321314394474, -0.005083986558020115, -0.018027879297733307, 0.0026402422226965427, + -0.020298518240451813, -0.026324445381760597, -0.004126450512558222, 0.0065436833538115025, + 0.02979278564453125, -0.019537480548024178, -0.020273566246032715, -0.009400696493685246, + -0.013162222690880299, 0.01542038656771183, -0.009450601413846016, -0.032512564212083817, + -0.005720264744013548, -0.010074403136968613, -0.033136364072561264, 0.037577833980321884, + 0.0059074051678180695, -0.0008873583865351975, 7.826766523066908e-05, 0.007142533548176289, + -0.030092211440205574, 0.00695539265871048, 0.024727512151002884, -0.025525979697704315, + -0.019699668511748314, -0.011222198605537415, -0.024153614416718483, -0.010866631753742695, + -0.001426167436875403, -0.01740407757461071, 0.009082557633519173, -0.024116186425089836, + -0.02852023020386696, -0.00528672244399786, -0.010149259120225906, -0.005941714625805616, + 0.01419773418456316, 0.007136295549571514, -0.01892615482211113, 0.013773549348115921, + -0.0011743073118850589, 0.02311810292303562, 0.021059557795524597, -0.019188150763511658, + -0.011783620342612267, 0.024340756237506866, 0.03071601316332817, 0.009662693366408348, + -0.004251210950314999, -0.0005918322131037712, -0.018888724967837334, 0.0036430039908736944, + 0.0251017939299345, 0.012020665220916271, 0.01408545020967722, 0.012457326985895634, + -0.007722669281065464, + 0.005049677565693855, -0.03341083601117134, 0.029817737638950348, -0.03201352059841156, + 0.007853668183088303, + -0.00411709351465106, 0.005190032999962568, -0.0016827060608193278, -0.0192754827439785, + 0.0032905556727200747, 0.01542038656771183, -0.029618121683597565, 0.01973709650337696, + 0.022494301199913025, + -0.012500992976129055, 0.023654572665691376, 0.006500017363578081, -0.01775340549647808, + 0.00322817568667233, + -0.012875273823738098, 0.014447255060076714, -0.009132461622357368, 0.01881386898458004, + 0.01717950776219368, + 0.010448683984577656, 0.016979891806840897, -0.003025439800694585, -0.006041522603482008, + -0.026723679155111313, 0.0033560548909008503, 0.02031099423766136, 0.013262031599879265, + 0.010361352004110813, -0.010255306027829647, 0.00835894700139761, -0.010336400009691715, + 0.015345530584454536, 0.0045163268223404884, 0.018514445051550865, -0.0029427860863506794, + 0.005916762165725231, -0.017204459756612778, 0.01046739798039198, 0.012987558729946613, + 0.023991426452994347, + -0.0011205044575035572, -0.016430946066975594, 0.0027135389391332865, -0.0021443194709718227, + -0.007142533548176289, -0.024166090413928032, 0.03201352059841156, 0.011016343720257282, + -0.01660561002790928, 0.012787941843271255, 0.0013481922214850783, 0.022257257252931595, + 0.025089317932724953, 0.010030737146735191, -0.00035303295589983463, 0.010810489766299725, + 0.009275936521589756, 0.02266896702349186, -0.0022612824104726315, -0.011577766388654709, + 0.010810489766299725, 0.01192085724323988, -0.03106534108519554, -0.02431580424308777, + -0.0021365219727158546, -0.0037584074307233095, -0.010479873977601528, 0.024240948259830475, + 0.01786569133400917, -0.035357099026441574, 0.02009890228509903, 0.019549956545233727, + 0.02243192121386528, + -0.025525979697704315, -0.029168983921408653, -0.0007181520923040807, 0.0065312073566019535, + -0.0027306934352964163, 0.0051401290111243725, -0.021171841770410538, 0.0003928003425244242, + -6.038208812242374e-05, 0.02314305491745472, -0.004460184834897518, 0.0007781930617056787, + -0.0035556715447455645, -0.0011368792038410902, -0.006687157787382603, -0.01658065803349018, + 0.019100818783044815, -0.004232496954500675, -0.006203711498528719, -0.02500198595225811, + 0.013274507597088814, -0.0025934570003300905, -0.004332305397838354, -0.009905976243317127, + 0.025263981893658638, 0.0007544105756096542, -0.010660776868462563, -0.0032905556727200747, + 0.003948667086660862, 0.018302351236343384, -0.01588200032711029, -0.008165569044649601, + -0.012837845832109451, 0.012975082732737064, -0.002292472403496504, -0.007335911970585585, + -0.026224637404084206, -0.012001951225101948, 0.025700643658638, 0.014135354198515415, + -0.00605087960138917, + -0.013386791571974754, -0.006911726668477058, 0.019075866788625717, 0.09032653272151947, + 0.023978950455784798, -0.012476040981709957, 0.016742845997214317, 0.015345530584454536, + -0.019724620506167412, -0.022232305258512497, -0.009537933394312859, 0.023642096668481827, + -0.008602229878306389, -0.0015610646223649383, -0.0065935878083109856, 0.002842977875843644, + -0.00402976106852293, 0.02440313622355461, -0.012232758104801178, 0.010579682886600494, + -0.013049938715994358, 0.0038426206447184086, -0.0036804319825023413, -0.0007544105756096542, + 0.0017762762727215886, 0.0009926250204443932, 0.005427077878266573, -0.016044188290834427, + 0.006231782492250204, -0.008751942776143551, 0.019001010805368423, 0.01941271871328354, + -0.03141467273235321, + 0.0016172068426385522, 0.01128457859158516, 0.012338804081082344, 0.004110855516046286, + 0.021870499476790428, + 0.010748108848929405, -0.0033997211139649153, 0.023317720741033554, 0.032637324184179306, + -0.024615228176116943, 0.01600676029920578, 0.012688133865594864, 0.0024811725597828627, + 0.01034263800829649, + 0.023891618475317955, -0.0005466065485961735, -0.028220804408192635, 0.007173723541200161, + 0.008945321664214134, -0.029717929661273956, 0.031389717012643814, -0.005941714625805616, + -0.010486111976206303, 0.00922603253275156, 0.008221711032092571, 0.025288935750722885, + -0.008976511657238007, 0.0009364828001707792, -0.011365673504769802, -0.008159331046044827, + -0.011234674602746964, -0.017578741535544395, -0.009750026278197765, -0.00986854825168848, + 0.005068391561508179, -0.026199685409665108, -0.016655514016747475, -0.011178532615303993, + -0.006172521039843559, -0.016418470069766045, -0.01868910901248455, -0.02464018017053604, + -0.017341697588562965, -0.001334156608209014, 0.010348876006901264, 0.026698727160692215, + 0.0039954520761966705, -0.010186687111854553, 0.006184997037053108, 0.0017965498846024275, + -0.012644467875361443, -0.005632932297885418, 0.004304233938455582, -0.029942497611045837, + 0.007922286167740822, 0.004815751686692238, 0.015931904315948486, -0.009762502275407314, + 0.002827382879331708, 0.017341697588562965, 0.015557622537016869, 0.004528802819550037, + -0.002747847931459546, 0.00587309617549181, 0.021309077739715576, -0.008882940746843815, + 0.01424763910472393, + 0.03705384209752083, 0.013037462718784809, 0.0021723906975239515, 0.033810071647167206, + -0.02057299204170704, + -0.002679229713976383, -0.0004998213844373822, 0.008714514784514904, -0.005327269434928894, + 0.030441539362072945, -0.0032936749048531055, -0.026723679155111313, -0.019936712458729744, + 0.016430946066975594, -0.0075230528600513935, 0.01634361408650875, 0.003618051763623953, + 0.01034263800829649, + 0.017578741535544395, 0.019699668511748314, 0.013212127611041069, -0.007498100399971008, + -0.013798501342535019, -0.002495208289474249, -0.02150869369506836, 0.0002664804342202842, + 0.024390660226345062, -0.025975117459893227, 0.01952500455081463, -0.007766335271298885, + -0.01833977922797203, 0.001069820486009121, 0.0057015507481992245, 0.009787454269826412, + 0.0034153161104768515, -0.002916274592280388, -0.010492349974811077, -0.042693011462688446, + -0.011945809237658978, -0.0026371232233941555, 0.014285067096352577, -0.018763964995741844, + -0.00592611962929368, -0.030591251328587532, 0.002339257625862956, 0.011902143247425556, + -0.0408964604139328, + 0.017491409555077553, -0.028120996430516243, -0.0036024567671120167, -0.0056017423048615456, + -0.00830280501395464, 0.008440041914582253, -0.006256734486669302, -0.007398292422294617, + -0.02417856641113758, -0.00870827678591013, -0.00082497822586447, -0.03645499050617218, + 0.01069820486009121, + -0.010380065999925137, 0.03890029713511467, 0.019774524495005608, 0.033485691994428635, + -0.0071799615398049355, 0.0036430039908736944, 0.024253424257040024, -0.0262994933873415, + -0.0035151245538145304, 0.006805680226534605, -0.018414637073874474, -0.013648788444697857, + -0.006768252234905958, 0.033236172050237656, 0.008415089920163155, 0.03333598002791405, + 0.01858930103480816, + -0.01847701705992222, 0.006805680226534605, -0.007604146841913462, 0.002033594762906432, + -0.007697717286646366, -0.01348660048097372, 0.020123854279518127, -0.014160306192934513, + 0.006662205792963505, -0.0033311028964817524, -0.012525944970548153, -0.0068992506712675095, + 0.00840885192155838, 0.029019271954894066, 0.030815821141004562, 0.009843596257269382, + 0.023978950455784798, + 0.00583878718316555, -0.004943631123751402, 0.003000487806275487, -0.01091653574258089, + -0.023667048662900925, -0.0001323629985563457, 0.011577766388654709, 0.01162143237888813, + 0.02934364788234234, 0.0013910785783082247, 0.01646837405860424, -0.013436696492135525, + 0.03049144335091114, + 0.001966536045074463, 0.01045492198318243, -0.003067546524107456, -0.017266839742660522, + -0.001685825060121715, -0.025064365938305855, -0.007785049732774496, -0.04007304459810257, + -0.014871440827846527, -0.02782157063484192, 0.007866144180297852, 0.0245278961956501, + -0.007972190156579018, + 0.01449715904891491, -0.009718836285173893, -0.037103746086359024, -0.00484694167971611, + 0.002347055124118924, 0.03987342491745949, -0.011883429251611233, 0.0192754827439785, + 0.01613152027130127, + 0.00012836676614824682, 0.003499529557302594, 0.020061474293470383, 0.006724586244672537, + 0.004076546523720026, 0.0021817476954311132, 0.015956856310367584, -0.006359661929309368, + -0.007747621275484562, -0.03141467273235321, -0.0013224603608250618, -0.025675691664218903, + -0.0065935878083109856, 0.028719846159219742, -0.0027260149363428354, -0.0008787811384536326, + -0.011783620342612267, -0.012850321829319, 0.0002271029370604083, 0.011596480384469032, + -0.014821536839008331, -0.00587309617549181, -0.032762084156274796, -0.0018729656003415585, + -0.04264310747385025, 0.010442445985972881, -0.020398326218128204, 0.0012195330346003175, + -0.027871474623680115, -0.004032880067825317, 0.010798013769090176, 0.013536504469811916, + -0.023766858503222466, -0.005068391561508179, -0.014696775935590267, 0.01716703176498413, + -0.019450148567557335, -0.000755190325435251, 0.013998118229210377, 0.003225056454539299, + -0.018264923244714737, -0.017341697588562965, -0.0061226170510053635, 0.026324445381760597, + -0.01268189586699009, -0.01739160157740116, -0.005180676002055407, 0.01465934794396162, + 0.01636856608092785, + -0.016181424260139465, 0.0030176423024386168, -0.02230716124176979, -0.004672277253121138, + 0.013224603608250618, 0.016568182036280632, -0.007859906181693077, -0.00583878718316555, + 0.00865213479846716, + -0.012301376089453697, 0.00257162400521338, -0.0017435266636312008, -0.014509635977447033, + 0.008957797661423683, -0.026099877431988716, -0.0014947856543585658, -0.01600676029920578, + -0.00514324801042676, 0.0027743596583604813, 0.02093479596078396, -0.000456545123597607, + 0.0026745512150228024, 0.016655514016747475, -0.03513253107666969, 0.016393518075346947, + -0.022020211443305016, 0.012295138090848923, -0.01740407757461071, 0.01542038656771183, + 0.016381042078137398, + 0.0074606724083423615, 0.014584491960704327, -0.014160306192934513, 0.0005368596175685525, + -0.030167067423462868, -0.00807199813425541, -0.005274246446788311, 0.014334971085190773, + -0.02501446194946766, 0.005738978739827871, -0.0010004225187003613, 0.006284805480390787, + -0.022469349205493927, -0.0003391923673916608, 0.03236284852027893, -0.00011540338164195418, + 0.020286042243242264, 0.03518243506550789, -0.018951106816530228, 0.006843108218163252, + 0.0007661068812012672, 0.00794723816215992, 0.016268758103251457, -0.01589447632431984, + -0.004241853952407837, -0.006393970921635628, 0.02979278564453125, 0.005904286168515682, + -0.01705474779009819, -0.015981808304786682, -0.005190032999962568, -0.017828263342380524, + 0.017666073516011238, -0.02276877500116825, -0.004584944806993008, 0.01787816733121872, + 0.013686216436326504, + -0.024016378447413445, 0.009781216271221638, -0.015333054587244987, -0.015707336366176605, + -0.011796096339821815, -0.010211639106273651, -0.02991754561662674, -0.02279372699558735, + -0.002796192653477192, 0.010161735117435455, 0.015382958576083183, -0.008284091018140316, + -0.02595016546547413, -0.006624777801334858, -0.009332078509032726, -0.011833524331450462, + 0.027646906673908234, 0.0028445373754948378, 0.0077289072796702385, -0.017715977504849434, + 0.007286007981747389, 0.018077783286571503, -0.013561456464231014, 0.03049144335091114, + -0.017840739339590073, -0.011365673504769802, -0.01016797311604023, -0.005046558566391468, + -0.003908119630068541, -0.006562397349625826, 0.004812632687389851, -0.01449715904891491, + 0.006762014236301184, 0.027197768911719322, 0.007379577960819006, 0.011240912601351738, + -0.007984666153788567, 0.005891810171306133, -0.007310959976166487, -0.021084509789943695, + -0.004282400943338871, -0.0093383165076375, 0.010947725735604763, -0.026449207216501236, + -0.01821501925587654, 0.013436696492135525, -0.017104651778936386, -0.01833977922797203, + -0.002936548087745905, 0.014709251932799816, -0.002520160283893347, 0.0023252221290022135, + -0.018177591264247894, 0.0014246079372242093, -0.018165115267038345, -0.029518311843276024, + 0.0034153161104768515, -0.017079699784517288, 0.025076841935515404, 0.02406628243625164, + -0.012850321829319, + -0.01062958687543869, 0.0003391923673916608, 0.005292960442602634, -0.008390137925744057, + -0.020161282271146774, 0.007229865528643131, -0.009070081636309624, 0.0015096009010449052, + -0.022057639434933662, -0.0021209269762039185, -0.026199685409665108, 0.00018801783153321594, + -0.024565324187278748, -0.008776894770562649, -0.023629620671272278, 0.01681770384311676, + -0.014185258187353611, -0.02360466867685318, 0.0039549050852656364, -0.020136330276727676, + -0.0013014069991186261, 0.0009294650517404079, -0.008627181872725487, 0.006992821116000414, + 0.002498327288776636, -0.016555706039071083, -0.010118069127202034, -0.004316709935665131, + -0.02150869369506836, -0.0062380204908549786, 0.013237079605460167, -0.003917476627975702, + 0.02989259362220764, 0.23534803092479706, -0.00578576372936368, 0.0031018557492643595, + 0.03608071058988571, + -0.003889405634254217, 0.024003902450203896, 0.024028854444622993, -0.00732967397198081, + -0.013174699619412422, 0.0251267459243536, -0.0012608598917722702, 0.008015856146812439, + -0.01648085005581379, 0.006774490233510733, 0.014110402204096317, 0.011384387500584126, + -0.008483707904815674, 0.0015002439031377435, -0.01524572167545557, -0.03278703615069389, + -0.012656943872570992, -0.006762014236301184, -0.016206376254558563, -0.004366614390164614, + 0.008945321664214134, 0.010560968890786171, -0.005174438003450632, 0.0035587907768785954, + 0.028470326215028763, 0.019188150763511658, -0.013711169362068176, -0.0030940582510083914, + -0.006868060678243637, 0.022868582978844643, -0.013885833323001862, 0.004241853952407837, + 0.01789064332842827, 0.01512096170336008, 0.0029303100891411304, 0.0019525004317983985, + 0.0157572403550148, + 0.0008974951924756169, -0.014160306192934513, -0.017965499311685562, 0.012176616117358208, + 0.02159602753818035, 0.012756751850247383, 0.001325579360127449, -0.009631503373384476, + 0.03096553310751915, + -0.032662276178598404, 0.0008951559429988265, 0.0111036766320467, 0.02477741800248623, + -0.0019493814324960113, 0.011764906346797943, 0.0262994933873415, 0.007510576397180557, + 0.013049938715994358, + 0.00205854675732553, 0.010648300871253014, 0.03423425555229187, -0.027721762657165527, + 0.006500017363578081, + -0.009095033630728722, 0.014784108847379684, -0.015482766553759575, 0.0015680823707953095, + -0.0045568738132715225, 0.006387732923030853, -0.01659313403069973, 0.0005310114938765764, + -0.0026495992206037045, 0.004085903521627188, -0.002454661065712571, -0.030167067423462868, + 0.015470290556550026, 0.022619063034653664, 0.008608467876911163, 0.02420351840555668, + -0.026698727160692215, + 0.01916319876909256, -0.007173723541200161, -0.013536504469811916, -0.007005297113209963, + -0.017453981563448906, 0.009656455367803574, -0.0029505835846066475, -0.024677608162164688, + -0.001943143317475915, 0.0004082004597876221, -0.02921888791024685, -0.00046434265095740557, + -0.011995713226497173, -0.0014877679059281945, 0.002431268570944667, 0.008907892741262913, + 0.03026687540113926, -0.0002970857312902808, -0.005040320567786694, -0.03168914467096329, + -0.04291757941246033, 0.005383411422371864, 0.004566230811178684, 0.009668931365013123, + -0.0181027352809906, + 0.004747133702039719, -0.007859906181693077, 0.004198187962174416, -0.010018261149525642, + -0.010242830030620098, -0.0037303362041711807, 0.005476981867104769, 0.0029973688069730997, + 0.005520648322999477, -0.006116379052400589, 0.0013988760765641928, -0.016967415809631348, + -0.011546575464308262, -0.00674330024048686, 0.003652360988780856, -0.020647848024964333, + -0.020373374223709106, 0.010199163109064102, 0.0016234448412433267, -0.026598919183015823, + 0.00940693449229002, 0.011328245513141155, -0.009082557633519173, -0.04239358752965927, + 0.014172782190144062, + -0.02079755999147892, 0.018539397045969963, 0.0005321811186149716, -0.004541278816759586, + -0.0021848666947335005, -0.007616622839123011, -0.008458755910396576, 0.007323435973376036, + 0.018514445051550865, 0.014135354198515415, 0.005202508997172117, -0.010723156854510307, + 0.017553789541125298, 0.010560968890786171, -0.036155566573143005, 0.016505802050232887, + -0.0054738628678023815, -0.02441561222076416, -0.013573932461440563, -0.017728453502058983, + 0.004831346683204174, -0.0043759713880717754, -0.011253388598561287, 0.03188876062631607, + -0.03248761221766472, -0.011097438633441925, -0.02966802567243576, 0.004388447385281324, + 0.010997629724442959, -0.02886955812573433, -0.009562885388731956, 0.001766919274814427, + -0.009675169363617897, -0.01559505145996809, -0.013561456464231014, -0.15829600393772125, + -0.0035431955475360155, 0.015507718548178673, 0.006353423930704594, -0.008964035660028458, + -0.010367590002715588, 0.040472276508808136, -0.020161282271146774, -0.028120996430516243, + -0.013224603608250618, 0.012120474129915237, -0.0013653467176482081, -0.04027266055345535, + -0.0016172068426385522, -0.023779334500432014, 0.005645408295094967, -0.023330196738243103, + 0.010080641135573387, 0.014646871946752071, 0.000837454223074019, 0.0078786201775074, + -0.00865213479846716, + 0.018140163272619247, -0.0045038508251309395, -0.004191949963569641, 0.023879142478108406, + -0.00922603253275156, 0.00805952213704586, -0.012257710099220276, -0.014185258187353611, + -0.02767185866832733, -0.019662240520119667, -0.00892660766839981, -0.011247150599956512, + -0.006687157787382603, 0.006375256925821304, -0.0056890747509896755, 0.001538451761007309, + -0.020585468038916588, 0.031714096665382385, 0.022244781255722046, 0.04601163789629936, + 0.022257257252931595, + 0.01115981861948967, -0.0027587644290179014, 0.007036487106233835, 0.002510803285986185, + 0.02089736796915531, + 0.0056142183020710945, -0.0070926290936768055, -0.01680522784590721, -0.010317686013877392, + 0.022718871012330055, -0.004962345119565725, 0.004104617517441511, 0.005567433312535286, + -0.004856299143284559, 0.01821501925587654, -0.012656943872570992, 0.014447255060076714, + -0.016181424260139465, -0.01952500455081463, 0.002944345586001873, 0.0021178079769015312, + -0.030192019417881966, -0.01670541800558567, -0.02361714467406273, 0.02522655390202999, + -0.03166419267654419, + -0.012762989848852158, -0.0006588909309357405, -0.005770168732851744, 0.013212127611041069, + 0.009619027376174927, -0.009993309155106544, 0.01530810259282589, -0.022731347009539604, + 0.004397804383188486, 0.003802073420956731, 0.01027402002364397, -0.004310471937060356, + 0.01243861299008131, + -0.012214044108986855, -0.005651646293699741, 0.004921798128634691, -0.0029459050856530666, + 0.0005816954071633518, -0.003967381082475185, -0.003179830964654684, 0.0023657693527638912, + -0.003986095078289509, -0.04304233938455582, -0.008496183902025223, -0.019999094307422638, + 0.0036554799880832434, 0.01554514653980732, 0.017666073516011238, 0.0004284740425646305, + 0.004166997503489256, 0.007067677099257708, -0.021945355460047722, -0.008751942776143551, + -0.024739988148212433, 0.009662693366408348, 0.012001951225101948, 0.01512096170336008, + 0.024141138419508934, + 0.015707336366176605, 0.02231963723897934, -0.004048475064337254, -0.00532103143632412, + 0.024789893999695778, + 0.009893500246107578, 0.02056051604449749, -0.002091296250000596, -0.009088795632123947, + 0.006468827370554209, -0.004918679129332304, -9.771274199010804e-05, -0.008103188127279282, + 0.07066429406404495, 0.0005095683154650033, -0.026499111205339432, -0.004519445821642876, + -0.009625265374779701, 0.022506777197122574, -0.10419989377260208, -0.02979278564453125, + 0.00420442596077919, + 0.007853668183088303, -0.006774490233510733, 0.015732288360595703, -0.007591670844703913, + 0.0035026485566049814, 0.006805680226534605, 0.021558599546551704, 0.010242830030620098, + -0.0003674583858810365, -0.00028227042639628053, -0.026199685409665108, 0.03236284852027893, + 0.006038403604179621, 0.030416587367653847, -0.006418922916054726, -0.02407875843346119, + 0.018289875239133835, -0.006300400476902723, 0.013049938715994358, -0.0012249912833794951, + -0.023292768746614456, -0.02102212980389595, -0.004138926509767771, -0.036280326545238495, + 0.00835894700139761, -0.0014752917923033237, -0.0030457135289907455, 0.008221711032092571, + -0.010897821746766567, 0.005583028309047222, -0.0027946331538259983, 0.008976511657238007, + 0.017079699784517288, 3.0483452064800076e-05, -0.011833524331450462, 0.018526921048760414, + -0.015008676797151566, -0.0012881512520834804, -0.0026823487132787704, 0.010118069127202034, + -0.023317720741033554, 0.023430004715919495, -0.004282400943338871, 0.016069140285253525, + 0.01845206506550312, -0.001513499766588211, -0.007111343089491129, -0.028071092441678047, + -0.005913643166422844, -0.021645931527018547, -0.015582575462758541, 0.04593678191304207, + 0.009144937619566917, 0.014334971085190773, 0.02209506928920746, 0.00713005755096674, + 0.02032347023487091, + 0.016917511820793152, -0.011764906346797943, -0.009057605639100075, 0.03835134953260422, + 0.033111412078142166, -0.0037864784244447947, -0.021471265703439713, 0.005820073187351227, + 0.00807199813425541, -0.005330388434231281, -0.029019271954894066, 0.038725629448890686, + -0.01028649602085352, 0.023991426452994347, -0.019350338727235794, 0.00038773196865804493, + -0.015931904315948486, -0.03909991309046745, 0.01858930103480816, -0.007504338398575783, + -0.020959747955203056, -0.023554764688014984, -0.0038987628649920225, -0.021209269762039185, + 0.025189125910401344, 0.016256282106041908, -0.014596967957913876, 0.02138393372297287, + -0.003452744334936142, 0.006231782492250204, 0.008190521039068699, 0.012413660995662212, + 0.010386303998529911, -0.04653563350439072, -0.027272624894976616, 0.010904059745371342, + 0.004425875376909971, -0.005891810171306133, 0.002186426194384694, 0.015807144343852997, + -0.018763964995741844, -0.01332441158592701, -0.04097132012248039, 0.016630562022328377, + -0.013960689306259155, -0.013511552475392818, 0.018414637073874474, 0.011540337465703487, + -0.014097926206886768, -0.018140163272619247, -0.011902143247425556, -0.0111036766320467, + -0.006228663492947817, 0.003209461458027363, -0.014447255060076714, 0.008683324791491032, + 0.01634361408650875, -0.019787000492215157, 0.0035151245538145304, -0.01319965161383152, + 0.004460184834897518, 0.007591670844703913, 0.009606551378965378, -0.007785049732774496, + 0.021408885717391968, 0.0007193217170424759, -0.002899120096117258, -0.00017641900922171772, + -0.002007083036005497, 0.012295138090848923, -0.028595086187124252, -0.011234674602746964, + -0.01449715904891491, -0.04174483194947243, 0.006836870219558477, 0.025650739669799805, + 0.0014916666550561786, -0.013711169362068176, 0.004120212513953447, -0.00564228929579258, + 0.003792716423049569, 0.011265864595770836, -0.010978915728628635, -0.022856106981635094, + 0.00713005755096674, -0.039074961096048355, -0.03256246820092201, -0.004821989685297012, + 0.00023801946372259408, 0.0024702560622245073, 0.020510612055659294, 0.004142045509070158, + 0.017703501507639885, 0.020834987983107567, -0.01683017984032631, -0.007398292422294617, + 0.001146236201748252, -0.028120996430516243, 0.004909322131425142, -0.015919428318738937, + -0.004098379518836737, -0.038625821471214294, 0.015071057714521885, -0.002375126350671053, + 0.013773549348115921, 0.026948248967528343, 0.015956856310367584, -0.0007544105756096542, + 0.0023501741234213114, -0.021758215501904488, 0.008471231907606125, -0.023529812693595886, + -0.01286279782652855, 0.025975117459893227, 0.0034496253356337547, 0.008115665055811405, + 0.006624777801334858, -0.0023252221290022135, -0.0035151245538145304, 0.007173723541200161, + -0.017678549513220787, 0.007834953255951405, 0.02919393591582775, -0.00709886709228158, + -0.0049249171279370785, 0.017553789541125298, 0.020597944036126137, 0.00532103143632412, + -0.02207011543214321, -0.022456873208284378, -0.002250365912914276, 0.023392576724290848, + -0.0169299878180027, -0.0022534849122166634, -0.005361578427255154, 0.0021240459755063057, + -0.013848405331373215, 0.00479079969227314, -0.02288105897605419, 0.006974106654524803, + -0.005679717753082514, 0.012114236131310463, 0.0038582156412303448, -0.0016250043408945203, + -0.01115981861948967, -0.02779661864042282, -0.0008928166935220361, 0.006992821116000414, + -0.009600313380360603, -0.023554764688014984, -0.0014316256856545806, 0.006228663492947817, + 0.0006238020723685622, -0.02185802347958088, -0.011827286332845688, 0.015283149667084217, + -0.010710680857300758, 0.033360932022333145, 0.0025341957807540894, -0.02852023020386696, + -0.02906917594373226, 0.034883011132478714, 0.014784108847379684, 0.001349751721136272, + 0.024465516209602356, + -0.00888917874544859, 0.010654538869857788, 0.005146367009729147, 0.01800292730331421, + -0.033485691994428635, + -0.029942497611045837, 0.009244746528565884, -0.013648788444697857, -0.002880405867472291, + -0.0024094353429973125, 0.00812190305441618, -0.008514897897839546, -0.014222686178982258, + 0.010673252865672112, 0.03588109463453293, -0.009787454269826412, 0.05249917879700661, + 0.026424255222082138, + -0.01717950776219368, -0.004597421269863844, 0.007429482415318489, 0.0049249171279370785, + 0.013848405331373215, 0.02476494200527668, -0.036280326545238495, -0.013000034727156162, + 0.004519445821642876, -0.004166997503489256, 0.010542254894971848, -0.02557588368654251, + -0.015008676797151566, -0.022469349205493927, -0.03343578800559044, -0.014434779062867165, + -0.009213556535542011, -0.015445338562130928, 0.019013486802577972, 0.0003068326332140714, + 0.015033629722893238, -0.0028071091510355473, -0.02430332824587822, -0.021446313709020615, + 0.026549015194177628, 0.002520160283893347, -0.0023610906209796667, -0.021645931527018547, + -0.002995809307321906, 0.0016733489464968443, -0.02244439721107483, -0.007647812832146883, + 0.027172816917300224, -2.9581862690974958e-05, 0.01880139298737049, 0.013923261314630508, + 0.02487722598016262, -0.0031782714650034904, -0.00899522565305233, 0.010897821746766567, + -0.015158389694988728, -0.008920369669795036, 0.018177591264247894, 0.04366614297032356, + -0.027896426618099213, 0.021571075543761253, -0.03633023053407669] + # "A sharp knife in a bag." + arr2 = [0.010112764313817024, -0.001511418609879911, 0.01431563962250948, 0.003040618496015668, + -0.008735514245927334, + 0.01339747291058302, -0.020497098565101624, -0.006035975180566311, 0.0004962625680491328, + -0.016333019360899925, 0.030726250261068344, 0.025230182334780693, -0.0030761812813580036, + 0.004047692287713289, -0.006711668334901333, 0.019759979099035263, 0.03690771013498306, + 0.014250979758799076, + 0.031321119517087936, -0.020484168082475662, -0.019035791978240013, 0.030959025025367737, + 0.016501134261488914, + -0.006352807395160198, -0.0031537727918475866, 0.006446564104408026, 0.008360488340258598, + -0.021829087287187576, -0.0023309793323278427, -0.004089721012860537, 0.009673078544437885, + -0.008657922968268394, -0.028941646218299866, -0.017626212909817696, -0.013462132774293423, + 0.012556897476315498, -0.0044518145732581615, -0.02116956003010273, 0.005311787594109774, + -0.013500927947461605, 0.03781294450163841, 0.01624249666929245, 0.0037955197039991617, + -0.0015599132748320699, + -0.0011355845490470529, 0.00866438914090395, -0.012802604585886002, 0.010959804989397526, + -0.03923545777797699, + 0.024906884878873825, 0.024531859904527664, -0.01348799653351307, -0.029303738847374916, + 0.007319469004869461, + 0.015246737748384476, 0.012078416533768177, 0.01862196996808052, -0.0039345379918813705, + 0.014367367140948772, + -0.015531240031123161, 0.002031928626820445, 0.007416458334773779, -0.0187771525233984, + -0.006278448738157749, + 0.010132161900401115, -0.003481920575723052, -0.011632265523076057, 0.015401921235024929, + -0.015039827674627304, 0.016720976680517197, 0.018001237884163857, 0.017471028491854668, + 0.01603558473289013, + -0.008341090753674507, 0.006427166052162647, 0.004603764973580837, -0.022527411580085754, + 0.022411024197936058, + 0.017652075737714767, 0.0012414646334946156, 0.010655905120074749, -0.026769082993268967, + -0.024531859904527664, 0.008056588470935822, 0.027881227433681488, -0.03486446663737297, + -0.03305399790406227, + 0.01604851707816124, -0.020587623119354248, -0.0009213995654135942, 0.012931923381984234, + 0.0230058915913105, + -0.002694689668715, 0.021117830649018288, -0.021984269842505455, 0.02388526313006878, + -0.006462729070335627, + 0.0295882411301136, -0.0057644047774374485, -0.019397886469960213, -0.0014920206740498543, + 0.007894939742982388, -0.022333431988954544, -0.009711874648928642, -0.012007291428744793, + -0.023277463391423225, -0.013669043779373169, -0.030312430113554, 0.013500927947461605, + -0.003717927960678935, + -0.0409424714744091, 0.014108728617429733, 0.012304725125432014, -0.04120110720396042, + 0.015919197350740433, + -0.0022420722525566816, 0.013087106868624687, -0.017108935862779617, -0.004358058329671621, + -0.03101075254380703, 0.011250773444771767, 0.01917804218828678, 0.023419713601469994, + -0.02061348594725132, + 0.019850503653287888, 0.012944855727255344, -0.028398504480719566, -0.009356247261166573, + -0.009078210219740868, -0.014548414386808872, 0.044796183705329895, 0.024777565151453018, + 0.016902023926377296, + 0.00570297846570611, -0.01222066767513752, 0.03137284517288208, -0.026898400858044624, + 0.004813908599317074, + -0.008192373439669609, -0.012977185659110546, -0.0042158071883022785, 0.016552861779928207, + -0.033674728125333786, -0.009789465926587582, -0.01449668686836958, 0.0031359915155917406, + 0.016345951706171036, 0.026161281391978264, 0.009563157334923744, -0.026950128376483917, + 0.024764634668827057, + -0.01449668686836958, 0.01841505989432335, -0.01731584593653679, -0.0007233794895000756, + 0.0066405427642166615, + 0.009621351025998592, -0.014031137339770794, -0.02539829909801483, -0.009918785654008389, + -0.004044459201395512, 0.006094168871641159, 0.029122691601514816, -0.008826037868857384, + -0.010752894915640354, 0.015169146470725536, 0.0021693301387131214, -0.014393230900168419, + 0.0020594089291989803, 0.014807052910327911, 0.010642972774803638, 0.009155802428722382, + -0.01804003305733204, + 0.021997202187776566, 0.005085479002445936, -0.0036823651753365993, 0.01897113211452961, + 0.006145896855741739, + -0.02663976326584816, -0.008606195449829102, -0.01659165881574154, -0.0024085708428174257, + 0.008451011963188648, 0.0317608043551445, -0.005596289876848459, -0.016164904460310936, + 0.020199663937091827, + 0.013184096664190292, 0.0001768036454450339, 0.005234196316450834, 0.009453236125409603, + 0.02208772487938404, + -0.005098410882055759, -0.02135060541331768, -0.6914958357810974, -0.03044174797832966, + -0.0026461950037628412, + -0.019100451841950417, 0.03703702986240387, 0.02502327226102352, 0.02551468461751938, + 0.01341040525585413, + 0.019268566742539406, 0.015945062041282654, -0.00669873645529151, 0.025993166491389275, + 0.006029509473592043, + -0.01643647439777851, -0.011199045926332474, -0.012640955857932568, 0.01048779021948576, + -0.020109141245484352, + -0.013423336669802666, 0.011839176528155804, -0.02519138716161251, 0.029795153066515923, + -0.017587415874004364, + 0.002201660070568323, 0.021389402449131012, 0.010313209146261215, 0.02484222501516342, + -0.02296709641814232, + 0.013177630491554737, 0.00840575061738491, -0.015298466198146343, 0.006029509473592043, + -0.005357049405574799, + 0.002159631345421076, 0.047873981297016144, -0.017962442710995674, -0.005030518397688866, + 0.030933162197470665, + 0.02229463681578636, 0.01569935493171215, -0.011050328612327576, -0.002996973227709532, + 0.004228739067912102, + -0.01496223546564579, -0.042416710406541824, -0.01898406445980072, 0.028605414554476738, + -0.0025653704069554806, 0.014457890763878822, -0.011832710355520248, 0.025062067434191704, + 0.010061036795377731, 0.0005605180631391704, -0.014522550627589226, 0.010849883779883385, + 0.011386558413505554, + 0.02168683521449566, -0.02047123573720455, 0.020199663937091827, -0.009543759748339653, + -0.017083071172237396, + 0.02097558043897152, -0.00802425853908062, -0.015363125130534172, -0.013953546062111855, + -0.004109118599444628, + -0.019475476816296577, -0.0019155412446707487, 0.01104386243969202, -0.014703596942126751, + 0.01935908943414688, + 0.005864627193659544, -0.0011363928206264973, -0.00529885571449995, 0.007481117732822895, + 0.03483860194683075, + -0.0033057229593396187, -0.0012050936929881573, -0.00515337148681283, -0.011748652905225754, + 0.012110746465623379, 0.0014637321000918746, -0.021945474669337273, 0.0042966315522789955, + 0.028320912271738052, -0.0012834934750571847, 0.0067957257851958275, 0.002371391514316201, + 0.01514328271150589, + -0.0026332628913223743, -0.006782793905586004, 0.02442840300500393, -0.009673078544437885, + -0.012834934517741203, -0.0018088528886437416, 0.014755325391888618, -0.0077074263244867325, + 0.010468392632901669, 0.024143900722265244, 0.0034786874894052744, -0.014819984324276447, + 0.0233679860830307, + 0.017419300973415375, 0.006126498803496361, 0.0025233416818082333, 0.015427784994244576, + 0.017289981245994568, + 0.008198839612305164, 0.02277311682701111, -0.02133767493069172, -0.010733496397733688, + -0.0017781394999474287, + 0.004199642222374678, -0.023264531046152115, 0.0056092217564582825, -0.02609662152826786, + 0.006970306858420372, + 0.018828880041837692, 0.022113589569926262, -0.026019031181931496, 0.0050078872591257095, + -0.011768050491809845, 0.036959439516067505, -0.006743998266756535, 0.012809070758521557, + 0.025268979370594025, + -0.019475476816296577, -0.0032475292682647705, -0.026174213737249374, -0.01404406875371933, + -0.0014613074017688632, 0.010345539078116417, 0.003176403697580099, -0.010190355591475964, + 0.002138616982847452, -0.0032927910797297955, -0.010714098811149597, -0.013604383915662766, + 0.00598101457580924, -0.02005741372704506, -0.01642354391515255, -0.006242886185646057, + -0.009563157334923744, + -0.019307361915707588, -0.0023342121858149767, -0.010649438947439194, 0.007772086188197136, + -0.008522137999534607, -0.013565587811172009, -0.01440616324543953, 0.013067709282040596, + -0.004613463766872883, -0.01894526742398739, -0.021130762994289398, 0.01881594955921173, + -0.01148354820907116, + -0.024389607831835747, -0.0007027692045085132, -0.010461926460266113, -0.014470823109149933, + 0.025450026616454124, 0.03261431306600571, -0.02136353775858879, 0.004467979539185762, + -0.03333849832415581, + -0.01863490231335163, 0.043890949338674545, 0.017225323244929314, -0.005363515578210354, + -0.043916814029216766, + 0.01348799653351307, -0.017665008082985878, -0.0004962625680491328, 0.00986059196293354, + -0.0065888152457773685, 0.007164285518229008, -0.024893952533602715, 0.026187146082520485, + 0.025631071999669075, 0.005159837659448385, -8.572451042709872e-05, 0.0005985056050121784, + -0.019656524062156677, -0.0022614700719714165, 0.012388782575726509, 0.021958407014608383, + -0.009362712502479553, 0.03160561993718147, 0.012162473984062672, 0.006223488133400679, + 0.005340884439647198, + -0.007668630685657263, 0.000798142165876925, -0.009117006324231625, -0.01677270419895649, + -0.018583174794912338, 0.021609244868159294, 0.016526998952031136, 0.01513035036623478, + 0.01588040217757225, + 0.027131175622344017, -0.023109348490834236, -0.000978784984908998, 0.0018573475535959005, + 0.023096416145563126, -0.03817503899335861, 0.020341916009783745, -0.020199663937091827, + 0.033855777233839035, + 0.03344195336103439, -0.006546786520630121, -0.02133767493069172, 0.012078416533768177, + -0.0020594089291989803, + -0.01130250096321106, 0.02772604487836361, -0.007422924041748047, 0.015350193716585636, + 0.004328961484134197, + 0.0037534907460212708, 0.0028628045693039894, -0.010662371292710304, 0.013669043779373169, + -0.0037761216517537832, -0.016358884051442146, 0.008522137999534607, 0.00783674605190754, + 0.018531447276473045, + -0.016488201916217804, -0.038226768374443054, -0.021790292114019394, 0.021389402449131012, + 0.01422511599957943, + 0.015621763654053211, 0.006168527528643608, -0.00029682807507924736, 0.013462132774293423, + -0.01440616324543953, 0.013332813046872616, 0.024557722732424736, -0.00792726967483759, + -0.005350583232939243, + 0.025773324072360992, -0.005706211552023888, 0.019979821518063545, 0.008690252900123596, + 0.02992447093129158, + 0.007377662695944309, 0.0011024464620277286, -0.010998601093888283, 0.009175200015306473, + -0.013054776936769485, -0.0021046705078333616, 0.006524155382066965, 0.011095590889453888, + -0.036054205149412155, 0.024389607831835747, 0.021596312522888184, -0.0006401302525773644, + 0.02097558043897152, + -0.009084676392376423, 0.0037567238323390484, -0.004474445711821318, -0.01880301721394062, + 0.01131543330848217, + -0.016113176941871643, -0.004054157994687557, -0.015169146470725536, -0.024919817224144936, + 0.01569935493171215, 0.018570242449641228, -0.018376262858510017, -0.0005839571822434664, + 0.004070322960615158, + -0.0005302088684402406, -3.748237213585526e-05, 0.01531139761209488, 0.021660972386598587, + -0.011690459214150906, 0.000496666703838855, -0.025230182334780693, -0.027234630659222603, + 0.0119555639103055, + 0.005622153636068106, -0.017057206481695175, -0.012996583245694637, -0.007293604779988527, + 0.016345951706171036, 0.002138616982847452, 0.03044174797832966, 0.013203494250774384, + 0.02992447093129158, + -0.008004860952496529, 0.0119555639103055, 0.0030826472211629152, -0.00724834343418479, + 0.010371402837336063, + -0.017289981245994568, -0.004170545376837254, 0.010436062701046467, -0.0039410036988556385, + -0.03354540839791298, -0.022372227162122726, -0.0301313828676939, 0.02718290314078331, + 0.013203494250774384, + -0.0075069814920425415, -0.0063140117563307285, 0.01522087398916483, 0.013604383915662766, + 0.013927682302892208, 0.001208326662890613, -0.0020707242656499147, -0.0035239493008702993, + 0.012459908612072468, 0.0009513046243228018, -0.020135005936026573, 0.025605209171772003, + 0.019953958690166473, + 0.02041950821876526, -0.015828674659132957, -0.020497098565101624, -0.024674110114574432, + 0.015466581098735332, + 0.08167803287506104, 0.02751913294196129, -0.003456056583672762, 0.021764427423477173, + 0.008347556926310062, + -0.021402332931756973, -0.016514066606760025, 0.014548414386808872, 0.007228945381939411, + 0.0054023112170398235, 0.016320087015628815, 0.00711902417242527, -0.009976979345083237, + -0.009013551287353039, + 0.003378465073183179, -0.015945062041282654, -0.00877431035041809, -0.006776328198611736, + 0.00792726967483759, + -0.03044174797832966, -0.0018589639803394675, -0.012168940156698227, -0.0038601793348789215, + -0.0013263304717838764, -0.015298466198146343, -0.008890697732567787, 0.013384541496634483, + 0.03434718772768974, 0.028527824208140373, -0.01166459545493126, 0.014755325391888618, + 0.0027221699710935354, + 0.002500710776075721, 0.0050078872591257095, -0.017794327810406685, -0.014923440292477608, + 0.011289569549262524, -0.008632059209048748, 0.012078416533768177, -0.002161247655749321, + 0.002266319701448083, + -0.006074771285057068, 0.016643386334180832, 0.00332997040823102, 0.010196821764111519, + 0.0041414485312998295, + -0.010326141491532326, 0.013772498816251755, -0.007377662695944309, -0.028553687036037445, + 0.030053790658712387, 0.021570449694991112, -0.009162267670035362, 0.010313209146261215, + 0.0321228988468647, + 0.03341609239578247, 0.011587003245949745, 0.018841812387108803, 0.004025061149150133, + -0.019281499087810516, + 0.0002390385343460366, -0.008004860952496529, 0.015582968480885029, -0.009149336256086826, + -0.004212574101984501, -0.02369128353893757, -0.017238253727555275, 0.005049915984272957, + -0.00865145679563284, + -0.008670855313539505, 0.0008429997833445668, -0.015518308617174625, -0.016850296407938004, + -0.005841996520757675, 0.0021030541975051165, 0.0019979821518063545, 0.018557310104370117, + -0.00921399611979723, 0.0003447165945544839, 0.006495058536529541, 0.004794510547071695, + -0.021027307957410812, + 0.014380299486219883, -0.04029587283730507, -0.004047692287713289, 0.002528191078454256, + 0.006873317528516054, + -0.02353610098361969, -0.0193202942609787, 0.012298259884119034, 0.024712907150387764, + 0.012156008742749691, + 0.010520120151340961, -0.0027641986962407827, -0.0217385645955801, -0.010339072905480862, + 0.013203494250774384, + 0.02442840300500393, 0.0035983077250421047, -0.005040217190980911, 0.014199252240359783, + -0.01440616324543953, + -0.010662371292710304, -0.015479512512683868, 0.004788044840097427, 0.000659123994410038, + 0.004720152355730534, + -0.0034948524553328753, -0.0056771147064864635, 0.03406268730759621, 0.01077875867486, + -0.01954013668000698, + 0.006724600214511156, -0.0029048332944512367, 0.008237635716795921, 0.025644004344940186, + 0.005845229607075453, + 0.007810881827026606, 0.0069897049106657505, -0.003931304905563593, -0.005709444172680378, + -0.0028886685613542795, 0.0016148739960044622, 0.0035950748715549707, -0.00830229464918375, + 0.006136197596788406, 0.005399078130722046, -0.03064865991473198, -0.020147936418652534, + 0.009285121224820614, + -0.014018204994499683, -0.003924838732928038, -0.01716066338121891, 0.015272601507604122, + 0.003420493798330426, + -0.03721807524561882, -0.0005892107728868723, 0.027053585276007652, -0.030002063140273094, + -0.026161281391978264, -0.030027925968170166, -0.018169352784752846, -0.018130557611584663, + 0.011114988476037979, -0.030415885150432587, -0.017483960837125778, 0.00018387578893452883, + -0.002405337756499648, -0.014832916669547558, 0.009511429816484451, -0.0025799188297241926, + -0.0009779767133295536, -0.018117625266313553, -0.008806640282273293, -0.010642972774803638, + -0.03416614234447479, -0.02661389857530594, 0.010979203507304192, 0.016100244596600533, + 0.04073556140065193, + 0.05014999955892563, -0.01606144942343235, 0.014419094659388065, 0.013345745392143726, + -0.00822470337152481, + -0.003420493798330426, -0.015414852648973465, -0.010752894915640354, -0.01841505989432335, + 0.021130762994289398, 0.024751702323555946, -0.02208772487938404, -0.0011671060929074883, + 0.010888679884374142, + -0.01717359386384487, 0.021790292114019394, 0.007739756256341934, -0.01084341760724783, + -3.298650699434802e-05, + -0.017005478963255882, -0.021751495078206062, -0.025592276826500893, -0.0021790291648358107, + 0.011994359083473682, -0.02718290314078331, -0.016902023926377296, 0.014664801768958569, + 0.012071950361132622, + 0.021842019632458687, 0.009485566057264805, 0.01769087091088295, 0.0035692108795046806, + 0.008476875722408295, + 0.0018977598519995809, -0.006491825915873051, -0.0012341904221102595, -0.01278320699930191, + 0.02065228298306465, 0.015026895329356194, 0.00743585592135787, 0.02228170447051525, + -0.010727031156420708, + -0.0129513218998909, -0.03447650745511055, 0.0020125305745750666, 0.03318331763148308, + -0.005754705984145403, + 0.008354023098945618, 0.012375851161777973, -0.00665994081646204, -0.031114207580685616, + -0.0299503356218338, + -0.02775190770626068, -0.03628697618842125, 0.018195217475295067, 0.004671657457947731, + 0.003915139939635992, + 0.03240739926695824, -0.02224290929734707, 0.0020577923860400915, -0.0007270165951922536, + -0.005169536452740431, 0.028217457234859467, -0.014354435727000237, 0.023109348490834236, + 0.01194263156503439, + -0.007468185853213072, -0.0075069814920425415, 0.02479049749672413, 0.002327746246010065, + -0.02682081051170826, + -0.007720358669757843, 0.012265929952263832, 0.010888679884374142, -0.005706211552023888, + 0.004700754303485155, + 0.020160868763923645, -0.013436269015073776, -0.006718134507536888, 0.02356196567416191, + 0.005369981285184622, + 0.018117625266313553, -0.031269390136003494, -0.014031137339770794, -0.02247568406164646, + 0.017419300973415375, + -0.005664182361215353, 0.00761690316721797, -0.00198666681535542, -0.0033558341674506664, + -0.013992341235280037, 0.012964253313839436, -0.017781395465135574, 0.04065796732902527, + 0.011535275727510452, + -0.019022859632968903, -0.004739549942314625, -0.013979409821331501, 0.001466156798414886, + 0.01004163920879364, + -0.003911906853318214, 0.015789879485964775, -0.0011331598507240415, 0.014108728617429733, + -0.010106298141181469, 0.0013133984757587314, -0.0057579390704631805, 0.005295622628182173, + -0.0006684188265353441, 0.02229463681578636, -0.005874326452612877, -0.016087312251329422, + -0.008366954512894154, -0.01679856888949871, 0.005670648533850908, 0.012815535999834538, + -0.005951917730271816, + -0.012097815051674843, 0.017613280564546585, -0.01970825158059597, 0.009078210219740868, + 0.008522137999534607, + -0.002216208493337035, 0.0015518307918682694, -0.017238253727555275, 0.004464746452867985, + -0.027415677905082703, -0.01422511599957943, 0.010849883779883385, -0.014768256805837154, + -0.036054205149412155, -0.002993740374222398, -0.006187925580888987, -0.009647214785218239, + 0.006065072026103735, -0.008425148203969002, -0.0031165936961770058, 0.028605414554476738, + -0.022656729444861412, 0.0028902848716825247, 0.0026090156752616167, 0.03848540410399437, + -0.015195010229945183, -0.004894732963293791, 0.004797743633389473, 0.0029403960797935724, + 0.031476303935050964, -0.02754499763250351, -0.009905853308737278, -0.011451218277215958, + -0.01754862070083618, + 0.028424369171261787, 0.007901404984295368, -0.012776740826666355, 0.01679856888949871, + -0.005479902494698763, + 0.005670648533850908, -0.004047692287713289, -0.010862816125154495, 0.015815742313861847, + -0.050434503704309464, 0.013694907538592815, 0.007461720146238804, -0.009627817198634148, + -0.04451168328523636, + -0.009744204580783844, 0.024234425276517868, -2.0932288862240966e-06, -0.01487171184271574, + -0.015647627413272858, 0.025281911715865135, 0.03150216490030289, 0.0021450829226523638, + -0.011671061627566814, + 0.02168683521449566, 0.020354848355054855, -0.020199663937091827, -0.005457271821796894, + 0.008683786727488041, + -0.0018832114292308688, 0.013927682302892208, 0.016720976680517197, -0.021673904731869698, + 0.013235824182629585, -0.009065278805792332, 0.0006793301436118782, -0.006737532094120979, + -0.018583174794912338, -0.023070551455020905, -0.006187925580888987, -0.028165729716420174, + 0.013811294920742512, -0.004885034170001745, -0.021298877894878387, -0.0050466833636164665, + -0.021466992795467377, 0.001486363005824387, -0.0014402930391952395, -0.019785843789577484, + 0.009640749543905258, 0.013669043779373169, 0.024337880313396454, -0.00478481175377965, + 0.023406781256198883, + -0.0004128112632315606, 0.018091760575771332, 0.01567349210381508, 0.004164079669862986, + 0.027131175622344017, + 0.005864627193659544, 0.017988305538892746, -0.00011143681331304833, -0.02043243870139122, + -0.03582143038511276, -0.018492650240659714, 0.018479719758033752, 0.012026689015328884, + 0.015440717339515686, + -0.029096828773617744, -0.020665213465690613, -0.009983445517718792, -0.0010151560418307781, + 0.007494049612432718, 0.018169352784752846, -0.002099821111187339, -0.023432645946741104, + -0.00629461370408535, + 0.005748240277171135, 0.018764222040772438, -0.01827280782163143, -0.005036984104663134, + 0.026394056156277657, + -0.016475271433591843, -0.002793295541778207, -0.01791071519255638, -0.00015811297635082155, + 0.011813312768936157, -0.012996583245694637, 0.03597661107778549, -0.008244100958108902, + 0.007222479209303856, + 0.008619126863777637, 0.017070138826966286, -0.013850090093910694, -0.019772911444306374, + -0.00038977625081315637, -0.03362300246953964, -0.020665213465690613, 0.01569935493171215, + -0.010235617868602276, 0.018583174794912338, -0.02684667333960533, 0.000624773558229208, + -0.009504963643848896, + -0.0013861405896022916, 0.010901611298322678, -0.020548826083540916, -0.007209547329694033, + 0.01589333452284336, -0.015518308617174625, 0.003481920575723052, 0.01767794042825699, + 0.02279898151755333, + -0.021673904731869698, 0.026135418564081192, -0.015013962984085083, 0.010242084041237831, + -0.0021709466818720102, 0.006866851355880499, -0.002389173023402691, -0.014807052910327911, + -0.024130970239639282, 0.006074771285057068, -0.01260215975344181, 0.012944855727255344, + 0.028372639790177345, + 0.2238774597644806, 0.0008737131138332188, -0.010326141491532326, 0.039675142616033554, + 0.01306124310940504, + 0.012207736261188984, 0.0237300805747509, -0.004752481821924448, 0.009905853308737278, + 0.013565587811172009, + 0.011179648339748383, 0.004167312290519476, -0.01571228727698326, 0.0033170385286211967, + 0.003983032424002886, + 0.0025249579921364784, -0.027338087558746338, -0.03411441296339035, -0.006259051151573658, + -0.024053378030657768, 0.011974961496889591, 0.007797949947416782, 0.011050328612327576, + 0.006520922761410475, + 0.019307361915707588, 0.006879783235490322, -0.017251186072826385, 0.012446976266801357, + 0.002083656145259738, + -0.0036726663820445538, 0.0039410036988556385, -0.010009309276938438, 0.022721389308571815, + -0.02464824728667736, 0.0024619149044156075, 0.0044227177277207375, -0.0019252401543781161, + 0.014354435727000237, 0.016268359497189522, 0.013643179088830948, 0.004083254840224981, + 0.006391603499650955, + 0.004458280745893717, -0.01567349210381508, -0.026743218302726746, 0.0018153188284486532, + -0.01734171062707901, + -0.007823813706636429, 0.011612867936491966, 0.007797949947416782, -0.005835530813783407, + -0.010681768879294395, 0.006520922761410475, -0.008522137999534607, -0.0031844861805438995, + -0.004047692287713289, -0.0030761812813580036, -0.005984247662127018, 0.0008195606642402709, + -0.00382784940302372, 0.004914131015539169, 0.024363745003938675, -0.02793295495212078, + 0.012013757601380348, + -0.011845641769468784, 0.0328470878303051, -0.03134698420763016, 0.003704996081069112, + 0.014677733182907104, + -0.0195013415068388, 0.008826037868857384, -0.015001031570136547, -0.01791071519255638, + 0.01267975103110075, + -0.018764222040772438, -0.03685598447918892, 0.0014411011943593621, 0.021247150376439095, + 0.012485772371292114, + 0.02570866420865059, -0.016384746879339218, -0.0077462224289774895, 0.00212406856007874, + 0.003970100544393063, + -0.02022552862763405, -0.04099419713020325, -0.002709238091483712, -0.0041964091360569, + -0.008263499476015568, + -0.020665213465690613, 0.012479306198656559, -0.025993166491389275, -0.0003538093587849289, + -0.0006405343301594257, 0.01912631466984749, 0.027079448103904724, 0.0012649038108065724, + 0.008172975853085518, + 0.003911906853318214, 9.15590305794467e-07, -0.019294429570436478, -0.021479925140738487, + -0.002096588024869561, -0.018195217475295067, -0.0023503771517425776, -0.0004095782642252743, + -0.030984889715909958, 0.020354848355054855, 0.027312222868204117, -0.026006098836660385, + -0.011658129282295704, -0.03455410152673721, 0.006048907525837421, 0.003611239604651928, + 0.008632059209048748, + 0.015013962984085083, -0.00502081960439682, -0.02005741372704506, -0.02098851278424263, + -0.02062641829252243, + 0.023652488365769386, -0.018583174794912338, 0.024312017485499382, 0.0025346570182591677, + -0.006304312963038683, 0.00045948740444146097, -0.00019246339797973633, 0.0073517984710633755, + -0.0014257446164265275, -0.04086487740278244, 0.011987892910838127, -0.019811706617474556, + 0.0047718798741698265, -0.006847453769296408, 0.002854722086340189, 0.0021483157761394978, + 0.006252584978938103, -0.00940150860697031, 0.0115934694185853, -0.0029193817172199488, + -0.000670035311486572, + 0.0011687226360663772, -0.0002883414854295552, -0.016164904460310936, 0.0342954620718956, + -0.008328159339725971, 0.019242702051997185, 0.0023034990299493074, 0.0005512232310138643, + -0.014548414386808872, -0.018195217475295067, -0.009556692093610764, -0.0386405885219574, + -0.03902854397892952, + -0.010461926460266113, -0.01899699680507183, -0.03028656542301178, -0.02047123573720455, + 0.011515878140926361, + -0.008425148203969002, -0.007953133434057236, -0.02904510125517845, 0.042959850281476974, + -0.005350583232939243, 0.0097506707534194, -0.021958407014608383, -0.16635626554489136, + 0.01642354391515255, + 0.016087312251329422, -0.04448581859469414, 0.020186733454465866, 0.011399490758776665, + -0.005508999340236187, + 0.007002636790275574, -0.0030923462472856045, -0.0015607215464115143, -0.0008551234495826066, + 0.013617315329611301, -0.019992753863334656, -0.022165317088365555, 0.015117418952286243, + -0.016113176941871643, 0.004070322960615158, 0.03739912435412407, 0.0187771525233984, + 0.02480342984199524, + 0.015104486607015133, -0.008366954512894154, 0.008263499476015568, -0.01194263156503439, + 0.008741980418562889, + -0.00611033383756876, 0.0014766640961170197, 0.023652488365769386, -0.007810881827026606, + 0.0009909087093546987, -0.0030891133937984705, -0.008522137999534607, 0.0010232384083792567, + 0.02133767493069172, 0.00010961826046695933, -0.021273015066981316, -0.007009102497249842, + -0.019009927287697792, -0.011082658544182777, 0.02863127924501896, 0.0032345973886549473, + 0.03589902073144913, + -0.010681768879294395, -0.0005269758985377848, 0.010545983910560608, 0.01677270419895649, + 0.006265516858547926, + -0.010287345387041569, -0.02133767493069172, -0.024143900722265244, 0.006310778670012951, + -0.000325924891512841, 0.006957374978810549, 0.008179442025721073, 0.021117830649018288, + 0.016087312251329422, + 0.017108935862779617, -0.015751082450151443, -0.008244100958108902, -0.006627610884606838, + -0.006372205447405577, -0.011056794784963131, -0.007041432429105043, -0.004904432222247124, + -0.03556279093027115, -0.016850296407938004, -0.0075522433035075665, -0.017626212909817696, + 0.005968082696199417, 0.002293800003826618, 0.003743791952729225, 0.016889091581106186, + 0.024738769978284836, + -0.008819571696221828, -0.0002883414854295552, 0.009634283371269703, 0.010015774518251419, + 0.01641061156988144, + -0.0029694929253309965, -0.006362506654113531, 0.0022711690980941057, 0.03339022770524025, + -0.009052346460521221, -0.016643386334180832, 0.005211565177887678, -0.0033526013139635324, + -0.015996789559721947, 0.004354825243353844, 0.0027415677905082703, -0.008948891423642635, + 0.0025023273192346096, -0.006970306858420372, -0.011735720559954643, -0.00597778195515275, + 0.018518514931201935, 0.016759773716330528, -0.0029565610457211733, -0.010979203507304192, + -0.0041414485312998295, -0.022113589569926262, 0.003053550375625491, -5.049007086199708e-05, + -0.0042966315522789955, 0.024156833067536354, 0.017742598429322243, 0.007228945381939411, + 0.010300276800990105, + 0.005680347327142954, 0.016695113852620125, -0.026316463947296143, -0.008463944308459759, + 0.012576295994222164, + 0.019630659371614456, -0.00019812110986094922, 0.006259051151573658, 0.02829504944384098, + 0.012485772371292114, + -0.015789879485964775, 0.02537243440747261, -0.01699254848062992, 0.02738981507718563, + -0.0062849149107933044, + 0.005867860279977322, 0.019203906878829002, 0.003591841785237193, -0.004907664842903614, + -0.09321330487728119, + -0.004594065714627504, -0.007015568669885397, 0.039856187999248505, -0.028036409988999367, + 0.007461720146238804, -0.009983445517718792, 0.00902001652866602, 0.018932336941361427, + 0.030959025025367737, + -0.002788446145132184, -0.038019854575395584, -0.02551468461751938, 0.0004994955379515886, + 0.004920597188174725, 0.01513035036623478, 0.005415243096649647, -0.03685598447918892, + 0.00223560631275177, + 0.01568642258644104, -0.018867677077651024, 0.0189581997692585, 0.002177412621676922, + -0.007222479209303856, + 0.002406954299658537, -0.00922046136111021, -0.03918372839689255, 0.012479306198656559, + 0.005667415447533131, + 0.008321693167090416, 0.02100144326686859, 0.005554261151701212, 0.004813908599317074, + -0.015841607004404068, + -0.033286772668361664, 0.009252791292965412, 0.006504757795482874, 0.009407974779605865, + 0.009621351025998592, + -0.03628697618842125, -0.0014847464626654983, -0.018686629831790924, 0.0031392243690788746, + -0.02426028810441494, 0.004982023499906063, 0.02808813750743866, -0.013643179088830948, + -0.01585453934967518, + 0.014367367140948772, -0.020122073590755463, -0.004193176049739122, -0.016113176941871643, + -0.03359713777899742, 0.016708046197891235, 0.00702850054949522, -0.01130250096321106, + 0.001401497283950448, + 0.017742598429322243, 0.005544562358409166, -0.014716529287397861, -0.020147936418652534, + 0.01753568835556507, + -0.01004163920879364, 0.012556897476315498, 0.0015582968480885029, 0.01825987547636032, + -0.02154458500444889, + -0.03103661723434925, 0.004206108395010233, -0.015505376271903515, 0.01086928229779005, + 0.0070349667221307755, + -0.019074587151408195, 0.015427784994244576, -0.027053585276007652, 0.007694494444876909, + -0.009989910759031773, -0.02702772058546543, 0.0020561758428812027, -0.014444958418607712, + -0.01585453934967518, -0.027958819642663002, 0.004949694033712149, -0.019087519496679306, + -0.009453236125409603, 0.0251784548163414, -0.007086694240570068, -0.0008025875431485474, + -0.006572650279849768, -0.031269390136003494, 0.015195010229945183, 0.0044227177277207375, + -0.0004214998916722834, -0.0013045078376308084, -0.011347763240337372, 0.014936371706426144, + -0.004170545376837254, -0.0016205316642299294, 0.0057579390704631805, -0.00886483397334814, + -0.0075781075283885, -0.007688028737902641, -0.04249430075287819, 0.025450026616454124, + 0.017846055328845978, + -0.011380093172192574, -0.00866438914090395, -0.014832916669547558, -0.01330694928765297, + 0.006527388468384743, + -0.0044518145732581615, 0.0020594089291989803, -0.003391396952793002, 0.013565587811172009, + -0.025825051590800285, -0.0009755520150065422, -0.012097815051674843, -0.028708871454000473, + 0.010183890350162983, 0.007241877261549234, 0.0017862219829112291, -0.007739756256341934, + -0.018376262858510017, 0.007177217863500118, -0.011192579753696918, 0.001428169314749539, + -0.02116956003010273, + -0.0007152970065362751, -0.012291793711483479, 0.04585660248994827, -0.010862816125154495, + 0.0014435260090976954, 0.008696719072759151, -0.025954371318221092, 0.012304725125432014, + 0.014276843518018723, + 0.0028337077237665653, -0.01937202177941799, 0.01935908943414688, -0.010714098811149597, + 0.019307361915707588, + -0.03173493966460228, -0.000870480143930763, -0.02098851278424263, 0.0209497157484293, + 0.006116800010204315, + -0.011160249821841717, -0.011386558413505554, 0.009983445517718792, -0.007002636790275574, + 0.007597505114972591, -0.009039415046572685, 0.024143900722265244, 0.02406631037592888, + 0.006178226787596941, + -0.02369128353893757, -0.006107100751250982, -0.0005431408062577248, 0.011561139486730099, + 0.005732075311243534, 0.0032426798716187477, -0.03525242581963539, 0.0067504639737308025, + 0.00014134187949821353, 0.015453648753464222, -0.012615091167390347, 0.01697961613535881, + 0.009207529947161674, + -0.011205512098968029, -0.0012883428717032075, 0.021079035475850105, -0.022579139098525047, + -0.027234630659222603, -0.01324229035526514, 0.017212390899658203, -0.004170545376837254, + 0.018518514931201935, + -0.010332606732845306, 0.020755738019943237, 0.0105977114289999, -0.02629060111939907, + 0.02992447093129158, + 0.013345745392143726, 0.007726824376732111, -0.009576089680194855, -0.018376262858510017, + 0.02244981937110424, + -0.0097506707534194, -0.017923645675182343, 0.0065888152457773685, 0.002591234166175127, + 0.018117625266313553, + -0.031062480062246323, 0.002280868124216795, -0.013591451570391655, 0.0033202713821083307, + -0.025437094271183014, 0.048106756061315536, -0.009711874648928642, -0.001504144398495555, + 0.015518308617174625, -0.010694701224565506, -0.0037373260129243135, -0.006417467258870602, + -0.019397886469960213, -0.007985463365912437, -0.023290393874049187, -0.001201052451506257, + -0.019449613988399506, -0.01972118392586708, -0.00903294887393713, 0.0018848278559744358, + 0.02427322044968605, + -0.018932336941361427, 0.00026631681248545647, 0.03504551202058792, -0.01404406875371933, + 0.009485566057264805, + -0.01604851707816124, -0.02588971145451069, -0.017949510365724564, 0.015350193716585636, + 0.011005067266523838, + 0.011580538004636765, 0.02663976326584816, -0.019992753863334656, 0.006802191957831383, + -0.004865636117756367, + 0.010461926460266113, -0.010617109015583992, 0.009136403910815716, -0.011910301633179188, + -0.00561245484277606, + 0.015272601507604122, -0.00432572839781642, 0.0019009928219020367, -0.00949203222990036, + 0.0005059615359641612, + 0.008767844177782536, -0.002914532320573926, -0.028165729716420174, 0.044434089213609695, + -0.008198839612305164, -0.00033057230757549405, 0.015996789559721947, 0.0007904638187028468, + 0.015505376271903515, 0.006802191957831383, 0.006912113167345524, -0.015440717339515686, + -0.017018411308526993, + 0.0027367183938622475, 0.002512026112526655, 0.017600348219275475, -0.014936371706426144, + -0.008425148203969002, 0.005321486387401819, -0.0019995986949652433, -0.0006785218720324337, + -0.03380404785275459, -0.0042610689997673035, 0.027984682470560074, 0.017975373193621635, + 0.014328571036458015, + 0.019268566742539406, -0.014626005664467812, 0.00865145679563284, 0.013054776936769485, + -0.009705408476293087, + -0.013979409821331501, -0.029303738847374916, 0.0027852130588144064, 0.01176158431917429, + -0.01841505989432335, + -0.030984889715909958, 0.021130762994289398, -0.004219040274620056, -0.003950702492147684, + 0.004270767793059349, 0.010849883779883385, 0.016850296407938004, -0.016320087015628815, + 0.0390026830136776, + -0.03398509696125984, -0.013080640695989132, -0.011742186732590199, -0.009550225920975208, + -0.008237635716795921, 0.00013093573215883225, -0.008793707937002182] + # Security discovered a concealed knife in the passenger's bag. + arr3 = [0.01877044141292572, 0.007516102399677038, 0.024635378271341324, -0.017475929111242294, + -0.016828671097755432, 0.019364861771464348, -0.025877054780721664, -0.020276304334402084, + -0.003586329985409975, -0.0037019115407019854, 0.03201938793063164, 0.008328475058078766, + -0.008361498825252056, 0.005372890271246433, -0.003956190776079893, -9.958587907021865e-05, + 0.02631296217441559, 0.004517586901783943, 0.030090827494859695, -0.03965437412261963, + -0.005118610803037882, + 0.005749356001615524, -0.01251582894474268, -0.006789589766412973, -0.02253509685397148, + 0.01142606046050787, + 0.004682703409343958, -0.025969520211219788, 0.009761686436831951, -0.020870722830295563, + 0.00572954211384058, -0.00238923542201519, -0.03846553713083267, -0.006654194090515375, + -0.027950918301939964, -0.005244099535048008, 0.0117562934756279, -0.022878538817167282, + 0.002235677093267441, 0.007727451156824827, 0.019998908042907715, -0.012489411048591137, + -0.004279819317162037, 0.006634380202740431, -0.015811555087566376, 0.023631470277905464, + -0.00900215096771717, 0.007218892686069012, -0.028400035575032234, 0.027290452271699905, + 0.01755518466234207, + 0.0033502134028822184, -0.03381585702300072, -0.014279273338615894, 0.009986245073378086, + -0.012846061959862709, 0.004943587351590395, 0.009226708672940731, 0.0019269093172624707, + -0.029879478737711906, -0.009992849081754684, -0.01109582744538784, -0.01686829887330532, + 0.010897687636315823, 0.00030525910551659763, -0.007872753776609898, 0.011743084527552128, + 0.028717057779431343, -0.01904783770442009, 0.013816947117447853, -0.0006175356102176011, + 0.011333595030009747, 0.018268488347530365, -0.011736479587852955, 0.017925044521689415, + -0.005138424690812826, -0.012258247472345829, 0.0011549898190423846, 0.009794709272682667, + 0.016049321740865707, 0.012476201169192791, -0.03172878175973892, -0.01721174269914627, 0.02633938193321228, + 0.019932862371206284, -0.03281194716691971, -0.01973472163081169, 0.01748913712799549, + -0.009068197570741177, + -0.0017964673461392522, 0.0016041066264733672, 0.01000605896115303, -0.031543850898742676, + 0.00032094516791403294, -0.023697517812252045, 0.029060499742627144, -0.022601144388318062, + 0.015494531020522118, -0.004408610053360462, -0.0271319393068552, 0.011657223105430603, + 0.006855636369436979, + -0.02813584916293621, -0.0011500363470986485, -0.024556122720241547, -0.027765987440943718, + -0.013057411648333073, 0.0007450880948454142, -0.0032544457353651524, -0.018889324739575386, + -0.004151028115302324, -0.00017285632202401757, 0.00885024294257164, -0.02364468015730381, + -0.016643742099404335, 0.017158905044198036, 0.00029163697035983205, -0.02426551841199398, + 0.0007310532382689416, -0.03532171621918678, 0.017304208129644394, 0.011076013557612896, + 0.016551276668906212, -0.0039165630005300045, 0.02080467715859413, 0.014979367144405842, + -0.015917228534817696, -0.006849031429737806, 0.010937315411865711, -0.007661404553800821, + 0.013361225835978985, -0.0018542581237852573, 0.022442631423473358, -0.0006266170530579984, + -0.015917228534817696, 0.015045413747429848, -0.02789808064699173, 0.021095281466841698, + -0.016221042722463608, -0.02682812511920929, 0.007767079398036003, 0.02094997838139534, + -0.04359075054526329, + 0.014913320541381836, 0.0008292975253425539, 0.010078709572553635, 0.0014455948257818818, + 0.0356123223900795, + -0.010461780242621899, -0.004418516997247934, 0.01881006918847561, -0.013592388480901718, + 0.01346690021455288, -0.027079103514552116, -0.021768957376480103, 0.015124669298529625, + 0.01221861969679594, + -0.014583087526261806, 0.0012870830250903964, -0.011109036393463612, -0.02485993690788746, + 0.014569878578186035, 0.02530905418097973, -0.0190082099288702, 0.019853604957461357, 0.02855854667723179, + -0.0028466081712394953, -0.0035632136277854443, 0.006416426505893469, 0.0071660554967820644, + 0.0026666312478482723, -0.008810615167021751, -0.014530249871313572, 0.00826242845505476, + 0.02595631033182144, 0.011531734839081764, 0.021517978981137276, -0.011135455220937729, + -0.039152421057224274, -0.001351478393189609, -0.02323519065976143, 0.01838737167418003, + 0.024846728891134262, 0.025071285665035248, -0.0038934466429054737, -0.003834004746749997, + 0.03048710711300373, 0.017198532819747925, -0.001367164426483214, -0.013414062559604645, + 0.017713695764541626, 0.017343835905194283, -0.01130717620253563, -0.02035555988550186, -0.6725128293037415, + -0.026669614017009735, 0.01808355748653412, -0.004927075933665037, 0.017277788370847702, + 0.02364468015730381, + 0.021280212327837944, 0.022495469078421593, -0.019206348806619644, 0.015811555087566376, + 0.0008875011117197573, 0.028320778161287308, 0.008757778443396091, -0.002607189118862152, + -0.002232374856248498, -0.009807919152081013, -0.005960704758763313, -0.0006039135041646659, + 0.02336728386580944, 0.029192592948675156, -0.01763444021344185, 0.023565424606204033, + -0.005204471293836832, + 0.016221042722463608, 0.022455841302871704, 0.0022389795631170273, 0.007621776778250933, + -0.02589026466012001, -0.0010988501599058509, -0.0044350288808345795, -0.01450383197516203, + -0.002070560585707426, 0.007225497160106897, 0.008955918252468109, 0.04887447878718376, + -0.02022346667945385, + 0.014081133529543877, 0.024503285065293312, 0.013909412547945976, 0.014477413147687912, + -0.0019302116706967354, -0.006366891320794821, 0.00793219543993473, -0.01112885121256113, + -0.008671917952597141, 0.0020722118206322193, 0.04691949859261513, -0.008169963024556637, + 0.006713636219501495, -0.00829545222222805, 0.027396125718951225, 0.010455175302922726, + 0.007945405319333076, + 0.0006092798430472612, -0.012661132030189037, -0.0018740720115602016, 0.01949695497751236, + -0.03141175955533981, 0.011300572194159031, -0.022165236994624138, -0.009068197570741177, + 0.02858496457338333, -0.008315266110002995, -0.01836095191538334, -0.008308661170303822, + 0.020276304334402084, -0.011591176502406597, -0.0013803737238049507, 0.01301778294146061, + -0.007985033094882965, 0.020064955577254295, 0.029377523809671402, -0.013935831375420094, + -0.0020391885191202164, -0.00044705288019031286, 0.036589812487363815, 0.026048775762319565, + -0.010712757706642151, -0.015283181332051754, 0.002589026466012001, -0.003969400189816952, + -0.00014179377467371523, -0.03014366514980793, -0.00022270085173659027, 0.037699393928050995, + -2.369679532421287e-05, 0.002374375006183982, -0.004534098785370588, 0.013400853611528873, + -0.008586057461798191, 0.0021101885940879583, 0.017132485285401344, -0.011498712003231049, + 0.0019962582737207413, -0.008057684637606144, 0.03104189783334732, 0.006360286846756935, + 0.003814190626144409, 0.01870439574122429, -0.008645499125123024, 0.00510870385915041, + -0.0037811673246324062, 0.026920590549707413, -0.026048775762319565, 0.01130717620253563, + 0.00017595225654076785, -0.0020358862821012735, -0.01342727243900299, 0.0034839578438550234, + -0.02430514618754387, 0.005148332100361586, 0.012766806408762932, -0.00700093898922205, + -0.02295779623091221, + -0.023723935708403587, -0.02381640113890171, 0.015111460350453854, 0.019972490146756172, + 0.007284939289093018, -0.04998406022787094, 0.011082618497312069, 0.00253618904389441, 0.01134019996970892, + -0.012581875547766685, 0.015124669298529625, 0.026920590549707413, -0.00457042409107089, + -0.02606198564171791, -0.013037597760558128, -0.014701971784234047, -0.010864664800465107, + 0.00029597128741443157, 0.025903472676873207, 0.0018674674211069942, -0.0012193851871415973, + -0.008103916421532631, 0.004983215592801571, -0.013750900514423847, 0.003725027898326516, + -0.01881006918847561, -0.03777864947915077, -0.027264032512903214, -0.015322809107601643, + -0.005580937024205923, 0.002906050067394972, -0.032442085444927216, -0.00954373273998499, + 0.0020342350471764803, -0.024661798030138016, -0.009510708972811699, 0.019245976582169533, + -0.004230284132063389, -0.01229127123951912, -0.030672037973999977, 0.021623654291033745, + -0.0020127699244767427, -0.011135455220937729, 0.0014010133454576135, -0.002977050142362714, + -0.0003750208124984056, 0.00896912720054388, 0.03135892376303673, -0.03196655213832855, + -0.00022435201390180737, -0.019589418545365334, 0.011498712003231049, 0.049587782472372055, + 0.014543459750711918, -0.03999781608581543, -0.04639112576842308, 4.378166704555042e-05, + -0.02191425859928131, 0.010844850912690163, 0.0006179484189487994, -0.000650558911729604, + -0.0007182566914707422, -0.007971824146807194, -0.0016255717491731048, 0.02005174569785595, + 0.000143960933201015, -0.0012771759647876024, -0.0075689395889639854, -0.023354075849056244, + -0.007661404553800821, 0.010659920051693916, 0.015098251402378082, 0.011822340078651905, + 0.03270627185702324, + -0.013869784772396088, 0.014094342477619648, 0.010745780542492867, -0.017581602558493614, + 0.0169343464076519, + 0.007423636969178915, -0.03003798983991146, 0.025084495544433594, 0.01960262842476368, 0.020064955577254295, + 0.00427651684731245, 0.01752876490354538, 0.016432391479611397, -0.004170842468738556, + -0.010243826545774937, + -0.0025857239961624146, 0.006102704908698797, -0.03640488162636757, -0.0046529825776815414, + -0.032785527408123016, 0.040156327188014984, 0.014398157596588135, 0.022548306733369827, + -0.02039518766105175, 0.00490065710619092, -0.023842819035053253, -0.00648907758295536, + 0.005680006928741932, + -0.01701360195875168, 0.014398157596588135, 0.009464476257562637, -0.0027557939756661654, + 0.017330626025795937, 0.005187959875911474, 0.026537520810961723, -0.0020639561116695404, + -0.005353076383471489, 0.014781227335333824, 0.022653982043266296, 0.014186807908117771, + 0.011379827745258808, -0.030539944767951965, -0.0038538186345249414, 0.020144211128354073, + 0.01005889568477869, 0.014107552357017994, 0.012093131430447102, 0.003827400039881468, 0.014834064990282059, + -0.010706152766942978, 0.032996878027915955, -0.010831641033291817, 0.00433926098048687, + 0.010019267909228802, 0.03574441745877266, -0.008473778143525124, 0.02250867895781994, + 0.0020111186895519495, + 0.044753171503543854, -0.0009353848872706294, -0.007357590366154909, 0.009821128100156784, + 0.02028951235115528, -0.0015116414288058877, 0.015586995519697666, 0.0038967488799244165, + 0.008011451922357082, -0.016366345807909966, 0.034000784158706665, 0.013275365345180035, + 0.026973428204655647, 0.02956245467066765, 0.002169630490243435, 0.005663495510816574, 0.007952009327709675, + -0.005825309548527002, -0.0050558666698634624, -0.00037976790918037295, 0.005699820816516876, + -0.005491774063557386, -0.0043260520324110985, 0.017911836504936218, 0.006888659670948982, + -0.030883386731147766, 0.0162474624812603, -0.007595357950776815, 0.01956300064921379, 0.009847546927630901, + 0.005977216642349958, 0.006122519262135029, 0.02133304998278618, -0.007701032795011997, + -0.020580118522047997, -0.047342196106910706, 0.0012012224178761244, 0.023420121520757675, + -0.013935831375420094, -0.01669657789170742, -0.004801587201654911, -0.0016924439696595073, + -0.021161329001188278, 0.0245429128408432, 0.0016536415787413716, 0.038148511201143265, + -0.012984760105609894, -0.019298814237117767, -0.003333701752126217, -0.034793343394994736, + 0.02184821292757988, -0.017330626025795937, 0.0023974913638085127, 0.009319174103438854, + -0.012859271839261055, -0.029985152184963226, -0.040499769151210785, -0.01603611186146736, + 0.031226828694343567, 0.005158239044249058, -0.009239918552339077, -0.022495469078421593, + 0.02046123519539833, 0.010534431785345078, 0.021267002448439598, -0.0007591230096295476, + -0.00918047595769167, -0.015058622695505619, -0.007331171538680792, 0.01956300064921379, + -0.0119280144572258, + 0.010309873148798943, 0.018968582153320312, 0.0026418636552989483, -0.020170629024505615, + -0.01656448468565941, -0.026947010308504105, -0.0008359021740034223, 0.10514617711305618, + 0.016987184062600136, -0.006746659521013498, 0.002816887106746435, 0.015785135328769684, + -0.01943090744316578, -0.03349883109331131, 0.020197048783302307, 0.005455448757857084, + -0.024278726428747177, -0.010362710803747177, 0.0015875949757173657, 0.0071660554967820644, + -0.005260610952973366, 0.02606198564171791, -0.002451979788020253, -0.01714569516479969, + 0.021993516013026237, 0.0038769349921494722, -0.03912600129842758, -0.0004895703750662506, + -0.01797788217663765, 0.006413124036043882, 0.01196103822439909, -0.027290452271699905, + -0.034344229847192764, 0.015785135328769684, 0.0171060673892498, 0.01849304512143135, 0.012350712902843952, + 0.011564758606255054, 0.020580118522047997, 0.012661132030189037, -0.005234192591160536, + -0.024529704824090004, -0.009933407418429852, 0.0005081459530629218, -0.01239034067839384, + -0.0067169382236897945, -0.00015324873675126582, 0.022878538817167282, -0.006485775578767061, + 0.019549790769815445, -0.004035446792840958, 0.01759481243789196, -0.004610052332282066, + 0.01552094891667366, + 0.018928952515125275, -0.004828006029129028, -0.015534158796072006, 0.014834064990282059, + 0.012212014757096767, -0.010382524691522121, 0.0001750234659994021, 0.03003798983991146, + 0.021425515413284302, 1.9684979633893818e-05, 0.0024569332599639893, -0.028162267059087753, + -2.5618854124331847e-05, -0.00938522070646286, -0.017621230334043503, 0.009345592930912971, + -0.01652485691010952, -0.022653982043266296, -0.016828671097755432, -0.00623149611055851, + -0.013790528289973736, -0.021597236394882202, -0.003006771206855774, 0.018136395141482353, + -0.009682430885732174, 0.0005667623481713235, 0.0037019115407019854, 0.009827733039855957, + 0.004332656506448984, 0.013176294974982738, -0.009444662369787693, 0.01030326820909977, + 0.009134244173765182, + 0.009147453121840954, -0.010659920051693916, 0.0025626078713685274, -0.026299752295017242, + 0.003338655224069953, 0.015203925780951977, 0.002062304876744747, -0.010151361115276814, + -0.023935284465551376, 0.007119822781533003, 0.03637846186757088, 0.0007471520802937448, + 0.006835822481662035, -0.014450994320213795, -0.0015479669673368335, -0.016604112461209297, + -0.009959826245903969, 0.033683761954307556, 0.013367829844355583, 0.011439269408583641, + 0.035004694014787674, -0.013295179232954979, 0.005577634554356337, -0.010798618197441101, + 0.018955372273921967, 0.00019421825709287077, -0.005580937024205923, -0.00812373124063015, + 0.02229733020067215, 0.034344229847192764, -0.0016239206306636333, -0.01780616119503975, + -0.02039518766105175, -0.00496009923517704, 0.007575544063001871, 0.00918047595769167, -0.00587814673781395, + 0.005158239044249058, 0.015468112193048, -0.02544114738702774, 0.008513405919075012, 0.003576423041522503, + 0.01583797298371792, 0.012159178033471107, 0.022653982043266296, 0.0075689395889639854, 0.00912763923406601, + -0.020857512950897217, -0.02879631519317627, 0.010996758006513119, 0.0021977003198117018, + 0.0023297935258597136, -0.024741053581237793, 0.0037514464929699898, -0.000504843657836318, + -0.01921955868601799, 0.0022637469228357077, 0.012542247772216797, -0.013803738169372082, + -0.011419455520808697, -0.02710552141070366, -0.004055260680615902, -0.001493478543125093, + -0.0037844697944819927, -0.023789983242750168, -0.01367164496332407, -0.015045413747429848, + 0.021214164793491364, -0.02198030613362789, 0.015996484085917473, -0.0027145149651914835, + 0.0108052222058177, + -0.018625138327479362, -0.007575544063001871, -0.021768957376480103, -0.0414772592484951, + -0.021002816036343575, 0.01590401865541935, 0.01742309145629406, 0.03217789903283119, 0.0349254384636879, + -0.011492107063531876, 0.026643196120858192, 0.025071285665035248, -0.006439542863518, + 0.0018014208180829883, + -0.00909461546689272, 0.003373329760506749, -0.014133971184492111, 0.024173052981495857, + 0.028373615816235542, -0.009484291076660156, 0.004933680407702923, 0.01949695497751236, + -0.026365799829363823, 0.006994334049522877, 0.009695639833807945, 0.010937315411865711, + -0.006158844567835331, -0.008658708073198795, -0.010792013257741928, -0.031121155247092247, + 0.0023149331100285053, 0.025916682556271553, -0.06409161537885666, -0.0045869359746575356, + 0.0065386127680540085, 0.005287029780447483, 0.011888386681675911, -0.012984760105609894, + 0.03408004343509674, -0.02188784070312977, -0.012542247772216797, 0.002792119747027755, + -9.287802095059305e-05, 0.001885630190372467, -0.012264852412045002, 0.01863834820687771, + 0.004203865770250559, 0.024661798030138016, 0.02295779623091221, 0.0072585204616189, -0.006436240393668413, + -0.030619200319051743, 0.007192473858594894, 0.03048710711300373, -0.006300844717770815, + -0.013011178933084011, 0.009583360515534878, -0.013189504854381084, -0.023552214726805687, + -0.023671098053455353, -0.043432239443063736, -0.02993231639266014, -0.006459356751292944, + 0.0038934466429054737, -0.01355276070535183, 0.017713695764541626, -0.02544114738702774, + -0.013030992820858955, -0.011888386681675911, 0.021874630823731422, 0.03341957554221153, + -0.02405416965484619, 0.03651055693626404, 0.013281969353556633, -0.01163080520927906, + -0.018268488347530365, + 0.03402720391750336, 0.015745507553219795, -0.017264578491449356, 0.008876661770045757, + 0.025797799229621887, + 0.005303541198372841, -0.006555124185979366, -0.020421605557203293, 0.016128577291965485, + -0.008051079697906971, -0.02291816845536232, 0.007238706573843956, 0.019061045721173286, + 0.011624200269579887, -0.02212560921907425, -0.025005239993333817, -0.02098960615694523, + 0.0007471520802937448, -0.005831914022564888, 0.0160757414996624, 0.017436299473047256, + -0.013004573993384838, -0.010811827145516872, 0.010428756475448608, -0.016947556287050247, + 0.026458265259861946, 0.008202986791729927, -0.012608294375240803, 0.0026451661251485348, + -0.020131001248955727, 0.007621776778250933, -0.014807646162807941, -0.013486714102327824, + 0.009563546627759933, 0.016749415546655655, 8.813092426862568e-05, 0.00507237808778882, + -0.007199078798294067, -0.033234644681215286, 0.006822613067924976, 0.0024239099584519863, + 0.02423909865319729, -0.0016627229051664472, -0.020593328401446342, -0.02578458935022354, + -0.006594752427190542, -0.015653042122721672, 0.0188364889472723, 0.0006237275083549321, + -0.022376585751771927, 0.0073443809524178505, -0.009160662069916725, 0.005746053531765938, + 0.02423909865319729, -0.013711272738873959, 0.0002767764963209629, -0.03204580768942833, + -0.014358528889715672, -0.02039518766105175, -0.02392207644879818, 0.016881508752703667, + -0.005471960175782442, -0.04131874814629555, -0.004408610053360462, -0.007364194840192795, + 0.015996484085917473, -0.00392316747456789, -0.010970339179039001, 0.01828169636428356, + 0.044885262846946716, + -0.015877600759267807, 0.011776107363402843, -0.01648522913455963, 0.03225715458393097, + -0.015111460350453854, -0.0004581982211675495, 0.011974247172474861, -0.02088393270969391, + 0.04440972954034805, -0.022772865369915962, -7.574718620162457e-05, -0.016722997650504112, + -0.02268039993941784, 0.011762898415327072, 0.014371738769114017, -0.015005785971879959, + 0.009226708672940731, 0.00044787846854887903, 0.002019374631345272, 0.0011904898565262556, + -0.011379827745258808, 0.0188364889472723, -0.043088797479867935, 0.0053563788533210754, + 0.018625138327479362, -0.004487866070121527, -0.02640542760491371, 0.01013154722750187, 0.01313666719943285, + 0.0052077737636864185, -0.022455841302871704, -0.011690246872603893, -0.003302329685539007, + 0.025388309732079506, 0.011452479287981987, -0.017753323540091515, 0.0023859331849962473, + 0.019312024116516113, -0.021901050582528114, -0.005762565415352583, 0.007139636669307947, + -0.002189444610849023, 0.02392207644879818, -0.025427937507629395, -0.009286151267588139, + 0.007245311047881842, -0.015705879777669907, -0.0077538699842989445, 0.006449449807405472, + -0.021042443811893463, -0.010778804309666157, 0.004557214677333832, -0.028875570744276047, + 0.02188784070312977, -0.007086799480021, -0.016815463081002235, -0.009682430885732174, + -0.027528218924999237, + -0.01915351115167141, 0.005749356001615524, -0.023327656090259552, 0.02758105657994747, 0.02375035546720028, + 0.0152963912114501, -0.005491774063557386, 0.02813584916293621, 0.009959826245903969, 0.014820855110883713, + 0.01853267289698124, -0.008070893585681915, 0.027184776961803436, -0.001966537209227681, + 0.00036036671372130513, 0.030328596010804176, -0.013281969353556633, -0.006373496260493994, + -0.030962642282247543, -0.00433926098048687, 0.008269033394753933, 0.0014794436283409595, + -0.0214387234300375, -0.011644014157354832, 0.008770987391471863, 0.0007574718329124153, + 0.02492598444223404, + 0.012139363214373589, -0.009821128100156784, -0.021729329600930214, 6.836854299763218e-05, + 0.0007752218516543508, 0.027871662750840187, -0.00900215096771717, -0.0005886402796022594, + 0.021412305533885956, 0.0021200955379754305, 0.005227587651461363, -0.01828169636428356, + 0.009616384282708168, 0.0217821653932333, -0.02533547207713127, 0.007549125701189041, -0.007516102399677038, + 0.008024660870432854, 0.019800769165158272, 0.00533986696973443, 0.00834828894585371, -0.02744896337389946, + 0.00929936021566391, -0.01977434940636158, -0.004316144622862339, 0.020091373473405838, + -0.026524310931563377, 0.032415665686130524, -0.018519464880228043, 0.007232101634144783, + 0.0013745947508141398, 0.0036490741185843945, 0.007621776778250933, -0.014067924581468105, + -0.029192592948675156, 0.02167649194598198, -0.022046351805329323, -0.015085041522979736, + 0.008995546028017998, 0.0007735707331448793, -0.019470535218715668, 0.032336410135030746, + -0.009411639533936977, 0.005594146437942982, -0.008500196039676666, -0.001761792809702456, + 0.0024569332599639893, 0.00040866329800337553, -0.01887611672282219, 0.016709787771105766, + -0.004709122236818075, -0.017515556886792183, 0.00032156435190699995, 0.22001440823078156, + -0.0027623986825346947, -0.003728330135345459, 0.018572302535176277, 0.005749356001615524, + -0.006948101334273815, 0.02270681783556938, -7.440561603289098e-05, -0.004920470993965864, + 0.01697397418320179, -0.009761686436831951, 0.004418516997247934, 0.004861029330641031, + -0.002493258798494935, 0.005620564799755812, 0.015983276069164276, -0.018545882776379585, + -0.012205409817397594, -0.026048775762319565, -0.012628108263015747, -0.0006728496518917382, + 0.007456660270690918, 0.018096765503287315, -0.006915078032761812, 0.014715180732309818, + 0.011980852112174034, 0.002475096145644784, 0.005571030080318451, 0.01648522913455963, + -0.002843305701389909, + 0.003062910633161664, -0.007747265510261059, 0.028347197920084, -0.015851182863116264, + -0.003434422891587019, + 0.008460568264126778, -0.003201608546078205, 0.012443178333342075, -0.005452146288007498, + 0.004705819766968489, -0.00938522070646286, 0.002204305026680231, 0.028320778161287308, + -0.009438058361411095, -0.03756730258464813, -0.007040566764771938, -0.013830156065523624, + -0.016102159395813942, 0.0023644680622965097, -0.009596569463610649, -0.01517750695347786, + -0.013354620896279812, 0.0073509858921170235, 0.007403823081403971, -0.0188364889472723, + 0.005997030530124903, 0.005597448907792568, -0.006181960925459862, 0.01450383197516203, + -0.013519737869501114, 0.004715726710855961, -0.006000332999974489, -0.023618262261152267, + 0.018744023516774178, -0.012119549326598644, 0.03719744086265564, -0.010521221905946732, + 0.03772581368684769, + 0.010620292276144028, -0.03186087682843208, 0.007601962890475988, 0.007020752876996994, + -0.013367829844355583, -0.0010798617731779814, -0.02077825739979744, -0.020315932109951973, + 0.015005785971879959, -0.01071936171501875, 0.009438058361411095, 0.010151361115276814, + -0.0002008229203056544, -0.011287362314760685, 0.019351651892066002, -0.004953494295477867, + -0.0033254458103328943, -0.03481976315379143, -0.004811494145542383, 0.007080194540321827, + 0.014834064990282059, -0.03376301750540733, 0.003039794508367777, -0.03471408784389496, + -0.0032313296105712652, -0.02890198864042759, 0.0055016810074448586, 0.02475426346063614, + 0.012027084827423096, 0.03072487562894821, 0.00012579812027979642, 0.017026811838150024, + -0.024397611618041992, -0.004970006179064512, 0.015507739968597889, -0.03035501390695572, + -0.016789043322205544, 0.026352589949965477, -0.016128577291965485, 0.023776773363351822, + 0.02001211792230606, -0.03497827425599098, -0.002318235347047448, -0.03606143966317177, + 0.0046133543364703655, 0.0014967808965593576, -0.011954433284699917, 0.0080378707498312, + 0.019787559285759926, -0.0053497739136219025, -0.006300844717770815, -0.025507193058729172, + 0.02153118886053562, -0.003903353586792946, 0.016128577291965485, -0.0004540703084785491, + 0.003295724978670478, 0.0021910956129431725, 0.0020111186895519495, -0.00980131421238184, + 0.009457872249186039, -0.024173052981495857, 0.01669657789170742, -0.0013473505387082696, + 0.011525130830705166, 0.0028614685870707035, 0.008698335848748684, -0.008665313012897968, + 0.01680225320160389, 0.008427545428276062, 0.018677975982427597, -0.013334807008504868, 0.03685399889945984, + 0.005772472359240055, -0.016405973583459854, -0.014530249871313572, 0.028426453471183777, + -0.013262155465781689, 0.028743477538228035, -0.00812373124063015, -0.0140018779784441, + -0.019457325339317322, -0.021425515413284302, -0.014160389080643654, -0.02758105657994747, + -0.03162311017513275, 0.006730147637426853, -0.018519464880228043, -0.034000784158706665, + -0.02305026166141033, 0.015402065590023994, 0.012093131430447102, -0.0062447055242955685, + 4.273033937352011e-06, 0.014926529489457607, -0.007694427855312824, 0.014715180732309818, + -0.006360286846756935, -0.16960765421390533, 0.03083054907619953, 0.0009469430078752339, + -0.03463483229279518, -0.004738843068480492, 0.026709241792559624, 0.0006637682672590017, + 0.010118338279426098, -0.01855909265577793, 0.008982336148619652, 0.024173052981495857, + -0.004359074868261814, -0.03141175955533981, 0.0005944193108007312, -0.005475262645632029, + 0.00137211789842695, -0.010673128999769688, 0.02281249314546585, 0.009292755275964737, 0.009008754976093769, + 0.029166175052523613, -0.018479837104678154, 0.0264450553804636, -0.01552094891667366, + -0.0013927575200796127, -0.008777592331171036, -0.019166721031069756, 0.023393703624606133, + -0.025322264060378075, -0.003903353586792946, 5.143765520188026e-06, 0.006967915687710047, + 0.0073509858921170235, 0.03347241133451462, 0.019417697563767433, -0.016617322340607643, + 0.0014571528881788254, -0.013803738169372082, -0.0002782212686724961, 0.023803191259503365, + 0.0016140135703608394, 0.038491953164339066, 0.020751839503645897, 0.0010228966129943728, + 0.004933680407702923, 0.020553698763251305, 0.011551548726856709, 0.011888386681675911, 0.00590126309543848, + -0.0050558666698634624, 0.008929499424993992, -0.021650072187185287, 0.002280258573591709, + 0.0017799556953832507, 0.008427545428276062, 0.026128031313419342, 0.009940012358129025, + -0.007443450856953859, 0.006515496410429478, -0.001655292697250843, 0.0006633554585278034, + -0.02077825739979744, -0.012846061959862709, -0.005930983927100897, -0.025388309732079506, + -0.01818923093378544, -0.00034674460766837, -0.016683369874954224, 0.0015165949007496238, + -0.003001817734912038, -0.012766806408762932, 0.01877044141292572, 0.01718532294034958, + -0.008982336148619652, 0.006310752127319574, 0.012819643132388592, 0.003596236929297447, + 0.02530905418097973, + -0.0063536823727190495, -0.015666252002120018, -0.006882054731249809, 0.043405819684267044, + 0.005105401389300823, -0.013519737869501114, -0.007621776778250933, 0.018955372273921967, + -0.005557820666581392, -0.009840941987931728, 0.003936376888304949, 0.0029176082462072372, + 0.008784196339547634, 0.0007335299742408097, -0.02426551841199398, -0.0133942486718297, 0.01721174269914627, + 0.01725137047469616, -0.0006588147371076047, -0.017026811838150024, -0.005795588251203299, + -0.020659374073147774, -0.0024239099584519863, -0.019034627825021744, -0.011465688236057758, + 0.0075028929859399796, -0.0031900503672659397, 0.024899564683437347, 0.016987184062600136, + 0.008354893885552883, 0.008044474758207798, -0.01121471170336008, -0.013189504854381084, + 0.007119822781533003, 0.016366345807909966, 0.018453417345881462, -0.010382524691522121, + 0.03909958153963089, + -0.000770681188441813, -0.021861422806978226, 0.019932862371206284, -0.007549125701189041, + 0.039258092641830444, 0.006475868169218302, 0.01686829887330532, 0.011941224336624146, + -0.0017551882192492485, -0.0030232828576117754, -0.10329686850309372, -0.028162267059087753, + 0.017858998849987984, 0.01590401865541935, -0.012396945618093014, 0.018506255000829697, + -0.013790528289973736, 0.0027293753810226917, 0.0034971670247614384, 0.015534158796072006, + 0.003376631997525692, -0.029536036774516106, -0.017674067988991737, -0.012330899015069008, + 0.01697397418320179, 0.0008841987582854927, 0.0190082099288702, -0.013962249271571636, + -0.010910897515714169, + 0.01600969396531582, -0.006895264144986868, 0.008988941088318825, 0.0062447055242955685, + -0.01372448168694973, 0.006789589766412973, -0.009893779642879963, -0.02340691164135933, + 0.01821565069258213, + 0.0031372131779789925, 0.001075733918696642, 0.016445601359009743, 0.01130717620253563, + -0.0016379555454477668, -0.009662616066634655, -0.018585510551929474, 0.020078163594007492, + -0.022772865369915962, 0.012912108562886715, 0.02488635666668415, -0.03186087682843208, + 0.0022290723863989115, -0.014411366544663906, -0.01569266989827156, -0.014701971784234047, + -0.002227421384304762, 0.013539551757276058, -0.023314446210861206, 0.007337776478379965, + 0.0073113576509058475, -0.024569332599639893, -0.016115369275212288, -0.014569878578186035, + -0.026696031913161278, -0.014649134129285812, 0.006994334049522877, 0.007833126001060009, + 0.006522100884467363, 0.018294906243681908, -0.00947108119726181, -0.012694154866039753, + -0.019589418545365334, 0.0018410487100481987, 0.0056502860970795155, 0.0007620125543326139, + -0.030539944767951965, -0.001172326970845461, -0.031094735488295555, -0.017132485285401344, + 0.004735540598630905, 0.006644287146627903, 0.011828945018351078, -0.013632016256451607, + -0.02561286836862564, -0.000537866959348321, -0.02492598444223404, 0.0009651058353483677, + -0.010534431785345078, -0.01519071590155363, 0.003969400189816952, -0.05701141804456711, + 0.0005097971297800541, -0.021861422806978226, 0.01763444021344185, -0.03431781008839607, + 0.005372890271246433, 0.01849304512143135, 0.011452479287981987, 0.0013308388879522681, + -0.0032759110908955336, -0.008599266409873962, 0.00286477105692029, 0.005224285647273064, + 0.005604053381830454, -0.006928287446498871, -0.0071660554967820644, 0.02441081963479519, + -0.0050558666698634624, -0.018176022917032242, -0.019893232733011246, 0.00324453879147768, + 0.007701032795011997, -0.005904565565288067, -0.046206194907426834, 0.011888386681675911, + 0.01725137047469616, -0.010930711403489113, -0.025388309732079506, -0.012396945618093014, + 0.005917774513363838, 0.012496015056967735, 0.02080467715859413, 0.02458254247903824, -0.017092857509851456, + 0.015256762504577637, 0.017198532819747925, 0.007483079098165035, -0.027264032512903214, + -0.016551276668906212, -0.00918047595769167, 0.0031471201218664646, 0.012865875847637653, + 0.02018383890390396, -0.012885689735412598, -0.0004326051857788116, -0.018928952515125275, + 0.0030265850946307182, -0.01501899491995573, 0.0020507466979324818, -0.021082071587443352, + 0.032098643481731415, -0.014371738769114017, -0.010072105564177036, 0.03521604463458061, + -0.012093131430447102, -0.018572302535176277, -0.008341684937477112, -0.0011343501973897219, + -0.021451933309435844, 0.006406519562005997, -0.01793825440108776, 0.03384227305650711, + -0.004207167774438858, 0.006617868784815073, -0.040394097566604614, 0.015111460350453854, + 0.011379827745258808, -0.004735540598630905, -0.004712424241006374, 0.0015141181647777557, + -0.001814630115404725, 0.004124609753489494, 0.005369587801396847, -0.0015801647678017616, + 0.007443450856953859, 0.003181794658303261, -0.01984039694070816, 0.007740660570561886, 0.01496615819633007, + 0.007826521061360836, -0.01338103972375393, 0.015573786571621895, -0.02945677936077118, 0.01159778144210577, + 0.0011128850746899843, 0.015032204799354076, -0.005623867269605398, 0.015705879777669907, + 6.25894681434147e-05, -0.03291762247681618, -0.0075028929859399796, 0.028611384332180023, + -0.004322749562561512, -0.019100675359368324, -0.016643742099404335, 0.00954373273998499, + -0.005663495510816574, 0.014701971784234047, 0.0013390947133302689, 0.006449449807405472, + 0.009609779343008995, -0.029668129980564117, 0.021544398739933968, 0.013348015956580639, + 0.004375586751848459, 0.0071660554967820644, -0.015586995519697666, 0.01928560435771942, + 0.004385493695735931, -0.020315932109951973, 0.00035892194136977196, -0.004375586751848459, + 0.00764819560572505, -0.02073862962424755, 0.011729874648153782, -0.005019540898501873, + -0.01237713173031807, + -0.022772865369915962, 0.02668282389640808, -0.025216588750481606, 0.0034839578438550234, + 0.020870722830295563, -0.00031784921884536743, -0.0015950251836329699, -0.006360286846756935, + -0.010897687636315823, -0.017898626625537872, -0.01187517773360014, 0.005006331484764814, + -0.012040293775498867, -0.02522979862987995, -0.018915744498372078, -0.0033650738187134266, + 0.014252854511141777, -0.0007904951344244182, -0.0031883991323411465, 0.01701360195875168, + -0.009702244773507118, 0.002305026166141033, -0.013420667499303818, -0.009986245073378086, + -0.03656339272856712, 0.012529038824141026, 0.001564478618092835, 0.024873146787285805, + 0.017687277868390083, + -0.016498439013957977, 0.030460689216852188, -0.018995000049471855, 0.015705879777669907, + -0.0063536823727190495, 0.015494531020522118, -0.03730311617255211, 0.005874844267964363, + 0.027871662750840187, -0.017515556886792183, -0.004078377038240433, -0.01825527846813202, + 0.019444117322564125, -0.004022237379103899, -0.010963734239339828, -0.009768291376531124, + 0.03447632119059563, 0.005092192441225052, -0.015547367744147778, 0.013281969353556633, + -0.01221861969679594, + 0.013658435083925724, 0.026603566482663155, -0.001470362301915884, -0.013975459150969982, + -0.021993516013026237, -0.008942708373069763, 0.002841654699295759, 0.020025325939059258, + -0.007192473858594894, -0.01372448168694973, 0.015098251402378082, -0.00404535373672843, + 0.002308328403159976, -0.02603556588292122, -0.0011929665924981236, 0.026418637484312057, + -0.0003665585827548057, 0.02958887256681919, 0.010534431785345078, -0.028188684955239296, + 4.211760369798867e-06, 0.016392763704061508, -0.014147180132567883, -0.013935831375420094, + -0.01994607038795948, 0.007899172604084015, 0.0014307342935353518, -0.015137879177927971, + -0.021927468478679657, 0.02956245467066765, -0.006707031279802322, -0.006796194240450859, + -0.0021531188394874334, 0.022138817235827446, 0.016960764303803444, -0.01014475617557764, + 0.02969454787671566, -0.020870722830295563, -0.034449901431798935, -0.011987456120550632, + -0.016128577291965485, 0.002179537434130907, -0.0019714906811714172, 0.0016891416162252426] + + def __init__(self, path): + self.pickle_path = path + self.dim = -1 + if os.path.isfile(self.pickle_path): + with open(self.pickle_path, 'rb') as fpp: + self.db = pickle.load(fpp, encoding="bytes") + else: + self.db = [ + ("quick brown fox jump lazy dog", OpenAITextEmbeddingDB.arr1), + ("sharp knife bag", OpenAITextEmbeddingDB.arr2), + ("security discovered concealed knife passenger's bag", OpenAITextEmbeddingDB.arr3), + ] + self.commit() + + self.dim = len(self.db[0][1]) + + def to_dict(self): + db = dict() + for text, embeddings in self.db: + db[text] = embeddings + return db + + def append(self, text, embedding): + assert len(embedding) == self.dim + self.db.append((text, embedding)) + + def commit(self): + with open(self.pickle_path, 'wb') as fpp: + pickle.dump(self.db, fpp) + + def is_available(self, text): + lll = len(self.query(text)) > 0 + return lll + + def query(self, text): + lll = list(filter(lambda xy: xy[0] == text, self.db)) + return lll + + +class OpenAIModelProxy: + def __init__(self, openai_emb_db, dtype="float64"): + emb_db = OpenAITextEmbeddingDB(openai_emb_db) + self.emb_dict = emb_db.to_dict() + self.dim = emb_db.dim + self.dtype = dtype + + def get_word_vector(self, text): + t = DatasetWrap.clean(text) + v = self.emb_dict.get(t, None) + if v is None: + raise KeyError("Embedding value not found for '{}'".format(text)) + v = np.array(v, dtype=self.dtype) + return v + + +def get_openai_api_key(path): + with open(path, "r") as fp: + for key, nickname in csv.reader(fp): + yield key, nickname + + +class OpenAICredentialManager: + """ + This singleton class read a working api key form a list of api-keys available as a simple csv file. + It yields an endless flow of a valid openai api key. Background: The usage limit for an OpenAI API + key is limited as described here: https://platform.openai.com/docs/guides/rate-limits/overview. + This is useful, when users have a multiple OpenAI account to leverage the full potential of openai seamlessly. + + Save the file: + openapi-key.apikey + sk-x12x12x12x12xcc125221c223444XfYtyTYTgtYTYTyyTybb,user1 + sk-x12x12x12x12xcc125221c223444XfYtyTYTgtYTYTyyTybb,user2 + + Example: + cm = OpenAICredentialManager("openapi-key.csv") + key, nickname = next(cm) # sk-x12x12x12x12xcc125221c223444XfYtyTYTgtYTYTyyTybb, user1 + + """ + instance = None + + def __init__(self, path): + if OpenAICredentialManager.instance is not None: + raise Exception("'{}' is a singleton class!".format(self.__class__.__qualname__)) + OpenAICredentialManager.instance = self + self.path = path + self.nickname = None + self.key = None + self.keygen = get_openai_api_key(path) + self.please_stop = False + self.rate_limit_dict = dict() + + def set_limit_exhausted(self, nickname: str): + if self.rate_limit_dict.get(nickname, None) is None: + self.rate_limit_dict[nickname] = datetime.now() + + def is_limit_exhausted(self, nickname: str): + a = self.rate_limit_dict.get(nickname, None) + if a is None: + return False + b = datetime.now() + c = b - a + if c.microseconds > 600000: + self.rate_limit_dict[nickname] = None + return False + else: + return True + + def __iter__(self): + return self + + def __next__(self): + while True: + if self.please_stop is True: + break + try: + self.key, self.nickname = next(self.keygen) + except StopIteration: + self.keygen = get_openai_api_key(self.path) + self.key, self.nickname = next(self.keygen) + finally: + print("Using openai API Key for: '{}'".format(self.nickname)) + return self.key, self.nickname + + +# IMPORTANT LINKS +# Lang Chain +# https://python.langchain.com/en/latest/getting_started/getting_started.html +# CLIP +# https://huggingface.co/docs/transformers/model_doc/clip +# https://towardsdatascience.com/linking-images-and-text-with-openai-clip-abb4bdf5dbd2 +# OPENAI +# https://platform.openai.com/docs/models/overview +# https://platform.openai.com/docs/guides/rate-limits/overview +# https://platform.openai.com/account/rate-limits +# https://platform.openai.com/docs/api-reference/models/list +# https://platform.openai.com/docs/guides/moderation/quickstart + + +class OpenAITextLoader: + """ + OpenAI API access is limited as describer here: https://platform.openai.com/docs/guides/rate-limits/overview. + It limits user by Request Per Minute(RPM) and Token Per Minute(TPM). And this also varies as the choice of + algorithm. Thus, to make the most out of the API service, we can preprocess the texts in chunks (as documents) + before sending out to openapi. This way we can optimize the RPM and TPM. + + Now, OpenAITextLoader class provides an iterator wrapper over your textual data loader. In each iteration, + it yields a list of text to send to OpenAI server for processing. + Optionally, it sleeps for some time, precalculated, if and when needed to honor RPM and TPM. This behaviour + could be controlled by setting a boolean flag 'auto_sleep=False'. To get the current sleep value(in mills) + before making a next request can be accessed via 'self.sleep_milli' variable. It is recommended to use + 'auto_sleep=True'. + """ + ONE_MINUTE_MILLS = 60000 + + def __init__(self, dataloader, total_tokens=-1, total_sentence=-1, model_token_support=2000, rpm=3, tpm=150000, + auto_sleep=True, + throw_error=True, + truncate=False): + """ + Default values for all the arguments are supported in Free Tire using 'ada' text tokenizer + Args: + dataloader: Dataloader is a generator to load textual data. + Please make sure to remove any duplicate sentence and, + stop words, symbols, and numbers etc. Otherwise, + it will end up wasting valuable OpenAI API quota. + model_token_support: How many tokens you model can process in one shot. + As per openai, you can send approximately 200x more tokens per + minute to an 'ada' model versus a 'davinci' model. + See: https://platform.openai.com/docs/models/overview + + rpm: How many RPM you are allowed to make. + See: https://platform.openai.com/account/rate-limits + + tpm: How many TMP you are allowed to process. + See: https://platform.openai.com/account/rate-limits + + auto_sleep: Set False to handle seep manually. + """ + self.buffer = [] + self.dataloader = dataloader + self.model_token_support = model_token_support + self.rpm = rpm + self.tpm = tpm + # other variables + self.auto_sleep = auto_sleep + self.since = None + # self.request_counter = 0 + self.token_counter = 0 + self.sleep_milli = int(OpenAITextLoader.ONE_MINUTE_MILLS / self.rpm) + 5 + self.residual_text = None + # extra features + self.throw_error = throw_error + self.truncate = truncate + if auto_sleep is False: + print("Please sleep before between API calls") + self.bulk_eta_min = -1 + self.single_eta_min = -1 + if total_tokens > 0: + print("Estimated time to complete with one API KEY (bulk): ", end="") + # m = model token support + # t = total data tokens + # tpm = tone per minute + # required_requests = t / m + # time_required_minute = required_requests / rpm + self.bulk_eta_min = round((total_tokens / self.model_token_support) / self.rpm, 2) + print(self.bulk_eta_min, end=" minute(s)\n") + if total_sentence > 0: + print("Estimated time to complete one API KEY (single): ", end="") + # one request per sentence. total_req = total_sentence + # estimated_min = total_sentence / rpm + # time_required_minute = required_requests / rpm + self.single_eta_min = round(total_sentence / rpm, 2) + print(self.single_eta_min, end=" minute(s)\n") + + def sleep(self): + if self.auto_sleep: + print("Sleep for: {} sec".format(self.sleep_milli / 1000)) + time.sleep(self.sleep_milli / 1000) + + def __next__(self): + """ + The iterator + """ + print("Start Time:", datetime.now()) + while True: + self.buffer.clear() + tokens = 0 + just_started = False + # calculate time difference in millisecond + if self.since is None: + # start timer + self.since = datetime.now() + just_started = True + now = datetime.now() + # # inter-call difference in milliseconds + mills_diff = int((now - self.since).microseconds / 10) + # if one minute is not over, but you have exhausted TPM, sleep + if mills_diff < OpenAITextLoader.ONE_MINUTE_MILLS and self.token_counter >= self.tpm: + print("TPM exhaust sleep. One minute is not over, but you have exhausted TPM, sleeps") + self.token_counter = 0 # reset token counter + self.since = datetime.now() # reset timer + self.sleep_milli = (OpenAITextLoader.ONE_MINUTE_MILLS - mills_diff) + 10 + self.sleep() + else: + if just_started is False: + print("Inter-request sleep to honour RPM") + self.sleep_milli = int(OpenAITextLoader.ONE_MINUTE_MILLS / self.rpm) + 5 + self.sleep() + # look for any residual text from previous iteration + if self.residual_text is not None: + print("Residual text retrival: '{}'".format(self.residual_text)) + # count the length of residual test + tokens = len(self.residual_text) + self.token_counter += tokens + # append it to buffer + self.buffer.append(self.residual_text) + # check if we it + self.residual_text = None + # fetch new text + for text in self.dataloader: + # get the length of new text + lent = len(text) + if lent >= self.model_token_support: + # user asked to truncate the text + if self.truncate: + text = text[:self.model_token_support - 1] + else: + # user asked to throw error if not truncating + if self.throw_error: + raise ValueError( + "The text '{}' is larger than the model can process:{}".format( + text, self.model_token_support) + ) + else: + # user asked not to truncate but to skip silently + continue + tokens += lent + if tokens >= self.model_token_support: + self.residual_text = text + print("Residual text saved: '{}'".format(self.residual_text)) + break + else: + self.token_counter += lent + self.buffer.append(text) + if len(self.buffer) > 0: + yield self.buffer + else: + break + print("End Time:", datetime.now()) diff --git a/data/map500to2300.ipynb b/data/map500to2300.ipynb new file mode 100644 index 0000000..d409461 --- /dev/null +++ b/data/map500to2300.ipynb @@ -0,0 +1,2458 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "id": "2ebb1575", + "metadata": {}, + "outputs": [], + "source": [ + "import pandas as pd\n", + "import sqlite3" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "6bbedd5f", + "metadata": {}, + "outputs": [], + "source": [ + "df = pd.read_csv('./dataset_500_to_2300_map_final.csv')" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "daf6a55e", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "(2381, 5)" + ] + }, + "execution_count": 3, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df.shape" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "0b982360-c58e-474c-8a28-f97435cb9110", + "metadata": {}, + "outputs": [], + "source": [ + "conn = sqlite3.connect(\"tip_gai_2500.db\")\n", + "conn2 = sqlite3.connect(\"tip_gai_2500_2.db\")\n", + "\n", + "dbdf = pd.read_sql_query(\"SELECT * FROM caption\", conn)\n", + "dbdf2 = pd.read_sql_query(\"SELECT * FROM caption\", conn2)" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "841ab4cd-0ffa-4f86-a074-40094f9482ed", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "((2500, 6), (2500, 6))" + ] + }, + "execution_count": 5, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "dbdf.shape, dbdf2.shape" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "id": "553199fa", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
ThumbnailFile NameNAIs in 500 collection?Map File Name
0NaNP00001.jpgNaN1NaN
1NaNP00002.jpgNaN0P00001.jpg
2NaNP00004.jpgNaN1NaN
3NaNP00005.jpgNaN1NaN
4NaNP00006.jpgNaN1NaN
\n", + "
" + ], + "text/plain": [ + " Thumbnail File Name NA Is in 500 collection? Map File Name\n", + "0 NaN P00001.jpg NaN 1 NaN\n", + "1 NaN P00002.jpg NaN 0 P00001.jpg\n", + "2 NaN P00004.jpg NaN 1 NaN\n", + "3 NaN P00005.jpg NaN 1 NaN\n", + "4 NaN P00006.jpg NaN 1 NaN" + ] + }, + "execution_count": 6, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df.head()" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "id": "8765512b", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "(1862, 5)" + ] + }, + "execution_count": 7, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df2 = df[(df['NA'] != 1) & (df['Is in 500 collection?'] == 0) & (~df['Map File Name'].isna())]\n", + "df2.shape" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "id": "3cf82fc5", + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "C:\\Users\\dndlssardar\\AppData\\Local\\Temp\\ipykernel_20108\\930387596.py:1: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " df2.drop(columns=['Thumbnail', 'NA', 'Is in 500 collection?'], inplace=True)\n" + ] + }, + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
File NameMap File Name
1P00002.jpgP00001.jpg
7P00009.jpgP00008.jpg
10P00012.jpgP00011.jpg
13P00015.jpgP00011.jpg
18P00022.jpgP00021.jpg
\n", + "
" + ], + "text/plain": [ + " File Name Map File Name\n", + "1 P00002.jpg P00001.jpg\n", + "7 P00009.jpg P00008.jpg\n", + "10 P00012.jpg P00011.jpg\n", + "13 P00015.jpg P00011.jpg\n", + "18 P00022.jpg P00021.jpg" + ] + }, + "execution_count": 8, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df2.drop(columns=['Thumbnail', 'NA', 'Is in 500 collection?'], inplace=True)\n", + "df2.head()" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "id": "d6b499fb", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
idfile_idcaptionuseris_erroris_occluded
01P00001.jpgTwo knives, one placed on top of other, in a b...anshul01
12P00001.jpgA bag with knives.\\nTwo shrap knives in a back...soumen01
23P00001.jpgSecurity discovered a concealed knife in the p...soumen01
35P00004.jpgTwo knives are hidden inside a backpack.soumen00
46P00005.jpgTwo knives are hidden inside a backpack overla...soumen00
\n", + "
" + ], + "text/plain": [ + " id file_id caption user \\\n", + "0 1 P00001.jpg Two knives, one placed on top of other, in a b... anshul \n", + "1 2 P00001.jpg A bag with knives.\\nTwo shrap knives in a back... soumen \n", + "2 3 P00001.jpg Security discovered a concealed knife in the p... soumen \n", + "3 5 P00004.jpg Two knives are hidden inside a backpack. soumen \n", + "4 6 P00005.jpg Two knives are hidden inside a backpack overla... soumen \n", + "\n", + " is_error is_occluded \n", + "0 0 1 \n", + "1 0 1 \n", + "2 0 1 \n", + "3 0 0 \n", + "4 0 0 " + ] + }, + "execution_count": 9, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "dbdf.head()" + ] + }, + { + "cell_type": "markdown", + "id": "32a85c6d-c4ec-4388-a9f7-c8c80aef4f2c", + "metadata": {}, + "source": [ + "# SQLite Update" + ] + }, + { + "cell_type": "markdown", + "id": "3af88237-9868-4fbc-8da3-2ecb1e5029ce", + "metadata": {}, + "source": [ + "## Insert map-data to database" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "id": "054c0e21-108d-4d41-a61e-07d2eb1fd9cb", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + " P08923.jpg P02468.jpg " + ] + }, + { + "data": { + "text/plain": [ + "(11805, 6)" + ] + }, + "execution_count": 10, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "user = 'mapped'\n", + "sql = \"INSERT INTO 'caption' ('file_id', 'caption', 'user', 'is_error', 'is_occluded') VALUES (?, ?, ?, ?, ?);\"\n", + "dbdf2['user'] = user\n", + "cur = conn2.cursor()\n", + "cur.execute(\"BEGIN TRANSACTION;\")\n", + "for src_file, map_file in df2.apply(lambda x:x.values, axis=1):\n", + " print(\"\\r\",src_file, map_file, \" \", end=\"\\b\")\n", + " fdf = dbdf2[dbdf2['file_id'] == map_file].copy()\n", + " fdf.loc[:, ['file_id']] = src_file\n", + " data = fdf[['file_id', 'caption', 'user', 'is_error', 'is_occluded']].values\n", + " cur.executemany(sql, data)\n", + "cur.execute(\"COMMIT;\")\n", + "conn2.commit()\n", + "dbdf2 = pd.read_sql_query(\"SELECT * FROM caption\", conn2)\n", + "dbdf2.shape" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "id": "5ab69fd4-e2d5-412f-a633-aa0bee50b8d4", + "metadata": {}, + "outputs": [], + "source": [ + "conn2.close()\n", + "# conn2.close()" + ] + }, + { + "cell_type": "markdown", + "id": "d5c936d3-0884-40e2-8e4b-1f1b6bb662b8", + "metadata": {}, + "source": [ + "# File Creation with `Ray`" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "id": "31ef8aa5", + "metadata": {}, + "outputs": [], + "source": [ + "import ray\n", + "from collections import defaultdict\n", + "import pathlib\n", + "import threading" + ] + }, + { + "cell_type": "code", + "execution_count": 66, + "id": "ee594cce", + "metadata": {}, + "outputs": [], + "source": [ + "# create locks\n", + "file_locks = defaultdict(lambda: threading.Lock())\n", + "@ray.remote\n", + "def file_writer(filename, captions):\n", + " with file_locks[filename]:\n", + " with open(filename, 'a+') as fp:\n", + " fp.seek(0)\n", + " lines = fp.readlines()\n", + " for caption in captions:\n", + " if caption + \"\\n\" in lines:\n", + " pass\n", + " elif len(caption.split(\" \")) < 2:\n", + " pass\n", + " else:\n", + " fp.write(caption.replace(\"\\n\", \" \").strip() + \"\\n\")" + ] + }, + { + "cell_type": "code", + "execution_count": 67, + "id": "c9818564", + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2023-06-07 19:14:53,533\tINFO worker.py:1625 -- Started a local Ray instance.\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + " P00002.jpg P00001.jpg sixray_500\\train\\captions\\P00002.txt\n", + " P00009.jpg P00008.jpg sixray_500\\train\\captions\\P00009.txt\n", + " P00012.jpg P00011.jpg sixray_500\\train\\captions\\P00012.txt\n", + " P00015.jpg P00011.jpg sixray_500\\train\\captions\\P00015.txt\n", + " P00022.jpg P00021.jpg sixray_500\\train\\captions\\P00022.txt\n", + " P00038.jpg P00033.jpg sixray_500\\train\\captions\\P00038.txt\n", + " P00044.jpg P00033.jpg sixray_500\\train\\captions\\P00044.txt\n", + " P00045.jpg P00042.jpg sixray_500\\train\\captions\\P00045.txt\n", + " P00046.jpg P00033.jpg sixray_500\\train\\captions\\P00046.txt\n", + " P00048.jpg P00033.jpg sixray_500\\train\\captions\\P00048.txt\n", + " P00049.jpg P00042.jpg sixray_500\\train\\captions\\P00049.txt\n", + " P00051.jpg P00033.jpg sixray_500\\train\\captions\\P00051.txt\n", + " P00052.jpg P00033.jpg sixray_500\\train\\captions\\P00052.txt\n", + " P00053.jpg P00042.jpg sixray_500\\train\\captions\\P00053.txt\n", + " P00054.jpg P00033.jpg sixray_500\\train\\captions\\P00054.txt\n", + " P00055.jpg P00042.jpg sixray_500\\train\\captions\\P00055.txt\n", + " P00065.jpg P00042.jpg sixray_500\\train\\captions\\P00065.txt\n", + " P00066.jpg P00067.jpg sixray_500\\train\\captions\\P00066.txt\n", + " P00068.jpg P00042.jpg sixray_500\\train\\captions\\P00068.txt\n", + " P00069.jpg P00042.jpg sixray_500\\train\\captions\\P00069.txt\n", + " P00071.jpg P00042.jpg sixray_500\\train\\captions\\P00071.txt\n", + " P00072.jpg P00067.jpg sixray_500\\train\\captions\\P00072.txt\n", + " P00073.jpg P00067.jpg sixray_500\\train\\captions\\P00073.txt\n", + " P00074.jpg P00067.jpg sixray_500\\train\\captions\\P00074.txt\n", + " P00075.jpg P00067.jpg sixray_500\\train\\captions\\P00075.txt\n", + " P00076.jpg P00042.jpg sixray_500\\train\\captions\\P00076.txt\n", + " P00077.jpg P00067.jpg sixray_500\\train\\captions\\P00077.txt\n", + " P00078.jpg P00067.jpg sixray_500\\train\\captions\\P00078.txt\n", + " P00079.jpg P00067.jpg sixray_500\\train\\captions\\P00079.txt\n", + " P00080.jpg P00042.jpg sixray_500\\train\\captions\\P00080.txt\n", + " P00082.jpg P03078.jpg sixray_500\\train\\captions\\P00082.txt\n", + " P00083.jpg P00042.jpg sixray_500\\train\\captions\\P00083.txt\n", + " P00084.jpg P00042.jpg sixray_500\\train\\captions\\P00084.txt\n", + " P00085.jpg P00042.jpg sixray_500\\train\\captions\\P00085.txt\n", + " P00089.jpg P00042.jpg sixray_500\\train\\captions\\P00089.txt\n", + " P00090.jpg P00042.jpg sixray_500\\train\\captions\\P00090.txt\n", + " P00093.jpg P03078.jpg sixray_500\\train\\captions\\P00093.txt\n", + " P00094.jpg P03078.jpg sixray_500\\train\\captions\\P00094.txt\n", + " P00095.jpg P03078.jpg sixray_500\\train\\captions\\P00095.txt\n", + " P00097.jpg P03078.jpg sixray_500\\train\\captions\\P00097.txt\n", + " P00100.jpg P02978.jpg sixray_500\\train\\captions\\P00100.txt\n", + " P00101.jpg P02978.jpg sixray_500\\train\\captions\\P00101.txt\n", + " P00103.jpg P02978.jpg sixray_500\\train\\captions\\P00103.txt\n", + " P00104.jpg P03078.jpg sixray_500\\train\\captions\\P00104.txt\n", + " P00105.jpg P02978.jpg sixray_500\\train\\captions\\P00105.txt\n", + " P00106.jpg P03078.jpg sixray_500\\train\\captions\\P00106.txt\n", + " P00107.jpg P02978.jpg sixray_500\\train\\captions\\P00107.txt\n", + " P00108.jpg P02978.jpg sixray_500\\train\\captions\\P00108.txt\n", + " P00109.jpg P03078.jpg sixray_500\\train\\captions\\P00109.txt\n", + " P00110.jpg P02978.jpg sixray_500\\train\\captions\\P00110.txt\n", + " P00111.jpg P02978.jpg sixray_500\\train\\captions\\P00111.txt\n", + " P00112.jpg P02978.jpg sixray_500\\train\\captions\\P00112.txt\n", + " P00113.jpg P02978.jpg sixray_500\\train\\captions\\P00113.txt\n", + " P00114.jpg P03078.jpg sixray_500\\train\\captions\\P00114.txt\n", + " P00120.jpg P03078.jpg sixray_500\\train\\captions\\P00120.txt\n", + " P00123.jpg P03078.jpg sixray_500\\train\\captions\\P00123.txt\n", + " P00133.jpg P03078.jpg sixray_500\\train\\captions\\P00133.txt\n", + " P00143.jpg P03149.jpg sixray_500\\train\\captions\\P00143.txt\n", + " P00147.jpg P03078.jpg sixray_500\\train\\captions\\P00147.txt\n", + " P00149.jpg P03078.jpg sixray_500\\train\\captions\\P00149.txt\n", + " P00150.jpg P03078.jpg sixray_500\\train\\captions\\P00150.txt\n", + " P00152.jpg P03078.jpg sixray_500\\train\\captions\\P00152.txt\n", + " P00155.jpg P03078.jpg sixray_500\\train\\captions\\P00155.txt\n", + " P00157.jpg P03078.jpg sixray_500\\train\\captions\\P00157.txt\n", + " P00159.jpg P03078.jpg sixray_500\\train\\captions\\P00159.txt\n", + " P00161.jpg P03078.jpg sixray_500\\train\\captions\\P00161.txt\n", + " P00162.jpg P03078.jpg sixray_500\\train\\captions\\P00162.txt\n", + " P00175.jpg P00183.jpg sixray_500\\train\\captions\\P00175.txt\n", + " P00176.jpg P00183.jpg sixray_500\\train\\captions\\P00176.txt\n", + " P00177.jpg P00183.jpg sixray_500\\train\\captions\\P00177.txt\n", + " P00178.jpg P00183.jpg sixray_500\\train\\captions\\P00178.txt\n", + " P00179.jpg P00183.jpg sixray_500\\train\\captions\\P00179.txt\n", + " P00180.jpg P00183.jpg sixray_500\\train\\captions\\P00180.txt\n", + " P00181.jpg P00183.jpg sixray_500\\train\\captions\\P00181.txt\n", + " P00182.jpg P00183.jpg sixray_500\\train\\captions\\P00182.txt\n", + " P00189.jpg P00193.jpg sixray_500\\train\\captions\\P00189.txt\n", + " P00190.jpg P00193.jpg sixray_500\\train\\captions\\P00190.txt\n", + " P00191.jpg P00193.jpg sixray_500\\train\\captions\\P00191.txt\n", + " P00192.jpg P00193.jpg sixray_500\\train\\captions\\P00192.txt\n", + " P00194.jpg P00193.jpg sixray_500\\train\\captions\\P00194.txt\n", + " P00195.jpg P00193.jpg sixray_500\\train\\captions\\P00195.txt\n", + " P00198.jpg P00193.jpg sixray_500\\train\\captions\\P00198.txt\n", + " P00199.jpg P00193.jpg sixray_500\\train\\captions\\P00199.txt\n", + " P00203.jpg P00210.jpg sixray_500\\train\\captions\\P00203.txt\n", + " P00205.jpg P00210.jpg sixray_500\\train\\captions\\P00205.txt\n", + " P00206.jpg P00193.jpg sixray_500\\train\\captions\\P00206.txt\n", + " P00209.jpg P00210.jpg sixray_500\\train\\captions\\P00209.txt\n", + " P00211.jpg P00207.jpg sixray_500\\train\\captions\\P00211.txt\n", + " P00212.jpg P00207.jpg sixray_500\\train\\captions\\P00212.txt\n", + " P00214.jpg P00210.jpg sixray_500\\train\\captions\\P00214.txt\n", + " P00216.jpg P00210.jpg sixray_500\\train\\captions\\P00216.txt\n", + " P00217.jpg P00207.jpg sixray_500\\train\\captions\\P00217.txt\n", + " P00218.jpg P00207.jpg sixray_500\\train\\captions\\P00218.txt\n", + " P00219.jpg P00207.jpg sixray_500\\train\\captions\\P00219.txt\n", + " P00223.jpg P00210.jpg sixray_500\\train\\captions\\P00223.txt\n", + " P00224.jpg P00193.jpg sixray_500\\train\\captions\\P00224.txt\n", + " P00227.jpg P00210.jpg sixray_500\\train\\captions\\P00227.txt\n", + " P00228.jpg P00193.jpg sixray_500\\train\\captions\\P00228.txt\n", + " P00230.jpg P00193.jpg sixray_500\\train\\captions\\P00230.txt\n", + " P00231.jpg P00210.jpg sixray_500\\train\\captions\\P00231.txt\n", + " P00233.jpg P00193.jpg sixray_500\\train\\captions\\P00233.txt\n", + " P00234.jpg P00210.jpg sixray_500\\train\\captions\\P00234.txt\n", + " P00236.jpg P00193.jpg sixray_500\\train\\captions\\P00236.txt\n", + " P00237.jpg P00193.jpg sixray_500\\train\\captions\\P00237.txt\n", + " P00239.jpg P00210.jpg sixray_500\\train\\captions\\P00239.txt\n", + " P00240.jpg P00210.jpg sixray_500\\train\\captions\\P00240.txt\n", + " P00242.jpg P00210.jpg sixray_500\\train\\captions\\P00242.txt\n", + " P00243.jpg P00210.jpg sixray_500\\train\\captions\\P00243.txt\n", + " P00245.jpg P00193.jpg sixray_500\\train\\captions\\P00245.txt\n", + " P00246.jpg P00210.jpg sixray_500\\train\\captions\\P00246.txt\n", + " P00247.jpg P00210.jpg sixray_500\\train\\captions\\P00247.txt\n", + " P00248.jpg P00210.jpg sixray_500\\train\\captions\\P00248.txt\n", + " P00249.jpg P00193.jpg sixray_500\\train\\captions\\P00249.txt\n", + " P00250.jpg P00210.jpg sixray_500\\train\\captions\\P00250.txt\n", + " P00252.jpg P00210.jpg sixray_500\\train\\captions\\P00252.txt\n", + " P00254.jpg P00210.jpg sixray_500\\train\\captions\\P00254.txt\n", + " P00257.jpg P00210.jpg sixray_500\\train\\captions\\P00257.txt\n", + " P00258.jpg P00193.jpg sixray_500\\train\\captions\\P00258.txt\n", + " P00260.jpg P00210.jpg sixray_500\\train\\captions\\P00260.txt\n", + " P00261.jpg P00210.jpg sixray_500\\train\\captions\\P00261.txt\n", + " P00262.jpg P00193.jpg sixray_500\\train\\captions\\P00262.txt\n", + " P00264.jpg P00210.jpg sixray_500\\train\\captions\\P00264.txt\n", + " P00265.jpg P00193.jpg sixray_500\\train\\captions\\P00265.txt\n", + " P00266.jpg P00210.jpg sixray_500\\train\\captions\\P00266.txt\n", + " P00267.jpg P00282.jpg sixray_500\\train\\captions\\P00267.txt\n", + " P00269.jpg P00210.jpg sixray_500\\train\\captions\\P00269.txt\n", + " P00270.jpg P00282.jpg sixray_500\\train\\captions\\P00270.txt\n", + " P00277.jpg P00282.jpg sixray_500\\train\\captions\\P00277.txt\n", + " P00280.jpg P00282.jpg sixray_500\\train\\captions\\P00280.txt\n", + " P00284.jpg P00282.jpg sixray_500\\train\\captions\\P00284.txt\n", + " P00287.jpg P00282.jpg sixray_500\\train\\captions\\P00287.txt\n", + " P00296.jpg P00282.jpg sixray_500\\train\\captions\\P00296.txt\n", + " P00297.jpg P00282.jpg sixray_500\\train\\captions\\P00297.txt\n", + " P00304.jpg P00282.jpg sixray_500\\train\\captions\\P00304.txt\n", + " P00307.jpg P00282.jpg sixray_500\\train\\captions\\P00307.txt\n", + " P00310.jpg P00282.jpg sixray_500\\train\\captions\\P00310.txt\n", + " P00313.jpg P00282.jpg sixray_500\\train\\captions\\P00313.txt\n", + " P00320.jpg P00282.jpg sixray_500\\train\\captions\\P00320.txt\n", + " P00326.jpg P00282.jpg sixray_500\\train\\captions\\P00326.txt\n", + " P00329.jpg P00282.jpg sixray_500\\train\\captions\\P00329.txt\n", + " P00330.jpg P00282.jpg sixray_500\\train\\captions\\P00330.txt\n", + " P00332.jpg P00282.jpg sixray_500\\train\\captions\\P00332.txt\n", + " P00334.jpg P00282.jpg sixray_500\\train\\captions\\P00334.txt\n", + " P00335.jpg P00282.jpg sixray_500\\train\\captions\\P00335.txt\n", + " P00337.jpg P00282.jpg sixray_500\\train\\captions\\P00337.txt\n", + " P00341.jpg P00193.jpg sixray_500\\train\\captions\\P00341.txt\n", + " P00343.jpg P00193.jpg sixray_500\\train\\captions\\P00343.txt\n", + " P00345.jpg P00193.jpg sixray_500\\train\\captions\\P00345.txt\n", + " P00353.jpg P00193.jpg sixray_500\\train\\captions\\P00353.txt\n", + " P00354.jpg P00193.jpg sixray_500\\train\\captions\\P00354.txt\n", + " P00355.jpg P00193.jpg sixray_500\\train\\captions\\P00355.txt\n", + " P00356.jpg P00193.jpg sixray_500\\train\\captions\\P00356.txt\n", + " P00357.jpg P00193.jpg sixray_500\\train\\captions\\P00357.txt\n", + " P00358.jpg P00193.jpg sixray_500\\train\\captions\\P00358.txt\n", + " P00359.jpg P00193.jpg sixray_500\\train\\captions\\P00359.txt\n", + " P00360.jpg P00193.jpg sixray_500\\train\\captions\\P00360.txt\n", + " P00361.jpg P00193.jpg sixray_500\\train\\captions\\P00361.txt\n", + " P00362.jpg P00193.jpg sixray_500\\train\\captions\\P00362.txt\n", + " P00363.jpg P00193.jpg sixray_500\\train\\captions\\P00363.txt\n", + " P00364.jpg P00193.jpg sixray_500\\train\\captions\\P00364.txt\n", + " P00365.jpg P00193.jpg sixray_500\\train\\captions\\P00365.txt\n", + " P00366.jpg P00193.jpg sixray_500\\train\\captions\\P00366.txt\n", + " P00367.jpg P00193.jpg sixray_500\\train\\captions\\P00367.txt\n", + " P00368.jpg P00193.jpg sixray_500\\train\\captions\\P00368.txt\n", + " P00369.jpg P00193.jpg sixray_500\\train\\captions\\P00369.txt\n", + " P00370.jpg P00193.jpg sixray_500\\train\\captions\\P00370.txt\n", + " P00371.jpg P00193.jpg sixray_500\\train\\captions\\P00371.txt\n", + " P00372.jpg P00193.jpg sixray_500\\train\\captions\\P00372.txt\n", + " P00374.jpg P00193.jpg sixray_500\\train\\captions\\P00374.txt\n", + " P00375.jpg P00193.jpg sixray_500\\train\\captions\\P00375.txt\n", + " P00376.jpg P00193.jpg sixray_500\\train\\captions\\P00376.txt\n", + " P00377.jpg P00193.jpg sixray_500\\train\\captions\\P00377.txt\n", + " P00378.jpg P00193.jpg sixray_500\\train\\captions\\P00378.txt\n", + " P00379.jpg P00193.jpg sixray_500\\train\\captions\\P00379.txt\n", + " P00380.jpg P00193.jpg sixray_500\\train\\captions\\P00380.txt\n", + " P00381.jpg P00193.jpg sixray_500\\train\\captions\\P00381.txt\n", + " P00382.jpg P00193.jpg sixray_500\\train\\captions\\P00382.txt\n", + " P00385.jpg P00193.jpg sixray_500\\train\\captions\\P00385.txt\n", + " P00386.jpg P00193.jpg sixray_500\\train\\captions\\P00386.txt\n", + " P00388.jpg P00193.jpg sixray_500\\train\\captions\\P00388.txt\n", + " P00390.jpg P00193.jpg sixray_500\\train\\captions\\P00390.txt\n", + " P00391.jpg P00193.jpg sixray_500\\train\\captions\\P00391.txt\n", + " P00392.jpg P00193.jpg sixray_500\\train\\captions\\P00392.txt\n", + " P00393.jpg P00193.jpg sixray_500\\train\\captions\\P00393.txt\n", + " P00394.jpg P00193.jpg sixray_500\\train\\captions\\P00394.txt\n", + " P00395.jpg P00193.jpg sixray_500\\train\\captions\\P00395.txt\n", + " P00397.jpg P00193.jpg sixray_500\\train\\captions\\P00397.txt\n", + " P00398.jpg P00193.jpg sixray_500\\train\\captions\\P00398.txt\n", + " P00399.jpg P00193.jpg sixray_500\\train\\captions\\P00399.txt\n", + " P00400.jpg P00193.jpg sixray_500\\train\\captions\\P00400.txt\n", + " P00401.jpg P00193.jpg sixray_500\\train\\captions\\P00401.txt\n", + " P00402.jpg P00193.jpg sixray_500\\train\\captions\\P00402.txt\n", + " P00404.jpg P00193.jpg sixray_500\\train\\captions\\P00404.txt\n", + " P00409.jpg P00193.jpg sixray_500\\train\\captions\\P00409.txt\n", + " P00415.jpg P00193.jpg sixray_500\\train\\captions\\P00415.txt\n", + " P00417.jpg P00193.jpg sixray_500\\train\\captions\\P00417.txt\n", + " P00424.jpg P00193.jpg sixray_500\\train\\captions\\P00424.txt\n", + " P00428.jpg P00193.jpg sixray_500\\train\\captions\\P00428.txt\n", + " P00430.jpg P00193.jpg sixray_500\\train\\captions\\P00430.txt\n", + " P00432.jpg P00431.jpg sixray_500\\train\\captions\\P00432.txt\n", + " P00436.jpg P00435.jpg sixray_500\\train\\captions\\P00436.txt\n", + " P00437.jpg P00435.jpg sixray_500\\train\\captions\\P00437.txt\n", + " P00438.jpg P00435.jpg sixray_500\\train\\captions\\P00438.txt\n", + " P00439.jpg P00435.jpg sixray_500\\train\\captions\\P00439.txt\n", + " P00440.jpg P00435.jpg sixray_500\\train\\captions\\P00440.txt\n", + " P00441.jpg P00435.jpg sixray_500\\train\\captions\\P00441.txt\n", + " P00445.jpg P00444.jpg sixray_500\\train\\captions\\P00445.txt\n", + " P00446.jpg P00444.jpg sixray_500\\train\\captions\\P00446.txt\n", + " P00448.jpg P00450.jpg sixray_500\\train\\captions\\P00448.txt\n", + " P00449.jpg P00444.jpg sixray_500\\train\\captions\\P00449.txt\n", + " P00463.jpg P00464.jpg sixray_500\\train\\captions\\P00463.txt\n", + " P00465.jpg P00464.jpg sixray_500\\train\\captions\\P00465.txt\n", + " P00466.jpg P00464.jpg sixray_500\\train\\captions\\P00466.txt\n", + " P00467.jpg P00464.jpg sixray_500\\train\\captions\\P00467.txt\n", + " P00468.jpg P00476.jpg sixray_500\\train\\captions\\P00468.txt\n", + " P00469.jpg P00464.jpg sixray_500\\train\\captions\\P00469.txt\n", + " P00470.jpg P00476.jpg sixray_500\\train\\captions\\P00470.txt\n", + " P00471.jpg P00464.jpg sixray_500\\train\\captions\\P00471.txt\n", + " P00472.jpg P00476.jpg sixray_500\\train\\captions\\P00472.txt\n", + " P00473.jpg P00464.jpg sixray_500\\train\\captions\\P00473.txt\n", + " P00474.jpg P00464.jpg sixray_500\\train\\captions\\P00474.txt\n", + " P00475.jpg P00464.jpg sixray_500\\train\\captions\\P00475.txt\n", + " P00477.jpg P00464.jpg sixray_500\\train\\captions\\P00477.txt\n", + " P00479.jpg P00478.jpg sixray_500\\train\\captions\\P00479.txt\n", + " P00480.jpg P00478.jpg sixray_500\\train\\captions\\P00480.txt\n", + " P00481.jpg P00478.jpg sixray_500\\train\\captions\\P00481.txt\n", + " P00482.jpg P00478.jpg sixray_500\\train\\captions\\P00482.txt\n", + " P00534.jpg P00530.jpg sixray_500\\train\\captions\\P00534.txt\n", + " P00741.jpg P00740.jpg sixray_500\\train\\captions\\P00741.txt\n", + " P00743.jpg P00740.jpg sixray_500\\train\\captions\\P00743.txt\n", + " P00744.jpg P00740.jpg sixray_500\\train\\captions\\P00744.txt\n", + " P00745.jpg P00740.jpg sixray_500\\train\\captions\\P00745.txt\n", + " P00748.jpg P00740.jpg sixray_500\\train\\captions\\P00748.txt\n", + " P00749.jpg P00740.jpg sixray_500\\train\\captions\\P00749.txt\n", + " P00751.jpg P00740.jpg sixray_500\\train\\captions\\P00751.txt\n", + " P00753.jpg P00740.jpg sixray_500\\train\\captions\\P00753.txt\n", + " P00755.jpg P00740.jpg sixray_500\\train\\captions\\P00755.txt\n", + " P00757.jpg P00740.jpg sixray_500\\train\\captions\\P00757.txt\n", + " P00759.jpg P00740.jpg sixray_500\\train\\captions\\P00759.txt\n", + " P00761.jpg P00740.jpg sixray_500\\train\\captions\\P00761.txt\n", + " P00839.jpg P00836.jpg sixray_500\\train\\captions\\P00839.txt\n", + " P00845.jpg P00836.jpg sixray_500\\train\\captions\\P00845.txt\n", + " P00848.jpg P00836.jpg sixray_500\\train\\captions\\P00848.txt\n", + " P00854.jpg P00851.jpg sixray_500\\train\\captions\\P00854.txt\n", + " P00857.jpg P00851.jpg sixray_500\\train\\captions\\P00857.txt\n", + " P00860.jpg P00851.jpg sixray_500\\train\\captions\\P00860.txt\n", + " P00863.jpg P00851.jpg sixray_500\\train\\captions\\P00863.txt\n", + " P00869.jpg P00866.jpg sixray_500\\train\\captions\\P00869.txt\n", + " P00872.jpg P00866.jpg sixray_500\\train\\captions\\P00872.txt\n", + " P00877.jpg P00876.jpg sixray_500\\train\\captions\\P00877.txt\n", + " P00886.jpg P00885.jpg sixray_500\\train\\captions\\P00886.txt\n", + " P00887.jpg P00885.jpg sixray_500\\train\\captions\\P00887.txt\n", + " P00992.jpg P00991.jpg sixray_500\\train\\captions\\P00992.txt\n", + " P01036.jpg P01037.jpg sixray_500\\train\\captions\\P01036.txt\n", + " P01038.jpg P01039.jpg sixray_500\\train\\captions\\P01038.txt\n", + " P01041.jpg P01039.jpg sixray_500\\train\\captions\\P01041.txt\n", + " P01042.jpg P01039.jpg sixray_500\\train\\captions\\P01042.txt\n", + " P01043.jpg P01039.jpg sixray_500\\train\\captions\\P01043.txt\n", + " P01044.jpg P01039.jpg sixray_500\\train\\captions\\P01044.txt\n", + " P01045.jpg P01039.jpg sixray_500\\train\\captions\\P01045.txt\n", + " P01065.jpg P01064.jpg sixray_500\\train\\captions\\P01065.txt\n", + " P01067.jpg P01066.jpg sixray_500\\train\\captions\\P01067.txt\n", + " P01069.jpg P01070.jpg sixray_500\\train\\captions\\P01069.txt\n", + " P01130.jpg P01129.jpg sixray_500\\train\\captions\\P01130.txt\n", + " P01203.jpg P01204.jpg sixray_500\\train\\captions\\P01203.txt\n", + " P01205.jpg P01204.jpg sixray_500\\train\\captions\\P01205.txt\n", + " P01206.jpg P01204.jpg sixray_500\\train\\captions\\P01206.txt\n", + " P01207.jpg P01204.jpg sixray_500\\train\\captions\\P01207.txt\n", + " P01208.jpg P01204.jpg sixray_500\\train\\captions\\P01208.txt\n", + " P01209.jpg P01204.jpg sixray_500\\train\\captions\\P01209.txt\n", + " P01210.jpg P01204.jpg sixray_500\\train\\captions\\P01210.txt\n", + " P01214.jpg P01213.jpg sixray_500\\train\\captions\\P01214.txt\n", + " P01216.jpg P01215.jpg sixray_500\\train\\captions\\P01216.txt\n", + " P01218.jpg P01215.jpg sixray_500\\train\\captions\\P01218.txt\n", + " P01219.jpg P01215.jpg sixray_500\\train\\captions\\P01219.txt\n", + " P01221.jpg P01215.jpg sixray_500\\train\\captions\\P01221.txt\n", + " P01222.jpg P01215.jpg sixray_500\\train\\captions\\P01222.txt\n", + " P01223.jpg P01215.jpg sixray_500\\train\\captions\\P01223.txt\n", + " P01224.jpg P01215.jpg sixray_500\\train\\captions\\P01224.txt\n", + " P01226.jpg P01225.jpg sixray_500\\train\\captions\\P01226.txt\n", + " P01229.jpg P01230.jpg sixray_500\\train\\captions\\P01229.txt\n", + " P01231.jpg P01230.jpg sixray_500\\train\\captions\\P01231.txt\n", + " P01233.jpg P01232.jpg sixray_500\\train\\captions\\P01233.txt\n", + " P01240.jpg P01241.jpg sixray_500\\train\\captions\\P01240.txt\n", + " P01244.jpg P01243.jpg sixray_500\\train\\captions\\P01244.txt\n", + " P01245.jpg P01243.jpg sixray_500\\train\\captions\\P01245.txt\n", + " P01246.jpg P01243.jpg sixray_500\\train\\captions\\P01246.txt\n", + " P01247.jpg P01243.jpg sixray_500\\train\\captions\\P01247.txt\n", + " P01248.jpg P01243.jpg sixray_500\\train\\captions\\P01248.txt\n", + " P01250.jpg P01249.jpg sixray_500\\train\\captions\\P01250.txt\n", + " P01252.jpg P01249.jpg sixray_500\\train\\captions\\P01252.txt\n", + " P01253.jpg P01249.jpg sixray_500\\train\\captions\\P01253.txt\n", + " P01255.jpg P01249.jpg sixray_500\\train\\captions\\P01255.txt\n", + " P01256.jpg P01249.jpg sixray_500\\train\\captions\\P01256.txt\n", + " P01261.jpg P01260.jpg sixray_500\\train\\captions\\P01261.txt\n", + " P01263.jpg P01260.jpg sixray_500\\train\\captions\\P01263.txt\n", + " P01265.jpg P01260.jpg sixray_500\\train\\captions\\P01265.txt\n", + " P01279.jpg P01280.jpg sixray_500\\train\\captions\\P01279.txt\n", + " P01281.jpg P01280.jpg sixray_500\\train\\captions\\P01281.txt\n", + " P01282.jpg P01280.jpg sixray_500\\train\\captions\\P01282.txt\n", + " P01309.jpg P01310.jpg sixray_500\\train\\captions\\P01309.txt\n", + " P01311.jpg P01310.jpg sixray_500\\train\\captions\\P01311.txt\n", + " P01313.jpg P01310.jpg sixray_500\\train\\captions\\P01313.txt\n", + " P01315.jpg P01310.jpg sixray_500\\train\\captions\\P01315.txt\n", + " P01317.jpg P01310.jpg sixray_500\\train\\captions\\P01317.txt\n", + " P01318.jpg P01310.jpg sixray_500\\train\\captions\\P01318.txt\n", + " P01319.jpg P01310.jpg sixray_500\\train\\captions\\P01319.txt\n", + " P01321.jpg P01320.jpg sixray_500\\train\\captions\\P01321.txt\n", + " P01322.jpg P01320.jpg sixray_500\\train\\captions\\P01322.txt\n", + " P01323.jpg P01320.jpg sixray_500\\train\\captions\\P01323.txt\n", + " P01324.jpg P01320.jpg sixray_500\\train\\captions\\P01324.txt\n", + " P01326.jpg P01331.jpg sixray_500\\train\\captions\\P01326.txt\n", + " P01327.jpg P01331.jpg sixray_500\\train\\captions\\P01327.txt\n", + " P01328.jpg P01331.jpg sixray_500\\train\\captions\\P01328.txt\n", + " P01329.jpg P01331.jpg sixray_500\\train\\captions\\P01329.txt\n", + " P01330.jpg P01331.jpg sixray_500\\train\\captions\\P01330.txt\n", + " P01332.jpg P01331.jpg sixray_500\\train\\captions\\P01332.txt\n", + " P01333.jpg P01331.jpg sixray_500\\train\\captions\\P01333.txt\n", + " P01335.jpg P01334.jpg sixray_500\\train\\captions\\P01335.txt\n", + " P01336.jpg P01334.jpg sixray_500\\train\\captions\\P01336.txt\n", + " P01338.jpg P01334.jpg sixray_500\\train\\captions\\P01338.txt\n", + " P01339.jpg P01334.jpg sixray_500\\train\\captions\\P01339.txt\n", + " P01340.jpg P01334.jpg sixray_500\\train\\captions\\P01340.txt\n", + " P01341.jpg P01334.jpg sixray_500\\train\\captions\\P01341.txt\n", + " P01342.jpg P01334.jpg sixray_500\\train\\captions\\P01342.txt\n", + " P01343.jpg P01334.jpg sixray_500\\train\\captions\\P01343.txt\n", + " P01345.jpg P01346.jpg sixray_500\\train\\captions\\P01345.txt\n", + " P01347.jpg P01346.jpg sixray_500\\train\\captions\\P01347.txt\n", + " P01348.jpg P01346.jpg sixray_500\\train\\captions\\P01348.txt\n", + " P01350.jpg P01346.jpg sixray_500\\train\\captions\\P01350.txt\n", + " P01351.jpg P01346.jpg sixray_500\\train\\captions\\P01351.txt\n", + " P01353.jpg P01354.jpg sixray_500\\train\\captions\\P01353.txt\n", + " P01355.jpg P01354.jpg sixray_500\\train\\captions\\P01355.txt\n", + " P01357.jpg P01354.jpg sixray_500\\train\\captions\\P01357.txt\n", + " P01359.jpg P01354.jpg sixray_500\\train\\captions\\P01359.txt\n", + " P01363.jpg P01364.jpg sixray_500\\train\\captions\\P01363.txt\n", + " P01365.jpg P01364.jpg sixray_500\\train\\captions\\P01365.txt\n", + " P01366.jpg P01364.jpg sixray_500\\train\\captions\\P01366.txt\n", + " P01367.jpg P01364.jpg sixray_500\\train\\captions\\P01367.txt\n", + " P01368.jpg P01364.jpg sixray_500\\train\\captions\\P01368.txt\n", + " P01369.jpg P01364.jpg sixray_500\\train\\captions\\P01369.txt\n", + " P01370.jpg P01364.jpg sixray_500\\train\\captions\\P01370.txt\n", + " P01386.jpg P01387.jpg sixray_500\\train\\captions\\P01386.txt\n", + " P01390.jpg P01391.jpg sixray_500\\train\\captions\\P01390.txt\n", + " P01392.jpg P01391.jpg sixray_500\\train\\captions\\P01392.txt\n", + " P01393.jpg P01391.jpg sixray_500\\train\\captions\\P01393.txt\n", + " P01394.jpg P01391.jpg sixray_500\\train\\captions\\P01394.txt\n", + " P01395.jpg P01391.jpg sixray_500\\train\\captions\\P01395.txt\n", + " P01396.jpg P01391.jpg sixray_500\\train\\captions\\P01396.txt\n", + " P01397.jpg P01391.jpg sixray_500\\train\\captions\\P01397.txt\n", + " P01398.jpg P01391.jpg sixray_500\\train\\captions\\P01398.txt\n", + " P01399.jpg P01400.jpg sixray_500\\train\\captions\\P01399.txt\n", + " P01401.jpg P01400.jpg sixray_500\\train\\captions\\P01401.txt\n", + " P01402.jpg P01400.jpg sixray_500\\train\\captions\\P01402.txt\n", + " P01403.jpg P01400.jpg sixray_500\\train\\captions\\P01403.txt\n", + " P01404.jpg P01400.jpg sixray_500\\train\\captions\\P01404.txt\n", + " P01405.jpg P01400.jpg sixray_500\\train\\captions\\P01405.txt\n", + " P01407.jpg P01400.jpg sixray_500\\train\\captions\\P01407.txt\n", + " P01408.jpg P01400.jpg sixray_500\\train\\captions\\P01408.txt\n", + " P01410.jpg P01400.jpg sixray_500\\train\\captions\\P01410.txt\n", + " P01412.jpg P01400.jpg sixray_500\\train\\captions\\P01412.txt\n", + " P01413.jpg P01400.jpg sixray_500\\train\\captions\\P01413.txt\n", + " P01415.jpg P01419.jpg sixray_500\\train\\captions\\P01415.txt\n", + " P01416.jpg P01419.jpg sixray_500\\train\\captions\\P01416.txt\n", + " P01417.jpg P01419.jpg sixray_500\\train\\captions\\P01417.txt\n", + " P01418.jpg P01419.jpg sixray_500\\train\\captions\\P01418.txt\n", + " P01420.jpg P01419.jpg sixray_500\\train\\captions\\P01420.txt\n", + " P01421.jpg P01419.jpg sixray_500\\train\\captions\\P01421.txt\n", + " P01423.jpg P01422.jpg sixray_500\\train\\captions\\P01423.txt\n", + " P01424.jpg P01422.jpg sixray_500\\train\\captions\\P01424.txt\n", + " P01426.jpg P01425.jpg sixray_500\\train\\captions\\P01426.txt\n", + " P01427.jpg P01425.jpg sixray_500\\train\\captions\\P01427.txt\n", + " P01428.jpg P01425.jpg sixray_500\\train\\captions\\P01428.txt\n", + " P01429.jpg P01430.jpg sixray_500\\train\\captions\\P01429.txt\n", + " P01431.jpg P01430.jpg sixray_500\\train\\captions\\P01431.txt\n", + " P01433.jpg P01432.jpg sixray_500\\train\\captions\\P01433.txt\n", + " P01434.jpg P01432.jpg sixray_500\\train\\captions\\P01434.txt\n", + " P01435.jpg P01432.jpg sixray_500\\train\\captions\\P01435.txt\n", + " P01436.jpg P01432.jpg sixray_500\\train\\captions\\P01436.txt\n", + " P01437.jpg P01432.jpg sixray_500\\train\\captions\\P01437.txt\n", + " P01438.jpg P01432.jpg sixray_500\\train\\captions\\P01438.txt\n", + " P01439.jpg P01432.jpg sixray_500\\train\\captions\\P01439.txt\n", + " P01440.jpg P01432.jpg sixray_500\\train\\captions\\P01440.txt\n", + " P01441.jpg P01432.jpg sixray_500\\train\\captions\\P01441.txt\n", + " P01442.jpg P01432.jpg sixray_500\\train\\captions\\P01442.txt\n", + " P01443.jpg P01432.jpg sixray_500\\train\\captions\\P01443.txt\n", + " P01445.jpg P01446.jpg sixray_500\\train\\captions\\P01445.txt\n", + " P01447.jpg P01446.jpg sixray_500\\train\\captions\\P01447.txt\n", + " P01449.jpg P01446.jpg sixray_500\\train\\captions\\P01449.txt\n", + " P01450.jpg P01446.jpg sixray_500\\train\\captions\\P01450.txt\n", + " P01451.jpg P01446.jpg sixray_500\\train\\captions\\P01451.txt\n", + " P01453.jpg P01446.jpg sixray_500\\train\\captions\\P01453.txt\n", + " P01455.jpg P01446.jpg sixray_500\\train\\captions\\P01455.txt\n", + " P01456.jpg P01446.jpg sixray_500\\train\\captions\\P01456.txt\n", + " P01458.jpg P01446.jpg sixray_500\\train\\captions\\P01458.txt\n", + " P01459.jpg P01446.jpg sixray_500\\train\\captions\\P01459.txt\n", + " P01460.jpg P01446.jpg sixray_500\\train\\captions\\P01460.txt\n", + " P01462.jpg P01461.jpg sixray_500\\train\\captions\\P01462.txt\n", + " P01463.jpg P01461.jpg sixray_500\\train\\captions\\P01463.txt\n", + " P01464.jpg P01461.jpg sixray_500\\train\\captions\\P01464.txt\n", + " P01465.jpg P01461.jpg sixray_500\\train\\captions\\P01465.txt\n", + " P01466.jpg P01461.jpg sixray_500\\train\\captions\\P01466.txt\n", + " P01467.jpg P01461.jpg sixray_500\\train\\captions\\P01467.txt\n", + " P01468.jpg P01461.jpg sixray_500\\train\\captions\\P01468.txt\n", + " P01470.jpg P01469.jpg sixray_500\\train\\captions\\P01470.txt\n", + " P01471.jpg P01469.jpg sixray_500\\train\\captions\\P01471.txt\n", + " P01472.jpg P01469.jpg sixray_500\\train\\captions\\P01472.txt\n", + " P01473.jpg P01469.jpg sixray_500\\train\\captions\\P01473.txt\n", + " P01475.jpg P01476.jpg sixray_500\\train\\captions\\P01475.txt\n", + " P01477.jpg P01476.jpg sixray_500\\train\\captions\\P01477.txt\n", + " P01478.jpg P01476.jpg sixray_500\\train\\captions\\P01478.txt\n", + " P01480.jpg P01479.jpg sixray_500\\train\\captions\\P01480.txt\n", + " P01481.jpg P01479.jpg sixray_500\\train\\captions\\P01481.txt\n", + " P01482.jpg P01479.jpg sixray_500\\train\\captions\\P01482.txt\n", + " P01483.jpg P01479.jpg sixray_500\\train\\captions\\P01483.txt\n", + " P01484.jpg P01479.jpg sixray_500\\train\\captions\\P01484.txt\n", + " P01486.jpg P01479.jpg sixray_500\\train\\captions\\P01486.txt\n", + " P01487.jpg P01479.jpg sixray_500\\train\\captions\\P01487.txt\n", + " P01488.jpg P01479.jpg sixray_500\\train\\captions\\P01488.txt\n", + " P01490.jpg P01489.jpg sixray_500\\train\\captions\\P01490.txt\n", + " P01491.jpg P01489.jpg sixray_500\\train\\captions\\P01491.txt\n", + " P01492.jpg P01489.jpg sixray_500\\train\\captions\\P01492.txt\n", + " P01493.jpg P01489.jpg sixray_500\\train\\captions\\P01493.txt\n", + " P01494.jpg P01489.jpg sixray_500\\train\\captions\\P01494.txt\n", + " P01495.jpg P01489.jpg sixray_500\\train\\captions\\P01495.txt\n", + " P01497.jpg P01489.jpg sixray_500\\train\\captions\\P01497.txt\n", + " P01498.jpg P01489.jpg sixray_500\\train\\captions\\P01498.txt\n", + " P01499.jpg P01489.jpg sixray_500\\train\\captions\\P01499.txt\n", + " P01501.jpg P01489.jpg sixray_500\\train\\captions\\P01501.txt\n", + " P01502.jpg P01489.jpg sixray_500\\train\\captions\\P01502.txt\n", + " P01503.jpg P01489.jpg sixray_500\\train\\captions\\P01503.txt\n", + " P01505.jpg P01504.jpg sixray_500\\train\\captions\\P01505.txt\n", + " P01506.jpg P01504.jpg sixray_500\\train\\captions\\P01506.txt\n", + " P01507.jpg P01504.jpg sixray_500\\train\\captions\\P01507.txt\n", + " P01509.jpg P01508.jpg sixray_500\\train\\captions\\P01509.txt\n", + " P01510.jpg P01508.jpg sixray_500\\train\\captions\\P01510.txt\n", + " P01511.jpg P01508.jpg sixray_500\\train\\captions\\P01511.txt\n", + " P01512.jpg P01508.jpg sixray_500\\train\\captions\\P01512.txt\n", + " P01514.jpg P01513.jpg sixray_500\\train\\captions\\P01514.txt\n", + " P01515.jpg P01513.jpg sixray_500\\train\\captions\\P01515.txt\n", + " P01516.jpg P01513.jpg sixray_500\\train\\captions\\P01516.txt\n", + " P01517.jpg P01513.jpg sixray_500\\train\\captions\\P01517.txt\n", + " P01518.jpg P01513.jpg sixray_500\\train\\captions\\P01518.txt\n", + " P01519.jpg P01513.jpg sixray_500\\train\\captions\\P01519.txt\n", + " P01520.jpg P01513.jpg sixray_500\\train\\captions\\P01520.txt\n", + " P01521.jpg P01513.jpg sixray_500\\train\\captions\\P01521.txt\n", + " P01522.jpg P01513.jpg sixray_500\\train\\captions\\P01522.txt\n", + " P01523.jpg P01513.jpg sixray_500\\train\\captions\\P01523.txt\n", + " P01596.jpg P01598.jpg sixray_500\\train\\captions\\P01596.txt\n", + " P01597.jpg P01598.jpg sixray_500\\train\\captions\\P01597.txt\n", + " P01599.jpg P01598.jpg sixray_500\\train\\captions\\P01599.txt\n", + " P01601.jpg P01600.jpg sixray_500\\train\\captions\\P01601.txt\n", + " P01602.jpg P01600.jpg sixray_500\\train\\captions\\P01602.txt\n", + " P01603.jpg P01600.jpg sixray_500\\train\\captions\\P01603.txt\n", + " P01604.jpg P01600.jpg sixray_500\\train\\captions\\P01604.txt\n", + " P01605.jpg P01600.jpg sixray_500\\train\\captions\\P01605.txt\n", + " P01606.jpg P01600.jpg sixray_500\\train\\captions\\P01606.txt\n", + " P01607.jpg P01600.jpg sixray_500\\train\\captions\\P01607.txt\n", + " P01608.jpg P01600.jpg sixray_500\\train\\captions\\P01608.txt\n", + " P01610.jpg P01600.jpg sixray_500\\train\\captions\\P01610.txt\n", + " P01612.jpg P01600.jpg sixray_500\\train\\captions\\P01612.txt\n", + " P01613.jpg P01600.jpg sixray_500\\train\\captions\\P01613.txt\n", + " P01614.jpg P01600.jpg sixray_500\\train\\captions\\P01614.txt\n", + " P01616.jpg P01600.jpg sixray_500\\train\\captions\\P01616.txt\n", + " P01618.jpg P01617.jpg sixray_500\\train\\captions\\P01618.txt\n", + " P01620.jpg P01617.jpg sixray_500\\train\\captions\\P01620.txt\n", + " P01621.jpg P01600.jpg sixray_500\\train\\captions\\P01621.txt\n", + " P01622.jpg P01600.jpg sixray_500\\train\\captions\\P01622.txt\n", + " P01623.jpg P01600.jpg sixray_500\\train\\captions\\P01623.txt\n", + " P01624.jpg P01600.jpg sixray_500\\train\\captions\\P01624.txt\n", + " P01627.jpg P01628.jpg sixray_500\\train\\captions\\P01627.txt\n", + " P01629.jpg P01628.jpg sixray_500\\train\\captions\\P01629.txt\n", + " P01630.jpg P01628.jpg sixray_500\\train\\captions\\P01630.txt\n", + " P01631.jpg P01628.jpg sixray_500\\train\\captions\\P01631.txt\n", + " P01633.jpg P01632.jpg sixray_500\\train\\captions\\P01633.txt\n", + " P01634.jpg P01632.jpg sixray_500\\train\\captions\\P01634.txt\n", + " P01635.jpg P01632.jpg sixray_500\\train\\captions\\P01635.txt\n", + " P01638.jpg P01632.jpg sixray_500\\train\\captions\\P01638.txt\n", + " P01639.jpg P01642.jpg sixray_500\\train\\captions\\P01639.txt\n", + " P01640.jpg P01642.jpg sixray_500\\train\\captions\\P01640.txt\n", + " P01641.jpg P01642.jpg sixray_500\\train\\captions\\P01641.txt\n", + " P01643.jpg P01644.jpg sixray_500\\train\\captions\\P01643.txt\n", + " P01646.jpg P01645.jpg sixray_500\\train\\captions\\P01646.txt\n", + " P01647.jpg P01645.jpg sixray_500\\train\\captions\\P01647.txt\n", + " P01648.jpg P01645.jpg sixray_500\\train\\captions\\P01648.txt\n", + " P01649.jpg P01645.jpg sixray_500\\train\\captions\\P01649.txt\n", + " P01650.jpg P01645.jpg sixray_500\\train\\captions\\P01650.txt\n", + " P01651.jpg P01645.jpg sixray_500\\train\\captions\\P01651.txt\n", + " P01653.jpg P01652.jpg sixray_500\\train\\captions\\P01653.txt\n", + " P01654.jpg P01652.jpg sixray_500\\train\\captions\\P01654.txt\n", + " P01682.jpg P01683.jpg sixray_500\\train\\captions\\P01682.txt\n", + " P01684.jpg P01683.jpg sixray_500\\train\\captions\\P01684.txt\n", + " P01686.jpg P01687.jpg sixray_500\\train\\captions\\P01686.txt\n", + " P01688.jpg P01687.jpg sixray_500\\train\\captions\\P01688.txt\n", + " P01689.jpg P01687.jpg sixray_500\\train\\captions\\P01689.txt\n", + " P01690.jpg P01687.jpg sixray_500\\train\\captions\\P01690.txt\n", + " P01691.jpg P01687.jpg sixray_500\\train\\captions\\P01691.txt\n", + " P01693.jpg P01687.jpg sixray_500\\train\\captions\\P01693.txt\n", + " P01694.jpg P01687.jpg sixray_500\\train\\captions\\P01694.txt\n", + " P01742.jpg P01741.jpg sixray_500\\train\\captions\\P01742.txt\n", + " P01749.jpg P01741.jpg sixray_500\\train\\captions\\P01749.txt\n", + " P01750.jpg P01741.jpg sixray_500\\train\\captions\\P01750.txt\n", + " P01751.jpg P01741.jpg sixray_500\\train\\captions\\P01751.txt\n", + " P01753.jpg P01741.jpg sixray_500\\train\\captions\\P01753.txt\n", + " P01754.jpg P01741.jpg sixray_500\\train\\captions\\P01754.txt\n", + " P01755.jpg P01741.jpg sixray_500\\train\\captions\\P01755.txt\n", + " P01756.jpg P01741.jpg sixray_500\\train\\captions\\P01756.txt\n", + " P01757.jpg P01741.jpg sixray_500\\train\\captions\\P01757.txt\n", + " P01758.jpg P01741.jpg sixray_500\\train\\captions\\P01758.txt\n", + " P01759.jpg P01741.jpg sixray_500\\train\\captions\\P01759.txt\n", + " P01761.jpg P01760.jpg sixray_500\\train\\captions\\P01761.txt\n", + " P01762.jpg P01760.jpg sixray_500\\train\\captions\\P01762.txt\n", + " P01763.jpg P01760.jpg sixray_500\\train\\captions\\P01763.txt\n", + " P01764.jpg P01760.jpg sixray_500\\train\\captions\\P01764.txt\n", + " P01765.jpg P01760.jpg sixray_500\\train\\captions\\P01765.txt\n", + " P01767.jpg P01766.jpg sixray_500\\train\\captions\\P01767.txt\n", + " P01768.jpg P01766.jpg sixray_500\\train\\captions\\P01768.txt\n", + " P01769.jpg P01766.jpg sixray_500\\train\\captions\\P01769.txt\n", + " P01770.jpg P01766.jpg sixray_500\\train\\captions\\P01770.txt\n", + " P01772.jpg P01771.jpg sixray_500\\train\\captions\\P01772.txt\n", + " P01773.jpg P01771.jpg sixray_500\\train\\captions\\P01773.txt\n", + " P01774.jpg P01771.jpg sixray_500\\train\\captions\\P01774.txt\n", + " P01775.jpg P01771.jpg sixray_500\\train\\captions\\P01775.txt\n", + " P01776.jpg P01771.jpg sixray_500\\train\\captions\\P01776.txt\n", + " P01778.jpg P01780.jpg sixray_500\\train\\captions\\P01778.txt\n", + " P01779.jpg P01780.jpg sixray_500\\train\\captions\\P01779.txt\n", + " P01783.jpg P01780.jpg sixray_500\\train\\captions\\P01783.txt\n", + " P01785.jpg P01780.jpg sixray_500\\train\\captions\\P01785.txt\n", + " P01786.jpg P01780.jpg sixray_500\\train\\captions\\P01786.txt\n", + " P01789.jpg P00193.jpg sixray_500\\train\\captions\\P01789.txt\n", + " P01790.jpg P00193.jpg sixray_500\\train\\captions\\P01790.txt\n", + " P01791.jpg P00193.jpg sixray_500\\train\\captions\\P01791.txt\n", + " P01883.jpg P01882.jpg sixray_500\\train\\captions\\P01883.txt\n", + " P01884.jpg P01882.jpg sixray_500\\train\\captions\\P01884.txt\n", + " P01885.jpg P01882.jpg sixray_500\\train\\captions\\P01885.txt\n", + " P01886.jpg P01882.jpg sixray_500\\train\\captions\\P01886.txt\n", + " P01888.jpg P01887.jpg sixray_500\\train\\captions\\P01888.txt\n", + " P01889.jpg P01887.jpg sixray_500\\train\\captions\\P01889.txt\n", + " P01890.jpg P01887.jpg sixray_500\\train\\captions\\P01890.txt\n", + " P01915.jpg P01266.jpg sixray_500\\train\\captions\\P01915.txt\n", + " P01916.jpg P01266.jpg sixray_500\\train\\captions\\P01916.txt\n", + " P01917.jpg P01266.jpg sixray_500\\train\\captions\\P01917.txt\n", + " P01918.jpg P01266.jpg sixray_500\\train\\captions\\P01918.txt\n", + " P01919.jpg P01266.jpg sixray_500\\train\\captions\\P01919.txt\n", + " P01921.jpg P01266.jpg sixray_500\\train\\captions\\P01921.txt\n", + " P01922.jpg P01266.jpg sixray_500\\train\\captions\\P01922.txt\n", + " P01923.jpg P01266.jpg sixray_500\\train\\captions\\P01923.txt\n", + " P01924.jpg P01266.jpg sixray_500\\train\\captions\\P01924.txt\n", + " P01925.jpg P01266.jpg sixray_500\\train\\captions\\P01925.txt\n", + " P01926.jpg P01266.jpg sixray_500\\train\\captions\\P01926.txt\n", + " P01927.jpg P01266.jpg sixray_500\\train\\captions\\P01927.txt\n", + " P01928.jpg P01266.jpg sixray_500\\train\\captions\\P01928.txt\n", + " P01929.jpg P01266.jpg sixray_500\\train\\captions\\P01929.txt\n", + " P01930.jpg P01266.jpg sixray_500\\train\\captions\\P01930.txt\n", + " P01931.jpg P01951.jpg sixray_500\\train\\captions\\P01931.txt\n", + " P01932.jpg P01951.jpg sixray_500\\train\\captions\\P01932.txt\n", + " P01933.jpg P01951.jpg sixray_500\\train\\captions\\P01933.txt\n", + " P01934.jpg P01951.jpg sixray_500\\train\\captions\\P01934.txt\n", + " P01935.jpg P01951.jpg sixray_500\\train\\captions\\P01935.txt\n", + " P01936.jpg P01951.jpg sixray_500\\train\\captions\\P01936.txt\n", + " P01937.jpg P01951.jpg sixray_500\\train\\captions\\P01937.txt\n", + " P01938.jpg P01951.jpg sixray_500\\train\\captions\\P01938.txt\n", + " P01939.jpg P01951.jpg sixray_500\\train\\captions\\P01939.txt\n", + " P01940.jpg P01951.jpg sixray_500\\train\\captions\\P01940.txt\n", + " P01941.jpg P01951.jpg sixray_500\\train\\captions\\P01941.txt\n", + " P01942.jpg P01951.jpg sixray_500\\train\\captions\\P01942.txt\n", + " P01943.jpg P01951.jpg sixray_500\\train\\captions\\P01943.txt\n", + " P01944.jpg P01951.jpg sixray_500\\train\\captions\\P01944.txt\n", + " P01945.jpg P01951.jpg sixray_500\\train\\captions\\P01945.txt\n", + " P01946.jpg P01951.jpg sixray_500\\train\\captions\\P01946.txt\n", + " P01947.jpg P01951.jpg sixray_500\\train\\captions\\P01947.txt\n", + " P01949.jpg P01951.jpg sixray_500\\train\\captions\\P01949.txt\n", + " P01950.jpg P01951.jpg sixray_500\\train\\captions\\P01950.txt\n", + " P01952.jpg P01951.jpg sixray_500\\train\\captions\\P01952.txt\n", + " P01957.jpg P01956.jpg sixray_500\\train\\captions\\P01957.txt\n", + " P01959.jpg P01956.jpg sixray_500\\train\\captions\\P01959.txt\n", + " P01961.jpg P01956.jpg sixray_500\\train\\captions\\P01961.txt\n", + " P01963.jpg P01956.jpg sixray_500\\train\\captions\\P01963.txt\n", + " P01965.jpg P01956.jpg sixray_500\\train\\captions\\P01965.txt\n", + " P01966.jpg P01956.jpg sixray_500\\train\\captions\\P01966.txt\n", + " P01967.jpg P01956.jpg sixray_500\\train\\captions\\P01967.txt\n", + " P01968.jpg P01956.jpg sixray_500\\train\\captions\\P01968.txt\n", + " P01969.jpg P01956.jpg sixray_500\\train\\captions\\P01969.txt\n", + " P01971.jpg P01970.jpg sixray_500\\train\\captions\\P01971.txt\n", + " P01973.jpg P01970.jpg sixray_500\\train\\captions\\P01973.txt\n", + " P01975.jpg P01970.jpg sixray_500\\train\\captions\\P01975.txt\n", + " P01976.jpg P01974.jpg sixray_500\\train\\captions\\P01976.txt\n", + " P01977.jpg P01974.jpg sixray_500\\train\\captions\\P01977.txt\n", + " P01978.jpg P01974.jpg sixray_500\\train\\captions\\P01978.txt\n", + " P01979.jpg P01974.jpg sixray_500\\train\\captions\\P01979.txt\n", + " P01980.jpg P01974.jpg sixray_500\\train\\captions\\P01980.txt\n", + " P01981.jpg P01974.jpg sixray_500\\train\\captions\\P01981.txt\n", + " P01982.jpg P01974.jpg sixray_500\\train\\captions\\P01982.txt\n", + " P01983.jpg P01974.jpg sixray_500\\train\\captions\\P01983.txt\n", + " P01984.jpg P01974.jpg sixray_500\\train\\captions\\P01984.txt\n", + " P01985.jpg P01974.jpg sixray_500\\train\\captions\\P01985.txt\n", + " P01986.jpg P01204.jpg sixray_500\\train\\captions\\P01986.txt\n", + " P01987.jpg P01204.jpg sixray_500\\train\\captions\\P01987.txt\n", + " P01988.jpg P01204.jpg sixray_500\\train\\captions\\P01988.txt\n", + " P01989.jpg P01204.jpg sixray_500\\train\\captions\\P01989.txt\n", + " P01990.jpg P01204.jpg sixray_500\\train\\captions\\P01990.txt\n", + " P01991.jpg P01204.jpg sixray_500\\train\\captions\\P01991.txt\n", + " P01992.jpg P01204.jpg sixray_500\\train\\captions\\P01992.txt\n", + " P01993.jpg P01204.jpg sixray_500\\train\\captions\\P01993.txt\n", + " P01994.jpg P01204.jpg sixray_500\\train\\captions\\P01994.txt\n", + " P01995.jpg P01204.jpg sixray_500\\train\\captions\\P01995.txt\n", + " P01996.jpg P01204.jpg sixray_500\\train\\captions\\P01996.txt\n", + " P01997.jpg P01204.jpg sixray_500\\train\\captions\\P01997.txt\n", + " P01998.jpg P01204.jpg sixray_500\\train\\captions\\P01998.txt\n", + " P01999.jpg P01204.jpg sixray_500\\train\\captions\\P01999.txt\n", + " P02000.jpg P01204.jpg sixray_500\\train\\captions\\P02000.txt\n", + " P02001.jpg P01204.jpg sixray_500\\train\\captions\\P02001.txt\n", + " P02002.jpg P01204.jpg sixray_500\\train\\captions\\P02002.txt\n", + " P02003.jpg P01204.jpg sixray_500\\train\\captions\\P02003.txt\n", + " P02004.jpg P01204.jpg sixray_500\\train\\captions\\P02004.txt\n", + " P02005.jpg P01204.jpg sixray_500\\train\\captions\\P02005.txt\n", + " P02006.jpg P01204.jpg sixray_500\\train\\captions\\P02006.txt\n", + " P02007.jpg P01204.jpg sixray_500\\train\\captions\\P02007.txt\n", + " P02008.jpg P01204.jpg sixray_500\\train\\captions\\P02008.txt\n", + " P02009.jpg P01204.jpg sixray_500\\train\\captions\\P02009.txt\n", + " P02010.jpg P01204.jpg sixray_500\\train\\captions\\P02010.txt\n", + " P02011.jpg P01204.jpg sixray_500\\train\\captions\\P02011.txt\n", + " P02012.jpg P01204.jpg sixray_500\\train\\captions\\P02012.txt\n", + " P02013.jpg P01204.jpg sixray_500\\train\\captions\\P02013.txt\n", + " P02014.jpg P01204.jpg sixray_500\\train\\captions\\P02014.txt\n", + " P02015.jpg P01204.jpg sixray_500\\train\\captions\\P02015.txt\n", + " P02016.jpg P01204.jpg sixray_500\\train\\captions\\P02016.txt\n", + " P02017.jpg P02021.jpg sixray_500\\train\\captions\\P02017.txt\n", + " P02018.jpg P02021.jpg sixray_500\\train\\captions\\P02018.txt\n", + " P02019.jpg P02021.jpg sixray_500\\train\\captions\\P02019.txt\n", + " P02020.jpg P02021.jpg sixray_500\\train\\captions\\P02020.txt\n", + " P02022.jpg P02021.jpg sixray_500\\train\\captions\\P02022.txt\n", + " P02023.jpg P02021.jpg sixray_500\\train\\captions\\P02023.txt\n", + " P02024.jpg P02021.jpg sixray_500\\train\\captions\\P02024.txt\n", + " P02026.jpg P02025.jpg sixray_500\\train\\captions\\P02026.txt\n", + " P02027.jpg P02025.jpg sixray_500\\train\\captions\\P02027.txt\n", + " P02028.jpg P02025.jpg sixray_500\\train\\captions\\P02028.txt\n", + " P02029.jpg P02025.jpg sixray_500\\train\\captions\\P02029.txt\n", + " P02030.jpg P02025.jpg sixray_500\\train\\captions\\P02030.txt\n", + " P02031.jpg P02025.jpg sixray_500\\train\\captions\\P02031.txt\n", + " P02032.jpg P02025.jpg sixray_500\\train\\captions\\P02032.txt\n", + " P02034.jpg P02033.jpg sixray_500\\train\\captions\\P02034.txt\n", + " P02035.jpg P02033.jpg sixray_500\\train\\captions\\P02035.txt\n", + " P02036.jpg P02033.jpg sixray_500\\train\\captions\\P02036.txt\n", + " P02037.jpg P02033.jpg sixray_500\\train\\captions\\P02037.txt\n", + " P02038.jpg P02033.jpg sixray_500\\train\\captions\\P02038.txt\n", + " P02039.jpg P02033.jpg sixray_500\\train\\captions\\P02039.txt\n", + " P02040.jpg P02033.jpg sixray_500\\train\\captions\\P02040.txt\n", + " P02041.jpg P02033.jpg sixray_500\\train\\captions\\P02041.txt\n", + " P02042.jpg P02033.jpg sixray_500\\train\\captions\\P02042.txt\n", + " P02043.jpg P02033.jpg sixray_500\\train\\captions\\P02043.txt\n", + " P02044.jpg P02033.jpg sixray_500\\train\\captions\\P02044.txt\n", + " P02045.jpg P02033.jpg sixray_500\\train\\captions\\P02045.txt\n", + " P02046.jpg P02033.jpg sixray_500\\train\\captions\\P02046.txt\n", + " P02047.jpg P02048.jpg sixray_500\\train\\captions\\P02047.txt\n", + " P02050.jpg P02048.jpg sixray_500\\train\\captions\\P02050.txt\n", + " P02052.jpg P02051.jpg sixray_500\\train\\captions\\P02052.txt\n", + " P02054.jpg P02053.jpg sixray_500\\train\\captions\\P02054.txt\n", + " P02056.jpg P02055.jpg sixray_500\\train\\captions\\P02056.txt\n", + " P02058.jpg P02057.jpg sixray_500\\train\\captions\\P02058.txt\n", + " P02059.jpg P02051.jpg sixray_500\\train\\captions\\P02059.txt\n", + " P02060.jpg P02051.jpg sixray_500\\train\\captions\\P02060.txt\n", + " P02061.jpg P02057.jpg sixray_500\\train\\captions\\P02061.txt\n", + " P02062.jpg P02057.jpg sixray_500\\train\\captions\\P02062.txt\n", + " P02098.jpg P02099.jpg sixray_500\\train\\captions\\P02098.txt\n", + " P02100.jpg P02099.jpg sixray_500\\train\\captions\\P02100.txt\n", + " P02102.jpg P02099.jpg sixray_500\\train\\captions\\P02102.txt\n", + " P02104.jpg P02099.jpg sixray_500\\train\\captions\\P02104.txt\n", + " P02106.jpg P02099.jpg sixray_500\\train\\captions\\P02106.txt\n", + " P02108.jpg P02099.jpg sixray_500\\train\\captions\\P02108.txt\n", + " P02110.jpg P02099.jpg sixray_500\\train\\captions\\P02110.txt\n", + " P02112.jpg P02099.jpg sixray_500\\train\\captions\\P02112.txt\n", + " P02115.jpg P02114.jpg sixray_500\\train\\captions\\P02115.txt\n", + " P02116.jpg P02114.jpg sixray_500\\train\\captions\\P02116.txt\n", + " P02117.jpg P02114.jpg sixray_500\\train\\captions\\P02117.txt\n", + " P02118.jpg P02114.jpg sixray_500\\train\\captions\\P02118.txt\n", + " P02119.jpg P02114.jpg sixray_500\\train\\captions\\P02119.txt\n", + " P02120.jpg P02114.jpg sixray_500\\train\\captions\\P02120.txt\n", + " P02121.jpg P02114.jpg sixray_500\\train\\captions\\P02121.txt\n", + " P02174.jpg P02173.jpg sixray_500\\train\\captions\\P02174.txt\n", + " P02175.jpg P02173.jpg sixray_500\\train\\captions\\P02175.txt\n", + " P02177.jpg P02173.jpg sixray_500\\train\\captions\\P02177.txt\n", + " P02178.jpg P02173.jpg sixray_500\\train\\captions\\P02178.txt\n", + " P02179.jpg P02173.jpg sixray_500\\train\\captions\\P02179.txt\n", + " P02181.jpg P02173.jpg sixray_500\\train\\captions\\P02181.txt\n", + " P02182.jpg P02173.jpg sixray_500\\train\\captions\\P02182.txt\n", + " P02184.jpg P02173.jpg sixray_500\\train\\captions\\P02184.txt\n", + " P02186.jpg P02173.jpg sixray_500\\train\\captions\\P02186.txt\n", + " P02187.jpg P02173.jpg sixray_500\\train\\captions\\P02187.txt\n", + " P02189.jpg P02191.jpg sixray_500\\train\\captions\\P02189.txt\n", + " P02190.jpg P02191.jpg sixray_500\\train\\captions\\P02190.txt\n", + " P02192.jpg P02191.jpg sixray_500\\train\\captions\\P02192.txt\n", + " P02193.jpg P02195.jpg sixray_500\\train\\captions\\P02193.txt\n", + " P02194.jpg P02195.jpg sixray_500\\train\\captions\\P02194.txt\n", + " P02203.jpg P02202.jpg sixray_500\\train\\captions\\P02203.txt\n", + " P02205.jpg P02204.jpg sixray_500\\train\\captions\\P02205.txt\n", + " P02207.jpg P02206.jpg sixray_500\\train\\captions\\P02207.txt\n", + " P02208.jpg P02206.jpg sixray_500\\train\\captions\\P02208.txt\n", + " P02209.jpg P02206.jpg sixray_500\\train\\captions\\P02209.txt\n", + " P02210.jpg P02206.jpg sixray_500\\train\\captions\\P02210.txt\n", + " P02212.jpg P02206.jpg sixray_500\\train\\captions\\P02212.txt\n", + " P02213.jpg P02206.jpg sixray_500\\train\\captions\\P02213.txt\n", + " P02214.jpg P02206.jpg sixray_500\\train\\captions\\P02214.txt\n", + " P02216.jpg P02206.jpg sixray_500\\train\\captions\\P02216.txt\n", + " P02217.jpg P02206.jpg sixray_500\\train\\captions\\P02217.txt\n", + " P02218.jpg P02206.jpg sixray_500\\train\\captions\\P02218.txt\n", + " P02220.jpg P02206.jpg sixray_500\\train\\captions\\P02220.txt\n", + " P02221.jpg P02206.jpg sixray_500\\train\\captions\\P02221.txt\n", + " P02222.jpg P02223.jpg sixray_500\\train\\captions\\P02222.txt\n", + " P02228.jpg P01204.jpg sixray_500\\train\\captions\\P02228.txt\n", + " P02230.jpg P01204.jpg sixray_500\\train\\captions\\P02230.txt\n", + " P02231.jpg P01204.jpg sixray_500\\train\\captions\\P02231.txt\n", + " P02232.jpg P01204.jpg sixray_500\\train\\captions\\P02232.txt\n", + " P02233.jpg P01204.jpg sixray_500\\train\\captions\\P02233.txt\n", + " P02234.jpg P01204.jpg sixray_500\\train\\captions\\P02234.txt\n", + " P02235.jpg P01204.jpg sixray_500\\train\\captions\\P02235.txt\n", + " P02236.jpg P01204.jpg sixray_500\\train\\captions\\P02236.txt\n", + " P02237.jpg P01204.jpg sixray_500\\train\\captions\\P02237.txt\n", + " P02238.jpg P01204.jpg sixray_500\\train\\captions\\P02238.txt\n", + " P02239.jpg P01204.jpg sixray_500\\train\\captions\\P02239.txt\n", + " P02240.jpg P01220.jpg sixray_500\\train\\captions\\P02240.txt\n", + " P02241.jpg P01220.jpg sixray_500\\train\\captions\\P02241.txt\n", + " P02242.jpg P01220.jpg sixray_500\\train\\captions\\P02242.txt\n", + " P02243.jpg P01220.jpg sixray_500\\train\\captions\\P02243.txt\n", + " P02244.jpg P01220.jpg sixray_500\\train\\captions\\P02244.txt\n", + " P02245.jpg P01220.jpg sixray_500\\train\\captions\\P02245.txt\n", + " P02246.jpg P01220.jpg sixray_500\\train\\captions\\P02246.txt\n", + " P02247.jpg P01220.jpg sixray_500\\train\\captions\\P02247.txt\n", + " P02248.jpg P01220.jpg sixray_500\\train\\captions\\P02248.txt\n", + " P02249.jpg P01220.jpg sixray_500\\train\\captions\\P02249.txt\n", + " P02250.jpg P01220.jpg sixray_500\\train\\captions\\P02250.txt\n", + " P02251.jpg P01220.jpg sixray_500\\train\\captions\\P02251.txt\n", + " P02252.jpg P01220.jpg sixray_500\\train\\captions\\P02252.txt\n", + " P02253.jpg P01220.jpg sixray_500\\train\\captions\\P02253.txt\n", + " P02263.jpg P01360.jpg sixray_500\\train\\captions\\P02263.txt\n", + " P02264.jpg P01360.jpg sixray_500\\train\\captions\\P02264.txt\n", + " P02265.jpg P01360.jpg sixray_500\\train\\captions\\P02265.txt\n", + " P02266.jpg P01360.jpg sixray_500\\train\\captions\\P02266.txt\n", + " P02267.jpg P01360.jpg sixray_500\\train\\captions\\P02267.txt\n", + " P02268.jpg P01360.jpg sixray_500\\train\\captions\\P02268.txt\n", + " P02269.jpg P01360.jpg sixray_500\\train\\captions\\P02269.txt\n", + " P02270.jpg P01360.jpg sixray_500\\train\\captions\\P02270.txt\n", + " P02271.jpg P01360.jpg sixray_500\\train\\captions\\P02271.txt\n", + " P02272.jpg P01360.jpg sixray_500\\train\\captions\\P02272.txt\n", + " P02273.jpg P01360.jpg sixray_500\\train\\captions\\P02273.txt\n", + " P02274.jpg P01364.jpg sixray_500\\train\\captions\\P02274.txt\n", + " P02275.jpg P01364.jpg sixray_500\\train\\captions\\P02275.txt\n", + " P02279.jpg P02278.jpg sixray_500\\train\\captions\\P02279.txt\n", + " P02280.jpg P02278.jpg sixray_500\\train\\captions\\P02280.txt\n", + " P02281.jpg P02278.jpg sixray_500\\train\\captions\\P02281.txt\n", + " P02283.jpg P02282.jpg sixray_500\\train\\captions\\P02283.txt\n", + " P02284.jpg P02282.jpg sixray_500\\train\\captions\\P02284.txt\n", + " P02285.jpg P02282.jpg sixray_500\\train\\captions\\P02285.txt\n", + " P02287.jpg P02286.jpg sixray_500\\train\\captions\\P02287.txt\n", + " P02288.jpg P02286.jpg sixray_500\\train\\captions\\P02288.txt\n", + " P02290.jpg P02289.jpg sixray_500\\train\\captions\\P02290.txt\n", + " P02291.jpg P02289.jpg sixray_500\\train\\captions\\P02291.txt\n", + " P02292.jpg P02289.jpg sixray_500\\train\\captions\\P02292.txt\n", + " P02293.jpg P02289.jpg sixray_500\\train\\captions\\P02293.txt\n", + " P02294.jpg P02289.jpg sixray_500\\train\\captions\\P02294.txt\n", + " P02295.jpg P02289.jpg sixray_500\\train\\captions\\P02295.txt\n", + " P02296.jpg P02289.jpg sixray_500\\train\\captions\\P02296.txt\n", + " P02297.jpg P02289.jpg sixray_500\\train\\captions\\P02297.txt\n", + " P02298.jpg P02289.jpg sixray_500\\train\\captions\\P02298.txt\n", + " P02299.jpg P02289.jpg sixray_500\\train\\captions\\P02299.txt\n", + " P02300.jpg P02289.jpg sixray_500\\train\\captions\\P02300.txt\n", + " P00050.jpg P03725.jpg sixray_500\\train\\captions\\P00050.txt\n", + " P00056.jpg P02978.jpg sixray_500\\train\\captions\\P00056.txt\n", + " P00057.jpg P02978.jpg sixray_500\\train\\captions\\P00057.txt\n", + " P00058.jpg P02978.jpg sixray_500\\train\\captions\\P00058.txt\n", + " P00059.jpg P02978.jpg sixray_500\\train\\captions\\P00059.txt\n", + " P00060.jpg P02978.jpg sixray_500\\train\\captions\\P00060.txt\n", + " P00064.jpg P03121.jpg sixray_500\\train\\captions\\P00064.txt\n", + " P00087.jpg P03121.jpg sixray_500\\train\\captions\\P00087.txt\n", + " P00091.jpg P03121.jpg sixray_500\\train\\captions\\P00091.txt\n", + " P00092.jpg P03121.jpg sixray_500\\train\\captions\\P00092.txt\n", + " P00096.jpg P03121.jpg sixray_500\\train\\captions\\P00096.txt\n", + " P00098.jpg P03121.jpg sixray_500\\train\\captions\\P00098.txt\n", + " P00099.jpg P03121.jpg sixray_500\\train\\captions\\P00099.txt\n", + " P00102.jpg P03121.jpg sixray_500\\train\\captions\\P00102.txt\n", + " P00115.jpg P03121.jpg sixray_500\\train\\captions\\P00115.txt\n", + " P00116.jpg P03121.jpg sixray_500\\train\\captions\\P00116.txt\n", + " P00117.jpg P03121.jpg sixray_500\\train\\captions\\P00117.txt\n", + " P00118.jpg P03121.jpg sixray_500\\train\\captions\\P00118.txt\n", + " P00119.jpg P03121.jpg sixray_500\\train\\captions\\P00119.txt\n", + " P00121.jpg P03121.jpg sixray_500\\train\\captions\\P00121.txt\n", + " P00122.jpg P03121.jpg sixray_500\\train\\captions\\P00122.txt\n", + " P00124.jpg P03121.jpg sixray_500\\train\\captions\\P00124.txt\n", + " P00125.jpg P03121.jpg sixray_500\\train\\captions\\P00125.txt\n", + " P00126.jpg P03121.jpg sixray_500\\train\\captions\\P00126.txt\n", + " P00127.jpg P03121.jpg sixray_500\\train\\captions\\P00127.txt\n", + " P00128.jpg P03121.jpg sixray_500\\train\\captions\\P00128.txt\n", + " P00129.jpg P03121.jpg sixray_500\\train\\captions\\P00129.txt\n", + " P00131.jpg P03121.jpg sixray_500\\train\\captions\\P00131.txt\n", + " P00132.jpg P03121.jpg sixray_500\\train\\captions\\P00132.txt\n", + " P00134.jpg P03121.jpg sixray_500\\train\\captions\\P00134.txt\n", + " P00136.jpg P03121.jpg sixray_500\\train\\captions\\P00136.txt\n", + " P00137.jpg P03121.jpg sixray_500\\train\\captions\\P00137.txt\n", + " P00138.jpg P03121.jpg sixray_500\\train\\captions\\P00138.txt\n", + " P00139.jpg P03121.jpg sixray_500\\train\\captions\\P00139.txt\n", + " P00140.jpg P03121.jpg sixray_500\\train\\captions\\P00140.txt\n", + " P00141.jpg P03121.jpg sixray_500\\train\\captions\\P00141.txt\n", + " P00142.jpg P03121.jpg sixray_500\\train\\captions\\P00142.txt\n", + " P00144.jpg P03121.jpg sixray_500\\train\\captions\\P00144.txt\n", + " P00146.jpg P03121.jpg sixray_500\\train\\captions\\P00146.txt\n", + " P00153.jpg P03121.jpg sixray_500\\train\\captions\\P00153.txt\n", + " P00154.jpg P03121.jpg sixray_500\\train\\captions\\P00154.txt\n", + " P00156.jpg P03121.jpg sixray_500\\train\\captions\\P00156.txt\n", + " P00158.jpg P03121.jpg sixray_500\\train\\captions\\P00158.txt\n", + " P00160.jpg P03121.jpg sixray_500\\train\\captions\\P00160.txt\n", + " P00163.jpg P03121.jpg sixray_500\\train\\captions\\P00163.txt\n", + " P00165.jpg P03121.jpg sixray_500\\train\\captions\\P00165.txt\n", + " P00166.jpg P03121.jpg sixray_500\\train\\captions\\P00166.txt\n", + " P00167.jpg P03121.jpg sixray_500\\train\\captions\\P00167.txt\n", + " P00168.jpg P03121.jpg sixray_500\\train\\captions\\P00168.txt\n", + " P00169.jpg P03121.jpg sixray_500\\train\\captions\\P00169.txt\n", + " P00170.jpg P03121.jpg sixray_500\\train\\captions\\P00170.txt\n", + " P00173.jpg P03121.jpg sixray_500\\train\\captions\\P00173.txt\n", + " P00174.jpg P03121.jpg sixray_500\\train\\captions\\P00174.txt\n", + " P00186.jpg P03121.jpg sixray_500\\train\\captions\\P00186.txt\n", + " P00196.jpg P03121.jpg sixray_500\\train\\captions\\P00196.txt\n", + " P00197.jpg P03121.jpg sixray_500\\train\\captions\\P00197.txt\n", + " P00204.jpg P03121.jpg sixray_500\\train\\captions\\P00204.txt\n", + " P00221.jpg P03121.jpg sixray_500\\train\\captions\\P00221.txt\n", + " P02370.jpg P02371.jpg sixray_500\\train\\captions\\P02370.txt\n", + " P00225.jpg P02464.jpg sixray_500\\train\\captions\\P00225.txt\n", + " P00251.jpg P02382.jpg sixray_500\\train\\captions\\P00251.txt\n", + " P00268.jpg P03121.jpg sixray_500\\train\\captions\\P00268.txt\n", + " P00274.jpg P00429.jpg sixray_500\\train\\captions\\P00274.txt\n", + " P00275.jpg P00429.jpg sixray_500\\train\\captions\\P00275.txt\n", + " P00278.jpg P00429.jpg sixray_500\\train\\captions\\P00278.txt\n", + " P02377.jpg P02371.jpg sixray_500\\train\\captions\\P02377.txt\n", + " P00279.jpg P00010.jpg sixray_500\\train\\captions\\P00279.txt\n", + " P00281.jpg P02464.jpg sixray_500\\train\\captions\\P00281.txt\n", + " P00288.jpg P02382.jpg sixray_500\\train\\captions\\P00288.txt\n", + " P02381.jpg P02371.jpg sixray_500\\train\\captions\\P02381.txt\n", + " P00292.jpg P00010.jpg sixray_500\\train\\captions\\P00292.txt\n", + " P00293.jpg P02464.jpg sixray_500\\train\\captions\\P00293.txt\n", + " P00295.jpg P02382.jpg sixray_500\\train\\captions\\P00295.txt\n", + " P00298.jpg P00429.jpg sixray_500\\train\\captions\\P00298.txt\n", + " P02386.jpg P02371.jpg sixray_500\\train\\captions\\P02386.txt\n", + " P00303.jpg P00010.jpg sixray_500\\train\\captions\\P00303.txt\n", + " P00305.jpg P02464.jpg sixray_500\\train\\captions\\P00305.txt\n", + " P00306.jpg P02382.jpg sixray_500\\train\\captions\\P00306.txt\n", + " P00308.jpg P00429.jpg sixray_500\\train\\captions\\P00308.txt\n", + " P02391.jpg P02371.jpg sixray_500\\train\\captions\\P02391.txt\n", + " P00309.jpg P00010.jpg sixray_500\\train\\captions\\P00309.txt\n", + " P00314.jpg P02464.jpg sixray_500\\train\\captions\\P00314.txt\n", + " P00315.jpg P02382.jpg sixray_500\\train\\captions\\P00315.txt\n", + " P00317.jpg P00429.jpg sixray_500\\train\\captions\\P00317.txt\n", + " P00318.jpg P00429.jpg sixray_500\\train\\captions\\P00318.txt\n", + " P00319.jpg P00429.jpg sixray_500\\train\\captions\\P00319.txt\n", + " P02398.jpg P02371.jpg sixray_500\\train\\captions\\P02398.txt\n", + " P02399.jpg P02371.jpg sixray_500\\train\\captions\\P02399.txt\n", + " P02400.jpg P02371.jpg sixray_500\\train\\captions\\P02400.txt\n", + " P00322.jpg P00010.jpg sixray_500\\train\\captions\\P00322.txt\n", + " P02402.jpg P02371.jpg sixray_500\\train\\captions\\P02402.txt\n", + " P02403.jpg P02371.jpg sixray_500\\train\\captions\\P02403.txt\n", + " P02404.jpg P02371.jpg sixray_500\\train\\captions\\P02404.txt\n", + " P00324.jpg P00010.jpg sixray_500\\train\\captions\\P00324.txt\n", + " P00325.jpg P02464.jpg sixray_500\\train\\captions\\P00325.txt\n", + " P00327.jpg P02382.jpg sixray_500\\train\\captions\\P00327.txt\n", + " P00328.jpg P00429.jpg sixray_500\\train\\captions\\P00328.txt\n", + " P00331.jpg P00429.jpg sixray_500\\train\\captions\\P00331.txt\n", + " P02411.jpg P02371.jpg sixray_500\\train\\captions\\P02411.txt\n", + " P00336.jpg P00010.jpg sixray_500\\train\\captions\\P00336.txt\n", + " P02413.jpg P02371.jpg sixray_500\\train\\captions\\P02413.txt\n", + " P00338.jpg P00010.jpg sixray_500\\train\\captions\\P00338.txt\n", + " P00342.jpg P02464.jpg sixray_500\\train\\captions\\P00342.txt\n", + " P02416.jpg P02371.jpg sixray_500\\train\\captions\\P02416.txt\n", + " P00344.jpg P00010.jpg sixray_500\\train\\captions\\P00344.txt\n", + " P00346.jpg P02464.jpg sixray_500\\train\\captions\\P00346.txt\n", + " P02419.jpg P02371.jpg sixray_500\\train\\captions\\P02419.txt\n", + " P02420.jpg P02371.jpg sixray_500\\train\\captions\\P02420.txt\n", + " P00347.jpg P00010.jpg sixray_500\\train\\captions\\P00347.txt\n", + " P00348.jpg P02464.jpg sixray_500\\train\\captions\\P00348.txt\n", + " P02423.jpg P02371.jpg sixray_500\\train\\captions\\P02423.txt\n", + " P00350.jpg P00010.jpg sixray_500\\train\\captions\\P00350.txt\n", + " P00373.jpg P02464.jpg sixray_500\\train\\captions\\P00373.txt\n", + " P02426.jpg P02371.jpg sixray_500\\train\\captions\\P02426.txt\n", + " P00384.jpg P00010.jpg sixray_500\\train\\captions\\P00384.txt\n", + " P00387.jpg P02464.jpg sixray_500\\train\\captions\\P00387.txt\n", + " P02429.jpg P02371.jpg sixray_500\\train\\captions\\P02429.txt\n", + " P00389.jpg P00010.jpg sixray_500\\train\\captions\\P00389.txt\n", + " P02431.jpg P02371.jpg sixray_500\\train\\captions\\P02431.txt\n", + " P00396.jpg P00010.jpg sixray_500\\train\\captions\\P00396.txt\n", + " P02433.jpg P02371.jpg sixray_500\\train\\captions\\P02433.txt\n", + " P02434.jpg P02371.jpg sixray_500\\train\\captions\\P02434.txt\n", + " P00403.jpg P00010.jpg sixray_500\\train\\captions\\P00403.txt\n", + " P02436.jpg P02371.jpg sixray_500\\train\\captions\\P02436.txt\n", + " P00405.jpg P00010.jpg sixray_500\\train\\captions\\P00405.txt\n", + " P00406.jpg P02464.jpg sixray_500\\train\\captions\\P00406.txt\n", + " P02440.jpg P02437.jpg sixray_500\\train\\captions\\P02440.txt\n", + " P02441.jpg P02437.jpg sixray_500\\train\\captions\\P02441.txt\n", + " P00407.jpg P02711.jpg sixray_500\\train\\captions\\P00407.txt\n", + " P00408.jpg P00429.jpg sixray_500\\train\\captions\\P00408.txt\n", + " P02444.jpg P02437.jpg sixray_500\\train\\captions\\P02444.txt\n", + " P00411.jpg P02711.jpg sixray_500\\train\\captions\\P00411.txt\n", + " P00412.jpg P03147.jpg sixray_500\\train\\captions\\P00412.txt\n", + " P00413.jpg P03147.jpg sixray_500\\train\\captions\\P00413.txt\n", + " P00414.jpg P03147.jpg sixray_500\\train\\captions\\P00414.txt\n", + " P00416.jpg P03147.jpg sixray_500\\train\\captions\\P00416.txt\n", + " P00418.jpg P03147.jpg sixray_500\\train\\captions\\P00418.txt\n", + " P02451.jpg P02450.jpg sixray_500\\train\\captions\\P02451.txt\n", + " P02452.jpg P02454.jpg sixray_500\\train\\captions\\P02452.txt\n", + " P02453.jpg P02454.jpg sixray_500\\train\\captions\\P02453.txt\n", + " P00419.jpg P02454.jpg sixray_500\\train\\captions\\P00419.txt\n", + " P02455.jpg P02454.jpg sixray_500\\train\\captions\\P02455.txt\n", + " P02456.jpg P02454.jpg sixray_500\\train\\captions\\P02456.txt\n", + " P02457.jpg P02458.jpg sixray_500\\train\\captions\\P02457.txt\n", + " P00420.jpg P02458.jpg sixray_500\\train\\captions\\P00420.txt\n", + " P02459.jpg P02458.jpg sixray_500\\train\\captions\\P02459.txt\n", + " P02460.jpg P02461.jpg sixray_500\\train\\captions\\P02460.txt\n", + " P00421.jpg P00739.jpg sixray_500\\train\\captions\\P00421.txt\n", + " P00422.jpg P00043.jpg sixray_500\\train\\captions\\P00422.txt\n", + " P00423.jpg P02481.jpg sixray_500\\train\\captions\\P00423.txt\n", + " P00425.jpg P03133.jpg sixray_500\\train\\captions\\P00425.txt\n", + " P02465.jpg P02464.jpg sixray_500\\train\\captions\\P02465.txt\n", + " P00426.jpg P00010.jpg sixray_500\\train\\captions\\P00426.txt\n", + " P02467.jpg P02464.jpg sixray_500\\train\\captions\\P02467.txt\n", + " P00427.jpg P02464.jpg sixray_500\\train\\captions\\P00427.txt\n", + " P02469.jpg P02464.jpg sixray_500\\train\\captions\\P02469.txt\n", + " P00447.jpg P02464.jpg sixray_500\\train\\captions\\P00447.txt\n", + " P02471.jpg P02464.jpg sixray_500\\train\\captions\\P02471.txt\n", + " P00459.jpg P02464.jpg sixray_500\\train\\captions\\P00459.txt\n", + " P02473.jpg P02470.jpg sixray_500\\train\\captions\\P02473.txt\n", + " P02474.jpg P02476.jpg sixray_500\\train\\captions\\P02474.txt\n", + " P02475.jpg P02470.jpg sixray_500\\train\\captions\\P02475.txt\n", + " P00460.jpg P02831.jpg sixray_500\\train\\captions\\P00460.txt\n", + " P02477.jpg P02470.jpg sixray_500\\train\\captions\\P02477.txt\n", + " P02478.jpg P02476.jpg sixray_500\\train\\captions\\P02478.txt\n", + " P02479.jpg P02470.jpg sixray_500\\train\\captions\\P02479.txt\n", + " P02480.jpg P02470.jpg sixray_500\\train\\captions\\P02480.txt\n", + " P00462.jpg P02831.jpg sixray_500\\train\\captions\\P00462.txt\n", + " P02482.jpg P02470.jpg sixray_500\\train\\captions\\P02482.txt\n", + " P01236.jpg P02831.jpg sixray_500\\train\\captions\\P01236.txt\n", + " P01239.jpg P00027.jpg sixray_500\\train\\captions\\P01239.txt\n", + " P02485.jpg P02484.jpg sixray_500\\train\\captions\\P02485.txt\n", + " P01371.jpg P02831.jpg sixray_500\\train\\captions\\P01371.txt\n", + " P01529.jpg P02481.jpg sixray_500\\train\\captions\\P01529.txt\n", + " P02488.jpg P02489.jpg sixray_500\\train\\captions\\P02488.txt\n", + " P01788.jpg P02481.jpg sixray_500\\train\\captions\\P01788.txt\n", + " P01792.jpg P02476.jpg sixray_500\\train\\captions\\P01792.txt\n", + " P01793.jpg P01632.jpg sixray_500\\train\\captions\\P01793.txt\n", + " P01794.jpg P01632.jpg sixray_500\\train\\captions\\P01794.txt\n", + " P02493.jpg P02476.jpg sixray_500\\train\\captions\\P02493.txt\n", + " P01795.jpg P02489.jpg sixray_500\\train\\captions\\P01795.txt\n", + " P02495.jpg P02476.jpg sixray_500\\train\\captions\\P02495.txt\n", + " P01796.jpg P02481.jpg sixray_500\\train\\captions\\P01796.txt\n", + " P01797.jpg P01632.jpg sixray_500\\train\\captions\\P01797.txt\n", + " P01798.jpg P01632.jpg sixray_500\\train\\captions\\P01798.txt\n", + " P02499.jpg P02476.jpg sixray_500\\train\\captions\\P02499.txt\n", + " P01799.jpg P02489.jpg sixray_500\\train\\captions\\P01799.txt\n", + " P02501.jpg P02476.jpg sixray_500\\train\\captions\\P02501.txt\n", + " P02502.jpg P02476.jpg sixray_500\\train\\captions\\P02502.txt\n", + " P01800.jpg P02489.jpg sixray_500\\train\\captions\\P01800.txt\n", + " P02504.jpg P02476.jpg sixray_500\\train\\captions\\P02504.txt\n", + " P02505.jpg P02476.jpg sixray_500\\train\\captions\\P02505.txt\n", + " P02506.jpg P02476.jpg sixray_500\\train\\captions\\P02506.txt\n", + " P01801.jpg P02481.jpg sixray_500\\train\\captions\\P01801.txt\n", + " P02508.jpg P02476.jpg sixray_500\\train\\captions\\P02508.txt\n", + " P01802.jpg P02489.jpg sixray_500\\train\\captions\\P01802.txt\n", + " P02511.jpg P02476.jpg sixray_500\\train\\captions\\P02511.txt\n", + " P02512.jpg P02476.jpg sixray_500\\train\\captions\\P02512.txt\n", + " P02514.jpg P02476.jpg sixray_500\\train\\captions\\P02514.txt\n", + " P01803.jpg P02489.jpg sixray_500\\train\\captions\\P01803.txt\n", + " P01804.jpg P02481.jpg sixray_500\\train\\captions\\P01804.txt\n", + " P02517.jpg P02476.jpg sixray_500\\train\\captions\\P02517.txt\n", + " P02518.jpg P02476.jpg sixray_500\\train\\captions\\P02518.txt\n", + " P01805.jpg P02489.jpg sixray_500\\train\\captions\\P01805.txt\n", + " P02520.jpg P02476.jpg sixray_500\\train\\captions\\P02520.txt\n", + " P02521.jpg P02476.jpg sixray_500\\train\\captions\\P02521.txt\n", + " P01806.jpg P02489.jpg sixray_500\\train\\captions\\P01806.txt\n", + " P02523.jpg P02476.jpg sixray_500\\train\\captions\\P02523.txt\n", + " P01807.jpg P02489.jpg sixray_500\\train\\captions\\P01807.txt\n", + " P01808.jpg P01645.jpg sixray_500\\train\\captions\\P01808.txt\n", + " P01809.jpg P01645.jpg sixray_500\\train\\captions\\P01809.txt\n", + " P01810.jpg P01645.jpg sixray_500\\train\\captions\\P01810.txt\n", + " P01811.jpg P01645.jpg sixray_500\\train\\captions\\P01811.txt\n", + " P01812.jpg P01645.jpg sixray_500\\train\\captions\\P01812.txt\n", + " P01813.jpg P01645.jpg sixray_500\\train\\captions\\P01813.txt\n", + " P01814.jpg P01645.jpg sixray_500\\train\\captions\\P01814.txt\n", + " P01815.jpg P01645.jpg sixray_500\\train\\captions\\P01815.txt\n", + " P02533.jpg P02476.jpg sixray_500\\train\\captions\\P02533.txt\n", + " P02535.jpg P02476.jpg sixray_500\\train\\captions\\P02535.txt\n", + " P01816.jpg P02489.jpg sixray_500\\train\\captions\\P01816.txt\n", + " P02537.jpg P02476.jpg sixray_500\\train\\captions\\P02537.txt\n", + " P01817.jpg P02489.jpg sixray_500\\train\\captions\\P01817.txt\n", + " P02539.jpg P02476.jpg sixray_500\\train\\captions\\P02539.txt\n", + " P02540.jpg P02476.jpg sixray_500\\train\\captions\\P02540.txt\n", + " P02541.jpg P02476.jpg sixray_500\\train\\captions\\P02541.txt\n", + " P01818.jpg P02489.jpg sixray_500\\train\\captions\\P01818.txt\n", + " P01819.jpg P01645.jpg sixray_500\\train\\captions\\P01819.txt\n", + " P01820.jpg P01645.jpg sixray_500\\train\\captions\\P01820.txt\n", + " P02545.jpg P02476.jpg sixray_500\\train\\captions\\P02545.txt\n", + " P01821.jpg P02489.jpg sixray_500\\train\\captions\\P01821.txt\n", + " P02547.jpg P02476.jpg sixray_500\\train\\captions\\P02547.txt\n", + " P01822.jpg P02489.jpg sixray_500\\train\\captions\\P01822.txt\n", + " P02550.jpg P02552.jpg sixray_500\\train\\captions\\P02550.txt\n", + " P01823.jpg P01645.jpg sixray_500\\train\\captions\\P01823.txt\n", + " P01855.jpg P02711.jpg sixray_500\\train\\captions\\P01855.txt\n", + " P02553.jpg P02476.jpg sixray_500\\train\\captions\\P02553.txt\n", + " P01856.jpg P02489.jpg sixray_500\\train\\captions\\P01856.txt\n", + " P02555.jpg P02476.jpg sixray_500\\train\\captions\\P02555.txt\n", + " P01857.jpg P02489.jpg sixray_500\\train\\captions\\P01857.txt\n", + " P02557.jpg P02476.jpg sixray_500\\train\\captions\\P02557.txt\n", + " P01858.jpg P02489.jpg sixray_500\\train\\captions\\P01858.txt\n", + " P02559.jpg P02476.jpg sixray_500\\train\\captions\\P02559.txt\n", + " P02560.jpg P02476.jpg sixray_500\\train\\captions\\P02560.txt\n", + " P01859.jpg P02489.jpg sixray_500\\train\\captions\\P01859.txt\n", + " P02563.jpg P02476.jpg sixray_500\\train\\captions\\P02563.txt\n", + " P02564.jpg P02476.jpg sixray_500\\train\\captions\\P02564.txt\n", + " P01860.jpg P02489.jpg sixray_500\\train\\captions\\P01860.txt\n", + " P02566.jpg P02476.jpg sixray_500\\train\\captions\\P02566.txt\n", + " P02567.jpg P02476.jpg sixray_500\\train\\captions\\P02567.txt\n", + " P01861.jpg P02489.jpg sixray_500\\train\\captions\\P01861.txt\n", + " P02569.jpg P02476.jpg sixray_500\\train\\captions\\P02569.txt\n", + " P02570.jpg P02476.jpg sixray_500\\train\\captions\\P02570.txt\n", + " P01862.jpg P02489.jpg sixray_500\\train\\captions\\P01862.txt\n", + " P02572.jpg P02476.jpg sixray_500\\train\\captions\\P02572.txt\n", + " P02573.jpg P02476.jpg sixray_500\\train\\captions\\P02573.txt\n", + " P02574.jpg P02476.jpg sixray_500\\train\\captions\\P02574.txt\n", + " P02575.jpg P02476.jpg sixray_500\\train\\captions\\P02575.txt\n", + " P01863.jpg P02489.jpg sixray_500\\train\\captions\\P01863.txt\n", + " P02577.jpg P02476.jpg sixray_500\\train\\captions\\P02577.txt\n", + " P02579.jpg P02476.jpg sixray_500\\train\\captions\\P02579.txt\n", + " P02580.jpg P02476.jpg sixray_500\\train\\captions\\P02580.txt\n", + " P01864.jpg P02489.jpg sixray_500\\train\\captions\\P01864.txt\n", + " P02582.jpg P02476.jpg sixray_500\\train\\captions\\P02582.txt\n", + " P02583.jpg P02476.jpg sixray_500\\train\\captions\\P02583.txt\n", + " P02584.jpg P02476.jpg sixray_500\\train\\captions\\P02584.txt\n", + " P02585.jpg P02476.jpg sixray_500\\train\\captions\\P02585.txt\n", + " P02586.jpg P02476.jpg sixray_500\\train\\captions\\P02586.txt\n", + " P01865.jpg P02489.jpg sixray_500\\train\\captions\\P01865.txt\n", + " P01866.jpg P02481.jpg sixray_500\\train\\captions\\P01866.txt\n", + " P02589.jpg P02476.jpg sixray_500\\train\\captions\\P02589.txt\n", + " P01867.jpg P02489.jpg sixray_500\\train\\captions\\P01867.txt\n", + " P01868.jpg P02481.jpg sixray_500\\train\\captions\\P01868.txt\n", + " P01869.jpg P02382.jpg sixray_500\\train\\captions\\P01869.txt\n", + " P01870.jpg P02476.jpg sixray_500\\train\\captions\\P01870.txt\n", + " P01871.jpg P01784.jpg sixray_500\\train\\captions\\P01871.txt\n", + " P01872.jpg P01784.jpg sixray_500\\train\\captions\\P01872.txt\n", + " P01873.jpg P01784.jpg sixray_500\\train\\captions\\P01873.txt\n", + " P01874.jpg P01784.jpg sixray_500\\train\\captions\\P01874.txt\n", + " P01875.jpg P01784.jpg sixray_500\\train\\captions\\P01875.txt\n", + " P01876.jpg P01784.jpg sixray_500\\train\\captions\\P01876.txt\n", + " P01877.jpg P01784.jpg sixray_500\\train\\captions\\P01877.txt\n", + " P01878.jpg P01784.jpg sixray_500\\train\\captions\\P01878.txt\n", + " P01879.jpg P01784.jpg sixray_500\\train\\captions\\P01879.txt\n", + " P01880.jpg P01784.jpg sixray_500\\train\\captions\\P01880.txt\n", + " P01881.jpg P01784.jpg sixray_500\\train\\captions\\P01881.txt\n", + " P01891.jpg P01882.jpg sixray_500\\train\\captions\\P01891.txt\n", + " P01892.jpg P01882.jpg sixray_500\\train\\captions\\P01892.txt\n", + " P01893.jpg P01882.jpg sixray_500\\train\\captions\\P01893.txt\n", + " P01894.jpg P01882.jpg sixray_500\\train\\captions\\P01894.txt\n", + " P01895.jpg P01882.jpg sixray_500\\train\\captions\\P01895.txt\n", + " P01896.jpg P01882.jpg sixray_500\\train\\captions\\P01896.txt\n", + " P01897.jpg P01882.jpg sixray_500\\train\\captions\\P01897.txt\n", + " P01898.jpg P01882.jpg sixray_500\\train\\captions\\P01898.txt\n", + " P01899.jpg P01387.jpg sixray_500\\train\\captions\\P01899.txt\n", + " P01900.jpg P01387.jpg sixray_500\\train\\captions\\P01900.txt\n", + " P01901.jpg P01387.jpg sixray_500\\train\\captions\\P01901.txt\n", + " P01902.jpg P01387.jpg sixray_500\\train\\captions\\P01902.txt\n", + " P01903.jpg P01387.jpg sixray_500\\train\\captions\\P01903.txt\n", + " P01904.jpg P01387.jpg sixray_500\\train\\captions\\P01904.txt\n", + " P01905.jpg P01387.jpg sixray_500\\train\\captions\\P01905.txt\n", + " P01906.jpg P01387.jpg sixray_500\\train\\captions\\P01906.txt\n", + " P01907.jpg P01387.jpg sixray_500\\train\\captions\\P01907.txt\n", + " P01908.jpg P01387.jpg sixray_500\\train\\captions\\P01908.txt\n", + " P01909.jpg P01387.jpg sixray_500\\train\\captions\\P01909.txt\n", + " P01910.jpg P01387.jpg sixray_500\\train\\captions\\P01910.txt\n", + " P01911.jpg P01387.jpg sixray_500\\train\\captions\\P01911.txt\n", + " P01912.jpg P01387.jpg sixray_500\\train\\captions\\P01912.txt\n", + " P01913.jpg P01387.jpg sixray_500\\train\\captions\\P01913.txt\n", + " P01914.jpg P01387.jpg sixray_500\\train\\captions\\P01914.txt\n", + " P02196.jpg P02202.jpg sixray_500\\train\\captions\\P02196.txt\n", + " P02197.jpg P02202.jpg sixray_500\\train\\captions\\P02197.txt\n", + " P02198.jpg P02202.jpg sixray_500\\train\\captions\\P02198.txt\n", + " P02199.jpg P02202.jpg sixray_500\\train\\captions\\P02199.txt\n", + " P02200.jpg P02202.jpg sixray_500\\train\\captions\\P02200.txt\n", + " P02201.jpg P02202.jpg sixray_500\\train\\captions\\P02201.txt\n", + " P02226.jpg P01625.jpg sixray_500\\train\\captions\\P02226.txt\n", + " P02227.jpg P01625.jpg sixray_500\\train\\captions\\P02227.txt\n", + " P02254.jpg P02435.jpg sixray_500\\train\\captions\\P02254.txt\n", + " P02255.jpg P02435.jpg sixray_500\\train\\captions\\P02255.txt\n", + " P02256.jpg P02435.jpg sixray_500\\train\\captions\\P02256.txt\n", + " P02257.jpg P02435.jpg sixray_500\\train\\captions\\P02257.txt\n", + " P02258.jpg P02435.jpg sixray_500\\train\\captions\\P02258.txt\n", + " P02259.jpg P02435.jpg sixray_500\\train\\captions\\P02259.txt\n", + " P02260.jpg P02435.jpg sixray_500\\train\\captions\\P02260.txt\n", + " P02261.jpg P02435.jpg sixray_500\\train\\captions\\P02261.txt\n", + " P02262.jpg P02435.jpg sixray_500\\train\\captions\\P02262.txt\n", + " P02276.jpg P02435.jpg sixray_500\\train\\captions\\P02276.txt\n", + " P02303.jpg P02481.jpg sixray_500\\train\\captions\\P02303.txt\n", + " P02304.jpg P03725.jpg sixray_500\\train\\captions\\P02304.txt\n", + " P02305.jpg P03725.jpg sixray_500\\train\\captions\\P02305.txt\n", + " P02306.jpg P03725.jpg sixray_500\\train\\captions\\P02306.txt\n", + " P02314.jpg P00272.jpg sixray_500\\train\\captions\\P02314.txt\n", + " P02315.jpg P03121.jpg sixray_500\\train\\captions\\P02315.txt\n", + " P02316.jpg P03098.jpg sixray_500\\train\\captions\\P02316.txt\n", + " P02317.jpg P00272.jpg sixray_500\\train\\captions\\P02317.txt\n", + " P02318.jpg P00272.jpg sixray_500\\train\\captions\\P02318.txt\n", + " P02661.jpg P02665.jpg sixray_500\\train\\captions\\P02661.txt\n", + " P02319.jpg P02692.jpg sixray_500\\train\\captions\\P02319.txt\n", + " P02320.jpg P03098.jpg sixray_500\\train\\captions\\P02320.txt\n", + " P02321.jpg P00272.jpg sixray_500\\train\\captions\\P02321.txt\n", + " P02322.jpg P02665.jpg sixray_500\\train\\captions\\P02322.txt\n", + " P02323.jpg P03098.jpg sixray_500\\train\\captions\\P02323.txt\n", + " P02324.jpg P02464.jpg sixray_500\\train\\captions\\P02324.txt\n", + " P02325.jpg P02053.jpg sixray_500\\train\\captions\\P02325.txt\n", + " P02326.jpg P02464.jpg sixray_500\\train\\captions\\P02326.txt\n", + " P02327.jpg P02464.jpg sixray_500\\train\\captions\\P02327.txt\n", + " P02328.jpg P02053.jpg sixray_500\\train\\captions\\P02328.txt\n", + " P02329.jpg P02464.jpg sixray_500\\train\\captions\\P02329.txt\n", + " P02330.jpg P02053.jpg sixray_500\\train\\captions\\P02330.txt\n", + " P02331.jpg P00991.jpg sixray_500\\train\\captions\\P02331.txt\n", + " P02332.jpg P02053.jpg sixray_500\\train\\captions\\P02332.txt\n", + " P02333.jpg P00991.jpg sixray_500\\train\\captions\\P02333.txt\n", + " P02334.jpg P02665.jpg sixray_500\\train\\captions\\P02334.txt\n", + " P02335.jpg P00027.jpg sixray_500\\train\\captions\\P02335.txt\n", + " P02336.jpg P02053.jpg sixray_500\\train\\captions\\P02336.txt\n", + " P02680.jpg P02665.jpg sixray_500\\train\\captions\\P02680.txt\n", + " P02338.jpg P02692.jpg sixray_500\\train\\captions\\P02338.txt\n", + " P02343.jpg P02665.jpg sixray_500\\train\\captions\\P02343.txt\n", + " P02344.jpg P00027.jpg sixray_500\\train\\captions\\P02344.txt\n", + " P02345.jpg P02053.jpg sixray_500\\train\\captions\\P02345.txt\n", + " P02347.jpg P00027.jpg sixray_500\\train\\captions\\P02347.txt\n", + " P02349.jpg P00027.jpg sixray_500\\train\\captions\\P02349.txt\n", + " P02350.jpg P02053.jpg sixray_500\\train\\captions\\P02350.txt\n", + " P02352.jpg P00027.jpg sixray_500\\train\\captions\\P02352.txt\n", + " P02689.jpg P02665.jpg sixray_500\\train\\captions\\P02689.txt\n", + " P02353.jpg P02692.jpg sixray_500\\train\\captions\\P02353.txt\n", + " P02356.jpg P02665.jpg sixray_500\\train\\captions\\P02356.txt\n", + " P02358.jpg P00027.jpg sixray_500\\train\\captions\\P02358.txt\n", + " P02359.jpg P02053.jpg sixray_500\\train\\captions\\P02359.txt\n", + " P02360.jpg P02464.jpg sixray_500\\train\\captions\\P02360.txt\n", + " P02361.jpg P00027.jpg sixray_500\\train\\captions\\P02361.txt\n", + " P02362.jpg P02414.jpg sixray_500\\train\\captions\\P02362.txt\n", + " P02363.jpg P02464.jpg sixray_500\\train\\captions\\P02363.txt\n", + " P02364.jpg P02464.jpg sixray_500\\train\\captions\\P02364.txt\n", + " P02699.jpg P02693.jpg sixray_500\\train\\captions\\P02699.txt\n", + " P02365.jpg P02414.jpg sixray_500\\train\\captions\\P02365.txt\n", + " P02367.jpg P02464.jpg sixray_500\\train\\captions\\P02367.txt\n", + " P02368.jpg P02053.jpg sixray_500\\train\\captions\\P02368.txt\n", + " P02369.jpg P02711.jpg sixray_500\\train\\captions\\P02369.txt\n", + " P02372.jpg P02450.jpg sixray_500\\train\\captions\\P02372.txt\n", + " P02373.jpg P02053.jpg sixray_500\\train\\captions\\P02373.txt\n", + " P02375.jpg P02053.jpg sixray_500\\train\\captions\\P02375.txt\n", + " P02378.jpg P02965.jpg sixray_500\\train\\captions\\P02378.txt\n", + " P02379.jpg P02450.jpg sixray_500\\train\\captions\\P02379.txt\n", + " P02380.jpg P02053.jpg sixray_500\\train\\captions\\P02380.txt\n", + " P02383.jpg P02414.jpg sixray_500\\train\\captions\\P02383.txt\n", + " P02384.jpg P02053.jpg sixray_500\\train\\captions\\P02384.txt\n", + " P02387.jpg P02414.jpg sixray_500\\train\\captions\\P02387.txt\n", + " P02388.jpg P02053.jpg sixray_500\\train\\captions\\P02388.txt\n", + " P02390.jpg P02450.jpg sixray_500\\train\\captions\\P02390.txt\n", + " P02394.jpg P02053.jpg sixray_500\\train\\captions\\P02394.txt\n", + " P02395.jpg P02053.jpg sixray_500\\train\\captions\\P02395.txt\n", + " P02396.jpg P02414.jpg sixray_500\\train\\captions\\P02396.txt\n", + " P02397.jpg P02450.jpg sixray_500\\train\\captions\\P02397.txt\n", + " P02401.jpg P02053.jpg sixray_500\\train\\captions\\P02401.txt\n", + " P02405.jpg P02053.jpg sixray_500\\train\\captions\\P02405.txt\n", + " P02406.jpg P02414.jpg sixray_500\\train\\captions\\P02406.txt\n", + " P02408.jpg P02414.jpg sixray_500\\train\\captions\\P02408.txt\n", + " P02409.jpg P02450.jpg sixray_500\\train\\captions\\P02409.txt\n", + " P02412.jpg P02414.jpg sixray_500\\train\\captions\\P02412.txt\n", + " P02415.jpg P02053.jpg sixray_500\\train\\captions\\P02415.txt\n", + " P02417.jpg P02414.jpg sixray_500\\train\\captions\\P02417.txt\n", + " P02422.jpg P02053.jpg sixray_500\\train\\captions\\P02422.txt\n", + " P02424.jpg P02053.jpg sixray_500\\train\\captions\\P02424.txt\n", + " P02425.jpg P02414.jpg sixray_500\\train\\captions\\P02425.txt\n", + " P02427.jpg P02053.jpg sixray_500\\train\\captions\\P02427.txt\n", + " P02428.jpg P02450.jpg sixray_500\\train\\captions\\P02428.txt\n", + " P02430.jpg P02053.jpg sixray_500\\train\\captions\\P02430.txt\n", + " P02432.jpg P02414.jpg sixray_500\\train\\captions\\P02432.txt\n", + " P02439.jpg P02053.jpg sixray_500\\train\\captions\\P02439.txt\n", + " P02442.jpg P02053.jpg sixray_500\\train\\captions\\P02442.txt\n", + " P02446.jpg P02053.jpg sixray_500\\train\\captions\\P02446.txt\n", + " P02447.jpg P02450.jpg sixray_500\\train\\captions\\P02447.txt\n", + " P02448.jpg P02450.jpg sixray_500\\train\\captions\\P02448.txt\n", + " P02462.jpg P02697.jpg sixray_500\\train\\captions\\P02462.txt\n", + " P02463.jpg P02697.jpg sixray_500\\train\\captions\\P02463.txt\n", + " P02483.jpg P02871.jpg sixray_500\\train\\captions\\P02483.txt\n", + " P02486.jpg P02871.jpg sixray_500\\train\\captions\\P02486.txt\n", + " P02490.jpg P02871.jpg sixray_500\\train\\captions\\P02490.txt\n", + " P02491.jpg P02697.jpg sixray_500\\train\\captions\\P02491.txt\n", + " P02492.jpg P02871.jpg sixray_500\\train\\captions\\P02492.txt\n", + " P02494.jpg P02871.jpg sixray_500\\train\\captions\\P02494.txt\n", + " P02496.jpg P02414.jpg sixray_500\\train\\captions\\P02496.txt\n", + " P02497.jpg P02697.jpg sixray_500\\train\\captions\\P02497.txt\n", + " P02498.jpg P02871.jpg sixray_500\\train\\captions\\P02498.txt\n", + " P02500.jpg P02414.jpg sixray_500\\train\\captions\\P02500.txt\n", + " P02503.jpg P02692.jpg sixray_500\\train\\captions\\P02503.txt\n", + " P02507.jpg P02871.jpg sixray_500\\train\\captions\\P02507.txt\n", + " P02509.jpg P02871.jpg sixray_500\\train\\captions\\P02509.txt\n", + " P02515.jpg P02414.jpg sixray_500\\train\\captions\\P02515.txt\n", + " P02516.jpg P02414.jpg sixray_500\\train\\captions\\P02516.txt\n", + " P02519.jpg P02414.jpg sixray_500\\train\\captions\\P02519.txt\n", + " P02522.jpg P02053.jpg sixray_500\\train\\captions\\P02522.txt\n", + " P02524.jpg P02053.jpg sixray_500\\train\\captions\\P02524.txt\n", + " P02525.jpg P02414.jpg sixray_500\\train\\captions\\P02525.txt\n", + " P02526.jpg P02692.jpg sixray_500\\train\\captions\\P02526.txt\n", + " P02527.jpg P02871.jpg sixray_500\\train\\captions\\P02527.txt\n", + " P02528.jpg P02414.jpg sixray_500\\train\\captions\\P02528.txt\n", + " P02529.jpg P02871.jpg sixray_500\\train\\captions\\P02529.txt\n", + " P02530.jpg P02871.jpg sixray_500\\train\\captions\\P02530.txt\n", + " P02531.jpg P02414.jpg sixray_500\\train\\captions\\P02531.txt\n", + " P02532.jpg P02414.jpg sixray_500\\train\\captions\\P02532.txt\n", + " P02536.jpg P02414.jpg sixray_500\\train\\captions\\P02536.txt\n", + " P02538.jpg P02414.jpg sixray_500\\train\\captions\\P02538.txt\n", + " P02542.jpg P02871.jpg sixray_500\\train\\captions\\P02542.txt\n", + " P02543.jpg P02692.jpg sixray_500\\train\\captions\\P02543.txt\n", + " P02544.jpg P02476.jpg sixray_500\\train\\captions\\P02544.txt\n", + " P02546.jpg P02414.jpg sixray_500\\train\\captions\\P02546.txt\n", + " P02548.jpg P02692.jpg sixray_500\\train\\captions\\P02548.txt\n", + " P02551.jpg P02692.jpg sixray_500\\train\\captions\\P02551.txt\n", + " P02554.jpg P02692.jpg sixray_500\\train\\captions\\P02554.txt\n", + " P02556.jpg P02414.jpg sixray_500\\train\\captions\\P02556.txt\n", + " P02558.jpg P02481.jpg sixray_500\\train\\captions\\P02558.txt\n", + " P02562.jpg P02414.jpg sixray_500\\train\\captions\\P02562.txt\n", + " P02565.jpg P02692.jpg sixray_500\\train\\captions\\P02565.txt\n", + " P02568.jpg P02414.jpg sixray_500\\train\\captions\\P02568.txt\n", + " P02571.jpg P02414.jpg sixray_500\\train\\captions\\P02571.txt\n", + " P02576.jpg P02692.jpg sixray_500\\train\\captions\\P02576.txt\n", + " P02581.jpg P02414.jpg sixray_500\\train\\captions\\P02581.txt\n", + " P02587.jpg P00005.jpg sixray_500\\train\\captions\\P02587.txt\n", + " P02588.jpg P00005.jpg sixray_500\\train\\captions\\P02588.txt\n", + " P02590.jpg P00006.jpg sixray_500\\train\\captions\\P02590.txt\n", + " P02591.jpg P00008.jpg sixray_500\\train\\captions\\P02591.txt\n", + " P02592.jpg P00008.jpg sixray_500\\train\\captions\\P02592.txt\n", + " P02593.jpg P02414.jpg sixray_500\\train\\captions\\P02593.txt\n", + " P02594.jpg P00008.jpg sixray_500\\train\\captions\\P02594.txt\n", + " P02595.jpg P00008.jpg sixray_500\\train\\captions\\P02595.txt\n", + " P02596.jpg P02871.jpg sixray_500\\train\\captions\\P02596.txt\n", + " P02597.jpg P00008.jpg sixray_500\\train\\captions\\P02597.txt\n", + " P02598.jpg P00991.jpg sixray_500\\train\\captions\\P02598.txt\n", + " P02599.jpg P00008.jpg sixray_500\\train\\captions\\P02599.txt\n", + " P02600.jpg P02414.jpg sixray_500\\train\\captions\\P02600.txt\n", + " P02601.jpg P02697.jpg sixray_500\\train\\captions\\P02601.txt\n", + " P02602.jpg P00991.jpg sixray_500\\train\\captions\\P02602.txt\n", + " P02603.jpg P02871.jpg sixray_500\\train\\captions\\P02603.txt\n", + " P02604.jpg P00991.jpg sixray_500\\train\\captions\\P02604.txt\n", + " P02605.jpg P02697.jpg sixray_500\\train\\captions\\P02605.txt\n", + " P02606.jpg P00008.jpg sixray_500\\train\\captions\\P02606.txt\n", + " P02607.jpg P02414.jpg sixray_500\\train\\captions\\P02607.txt\n", + " P02608.jpg P00008.jpg sixray_500\\train\\captions\\P02608.txt\n", + " P02609.jpg P02697.jpg sixray_500\\train\\captions\\P02609.txt\n", + " P02610.jpg P00991.jpg sixray_500\\train\\captions\\P02610.txt\n", + " P02611.jpg P02414.jpg sixray_500\\train\\captions\\P02611.txt\n", + " P02612.jpg P02871.jpg sixray_500\\train\\captions\\P02612.txt\n", + " P02618.jpg P02697.jpg sixray_500\\train\\captions\\P02618.txt\n", + " P02619.jpg P02697.jpg sixray_500\\train\\captions\\P02619.txt\n", + " P02620.jpg P00008.jpg sixray_500\\train\\captions\\P02620.txt\n", + " P02621.jpg P00991.jpg sixray_500\\train\\captions\\P02621.txt\n", + " P02622.jpg P02871.jpg sixray_500\\train\\captions\\P02622.txt\n", + " P02623.jpg P02414.jpg sixray_500\\train\\captions\\P02623.txt\n", + " P02624.jpg P02871.jpg sixray_500\\train\\captions\\P02624.txt\n", + " P02625.jpg P00991.jpg sixray_500\\train\\captions\\P02625.txt\n", + " P02626.jpg P02414.jpg sixray_500\\train\\captions\\P02626.txt\n", + " P02627.jpg P00008.jpg sixray_500\\train\\captions\\P02627.txt\n", + " P02628.jpg P02697.jpg sixray_500\\train\\captions\\P02628.txt\n", + " P02629.jpg P00008.jpg sixray_500\\train\\captions\\P02629.txt\n", + " P02630.jpg P00991.jpg sixray_500\\train\\captions\\P02630.txt\n", + " P02631.jpg P02697.jpg sixray_500\\train\\captions\\P02631.txt\n", + " P02632.jpg P02414.jpg sixray_500\\train\\captions\\P02632.txt\n", + " P02633.jpg P02692.jpg sixray_500\\train\\captions\\P02633.txt\n", + " P02634.jpg P02414.jpg sixray_500\\train\\captions\\P02634.txt\n", + " P02635.jpg P00008.jpg sixray_500\\train\\captions\\P02635.txt\n", + " P02636.jpg P00991.jpg sixray_500\\train\\captions\\P02636.txt\n", + " P02637.jpg P00991.jpg sixray_500\\train\\captions\\P02637.txt\n", + " P02638.jpg P00008.jpg sixray_500\\train\\captions\\P02638.txt\n", + " P02639.jpg P00008.jpg sixray_500\\train\\captions\\P02639.txt\n", + " P02640.jpg P00008.jpg sixray_500\\train\\captions\\P02640.txt\n", + " P02641.jpg P00008.jpg sixray_500\\train\\captions\\P02641.txt\n", + " P02642.jpg P02697.jpg sixray_500\\train\\captions\\P02642.txt\n", + " P02643.jpg P02697.jpg sixray_500\\train\\captions\\P02643.txt\n", + " P02644.jpg P02697.jpg sixray_500\\train\\captions\\P02644.txt\n", + " P02645.jpg P02697.jpg sixray_500\\train\\captions\\P02645.txt\n", + " P02646.jpg P00008.jpg sixray_500\\train\\captions\\P02646.txt\n", + " P02647.jpg P00008.jpg sixray_500\\train\\captions\\P02647.txt\n", + " P02648.jpg P00008.jpg sixray_500\\train\\captions\\P02648.txt\n", + " P02649.jpg P02697.jpg sixray_500\\train\\captions\\P02649.txt\n", + " P02650.jpg P02777.jpg sixray_500\\train\\captions\\P02650.txt\n", + " P02651.jpg P02697.jpg sixray_500\\train\\captions\\P02651.txt\n", + " P02652.jpg P02697.jpg sixray_500\\train\\captions\\P02652.txt\n", + " P02653.jpg P02697.jpg sixray_500\\train\\captions\\P02653.txt\n", + " P02654.jpg P02777.jpg sixray_500\\train\\captions\\P02654.txt\n", + " P02655.jpg P02777.jpg sixray_500\\train\\captions\\P02655.txt\n", + " P02656.jpg P02697.jpg sixray_500\\train\\captions\\P02656.txt\n", + " P02657.jpg P02414.jpg sixray_500\\train\\captions\\P02657.txt\n", + " P02659.jpg P02777.jpg sixray_500\\train\\captions\\P02659.txt\n", + " P02662.jpg P00991.jpg sixray_500\\train\\captions\\P02662.txt\n", + " P02664.jpg P02777.jpg sixray_500\\train\\captions\\P02664.txt\n", + " P02666.jpg P00991.jpg sixray_500\\train\\captions\\P02666.txt\n", + " P02667.jpg P02697.jpg sixray_500\\train\\captions\\P02667.txt\n", + " P02669.jpg P02414.jpg sixray_500\\train\\captions\\P02669.txt\n", + " P02670.jpg P00008.jpg sixray_500\\train\\captions\\P02670.txt\n", + " P02671.jpg P00991.jpg sixray_500\\train\\captions\\P02671.txt\n", + " P02672.jpg P02692.jpg sixray_500\\train\\captions\\P02672.txt\n", + " P02673.jpg P00991.jpg sixray_500\\train\\captions\\P02673.txt\n", + " P02675.jpg P02414.jpg sixray_500\\train\\captions\\P02675.txt\n", + " P02676.jpg P02697.jpg sixray_500\\train\\captions\\P02676.txt\n", + " P02677.jpg P02414.jpg sixray_500\\train\\captions\\P02677.txt\n", + " P02678.jpg P02414.jpg sixray_500\\train\\captions\\P02678.txt\n", + " P02681.jpg P02414.jpg sixray_500\\train\\captions\\P02681.txt\n", + " P02683.jpg P02697.jpg sixray_500\\train\\captions\\P02683.txt\n", + " P02684.jpg P02700.jpg sixray_500\\train\\captions\\P02684.txt\n", + " P02685.jpg P00008.jpg sixray_500\\train\\captions\\P02685.txt\n", + " P02686.jpg P02697.jpg sixray_500\\train\\captions\\P02686.txt\n", + " P02687.jpg P02414.jpg sixray_500\\train\\captions\\P02687.txt\n", + " P02690.jpg P00008.jpg sixray_500\\train\\captions\\P02690.txt\n", + " P02691.jpg P02414.jpg sixray_500\\train\\captions\\P02691.txt\n", + " P02693.jpg P02700.jpg sixray_500\\train\\captions\\P02693.txt\n", + " P02695.jpg P02414.jpg sixray_500\\train\\captions\\P02695.txt\n", + " P02696.jpg P02700.jpg sixray_500\\train\\captions\\P02696.txt\n", + " P02702.jpg P00991.jpg sixray_500\\train\\captions\\P02702.txt\n", + " P02703.jpg P02692.jpg sixray_500\\train\\captions\\P02703.txt\n", + " P02704.jpg P00008.jpg sixray_500\\train\\captions\\P02704.txt\n", + " P02705.jpg P02697.jpg sixray_500\\train\\captions\\P02705.txt\n", + " P02707.jpg P00008.jpg sixray_500\\train\\captions\\P02707.txt\n", + " P02708.jpg P02414.jpg sixray_500\\train\\captions\\P02708.txt\n", + " P02709.jpg P02700.jpg sixray_500\\train\\captions\\P02709.txt\n", + " P02710.jpg P02700.jpg sixray_500\\train\\captions\\P02710.txt\n", + " P02712.jpg P02414.jpg sixray_500\\train\\captions\\P02712.txt\n", + " P02713.jpg P02700.jpg sixray_500\\train\\captions\\P02713.txt\n", + " P02714.jpg P02700.jpg sixray_500\\train\\captions\\P02714.txt\n", + " P02717.jpg P00008.jpg sixray_500\\train\\captions\\P02717.txt\n", + " P02720.jpg P02697.jpg sixray_500\\train\\captions\\P02720.txt\n", + " P02721.jpg P02692.jpg sixray_500\\train\\captions\\P02721.txt\n", + " P02722.jpg P02414.jpg sixray_500\\train\\captions\\P02722.txt\n", + " P02723.jpg P02414.jpg sixray_500\\train\\captions\\P02723.txt\n", + " P02724.jpg P00008.jpg sixray_500\\train\\captions\\P02724.txt\n", + " P02726.jpg P00008.jpg sixray_500\\train\\captions\\P02726.txt\n", + " P02727.jpg P00008.jpg sixray_500\\train\\captions\\P02727.txt\n", + " P02728.jpg P02414.jpg sixray_500\\train\\captions\\P02728.txt\n", + " P02729.jpg P02697.jpg sixray_500\\train\\captions\\P02729.txt\n", + " P02735.jpg P02692.jpg sixray_500\\train\\captions\\P02735.txt\n", + " P02736.jpg P00008.jpg sixray_500\\train\\captions\\P02736.txt\n", + " P02737.jpg P00008.jpg sixray_500\\train\\captions\\P02737.txt\n", + " P02740.jpg P02700.jpg sixray_500\\train\\captions\\P02740.txt\n", + " P02741.jpg P02692.jpg sixray_500\\train\\captions\\P02741.txt\n", + " P02742.jpg P02414.jpg sixray_500\\train\\captions\\P02742.txt\n", + " P02743.jpg P00008.jpg sixray_500\\train\\captions\\P02743.txt\n", + " P02744.jpg P02692.jpg sixray_500\\train\\captions\\P02744.txt\n", + " P02745.jpg P00008.jpg sixray_500\\train\\captions\\P02745.txt\n", + " P02747.jpg P02414.jpg sixray_500\\train\\captions\\P02747.txt\n", + " P02752.jpg P02697.jpg sixray_500\\train\\captions\\P02752.txt\n", + " P02755.jpg P00008.jpg sixray_500\\train\\captions\\P02755.txt\n", + " P02759.jpg P02871.jpg sixray_500\\train\\captions\\P02759.txt\n", + " P02760.jpg P02871.jpg sixray_500\\train\\captions\\P02760.txt\n", + " P02761.jpg P02871.jpg sixray_500\\train\\captions\\P02761.txt\n", + " P02763.jpg P02692.jpg sixray_500\\train\\captions\\P02763.txt\n", + " P02765.jpg P02965.jpg sixray_500\\train\\captions\\P02765.txt\n", + " P02766.jpg P00008.jpg sixray_500\\train\\captions\\P02766.txt\n", + " P02769.jpg P00008.jpg sixray_500\\train\\captions\\P02769.txt\n", + " P02774.jpg P02697.jpg sixray_500\\train\\captions\\P02774.txt\n", + " P02775.jpg P00008.jpg sixray_500\\train\\captions\\P02775.txt\n", + " P02776.jpg P02965.jpg sixray_500\\train\\captions\\P02776.txt\n", + " P02778.jpg P02697.jpg sixray_500\\train\\captions\\P02778.txt\n", + " P02780.jpg P00008.jpg sixray_500\\train\\captions\\P02780.txt\n", + " P02782.jpg P02965.jpg sixray_500\\train\\captions\\P02782.txt\n", + " P02784.jpg P00991.jpg sixray_500\\train\\captions\\P02784.txt\n", + " P02785.jpg P02965.jpg sixray_500\\train\\captions\\P02785.txt\n", + " P02786.jpg P02829.jpg sixray_500\\train\\captions\\P02786.txt\n", + " P02787.jpg P02829.jpg sixray_500\\train\\captions\\P02787.txt\n", + " P02788.jpg P02697.jpg sixray_500\\train\\captions\\P02788.txt\n", + " P02791.jpg P02697.jpg sixray_500\\train\\captions\\P02791.txt\n", + " P02792.jpg P00991.jpg sixray_500\\train\\captions\\P02792.txt\n", + " P02793.jpg P02697.jpg sixray_500\\train\\captions\\P02793.txt\n", + " P02795.jpg P02697.jpg sixray_500\\train\\captions\\P02795.txt\n", + " P02798.jpg P02829.jpg sixray_500\\train\\captions\\P02798.txt\n", + " P02799.jpg P00991.jpg sixray_500\\train\\captions\\P02799.txt\n", + " P02801.jpg P02965.jpg sixray_500\\train\\captions\\P02801.txt\n", + " P02803.jpg P00991.jpg sixray_500\\train\\captions\\P02803.txt\n", + " P02805.jpg P02965.jpg sixray_500\\train\\captions\\P02805.txt\n", + " P02808.jpg P02697.jpg sixray_500\\train\\captions\\P02808.txt\n", + " P02810.jpg P02965.jpg sixray_500\\train\\captions\\P02810.txt\n", + " P02812.jpg P00991.jpg sixray_500\\train\\captions\\P02812.txt\n", + " P02815.jpg P00312.jpg sixray_500\\train\\captions\\P02815.txt\n", + " P02817.jpg P02697.jpg sixray_500\\train\\captions\\P02817.txt\n", + " P02818.jpg P02697.jpg sixray_500\\train\\captions\\P02818.txt\n", + " P02819.jpg P02697.jpg sixray_500\\train\\captions\\P02819.txt\n", + " P02826.jpg P00312.jpg sixray_500\\train\\captions\\P02826.txt\n", + " P02828.jpg P00312.jpg sixray_500\\train\\captions\\P02828.txt\n", + " P02832.jpg P02829.jpg sixray_500\\train\\captions\\P02832.txt\n", + " P02833.jpg P02829.jpg sixray_500\\train\\captions\\P02833.txt\n", + " P02834.jpg P02829.jpg sixray_500\\train\\captions\\P02834.txt\n", + " P02835.jpg P00991.jpg sixray_500\\train\\captions\\P02835.txt\n", + " P02836.jpg P00312.jpg sixray_500\\train\\captions\\P02836.txt\n", + " P02837.jpg P02851.jpg sixray_500\\train\\captions\\P02837.txt\n", + " P02838.jpg P00991.jpg sixray_500\\train\\captions\\P02838.txt\n", + " P02839.jpg P02851.jpg sixray_500\\train\\captions\\P02839.txt\n", + " P02840.jpg P00991.jpg sixray_500\\train\\captions\\P02840.txt\n", + " P02841.jpg P03152.jpg sixray_500\\train\\captions\\P02841.txt\n", + " P02842.jpg P00312.jpg sixray_500\\train\\captions\\P02842.txt\n", + " P02845.jpg P00312.jpg sixray_500\\train\\captions\\P02845.txt\n", + " P02846.jpg P00312.jpg sixray_500\\train\\captions\\P02846.txt\n", + " P02847.jpg P02851.jpg sixray_500\\train\\captions\\P02847.txt\n", + " P02848.jpg P02851.jpg sixray_500\\train\\captions\\P02848.txt\n", + " P02849.jpg P02851.jpg sixray_500\\train\\captions\\P02849.txt\n", + " P02850.jpg P02851.jpg sixray_500\\train\\captions\\P02850.txt\n", + " P02855.jpg P00991.jpg sixray_500\\train\\captions\\P02855.txt\n", + " P02856.jpg P02851.jpg sixray_500\\train\\captions\\P02856.txt\n", + " P02857.jpg P00991.jpg sixray_500\\train\\captions\\P02857.txt\n", + " P02858.jpg P00991.jpg sixray_500\\train\\captions\\P02858.txt\n", + " P02859.jpg P00187.jpg sixray_500\\train\\captions\\P02859.txt\n", + " P02860.jpg P02851.jpg sixray_500\\train\\captions\\P02860.txt\n", + " P02862.jpg P02851.jpg sixray_500\\train\\captions\\P02862.txt\n", + " P02865.jpg P02851.jpg sixray_500\\train\\captions\\P02865.txt\n", + " P02866.jpg P00991.jpg sixray_500\\train\\captions\\P02866.txt\n", + " P02869.jpg P00991.jpg sixray_500\\train\\captions\\P02869.txt\n", + " P02870.jpg P00187.jpg sixray_500\\train\\captions\\P02870.txt\n", + " P02873.jpg P00991.jpg sixray_500\\train\\captions\\P02873.txt\n", + " P02874.jpg P00991.jpg sixray_500\\train\\captions\\P02874.txt\n", + " P02876.jpg P00991.jpg sixray_500\\train\\captions\\P02876.txt\n", + " P02878.jpg P00991.jpg sixray_500\\train\\captions\\P02878.txt\n", + " P02880.jpg P00991.jpg sixray_500\\train\\captions\\P02880.txt\n", + " P02881.jpg P00991.jpg sixray_500\\train\\captions\\P02881.txt\n", + " P02883.jpg P00991.jpg sixray_500\\train\\captions\\P02883.txt\n", + " P02884.jpg P00187.jpg sixray_500\\train\\captions\\P02884.txt\n", + " P02886.jpg P00991.jpg sixray_500\\train\\captions\\P02886.txt\n", + " P02888.jpg P00991.jpg sixray_500\\train\\captions\\P02888.txt\n", + " P02889.jpg P00991.jpg sixray_500\\train\\captions\\P02889.txt\n", + " P02890.jpg P00991.jpg sixray_500\\train\\captions\\P02890.txt\n", + " P02891.jpg P00991.jpg sixray_500\\train\\captions\\P02891.txt\n", + " P02895.jpg P00991.jpg sixray_500\\train\\captions\\P02895.txt\n", + " P02896.jpg P00991.jpg sixray_500\\train\\captions\\P02896.txt\n", + " P02898.jpg P00991.jpg sixray_500\\train\\captions\\P02898.txt\n", + " P02901.jpg P00991.jpg sixray_500\\train\\captions\\P02901.txt\n", + " P02904.jpg P00991.jpg sixray_500\\train\\captions\\P02904.txt\n", + " P02905.jpg P00991.jpg sixray_500\\train\\captions\\P02905.txt\n", + " P02907.jpg P00991.jpg sixray_500\\train\\captions\\P02907.txt\n", + " P02908.jpg P00991.jpg sixray_500\\train\\captions\\P02908.txt\n", + " P02909.jpg P00991.jpg sixray_500\\train\\captions\\P02909.txt\n", + " P02910.jpg P00991.jpg sixray_500\\train\\captions\\P02910.txt\n", + " P02912.jpg P00991.jpg sixray_500\\train\\captions\\P02912.txt\n", + " P02913.jpg P00991.jpg sixray_500\\train\\captions\\P02913.txt\n", + " P02914.jpg P00991.jpg sixray_500\\train\\captions\\P02914.txt\n", + " P02916.jpg P00991.jpg sixray_500\\train\\captions\\P02916.txt\n", + " P02917.jpg P00991.jpg sixray_500\\train\\captions\\P02917.txt\n", + " P02919.jpg P00991.jpg sixray_500\\train\\captions\\P02919.txt\n", + " P02921.jpg P00991.jpg sixray_500\\train\\captions\\P02921.txt\n", + " P02923.jpg P03152.jpg sixray_500\\train\\captions\\P02923.txt\n", + " P02925.jpg P00991.jpg sixray_500\\train\\captions\\P02925.txt\n", + " P02926.jpg P00991.jpg sixray_500\\train\\captions\\P02926.txt\n", + " P02928.jpg P00349.jpg sixray_500\\train\\captions\\P02928.txt\n", + " P02929.jpg P00991.jpg sixray_500\\train\\captions\\P02929.txt\n", + " P02930.jpg P00349.jpg sixray_500\\train\\captions\\P02930.txt\n", + " P02931.jpg P00991.jpg sixray_500\\train\\captions\\P02931.txt\n", + " P02933.jpg P00991.jpg sixray_500\\train\\captions\\P02933.txt\n", + " P02934.jpg P00187.jpg sixray_500\\train\\captions\\P02934.txt\n", + " P02937.jpg P00187.jpg sixray_500\\train\\captions\\P02937.txt\n", + " P02939.jpg P00187.jpg sixray_500\\train\\captions\\P02939.txt\n", + " P02940.jpg P00991.jpg sixray_500\\train\\captions\\P02940.txt\n", + " P02941.jpg P00187.jpg sixray_500\\train\\captions\\P02941.txt\n", + " P02942.jpg P00187.jpg sixray_500\\train\\captions\\P02942.txt\n", + " P02943.jpg P00187.jpg sixray_500\\train\\captions\\P02943.txt\n", + " P02944.jpg P00991.jpg sixray_500\\train\\captions\\P02944.txt\n", + " P02945.jpg P00187.jpg sixray_500\\train\\captions\\P02945.txt\n", + " P02949.jpg P00991.jpg sixray_500\\train\\captions\\P02949.txt\n", + " P02950.jpg P00991.jpg sixray_500\\train\\captions\\P02950.txt\n", + " P02951.jpg P00187.jpg sixray_500\\train\\captions\\P02951.txt\n", + " P02952.jpg P00991.jpg sixray_500\\train\\captions\\P02952.txt\n", + " P02955.jpg P00349.jpg sixray_500\\train\\captions\\P02955.txt\n", + " P02956.jpg P00991.jpg sixray_500\\train\\captions\\P02956.txt\n", + " P02959.jpg P00312.jpg sixray_500\\train\\captions\\P02959.txt\n", + " P02961.jpg P00187.jpg sixray_500\\train\\captions\\P02961.txt\n", + " P02962.jpg P00312.jpg sixray_500\\train\\captions\\P02962.txt\n", + " P02963.jpg P00991.jpg sixray_500\\train\\captions\\P02963.txt\n", + " P02966.jpg P00187.jpg sixray_500\\train\\captions\\P02966.txt\n", + " P02968.jpg P00991.jpg sixray_500\\train\\captions\\P02968.txt\n", + " P02969.jpg P00991.jpg sixray_500\\train\\captions\\P02969.txt\n", + " P02971.jpg P00312.jpg sixray_500\\train\\captions\\P02971.txt\n", + " P02972.jpg P00991.jpg sixray_500\\train\\captions\\P02972.txt\n", + " P02974.jpg P00187.jpg sixray_500\\train\\captions\\P02974.txt\n", + " P02976.jpg P00312.jpg sixray_500\\train\\captions\\P02976.txt\n", + " P02977.jpg P00991.jpg sixray_500\\train\\captions\\P02977.txt\n", + " P02979.jpg P00991.jpg sixray_500\\train\\captions\\P02979.txt\n", + " P02980.jpg P00187.jpg sixray_500\\train\\captions\\P02980.txt\n", + " P02982.jpg P00187.jpg sixray_500\\train\\captions\\P02982.txt\n", + " P02983.jpg P00991.jpg sixray_500\\train\\captions\\P02983.txt\n", + " P02984.jpg P00187.jpg sixray_500\\train\\captions\\P02984.txt\n", + " P02986.jpg P00312.jpg sixray_500\\train\\captions\\P02986.txt\n", + " P02987.jpg P00312.jpg sixray_500\\train\\captions\\P02987.txt\n", + " P02989.jpg P03152.jpg sixray_500\\train\\captions\\P02989.txt\n", + " P02991.jpg P00991.jpg sixray_500\\train\\captions\\P02991.txt\n", + " P02993.jpg P00312.jpg sixray_500\\train\\captions\\P02993.txt\n", + " P02994.jpg P00991.jpg sixray_500\\train\\captions\\P02994.txt\n", + " P02995.jpg P00991.jpg sixray_500\\train\\captions\\P02995.txt\n", + " P02996.jpg P00991.jpg sixray_500\\train\\captions\\P02996.txt\n", + " P02997.jpg P00187.jpg sixray_500\\train\\captions\\P02997.txt\n", + " P02998.jpg P00991.jpg sixray_500\\train\\captions\\P02998.txt\n", + " P02999.jpg P00312.jpg sixray_500\\train\\captions\\P02999.txt\n", + " P03000.jpg P00187.jpg sixray_500\\train\\captions\\P03000.txt\n", + " P03002.jpg P00991.jpg sixray_500\\train\\captions\\P03002.txt\n", + " P03006.jpg P00312.jpg sixray_500\\train\\captions\\P03006.txt\n", + " P03007.jpg P00991.jpg sixray_500\\train\\captions\\P03007.txt\n", + " P03009.jpg P00187.jpg sixray_500\\train\\captions\\P03009.txt\n", + " P03010.jpg P00991.jpg sixray_500\\train\\captions\\P03010.txt\n", + " P03013.jpg P00991.jpg sixray_500\\train\\captions\\P03013.txt\n", + " P03014.jpg P00991.jpg sixray_500\\train\\captions\\P03014.txt\n", + " P03015.jpg P03152.jpg sixray_500\\train\\captions\\P03015.txt\n", + " P03017.jpg P00991.jpg sixray_500\\train\\captions\\P03017.txt\n", + " P03019.jpg P00312.jpg sixray_500\\train\\captions\\P03019.txt\n", + " P03020.jpg P03152.jpg sixray_500\\train\\captions\\P03020.txt\n", + " P03021.jpg P00312.jpg sixray_500\\train\\captions\\P03021.txt\n", + " P03022.jpg P00312.jpg sixray_500\\train\\captions\\P03022.txt\n", + " P03023.jpg P00312.jpg sixray_500\\train\\captions\\P03023.txt\n", + " P03024.jpg P00312.jpg sixray_500\\train\\captions\\P03024.txt\n", + " P03025.jpg P00187.jpg sixray_500\\train\\captions\\P03025.txt\n", + " P03026.jpg P00312.jpg sixray_500\\train\\captions\\P03026.txt\n", + " P03027.jpg P00312.jpg sixray_500\\train\\captions\\P03027.txt\n", + " P03028.jpg P00187.jpg sixray_500\\train\\captions\\P03028.txt\n", + " P03030.jpg P00312.jpg sixray_500\\train\\captions\\P03030.txt\n", + " P03031.jpg P00991.jpg sixray_500\\train\\captions\\P03031.txt\n", + " P03032.jpg P00187.jpg sixray_500\\train\\captions\\P03032.txt\n", + " P03033.jpg P00991.jpg sixray_500\\train\\captions\\P03033.txt\n", + " P03034.jpg P00312.jpg sixray_500\\train\\captions\\P03034.txt\n", + " P03035.jpg P00991.jpg sixray_500\\train\\captions\\P03035.txt\n", + " P03038.jpg P00312.jpg sixray_500\\train\\captions\\P03038.txt\n", + " P03039.jpg P00991.jpg sixray_500\\train\\captions\\P03039.txt\n", + " P03040.jpg P00312.jpg sixray_500\\train\\captions\\P03040.txt\n", + " P03044.jpg P00312.jpg sixray_500\\train\\captions\\P03044.txt\n", + " P03045.jpg P00312.jpg sixray_500\\train\\captions\\P03045.txt\n", + " P03046.jpg P03152.jpg sixray_500\\train\\captions\\P03046.txt\n", + " P03048.jpg P03152.jpg sixray_500\\train\\captions\\P03048.txt\n", + " P03049.jpg P00187.jpg sixray_500\\train\\captions\\P03049.txt\n", + " P03050.jpg P00187.jpg sixray_500\\train\\captions\\P03050.txt\n", + " P03052.jpg P00187.jpg sixray_500\\train\\captions\\P03052.txt\n", + " P03054.jpg P00312.jpg sixray_500\\train\\captions\\P03054.txt\n", + " P03056.jpg P00312.jpg sixray_500\\train\\captions\\P03056.txt\n", + " P03058.jpg P00187.jpg sixray_500\\train\\captions\\P03058.txt\n", + " P03059.jpg P00187.jpg sixray_500\\train\\captions\\P03059.txt\n", + " P03061.jpg P00312.jpg sixray_500\\train\\captions\\P03061.txt\n", + " P03062.jpg P00187.jpg sixray_500\\train\\captions\\P03062.txt\n", + " P03063.jpg P00187.jpg sixray_500\\train\\captions\\P03063.txt\n", + " P03065.jpg P00349.jpg sixray_500\\train\\captions\\P03065.txt\n", + " P03067.jpg P00187.jpg sixray_500\\train\\captions\\P03067.txt\n", + " P03069.jpg P00187.jpg sixray_500\\train\\captions\\P03069.txt\n", + " P03072.jpg P00187.jpg sixray_500\\train\\captions\\P03072.txt\n", + " P03074.jpg P00187.jpg sixray_500\\train\\captions\\P03074.txt\n", + " P03076.jpg P00187.jpg sixray_500\\train\\captions\\P03076.txt\n", + " P03077.jpg P00349.jpg sixray_500\\train\\captions\\P03077.txt\n", + " P03079.jpg P00187.jpg sixray_500\\train\\captions\\P03079.txt\n", + " P03080.jpg P00213.jpg sixray_500\\train\\captions\\P03080.txt\n", + " P03082.jpg P00187.jpg sixray_500\\train\\captions\\P03082.txt\n", + " P03083.jpg P00349.jpg sixray_500\\train\\captions\\P03083.txt\n", + " P03084.jpg P00187.jpg sixray_500\\train\\captions\\P03084.txt\n", + " P03087.jpg P00187.jpg sixray_500\\train\\captions\\P03087.txt\n", + " P03088.jpg P00349.jpg sixray_500\\train\\captions\\P03088.txt\n", + " P03090.jpg P00187.jpg sixray_500\\train\\captions\\P03090.txt\n", + " P03091.jpg P03098.jpg sixray_500\\train\\captions\\P03091.txt\n", + " P03092.jpg P03098.jpg sixray_500\\train\\captions\\P03092.txt\n", + " P03093.jpg P03098.jpg sixray_500\\train\\captions\\P03093.txt\n", + " P03096.jpg P03098.jpg sixray_500\\train\\captions\\P03096.txt\n", + " P03097.jpg P03098.jpg sixray_500\\train\\captions\\P03097.txt\n", + " P03099.jpg P03098.jpg sixray_500\\train\\captions\\P03099.txt\n", + " P03100.jpg P00349.jpg sixray_500\\train\\captions\\P03100.txt\n", + " P03101.jpg P03098.jpg sixray_500\\train\\captions\\P03101.txt\n", + " P03102.jpg P03098.jpg sixray_500\\train\\captions\\P03102.txt\n", + " P03103.jpg P03098.jpg sixray_500\\train\\captions\\P03103.txt\n", + " P03104.jpg P03098.jpg sixray_500\\train\\captions\\P03104.txt\n", + " P03106.jpg P00349.jpg sixray_500\\train\\captions\\P03106.txt\n", + " P03107.jpg P03098.jpg sixray_500\\train\\captions\\P03107.txt\n", + " P03108.jpg P03098.jpg sixray_500\\train\\captions\\P03108.txt\n", + " P03109.jpg P03098.jpg sixray_500\\train\\captions\\P03109.txt\n", + " P03110.jpg P03098.jpg sixray_500\\train\\captions\\P03110.txt\n", + " P03112.jpg P00349.jpg sixray_500\\train\\captions\\P03112.txt\n", + " P03113.jpg P03098.jpg sixray_500\\train\\captions\\P03113.txt\n", + " P03114.jpg P00349.jpg sixray_500\\train\\captions\\P03114.txt\n", + " P03116.jpg P03098.jpg sixray_500\\train\\captions\\P03116.txt\n", + " P03117.jpg P03098.jpg sixray_500\\train\\captions\\P03117.txt\n", + " P03119.jpg P00349.jpg sixray_500\\train\\captions\\P03119.txt\n", + " P03120.jpg P03098.jpg sixray_500\\train\\captions\\P03120.txt\n", + " P03122.jpg P03098.jpg sixray_500\\train\\captions\\P03122.txt\n", + " P03123.jpg P00349.jpg sixray_500\\train\\captions\\P03123.txt\n", + " P03125.jpg P03098.jpg sixray_500\\train\\captions\\P03125.txt\n", + " P03126.jpg P00349.jpg sixray_500\\train\\captions\\P03126.txt\n", + " P03127.jpg P00187.jpg sixray_500\\train\\captions\\P03127.txt\n", + " P03128.jpg P00349.jpg sixray_500\\train\\captions\\P03128.txt\n", + " P03129.jpg P00349.jpg sixray_500\\train\\captions\\P03129.txt\n", + " P03130.jpg P00349.jpg sixray_500\\train\\captions\\P03130.txt\n", + " P03131.jpg P00349.jpg sixray_500\\train\\captions\\P03131.txt\n", + " P03132.jpg P00187.jpg sixray_500\\train\\captions\\P03132.txt\n", + " P03134.jpg P00349.jpg sixray_500\\train\\captions\\P03134.txt\n", + " P03135.jpg P00187.jpg sixray_500\\train\\captions\\P03135.txt\n", + " P03136.jpg P00187.jpg sixray_500\\train\\captions\\P03136.txt\n", + " P03137.jpg P00187.jpg sixray_500\\train\\captions\\P03137.txt\n", + " P03138.jpg P00349.jpg sixray_500\\train\\captions\\P03138.txt\n", + " P03139.jpg P00187.jpg sixray_500\\train\\captions\\P03139.txt\n", + " P03140.jpg P00349.jpg sixray_500\\train\\captions\\P03140.txt\n", + " P03141.jpg P00187.jpg sixray_500\\train\\captions\\P03141.txt\n", + " P03142.jpg P00349.jpg sixray_500\\train\\captions\\P03142.txt\n", + " P03143.jpg P00187.jpg sixray_500\\train\\captions\\P03143.txt\n", + " P03144.jpg P00187.jpg sixray_500\\train\\captions\\P03144.txt\n", + " P03146.jpg P00187.jpg sixray_500\\train\\captions\\P03146.txt\n", + " P03148.jpg P00349.jpg sixray_500\\train\\captions\\P03148.txt\n", + " P03151.jpg P00349.jpg sixray_500\\train\\captions\\P03151.txt\n", + " P03153.jpg P02484.jpg sixray_500\\train\\captions\\P03153.txt\n", + " P03154.jpg P00187.jpg sixray_500\\train\\captions\\P03154.txt\n", + " P03155.jpg P00187.jpg sixray_500\\train\\captions\\P03155.txt\n", + " P03156.jpg P00187.jpg sixray_500\\train\\captions\\P03156.txt\n", + " P03157.jpg P00187.jpg sixray_500\\train\\captions\\P03157.txt\n", + " P03158.jpg P00312.jpg sixray_500\\train\\captions\\P03158.txt\n", + " P03159.jpg P03163.jpg sixray_500\\train\\captions\\P03159.txt\n", + " P03160.jpg P00187.jpg sixray_500\\train\\captions\\P03160.txt\n", + " P03161.jpg P02665.jpg sixray_500\\train\\captions\\P03161.txt\n", + " P03162.jpg P03163.jpg sixray_500\\train\\captions\\P03162.txt\n", + " P03165.jpg P00187.jpg sixray_500\\train\\captions\\P03165.txt\n", + " P03166.jpg P00187.jpg sixray_500\\train\\captions\\P03166.txt\n", + " P03167.jpg P00187.jpg sixray_500\\train\\captions\\P03167.txt\n", + " P03168.jpg P03163.jpg sixray_500\\train\\captions\\P03168.txt\n", + " P03170.jpg P00187.jpg sixray_500\\train\\captions\\P03170.txt\n", + " P03177.jpg P02435.jpg sixray_500\\train\\captions\\P03177.txt\n", + " P03178.jpg P02435.jpg sixray_500\\train\\captions\\P03178.txt\n", + " P03179.jpg P03703.jpg sixray_500\\train\\captions\\P03179.txt\n", + " P03180.jpg P00740.jpg sixray_500\\train\\captions\\P03180.txt\n", + " P03181.jpg P02476.jpg sixray_500\\train\\captions\\P03181.txt\n", + " P03182.jpg P02476.jpg sixray_500\\train\\captions\\P03182.txt\n", + " P03183.jpg P02476.jpg sixray_500\\train\\captions\\P03183.txt\n", + " P03184.jpg P02476.jpg sixray_500\\train\\captions\\P03184.txt\n", + " P03185.jpg P02476.jpg sixray_500\\train\\captions\\P03185.txt\n", + " P03186.jpg P02476.jpg sixray_500\\train\\captions\\P03186.txt\n", + " P03187.jpg P02476.jpg sixray_500\\train\\captions\\P03187.txt\n", + " P03188.jpg P03725.jpg sixray_500\\train\\captions\\P03188.txt\n", + " P03189.jpg P03066.jpg sixray_500\\train\\captions\\P03189.txt\n", + " P03190.jpg P03066.jpg sixray_500\\train\\captions\\P03190.txt\n", + " P03191.jpg P03066.jpg sixray_500\\train\\captions\\P03191.txt\n", + " P03192.jpg P03066.jpg sixray_500\\train\\captions\\P03192.txt\n", + " P03193.jpg P03066.jpg sixray_500\\train\\captions\\P03193.txt\n", + " P03194.jpg P03066.jpg sixray_500\\train\\captions\\P03194.txt\n", + " P03195.jpg P03066.jpg sixray_500\\train\\captions\\P03195.txt\n", + " P03199.jpg P01955.jpg sixray_500\\train\\captions\\P03199.txt\n", + " P03200.jpg P01955.jpg sixray_500\\train\\captions\\P03200.txt\n", + " P03201.jpg P01955.jpg sixray_500\\train\\captions\\P03201.txt\n", + " P03202.jpg P01955.jpg sixray_500\\train\\captions\\P03202.txt\n", + " P03203.jpg P01955.jpg sixray_500\\train\\captions\\P03203.txt\n", + " P03204.jpg P01955.jpg sixray_500\\train\\captions\\P03204.txt\n", + " P03205.jpg P01955.jpg sixray_500\\train\\captions\\P03205.txt\n", + " P03218.jpg P00842.jpg sixray_500\\train\\captions\\P03218.txt\n", + " P03219.jpg P00842.jpg sixray_500\\train\\captions\\P03219.txt\n", + " P03220.jpg P00842.jpg sixray_500\\train\\captions\\P03220.txt\n", + " P03221.jpg P00842.jpg sixray_500\\train\\captions\\P03221.txt\n", + " P03222.jpg P00842.jpg sixray_500\\train\\captions\\P03222.txt\n", + " P03223.jpg P00842.jpg sixray_500\\train\\captions\\P03223.txt\n", + " P03224.jpg P00842.jpg sixray_500\\train\\captions\\P03224.txt\n", + " P03225.jpg P00842.jpg sixray_500\\train\\captions\\P03225.txt\n", + " P03226.jpg P00842.jpg sixray_500\\train\\captions\\P03226.txt\n", + " P03227.jpg P00842.jpg sixray_500\\train\\captions\\P03227.txt\n", + " P03228.jpg P00842.jpg sixray_500\\train\\captions\\P03228.txt\n", + " P03229.jpg P00842.jpg sixray_500\\train\\captions\\P03229.txt\n", + " P03230.jpg P00842.jpg sixray_500\\train\\captions\\P03230.txt\n", + " P03232.jpg P00842.jpg sixray_500\\train\\captions\\P03232.txt\n", + " P03233.jpg P00842.jpg sixray_500\\train\\captions\\P03233.txt\n", + " P03234.jpg P00842.jpg sixray_500\\train\\captions\\P03234.txt\n", + " P03235.jpg P00842.jpg sixray_500\\train\\captions\\P03235.txt\n", + " P03236.jpg P00842.jpg sixray_500\\train\\captions\\P03236.txt\n", + " P03269.jpg P00842.jpg sixray_500\\train\\captions\\P03269.txt\n", + " P03281.jpg P00842.jpg sixray_500\\train\\captions\\P03281.txt\n", + " P03283.jpg P00842.jpg sixray_500\\train\\captions\\P03283.txt\n", + " P03284.jpg P00842.jpg sixray_500\\train\\captions\\P03284.txt\n", + " P03287.jpg P00842.jpg sixray_500\\train\\captions\\P03287.txt\n", + " P03289.jpg P00842.jpg sixray_500\\train\\captions\\P03289.txt\n", + " P03291.jpg P00842.jpg sixray_500\\train\\captions\\P03291.txt\n", + " P03445.jpg P02807.jpg sixray_500\\train\\captions\\P03445.txt\n", + " P03447.jpg P02807.jpg sixray_500\\train\\captions\\P03447.txt\n", + " P03448.jpg P02807.jpg sixray_500\\train\\captions\\P03448.txt\n", + " P03450.jpg P02807.jpg sixray_500\\train\\captions\\P03450.txt\n", + " P03452.jpg P02807.jpg sixray_500\\train\\captions\\P03452.txt\n", + " P03454.jpg P02807.jpg sixray_500\\train\\captions\\P03454.txt\n", + " P03457.jpg P02807.jpg sixray_500\\train\\captions\\P03457.txt\n", + " P03458.jpg P02807.jpg sixray_500\\train\\captions\\P03458.txt\n", + " P03460.jpg P02807.jpg sixray_500\\train\\captions\\P03460.txt\n", + " P03463.jpg P02807.jpg sixray_500\\train\\captions\\P03463.txt\n", + " P03466.jpg P02807.jpg sixray_500\\train\\captions\\P03466.txt\n", + " P03468.jpg P02807.jpg sixray_500\\train\\captions\\P03468.txt\n", + " P03542.jpg P00842.jpg sixray_500\\train\\captions\\P03542.txt\n", + " P03545.jpg P00842.jpg sixray_500\\train\\captions\\P03545.txt\n", + " P03550.jpg P00842.jpg sixray_500\\train\\captions\\P03550.txt\n", + " P03552.jpg P00842.jpg sixray_500\\train\\captions\\P03552.txt\n", + " P03555.jpg P00842.jpg sixray_500\\train\\captions\\P03555.txt\n", + " P03558.jpg P00842.jpg sixray_500\\train\\captions\\P03558.txt\n", + " P03563.jpg P00842.jpg sixray_500\\train\\captions\\P03563.txt\n", + " P03566.jpg P00842.jpg sixray_500\\train\\captions\\P03566.txt\n", + " P03569.jpg P00842.jpg sixray_500\\train\\captions\\P03569.txt\n", + " P03572.jpg P00842.jpg sixray_500\\train\\captions\\P03572.txt\n", + " P03575.jpg P03703.jpg sixray_500\\train\\captions\\P03575.txt\n", + " P03576.jpg P03703.jpg sixray_500\\train\\captions\\P03576.txt\n", + " P03577.jpg P03703.jpg sixray_500\\train\\captions\\P03577.txt\n", + " P03578.jpg P03703.jpg sixray_500\\train\\captions\\P03578.txt\n", + " P03579.jpg P06384.jpg sixray_500\\train\\captions\\P03579.txt\n", + " P03580.jpg P03703.jpg sixray_500\\train\\captions\\P03580.txt\n", + " P03581.jpg P06384.jpg sixray_500\\train\\captions\\P03581.txt\n", + " P03582.jpg P06384.jpg sixray_500\\train\\captions\\P03582.txt\n", + " P03583.jpg P06384.jpg sixray_500\\train\\captions\\P03583.txt\n", + " P03584.jpg P06384.jpg sixray_500\\train\\captions\\P03584.txt\n", + " P03585.jpg P03703.jpg sixray_500\\train\\captions\\P03585.txt\n", + " P03586.jpg P03703.jpg sixray_500\\train\\captions\\P03586.txt\n", + " P03588.jpg P06384.jpg sixray_500\\train\\captions\\P03588.txt\n", + " P03590.jpg P06384.jpg sixray_500\\train\\captions\\P03590.txt\n", + " P03591.jpg P06384.jpg sixray_500\\train\\captions\\P03591.txt\n", + " P03592.jpg P06384.jpg sixray_500\\train\\captions\\P03592.txt\n", + " P03595.jpg P03703.jpg sixray_500\\train\\captions\\P03595.txt\n", + " P03596.jpg P04055.jpg sixray_500\\train\\captions\\P03596.txt\n", + " P03598.jpg P06384.jpg sixray_500\\train\\captions\\P03598.txt\n", + " P03599.jpg P03703.jpg sixray_500\\train\\captions\\P03599.txt\n", + " P03601.jpg P06384.jpg sixray_500\\train\\captions\\P03601.txt\n", + " P03602.jpg P04055.jpg sixray_500\\train\\captions\\P03602.txt\n", + " P03606.jpg P06384.jpg sixray_500\\train\\captions\\P03606.txt\n", + " P03608.jpg P06384.jpg sixray_500\\train\\captions\\P03608.txt\n", + " P03609.jpg P03703.jpg sixray_500\\train\\captions\\P03609.txt\n", + " P03610.jpg P03703.jpg sixray_500\\train\\captions\\P03610.txt\n", + " P03611.jpg P06384.jpg sixray_500\\train\\captions\\P03611.txt\n", + " P03612.jpg P03703.jpg sixray_500\\train\\captions\\P03612.txt\n", + " P03613.jpg P06384.jpg sixray_500\\train\\captions\\P03613.txt\n", + " P03614.jpg P06384.jpg sixray_500\\train\\captions\\P03614.txt\n", + " P03616.jpg P04055.jpg sixray_500\\train\\captions\\P03616.txt\n", + " P03617.jpg P02468.jpg sixray_500\\train\\captions\\P03617.txt\n", + " P03618.jpg P02468.jpg sixray_500\\train\\captions\\P03618.txt\n", + " P03652.jpg P03029.jpg sixray_500\\train\\captions\\P03652.txt\n", + " P03653.jpg P03029.jpg sixray_500\\train\\captions\\P03653.txt\n", + " P03655.jpg P03029.jpg sixray_500\\train\\captions\\P03655.txt\n", + " P03656.jpg P03029.jpg sixray_500\\train\\captions\\P03656.txt\n", + " P03657.jpg P03029.jpg sixray_500\\train\\captions\\P03657.txt\n", + " P03658.jpg P03029.jpg sixray_500\\train\\captions\\P03658.txt\n", + " P03659.jpg P03694.jpg sixray_500\\train\\captions\\P03659.txt\n", + " P03660.jpg P03029.jpg sixray_500\\train\\captions\\P03660.txt\n", + " P03666.jpg P03029.jpg sixray_500\\train\\captions\\P03666.txt\n", + " P03667.jpg P02435.jpg sixray_500\\train\\captions\\P03667.txt\n", + " P03668.jpg P03694.jpg sixray_500\\train\\captions\\P03668.txt\n", + " P03670.jpg P02435.jpg sixray_500\\train\\captions\\P03670.txt\n", + " P03671.jpg P03694.jpg sixray_500\\train\\captions\\P03671.txt\n", + " P03672.jpg P03029.jpg sixray_500\\train\\captions\\P03672.txt\n", + " P03673.jpg P03029.jpg sixray_500\\train\\captions\\P03673.txt\n", + " P03674.jpg P03694.jpg sixray_500\\train\\captions\\P03674.txt\n", + " P03675.jpg P03694.jpg sixray_500\\train\\captions\\P03675.txt\n", + " P03678.jpg P03164.jpg sixray_500\\train\\captions\\P03678.txt\n", + " P03679.jpg P00213.jpg sixray_500\\train\\captions\\P03679.txt\n", + " P03680.jpg P03029.jpg sixray_500\\train\\captions\\P03680.txt\n", + " P03681.jpg P03736.jpg sixray_500\\train\\captions\\P03681.txt\n", + " P03682.jpg P03731.jpg sixray_500\\train\\captions\\P03682.txt\n", + " P03683.jpg P03164.jpg sixray_500\\train\\captions\\P03683.txt\n", + " P03684.jpg P03029.jpg sixray_500\\train\\captions\\P03684.txt\n", + " P03685.jpg P03029.jpg sixray_500\\train\\captions\\P03685.txt\n", + " P03686.jpg P02435.jpg sixray_500\\train\\captions\\P03686.txt\n", + " P03687.jpg P03164.jpg sixray_500\\train\\captions\\P03687.txt\n", + " P03688.jpg P03731.jpg sixray_500\\train\\captions\\P03688.txt\n", + " P03689.jpg P03731.jpg sixray_500\\train\\captions\\P03689.txt\n", + " P03690.jpg P02794.jpg sixray_500\\train\\captions\\P03690.txt\n", + " P03691.jpg P03029.jpg sixray_500\\train\\captions\\P03691.txt\n", + " P03692.jpg P03029.jpg sixray_500\\train\\captions\\P03692.txt\n", + " P03693.jpg P03029.jpg sixray_500\\train\\captions\\P03693.txt\n", + " P03695.jpg P02794.jpg sixray_500\\train\\captions\\P03695.txt\n", + " P03696.jpg P03029.jpg sixray_500\\train\\captions\\P03696.txt\n", + " P03700.jpg P02794.jpg sixray_500\\train\\captions\\P03700.txt\n", + " P03701.jpg P03029.jpg sixray_500\\train\\captions\\P03701.txt\n", + " P03702.jpg P02794.jpg sixray_500\\train\\captions\\P03702.txt\n", + " P03709.jpg P02794.jpg sixray_500\\train\\captions\\P03709.txt\n", + " P03714.jpg P03731.jpg sixray_500\\train\\captions\\P03714.txt\n", + " P03716.jpg P02794.jpg sixray_500\\train\\captions\\P03716.txt\n", + " P03717.jpg P03694.jpg sixray_500\\train\\captions\\P03717.txt\n", + " P03718.jpg P02794.jpg sixray_500\\train\\captions\\P03718.txt\n", + " P03720.jpg P03715.jpg sixray_500\\train\\captions\\P03720.txt\n", + " P03721.jpg P03715.jpg sixray_500\\train\\captions\\P03721.txt\n", + " P03724.jpg P03715.jpg sixray_500\\train\\captions\\P03724.txt\n", + " P03726.jpg P03715.jpg sixray_500\\train\\captions\\P03726.txt\n", + " P03727.jpg P03715.jpg sixray_500\\train\\captions\\P03727.txt\n", + " P03728.jpg P03694.jpg sixray_500\\train\\captions\\P03728.txt\n", + " P03729.jpg P03715.jpg sixray_500\\train\\captions\\P03729.txt\n", + " P03730.jpg P03715.jpg sixray_500\\train\\captions\\P03730.txt\n", + " P03732.jpg P03715.jpg sixray_500\\train\\captions\\P03732.txt\n", + " P03733.jpg P03715.jpg sixray_500\\train\\captions\\P03733.txt\n", + " P03734.jpg P03715.jpg sixray_500\\train\\captions\\P03734.txt\n", + " P03735.jpg P03715.jpg sixray_500\\train\\captions\\P03735.txt\n", + " P03737.jpg P03715.jpg sixray_500\\train\\captions\\P03737.txt\n", + " P03739.jpg P03715.jpg sixray_500\\train\\captions\\P03739.txt\n", + " P03741.jpg P03715.jpg sixray_500\\train\\captions\\P03741.txt\n", + " P03742.jpg P03715.jpg sixray_500\\train\\captions\\P03742.txt\n", + " P03744.jpg P03029.jpg sixray_500\\train\\captions\\P03744.txt\n", + " P03746.jpg P03029.jpg sixray_500\\train\\captions\\P03746.txt\n", + " P03747.jpg P03029.jpg sixray_500\\train\\captions\\P03747.txt\n", + " P03748.jpg P03029.jpg sixray_500\\train\\captions\\P03748.txt\n", + " P03749.jpg P03755.jpg sixray_500\\train\\captions\\P03749.txt\n", + " P03750.jpg P03755.jpg sixray_500\\train\\captions\\P03750.txt\n", + " P03752.jpg P03755.jpg sixray_500\\train\\captions\\P03752.txt\n", + " P03753.jpg P03755.jpg sixray_500\\train\\captions\\P03753.txt\n", + " P03754.jpg P02468.jpg sixray_500\\train\\captions\\P03754.txt\n", + " P03758.jpg P04391.jpg sixray_500\\train\\captions\\P03758.txt\n", + " P03771.jpg P04391.jpg sixray_500\\train\\captions\\P03771.txt\n", + " P04050.jpg P04391.jpg sixray_500\\train\\captions\\P04050.txt\n", + " P04051.jpg P04391.jpg sixray_500\\train\\captions\\P04051.txt\n", + " P04052.jpg P04391.jpg sixray_500\\train\\captions\\P04052.txt\n", + " P04053.jpg P04391.jpg sixray_500\\train\\captions\\P04053.txt\n", + " P04054.jpg P04055.jpg sixray_500\\train\\captions\\P04054.txt\n", + " P04115.jpg P04114.jpg sixray_500\\train\\captions\\P04115.txt\n", + " P04116.jpg P04114.jpg sixray_500\\train\\captions\\P04116.txt\n", + " P04227.jpg P02458.jpg sixray_500\\train\\captions\\P04227.txt\n", + " P04233.jpg P04232.jpg sixray_500\\train\\captions\\P04233.txt\n", + " P04234.jpg P04232.jpg sixray_500\\train\\captions\\P04234.txt\n", + " P04256.jpg P04232.jpg sixray_500\\train\\captions\\P04256.txt\n", + " P04280.jpg P04671.jpg sixray_500\\train\\captions\\P04280.txt\n", + " P04373.jpg P04232.jpg sixray_500\\train\\captions\\P04373.txt\n", + " P04386.jpg P04385.jpg sixray_500\\train\\captions\\P04386.txt\n", + " P04387.jpg P04385.jpg sixray_500\\train\\captions\\P04387.txt\n", + " P04389.jpg P04385.jpg sixray_500\\train\\captions\\P04389.txt\n", + " P04392.jpg P05506.jpg sixray_500\\train\\captions\\P04392.txt\n", + " P04412.jpg P05506.jpg sixray_500\\train\\captions\\P04412.txt\n", + " P04415.jpg P04232.jpg sixray_500\\train\\captions\\P04415.txt\n", + " P04428.jpg P05506.jpg sixray_500\\train\\captions\\P04428.txt\n", + " P04978.jpg P05506.jpg sixray_500\\train\\captions\\P04978.txt\n", + " P05019.jpg P05506.jpg sixray_500\\train\\captions\\P05019.txt\n", + " P05081.jpg P05506.jpg sixray_500\\train\\captions\\P05081.txt\n", + " P05093.jpg P04232.jpg sixray_500\\train\\captions\\P05093.txt\n", + " P05249.jpg P04671.jpg sixray_500\\train\\captions\\P05249.txt\n", + " P05464.jpg P04232.jpg sixray_500\\train\\captions\\P05464.txt\n", + " P05654.jpg P02458.jpg sixray_500\\train\\captions\\P05654.txt\n", + " P06072.jpg P02458.jpg sixray_500\\train\\captions\\P06072.txt\n", + " P06209.jpg P07251.jpg sixray_500\\train\\captions\\P06209.txt\n", + " P06378.jpg P06384.jpg sixray_500\\train\\captions\\P06378.txt\n", + " P06379.jpg P06384.jpg sixray_500\\train\\captions\\P06379.txt\n", + " P06380.jpg P06384.jpg sixray_500\\train\\captions\\P06380.txt\n", + " P06381.jpg P06384.jpg sixray_500\\train\\captions\\P06381.txt\n", + " P06382.jpg P06384.jpg sixray_500\\train\\captions\\P06382.txt\n", + " P06383.jpg P06384.jpg sixray_500\\train\\captions\\P06383.txt\n", + " P06385.jpg P06384.jpg sixray_500\\train\\captions\\P06385.txt\n", + " P07101.jpg P07251.jpg sixray_500\\train\\captions\\P07101.txt\n", + " P07102.jpg P07251.jpg sixray_500\\train\\captions\\P07102.txt\n", + " P07208.jpg P05506.jpg sixray_500\\train\\captions\\P07208.txt\n", + " P07250.jpg P04232.jpg sixray_500\\train\\captions\\P07250.txt\n", + " P07252.jpg P04232.jpg sixray_500\\train\\captions\\P07252.txt\n", + " P07253.jpg P04232.jpg sixray_500\\train\\captions\\P07253.txt\n", + " P07254.jpg P04232.jpg sixray_500\\train\\captions\\P07254.txt\n", + " P07255.jpg P04232.jpg sixray_500\\train\\captions\\P07255.txt\n", + " P07256.jpg P04232.jpg sixray_500\\train\\captions\\P07256.txt\n", + " P08160.jpg P07251.jpg sixray_500\\train\\captions\\P08160.txt\n", + " P08830.jpg P08924.jpg sixray_500\\train\\captions\\P08830.txt\n", + " P08835.jpg P08924.jpg sixray_500\\train\\captions\\P08835.txt\n", + " P08836.jpg P08924.jpg sixray_500\\train\\captions\\P08836.txt\n", + " P08837.jpg P08924.jpg sixray_500\\train\\captions\\P08837.txt\n", + " P08845.jpg P08927.jpg sixray_500\\train\\captions\\P08845.txt\n", + " P08853.jpg P08927.jpg sixray_500\\train\\captions\\P08853.txt\n", + " P08856.jpg P08924.jpg sixray_500\\train\\captions\\P08856.txt\n", + " P08858.jpg P08924.jpg sixray_500\\train\\captions\\P08858.txt\n", + " P08861.jpg P08924.jpg sixray_500\\train\\captions\\P08861.txt\n", + " P08862.jpg P08924.jpg sixray_500\\train\\captions\\P08862.txt\n", + " P08864.jpg P02468.jpg sixray_500\\train\\captions\\P08864.txt\n", + " P08872.jpg P02468.jpg sixray_500\\train\\captions\\P08872.txt\n", + " P08873.jpg P08924.jpg sixray_500\\train\\captions\\P08873.txt\n", + " P08876.jpg P08924.jpg sixray_500\\train\\captions\\P08876.txt\n", + " P08881.jpg P08924.jpg sixray_500\\train\\captions\\P08881.txt\n", + " P08886.jpg P02468.jpg sixray_500\\train\\captions\\P08886.txt\n", + " P08887.jpg P08927.jpg sixray_500\\train\\captions\\P08887.txt\n", + " P08888.jpg P08927.jpg sixray_500\\train\\captions\\P08888.txt\n", + " P08896.jpg P08927.jpg sixray_500\\train\\captions\\P08896.txt\n", + " P08904.jpg P08927.jpg sixray_500\\train\\captions\\P08904.txt\n", + " P08905.jpg P02468.jpg sixray_500\\train\\captions\\P08905.txt\n", + " P08907.jpg P08924.jpg sixray_500\\train\\captions\\P08907.txt\n", + " P08909.jpg P08924.jpg sixray_500\\train\\captions\\P08909.txt\n", + " P08912.jpg P08924.jpg sixray_500\\train\\captions\\P08912.txt\n", + " P08913.jpg P08924.jpg sixray_500\\train\\captions\\P08913.txt\n", + " P08915.jpg P02468.jpg sixray_500\\train\\captions\\P08915.txt\n", + " P08923.jpg P02468.jpg sixray_500\\train\\captions\\P08923.txt\n", + "Waiting for Ray...Shutting-down Ray\n", + "Done\n" + ] + } + ], + "source": [ + "ray.init()\n", + "task_counter = 0\n", + "\n", + "caption_root = pathlib.Path('./sixray_500/train/captions')\n", + "\n", + "for src_file, map_file in df2.apply(lambda x:x.values, axis=1):\n", + " print(\"\\r\",src_file, map_file, \" \", end=\"\\b\")\n", + " # print(dbdf[dbdf['file_id'] == map_file]['caption'].values)\n", + " caption_filename = src_file.replace('.jpg', '.txt')\n", + " print(caption_root / caption_filename)\n", + " file_writer.remote(caption_root / caption_filename, dbdf[dbdf['file_id'] == map_file]['caption'].values)\n", + " task_counter += 1\n", + "\n", + "print(\"Waiting for Ray...\", end=\"\")\n", + "ray.wait([], num_returns=task_counter)\n", + "print(\"Shutting-down Ray\")\n", + "ray.shutdown()\n", + "print(\"Done\")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "670cf427", + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "atz", + "language": "python", + "name": "atz" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.8.15" + }, + "widgets": { + "application/vnd.jupyter.widget-state+json": { + "state": {}, + "version_major": 2, + "version_minor": 0 + } + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/data/openai_embedding.db b/data/openai_embedding.db new file mode 100644 index 0000000..bb54aeb Binary files /dev/null and b/data/openai_embedding.db differ diff --git a/data/tip_gai_11805.db b/data/tip_gai_11805.db new file mode 100644 index 0000000..f1ab4a4 Binary files /dev/null and b/data/tip_gai_11805.db differ diff --git a/express_pipeline.sh b/express_pipeline.sh new file mode 100644 index 0000000..ef00dea --- /dev/null +++ b/express_pipeline.sh @@ -0,0 +1,9 @@ +#!/usr/bin/bash +echo "############## TRAINING STAGE -1 ##################" +sh train_stage1.sh +echo "############## TESTING STAGE -1 ##################" +sh test_stage1.sh +echo "############## TRAINING STAGE -2 ##################" +sh train_stage2.sh +echo "############## TESTING STAGE -2 ##################" +sh test_stage2.sh diff --git a/express_test.sh b/express_test.sh new file mode 100644 index 0000000..ba281e0 --- /dev/null +++ b/express_test.sh @@ -0,0 +1,5 @@ +#!/usr/bin/bash +echo "############## TESTING STAGE -1 ##################" +sh test_stage1.sh +echo "############## TESTING STAGE -2 ##################" +sh test_stage2.sh diff --git a/express_train.sh b/express_train.sh new file mode 100644 index 0000000..075db7d --- /dev/null +++ b/express_train.sh @@ -0,0 +1,23 @@ +#!/usr/bin/bash +# REMOTE UBUNTU +# sh express_train.sh data/sixray_500 /data/fasttext/cc.en.300.bin /data/Sixray_easy /data/sixray_caption_db/ +# python data/generate_custom_dataset.py --data_dir data/sixray_2381 --clean --copy_images --dataroot /data/Sixray_easy --fasttext_train_lr 0.05 --fasttext_train_algo cbow --fasttext_train_epoch 50 --emb_dim 1024 --test_data_file data/sixray_500/test/test_captions.txt --sqlite /data/sixray_caption_db/tip_gai_11508.db +# python data/generate_custom_dataset.py --data_dir data/sixray_500 --clean --copy_images --dataroot /data/Sixray_easy --test_data_file data/sixray_500/test/test_captions.txt --sqlite /data/sixray_caption_db/tip_gai_2500.db --openai_emb_db /data/sixray_caption_db/openai_embedding.db + +# LOCAL UBUNTU +# sh express_train.sh "data/sixray_500" /mnt/c/Users/dndlssardar/Downloads/Fasttext/cc.en.300.bin /mnt/c/Users/dndlssardar/OneDrive\ -\ Smiths\ Group/Documents/Projects/Dataset/Sixray_easy/ data/tip_gai_20230525_1036.db + +# python data/generate_custom_dataset.py --data_dir data/sixray_500 --sqlite data/tip_gai_20230525_1036.db --clean --copy_images --dataroot /mnt/c/Users/dndlssardar/OneDrive\ -\ Smiths Group/Documents/Projects/Dataset/Sixray_easy --fasttext_train_lr 0.01 --fasttext_train_algo skipgram --fasttext_train_epoch 50 --emb_dim 300 --test_data_file data/sixray_500/test/test_captions.txt +# Argument 1 must be a path to an sqlite database +export DATA_DIR="$1" # data/sixray_500 +export LM="$2" # /data/fasttext/cc.en.300.bin +export DATA_ROOT="$3" # /data/Sixray_easy +export SQLITE_DB="$4" # /data/sixray_caption_db/tip_gai_20230523_1704.db +echo "--data_dir $DATA_DIR --fasttext_model $LM --dataroot $DATA_ROOT --sqlite $SQLITE_DB" + +echo "############## CREATING DATASET ##################" +# python data/generate_custom_dataset.py --data_dir "$DATA_DIR" --fasttext_model "$LM" --clean --copy_images --dataroot "$DATA_ROOT" --sqlite "$SQLITE_DB" --emb_dim 300 +echo "############## TRAINING STAGE -1 ##################" +sh train_stage1.sh +echo "############## TRAINING STAGE -2 ##################" +sh train_stage2.sh diff --git a/image_generation_report.docx b/image_generation_report.docx new file mode 100644 index 0000000..369696d Binary files /dev/null and b/image_generation_report.docx differ diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000..e2d0566 --- /dev/null +++ b/requirements.txt @@ -0,0 +1 @@ +tensorboard==2.13.0 tensorboardX==2.6 python-dateutil easydict==1.10 pandas==1.5.1 torchfile==0.1.0 express-pascal-voc-tools==0.7.3 chardet cchardet pyyaml langchain openai tiktoken ray fasttext \ No newline at end of file diff --git a/sqlite_datagen.sh b/sqlite_datagen.sh new file mode 100644 index 0000000..2acdf3a --- /dev/null +++ b/sqlite_datagen.sh @@ -0,0 +1,4 @@ +python data/generate_custom_dataset.py --data_dir data/sixray_500 \ +--fasttext_model /data/fasttext/cc.en.300.bin \ +--sqlite /data/sixray_caption_db/tip_gai.db --clean --copy_images \ +--dataroot /data/Sixray_easy/ \ No newline at end of file diff --git a/train_stage1.sh b/train_stage1.sh new file mode 100644 index 0000000..6afe739 --- /dev/null +++ b/train_stage1.sh @@ -0,0 +1,3 @@ +#!/usr/bin/bash +sh code/miscc/cuda_mem.sh +python code/main.py --cfg code/cfg/sixray_500_s1.yml --manualSeed 47 \ No newline at end of file