diff --git a/.github/workflows/autopep8.yml b/.github/workflows/autopep8.yml new file mode 100644 index 00000000..7c891ce9 --- /dev/null +++ b/.github/workflows/autopep8.yml @@ -0,0 +1,19 @@ +# This action works with pull requests and pushes +name: Continuous Integration + +on: + pull_request: + push: + branches: + - master + +jobs: + build: + runs-on: ubuntu-latest + + steps: + - name: autopep8 + id: autopep8 + uses: peter-evans/autopep8@v2 + with: + args: --recursive --in-place --aggressive --max-line-length=200 --ignore=E402 . diff --git a/.github/workflows/documentation.yml b/.github/workflows/documentation.yml new file mode 100644 index 00000000..9d7a763b --- /dev/null +++ b/.github/workflows/documentation.yml @@ -0,0 +1,36 @@ +name: documentation + +on: + pull_request: + branches: + - release/wiki + push: + branches: + - release/wiki + +permissions: + contents: write + +jobs: + docs: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + - uses: actions/setup-python@v3 + with: + python-version: "3.10" + - name: Install dependencies + run: | + pip install -r docs/requirements.txt -r requirements.txt + pip install quadprog==0.1.11 + - name: Sphinx build + run: | + sphinx-build -j auto docs _build + - name: Deploy to GitHub Pages + uses: peaceiris/actions-gh-pages@v3 + if: ${{ github.event_name == 'push' && github.ref == 'refs/heads/release/wiki' }} + with: + publish_branch: gh-pages + github_token: ${{ secrets.GITHUB_TOKEN }} + publish_dir: _build + force_orphan: true diff --git a/.gitignore b/.gitignore index 20116624..e8b4020f 100644 --- a/.gitignore +++ b/.gitignore @@ -2,6 +2,7 @@ *.gif *.pdf data/ +data checkpoints/ *.png *.pt @@ -90,3 +91,8 @@ dmypy.json .pytype/ cython_debug/ wandb +logs +**/_build/ +_autosummary +generated +val_permutations \ No newline at end of file diff --git a/README.md b/README.md index 802536c8..e871c1ae 100644 --- a/README.md +++ b/README.md @@ -4,10 +4,18 @@ # Mammoth - An Extendible (General) Continual Learning Framework for Pytorch - Official repository of [Class-Incremental Continual Learning into the eXtended DER-verse](https://arxiv.org/abs/2201.00766) and [Dark Experience for General Continual Learning: a Strong, Simple Baseline](https://papers.nips.cc/paper/2020/hash/b704ea2c39778f07c617f6b7ce480e9e-Abstract.html) -**NEW** Join our Discord Server for all your Mammoth-related questions → ![Discord Shield](https://discordapp.com/api/guilds/1164956257392799860/widget.png?style=shield) +Mammoth is a framework for continual learning research. It is designed to be modular, easy to extend, and - most importantly - _easy to debug_. +Idelly, all the code necessary to run the experiments is included _in the repository_, without needing to check out other repositories or install additional packages. + +With Mammoth, nothing is set in stone. You can easily add new models, datasets, training strategies, or functionalities. + +Join our Discord Server for all your Mammoth-related questions → ![Discord Shield](https://discordapp.com/api/guilds/1164956257392799860/widget.png?style=shield) + +## **NEW**: WIKI + +We have created a [WIKI](https://aimagelab.github.io/mammoth/)! Check it out for more information on how to use Mammoth.

Sequential MNIST @@ -20,43 +28,67 @@ Official repository of [Class-Incremental Continual Learning into the eXtended D ## Setup -+ Use `./utils/main.py` to run experiments. -+ Use argument `--load_best_args` to use the best hyperparameters from the paper. -+ New models can be added to the `models/` folder. -+ New datasets can be added to the `datasets/` folder. +- Use `./utils/main.py` to run experiments. +- Use argument `--load_best_args` to use the best hyperparameters from the paper. +- New models can be added to the `models/` folder. +- New datasets can be added to the `datasets/` folder. ## Models -+ eXtended-DER (X-DER) -+ Dark Experience Replay (DER) -+ Dark Experience Replay++ (DER++) -+ Learning a Unified Classifier Incrementally via Rebalancing (LUCIR) -+ Greedy Sampler and Dumb Learner (GDumb) -+ Bias Correction (BiC) -+ Regular Polytope Classifier (RPC) -+ Gradient Episodic Memory (GEM) -+ A-GEM -+ A-GEM with Reservoir (A-GEM-R) -+ Experience Replay (ER) -+ Meta-Experience Replay (MER) -+ Function Distance Regularization (FDR) -+ Greedy gradient-based Sample Selection (GSS) -+ Hindsight Anchor Learning (HAL) -+ Incremental Classifier and Representation Learning (iCaRL) -+ online Elastic Weight Consolidation (oEWC) -+ Synaptic Intelligence (SI) -+ Learning without Forgetting (LwF) -+ Progressive Neural Networks (PNN) +- Efficient Lifelong Learning with A-GEM (A-GEM, A-GEM-R - A-GEM with reservoir buffer): `agem`, `agem_r` +- Bias Correction (BiC): `bic`. +- Continual Contrastive Interpolation Consistency (CCIC) - _Requires_ `pip install kornia`: `ccic`. +- CODA-Prompt: COntinual Decomposed Attention-based Prompting for Rehearsal-Free Continual Learning (CODA-Prompt) - _Requires_ `pip install timm==0.9.8`: `coda-prompt`. +- Dark Experience Replay (DER): `der`. +- Dark Experience Replay++ (DER++): `derpp`. +- DualPrompt: Complementary Prompting for Rehearsal-free Continual Learning (DualPrompt) - _Requires_ `pip install timm==0.9.8`: `dualprompt`. +- Experience Replay (ER): `er`. +- online Elastic Weight Consolidation (oEWC): `ewc_on`. +- Function Distance Regularization (FDR): `fdr`. +- Greedy Sampler and Dumb Learner (GDumb): `gdumb`. +- Gradient Episodic Memory (GEM) - _Unavailable on windows_: `gem`. +- Greedy gradient-based Sample Selection (GSS): `gss`. +- Hindsight Anchor Learning (HAL): `hal`. +- Incremental Classifier and Representation Learning (iCaRL): `icarl`. +- JointGCL: `joint_gcl` (only for General Continual). +- Learning to Prompt (L2P) - _Requires_ `pip install timm==0.9.8`: `l2p`. +- LiDER (on DER++, iCaRL, GDumb, and ER-ACE): `derpp_lider`, `icarl_lider`, `gdumb_lider`, `er_ace_lider`. +- Learning a Unified Classifier Incrementally via Rebalancing (LUCIR): `lucir`. +- Learning without Forgetting (LwF): `lwf`. +- Meta-Experience Replay (MER): `mer`. +- Progressive Neural Networks (PNN): `pnn`. +- Regular Polytope Classifier (RPC): `rpc`. +- Synaptic Intelligence (SI): `si`. +- SLCA: Slow Learner with Classifier Alignment for Continual Learning on a Pre-trained Model (SLCA) - _Requires_ `pip install timm==0.9.8`: `slca`. +- Transfer without Forgetting (TwF): `twf`. +- eXtended-DER (X-DER): `xder` (full version), `xder_ce` (X-DER with CE), `xder_rpc` (X-DER with RPC). ## Datasets -+ Sequential MNIST (*Class-Il / Task-IL*) -+ Sequential CIFAR-10 (*Class-Il / Task-IL*) -+ Sequential Tiny ImageNet (*Class-Il / Task-IL*) -+ Sequential CIFAR-100 (*Class-Il / Task-IL*) -+ Permuted MNIST (*Domain-IL*) -+ Rotated MNIST (*Domain-IL*) -+ MNIST-360 (*General Continual Learning*) +**NOTE**: Datasets are automatically downloaded in the `data/`. + +- This can be changes by changing the `base_path` function in `utils/conf.py`. +- The `data/` folder is not tracked by git and is craeted automatically if missing. + +- Sequential MNIST (_Class-Il / Task-IL_): `seq-mnist`. +- Sequential CIFAR-10 (_Class-Il / Task-IL_): `seq-cifar10`. +- Sequential Tiny ImageNet (_Class-Il / Task-IL_): `seq-tinyimg`. +- Sequential Tiny ImageNet resized 32x32 (_Class-Il / Task-IL_): `seq-tinyimg-r`. +- Sequential CIFAR-100 (_Class-Il / Task-IL_): `seq-cifar100`. +- Sequential CIFAR-100 resized 224x224 (ViT version) (_Class-Il / Task-IL_): `seq-cifar100-224`. +- Sequential CIFAR-100 resized 224x224 (ResNet50 version) (_Class-Il / Task-IL_): `seq-cifar100-224-rs`. +- Permuted MNIST (_Domain-IL_): `perm-mnist`. +- Rotated MNIST (_Domain-IL_): `rot-mnist`. +- MNIST-360 (_General Continual Learning_): `mnist-360`. +- Sequential CUB-200 (_Class-Il / Task-IL_): `seq-cub200`. +- Sequential ImageNet-R (_Class-Il / Task-IL_): `seq-imagenet-r`. + +## Pretrained backbones + +- [ResNet18 on cifar100](https://onedrive.live.com/embed?cid=D3924A2D106E0039&resid=D3924A2D106E0039%21108&authkey=AFsCv4BR-bmTUII) +- [ResNet18 on TinyImagenet resized (seq-tinyimg-r)](https://onedrive.live.com/embed?cid=D3924A2D106E0039&resid=D3924A2D106E0039%21106&authkey=AKTxp5LFQJ9z9Ok) +- [ResNet50 on ImageNet (pytorch version)](https://onedrive.live.com/embed?cid=D3924A2D106E0039&resid=D3924A2D106E0039%21107&authkey=ADHhbeg9cUoqJ0M) +- [ResNet18 on SVHN](https://unimore365-my.sharepoint.com/:u:/g/personal/215580_unimore_it/ETdCpRoA891KsAAuibMKWYwBX_3lfw3dMbE4DFEkhOm96A?e=NjdzLN) ## Citing these works @@ -85,39 +117,54 @@ Official repository of [Class-Incremental Continual Learning into the eXtended D ### Our Papers -+ Dark Experience for General Continual Learning: a Strong, Simple Baseline (**NeurIPS 2020**) [[paper](https://arxiv.org/abs/2004.07211)] -+ Rethinking Experience Replay: a Bag of Tricks for Continual Learning (**ICPR 2020**) [[paper](https://arxiv.org/abs/2010.05595)] [[code](https://github.com/hastings24/rethinking_er)] -+ Class-Incremental Continual Learning into the eXtended DER-verse (**TPAMI 2022**) [[paper](https://arxiv.org/abs/2201.00766)] -+ Effects of Auxiliary Knowledge on Continual Learning (**ICPR 2022**) [[paper](https://arxiv.org/abs/2206.02577)] -+ Transfer without Forgetting (**ECCV 2022**) [[paper](https://arxiv.org/abs/2206.00388)][[code](https://github.com/mbosc/twf)] -+ Continual semi-supervised learning through contrastive interpolation consistency (**PRL 2022**) [[paper](https://arxiv.org/abs/2108.06552)][[code](https://github.com/aimagelab/CSSL)] -+ On the Effectiveness of Lipschitz-Driven Rehearsal in Continual Learning (**NeurIPS 2022**) [[paper](https://arxiv.org/abs/2210.06443)] [[code](https://github.com/aimagelab/lider)] +- Dark Experience for General Continual Learning: a Strong, Simple Baseline (**NeurIPS 2020**) [[paper](https://arxiv.org/abs/2004.07211)] +- Rethinking Experience Replay: a Bag of Tricks for Continual Learning (**ICPR 2020**) [[paper](https://arxiv.org/abs/2010.05595)] [[code](https://github.com/hastings24/rethinking_er)] +- Class-Incremental Continual Learning into the eXtended DER-verse (**TPAMI 2022**) [[paper](https://arxiv.org/abs/2201.00766)] +- Effects of Auxiliary Knowledge on Continual Learning (**ICPR 2022**) [[paper](https://arxiv.org/abs/2206.02577)] +- Transfer without Forgetting (**ECCV 2022**) [[paper](https://arxiv.org/abs/2206.00388)][[code](https://github.com/mbosc/twf)] +- Continual semi-supervised learning through contrastive interpolation consistency (**PRL 2022**) [[paper](https://arxiv.org/abs/2108.06552)][[code](https://github.com/aimagelab/CSSL)] +- On the Effectiveness of Lipschitz-Driven Rehearsal in Continual Learning (**NeurIPS 2022**) [[paper](https://arxiv.org/abs/2210.06443)] [[code](https://github.com/aimagelab/lider)] ### Other Awesome CL works using Mammoth -+ New Insights on Reducing Abrupt Representation Change in Online Continual Learning (**ICLR2022**) [[paper](https://openreview.net/pdf?id=N8MaByOzUfb)] [[code](https://github.com/pclucas14/AML)] -+ Learning fast, learning slow: A general continual learning method based on complementary learning system (**ICLR2022**) [[paper](https://openreview.net/pdf?id=uxxFrDwrE7Y)] [[code](https://github.com/NeurAI-Lab/CLS-ER)] -+ Self-supervised models are continual learners (**CVPR2022**) [[paper](https://arxiv.org/abs/2112.04215)] [[code](https://github.com/DonkeyShot21/cassle)] -+ Representational continuity for unsupervised continual learning (**ICLR2022**) [[paper](https://openreview.net/pdf?id=9Hrka5PA7LW)] [[code](https://github.com/divyam3897/UCL)] -+ Continual Learning by Modeling Intra-Class Variation (**TMLR 2023**) [[paper](https://arxiv.org/abs/2210.05398)] [[code](https://github.com/yulonghui/MOCA)] -+ Consistency is the key to further Mitigating Catastrophic Forgetting in Continual Learning (**CoLLAs2022**) [[paper](https://arxiv.org/pdf/2207.04998.pdf)] [[code](https://github.com/NeurAI-Lab/ConsistencyCL)] -+ Continual Normalization: Rethinking Batch Normalization for Online Continual Learning (**ICLR2022**) [[paper](https://arxiv.org/abs/2203.16102)] [[code](https://github.com/phquang/Continual-Normalization)] -+ NISPA: Neuro-Inspired Stability-Plasticity Adaptation for Continual Learning in Sparse Networks (**ICML2022**) [[paper](https://arxiv.org/abs/2206.09117)] -+ Learning from Students: Online Contrastive Distillation Network for General Continual Learning (**IJCAI2022**) [[paper](https://www.ijcai.org/proceedings/2022/0446.pdf)] [[code](https://github.com/lijincm/OCD-Net)] - -## Update Roadmap - -In the near future, we plan to incorporate the following improvements into this master repository: - -+ ER+Tricks (*Rethinking Experience Replay: a Bag of Tricks for Continual Learning*) -+ TwF & Pretraining Baselines (*Transfer without Forgetting*) -+ CCIC & CSSL Baselines (*Continual semi-supervised learning through contrastive interpolation consistency*) -+ LiDER (*On the Effectiveness of Lipschitz-Driven Rehearsal in Continual Learning*) -+ Additional X-DER datasets (*Class-Incremental Continual Learning into the eXtended DER-verse*) - -Pull requests welcome! [Get in touch](mailto:matteo.boschini@unimore.it) - +***Get in touch if we missed your awesome work!*** + +- Decoupling Learning and Remembering: a Bilevel Memory Framework with Knowledge Projection for Task-Incremental Learning (**CVPR2023**) [[paper](https://openaccess.thecvf.com/content/CVPR2023/papers/Sun_Decoupling_Learning_and_Remembering_A_Bilevel_Memory_Framework_With_Knowledge_CVPR_2023_paper.pdf)] [[code](https://github.com/SunWenJu123/BMKP)] +- Regularizing Second-Order Influences for Continual Learning (**CVPR2023**) [[paper](https://openaccess.thecvf.com/content/CVPR2023/papers/Sun_Regularizing_Second-Order_Influences_for_Continual_Learning_CVPR_2023_paper.pdf)] [[code](https://github.com/feifeiobama/InfluenceCL)] +- Sparse Coding in a Dual Memory System for Lifelong Learning (**CVPR2023**) [[paper](https://arxiv.org/pdf/2301.05058.pdf)] [[code](https://github.com/NeurAI-Lab/SCoMMER)] +- A Unified Approach to Domain Incremental Learning with Memory: Theory and Algorithm (**CVPR2023**) [[paper](https://arxiv.org/pdf/2310.12244.pdf)] [[code](https://github.com/Wang-ML-Lab/unified-continual-learning)] +- A Multi-Head Model for Continual Learning via Out-of-Distribution Replay (**CVPR2023**) [[paper](https://arxiv.org/pdf/2208.09734.pdf)] [[code](https://github.com/k-gyuhak/MORE)] +- Preserving Linear Separability in Continual Learning by Backward Feature Projection (**CVPR2023**) [[paper](https://arxiv.org/pdf/2303.14595.pdf)] [[code](https://github.com/rvl-lab-utoronto/BFP)] +- Complementary Calibration: Boosting General Continual Learning With Collaborative Distillation and Self-Supervision (**TIP2023**) [[paper](https://ieeexplore.ieee.org/document/10002397)] [[code](https://github.com/lijincm/CoCa)] +- Continual Learning by Modeling Intra-Class Variation (**TMLR2023**) [[paper](https://arxiv.org/abs/2210.05398)] [[code](https://github.com/yulonghui/MOCA)] +- ConSlide: Asynchronous Hierarchical Interaction Transformer with Breakup-Reorganize Rehearsal for Continual Whole Slide Image Analysis (**ICCV2023**) [[paper](https://openaccess.thecvf.com/content/ICCV2023/papers/Huang_ConSlide_Asynchronous_Hierarchical_Interaction_Transformer_with_Breakup-Reorganize_Rehearsal_for_Continual_ICCV_2023_paper.pdf)] [[code](https://github.com/HKU-MedAI/ConSlide)] +- CBA: Improving Online Continual Learning via Continual Bias Adaptor (**ICCV2023**) [[paper](https://arxiv.org/pdf/2308.06925.pdf)] [[code](https://github.com/wqza/CBA-online-CL)] +- Neuro-Symbolic Continual Learning: Knowledge, Reasoning Shortcuts and Concept Rehearsal (**ICML2023**) [[paper](https://arxiv.org/pdf/2302.01242.pdf)] [[code](https://github.com/ema-marconato/NeSy-CL)] +- Pretrained Language Model in Continual Learning: a Comparative Study (**ICLR2022**) [[paper](https://openreview.net/pdf?id=figzpGMrdD)] [[code](https://github.com/wutong8023/PLM4CL)] +- Representational continuity for unsupervised continual learning (**ICLR2022**) [[paper](https://openreview.net/pdf?id=9Hrka5PA7LW)] [[code](https://github.com/divyam3897/UCL)] +- Continual Normalization: Rethinking Batch Normalization for Online Continual Learning (**ICLR2022**) [[paper](https://arxiv.org/abs/2203.16102)] [[code](https://github.com/phquang/Continual-Normalization)] +- Learning Fast, Learning Slow: A General Continual Learning Method based on Complementary Learning System (**ICLR2022**) [[paper](https://arxiv.org/pdf/2201.12604.pdf)] [[code](https://github.com/NeurAI-Lab/CLS-ER)] +- New Insights on Reducing Abrupt Representation Change in Online Continual Learning (**ICLR2022**) [[paper](https://openreview.net/pdf?id=N8MaByOzUfb)] [[code](https://github.com/pclucas14/AML)] +- Looking Back on Learned Experiences for Class/Task Incremental Learning (**ICLR2022**) [[paper](https://openreview.net/pdf?id=RxplU3vmBx)] [[code](https://github.com/MozhganPourKeshavarz/Cost-Free-Incremental-Learning)] +- Task Agnostic Representation Consolidation: a Self-supervised based Continual Learning Approach (**CoLLAs2022**) [[paper](https://arxiv.org/pdf/2207.06267.pdf)] [[code](https://github.com/NeurAI-Lab/TARC)] +- Consistency is the key to further Mitigating Catastrophic Forgetting in Continual Learning (**CoLLAs2022**) [[paper](https://arxiv.org/pdf/2207.04998.pdf)] [[code](https://github.com/NeurAI-Lab/ConsistencyCL)] +- Self-supervised models are continual learners (**CVPR2022**) [[paper](https://arxiv.org/abs/2112.04215)] [[code](https://github.com/DonkeyShot21/cassle)] +- Learning from Students: Online Contrastive Distillation Network for General Continual Learning (**IJCAI2022**) [[paper](https://www.ijcai.org/proceedings/2022/0446.pdf)] [[code](https://github.com/lijincm/OCD-Net)] + + +### Contributing + +Pull requests welcome! + +Please use `autopep8` with parameters: + +- `--aggressive` +- `--max-line-length=200` +- `--ignore=E402` ## Previous versions -If you're interested in a version of this repo that only includes the code for [Dark Experience for General Continual Learning: a Strong, Simple Baseline](https://papers.nips.cc/paper/2020/hash/b704ea2c39778f07c617f6b7ce480e9e-Abstract.html), please use our [neurips2020 tag](https://github.com/aimagelab/mammoth/releases/tag/neurips2020). +If you're interested in a version of this repo that only includes the original code for [Dark Experience for General Continual Learning: a Strong, Simple Baseline](https://papers.nips.cc/paper/2020/hash/b704ea2c39778f07c617f6b7ce480e9e-Abstract.html) or [Class-Incremental Continual Learning into the eXtended DER-verse](https://arxiv.org/abs/2201.00766>), please use the following tags: + +- [neurips2020](https://github.com/aimagelab/mammoth/releases/tag/neurips2020) for DER (NeurIPS 2020). +- [tpami2023](https://github.com/aimagelab/mammoth/releases/tag/tpami2023) for X-DER (TPAMI 2022). diff --git a/backbone/EfficientNet.py b/backbone/EfficientNet.py index a05f36e0..ddaa3dd5 100644 --- a/backbone/EfficientNet.py +++ b/backbone/EfficientNet.py @@ -155,9 +155,7 @@ def round_filters(filters, global_params): multiplier = global_params.width_coefficient if not multiplier: return filters - # TODO: modify the params names. - # maybe the names (width_divisor,min_width) - # are more suitable than (depth_divisor,min_depth). + divisor = global_params.depth_divisor min_depth = global_params.min_depth filters *= multiplier @@ -246,13 +244,6 @@ def get_same_padding_conv2d(image_size=None): else: return partial(Conv2dStaticSamePadding, image_size=image_size) -# Parameters for the entire model (stem, all blocks, and head) -# GlobalParams = collections.namedtuple('GlobalParams', [ -# 'width_coefficient', 'depth_coefficient', 'image_size', 'dropout_rate', -# 'num_classes', 'batch_norm_momentum', 'batch_norm_epsilon', -# 'drop_connect_rate', 'depth_divisor', 'min_depth', 'include_top']) - - GlobalParams = collections.namedtuple('GlobalParams', [ 'batch_norm_momentum', 'batch_norm_epsilon', 'dropout_rate', 'data_format', 'num_classes', 'width_coefficient', 'depth_coefficient', 'depth_divisor', @@ -261,11 +252,6 @@ def get_same_padding_conv2d(image_size=None): 'blocks_args', 'image_size', 'drop_connect_rate', 'include_top' ]) -# Parameters for an individual model block -# BlockArgs = collections.namedtuple('BlockArgs', [ -# 'num_repeat', 'kernel_size', 'stride', 'expand_ratio', -# 'input_filters', 'output_filters', 'se_ratio', 'id_skip']) - BlockArgs = collections.namedtuple('BlockArgs', [ 'kernel_size', 'num_repeat', 'input_filters', 'output_filters', 'expand_ratio', 'id_skip', 'strides', 'se_ratio', 'conv_type', 'fused_conv', @@ -965,47 +951,17 @@ def _change_in_channels(self, in_channels): out_channels = round_filters(32, self._global_params) self._conv_stem = Conv2d(in_channels, out_channels, kernel_size=3, stride=2, bias=False) - # TODO se va piallare - # def get_params(self, discard_classifier=False) -> torch.Tensor: - # """ - # Returns all the parameters concatenated in a single tensor. - # :return: parameters tensor (??) - # """ - # params = [] - # for pp in list(self.parameters() if not discard_classifier else self._features.parameters()): - # params.append(pp.view(-1)) - # return torch.cat(params) - - # def set_params(self, new_params: torch.Tensor) -> None: - # """ - # Sets the parameters to a given value. - # :param new_params: concatenated values to be set (??) - # """ - # assert new_params.size() == self.get_params().size() - # progress = 0 - # for pp in list(self.parameters()): - # cand_params = new_params[progress: progress + - # torch.tensor(pp.size()).prod()].view(pp.size()) - # progress += torch.tensor(pp.size()).prod() - # pp.data = cand_params - - # def get_grads(self, discard_classifier=False) -> torch.Tensor: - # """ - # Returns all the gradients concatenated in a single tensor. - # :return: gradients tensor (??) - # """ - # grads = [] - # for pp in list(self.parameters() if not discard_classifier else self._features.parameters()): - # grads.append(pp.grad.view(-1)) - # return torch.cat(grads) - def mammoth_efficientnet(nclasses: int, model_name: str, pretrained=False): """ Instantiates a ResNet18 network. - :param nclasses: number of output classes - :param nf: number of filters - :return: ResNet network + + Args: + nclasses: number of output classes + nf: number of filters + + Returns: + ResNet network """ print(model_name) if not pretrained: diff --git a/backbone/MNISTMLP.py b/backbone/MNISTMLP.py index d6fc4bd4..d9e98f67 100644 --- a/backbone/MNISTMLP.py +++ b/backbone/MNISTMLP.py @@ -18,8 +18,10 @@ class MNISTMLP(MammothBackbone): def __init__(self, input_size: int, output_size: int) -> None: """ Instantiates the layers of the network. - :param input_size: the size of the input data - :param output_size: the size of the output + + Args: + input_size: the size of the input data + output_size: the size of the output """ super(MNISTMLP, self).__init__() @@ -48,8 +50,12 @@ def reset_parameters(self) -> None: def forward(self, x: torch.Tensor, returnt='out') -> torch.Tensor: """ Compute a forward pass. - :param x: input tensor (batch_size, input_size) - :return: output tensor (output_size) + + Args: + x: input tensor (batch_size, input_size) + + Returns: + output tensor (output_size) """ x = x.view(-1, num_flat_features(x)) @@ -66,3 +72,8 @@ def forward(self, x: torch.Tensor, returnt='out') -> torch.Tensor: return (out, feats) raise NotImplementedError("Unknown return type") + + def to(self, device): + super().to(device) + self.device = device + return self diff --git a/backbone/MNISTMLP_PNN.py b/backbone/MNISTMLP_PNN.py index 0ca18f35..01f2efcc 100644 --- a/backbone/MNISTMLP_PNN.py +++ b/backbone/MNISTMLP_PNN.py @@ -23,9 +23,11 @@ def __init__(self, input_size: int, output_size: int, old_cols: List[AlphaModule] = None) -> None: """ Instantiates the layers of the network. - :param input_size: the size of the input data - :param output_size: the size of the output - :param old_cols: a list of all the old columns + + Args: + input_size: the size of the input data + output_size: the size of the output + old_cols: a list of all the old columns """ super(MNISTMLP_PNN, self).__init__() @@ -84,8 +86,12 @@ def reset_parameters(self) -> None: def forward(self, x: torch.Tensor, returnt='out') -> torch.Tensor: """ Compute a forward pass. - :param x: input tensor (batch_size, input_size) - :return: output tensor (output_size) + + Args: + x: input tensor (batch_size, input_size) + + Retruns: + output tensor (output_size) """ x = x.view(-1, num_flat_features(x)) if len(self.old_cols) > 0: diff --git a/backbone/ResNet18.py b/backbone/ResNet18.py index 617b7b9e..36537292 100644 --- a/backbone/ResNet18.py +++ b/backbone/ResNet18.py @@ -13,13 +13,17 @@ from backbone import MammothBackbone -def conv3x3(in_planes: int, out_planes: int, stride: int=1) -> F.conv2d: +def conv3x3(in_planes: int, out_planes: int, stride: int = 1) -> F.conv2d: """ Instantiates a 3x3 convolutional layer with no bias. - :param in_planes: number of input channels - :param out_planes: number of output channels - :param stride: stride of the convolution - :return: convolutional layer + + Args: + in_planes: number of input channels + out_planes: number of output channels + stride: stride of the convolution + + Returns: + convolutional layer """ return nn.Conv2d(in_planes, out_planes, kernel_size=3, stride=stride, padding=1, bias=False) @@ -31,13 +35,16 @@ class BasicBlock(nn.Module): """ expansion = 1 - def __init__(self, in_planes: int, planes: int, stride: int=1) -> None: + def __init__(self, in_planes: int, planes: int, stride: int = 1) -> None: """ Instantiates the basic block of the network. - :param in_planes: the number of input channels - :param planes: the number of channels (to be possibly expanded) + + Args: + in_planes: the number of input channels + planes: the number of channels (to be possibly expanded) """ super(BasicBlock, self).__init__() + self.return_prerelu = False self.conv1 = conv3x3(in_planes, planes, stride) self.bn1 = nn.BatchNorm2d(planes) self.conv2 = conv3x3(planes, planes) @@ -54,12 +61,20 @@ def __init__(self, in_planes: int, planes: int, stride: int=1) -> None: def forward(self, x: torch.Tensor) -> torch.Tensor: """ Compute a forward pass. - :param x: input tensor (batch_size, input_size) - :return: output tensor (10) + + Args: + x: input tensor (batch_size, input_size) + + Returns: + output tensor (10) """ out = relu(self.bn1(self.conv1(x))) out = self.bn2(self.conv2(out)) out += self.shortcut(x) + + if self.return_prerelu: + self.prerelu = out.clone() + out = relu(out) return out @@ -73,12 +88,16 @@ def __init__(self, block: BasicBlock, num_blocks: List[int], num_classes: int, nf: int) -> None: """ Instantiates the layers of the network. - :param block: the basic ResNet block - :param num_blocks: the number of blocks per layer - :param num_classes: the number of output classes - :param nf: the number of filters + + Args: + block: the basic ResNet block + num_blocks: the number of blocks per layer + num_classes: the number of output classes + nf: the number of filters """ super(ResNet, self).__init__() + self.return_prerelu = False + self.device = "cpu" self.in_planes = nf self.block = block self.num_classes = num_classes @@ -89,27 +108,31 @@ def __init__(self, block: BasicBlock, num_blocks: List[int], self.layer2 = self._make_layer(block, nf * 2, num_blocks[1], stride=2) self.layer3 = self._make_layer(block, nf * 4, num_blocks[2], stride=2) self.layer4 = self._make_layer(block, nf * 8, num_blocks[3], stride=2) - self.linear = nn.Linear(nf * 8 * block.expansion, num_classes) - - self._features = nn.Sequential(self.conv1, - self.bn1, - nn.ReLU(), - self.layer1, - self.layer2, - self.layer3, - self.layer4 - ) - self.classifier = self.linear + self.classifier = nn.Linear(nf * 8 * block.expansion, num_classes) + + def to(self, device, **kwargs): + self.device = device + return super().to(device, **kwargs) + + def set_return_prerelu(self, enable=True): + self.return_prerelu = enable + for c in self.modules(): + if isinstance(c, self.block): + c.return_prerelu = enable def _make_layer(self, block: BasicBlock, planes: int, num_blocks: int, stride: int) -> nn.Module: """ Instantiates a ResNet layer. - :param block: ResNet basic block - :param planes: channels across the network - :param num_blocks: number of blocks - :param stride: stride - :return: ResNet layer + + Args: + block: ResNet basic block + planes: channels across the network + num_blocks: number of blocks + stride: stride + + Returns: + ResNet layer """ strides = [stride] + [1] * (num_blocks - 1) layers = [] @@ -121,20 +144,28 @@ def _make_layer(self, block: BasicBlock, planes: int, def forward(self, x: torch.Tensor, returnt='out') -> torch.Tensor: """ Compute a forward pass. - :param x: input tensor (batch_size, *input_shape) - :param returnt: return type (a string among 'out', 'features', 'all') - :return: output tensor (output_classes) - """ - out = relu(self.bn1(self.conv1(x))) # 64, 32, 32 + Args: + x: input tensor (batch_size, *input_shape) + returnt: return type (a string among 'out', 'features', 'both', and 'full') + + Returns: + output tensor (output_classes) + """ + out_0 = self.bn1(self.conv1(x)) # 64, 32, 32 + if self.return_prerelu: + out_0_t = out_0.clone() + out_0 = relu(out_0) if hasattr(self, 'maxpool'): - out = self.maxpool(out) - out = self.layer1(out) # -> 64, 32, 32 - out = self.layer2(out) # -> 128, 16, 16 - out = self.layer3(out) # -> 256, 8, 8 - out = self.layer4(out) # -> 512, 4, 4 - out = avg_pool2d(out, out.shape[2]) # -> 512, 1, 1 - feature = out.view(out.size(0), -1) # 512 + out_0 = self.maxpool(out_0) + + out_1 = self.layer1(out_0) # -> 64, 32, 32 + out_2 = self.layer2(out_1) # -> 128, 16, 16 + out_3 = self.layer3(out_2) # -> 256, 8, 8 + out_4 = self.layer4(out_3) # -> 512, 4, 4 + + feature = avg_pool2d(out_4, out_4.shape[2]) # -> 512, 1, 1 + feature = feature.view(feature.size(0), -1) # 512 if returnt == 'features': return feature @@ -143,17 +174,29 @@ def forward(self, x: torch.Tensor, returnt='out') -> torch.Tensor: if returnt == 'out': return out - elif returnt == 'all': + elif returnt == 'both': return (out, feature) + elif returnt == 'full': + return out, [ + out_0 if not self.return_prerelu else out_0_t, + out_1 if not self.return_prerelu else self.layer1[-1].prerelu, + out_2 if not self.return_prerelu else self.layer2[-1].prerelu, + out_3 if not self.return_prerelu else self.layer3[-1].prerelu, + out_4 if not self.return_prerelu else self.layer4[-1].prerelu + ] - raise NotImplementedError("Unknown return type") + raise NotImplementedError("Unknown return type. Must be in ['out', 'features', 'both', 'all'] but got {}".format(returnt)) -def resnet18(nclasses: int, nf: int=64) -> ResNet: +def resnet18(nclasses: int, nf: int = 64) -> ResNet: """ Instantiates a ResNet18 network. - :param nclasses: number of output classes - :param nf: number of filters - :return: ResNet network + + Args: + nclasses: number of output classes + nf: number of filters + + Returns: + ResNet network """ return ResNet(BasicBlock, [2, 2, 2, 2], nclasses, nf) diff --git a/backbone/ResNet18_PNN.py b/backbone/ResNet18_PNN.py index c86d6257..0795299e 100644 --- a/backbone/ResNet18_PNN.py +++ b/backbone/ResNet18_PNN.py @@ -22,8 +22,12 @@ class BasicBlockPnn(BasicBlock): def forward(self, x: torch.Tensor) -> torch.Tensor: """ Compute a forward pass. - :param x: input tensor (batch_size, input_size) - :return: output tensor (10) + + Args: + x: input tensor (batch_size, input_size) + + Returns: + output tensor (10) """ out = relu(self.bn1(self.conv1(x))) out = self.bn2(self.conv2(out)) @@ -41,10 +45,12 @@ def __init__(self, block: BasicBlock, num_blocks: List[int], x_shape: torch.Size = None): """ Instantiates the layers of the network. - :param block: the basic ResNet block - :param num_blocks: the number of blocks per layer - :param num_classes: the number of output classes - :param nf: the number of filters + + Args: + block: the basic ResNet block + num_blocks: the number of blocks per layer + num_classes: the number of output classes + nf: the number of filters """ super(ResNetPNN, self).__init__(block, num_blocks, num_classes, nf) if old_cols is None: @@ -52,7 +58,7 @@ def __init__(self, block: BasicBlock, num_blocks: List[int], self.old_cols = old_cols self.x_shape = x_shape - self.classifier = self.linear + if len(old_cols) == 0: return @@ -96,11 +102,15 @@ def _make_layer(self, block: BasicBlock, planes: int, num_blocks: int, stride: int) -> nn.Module: """ Instantiates a ResNet layer. - :param block: ResNet basic block - :param planes: channels across the network - :param num_blocks: number of blocks - :param stride: stride - :return: ResNet layer + + Args: + block: ResNet basic block + planes: channels across the network + num_blocks: number of blocks + stride: stride + + Returns: + ResNet layer """ strides = [stride] + [1] * (num_blocks - 1) layers = [] @@ -114,8 +124,12 @@ def _make_layer(self, block: BasicBlock, planes: int, def forward(self, x: torch.Tensor, returnt='out') -> torch.Tensor: """ Compute a forward pass. - :param x: input tensor (batch_size, *input_shape) - :return: output tensor (output_classes) + + Args: + x: input tensor (batch_size, *input_shape) + + Returns: + output tensor (output_classes) """ if self.x_shape is None: self.x_shape = x.shape @@ -144,7 +158,7 @@ def forward(self, x: torch.Tensor, returnt='out') -> torch.Tensor: y = self.adaptor4(y) y = y.view(out.size(0), -1) y = self.lateral_classifier(y) - out = self.linear(out) + y + out = self.classifier(out) + y if returnt == 'out': return out @@ -156,9 +170,13 @@ def resnet18_pnn(nclasses: int, nf: int = 64, old_cols: List[nn.Module] = None, x_shape: torch.Size = None): """ Instantiates a ResNet18 network. - :param nclasses: number of output classes - :param nf: number of filters - :return: ResNet network + + Args: + nclasses: number of output classes + nf: number of filters + + Returns: + ResNet network """ if old_cols is None: old_cols = [] diff --git a/backbone/ResNet50.py b/backbone/ResNet50.py new file mode 100644 index 00000000..e3c9bb33 --- /dev/null +++ b/backbone/ResNet50.py @@ -0,0 +1,266 @@ +import torch +from torch import Tensor +import torch.nn as nn +from typing import Type, Any, Callable, Union, List, Optional + +from backbone import MammothBackbone + + +__all__ = ['ResNet', 'resnet18', 'resnet34', 'resnet50', 'resnet101', + 'resnet152', 'resnext50_32x4d', 'resnext101_32x8d', + 'wide_resnet50_2', 'wide_resnet101_2'] + + +model_urls = { + 'resnet18': 'https://download.pytorch.org/models/resnet18-f37072fd.pth', + 'resnet34': 'https://download.pytorch.org/models/resnet34-b627a593.pth', + 'resnet50': 'https://download.pytorch.org/models/resnet50-0676ba61.pth', + 'resnet101': 'https://download.pytorch.org/models/resnet101-63fe2227.pth', + 'resnet152': 'https://download.pytorch.org/models/resnet152-394f9c45.pth', + 'resnext50_32x4d': 'https://download.pytorch.org/models/resnext50_32x4d-7cdf4587.pth', + 'resnext101_32x8d': 'https://download.pytorch.org/models/resnext101_32x8d-8ba56ff5.pth', + 'wide_resnet50_2': 'https://download.pytorch.org/models/wide_resnet50_2-95faca4d.pth', + 'wide_resnet101_2': 'https://download.pytorch.org/models/wide_resnet101_2-32ee1156.pth', +} + + +def conv3x3(in_planes: int, out_planes: int, stride: int = 1, groups: int = 1, dilation: int = 1) -> nn.Conv2d: + """3x3 convolution with padding""" + return nn.Conv2d(in_planes, out_planes, kernel_size=3, stride=stride, + padding=dilation, groups=groups, bias=False, dilation=dilation) + + +def conv1x1(in_planes: int, out_planes: int, stride: int = 1) -> nn.Conv2d: + """1x1 convolution""" + return nn.Conv2d(in_planes, out_planes, kernel_size=1, stride=stride, bias=False) + + +class Bottleneck(nn.Module): + # Bottleneck in torchvision places the stride for downsampling at 3x3 convolution(self.conv2) + # while original implementation places the stride at the first 1x1 convolution(self.conv1) + # according to "Deep residual learning for image recognition"https://arxiv.org/abs/1512.03385. + # This variant is also known as ResNet V1.5 and improves accuracy according to + # https://ngc.nvidia.com/catalog/model-scripts/nvidia:resnet_50_v1_5_for_pytorch. + + expansion: int = 4 + + def __init__( + self, + inplanes: int, + planes: int, + stride: int = 1, + downsample: Optional[nn.Module] = None, + groups: int = 1, + base_width: int = 64, + dilation: int = 1, + norm_layer: Optional[Callable[..., nn.Module]] = None + ) -> None: + super(Bottleneck, self).__init__() + self.return_prerelu = False + if norm_layer is None: + norm_layer = nn.BatchNorm2d + width = int(planes * (base_width / 64.)) * groups + # Both self.conv2 and self.downsample layers downsample the input when stride != 1 + self.conv1 = conv1x1(inplanes, width) + self.bn1 = norm_layer(width) + self.conv2 = conv3x3(width, width, stride, groups, dilation) + self.bn2 = norm_layer(width) + self.conv3 = conv1x1(width, planes * self.expansion) + self.bn3 = norm_layer(planes * self.expansion) + self.relu = nn.ReLU(inplace=True) + self.downsample = downsample + self.stride = stride + + def forward(self, x: Tensor) -> Tensor: + identity = x + + out = self.conv1(x) + out = self.bn1(out) + out = self.relu(out) + + out = self.conv2(out) + out = self.bn2(out) + out = self.relu(out) + + out = self.conv3(out) + out = self.bn3(out) + + if self.downsample is not None: + identity = self.downsample(x) + + out += identity + + if self.return_prerelu: + self.prerelu = out.clone() + + out = self.relu(out) + + return out + + +class ResNet(MammothBackbone): + + def __init__( + self, + block: Bottleneck, + layers: List[int], + num_classes: int = 1000, + zero_init_residual: bool = False, + groups: int = 1, + pretrained: bool = False, + width_per_group: int = 64, + replace_stride_with_dilation: Optional[List[bool]] = None, + norm_layer: Optional[Callable[..., nn.Module]] = None + ) -> None: + super(ResNet, self).__init__() + self.block = block + self.device = "cpu" + if norm_layer is None: + norm_layer = nn.BatchNorm2d + self._norm_layer = norm_layer + self.return_prerelu = False + self.num_classes = num_classes + self.inplanes = 64 + self.dilation = 1 + if replace_stride_with_dilation is None: + # each element in the tuple indicates if we should replace + # the 2x2 stride with a dilated convolution instead + replace_stride_with_dilation = [False, False, False] + if len(replace_stride_with_dilation) != 3: + raise ValueError("replace_stride_with_dilation should be None " + "or a 3-element tuple, got {}".format(replace_stride_with_dilation)) + self.groups = groups + self.base_width = width_per_group + self.conv1 = nn.Conv2d(3, self.inplanes, kernel_size=7, stride=2, padding=3, + bias=False) + self.bn1 = norm_layer(self.inplanes) + self.relu = nn.ReLU(inplace=True) + self.maxpool = nn.MaxPool2d(kernel_size=3, stride=2, padding=1) + self.layer1 = self._make_layer(block, 64, layers[0]) + self.layer2 = self._make_layer(block, 128, layers[1], stride=2, + dilate=replace_stride_with_dilation[0]) + self.layer3 = self._make_layer(block, 256, layers[2], stride=2, + dilate=replace_stride_with_dilation[1]) + self.layer4 = self._make_layer(block, 512, layers[3], stride=2, + dilate=replace_stride_with_dilation[2]) + self.avgpool = nn.AdaptiveAvgPool2d((1, 1)) + self.classifier = nn.Linear(512 * block.expansion, num_classes) + + for m in self.modules(): + if isinstance(m, nn.Conv2d): + nn.init.kaiming_normal_( + m.weight, mode='fan_out', nonlinearity='relu') + elif isinstance(m, (nn.BatchNorm2d, nn.GroupNorm)): + nn.init.constant_(m.weight, 1) + nn.init.constant_(m.bias, 0) + + # Zero-initialize the last BN in each residual branch, + # so that the residual branch starts with zeros, and each residual block behaves like an identity. + # This improves the model by 0.2~0.3% according to https://arxiv.org/abs/1706.02677 + if zero_init_residual: + for m in self.modules(): + if isinstance(m, Bottleneck): + # type: ignore[arg-type] + nn.init.constant_(m.bn3.weight, 0) + + if pretrained: + ckpt = torch.hub.load_state_dict_from_url(model_urls['resnet50'], progress=True, check_hash=True) + # drop classifier weights + ckpt.pop('fc.weight') + ckpt.pop('fc.bias') + missing, unexpected = self.load_state_dict(ckpt, strict=False) + assert len([x for x in missing if 'classifier' not in x]) == 0, "Missing keys: {}".format(missing) + assert len(unexpected) == 0, "Unexpected keys: {}".format(unexpected) + + def to(self, device, **kwargs): + self.device = device + return super().to(device, **kwargs) + + def set_return_prerelu(self, enable=True): + self.return_prerelu = enable + for c in self.modules(): + if isinstance(c, self.block): + c.return_prerelu = enable + + def _make_layer(self, block: Bottleneck, planes: int, blocks: int, + stride: int = 1, dilate: bool = False) -> nn.Sequential: + norm_layer = self._norm_layer + downsample = None + previous_dilation = self.dilation + if dilate: + self.dilation *= stride + stride = 1 + if stride != 1 or self.inplanes != planes * block.expansion: + downsample = nn.Sequential( + conv1x1(self.inplanes, planes * block.expansion, stride), + norm_layer(planes * block.expansion), + ) + + layers = [] + layers.append(block(self.inplanes, planes, stride, downsample, self.groups, + self.base_width, previous_dilation, norm_layer)) + self.inplanes = planes * block.expansion + for _ in range(1, blocks): + layers.append(block(self.inplanes, planes, groups=self.groups, + base_width=self.base_width, dilation=self.dilation, + norm_layer=norm_layer)) + + return nn.Sequential(*layers) + + def forward(self, x: Tensor, returnt="out") -> Tensor: + out_0 = self.conv1(x) + out_0 = self.bn1(out_0) + if self.return_prerelu: + out_0_t = out_0.clone() + + out_0 = self.relu(out_0) + out_0 = self.maxpool(out_0) + + out_1 = self.layer1(out_0) + out_2 = self.layer2(out_1) + out_3 = self.layer3(out_2) + out_4 = self.layer4(out_3) + + feature = self.avgpool(out_4) + feature = torch.flatten(feature, 1) + + if returnt == 'features': + return feature + + out = self.classifier(feature) + + if returnt == 'out': + return out + elif returnt == 'full': + return out, [ + out_0 if not self.return_prerelu else out_0_t, + out_1 if not self.return_prerelu else self.layer1[-1].prerelu, + out_2 if not self.return_prerelu else self.layer2[-1].prerelu, + out_3 if not self.return_prerelu else self.layer3[-1].prerelu, + out_4 if not self.return_prerelu else self.layer4[-1].prerelu + ] + elif returnt == 'both': + return (out, feature) + + raise NotImplementedError("Unknown return type. Must be in ['out', 'features', 'both', 'all'] but got {}".format(returnt)) + + def set_grad_filter(self, filter_s: str, enable: bool) -> None: + negative_mode = filter_s[0] == '~' + if negative_mode: + filter_s = filter_s[1:] + for _, p in filter(lambda x: filter_s not in x[0], self.named_parameters()): + p.requires_grad = enable + else: + for _, p in filter(lambda x: filter_s in x[0], self.named_parameters()): + p.requires_grad = enable + + +def resnet50(num_classes: int, pretrained=False, **kwargs: Any) -> ResNet: + r"""ResNet-50 model from + `"Deep Residual Learning for Image Recognition" `_. + + Args: + pretrained (bool): If True, returns a model pre-trained on ImageNet + progress (bool): If True, displays a progress bar of the download to stderr + """ + return ResNet(Bottleneck, [3, 4, 6, 3], num_classes=num_classes, pretrained=pretrained, **kwargs) diff --git a/backbone/__init__.py b/backbone/__init__.py index 7d267ec8..09467286 100644 --- a/backbone/__init__.py +++ b/backbone/__init__.py @@ -13,7 +13,8 @@ def xavier(m: nn.Module) -> None: """ Applies Xavier initialization to linear modules. - :param m: the module to be initialized + Args: + m: the module to be initialized Example:: >>> net = nn.Sequential(nn.Linear(10, 10), nn.ReLU()) @@ -31,10 +32,13 @@ def xavier(m: nn.Module) -> None: def num_flat_features(x: torch.Tensor) -> int: """ - Computes the total number of items except the first dimension. + Computes the total number of items except the first (batch) dimension. - :param x: input tensor - :return: number of item from the second dimension onward + Args: + x: input tensor + + Returns: + number of item from the second dimension onward """ size = x.size()[1:] num_features = 1 @@ -42,7 +46,22 @@ def num_flat_features(x: torch.Tensor) -> int: num_features *= ff return num_features + class MammothBackbone(nn.Module): + """ + A backbone module for the Mammoth model. + + Args: + **kwargs: additional keyword arguments + + Methods: + forward: Compute a forward pass. + features: Get the features of the input tensor (same as forward but with returnt='features'). + get_params: Returns all the parameters concatenated in a single tensor. + set_params: Sets the parameters to a given value. + get_grads: Returns all the gradients concatenated in a single tensor. + get_grads_list: Returns a list containing the gradients (a tensor for each layer). + """ def __init__(self, **kwargs) -> None: super(MammothBackbone, self).__init__() @@ -50,19 +69,34 @@ def __init__(self, **kwargs) -> None: def forward(self, x: torch.Tensor, returnt='out') -> torch.Tensor: """ Compute a forward pass. - :param x: input tensor (batch_size, *input_shape) - :param returnt: return type (a string among 'out', 'features', 'all') - :return: output tensor (output_classes) + + Args: + x: input tensor (batch_size, *input_shape) + returnt: return type (a string among `out`, `features`, `both`, or `all`) + + Returns: + output tensor """ raise NotImplementedError def features(self, x: torch.Tensor) -> torch.Tensor: + """ + Compute the features of the input tensor. + + Args: + x: input tensor + + Returns: + features tensor + """ return self.forward(x, returnt='features') def get_params(self) -> torch.Tensor: """ Returns all the parameters concatenated in a single tensor. - :return: parameters tensor (??) + + Returns: + parameters tensor """ params = [] for pp in list(self.parameters()): @@ -72,27 +106,33 @@ def get_params(self) -> torch.Tensor: def set_params(self, new_params: torch.Tensor) -> None: """ Sets the parameters to a given value. - :param new_params: concatenated values to be set (??) + + Args: + new_params: concatenated values to be set """ assert new_params.size() == self.get_params().size() progress = 0 for pp in list(self.parameters()): cand_params = new_params[progress: progress + - torch.tensor(pp.size()).prod()].view(pp.size()) + torch.tensor(pp.size()).prod()].view(pp.size()) progress += torch.tensor(pp.size()).prod() pp.data = cand_params def get_grads(self) -> torch.Tensor: """ Returns all the gradients concatenated in a single tensor. - :return: gradients tensor (??) + + Returns: + gradients tensor """ return torch.cat(self.get_grads_list()) def get_grads_list(self): """ Returns a list containing the gradients (a tensor for each layer). - :return: gradients list + + Returns: + gradients list """ grads = [] for pp in list(self.parameters()): diff --git a/datasets/__init__.py b/datasets/__init__.py index 0fa67791..b8a0e39c 100644 --- a/datasets/__init__.py +++ b/datasets/__init__.py @@ -3,38 +3,106 @@ # This source code is licensed under the license found in the # LICENSE file in the root directory of this source tree. +import os +import sys + +mammoth_path = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) +sys.path.append(mammoth_path) +os.chdir(mammoth_path) + import importlib import inspect -import os from argparse import Namespace from datasets.utils.continual_dataset import ContinualDataset +from utils.conf import warn_once -def get_all_models(): +def get_all_datasets(): + """Returns the list of all the available datasets in the datasets folder.""" return [model.split('.')[0] for model in os.listdir('datasets') if not model.find('__') > -1 and 'py' in model] -NAMES = {} -for model in get_all_models(): - mod = importlib.import_module('datasets.' + model) - dataset_classes_name = [x for x in mod.__dir__() if 'type' in str(type(getattr(mod, x))) and 'ContinualDataset' in str(inspect.getmro(getattr(mod, x))[1:])] - for d in dataset_classes_name: - c = getattr(mod, d) - NAMES[c.NAME] = c +def get_dataset(args: Namespace) -> ContinualDataset: + """ + Creates and returns a continual dataset among those that are available. + If an error was detected while loading the available datasets, it raises the appropriate error message. - gcl_dataset_classes_name = [x for x in mod.__dir__() if 'type' in str(type(getattr(mod, x))) and 'GCLDataset' in str(inspect.getmro(getattr(mod, x))[1:])] - for d in gcl_dataset_classes_name: - c = getattr(mod, d) - NAMES[c.NAME] = c + Args: + args (Namespace): the arguments which contains the hyperparameters + Exceptions: + AssertError: if the dataset is not available + Exception: if an error is detected in the dataset -def get_dataset(args: Namespace) -> ContinualDataset: + Returns: + the continual dataset instance """ - Creates and returns a continual dataset. - :param args: the arguments which contains the hyperparameters - :return: the continual dataset + names = get_dataset_names() + assert args.dataset in names + return get_dataset_class(args)(args) + + +def get_dataset_class(args: Namespace) -> ContinualDataset: """ - assert args.dataset in NAMES - return NAMES[args.dataset](args) + Return the class of the selected continual dataset among those that are available. + If an error was detected while loading the available datasets, it raises the appropriate error message. + + Args: + args (Namespace): the arguments which contains the `--dataset` attribute + + Exceptions: + AssertError: if the dataset is not available + Exception: if an error is detected in the dataset + + Returns: + the continual dataset class + """ + names = get_dataset_names() + assert args.dataset in names + if isinstance(names[args.dataset], Exception): + raise names[args.dataset] + return names[args.dataset] + + +def get_dataset_names(): + """ + Return the names of the selected continual dataset among those that are available. + If an error was detected while loading the available datasets, it raises the appropriate error message. + + Args: + args (Namespace): the arguments which contains the `--dataset` attribute + + Exceptions: + AssertError: if the dataset is not available + Exception: if an error is detected in the dataset + + Returns: + the continual dataset class names + """ + + def _dataset_names(): + names = {} + for dataset in get_all_datasets(): + try: + mod = importlib.import_module('datasets.' + dataset) + dataset_classes_name = [x for x in mod.__dir__() if 'type' in str(type(getattr(mod, x))) + and 'ContinualDataset' in str(inspect.getmro(getattr(mod, x))[1:]) and 'GCLDataset' not in str(inspect.getmro(getattr(mod, x)))] + for d in dataset_classes_name: + c = getattr(mod, d) + names[c.NAME] = c + + gcl_dataset_classes_name = [x for x in mod.__dir__() if 'type' in str(type(getattr(mod, x))) and 'GCLDataset' in str(inspect.getmro(getattr(mod, x))[1:])] + for d in gcl_dataset_classes_name: + c = getattr(mod, d) + names[c.NAME] = c + except Exception as e: + warn_once(f'Error in dataset {dataset}') + warn_once(e) + names[dataset.replace('_', '-')] = e + return names + + if not hasattr(get_dataset_names, 'names'): + setattr(get_dataset_names, 'names', _dataset_names()) + return getattr(get_dataset_names, 'names') diff --git a/datasets/deprecated/__init__.py b/datasets/deprecated/__init__.py new file mode 100644 index 00000000..3d90df60 --- /dev/null +++ b/datasets/deprecated/__init__.py @@ -0,0 +1,3 @@ +""" +List of deprecated datasets. +""" diff --git a/datasets/deprecated/old_mnist_360.py b/datasets/deprecated/old_mnist_360.py new file mode 100644 index 00000000..ed25a8f7 --- /dev/null +++ b/datasets/deprecated/old_mnist_360.py @@ -0,0 +1,215 @@ +# Copyright 2022-present, Lorenzo Bonicelli, Pietro Buzzega, Matteo Boschini, Angelo Porrello, Simone Calderara. +# All rights reserved. +# This source code is licensed under the license found in the +# LICENSE file in the root directory of this source tree. + +from argparse import Namespace +from copy import deepcopy +from typing import Tuple + +import numpy as np +import torch +import torch.nn.functional as F +import torchvision.transforms as transforms +from backbone.MNISTMLP import MNISTMLP +from torchvision.datasets import MNIST + +from datasets.perm_mnist import MyMNIST +from datasets.transforms.rotation import IncrementalRotation +from datasets.utils.gcl_dataset import GCLDataset +from datasets.utils.validation import get_train_val +from utils.conf import base_path, create_seeded_dataloader + + +class MNIST360(GCLDataset): + """ + MNIST-360 general continual dataset. + """ + NAME = 'old-mnist-360' + SETTING = 'general-continual' + N_CLASSES = 9 + LENGTH = 54051 + + def __init__(self, args: Namespace) -> None: + self.num_rounds = 3 + self.args = args + self.train_over, self.test_over = False, False + + self.train_loaders, self.test_loaders = [], [] + self.remaining_training_items = [] + self.val_dataset = None + + self.train_classes = [0, 1] + self.completed_rounds, self.test_class, self.test_iteration = 0, 0, 0 + + self.init_train_loaders() + self.init_test_loaders() + + self.active_train_loaders = [ + self.train_loaders[self.train_classes[0]].pop(), + self.train_loaders[self.train_classes[1]].pop()] + + self.active_remaining_training_items = [ + self.remaining_training_items[self.train_classes[0]].pop(), + self.remaining_training_items[self.train_classes[1]].pop()] + + def train_next_class(self) -> None: + """ + Changes the couple of current training classes. + """ + self.train_classes[0] += 1 + self.train_classes[1] += 1 + if self.train_classes[0] == self.N_CLASSES: + self.train_classes[0] = 0 + if self.train_classes[1] == self.N_CLASSES: + self.train_classes[1] = 0 + + if self.train_classes[0] == 0: + self.completed_rounds += 1 + if self.completed_rounds == 3: + self.train_over = True + + if not self.train_over: + self.active_train_loaders = [ + self.train_loaders[self.train_classes[0]].pop(), + self.train_loaders[self.train_classes[1]].pop()] + self.active_remaining_training_items = [ + self.remaining_training_items[self.train_classes[0]].pop(), + self.remaining_training_items[self.train_classes[1]].pop()] + + def init_train_loaders(self) -> None: + """ + Initializes the test loader. + """ + train_dataset = MyMNIST(base_path() + 'MNIST', + train=True, download=True) + if self.args.validation: + test_transform = transforms.ToTensor() + train_dataset, self.val_dataset = get_train_val( + train_dataset, test_transform, self.NAME) + + for j in range(self.N_CLASSES): + self.train_loaders.append([]) + self.remaining_training_items.append([]) + train_mask = np.isin(np.array(train_dataset.targets), [j]) + train_rotation = IncrementalRotation(init_deg=(j - 1) * 60, + increase_per_iteration=360.0 / train_mask.sum()) + for k in range(self.num_rounds * 2): + tmp_train_dataset = deepcopy(train_dataset) + numbers_per_batch = train_mask.sum() // (self.num_rounds * 2) + 1 + tmp_train_dataset.data = tmp_train_dataset.data[ + train_mask][k * numbers_per_batch:(k + 1) * numbers_per_batch] + tmp_train_dataset.targets = tmp_train_dataset.targets[ + train_mask][k * numbers_per_batch:(k + 1) * numbers_per_batch] + tmp_train_dataset.transform = transforms.Compose( + [train_rotation, transforms.ToTensor()]) + self.train_loaders[-1].append(create_seeded_dataloader(self.args, + tmp_train_dataset, batch_size=1, shuffle=True, num_workers=0)) + self.remaining_training_items[-1].append( + tmp_train_dataset.data.shape[0]) + + def init_test_loaders(self) -> None: + """ + Initializes the test loader. + """ + if self.args.validation: + test_dataset = self.val_dataset + else: + test_dataset = MNIST(base_path() + 'MNIST', + train=False, download=True) + for j in range(self.N_CLASSES): + tmp_test_dataset = deepcopy(test_dataset) + test_mask = np.isin(np.array(tmp_test_dataset.targets), [j]) + tmp_test_dataset.data = tmp_test_dataset.data[test_mask] + tmp_test_dataset.targets = tmp_test_dataset.targets[test_mask] + test_rotation = IncrementalRotation( + increase_per_iteration=360.0 / test_mask.sum()) + tmp_test_dataset.transform = transforms.Compose( + [test_rotation, transforms.ToTensor()]) + self.test_loaders.append(create_seeded_dataloader(self.args, tmp_test_dataset, + batch_size=self.args.batch_size, shuffle=True, num_workers=0)) + + def get_train_data(self) -> Tuple[torch.Tensor, torch.Tensor, torch.Tensor]: + """ + Ensembles the next examples of the current classes in a single batch. + :return: the augmented and not aumented version of the examples of the + current batch, along with their labels. + """ + assert not self.train_over + batch_size_0 = min(int(round(self.active_remaining_training_items[0] / + (self.active_remaining_training_items[0] + + self.active_remaining_training_items[1]) * + self.args.batch_size)), + self.active_remaining_training_items[0]) + + batch_size_1 = min(self.args.batch_size - batch_size_0, + self.active_remaining_training_items[1]) + + x_train, y_train, x_train_naug = [], [], [] + for j in range(batch_size_0): + i_x_train, i_y_train, i_x_train_naug = next(iter( + self.active_train_loaders[0])) + x_train.append(i_x_train) + y_train.append(i_y_train) + x_train_naug.append(i_x_train_naug) + for j in range(batch_size_1): + i_x_train, i_y_train, i_x_train_naug = next(iter( + self.active_train_loaders[1])) + x_train.append(i_x_train) + y_train.append(i_y_train) + x_train_naug.append(i_x_train_naug) + x_train, y_train, x_train_naug = torch.cat(x_train),\ + torch.cat(y_train), torch.cat(x_train_naug) + + self.active_remaining_training_items[0] -= batch_size_0 + self.active_remaining_training_items[1] -= batch_size_1 + + if self.active_remaining_training_items[0] <= 0 or \ + self.active_remaining_training_items[1] <= 0: + self.train_next_class() + + return x_train, y_train, x_train_naug + + def get_test_data(self) -> Tuple[torch.Tensor, torch.Tensor]: + """ + Ensembles the next examples of the current class in a batch. + :return: the batch of examples along with its label. + """ + assert not self.test_over + x_test, y_test = next(iter(self.test_loaders[self.test_class])) + residual_items = len(self.test_loaders[self.test_class].dataset) - \ + self.test_iteration * self.args.batch_size - len(x_test) + self.test_iteration += 1 + if residual_items <= 0: + if residual_items < 0: + x_test = x_test[:residual_items] + y_test = y_test[:residual_items] + self.test_iteration = 0 + self.test_class += 1 + if self.test_class == self.N_CLASSES: + self.test_over = True + return x_test, y_test + + @staticmethod + def get_backbone() -> torch.nn.Module: + return MNISTMLP(28 * 28, 10) + + @staticmethod + def get_loss() -> F.cross_entropy: + return F.cross_entropy + + @staticmethod + def get_transform(): + return None + + @staticmethod + def get_denormalization_transform(): + return None + + @staticmethod + def get_batch_size() -> int: + return 16 + + @staticmethod + def get_minibatch_size() -> int: + return 16 diff --git a/datasets/imagenet_r_utils/__init__.py b/datasets/imagenet_r_utils/__init__.py new file mode 100644 index 00000000..e05d2290 --- /dev/null +++ b/datasets/imagenet_r_utils/__init__.py @@ -0,0 +1,5 @@ +""" +This package contains utility functions for the ImageNet-R dataset. + +It contains the list of images into train and test, as well as the list of classnames. +""" diff --git a/datasets/imagenet_r_utils/imagenet-r_test.yaml b/datasets/imagenet_r_utils/imagenet-r_test.yaml new file mode 100644 index 00000000..23c3881c --- /dev/null +++ b/datasets/imagenet_r_utils/imagenet-r_test.yaml @@ -0,0 +1,12002 @@ +data: +- data/imagenet-r/n01910747/tattoo_75.jpg +- data/imagenet-r/n02437616/painting_1.jpg +- data/imagenet-r/n03773504/videogame_20.jpg +- data/imagenet-r/n02099601/misc_41.jpg +- data/imagenet-r/n01986214/art_2.jpg +- data/imagenet-r/n01843383/deviantart_70.jpg +- data/imagenet-r/n02097298/misc_46.jpg +- data/imagenet-r/n02486410/cartoon_18.jpg +- data/imagenet-r/n02099601/misc_95.jpg +- data/imagenet-r/n03124170/sculpture_1.jpg +- data/imagenet-r/n02814860/cartoon_15.jpg +- data/imagenet-r/n04389033/videogame_5.jpg +- data/imagenet-r/n02106166/sculpture_1.jpg +- data/imagenet-r/n02108089/misc_22.jpg +- data/imagenet-r/n01514859/graphic_1.jpg +- data/imagenet-r/n03888257/videogame_5.jpg +- data/imagenet-r/n07745940/graphic_8.jpg +- data/imagenet-r/n03424325/misc_45.jpg +- data/imagenet-r/n01694178/painting_0.jpg +- data/imagenet-r/n02843684/sketch_14.jpg +- data/imagenet-r/n01644373/tattoo_30.jpg +- data/imagenet-r/n02088238/sketch_1.jpg +- data/imagenet-r/n03947888/toy_2.jpg +- data/imagenet-r/n02481823/sketch_13.jpg +- data/imagenet-r/n01910747/graffiti_13.jpg +- data/imagenet-r/n04086273/tattoo_14.jpg +- data/imagenet-r/n09472597/sticker_3.jpg +- data/imagenet-r/n04325704/sculpture_3.jpg +- data/imagenet-r/n01630670/sketch_4.jpg +- data/imagenet-r/n03124170/cartoon_48.jpg +- data/imagenet-r/n02236044/art_9.jpg +- data/imagenet-r/n02094433/misc_47.jpg +- data/imagenet-r/n01534433/painting_14.jpg +- data/imagenet-r/n03272010/painting_6.jpg +- data/imagenet-r/n07697313/videogame_4.jpg +- data/imagenet-r/n04591713/painting_28.jpg +- data/imagenet-r/n04133789/sketch_12.jpg +- data/imagenet-r/n01694178/toy_17.jpg +- data/imagenet-r/n01882714/painting_31.jpg +- data/imagenet-r/n07920052/cartoon_19.jpg +- data/imagenet-r/n01498041/misc_1.jpg +- data/imagenet-r/n02948072/graphic_6.jpg +- data/imagenet-r/n07920052/cartoon_2.jpg +- data/imagenet-r/n04118538/videogame_9.jpg +- data/imagenet-r/n02219486/sketch_5.jpg +- data/imagenet-r/n02510455/misc_100.jpg +- data/imagenet-r/n01494475/misc_66.jpg +- data/imagenet-r/n12267677/misc_133.jpg +- data/imagenet-r/n04275548/videogame_15.jpg +- data/imagenet-r/n02992529/sketch_27.jpg +- data/imagenet-r/n07749582/graffiti_0.jpg +- data/imagenet-r/n04347754/painting_3.jpg +- data/imagenet-r/n02112018/misc_63.jpg +- data/imagenet-r/n02106662/tattoo_5.jpg +- data/imagenet-r/n02992529/sketch_28.jpg +- data/imagenet-r/n01847000/sketch_19.jpg +- data/imagenet-r/n02110958/sticker_7.jpg +- data/imagenet-r/n02966193/deviantart_4.jpg +- data/imagenet-r/n01531178/deviantart_0.jpg +- data/imagenet-r/n02480855/tattoo_60.jpg +- data/imagenet-r/n03124170/cartoon_3.jpg +- data/imagenet-r/n07693725/sketch_8.jpg +- data/imagenet-r/n02091032/misc_5.jpg +- data/imagenet-r/n02091032/misc_9.jpg +- data/imagenet-r/n04141076/painting_20.jpg +- data/imagenet-r/n04146614/toy_32.jpg +- data/imagenet-r/n01843383/videogame_5.jpg +- data/imagenet-r/n02106662/misc_17.jpg +- data/imagenet-r/n04266014/painting_11.jpg +- data/imagenet-r/n02437616/deviantart_18.jpg +- data/imagenet-r/n04465501/toy_9.jpg +- data/imagenet-r/n02749479/sketch_10.jpg +- data/imagenet-r/n04552348/toy_9.jpg +- data/imagenet-r/n02423022/sculpture_3.jpg +- data/imagenet-r/n04254680/misc_8.jpg +- data/imagenet-r/n12267677/misc_11.jpg +- data/imagenet-r/n02108915/misc_103.jpg +- data/imagenet-r/n02423022/sculpture_2.jpg +- data/imagenet-r/n02909870/painting_2.jpg +- data/imagenet-r/n01843383/graffiti_0.jpg +- data/imagenet-r/n02607072/misc_19.jpg +- data/imagenet-r/n02134084/misc_158.jpg +- data/imagenet-r/n02114367/misc_6.jpg +- data/imagenet-r/n03467068/sketch_4.jpg +- data/imagenet-r/n03272010/deviantart_15.jpg +- data/imagenet-r/n02092339/misc_29.jpg +- data/imagenet-r/n09472597/cartoon_3.jpg +- data/imagenet-r/n02088364/misc_62.jpg +- data/imagenet-r/n07734744/videogame_17.jpg +- data/imagenet-r/n04465501/videogame_14.jpg +- data/imagenet-r/n07920052/sketch_16.jpg +- data/imagenet-r/n07749582/painting_32.jpg +- data/imagenet-r/n04310018/sticker_15.jpg +- data/imagenet-r/n12267677/misc_84.jpg +- data/imagenet-r/n09472597/deviantart_7.jpg +- data/imagenet-r/n07614500/painting_9.jpg +- data/imagenet-r/n02607072/misc_87.jpg +- data/imagenet-r/n04147183/painting_19.jpg +- data/imagenet-r/n04254680/misc_16.jpg +- data/imagenet-r/n03676483/graffiti_0.jpg +- data/imagenet-r/n02480855/videogame_2.jpg +- data/imagenet-r/n02129604/tattoo_27.jpg +- data/imagenet-r/n01784675/sketch_10.jpg +- data/imagenet-r/n03947888/cartoon_11.jpg +- data/imagenet-r/n02346627/sketch_12.jpg +- data/imagenet-r/n02128385/cartoon_1.jpg +- data/imagenet-r/n02110185/cartoon_14.jpg +- data/imagenet-r/n02356798/cartoon_7.jpg +- data/imagenet-r/n01484850/sculpture_5.jpg +- data/imagenet-r/n04266014/videogame_22.jpg +- data/imagenet-r/n02808440/sketch_19.jpg +- data/imagenet-r/n01694178/cartoon_10.jpg +- data/imagenet-r/n02906734/misc_13.jpg +- data/imagenet-r/n04266014/sketch_8.jpg +- data/imagenet-r/n03272010/sketch_22.jpg +- data/imagenet-r/n02701002/sketch_9.jpg +- data/imagenet-r/n03481172/cartoon_26.jpg +- data/imagenet-r/n02077923/cartoon_3.jpg +- data/imagenet-r/n02102318/misc_56.jpg +- data/imagenet-r/n01632777/deviantart_9.jpg +- data/imagenet-r/n07697313/toy_11.jpg +- data/imagenet-r/n02226429/painting_4.jpg +- data/imagenet-r/n01484850/graphic_3.jpg +- data/imagenet-r/n02992529/sticker_0.jpg +- data/imagenet-r/n07720875/sketch_19.jpg +- data/imagenet-r/n01944390/sketch_17.jpg +- data/imagenet-r/n04310018/sticker_18.jpg +- data/imagenet-r/n02437616/sculpture_5.jpg +- data/imagenet-r/n02445715/cartoon_0.jpg +- data/imagenet-r/n02510455/deviantart_17.jpg +- data/imagenet-r/n02841315/toy_7.jpg +- data/imagenet-r/n01843383/sketch_14.jpg +- data/imagenet-r/n02346627/sketch_6.jpg +- data/imagenet-r/n02206856/sculpture_6.jpg +- data/imagenet-r/n07734744/sticker_4.jpg +- data/imagenet-r/n01843383/deviantart_81.jpg +- data/imagenet-r/n07614500/sketch_5.jpg +- data/imagenet-r/n07920052/graphic_1.jpg +- data/imagenet-r/n07697537/misc_3.jpg +- data/imagenet-r/n04465501/painting_18.jpg +- data/imagenet-r/n02099601/misc_35.jpg +- data/imagenet-r/n01498041/sketch_0.jpg +- data/imagenet-r/n07714990/sketch_4.jpg +- data/imagenet-r/n01847000/sculpture_4.jpg +- data/imagenet-r/n02236044/art_6.jpg +- data/imagenet-r/n01986214/art_0.jpg +- data/imagenet-r/n01616318/cartoon_23.jpg +- data/imagenet-r/n10565667/deviantart_14.jpg +- data/imagenet-r/n02410509/sculpture_4.jpg +- data/imagenet-r/n02112137/misc_19.jpg +- data/imagenet-r/n12267677/misc_105.jpg +- data/imagenet-r/n02007558/graffiti_24.jpg +- data/imagenet-r/n01784675/tattoo_6.jpg +- data/imagenet-r/n02398521/sculpture_18.jpg +- data/imagenet-r/n02106662/sketch_10.jpg +- data/imagenet-r/n04141076/sculpture_16.jpg +- data/imagenet-r/n04522168/cartoon_22.jpg +- data/imagenet-r/n02236044/cartoon_30.jpg +- data/imagenet-r/n02233338/tattoo_7.jpg +- data/imagenet-r/n02190166/graffiti_10.jpg +- data/imagenet-r/n04536866/sketch_11.jpg +- data/imagenet-r/n07734744/sketch_20.jpg +- data/imagenet-r/n04591713/toy_0.jpg +- data/imagenet-r/n02268443/misc_30.jpg +- data/imagenet-r/n07734744/cartoon_18.jpg +- data/imagenet-r/n02480495/painting_9.jpg +- data/imagenet-r/n02395406/misc_8.jpg +- data/imagenet-r/n03124170/cartoon_53.jpg +- data/imagenet-r/n02119022/misc_123.jpg +- data/imagenet-r/n03930630/cartoon_8.jpg +- data/imagenet-r/n03494278/art_3.jpg +- data/imagenet-r/n07734744/graffiti_36.jpg +- data/imagenet-r/n07714990/misc_1.jpg +- data/imagenet-r/n02655020/sketch_12.jpg +- data/imagenet-r/n02190166/graffiti_7.jpg +- data/imagenet-r/n02094433/misc_33.jpg +- data/imagenet-r/n07920052/sketch_7.jpg +- data/imagenet-r/n01843383/graffiti_5.jpg +- data/imagenet-r/n07768694/sketch_18.jpg +- data/imagenet-r/n03124170/tattoo_16.jpg +- data/imagenet-r/n04487394/sketch_2.jpg +- data/imagenet-r/n01498041/deviantart_8.jpg +- data/imagenet-r/n02672831/cartoon_36.jpg +- data/imagenet-r/n12267677/deviantart_20.jpg +- data/imagenet-r/n02481823/cartoon_6.jpg +- data/imagenet-r/n02236044/embroidery_0.jpg +- data/imagenet-r/n01833805/graffiti_1.jpg +- data/imagenet-r/n07614500/tattoo_5.jpg +- data/imagenet-r/n02134084/misc_106.jpg +- data/imagenet-r/n02948072/art_1.jpg +- data/imagenet-r/n01944390/misc_59.jpg +- data/imagenet-r/n02130308/cartoon_16.jpg +- data/imagenet-r/n12267677/misc_19.jpg +- data/imagenet-r/n03930630/graphic_0.jpg +- data/imagenet-r/n02110958/tattoo_36.jpg +- data/imagenet-r/n04487394/cartoon_23.jpg +- data/imagenet-r/n01944390/misc_145.jpg +- data/imagenet-r/n09472597/videogame_38.jpg +- data/imagenet-r/n02769748/origami_2.jpg +- data/imagenet-r/n01833805/sketch_10.jpg +- data/imagenet-r/n02410509/sculpture_41.jpg +- data/imagenet-r/n02356798/sketch_9.jpg +- data/imagenet-r/n01677366/sketch_1.jpg +- data/imagenet-r/n07749582/painting_38.jpg +- data/imagenet-r/n02483362/painting_1.jpg +- data/imagenet-r/n07753275/misc_5.jpg +- data/imagenet-r/n02110341/misc_39.jpg +- data/imagenet-r/n01774750/sketch_11.jpg +- data/imagenet-r/n02110185/cartoon_18.jpg +- data/imagenet-r/n03498962/cartoon_21.jpg +- data/imagenet-r/n02134084/deviantart_10.jpg +- data/imagenet-r/n02056570/cartoon_9.jpg +- data/imagenet-r/n04086273/toy_1.jpg +- data/imagenet-r/n02096585/misc_69.jpg +- data/imagenet-r/n01770393/origami_10.jpg +- data/imagenet-r/n02480855/sticker_2.jpg +- data/imagenet-r/n04552348/videogame_21.jpg +- data/imagenet-r/n01614925/cartoon_21.jpg +- data/imagenet-r/n01820546/sketch_6.jpg +- data/imagenet-r/n01882714/toy_36.jpg +- data/imagenet-r/n02077923/misc_5.jpg +- data/imagenet-r/n02423022/art_10.jpg +- data/imagenet-r/n02906734/cartoon_37.jpg +- data/imagenet-r/n02480495/sketch_6.jpg +- data/imagenet-r/n02398521/toy_10.jpg +- data/imagenet-r/n02119022/misc_26.jpg +- data/imagenet-r/n02113799/sketch_6.jpg +- data/imagenet-r/n02233338/misc_37.jpg +- data/imagenet-r/n02071294/sketch_15.jpg +- data/imagenet-r/n02841315/sketch_13.jpg +- data/imagenet-r/n02447366/graphic_0.jpg +- data/imagenet-r/n02883205/painting_11.jpg +- data/imagenet-r/n02317335/toy_12.jpg +- data/imagenet-r/n02948072/art_0.jpg +- data/imagenet-r/n02113624/misc_0.jpg +- data/imagenet-r/n02106662/misc_73.jpg +- data/imagenet-r/n02110341/misc_10.jpg +- data/imagenet-r/n02607072/misc_35.jpg +- data/imagenet-r/n02114367/misc_23.jpg +- data/imagenet-r/n01882714/toy_30.jpg +- data/imagenet-r/n02236044/painting_2.jpg +- data/imagenet-r/n02110185/art_3.jpg +- data/imagenet-r/n04192698/toy_5.jpg +- data/imagenet-r/n02128757/painting_13.jpg +- data/imagenet-r/n01882714/tattoo_24.jpg +- data/imagenet-r/n07745940/deviantart_11.jpg +- data/imagenet-r/n07697313/art_24.jpg +- data/imagenet-r/n04275548/sketch_10.jpg +- data/imagenet-r/n01644373/cartoon_1.jpg +- data/imagenet-r/n02395406/sketch_14.jpg +- data/imagenet-r/n02128385/embroidery_2.jpg +- data/imagenet-r/n02317335/tattoo_16.jpg +- data/imagenet-r/n02086240/misc_23.jpg +- data/imagenet-r/n02129165/misc_2.jpg +- data/imagenet-r/n02099712/misc_16.jpg +- data/imagenet-r/n02883205/sketch_16.jpg +- data/imagenet-r/n02233338/sketch_10.jpg +- data/imagenet-r/n03345487/toy_23.jpg +- data/imagenet-r/n02980441/misc_5.jpg +- data/imagenet-r/n01806143/art_4.jpg +- data/imagenet-r/n02096585/misc_178.jpg +- data/imagenet-r/n02236044/art_7.jpg +- data/imagenet-r/n02279972/cartoon_0.jpg +- data/imagenet-r/n02483362/sketch_23.jpg +- data/imagenet-r/n01484850/misc_9.jpg +- data/imagenet-r/n02672831/graphic_1.jpg +- data/imagenet-r/n02909870/sketch_0.jpg +- data/imagenet-r/n02110958/embroidery_3.jpg +- data/imagenet-r/n02486410/cartoon_19.jpg +- data/imagenet-r/n07614500/graffiti_12.jpg +- data/imagenet-r/n07714990/cartoon_32.jpg +- data/imagenet-r/n02802426/toy_3.jpg +- data/imagenet-r/n02066245/painting_12.jpg +- data/imagenet-r/n02091134/sketch_8.jpg +- data/imagenet-r/n02802426/tattoo_12.jpg +- data/imagenet-r/n04141076/deviantart_20.jpg +- data/imagenet-r/n02410509/cartoon_5.jpg +- data/imagenet-r/n02447366/sketch_4.jpg +- data/imagenet-r/n02364673/sculpture_6.jpg +- data/imagenet-r/n02110958/sticker_5.jpg +- data/imagenet-r/n02802426/tattoo_3.jpg +- data/imagenet-r/n02110185/graffiti_0.jpg +- data/imagenet-r/n01518878/cartoon_41.jpg +- data/imagenet-r/n02106662/misc_24.jpg +- data/imagenet-r/n02948072/embroidery_13.jpg +- data/imagenet-r/n02939185/deviantart_7.jpg +- data/imagenet-r/n02088364/sketch_7.jpg +- data/imagenet-r/n02106550/misc_9.jpg +- data/imagenet-r/n02483362/cartoon_4.jpg +- data/imagenet-r/n02129604/toy_3.jpg +- data/imagenet-r/n01986214/graffiti_0.jpg +- data/imagenet-r/n01774750/origami_10.jpg +- data/imagenet-r/n02802426/graffiti_2.jpg +- data/imagenet-r/n02219486/origami_8.jpg +- data/imagenet-r/n01694178/deviantart_5.jpg +- data/imagenet-r/n07697313/sculpture_7.jpg +- data/imagenet-r/n02906734/toy_10.jpg +- data/imagenet-r/n02268443/misc_108.jpg +- data/imagenet-r/n02480495/sketch_8.jpg +- data/imagenet-r/n02086240/misc_18.jpg +- data/imagenet-r/n07697537/misc_34.jpg +- data/imagenet-r/n01514859/sketch_13.jpg +- data/imagenet-r/n03495258/sculpture_3.jpg +- data/imagenet-r/n04147183/deviantart_17.jpg +- data/imagenet-r/n02843684/graffiti_2.jpg +- data/imagenet-r/n02106030/painting_19.jpg +- data/imagenet-r/n12267677/misc_3.jpg +- data/imagenet-r/n01770393/tattoo_32.jpg +- data/imagenet-r/n02108915/misc_92.jpg +- data/imagenet-r/n02110341/misc_68.jpg +- data/imagenet-r/n02423022/painting_4.jpg +- data/imagenet-r/n07697537/misc_98.jpg +- data/imagenet-r/n02091032/sketch_18.jpg +- data/imagenet-r/n03345487/videogame_5.jpg +- data/imagenet-r/n04147183/art_3.jpg +- data/imagenet-r/n01644373/tattoo_1.jpg +- data/imagenet-r/n02007558/sketch_9.jpg +- data/imagenet-r/n04591713/misc_2.jpg +- data/imagenet-r/n02268443/sketch_18.jpg +- data/imagenet-r/n02325366/misc_37.jpg +- data/imagenet-r/n02793495/cartoon_4.jpg +- data/imagenet-r/n03947888/cartoon_5.jpg +- data/imagenet-r/n03630383/cartoon_34.jpg +- data/imagenet-r/n02363005/tattoo_8.jpg +- data/imagenet-r/n02236044/tattoo_5.jpg +- data/imagenet-r/n02346627/embroidery_0.jpg +- data/imagenet-r/n07697537/misc_25.jpg +- data/imagenet-r/n02165456/origami_1.jpg +- data/imagenet-r/n07614500/toy_15.jpg +- data/imagenet-r/n02226429/embroidery_0.jpg +- data/imagenet-r/n03773504/sketch_22.jpg +- data/imagenet-r/n04146614/toy_16.jpg +- data/imagenet-r/n07768694/misc_0.jpg +- data/imagenet-r/n04146614/embroidery_0.jpg +- data/imagenet-r/n03594945/painting_3.jpg +- data/imagenet-r/n03272010/painting_18.jpg +- data/imagenet-r/n02129604/sketch_12.jpg +- data/imagenet-r/n02088094/misc_26.jpg +- data/imagenet-r/n02325366/misc_2.jpg +- data/imagenet-r/n01910747/tattoo_83.jpg +- data/imagenet-r/n02843684/cartoon_21.jpg +- data/imagenet-r/n01518878/graffiti_0.jpg +- data/imagenet-r/n01847000/sticker_2.jpg +- data/imagenet-r/n03452741/sketch_8.jpg +- data/imagenet-r/n04465501/sketch_5.jpg +- data/imagenet-r/n02526121/sketch_8.jpg +- data/imagenet-r/n03124170/art_12.jpg +- data/imagenet-r/n01514859/sketch_10.jpg +- data/imagenet-r/n07720875/toy_0.jpg +- data/imagenet-r/n02391049/misc_43.jpg +- data/imagenet-r/n03773504/videogame_17.jpg +- data/imagenet-r/n03467068/sketch_6.jpg +- data/imagenet-r/n02279972/cartoon_5.jpg +- data/imagenet-r/n03594945/sketch_12.jpg +- data/imagenet-r/n02398521/art_8.jpg +- data/imagenet-r/n01443537/toy_9.jpg +- data/imagenet-r/n03481172/origami_2.jpg +- data/imagenet-r/n03481172/toy_11.jpg +- data/imagenet-r/n02410509/cartoon_35.jpg +- data/imagenet-r/n02797295/misc_52.jpg +- data/imagenet-r/n02056570/cartoon_11.jpg +- data/imagenet-r/n01882714/sketch_8.jpg +- data/imagenet-r/n02165456/toy_19.jpg +- data/imagenet-r/n07734744/graffiti_28.jpg +- data/imagenet-r/n02134084/misc_2.jpg +- data/imagenet-r/n01847000/graffiti_0.jpg +- data/imagenet-r/n02007558/sketch_10.jpg +- data/imagenet-r/n02950826/sketch_0.jpg +- data/imagenet-r/n04141076/toy_8.jpg +- data/imagenet-r/n02279972/painting_25.jpg +- data/imagenet-r/n07614500/cartoon_20.jpg +- data/imagenet-r/n02219486/sculpture_19.jpg +- data/imagenet-r/n02802426/deviantart_7.jpg +- data/imagenet-r/n01531178/painting_2.jpg +- data/imagenet-r/n02948072/painting_6.jpg +- data/imagenet-r/n02951358/painting_5.jpg +- data/imagenet-r/n07693725/painting_11.jpg +- data/imagenet-r/n02129604/graphic_1.jpg +- data/imagenet-r/n02110185/sketch_5.jpg +- data/imagenet-r/n02108915/misc_110.jpg +- data/imagenet-r/n02814860/deviantart_0.jpg +- data/imagenet-r/n03649909/sketch_11.jpg +- data/imagenet-r/n02948072/embroidery_30.jpg +- data/imagenet-r/n01833805/cartoon_20.jpg +- data/imagenet-r/n07734744/graffiti_45.jpg +- data/imagenet-r/n02091134/misc_24.jpg +- data/imagenet-r/n04086273/deviantart_9.jpg +- data/imagenet-r/n07745940/embroidery_17.jpg +- data/imagenet-r/n02110185/art_6.jpg +- data/imagenet-r/n03888257/toy_2.jpg +- data/imagenet-r/n04325704/cartoon_2.jpg +- data/imagenet-r/n02085620/sketch_4.jpg +- data/imagenet-r/n02108089/misc_50.jpg +- data/imagenet-r/n10565667/videogame_15.jpg +- data/imagenet-r/n03424325/sketch_17.jpg +- data/imagenet-r/n04347754/sketch_18.jpg +- data/imagenet-r/n03773504/sketch_0.jpg +- data/imagenet-r/n02236044/painting_18.jpg +- data/imagenet-r/n02363005/sketch_18.jpg +- data/imagenet-r/n02672831/cartoon_20.jpg +- data/imagenet-r/n02486410/sculpture_11.jpg +- data/imagenet-r/n02110341/misc_54.jpg +- data/imagenet-r/n03947888/cartoon_7.jpg +- data/imagenet-r/n02206856/sketch_9.jpg +- data/imagenet-r/n01694178/art_9.jpg +- data/imagenet-r/n02883205/toy_8.jpg +- data/imagenet-r/n02106550/misc_22.jpg +- data/imagenet-r/n02841315/cartoon_4.jpg +- data/imagenet-r/n02841315/misc_2.jpg +- data/imagenet-r/n03467068/cartoon_5.jpg +- data/imagenet-r/n02395406/tattoo_8.jpg +- data/imagenet-r/n07693725/cartoon_11.jpg +- data/imagenet-r/n02841315/sketch_19.jpg +- data/imagenet-r/n02268443/misc_126.jpg +- data/imagenet-r/n04389033/sculpture_3.jpg +- data/imagenet-r/n03495258/videogame_2.jpg +- data/imagenet-r/n02119022/misc_106.jpg +- data/imagenet-r/n01882714/tattoo_8.jpg +- data/imagenet-r/n07753275/embroidery_6.jpg +- data/imagenet-r/n02106166/embroidery_0.jpg +- data/imagenet-r/n01860187/cartoon_13.jpg +- data/imagenet-r/n02483362/sketch_14.jpg +- data/imagenet-r/n03630383/sketch_0.jpg +- data/imagenet-r/n01784675/cartoon_7.jpg +- data/imagenet-r/n02410509/origami_13.jpg +- data/imagenet-r/n07714990/sketch_20.jpg +- data/imagenet-r/n02802426/sketch_15.jpg +- data/imagenet-r/n01514859/painting_19.jpg +- data/imagenet-r/n01910747/sculpture_3.jpg +- data/imagenet-r/n02447366/cartoon_21.jpg +- data/imagenet-r/n02480855/graphic_5.jpg +- data/imagenet-r/n02129165/tattoo_39.jpg +- data/imagenet-r/n07614500/sketch_1.jpg +- data/imagenet-r/n01632777/deviantart_18.jpg +- data/imagenet-r/n02793495/embroidery_2.jpg +- data/imagenet-r/n02091134/misc_43.jpg +- data/imagenet-r/n02110958/tattoo_3.jpg +- data/imagenet-r/n07753275/painting_17.jpg +- data/imagenet-r/n01748264/sketch_22.jpg +- data/imagenet-r/n02109525/misc_15.jpg +- data/imagenet-r/n02129604/painting_8.jpg +- data/imagenet-r/n02219486/sketch_15.jpg +- data/imagenet-r/n02526121/painting_8.jpg +- data/imagenet-r/n02510455/deviantart_14.jpg +- data/imagenet-r/n10565667/videogame_0.jpg +- data/imagenet-r/n01784675/sketch_21.jpg +- data/imagenet-r/n02410509/art_3.jpg +- data/imagenet-r/n04536866/deviantart_18.jpg +- data/imagenet-r/n07745940/sticker_1.jpg +- data/imagenet-r/n02808440/art_4.jpg +- data/imagenet-r/n02843684/sketch_18.jpg +- data/imagenet-r/n02219486/misc_6.jpg +- data/imagenet-r/n07745940/sketch_21.jpg +- data/imagenet-r/n03494278/cartoon_0.jpg +- data/imagenet-r/n04325704/toy_0.jpg +- data/imagenet-r/n02071294/cartoon_2.jpg +- data/imagenet-r/n01944390/misc_26.jpg +- data/imagenet-r/n02110958/painting_48.jpg +- data/imagenet-r/n02655020/misc_37.jpg +- data/imagenet-r/n02480495/art_12.jpg +- data/imagenet-r/n02445715/painting_4.jpg +- data/imagenet-r/n02797295/misc_22.jpg +- data/imagenet-r/n01910747/videogame_2.jpg +- data/imagenet-r/n02510455/misc_25.jpg +- data/imagenet-r/n09835506/sketch_11.jpg +- data/imagenet-r/n02233338/sketch_0.jpg +- data/imagenet-r/n01843383/art_10.jpg +- data/imagenet-r/n02007558/graphic_14.jpg +- data/imagenet-r/n01855672/misc_5.jpg +- data/imagenet-r/n02119022/misc_24.jpg +- data/imagenet-r/n02129604/sketch_22.jpg +- data/imagenet-r/n02437616/origami_5.jpg +- data/imagenet-r/n01694178/tattoo_14.jpg +- data/imagenet-r/n02130308/toy_8.jpg +- data/imagenet-r/n02138441/painting_34.jpg +- data/imagenet-r/n03124170/tattoo_7.jpg +- data/imagenet-r/n02096585/sketch_13.jpg +- data/imagenet-r/n03498962/art_4.jpg +- data/imagenet-r/n02088094/misc_51.jpg +- data/imagenet-r/n02071294/cartoon_14.jpg +- data/imagenet-r/n02051845/origami_0.jpg +- data/imagenet-r/n02106662/misc_80.jpg +- data/imagenet-r/n03676483/sketch_18.jpg +- data/imagenet-r/n02841315/sculpture_12.jpg +- data/imagenet-r/n02129165/tattoo_9.jpg +- data/imagenet-r/n03775071/cartoon_21.jpg +- data/imagenet-r/n02480855/cartoon_3.jpg +- data/imagenet-r/n04465501/deviantart_9.jpg +- data/imagenet-r/n02410509/painting_8.jpg +- data/imagenet-r/n02096585/misc_56.jpg +- data/imagenet-r/n02129165/deviantart_14.jpg +- data/imagenet-r/n02486410/cartoon_28.jpg +- data/imagenet-r/n04347754/painting_9.jpg +- data/imagenet-r/n02165456/cartoon_16.jpg +- data/imagenet-r/n07745940/graffiti_26.jpg +- data/imagenet-r/n02909870/cartoon_34.jpg +- data/imagenet-r/n02129165/misc_10.jpg +- data/imagenet-r/n04347754/tattoo_0.jpg +- data/imagenet-r/n04465501/painting_12.jpg +- data/imagenet-r/n02110958/sculpture_0.jpg +- data/imagenet-r/n02398521/painting_18.jpg +- data/imagenet-r/n02138441/painting_3.jpg +- data/imagenet-r/n02233338/misc_3.jpg +- data/imagenet-r/n02363005/cartoon_1.jpg +- data/imagenet-r/n02966193/painting_10.jpg +- data/imagenet-r/n03272010/misc_4.jpg +- data/imagenet-r/n02106030/painting_16.jpg +- data/imagenet-r/n01514859/deviantart_28.jpg +- data/imagenet-r/n02236044/cartoon_42.jpg +- data/imagenet-r/n02098286/misc_49.jpg +- data/imagenet-r/n02395406/origami_3.jpg +- data/imagenet-r/n03947888/tattoo_21.jpg +- data/imagenet-r/n02130308/tattoo_15.jpg +- data/imagenet-r/n02363005/art_8.jpg +- data/imagenet-r/n04141076/tattoo_1.jpg +- data/imagenet-r/n01494475/misc_54.jpg +- data/imagenet-r/n02110958/sketch_6.jpg +- data/imagenet-r/n02950826/videogame_6.jpg +- data/imagenet-r/n01616318/painting_11.jpg +- data/imagenet-r/n02099601/sketch_5.jpg +- data/imagenet-r/n01484850/tattoo_10.jpg +- data/imagenet-r/n02129165/deviantart_11.jpg +- data/imagenet-r/n01518878/embroidery_0.jpg +- data/imagenet-r/n01882714/tattoo_27.jpg +- data/imagenet-r/n02165456/tattoo_60.jpg +- data/imagenet-r/n02364673/sculpture_1.jpg +- data/imagenet-r/n04409515/sculpture_1.jpg +- data/imagenet-r/n04275548/sketch_2.jpg +- data/imagenet-r/n02007558/misc_23.jpg +- data/imagenet-r/n02119022/misc_128.jpg +- data/imagenet-r/n02110958/cartoon_24.jpg +- data/imagenet-r/n03124170/misc_3.jpg +- data/imagenet-r/n01833805/cartoon_3.jpg +- data/imagenet-r/n07753275/painting_8.jpg +- data/imagenet-r/n03345487/sketch_4.jpg +- data/imagenet-r/n01843383/deviantart_73.jpg +- data/imagenet-r/n04465501/videogame_19.jpg +- data/imagenet-r/n10565667/sketch_11.jpg +- data/imagenet-r/n10565667/sculpture_2.jpg +- data/imagenet-r/n02206856/art_5.jpg +- data/imagenet-r/n01833805/painting_14.jpg +- data/imagenet-r/n07720875/sketch_17.jpg +- data/imagenet-r/n02236044/origami_17.jpg +- data/imagenet-r/n04325704/deviantart_2.jpg +- data/imagenet-r/n04310018/cartoon_0.jpg +- data/imagenet-r/n02110958/embroidery_4.jpg +- data/imagenet-r/n02769748/cartoon_2.jpg +- data/imagenet-r/n07749582/painting_15.jpg +- data/imagenet-r/n03481172/cartoon_7.jpg +- data/imagenet-r/n02445715/graphic_2.jpg +- data/imagenet-r/n01833805/painting_25.jpg +- data/imagenet-r/n03594945/misc_1.jpg +- data/imagenet-r/n01748264/tattoo_31.jpg +- data/imagenet-r/n02007558/tattoo_50.jpg +- data/imagenet-r/n03710193/misc_28.jpg +- data/imagenet-r/n01770393/cartoon_23.jpg +- data/imagenet-r/n02110958/cartoon_46.jpg +- data/imagenet-r/n01694178/graffiti_4.jpg +- data/imagenet-r/n07745940/painting_14.jpg +- data/imagenet-r/n02119022/misc_93.jpg +- data/imagenet-r/n01518878/cartoon_25.jpg +- data/imagenet-r/n02106550/tattoo_10.jpg +- data/imagenet-r/n02071294/sticker_2.jpg +- data/imagenet-r/n01944390/misc_90.jpg +- data/imagenet-r/n02346627/painting_13.jpg +- data/imagenet-r/n02480855/painting_13.jpg +- data/imagenet-r/n02077923/misc_13.jpg +- data/imagenet-r/n01910747/tattoo_62.jpg +- data/imagenet-r/n02445715/sculpture_0.jpg +- data/imagenet-r/n04389033/origami_2.jpg +- data/imagenet-r/n03424325/videogame_8.jpg +- data/imagenet-r/n02096585/misc_155.jpg +- data/imagenet-r/n01484850/origami_6.jpg +- data/imagenet-r/n03424325/misc_22.jpg +- data/imagenet-r/n01498041/cartoon_12.jpg +- data/imagenet-r/n02085620/misc_58.jpg +- data/imagenet-r/n01983481/videogame_0.jpg +- data/imagenet-r/n02883205/origami_2.jpg +- data/imagenet-r/n02051845/sculpture_6.jpg +- data/imagenet-r/n02317335/sculpture_7.jpg +- data/imagenet-r/n04347754/tattoo_10.jpg +- data/imagenet-r/n09835506/deviantart_30.jpg +- data/imagenet-r/n03773504/deviantart_0.jpg +- data/imagenet-r/n02279972/art_16.jpg +- data/imagenet-r/n02110958/art_8.jpg +- data/imagenet-r/n01644373/tattoo_6.jpg +- data/imagenet-r/n02948072/cartoon_66.jpg +- data/imagenet-r/n02655020/misc_84.jpg +- data/imagenet-r/n03424325/sketch_10.jpg +- data/imagenet-r/n03710193/misc_34.jpg +- data/imagenet-r/n04192698/sketch_5.jpg +- data/imagenet-r/n02437616/graffiti_5.jpg +- data/imagenet-r/n03372029/deviantart_3.jpg +- data/imagenet-r/n02113023/sketch_2.jpg +- data/imagenet-r/n03452741/art_0.jpg +- data/imagenet-r/n01847000/tattoo_22.jpg +- data/imagenet-r/n03498962/painting_1.jpg +- data/imagenet-r/n02129604/graphic_3.jpg +- data/imagenet-r/n03424325/misc_38.jpg +- data/imagenet-r/n01910747/embroidery_14.jpg +- data/imagenet-r/n04389033/toy_1.jpg +- data/imagenet-r/n02007558/misc_0.jpg +- data/imagenet-r/n01784675/tattoo_1.jpg +- data/imagenet-r/n07718472/cartoon_5.jpg +- data/imagenet-r/n02843684/cartoon_3.jpg +- data/imagenet-r/n01774750/sketch_8.jpg +- data/imagenet-r/n02980441/art_1.jpg +- data/imagenet-r/n04254680/misc_15.jpg +- data/imagenet-r/n02206856/cartoon_62.jpg +- data/imagenet-r/n02128757/sketch_11.jpg +- data/imagenet-r/n02123045/sculpture_7.jpg +- data/imagenet-r/n04266014/sketch_14.jpg +- data/imagenet-r/n02410509/misc_0.jpg +- data/imagenet-r/n02423022/misc_1.jpg +- data/imagenet-r/n01531178/misc_4.jpg +- data/imagenet-r/n02009912/misc_49.jpg +- data/imagenet-r/n02088466/misc_1.jpg +- data/imagenet-r/n02526121/cartoon_25.jpg +- data/imagenet-r/n02102318/graphic_2.jpg +- data/imagenet-r/n07873807/deviantart_18.jpg +- data/imagenet-r/n02098286/misc_17.jpg +- data/imagenet-r/n02951358/sketch_15.jpg +- data/imagenet-r/n02445715/cartoon_1.jpg +- data/imagenet-r/n01882714/toy_14.jpg +- data/imagenet-r/n07697537/misc_10.jpg +- data/imagenet-r/n02445715/cartoon_5.jpg +- data/imagenet-r/n10565667/sketch_17.jpg +- data/imagenet-r/n02480855/sculpture_6.jpg +- data/imagenet-r/n01518878/cartoon_4.jpg +- data/imagenet-r/n02236044/toy_0.jpg +- data/imagenet-r/n04141076/sculpture_20.jpg +- data/imagenet-r/n04141076/tattoo_0.jpg +- data/imagenet-r/n04146614/cartoon_2.jpg +- data/imagenet-r/n02206856/graffiti_22.jpg +- data/imagenet-r/n04465501/cartoon_8.jpg +- data/imagenet-r/n07753592/misc_99.jpg +- data/imagenet-r/n01694178/deviantart_3.jpg +- data/imagenet-r/n02091134/sketch_1.jpg +- data/imagenet-r/n02051845/toy_1.jpg +- data/imagenet-r/n02481823/graffiti_1.jpg +- data/imagenet-r/n01514859/painting_36.jpg +- data/imagenet-r/n03272010/deviantart_20.jpg +- data/imagenet-r/n02110958/tattoo_15.jpg +- data/imagenet-r/n02268443/misc_0.jpg +- data/imagenet-r/n03272010/art_7.jpg +- data/imagenet-r/n02110958/graffiti_4.jpg +- data/imagenet-r/n07734744/embroidery_22.jpg +- data/imagenet-r/n02423022/art_7.jpg +- data/imagenet-r/n02398521/videogame_6.jpg +- data/imagenet-r/n01774750/origami_20.jpg +- data/imagenet-r/n01944390/misc_112.jpg +- data/imagenet-r/n02110958/cartoon_70.jpg +- data/imagenet-r/n02948072/cartoon_19.jpg +- data/imagenet-r/n02096585/misc_133.jpg +- data/imagenet-r/n03481172/toy_14.jpg +- data/imagenet-r/n03124170/graffiti_5.jpg +- data/imagenet-r/n02363005/toy_6.jpg +- data/imagenet-r/n04465501/cartoon_18.jpg +- data/imagenet-r/n01514859/deviantart_37.jpg +- data/imagenet-r/n04389033/sketch_21.jpg +- data/imagenet-r/n02391049/sketch_22.jpg +- data/imagenet-r/n02077923/misc_10.jpg +- data/imagenet-r/n01820546/deviantart_3.jpg +- data/imagenet-r/n03775071/embroidery_0.jpg +- data/imagenet-r/n01833805/art_1.jpg +- data/imagenet-r/n09835506/misc_7.jpg +- data/imagenet-r/n02113799/sketch_0.jpg +- data/imagenet-r/n02096585/misc_102.jpg +- data/imagenet-r/n03594945/videogame_17.jpg +- data/imagenet-r/n01784675/sketch_0.jpg +- data/imagenet-r/n07745940/origami_7.jpg +- data/imagenet-r/n02165456/tattoo_17.jpg +- data/imagenet-r/n02236044/sketch_14.jpg +- data/imagenet-r/n02317335/embroidery_5.jpg +- data/imagenet-r/n01784675/tattoo_15.jpg +- data/imagenet-r/n02129604/toy_0.jpg +- data/imagenet-r/n02843684/misc_8.jpg +- data/imagenet-r/n02071294/videogame_4.jpg +- data/imagenet-r/n02395406/embroidery_0.jpg +- data/imagenet-r/n02113023/misc_30.jpg +- data/imagenet-r/n02096585/sketch_19.jpg +- data/imagenet-r/n02134084/misc_26.jpg +- data/imagenet-r/n02094433/sketch_7.jpg +- data/imagenet-r/n01882714/cartoon_7.jpg +- data/imagenet-r/n02108089/misc_33.jpg +- data/imagenet-r/n02108915/tattoo_10.jpg +- data/imagenet-r/n03345487/videogame_17.jpg +- data/imagenet-r/n02437616/sticker_2.jpg +- data/imagenet-r/n02480855/tattoo_16.jpg +- data/imagenet-r/n02099601/misc_69.jpg +- data/imagenet-r/n02607072/misc_77.jpg +- data/imagenet-r/n02110185/painting_43.jpg +- data/imagenet-r/n02823750/toy_0.jpg +- data/imagenet-r/n01833805/painting_29.jpg +- data/imagenet-r/n04487394/cartoon_2.jpg +- data/imagenet-r/n02268443/sketch_16.jpg +- data/imagenet-r/n02808440/sketch_17.jpg +- data/imagenet-r/n02486410/sculpture_18.jpg +- data/imagenet-r/n02980441/videogame_27.jpg +- data/imagenet-r/n12267677/sketch_0.jpg +- data/imagenet-r/n03498962/deviantart_3.jpg +- data/imagenet-r/n02814860/origami_3.jpg +- data/imagenet-r/n04275548/sketch_3.jpg +- data/imagenet-r/n02007558/cartoon_41.jpg +- data/imagenet-r/n02165456/tattoo_19.jpg +- data/imagenet-r/n01484850/art_0.jpg +- data/imagenet-r/n02056570/deviantart_6.jpg +- data/imagenet-r/n04141076/painting_31.jpg +- data/imagenet-r/n02480495/painting_2.jpg +- data/imagenet-r/n01784675/sticker_0.jpg +- data/imagenet-r/n02423022/cartoon_6.jpg +- data/imagenet-r/n02219486/graphic_4.jpg +- data/imagenet-r/n01484850/toy_3.jpg +- data/imagenet-r/n07695742/embroidery_3.jpg +- data/imagenet-r/n02110958/painting_28.jpg +- data/imagenet-r/n04552348/misc_2.jpg +- data/imagenet-r/n02793495/embroidery_0.jpg +- data/imagenet-r/n04347754/cartoon_4.jpg +- data/imagenet-r/n02906734/cartoon_50.jpg +- data/imagenet-r/n02236044/cartoon_19.jpg +- data/imagenet-r/n02655020/videogame_3.jpg +- data/imagenet-r/n01531178/deviantart_2.jpg +- data/imagenet-r/n01784675/misc_1.jpg +- data/imagenet-r/n01770393/sculpture_2.jpg +- data/imagenet-r/n04275548/sketch_0.jpg +- data/imagenet-r/n01677366/sketch_9.jpg +- data/imagenet-r/n04275548/misc_8.jpg +- data/imagenet-r/n01614925/tattoo_4.jpg +- data/imagenet-r/n01614925/misc_0.jpg +- data/imagenet-r/n02363005/art_6.jpg +- data/imagenet-r/n02110185/cartoon_12.jpg +- data/imagenet-r/n02233338/sketch_20.jpg +- data/imagenet-r/n07697537/misc_77.jpg +- data/imagenet-r/n07745940/painting_13.jpg +- data/imagenet-r/n02808440/art_1.jpg +- data/imagenet-r/n02233338/misc_17.jpg +- data/imagenet-r/n04522168/sketch_12.jpg +- data/imagenet-r/n01770393/tattoo_9.jpg +- data/imagenet-r/n02112137/misc_30.jpg +- data/imagenet-r/n04487394/sketch_1.jpg +- data/imagenet-r/n02098286/sketch_9.jpg +- data/imagenet-r/n02480855/toy_13.jpg +- data/imagenet-r/n01882714/art_14.jpg +- data/imagenet-r/n01494475/misc_139.jpg +- data/imagenet-r/n02236044/cartoon_40.jpg +- data/imagenet-r/n02814860/videogame_16.jpg +- data/imagenet-r/n04465501/graffiti_1.jpg +- data/imagenet-r/n01944390/misc_43.jpg +- data/imagenet-r/n03930630/sketch_11.jpg +- data/imagenet-r/n07873807/sketch_21.jpg +- data/imagenet-r/n01518878/cartoon_7.jpg +- data/imagenet-r/n01820546/sketch_13.jpg +- data/imagenet-r/n04325704/graffiti_0.jpg +- data/imagenet-r/n03124170/sticker_2.jpg +- data/imagenet-r/n07695742/misc_8.jpg +- data/imagenet-r/n01531178/cartoon_8.jpg +- data/imagenet-r/n02112018/misc_0.jpg +- data/imagenet-r/n02071294/painting_15.jpg +- data/imagenet-r/n01882714/cartoon_41.jpg +- data/imagenet-r/n07880968/cartoon_0.jpg +- data/imagenet-r/n02672831/cartoon_15.jpg +- data/imagenet-r/n02138441/graffiti_6.jpg +- data/imagenet-r/n02486410/cartoon_3.jpg +- data/imagenet-r/n07714990/sketch_21.jpg +- data/imagenet-r/n02317335/tattoo_33.jpg +- data/imagenet-r/n03888257/sketch_5.jpg +- data/imagenet-r/n02437616/tattoo_1.jpg +- data/imagenet-r/n03710193/misc_38.jpg +- data/imagenet-r/n04536866/sketch_7.jpg +- data/imagenet-r/n07745940/sticker_12.jpg +- data/imagenet-r/n01644373/cartoon_20.jpg +- data/imagenet-r/n01833805/tattoo_39.jpg +- data/imagenet-r/n02607072/deviantart_21.jpg +- data/imagenet-r/n02607072/misc_111.jpg +- data/imagenet-r/n02099712/sketch_1.jpg +- data/imagenet-r/n07697537/deviantart_15.jpg +- data/imagenet-r/n01632777/deviantart_29.jpg +- data/imagenet-r/n10565667/videogame_24.jpg +- data/imagenet-r/n01833805/embroidery_3.jpg +- data/imagenet-r/n02108089/misc_45.jpg +- data/imagenet-r/n02398521/tattoo_4.jpg +- data/imagenet-r/n04552348/sketch_11.jpg +- data/imagenet-r/n01774750/videogame_3.jpg +- data/imagenet-r/n04552348/painting_7.jpg +- data/imagenet-r/n02007558/tattoo_24.jpg +- data/imagenet-r/n01531178/tattoo_2.jpg +- data/imagenet-r/n02364673/cartoon_23.jpg +- data/imagenet-r/n02423022/cartoon_3.jpg +- data/imagenet-r/n02106550/tattoo_7.jpg +- data/imagenet-r/n02437616/deviantart_4.jpg +- data/imagenet-r/n02219486/sketch_7.jpg +- data/imagenet-r/n01820546/deviantart_24.jpg +- data/imagenet-r/n02091134/misc_51.jpg +- data/imagenet-r/n02007558/tattoo_12.jpg +- data/imagenet-r/n01910747/painting_30.jpg +- data/imagenet-r/n02129165/deviantart_24.jpg +- data/imagenet-r/n07749582/painting_40.jpg +- data/imagenet-r/n04086273/tattoo_3.jpg +- data/imagenet-r/n09472597/origami_0.jpg +- data/imagenet-r/n03372029/painting_15.jpg +- data/imagenet-r/n07697537/misc_18.jpg +- data/imagenet-r/n07697313/art_22.jpg +- data/imagenet-r/n02526121/cartoon_12.jpg +- data/imagenet-r/n01944390/misc_13.jpg +- data/imagenet-r/n07718472/toy_4.jpg +- data/imagenet-r/n02951358/sketch_6.jpg +- data/imagenet-r/n01614925/sculpture_8.jpg +- data/imagenet-r/n07697537/videogame_0.jpg +- data/imagenet-r/n03272010/origami_3.jpg +- data/imagenet-r/n02398521/toy_8.jpg +- data/imagenet-r/n04389033/graffiti_4.jpg +- data/imagenet-r/n02110341/misc_40.jpg +- data/imagenet-r/n03710193/misc_51.jpg +- data/imagenet-r/n01443537/videogame_2.jpg +- data/imagenet-r/n07920052/cartoon_22.jpg +- data/imagenet-r/n01855672/painting_6.jpg +- data/imagenet-r/n01514859/deviantart_36.jpg +- data/imagenet-r/n02007558/sticker_1.jpg +- data/imagenet-r/n04347754/cartoon_3.jpg +- data/imagenet-r/n03272010/sketch_3.jpg +- data/imagenet-r/n07714990/deviantart_0.jpg +- data/imagenet-r/n02672831/graffiti_3.jpg +- data/imagenet-r/n01847000/tattoo_25.jpg +- data/imagenet-r/n04254680/graphic_7.jpg +- data/imagenet-r/n01833805/embroidery_6.jpg +- data/imagenet-r/n03888257/sketch_0.jpg +- data/imagenet-r/n04522168/cartoon_20.jpg +- data/imagenet-r/n01484850/deviantart_22.jpg +- data/imagenet-r/n02128757/painting_16.jpg +- data/imagenet-r/n04266014/toy_3.jpg +- data/imagenet-r/n02226429/sculpture_8.jpg +- data/imagenet-r/n02395406/toy_3.jpg +- data/imagenet-r/n02007558/graphic_1.jpg +- data/imagenet-r/n04141076/painting_26.jpg +- data/imagenet-r/n04409515/sculpture_2.jpg +- data/imagenet-r/n02092339/misc_4.jpg +- data/imagenet-r/n12267677/misc_101.jpg +- data/imagenet-r/n04522168/sketch_22.jpg +- data/imagenet-r/n04086273/misc_0.jpg +- data/imagenet-r/n02114367/misc_64.jpg +- data/imagenet-r/n07753275/painting_9.jpg +- data/imagenet-r/n01855672/sketch_22.jpg +- data/imagenet-r/n01843383/cartoon_31.jpg +- data/imagenet-r/n02510455/deviantart_26.jpg +- data/imagenet-r/n02108089/misc_40.jpg +- data/imagenet-r/n01694178/sculpture_4.jpg +- data/imagenet-r/n07697537/misc_111.jpg +- data/imagenet-r/n07693725/cartoon_31.jpg +- data/imagenet-r/n02097298/sketch_8.jpg +- data/imagenet-r/n02094433/sketch_16.jpg +- data/imagenet-r/n02108915/misc_125.jpg +- data/imagenet-r/n01531178/cartoon_31.jpg +- data/imagenet-r/n02445715/toy_11.jpg +- data/imagenet-r/n02526121/sketch_5.jpg +- data/imagenet-r/n02110958/sketch_10.jpg +- data/imagenet-r/n02808440/sketch_22.jpg +- data/imagenet-r/n07720875/painting_17.jpg +- data/imagenet-r/n02206856/misc_17.jpg +- data/imagenet-r/n02086240/misc_16.jpg +- data/imagenet-r/n04254680/art_2.jpg +- data/imagenet-r/n04254680/art_1.jpg +- data/imagenet-r/n07753275/art_8.jpg +- data/imagenet-r/n03930630/sketch_22.jpg +- data/imagenet-r/n01986214/deviantart_17.jpg +- data/imagenet-r/n02098286/sketch_5.jpg +- data/imagenet-r/n02129165/sketch_12.jpg +- data/imagenet-r/n02909870/art_1.jpg +- data/imagenet-r/n01531178/sketch_3.jpg +- data/imagenet-r/n02007558/tattoo_4.jpg +- data/imagenet-r/n07697537/sketch_9.jpg +- data/imagenet-r/n02906734/cartoon_49.jpg +- data/imagenet-r/n02123045/sculpture_1.jpg +- data/imagenet-r/n02123045/embroidery_0.jpg +- data/imagenet-r/n02085620/misc_85.jpg +- data/imagenet-r/n02088466/sketch_20.jpg +- data/imagenet-r/n07734744/embroidery_10.jpg +- data/imagenet-r/n03424325/misc_37.jpg +- data/imagenet-r/n03888257/art_7.jpg +- data/imagenet-r/n07695742/cartoon_0.jpg +- data/imagenet-r/n02110341/misc_3.jpg +- data/imagenet-r/n03124170/sketch_22.jpg +- data/imagenet-r/n04522168/cartoon_13.jpg +- data/imagenet-r/n01644373/painting_26.jpg +- data/imagenet-r/n02226429/sculpture_17.jpg +- data/imagenet-r/n09472597/toy_10.jpg +- data/imagenet-r/n01843383/sketch_4.jpg +- data/imagenet-r/n03124170/cartoon_68.jpg +- data/imagenet-r/n02088238/misc_11.jpg +- data/imagenet-r/n02672831/sculpture_4.jpg +- data/imagenet-r/n04192698/painting_0.jpg +- data/imagenet-r/n02486410/sculpture_17.jpg +- data/imagenet-r/n02226429/sketch_12.jpg +- data/imagenet-r/n02123045/painting_52.jpg +- data/imagenet-r/n03602883/misc_15.jpg +- data/imagenet-r/n01694178/tattoo_8.jpg +- data/imagenet-r/n02128757/art_11.jpg +- data/imagenet-r/n07697313/sketch_11.jpg +- data/imagenet-r/n04310018/videogame_30.jpg +- data/imagenet-r/n09835506/videogame_27.jpg +- data/imagenet-r/n04146614/cartoon_3.jpg +- data/imagenet-r/n01484850/toy_14.jpg +- data/imagenet-r/n02655020/misc_89.jpg +- data/imagenet-r/n02749479/cartoon_1.jpg +- data/imagenet-r/n02268443/misc_61.jpg +- data/imagenet-r/n02051845/tattoo_0.jpg +- data/imagenet-r/n02948072/cartoon_79.jpg +- data/imagenet-r/n02236044/origami_4.jpg +- data/imagenet-r/n02096585/misc_27.jpg +- data/imagenet-r/n02007558/tattoo_30.jpg +- data/imagenet-r/n02091134/misc_82.jpg +- data/imagenet-r/n07697313/cartoon_16.jpg +- data/imagenet-r/n03272010/painting_11.jpg +- data/imagenet-r/n03676483/misc_0.jpg +- data/imagenet-r/n02510455/misc_138.jpg +- data/imagenet-r/n03481172/deviantart_8.jpg +- data/imagenet-r/n01531178/cartoon_11.jpg +- data/imagenet-r/n02165456/toy_39.jpg +- data/imagenet-r/n02480855/toy_12.jpg +- data/imagenet-r/n04192698/videogame_9.jpg +- data/imagenet-r/n01443537/cartoon_17.jpg +- data/imagenet-r/n02117135/tattoo_3.jpg +- data/imagenet-r/n01531178/art_22.jpg +- data/imagenet-r/n02117135/painting_1.jpg +- data/imagenet-r/n01694178/painting_7.jpg +- data/imagenet-r/n04409515/videogame_2.jpg +- data/imagenet-r/n01882714/misc_2.jpg +- data/imagenet-r/n01534433/painting_1.jpg +- data/imagenet-r/n02526121/sketch_4.jpg +- data/imagenet-r/n02110958/cartoon_62.jpg +- data/imagenet-r/n04591713/deviantart_7.jpg +- data/imagenet-r/n02134084/misc_57.jpg +- data/imagenet-r/n07753592/sketch_14.jpg +- data/imagenet-r/n02077923/sketch_9.jpg +- data/imagenet-r/n01986214/origami_14.jpg +- data/imagenet-r/n02398521/sculpture_9.jpg +- data/imagenet-r/n02206856/videogame_2.jpg +- data/imagenet-r/n04086273/cartoon_5.jpg +- data/imagenet-r/n03452741/toy_1.jpg +- data/imagenet-r/n02138441/painting_26.jpg +- data/imagenet-r/n03452741/toy_2.jpg +- data/imagenet-r/n07753592/misc_51.jpg +- data/imagenet-r/n07697313/sketch_18.jpg +- data/imagenet-r/n02236044/tattoo_25.jpg +- data/imagenet-r/n02092339/sketch_17.jpg +- data/imagenet-r/n02114367/misc_56.jpg +- data/imagenet-r/n02672831/sticker_7.jpg +- data/imagenet-r/n02841315/sketch_17.jpg +- data/imagenet-r/n07753592/sketch_9.jpg +- data/imagenet-r/n02948072/sketch_10.jpg +- data/imagenet-r/n02480495/sketch_21.jpg +- data/imagenet-r/n04591713/sketch_0.jpg +- data/imagenet-r/n04487394/sketch_7.jpg +- data/imagenet-r/n03124170/toy_19.jpg +- data/imagenet-r/n02391049/misc_108.jpg +- data/imagenet-r/n02206856/sketch_1.jpg +- data/imagenet-r/n01484850/deviantart_12.jpg +- data/imagenet-r/n01694178/sketch_5.jpg +- data/imagenet-r/n02077923/misc_40.jpg +- data/imagenet-r/n02123045/cartoon_4.jpg +- data/imagenet-r/n03424325/videogame_30.jpg +- data/imagenet-r/n02129604/tattoo_8.jpg +- data/imagenet-r/n02108915/sketch_10.jpg +- data/imagenet-r/n07734744/graffiti_7.jpg +- data/imagenet-r/n04147183/painting_12.jpg +- data/imagenet-r/n01944390/tattoo_22.jpg +- data/imagenet-r/n02106662/sketch_11.jpg +- data/imagenet-r/n02437616/deviantart_17.jpg +- data/imagenet-r/n02110185/cartoon_2.jpg +- data/imagenet-r/n02317335/painting_9.jpg +- data/imagenet-r/n01910747/tattoo_67.jpg +- data/imagenet-r/n02114367/misc_3.jpg +- data/imagenet-r/n04522168/graphic_0.jpg +- data/imagenet-r/n03124170/cartoon_64.jpg +- data/imagenet-r/n02948072/sketch_21.jpg +- data/imagenet-r/n01518878/cartoon_55.jpg +- data/imagenet-r/n02948072/cartoon_56.jpg +- data/imagenet-r/n02129165/toy_30.jpg +- data/imagenet-r/n02130308/cartoon_12.jpg +- data/imagenet-r/n07745940/toy_4.jpg +- data/imagenet-r/n02906734/cartoon_27.jpg +- data/imagenet-r/n01860187/cartoon_5.jpg +- data/imagenet-r/n01644373/sketch_23.jpg +- data/imagenet-r/n01694178/art_6.jpg +- data/imagenet-r/n02363005/cartoon_10.jpg +- data/imagenet-r/n02071294/tattoo_18.jpg +- data/imagenet-r/n02119022/misc_17.jpg +- data/imagenet-r/n03424325/sketch_21.jpg +- data/imagenet-r/n02110341/sketch_19.jpg +- data/imagenet-r/n03947888/tattoo_16.jpg +- data/imagenet-r/n04146614/deviantart_11.jpg +- data/imagenet-r/n03630383/cartoon_23.jpg +- data/imagenet-r/n02113023/sketch_19.jpg +- data/imagenet-r/n01986214/painting_4.jpg +- data/imagenet-r/n07749582/painting_10.jpg +- data/imagenet-r/n02480495/toy_1.jpg +- data/imagenet-r/n03481172/sculpture_4.jpg +- data/imagenet-r/n02206856/cartoon_6.jpg +- data/imagenet-r/n02051845/sketch_18.jpg +- data/imagenet-r/n03775071/cartoon_19.jpg +- data/imagenet-r/n02510455/misc_88.jpg +- data/imagenet-r/n07718472/misc_0.jpg +- data/imagenet-r/n02099601/misc_84.jpg +- data/imagenet-r/n04141076/cartoon_35.jpg +- data/imagenet-r/n01616318/painting_12.jpg +- data/imagenet-r/n07745940/origami_14.jpg +- data/imagenet-r/n02114367/sketch_11.jpg +- data/imagenet-r/n02939185/sketch_0.jpg +- data/imagenet-r/n01770393/cartoon_5.jpg +- data/imagenet-r/n01632777/toy_20.jpg +- data/imagenet-r/n07734744/art_15.jpg +- data/imagenet-r/n02423022/sketch_14.jpg +- data/imagenet-r/n02939185/sketch_2.jpg +- data/imagenet-r/n02948072/cartoon_44.jpg +- data/imagenet-r/n02106030/sketch_14.jpg +- data/imagenet-r/n02480495/sculpture_5.jpg +- data/imagenet-r/n02094433/misc_4.jpg +- data/imagenet-r/n01514859/deviantart_39.jpg +- data/imagenet-r/n02007558/cartoon_24.jpg +- data/imagenet-r/n01616318/cartoon_20.jpg +- data/imagenet-r/n02096585/videogame_2.jpg +- data/imagenet-r/n02966193/cartoon_18.jpg +- data/imagenet-r/n02066245/painting_6.jpg +- data/imagenet-r/n04552348/videogame_7.jpg +- data/imagenet-r/n03495258/cartoon_10.jpg +- data/imagenet-r/n02749479/misc_22.jpg +- data/imagenet-r/n02797295/sketch_4.jpg +- data/imagenet-r/n01518878/graffiti_1.jpg +- data/imagenet-r/n02098286/misc_43.jpg +- data/imagenet-r/n04310018/toy_19.jpg +- data/imagenet-r/n09835506/misc_32.jpg +- data/imagenet-r/n07873807/deviantart_39.jpg +- data/imagenet-r/n01774750/deviantart_12.jpg +- data/imagenet-r/n03372029/deviantart_5.jpg +- data/imagenet-r/n02112137/misc_29.jpg +- data/imagenet-r/n02966193/cartoon_19.jpg +- data/imagenet-r/n03676483/cartoon_6.jpg +- data/imagenet-r/n04347754/painting_2.jpg +- data/imagenet-r/n02655020/misc_90.jpg +- data/imagenet-r/n01498041/sketch_11.jpg +- data/imagenet-r/n01910747/tattoo_50.jpg +- data/imagenet-r/n03494278/cartoon_16.jpg +- data/imagenet-r/n02094433/misc_45.jpg +- data/imagenet-r/n02112018/misc_21.jpg +- data/imagenet-r/n02206856/embroidery_12.jpg +- data/imagenet-r/n03494278/cartoon_13.jpg +- data/imagenet-r/n07714990/cartoon_7.jpg +- data/imagenet-r/n02226429/sketch_17.jpg +- data/imagenet-r/n02948072/cartoon_68.jpg +- data/imagenet-r/n04310018/painting_39.jpg +- data/imagenet-r/n02447366/misc_4.jpg +- data/imagenet-r/n07734744/graffiti_19.jpg +- data/imagenet-r/n02906734/misc_4.jpg +- data/imagenet-r/n04310018/art_2.jpg +- data/imagenet-r/n03372029/graffiti_4.jpg +- data/imagenet-r/n02219486/tattoo_24.jpg +- data/imagenet-r/n04086273/tattoo_48.jpg +- data/imagenet-r/n01748264/tattoo_36.jpg +- data/imagenet-r/n02480855/sculpture_2.jpg +- data/imagenet-r/n02769748/embroidery_1.jpg +- data/imagenet-r/n02129165/painting_3.jpg +- data/imagenet-r/n02701002/videogame_1.jpg +- data/imagenet-r/n02009912/sketch_21.jpg +- data/imagenet-r/n04389033/origami_12.jpg +- data/imagenet-r/n02398521/art_15.jpg +- data/imagenet-r/n02165456/tattoo_10.jpg +- data/imagenet-r/n02883205/toy_5.jpg +- data/imagenet-r/n02129165/deviantart_30.jpg +- data/imagenet-r/n02481823/sculpture_14.jpg +- data/imagenet-r/n01833805/tattoo_33.jpg +- data/imagenet-r/n02206856/graffiti_29.jpg +- data/imagenet-r/n02110341/misc_141.jpg +- data/imagenet-r/n04389033/sticker_4.jpg +- data/imagenet-r/n02206856/graffiti_20.jpg +- data/imagenet-r/n01910747/videogame_1.jpg +- data/imagenet-r/n01784675/origami_3.jpg +- data/imagenet-r/n07745940/sketch_13.jpg +- data/imagenet-r/n03345487/toy_19.jpg +- data/imagenet-r/n04146614/videogame_2.jpg +- data/imagenet-r/n02071294/painting_9.jpg +- data/imagenet-r/n02129165/tattoo_45.jpg +- data/imagenet-r/n02129165/painting_6.jpg +- data/imagenet-r/n02395406/sketch_5.jpg +- data/imagenet-r/n03481172/videogame_6.jpg +- data/imagenet-r/n02096585/misc_140.jpg +- data/imagenet-r/n07695742/cartoon_13.jpg +- data/imagenet-r/n04389033/graffiti_5.jpg +- data/imagenet-r/n04118538/videogame_13.jpg +- data/imagenet-r/n07693725/cartoon_22.jpg +- data/imagenet-r/n02268443/sketch_20.jpg +- data/imagenet-r/n09472597/videogame_26.jpg +- data/imagenet-r/n07714571/sketch_10.jpg +- data/imagenet-r/n02128757/painting_6.jpg +- data/imagenet-r/n02395406/toy_1.jpg +- data/imagenet-r/n07697313/cartoon_29.jpg +- data/imagenet-r/n01910747/tattoo_89.jpg +- data/imagenet-r/n04389033/graffiti_3.jpg +- data/imagenet-r/n01820546/art_8.jpg +- data/imagenet-r/n02099601/misc_49.jpg +- data/imagenet-r/n01494475/misc_131.jpg +- data/imagenet-r/n01910747/tattoo_84.jpg +- data/imagenet-r/n02607072/sketch_7.jpg +- data/imagenet-r/n04266014/cartoon_41.jpg +- data/imagenet-r/n07693725/cartoon_2.jpg +- data/imagenet-r/n04192698/sketch_18.jpg +- data/imagenet-r/n02096585/misc_15.jpg +- data/imagenet-r/n02814860/deviantart_13.jpg +- data/imagenet-r/n04254680/deviantart_24.jpg +- data/imagenet-r/n04192698/cartoon_9.jpg +- data/imagenet-r/n03124170/sketch_1.jpg +- data/imagenet-r/n02110958/cartoon_54.jpg +- data/imagenet-r/n01882714/toy_6.jpg +- data/imagenet-r/n02129604/painting_2.jpg +- data/imagenet-r/n02088238/tattoo_1.jpg +- data/imagenet-r/n01531178/cartoon_6.jpg +- data/imagenet-r/n01770393/deviantart_4.jpg +- data/imagenet-r/n02363005/sculpture_10.jpg +- data/imagenet-r/n02445715/painting_1.jpg +- data/imagenet-r/n02526121/sketch_12.jpg +- data/imagenet-r/n07734744/videogame_38.jpg +- data/imagenet-r/n02088094/misc_52.jpg +- data/imagenet-r/n02088364/misc_64.jpg +- data/imagenet-r/n02802426/cartoon_7.jpg +- data/imagenet-r/n01770393/cartoon_31.jpg +- data/imagenet-r/n01443537/videogame_7.jpg +- data/imagenet-r/n07768694/tattoo_3.jpg +- data/imagenet-r/n03272010/sticker_0.jpg +- data/imagenet-r/n10565667/sketch_5.jpg +- data/imagenet-r/n02110958/painting_44.jpg +- data/imagenet-r/n02129165/sticker_6.jpg +- data/imagenet-r/n04347754/graffiti_7.jpg +- data/imagenet-r/n02106030/art_8.jpg +- data/imagenet-r/n02165456/tattoo_23.jpg +- data/imagenet-r/n04086273/cartoon_7.jpg +- data/imagenet-r/n04591713/painting_12.jpg +- data/imagenet-r/n02106550/sketch_3.jpg +- data/imagenet-r/n02130308/tattoo_14.jpg +- data/imagenet-r/n01498041/deviantart_6.jpg +- data/imagenet-r/n03495258/sculpture_11.jpg +- data/imagenet-r/n03649909/toy_13.jpg +- data/imagenet-r/n02129604/cartoon_5.jpg +- data/imagenet-r/n04347754/sketch_13.jpg +- data/imagenet-r/n02950826/videogame_7.jpg +- data/imagenet-r/n02802426/tattoo_15.jpg +- data/imagenet-r/n02236044/tattoo_10.jpg +- data/imagenet-r/n07697537/misc_99.jpg +- data/imagenet-r/n04254680/deviantart_8.jpg +- data/imagenet-r/n07697313/cartoon_22.jpg +- data/imagenet-r/n02114367/misc_54.jpg +- data/imagenet-r/n02134084/misc_154.jpg +- data/imagenet-r/n02106166/painting_0.jpg +- data/imagenet-r/n02480855/sketch_8.jpg +- data/imagenet-r/n03773504/art_4.jpg +- data/imagenet-r/n02797295/misc_60.jpg +- data/imagenet-r/n02607072/misc_56.jpg +- data/imagenet-r/n07920052/art_0.jpg +- data/imagenet-r/n02106550/misc_11.jpg +- data/imagenet-r/n02165456/sticker_5.jpg +- data/imagenet-r/n02096585/misc_116.jpg +- data/imagenet-r/n02108915/misc_47.jpg +- data/imagenet-r/n02110958/embroidery_2.jpg +- data/imagenet-r/n01855672/art_7.jpg +- data/imagenet-r/n01910747/tattoo_60.jpg +- data/imagenet-r/n02051845/deviantart_1.jpg +- data/imagenet-r/n04141076/sketch_4.jpg +- data/imagenet-r/n02110185/sticker_2.jpg +- data/imagenet-r/n04086273/tattoo_43.jpg +- data/imagenet-r/n02129165/deviantart_5.jpg +- data/imagenet-r/n02098286/misc_7.jpg +- data/imagenet-r/n07734744/graffiti_27.jpg +- data/imagenet-r/n04310018/painting_18.jpg +- data/imagenet-r/n03481172/deviantart_9.jpg +- data/imagenet-r/n02088364/misc_49.jpg +- data/imagenet-r/n02951358/videogame_2.jpg +- data/imagenet-r/n07768694/art_0.jpg +- data/imagenet-r/n02110958/sketch_11.jpg +- data/imagenet-r/n01820546/cartoon_0.jpg +- data/imagenet-r/n01860187/painting_2.jpg +- data/imagenet-r/n01986214/cartoon_0.jpg +- data/imagenet-r/n01616318/painting_8.jpg +- data/imagenet-r/n02395406/sculpture_30.jpg +- data/imagenet-r/n01806143/sticker_4.jpg +- data/imagenet-r/n02992529/sketch_13.jpg +- data/imagenet-r/n02206856/embroidery_1.jpg +- data/imagenet-r/n02423022/art_14.jpg +- data/imagenet-r/n02071294/cartoon_0.jpg +- data/imagenet-r/n02130308/sculpture_2.jpg +- data/imagenet-r/n02206856/embroidery_18.jpg +- data/imagenet-r/n01882714/embroidery_4.jpg +- data/imagenet-r/n04254680/origami_3.jpg +- data/imagenet-r/n01820546/art_22.jpg +- data/imagenet-r/n07749582/deviantart_20.jpg +- data/imagenet-r/n02906734/painting_7.jpg +- data/imagenet-r/n03494278/cartoon_3.jpg +- data/imagenet-r/n07697313/deviantart_17.jpg +- data/imagenet-r/n01484850/sketch_17.jpg +- data/imagenet-r/n07695742/painting_1.jpg +- data/imagenet-r/n07873807/misc_7.jpg +- data/imagenet-r/n03424325/misc_99.jpg +- data/imagenet-r/n07697313/painting_8.jpg +- data/imagenet-r/n02802426/sketch_4.jpg +- data/imagenet-r/n02486410/misc_0.jpg +- data/imagenet-r/n04389033/videogame_33.jpg +- data/imagenet-r/n01632777/deviantart_20.jpg +- data/imagenet-r/n02797295/sketch_0.jpg +- data/imagenet-r/n02051845/sculpture_3.jpg +- data/imagenet-r/n02843684/painting_7.jpg +- data/imagenet-r/n03498962/cartoon_9.jpg +- data/imagenet-r/n04086273/tattoo_56.jpg +- data/imagenet-r/n01806143/origami_13.jpg +- data/imagenet-r/n01644373/painting_37.jpg +- data/imagenet-r/n02268443/misc_170.jpg +- data/imagenet-r/n04266014/painting_17.jpg +- data/imagenet-r/n01784675/art_2.jpg +- data/imagenet-r/n02948072/cartoon_7.jpg +- data/imagenet-r/n04254680/videogame_17.jpg +- data/imagenet-r/n07693725/graffiti_1.jpg +- data/imagenet-r/n03498962/graphic_2.jpg +- data/imagenet-r/n02108915/misc_11.jpg +- data/imagenet-r/n02113023/misc_17.jpg +- data/imagenet-r/n02130308/painting_23.jpg +- data/imagenet-r/n01494475/misc_36.jpg +- data/imagenet-r/n04141076/cartoon_31.jpg +- data/imagenet-r/n04086273/graffiti_3.jpg +- data/imagenet-r/n01484850/toy_10.jpg +- data/imagenet-r/n02165456/toy_31.jpg +- data/imagenet-r/n02165456/sticker_1.jpg +- data/imagenet-r/n02814860/painting_30.jpg +- data/imagenet-r/n02655020/videogame_14.jpg +- data/imagenet-r/n07873807/sketch_1.jpg +- data/imagenet-r/n01986214/cartoon_26.jpg +- data/imagenet-r/n01514859/painting_30.jpg +- data/imagenet-r/n01784675/origami_0.jpg +- data/imagenet-r/n04192698/sticker_2.jpg +- data/imagenet-r/n03495258/sculpture_2.jpg +- data/imagenet-r/n02085620/tattoo_14.jpg +- data/imagenet-r/n02113799/misc_14.jpg +- data/imagenet-r/n02071294/toy_9.jpg +- data/imagenet-r/n02130308/art_8.jpg +- data/imagenet-r/n02950826/sketch_22.jpg +- data/imagenet-r/n01843383/tattoo_6.jpg +- data/imagenet-r/n02117135/toy_6.jpg +- data/imagenet-r/n02395406/sketch_0.jpg +- data/imagenet-r/n01770393/origami_19.jpg +- data/imagenet-r/n02883205/embroidery_0.jpg +- data/imagenet-r/n07749582/cartoon_13.jpg +- data/imagenet-r/n04275548/misc_1.jpg +- data/imagenet-r/n07749582/toy_1.jpg +- data/imagenet-r/n01614925/sketch_10.jpg +- data/imagenet-r/n02134084/misc_66.jpg +- data/imagenet-r/n02655020/sketch_1.jpg +- data/imagenet-r/n07749582/painting_27.jpg +- data/imagenet-r/n03424325/misc_62.jpg +- data/imagenet-r/n02769748/sketch_22.jpg +- data/imagenet-r/n01616318/sculpture_0.jpg +- data/imagenet-r/n02099601/misc_46.jpg +- data/imagenet-r/n02066245/sculpture_4.jpg +- data/imagenet-r/n02102318/cartoon_2.jpg +- data/imagenet-r/n07697313/toy_19.jpg +- data/imagenet-r/n03773504/graffiti_0.jpg +- data/imagenet-r/n02077923/sketch_2.jpg +- data/imagenet-r/n02106662/misc_36.jpg +- data/imagenet-r/n04310018/painting_28.jpg +- data/imagenet-r/n02109525/sketch_17.jpg +- data/imagenet-r/n02134084/misc_124.jpg +- data/imagenet-r/n03498962/deviantart_2.jpg +- data/imagenet-r/n02992529/cartoon_2.jpg +- data/imagenet-r/n07734744/painting_23.jpg +- data/imagenet-r/n02119022/misc_59.jpg +- data/imagenet-r/n02447366/graphic_1.jpg +- data/imagenet-r/n02112137/sketch_12.jpg +- data/imagenet-r/n02206856/misc_2.jpg +- data/imagenet-r/n01910747/graphic_8.jpg +- data/imagenet-r/n01860187/toy_2.jpg +- data/imagenet-r/n04254680/deviantart_31.jpg +- data/imagenet-r/n01855672/cartoon_7.jpg +- data/imagenet-r/n04536866/sculpture_3.jpg +- data/imagenet-r/n02948072/origami_6.jpg +- data/imagenet-r/n03710193/misc_35.jpg +- data/imagenet-r/n09835506/deviantart_8.jpg +- data/imagenet-r/n04254680/misc_0.jpg +- data/imagenet-r/n01531178/art_9.jpg +- data/imagenet-r/n02391049/misc_71.jpg +- data/imagenet-r/n01833805/cartoon_0.jpg +- data/imagenet-r/n02094433/misc_11.jpg +- data/imagenet-r/n02841315/cartoon_10.jpg +- data/imagenet-r/n03710193/misc_5.jpg +- data/imagenet-r/n02138441/painting_38.jpg +- data/imagenet-r/n02526121/cartoon_20.jpg +- data/imagenet-r/n04141076/painting_49.jpg +- data/imagenet-r/n07742313/painting_16.jpg +- data/imagenet-r/n01534433/sketch_15.jpg +- data/imagenet-r/n03773504/sketch_2.jpg +- data/imagenet-r/n01855672/misc_3.jpg +- data/imagenet-r/n02108915/tattoo_12.jpg +- data/imagenet-r/n07753592/misc_45.jpg +- data/imagenet-r/n07920052/cartoon_16.jpg +- data/imagenet-r/n02129604/tattoo_26.jpg +- data/imagenet-r/n02129165/deviantart_18.jpg +- data/imagenet-r/n01694178/graphic_3.jpg +- data/imagenet-r/n01882714/painting_11.jpg +- data/imagenet-r/n02088364/misc_44.jpg +- data/imagenet-r/n02165456/graphic_3.jpg +- data/imagenet-r/n01833805/painting_16.jpg +- data/imagenet-r/n02117135/cartoon_0.jpg +- data/imagenet-r/n07614500/origami_7.jpg +- data/imagenet-r/n02056570/deviantart_5.jpg +- data/imagenet-r/n02134084/sketch_18.jpg +- data/imagenet-r/n02007558/tattoo_1.jpg +- data/imagenet-r/n04591713/painting_19.jpg +- data/imagenet-r/n02939185/cartoon_0.jpg +- data/imagenet-r/n04310018/painting_36.jpg +- data/imagenet-r/n03947888/videogame_3.jpg +- data/imagenet-r/n02655020/misc_1.jpg +- data/imagenet-r/n09835506/deviantart_21.jpg +- data/imagenet-r/n01770393/origami_9.jpg +- data/imagenet-r/n02808440/art_0.jpg +- data/imagenet-r/n07697313/deviantart_21.jpg +- data/imagenet-r/n02363005/painting_6.jpg +- data/imagenet-r/n02110341/misc_67.jpg +- data/imagenet-r/n07614500/misc_25.jpg +- data/imagenet-r/n07753275/cartoon_14.jpg +- data/imagenet-r/n02056570/toy_5.jpg +- data/imagenet-r/n04552348/deviantart_30.jpg +- data/imagenet-r/n01694178/cartoon_18.jpg +- data/imagenet-r/n03947888/tattoo_6.jpg +- data/imagenet-r/n02226429/sketch_16.jpg +- data/imagenet-r/n02483362/painting_8.jpg +- data/imagenet-r/n02110958/tattoo_10.jpg +- data/imagenet-r/n01944390/misc_148.jpg +- data/imagenet-r/n01443537/sketch_5.jpg +- data/imagenet-r/n02088364/sketch_10.jpg +- data/imagenet-r/n02395406/sketch_3.jpg +- data/imagenet-r/n02398521/cartoon_14.jpg +- data/imagenet-r/n07920052/cartoon_7.jpg +- data/imagenet-r/n02099601/misc_67.jpg +- data/imagenet-r/n01514859/sketch_3.jpg +- data/imagenet-r/n02099601/misc_63.jpg +- data/imagenet-r/n02510455/misc_110.jpg +- data/imagenet-r/n04254680/tattoo_1.jpg +- data/imagenet-r/n01531178/sketch_4.jpg +- data/imagenet-r/n12267677/misc_92.jpg +- data/imagenet-r/n02129165/sculpture_16.jpg +- data/imagenet-r/n02510455/misc_43.jpg +- data/imagenet-r/n02129165/sticker_7.jpg +- data/imagenet-r/n02843684/painting_1.jpg +- data/imagenet-r/n09472597/sketch_32.jpg +- data/imagenet-r/n02672831/painting_4.jpg +- data/imagenet-r/n07745940/deviantart_13.jpg +- data/imagenet-r/n01748264/tattoo_38.jpg +- data/imagenet-r/n07614500/misc_22.jpg +- data/imagenet-r/n02480855/graffiti_6.jpg +- data/imagenet-r/n10565667/deviantart_19.jpg +- data/imagenet-r/n02823750/misc_2.jpg +- data/imagenet-r/n04536866/videogame_4.jpg +- data/imagenet-r/n01494475/misc_7.jpg +- data/imagenet-r/n02219486/sculpture_9.jpg +- data/imagenet-r/n02797295/misc_17.jpg +- data/imagenet-r/n03594945/videogame_19.jpg +- data/imagenet-r/n02480855/videogame_0.jpg +- data/imagenet-r/n07749582/embroidery_2.jpg +- data/imagenet-r/n02607072/deviantart_5.jpg +- data/imagenet-r/n02088364/misc_28.jpg +- data/imagenet-r/n02128757/painting_28.jpg +- data/imagenet-r/n02480855/sculpture_17.jpg +- data/imagenet-r/n03710193/sketch_20.jpg +- data/imagenet-r/n03947888/painting_6.jpg +- data/imagenet-r/n07695742/embroidery_1.jpg +- data/imagenet-r/n02009912/misc_46.jpg +- data/imagenet-r/n02129165/tattoo_12.jpg +- data/imagenet-r/n03124170/painting_18.jpg +- data/imagenet-r/n01882714/deviantart_52.jpg +- data/imagenet-r/n02966193/toy_0.jpg +- data/imagenet-r/n02655020/sketch_21.jpg +- data/imagenet-r/n02607072/sketch_6.jpg +- data/imagenet-r/n02110958/toy_9.jpg +- data/imagenet-r/n02607072/misc_65.jpg +- data/imagenet-r/n01494475/misc_112.jpg +- data/imagenet-r/n01833805/sticker_1.jpg +- data/imagenet-r/n02808440/graphic_4.jpg +- data/imagenet-r/n03676483/cartoon_16.jpg +- data/imagenet-r/n07745940/embroidery_6.jpg +- data/imagenet-r/n04310018/sticker_2.jpg +- data/imagenet-r/n02843684/cartoon_25.jpg +- data/imagenet-r/n07742313/sculpture_3.jpg +- data/imagenet-r/n07697537/misc_31.jpg +- data/imagenet-r/n02123045/cartoon_28.jpg +- data/imagenet-r/n03372029/sculpture_28.jpg +- data/imagenet-r/n01443537/misc_5.jpg +- data/imagenet-r/n01518878/deviantart_3.jpg +- data/imagenet-r/n02398521/sketch_15.jpg +- data/imagenet-r/n02134084/misc_153.jpg +- data/imagenet-r/n01770393/tattoo_73.jpg +- data/imagenet-r/n07753592/misc_95.jpg +- data/imagenet-r/n02398521/toy_6.jpg +- data/imagenet-r/n07714571/sketch_15.jpg +- data/imagenet-r/n01910747/art_8.jpg +- data/imagenet-r/n07749582/painting_50.jpg +- data/imagenet-r/n04552348/deviantart_24.jpg +- data/imagenet-r/n07753275/videogame_6.jpg +- data/imagenet-r/n04147183/painting_27.jpg +- data/imagenet-r/n01518878/cartoon_52.jpg +- data/imagenet-r/n02051845/painting_17.jpg +- data/imagenet-r/n02113624/misc_35.jpg +- data/imagenet-r/n07920052/cartoon_14.jpg +- data/imagenet-r/n04266014/videogame_27.jpg +- data/imagenet-r/n02823750/sketch_20.jpg +- data/imagenet-r/n07614500/deviantart_14.jpg +- data/imagenet-r/n01820546/painting_1.jpg +- data/imagenet-r/n04536866/painting_23.jpg +- data/imagenet-r/n07697313/art_20.jpg +- data/imagenet-r/n02165456/toy_18.jpg +- data/imagenet-r/n01616318/deviantart_14.jpg +- data/imagenet-r/n03272010/deviantart_10.jpg +- data/imagenet-r/n04266014/videogame_15.jpg +- data/imagenet-r/n01514859/embroidery_1.jpg +- data/imagenet-r/n07768694/embroidery_6.jpg +- data/imagenet-r/n02939185/cartoon_12.jpg +- data/imagenet-r/n01983481/misc_31.jpg +- data/imagenet-r/n02749479/sketch_7.jpg +- data/imagenet-r/n02481823/cartoon_13.jpg +- data/imagenet-r/n03372029/sketch_14.jpg +- data/imagenet-r/n03345487/sculpture_0.jpg +- data/imagenet-r/n03467068/sketch_1.jpg +- data/imagenet-r/n02088094/misc_2.jpg +- data/imagenet-r/n02939185/tattoo_0.jpg +- data/imagenet-r/n03124170/toy_3.jpg +- data/imagenet-r/n02007558/embroidery_25.jpg +- data/imagenet-r/n02843684/embroidery_16.jpg +- data/imagenet-r/n01833805/painting_42.jpg +- data/imagenet-r/n01514859/deviantart_21.jpg +- data/imagenet-r/n02094433/tattoo_1.jpg +- data/imagenet-r/n01774750/art_0.jpg +- data/imagenet-r/n07718472/sketch_4.jpg +- data/imagenet-r/n02088238/misc_0.jpg +- data/imagenet-r/n02096585/tattoo_8.jpg +- data/imagenet-r/n02123045/sculpture_4.jpg +- data/imagenet-r/n04552348/deviantart_29.jpg +- data/imagenet-r/n04465501/toy_2.jpg +- data/imagenet-r/n01882714/toy_1.jpg +- data/imagenet-r/n02802426/deviantart_0.jpg +- data/imagenet-r/n02165456/tattoo_78.jpg +- data/imagenet-r/n04141076/painting_34.jpg +- data/imagenet-r/n03124170/cartoon_60.jpg +- data/imagenet-r/n04141076/painting_15.jpg +- data/imagenet-r/n01910747/painting_21.jpg +- data/imagenet-r/n02510455/deviantart_20.jpg +- data/imagenet-r/n07734744/sculpture_12.jpg +- data/imagenet-r/n02966193/cartoon_10.jpg +- data/imagenet-r/n04310018/graphic_0.jpg +- data/imagenet-r/n02841315/sketch_23.jpg +- data/imagenet-r/n04133789/misc_0.jpg +- data/imagenet-r/n01514859/deviantart_33.jpg +- data/imagenet-r/n07749582/misc_0.jpg +- data/imagenet-r/n03272010/graphic_0.jpg +- data/imagenet-r/n01616318/sculpture_5.jpg +- data/imagenet-r/n02268443/misc_68.jpg +- data/imagenet-r/n02130308/art_4.jpg +- data/imagenet-r/n02410509/painting_11.jpg +- data/imagenet-r/n01910747/tattoo_78.jpg +- data/imagenet-r/n02007558/cartoon_5.jpg +- data/imagenet-r/n01531178/art_28.jpg +- data/imagenet-r/n02138441/painting_24.jpg +- data/imagenet-r/n02094433/sketch_8.jpg +- data/imagenet-r/n03947888/painting_12.jpg +- data/imagenet-r/n09835506/videogame_11.jpg +- data/imagenet-r/n02950826/sketch_19.jpg +- data/imagenet-r/n02802426/graphic_4.jpg +- data/imagenet-r/n03594945/toy_0.jpg +- data/imagenet-r/n02134084/misc_99.jpg +- data/imagenet-r/n04409515/art_2.jpg +- data/imagenet-r/n07753592/deviantart_18.jpg +- data/imagenet-r/n02096585/misc_200.jpg +- data/imagenet-r/n02948072/sketch_31.jpg +- data/imagenet-r/n02128757/art_7.jpg +- data/imagenet-r/n02138441/art_16.jpg +- data/imagenet-r/n01770393/sketch_4.jpg +- data/imagenet-r/n02110958/painting_52.jpg +- data/imagenet-r/n02085620/misc_16.jpg +- data/imagenet-r/n02206856/tattoo_0.jpg +- data/imagenet-r/n02395406/sticker_6.jpg +- data/imagenet-r/n02802426/graffiti_3.jpg +- data/imagenet-r/n02480855/toy_0.jpg +- data/imagenet-r/n02236044/toy_6.jpg +- data/imagenet-r/n02109525/misc_20.jpg +- data/imagenet-r/n02364673/art_12.jpg +- data/imagenet-r/n02992529/painting_0.jpg +- data/imagenet-r/n02814860/painting_14.jpg +- data/imagenet-r/n01843383/cartoon_12.jpg +- data/imagenet-r/n02106550/misc_46.jpg +- data/imagenet-r/n01498041/cartoon_9.jpg +- data/imagenet-r/n07718472/sketch_7.jpg +- data/imagenet-r/n01882714/deviantart_36.jpg +- data/imagenet-r/n02510455/misc_115.jpg +- data/imagenet-r/n02134084/misc_21.jpg +- data/imagenet-r/n02966193/embroidery_2.jpg +- data/imagenet-r/n02088094/misc_44.jpg +- data/imagenet-r/n02486410/sketch_21.jpg +- data/imagenet-r/n02226429/graffiti_5.jpg +- data/imagenet-r/n02317335/tattoo_18.jpg +- data/imagenet-r/n07693725/deviantart_0.jpg +- data/imagenet-r/n07742313/videogame_11.jpg +- data/imagenet-r/n01860187/origami_7.jpg +- data/imagenet-r/n01806143/toy_2.jpg +- data/imagenet-r/n09472597/sketch_16.jpg +- data/imagenet-r/n02106166/sketch_22.jpg +- data/imagenet-r/n01910747/tattoo_66.jpg +- data/imagenet-r/n04141076/cartoon_44.jpg +- data/imagenet-r/n07753592/misc_187.jpg +- data/imagenet-r/n01784675/sketch_1.jpg +- data/imagenet-r/n02749479/sketch_5.jpg +- data/imagenet-r/n07697313/art_3.jpg +- data/imagenet-r/n02510455/misc_127.jpg +- data/imagenet-r/n02112018/misc_40.jpg +- data/imagenet-r/n02106662/sketch_3.jpg +- data/imagenet-r/n03124170/embroidery_1.jpg +- data/imagenet-r/n01514859/toy_14.jpg +- data/imagenet-r/n02939185/tattoo_3.jpg +- data/imagenet-r/n02085620/misc_102.jpg +- data/imagenet-r/n02096585/misc_43.jpg +- data/imagenet-r/n04325704/cartoon_7.jpg +- data/imagenet-r/n03594945/sculpture_2.jpg +- data/imagenet-r/n02097298/misc_37.jpg +- data/imagenet-r/n04310018/painting_25.jpg +- data/imagenet-r/n07693725/cartoon_21.jpg +- data/imagenet-r/n02134084/tattoo_10.jpg +- data/imagenet-r/n04275548/deviantart_0.jpg +- data/imagenet-r/n01534433/art_1.jpg +- data/imagenet-r/n02056570/toy_2.jpg +- data/imagenet-r/n03372029/sculpture_29.jpg +- data/imagenet-r/n02226429/sticker_2.jpg +- data/imagenet-r/n02607072/deviantart_7.jpg +- data/imagenet-r/n03345487/embroidery_1.jpg +- data/imagenet-r/n01910747/tattoo_29.jpg +- data/imagenet-r/n02391049/misc_33.jpg +- data/imagenet-r/n02909870/cartoon_24.jpg +- data/imagenet-r/n01983481/sketch_9.jpg +- data/imagenet-r/n02123045/art_0.jpg +- data/imagenet-r/n07697313/videogame_1.jpg +- data/imagenet-r/n02007558/art_2.jpg +- data/imagenet-r/n02808440/cartoon_17.jpg +- data/imagenet-r/n03710193/misc_36.jpg +- data/imagenet-r/n07749582/cartoon_2.jpg +- data/imagenet-r/n02814860/art_20.jpg +- data/imagenet-r/n02655020/videogame_4.jpg +- data/imagenet-r/n04275548/sticker_2.jpg +- data/imagenet-r/n09472597/sketch_21.jpg +- data/imagenet-r/n02883205/cartoon_8.jpg +- data/imagenet-r/n04522168/painting_18.jpg +- data/imagenet-r/n07745940/embroidery_25.jpg +- data/imagenet-r/n10565667/sketch_14.jpg +- data/imagenet-r/n02130308/sketch_4.jpg +- data/imagenet-r/n04086273/cartoon_21.jpg +- data/imagenet-r/n02226429/origami_7.jpg +- data/imagenet-r/n02119022/misc_138.jpg +- data/imagenet-r/n02119022/sketch_14.jpg +- data/imagenet-r/n02410509/sketch_6.jpg +- data/imagenet-r/n02119022/misc_105.jpg +- data/imagenet-r/n01494475/misc_128.jpg +- data/imagenet-r/n02233338/sketch_21.jpg +- data/imagenet-r/n01843383/painting_42.jpg +- data/imagenet-r/n01833805/tattoo_54.jpg +- data/imagenet-r/n04141076/cartoon_50.jpg +- data/imagenet-r/n07614500/videogame_2.jpg +- data/imagenet-r/n01882714/deviantart_4.jpg +- data/imagenet-r/n07734744/toy_0.jpg +- data/imagenet-r/n02992529/cartoon_7.jpg +- data/imagenet-r/n02007558/graffiti_26.jpg +- data/imagenet-r/n02398521/cartoon_2.jpg +- data/imagenet-r/n02206856/toy_24.jpg +- data/imagenet-r/n02112137/sketch_17.jpg +- data/imagenet-r/n02206856/toy_31.jpg +- data/imagenet-r/n07734744/sticker_11.jpg +- data/imagenet-r/n02808440/sketch_24.jpg +- data/imagenet-r/n04133789/cartoon_15.jpg +- data/imagenet-r/n01910747/sketch_23.jpg +- data/imagenet-r/n02110958/cartoon_79.jpg +- data/imagenet-r/n12267677/misc_44.jpg +- data/imagenet-r/n02165456/misc_13.jpg +- data/imagenet-r/n02939185/deviantart_1.jpg +- data/imagenet-r/n02814860/cartoon_23.jpg +- data/imagenet-r/n02113624/misc_5.jpg +- data/imagenet-r/n02088238/misc_1.jpg +- data/imagenet-r/n07697537/sketch_11.jpg +- data/imagenet-r/n07734744/videogame_4.jpg +- data/imagenet-r/n04086273/tattoo_39.jpg +- data/imagenet-r/n02226429/tattoo_0.jpg +- data/imagenet-r/n02883205/toy_0.jpg +- data/imagenet-r/n02268443/misc_36.jpg +- data/imagenet-r/n02655020/misc_34.jpg +- data/imagenet-r/n01843383/tattoo_13.jpg +- data/imagenet-r/n02802426/videogame_13.jpg +- data/imagenet-r/n02363005/cartoon_6.jpg +- data/imagenet-r/n02206856/misc_20.jpg +- data/imagenet-r/n04389033/embroidery_0.jpg +- data/imagenet-r/n03124170/cartoon_43.jpg +- data/imagenet-r/n02007558/cartoon_28.jpg +- data/imagenet-r/n02056570/toy_1.jpg +- data/imagenet-r/n01484850/misc_8.jpg +- data/imagenet-r/n02165456/tattoo_52.jpg +- data/imagenet-r/n02110958/sketch_4.jpg +- data/imagenet-r/n02128757/art_17.jpg +- data/imagenet-r/n01630670/sketch_8.jpg +- data/imagenet-r/n01616318/graphic_6.jpg +- data/imagenet-r/n02071294/tattoo_12.jpg +- data/imagenet-r/n01983481/deviantart_1.jpg +- data/imagenet-r/n01514859/deviantart_14.jpg +- data/imagenet-r/n02398521/tattoo_0.jpg +- data/imagenet-r/n07697537/misc_56.jpg +- data/imagenet-r/n07714571/misc_1.jpg +- data/imagenet-r/n02410509/sketch_8.jpg +- data/imagenet-r/n02823750/cartoon_0.jpg +- data/imagenet-r/n01833805/embroidery_4.jpg +- data/imagenet-r/n04310018/toy_5.jpg +- data/imagenet-r/n03424325/misc_33.jpg +- data/imagenet-r/n01910747/deviantart_16.jpg +- data/imagenet-r/n01820546/graffiti_0.jpg +- data/imagenet-r/n04147183/deviantart_0.jpg +- data/imagenet-r/n01843383/art_15.jpg +- data/imagenet-r/n04266014/toy_29.jpg +- data/imagenet-r/n02797295/misc_32.jpg +- data/imagenet-r/n02395406/misc_19.jpg +- data/imagenet-r/n02481823/cartoon_16.jpg +- data/imagenet-r/n02114367/misc_63.jpg +- data/imagenet-r/n02236044/origami_28.jpg +- data/imagenet-r/n03424325/misc_90.jpg +- data/imagenet-r/n02077923/toy_0.jpg +- data/imagenet-r/n02363005/graffiti_5.jpg +- data/imagenet-r/n01616318/embroidery_1.jpg +- data/imagenet-r/n02007558/cartoon_34.jpg +- data/imagenet-r/n12267677/misc_88.jpg +- data/imagenet-r/n01443537/painting_17.jpg +- data/imagenet-r/n04192698/videogame_11.jpg +- data/imagenet-r/n02128385/toy_7.jpg +- data/imagenet-r/n04536866/tattoo_3.jpg +- data/imagenet-r/n04310018/sticker_5.jpg +- data/imagenet-r/n01983481/misc_23.jpg +- data/imagenet-r/n02346627/sculpture_0.jpg +- data/imagenet-r/n07697537/misc_84.jpg +- data/imagenet-r/n07745940/sketch_2.jpg +- data/imagenet-r/n07753592/misc_4.jpg +- data/imagenet-r/n01910747/misc_13.jpg +- data/imagenet-r/n02749479/misc_26.jpg +- data/imagenet-r/n02437616/sculpture_2.jpg +- data/imagenet-r/n02769748/graffiti_0.jpg +- data/imagenet-r/n01644373/deviantart_8.jpg +- data/imagenet-r/n07742313/painting_19.jpg +- data/imagenet-r/n01644373/art_12.jpg +- data/imagenet-r/n02526121/cartoon_10.jpg +- data/imagenet-r/n02128757/cartoon_16.jpg +- data/imagenet-r/n02110958/cartoon_41.jpg +- data/imagenet-r/n02445715/embroidery_1.jpg +- data/imagenet-r/n01910747/painting_23.jpg +- data/imagenet-r/n02410509/sticker_1.jpg +- data/imagenet-r/n02486410/tattoo_4.jpg +- data/imagenet-r/n01534433/sketch_10.jpg +- data/imagenet-r/n02071294/toy_2.jpg +- data/imagenet-r/n02088364/misc_16.jpg +- data/imagenet-r/n01531178/painting_28.jpg +- data/imagenet-r/n12267677/misc_43.jpg +- data/imagenet-r/n01518878/videogame_1.jpg +- data/imagenet-r/n04522168/sketch_4.jpg +- data/imagenet-r/n04086273/tattoo_41.jpg +- data/imagenet-r/n03124170/cartoon_27.jpg +- data/imagenet-r/n04133789/sculpture_1.jpg +- data/imagenet-r/n02814860/toy_2.jpg +- data/imagenet-r/n02130308/graffiti_0.jpg +- data/imagenet-r/n07697537/deviantart_26.jpg +- data/imagenet-r/n01944390/misc_81.jpg +- data/imagenet-r/n07695742/cartoon_1.jpg +- data/imagenet-r/n04347754/videogame_25.jpg +- data/imagenet-r/n07742313/deviantart_8.jpg +- data/imagenet-r/n03272010/art_9.jpg +- data/imagenet-r/n02672831/sticker_0.jpg +- data/imagenet-r/n01944390/misc_104.jpg +- data/imagenet-r/n07753592/misc_165.jpg +- data/imagenet-r/n04266014/sketch_4.jpg +- data/imagenet-r/n02206856/embroidery_3.jpg +- data/imagenet-r/n04086273/graffiti_1.jpg +- data/imagenet-r/n04522168/videogame_18.jpg +- data/imagenet-r/n02071294/toy_7.jpg +- data/imagenet-r/n12267677/misc_108.jpg +- data/imagenet-r/n01944390/misc_37.jpg +- data/imagenet-r/n02165456/tattoo_68.jpg +- data/imagenet-r/n02129165/painting_4.jpg +- data/imagenet-r/n04487394/cartoon_10.jpg +- data/imagenet-r/n01774750/toy_0.jpg +- data/imagenet-r/n04141076/painting_38.jpg +- data/imagenet-r/n02883205/toy_9.jpg +- data/imagenet-r/n01677366/misc_16.jpg +- data/imagenet-r/n07753592/misc_138.jpg +- data/imagenet-r/n09472597/sculpture_0.jpg +- data/imagenet-r/n02123045/painting_43.jpg +- data/imagenet-r/n01882714/misc_0.jpg +- data/imagenet-r/n02106662/misc_64.jpg +- data/imagenet-r/n01498041/sketch_7.jpg +- data/imagenet-r/n02123045/painting_61.jpg +- data/imagenet-r/n03676483/embroidery_2.jpg +- data/imagenet-r/n07697313/misc_3.jpg +- data/imagenet-r/n02980441/graphic_3.jpg +- data/imagenet-r/n02088238/misc_78.jpg +- data/imagenet-r/n02088094/sketch_1.jpg +- data/imagenet-r/n02395406/tattoo_12.jpg +- data/imagenet-r/n02480495/cartoon_4.jpg +- data/imagenet-r/n02088238/misc_21.jpg +- data/imagenet-r/n01484850/sketch_3.jpg +- data/imagenet-r/n02134084/misc_19.jpg +- data/imagenet-r/n03888257/videogame_11.jpg +- data/imagenet-r/n02117135/sketch_16.jpg +- data/imagenet-r/n01860187/sketch_1.jpg +- data/imagenet-r/n04086273/videogame_4.jpg +- data/imagenet-r/n03372029/painting_8.jpg +- data/imagenet-r/n07880968/cartoon_12.jpg +- data/imagenet-r/n01944390/misc_130.jpg +- data/imagenet-r/n01820546/sketch_10.jpg +- data/imagenet-r/n02108915/sketch_16.jpg +- data/imagenet-r/n07745940/graffiti_38.jpg +- data/imagenet-r/n03424325/videogame_2.jpg +- data/imagenet-r/n04465501/videogame_21.jpg +- data/imagenet-r/n02802426/embroidery_1.jpg +- data/imagenet-r/n02951358/deviantart_2.jpg +- data/imagenet-r/n07734744/sculpture_18.jpg +- data/imagenet-r/n02797295/misc_66.jpg +- data/imagenet-r/n02883205/graffiti_3.jpg +- data/imagenet-r/n01910747/deviantart_10.jpg +- data/imagenet-r/n02110958/painting_60.jpg +- data/imagenet-r/n07753275/graphic_8.jpg +- data/imagenet-r/n02077923/cartoon_2.jpg +- data/imagenet-r/n01770393/sculpture_5.jpg +- data/imagenet-r/n02219486/tattoo_22.jpg +- data/imagenet-r/n03775071/painting_4.jpg +- data/imagenet-r/n02096585/misc_202.jpg +- data/imagenet-r/n02769748/sketch_12.jpg +- data/imagenet-r/n04552348/art_11.jpg +- data/imagenet-r/n03594945/toy_13.jpg +- data/imagenet-r/n02906734/misc_8.jpg +- data/imagenet-r/n02094433/misc_7.jpg +- data/imagenet-r/n02091134/misc_44.jpg +- data/imagenet-r/n02219486/sketch_23.jpg +- data/imagenet-r/n02769748/art_2.jpg +- data/imagenet-r/n01484850/tattoo_8.jpg +- data/imagenet-r/n01910747/misc_14.jpg +- data/imagenet-r/n02129604/graffiti_14.jpg +- data/imagenet-r/n02007558/tattoo_57.jpg +- data/imagenet-r/n03676483/cartoon_3.jpg +- data/imagenet-r/n02091134/misc_30.jpg +- data/imagenet-r/n01843383/painting_36.jpg +- data/imagenet-r/n02108915/misc_93.jpg +- data/imagenet-r/n04465501/sketch_14.jpg +- data/imagenet-r/n02966193/misc_6.jpg +- data/imagenet-r/n02395406/sculpture_8.jpg +- data/imagenet-r/n03495258/videogame_12.jpg +- data/imagenet-r/n01820546/toy_3.jpg +- data/imagenet-r/n02106166/painting_2.jpg +- data/imagenet-r/n02110958/tattoo_31.jpg +- data/imagenet-r/n03124170/art_6.jpg +- data/imagenet-r/n01833805/sculpture_4.jpg +- data/imagenet-r/n02363005/graphic_3.jpg +- data/imagenet-r/n01484850/deviantart_1.jpg +- data/imagenet-r/n03649909/misc_4.jpg +- data/imagenet-r/n04522168/videogame_9.jpg +- data/imagenet-r/n04591713/sketch_16.jpg +- data/imagenet-r/n02096585/misc_21.jpg +- data/imagenet-r/n03775071/cartoon_8.jpg +- data/imagenet-r/n04086273/art_3.jpg +- data/imagenet-r/n02526121/art_8.jpg +- data/imagenet-r/n03775071/cartoon_2.jpg +- data/imagenet-r/n07753592/misc_131.jpg +- data/imagenet-r/n01882714/sketch_9.jpg +- data/imagenet-r/n01944390/tattoo_17.jpg +- data/imagenet-r/n02206856/toy_1.jpg +- data/imagenet-r/n01514859/toy_6.jpg +- data/imagenet-r/n12267677/deviantart_0.jpg +- data/imagenet-r/n03947888/tattoo_26.jpg +- data/imagenet-r/n02480855/art_7.jpg +- data/imagenet-r/n01882714/origami_5.jpg +- data/imagenet-r/n02129604/deviantart_32.jpg +- data/imagenet-r/n02749479/cartoon_0.jpg +- data/imagenet-r/n02129165/sculpture_3.jpg +- data/imagenet-r/n01820546/deviantart_20.jpg +- data/imagenet-r/n01484850/deviantart_23.jpg +- data/imagenet-r/n04552348/art_13.jpg +- data/imagenet-r/n02823750/cartoon_8.jpg +- data/imagenet-r/n07714571/toy_0.jpg +- data/imagenet-r/n04522168/origami_1.jpg +- data/imagenet-r/n01484850/deviantart_7.jpg +- data/imagenet-r/n02607072/misc_47.jpg +- data/imagenet-r/n02325366/misc_22.jpg +- data/imagenet-r/n01843383/videogame_7.jpg +- data/imagenet-r/n07697313/cartoon_14.jpg +- data/imagenet-r/n02108915/misc_32.jpg +- data/imagenet-r/n07695742/misc_1.jpg +- data/imagenet-r/n02129165/misc_0.jpg +- data/imagenet-r/n01774750/cartoon_0.jpg +- data/imagenet-r/n02526121/sculpture_7.jpg +- data/imagenet-r/n02447366/sketch_17.jpg +- data/imagenet-r/n01443537/deviantart_1.jpg +- data/imagenet-r/n02106550/sketch_23.jpg +- data/imagenet-r/n07714990/cartoon_16.jpg +- data/imagenet-r/n01882714/sticker_1.jpg +- data/imagenet-r/n01843383/painting_48.jpg +- data/imagenet-r/n02129165/sketch_6.jpg +- data/imagenet-r/n02655020/misc_57.jpg +- data/imagenet-r/n04275548/cartoon_12.jpg +- data/imagenet-r/n09472597/embroidery_5.jpg +- data/imagenet-r/n04086273/art_7.jpg +- data/imagenet-r/n01443537/embroidery_0.jpg +- data/imagenet-r/n01784675/tattoo_14.jpg +- data/imagenet-r/n02071294/tattoo_15.jpg +- data/imagenet-r/n07753592/misc_171.jpg +- data/imagenet-r/n02007558/graphic_21.jpg +- data/imagenet-r/n04325704/sticker_2.jpg +- data/imagenet-r/n01494475/misc_24.jpg +- data/imagenet-r/n07753275/deviantart_8.jpg +- data/imagenet-r/n02106030/sketch_19.jpg +- data/imagenet-r/n04591713/painting_20.jpg +- data/imagenet-r/n02219486/sketch_8.jpg +- data/imagenet-r/n01518878/cartoon_49.jpg +- data/imagenet-r/n07695742/cartoon_18.jpg +- data/imagenet-r/n03710193/misc_52.jpg +- data/imagenet-r/n03424325/sketch_4.jpg +- data/imagenet-r/n03372029/sketch_13.jpg +- data/imagenet-r/n02134084/misc_140.jpg +- data/imagenet-r/n01494475/misc_23.jpg +- data/imagenet-r/n02007558/cartoon_38.jpg +- data/imagenet-r/n02279972/tattoo_19.jpg +- data/imagenet-r/n07753592/misc_44.jpg +- data/imagenet-r/n01694178/toy_3.jpg +- data/imagenet-r/n04465501/videogame_22.jpg +- data/imagenet-r/n09472597/videogame_30.jpg +- data/imagenet-r/n02480855/tattoo_54.jpg +- data/imagenet-r/n04310018/cartoon_4.jpg +- data/imagenet-r/n07734744/graffiti_41.jpg +- data/imagenet-r/n07745940/painting_5.jpg +- data/imagenet-r/n03498962/toy_0.jpg +- data/imagenet-r/n02129165/tattoo_2.jpg +- data/imagenet-r/n04254680/deviantart_17.jpg +- data/imagenet-r/n02091134/misc_6.jpg +- data/imagenet-r/n02939185/misc_15.jpg +- data/imagenet-r/n01944390/deviantart_0.jpg +- data/imagenet-r/n04146614/toy_8.jpg +- data/imagenet-r/n02279972/sketch_20.jpg +- data/imagenet-r/n01847000/cartoon_4.jpg +- data/imagenet-r/n01443537/toy_15.jpg +- data/imagenet-r/n02129165/sketch_16.jpg +- data/imagenet-r/n01632777/cartoon_34.jpg +- data/imagenet-r/n02071294/tattoo_3.jpg +- data/imagenet-r/n02085620/misc_54.jpg +- data/imagenet-r/n07693725/sticker_0.jpg +- data/imagenet-r/n02051845/deviantart_2.jpg +- data/imagenet-r/n02129165/tattoo_0.jpg +- data/imagenet-r/n07749582/deviantart_10.jpg +- data/imagenet-r/n07697313/sketch_8.jpg +- data/imagenet-r/n02206856/sketch_10.jpg +- data/imagenet-r/n02841315/art_10.jpg +- data/imagenet-r/n07745940/cartoon_7.jpg +- data/imagenet-r/n01484850/origami_1.jpg +- data/imagenet-r/n02391049/misc_125.jpg +- data/imagenet-r/n04147183/sketch_3.jpg +- data/imagenet-r/n02086240/misc_29.jpg +- data/imagenet-r/n01784675/misc_4.jpg +- data/imagenet-r/n02447366/cartoon_17.jpg +- data/imagenet-r/n02108915/misc_27.jpg +- data/imagenet-r/n04310018/sketch_8.jpg +- data/imagenet-r/n03773504/sketch_13.jpg +- data/imagenet-r/n02219486/art_8.jpg +- data/imagenet-r/n04465501/tattoo_7.jpg +- data/imagenet-r/n02802426/deviantart_15.jpg +- data/imagenet-r/n02445715/toy_7.jpg +- data/imagenet-r/n02437616/painting_5.jpg +- data/imagenet-r/n02841315/sketch_20.jpg +- data/imagenet-r/n01910747/cartoon_22.jpg +- data/imagenet-r/n02071294/painting_12.jpg +- data/imagenet-r/n02906734/sketch_1.jpg +- data/imagenet-r/n02486410/cartoon_25.jpg +- data/imagenet-r/n02102318/embroidery_2.jpg +- data/imagenet-r/n03630383/sketch_5.jpg +- data/imagenet-r/n01484850/tattoo_25.jpg +- data/imagenet-r/n02939185/sketch_18.jpg +- data/imagenet-r/n04141076/origami_0.jpg +- data/imagenet-r/n02134084/misc_92.jpg +- data/imagenet-r/n07697313/toy_14.jpg +- data/imagenet-r/n01774750/misc_1.jpg +- data/imagenet-r/n01484850/painting_17.jpg +- data/imagenet-r/n02672831/sketch_8.jpg +- data/imagenet-r/n04266014/videogame_5.jpg +- data/imagenet-r/n02814860/embroidery_11.jpg +- data/imagenet-r/n01518878/painting_2.jpg +- data/imagenet-r/n02128385/origami_0.jpg +- data/imagenet-r/n02138441/art_6.jpg +- data/imagenet-r/n02607072/misc_118.jpg +- data/imagenet-r/n02007558/embroidery_11.jpg +- data/imagenet-r/n02797295/misc_39.jpg +- data/imagenet-r/n01882714/painting_12.jpg +- data/imagenet-r/n01677366/sketch_19.jpg +- data/imagenet-r/n02134084/misc_74.jpg +- data/imagenet-r/n09472597/videogame_12.jpg +- data/imagenet-r/n01644373/sketch_11.jpg +- data/imagenet-r/n04118538/sketch_18.jpg +- data/imagenet-r/n02007558/tattoo_11.jpg +- data/imagenet-r/n02268443/misc_89.jpg +- data/imagenet-r/n04465501/cartoon_15.jpg +- data/imagenet-r/n07753275/sketch_4.jpg +- data/imagenet-r/n03930630/misc_13.jpg +- data/imagenet-r/n01910747/videogame_3.jpg +- data/imagenet-r/n09472597/painting_4.jpg +- data/imagenet-r/n07720875/painting_41.jpg +- data/imagenet-r/n02395406/cartoon_22.jpg +- data/imagenet-r/n07614500/sketch_18.jpg +- data/imagenet-r/n02108915/misc_105.jpg +- data/imagenet-r/n01806143/graffiti_0.jpg +- data/imagenet-r/n02085620/misc_108.jpg +- data/imagenet-r/n02007558/tattoo_51.jpg +- data/imagenet-r/n07753592/sketch_4.jpg +- data/imagenet-r/n02363005/toy_10.jpg +- data/imagenet-r/n07880968/sketch_17.jpg +- data/imagenet-r/n01484850/toy_13.jpg +- data/imagenet-r/n02165456/sketch_1.jpg +- data/imagenet-r/n02091134/misc_88.jpg +- data/imagenet-r/n01494475/misc_45.jpg +- data/imagenet-r/n01774750/sketch_5.jpg +- data/imagenet-r/n02110341/misc_114.jpg +- data/imagenet-r/n07745940/deviantart_0.jpg +- data/imagenet-r/n02802426/deviantart_13.jpg +- data/imagenet-r/n07749582/deviantart_3.jpg +- data/imagenet-r/n03372029/deviantart_8.jpg +- data/imagenet-r/n07718472/cartoon_18.jpg +- data/imagenet-r/n09835506/videogame_28.jpg +- data/imagenet-r/n02236044/cartoon_12.jpg +- data/imagenet-r/n02123045/painting_3.jpg +- data/imagenet-r/n03124170/videogame_12.jpg +- data/imagenet-r/n02793495/sketch_14.jpg +- data/imagenet-r/n02106030/sketch_20.jpg +- data/imagenet-r/n02236044/sticker_1.jpg +- data/imagenet-r/n02085620/misc_22.jpg +- data/imagenet-r/n07697313/sketch_26.jpg +- data/imagenet-r/n02097298/misc_63.jpg +- data/imagenet-r/n07753592/misc_100.jpg +- data/imagenet-r/n02701002/toy_0.jpg +- data/imagenet-r/n01944390/deviantart_12.jpg +- data/imagenet-r/n02097298/misc_48.jpg +- data/imagenet-r/n04147183/sketch_13.jpg +- data/imagenet-r/n07714571/sketch_17.jpg +- data/imagenet-r/n04146614/sketch_6.jpg +- data/imagenet-r/n01882714/tattoo_11.jpg +- data/imagenet-r/n02097298/misc_28.jpg +- data/imagenet-r/n02219486/cartoon_3.jpg +- data/imagenet-r/n03775071/art_2.jpg +- data/imagenet-r/n01770393/tattoo_49.jpg +- data/imagenet-r/n04487394/sketch_19.jpg +- data/imagenet-r/n02085620/videogame_3.jpg +- data/imagenet-r/n02071294/deviantart_36.jpg +- data/imagenet-r/n02106662/sketch_13.jpg +- data/imagenet-r/n03710193/misc_41.jpg +- data/imagenet-r/n02445715/cartoon_29.jpg +- data/imagenet-r/n02007558/origami_11.jpg +- data/imagenet-r/n02948072/cartoon_46.jpg +- data/imagenet-r/n02110341/misc_108.jpg +- data/imagenet-r/n02802426/sticker_2.jpg +- data/imagenet-r/n02114367/misc_25.jpg +- data/imagenet-r/n02091134/misc_33.jpg +- data/imagenet-r/n02206856/sticker_20.jpg +- data/imagenet-r/n03947888/cartoon_12.jpg +- data/imagenet-r/n03495258/sketch_10.jpg +- data/imagenet-r/n02655020/sketch_4.jpg +- data/imagenet-r/n02091032/misc_11.jpg +- data/imagenet-r/n03424325/misc_19.jpg +- data/imagenet-r/n01843383/deviantart_66.jpg +- data/imagenet-r/n07768694/tattoo_6.jpg +- data/imagenet-r/n09835506/misc_41.jpg +- data/imagenet-r/n02088364/misc_69.jpg +- data/imagenet-r/n02119022/misc_103.jpg +- data/imagenet-r/n02797295/misc_7.jpg +- data/imagenet-r/n04389033/deviantart_3.jpg +- data/imagenet-r/n07753592/deviantart_8.jpg +- data/imagenet-r/n02823750/graphic_3.jpg +- data/imagenet-r/n02102318/sketch_16.jpg +- data/imagenet-r/n07714990/graffiti_0.jpg +- data/imagenet-r/n02206856/sticker_24.jpg +- data/imagenet-r/n07734744/toy_31.jpg +- data/imagenet-r/n03424325/sketch_19.jpg +- data/imagenet-r/n02007558/graffiti_19.jpg +- data/imagenet-r/n02206856/deviantart_0.jpg +- data/imagenet-r/n09835506/sculpture_1.jpg +- data/imagenet-r/n07753592/misc_154.jpg +- data/imagenet-r/n02113023/misc_0.jpg +- data/imagenet-r/n02096585/misc_40.jpg +- data/imagenet-r/n02279972/painting_33.jpg +- data/imagenet-r/n02051845/painting_7.jpg +- data/imagenet-r/n09472597/videogame_32.jpg +- data/imagenet-r/n07745940/sketch_15.jpg +- data/imagenet-r/n01882714/graffiti_10.jpg +- data/imagenet-r/n02398521/sketch_23.jpg +- data/imagenet-r/n02066245/cartoon_2.jpg +- data/imagenet-r/n02797295/misc_73.jpg +- data/imagenet-r/n02113799/misc_34.jpg +- data/imagenet-r/n02883205/toy_4.jpg +- data/imagenet-r/n07734744/painting_9.jpg +- data/imagenet-r/n07753275/art_10.jpg +- data/imagenet-r/n07753275/videogame_20.jpg +- data/imagenet-r/n02123045/sketch_13.jpg +- data/imagenet-r/n01644373/tattoo_26.jpg +- data/imagenet-r/n01770393/deviantart_2.jpg +- data/imagenet-r/n02051845/cartoon_13.jpg +- data/imagenet-r/n10565667/sketch_18.jpg +- data/imagenet-r/n02701002/sketch_13.jpg +- data/imagenet-r/n02395406/painting_4.jpg +- data/imagenet-r/n03124170/cartoon_67.jpg +- data/imagenet-r/n09472597/videogame_2.jpg +- data/imagenet-r/n02106662/misc_71.jpg +- data/imagenet-r/n02655020/misc_27.jpg +- data/imagenet-r/n07720875/painting_37.jpg +- data/imagenet-r/n01694178/origami_2.jpg +- data/imagenet-r/n01944390/deviantart_6.jpg +- data/imagenet-r/n03947888/tattoo_23.jpg +- data/imagenet-r/n04141076/cartoon_2.jpg +- data/imagenet-r/n02480855/tattoo_66.jpg +- data/imagenet-r/n04409515/deviantart_9.jpg +- data/imagenet-r/n02749479/cartoon_3.jpg +- data/imagenet-r/n04487394/misc_0.jpg +- data/imagenet-r/n07734744/painting_16.jpg +- data/imagenet-r/n02099601/misc_18.jpg +- data/imagenet-r/n04086273/cartoon_0.jpg +- data/imagenet-r/n04310018/painting_16.jpg +- data/imagenet-r/n01484850/painting_15.jpg +- data/imagenet-r/n02226429/sketch_20.jpg +- data/imagenet-r/n01910747/cartoon_27.jpg +- data/imagenet-r/n03498962/videogame_11.jpg +- data/imagenet-r/n01774750/deviantart_9.jpg +- data/imagenet-r/n03424325/misc_34.jpg +- data/imagenet-r/n02108915/misc_77.jpg +- data/imagenet-r/n04325704/sticker_0.jpg +- data/imagenet-r/n04254680/tattoo_10.jpg +- data/imagenet-r/n02391049/misc_1.jpg +- data/imagenet-r/n07697537/sketch_3.jpg +- data/imagenet-r/n01833805/cartoon_12.jpg +- data/imagenet-r/n02395406/origami_7.jpg +- data/imagenet-r/n01770393/tattoo_41.jpg +- data/imagenet-r/n01498041/cartoon_15.jpg +- data/imagenet-r/n02110341/deviantart_3.jpg +- data/imagenet-r/n01514859/toy_3.jpg +- data/imagenet-r/n04325704/sculpture_4.jpg +- data/imagenet-r/n07734744/cartoon_10.jpg +- data/imagenet-r/n01632777/sticker_1.jpg +- data/imagenet-r/n02098286/misc_42.jpg +- data/imagenet-r/n02948072/origami_5.jpg +- data/imagenet-r/n03888257/graffiti_9.jpg +- data/imagenet-r/n03710193/sketch_8.jpg +- data/imagenet-r/n02445715/toy_2.jpg +- data/imagenet-r/n04522168/videogame_21.jpg +- data/imagenet-r/n02823750/sticker_0.jpg +- data/imagenet-r/n01806143/embroidery_2.jpg +- data/imagenet-r/n02099601/misc_21.jpg +- data/imagenet-r/n01820546/sketch_3.jpg +- data/imagenet-r/n02108915/misc_6.jpg +- data/imagenet-r/n07768694/deviantart_12.jpg +- data/imagenet-r/n07745940/origami_3.jpg +- data/imagenet-r/n03930630/misc_14.jpg +- data/imagenet-r/n02906734/graphic_3.jpg +- data/imagenet-r/n02364673/cartoon_17.jpg +- data/imagenet-r/n07697537/videogame_22.jpg +- data/imagenet-r/n02268443/misc_195.jpg +- data/imagenet-r/n02110341/misc_55.jpg +- data/imagenet-r/n02906734/sticker_7.jpg +- data/imagenet-r/n07873807/deviantart_26.jpg +- data/imagenet-r/n04591713/painting_31.jpg +- data/imagenet-r/n07734744/videogame_10.jpg +- data/imagenet-r/n04266014/deviantart_15.jpg +- data/imagenet-r/n02672831/sculpture_1.jpg +- data/imagenet-r/n01644373/sketch_15.jpg +- data/imagenet-r/n02096585/misc_148.jpg +- data/imagenet-r/n02165456/sculpture_9.jpg +- data/imagenet-r/n02823750/cartoon_1.jpg +- data/imagenet-r/n03775071/sketch_11.jpg +- data/imagenet-r/n02206856/cartoon_63.jpg +- data/imagenet-r/n04133789/cartoon_6.jpg +- data/imagenet-r/n01484850/painting_9.jpg +- data/imagenet-r/n02165456/tattoo_54.jpg +- data/imagenet-r/n02110341/misc_162.jpg +- data/imagenet-r/n01784675/sculpture_1.jpg +- data/imagenet-r/n07714571/painting_3.jpg +- data/imagenet-r/n04409515/videogame_5.jpg +- data/imagenet-r/n01514859/sketch_11.jpg +- data/imagenet-r/n02130308/toy_9.jpg +- data/imagenet-r/n01882714/toy_11.jpg +- data/imagenet-r/n02481823/toy_12.jpg +- data/imagenet-r/n01910747/tattoo_54.jpg +- data/imagenet-r/n02939185/tattoo_8.jpg +- data/imagenet-r/n02098286/misc_40.jpg +- data/imagenet-r/n04141076/cartoon_52.jpg +- data/imagenet-r/n03481172/sketch_18.jpg +- data/imagenet-r/n01644373/deviantart_11.jpg +- data/imagenet-r/n02106550/sketch_17.jpg +- data/imagenet-r/n04266014/videogame_14.jpg +- data/imagenet-r/n02128757/tattoo_2.jpg +- data/imagenet-r/n07734744/cartoon_21.jpg +- data/imagenet-r/n01632777/art_1.jpg +- data/imagenet-r/n02814860/sketch_7.jpg +- data/imagenet-r/n04325704/cartoon_3.jpg +- data/imagenet-r/n02802426/videogame_1.jpg +- data/imagenet-r/n02480855/sketch_13.jpg +- data/imagenet-r/n03495258/sculpture_1.jpg +- data/imagenet-r/n03930630/painting_5.jpg +- data/imagenet-r/n02138441/painting_41.jpg +- data/imagenet-r/n02841315/cartoon_28.jpg +- data/imagenet-r/n09835506/deviantart_34.jpg +- data/imagenet-r/n02098286/misc_12.jpg +- data/imagenet-r/n01882714/art_15.jpg +- data/imagenet-r/n03888257/art_3.jpg +- data/imagenet-r/n01484850/misc_2.jpg +- data/imagenet-r/n02398521/sculpture_10.jpg +- data/imagenet-r/n02236044/sketch_12.jpg +- data/imagenet-r/n02793495/sketch_22.jpg +- data/imagenet-r/n04086273/deviantart_6.jpg +- data/imagenet-r/n07749582/cartoon_12.jpg +- data/imagenet-r/n02077923/misc_33.jpg +- data/imagenet-r/n03498962/painting_3.jpg +- data/imagenet-r/n01518878/sculpture_11.jpg +- data/imagenet-r/n02129604/deviantart_10.jpg +- data/imagenet-r/n02009912/misc_26.jpg +- data/imagenet-r/n02129165/deviantart_31.jpg +- data/imagenet-r/n04465501/art_5.jpg +- data/imagenet-r/n01514859/cartoon_13.jpg +- data/imagenet-r/n02802426/sketch_18.jpg +- data/imagenet-r/n01614925/painting_33.jpg +- data/imagenet-r/n04347754/graphic_0.jpg +- data/imagenet-r/n02279972/tattoo_3.jpg +- data/imagenet-r/n02128757/sketch_10.jpg +- data/imagenet-r/n01644373/tattoo_25.jpg +- data/imagenet-r/n07753275/cartoon_13.jpg +- data/imagenet-r/n02395406/sketch_1.jpg +- data/imagenet-r/n04325704/cartoon_13.jpg +- data/imagenet-r/n02007558/embroidery_34.jpg +- data/imagenet-r/n01630670/cartoon_2.jpg +- data/imagenet-r/n02109525/sketch_1.jpg +- data/imagenet-r/n03424325/misc_35.jpg +- data/imagenet-r/n02236044/sketch_5.jpg +- data/imagenet-r/n04591713/sketch_20.jpg +- data/imagenet-r/n02814860/painting_43.jpg +- data/imagenet-r/n07768694/sketch_0.jpg +- data/imagenet-r/n03452741/toy_9.jpg +- data/imagenet-r/n03424325/misc_69.jpg +- data/imagenet-r/n02129604/art_6.jpg +- data/imagenet-r/n02099601/misc_23.jpg +- data/imagenet-r/n02110958/tattoo_0.jpg +- data/imagenet-r/n02106662/misc_82.jpg +- data/imagenet-r/n01443537/cartoon_15.jpg +- data/imagenet-r/n01531178/art_4.jpg +- data/imagenet-r/n02814860/art_11.jpg +- data/imagenet-r/n02102318/art_0.jpg +- data/imagenet-r/n02007558/art_13.jpg +- data/imagenet-r/n07697313/deviantart_1.jpg +- data/imagenet-r/n04409515/cartoon_5.jpg +- data/imagenet-r/n01855672/graffiti_3.jpg +- data/imagenet-r/n10565667/sketch_20.jpg +- data/imagenet-r/n02007558/deviantart_11.jpg +- data/imagenet-r/n02106550/misc_34.jpg +- data/imagenet-r/n02110341/sketch_13.jpg +- data/imagenet-r/n02655020/misc_40.jpg +- data/imagenet-r/n04266014/toy_20.jpg +- data/imagenet-r/n02096585/misc_172.jpg +- data/imagenet-r/n01770393/tattoo_12.jpg +- data/imagenet-r/n02117135/cartoon_12.jpg +- data/imagenet-r/n07745940/toy_2.jpg +- data/imagenet-r/n04275548/sculpture_3.jpg +- data/imagenet-r/n01910747/cartoon_15.jpg +- data/imagenet-r/n04118538/sketch_21.jpg +- data/imagenet-r/n01944390/misc_79.jpg +- data/imagenet-r/n02749479/sketch_4.jpg +- data/imagenet-r/n02129165/origami_3.jpg +- data/imagenet-r/n02110958/cartoon_72.jpg +- data/imagenet-r/n01833805/sketch_11.jpg +- data/imagenet-r/n04254680/cartoon_20.jpg +- data/imagenet-r/n02980441/sketch_17.jpg +- data/imagenet-r/n02395406/toy_29.jpg +- data/imagenet-r/n02481823/deviantart_29.jpg +- data/imagenet-r/n02481823/sculpture_8.jpg +- data/imagenet-r/n04141076/deviantart_11.jpg +- data/imagenet-r/n02823750/sketch_11.jpg +- data/imagenet-r/n02112018/misc_14.jpg +- data/imagenet-r/n02410509/sculpture_42.jpg +- data/imagenet-r/n02071294/tattoo_21.jpg +- data/imagenet-r/n02346627/sculpture_7.jpg +- data/imagenet-r/n07614500/toy_1.jpg +- data/imagenet-r/n02112137/sketch_23.jpg +- data/imagenet-r/n03494278/graphic_2.jpg +- data/imagenet-r/n01855672/deviantart_5.jpg +- data/imagenet-r/n02364673/deviantart_5.jpg +- data/imagenet-r/n01616318/painting_10.jpg +- data/imagenet-r/n02356798/toy_2.jpg +- data/imagenet-r/n02085620/misc_92.jpg +- data/imagenet-r/n02802426/deviantart_8.jpg +- data/imagenet-r/n02445715/tattoo_3.jpg +- data/imagenet-r/n04591713/sketch_17.jpg +- data/imagenet-r/n02814860/cartoon_28.jpg +- data/imagenet-r/n02099601/misc_65.jpg +- data/imagenet-r/n02112018/sketch_6.jpg +- data/imagenet-r/n03495258/sketch_8.jpg +- data/imagenet-r/n01986214/tattoo_10.jpg +- data/imagenet-r/n09835506/deviantart_32.jpg +- data/imagenet-r/n02106662/misc_95.jpg +- data/imagenet-r/n01806143/embroidery_6.jpg +- data/imagenet-r/n02395406/painting_9.jpg +- data/imagenet-r/n07614500/toy_0.jpg +- data/imagenet-r/n01983481/sketch_12.jpg +- data/imagenet-r/n07695742/painting_6.jpg +- data/imagenet-r/n07734744/videogame_44.jpg +- data/imagenet-r/n02007558/art_27.jpg +- data/imagenet-r/n07753275/cartoon_11.jpg +- data/imagenet-r/n02769748/sketch_8.jpg +- data/imagenet-r/n02085620/sketch_17.jpg +- data/imagenet-r/n02437616/art_5.jpg +- data/imagenet-r/n07714571/painting_20.jpg +- data/imagenet-r/n02480855/tattoo_63.jpg +- data/imagenet-r/n02130308/cartoon_3.jpg +- data/imagenet-r/n09835506/videogame_22.jpg +- data/imagenet-r/n04266014/toy_5.jpg +- data/imagenet-r/n02088238/misc_6.jpg +- data/imagenet-r/n04254680/sketch_8.jpg +- data/imagenet-r/n02129604/embroidery_1.jpg +- data/imagenet-r/n07753275/graphic_12.jpg +- data/imagenet-r/n04522168/cartoon_27.jpg +- data/imagenet-r/n07734744/embroidery_12.jpg +- data/imagenet-r/n07697537/misc_92.jpg +- data/imagenet-r/n01770393/tattoo_28.jpg +- data/imagenet-r/n04086273/cartoon_17.jpg +- data/imagenet-r/n02483362/cartoon_8.jpg +- data/imagenet-r/n01484850/toy_7.jpg +- data/imagenet-r/n01843383/deviantart_36.jpg +- data/imagenet-r/n02486410/cartoon_24.jpg +- data/imagenet-r/n01847000/misc_29.jpg +- data/imagenet-r/n07697313/graphic_10.jpg +- data/imagenet-r/n01882714/painting_8.jpg +- data/imagenet-r/n02110958/embroidery_7.jpg +- data/imagenet-r/n07714571/deviantart_8.jpg +- data/imagenet-r/n01518878/cartoon_35.jpg +- data/imagenet-r/n02951358/deviantart_6.jpg +- data/imagenet-r/n01534433/painting_12.jpg +- data/imagenet-r/n02088466/sketch_15.jpg +- data/imagenet-r/n07734744/art_20.jpg +- data/imagenet-r/n01843383/cartoon_36.jpg +- data/imagenet-r/n02106166/art_1.jpg +- data/imagenet-r/n02091134/misc_65.jpg +- data/imagenet-r/n01843383/deviantart_0.jpg +- data/imagenet-r/n04465501/toy_1.jpg +- data/imagenet-r/n03345487/misc_7.jpg +- data/imagenet-r/n02134084/videogame_8.jpg +- data/imagenet-r/n01843383/painting_44.jpg +- data/imagenet-r/n02395406/misc_2.jpg +- data/imagenet-r/n04146614/painting_2.jpg +- data/imagenet-r/n02206856/embroidery_2.jpg +- data/imagenet-r/n01484850/deviantart_9.jpg +- data/imagenet-r/n07697313/sketch_14.jpg +- data/imagenet-r/n02123045/graffiti_1.jpg +- data/imagenet-r/n02950826/sketch_5.jpg +- data/imagenet-r/n04146614/painting_5.jpg +- data/imagenet-r/n01694178/tattoo_21.jpg +- data/imagenet-r/n03775071/cartoon_9.jpg +- data/imagenet-r/n02112018/misc_2.jpg +- data/imagenet-r/n07745940/cartoon_20.jpg +- data/imagenet-r/n01677366/misc_19.jpg +- data/imagenet-r/n07697537/misc_57.jpg +- data/imagenet-r/n01694178/toy_2.jpg +- data/imagenet-r/n07714571/cartoon_7.jpg +- data/imagenet-r/n01882714/cartoon_8.jpg +- data/imagenet-r/n02363005/sketch_19.jpg +- data/imagenet-r/n04522168/painting_12.jpg +- data/imagenet-r/n02480495/sketch_9.jpg +- data/imagenet-r/n02091134/misc_0.jpg +- data/imagenet-r/n04266014/art_4.jpg +- data/imagenet-r/n01443537/painting_34.jpg +- data/imagenet-r/n02190166/sketch_20.jpg +- data/imagenet-r/n02206856/sketch_3.jpg +- data/imagenet-r/n02481823/cartoon_26.jpg +- data/imagenet-r/n02395406/sketch_20.jpg +- data/imagenet-r/n02119022/misc_158.jpg +- data/imagenet-r/n01531178/tattoo_4.jpg +- data/imagenet-r/n02114367/sketch_0.jpg +- data/imagenet-r/n04266014/tattoo_0.jpg +- data/imagenet-r/n04141076/tattoo_7.jpg +- data/imagenet-r/n02749479/misc_17.jpg +- data/imagenet-r/n02939185/misc_1.jpg +- data/imagenet-r/n02129165/tattoo_69.jpg +- data/imagenet-r/n02447366/cartoon_2.jpg +- data/imagenet-r/n02236044/sculpture_30.jpg +- data/imagenet-r/n07920052/sketch_11.jpg +- data/imagenet-r/n03124170/toy_13.jpg +- data/imagenet-r/n02447366/misc_7.jpg +- data/imagenet-r/n04141076/misc_0.jpg +- data/imagenet-r/n02510455/sketch_15.jpg +- data/imagenet-r/n02797295/sketch_7.jpg +- data/imagenet-r/n02797295/misc_35.jpg +- data/imagenet-r/n09472597/videogame_11.jpg +- data/imagenet-r/n02123045/painting_60.jpg +- data/imagenet-r/n03372029/sculpture_26.jpg +- data/imagenet-r/n02165456/toy_27.jpg +- data/imagenet-r/n02096585/tattoo_14.jpg +- data/imagenet-r/n03481172/videogame_13.jpg +- data/imagenet-r/n04266014/misc_12.jpg +- data/imagenet-r/n02108089/misc_44.jpg +- data/imagenet-r/n01944390/sketch_1.jpg +- data/imagenet-r/n03124170/graffiti_1.jpg +- data/imagenet-r/n02480855/graffiti_18.jpg +- data/imagenet-r/n04192698/toy_0.jpg +- data/imagenet-r/n02843684/sketch_17.jpg +- data/imagenet-r/n02437616/cartoon_6.jpg +- data/imagenet-r/n02883205/cartoon_10.jpg +- data/imagenet-r/n02843684/misc_25.jpg +- data/imagenet-r/n02233338/sketch_17.jpg +- data/imagenet-r/n02102318/painting_12.jpg +- data/imagenet-r/n02219486/cartoon_2.jpg +- data/imagenet-r/n07749582/painting_8.jpg +- data/imagenet-r/n07734744/sketch_12.jpg +- data/imagenet-r/n01843383/sketch_21.jpg +- data/imagenet-r/n01882714/cartoon_6.jpg +- data/imagenet-r/n04552348/toy_7.jpg +- data/imagenet-r/n04536866/painting_19.jpg +- data/imagenet-r/n02134084/misc_39.jpg +- data/imagenet-r/n02233338/misc_14.jpg +- data/imagenet-r/n02510455/misc_121.jpg +- data/imagenet-r/n02841315/art_11.jpg +- data/imagenet-r/n02279972/art_10.jpg +- data/imagenet-r/n02769748/sketch_28.jpg +- data/imagenet-r/n02165456/toy_34.jpg +- data/imagenet-r/n02106662/misc_77.jpg +- data/imagenet-r/n02423022/art_15.jpg +- data/imagenet-r/n02391049/misc_88.jpg +- data/imagenet-r/n04192698/cartoon_12.jpg +- data/imagenet-r/n02236044/sculpture_2.jpg +- data/imagenet-r/n03345487/toy_15.jpg +- data/imagenet-r/n02447366/sculpture_0.jpg +- data/imagenet-r/n02843684/painting_0.jpg +- data/imagenet-r/n07873807/graphic_3.jpg +- data/imagenet-r/n03676483/sketch_3.jpg +- data/imagenet-r/n07768694/painting_16.jpg +- data/imagenet-r/n03124170/sketch_9.jpg +- data/imagenet-r/n03773504/graphic_2.jpg +- data/imagenet-r/n07753592/misc_53.jpg +- data/imagenet-r/n01882714/deviantart_34.jpg +- data/imagenet-r/n02268443/misc_153.jpg +- data/imagenet-r/n04141076/cartoon_63.jpg +- data/imagenet-r/n02906734/sticker_8.jpg +- data/imagenet-r/n02129604/painting_0.jpg +- data/imagenet-r/n03272010/art_3.jpg +- data/imagenet-r/n02510455/misc_77.jpg +- data/imagenet-r/n02447366/origami_2.jpg +- data/imagenet-r/n02056570/graffiti_0.jpg +- data/imagenet-r/n02056570/deviantart_0.jpg +- data/imagenet-r/n02398521/cartoon_4.jpg +- data/imagenet-r/n03452741/misc_2.jpg +- data/imagenet-r/n01944390/misc_129.jpg +- data/imagenet-r/n02114367/videogame_0.jpg +- data/imagenet-r/n02356798/painting_3.jpg +- data/imagenet-r/n03930630/toy_10.jpg +- data/imagenet-r/n04254680/cartoon_19.jpg +- data/imagenet-r/n03452741/videogame_5.jpg +- data/imagenet-r/n03372029/sculpture_5.jpg +- data/imagenet-r/n07749582/misc_5.jpg +- data/imagenet-r/n02088364/sketch_0.jpg +- data/imagenet-r/n02391049/misc_102.jpg +- data/imagenet-r/n01484850/misc_13.jpg +- data/imagenet-r/n03602883/misc_6.jpg +- data/imagenet-r/n09472597/painting_8.jpg +- data/imagenet-r/n02112018/misc_6.jpg +- data/imagenet-r/n02106662/misc_61.jpg +- data/imagenet-r/n02113624/sketch_21.jpg +- data/imagenet-r/n03372029/cartoon_2.jpg +- data/imagenet-r/n01484850/deviantart_19.jpg +- data/imagenet-r/n02110341/deviantart_9.jpg +- data/imagenet-r/n03649909/sketch_21.jpg +- data/imagenet-r/n02219486/origami_6.jpg +- data/imagenet-r/n04310018/toy_22.jpg +- data/imagenet-r/n01770393/tattoo_1.jpg +- data/imagenet-r/n04266014/art_5.jpg +- data/imagenet-r/n07734744/misc_15.jpg +- data/imagenet-r/n03272010/misc_3.jpg +- data/imagenet-r/n03676483/sketch_8.jpg +- data/imagenet-r/n07742313/painting_9.jpg +- data/imagenet-r/n07745940/graphic_5.jpg +- data/imagenet-r/n07749582/art_6.jpg +- data/imagenet-r/n01855672/deviantart_3.jpg +- data/imagenet-r/n02007558/art_5.jpg +- data/imagenet-r/n02909870/sketch_8.jpg +- data/imagenet-r/n07734744/deviantart_8.jpg +- data/imagenet-r/n07753592/misc_106.jpg +- data/imagenet-r/n04266014/toy_14.jpg +- data/imagenet-r/n01494475/misc_80.jpg +- data/imagenet-r/n07920052/sketch_2.jpg +- data/imagenet-r/n02363005/painting_3.jpg +- data/imagenet-r/n02106166/sketch_18.jpg +- data/imagenet-r/n09472597/cartoon_21.jpg +- data/imagenet-r/n02134084/misc_42.jpg +- data/imagenet-r/n02007558/sketch_11.jpg +- data/imagenet-r/n01833805/art_8.jpg +- data/imagenet-r/n04389033/deviantart_9.jpg +- data/imagenet-r/n03775071/sketch_15.jpg +- data/imagenet-r/n02110958/cartoon_61.jpg +- data/imagenet-r/n01484850/tattoo_5.jpg +- data/imagenet-r/n01518878/misc_0.jpg +- data/imagenet-r/n04141076/toy_4.jpg +- data/imagenet-r/n01983481/misc_51.jpg +- data/imagenet-r/n02110958/painting_53.jpg +- data/imagenet-r/n04254680/deviantart_26.jpg +- data/imagenet-r/n02138441/painting_22.jpg +- data/imagenet-r/n02102318/misc_58.jpg +- data/imagenet-r/n02749479/videogame_10.jpg +- data/imagenet-r/n01484850/videogame_2.jpg +- data/imagenet-r/n02123045/painting_14.jpg +- data/imagenet-r/n02129165/toy_5.jpg +- data/imagenet-r/n01498041/painting_0.jpg +- data/imagenet-r/n02097298/misc_61.jpg +- data/imagenet-r/n03594945/graffiti_6.jpg +- data/imagenet-r/n03602883/sketch_22.jpg +- data/imagenet-r/n02526121/cartoon_11.jpg +- data/imagenet-r/n01860187/sketch_14.jpg +- data/imagenet-r/n02114367/sketch_20.jpg +- data/imagenet-r/n02980441/deviantart_4.jpg +- data/imagenet-r/n01820546/deviantart_11.jpg +- data/imagenet-r/n03594945/videogame_2.jpg +- data/imagenet-r/n01494475/sketch_5.jpg +- data/imagenet-r/n03272010/painting_25.jpg +- data/imagenet-r/n02091134/misc_75.jpg +- data/imagenet-r/n01694178/sketch_2.jpg +- data/imagenet-r/n01944390/tattoo_8.jpg +- data/imagenet-r/n07614500/embroidery_22.jpg +- data/imagenet-r/n07753592/deviantart_16.jpg +- data/imagenet-r/n02279972/embroidery_0.jpg +- data/imagenet-r/n02007558/toy_10.jpg +- data/imagenet-r/n02119022/tattoo_1.jpg +- data/imagenet-r/n04325704/graffiti_1.jpg +- data/imagenet-r/n02701002/videogame_3.jpg +- data/imagenet-r/n03372029/sketch_20.jpg +- data/imagenet-r/n02410509/sculpture_26.jpg +- data/imagenet-r/n04275548/sculpture_1.jpg +- data/imagenet-r/n01484850/tattoo_17.jpg +- data/imagenet-r/n07734744/cartoon_46.jpg +- data/imagenet-r/n07745940/misc_5.jpg +- data/imagenet-r/n04141076/art_14.jpg +- data/imagenet-r/n02980441/videogame_5.jpg +- data/imagenet-r/n01770393/cartoon_26.jpg +- data/imagenet-r/n09472597/deviantart_16.jpg +- data/imagenet-r/n03495258/cartoon_4.jpg +- data/imagenet-r/n04465501/sketch_8.jpg +- data/imagenet-r/n07718472/deviantart_5.jpg +- data/imagenet-r/n02099601/misc_10.jpg +- data/imagenet-r/n04275548/cartoon_10.jpg +- data/imagenet-r/n02138441/toy_9.jpg +- data/imagenet-r/n02113624/misc_33.jpg +- data/imagenet-r/n07749582/painting_16.jpg +- data/imagenet-r/n07714571/sculpture_0.jpg +- data/imagenet-r/n02110185/art_8.jpg +- data/imagenet-r/n02480495/graffiti_0.jpg +- data/imagenet-r/n03467068/cartoon_16.jpg +- data/imagenet-r/n02113023/sketch_16.jpg +- data/imagenet-r/n01518878/cartoon_14.jpg +- data/imagenet-r/n02317335/toy_3.jpg +- data/imagenet-r/n04389033/videogame_3.jpg +- data/imagenet-r/n01443537/painting_18.jpg +- data/imagenet-r/n03372029/sculpture_25.jpg +- data/imagenet-r/n02395406/sticker_5.jpg +- data/imagenet-r/n07718472/cartoon_7.jpg +- data/imagenet-r/n02007558/tattoo_47.jpg +- data/imagenet-r/n01484850/origami_0.jpg +- data/imagenet-r/n07697313/cartoon_8.jpg +- data/imagenet-r/n02112018/sketch_16.jpg +- data/imagenet-r/n02480495/painting_4.jpg +- data/imagenet-r/n07742313/deviantart_2.jpg +- data/imagenet-r/n02236044/graffiti_14.jpg +- data/imagenet-r/n02395406/misc_16.jpg +- data/imagenet-r/n03495258/misc_1.jpg +- data/imagenet-r/n10565667/art_9.jpg +- data/imagenet-r/n03498962/misc_0.jpg +- data/imagenet-r/n03676483/cartoon_18.jpg +- data/imagenet-r/n02325366/sketch_0.jpg +- data/imagenet-r/n04347754/tattoo_4.jpg +- data/imagenet-r/n04591713/painting_18.jpg +- data/imagenet-r/n02165456/sketch_5.jpg +- data/imagenet-r/n03649909/toy_14.jpg +- data/imagenet-r/n02206856/cartoon_58.jpg +- data/imagenet-r/n07734744/misc_6.jpg +- data/imagenet-r/n02102318/sketch_1.jpg +- data/imagenet-r/n01986214/deviantart_19.jpg +- data/imagenet-r/n01820546/sculpture_4.jpg +- data/imagenet-r/n02233338/sketch_8.jpg +- data/imagenet-r/n02236044/art_17.jpg +- data/imagenet-r/n01806143/misc_1.jpg +- data/imagenet-r/n01944390/deviantart_10.jpg +- data/imagenet-r/n04310018/painting_29.jpg +- data/imagenet-r/n04552348/art_20.jpg +- data/imagenet-r/n01494475/sketch_23.jpg +- data/imagenet-r/n03710193/misc_20.jpg +- data/imagenet-r/n02109525/sketch_20.jpg +- data/imagenet-r/n02190166/sketch_17.jpg +- data/imagenet-r/n07614500/sticker_5.jpg +- data/imagenet-r/n02672831/sketch_5.jpg +- data/imagenet-r/n04389033/art_5.jpg +- data/imagenet-r/n07693725/sketch_20.jpg +- data/imagenet-r/n02233338/sketch_9.jpg +- data/imagenet-r/n01860187/origami_6.jpg +- data/imagenet-r/n01443537/graffiti_0.jpg +- data/imagenet-r/n04254680/deviantart_10.jpg +- data/imagenet-r/n02236044/sketch_3.jpg +- data/imagenet-r/n01860187/sketch_2.jpg +- data/imagenet-r/n01531178/cartoon_18.jpg +- data/imagenet-r/n02190166/sketch_19.jpg +- data/imagenet-r/n01644373/tattoo_15.jpg +- data/imagenet-r/n02672831/deviantart_1.jpg +- data/imagenet-r/n02096585/misc_166.jpg +- data/imagenet-r/n02793495/sketch_12.jpg +- data/imagenet-r/n02951358/videogame_6.jpg +- data/imagenet-r/n02268443/misc_129.jpg +- data/imagenet-r/n04310018/sculpture_0.jpg +- data/imagenet-r/n02088238/misc_30.jpg +- data/imagenet-r/n04347754/videogame_19.jpg +- data/imagenet-r/n03272010/cartoon_0.jpg +- data/imagenet-r/n02939185/sketch_11.jpg +- data/imagenet-r/n04275548/cartoon_2.jpg +- data/imagenet-r/n04086273/tattoo_11.jpg +- data/imagenet-r/n02106662/sketch_9.jpg +- data/imagenet-r/n12267677/sketch_9.jpg +- data/imagenet-r/n02129165/cartoon_33.jpg +- data/imagenet-r/n03481172/graffiti_1.jpg +- data/imagenet-r/n02206856/painting_9.jpg +- data/imagenet-r/n03773504/graffiti_3.jpg +- data/imagenet-r/n02841315/sculpture_11.jpg +- data/imagenet-r/n03372029/art_10.jpg +- data/imagenet-r/n01944390/misc_48.jpg +- data/imagenet-r/n02391049/misc_96.jpg +- data/imagenet-r/n04347754/toy_10.jpg +- data/imagenet-r/n04266014/toy_21.jpg +- data/imagenet-r/n02948072/deviantart_12.jpg +- data/imagenet-r/n01806143/cartoon_7.jpg +- data/imagenet-r/n02391049/misc_78.jpg +- data/imagenet-r/n01531178/cartoon_13.jpg +- data/imagenet-r/n02906734/toy_2.jpg +- data/imagenet-r/n03498962/videogame_13.jpg +- data/imagenet-r/n03124170/painting_31.jpg +- data/imagenet-r/n01833805/graffiti_18.jpg +- data/imagenet-r/n07753275/videogame_15.jpg +- data/imagenet-r/n02445715/origami_0.jpg +- data/imagenet-r/n01882714/deviantart_13.jpg +- data/imagenet-r/n07697313/painting_3.jpg +- data/imagenet-r/n07697313/deviantart_15.jpg +- data/imagenet-r/n02110958/embroidery_12.jpg +- data/imagenet-r/n02808440/graffiti_4.jpg +- data/imagenet-r/n02096585/misc_66.jpg +- data/imagenet-r/n02007558/cartoon_32.jpg +- data/imagenet-r/n07873807/videogame_2.jpg +- data/imagenet-r/n07920052/deviantart_17.jpg +- data/imagenet-r/n02108915/misc_127.jpg +- data/imagenet-r/n03372029/art_6.jpg +- data/imagenet-r/n03372029/sculpture_10.jpg +- data/imagenet-r/n07749582/misc_7.jpg +- data/imagenet-r/n02085620/misc_84.jpg +- data/imagenet-r/n04536866/tattoo_1.jpg +- data/imagenet-r/n02980441/videogame_23.jpg +- data/imagenet-r/n02165456/tattoo_71.jpg +- data/imagenet-r/n03888257/graffiti_2.jpg +- data/imagenet-r/n07697313/videogame_2.jpg +- data/imagenet-r/n02088466/misc_27.jpg +- data/imagenet-r/n03495258/tattoo_8.jpg +- data/imagenet-r/n07873807/misc_4.jpg +- data/imagenet-r/n02129604/tattoo_19.jpg +- data/imagenet-r/n01677366/misc_28.jpg +- data/imagenet-r/n10565667/toy_10.jpg +- data/imagenet-r/n01531178/sketch_11.jpg +- data/imagenet-r/n07695742/misc_9.jpg +- data/imagenet-r/n02480855/painting_2.jpg +- data/imagenet-r/n02423022/sketch_4.jpg +- data/imagenet-r/n02009912/misc_12.jpg +- data/imagenet-r/n02906734/cartoon_29.jpg +- data/imagenet-r/n02802426/cartoon_17.jpg +- data/imagenet-r/n03345487/sticker_0.jpg +- data/imagenet-r/n04133789/misc_2.jpg +- data/imagenet-r/n04141076/sculpture_0.jpg +- data/imagenet-r/n01986214/cartoon_27.jpg +- data/imagenet-r/n02410509/cartoon_12.jpg +- data/imagenet-r/n01614925/painting_43.jpg +- data/imagenet-r/n02129604/tattoo_11.jpg +- data/imagenet-r/n02325366/misc_24.jpg +- data/imagenet-r/n07697537/sketch_8.jpg +- data/imagenet-r/n04552348/sketch_12.jpg +- data/imagenet-r/n02480495/art_15.jpg +- data/imagenet-r/n02481823/painting_22.jpg +- data/imagenet-r/n02071294/cartoon_10.jpg +- data/imagenet-r/n02236044/graffiti_10.jpg +- data/imagenet-r/n02672831/sticker_3.jpg +- data/imagenet-r/n01443537/cartoon_10.jpg +- data/imagenet-r/n02007558/tattoo_21.jpg +- data/imagenet-r/n01986214/sketch_10.jpg +- data/imagenet-r/n04192698/sketch_11.jpg +- data/imagenet-r/n04141076/art_0.jpg +- data/imagenet-r/n02099712/sketch_5.jpg +- data/imagenet-r/n04147183/sketch_16.jpg +- data/imagenet-r/n07880968/cartoon_20.jpg +- data/imagenet-r/n02808440/cartoon_3.jpg +- data/imagenet-r/n02119022/misc_0.jpg +- data/imagenet-r/n04347754/videogame_8.jpg +- data/imagenet-r/n02814860/embroidery_7.jpg +- data/imagenet-r/n02814860/cartoon_14.jpg +- data/imagenet-r/n02071294/deviantart_7.jpg +- data/imagenet-r/n02823750/deviantart_5.jpg +- data/imagenet-r/n03594945/misc_10.jpg +- data/imagenet-r/n01944390/misc_77.jpg +- data/imagenet-r/n02051845/cartoon_14.jpg +- data/imagenet-r/n04347754/toy_7.jpg +- data/imagenet-r/n02437616/art_8.jpg +- data/imagenet-r/n01531178/embroidery_1.jpg +- data/imagenet-r/n07697537/misc_0.jpg +- data/imagenet-r/n01882714/sculpture_5.jpg +- data/imagenet-r/n02009912/misc_55.jpg +- data/imagenet-r/n02110341/misc_28.jpg +- data/imagenet-r/n02165456/graphic_5.jpg +- data/imagenet-r/n02423022/sculpture_9.jpg +- data/imagenet-r/n04086273/toy_2.jpg +- data/imagenet-r/n02992529/toy_0.jpg +- data/imagenet-r/n02129604/sketch_0.jpg +- data/imagenet-r/n09835506/misc_31.jpg +- data/imagenet-r/n02814860/painting_35.jpg +- data/imagenet-r/n03947888/videogame_12.jpg +- data/imagenet-r/n02130308/cartoon_24.jpg +- data/imagenet-r/n02364673/misc_9.jpg +- data/imagenet-r/n04086273/videogame_2.jpg +- data/imagenet-r/n04487394/deviantart_0.jpg +- data/imagenet-r/n02109525/misc_12.jpg +- data/imagenet-r/n04409515/cartoon_2.jpg +- data/imagenet-r/n02980441/toy_9.jpg +- data/imagenet-r/n01614925/tattoo_48.jpg +- data/imagenet-r/n02108915/misc_36.jpg +- data/imagenet-r/n02364673/cartoon_13.jpg +- data/imagenet-r/n02398521/graffiti_1.jpg +- data/imagenet-r/n04536866/painting_16.jpg +- data/imagenet-r/n04086273/deviantart_3.jpg +- data/imagenet-r/n03124170/toy_21.jpg +- data/imagenet-r/n02510455/deviantart_3.jpg +- data/imagenet-r/n03372029/sculpture_32.jpg +- data/imagenet-r/n02102318/painting_3.jpg +- data/imagenet-r/n03676483/embroidery_0.jpg +- data/imagenet-r/n01614925/tattoo_36.jpg +- data/imagenet-r/n03481172/cartoon_33.jpg +- data/imagenet-r/n01774750/sketch_13.jpg +- data/imagenet-r/n02091032/sketch_22.jpg +- data/imagenet-r/n02206856/embroidery_0.jpg +- data/imagenet-r/n01484850/toy_5.jpg +- data/imagenet-r/n02102318/sketch_5.jpg +- data/imagenet-r/n02119022/misc_44.jpg +- data/imagenet-r/n01774750/origami_6.jpg +- data/imagenet-r/n01944390/sketch_18.jpg +- data/imagenet-r/n02110341/misc_149.jpg +- data/imagenet-r/n04146614/painting_6.jpg +- data/imagenet-r/n02445715/toy_1.jpg +- data/imagenet-r/n07880968/toy_1.jpg +- data/imagenet-r/n03452741/art_4.jpg +- data/imagenet-r/n03481172/toy_7.jpg +- data/imagenet-r/n02823750/misc_0.jpg +- data/imagenet-r/n04465501/videogame_7.jpg +- data/imagenet-r/n02112137/sketch_5.jpg +- data/imagenet-r/n02481823/sculpture_2.jpg +- data/imagenet-r/n03272010/painting_28.jpg +- data/imagenet-r/n03775071/embroidery_1.jpg +- data/imagenet-r/n10565667/sketch_16.jpg +- data/imagenet-r/n02086240/sketch_6.jpg +- data/imagenet-r/n02085620/sketch_18.jpg +- data/imagenet-r/n01820546/deviantart_27.jpg +- data/imagenet-r/n01632777/cartoon_14.jpg +- data/imagenet-r/n02110958/cartoon_64.jpg +- data/imagenet-r/n02481823/sketch_1.jpg +- data/imagenet-r/n02108089/sketch_11.jpg +- data/imagenet-r/n04465501/sculpture_5.jpg +- data/imagenet-r/n02510455/sketch_8.jpg +- data/imagenet-r/n03498962/sketch_6.jpg +- data/imagenet-r/n07745940/cartoon_3.jpg +- data/imagenet-r/n02398521/painting_0.jpg +- data/imagenet-r/n02510455/misc_126.jpg +- data/imagenet-r/n03124170/graphic_2.jpg +- data/imagenet-r/n01748264/tattoo_13.jpg +- data/imagenet-r/n04347754/sculpture_1.jpg +- data/imagenet-r/n02802426/videogame_12.jpg +- data/imagenet-r/n02099601/misc_98.jpg +- data/imagenet-r/n02206856/sticker_11.jpg +- data/imagenet-r/n07749582/misc_2.jpg +- data/imagenet-r/n02966193/sketch_14.jpg +- data/imagenet-r/n02138441/sketch_8.jpg +- data/imagenet-r/n02106166/misc_10.jpg +- data/imagenet-r/n02346627/sketch_10.jpg +- data/imagenet-r/n02088094/sketch_16.jpg +- data/imagenet-r/n07873807/deviantart_4.jpg +- data/imagenet-r/n04465501/videogame_30.jpg +- data/imagenet-r/n02134084/misc_114.jpg +- data/imagenet-r/n02437616/origami_0.jpg +- data/imagenet-r/n02268443/misc_47.jpg +- data/imagenet-r/n01632777/sketch_9.jpg +- data/imagenet-r/n01847000/cartoon_6.jpg +- data/imagenet-r/n02091032/misc_8.jpg +- data/imagenet-r/n02325366/misc_36.jpg +- data/imagenet-r/n07614500/cartoon_14.jpg +- data/imagenet-r/n02102318/painting_7.jpg +- data/imagenet-r/n07697313/cartoon_17.jpg +- data/imagenet-r/n07714571/painting_2.jpg +- data/imagenet-r/n02138441/cartoon_19.jpg +- data/imagenet-r/n01531178/painting_11.jpg +- data/imagenet-r/n02749479/sketch_14.jpg +- data/imagenet-r/n02526121/art_2.jpg +- data/imagenet-r/n07753275/videogame_14.jpg +- data/imagenet-r/n02363005/cartoon_23.jpg +- data/imagenet-r/n02769748/cartoon_34.jpg +- data/imagenet-r/n02088238/misc_38.jpg +- data/imagenet-r/n02939185/art_0.jpg +- data/imagenet-r/n03947888/tattoo_10.jpg +- data/imagenet-r/n02108089/sketch_10.jpg +- data/imagenet-r/n01534433/painting_11.jpg +- data/imagenet-r/n02951358/cartoon_4.jpg +- data/imagenet-r/n02749479/misc_30.jpg +- data/imagenet-r/n02110185/graphic_8.jpg +- data/imagenet-r/n02113023/misc_36.jpg +- data/imagenet-r/n04141076/cartoon_21.jpg +- data/imagenet-r/n09472597/toy_4.jpg +- data/imagenet-r/n01443537/sketch_0.jpg +- data/imagenet-r/n02129165/sketch_10.jpg +- data/imagenet-r/n02749479/misc_27.jpg +- data/imagenet-r/n02841315/sculpture_6.jpg +- data/imagenet-r/n02447366/cartoon_6.jpg +- data/imagenet-r/n04086273/videogame_0.jpg +- data/imagenet-r/n01748264/tattoo_34.jpg +- data/imagenet-r/n01531178/sketch_5.jpg +- data/imagenet-r/n03124170/videogame_18.jpg +- data/imagenet-r/n03467068/videogame_5.jpg +- data/imagenet-r/n01806143/sketch_9.jpg +- data/imagenet-r/n02823750/sketch_7.jpg +- data/imagenet-r/n02088238/sketch_12.jpg +- data/imagenet-r/n01748264/tattoo_18.jpg +- data/imagenet-r/n04141076/sketch_5.jpg +- data/imagenet-r/n02071294/sculpture_9.jpg +- data/imagenet-r/n04389033/graffiti_7.jpg +- data/imagenet-r/n03594945/videogame_7.jpg +- data/imagenet-r/n01855672/graffiti_0.jpg +- data/imagenet-r/n03594945/misc_11.jpg +- data/imagenet-r/n01614925/embroidery_0.jpg +- data/imagenet-r/n02007558/graffiti_9.jpg +- data/imagenet-r/n01644373/painting_17.jpg +- data/imagenet-r/n02992529/sketch_17.jpg +- data/imagenet-r/n02948072/graphic_14.jpg +- data/imagenet-r/n01614925/painting_24.jpg +- data/imagenet-r/n02410509/sculpture_30.jpg +- data/imagenet-r/n02391049/misc_81.jpg +- data/imagenet-r/n02091134/misc_36.jpg +- data/imagenet-r/n02395406/misc_30.jpg +- data/imagenet-r/n07873807/embroidery_1.jpg +- data/imagenet-r/n03345487/videogame_20.jpg +- data/imagenet-r/n02119022/misc_3.jpg +- data/imagenet-r/n03467068/misc_0.jpg +- data/imagenet-r/n01833805/sketch_21.jpg +- data/imagenet-r/n02802426/videogame_9.jpg +- data/imagenet-r/n04409515/deviantart_13.jpg +- data/imagenet-r/n03888257/embroidery_0.jpg +- data/imagenet-r/n01910747/sketch_19.jpg +- data/imagenet-r/n02814860/sticker_5.jpg +- data/imagenet-r/n04141076/art_10.jpg +- data/imagenet-r/n04522168/sticker_0.jpg +- data/imagenet-r/n02423022/cartoon_29.jpg +- data/imagenet-r/n02206856/graphic_3.jpg +- data/imagenet-r/n02410509/graffiti_4.jpg +- data/imagenet-r/n01860187/cartoon_7.jpg +- data/imagenet-r/n02114367/misc_20.jpg +- data/imagenet-r/n02769748/sculpture_0.jpg +- data/imagenet-r/n04141076/deviantart_28.jpg +- data/imagenet-r/n02951358/painting_17.jpg +- data/imagenet-r/n01494475/misc_30.jpg +- data/imagenet-r/n01443537/sketch_14.jpg +- data/imagenet-r/n01644373/painting_7.jpg +- data/imagenet-r/n04275548/cartoon_7.jpg +- data/imagenet-r/n03481172/sticker_5.jpg +- data/imagenet-r/n01843383/deviantart_43.jpg +- data/imagenet-r/n02129165/sketch_14.jpg +- data/imagenet-r/n04522168/cartoon_2.jpg +- data/imagenet-r/n02096585/misc_97.jpg +- data/imagenet-r/n01910747/misc_3.jpg +- data/imagenet-r/n07768694/art_3.jpg +- data/imagenet-r/n02480855/tattoo_51.jpg +- data/imagenet-r/n02480495/toy_7.jpg +- data/imagenet-r/n07734744/cartoon_44.jpg +- data/imagenet-r/n02769748/cartoon_12.jpg +- data/imagenet-r/n01770393/tattoo_29.jpg +- data/imagenet-r/n07693725/cartoon_14.jpg +- data/imagenet-r/n01484850/toy_0.jpg +- data/imagenet-r/n02236044/origami_7.jpg +- data/imagenet-r/n02398521/cartoon_18.jpg +- data/imagenet-r/n02206856/art_7.jpg +- data/imagenet-r/n02317335/sculpture_2.jpg +- data/imagenet-r/n01847000/sticker_0.jpg +- data/imagenet-r/n02769748/cartoon_15.jpg +- data/imagenet-r/n09835506/misc_35.jpg +- data/imagenet-r/n02437616/deviantart_10.jpg +- data/imagenet-r/n02114367/sketch_7.jpg +- data/imagenet-r/n04522168/videogame_4.jpg +- data/imagenet-r/n02119022/misc_114.jpg +- data/imagenet-r/n01833805/graphic_11.jpg +- data/imagenet-r/n02481823/toy_8.jpg +- data/imagenet-r/n07753592/sketch_19.jpg +- data/imagenet-r/n04146614/sketch_13.jpg +- data/imagenet-r/n03272010/painting_27.jpg +- data/imagenet-r/n01944390/misc_67.jpg +- data/imagenet-r/n01514859/painting_22.jpg +- data/imagenet-r/n02099712/sketch_0.jpg +- data/imagenet-r/n01843383/deviantart_28.jpg +- data/imagenet-r/n07749582/painting_30.jpg +- data/imagenet-r/n02939185/deviantart_10.jpg +- data/imagenet-r/n02096585/misc_126.jpg +- data/imagenet-r/n02114367/sketch_3.jpg +- data/imagenet-r/n02951358/embroidery_0.jpg +- data/imagenet-r/n03481172/painting_3.jpg +- data/imagenet-r/n02814860/sculpture_0.jpg +- data/imagenet-r/n07745940/art_2.jpg +- data/imagenet-r/n01644373/cartoon_22.jpg +- data/imagenet-r/n02480855/tattoo_41.jpg +- data/imagenet-r/n03424325/misc_21.jpg +- data/imagenet-r/n02117135/art_12.jpg +- data/imagenet-r/n01855672/painting_9.jpg +- data/imagenet-r/n01843383/cartoon_17.jpg +- data/imagenet-r/n02106030/sketch_13.jpg +- data/imagenet-r/n03345487/sketch_1.jpg +- data/imagenet-r/n02510455/deviantart_23.jpg +- data/imagenet-r/n02206856/sketch_5.jpg +- data/imagenet-r/n04522168/deviantart_6.jpg +- data/imagenet-r/n02607072/misc_25.jpg +- data/imagenet-r/n02980441/art_0.jpg +- data/imagenet-r/n07749582/deviantart_5.jpg +- data/imagenet-r/n02119022/misc_87.jpg +- data/imagenet-r/n02655020/misc_39.jpg +- data/imagenet-r/n04310018/videogame_0.jpg +- data/imagenet-r/n01644373/deviantart_12.jpg +- data/imagenet-r/n04522168/graffiti_0.jpg +- data/imagenet-r/n02088238/misc_23.jpg +- data/imagenet-r/n02948072/cartoon_51.jpg +- data/imagenet-r/n09472597/sketch_11.jpg +- data/imagenet-r/n02108089/misc_6.jpg +- data/imagenet-r/n02808440/sketch_0.jpg +- data/imagenet-r/n02106166/sketch_16.jpg +- data/imagenet-r/n02317335/embroidery_7.jpg +- data/imagenet-r/n01443537/origami_2.jpg +- data/imagenet-r/n02056570/painting_2.jpg +- data/imagenet-r/n02096585/misc_129.jpg +- data/imagenet-r/n02395406/cartoon_20.jpg +- data/imagenet-r/n02236044/origami_3.jpg +- data/imagenet-r/n01833805/tattoo_45.jpg +- data/imagenet-r/n02129604/painting_7.jpg +- data/imagenet-r/n04086273/painting_9.jpg +- data/imagenet-r/n01484850/cartoon_11.jpg +- data/imagenet-r/n01774750/tattoo_15.jpg +- data/imagenet-r/n02130308/cartoon_10.jpg +- data/imagenet-r/n02769748/sketch_18.jpg +- data/imagenet-r/n04522168/painting_10.jpg +- data/imagenet-r/n02236044/painting_1.jpg +- data/imagenet-r/n02110185/painting_11.jpg +- data/imagenet-r/n07614500/sculpture_2.jpg +- data/imagenet-r/n02797295/misc_62.jpg +- data/imagenet-r/n01770393/tattoo_77.jpg +- data/imagenet-r/n02906734/toy_9.jpg +- data/imagenet-r/n02112018/sketch_20.jpg +- data/imagenet-r/n01531178/toy_0.jpg +- data/imagenet-r/n02841315/toy_4.jpg +- data/imagenet-r/n01944390/misc_2.jpg +- data/imagenet-r/n02097298/misc_41.jpg +- data/imagenet-r/n02165456/graphic_0.jpg +- data/imagenet-r/n02966193/sketch_2.jpg +- data/imagenet-r/n02088364/sketch_20.jpg +- data/imagenet-r/n01498041/sketch_1.jpg +- data/imagenet-r/n02481823/videogame_3.jpg +- data/imagenet-r/n02823750/cartoon_24.jpg +- data/imagenet-r/n04536866/sticker_0.jpg +- data/imagenet-r/n07697313/toy_4.jpg +- data/imagenet-r/n01843383/deviantart_6.jpg +- data/imagenet-r/n04465501/deviantart_0.jpg +- data/imagenet-r/n07697537/videogame_23.jpg +- data/imagenet-r/n02486410/misc_1.jpg +- data/imagenet-r/n02226429/art_10.jpg +- data/imagenet-r/n02129604/sticker_4.jpg +- data/imagenet-r/n01855672/sketch_7.jpg +- data/imagenet-r/n07714990/sketch_5.jpg +- data/imagenet-r/n02128385/painting_3.jpg +- data/imagenet-r/n01614925/art_9.jpg +- data/imagenet-r/n07873807/sculpture_4.jpg +- data/imagenet-r/n02096585/misc_54.jpg +- data/imagenet-r/n02007558/tattoo_38.jpg +- data/imagenet-r/n02410509/painting_24.jpg +- data/imagenet-r/n03124170/sketch_4.jpg +- data/imagenet-r/n01616318/deviantart_0.jpg +- data/imagenet-r/n02106662/tattoo_1.jpg +- data/imagenet-r/n07749582/tattoo_2.jpg +- data/imagenet-r/n01806143/graphic_1.jpg +- data/imagenet-r/n07753275/videogame_19.jpg +- data/imagenet-r/n02119022/tattoo_6.jpg +- data/imagenet-r/n04254680/cartoon_10.jpg +- data/imagenet-r/n02071294/videogame_5.jpg +- data/imagenet-r/n07614500/tattoo_8.jpg +- data/imagenet-r/n02325366/misc_18.jpg +- data/imagenet-r/n01677366/misc_20.jpg +- data/imagenet-r/n02007558/graffiti_7.jpg +- data/imagenet-r/n02066245/sketch_11.jpg +- data/imagenet-r/n02486410/graffiti_8.jpg +- data/imagenet-r/n02236044/sculpture_3.jpg +- data/imagenet-r/n02391049/misc_10.jpg +- data/imagenet-r/n02117135/painting_6.jpg +- data/imagenet-r/n07720875/art_13.jpg +- data/imagenet-r/n10565667/sketch_12.jpg +- data/imagenet-r/n01531178/sketch_9.jpg +- data/imagenet-r/n02007558/embroidery_17.jpg +- data/imagenet-r/n02165456/tattoo_55.jpg +- data/imagenet-r/n02123045/painting_13.jpg +- data/imagenet-r/n03676483/graffiti_3.jpg +- data/imagenet-r/n03930630/cartoon_19.jpg +- data/imagenet-r/n04275548/painting_4.jpg +- data/imagenet-r/n01806143/painting_11.jpg +- data/imagenet-r/n01644373/painting_30.jpg +- data/imagenet-r/n02112018/misc_35.jpg +- data/imagenet-r/n07749582/graphic_0.jpg +- data/imagenet-r/n02110341/misc_156.jpg +- data/imagenet-r/n02802426/videogame_4.jpg +- data/imagenet-r/n01770393/tattoo_74.jpg +- data/imagenet-r/n01632777/toy_27.jpg +- data/imagenet-r/n01910747/deviantart_5.jpg +- data/imagenet-r/n01944390/misc_128.jpg +- data/imagenet-r/n02129165/cartoon_34.jpg +- data/imagenet-r/n01632777/toy_29.jpg +- data/imagenet-r/n07745940/painting_0.jpg +- data/imagenet-r/n04141076/painting_30.jpg +- data/imagenet-r/n02481823/tattoo_6.jpg +- data/imagenet-r/n04347754/videogame_26.jpg +- data/imagenet-r/n09835506/videogame_14.jpg +- data/imagenet-r/n02113624/misc_28.jpg +- data/imagenet-r/n02607072/sketch_15.jpg +- data/imagenet-r/n03930630/cartoon_21.jpg +- data/imagenet-r/n02130308/sketch_9.jpg +- data/imagenet-r/n02480855/tattoo_0.jpg +- data/imagenet-r/n02110341/misc_138.jpg +- data/imagenet-r/n04522168/origami_3.jpg +- data/imagenet-r/n01616318/cartoon_0.jpg +- data/imagenet-r/n03424325/graphic_1.jpg +- data/imagenet-r/n03124170/videogame_4.jpg +- data/imagenet-r/n02317335/sketch_8.jpg +- data/imagenet-r/n02236044/painting_3.jpg +- data/imagenet-r/n02939185/painting_4.jpg +- data/imagenet-r/n02066245/toy_1.jpg +- data/imagenet-r/n04266014/art_6.jpg +- data/imagenet-r/n01644373/tattoo_39.jpg +- data/imagenet-r/n02088466/misc_16.jpg +- data/imagenet-r/n02841315/art_2.jpg +- data/imagenet-r/n02219486/graffiti_6.jpg +- data/imagenet-r/n12267677/misc_96.jpg +- data/imagenet-r/n09472597/cartoon_20.jpg +- data/imagenet-r/n03494278/painting_2.jpg +- data/imagenet-r/n03947888/cartoon_4.jpg +- data/imagenet-r/n03481172/videogame_5.jpg +- data/imagenet-r/n04409515/cartoon_15.jpg +- data/imagenet-r/n02096585/misc_197.jpg +- data/imagenet-r/n04275548/sketch_19.jpg +- data/imagenet-r/n04118538/cartoon_27.jpg +- data/imagenet-r/n03424325/graphic_0.jpg +- data/imagenet-r/n03124170/cartoon_65.jpg +- data/imagenet-r/n03498962/deviantart_0.jpg +- data/imagenet-r/n02110958/cartoon_66.jpg +- data/imagenet-r/n04086273/tattoo_31.jpg +- data/imagenet-r/n07749582/painting_45.jpg +- data/imagenet-r/n02966193/sketch_22.jpg +- data/imagenet-r/n10565667/graffiti_2.jpg +- data/imagenet-r/n07695742/sketch_7.jpg +- data/imagenet-r/n02129165/misc_1.jpg +- data/imagenet-r/n02325366/sketch_19.jpg +- data/imagenet-r/n01770393/sticker_0.jpg +- data/imagenet-r/n01774750/deviantart_6.jpg +- data/imagenet-r/n02110958/graffiti_2.jpg +- data/imagenet-r/n01833805/tattoo_35.jpg +- data/imagenet-r/n07734744/painting_4.jpg +- data/imagenet-r/n07734744/painting_22.jpg +- data/imagenet-r/n04141076/misc_4.jpg +- data/imagenet-r/n02445715/tattoo_10.jpg +- data/imagenet-r/n01820546/painting_26.jpg +- data/imagenet-r/n02206856/sculpture_7.jpg +- data/imagenet-r/n01882714/sculpture_0.jpg +- data/imagenet-r/n02655020/misc_47.jpg +- data/imagenet-r/n07614500/misc_27.jpg +- data/imagenet-r/n03124170/misc_14.jpg +- data/imagenet-r/n04254680/deviantart_5.jpg +- data/imagenet-r/n02395406/cartoon_23.jpg +- data/imagenet-r/n01944390/misc_34.jpg +- data/imagenet-r/n02098286/sketch_1.jpg +- data/imagenet-r/n07697313/toy_17.jpg +- data/imagenet-r/n02088364/misc_39.jpg +- data/imagenet-r/n02769748/cartoon_26.jpg +- data/imagenet-r/n04146614/videogame_10.jpg +- data/imagenet-r/n04522168/deviantart_8.jpg +- data/imagenet-r/n02391049/deviantart_16.jpg +- data/imagenet-r/n02088364/misc_7.jpg +- data/imagenet-r/n01484850/toy_8.jpg +- data/imagenet-r/n02749479/tattoo_2.jpg +- data/imagenet-r/n02138441/cartoon_4.jpg +- data/imagenet-r/n03930630/misc_0.jpg +- data/imagenet-r/n04347754/tattoo_12.jpg +- data/imagenet-r/n04536866/sculpture_6.jpg +- data/imagenet-r/n04254680/cartoon_9.jpg +- data/imagenet-r/n02966193/painting_14.jpg +- data/imagenet-r/n02109525/misc_17.jpg +- data/imagenet-r/n02395406/origami_8.jpg +- data/imagenet-r/n02906734/toy_7.jpg +- data/imagenet-r/n04536866/cartoon_20.jpg +- data/imagenet-r/n04266014/cartoon_11.jpg +- data/imagenet-r/n01614925/tattoo_47.jpg +- data/imagenet-r/n01833805/painting_33.jpg +- data/imagenet-r/n04266014/misc_2.jpg +- data/imagenet-r/n03452741/painting_1.jpg +- data/imagenet-r/n01443537/deviantart_9.jpg +- data/imagenet-r/n07697313/origami_0.jpg +- data/imagenet-r/n02112018/sketch_23.jpg +- data/imagenet-r/n02129165/art_5.jpg +- data/imagenet-r/n04591713/sticker_5.jpg +- data/imagenet-r/n02007558/graffiti_18.jpg +- data/imagenet-r/n01944390/misc_156.jpg +- data/imagenet-r/n04325704/sketch_0.jpg +- data/imagenet-r/n07749582/toy_0.jpg +- data/imagenet-r/n01694178/sketch_19.jpg +- data/imagenet-r/n03124170/toy_18.jpg +- data/imagenet-r/n02102318/misc_10.jpg +- data/imagenet-r/n04389033/art_2.jpg +- data/imagenet-r/n03345487/misc_5.jpg +- data/imagenet-r/n03345487/embroidery_2.jpg +- data/imagenet-r/n02110341/sketch_15.jpg +- data/imagenet-r/n01514859/deviantart_25.jpg +- data/imagenet-r/n02088238/misc_107.jpg +- data/imagenet-r/n02129604/sketch_2.jpg +- data/imagenet-r/n02233338/misc_20.jpg +- data/imagenet-r/n04086273/cartoon_4.jpg +- data/imagenet-r/n07753592/misc_133.jpg +- data/imagenet-r/n02113799/misc_5.jpg +- data/imagenet-r/n02672831/sticker_2.jpg +- data/imagenet-r/n02106662/misc_8.jpg +- data/imagenet-r/n04325704/art_2.jpg +- data/imagenet-r/n02480495/sketch_3.jpg +- data/imagenet-r/n04118538/painting_0.jpg +- data/imagenet-r/n01843383/tattoo_16.jpg +- data/imagenet-r/n02108089/sketch_16.jpg +- data/imagenet-r/n02056570/cartoon_0.jpg +- data/imagenet-r/n02966193/painting_9.jpg +- data/imagenet-r/n04141076/cartoon_28.jpg +- data/imagenet-r/n02007558/toy_1.jpg +- data/imagenet-r/n02808440/sketch_13.jpg +- data/imagenet-r/n02437616/deviantart_16.jpg +- data/imagenet-r/n03481172/sketch_9.jpg +- data/imagenet-r/n01882714/cartoon_2.jpg +- data/imagenet-r/n02096585/misc_181.jpg +- data/imagenet-r/n09835506/misc_37.jpg +- data/imagenet-r/n02814860/painting_48.jpg +- data/imagenet-r/n04389033/sculpture_12.jpg +- data/imagenet-r/n02948072/cartoon_53.jpg +- data/imagenet-r/n02099601/misc_62.jpg +- data/imagenet-r/n02410509/graffiti_6.jpg +- data/imagenet-r/n02841315/sketch_1.jpg +- data/imagenet-r/n01833805/graffiti_2.jpg +- data/imagenet-r/n07734744/misc_22.jpg +- data/imagenet-r/n07734744/videogame_42.jpg +- data/imagenet-r/n02086240/misc_9.jpg +- data/imagenet-r/n02117135/sketch_1.jpg +- data/imagenet-r/n02948072/cartoon_49.jpg +- data/imagenet-r/n02088094/sketch_15.jpg +- data/imagenet-r/n01614925/sketch_9.jpg +- data/imagenet-r/n02138441/cartoon_22.jpg +- data/imagenet-r/n02268443/misc_180.jpg +- data/imagenet-r/n02165456/art_10.jpg +- data/imagenet-r/n07697313/cartoon_28.jpg +- data/imagenet-r/n02113023/misc_1.jpg +- data/imagenet-r/n07734744/deviantart_11.jpg +- data/imagenet-r/n03467068/cartoon_6.jpg +- data/imagenet-r/n02793495/sculpture_0.jpg +- data/imagenet-r/n02883205/graffiti_5.jpg +- data/imagenet-r/n01443537/cartoon_28.jpg +- data/imagenet-r/n03467068/misc_1.jpg +- data/imagenet-r/n02128757/art_8.jpg +- data/imagenet-r/n04133789/art_3.jpg +- data/imagenet-r/n03495258/sketch_14.jpg +- data/imagenet-r/n02814860/sticker_1.jpg +- data/imagenet-r/n02110185/tattoo_11.jpg +- data/imagenet-r/n07718472/sticker_0.jpg +- data/imagenet-r/n02134084/tattoo_18.jpg +- data/imagenet-r/n02113023/misc_37.jpg +- data/imagenet-r/n02071294/deviantart_16.jpg +- data/imagenet-r/n04522168/art_4.jpg +- data/imagenet-r/n02226429/sketch_15.jpg +- data/imagenet-r/n04147183/deviantart_7.jpg +- data/imagenet-r/n02129165/tattoo_22.jpg +- data/imagenet-r/n04389033/sketch_17.jpg +- data/imagenet-r/n04254680/deviantart_25.jpg +- data/imagenet-r/n03481172/sketch_20.jpg +- data/imagenet-r/n02110341/deviantart_17.jpg +- data/imagenet-r/n01847000/sketch_20.jpg +- data/imagenet-r/n03947888/art_3.jpg +- data/imagenet-r/n07753592/videogame_10.jpg +- data/imagenet-r/n02906734/sketch_14.jpg +- data/imagenet-r/n03930630/cartoon_3.jpg +- data/imagenet-r/n07745940/graphic_3.jpg +- data/imagenet-r/n02395406/cartoon_35.jpg +- data/imagenet-r/n07745940/toy_1.jpg +- data/imagenet-r/n01910747/sketch_16.jpg +- data/imagenet-r/n01986214/origami_15.jpg +- data/imagenet-r/n01616318/cartoon_16.jpg +- data/imagenet-r/n02134084/deviantart_15.jpg +- data/imagenet-r/n02129165/embroidery_0.jpg +- data/imagenet-r/n02445715/toy_3.jpg +- data/imagenet-r/n02190166/sketch_14.jpg +- data/imagenet-r/n02948072/painting_11.jpg +- data/imagenet-r/n02110958/graphic_6.jpg +- data/imagenet-r/n01494475/sketch_9.jpg +- data/imagenet-r/n01498041/tattoo_1.jpg +- data/imagenet-r/n07697313/art_31.jpg +- data/imagenet-r/n03372029/art_11.jpg +- data/imagenet-r/n04310018/toy_12.jpg +- data/imagenet-r/n01774750/videogame_0.jpg +- data/imagenet-r/n03481172/cartoon_8.jpg +- data/imagenet-r/n02071294/art_12.jpg +- data/imagenet-r/n01494475/misc_87.jpg +- data/imagenet-r/n02909870/graffiti_5.jpg +- data/imagenet-r/n02128757/misc_1.jpg +- data/imagenet-r/n04347754/painting_6.jpg +- data/imagenet-r/n02823750/cartoon_10.jpg +- data/imagenet-r/n07745940/art_4.jpg +- data/imagenet-r/n02410509/sculpture_29.jpg +- data/imagenet-r/n01518878/painting_18.jpg +- data/imagenet-r/n07742313/deviantart_11.jpg +- data/imagenet-r/n04591713/sketch_3.jpg +- data/imagenet-r/n02165456/toy_2.jpg +- data/imagenet-r/n02802426/videogame_20.jpg +- data/imagenet-r/n02099601/misc_53.jpg +- data/imagenet-r/n01616318/tattoo_13.jpg +- data/imagenet-r/n02906734/graffiti_3.jpg +- data/imagenet-r/n02085620/misc_14.jpg +- data/imagenet-r/n02948072/painting_0.jpg +- data/imagenet-r/n01843383/graffiti_8.jpg +- data/imagenet-r/n02088364/misc_13.jpg +- data/imagenet-r/n07745940/graffiti_23.jpg +- data/imagenet-r/n02091032/misc_23.jpg +- data/imagenet-r/n02091134/sketch_9.jpg +- data/imagenet-r/n02883205/painting_4.jpg +- data/imagenet-r/n02410509/sticker_3.jpg +- data/imagenet-r/n02948072/deviantart_21.jpg +- data/imagenet-r/n01882714/deviantart_25.jpg +- data/imagenet-r/n02346627/painting_9.jpg +- data/imagenet-r/n07697313/deviantart_42.jpg +- data/imagenet-r/n02113799/misc_35.jpg +- data/imagenet-r/n04536866/deviantart_6.jpg +- data/imagenet-r/n02391049/sketch_5.jpg +- data/imagenet-r/n02129604/deviantart_36.jpg +- data/imagenet-r/n07753275/sticker_2.jpg +- data/imagenet-r/n07734744/sketch_15.jpg +- data/imagenet-r/n02219486/sculpture_5.jpg +- data/imagenet-r/n02009912/sketch_22.jpg +- data/imagenet-r/n07720875/painting_33.jpg +- data/imagenet-r/n01910747/tattoo_5.jpg +- data/imagenet-r/n02128757/art_18.jpg +- data/imagenet-r/n02219486/videogame_1.jpg +- data/imagenet-r/n01494475/misc_95.jpg +- data/imagenet-r/n02483362/sketch_9.jpg +- data/imagenet-r/n03124170/cartoon_26.jpg +- data/imagenet-r/n02094433/sketch_3.jpg +- data/imagenet-r/n02206856/toy_33.jpg +- data/imagenet-r/n02236044/cartoon_9.jpg +- data/imagenet-r/n02110185/painting_4.jpg +- data/imagenet-r/n02395406/misc_1.jpg +- data/imagenet-r/n02119022/misc_63.jpg +- data/imagenet-r/n02445715/videogame_6.jpg +- data/imagenet-r/n07695742/misc_0.jpg +- data/imagenet-r/n03467068/deviantart_0.jpg +- data/imagenet-r/n07693725/misc_1.jpg +- data/imagenet-r/n02106550/sketch_9.jpg +- data/imagenet-r/n09472597/sketch_6.jpg +- data/imagenet-r/n07753592/misc_119.jpg +- data/imagenet-r/n04552348/videogame_26.jpg +- data/imagenet-r/n02129165/misc_3.jpg +- data/imagenet-r/n02206856/cartoon_46.jpg +- data/imagenet-r/n01882714/deviantart_11.jpg +- data/imagenet-r/n02110958/tattoo_26.jpg +- data/imagenet-r/n02066245/sketch_12.jpg +- data/imagenet-r/n03124170/sketch_8.jpg +- data/imagenet-r/n02129165/tattoo_19.jpg +- data/imagenet-r/n01833805/tattoo_9.jpg +- data/imagenet-r/n07714990/sketch_0.jpg +- data/imagenet-r/n02823750/cartoon_13.jpg +- data/imagenet-r/n01694178/sketch_21.jpg +- data/imagenet-r/n01774750/cartoon_12.jpg +- data/imagenet-r/n04465501/toy_14.jpg +- data/imagenet-r/n07693725/sketch_17.jpg +- data/imagenet-r/n02007558/painting_2.jpg +- data/imagenet-r/n01494475/videogame_4.jpg +- data/imagenet-r/n02219486/misc_2.jpg +- data/imagenet-r/n02391049/misc_38.jpg +- data/imagenet-r/n07714571/painting_1.jpg +- data/imagenet-r/n02948072/cartoon_26.jpg +- data/imagenet-r/n02108915/sketch_23.jpg +- data/imagenet-r/n02437616/deviantart_5.jpg +- data/imagenet-r/n01514859/painting_11.jpg +- data/imagenet-r/n07745940/graffiti_5.jpg +- data/imagenet-r/n07920052/painting_6.jpg +- data/imagenet-r/n01484850/painting_16.jpg +- data/imagenet-r/n02510455/sketch_18.jpg +- data/imagenet-r/n02510455/misc_52.jpg +- data/imagenet-r/n02106166/misc_16.jpg +- data/imagenet-r/n01843383/sketch_18.jpg +- data/imagenet-r/n04146614/cartoon_7.jpg +- data/imagenet-r/n02317335/toy_13.jpg +- data/imagenet-r/n02088238/misc_62.jpg +- data/imagenet-r/n01860187/sketch_12.jpg +- data/imagenet-r/n04552348/misc_10.jpg +- data/imagenet-r/n03272010/sketch_5.jpg +- data/imagenet-r/n01770393/embroidery_0.jpg +- data/imagenet-r/n02165456/tattoo_30.jpg +- data/imagenet-r/n01910747/graphic_16.jpg +- data/imagenet-r/n02088238/misc_115.jpg +- data/imagenet-r/n02966193/cartoon_16.jpg +- data/imagenet-r/n02128385/painting_6.jpg +- data/imagenet-r/n01860187/cartoon_12.jpg +- data/imagenet-r/n04266014/misc_10.jpg +- data/imagenet-r/n01632777/art_8.jpg +- data/imagenet-r/n02769748/cartoon_24.jpg +- data/imagenet-r/n02363005/cartoon_30.jpg +- data/imagenet-r/n07742313/sketch_3.jpg +- data/imagenet-r/n02391049/misc_74.jpg +- data/imagenet-r/n09472597/deviantart_18.jpg +- data/imagenet-r/n02110958/painting_4.jpg +- data/imagenet-r/n07873807/misc_2.jpg +- data/imagenet-r/n03452741/videogame_6.jpg +- data/imagenet-r/n02410509/cartoon_19.jpg +- data/imagenet-r/n02655020/videogame_22.jpg +- data/imagenet-r/n02106166/misc_0.jpg +- data/imagenet-r/n02096585/misc_121.jpg +- data/imagenet-r/n01644373/graffiti_2.jpg +- data/imagenet-r/n03124170/cartoon_59.jpg +- data/imagenet-r/n01770393/tattoo_66.jpg +- data/imagenet-r/n02363005/cartoon_44.jpg +- data/imagenet-r/n02480855/sketch_18.jpg +- data/imagenet-r/n07753592/misc_37.jpg +- data/imagenet-r/n02088238/misc_69.jpg +- data/imagenet-r/n02672831/painting_9.jpg +- data/imagenet-r/n01644373/cartoon_6.jpg +- data/imagenet-r/n02510455/misc_78.jpg +- data/imagenet-r/n02130308/toy_13.jpg +- data/imagenet-r/n12267677/sketch_14.jpg +- data/imagenet-r/n04275548/tattoo_9.jpg +- data/imagenet-r/n07714990/cartoon_36.jpg +- data/imagenet-r/n02112137/sketch_18.jpg +- data/imagenet-r/n02102318/misc_13.jpg +- data/imagenet-r/n04310018/deviantart_10.jpg +- data/imagenet-r/n09835506/tattoo_0.jpg +- data/imagenet-r/n02906734/cartoon_8.jpg +- data/imagenet-r/n02672831/painting_5.jpg +- data/imagenet-r/n02279972/tattoo_22.jpg +- data/imagenet-r/n04133789/sketch_11.jpg +- data/imagenet-r/n02086240/misc_38.jpg +- data/imagenet-r/n02138441/misc_2.jpg +- data/imagenet-r/n09472597/cartoon_23.jpg +- data/imagenet-r/n02123045/painting_8.jpg +- data/imagenet-r/n01882714/deviantart_37.jpg +- data/imagenet-r/n02410509/cartoon_15.jpg +- data/imagenet-r/n02130308/cartoon_4.jpg +- data/imagenet-r/n02966193/cartoon_28.jpg +- data/imagenet-r/n01806143/sculpture_3.jpg +- data/imagenet-r/n02992529/sticker_1.jpg +- data/imagenet-r/n07753275/toy_0.jpg +- data/imagenet-r/n02992529/sketch_6.jpg +- data/imagenet-r/n03494278/sketch_2.jpg +- data/imagenet-r/n02007558/painting_6.jpg +- data/imagenet-r/n01774750/cartoon_9.jpg +- data/imagenet-r/n02129604/graffiti_15.jpg +- data/imagenet-r/n02138441/painting_9.jpg +- data/imagenet-r/n02097298/misc_73.jpg +- data/imagenet-r/n02363005/misc_0.jpg +- data/imagenet-r/n02106550/tattoo_11.jpg +- data/imagenet-r/n02110958/cartoon_53.jpg +- data/imagenet-r/n01630670/sketch_12.jpg +- data/imagenet-r/n02134084/misc_83.jpg +- data/imagenet-r/n07718472/painting_6.jpg +- data/imagenet-r/n03630383/toy_0.jpg +- data/imagenet-r/n01443537/videogame_3.jpg +- data/imagenet-r/n02480495/sketch_5.jpg +- data/imagenet-r/n01944390/tattoo_42.jpg +- data/imagenet-r/n04118538/cartoon_1.jpg +- data/imagenet-r/n01983481/sketch_20.jpg +- data/imagenet-r/n04552348/sticker_4.jpg +- data/imagenet-r/n03345487/toy_5.jpg +- data/imagenet-r/n02113023/misc_23.jpg +- data/imagenet-r/n04536866/cartoon_8.jpg +- data/imagenet-r/n02165456/graphic_2.jpg +- data/imagenet-r/n02206856/graffiti_28.jpg +- data/imagenet-r/n02510455/misc_28.jpg +- data/imagenet-r/n03345487/deviantart_0.jpg +- data/imagenet-r/n02096585/misc_78.jpg +- data/imagenet-r/n02607072/misc_83.jpg +- data/imagenet-r/n07768694/painting_10.jpg +- data/imagenet-r/n02480855/graphic_3.jpg +- data/imagenet-r/n07734744/sticker_12.jpg +- data/imagenet-r/n03947888/misc_10.jpg +- data/imagenet-r/n02096585/sketch_11.jpg +- data/imagenet-r/n01882714/deviantart_50.jpg +- data/imagenet-r/n02219486/sketch_10.jpg +- data/imagenet-r/n02165456/art_7.jpg +- data/imagenet-r/n02802426/sticker_3.jpg +- data/imagenet-r/n07753592/misc_135.jpg +- data/imagenet-r/n04141076/sketch_7.jpg +- data/imagenet-r/n01855672/sculpture_8.jpg +- data/imagenet-r/n02071294/art_2.jpg +- data/imagenet-r/n02085620/tattoo_17.jpg +- data/imagenet-r/n02701002/art_5.jpg +- data/imagenet-r/n07749582/graphic_9.jpg +- data/imagenet-r/n04254680/videogame_22.jpg +- data/imagenet-r/n03630383/cartoon_11.jpg +- data/imagenet-r/n01694178/toy_11.jpg +- data/imagenet-r/n07734744/graffiti_25.jpg +- data/imagenet-r/n09472597/videogame_24.jpg +- data/imagenet-r/n02165456/tattoo_43.jpg +- data/imagenet-r/n04591713/sketch_1.jpg +- data/imagenet-r/n07768694/painting_29.jpg +- data/imagenet-r/n02480495/art_6.jpg +- data/imagenet-r/n04192698/videogame_13.jpg +- data/imagenet-r/n02481823/deviantart_3.jpg +- data/imagenet-r/n02206856/sticker_14.jpg +- data/imagenet-r/n02480855/painting_17.jpg +- data/imagenet-r/n04254680/cartoon_17.jpg +- data/imagenet-r/n02480855/tattoo_61.jpg +- data/imagenet-r/n07720875/art_11.jpg +- data/imagenet-r/n02447366/cartoon_25.jpg +- data/imagenet-r/n02802426/misc_2.jpg +- data/imagenet-r/n01944390/misc_137.jpg +- data/imagenet-r/n02410509/painting_6.jpg +- data/imagenet-r/n03495258/tattoo_2.jpg +- data/imagenet-r/n02843684/sticker_0.jpg +- data/imagenet-r/n02123045/cartoon_8.jpg +- data/imagenet-r/n02279972/tattoo_14.jpg +- data/imagenet-r/n02110185/painting_41.jpg +- data/imagenet-r/n04146614/toy_3.jpg +- data/imagenet-r/n07749582/embroidery_6.jpg +- data/imagenet-r/n02607072/misc_39.jpg +- data/imagenet-r/n04147183/painting_17.jpg +- data/imagenet-r/n02906734/cartoon_14.jpg +- data/imagenet-r/n07753592/misc_21.jpg +- data/imagenet-r/n02007558/art_12.jpg +- data/imagenet-r/n02165456/embroidery_6.jpg +- data/imagenet-r/n01494475/videogame_5.jpg +- data/imagenet-r/n01774750/sticker_1.jpg +- data/imagenet-r/n01694178/origami_0.jpg +- data/imagenet-r/n07768694/embroidery_5.jpg +- data/imagenet-r/n02948072/cartoon_11.jpg +- data/imagenet-r/n02808440/graphic_1.jpg +- data/imagenet-r/n07873807/tattoo_0.jpg +- data/imagenet-r/n02113624/misc_30.jpg +- data/imagenet-r/n02106550/misc_7.jpg +- data/imagenet-r/n02110341/misc_4.jpg +- data/imagenet-r/n01882714/cartoon_38.jpg +- data/imagenet-r/n02128757/cartoon_6.jpg +- data/imagenet-r/n02950826/toy_2.jpg +- data/imagenet-r/n02226429/deviantart_1.jpg +- data/imagenet-r/n02106662/misc_5.jpg +- data/imagenet-r/n02226429/cartoon_0.jpg +- data/imagenet-r/n02395406/art_10.jpg +- data/imagenet-r/n03345487/toy_14.jpg +- data/imagenet-r/n01494475/sketch_10.jpg +- data/imagenet-r/n02233338/misc_39.jpg +- data/imagenet-r/n02607072/misc_70.jpg +- data/imagenet-r/n02099712/misc_24.jpg +- data/imagenet-r/n02110958/painting_11.jpg +- data/imagenet-r/n07693725/sketch_2.jpg +- data/imagenet-r/n04141076/painting_29.jpg +- data/imagenet-r/n01843383/deviantart_90.jpg +- data/imagenet-r/n03124170/embroidery_2.jpg +- data/imagenet-r/n02129165/toy_2.jpg +- data/imagenet-r/n02088238/misc_111.jpg +- data/imagenet-r/n07714990/videogame_1.jpg +- data/imagenet-r/n07614500/painting_12.jpg +- data/imagenet-r/n04266014/toy_18.jpg +- data/imagenet-r/n01983481/misc_4.jpg +- data/imagenet-r/n01514859/toy_0.jpg +- data/imagenet-r/n07753275/toy_3.jpg +- data/imagenet-r/n04552348/videogame_17.jpg +- data/imagenet-r/n04552348/videogame_15.jpg +- data/imagenet-r/n03272010/deviantart_4.jpg +- data/imagenet-r/n02056570/toy_4.jpg +- data/imagenet-r/n01514859/art_2.jpg +- data/imagenet-r/n04146614/sketch_12.jpg +- data/imagenet-r/n02437616/cartoon_3.jpg +- data/imagenet-r/n07697313/art_1.jpg +- data/imagenet-r/n02655020/misc_51.jpg +- data/imagenet-r/n04522168/sticker_1.jpg +- data/imagenet-r/n02797295/sketch_13.jpg +- data/imagenet-r/n02607072/deviantart_3.jpg +- data/imagenet-r/n07753592/misc_59.jpg +- data/imagenet-r/n02112137/misc_20.jpg +- data/imagenet-r/n01986214/deviantart_2.jpg +- data/imagenet-r/n03272010/cartoon_17.jpg +- data/imagenet-r/n07714990/deviantart_1.jpg +- data/imagenet-r/n01983481/sketch_13.jpg +- data/imagenet-r/n02128757/sketch_0.jpg +- data/imagenet-r/n02077923/misc_19.jpg +- data/imagenet-r/n01677366/misc_23.jpg +- data/imagenet-r/n02395406/sculpture_18.jpg +- data/imagenet-r/n01514859/cartoon_16.jpg +- data/imagenet-r/n02437616/sketch_7.jpg +- data/imagenet-r/n02236044/cartoon_18.jpg +- data/imagenet-r/n01531178/painting_4.jpg +- data/imagenet-r/n04266014/cartoon_6.jpg +- data/imagenet-r/n03676483/cartoon_21.jpg +- data/imagenet-r/n04141076/deviantart_5.jpg +- data/imagenet-r/n02802426/painting_4.jpg +- data/imagenet-r/n02056570/cartoon_3.jpg +- data/imagenet-r/n07768694/embroidery_3.jpg +- data/imagenet-r/n01484850/misc_4.jpg +- data/imagenet-r/n03481172/cartoon_0.jpg +- data/imagenet-r/n03345487/toy_18.jpg +- data/imagenet-r/n02134084/sketch_16.jpg +- data/imagenet-r/n04141076/toy_5.jpg +- data/imagenet-r/n02607072/deviantart_10.jpg +- data/imagenet-r/n04310018/deviantart_14.jpg +- data/imagenet-r/n02279972/sketch_18.jpg +- data/imagenet-r/n02398521/sculpture_12.jpg +- data/imagenet-r/n02841315/cartoon_29.jpg +- data/imagenet-r/n02007558/misc_1.jpg +- data/imagenet-r/n03124170/painting_16.jpg +- data/imagenet-r/n02102318/sketch_4.jpg +- data/imagenet-r/n01986214/cartoon_10.jpg +- data/imagenet-r/n07695742/cartoon_4.jpg +- data/imagenet-r/n03594945/toy_11.jpg +- data/imagenet-r/n02317335/painting_15.jpg +- data/imagenet-r/n01694178/toy_10.jpg +- data/imagenet-r/n02808440/misc_3.jpg +- data/imagenet-r/n02391049/misc_98.jpg +- data/imagenet-r/n02607072/misc_86.jpg +- data/imagenet-r/n01843383/sketch_8.jpg +- data/imagenet-r/n02165456/sticker_8.jpg +- data/imagenet-r/n02190166/cartoon_5.jpg +- data/imagenet-r/n03424325/misc_77.jpg +- data/imagenet-r/n03124170/deviantart_2.jpg +- data/imagenet-r/n02526121/painting_4.jpg +- data/imagenet-r/n03124170/misc_5.jpg +- data/imagenet-r/n04275548/cartoon_6.jpg +- data/imagenet-r/n02510455/misc_141.jpg +- data/imagenet-r/n12267677/misc_12.jpg +- data/imagenet-r/n02130308/cartoon_13.jpg +- data/imagenet-r/n07753275/misc_1.jpg +- data/imagenet-r/n02948072/sculpture_1.jpg +- data/imagenet-r/n02085620/misc_47.jpg +- data/imagenet-r/n03481172/deviantart_6.jpg +- data/imagenet-r/n02481823/toy_7.jpg +- data/imagenet-r/n01616318/painting_7.jpg +- data/imagenet-r/n03272010/misc_2.jpg +- data/imagenet-r/n01518878/cartoon_1.jpg +- data/imagenet-r/n02165456/tattoo_42.jpg +- data/imagenet-r/n02094433/misc_10.jpg +- data/imagenet-r/n04275548/tattoo_7.jpg +- data/imagenet-r/n02088466/misc_17.jpg +- data/imagenet-r/n03498962/sculpture_2.jpg +- data/imagenet-r/n03930630/sketch_6.jpg +- data/imagenet-r/n07749582/toy_7.jpg +- data/imagenet-r/n01833805/tattoo_44.jpg +- data/imagenet-r/n01531178/cartoon_21.jpg +- data/imagenet-r/n03498962/misc_3.jpg +- data/imagenet-r/n02007558/graphic_0.jpg +- data/imagenet-r/n02051845/cartoon_6.jpg +- data/imagenet-r/n02437616/sketch_2.jpg +- data/imagenet-r/n01484850/deviantart_18.jpg +- data/imagenet-r/n04465501/sketch_18.jpg +- data/imagenet-r/n02233338/tattoo_13.jpg +- data/imagenet-r/n02071294/art_13.jpg +- data/imagenet-r/n02410509/toy_3.jpg +- data/imagenet-r/n04266014/videogame_13.jpg +- data/imagenet-r/n01944390/misc_119.jpg +- data/imagenet-r/n02007558/tattoo_36.jpg +- data/imagenet-r/n01616318/misc_0.jpg +- data/imagenet-r/n02128385/toy_10.jpg +- data/imagenet-r/n01518878/cartoon_60.jpg +- data/imagenet-r/n04147183/deviantart_13.jpg +- data/imagenet-r/n02510455/videogame_5.jpg +- data/imagenet-r/n03947888/misc_3.jpg +- data/imagenet-r/n03947888/tattoo_14.jpg +- data/imagenet-r/n02364673/sculpture_5.jpg +- data/imagenet-r/n01484850/sketch_21.jpg +- data/imagenet-r/n02939185/sketch_20.jpg +- data/imagenet-r/n04347754/graffiti_8.jpg +- data/imagenet-r/n07742313/sketch_15.jpg +- data/imagenet-r/n02129165/embroidery_2.jpg +- data/imagenet-r/n04192698/deviantart_3.jpg +- data/imagenet-r/n07734744/graffiti_43.jpg +- data/imagenet-r/n02607072/misc_9.jpg +- data/imagenet-r/n02480855/painting_15.jpg +- data/imagenet-r/n01944390/sketch_10.jpg +- data/imagenet-r/n01518878/sketch_20.jpg +- data/imagenet-r/n04147183/painting_25.jpg +- data/imagenet-r/n03372029/cartoon_3.jpg +- data/imagenet-r/n01770393/sketch_19.jpg +- data/imagenet-r/n02948072/cartoon_15.jpg +- data/imagenet-r/n02102318/misc_32.jpg +- data/imagenet-r/n02939185/misc_9.jpg +- data/imagenet-r/n01944390/misc_24.jpg +- data/imagenet-r/n02992529/cartoon_11.jpg +- data/imagenet-r/n01882714/videogame_0.jpg +- data/imagenet-r/n04266014/sketch_20.jpg +- data/imagenet-r/n02843684/misc_23.jpg +- data/imagenet-r/n02363005/embroidery_0.jpg +- data/imagenet-r/n02102318/misc_53.jpg +- data/imagenet-r/n07768694/painting_23.jpg +- data/imagenet-r/n02110958/tattoo_38.jpg +- data/imagenet-r/n03495258/graphic_2.jpg +- data/imagenet-r/n04325704/painting_3.jpg +- data/imagenet-r/n03372029/deviantart_4.jpg +- data/imagenet-r/n02007558/embroidery_9.jpg +- data/imagenet-r/n02206856/art_11.jpg +- data/imagenet-r/n02655020/sketch_18.jpg +- data/imagenet-r/n02980441/graphic_1.jpg +- data/imagenet-r/n03452741/misc_1.jpg +- data/imagenet-r/n07745940/toy_20.jpg +- data/imagenet-r/n07697537/misc_20.jpg +- data/imagenet-r/n02395406/toy_25.jpg +- data/imagenet-r/n02138441/graphic_1.jpg +- data/imagenet-r/n02088466/sketch_13.jpg +- data/imagenet-r/n02814860/embroidery_0.jpg +- data/imagenet-r/n01944390/misc_159.jpg +- data/imagenet-r/n03495258/art_2.jpg +- data/imagenet-r/n09472597/art_1.jpg +- data/imagenet-r/n04522168/cartoon_9.jpg +- data/imagenet-r/n02701002/sketch_19.jpg +- data/imagenet-r/n04133789/sketch_19.jpg +- data/imagenet-r/n01531178/misc_1.jpg +- data/imagenet-r/n04347754/sketch_2.jpg +- data/imagenet-r/n03495258/sketch_5.jpg +- data/imagenet-r/n01774750/graffiti_0.jpg +- data/imagenet-r/n02119022/videogame_1.jpg +- data/imagenet-r/n02088094/misc_21.jpg +- data/imagenet-r/n02128757/cartoon_18.jpg +- data/imagenet-r/n02480495/cartoon_6.jpg +- data/imagenet-r/n02119022/misc_52.jpg +- data/imagenet-r/n02102318/misc_37.jpg +- data/imagenet-r/n02526121/painting_10.jpg +- data/imagenet-r/n01694178/videogame_1.jpg +- data/imagenet-r/n01630670/sketch_0.jpg +- data/imagenet-r/n01770393/tattoo_36.jpg +- data/imagenet-r/n04275548/embroidery_14.jpg +- data/imagenet-r/n02129165/tattoo_38.jpg +- data/imagenet-r/n02607072/videogame_3.jpg +- data/imagenet-r/n03676483/sketch_22.jpg +- data/imagenet-r/n02051845/art_3.jpg +- data/imagenet-r/n02948072/cartoon_13.jpg +- data/imagenet-r/n02268443/misc_31.jpg +- data/imagenet-r/n03773504/sketch_21.jpg +- data/imagenet-r/n02481823/painting_16.jpg +- data/imagenet-r/n01443537/painting_15.jpg +- data/imagenet-r/n02134084/misc_30.jpg +- data/imagenet-r/n02363005/toy_8.jpg +- data/imagenet-r/n02106550/tattoo_0.jpg +- data/imagenet-r/n12267677/misc_67.jpg +- data/imagenet-r/n02906734/painting_5.jpg +- data/imagenet-r/n04266014/painting_16.jpg +- data/imagenet-r/n01910747/art_1.jpg +- data/imagenet-r/n10565667/videogame_1.jpg +- data/imagenet-r/n04192698/deviantart_10.jpg +- data/imagenet-r/n04254680/videogame_1.jpg +- data/imagenet-r/n03594945/graffiti_8.jpg +- data/imagenet-r/n02066245/art_13.jpg +- data/imagenet-r/n02423022/sculpture_22.jpg +- data/imagenet-r/n02007558/embroidery_26.jpg +- data/imagenet-r/n02655020/videogame_16.jpg +- data/imagenet-r/n02119022/misc_55.jpg +- data/imagenet-r/n04118538/cartoon_7.jpg +- data/imagenet-r/n02099601/sketch_7.jpg +- data/imagenet-r/n02094433/misc_56.jpg +- data/imagenet-r/n01944390/misc_157.jpg +- data/imagenet-r/n02233338/misc_0.jpg +- data/imagenet-r/n02106662/misc_4.jpg +- data/imagenet-r/n02085620/misc_101.jpg +- data/imagenet-r/n03372029/art_5.jpg +- data/imagenet-r/n02129604/graffiti_13.jpg +- data/imagenet-r/n09835506/misc_18.jpg +- data/imagenet-r/n02481823/sketch_8.jpg +- data/imagenet-r/n03372029/cartoon_16.jpg +- data/imagenet-r/n02526121/sculpture_16.jpg +- data/imagenet-r/n02481823/graffiti_9.jpg +- data/imagenet-r/n12267677/misc_13.jpg +- data/imagenet-r/n01774750/tattoo_1.jpg +- data/imagenet-r/n07718472/sticker_1.jpg +- data/imagenet-r/n07697313/sketch_5.jpg +- data/imagenet-r/n02129604/sketch_15.jpg +- data/imagenet-r/n01443537/origami_13.jpg +- data/imagenet-r/n02165456/toy_41.jpg +- data/imagenet-r/n01847000/misc_28.jpg +- data/imagenet-r/n02129165/tattoo_65.jpg +- data/imagenet-r/n01494475/misc_67.jpg +- data/imagenet-r/n03424325/videogame_18.jpg +- data/imagenet-r/n02051845/embroidery_2.jpg +- data/imagenet-r/n03495258/tattoo_4.jpg +- data/imagenet-r/n02128385/painting_4.jpg +- data/imagenet-r/n02117135/graffiti_7.jpg +- data/imagenet-r/n02106662/misc_79.jpg +- data/imagenet-r/n07753592/misc_181.jpg +- data/imagenet-r/n02395406/misc_15.jpg +- data/imagenet-r/n03124170/videogame_5.jpg +- data/imagenet-r/n02655020/misc_87.jpg +- data/imagenet-r/n07768694/toy_0.jpg +- data/imagenet-r/n02398521/painting_14.jpg +- data/imagenet-r/n01616318/deviantart_2.jpg +- data/imagenet-r/n04141076/sketch_15.jpg +- data/imagenet-r/n04141076/painting_16.jpg +- data/imagenet-r/n02655020/misc_45.jpg +- data/imagenet-r/n01484850/graffiti_0.jpg +- data/imagenet-r/n02481823/cartoon_23.jpg +- data/imagenet-r/n07734744/cartoon_23.jpg +- data/imagenet-r/n02110958/painting_13.jpg +- data/imagenet-r/n01983481/misc_50.jpg +- data/imagenet-r/n07697313/painting_13.jpg +- data/imagenet-r/n03124170/cartoon_58.jpg +- data/imagenet-r/n02129165/sketch_2.jpg +- data/imagenet-r/n04086273/sketch_12.jpg +- data/imagenet-r/n01860187/origami_0.jpg +- data/imagenet-r/n03495258/cartoon_1.jpg +- data/imagenet-r/n02672831/cartoon_22.jpg +- data/imagenet-r/n02206856/graffiti_39.jpg +- data/imagenet-r/n07714990/embroidery_3.jpg +- data/imagenet-r/n01494475/sketch_6.jpg +- data/imagenet-r/n02110958/painting_9.jpg +- data/imagenet-r/n02423022/sculpture_5.jpg +- data/imagenet-r/n01910747/tattoo_7.jpg +- data/imagenet-r/n07614500/sketch_20.jpg +- data/imagenet-r/n01784675/graffiti_3.jpg +- data/imagenet-r/n01882714/art_1.jpg +- data/imagenet-r/n01986214/sketch_12.jpg +- data/imagenet-r/n02948072/embroidery_27.jpg +- data/imagenet-r/n10565667/sketch_6.jpg +- data/imagenet-r/n02138441/painting_43.jpg +- data/imagenet-r/n02114367/misc_1.jpg +- data/imagenet-r/n02106030/art_10.jpg +- data/imagenet-r/n02607072/videogame_0.jpg +- data/imagenet-r/n01694178/tattoo_6.jpg +- data/imagenet-r/n04133789/videogame_0.jpg +- data/imagenet-r/n02113799/misc_1.jpg +- data/imagenet-r/n02119022/tattoo_5.jpg +- data/imagenet-r/n03498962/sculpture_1.jpg +- data/imagenet-r/n01616318/deviantart_22.jpg +- data/imagenet-r/n02447366/cartoon_3.jpg +- data/imagenet-r/n07734744/graffiti_38.jpg +- data/imagenet-r/n04310018/deviantart_7.jpg +- data/imagenet-r/n03676483/sketch_0.jpg +- data/imagenet-r/n02841315/cartoon_9.jpg +- data/imagenet-r/n01494475/deviantart_0.jpg +- data/imagenet-r/n04522168/painting_23.jpg +- data/imagenet-r/n07753275/videogame_2.jpg +- data/imagenet-r/n03773504/graffiti_2.jpg +- data/imagenet-r/n02841315/graphic_4.jpg +- data/imagenet-r/n02226429/origami_24.jpg +- data/imagenet-r/n01748264/sketch_12.jpg +- data/imagenet-r/n02279972/sketch_0.jpg +- data/imagenet-r/n04146614/deviantart_7.jpg +- data/imagenet-r/n02088364/misc_29.jpg +- data/imagenet-r/n02119022/sketch_18.jpg +- data/imagenet-r/n01986214/cartoon_12.jpg +- data/imagenet-r/n01677366/misc_2.jpg +- data/imagenet-r/n02233338/tattoo_9.jpg +- data/imagenet-r/n02138441/cartoon_17.jpg +- data/imagenet-r/n02138441/graffiti_8.jpg +- data/imagenet-r/n03124170/tattoo_17.jpg +- data/imagenet-r/n04133789/sketch_15.jpg +- data/imagenet-r/n02447366/painting_10.jpg +- data/imagenet-r/n02655020/sketch_10.jpg +- data/imagenet-r/n01944390/misc_98.jpg +- data/imagenet-r/n02128385/sketch_6.jpg +- data/imagenet-r/n01494475/misc_109.jpg +- data/imagenet-r/n02066245/painting_0.jpg +- data/imagenet-r/n04146614/sketch_17.jpg +- data/imagenet-r/n01770393/tattoo_59.jpg +- data/imagenet-r/n07614500/embroidery_16.jpg +- data/imagenet-r/n04591713/painting_21.jpg +- data/imagenet-r/n01820546/art_0.jpg +- data/imagenet-r/n02086240/misc_3.jpg +- data/imagenet-r/n04465501/tattoo_12.jpg +- data/imagenet-r/n02486410/art_6.jpg +- data/imagenet-r/n01443537/toy_16.jpg +- data/imagenet-r/n01910747/videogame_5.jpg +- data/imagenet-r/n02480855/sketch_20.jpg +- data/imagenet-r/n04086273/tattoo_37.jpg +- data/imagenet-r/n04487394/sketch_13.jpg +- data/imagenet-r/n02980441/cartoon_19.jpg +- data/imagenet-r/n04389033/graphic_0.jpg +- data/imagenet-r/n02219486/art_5.jpg +- data/imagenet-r/n07697313/videogame_3.jpg +- data/imagenet-r/n01983481/misc_13.jpg +- data/imagenet-r/n04552348/misc_12.jpg +- data/imagenet-r/n02793495/cartoon_7.jpg +- data/imagenet-r/n07697313/cartoon_31.jpg +- data/imagenet-r/n01484850/sculpture_1.jpg +- data/imagenet-r/n03124170/sculpture_8.jpg +- data/imagenet-r/n02134084/misc_17.jpg +- data/imagenet-r/n04254680/sculpture_0.jpg +- data/imagenet-r/n07873807/sketch_2.jpg +- data/imagenet-r/n02749479/misc_36.jpg +- data/imagenet-r/n01514859/sketch_12.jpg +- data/imagenet-r/n04325704/sticker_1.jpg +- data/imagenet-r/n02129165/sticker_2.jpg +- data/imagenet-r/n03467068/cartoon_2.jpg +- data/imagenet-r/n02510455/misc_39.jpg +- data/imagenet-r/n03124170/deviantart_8.jpg +- data/imagenet-r/n02119022/sketch_23.jpg +- data/imagenet-r/n02129165/sketch_17.jpg +- data/imagenet-r/n02226429/sketch_14.jpg +- data/imagenet-r/n02085620/misc_71.jpg +- data/imagenet-r/n02226429/toy_1.jpg +- data/imagenet-r/n07753275/painting_25.jpg +- data/imagenet-r/n12267677/misc_6.jpg +- data/imagenet-r/n04536866/art_5.jpg +- data/imagenet-r/n04147183/painting_1.jpg +- data/imagenet-r/n02099601/misc_83.jpg +- data/imagenet-r/n02096585/sketch_0.jpg +- data/imagenet-r/n04552348/deviantart_28.jpg +- data/imagenet-r/n02480495/painting_19.jpg +- data/imagenet-r/n02395406/graffiti_2.jpg +- data/imagenet-r/n07753275/toy_7.jpg +- data/imagenet-r/n01484850/videogame_12.jpg +- data/imagenet-r/n02110185/cartoon_1.jpg +- data/imagenet-r/n07734744/graffiti_16.jpg +- data/imagenet-r/n12267677/misc_14.jpg +- data/imagenet-r/n07697313/graphic_2.jpg +- data/imagenet-r/n02395406/tattoo_1.jpg +- data/imagenet-r/n02206856/origami_6.jpg +- data/imagenet-r/n02486410/toy_1.jpg +- data/imagenet-r/n04347754/sketch_5.jpg +- data/imagenet-r/n02843684/toy_0.jpg +- data/imagenet-r/n01806143/sketch_4.jpg +- data/imagenet-r/n07880968/sketch_0.jpg +- data/imagenet-r/n02510455/misc_17.jpg +- data/imagenet-r/n02526121/cartoon_15.jpg +- data/imagenet-r/n01677366/misc_26.jpg +- data/imagenet-r/n02085620/misc_45.jpg +- data/imagenet-r/n02966193/graphic_2.jpg +- data/imagenet-r/n07734744/art_24.jpg +- data/imagenet-r/n01983481/misc_24.jpg +- data/imagenet-r/n01614925/sculpture_3.jpg +- data/imagenet-r/n01806143/cartoon_8.jpg +- data/imagenet-r/n03494278/sketch_3.jpg +- data/imagenet-r/n02672831/deviantart_0.jpg +- data/imagenet-r/n03947888/graffiti_0.jpg +- data/imagenet-r/n01443537/deviantart_13.jpg +- data/imagenet-r/n01748264/deviantart_11.jpg +- data/imagenet-r/n02391049/sketch_6.jpg +- data/imagenet-r/n03372029/cartoon_7.jpg +- data/imagenet-r/n01843383/graffiti_4.jpg +- data/imagenet-r/n04147183/art_9.jpg +- data/imagenet-r/n02317335/misc_1.jpg +- data/imagenet-r/n03345487/toy_4.jpg +- data/imagenet-r/n07753592/sketch_15.jpg +- data/imagenet-r/n01843383/painting_26.jpg +- data/imagenet-r/n04536866/cartoon_9.jpg +- data/imagenet-r/n04146614/sketch_1.jpg +- data/imagenet-r/n03424325/videogame_26.jpg +- data/imagenet-r/n01632777/toy_10.jpg +- data/imagenet-r/n01531178/cartoon_5.jpg +- data/imagenet-r/n02950826/origami_0.jpg +- data/imagenet-r/n03495258/cartoon_8.jpg +- data/imagenet-r/n02077923/sketch_7.jpg +- data/imagenet-r/n03649909/painting_0.jpg +- data/imagenet-r/n02113624/sketch_0.jpg +- data/imagenet-r/n07734744/deviantart_10.jpg +- data/imagenet-r/n02110341/misc_131.jpg +- data/imagenet-r/n02106662/misc_65.jpg +- data/imagenet-r/n04192698/cartoon_4.jpg +- data/imagenet-r/n03498962/painting_2.jpg +- data/imagenet-r/n02410509/sculpture_51.jpg +- data/imagenet-r/n07753275/art_16.jpg +- data/imagenet-r/n02110958/sketch_18.jpg +- data/imagenet-r/n02410509/cartoon_29.jpg +- data/imagenet-r/n02883205/art_2.jpg +- data/imagenet-r/n04536866/misc_1.jpg +- data/imagenet-r/n02096585/misc_103.jpg +- data/imagenet-r/n02480495/painting_5.jpg +- data/imagenet-r/n02236044/painting_8.jpg +- data/imagenet-r/n02086240/misc_27.jpg +- data/imagenet-r/n02236044/cartoon_8.jpg +- data/imagenet-r/n02823750/sketch_16.jpg +- data/imagenet-r/n02113799/sketch_13.jpg +- data/imagenet-r/n02526121/sculpture_3.jpg +- data/imagenet-r/n01847000/misc_22.jpg +- data/imagenet-r/n01677366/sketch_16.jpg +- data/imagenet-r/n02279972/painting_21.jpg +- data/imagenet-r/n02233338/sketch_4.jpg +- data/imagenet-r/n02391049/misc_0.jpg +- data/imagenet-r/n02110185/art_4.jpg +- data/imagenet-r/n02410509/misc_4.jpg +- data/imagenet-r/n02165456/toy_25.jpg +- data/imagenet-r/n02106662/misc_41.jpg +- data/imagenet-r/n02486410/painting_12.jpg +- data/imagenet-r/n07749582/sketch_1.jpg +- data/imagenet-r/n02480495/art_5.jpg +- data/imagenet-r/n02814860/painting_15.jpg +- data/imagenet-r/n01847000/embroidery_11.jpg +- data/imagenet-r/n07697537/videogame_19.jpg +- data/imagenet-r/n02206856/painting_2.jpg +- data/imagenet-r/n01910747/tattoo_87.jpg +- data/imagenet-r/n02395406/cartoon_40.jpg +- data/imagenet-r/n02190166/embroidery_0.jpg +- data/imagenet-r/n02165456/tattoo_8.jpg +- data/imagenet-r/n01443537/cartoon_40.jpg +- data/imagenet-r/n02129165/sketch_13.jpg +- data/imagenet-r/n02325366/sketch_2.jpg +- data/imagenet-r/n02123045/painting_12.jpg +- data/imagenet-r/n03452741/sketch_17.jpg +- data/imagenet-r/n02395406/origami_9.jpg +- data/imagenet-r/n03498962/videogame_10.jpg +- data/imagenet-r/n03452741/misc_4.jpg +- data/imagenet-r/n04192698/graffiti_4.jpg +- data/imagenet-r/n02226429/tattoo_6.jpg +- data/imagenet-r/n02096585/sketch_12.jpg +- data/imagenet-r/n02129165/graphic_0.jpg +- data/imagenet-r/n02317335/sketch_5.jpg +- data/imagenet-r/n01983481/misc_16.jpg +- data/imagenet-r/n01843383/cartoon_41.jpg +- data/imagenet-r/n09472597/art_5.jpg +- data/imagenet-r/n07720875/art_9.jpg +- data/imagenet-r/n01514859/deviantart_35.jpg +- data/imagenet-r/n01820546/sketch_7.jpg +- data/imagenet-r/n01843383/toy_4.jpg +- data/imagenet-r/n02607072/misc_29.jpg +- data/imagenet-r/n04591713/sticker_1.jpg +- data/imagenet-r/n01748264/misc_2.jpg +- data/imagenet-r/n02106550/sketch_13.jpg +- data/imagenet-r/n07697313/sculpture_0.jpg +- data/imagenet-r/n04266014/graphic_1.jpg +- data/imagenet-r/n02966193/sketch_4.jpg +- data/imagenet-r/n07720875/art_12.jpg +- data/imagenet-r/n01882714/deviantart_42.jpg +- data/imagenet-r/n01843383/sculpture_7.jpg +- data/imagenet-r/n01494475/deviantart_8.jpg +- data/imagenet-r/n02097298/misc_3.jpg +- data/imagenet-r/n02129165/tattoo_26.jpg +- data/imagenet-r/n02526121/cartoon_5.jpg +- data/imagenet-r/n07697537/misc_8.jpg +- data/imagenet-r/n02129165/tattoo_8.jpg +- data/imagenet-r/n01847000/sketch_16.jpg +- data/imagenet-r/n02481823/toy_5.jpg +- data/imagenet-r/n01770393/graffiti_4.jpg +- data/imagenet-r/n02129165/embroidery_9.jpg +- data/imagenet-r/n02110958/sticker_11.jpg +- data/imagenet-r/n02655020/deviantart_7.jpg +- data/imagenet-r/n02165456/toy_5.jpg +- data/imagenet-r/n02066245/cartoon_1.jpg +- data/imagenet-r/n07742313/deviantart_5.jpg +- data/imagenet-r/n02206856/misc_3.jpg +- data/imagenet-r/n01882714/graphic_0.jpg +- data/imagenet-r/n01774750/origami_13.jpg +- data/imagenet-r/n02129165/tattoo_7.jpg +- data/imagenet-r/n02088364/misc_23.jpg +- data/imagenet-r/n07753592/misc_67.jpg +- data/imagenet-r/n03424325/sketch_3.jpg +- data/imagenet-r/n02437616/sketch_11.jpg +- data/imagenet-r/n02110958/sketch_8.jpg +- data/imagenet-r/n01855672/cartoon_3.jpg +- data/imagenet-r/n01630670/sketch_17.jpg +- data/imagenet-r/n02672831/deviantart_5.jpg +- data/imagenet-r/n03424325/sketch_18.jpg +- data/imagenet-r/n01774750/cartoon_4.jpg +- data/imagenet-r/n03888257/cartoon_28.jpg +- data/imagenet-r/n02480495/painting_6.jpg +- data/imagenet-r/n01944390/misc_141.jpg +- data/imagenet-r/n02236044/toy_4.jpg +- data/imagenet-r/n04409515/deviantart_3.jpg +- data/imagenet-r/n03272010/deviantart_13.jpg +- data/imagenet-r/n07734744/painting_0.jpg +- data/imagenet-r/n02980441/sketch_22.jpg +- data/imagenet-r/n02071294/painting_10.jpg +- data/imagenet-r/n02510455/misc_23.jpg +- data/imagenet-r/n09472597/cartoon_10.jpg +- data/imagenet-r/n02130308/painting_14.jpg +- data/imagenet-r/n04389033/art_0.jpg +- data/imagenet-r/n01616318/tattoo_18.jpg +- data/imagenet-r/n04409515/videogame_3.jpg +- data/imagenet-r/n03773504/graphic_1.jpg +- data/imagenet-r/n02486410/sketch_10.jpg +- data/imagenet-r/n02325366/misc_27.jpg +- data/imagenet-r/n02797295/misc_46.jpg +- data/imagenet-r/n02130308/toy_2.jpg +- data/imagenet-r/n02909870/sticker_4.jpg +- data/imagenet-r/n03272010/tattoo_1.jpg +- data/imagenet-r/n02480855/origami_0.jpg +- data/imagenet-r/n02814860/painting_7.jpg +- data/imagenet-r/n01632777/misc_0.jpg +- data/imagenet-r/n02480495/cartoon_5.jpg +- data/imagenet-r/n01644373/tattoo_7.jpg +- data/imagenet-r/n03424325/videogame_29.jpg +- data/imagenet-r/n02437616/cartoon_25.jpg +- data/imagenet-r/n01833805/graffiti_13.jpg +- data/imagenet-r/n02410509/embroidery_0.jpg +- data/imagenet-r/n02445715/sketch_8.jpg +- data/imagenet-r/n01944390/tattoo_10.jpg +- data/imagenet-r/n02206856/sketch_2.jpg +- data/imagenet-r/n02363005/graphic_1.jpg +- data/imagenet-r/n02106030/sketch_6.jpg +- data/imagenet-r/n02480855/art_8.jpg +- data/imagenet-r/n03467068/cartoon_9.jpg +- data/imagenet-r/n02363005/sticker_2.jpg +- data/imagenet-r/n02206856/embroidery_21.jpg +- data/imagenet-r/n01518878/cartoon_16.jpg +- data/imagenet-r/n04275548/sketch_5.jpg +- data/imagenet-r/n02808440/cartoon_2.jpg +- data/imagenet-r/n02268443/sketch_1.jpg +- data/imagenet-r/n02106166/sketch_0.jpg +- data/imagenet-r/n03481172/deviantart_5.jpg +- data/imagenet-r/n01882714/cartoon_34.jpg +- data/imagenet-r/n02085620/misc_109.jpg +- data/imagenet-r/n01986214/origami_12.jpg +- data/imagenet-r/n07745940/sketch_18.jpg +- data/imagenet-r/n02980441/painting_4.jpg +- data/imagenet-r/n03495258/videogame_15.jpg +- data/imagenet-r/n02841315/cartoon_19.jpg +- data/imagenet-r/n02672831/cartoon_24.jpg +- data/imagenet-r/n02437616/cartoon_2.jpg +- data/imagenet-r/n02119022/sketch_15.jpg +- data/imagenet-r/n07753275/cartoon_3.jpg +- data/imagenet-r/n02423022/sculpture_27.jpg +- data/imagenet-r/n04552348/deviantart_15.jpg +- data/imagenet-r/n07714571/painting_4.jpg +- data/imagenet-r/n02980441/cartoon_14.jpg +- data/imagenet-r/n02395406/art_14.jpg +- data/imagenet-r/n02206856/art_0.jpg +- data/imagenet-r/n02808440/embroidery_2.jpg +- data/imagenet-r/n02481823/graffiti_8.jpg +- data/imagenet-r/n01833805/sculpture_10.jpg +- data/imagenet-r/n03372029/sculpture_6.jpg +- data/imagenet-r/n02096585/misc_114.jpg +- data/imagenet-r/n04591713/cartoon_1.jpg +- data/imagenet-r/n04487394/cartoon_26.jpg +- data/imagenet-r/n04347754/toy_6.jpg +- data/imagenet-r/n02410509/graffiti_2.jpg +- data/imagenet-r/n02814860/art_4.jpg +- data/imagenet-r/n01644373/sketch_7.jpg +- data/imagenet-r/n02099601/sketch_17.jpg +- data/imagenet-r/n02480855/painting_14.jpg +- data/imagenet-r/n02966193/sketch_7.jpg +- data/imagenet-r/n02906734/misc_6.jpg +- data/imagenet-r/n02138441/sticker_0.jpg +- data/imagenet-r/n07714990/cartoon_17.jpg +- data/imagenet-r/n01820546/deviantart_19.jpg +- data/imagenet-r/n07920052/cartoon_13.jpg +- data/imagenet-r/n02437616/sketch_0.jpg +- data/imagenet-r/n02106662/misc_15.jpg +- data/imagenet-r/n02655020/sketch_13.jpg +- data/imagenet-r/n02939185/graffiti_0.jpg +- data/imagenet-r/n02110958/toy_7.jpg +- data/imagenet-r/n02363005/tattoo_0.jpg +- data/imagenet-r/n07742313/painting_15.jpg +- data/imagenet-r/n01632777/sticker_0.jpg +- data/imagenet-r/n04347754/sketch_14.jpg +- data/imagenet-r/n04310018/sketch_12.jpg +- data/imagenet-r/n12267677/misc_29.jpg +- data/imagenet-r/n01855672/deviantart_1.jpg +- data/imagenet-r/n01860187/tattoo_3.jpg +- data/imagenet-r/n02051845/deviantart_11.jpg +- data/imagenet-r/n02165456/toy_4.jpg +- data/imagenet-r/n03124170/painting_37.jpg +- data/imagenet-r/n01774750/misc_4.jpg +- data/imagenet-r/n07749582/art_7.jpg +- data/imagenet-r/n01855672/sketch_12.jpg +- data/imagenet-r/n07734744/sticker_9.jpg +- data/imagenet-r/n01833805/graphic_3.jpg +- data/imagenet-r/n01616318/deviantart_16.jpg +- data/imagenet-r/n02123045/sculpture_8.jpg +- data/imagenet-r/n02510455/misc_12.jpg +- data/imagenet-r/n02138441/painting_17.jpg +- data/imagenet-r/n02797295/misc_57.jpg +- data/imagenet-r/n02110958/cartoon_36.jpg +- data/imagenet-r/n07753275/deviantart_10.jpg +- data/imagenet-r/n02129165/tattoo_57.jpg +- data/imagenet-r/n02219486/sketch_13.jpg +- data/imagenet-r/n03630383/sketch_2.jpg +- data/imagenet-r/n02051845/sculpture_9.jpg +- data/imagenet-r/n01843383/painting_34.jpg +- data/imagenet-r/n01534433/painting_0.jpg +- data/imagenet-r/n02364673/cartoon_2.jpg +- data/imagenet-r/n07742313/painting_27.jpg +- data/imagenet-r/n02108915/tattoo_7.jpg +- data/imagenet-r/n02445715/embroidery_0.jpg +- data/imagenet-r/n03602883/misc_9.jpg +- data/imagenet-r/n10565667/toy_12.jpg +- data/imagenet-r/n03888257/sketch_4.jpg +- data/imagenet-r/n03481172/sketch_3.jpg +- data/imagenet-r/n02088364/misc_24.jpg +- data/imagenet-r/n02106662/misc_85.jpg +- data/imagenet-r/n02088094/sketch_20.jpg +- data/imagenet-r/n02480855/graphic_7.jpg +- data/imagenet-r/n01443537/misc_4.jpg +- data/imagenet-r/n07697313/painting_6.jpg +- data/imagenet-r/n02843684/cartoon_5.jpg +- data/imagenet-r/n02113799/sketch_9.jpg +- data/imagenet-r/n01770393/sketch_0.jpg +- data/imagenet-r/n02088238/misc_44.jpg +- data/imagenet-r/n03481172/deviantart_11.jpg +- data/imagenet-r/n02129165/painting_0.jpg +- data/imagenet-r/n02364673/sculpture_3.jpg +- data/imagenet-r/n01774750/sketch_1.jpg +- data/imagenet-r/n02094433/sketch_17.jpg +- data/imagenet-r/n02236044/cartoon_2.jpg +- data/imagenet-r/n02106166/art_3.jpg +- data/imagenet-r/n04522168/sketch_13.jpg +- data/imagenet-r/n02481823/art_12.jpg +- data/imagenet-r/n07720875/painting_45.jpg +- data/imagenet-r/n04086273/videogame_15.jpg +- data/imagenet-r/n02206856/sticker_25.jpg +- data/imagenet-r/n02701002/toy_15.jpg +- data/imagenet-r/n01944390/sketch_8.jpg +- data/imagenet-r/n02051845/art_8.jpg +- data/imagenet-r/n07697537/misc_81.jpg +- data/imagenet-r/n01534433/painting_13.jpg +- data/imagenet-r/n02056570/sketch_22.jpg +- data/imagenet-r/n02007558/deviantart_10.jpg +- data/imagenet-r/n02051845/sculpture_10.jpg +- data/imagenet-r/n01443537/cartoon_22.jpg +- data/imagenet-r/n02206856/origami_9.jpg +- data/imagenet-r/n03124170/toy_16.jpg +- data/imagenet-r/n02480855/tattoo_28.jpg +- data/imagenet-r/n02395406/cartoon_31.jpg +- data/imagenet-r/n07697313/art_29.jpg +- data/imagenet-r/n02481823/deviantart_0.jpg +- data/imagenet-r/n04141076/misc_1.jpg +- data/imagenet-r/n02130308/sketch_16.jpg +- data/imagenet-r/n01616318/cartoon_7.jpg +- data/imagenet-r/n07749582/embroidery_8.jpg +- data/imagenet-r/n04591713/painting_43.jpg +- data/imagenet-r/n02219486/graffiti_4.jpg +- data/imagenet-r/n07749582/toy_3.jpg +- data/imagenet-r/n02109525/misc_18.jpg +- data/imagenet-r/n02110185/painting_23.jpg +- data/imagenet-r/n01910747/deviantart_15.jpg +- data/imagenet-r/n04552348/deviantart_14.jpg +- data/imagenet-r/n01910747/cartoon_11.jpg +- data/imagenet-r/n02088094/sketch_11.jpg +- data/imagenet-r/n04522168/graphic_5.jpg +- data/imagenet-r/n04266014/cartoon_14.jpg +- data/imagenet-r/n02138441/painting_39.jpg +- data/imagenet-r/n01644373/tattoo_27.jpg +- data/imagenet-r/n02129165/deviantart_21.jpg +- data/imagenet-r/n01833805/painting_2.jpg +- data/imagenet-r/n02106662/misc_72.jpg +- data/imagenet-r/n02117135/cartoon_2.jpg +- data/imagenet-r/n03272010/cartoon_16.jpg +- data/imagenet-r/n01847000/sketch_11.jpg +- data/imagenet-r/n02129604/sketch_17.jpg +- data/imagenet-r/n01484850/cartoon_5.jpg +- data/imagenet-r/n02268443/misc_106.jpg +- data/imagenet-r/n03495258/sculpture_6.jpg +- data/imagenet-r/n01806143/sculpture_1.jpg +- data/imagenet-r/n01820546/deviantart_6.jpg +- data/imagenet-r/n04552348/deviantart_0.jpg +- data/imagenet-r/n01644373/tattoo_21.jpg +- data/imagenet-r/n04147183/painting_24.jpg +- data/imagenet-r/n02112018/sketch_15.jpg +- data/imagenet-r/n02480495/painting_21.jpg +- data/imagenet-r/n01518878/cartoon_47.jpg +- data/imagenet-r/n07920052/graphic_2.jpg +- data/imagenet-r/n02112018/sketch_21.jpg +- data/imagenet-r/n04591713/painting_45.jpg +- data/imagenet-r/n07753592/misc_60.jpg +- data/imagenet-r/n07734744/cartoon_33.jpg +- data/imagenet-r/n02268443/misc_166.jpg +- data/imagenet-r/n02233338/tattoo_11.jpg +- data/imagenet-r/n01910747/painting_0.jpg +- data/imagenet-r/n02445715/sculpture_1.jpg +- data/imagenet-r/n03947888/misc_2.jpg +- data/imagenet-r/n02165456/misc_14.jpg +- data/imagenet-r/n02437616/painting_10.jpg +- data/imagenet-r/n03124170/sticker_1.jpg +- data/imagenet-r/n02950826/toy_1.jpg +- data/imagenet-r/n01855672/cartoon_8.jpg +- data/imagenet-r/n04591713/painting_1.jpg +- data/imagenet-r/n02138441/misc_1.jpg +- data/imagenet-r/n02219486/sculpture_8.jpg +- data/imagenet-r/n02510455/misc_94.jpg +- data/imagenet-r/n01748264/sketch_1.jpg +- data/imagenet-r/n02966193/sketch_12.jpg +- data/imagenet-r/n07749582/painting_5.jpg +- data/imagenet-r/n07720875/cartoon_9.jpg +- data/imagenet-r/n01514859/graphic_3.jpg +- data/imagenet-r/n07753275/painting_28.jpg +- data/imagenet-r/n03452741/videogame_7.jpg +- data/imagenet-r/n01644373/tattoo_8.jpg +- data/imagenet-r/n02883205/painting_0.jpg +- data/imagenet-r/n01534433/sketch_1.jpg +- data/imagenet-r/n02410509/painting_13.jpg +- data/imagenet-r/n07753592/deviantart_12.jpg +- data/imagenet-r/n01443537/graffiti_20.jpg +- data/imagenet-r/n02843684/art_3.jpg +- data/imagenet-r/n07749582/deviantart_11.jpg +- data/imagenet-r/n02481823/toy_4.jpg +- data/imagenet-r/n02395406/graphic_1.jpg +- data/imagenet-r/n02823750/cartoon_26.jpg +- data/imagenet-r/n07697313/cartoon_27.jpg +- data/imagenet-r/n01820546/art_16.jpg +- data/imagenet-r/n01860187/graphic_0.jpg +- data/imagenet-r/n04536866/art_4.jpg +- data/imagenet-r/n02395406/misc_26.jpg +- data/imagenet-r/n01748264/misc_21.jpg +- data/imagenet-r/n02749479/sketch_19.jpg +- data/imagenet-r/n09835506/painting_2.jpg +- data/imagenet-r/n02769748/sketch_23.jpg +- data/imagenet-r/n02749479/misc_8.jpg +- data/imagenet-r/n03594945/misc_9.jpg +- data/imagenet-r/n02948072/cartoon_74.jpg +- data/imagenet-r/n02410509/sculpture_15.jpg +- data/imagenet-r/n02117135/sketch_7.jpg +- data/imagenet-r/n02007558/sketch_19.jpg +- data/imagenet-r/n07720875/sketch_9.jpg +- data/imagenet-r/n04347754/cartoon_9.jpg +- data/imagenet-r/n01986214/misc_8.jpg +- data/imagenet-r/n01860187/tattoo_0.jpg +- data/imagenet-r/n03481172/sketch_4.jpg +- data/imagenet-r/n04536866/sketch_12.jpg +- data/imagenet-r/n03494278/cartoon_12.jpg +- data/imagenet-r/n02098286/misc_21.jpg +- data/imagenet-r/n04147183/painting_10.jpg +- data/imagenet-r/n01820546/cartoon_2.jpg +- data/imagenet-r/n04310018/misc_11.jpg +- data/imagenet-r/n01833805/art_6.jpg +- data/imagenet-r/n07745940/embroidery_9.jpg +- data/imagenet-r/n02119022/misc_51.jpg +- data/imagenet-r/n07693725/painting_7.jpg +- data/imagenet-r/n03710193/sketch_2.jpg +- data/imagenet-r/n04522168/cartoon_11.jpg +- data/imagenet-r/n02108089/sketch_1.jpg +- data/imagenet-r/n03888257/videogame_9.jpg +- data/imagenet-r/n02102318/misc_21.jpg +- data/imagenet-r/n02088238/misc_67.jpg +- data/imagenet-r/n07753275/art_13.jpg +- data/imagenet-r/n04141076/deviantart_17.jpg +- data/imagenet-r/n07880968/deviantart_15.jpg +- data/imagenet-r/n02088238/misc_50.jpg +- data/imagenet-r/n02279972/painting_16.jpg +- data/imagenet-r/n02410509/cartoon_6.jpg +- data/imagenet-r/n02096585/sketch_4.jpg +- data/imagenet-r/n03481172/cartoon_28.jpg +- data/imagenet-r/n02009912/sketch_4.jpg +- data/imagenet-r/n01806143/painting_2.jpg +- data/imagenet-r/n01843383/art_35.jpg +- data/imagenet-r/n02883205/embroidery_1.jpg +- data/imagenet-r/n02769748/cartoon_20.jpg +- data/imagenet-r/n01784675/tattoo_0.jpg +- data/imagenet-r/n02099601/misc_51.jpg +- data/imagenet-r/n02814860/misc_3.jpg +- data/imagenet-r/n07695742/sketch_1.jpg +- data/imagenet-r/n07742313/toy_5.jpg +- data/imagenet-r/n02909870/cartoon_11.jpg +- data/imagenet-r/n01986214/sketch_18.jpg +- data/imagenet-r/n07697313/deviantart_11.jpg +- data/imagenet-r/n04487394/cartoon_7.jpg +- data/imagenet-r/n01494475/misc_19.jpg +- data/imagenet-r/n02129165/tattoo_6.jpg +- data/imagenet-r/n01614925/sketch_2.jpg +- data/imagenet-r/n02410509/origami_12.jpg +- data/imagenet-r/n02814860/art_5.jpg +- data/imagenet-r/n02607072/sketch_8.jpg +- data/imagenet-r/n02483362/toy_0.jpg +- data/imagenet-r/n02206856/cartoon_67.jpg +- data/imagenet-r/n02206856/origami_0.jpg +- data/imagenet-r/n04118538/cartoon_3.jpg +- data/imagenet-r/n01820546/art_4.jpg +- data/imagenet-r/n03467068/sketch_7.jpg +- data/imagenet-r/n04275548/graffiti_0.jpg +- data/imagenet-r/n02066245/sketch_4.jpg +- data/imagenet-r/n02226429/art_12.jpg +- data/imagenet-r/n02437616/painting_6.jpg +- data/imagenet-r/n03888257/cartoon_12.jpg +- data/imagenet-r/n03452741/sketch_20.jpg +- data/imagenet-r/n02236044/art_15.jpg +- data/imagenet-r/n02481823/painting_11.jpg +- data/imagenet-r/n01531178/sketch_13.jpg +- data/imagenet-r/n02236044/cartoon_34.jpg +- data/imagenet-r/n02129165/tattoo_47.jpg +- data/imagenet-r/n02106662/sketch_8.jpg +- data/imagenet-r/n04389033/misc_12.jpg +- data/imagenet-r/n02165456/cartoon_9.jpg +- data/imagenet-r/n01518878/cartoon_59.jpg +- data/imagenet-r/n01484850/deviantart_0.jpg +- data/imagenet-r/n04409515/deviantart_17.jpg +- data/imagenet-r/n04146614/embroidery_1.jpg +- data/imagenet-r/n02236044/origami_26.jpg +- data/imagenet-r/n02391049/misc_28.jpg +- data/imagenet-r/n02445715/graffiti_3.jpg +- data/imagenet-r/n03124170/painting_2.jpg +- data/imagenet-r/n02906734/graffiti_5.jpg +- data/imagenet-r/n01616318/cartoon_3.jpg +- data/imagenet-r/n01614925/tattoo_16.jpg +- data/imagenet-r/n07734744/deviantart_6.jpg +- data/imagenet-r/n04086273/videogame_19.jpg +- data/imagenet-r/n01514859/deviantart_2.jpg +- data/imagenet-r/n01910747/tattoo_77.jpg +- data/imagenet-r/n07749582/art_0.jpg +- data/imagenet-r/n02526121/painting_0.jpg +- data/imagenet-r/n04146614/toy_27.jpg +- data/imagenet-r/n02325366/misc_45.jpg +- data/imagenet-r/n01498041/toy_4.jpg +- data/imagenet-r/n02808440/cartoon_19.jpg +- data/imagenet-r/n01944390/misc_61.jpg +- data/imagenet-r/n04536866/videogame_13.jpg +- data/imagenet-r/n02094433/misc_22.jpg +- data/imagenet-r/n02909870/graphic_6.jpg +- data/imagenet-r/n02085620/misc_18.jpg +- data/imagenet-r/n07734744/graffiti_21.jpg +- data/imagenet-r/n02206856/toy_40.jpg +- data/imagenet-r/n01983481/misc_12.jpg +- data/imagenet-r/n07873807/deviantart_16.jpg +- data/imagenet-r/n02233338/sketch_11.jpg +- data/imagenet-r/n02071294/tattoo_6.jpg +- data/imagenet-r/n02129165/art_3.jpg +- data/imagenet-r/n02097298/misc_76.jpg +- data/imagenet-r/n01531178/painting_36.jpg +- data/imagenet-r/n01833805/tattoo_84.jpg +- data/imagenet-r/n07697537/misc_7.jpg +- data/imagenet-r/n01614925/sculpture_7.jpg +- data/imagenet-r/n07697537/misc_85.jpg +- data/imagenet-r/n02128757/graffiti_0.jpg +- data/imagenet-r/n01514859/toy_11.jpg +- data/imagenet-r/n04310018/painting_40.jpg +- data/imagenet-r/n01770393/tattoo_79.jpg +- data/imagenet-r/n03602883/misc_47.jpg +- data/imagenet-r/n07693725/painting_6.jpg +- data/imagenet-r/n01677366/deviantart_5.jpg +- data/imagenet-r/n04389033/graphic_8.jpg +- data/imagenet-r/n04086273/sketch_14.jpg +- data/imagenet-r/n02526121/cartoon_32.jpg +- data/imagenet-r/n03930630/toy_9.jpg +- data/imagenet-r/n10565667/art_1.jpg +- data/imagenet-r/n03930630/videogame_7.jpg +- data/imagenet-r/n04266014/sketch_16.jpg +- data/imagenet-r/n01910747/painting_22.jpg +- data/imagenet-r/n03594945/misc_22.jpg +- data/imagenet-r/n03124170/deviantart_1.jpg +- data/imagenet-r/n01644373/deviantart_3.jpg +- data/imagenet-r/n07745940/embroidery_16.jpg +- data/imagenet-r/n04591713/painting_8.jpg +- data/imagenet-r/n02883205/sketch_20.jpg +- data/imagenet-r/n01484850/sketch_16.jpg +- data/imagenet-r/n02236044/painting_11.jpg +- data/imagenet-r/n02165456/tattoo_82.jpg +- data/imagenet-r/n07697537/misc_29.jpg +- data/imagenet-r/n04146614/sketch_15.jpg +- data/imagenet-r/n07714571/art_1.jpg +- data/imagenet-r/n03272010/sketch_15.jpg +- data/imagenet-r/n02236044/painting_0.jpg +- data/imagenet-r/n07695742/misc_10.jpg +- data/imagenet-r/n02486410/sketch_2.jpg +- data/imagenet-r/n02056570/sketch_9.jpg +- data/imagenet-r/n07697313/art_2.jpg +- data/imagenet-r/n07614500/sticker_2.jpg +- data/imagenet-r/n04192698/sculpture_4.jpg +- data/imagenet-r/n03124170/painting_25.jpg +- data/imagenet-r/n02129165/tattoo_10.jpg +- data/imagenet-r/n03452741/sketch_15.jpg +- data/imagenet-r/n02980441/art_2.jpg +- data/imagenet-r/n10565667/deviantart_0.jpg +- data/imagenet-r/n01443537/sketch_4.jpg +- data/imagenet-r/n03594945/toy_9.jpg +- data/imagenet-r/n07749582/toy_2.jpg +- data/imagenet-r/n04389033/toy_9.jpg +- data/imagenet-r/n01518878/sketch_14.jpg +- data/imagenet-r/n02110958/cartoon_17.jpg +- data/imagenet-r/n02113799/misc_21.jpg +- data/imagenet-r/n02129165/deviantart_28.jpg +- data/imagenet-r/n01986214/sculpture_3.jpg +- data/imagenet-r/n01494475/sketch_8.jpg +- data/imagenet-r/n01614925/painting_41.jpg +- data/imagenet-r/n01910747/tattoo_20.jpg +- data/imagenet-r/n02823750/sketch_14.jpg +- data/imagenet-r/n01443537/graphic_0.jpg +- data/imagenet-r/n01843383/art_34.jpg +- data/imagenet-r/n02206856/art_4.jpg +- data/imagenet-r/n02110958/painting_24.jpg +- data/imagenet-r/n02410509/sculpture_36.jpg +- data/imagenet-r/n04254680/deviantart_35.jpg +- data/imagenet-r/n04133789/sketch_0.jpg +- data/imagenet-r/n02769748/sticker_1.jpg +- data/imagenet-r/n02672831/cartoon_26.jpg +- data/imagenet-r/n02395406/misc_6.jpg +- data/imagenet-r/n03124170/graphic_3.jpg +- data/imagenet-r/n01774750/tattoo_11.jpg +- data/imagenet-r/n01614925/cartoon_15.jpg +- data/imagenet-r/n02749479/tattoo_1.jpg +- data/imagenet-r/n04133789/deviantart_1.jpg +- data/imagenet-r/n02749479/misc_37.jpg +- data/imagenet-r/n02190166/graffiti_8.jpg +- data/imagenet-r/n07614500/videogame_8.jpg +- data/imagenet-r/n03676483/sketch_16.jpg +- data/imagenet-r/n07718472/cartoon_3.jpg +- data/imagenet-r/n01443537/videogame_10.jpg +- data/imagenet-r/n01494475/misc_26.jpg +- data/imagenet-r/n01494475/misc_104.jpg +- data/imagenet-r/n02106166/cartoon_7.jpg +- data/imagenet-r/n02088364/sketch_12.jpg +- data/imagenet-r/n04141076/painting_1.jpg +- data/imagenet-r/n01806143/cartoon_17.jpg +- data/imagenet-r/n02814860/sketch_6.jpg +- data/imagenet-r/n02092339/sketch_5.jpg +- data/imagenet-r/n07695742/misc_13.jpg +- data/imagenet-r/n03124170/sculpture_12.jpg +- data/imagenet-r/n03272010/deviantart_17.jpg +- data/imagenet-r/n07714990/painting_2.jpg +- data/imagenet-r/n01910747/tattoo_53.jpg +- data/imagenet-r/n04147183/sketch_6.jpg +- data/imagenet-r/n02364673/cartoon_27.jpg +- data/imagenet-r/n02843684/graffiti_3.jpg +- data/imagenet-r/n02190166/cartoon_0.jpg +- data/imagenet-r/n01944390/misc_171.jpg +- data/imagenet-r/n01770393/embroidery_1.jpg +- data/imagenet-r/n02883205/painting_9.jpg +- data/imagenet-r/n01614925/sketch_3.jpg +- data/imagenet-r/n02123045/sketch_5.jpg +- data/imagenet-r/n02066245/art_7.jpg +- data/imagenet-r/n07753592/videogame_13.jpg +- data/imagenet-r/n01770393/tattoo_53.jpg +- data/imagenet-r/n07614500/cartoon_17.jpg +- data/imagenet-r/n01614925/tattoo_23.jpg +- data/imagenet-r/n02808440/cartoon_5.jpg +- data/imagenet-r/n02325366/sketch_5.jpg +- data/imagenet-r/n04147183/deviantart_10.jpg +- data/imagenet-r/n02948072/embroidery_14.jpg +- data/imagenet-r/n02206856/graffiti_8.jpg +- data/imagenet-r/n01944390/sketch_12.jpg +- data/imagenet-r/n02110958/misc_2.jpg +- data/imagenet-r/n03272010/sketch_12.jpg +- data/imagenet-r/n04389033/sticker_5.jpg +- data/imagenet-r/n01784675/tattoo_10.jpg +- data/imagenet-r/n02129165/graffiti_12.jpg +- data/imagenet-r/n01986214/sketch_19.jpg +- data/imagenet-r/n02102318/sketch_7.jpg +- data/imagenet-r/n07880968/cartoon_15.jpg +- data/imagenet-r/n02364673/cartoon_20.jpg +- data/imagenet-r/n01847000/misc_2.jpg +- data/imagenet-r/n02268443/misc_136.jpg +- data/imagenet-r/n07614500/cartoon_9.jpg +- data/imagenet-r/n02437616/graffiti_1.jpg +- data/imagenet-r/n02007558/art_14.jpg +- data/imagenet-r/n07695742/toy_7.jpg +- data/imagenet-r/n02066245/sketch_3.jpg +- data/imagenet-r/n07697313/cartoon_26.jpg +- data/imagenet-r/n02480495/painting_17.jpg +- data/imagenet-r/n02655020/misc_44.jpg +- data/imagenet-r/n02099601/misc_13.jpg +- data/imagenet-r/n04141076/cartoon_23.jpg +- data/imagenet-r/n02206856/sticker_9.jpg +- data/imagenet-r/n03124170/graffiti_7.jpg +- data/imagenet-r/n03494278/sketch_13.jpg +- data/imagenet-r/n02843684/sketch_3.jpg +- data/imagenet-r/n07742313/videogame_10.jpg +- data/imagenet-r/n04118538/cartoon_19.jpg +- data/imagenet-r/n01847000/tattoo_14.jpg +- data/imagenet-r/n07753275/sculpture_3.jpg +- data/imagenet-r/n02364673/cartoon_21.jpg +- data/imagenet-r/n02909870/videogame_6.jpg +- data/imagenet-r/n01882714/painting_5.jpg +- data/imagenet-r/n12267677/deviantart_12.jpg +- data/imagenet-r/n02091032/sketch_8.jpg +- data/imagenet-r/n09472597/videogame_21.jpg +- data/imagenet-r/n04310018/sticker_11.jpg +- data/imagenet-r/n02841315/misc_4.jpg +- data/imagenet-r/n01910747/tattoo_76.jpg +- data/imagenet-r/n02119022/misc_136.jpg +- data/imagenet-r/n02094433/misc_52.jpg +- data/imagenet-r/n01494475/misc_11.jpg +- data/imagenet-r/n02056570/painting_7.jpg +- data/imagenet-r/n02236044/origami_15.jpg +- data/imagenet-r/n04141076/painting_9.jpg +- data/imagenet-r/n02119022/sketch_4.jpg +- data/imagenet-r/n02206856/cartoon_44.jpg +- data/imagenet-r/n02909870/painting_3.jpg +- data/imagenet-r/n01843383/art_6.jpg +- data/imagenet-r/n02480855/tattoo_52.jpg +- data/imagenet-r/n07749582/deviantart_8.jpg +- data/imagenet-r/n02128757/graffiti_1.jpg +- data/imagenet-r/n02951358/art_4.jpg +- data/imagenet-r/n01843383/art_0.jpg +- data/imagenet-r/n02110958/cartoon_25.jpg +- data/imagenet-r/n01855672/sketch_16.jpg +- data/imagenet-r/n01847000/tattoo_4.jpg +- data/imagenet-r/n02391049/misc_123.jpg +- data/imagenet-r/n02099601/misc_97.jpg +- data/imagenet-r/n02951358/deviantart_7.jpg +- data/imagenet-r/n01774750/sculpture_2.jpg +- data/imagenet-r/n01531178/graphic_0.jpg +- data/imagenet-r/n01882714/toy_13.jpg +- data/imagenet-r/n03498962/cartoon_20.jpg +- data/imagenet-r/n02112137/misc_14.jpg +- data/imagenet-r/n02165456/art_3.jpg +- data/imagenet-r/n07697537/misc_17.jpg +- data/imagenet-r/n02395406/painting_17.jpg +- data/imagenet-r/n03495258/painting_7.jpg +- data/imagenet-r/n07714990/cartoon_22.jpg +- data/imagenet-r/n03452741/sketch_19.jpg +- data/imagenet-r/n04591713/cartoon_7.jpg +- data/imagenet-r/n02483362/sketch_11.jpg +- data/imagenet-r/n02226429/sculpture_21.jpg +- data/imagenet-r/n04522168/videogame_20.jpg +- data/imagenet-r/n02190166/sketch_1.jpg +- data/imagenet-r/n01784675/toy_4.jpg +- data/imagenet-r/n02206856/cartoon_29.jpg +- data/imagenet-r/n01614925/tattoo_51.jpg +- data/imagenet-r/n07734744/embroidery_17.jpg +- data/imagenet-r/n01944390/misc_99.jpg +- data/imagenet-r/n02128385/toy_5.jpg +- data/imagenet-r/n03594945/graffiti_3.jpg +- data/imagenet-r/n03345487/toy_10.jpg +- data/imagenet-r/n03495258/embroidery_1.jpg +- data/imagenet-r/n04389033/misc_10.jpg +- data/imagenet-r/n02236044/sculpture_27.jpg +- data/imagenet-r/n02447366/sketch_1.jpg +- data/imagenet-r/n07720875/art_6.jpg +- data/imagenet-r/n02108915/misc_64.jpg +- data/imagenet-r/n02480855/cartoon_2.jpg +- data/imagenet-r/n02808440/sketch_3.jpg +- data/imagenet-r/n01534433/sketch_4.jpg +- data/imagenet-r/n01484850/sketch_10.jpg +- data/imagenet-r/n04536866/videogame_11.jpg +- data/imagenet-r/n02088238/misc_84.jpg +- data/imagenet-r/n02110341/misc_144.jpg +- data/imagenet-r/n02138441/sketch_1.jpg +- data/imagenet-r/n04310018/painting_1.jpg +- data/imagenet-r/n03930630/origami_1.jpg +- data/imagenet-r/n03124170/art_4.jpg +- data/imagenet-r/n01833805/tattoo_81.jpg +- data/imagenet-r/n07749582/painting_1.jpg +- data/imagenet-r/n03947888/cartoon_2.jpg +- data/imagenet-r/n07720875/cartoon_10.jpg +- data/imagenet-r/n02797295/misc_53.jpg +- data/imagenet-r/n02317335/cartoon_12.jpg +- data/imagenet-r/n02056570/sketch_2.jpg +- data/imagenet-r/n02110185/art_5.jpg +- data/imagenet-r/n01843383/videogame_0.jpg +- data/imagenet-r/n02966193/graphic_0.jpg +- data/imagenet-r/n01833805/tattoo_26.jpg +- data/imagenet-r/n07697313/graffiti_1.jpg +- data/imagenet-r/n02948072/painting_9.jpg +- data/imagenet-r/n02966193/toy_5.jpg +- data/imagenet-r/n01986214/toy_5.jpg +- data/imagenet-r/n01847000/cartoon_12.jpg +- data/imagenet-r/n07697313/deviantart_16.jpg +- data/imagenet-r/n02099601/misc_72.jpg +- data/imagenet-r/n01833805/tattoo_12.jpg +- data/imagenet-r/n07734744/videogame_46.jpg +- data/imagenet-r/n02279972/sketch_14.jpg +- data/imagenet-r/n01986214/tattoo_3.jpg +- data/imagenet-r/n02814860/cartoon_21.jpg +- data/imagenet-r/n02398521/sketch_6.jpg +- data/imagenet-r/n02129165/tattoo_42.jpg +- data/imagenet-r/n02268443/misc_181.jpg +- data/imagenet-r/n03124170/art_14.jpg +- data/imagenet-r/n04086273/sketch_9.jpg +- data/imagenet-r/n02317335/embroidery_0.jpg +- data/imagenet-r/n01531178/sculpture_5.jpg +- data/imagenet-r/n01531178/painting_9.jpg +- data/imagenet-r/n02447366/sketch_16.jpg +- data/imagenet-r/n02268443/misc_35.jpg +- data/imagenet-r/n07745940/toy_17.jpg +- data/imagenet-r/n09472597/toy_8.jpg +- data/imagenet-r/n03124170/cartoon_20.jpg +- data/imagenet-r/n02769748/cartoon_37.jpg +- data/imagenet-r/n04389033/deviantart_14.jpg +- data/imagenet-r/n02447366/cartoon_7.jpg +- data/imagenet-r/n02112018/sketch_4.jpg +- data/imagenet-r/n02843684/embroidery_9.jpg +- data/imagenet-r/n04133789/sketch_6.jpg +- data/imagenet-r/n01833805/tattoo_37.jpg +- data/imagenet-r/n03345487/embroidery_0.jpg +- data/imagenet-r/n07614500/misc_12.jpg +- data/imagenet-r/n02236044/sculpture_1.jpg +- data/imagenet-r/n02906734/art_5.jpg +- data/imagenet-r/n07749582/sketch_7.jpg +- data/imagenet-r/n02071294/misc_2.jpg +- data/imagenet-r/n07718472/painting_9.jpg +- data/imagenet-r/n03272010/origami_4.jpg +- data/imagenet-r/n02085620/misc_57.jpg +- data/imagenet-r/n03498962/deviantart_1.jpg +- data/imagenet-r/n04086273/videogame_16.jpg +- data/imagenet-r/n02841315/sketch_5.jpg +- data/imagenet-r/n01518878/painting_19.jpg +- data/imagenet-r/n07718472/cartoon_0.jpg +- data/imagenet-r/n02112018/misc_32.jpg +- data/imagenet-r/n07734744/sketch_5.jpg +- data/imagenet-r/n04266014/sketch_11.jpg +- data/imagenet-r/n01784675/toy_3.jpg +- data/imagenet-r/n02108089/sketch_2.jpg +- data/imagenet-r/n07695742/painting_0.jpg +- data/imagenet-r/n01531178/painting_42.jpg +- data/imagenet-r/n02129165/painting_14.jpg +- data/imagenet-r/n02108915/misc_120.jpg +- data/imagenet-r/n01616318/tattoo_6.jpg +- data/imagenet-r/n02110341/misc_73.jpg +- data/imagenet-r/n02325366/misc_47.jpg +- data/imagenet-r/n02117135/sketch_6.jpg +- data/imagenet-r/n02363005/sketch_23.jpg +- data/imagenet-r/n02948072/cartoon_42.jpg +- data/imagenet-r/n02437616/toy_4.jpg +- data/imagenet-r/n02129604/painting_27.jpg +- data/imagenet-r/n01614925/deviantart_4.jpg +- data/imagenet-r/n02480495/cartoon_7.jpg +- data/imagenet-r/n02939185/embroidery_1.jpg +- data/imagenet-r/n01882714/deviantart_10.jpg +- data/imagenet-r/n12267677/misc_8.jpg +- data/imagenet-r/n02099712/misc_32.jpg +- data/imagenet-r/n07697313/graffiti_5.jpg +- data/imagenet-r/n02138441/painting_16.jpg +- data/imagenet-r/n02129604/cartoon_2.jpg +- data/imagenet-r/n04347754/cartoon_15.jpg +- data/imagenet-r/n01986214/origami_6.jpg +- data/imagenet-r/n02395406/origami_10.jpg +- data/imagenet-r/n02483362/graffiti_0.jpg +- data/imagenet-r/n07768694/art_4.jpg +- data/imagenet-r/n10565667/cartoon_6.jpg +- data/imagenet-r/n02138441/art_5.jpg +- data/imagenet-r/n02099601/misc_14.jpg +- data/imagenet-r/n07880968/sketch_20.jpg +- data/imagenet-r/n02701002/sticker_4.jpg +- data/imagenet-r/n02481823/cartoon_25.jpg +- data/imagenet-r/n04552348/misc_11.jpg +- data/imagenet-r/n02883205/cartoon_21.jpg +- data/imagenet-r/n07695742/toy_3.jpg +- data/imagenet-r/n01860187/graffiti_0.jpg +- data/imagenet-r/n02236044/cartoon_26.jpg +- data/imagenet-r/n04133789/cartoon_13.jpg +- data/imagenet-r/n04552348/deviantart_26.jpg +- data/imagenet-r/n02138441/painting_10.jpg +- data/imagenet-r/n02841315/sketch_18.jpg +- data/imagenet-r/n02106662/misc_6.jpg +- data/imagenet-r/n02480855/graffiti_16.jpg +- data/imagenet-r/n02129165/deviantart_8.jpg +- data/imagenet-r/n01748264/sketch_20.jpg +- data/imagenet-r/n02077923/sketch_10.jpg +- data/imagenet-r/n02051845/deviantart_0.jpg +- data/imagenet-r/n02480495/tattoo_0.jpg +- data/imagenet-r/n01820546/art_5.jpg +- data/imagenet-r/n01443537/toy_14.jpg +- data/imagenet-r/n02134084/misc_96.jpg +- data/imagenet-r/n07720875/deviantart_20.jpg +- data/imagenet-r/n07873807/sketch_15.jpg +- data/imagenet-r/n01616318/sculpture_2.jpg +- data/imagenet-r/n02814860/cartoon_25.jpg +- data/imagenet-r/n02108089/sketch_19.jpg +- data/imagenet-r/n03498962/sketch_16.jpg +- data/imagenet-r/n07697537/misc_78.jpg +- data/imagenet-r/n01443537/cartoon_34.jpg +- data/imagenet-r/n01498041/sketch_6.jpg +- data/imagenet-r/n04266014/videogame_33.jpg +- data/imagenet-r/n07697313/embroidery_9.jpg +- data/imagenet-r/n02134084/misc_43.jpg +- data/imagenet-r/n07768694/painting_22.jpg +- data/imagenet-r/n07720875/deviantart_11.jpg +- data/imagenet-r/n02823750/deviantart_7.jpg +- data/imagenet-r/n02117135/tattoo_13.jpg +- data/imagenet-r/n02219486/art_2.jpg +- data/imagenet-r/n01833805/misc_2.jpg +- data/imagenet-r/n02056570/art_3.jpg +- data/imagenet-r/n02939185/sketch_16.jpg +- data/imagenet-r/n04141076/graffiti_1.jpg +- data/imagenet-r/n02317335/sculpture_3.jpg +- data/imagenet-r/n01514859/painting_15.jpg +- data/imagenet-r/n01531178/tattoo_1.jpg +- data/imagenet-r/n01770393/tattoo_65.jpg +- data/imagenet-r/n07718472/cartoon_19.jpg +- data/imagenet-r/n01910747/graffiti_10.jpg +- data/imagenet-r/n02823750/cartoon_9.jpg +- data/imagenet-r/n02607072/sketch_21.jpg +- data/imagenet-r/n02437616/graffiti_3.jpg +- data/imagenet-r/n03452741/misc_3.jpg +- data/imagenet-r/n01784675/sketch_17.jpg +- data/imagenet-r/n07714990/cartoon_27.jpg +- data/imagenet-r/n01806143/art_0.jpg +- data/imagenet-r/n03372029/deviantart_6.jpg +- data/imagenet-r/n02395406/sculpture_2.jpg +- data/imagenet-r/n07714990/toy_3.jpg +- data/imagenet-r/n02092339/sketch_10.jpg +- data/imagenet-r/n01694178/art_8.jpg +- data/imagenet-r/n04146614/videogame_20.jpg +- data/imagenet-r/n01774750/cartoon_3.jpg +- data/imagenet-r/n07734744/videogame_33.jpg +- data/imagenet-r/n04141076/cartoon_20.jpg +- data/imagenet-r/n02165456/art_12.jpg +- data/imagenet-r/n01531178/embroidery_2.jpg +- data/imagenet-r/n01784675/sketch_7.jpg +- data/imagenet-r/n01498041/cartoon_17.jpg +- data/imagenet-r/n02110341/misc_147.jpg +- data/imagenet-r/n02769748/cartoon_42.jpg +- data/imagenet-r/n02096585/misc_99.jpg +- data/imagenet-r/n02099601/misc_12.jpg +- data/imagenet-r/n07697537/misc_50.jpg +- data/imagenet-r/n03424325/cartoon_0.jpg +- data/imagenet-r/n07753275/tattoo_2.jpg +- data/imagenet-r/n02236044/origami_9.jpg +- data/imagenet-r/n04118538/cartoon_30.jpg +- data/imagenet-r/n07714990/sketch_22.jpg +- data/imagenet-r/n02814860/deviantart_1.jpg +- data/imagenet-r/n07768694/toy_1.jpg +- data/imagenet-r/n01806143/cartoon_18.jpg +- data/imagenet-r/n04086273/tattoo_36.jpg +- data/imagenet-r/n01820546/art_2.jpg +- data/imagenet-r/n07734744/deviantart_33.jpg +- data/imagenet-r/n02226429/graffiti_3.jpg +- data/imagenet-r/n02085620/misc_77.jpg +- data/imagenet-r/n01774750/cartoon_11.jpg +- data/imagenet-r/n07745940/graffiti_6.jpg +- data/imagenet-r/n07742313/sculpture_2.jpg +- data/imagenet-r/n04465501/toy_8.jpg +- data/imagenet-r/n07753275/embroidery_10.jpg +- data/imagenet-r/n09835506/sculpture_2.jpg +- data/imagenet-r/n04409515/art_0.jpg +- data/imagenet-r/n07734744/sculpture_10.jpg +- data/imagenet-r/n04347754/sketch_4.jpg +- data/imagenet-r/n01498041/cartoon_10.jpg +- data/imagenet-r/n01616318/misc_1.jpg +- data/imagenet-r/n12267677/deviantart_7.jpg +- data/imagenet-r/n04536866/origami_1.jpg +- data/imagenet-r/n02906734/sketch_15.jpg +- data/imagenet-r/n01632777/toy_0.jpg +- data/imagenet-r/n01514859/deviantart_32.jpg +- data/imagenet-r/n02909870/sticker_9.jpg +- data/imagenet-r/n02951358/painting_10.jpg +- data/imagenet-r/n01644373/toy_0.jpg +- data/imagenet-r/n02110341/misc_11.jpg +- data/imagenet-r/n02948072/cartoon_36.jpg +- data/imagenet-r/n02769748/sketch_19.jpg +- data/imagenet-r/n02480855/tattoo_53.jpg +- data/imagenet-r/n02843684/misc_9.jpg +- data/imagenet-r/n04147183/tattoo_1.jpg +- data/imagenet-r/n02128757/painting_12.jpg +- data/imagenet-r/n03481172/sketch_11.jpg +- data/imagenet-r/n04275548/embroidery_4.jpg +- data/imagenet-r/n04310018/art_9.jpg +- data/imagenet-r/n10565667/videogame_23.jpg +- data/imagenet-r/n02841315/graffiti_6.jpg +- data/imagenet-r/n01677366/misc_18.jpg +- data/imagenet-r/n07745940/graffiti_3.jpg +- data/imagenet-r/n02091134/misc_81.jpg +- data/imagenet-r/n02096585/tattoo_0.jpg +- data/imagenet-r/n02129165/cartoon_18.jpg +- data/imagenet-r/n04552348/deviantart_2.jpg +- data/imagenet-r/n01630670/misc_3.jpg +- data/imagenet-r/n03424325/misc_25.jpg +- data/imagenet-r/n01843383/tattoo_4.jpg +- data/imagenet-r/n01855672/deviantart_9.jpg +- data/imagenet-r/n03888257/cartoon_11.jpg +- data/imagenet-r/n04254680/sketch_0.jpg +- data/imagenet-r/n07745940/graffiti_27.jpg +- data/imagenet-r/n02226429/graphic_2.jpg +- data/imagenet-r/n02071294/deviantart_42.jpg +- data/imagenet-r/n03467068/sketch_9.jpg +- data/imagenet-r/n02108089/sketch_18.jpg +- data/imagenet-r/n02110185/painting_15.jpg +- data/imagenet-r/n07745940/embroidery_22.jpg +- data/imagenet-r/n01910747/misc_5.jpg +- data/imagenet-r/n07695742/toy_8.jpg +- data/imagenet-r/n02226429/graphic_7.jpg +- data/imagenet-r/n03594945/sketch_11.jpg +- data/imagenet-r/n03602883/sketch_6.jpg +- data/imagenet-r/n01770393/origami_14.jpg +- data/imagenet-r/n02117135/cartoon_13.jpg +- data/imagenet-r/n02110185/painting_31.jpg +- data/imagenet-r/n01843383/cartoon_14.jpg +- data/imagenet-r/n07753275/sculpture_1.jpg +- data/imagenet-r/n02909870/sketch_24.jpg +- data/imagenet-r/n03124170/toy_10.jpg +- data/imagenet-r/n04266014/cartoon_10.jpg +- data/imagenet-r/n02106166/sketch_19.jpg +- data/imagenet-r/n02395406/misc_7.jpg +- data/imagenet-r/n01694178/sketch_1.jpg +- data/imagenet-r/n01774750/sketch_9.jpg +- data/imagenet-r/n02808440/sketch_6.jpg +- data/imagenet-r/n02398521/origami_0.jpg +- data/imagenet-r/n01784675/deviantart_1.jpg +- data/imagenet-r/n02109525/sketch_16.jpg +- data/imagenet-r/n02056570/embroidery_0.jpg +- data/imagenet-r/n03494278/deviantart_1.jpg +- data/imagenet-r/n09835506/deviantart_39.jpg +- data/imagenet-r/n02672831/graffiti_0.jpg +- data/imagenet-r/n07693725/sketch_4.jpg +- data/imagenet-r/n03124170/sculpture_11.jpg +- data/imagenet-r/n02114367/misc_50.jpg +- data/imagenet-r/n02909870/videogame_16.jpg +- data/imagenet-r/n02113023/misc_22.jpg +- data/imagenet-r/n01855672/sketch_14.jpg +- data/imagenet-r/n02134084/deviantart_0.jpg +- data/imagenet-r/n02445715/cartoon_7.jpg +- data/imagenet-r/n02110185/art_2.jpg +- data/imagenet-r/n02219486/misc_1.jpg +- data/imagenet-r/n02106030/painting_3.jpg +- data/imagenet-r/n02106166/cartoon_0.jpg +- data/imagenet-r/n07720875/painting_18.jpg +- data/imagenet-r/n02363005/sketch_0.jpg +- data/imagenet-r/n07734744/videogame_2.jpg +- data/imagenet-r/n02486410/cartoon_10.jpg +- data/imagenet-r/n02906734/origami_3.jpg +- data/imagenet-r/n02423022/origami_3.jpg +- data/imagenet-r/n02007558/misc_19.jpg +- data/imagenet-r/n04347754/cartoon_11.jpg +- data/imagenet-r/n02992529/sketch_18.jpg +- data/imagenet-r/n04347754/sticker_4.jpg +- data/imagenet-r/n03124170/cartoon_25.jpg +- data/imagenet-r/n02445715/sketch_12.jpg +- data/imagenet-r/n02363005/videogame_1.jpg +- data/imagenet-r/n02110341/sketch_23.jpg +- data/imagenet-r/n01616318/sticker_0.jpg +- data/imagenet-r/n01748264/sketch_10.jpg +- data/imagenet-r/n04347754/deviantart_3.jpg +- data/imagenet-r/n02317335/toy_9.jpg +- data/imagenet-r/n01494475/misc_17.jpg +- data/imagenet-r/n04310018/misc_5.jpg +- data/imagenet-r/n02236044/toy_7.jpg +- data/imagenet-r/n01833805/tattoo_60.jpg +- data/imagenet-r/n01484850/art_5.jpg +- data/imagenet-r/n02165456/toy_0.jpg +- data/imagenet-r/n02797295/misc_30.jpg +- data/imagenet-r/n02391049/misc_103.jpg +- data/imagenet-r/n02165456/sticker_4.jpg +- data/imagenet-r/n01632777/videogame_0.jpg +- data/imagenet-r/n02129165/painting_11.jpg +- data/imagenet-r/n02980441/deviantart_0.jpg +- data/imagenet-r/n04591713/embroidery_1.jpg +- data/imagenet-r/n04591713/painting_36.jpg +- data/imagenet-r/n01944390/deviantart_2.jpg +- data/imagenet-r/n02110958/painting_43.jpg +- data/imagenet-r/n02110341/tattoo_0.jpg +- data/imagenet-r/n02510455/deviantart_2.jpg +- data/imagenet-r/n07718472/toy_0.jpg +- data/imagenet-r/n02106166/sketch_9.jpg +- data/imagenet-r/n02948072/origami_2.jpg +- data/imagenet-r/n02363005/tattoo_1.jpg +- data/imagenet-r/n01443537/graffiti_9.jpg +- data/imagenet-r/n04146614/toy_12.jpg +- data/imagenet-r/n02099601/sketch_12.jpg +- data/imagenet-r/n01770393/art_5.jpg +- data/imagenet-r/n02108915/misc_38.jpg +- data/imagenet-r/n03930630/misc_4.jpg +- data/imagenet-r/n01774750/tattoo_6.jpg +- data/imagenet-r/n02481823/painting_1.jpg +- data/imagenet-r/n07697313/deviantart_9.jpg +- data/imagenet-r/n02980441/deviantart_7.jpg +- data/imagenet-r/n02364673/videogame_1.jpg +- data/imagenet-r/n03467068/cartoon_3.jpg +- data/imagenet-r/n01986214/sculpture_2.jpg +- data/imagenet-r/n02123045/painting_45.jpg +- data/imagenet-r/n01498041/sketch_22.jpg +- data/imagenet-r/n04389033/sculpture_11.jpg +- data/imagenet-r/n02106662/misc_63.jpg +- data/imagenet-r/n02909870/cartoon_3.jpg +- data/imagenet-r/n04522168/embroidery_3.jpg +- data/imagenet-r/n02007558/graffiti_14.jpg +- data/imagenet-r/n01677366/sketch_21.jpg +- data/imagenet-r/n04465501/tattoo_11.jpg +- data/imagenet-r/n04347754/misc_5.jpg +- data/imagenet-r/n07768694/deviantart_3.jpg +- data/imagenet-r/n07697537/misc_108.jpg +- data/imagenet-r/n02106550/misc_44.jpg +- data/imagenet-r/n01820546/sketch_0.jpg +- data/imagenet-r/n04141076/deviantart_19.jpg +- data/imagenet-r/n01833805/tattoo_82.jpg +- data/imagenet-r/n04192698/toy_8.jpg +- data/imagenet-r/n07693725/sketch_10.jpg +- data/imagenet-r/n02909870/misc_1.jpg +- data/imagenet-r/n02391049/misc_8.jpg +- data/imagenet-r/n07697313/toy_0.jpg +- data/imagenet-r/n07768694/art_1.jpg +- data/imagenet-r/n02088364/misc_9.jpg +- data/imagenet-r/n02395406/sketch_2.jpg +- data/imagenet-r/n02092339/misc_32.jpg +- data/imagenet-r/n07753275/toy_2.jpg +- data/imagenet-r/n02088466/misc_20.jpg +- data/imagenet-r/n09835506/videogame_17.jpg +- data/imagenet-r/n07745940/misc_10.jpg +- data/imagenet-r/n02802426/deviantart_10.jpg +- data/imagenet-r/n02423022/painting_6.jpg +- data/imagenet-r/n02110341/sketch_3.jpg +- data/imagenet-r/n02109525/sketch_15.jpg +- data/imagenet-r/n02395406/misc_12.jpg +- data/imagenet-r/n02948072/embroidery_20.jpg +- data/imagenet-r/n02206856/toy_39.jpg +- data/imagenet-r/n04310018/toy_15.jpg +- data/imagenet-r/n02395406/tattoo_11.jpg +- data/imagenet-r/n04409515/sculpture_3.jpg +- data/imagenet-r/n01632777/toy_4.jpg +- data/imagenet-r/n07745940/sticker_9.jpg +- data/imagenet-r/n07693725/cartoon_5.jpg +- data/imagenet-r/n04133789/cartoon_1.jpg +- data/imagenet-r/n02077923/origami_0.jpg +- data/imagenet-r/n02906734/painting_3.jpg +- data/imagenet-r/n02114367/misc_58.jpg +- data/imagenet-r/n01847000/misc_26.jpg +- data/imagenet-r/n04522168/cartoon_28.jpg +- data/imagenet-r/n02088238/misc_20.jpg +- data/imagenet-r/n01847000/toy_8.jpg +- data/imagenet-r/n04536866/deviantart_11.jpg +- data/imagenet-r/n02346627/sketch_22.jpg +- data/imagenet-r/n03372029/sketch_5.jpg +- data/imagenet-r/n02410509/graffiti_10.jpg +- data/imagenet-r/n02110958/cartoon_47.jpg +- data/imagenet-r/n02119022/misc_66.jpg +- data/imagenet-r/n03345487/cartoon_1.jpg +- data/imagenet-r/n01534433/deviantart_1.jpg +- data/imagenet-r/n01910747/tattoo_55.jpg +- data/imagenet-r/n02226429/cartoon_2.jpg +- data/imagenet-r/n04536866/cartoon_21.jpg +- data/imagenet-r/n12267677/misc_131.jpg +- data/imagenet-r/n02445715/painting_9.jpg +- data/imagenet-r/n07614500/misc_29.jpg +- data/imagenet-r/n02279972/tattoo_0.jpg +- data/imagenet-r/n04389033/graffiti_0.jpg +- data/imagenet-r/n01484850/deviantart_8.jpg +- data/imagenet-r/n02607072/misc_110.jpg +- data/imagenet-r/n02447366/painting_12.jpg +- data/imagenet-r/n07614500/deviantart_20.jpg +- data/imagenet-r/n02481823/graffiti_11.jpg +- data/imagenet-r/n02097298/misc_60.jpg +- data/imagenet-r/n02701002/sketch_14.jpg +- data/imagenet-r/n02098286/misc_47.jpg +- data/imagenet-r/n02165456/tattoo_27.jpg +- data/imagenet-r/n01882714/art_10.jpg +- data/imagenet-r/n04254680/misc_9.jpg +- data/imagenet-r/n04591713/toy_1.jpg +- data/imagenet-r/n02437616/sketch_1.jpg +- data/imagenet-r/n02165456/tattoo_63.jpg +- data/imagenet-r/n04147183/cartoon_0.jpg +- data/imagenet-r/n02268443/misc_121.jpg +- data/imagenet-r/n04141076/cartoon_15.jpg +- data/imagenet-r/n02190166/tattoo_8.jpg +- data/imagenet-r/n01855672/sketch_19.jpg +- data/imagenet-r/n09472597/videogame_31.jpg +- data/imagenet-r/n02190166/sketch_12.jpg +- data/imagenet-r/n03947888/toy_1.jpg +- data/imagenet-r/n01614925/deviantart_38.jpg +- data/imagenet-r/n01518878/deviantart_0.jpg +- data/imagenet-r/n03594945/cartoon_4.jpg +- data/imagenet-r/n02395406/tattoo_3.jpg +- data/imagenet-r/n07753592/misc_68.jpg +- data/imagenet-r/n01986214/deviantart_5.jpg +- data/imagenet-r/n02480495/painting_1.jpg +- data/imagenet-r/n02110341/misc_83.jpg +- data/imagenet-r/n01882714/sticker_2.jpg +- data/imagenet-r/n02980441/cartoon_6.jpg +- data/imagenet-r/n07695742/videogame_0.jpg +- data/imagenet-r/n04141076/deviantart_21.jpg +- data/imagenet-r/n01484850/tattoo_26.jpg +- data/imagenet-r/n04465501/sketch_12.jpg +- data/imagenet-r/n07745940/embroidery_14.jpg +- data/imagenet-r/n01833805/tattoo_92.jpg +- data/imagenet-r/n02108915/sketch_15.jpg +- data/imagenet-r/n02948072/sketch_3.jpg +- data/imagenet-r/n02391049/misc_20.jpg +- data/imagenet-r/n07873807/deviantart_12.jpg +- data/imagenet-r/n02130308/art_6.jpg +- data/imagenet-r/n02948072/cartoon_6.jpg +- data/imagenet-r/n02510455/deviantart_7.jpg +- data/imagenet-r/n02110341/misc_33.jpg +- data/imagenet-r/n02096585/misc_34.jpg +- data/imagenet-r/n04141076/sculpture_19.jpg +- data/imagenet-r/n07753592/misc_43.jpg +- data/imagenet-r/n07697313/cartoon_9.jpg +- data/imagenet-r/n01986214/cartoon_14.jpg +- data/imagenet-r/n04465501/cartoon_9.jpg +- data/imagenet-r/n02268443/misc_187.jpg +- data/imagenet-r/n04275548/cartoon_3.jpg +- data/imagenet-r/n03498962/cartoon_1.jpg +- data/imagenet-r/n07753592/videogame_8.jpg +- data/imagenet-r/n02129604/deviantart_40.jpg +- data/imagenet-r/n03272010/origami_0.jpg +- data/imagenet-r/n03345487/painting_0.jpg +- data/imagenet-r/n07714990/sculpture_1.jpg +- data/imagenet-r/n02481823/art_16.jpg +- data/imagenet-r/n01644373/painting_3.jpg +- data/imagenet-r/n02129165/toy_8.jpg +- data/imagenet-r/n03498962/cartoon_7.jpg +- data/imagenet-r/n07697313/deviantart_6.jpg +- data/imagenet-r/n02883205/cartoon_13.jpg +- data/imagenet-r/n02134084/misc_100.jpg +- data/imagenet-r/n07745940/painting_19.jpg +- data/imagenet-r/n07614500/graffiti_11.jpg +- data/imagenet-r/n01514859/painting_21.jpg +- data/imagenet-r/n02236044/tattoo_17.jpg +- data/imagenet-r/n02526121/art_7.jpg +- data/imagenet-r/n04141076/cartoon_60.jpg +- data/imagenet-r/n03272010/painting_17.jpg +- data/imagenet-r/n07734744/toy_24.jpg +- data/imagenet-r/n01820546/deviantart_4.jpg +- data/imagenet-r/n03467068/art_2.jpg +- data/imagenet-r/n07742313/sketch_20.jpg +- data/imagenet-r/n01614925/tattoo_1.jpg +- data/imagenet-r/n02113023/misc_15.jpg +- data/imagenet-r/n07697313/deviantart_25.jpg +- data/imagenet-r/n02391049/misc_91.jpg +- data/imagenet-r/n02279972/cartoon_10.jpg +- data/imagenet-r/n02138441/misc_0.jpg +- data/imagenet-r/n02219486/sketch_14.jpg +- data/imagenet-r/n01514859/deviantart_24.jpg +- data/imagenet-r/n07614500/toy_21.jpg +- data/imagenet-r/n09472597/art_2.jpg +- data/imagenet-r/n02096585/tattoo_18.jpg +- data/imagenet-r/n03947888/videogame_1.jpg +- data/imagenet-r/n02129165/graffiti_2.jpg +- data/imagenet-r/n02356798/sketch_17.jpg +- data/imagenet-r/n02769748/cartoon_4.jpg +- data/imagenet-r/n01694178/cartoon_9.jpg +- data/imagenet-r/n01614925/painting_20.jpg +- data/imagenet-r/n07714990/cartoon_23.jpg +- data/imagenet-r/n03124170/graffiti_16.jpg +- data/imagenet-r/n07734744/misc_7.jpg +- data/imagenet-r/n02398521/graffiti_2.jpg +- data/imagenet-r/n01944390/deviantart_4.jpg +- data/imagenet-r/n04409515/graphic_0.jpg +- data/imagenet-r/n03602883/misc_10.jpg +- data/imagenet-r/n02066245/videogame_0.jpg +- data/imagenet-r/n02007558/misc_10.jpg +- data/imagenet-r/n02129604/tattoo_14.jpg +- data/imagenet-r/n04487394/cartoon_1.jpg +- data/imagenet-r/n02268443/misc_48.jpg +- data/imagenet-r/n03481172/toy_8.jpg +- data/imagenet-r/n02909870/painting_8.jpg +- data/imagenet-r/n01514859/art_6.jpg +- data/imagenet-r/n01986214/sculpture_5.jpg +- data/imagenet-r/n03494278/sketch_6.jpg +- data/imagenet-r/n04389033/sketch_22.jpg +- data/imagenet-r/n02992529/sketch_11.jpg +- data/imagenet-r/n07745940/origami_15.jpg +- data/imagenet-r/n01748264/tattoo_37.jpg +- data/imagenet-r/n07753275/painting_3.jpg +- data/imagenet-r/n01443537/cartoon_21.jpg +- data/imagenet-r/n01614925/art_2.jpg +- data/imagenet-r/n01748264/misc_5.jpg +- data/imagenet-r/n04086273/tattoo_44.jpg +- data/imagenet-r/n02165456/sculpture_2.jpg +- data/imagenet-r/n02843684/cartoon_12.jpg +- data/imagenet-r/n02268443/misc_183.jpg +- data/imagenet-r/n01944390/tattoo_43.jpg +- data/imagenet-r/n07714990/cartoon_30.jpg +- data/imagenet-r/n02071294/sketch_16.jpg +- data/imagenet-r/n07697313/sketch_15.jpg +- data/imagenet-r/n01514859/toy_17.jpg +- data/imagenet-r/n03495258/tattoo_7.jpg +- data/imagenet-r/n02749479/videogame_7.jpg +- data/imagenet-r/n07734744/misc_11.jpg +- data/imagenet-r/n07768694/painting_13.jpg +- data/imagenet-r/n02483362/sketch_4.jpg +- data/imagenet-r/n02099712/misc_31.jpg +- data/imagenet-r/n02106550/misc_49.jpg +- data/imagenet-r/n02007558/graphic_16.jpg +- data/imagenet-r/n07753592/deviantart_17.jpg +- data/imagenet-r/n04389033/cartoon_9.jpg +- data/imagenet-r/n04522168/art_3.jpg +- data/imagenet-r/n04310018/videogame_29.jpg +- data/imagenet-r/n02129165/graffiti_9.jpg +- data/imagenet-r/n04347754/tattoo_15.jpg +- data/imagenet-r/n07734744/art_6.jpg +- data/imagenet-r/n02398521/toy_5.jpg +- data/imagenet-r/n07697313/embroidery_5.jpg +- data/imagenet-r/n02123045/cartoon_18.jpg +- data/imagenet-r/n04254680/sketch_10.jpg +- data/imagenet-r/n04465501/toy_7.jpg +- data/imagenet-r/n02110341/misc_113.jpg +- data/imagenet-r/n02165456/tattoo_64.jpg +- data/imagenet-r/n02226429/deviantart_0.jpg +- data/imagenet-r/n01882714/cartoon_39.jpg +- data/imagenet-r/n02088238/misc_106.jpg +- data/imagenet-r/n02481823/toy_10.jpg +- data/imagenet-r/n02128757/sketch_17.jpg +- data/imagenet-r/n02165456/toy_9.jpg +- data/imagenet-r/n04465501/deviantart_10.jpg +- data/imagenet-r/n09835506/sketch_26.jpg +- data/imagenet-r/n03481172/toy_6.jpg +- data/imagenet-r/n04266014/painting_20.jpg +- data/imagenet-r/n02007558/toy_4.jpg +- data/imagenet-r/n01820546/painting_10.jpg +- data/imagenet-r/n07697313/painting_4.jpg +- data/imagenet-r/n02226429/origami_16.jpg +- data/imagenet-r/n01986214/videogame_1.jpg +- data/imagenet-r/n01484850/art_17.jpg +- data/imagenet-r/n02114367/misc_29.jpg +- data/imagenet-r/n03124170/tattoo_0.jpg +- data/imagenet-r/n02363005/cartoon_20.jpg +- data/imagenet-r/n02769748/cartoon_18.jpg +- data/imagenet-r/n07697537/misc_67.jpg +- data/imagenet-r/n04146614/toy_15.jpg +- data/imagenet-r/n04310018/toy_1.jpg +- data/imagenet-r/n04552348/toy_0.jpg +- data/imagenet-r/n02009912/misc_42.jpg +- data/imagenet-r/n02113624/misc_10.jpg +- data/imagenet-r/n02088238/misc_16.jpg +- data/imagenet-r/n07718472/sketch_11.jpg +- data/imagenet-r/n02423022/painting_8.jpg +- data/imagenet-r/n02129165/misc_7.jpg +- data/imagenet-r/n02346627/sketch_7.jpg +- data/imagenet-r/n02085620/misc_82.jpg +- data/imagenet-r/n01616318/sticker_1.jpg +- data/imagenet-r/n02233338/misc_42.jpg +- data/imagenet-r/n01806143/misc_5.jpg +- data/imagenet-r/n12267677/misc_123.jpg +- data/imagenet-r/n02206856/cartoon_23.jpg +- data/imagenet-r/n02009912/misc_43.jpg +- data/imagenet-r/n02007558/painting_15.jpg +- data/imagenet-r/n07742313/sketch_11.jpg +- data/imagenet-r/n07614500/misc_11.jpg +- data/imagenet-r/n02134084/misc_118.jpg +- data/imagenet-r/n09835506/misc_13.jpg +- data/imagenet-r/n07745940/sketch_8.jpg +- data/imagenet-r/n02906734/sketch_12.jpg +- data/imagenet-r/n02447366/sketch_6.jpg +- data/imagenet-r/n02096585/misc_195.jpg +- data/imagenet-r/n03594945/cartoon_11.jpg +- data/imagenet-r/n03495258/tattoo_5.jpg +- data/imagenet-r/n02655020/misc_12.jpg +- data/imagenet-r/n01833805/sculpture_5.jpg +- data/imagenet-r/n01614925/tattoo_6.jpg +- data/imagenet-r/n01820546/deviantart_17.jpg +- data/imagenet-r/n02134084/sketch_8.jpg +- data/imagenet-r/n07697313/cartoon_44.jpg +- data/imagenet-r/n07745940/sketch_1.jpg +- data/imagenet-r/n02769748/cartoon_11.jpg +- data/imagenet-r/n02007558/origami_8.jpg +- data/imagenet-r/n01986214/cartoon_7.jpg +- data/imagenet-r/n01820546/art_13.jpg +- data/imagenet-r/n04465501/embroidery_2.jpg +- data/imagenet-r/n04310018/videogame_33.jpg +- data/imagenet-r/n02129604/deviantart_38.jpg +- data/imagenet-r/n01484850/sketch_8.jpg +- data/imagenet-r/n04141076/art_3.jpg +- data/imagenet-r/n02096585/misc_134.jpg +- data/imagenet-r/n01770393/graffiti_11.jpg +- data/imagenet-r/n04465501/painting_10.jpg +- data/imagenet-r/n02096585/misc_93.jpg +- data/imagenet-r/n02138441/sketch_20.jpg +- data/imagenet-r/n03649909/toy_9.jpg +- data/imagenet-r/n07718472/deviantart_4.jpg +- data/imagenet-r/n02841315/graffiti_0.jpg +- data/imagenet-r/n02391049/deviantart_9.jpg +- data/imagenet-r/n02814860/sketch_1.jpg +- data/imagenet-r/n07714571/painting_14.jpg +- data/imagenet-r/n02138441/sculpture_17.jpg +- data/imagenet-r/n09472597/cartoon_26.jpg +- data/imagenet-r/n02110185/cartoon_10.jpg +- data/imagenet-r/n03930630/toy_6.jpg +- data/imagenet-r/n02096585/misc_11.jpg +- data/imagenet-r/n03630383/cartoon_4.jpg +- data/imagenet-r/n07614500/origami_1.jpg +- data/imagenet-r/n02009912/misc_40.jpg +- data/imagenet-r/n03481172/graffiti_4.jpg +- data/imagenet-r/n07880968/sketch_4.jpg +- data/imagenet-r/n01843383/painting_50.jpg +- data/imagenet-r/n02102318/misc_9.jpg +- data/imagenet-r/n02906734/cartoon_13.jpg +- data/imagenet-r/n02317335/tattoo_34.jpg +- data/imagenet-r/n02206856/tattoo_15.jpg +- data/imagenet-r/n01644373/cartoon_5.jpg +- data/imagenet-r/n01847000/embroidery_6.jpg +- data/imagenet-r/n02655020/videogame_17.jpg +- data/imagenet-r/n02129165/graffiti_4.jpg +- data/imagenet-r/n02117135/misc_0.jpg +- data/imagenet-r/n01443537/cartoon_24.jpg +- data/imagenet-r/n07734744/painting_18.jpg +- data/imagenet-r/n02992529/sketch_8.jpg +- data/imagenet-r/n01855672/origami_1.jpg +- data/imagenet-r/n02129604/embroidery_5.jpg +- data/imagenet-r/n02009912/sketch_10.jpg +- data/imagenet-r/n07720875/art_10.jpg +- data/imagenet-r/n01820546/painting_5.jpg +- data/imagenet-r/n01616318/cartoon_11.jpg +- data/imagenet-r/n03888257/cartoon_16.jpg +- data/imagenet-r/n04465501/cartoon_6.jpg +- data/imagenet-r/n07614500/tattoo_14.jpg +- data/imagenet-r/n02510455/sketch_20.jpg +- data/imagenet-r/n02110958/cartoon_30.jpg +- data/imagenet-r/n04192698/art_0.jpg +- data/imagenet-r/n04133789/sketch_9.jpg +- data/imagenet-r/n02480495/painting_8.jpg +- data/imagenet-r/n02077923/misc_45.jpg +- data/imagenet-r/n04086273/tattoo_2.jpg +- data/imagenet-r/n04522168/videogame_17.jpg +- data/imagenet-r/n03124170/videogame_17.jpg +- data/imagenet-r/n02510455/misc_84.jpg +- data/imagenet-r/n04254680/deviantart_12.jpg +- data/imagenet-r/n02363005/sculpture_15.jpg +- data/imagenet-r/n07693725/deviantart_2.jpg +- data/imagenet-r/n01484850/tattoo_4.jpg +- data/imagenet-r/n01694178/toy_7.jpg +- data/imagenet-r/n07768694/videogame_0.jpg +- data/imagenet-r/n02085620/sketch_9.jpg +- data/imagenet-r/n02480495/painting_24.jpg +- data/imagenet-r/n02346627/sketch_3.jpg +- data/imagenet-r/n02134084/misc_76.jpg +- data/imagenet-r/n07614500/painting_6.jpg +- data/imagenet-r/n02165456/sketch_6.jpg +- data/imagenet-r/n04389033/deviantart_13.jpg +- data/imagenet-r/n01644373/tattoo_45.jpg +- data/imagenet-r/n02099601/tattoo_2.jpg +- data/imagenet-r/n02823750/deviantart_1.jpg +- data/imagenet-r/n01531178/art_17.jpg +- data/imagenet-r/n09835506/sculpture_8.jpg +- data/imagenet-r/n02165456/graffiti_5.jpg +- data/imagenet-r/n04133789/misc_3.jpg +- data/imagenet-r/n01484850/deviantart_11.jpg +- data/imagenet-r/n02129604/tattoo_39.jpg +- data/imagenet-r/n03602883/misc_54.jpg +- data/imagenet-r/n04192698/sketch_6.jpg +- data/imagenet-r/n10565667/videogame_27.jpg +- data/imagenet-r/n02607072/misc_24.jpg +- data/imagenet-r/n02128757/painting_26.jpg +- data/imagenet-r/n03594945/videogame_0.jpg +- data/imagenet-r/n02480855/painting_1.jpg +- data/imagenet-r/n01632777/art_0.jpg +- data/imagenet-r/n03124170/tattoo_14.jpg +- data/imagenet-r/n02106030/art_3.jpg +- data/imagenet-r/n02130308/toy_6.jpg +- data/imagenet-r/n02437616/tattoo_2.jpg +- data/imagenet-r/n07714990/deviantart_20.jpg +- data/imagenet-r/n03602883/misc_56.jpg +- data/imagenet-r/n01632777/embroidery_0.jpg +- data/imagenet-r/n02841315/sticker_0.jpg +- data/imagenet-r/n03494278/toy_0.jpg +- data/imagenet-r/n01910747/embroidery_8.jpg +- data/imagenet-r/n02486410/sculpture_14.jpg +- data/imagenet-r/n09472597/videogame_3.jpg +- data/imagenet-r/n07695742/sketch_17.jpg +- data/imagenet-r/n02106030/painting_17.jpg +- data/imagenet-r/n02096585/misc_153.jpg +- data/imagenet-r/n02190166/graffiti_0.jpg +- data/imagenet-r/n04146614/art_1.jpg +- data/imagenet-r/n02088238/sketch_16.jpg +- data/imagenet-r/n04409515/cartoon_8.jpg +- data/imagenet-r/n02106030/art_6.jpg +- data/imagenet-r/n02099601/misc_25.jpg +- data/imagenet-r/n02129165/painting_13.jpg +- data/imagenet-r/n01860187/cartoon_3.jpg +- data/imagenet-r/n02096585/misc_175.jpg +- data/imagenet-r/n03424325/misc_91.jpg +- data/imagenet-r/n01833805/tattoo_40.jpg +- data/imagenet-r/n02096585/misc_131.jpg +- data/imagenet-r/n02391049/misc_90.jpg +- data/imagenet-r/n02007558/graffiti_25.jpg +- data/imagenet-r/n04310018/origami_0.jpg +- data/imagenet-r/n02950826/toy_5.jpg +- data/imagenet-r/n04310018/deviantart_9.jpg +- data/imagenet-r/n01484850/painting_14.jpg +- data/imagenet-r/n04254680/sketch_16.jpg +- data/imagenet-r/n02398521/embroidery_0.jpg +- data/imagenet-r/n02102318/misc_17.jpg +- data/imagenet-r/n02096585/misc_128.jpg +- data/imagenet-r/n02114367/misc_53.jpg +- data/imagenet-r/n02481823/graffiti_6.jpg +- data/imagenet-r/n02391049/misc_7.jpg +- data/imagenet-r/n03630383/cartoon_24.jpg +- data/imagenet-r/n07697313/deviantart_22.jpg +- data/imagenet-r/n02410509/graffiti_11.jpg +- data/imagenet-r/n02410509/origami_8.jpg +- data/imagenet-r/n10565667/sketch_23.jpg +- data/imagenet-r/n03676483/painting_2.jpg +- data/imagenet-r/n02007558/graphic_17.jpg +- data/imagenet-r/n02607072/misc_106.jpg +- data/imagenet-r/n02110341/misc_158.jpg +- data/imagenet-r/n03888257/art_5.jpg +- data/imagenet-r/n02883205/cartoon_12.jpg +- data/imagenet-r/n02883205/cartoon_6.jpg +- data/imagenet-r/n02268443/misc_171.jpg +- data/imagenet-r/n02219486/graffiti_5.jpg +- data/imagenet-r/n02480495/painting_37.jpg +- data/imagenet-r/n02106166/sketch_6.jpg +- data/imagenet-r/n02948072/art_2.jpg +- data/imagenet-r/n02843684/misc_21.jpg +- data/imagenet-r/n02110185/cartoon_11.jpg +- data/imagenet-r/n02841315/cartoon_11.jpg +- data/imagenet-r/n07697313/sculpture_8.jpg +- data/imagenet-r/n04409515/graphic_3.jpg +- data/imagenet-r/n01986214/cartoon_16.jpg +- data/imagenet-r/n02363005/sketch_12.jpg +- data/imagenet-r/n02445715/cartoon_4.jpg +- data/imagenet-r/n03481172/cartoon_30.jpg +- data/imagenet-r/n02134084/tattoo_14.jpg +- data/imagenet-r/n07745940/sketch_4.jpg +- data/imagenet-r/n02395406/painting_14.jpg +- data/imagenet-r/n02236044/graffiti_16.jpg +- data/imagenet-r/n02843684/cartoon_6.jpg +- data/imagenet-r/n02445715/tattoo_0.jpg +- data/imagenet-r/n02236044/tattoo_26.jpg +- data/imagenet-r/n01694178/graphic_6.jpg +- data/imagenet-r/n02391049/misc_15.jpg +- data/imagenet-r/n07714990/deviantart_17.jpg +- data/imagenet-r/n02108089/sketch_4.jpg +- data/imagenet-r/n01494475/misc_101.jpg +- data/imagenet-r/n02701002/sketch_22.jpg +- data/imagenet-r/n04141076/cartoon_57.jpg +- data/imagenet-r/n07614500/sketch_6.jpg +- data/imagenet-r/n02206856/embroidery_24.jpg +- data/imagenet-r/n02395406/painting_2.jpg +- data/imagenet-r/n01644373/deviantart_23.jpg +- data/imagenet-r/n01518878/videogame_5.jpg +- data/imagenet-r/n02236044/sculpture_26.jpg +- data/imagenet-r/n04465501/tattoo_9.jpg +- data/imagenet-r/n01882714/painting_20.jpg +- data/imagenet-r/n07753275/deviantart_9.jpg +- data/imagenet-r/n01494475/misc_113.jpg +- data/imagenet-r/n02391049/misc_128.jpg +- data/imagenet-r/n02108915/sketch_2.jpg +- data/imagenet-r/n02110958/cartoon_28.jpg +- data/imagenet-r/n07697313/graffiti_0.jpg +- data/imagenet-r/n04118538/sketch_7.jpg +- data/imagenet-r/n07753592/misc_39.jpg +- data/imagenet-r/n02481823/videogame_5.jpg +- data/imagenet-r/n02056570/sketch_14.jpg +- data/imagenet-r/n01833805/tattoo_21.jpg +- data/imagenet-r/n01983481/misc_25.jpg +- data/imagenet-r/n02233338/misc_27.jpg +- data/imagenet-r/n02948072/deviantart_31.jpg +- data/imagenet-r/n03676483/embroidery_1.jpg +- data/imagenet-r/n03676483/sketch_10.jpg +- data/imagenet-r/n02236044/origami_25.jpg +- data/imagenet-r/n03345487/sketch_17.jpg +- data/imagenet-r/n04487394/graphic_1.jpg +- data/imagenet-r/n03124170/graffiti_12.jpg +- data/imagenet-r/n02108915/misc_83.jpg +- data/imagenet-r/n01770393/sculpture_6.jpg +- data/imagenet-r/n02481823/sketch_15.jpg +- data/imagenet-r/n12267677/misc_20.jpg +- data/imagenet-r/n02486410/sculpture_8.jpg +- data/imagenet-r/n07697313/graffiti_6.jpg +- data/imagenet-r/n02138441/painting_13.jpg +- data/imagenet-r/n01882714/graffiti_7.jpg +- data/imagenet-r/n02091032/sketch_15.jpg +- data/imagenet-r/n02088364/videogame_0.jpg +- data/imagenet-r/n02814860/videogame_15.jpg +- data/imagenet-r/n07742313/art_3.jpg +- data/imagenet-r/n02526121/cartoon_13.jpg +- data/imagenet-r/n07753592/deviantart_9.jpg +- data/imagenet-r/n02071294/deviantart_40.jpg +- data/imagenet-r/n02110185/painting_25.jpg +- data/imagenet-r/n02364673/painting_17.jpg +- data/imagenet-r/n02395406/graffiti_4.jpg +- data/imagenet-r/n07753592/misc_117.jpg +- data/imagenet-r/n01677366/misc_22.jpg +- data/imagenet-r/n02066245/sketch_14.jpg +- data/imagenet-r/n03467068/painting_0.jpg +- data/imagenet-r/n01986214/deviantart_12.jpg +- data/imagenet-r/n02108089/sketch_13.jpg +- data/imagenet-r/n01847000/videogame_4.jpg +- data/imagenet-r/n02481823/sticker_2.jpg +- data/imagenet-r/n02823750/painting_0.jpg +- data/imagenet-r/n01855672/cartoon_9.jpg +- data/imagenet-r/n01910747/embroidery_4.jpg +- data/imagenet-r/n02085620/misc_65.jpg +- data/imagenet-r/n09472597/sketch_10.jpg +- data/imagenet-r/n02410509/graffiti_12.jpg +- data/imagenet-r/n02948072/cartoon_8.jpg +- data/imagenet-r/n01484850/misc_6.jpg +- data/imagenet-r/n02096585/misc_109.jpg +- data/imagenet-r/n04266014/deviantart_0.jpg +- data/imagenet-r/n02066245/sketch_19.jpg +- data/imagenet-r/n02980441/sketch_0.jpg +- data/imagenet-r/n02110958/embroidery_11.jpg +- data/imagenet-r/n02128757/painting_15.jpg +- data/imagenet-r/n02109525/misc_14.jpg +- data/imagenet-r/n01498041/painting_7.jpg +- data/imagenet-r/n01843383/deviantart_67.jpg +- data/imagenet-r/n01644373/tattoo_51.jpg +- data/imagenet-r/n02097298/misc_25.jpg +- data/imagenet-r/n02119022/misc_152.jpg +- data/imagenet-r/n02071294/sketch_5.jpg +- data/imagenet-r/n03345487/sketch_13.jpg +- data/imagenet-r/n02108089/misc_49.jpg +- data/imagenet-r/n03345487/sticker_1.jpg +- data/imagenet-r/n03495258/sketch_17.jpg +- data/imagenet-r/n02123045/art_6.jpg +- data/imagenet-r/n02398521/sketch_2.jpg +- data/imagenet-r/n01630670/sculpture_2.jpg +- data/imagenet-r/n04086273/sketch_0.jpg +- data/imagenet-r/n01694178/painting_8.jpg +- data/imagenet-r/n02948072/sketch_32.jpg +- data/imagenet-r/n01833805/painting_41.jpg +- data/imagenet-r/n02110958/painting_46.jpg +- data/imagenet-r/n02106166/painting_20.jpg +- data/imagenet-r/n02883205/sculpture_7.jpg +- data/imagenet-r/n02102318/misc_6.jpg +- data/imagenet-r/n02398521/sculpture_6.jpg +- data/imagenet-r/n02480855/videogame_5.jpg +- data/imagenet-r/n04141076/graffiti_3.jpg +- data/imagenet-r/n02165456/misc_7.jpg +- data/imagenet-r/n02410509/graffiti_1.jpg +- data/imagenet-r/n01531178/painting_48.jpg +- data/imagenet-r/n02814860/sketch_13.jpg +- data/imagenet-r/n02206856/sketch_20.jpg +- data/imagenet-r/n09472597/toy_12.jpg +- data/imagenet-r/n02793495/graphic_1.jpg +- data/imagenet-r/n07768694/sketch_21.jpg +- data/imagenet-r/n02088466/misc_6.jpg +- data/imagenet-r/n04347754/tattoo_9.jpg +- data/imagenet-r/n02395406/art_17.jpg +- data/imagenet-r/n04409515/misc_0.jpg +- data/imagenet-r/n01518878/sculpture_5.jpg +- data/imagenet-r/n04266014/sketch_2.jpg +- data/imagenet-r/n01630670/art_3.jpg +- data/imagenet-r/n02096585/misc_13.jpg +- data/imagenet-r/n02091032/sketch_13.jpg +- data/imagenet-r/n07734744/painting_28.jpg +- data/imagenet-r/n07614500/deviantart_13.jpg +- data/imagenet-r/n09835506/misc_43.jpg +- data/imagenet-r/n03481172/toy_9.jpg +- data/imagenet-r/n04310018/graffiti_0.jpg +- data/imagenet-r/n04389033/tattoo_0.jpg +- data/imagenet-r/n02841315/toy_8.jpg +- data/imagenet-r/n07714571/deviantart_5.jpg +- data/imagenet-r/n03481172/sketch_13.jpg +- data/imagenet-r/n01774750/sketch_0.jpg +- data/imagenet-r/n02206856/origami_11.jpg +- data/imagenet-r/n02423022/sculpture_21.jpg +- data/imagenet-r/n02106550/sketch_6.jpg +- data/imagenet-r/n02007558/toy_7.jpg +- data/imagenet-r/n02071294/deviantart_1.jpg +- data/imagenet-r/n02088364/tattoo_1.jpg +- data/imagenet-r/n07873807/deviantart_22.jpg +- data/imagenet-r/n01614925/painting_12.jpg +- data/imagenet-r/n03345487/videogame_0.jpg +- data/imagenet-r/n07873807/deviantart_17.jpg +- data/imagenet-r/n02134084/misc_103.jpg +- data/imagenet-r/n02226429/sketch_22.jpg +- data/imagenet-r/n02797295/misc_21.jpg +- data/imagenet-r/n02909870/cartoon_14.jpg +- data/imagenet-r/n01847000/tattoo_20.jpg +- data/imagenet-r/n02206856/toy_4.jpg +- data/imagenet-r/n02129165/deviantart_9.jpg +- data/imagenet-r/n09472597/videogame_33.jpg +- data/imagenet-r/n02110958/painting_59.jpg +- data/imagenet-r/n02088238/misc_109.jpg +- data/imagenet-r/n07920052/sketch_0.jpg +- data/imagenet-r/n02483362/cartoon_2.jpg +- data/imagenet-r/n02814860/painting_31.jpg +- data/imagenet-r/n04465501/painting_7.jpg +- data/imagenet-r/n02843684/embroidery_0.jpg +- data/imagenet-r/n02094433/misc_30.jpg +- data/imagenet-r/n02317335/painting_6.jpg +- data/imagenet-r/n02391049/sketch_16.jpg +- data/imagenet-r/n02843684/misc_15.jpg +- data/imagenet-r/n02909870/sketch_14.jpg +- data/imagenet-r/n01774750/origami_3.jpg +- data/imagenet-r/n02007558/graffiti_32.jpg +- data/imagenet-r/n02206856/toy_28.jpg +- data/imagenet-r/n03947888/painting_3.jpg +- data/imagenet-r/n07753592/sketch_21.jpg +- data/imagenet-r/n02206856/tattoo_5.jpg +- data/imagenet-r/n04522168/painting_2.jpg +- data/imagenet-r/n02071294/deviantart_8.jpg +- data/imagenet-r/n07614500/sketch_23.jpg +- data/imagenet-r/n01443537/deviantart_5.jpg +- data/imagenet-r/n02086240/misc_41.jpg +- data/imagenet-r/n07920052/sketch_10.jpg +- data/imagenet-r/n02129165/deviantart_32.jpg +- data/imagenet-r/n02236044/sketch_18.jpg +- data/imagenet-r/n02085620/tattoo_10.jpg +- data/imagenet-r/n04086273/deviantart_8.jpg +- data/imagenet-r/n02701002/tattoo_1.jpg +- data/imagenet-r/n01847000/sketch_10.jpg +- data/imagenet-r/n02114367/misc_52.jpg +- data/imagenet-r/n02066245/sketch_8.jpg +- data/imagenet-r/n02486410/graffiti_7.jpg +- data/imagenet-r/n10565667/cartoon_8.jpg +- data/imagenet-r/n02906734/sketch_8.jpg +- data/imagenet-r/n04389033/painting_0.jpg +- data/imagenet-r/n04522168/embroidery_6.jpg +- data/imagenet-r/n03124170/origami_0.jpg +- data/imagenet-r/n03594945/cartoon_7.jpg +- data/imagenet-r/n02071294/toy_4.jpg +- data/imagenet-r/n04347754/videogame_9.jpg +- data/imagenet-r/n07734744/graffiti_37.jpg +- data/imagenet-r/n09835506/deviantart_33.jpg +- data/imagenet-r/n02701002/toy_3.jpg +- data/imagenet-r/n02268443/misc_92.jpg +- data/imagenet-r/n01820546/deviantart_22.jpg +- data/imagenet-r/n02099712/misc_33.jpg +- data/imagenet-r/n02099712/sketch_10.jpg +- data/imagenet-r/n02939185/sketch_17.jpg +- data/imagenet-r/n02486410/graffiti_3.jpg +- data/imagenet-r/n02410509/graphic_1.jpg +- data/imagenet-r/n02391049/misc_106.jpg +- data/imagenet-r/n07695742/cartoon_7.jpg +- data/imagenet-r/n02219486/misc_0.jpg +- data/imagenet-r/n03888257/cartoon_37.jpg +- data/imagenet-r/n04310018/toy_8.jpg +- data/imagenet-r/n01494475/sketch_16.jpg +- data/imagenet-r/n02097298/misc_38.jpg +- data/imagenet-r/n03495258/sculpture_22.jpg +- data/imagenet-r/n03452741/painting_2.jpg +- data/imagenet-r/n01847000/misc_30.jpg +- data/imagenet-r/n02948072/deviantart_22.jpg +- data/imagenet-r/n02129604/graffiti_12.jpg +- data/imagenet-r/n12267677/deviantart_22.jpg +- data/imagenet-r/n01847000/misc_5.jpg +- data/imagenet-r/n01630670/art_6.jpg +- data/imagenet-r/n01770393/sculpture_0.jpg +- data/imagenet-r/n02437616/deviantart_21.jpg +- data/imagenet-r/n02655020/videogame_5.jpg +- data/imagenet-r/n02364673/painting_19.jpg +- data/imagenet-r/n02802426/sketch_7.jpg +- data/imagenet-r/n12267677/misc_83.jpg +- data/imagenet-r/n02071294/tattoo_9.jpg +- data/imagenet-r/n01882714/deviantart_17.jpg +- data/imagenet-r/n02110341/misc_75.jpg +- data/imagenet-r/n02206856/toy_2.jpg +- data/imagenet-r/n04591713/cartoon_5.jpg +- data/imagenet-r/n02097298/sketch_6.jpg +- data/imagenet-r/n04133789/deviantart_0.jpg +- data/imagenet-r/n01534433/sketch_8.jpg +- data/imagenet-r/n01748264/sketch_3.jpg +- data/imagenet-r/n07695742/sketch_6.jpg +- data/imagenet-r/n02094433/misc_19.jpg +- data/imagenet-r/n09835506/deviantart_25.jpg +- data/imagenet-r/n02106550/misc_30.jpg +- data/imagenet-r/n04389033/sculpture_14.jpg +- data/imagenet-r/n02363005/cartoon_45.jpg +- data/imagenet-r/n02114367/sketch_12.jpg +- data/imagenet-r/n02480495/sketch_17.jpg +- data/imagenet-r/n07718472/sculpture_0.jpg +- data/imagenet-r/n03773504/cartoon_2.jpg +- data/imagenet-r/n09472597/art_11.jpg +- data/imagenet-r/n07749582/sketch_2.jpg +- data/imagenet-r/n01833805/tattoo_59.jpg +- data/imagenet-r/n04254680/tattoo_6.jpg +- data/imagenet-r/n02437616/cartoon_14.jpg +- data/imagenet-r/n02445715/graffiti_0.jpg +- data/imagenet-r/n04146614/misc_1.jpg +- data/imagenet-r/n02119022/misc_79.jpg +- data/imagenet-r/n03676483/sketch_17.jpg +- data/imagenet-r/n01443537/graffiti_12.jpg +- data/imagenet-r/n04086273/painting_6.jpg +- data/imagenet-r/n02110341/misc_82.jpg +- data/imagenet-r/n02134084/misc_78.jpg +- data/imagenet-r/n02007558/tattoo_7.jpg +- data/imagenet-r/n04310018/toy_21.jpg +- data/imagenet-r/n02110341/misc_76.jpg +- data/imagenet-r/n01494475/sketch_22.jpg +- data/imagenet-r/n07753275/misc_11.jpg +- data/imagenet-r/n01443537/painting_10.jpg +- data/imagenet-r/n02236044/sticker_0.jpg +- data/imagenet-r/n02948072/cartoon_39.jpg +- data/imagenet-r/n02088238/misc_37.jpg +- data/imagenet-r/n07614500/deviantart_0.jpg +- data/imagenet-r/n02219486/painting_0.jpg +- data/imagenet-r/n01616318/tattoo_8.jpg +- data/imagenet-r/n04147183/deviantart_5.jpg +- data/imagenet-r/n03424325/misc_67.jpg +- data/imagenet-r/n02165456/misc_5.jpg +- data/imagenet-r/n02395406/misc_31.jpg +- data/imagenet-r/n01833805/tattoo_11.jpg +- data/imagenet-r/n02110341/sketch_0.jpg +- data/imagenet-r/n04389033/graphic_1.jpg +- data/imagenet-r/n02802426/sketch_10.jpg +- data/imagenet-r/n02007558/graphic_18.jpg +- data/imagenet-r/n02206856/sketch_23.jpg +- data/imagenet-r/n01833805/tattoo_72.jpg +- data/imagenet-r/n02007558/cartoon_31.jpg +- data/imagenet-r/n02097298/sketch_11.jpg +- data/imagenet-r/n02206856/art_21.jpg +- data/imagenet-r/n03630383/sketch_7.jpg +- data/imagenet-r/n03452741/origami_3.jpg +- data/imagenet-r/n07697313/graphic_7.jpg +- data/imagenet-r/n02119022/misc_153.jpg +- data/imagenet-r/n02129165/tattoo_66.jpg +- data/imagenet-r/n02391049/deviantart_10.jpg +- data/imagenet-r/n02190166/graphic_0.jpg +- data/imagenet-r/n01784675/origami_10.jpg +- data/imagenet-r/n02110958/tattoo_28.jpg +- data/imagenet-r/n02398521/art_16.jpg +- data/imagenet-r/n02843684/cartoon_24.jpg +- data/imagenet-r/n04310018/sticker_9.jpg +- data/imagenet-r/n02099712/misc_29.jpg +- data/imagenet-r/n02481823/misc_3.jpg +- data/imagenet-r/n04254680/deviantart_34.jpg +- data/imagenet-r/n04266014/cartoon_27.jpg +- data/imagenet-r/n01644373/tattoo_32.jpg +- data/imagenet-r/n03124170/videogame_16.jpg +- data/imagenet-r/n02051845/tattoo_2.jpg +- data/imagenet-r/n02206856/graffiti_16.jpg +- data/imagenet-r/n02951358/painting_11.jpg +- data/imagenet-r/n02110958/painting_6.jpg +- data/imagenet-r/n02510455/deviantart_22.jpg +- data/imagenet-r/n04266014/cartoon_3.jpg +- data/imagenet-r/n04275548/painting_12.jpg +- data/imagenet-r/n03710193/misc_31.jpg +- data/imagenet-r/n12267677/misc_124.jpg +- data/imagenet-r/n02096585/tattoo_22.jpg +- data/imagenet-r/n04465501/videogame_6.jpg +- data/imagenet-r/n07720875/sketch_4.jpg +- data/imagenet-r/n02672831/sketch_14.jpg +- data/imagenet-r/n03272010/sketch_21.jpg +- data/imagenet-r/n02398521/toy_17.jpg +- data/imagenet-r/n03602883/misc_58.jpg +- data/imagenet-r/n02447366/cartoon_1.jpg +- data/imagenet-r/n02219486/sketch_0.jpg +- data/imagenet-r/n01694178/toy_6.jpg +- data/imagenet-r/n02480855/origami_1.jpg +- data/imagenet-r/n02117135/art_4.jpg +- data/imagenet-r/n02110185/sketch_6.jpg +- data/imagenet-r/n01843383/tattoo_12.jpg +- data/imagenet-r/n02099601/misc_31.jpg +- data/imagenet-r/n02510455/misc_123.jpg +- data/imagenet-r/n04254680/videogame_30.jpg +- data/imagenet-r/n07614500/sketch_3.jpg +- data/imagenet-r/n02077923/misc_35.jpg +- data/imagenet-r/n01770393/graffiti_14.jpg +- data/imagenet-r/n04147183/sketch_4.jpg +- data/imagenet-r/n02437616/tattoo_3.jpg +- data/imagenet-r/n07614500/cartoon_6.jpg +- data/imagenet-r/n01443537/painting_20.jpg +- data/imagenet-r/n01847000/toy_13.jpg +- data/imagenet-r/n02119022/misc_31.jpg +- data/imagenet-r/n01944390/misc_4.jpg +- data/imagenet-r/n04591713/sketch_22.jpg +- data/imagenet-r/n02066245/sculpture_7.jpg +- data/imagenet-r/n01882714/sticker_4.jpg +- data/imagenet-r/n02526121/cartoon_4.jpg +- data/imagenet-r/n02110958/cartoon_12.jpg +- data/imagenet-r/n02007558/sketch_24.jpg +- data/imagenet-r/n01910747/tattoo_86.jpg +- data/imagenet-r/n02134084/misc_56.jpg +- data/imagenet-r/n04409515/deviantart_14.jpg +- data/imagenet-r/n02110958/cartoon_16.jpg +- data/imagenet-r/n02110958/cartoon_5.jpg +- data/imagenet-r/n02098286/misc_44.jpg +- data/imagenet-r/n01847000/toy_15.jpg +- data/imagenet-r/n03498962/graphic_1.jpg +- data/imagenet-r/n03594945/painting_0.jpg +- data/imagenet-r/n07614500/sculpture_1.jpg +- data/imagenet-r/n02088466/sketch_9.jpg +- data/imagenet-r/n02655020/deviantart_2.jpg +- data/imagenet-r/n04133789/graphic_1.jpg +- data/imagenet-r/n02480855/tattoo_9.jpg +- data/imagenet-r/n07734744/art_3.jpg +- data/imagenet-r/n02909870/graphic_13.jpg +- data/imagenet-r/n02134084/misc_123.jpg +- data/imagenet-r/n04536866/painting_25.jpg +- data/imagenet-r/n02097298/misc_77.jpg +- data/imagenet-r/n02364673/cartoon_29.jpg +- data/imagenet-r/n03372029/toy_1.jpg +- data/imagenet-r/n07753275/tattoo_6.jpg +- data/imagenet-r/n07695742/toy_2.jpg +- data/imagenet-r/n02797295/misc_63.jpg +- data/imagenet-r/n04347754/deviantart_0.jpg +- data/imagenet-r/n02481823/sticker_0.jpg +- data/imagenet-r/n04389033/videogame_29.jpg +- data/imagenet-r/n01518878/graffiti_3.jpg +- data/imagenet-r/n04591713/sketch_7.jpg +- data/imagenet-r/n01518878/misc_4.jpg +- data/imagenet-r/n02094433/sketch_13.jpg +- data/imagenet-r/n02134084/misc_135.jpg +- data/imagenet-r/n02112018/misc_52.jpg +- data/imagenet-r/n01616318/graphic_0.jpg +- data/imagenet-r/n04086273/tattoo_53.jpg +- data/imagenet-r/n01494475/sketch_18.jpg +- data/imagenet-r/n09835506/misc_4.jpg +- data/imagenet-r/n02843684/cartoon_22.jpg +- data/imagenet-r/n04591713/sticker_4.jpg +- data/imagenet-r/n02814860/cartoon_33.jpg +- data/imagenet-r/n02793495/painting_23.jpg +- data/imagenet-r/n01514859/painting_28.jpg +- data/imagenet-r/n02129165/sketch_22.jpg +- data/imagenet-r/n02909870/cartoon_12.jpg +- data/imagenet-r/n04254680/deviantart_37.jpg +- data/imagenet-r/n03124170/sticker_0.jpg +- data/imagenet-r/n03372029/cartoon_6.jpg +- data/imagenet-r/n02108915/misc_70.jpg +- data/imagenet-r/n10565667/videogame_3.jpg +- data/imagenet-r/n02219486/sticker_2.jpg +- data/imagenet-r/n02797295/misc_29.jpg +- data/imagenet-r/n02138441/sculpture_9.jpg +- data/imagenet-r/n04086273/graffiti_10.jpg +- data/imagenet-r/n09472597/toy_2.jpg +- data/imagenet-r/n04254680/deviantart_36.jpg +- data/imagenet-r/n02423022/cartoon_27.jpg +- data/imagenet-r/n02206856/painting_1.jpg +- data/imagenet-r/n02363005/sketch_10.jpg +- data/imagenet-r/n01806143/sketch_8.jpg +- data/imagenet-r/n02966193/painting_3.jpg +- data/imagenet-r/n01855672/misc_9.jpg +- data/imagenet-r/n07697313/sculpture_5.jpg +- data/imagenet-r/n01748264/deviantart_2.jpg +- data/imagenet-r/n03773504/cartoon_10.jpg +- data/imagenet-r/n02510455/misc_36.jpg +- data/imagenet-r/n03710193/deviantart_0.jpg +- data/imagenet-r/n02480855/sketch_6.jpg +- data/imagenet-r/n02346627/cartoon_20.jpg +- data/imagenet-r/n01514859/deviantart_26.jpg +- data/imagenet-r/n02398521/sketch_7.jpg +- data/imagenet-r/n02701002/sketch_8.jpg +- data/imagenet-r/n02802426/cartoon_20.jpg +- data/imagenet-r/n02108915/misc_115.jpg +- data/imagenet-r/n04347754/videogame_13.jpg +- data/imagenet-r/n07714990/tattoo_0.jpg +- data/imagenet-r/n02445715/cartoon_10.jpg +- data/imagenet-r/n03424325/videogame_12.jpg +- data/imagenet-r/n01677366/sketch_2.jpg +- data/imagenet-r/n01614925/deviantart_6.jpg +- data/imagenet-r/n02106550/misc_16.jpg +- data/imagenet-r/n07749582/sketch_21.jpg +- data/imagenet-r/n02165456/graffiti_4.jpg +- data/imagenet-r/n03481172/graffiti_9.jpg +- data/imagenet-r/n01910747/art_7.jpg +- data/imagenet-r/n02325366/misc_55.jpg +- data/imagenet-r/n02091134/sketch_15.jpg +- data/imagenet-r/n02165456/sketch_10.jpg +- data/imagenet-r/n02906734/sculpture_3.jpg +- data/imagenet-r/n02096585/misc_33.jpg +- data/imagenet-r/n02106550/misc_2.jpg +- data/imagenet-r/n03272010/toy_4.jpg +- data/imagenet-r/n02325366/misc_5.jpg +- data/imagenet-r/n02077923/sketch_19.jpg +- data/imagenet-r/n02447366/sculpture_3.jpg +- data/imagenet-r/n02672831/toy_3.jpg +- data/imagenet-r/n02007558/cartoon_11.jpg +- data/imagenet-r/n07697313/sketch_25.jpg +- data/imagenet-r/n01770393/tattoo_37.jpg +- data/imagenet-r/n07693725/cartoon_28.jpg +- data/imagenet-r/n02096585/misc_107.jpg +- data/imagenet-r/n02051845/cartoon_4.jpg +- data/imagenet-r/n02701002/art_6.jpg +- data/imagenet-r/n07749582/painting_25.jpg +- data/imagenet-r/n02108089/tattoo_4.jpg +- data/imagenet-r/n02092339/sketch_8.jpg +- data/imagenet-r/n07753592/misc_54.jpg +- data/imagenet-r/n02672831/toy_0.jpg +- data/imagenet-r/n02808440/cartoon_16.jpg +- data/imagenet-r/n07720875/sketch_16.jpg +- data/imagenet-r/n07695742/toy_5.jpg +- data/imagenet-r/n02843684/painting_12.jpg +- data/imagenet-r/n02410509/origami_10.jpg +- data/imagenet-r/n02165456/art_0.jpg +- data/imagenet-r/n03481172/painting_2.jpg +- data/imagenet-r/n02085620/misc_95.jpg +- data/imagenet-r/n04275548/cartoon_9.jpg +- data/imagenet-r/n02948072/cartoon_2.jpg +- data/imagenet-r/n02410509/sketch_16.jpg +- data/imagenet-r/n01614925/tattoo_18.jpg +- data/imagenet-r/n02088238/misc_96.jpg +- data/imagenet-r/n02129165/sculpture_9.jpg +- data/imagenet-r/n02481823/cartoon_12.jpg +- data/imagenet-r/n04086273/graffiti_8.jpg +- data/imagenet-r/n01833805/graffiti_21.jpg +- data/imagenet-r/n07745940/cartoon_0.jpg +- data/imagenet-r/n02119022/misc_160.jpg +- data/imagenet-r/n02110185/painting_35.jpg +- data/imagenet-r/n04522168/painting_30.jpg +- data/imagenet-r/n03930630/cartoon_13.jpg +- data/imagenet-r/n02123045/cartoon_16.jpg +- data/imagenet-r/n02096585/misc_0.jpg +- data/imagenet-r/n02950826/sketch_3.jpg +- data/imagenet-r/n02481823/sketch_0.jpg +- data/imagenet-r/n02909870/art_6.jpg +- data/imagenet-r/n03272010/sketch_10.jpg +- data/imagenet-r/n02088364/sketch_16.jpg +- data/imagenet-r/n02056570/cartoon_2.jpg +- data/imagenet-r/n02701002/graffiti_0.jpg +- data/imagenet-r/n02883205/cartoon_18.jpg +- data/imagenet-r/n02823750/graphic_4.jpg +- data/imagenet-r/n03888257/art_2.jpg +- data/imagenet-r/n07753275/cartoon_17.jpg +- data/imagenet-r/n02655020/misc_91.jpg +- data/imagenet-r/n02088238/misc_72.jpg +- data/imagenet-r/n01820546/painting_8.jpg +- data/imagenet-r/n02317335/sketch_7.jpg +- data/imagenet-r/n01843383/deviantart_74.jpg +- data/imagenet-r/n02129165/sketch_21.jpg +- data/imagenet-r/n02110958/cartoon_73.jpg +- data/imagenet-r/n02481823/graffiti_20.jpg +- data/imagenet-r/n02445715/cartoon_16.jpg +- data/imagenet-r/n02129604/painting_20.jpg +- data/imagenet-r/n02165456/tattoo_16.jpg +- data/imagenet-r/n01855672/origami_2.jpg +- data/imagenet-r/n02108915/misc_97.jpg +- data/imagenet-r/n02128757/cartoon_5.jpg +- data/imagenet-r/n02096585/sketch_16.jpg +- data/imagenet-r/n04389033/sculpture_9.jpg +- data/imagenet-r/n02395406/cartoon_5.jpg +- data/imagenet-r/n02808440/sketch_11.jpg +- data/imagenet-r/n01910747/cartoon_23.jpg +- data/imagenet-r/n02138441/painting_0.jpg +- data/imagenet-r/n01882714/deviantart_3.jpg +- data/imagenet-r/n03773504/sketch_10.jpg +- data/imagenet-r/n07697313/painting_14.jpg +- data/imagenet-r/n07742313/cartoon_3.jpg +- data/imagenet-r/n04325704/graphic_0.jpg +- data/imagenet-r/n02437616/sculpture_6.jpg +- data/imagenet-r/n02823750/cartoon_17.jpg +- data/imagenet-r/n07614500/toy_18.jpg +- data/imagenet-r/n04347754/painting_8.jpg +- data/imagenet-r/n01632777/toy_14.jpg +- data/imagenet-r/n04266014/videogame_19.jpg +- data/imagenet-r/n02749479/misc_12.jpg +- data/imagenet-r/n01843383/deviantart_57.jpg +- data/imagenet-r/n02138441/toy_7.jpg +- data/imagenet-r/n01514859/painting_35.jpg +- data/imagenet-r/n07734744/graffiti_26.jpg +- data/imagenet-r/n02110185/graphic_4.jpg +- data/imagenet-r/n04141076/sketch_20.jpg +- data/imagenet-r/n02110958/tattoo_8.jpg +- data/imagenet-r/n01855672/sculpture_0.jpg +- data/imagenet-r/n04141076/sculpture_21.jpg +- data/imagenet-r/n02364673/sketch_2.jpg +- data/imagenet-r/n02325366/misc_46.jpg +- data/imagenet-r/n02130308/cartoon_17.jpg +- data/imagenet-r/n04275548/origami_1.jpg +- data/imagenet-r/n02113799/sketch_5.jpg +- data/imagenet-r/n03494278/painting_3.jpg +- data/imagenet-r/n01531178/tattoo_0.jpg +- data/imagenet-r/n02672831/sketch_1.jpg +- data/imagenet-r/n02395406/cartoon_15.jpg +- data/imagenet-r/n01986214/sketch_0.jpg +- data/imagenet-r/n02108915/misc_94.jpg +- data/imagenet-r/n02808440/painting_22.jpg +- data/imagenet-r/n02102318/misc_18.jpg +- data/imagenet-r/n02701002/videogame_5.jpg +- data/imagenet-r/n02883205/cartoon_14.jpg +- data/imagenet-r/n03630383/cartoon_13.jpg +- data/imagenet-r/n02128385/painting_5.jpg +- data/imagenet-r/n01494475/misc_119.jpg +- data/imagenet-r/n07753592/misc_146.jpg +- data/imagenet-r/n02325366/misc_35.jpg +- data/imagenet-r/n07697537/misc_1.jpg +- data/imagenet-r/n03930630/toy_14.jpg +- data/imagenet-r/n07745940/toy_10.jpg +- data/imagenet-r/n02129604/deviantart_21.jpg +- data/imagenet-r/n04254680/videogame_5.jpg +- data/imagenet-r/n02769748/sketch_0.jpg +- data/imagenet-r/n01614925/tattoo_11.jpg +- data/imagenet-r/n03124170/toy_20.jpg +- data/imagenet-r/n02129165/painting_10.jpg +- data/imagenet-r/n01518878/videogame_2.jpg +- data/imagenet-r/n02129165/tattoo_27.jpg +- data/imagenet-r/n02106550/misc_10.jpg +- data/imagenet-r/n02236044/cartoon_1.jpg +- data/imagenet-r/n01833805/tattoo_77.jpg +- data/imagenet-r/n04552348/painting_10.jpg +- data/imagenet-r/n09835506/deviantart_31.jpg +- data/imagenet-r/n02268443/sticker_0.jpg +- data/imagenet-r/n02481823/sketch_7.jpg +- data/imagenet-r/n02119022/misc_42.jpg +- data/imagenet-r/n02883205/sculpture_9.jpg +- data/imagenet-r/n02094433/misc_46.jpg +- data/imagenet-r/n02672831/graphic_0.jpg +- data/imagenet-r/n07753592/misc_148.jpg +- data/imagenet-r/n02099601/misc_28.jpg +- data/imagenet-r/n02094433/misc_24.jpg +- data/imagenet-r/n02437616/graffiti_4.jpg +- data/imagenet-r/n04086273/tattoo_40.jpg +- data/imagenet-r/n02802426/misc_3.jpg +- data/imagenet-r/n02071294/deviantart_5.jpg +- data/imagenet-r/n02071294/toy_10.jpg +- data/imagenet-r/n03710193/sketch_19.jpg +- data/imagenet-r/n02129604/deviantart_28.jpg +- data/imagenet-r/n02843684/sketch_19.jpg +- data/imagenet-r/n07753592/misc_102.jpg +- data/imagenet-r/n07873807/deviantart_2.jpg +- data/imagenet-r/n01833805/graffiti_6.jpg +- data/imagenet-r/n02480855/misc_0.jpg +- data/imagenet-r/n04536866/art_1.jpg +- data/imagenet-r/n01632777/art_10.jpg +- data/imagenet-r/n02398521/sculpture_3.jpg +- data/imagenet-r/n03372029/sketch_15.jpg +- data/imagenet-r/n03602883/misc_1.jpg +- data/imagenet-r/n02110341/sketch_12.jpg +- data/imagenet-r/n03602883/misc_46.jpg +- data/imagenet-r/n04086273/misc_3.jpg +- data/imagenet-r/n02672831/sketch_7.jpg +- data/imagenet-r/n03710193/sketch_6.jpg +- data/imagenet-r/n01882714/tattoo_20.jpg +- data/imagenet-r/n04310018/painting_4.jpg +- data/imagenet-r/n07734744/painting_8.jpg +- data/imagenet-r/n02966193/cartoon_5.jpg +- data/imagenet-r/n01494475/misc_38.jpg +- data/imagenet-r/n01833805/sculpture_1.jpg +- data/imagenet-r/n02206856/tattoo_9.jpg +- data/imagenet-r/n02447366/embroidery_2.jpg +- data/imagenet-r/n02113023/sketch_3.jpg +- data/imagenet-r/n04266014/sculpture_0.jpg +- data/imagenet-r/n01644373/deviantart_14.jpg +- data/imagenet-r/n01910747/painting_1.jpg +- data/imagenet-r/n02009912/misc_24.jpg +- data/imagenet-r/n04487394/sketch_10.jpg +- data/imagenet-r/n02966193/sculpture_2.jpg +- data/imagenet-r/n02085620/misc_21.jpg +- data/imagenet-r/n02066245/painting_8.jpg +- data/imagenet-r/n04254680/videogame_36.jpg +- data/imagenet-r/n02939185/toy_0.jpg +- data/imagenet-r/n02134084/misc_147.jpg +- data/imagenet-r/n02007558/cartoon_35.jpg +- data/imagenet-r/n02395406/sketch_4.jpg +- data/imagenet-r/n07714990/sketch_14.jpg +- data/imagenet-r/n02279972/painting_8.jpg +- data/imagenet-r/n02128757/art_1.jpg +- data/imagenet-r/n04347754/videogame_20.jpg +- data/imagenet-r/n02445715/cartoon_18.jpg +- data/imagenet-r/n01820546/deviantart_8.jpg +- data/imagenet-r/n01644373/tattoo_46.jpg +- data/imagenet-r/n02480495/sculpture_7.jpg +- data/imagenet-r/n03649909/misc_0.jpg +- data/imagenet-r/n01494475/misc_144.jpg +- data/imagenet-r/n02085620/sketch_16.jpg +- data/imagenet-r/n07734744/toy_1.jpg +- data/imagenet-r/n07697313/art_40.jpg +- data/imagenet-r/n02279972/sketch_10.jpg +- data/imagenet-r/n10565667/graffiti_6.jpg +- data/imagenet-r/n02110185/art_7.jpg +- data/imagenet-r/n02110341/misc_63.jpg +- data/imagenet-r/n02481823/painting_2.jpg +- data/imagenet-r/n03773504/sketch_5.jpg +- data/imagenet-r/n01847000/toy_1.jpg +- data/imagenet-r/n02236044/tattoo_18.jpg +- data/imagenet-r/n03710193/misc_27.jpg +- data/imagenet-r/n01833805/origami_13.jpg +- data/imagenet-r/n10565667/deviantart_18.jpg +- data/imagenet-r/n04310018/videogame_22.jpg +- data/imagenet-r/n02110958/tattoo_37.jpg +- data/imagenet-r/n07697537/misc_51.jpg +- data/imagenet-r/n02423022/videogame_3.jpg +- data/imagenet-r/n02134084/misc_68.jpg +- data/imagenet-r/n02110341/misc_2.jpg +- data/imagenet-r/n04522168/origami_0.jpg +- data/imagenet-r/n04254680/videogame_39.jpg +- data/imagenet-r/n02098286/sketch_8.jpg +- data/imagenet-r/n02099601/misc_26.jpg +- data/imagenet-r/n02814860/painting_16.jpg +- data/imagenet-r/n01843383/deviantart_5.jpg +- data/imagenet-r/n02445715/videogame_10.jpg +- data/imagenet-r/n01518878/graphic_5.jpg +- data/imagenet-r/n02110958/cartoon_37.jpg +- data/imagenet-r/n07697313/art_27.jpg +- data/imagenet-r/n02088466/misc_15.jpg +- data/imagenet-r/n02948072/embroidery_33.jpg +- data/imagenet-r/n04254680/videogame_26.jpg +- data/imagenet-r/n02071294/sketch_21.jpg +- data/imagenet-r/n02486410/sketch_4.jpg +- data/imagenet-r/n01855672/painting_14.jpg +- data/imagenet-r/n02437616/cartoon_26.jpg +- data/imagenet-r/n02423022/painting_1.jpg +- data/imagenet-r/n02481823/sculpture_11.jpg +- data/imagenet-r/n02097298/misc_43.jpg +- data/imagenet-r/n01531178/tattoo_8.jpg +- data/imagenet-r/n02948072/deviantart_24.jpg +- data/imagenet-r/n02088238/sketch_0.jpg +- data/imagenet-r/n01806143/graffiti_8.jpg +- data/imagenet-r/n01443537/cartoon_11.jpg +- data/imagenet-r/n02096585/misc_136.jpg +- data/imagenet-r/n01630670/sketch_20.jpg +- data/imagenet-r/n04325704/toy_3.jpg +- data/imagenet-r/n01494475/misc_96.jpg +- data/imagenet-r/n02391049/misc_65.jpg +- data/imagenet-r/n02110341/misc_41.jpg +- data/imagenet-r/n01518878/art_6.jpg +- data/imagenet-r/n07880968/sketch_16.jpg +- data/imagenet-r/n02051845/deviantart_18.jpg +- data/imagenet-r/n02219486/misc_8.jpg +- data/imagenet-r/n01806143/painting_4.jpg +- data/imagenet-r/n02114367/misc_14.jpg +- data/imagenet-r/n04522168/cartoon_17.jpg +- data/imagenet-r/n02672831/cartoon_0.jpg +- data/imagenet-r/n02395406/art_9.jpg +- data/imagenet-r/n01494475/misc_1.jpg +- data/imagenet-r/n07734744/videogame_40.jpg +- data/imagenet-r/n02128757/painting_19.jpg +- data/imagenet-r/n02481823/deviantart_7.jpg +- data/imagenet-r/n02391049/misc_9.jpg +- data/imagenet-r/n01855672/sketch_18.jpg +- data/imagenet-r/n07920052/sketch_8.jpg +- data/imagenet-r/n02843684/cartoon_4.jpg +- data/imagenet-r/n01847000/tattoo_15.jpg +- data/imagenet-r/n03888257/sketch_10.jpg +- data/imagenet-r/n02077923/misc_37.jpg +- data/imagenet-r/n03481172/art_12.jpg +- data/imagenet-r/n02106550/sketch_12.jpg +- data/imagenet-r/n02007558/painting_9.jpg +- data/imagenet-r/n03947888/videogame_6.jpg +- data/imagenet-r/n02510455/deviantart_11.jpg +- data/imagenet-r/n04086273/tattoo_8.jpg +- data/imagenet-r/n01531178/painting_44.jpg +- data/imagenet-r/n01677366/misc_8.jpg +- data/imagenet-r/n02088364/misc_74.jpg +- data/imagenet-r/n07693725/sketch_7.jpg +- data/imagenet-r/n07749582/painting_46.jpg +- data/imagenet-r/n02445715/painting_16.jpg +- data/imagenet-r/n02009912/sketch_14.jpg +- data/imagenet-r/n07614500/sketch_10.jpg +- data/imagenet-r/n01843383/art_33.jpg +- data/imagenet-r/n02279972/sketch_17.jpg +- data/imagenet-r/n02906734/painting_1.jpg +- data/imagenet-r/n02395406/cartoon_25.jpg +- data/imagenet-r/n02206856/toy_30.jpg +- data/imagenet-r/n02129604/tattoo_42.jpg +- data/imagenet-r/n02007558/sketch_17.jpg +- data/imagenet-r/n07745940/misc_25.jpg +- data/imagenet-r/n07614500/deviantart_4.jpg +- data/imagenet-r/n02088466/sketch_12.jpg +- data/imagenet-r/n01770393/cartoon_17.jpg +- data/imagenet-r/n02085620/sketch_7.jpg +- data/imagenet-r/n02206856/painting_16.jpg +- data/imagenet-r/n09835506/sketch_2.jpg +- data/imagenet-r/n07734744/toy_23.jpg +- data/imagenet-r/n02051845/sticker_0.jpg +- data/imagenet-r/n02110958/tattoo_34.jpg +- data/imagenet-r/n01770393/tattoo_0.jpg +- data/imagenet-r/n01644373/graffiti_3.jpg +- data/imagenet-r/n04522168/videogame_10.jpg +- data/imagenet-r/n07614500/tattoo_11.jpg +- data/imagenet-r/n01770393/tattoo_51.jpg +- data/imagenet-r/n02398521/art_7.jpg +- data/imagenet-r/n12267677/misc_122.jpg +- data/imagenet-r/n02948072/cartoon_21.jpg +- data/imagenet-r/n02102318/misc_27.jpg +- data/imagenet-r/n02701002/cartoon_0.jpg +- data/imagenet-r/n02906734/sketch_4.jpg +- data/imagenet-r/n01855672/sketch_10.jpg +- data/imagenet-r/n02007558/misc_18.jpg +- data/imagenet-r/n02088238/misc_116.jpg +- data/imagenet-r/n07734744/misc_8.jpg +- data/imagenet-r/n02206856/sticker_2.jpg +- data/imagenet-r/n01484850/origami_5.jpg +- data/imagenet-r/n02206856/sticker_16.jpg +- data/imagenet-r/n01843383/art_32.jpg +- data/imagenet-r/n02317335/cartoon_2.jpg +- data/imagenet-r/n02950826/videogame_5.jpg +- data/imagenet-r/n02445715/toy_10.jpg +- data/imagenet-r/n01833805/tattoo_69.jpg +- data/imagenet-r/n02909870/sketch_21.jpg +- data/imagenet-r/n07718472/cartoon_8.jpg +- data/imagenet-r/n07720875/deviantart_10.jpg +- data/imagenet-r/n02109525/sketch_12.jpg +- data/imagenet-r/n01843383/deviantart_35.jpg +- data/imagenet-r/n02110958/painting_2.jpg +- data/imagenet-r/n02909870/graphic_2.jpg +- data/imagenet-r/n02128757/painting_0.jpg +- data/imagenet-r/n02948072/sketch_30.jpg +- data/imagenet-r/n01677366/deviantart_6.jpg +- data/imagenet-r/n02165456/graffiti_7.jpg +- data/imagenet-r/n01882714/cartoon_1.jpg +- data/imagenet-r/n02268443/misc_125.jpg +- data/imagenet-r/n02236044/tattoo_20.jpg +- data/imagenet-r/n07749582/painting_7.jpg +- data/imagenet-r/n07753275/cartoon_2.jpg +- data/imagenet-r/n02113624/misc_6.jpg +- data/imagenet-r/n02951358/painting_4.jpg +- data/imagenet-r/n01910747/tattoo_2.jpg +- data/imagenet-r/n02007558/sticker_0.jpg +- data/imagenet-r/n02325366/misc_52.jpg +- data/imagenet-r/n01770393/tattoo_34.jpg +- data/imagenet-r/n02206856/tattoo_8.jpg +- data/imagenet-r/n01833805/deviantart_7.jpg +- data/imagenet-r/n04086273/art_1.jpg +- data/imagenet-r/n02219486/sculpture_15.jpg +- data/imagenet-r/n09472597/videogame_22.jpg +- data/imagenet-r/n07745940/misc_0.jpg +- data/imagenet-r/n02510455/misc_9.jpg +- data/imagenet-r/n01770393/cartoon_1.jpg +- data/imagenet-r/n09835506/misc_3.jpg +- data/imagenet-r/n02071294/sketch_6.jpg +- data/imagenet-r/n02097298/misc_18.jpg +- data/imagenet-r/n04347754/sketch_23.jpg +- data/imagenet-r/n02906734/graffiti_10.jpg +- data/imagenet-r/n04536866/cartoon_7.jpg +- data/imagenet-r/n01986214/misc_6.jpg +- data/imagenet-r/n03710193/misc_12.jpg +- data/imagenet-r/n04275548/graffiti_3.jpg +- data/imagenet-r/n07753592/misc_2.jpg +- data/imagenet-r/n02110958/tattoo_7.jpg +- data/imagenet-r/n01494475/misc_120.jpg +- data/imagenet-r/n02793495/cartoon_2.jpg +- data/imagenet-r/n02391049/misc_24.jpg +- data/imagenet-r/n03649909/cartoon_4.jpg +- data/imagenet-r/n02109525/misc_8.jpg +- data/imagenet-r/n03424325/sketch_6.jpg +- data/imagenet-r/n02808440/cartoon_24.jpg +- data/imagenet-r/n01847000/toy_11.jpg +- data/imagenet-r/n03630383/sketch_23.jpg +- data/imagenet-r/n02085620/tattoo_19.jpg +- data/imagenet-r/n02108089/sketch_3.jpg +- data/imagenet-r/n04522168/sketch_20.jpg +- data/imagenet-r/n01614925/deviantart_27.jpg +- data/imagenet-r/n02071294/sketch_18.jpg +- data/imagenet-r/n02769748/embroidery_0.jpg +- data/imagenet-r/n02206856/toy_9.jpg +- data/imagenet-r/n01882714/deviantart_32.jpg +- data/imagenet-r/n03424325/sketch_16.jpg +- data/imagenet-r/n03481172/sketch_8.jpg +- data/imagenet-r/n01484850/art_2.jpg +- data/imagenet-r/n01514859/art_8.jpg +- data/imagenet-r/n03498962/misc_2.jpg +- data/imagenet-r/n07873807/videogame_18.jpg +- data/imagenet-r/n02110341/misc_80.jpg +- data/imagenet-r/n02071294/origami_6.jpg +- data/imagenet-r/n07742313/painting_21.jpg +- data/imagenet-r/n01443537/painting_9.jpg +- data/imagenet-r/n02437616/tattoo_0.jpg +- data/imagenet-r/n02510455/misc_0.jpg +- data/imagenet-r/n02398521/graphic_1.jpg +- data/imagenet-r/n02128757/painting_17.jpg +- data/imagenet-r/n02236044/tattoo_9.jpg +- data/imagenet-r/n03272010/sketch_0.jpg +- data/imagenet-r/n04266014/painting_7.jpg +- data/imagenet-r/n02106662/misc_76.jpg +- data/imagenet-r/n04086273/sculpture_1.jpg +- data/imagenet-r/n02843684/cartoon_0.jpg +- data/imagenet-r/n02096585/misc_122.jpg +- data/imagenet-r/n02410509/cartoon_28.jpg +- data/imagenet-r/n03481172/toy_0.jpg +- data/imagenet-r/n02395406/toy_19.jpg +- data/imagenet-r/n01518878/graphic_2.jpg +targets: +- 153 +- 76 +- 184 +- 156 +- 75 +- 53 +- 135 +- 70 +- 156 +- 73 +- 3 +- 159 +- 56 +- 172 +- 61 +- 189 +- 94 +- 21 +- 185 +- 9 +- 28 +- 95 +- 15 +- 149 +- 153 +- 57 +- 186 +- 124 +- 176 +- 73 +- 168 +- 196 +- 199 +- 86 +- 133 +- 10 +- 45 +- 185 +- 132 +- 181 +- 62 +- 102 +- 181 +- 131 +- 110 +- 100 +- 145 +- 24 +- 116 +- 23 +- 175 +- 129 +- 68 +- 108 +- 23 +- 33 +- 72 +- 4 +- 140 +- 38 +- 73 +- 40 +- 126 +- 126 +- 158 +- 92 +- 53 +- 108 +- 101 +- 76 +- 64 +- 162 +- 163 +- 170 +- 26 +- 24 +- 138 +- 170 +- 187 +- 53 +- 50 +- 78 +- 111 +- 89 +- 86 +- 12 +- 186 +- 7 +- 113 +- 64 +- 181 +- 175 +- 91 +- 24 +- 186 +- 63 +- 50 +- 83 +- 26 +- 166 +- 38 +- 125 +- 157 +- 15 +- 147 +- 88 +- 11 +- 191 +- 32 +- 101 +- 67 +- 185 +- 69 +- 101 +- 86 +- 188 +- 160 +- 29 +- 107 +- 74 +- 133 +- 98 +- 32 +- 23 +- 71 +- 58 +- 91 +- 76 +- 41 +- 100 +- 18 +- 53 +- 147 +- 171 +- 113 +- 53 +- 63 +- 181 +- 37 +- 64 +- 156 +- 62 +- 27 +- 33 +- 168 +- 75 +- 115 +- 174 +- 192 +- 105 +- 24 +- 20 +- 157 +- 65 +- 108 +- 158 +- 151 +- 168 +- 25 +- 146 +- 93 +- 113 +- 10 +- 142 +- 113 +- 5 +- 82 +- 73 +- 36 +- 141 +- 55 +- 113 +- 27 +- 79 +- 146 +- 196 +- 181 +- 53 +- 51 +- 73 +- 42 +- 62 +- 179 +- 24 +- 149 +- 168 +- 14 +- 63 +- 78 +- 102 +- 58 +- 148 +- 24 +- 141 +- 72 +- 42 +- 58 +- 186 +- 54 +- 14 +- 192 +- 191 +- 130 +- 175 +- 161 +- 152 +- 48 +- 109 +- 11 +- 31 +- 78 +- 197 +- 57 +- 90 +- 114 +- 38 +- 163 +- 112 +- 134 +- 132 +- 29 +- 170 +- 69 +- 5 +- 65 +- 36 +- 34 +- 25 +- 198 +- 18 +- 154 +- 119 +- 49 +- 102 +- 85 +- 108 +- 48 +- 50 +- 111 +- 132 +- 168 +- 11 +- 77 +- 177 +- 132 +- 94 +- 133 +- 116 +- 28 +- 82 +- 88 +- 49 +- 80 +- 35 +- 104 +- 119 +- 25 +- 81 +- 13 +- 60 +- 90 +- 168 +- 120 +- 161 +- 32 +- 179 +- 187 +- 72 +- 70 +- 63 +- 27 +- 43 +- 8 +- 47 +- 43 +- 158 +- 192 +- 154 +- 97 +- 72 +- 43 +- 11 +- 182 +- 108 +- 102 +- 178 +- 7 +- 144 +- 161 +- 125 +- 75 +- 109 +- 43 +- 110 +- 185 +- 133 +- 69 +- 142 +- 5 +- 80 +- 37 +- 61 +- 87 +- 83 +- 9 +- 6 +- 24 +- 114 +- 138 +- 48 +- 170 +- 37 +- 126 +- 81 +- 83 +- 28 +- 20 +- 10 +- 142 +- 2 +- 183 +- 15 +- 195 +- 96 +- 168 +- 147 +- 37 +- 0 +- 63 +- 98 +- 184 +- 92 +- 51 +- 92 +- 1 +- 86 +- 125 +- 136 +- 2 +- 153 +- 9 +- 182 +- 33 +- 117 +- 64 +- 167 +- 73 +- 61 +- 71 +- 194 +- 184 +- 89 +- 120 +- 1 +- 65 +- 122 +- 160 +- 160 +- 192 +- 139 +- 197 +- 132 +- 0 +- 113 +- 78 +- 33 +- 20 +- 118 +- 158 +- 120 +- 63 +- 110 +- 43 +- 140 +- 102 +- 180 +- 40 +- 125 +- 11 +- 138 +- 3 +- 17 +- 102 +- 14 +- 113 +- 47 +- 57 +- 94 +- 11 +- 189 +- 124 +- 128 +- 172 +- 174 +- 21 +- 129 +- 184 +- 168 +- 96 +- 179 +- 70 +- 48 +- 15 +- 171 +- 185 +- 119 +- 144 +- 18 +- 18 +- 89 +- 82 +- 40 +- 18 +- 142 +- 159 +- 87 +- 36 +- 132 +- 152 +- 56 +- 165 +- 161 +- 195 +- 157 +- 192 +- 27 +- 43 +- 61 +- 153 +- 154 +- 38 +- 35 +- 63 +- 74 +- 183 +- 47 +- 72 +- 152 +- 84 +- 155 +- 125 +- 110 +- 167 +- 100 +- 174 +- 157 +- 192 +- 93 +- 94 +- 67 +- 9 +- 110 +- 94 +- 55 +- 124 +- 198 +- 58 +- 72 +- 79 +- 5 +- 41 +- 139 +- 153 +- 100 +- 44 +- 25 +- 53 +- 20 +- 19 +- 36 +- 125 +- 76 +- 185 +- 148 +- 30 +- 73 +- 90 +- 31 +- 136 +- 198 +- 173 +- 108 +- 166 +- 18 +- 35 +- 121 +- 38 +- 64 +- 192 +- 90 +- 35 +- 70 +- 129 +- 0 +- 94 +- 187 +- 35 +- 129 +- 64 +- 72 +- 65 +- 30 +- 25 +- 96 +- 4 +- 86 +- 6 +- 61 +- 168 +- 59 +- 82 +- 15 +- 148 +- 96 +- 158 +- 145 +- 72 +- 118 +- 115 +- 156 +- 32 +- 35 +- 182 +- 132 +- 0 +- 97 +- 169 +- 116 +- 20 +- 36 +- 72 +- 73 +- 14 +- 152 +- 81 +- 53 +- 64 +- 174 +- 174 +- 171 +- 14 +- 71 +- 168 +- 124 +- 91 +- 72 +- 54 +- 175 +- 160 +- 41 +- 14 +- 1 +- 84 +- 20 +- 22 +- 114 +- 72 +- 185 +- 94 +- 36 +- 182 +- 144 +- 198 +- 58 +- 147 +- 38 +- 29 +- 153 +- 41 +- 159 +- 21 +- 90 +- 32 +- 21 +- 62 +- 128 +- 190 +- 119 +- 173 +- 49 +- 129 +- 44 +- 184 +- 120 +- 72 +- 28 +- 102 +- 79 +- 21 +- 22 +- 77 +- 76 +- 137 +- 46 +- 117 +- 33 +- 31 +- 125 +- 21 +- 153 +- 159 +- 20 +- 157 +- 150 +- 9 +- 109 +- 13 +- 26 +- 171 +- 177 +- 164 +- 101 +- 192 +- 170 +- 140 +- 39 +- 123 +- 167 +- 107 +- 106 +- 59 +- 180 +- 41 +- 132 +- 37 +- 41 +- 174 +- 38 +- 182 +- 168 +- 158 +- 158 +- 92 +- 171 +- 64 +- 99 +- 185 +- 47 +- 173 +- 149 +- 61 +- 86 +- 72 +- 142 +- 86 +- 72 +- 113 +- 170 +- 65 +- 109 +- 58 +- 72 +- 102 +- 90 +- 160 +- 73 +- 96 +- 64 +- 61 +- 159 +- 194 +- 29 +- 134 +- 121 +- 14 +- 44 +- 34 +- 90 +- 1 +- 157 +- 94 +- 0 +- 168 +- 49 +- 157 +- 125 +- 9 +- 198 +- 82 +- 46 +- 90 +- 78 +- 196 +- 132 +- 172 +- 138 +- 81 +- 76 +- 38 +- 156 +- 50 +- 11 +- 143 +- 14 +- 42 +- 142 +- 67 +- 70 +- 13 +- 24 +- 31 +- 3 +- 116 +- 20 +- 0 +- 32 +- 197 +- 158 +- 5 +- 157 +- 170 +- 110 +- 32 +- 103 +- 72 +- 163 +- 183 +- 129 +- 69 +- 168 +- 79 +- 140 +- 157 +- 114 +- 116 +- 130 +- 116 +- 112 +- 112 +- 96 +- 11 +- 25 +- 37 +- 94 +- 67 +- 25 +- 151 +- 114 +- 105 +- 42 +- 59 +- 38 +- 132 +- 145 +- 168 +- 3 +- 64 +- 58 +- 141 +- 106 +- 182 +- 134 +- 124 +- 73 +- 103 +- 140 +- 68 +- 198 +- 132 +- 52 +- 179 +- 30 +- 70 +- 27 +- 49 +- 189 +- 76 +- 22 +- 93 +- 94 +- 28 +- 14 +- 50 +- 50 +- 104 +- 37 +- 74 +- 174 +- 14 +- 172 +- 65 +- 163 +- 109 +- 163 +- 20 +- 140 +- 97 +- 170 +- 144 +- 76 +- 110 +- 134 +- 47 +- 20 +- 153 +- 35 +- 175 +- 57 +- 186 +- 137 +- 37 +- 133 +- 167 +- 58 +- 150 +- 180 +- 112 +- 37 +- 86 +- 65 +- 159 +- 48 +- 22 +- 122 +- 181 +- 19 +- 61 +- 20 +- 129 +- 86 +- 27 +- 179 +- 33 +- 26 +- 14 +- 189 +- 151 +- 32 +- 177 +- 101 +- 98 +- 82 +- 20 +- 158 +- 169 +- 12 +- 24 +- 151 +- 57 +- 111 +- 152 +- 19 +- 53 +- 100 +- 172 +- 185 +- 37 +- 40 +- 135 +- 196 +- 138 +- 140 +- 41 +- 167 +- 72 +- 67 +- 71 +- 171 +- 80 +- 26 +- 26 +- 152 +- 141 +- 75 +- 59 +- 35 +- 187 +- 140 +- 20 +- 37 +- 69 +- 164 +- 164 +- 128 +- 123 +- 113 +- 21 +- 189 +- 103 +- 48 +- 73 +- 151 +- 28 +- 98 +- 186 +- 53 +- 73 +- 95 +- 179 +- 77 +- 70 +- 98 +- 164 +- 16 +- 185 +- 177 +- 133 +- 91 +- 44 +- 92 +- 32 +- 79 +- 162 +- 142 +- 173 +- 102 +- 168 +- 90 +- 20 +- 47 +- 133 +- 86 +- 166 +- 100 +- 160 +- 140 +- 0 +- 38 +- 77 +- 122 +- 66 +- 140 +- 66 +- 185 +- 169 +- 132 +- 199 +- 167 +- 72 +- 10 +- 78 +- 99 +- 29 +- 75 +- 65 +- 171 +- 57 +- 117 +- 30 +- 117 +- 99 +- 133 +- 168 +- 12 +- 111 +- 179 +- 18 +- 99 +- 102 +- 5 +- 10 +- 42 +- 73 +- 194 +- 171 +- 32 +- 185 +- 29 +- 164 +- 21 +- 125 +- 138 +- 113 +- 83 +- 58 +- 108 +- 76 +- 11 +- 49 +- 153 +- 111 +- 151 +- 73 +- 102 +- 182 +- 102 +- 35 +- 148 +- 94 +- 69 +- 165 +- 28 +- 185 +- 96 +- 198 +- 36 +- 21 +- 48 +- 15 +- 92 +- 195 +- 46 +- 75 +- 175 +- 5 +- 160 +- 171 +- 173 +- 121 +- 100 +- 150 +- 156 +- 158 +- 115 +- 94 +- 111 +- 178 +- 114 +- 74 +- 113 +- 170 +- 178 +- 102 +- 6 +- 5 +- 196 +- 61 +- 20 +- 115 +- 90 +- 4 +- 8 +- 163 +- 87 +- 162 +- 139 +- 182 +- 59 +- 91 +- 44 +- 106 +- 109 +- 137 +- 105 +- 4 +- 166 +- 129 +- 79 +- 62 +- 153 +- 55 +- 196 +- 68 +- 171 +- 55 +- 27 +- 98 +- 102 +- 91 +- 154 +- 113 +- 69 +- 91 +- 137 +- 110 +- 57 +- 84 +- 38 +- 54 +- 35 +- 188 +- 39 +- 159 +- 65 +- 0 +- 119 +- 35 +- 149 +- 14 +- 171 +- 48 +- 159 +- 171 +- 153 +- 157 +- 94 +- 81 +- 92 +- 198 +- 35 +- 35 +- 82 +- 160 +- 90 +- 103 +- 159 +- 131 +- 40 +- 142 +- 186 +- 127 +- 177 +- 82 +- 133 +- 153 +- 159 +- 134 +- 156 +- 145 +- 153 +- 50 +- 101 +- 40 +- 77 +- 90 +- 3 +- 26 +- 77 +- 73 +- 72 +- 132 +- 125 +- 95 +- 140 +- 114 +- 96 +- 41 +- 167 +- 113 +- 136 +- 7 +- 43 +- 114 +- 122 +- 51 +- 86 +- 174 +- 72 +- 35 +- 129 +- 6 +- 0 +- 57 +- 10 +- 144 +- 148 +- 62 +- 87 +- 17 +- 125 +- 129 +- 118 +- 43 +- 168 +- 37 +- 26 +- 133 +- 111 +- 78 +- 56 +- 38 +- 184 +- 139 +- 50 +- 181 +- 144 +- 0 +- 90 +- 138 +- 72 +- 19 +- 153 +- 173 +- 158 +- 11 +- 57 +- 35 +- 59 +- 113 +- 91 +- 160 +- 7 +- 180 +- 51 +- 72 +- 134 +- 165 +- 75 +- 115 +- 82 +- 60 +- 23 +- 171 +- 170 +- 198 +- 148 +- 171 +- 132 +- 26 +- 134 +- 175 +- 69 +- 55 +- 133 +- 32 +- 103 +- 106 +- 21 +- 133 +- 43 +- 70 +- 159 +- 74 +- 139 +- 173 +- 9 +- 31 +- 57 +- 60 +- 28 +- 142 +- 101 +- 157 +- 102 +- 26 +- 40 +- 31 +- 138 +- 46 +- 148 +- 145 +- 158 +- 57 +- 32 +- 0 +- 0 +- 3 +- 79 +- 106 +- 75 +- 61 +- 157 +- 77 +- 87 +- 128 +- 34 +- 198 +- 148 +- 118 +- 53 +- 66 +- 82 +- 114 +- 119 +- 175 +- 116 +- 175 +- 112 +- 78 +- 79 +- 175 +- 21 +- 54 +- 115 +- 156 +- 8 +- 107 +- 133 +- 184 +- 29 +- 108 +- 91 +- 155 +- 78 +- 31 +- 23 +- 113 +- 36 +- 154 +- 105 +- 171 +- 153 +- 165 +- 26 +- 19 +- 93 +- 102 +- 22 +- 44 +- 26 +- 140 +- 194 +- 14 +- 196 +- 18 +- 22 +- 30 +- 167 +- 158 +- 193 +- 199 +- 184 +- 19 +- 138 +- 99 +- 181 +- 125 +- 35 +- 185 +- 132 +- 7 +- 0 +- 14 +- 66 +- 63 +- 197 +- 78 +- 20 +- 10 +- 178 +- 91 +- 15 +- 79 +- 44 +- 114 +- 67 +- 133 +- 96 +- 48 +- 63 +- 152 +- 197 +- 163 +- 185 +- 15 +- 98 +- 161 +- 72 +- 58 +- 122 +- 7 +- 82 +- 65 +- 181 +- 156 +- 61 +- 156 +- 100 +- 26 +- 140 +- 24 +- 35 +- 100 +- 35 +- 9 +- 186 +- 179 +- 94 +- 84 +- 63 +- 38 +- 174 +- 143 +- 93 +- 145 +- 110 +- 139 +- 1 +- 38 +- 175 +- 50 +- 7 +- 177 +- 38 +- 22 +- 15 +- 103 +- 39 +- 35 +- 73 +- 132 +- 4 +- 79 +- 50 +- 72 +- 50 +- 145 +- 14 +- 67 +- 166 +- 94 +- 91 +- 9 +- 193 +- 37 +- 164 +- 137 +- 122 +- 182 +- 65 +- 78 +- 114 +- 99 +- 65 +- 127 +- 153 +- 175 +- 163 +- 152 +- 83 +- 182 +- 173 +- 85 +- 181 +- 101 +- 143 +- 63 +- 134 +- 93 +- 133 +- 0 +- 115 +- 86 +- 101 +- 61 +- 51 +- 178 +- 190 +- 162 +- 149 +- 137 +- 81 +- 89 +- 136 +- 178 +- 73 +- 20 +- 9 +- 14 +- 61 +- 196 +- 109 +- 150 +- 95 +- 90 +- 164 +- 163 +- 64 +- 132 +- 43 +- 0 +- 158 +- 73 +- 158 +- 153 +- 100 +- 113 +- 4 +- 91 +- 18 +- 45 +- 61 +- 175 +- 86 +- 115 +- 142 +- 148 +- 192 +- 153 +- 20 +- 140 +- 30 +- 196 +- 15 +- 44 +- 118 +- 43 +- 1 +- 78 +- 169 +- 99 +- 90 +- 102 +- 177 +- 30 +- 114 +- 72 +- 128 +- 171 +- 82 +- 43 +- 38 +- 168 +- 155 +- 97 +- 23 +- 3 +- 53 +- 144 +- 62 +- 150 +- 132 +- 100 +- 78 +- 4 +- 136 +- 70 +- 98 +- 49 +- 40 +- 193 +- 165 +- 60 +- 186 +- 56 +- 153 +- 158 +- 99 +- 157 +- 162 +- 133 +- 100 +- 68 +- 108 +- 73 +- 61 +- 178 +- 128 +- 90 +- 124 +- 1 +- 135 +- 91 +- 40 +- 78 +- 116 +- 199 +- 197 +- 137 +- 98 +- 50 +- 81 +- 153 +- 194 +- 187 +- 190 +- 164 +- 133 +- 20 +- 67 +- 22 +- 175 +- 3 +- 79 +- 116 +- 186 +- 119 +- 151 +- 94 +- 174 +- 148 +- 57 +- 98 +- 36 +- 36 +- 192 +- 36 +- 145 +- 25 +- 53 +- 14 +- 158 +- 63 +- 132 +- 113 +- 23 +- 20 +- 65 +- 171 +- 105 +- 171 +- 113 +- 67 +- 45 +- 153 +- 72 +- 24 +- 0 +- 178 +- 3 +- 85 +- 95 +- 37 +- 113 +- 57 +- 98 +- 119 +- 142 +- 79 +- 53 +- 43 +- 96 +- 171 +- 159 +- 73 +- 20 +- 197 +- 32 +- 0 +- 72 +- 177 +- 176 +- 115 +- 198 +- 190 +- 61 +- 65 +- 37 +- 127 +- 192 +- 143 +- 14 +- 91 +- 21 +- 153 +- 134 +- 83 +- 53 +- 101 +- 139 +- 82 +- 149 +- 111 +- 168 +- 21 +- 29 +- 96 +- 115 +- 20 +- 24 +- 122 +- 77 +- 88 +- 93 +- 91 +- 190 +- 147 +- 37 +- 94 +- 99 +- 153 +- 162 +- 76 +- 54 +- 28 +- 193 +- 28 +- 167 +- 177 +- 72 +- 41 +- 153 +- 192 +- 70 +- 199 +- 198 +- 7 +- 140 +- 24 +- 182 +- 151 +- 57 +- 73 +- 45 +- 3 +- 148 +- 37 +- 58 +- 103 +- 129 +- 193 +- 86 +- 179 +- 58 +- 99 +- 101 +- 171 +- 57 +- 151 +- 198 +- 24 +- 58 +- 0 +- 35 +- 42 +- 109 +- 158 +- 119 +- 130 +- 99 +- 186 +- 164 +- 132 +- 108 +- 62 +- 164 +- 166 +- 133 +- 13 +- 95 +- 136 +- 82 +- 5 +- 95 +- 32 +- 78 +- 189 +- 66 +- 165 +- 57 +- 137 +- 52 +- 58 +- 134 +- 138 +- 94 +- 21 +- 64 +- 43 +- 180 +- 113 +- 139 +- 119 +- 153 +- 72 +- 152 +- 29 +- 114 +- 110 +- 121 +- 90 +- 54 +- 163 +- 1 +- 69 +- 196 +- 47 +- 110 +- 54 +- 32 +- 153 +- 125 +- 20 +- 166 +- 47 +- 53 +- 138 +- 64 +- 4 +- 82 +- 87 +- 134 +- 56 +- 72 +- 73 +- 14 +- 96 +- 32 +- 17 +- 151 +- 10 +- 90 +- 121 +- 57 +- 167 +- 121 +- 99 +- 132 +- 58 +- 171 +- 61 +- 24 +- 15 +- 38 +- 132 +- 125 +- 162 +- 35 +- 134 +- 32 +- 163 +- 143 +- 127 +- 151 +- 32 +- 50 +- 2 +- 53 +- 133 +- 138 +- 103 +- 35 +- 109 +- 167 +- 154 +- 122 +- 144 +- 27 +- 132 +- 53 +- 35 +- 79 +- 116 +- 186 +- 57 +- 122 +- 157 +- 198 +- 99 +- 20 +- 124 +- 145 +- 152 +- 6 +- 10 +- 110 +- 182 +- 103 +- 22 +- 21 +- 137 +- 78 +- 145 +- 20 +- 120 +- 99 +- 185 +- 64 +- 186 +- 38 +- 91 +- 113 +- 94 +- 31 +- 35 +- 26 +- 47 +- 178 +- 58 +- 92 +- 120 +- 33 +- 122 +- 35 +- 74 +- 198 +- 128 +- 40 +- 173 +- 35 +- 175 +- 133 +- 171 +- 18 +- 94 +- 32 +- 194 +- 83 +- 80 +- 157 +- 154 +- 138 +- 91 +- 184 +- 110 +- 64 +- 43 +- 41 +- 76 +- 18 +- 153 +- 198 +- 69 +- 70 +- 107 +- 195 +- 32 +- 178 +- 158 +- 78 +- 133 +- 109 +- 32 +- 179 +- 101 +- 3 +- 182 +- 88 +- 30 +- 50 +- 20 +- 139 +- 132 +- 130 +- 78 +- 186 +- 28 +- 131 +- 20 +- 142 +- 64 +- 152 +- 141 +- 153 +- 186 +- 71 +- 82 +- 63 +- 138 +- 60 +- 128 +- 20 +- 99 +- 96 +- 52 +- 32 +- 0 +- 47 +- 145 +- 109 +- 48 +- 94 +- 43 +- 175 +- 137 +- 150 +- 44 +- 168 +- 164 +- 73 +- 183 +- 6 +- 168 +- 128 +- 133 +- 135 +- 99 +- 188 +- 58 +- 135 +- 83 +- 127 +- 92 +- 132 +- 135 +- 110 +- 121 +- 114 +- 42 +- 128 +- 198 +- 108 +- 22 +- 41 +- 20 +- 102 +- 48 +- 43 +- 111 +- 47 +- 171 +- 15 +- 87 +- 79 +- 126 +- 21 +- 53 +- 51 +- 44 +- 7 +- 36 +- 139 +- 159 +- 99 +- 143 +- 107 +- 27 +- 171 +- 113 +- 21 +- 20 +- 171 +- 44 +- 99 +- 46 +- 90 +- 120 +- 173 +- 186 +- 94 +- 132 +- 65 +- 8 +- 139 +- 34 +- 119 +- 113 +- 152 +- 152 +- 164 +- 28 +- 114 +- 173 +- 174 +- 188 +- 82 +- 73 +- 186 +- 108 +- 79 +- 71 +- 185 +- 58 +- 15 +- 158 +- 38 +- 169 +- 162 +- 42 +- 113 +- 156 +- 57 +- 91 +- 32 +- 98 +- 153 +- 31 +- 109 +- 21 +- 138 +- 124 +- 26 +- 194 +- 37 +- 14 +- 82 +- 114 +- 62 +- 48 +- 61 +- 124 +- 113 +- 74 +- 59 +- 102 +- 189 +- 22 +- 41 +- 151 +- 143 +- 60 +- 156 +- 134 +- 138 +- 51 +- 94 +- 141 +- 69 +- 97 +- 37 +- 142 +- 48 +- 69 +- 106 +- 10 +- 113 +- 101 +- 179 +- 28 +- 90 +- 0 +- 143 +- 121 +- 171 +- 45 +- 32 +- 0 +- 48 +- 157 +- 127 +- 169 +- 61 +- 148 +- 132 +- 149 +- 153 +- 178 +- 59 +- 158 +- 160 +- 28 +- 144 +- 101 +- 177 +- 113 +- 74 +- 3 +- 124 +- 43 +- 38 +- 87 +- 141 +- 30 +- 18 +- 44 +- 59 +- 132 +- 189 +- 32 +- 65 +- 168 +- 183 +- 57 +- 175 +- 29 +- 31 +- 182 +- 125 +- 39 +- 35 +- 64 +- 61 +- 43 +- 112 +- 129 +- 120 +- 177 +- 28 +- 152 +- 82 +- 124 +- 20 +- 176 +- 155 +- 21 +- 168 +- 10 +- 3 +- 51 +- 117 +- 21 +- 125 +- 156 +- 72 +- 108 +- 122 +- 140 +- 3 +- 107 +- 20 +- 133 +- 169 +- 19 +- 174 +- 20 +- 144 +- 48 +- 79 +- 101 +- 90 +- 114 +- 66 +- 94 +- 116 +- 153 +- 131 +- 58 +- 162 +- 35 +- 72 +- 14 +- 26 +- 13 +- 82 +- 149 +- 149 +- 158 +- 143 +- 68 +- 192 +- 198 +- 147 +- 63 +- 105 +- 55 +- 19 +- 97 +- 115 +- 191 +- 128 +- 43 +- 41 +- 10 +- 3 +- 156 +- 68 +- 87 +- 75 +- 44 +- 108 +- 60 +- 82 +- 63 +- 190 +- 103 +- 113 +- 20 +- 152 +- 54 +- 128 +- 76 +- 127 +- 38 +- 148 +- 44 +- 101 +- 95 +- 26 +- 125 +- 152 +- 151 +- 113 +- 37 +- 114 +- 57 +- 161 +- 32 +- 53 +- 70 +- 33 +- 133 +- 132 +- 72 +- 127 +- 182 +- 180 +- 199 +- 123 +- 113 +- 53 +- 56 +- 47 +- 53 +- 64 +- 81 +- 78 +- 53 +- 82 +- 92 +- 171 +- 32 +- 133 +- 164 +- 118 +- 92 +- 185 +- 121 +- 68 +- 94 +- 130 +- 37 +- 185 +- 127 +- 132 +- 96 +- 151 +- 5 +- 47 +- 101 +- 122 +- 146 +- 171 +- 149 +- 82 +- 36 +- 140 +- 111 +- 101 +- 158 +- 162 +- 178 +- 35 +- 154 +- 168 +- 181 +- 73 +- 154 +- 158 +- 100 +- 139 +- 139 +- 186 +- 164 +- 137 +- 0 +- 90 +- 160 +- 101 +- 172 +- 58 +- 73 +- 38 +- 77 +- 9 +- 76 +- 119 +- 9 +- 25 +- 107 +- 110 +- 175 +- 113 +- 53 +- 132 +- 163 +- 93 +- 78 +- 25 +- 100 +- 18 +- 120 +- 54 +- 0 +- 108 +- 170 +- 194 +- 77 +- 168 +- 81 +- 154 +- 9 +- 106 +- 166 +- 51 +- 73 +- 184 +- 99 +- 132 +- 142 +- 158 +- 69 +- 125 +- 86 +- 100 +- 154 +- 197 +- 197 +- 65 +- 117 +- 58 +- 111 +- 191 +- 141 +- 26 +- 117 +- 137 +- 175 +- 7 +- 194 +- 32 +- 16 +- 186 +- 68 +- 108 +- 85 +- 137 +- 32 +- 48 +- 17 +- 110 +- 91 +- 114 +- 101 +- 113 +- 86 +- 166 +- 193 +- 94 +- 175 +- 19 +- 20 +- 187 +- 113 +- 99 +- 101 +- 145 +- 181 +- 96 +- 56 +- 186 +- 78 +- 20 +- 14 +- 159 +- 121 +- 72 +- 32 +- 182 +- 158 +- 190 +- 72 +- 26 +- 30 +- 107 +- 162 +- 32 +- 164 +- 35 +- 62 +- 135 +- 1 +- 16 +- 167 +- 165 +- 111 +- 13 +- 134 +- 1 +- 145 +- 86 +- 47 +- 185 +- 58 +- 63 +- 99 +- 120 +- 20 +- 36 +- 124 +- 188 +- 137 +- 192 +- 116 +- 32 +- 113 +- 94 +- 158 +- 13 +- 114 +- 186 +- 87 +- 64 +- 150 +- 156 +- 116 +- 30 +- 85 +- 175 +- 127 +- 11 +- 5 +- 89 +- 46 +- 182 +- 49 +- 159 +- 122 +- 137 +- 82 +- 150 +- 20 +- 32 +- 133 +- 68 +- 5 +- 193 +- 168 +- 82 +- 87 +- 174 +- 31 +- 166 +- 2 +- 129 +- 10 +- 0 +- 17 +- 171 +- 113 +- 107 +- 75 +- 134 +- 25 +- 168 +- 60 +- 58 +- 91 +- 163 +- 145 +- 22 +- 155 +- 146 +- 63 +- 179 +- 159 +- 40 +- 25 +- 165 +- 122 +- 26 +- 168 +- 165 +- 140 +- 146 +- 28 +- 179 +- 90 +- 183 +- 180 +- 142 +- 91 +- 95 +- 129 +- 86 +- 178 +- 116 +- 57 +- 108 +- 24 +- 35 +- 160 +- 171 +- 184 +- 18 +- 137 +- 58 +- 194 +- 129 +- 101 +- 102 +- 60 +- 194 +- 140 +- 69 +- 31 +- 73 +- 14 +- 152 +- 41 +- 132 +- 133 +- 133 +- 72 +- 67 +- 90 +- 20 +- 106 +- 181 +- 138 +- 137 +- 137 +- 175 +- 128 +- 93 +- 13 +- 0 +- 189 +- 133 +- 123 +- 87 +- 106 +- 125 +- 130 +- 174 +- 140 +- 103 +- 38 +- 170 +- 39 +- 69 +- 43 +- 81 +- 45 +- 158 +- 75 +- 192 +- 112 +- 125 +- 2 +- 37 +- 163 +- 5 +- 149 +- 198 +- 168 +- 179 +- 122 +- 20 +- 75 +- 77 +- 158 +- 104 +- 83 +- 52 +- 67 +- 36 +- 129 +- 3 +- 3 +- 198 +- 143 +- 1 +- 58 +- 173 +- 129 +- 76 +- 140 +- 37 +- 132 +- 39 +- 48 +- 0 +- 170 +- 57 +- 23 +- 125 +- 44 +- 3 +- 15 +- 148 +- 97 +- 57 +- 42 +- 155 +- 169 +- 13 +- 112 +- 138 +- 97 +- 65 +- 93 +- 57 +- 73 +- 100 +- 137 +- 107 +- 166 +- 112 +- 160 +- 109 +- 126 +- 171 +- 32 +- 107 +- 36 +- 109 +- 58 +- 48 +- 92 +- 41 +- 52 +- 117 +- 160 +- 143 +- 64 +- 105 +- 149 +- 86 +- 121 +- 174 +- 80 +- 128 +- 134 +- 74 +- 72 +- 149 +- 172 +- 64 +- 100 +- 31 +- 94 +- 65 +- 100 +- 73 +- 84 +- 129 +- 43 +- 156 +- 171 +- 175 +- 4 +- 30 +- 56 +- 147 +- 136 +- 106 +- 64 +- 78 +- 76 +- 142 +- 74 +- 33 +- 126 +- 2 +- 63 +- 107 +- 133 +- 127 +- 30 +- 140 +- 162 +- 167 +- 152 +- 96 +- 54 +- 95 +- 178 +- 15 +- 172 +- 199 +- 180 +- 162 +- 11 +- 46 +- 158 +- 186 +- 122 +- 35 +- 162 +- 18 +- 154 +- 57 +- 84 +- 140 +- 73 +- 89 +- 60 +- 143 +- 95 +- 84 +- 158 +- 198 +- 159 +- 1 +- 19 +- 1 +- 112 +- 20 +- 28 +- 23 +- 102 +- 112 +- 192 +- 194 +- 47 +- 82 +- 106 +- 81 +- 36 +- 89 +- 14 +- 43 +- 169 +- 189 +- 153 +- 3 +- 158 +- 151 +- 170 +- 171 +- 192 +- 165 +- 111 +- 54 +- 158 +- 180 +- 145 +- 122 +- 28 +- 116 +- 160 +- 53 +- 35 +- 151 +- 90 +- 153 +- 51 +- 38 +- 5 +- 113 +- 54 +- 114 +- 40 +- 32 +- 168 +- 65 +- 171 +- 49 +- 33 +- 54 +- 44 +- 76 +- 111 +- 151 +- 36 +- 14 +- 149 +- 99 +- 92 +- 86 +- 58 +- 61 +- 104 +- 53 +- 175 +- 178 +- 90 +- 111 +- 180 +- 160 +- 3 +- 94 +- 28 +- 38 +- 21 +- 66 +- 19 +- 53 +- 6 +- 81 +- 100 +- 171 +- 151 +- 50 +- 13 +- 175 +- 36 +- 79 +- 91 +- 28 +- 151 +- 95 +- 102 +- 186 +- 172 +- 67 +- 56 +- 49 +- 122 +- 197 +- 90 +- 82 +- 168 +- 14 +- 125 +- 57 +- 32 +- 109 +- 148 +- 54 +- 151 +- 168 +- 11 +- 63 +- 139 +- 114 +- 69 +- 68 +- 140 +- 18 +- 58 +- 135 +- 0 +- 4 +- 7 +- 62 +- 149 +- 143 +- 93 +- 133 +- 53 +- 64 +- 37 +- 70 +- 98 +- 125 +- 19 +- 27 +- 88 +- 112 +- 106 +- 90 +- 20 +- 192 +- 73 +- 115 +- 108 +- 175 +- 60 +- 152 +- 36 +- 26 +- 198 +- 63 +- 2 +- 130 +- 20 +- 8 +- 70 +- 168 +- 194 +- 66 +- 71 +- 174 +- 140 +- 20 +- 0 +- 164 +- 166 +- 141 +- 116 +- 60 +- 28 +- 68 +- 175 +- 48 +- 43 +- 114 +- 74 +- 153 +- 58 +- 35 +- 74 +- 94 +- 158 +- 149 +- 129 +- 44 +- 85 +- 50 +- 141 +- 148 +- 38 +- 48 +- 151 +- 115 +- 21 +- 73 +- 49 +- 168 +- 178 +- 8 +- 101 +- 28 +- 123 +- 18 +- 110 +- 24 +- 186 +- 55 +- 15 +- 160 +- 169 +- 90 +- 116 +- 131 +- 21 +- 73 +- 31 +- 72 +- 57 +- 175 +- 4 +- 174 +- 103 +- 35 +- 2 +- 114 +- 109 +- 72 +- 14 +- 113 +- 113 +- 158 +- 41 +- 134 +- 171 +- 132 +- 79 +- 63 +- 73 +- 26 +- 82 +- 58 +- 59 +- 133 +- 7 +- 54 +- 92 +- 151 +- 194 +- 7 +- 32 +- 162 +- 30 +- 141 +- 129 +- 93 +- 26 +- 4 +- 155 +- 82 +- 69 +- 93 +- 101 +- 112 +- 14 +- 101 +- 117 +- 122 +- 133 +- 68 +- 35 +- 10 +- 20 +- 58 +- 124 +- 175 +- 185 +- 73 +- 107 +- 159 +- 81 +- 81 +- 48 +- 61 +- 95 +- 125 +- 25 +- 57 +- 99 +- 34 +- 179 +- 108 +- 124 +- 5 +- 131 +- 53 +- 172 +- 197 +- 4 +- 158 +- 20 +- 67 +- 76 +- 160 +- 132 +- 90 +- 44 +- 3 +- 159 +- 102 +- 156 +- 192 +- 18 +- 14 +- 113 +- 113 +- 80 +- 66 +- 102 +- 136 +- 112 +- 30 +- 142 +- 0 +- 133 +- 46 +- 113 +- 89 +- 183 +- 119 +- 122 +- 89 +- 177 +- 45 +- 87 +- 3 +- 11 +- 150 +- 78 +- 46 +- 198 +- 151 +- 98 +- 83 +- 35 +- 159 +- 26 +- 160 +- 48 +- 33 +- 15 +- 99 +- 69 +- 141 +- 94 +- 82 +- 94 +- 153 +- 75 +- 115 +- 78 +- 35 +- 41 +- 146 +- 102 +- 72 +- 145 +- 62 +- 133 +- 137 +- 91 +- 109 +- 160 +- 198 +- 145 +- 187 +- 177 +- 129 +- 143 +- 94 +- 192 +- 182 +- 193 +- 10 +- 0 +- 43 +- 156 +- 115 +- 69 +- 128 +- 102 +- 53 +- 7 +- 94 +- 126 +- 47 +- 119 +- 192 +- 102 +- 132 +- 147 +- 133 +- 34 +- 93 +- 194 +- 125 +- 152 +- 113 +- 110 +- 39 +- 71 +- 153 +- 177 +- 110 +- 145 +- 161 +- 73 +- 196 +- 171 +- 168 +- 11 +- 82 +- 36 +- 41 +- 103 +- 89 +- 40 +- 144 +- 186 +- 99 +- 163 +- 35 +- 171 +- 132 +- 72 +- 8 +- 73 +- 35 +- 14 +- 27 +- 143 +- 185 +- 109 +- 64 +- 40 +- 20 +- 145 +- 110 +- 194 +- 127 +- 102 +- 138 +- 76 +- 61 +- 94 +- 181 +- 32 +- 100 +- 100 +- 56 +- 53 +- 92 +- 49 +- 95 +- 165 +- 163 +- 86 +- 114 +- 0 +- 153 +- 95 +- 4 +- 88 +- 165 +- 101 +- 74 +- 54 +- 96 +- 193 +- 194 +- 186 +- 72 +- 106 +- 117 +- 192 +- 79 +- 56 +- 90 +- 28 +- 73 +- 114 +- 96 +- 38 +- 99 +- 95 +- 179 +- 28 +- 100 +- 148 +- 24 +- 116 +- 27 +- 105 +- 107 +- 91 +- 44 +- 69 +- 179 +- 120 +- 45 +- 80 +- 30 +- 186 +- 164 +- 132 +- 192 +- 148 +- 4 +- 60 +- 23 +- 152 +- 23 +- 55 +- 20 +- 109 +- 125 +- 30 +- 135 +- 96 +- 144 +- 72 +- 176 +- 78 +- 150 +- 195 +- 122 +- 5 +- 58 +- 131 +- 190 +- 163 +- 81 +- 46 +- 93 +- 0 +- 171 +- 100 +- 81 +- 90 +- 50 +- 51 +- 38 +- 113 +- 15 +- 90 +- 132 +- 110 +- 0 +- 43 +- 99 +- 158 +- 19 +- 198 +- 128 +- 188 +- 175 +- 26 +- 195 +- 185 +- 113 +- 186 +- 0 +- 10 +- 51 +- 5 +- 77 +- 149 +- 171 +- 38 +- 26 +- 38 +- 71 +- 154 +- 43 +- 58 +- 192 +- 87 +- 9 +- 164 +- 120 +- 11 +- 92 +- 175 +- 50 +- 83 +- 69 +- 99 +- 20 +- 0 +- 145 +- 109 +- 185 +- 51 +- 102 +- 67 +- 106 +- 85 +- 144 +- 48 +- 132 +- 177 +- 118 +- 98 +- 108 +- 98 +- 82 +- 81 +- 145 +- 25 +- 50 +- 104 +- 72 +- 40 +- 158 +- 53 +- 73 +- 35 +- 95 +- 27 +- 63 +- 101 +- 190 +- 61 +- 152 +- 163 +- 163 +- 86 +- 197 +- 61 +- 92 +- 76 +- 133 +- 79 +- 151 +- 139 +- 50 +- 99 +- 105 +- 75 +- 86 +- 27 +- 190 +- 177 +- 29 +- 130 +- 82 +- 61 +- 76 +- 168 +- 140 +- 101 +- 166 +- 158 +- 43 +- 197 +- 51 +- 32 +- 160 +- 81 +- 78 +- 158 +- 50 +- 91 +- 120 +- 65 +- 18 +- 20 +- 73 +- 107 +- 75 +- 103 +- 1 +- 49 +- 185 +- 67 +- 194 +- 50 +- 53 +- 0 +- 146 +- 21 +- 73 +- 167 +- 73 +- 116 +- 100 +- 24 +- 148 +- 152 +- 102 +- 128 +- 160 +- 149 +- 115 +- 86 +- 182 +- 0 +- 196 +- 116 +- 123 +- 31 +- 141 +- 175 +- 14 +- 140 +- 31 +- 20 +- 173 +- 76 +- 32 +- 64 +- 25 +- 198 +- 192 +- 101 +- 58 +- 20 +- 115 +- 88 +- 182 +- 83 +- 100 +- 15 +- 15 +- 97 +- 32 +- 178 +- 129 +- 193 +- 35 +- 77 +- 113 +- 50 +- 38 +- 58 +- 182 +- 83 +- 137 +- 114 +- 102 +- 107 +- 178 +- 58 +- 23 +- 132 +- 101 +- 9 +- 96 +- 107 +- 51 +- 72 +- 87 +- 124 +- 137 +- 20 +- 171 +- 79 +- 13 +- 117 +- 94 +- 37 +- 82 +- 30 +- 123 +- 3 +- 58 +- 87 +- 186 +- 151 +- 188 +- 45 +- 140 +- 129 +- 87 +- 109 +- 36 +- 136 +- 177 +- 5 +- 36 +- 107 +- 167 +- 185 +- 176 +- 114 +- 116 +- 35 +- 50 +- 166 +- 173 +- 102 +- 142 +- 184 +- 149 +- 122 +- 78 +- 96 +- 144 +- 24 +- 69 +- 101 +- 153 +- 174 +- 77 +- 26 +- 1 +- 8 +- 170 +- 20 +- 79 +- 36 +- 131 +- 156 +- 196 +- 58 +- 25 +- 108 +- 128 +- 137 +- 125 +- 44 +- 149 +- 137 +- 167 +- 149 +- 24 +- 109 +- 150 +- 133 +- 125 +- 122 +- 0 +- 33 +- 35 +- 145 +- 21 +- 173 +- 87 +- 88 +- 66 +- 108 +- 99 +- 82 +- 73 +- 79 +- 51 +- 65 +- 115 +- 158 +- 158 +- 79 +- 32 +- 149 +- 113 +- 72 +- 190 +- 133 +- 73 +- 35 +- 57 +- 165 +- 87 +- 179 +- 171 +- 27 +- 145 +- 72 +- 170 +- 153 +- 63 +- 157 +- 132 +- 75 +- 102 +- 174 +- 30 +- 111 +- 6 +- 50 +- 185 +- 45 +- 34 +- 36 +- 31 +- 115 +- 154 +- 113 +- 91 +- 166 +- 18 +- 145 +- 151 +- 152 +- 184 +- 18 +- 98 +- 84 +- 120 +- 92 +- 7 +- 36 +- 75 +- 130 +- 25 +- 30 +- 30 +- 73 +- 45 +- 154 +- 79 +- 58 +- 88 +- 145 +- 8 +- 92 +- 114 +- 63 +- 10 +- 134 +- 80 +- 64 +- 70 +- 122 +- 153 +- 38 +- 57 +- 42 +- 13 +- 159 +- 110 +- 133 +- 190 +- 163 +- 183 +- 133 +- 32 +- 73 +- 78 +- 26 +- 106 +- 162 +- 61 +- 124 +- 35 +- 89 +- 100 +- 73 +- 36 +- 35 +- 98 +- 128 +- 98 +- 152 +- 24 +- 93 +- 83 +- 156 +- 90 +- 163 +- 5 +- 82 +- 152 +- 32 +- 11 +- 113 +- 24 +- 133 +- 82 +- 171 +- 70 +- 129 +- 9 +- 60 +- 52 +- 100 +- 167 +- 130 +- 128 +- 4 +- 113 +- 190 +- 112 +- 60 +- 55 +- 179 +- 15 +- 122 +- 84 +- 194 +- 137 +- 53 +- 83 +- 49 +- 81 +- 99 +- 53 +- 93 +- 92 +- 21 +- 74 +- 140 +- 118 +- 87 +- 29 +- 17 +- 85 +- 113 +- 48 +- 108 +- 77 +- 31 +- 192 +- 152 +- 72 +- 192 +- 119 +- 93 +- 90 +- 5 +- 168 +- 80 +- 168 +- 143 +- 34 +- 167 +- 33 +- 130 +- 120 +- 25 +- 194 +- 11 +- 192 +- 0 +- 108 +- 70 +- 175 +- 5 +- 3 +- 33 +- 37 +- 171 +- 153 +- 82 +- 146 +- 0 +- 122 +- 35 +- 2 +- 164 +- 117 +- 82 +- 31 +- 117 +- 77 +- 98 +- 90 +- 35 +- 49 +- 190 +- 53 +- 186 +- 71 +- 61 +- 134 +- 53 +- 50 +- 10 +- 84 +- 144 +- 133 +- 101 +- 4 +- 71 +- 132 +- 53 +- 145 +- 135 +- 35 +- 167 +- 37 +- 35 +- 33 +- 149 +- 114 +- 35 +- 72 +- 79 +- 0 +- 8 +- 193 +- 171 +- 132 +- 109 +- 35 +- 7 +- 99 +- 21 +- 76 +- 72 +- 19 +- 176 +- 179 +- 21 +- 109 +- 189 +- 5 +- 58 +- 168 +- 169 +- 86 +- 113 +- 13 +- 198 +- 100 +- 186 +- 148 +- 159 +- 115 +- 169 +- 184 +- 70 +- 2 +- 139 +- 148 +- 187 +- 86 +- 38 +- 3 +- 74 +- 5 +- 28 +- 21 +- 76 +- 14 +- 192 +- 41 +- 58 +- 171 +- 96 +- 6 +- 38 +- 89 +- 96 +- 171 +- 182 +- 116 +- 67 +- 142 +- 56 +- 160 +- 132 +- 128 +- 75 +- 94 +- 13 +- 87 +- 18 +- 179 +- 76 +- 36 +- 152 +- 170 +- 163 +- 127 +- 13 +- 82 +- 171 +- 67 +- 149 +- 14 +- 137 +- 90 +- 10 +- 42 +- 129 +- 192 +- 3 +- 28 +- 156 +- 38 +- 4 +- 69 +- 30 +- 27 +- 134 +- 181 +- 76 +- 108 +- 79 +- 178 +- 72 +- 96 +- 193 +- 74 +- 129 +- 91 +- 24 +- 19 +- 165 +- 173 +- 0 +- 73 +- 109 +- 175 +- 19 +- 113 +- 14 +- 115 +- 164 +- 100 +- 30 +- 139 +- 72 +- 152 +- 35 +- 110 +- 195 +- 173 +- 53 +- 199 +- 97 +- 193 +- 138 +- 41 +- 16 +- 174 +- 189 +- 160 +- 7 +- 108 +- 136 +- 38 +- 122 +- 133 +- 9 +- 34 +- 114 +- 95 +- 160 +- 35 +- 97 +- 109 +- 196 +- 168 +- 56 +- 151 +- 149 +- 71 +- 57 +- 171 +- 188 +- 58 +- 173 +- 37 +- 199 +- 197 +- 20 +- 173 +- 122 +- 171 +- 73 +- 38 +- 82 +- 133 +- 149 +- 158 +- 148 +- 115 +- 175 +- 10 +- 110 +- 175 +- 155 +- 11 +- 153 +- 163 +- 153 +- 136 +- 151 +- 101 +- 30 +- 28 +- 35 +- 14 +- 108 +- 66 +- 86 +- 33 +- 125 +- 32 +- 142 +- 87 +- 60 +- 134 +- 163 +- 28 +- 83 +- 68 +- 5 +- 182 +- 181 +- 68 +- 10 +- 99 +- 113 +- 142 +- 25 +- 153 +- 41 +- 15 +- 0 +- 76 +- 73 +- 118 +- 19 +- 10 +- 30 +- 110 +- 100 +- 84 +- 4 +- 175 +- 71 +- 61 +- 152 +- 117 +- 28 +- 119 +- 199 +- 192 +- 99 +- 122 +- 9 +- 175 +- 149 +- 82 +- 143 +- 133 +- 134 +- 165 +- 93 +- 82 +- 84 +- 162 +- 44 +- 54 +- 162 +- 1 +- 102 +- 192 +- 66 +- 20 +- 71 +- 129 +- 75 +- 165 +- 160 +- 93 +- 55 +- 59 +- 83 +- 134 +- 91 +- 14 +- 94 +- 36 +- 40 +- 22 +- 151 +- 172 +- 189 +- 107 +- 95 +- 152 +- 158 +- 52 +- 95 +- 120 +- 192 +- 90 +- 160 +- 39 +- 60 +- 53 +- 119 +- 54 +- 157 +- 156 +- 3 +- 103 +- 193 +- 187 +- 75 +- 133 +- 42 +- 145 +- 35 +- 112 +- 192 +- 3 +- 50 +- 161 +- 171 +- 171 +- 131 +- 134 +- 89 +- 116 +- 8 +- 98 +- 76 +- 189 +- 117 +- 168 +- 149 +- 140 +- 168 +- 35 +- 108 +- 159 +- 0 +- 182 +- 32 +- 169 +- 92 +- 168 +- 194 +- 41 +- 73 +- 69 +- 115 +- 112 +- 113 +- 57 +- 61 +- 153 +- 175 +- 167 +- 92 +- 2 +- 62 +- 67 +- 58 +- 93 +- 196 +- 187 +- 128 +- 113 +- 171 +- 190 +- 106 +- 25 +- 198 +- 35 +- 135 +- 140 +- 14 +- 37 +- 112 +- 37 +- 177 +- 61 +- 91 +- 114 +- 16 +- 40 +- 130 +- 159 +- 57 +- 167 +- 141 +- 174 +- 141 +- 101 +- 153 +- 1 +- 73 +- 28 +- 94 +- 10 +- 119 +- 32 +- 168 +- 0 +- 37 +- 92 +- 127 +- 86 +- 168 +- 103 +- 70 +- 197 +- 133 +- 63 +- 77 +- 73 +- 35 +- 117 +- 13 +- 174 +- 122 +- 1 +- 175 +- 159 +- 182 +- 72 +- 34 +- 35 +- 75 +- 145 +- 112 +- 153 +- 143 +- 122 +- 53 +- 171 +- 72 +- 192 +- 26 +- 45 +- 54 +- 179 +- 82 +- 73 +- 109 +- 112 +- 162 +- 45 +- 162 +- 146 +- 63 +- 166 +- 150 +- 122 +- 145 +- 145 +- 56 +- 7 +- 158 +- 60 +- 3 +- 12 +- 103 +- 73 +- 86 +- 27 +- 153 +- 83 +- 97 +- 9 +- 146 +- 58 +- 114 +- 119 +- 112 +- 164 +- 8 +- 99 +- 114 +- 63 +- 112 +- 67 +- 2 +- 83 +- 102 +- 171 +- 58 +- 72 +- 86 +- 159 +- 157 +- 35 +- 75 +- 107 +- 52 +- 97 +- 33 +- 142 +- 63 +- 76 +- 20 +- 103 +- 8 +- 133 +- 5 +- 79 +- 156 +- 158 +- 171 +- 73 +- 55 +- 9 +- 193 +- 131 +- 33 +- 152 +- 97 +- 187 +- 132 +- 24 +- 126 +- 186 +- 91 +- 18 +- 153 +- 36 +- 196 +- 145 +- 197 +- 168 +- 158 +- 36 +- 171 +- 187 +- 53 +- 38 +- 175 +- 177 +- 180 +- 53 +- 72 +- 19 +- 33 +- 194 +- 156 +- 180 +- 109 +- 140 +- 132 +- 31 +- 105 +- 0 +- 37 +- 82 +- 87 +- 27 +- 117 +- 10 +- 161 +- 98 +- 151 +- 146 +- 157 +- 171 +- 112 +- 113 +- 58 +- 88 +- 1 +- 81 +- 87 +- 159 +- 168 +- 154 +- 71 +- 138 +- 38 +- 67 +- 199 +- 32 +- 93 +- 95 +- 48 +- 30 +- 91 +- 141 +- 73 +- 14 +- 175 +- 15 +- 71 +- 139 +- 49 +- 197 +- 11 +- 53 +- 4 +- 14 +- 133 +- 102 +- 4 +- 75 +- 33 +- 133 +- 156 +- 14 +- 113 +- 120 +- 75 +- 3 +- 65 +- 35 +- 142 +- 73 +- 57 +- 49 +- 140 +- 140 +- 154 +- 142 +- 94 +- 186 +- 73 +- 54 +- 159 +- 154 +- 68 +- 9 +- 45 +- 14 +- 81 +- 63 +- 168 +- 69 +- 175 +- 198 +- 150 +- 86 +- 128 +- 31 +- 57 +- 18 +- 182 +- 150 +- 68 +- 113 +- 101 +- 157 +- 172 +- 103 +- 140 +- 35 +- 138 +- 115 +- 48 +- 2 +- 66 +- 96 +- 102 +- 76 +- 125 +- 112 +- 5 +- 178 +- 132 +- 24 +- 104 +- 133 +- 30 +- 125 +- 129 +- 75 +- 82 +- 161 +- 51 +- 174 +- 30 +- 156 +- 52 +- 188 +- 149 +- 163 +- 119 +- 103 +- 165 +- 168 +- 45 +- 163 +- 30 +- 18 +- 108 +- 38 +- 35 +- 84 +- 29 +- 173 +- 5 +- 134 +- 122 +- 78 +- 71 +- 106 +- 115 +- 3 +- 172 +- 31 +- 37 +- 122 +- 62 +- 101 +- 133 +- 78 +- 51 +- 71 +- 143 +- 66 +- 110 +- 14 +- 197 +- 178 +- 158 +- 49 +- 61 +- 140 +- 114 +- 150 +- 153 +- 143 +- 50 +- 76 +- 117 +- 157 +- 27 +- 60 +- 137 +- 82 +- 27 +- 12 +- 185 +- 92 +- 109 +- 113 +- 158 +- 0 +- 140 +- 157 +- 62 +- 48 +- 54 +- 90 +- 156 +- 37 +- 21 +- 152 +- 168 +- 131 +- 27 +- 3 +- 51 +- 60 +- 57 +- 134 +- 113 +- 98 +- 128 +- 109 +- 94 +- 193 +- 64 +- 152 +- 44 +- 169 +- 113 +- 129 +- 62 +- 115 +- 24 +- 93 +- 69 +- 74 +- 61 +- 187 +- 180 +- 28 +- 48 +- 102 +- 54 +- 38 +- 9 +- 83 +- 177 +- 160 +- 116 +- 91 +- 174 +- 18 +- 130 +- 94 +- 47 +- 90 +- 35 +- 163 +- 176 +- 21 +- 53 +- 19 +- 189 +- 26 +- 94 +- 98 +- 198 +- 89 +- 172 +- 11 +- 94 +- 153 +- 103 +- 98 +- 1 +- 16 +- 114 +- 66 +- 11 +- 53 +- 152 +- 187 +- 73 +- 101 +- 56 +- 82 +- 185 +- 109 +- 67 +- 65 +- 157 +- 155 +- 197 +- 55 +- 44 +- 179 +- 40 +- 73 +- 111 +- 187 +- 46 +- 19 +- 78 +- 41 +- 11 +- 110 +- 6 +- 56 +- 71 +- 96 +- 113 +- 70 +- 69 +- 170 +- 20 +- 129 +- 23 +- 129 +- 73 +- 41 +- 96 +- 48 +- 115 +- 84 +- 129 +- 49 +- 145 +- 91 +- 168 +- 14 +- 32 +- 0 +- 139 +- 194 +- 0 +- 74 +- 35 +- 13 +- 10 +- 10 +- 58 +- 72 +- 48 +- 100 +- 150 +- 56 +- 102 +- 96 +- 122 +- 92 +- 156 +- 114 +- 138 +- 141 +- 109 +- 149 +- 133 +- 13 +- 97 +- 89 +- 75 +- 164 +- 62 +- 159 +- 108 +- 187 +- 151 +- 20 +- 130 +- 64 +- 129 +- 51 +- 37 +- 144 +- 134 +- 158 +- 14 +- 77 +- 40 +- 187 +- 194 +- 133 +- 51 +- 7 +- 82 +- 12 +- 152 +- 123 +- 44 +- 94 +- 43 +- 170 +- 48 +- 155 +- 82 +- 102 +- 171 +- 91 +- 82 +- 169 +- 74 +- 94 +- 40 +- 45 +- 29 +- 69 +- 111 +- 33 +- 151 +- 95 +- 33 +- 93 +- 147 +- 137 +- 192 +- 72 +- 36 +- 81 +- 199 +- 153 +- 98 +- 93 +- 24 +- 41 +- 63 +- 120 +- 159 +- 32 +- 50 +- 154 +- 63 +- 149 +- 135 +- 188 +- 59 +- 0 +- 132 +- 26 +- 10 +- 76 +- 0 +- 83 +- 142 +- 158 +- 146 +- 19 +- 186 +- 146 +- 15 +- 112 +- 182 +- 1 +- 82 +- 99 +- 75 +- 5 +- 48 +- 132 +- 13 +- 103 +- 158 +- 32 +- 64 +- 94 +- 14 +- 138 +- 102 +- 194 +- 106 +- 148 +- 102 +- 100 +- 48 +- 90 +- 158 +- 99 +- 133 +- 75 +- 64 +- 142 +- 116 +- 31 +- 99 +- 125 +- 86 +- 81 +- 27 +- 149 +- 28 +- 35 +- 31 +- 133 +- 119 +- 78 +- 94 +- 63 +- 61 +- 168 +- 167 +- 158 +- 86 +- 113 +- 134 +- 89 +- 193 +- 112 +- 46 +- 133 +- 194 +- 120 +- 30 +- 110 +- 61 +- 63 +- 186 +- 90 +- 15 +- 35 +- 191 +- 54 +- 185 +- 112 +- 27 +- 73 +- 113 +- 65 +- 58 +- 169 +- 16 +- 8 +- 20 +- 125 +- 42 +- 142 +- 160 +- 187 +- 61 +- 75 +- 55 +- 159 +- 23 +- 94 +- 84 +- 152 +- 122 +- 112 +- 84 +- 57 +- 0 +- 9 +- 142 +- 58 +- 27 +- 198 +- 133 +- 61 +- 87 +- 162 +- 113 +- 51 +- 161 +- 104 +- 144 +- 20 +- 99 +- 159 +- 151 +- 91 +- 35 +- 129 +- 113 +- 65 +- 133 +- 164 +- 26 +- 64 +- 48 +- 0 +- 98 +- 132 +- 95 +- 149 +- 177 +- 0 +- 64 +- 44 +- 160 +- 101 +- 20 +- 134 +- 133 +- 98 +- 75 +- 32 +- 111 +- 73 +- 96 +- 54 +- 37 +- 92 +- 91 +- 163 +- 39 +- 85 +- 95 +- 150 +- 170 +- 35 +- 147 +- 128 +- 115 +- 25 +- 60 +- 24 +- 171 +- 39 +- 20 +- 193 +- 63 +- 78 +- 44 +- 94 +- 69 +- 154 +- 90 +- 1 +- 87 +- 79 +- 14 +- 112 +- 134 +- 78 +- 133 +- 94 +- 54 +- 20 +- 75 +- 134 +- 64 +- 91 +- 125 +- 32 +- 158 +- 90 +- 114 +- 64 +- 90 +- 30 +- 17 +- 150 +- 18 +- 194 +- 3 +- 127 +- 30 +- 186 +- 11 +- 141 +- 90 +- 195 +- 63 +- 39 +- 160 +- 52 +- 53 +- 107 +- 69 +- 49 +- 171 +- 28 +- 33 +- 79 +- 35 +- 66 +- 122 +- 113 +- 23 +- 19 +- 125 +- 39 +- 71 +- 134 +- 115 +- 189 +- 64 +- 63 +- 100 +- 72 +- 77 +- 45 +- 5 +- 29 +- 57 +- 151 +- 73 +- 100 +- 26 +- 96 +- 40 +- 32 +- 185 +- 51 +- 128 +- 5 +- 147 +- 78 +- 63 +- 0 +- 159 +- 28 +- 156 +- 143 +- 140 +- 44 +- 0 +- 45 +- 32 +- 125 +- 16 +- 77 +- 174 +- 50 +- 177 +- 1 +- 38 +- 74 +- 73 +- 6 +- 148 +- 76 +- 27 +- 16 +- 74 +- 18 +- 55 +- 153 +- 70 +- 186 +- 103 +- 6 +- 90 +- 146 +- 92 +- 95 +- 169 +- 6 +- 156 +- 35 +- 165 +- 90 +- 21 +- 14 +- 90 +- 194 +- 20 +- 91 +- 118 +- 91 +- 32 +- 26 +- 65 +- 107 +- 90 +- 111 +- 149 +- 194 +- 195 +- 133 +- 192 +- 192 +- 174 +- 166 +- 20 +- 50 +- 48 +- 189 +- 119 +- 119 +- 142 +- 110 +- 5 +- 56 +- 102 +- 9 +- 11 +- 18 +- 133 +- 169 +- 75 +- 96 +- 41 +- 160 +- 78 +- 94 +- 82 +- 168 +- 9 +- 41 +- 168 +- 185 +- 194 +- 27 +- 172 +- 145 +- 188 +- 158 +- 63 +- 171 +- 82 +- 28 +- 182 +- 168 +- 64 +- 132 +- 152 +- 145 +- 194 +- 138 +- 72 +- 133 +- 131 +- 99 +- 149 +- 197 +- 14 +- 190 +- 25 +- 102 +- 166 +- 166 +- 168 +- 81 +- 42 +- 73 +- 138 +- 114 +- 149 +- 24 +- 70 +- 133 +- 30 +- 132 +- 126 +- 7 +- 3 +- 193 +- 167 +- 99 +- 198 +- 11 +- 97 +- 82 +- 99 +- 130 +- 8 +- 89 +- 75 +- 172 +- 33 +- 149 +- 143 +- 19 +- 153 +- 128 +- 186 +- 192 +- 102 +- 32 +- 90 +- 101 +- 8 +- 13 +- 72 +- 177 +- 155 +- 62 +- 53 +- 28 +- 135 +- 36 +- 198 +- 81 +- 172 +- 81 +- 87 +- 164 +- 65 +- 176 +- 57 +- 185 +- 102 +- 14 +- 72 +- 56 +- 119 +- 107 +- 65 +- 38 +- 158 +- 0 +- 192 +- 140 +- 3 +- 171 +- 186 +- 183 +- 51 +- 123 +- 129 +- 82 +- 169 +- 182 +- 101 +- 176 +- 90 +- 126 +- 113 +- 63 +- 44 +- 160 +- 91 +- 159 +- 18 +- 127 +- 160 +- 109 +- 171 +- 170 +- 144 +- 20 +- 198 +- 7 +- 106 +- 112 +- 81 +- 106 +- 78 +- 98 +- 139 +- 187 +- 33 +- 171 +- 35 +- 186 +- 72 +- 95 +- 181 +- 161 +- 3 +- 64 +- 9 +- 196 +- 49 +- 194 +- 9 +- 187 +- 109 +- 20 +- 171 +- 15 +- 99 +- 171 +- 151 +- 198 +- 63 +- 122 +- 80 +- 181 +- 35 +- 168 +- 128 +- 57 +- 188 +- 33 +- 111 +- 8 +- 70 +- 174 +- 69 +- 159 +- 151 +- 73 +- 1 +- 198 +- 129 +- 113 +- 44 +- 188 +- 142 +- 134 +- 104 +- 104 +- 178 +- 70 +- 192 +- 194 +- 103 +- 110 +- 189 +- 91 +- 145 +- 135 +- 87 +- 117 +- 33 +- 102 +- 125 +- 24 +- 33 +- 176 +- 114 +- 76 +- 79 +- 97 +- 43 +- 24 +- 198 +- 132 +- 48 +- 171 +- 10 +- 135 +- 45 +- 199 +- 84 +- 103 +- 196 +- 44 +- 144 +- 159 +- 96 +- 111 +- 5 +- 150 +- 184 +- 186 +- 175 +- 14 +- 26 +- 76 +- 41 +- 92 +- 36 +- 166 +- 122 +- 57 +- 48 +- 78 +- 20 +- 91 +- 48 +- 145 +- 152 +- 122 +- 168 +- 102 +- 95 +- 63 +- 110 +- 115 +- 83 +- 21 +- 0 +- 82 +- 14 +- 48 +- 159 +- 43 +- 20 +- 171 +- 14 +- 20 +- 135 +- 171 +- 195 +- 117 +- 133 +- 36 +- 35 +- 194 +- 146 +- 157 +- 72 +- 65 +- 9 +- 91 +- 104 +- 149 +- 26 +- 101 +- 28 +- 73 +- 173 +- 171 +- 180 +- 72 +- 100 +- 101 +- 116 +- 22 +- 24 +- 90 +- 64 +- 71 +- 179 +- 86 +- 65 +- 16 +- 154 +- 110 +- 185 +- 38 +- 66 +- 11 +- 53 +- 156 +- 100 +- 26 +- 63 +- 29 +- 114 +- 83 +- 76 +- 63 +- 122 +- 33 +- 36 +- 58 +- 10 +- 8 +- 132 +- 167 +- 72 +- 20 +- 153 +- 78 +- 169 +- 72 +- 72 +- 59 +- 33 +- 31 +- 1 +- 63 +- 123 +- 79 +- 45 +- 38 +- 113 +- 187 +- 78 +- 93 +- 135 +- 97 +- 137 +- 152 +- 103 +- 139 +- 129 +- 149 +- 159 +- 182 +- 10 +- 182 +- 196 +- 78 +- 68 +- 115 +- 57 +- 145 +- 44 +- 9 +- 10 +- 3 +- 183 +- 61 +- 35 +- 187 +- 26 +- 73 +- 137 +- 138 +- 174 +- 110 +- 139 +- 30 +- 57 +- 186 +- 26 +- 170 +- 171 +- 96 +- 60 +- 4 +- 19 +- 133 +- 84 +- 184 +- 100 +- 22 +- 38 +- 147 +- 61 +- 65 +- 188 +- 43 +- 138 +- 129 +- 27 +- 41 +- 21 +- 130 +- 112 +- 144 +- 175 +- 0 +- 160 +- 153 +- 2 +- 47 +- 0 +- 69 +- 90 +- 144 +- 86 +- 2 +- 29 +- 154 +- 179 +- 20 +- 133 +- 114 +- 40 +- 90 +- 173 +- 188 +- 175 +- 172 +- 12 +- 99 +- 179 +- 67 +- 71 +- 103 +- 9 +- 192 +- 0 +- 160 +- 128 +- 116 +- 102 +- 192 +- 112 +- 95 +- 35 +- 149 +- 57 +- 14 +- 94 +- 36 +- 11 +- 151 +- 141 +- 164 +- 90 +- 118 +- 149 +- 187 +- 86 +- 7 +- 197 +- 188 +- 119 +- 143 +- 189 +- 152 +- 79 +- 95 +- 134 +- 49 +- 53 +- 35 +- 72 +- 149 +- 41 +- 125 +- 0 +- 19 +- 138 +- 177 +- 90 +- 159 +- 82 +- 67 +- 153 +- 30 +- 132 +- 184 +- 133 +- 193 +- 124 +- 76 +- 143 +- 63 +- 129 +- 74 +- 101 +- 162 +- 53 +- 30 +- 61 +- 113 +- 11 +- 158 +- 72 +- 19 +- 158 +- 97 +- 2 +- 148 +- 116 +- 34 +- 55 +- 140 +- 179 +- 82 +- 75 +- 138 +- 67 +- 107 +- 188 +- 119 +- 195 +- 88 +- 145 +- 99 +- 2 +- 37 +- 141 +- 94 +- 125 +- 26 +- 54 +- 112 +- 73 +- 35 +- 182 +- 35 +- 144 +- 168 +- 14 +- 163 +- 44 +- 142 +- 149 +- 36 +- 119 +- 196 +- 179 +- 99 +- 156 +- 196 +- 76 +- 57 +- 43 +- 198 +- 198 +- 22 +- 125 +- 9 +- 99 +- 106 +- 14 +- 38 +- 93 +- 74 +- 65 +- 137 +- 16 +- 48 +- 16 +- 57 +- 179 +- 22 +- 132 +- 91 +- 113 +- 4 +- 145 +- 14 +- 171 +- 154 +- 46 +- 101 +- 28 +- 153 +- 39 +- 42 +- 4 +- 128 +- 8 +- 26 +- 178 +- 78 +- 20 +- 82 +- 27 +- 120 +- 177 +- 129 +- 41 +- 134 +- 28 +- 5 +- 17 +- 145 +- 128 +- 113 +- 133 +- 120 +- 174 +- 11 +- 48 +- 149 +- 184 +- 33 +- 168 +- 22 +- 14 +- 174 +- 91 +- 72 +- 37 +- 170 +- 78 +- 48 +- 151 +- 26 +- 59 +- 156 +- 3 +- 53 +- 41 +- 182 +- 72 +- 133 +- 123 +- 102 +- 26 +- 198 +- 70 +- 19 +- 76 +- 170 +- 149 +- 135 +- 140 +- 102 +- 95 +- 60 +- 122 +- 90 +- 176 +- 124 +- 145 +- 194 +- 48 +- 182 +- 52 +- 173 +- 110 +- 60 +- 111 +- 151 +- 179 +- 82 +- 145 +- 113 +- 177 +- 149 +- 194 +- 19 +- 181 +- 9 +- 33 +- 189 +- 29 +- 160 +- 144 +- 20 +- 15 +- 100 +- 57 +- 140 +- 130 +- 7 +- 40 +- 175 +- 41 +- 39 +- 63 +- 53 +- 120 +- 69 +- 82 +- 171 +- 125 +- 20 +- 94 +- 63 +- 123 +- 114 +- 128 +- 171 +- 44 +- 113 +- 173 +- 72 +- 114 +- 28 +- 151 +- 63 +- 114 +- 65 +- 24 +- 102 +- 107 +- 188 +- 69 +- 19 +- 20 +- 95 +- 113 +- 171 +- 32 +- 171 +- 53 +- 49 +- 118 +- 41 +- 14 +- 187 +- 150 +- 71 +- 155 +- 53 +- 72 +- 187 +- 177 +- 102 +- 130 +- 0 +- 132 +- 142 +- 168 +- 175 +- 152 +- 85 +- 180 +- 153 +- 20 +- 2 +- 114 +- 171 +- 14 +- 57 +- 110 +- 186 +- 94 +- 100 +- 114 +- 44 +- 198 +- 135 +- 129 +- 69 +- 93 +- 75 +- 22 +- 116 +- 99 +- 72 +- 145 +- 183 +- 194 +- 17 +- 155 +- 21 +- 67 +- 33 +- 195 +- 128 +- 172 +- 151 +- 112 +- 198 +- 54 +- 171 +- 132 +- 21 +- 160 +- 32 +- 61 +- 31 +- 106 +- 48 +- 198 +- 193 +- 122 +- 76 +- 100 +- 65 +- 177 +- 168 +- 86 +- 101 +- 108 +- 57 +- 9 +- 90 +- 192 +- 160 +- 82 +- 182 diff --git a/datasets/imagenet_r_utils/imagenet-r_train.yaml b/datasets/imagenet_r_utils/imagenet-r_train.yaml new file mode 100644 index 00000000..a039907f --- /dev/null +++ b/datasets/imagenet_r_utils/imagenet-r_train.yaml @@ -0,0 +1,48002 @@ +data: +- data/imagenet-r/n02128757/sculpture_4.jpg +- data/imagenet-r/n02268443/misc_113.jpg +- data/imagenet-r/n07614500/misc_30.jpg +- data/imagenet-r/n04487394/cartoon_17.jpg +- data/imagenet-r/n01833805/tattoo_65.jpg +- data/imagenet-r/n07734744/toy_36.jpg +- data/imagenet-r/n02102318/sketch_3.jpg +- data/imagenet-r/n03495258/deviantart_5.jpg +- data/imagenet-r/n02447366/embroidery_5.jpg +- data/imagenet-r/n01882714/art_2.jpg +- data/imagenet-r/n01882714/sketch_10.jpg +- data/imagenet-r/n02099601/misc_86.jpg +- data/imagenet-r/n02128757/sketch_3.jpg +- data/imagenet-r/n03630383/cartoon_19.jpg +- data/imagenet-r/n02749479/misc_35.jpg +- data/imagenet-r/n03495258/deviantart_8.jpg +- data/imagenet-r/n03630383/cartoon_29.jpg +- data/imagenet-r/n02480855/sculpture_13.jpg +- data/imagenet-r/n04254680/videogame_8.jpg +- data/imagenet-r/n03888257/cartoon_25.jpg +- data/imagenet-r/n02607072/misc_11.jpg +- data/imagenet-r/n02655020/misc_52.jpg +- data/imagenet-r/n07697537/sketch_10.jpg +- data/imagenet-r/n01847000/graffiti_1.jpg +- data/imagenet-r/n02113624/misc_20.jpg +- data/imagenet-r/n01614925/sticker_0.jpg +- data/imagenet-r/n01518878/origami_7.jpg +- data/imagenet-r/n01443537/sketch_3.jpg +- data/imagenet-r/n03124170/art_21.jpg +- data/imagenet-r/n02226429/embroidery_3.jpg +- data/imagenet-r/n03594945/misc_8.jpg +- data/imagenet-r/n02106662/misc_75.jpg +- data/imagenet-r/n02129165/origami_2.jpg +- data/imagenet-r/n02480495/painting_25.jpg +- data/imagenet-r/n03930630/sketch_3.jpg +- data/imagenet-r/n01774750/origami_18.jpg +- data/imagenet-r/n01806143/sculpture_6.jpg +- data/imagenet-r/n01774750/toy_3.jpg +- data/imagenet-r/n02117135/sticker_0.jpg +- data/imagenet-r/n04310018/tattoo_4.jpg +- data/imagenet-r/n02510455/misc_41.jpg +- data/imagenet-r/n02410509/toy_4.jpg +- data/imagenet-r/n03930630/toy_4.jpg +- data/imagenet-r/n07753275/graphic_9.jpg +- data/imagenet-r/n02165456/sculpture_1.jpg +- data/imagenet-r/n07880968/toy_0.jpg +- data/imagenet-r/n02119022/misc_67.jpg +- data/imagenet-r/n07697313/graffiti_7.jpg +- data/imagenet-r/n04146614/painting_1.jpg +- data/imagenet-r/n01806143/deviantart_6.jpg +- data/imagenet-r/n02843684/embroidery_14.jpg +- data/imagenet-r/n01820546/sculpture_2.jpg +- data/imagenet-r/n07697537/misc_105.jpg +- data/imagenet-r/n01833805/origami_1.jpg +- data/imagenet-r/n02165456/tattoo_49.jpg +- data/imagenet-r/n02346627/sketch_18.jpg +- data/imagenet-r/n10565667/misc_4.jpg +- data/imagenet-r/n02206856/sculpture_0.jpg +- data/imagenet-r/n02007558/misc_20.jpg +- data/imagenet-r/n02108089/misc_11.jpg +- data/imagenet-r/n07753592/misc_78.jpg +- data/imagenet-r/n07714571/misc_4.jpg +- data/imagenet-r/n03372029/painting_6.jpg +- data/imagenet-r/n01843383/toy_8.jpg +- data/imagenet-r/n02346627/sculpture_6.jpg +- data/imagenet-r/n01484850/painting_2.jpg +- data/imagenet-r/n04086273/sticker_5.jpg +- data/imagenet-r/n01882714/tattoo_21.jpg +- data/imagenet-r/n09472597/art_7.jpg +- data/imagenet-r/n04275548/sketch_16.jpg +- data/imagenet-r/n04522168/embroidery_10.jpg +- data/imagenet-r/n02088466/misc_2.jpg +- data/imagenet-r/n02108915/misc_43.jpg +- data/imagenet-r/n02009912/sketch_9.jpg +- data/imagenet-r/n02236044/tattoo_11.jpg +- data/imagenet-r/n02007558/sketch_12.jpg +- data/imagenet-r/n01484850/videogame_11.jpg +- data/imagenet-r/n04146614/sketch_2.jpg +- data/imagenet-r/n02481823/graffiti_18.jpg +- data/imagenet-r/n02113799/misc_12.jpg +- data/imagenet-r/n01531178/painting_12.jpg +- data/imagenet-r/n02110958/graffiti_7.jpg +- data/imagenet-r/n01443537/art_7.jpg +- data/imagenet-r/n03345487/toy_24.jpg +- data/imagenet-r/n02486410/cartoon_13.jpg +- data/imagenet-r/n04086273/sketch_4.jpg +- data/imagenet-r/n02129604/tattoo_50.jpg +- data/imagenet-r/n02391049/sketch_21.jpg +- data/imagenet-r/n03124170/cartoon_50.jpg +- data/imagenet-r/n07880968/painting_0.jpg +- data/imagenet-r/n02102318/misc_22.jpg +- data/imagenet-r/n02086240/sketch_3.jpg +- data/imagenet-r/n03124170/cartoon_6.jpg +- data/imagenet-r/n03947888/videogame_13.jpg +- data/imagenet-r/n07614500/cartoon_16.jpg +- data/imagenet-r/n02110341/sketch_5.jpg +- data/imagenet-r/n07720875/painting_26.jpg +- data/imagenet-r/n02206856/origami_5.jpg +- data/imagenet-r/n01847000/tattoo_21.jpg +- data/imagenet-r/n02843684/misc_22.jpg +- data/imagenet-r/n02130308/tattoo_9.jpg +- data/imagenet-r/n02480495/painting_11.jpg +- data/imagenet-r/n02071294/sculpture_3.jpg +- data/imagenet-r/n01983481/sketch_1.jpg +- data/imagenet-r/n07695742/sketch_20.jpg +- data/imagenet-r/n02236044/sketch_16.jpg +- data/imagenet-r/n03494278/cartoon_10.jpg +- data/imagenet-r/n07753275/painting_19.jpg +- data/imagenet-r/n01484850/misc_5.jpg +- data/imagenet-r/n02233338/tattoo_1.jpg +- data/imagenet-r/n01514859/cartoon_36.jpg +- data/imagenet-r/n07695742/sketch_13.jpg +- data/imagenet-r/n04141076/painting_14.jpg +- data/imagenet-r/n03594945/deviantart_0.jpg +- data/imagenet-r/n02088094/misc_45.jpg +- data/imagenet-r/n02951358/origami_0.jpg +- data/imagenet-r/n01498041/art_1.jpg +- data/imagenet-r/n01843383/deviantart_33.jpg +- data/imagenet-r/n02486410/sculpture_7.jpg +- data/imagenet-r/n03495258/deviantart_4.jpg +- data/imagenet-r/n07742313/videogame_4.jpg +- data/imagenet-r/n01944390/videogame_1.jpg +- data/imagenet-r/n02268443/misc_24.jpg +- data/imagenet-r/n02808440/art_2.jpg +- data/imagenet-r/n04086273/sketch_15.jpg +- data/imagenet-r/n02094433/sketch_12.jpg +- data/imagenet-r/n02091134/misc_5.jpg +- data/imagenet-r/n01843383/cartoon_49.jpg +- data/imagenet-r/n03372029/deviantart_9.jpg +- data/imagenet-r/n02130308/sketch_11.jpg +- data/imagenet-r/n02108089/sketch_6.jpg +- data/imagenet-r/n03947888/cartoon_6.jpg +- data/imagenet-r/n02672831/painting_1.jpg +- data/imagenet-r/n02398521/cartoon_9.jpg +- data/imagenet-r/n03452741/painting_6.jpg +- data/imagenet-r/n04465501/videogame_23.jpg +- data/imagenet-r/n04266014/sculpture_2.jpg +- data/imagenet-r/n07734744/sticker_15.jpg +- data/imagenet-r/n04310018/toy_17.jpg +- data/imagenet-r/n01882714/sketch_7.jpg +- data/imagenet-r/n03452741/deviantart_2.jpg +- data/imagenet-r/n07749582/painting_37.jpg +- data/imagenet-r/n02138441/sketch_21.jpg +- data/imagenet-r/n02117135/art_13.jpg +- data/imagenet-r/n02939185/tattoo_9.jpg +- data/imagenet-r/n07745940/cartoon_1.jpg +- data/imagenet-r/n02130308/tattoo_11.jpg +- data/imagenet-r/n02129165/misc_6.jpg +- data/imagenet-r/n07720875/painting_46.jpg +- data/imagenet-r/n03124170/sculpture_7.jpg +- data/imagenet-r/n01494475/misc_100.jpg +- data/imagenet-r/n02129165/sketch_9.jpg +- data/imagenet-r/n01616318/cartoon_12.jpg +- data/imagenet-r/n03888257/art_1.jpg +- data/imagenet-r/n04409515/cartoon_16.jpg +- data/imagenet-r/n04536866/cartoon_22.jpg +- data/imagenet-r/n04133789/sketch_4.jpg +- data/imagenet-r/n04389033/art_1.jpg +- data/imagenet-r/n03773504/origami_0.jpg +- data/imagenet-r/n07745940/toy_9.jpg +- data/imagenet-r/n10565667/sketch_7.jpg +- data/imagenet-r/n02410509/sketch_15.jpg +- data/imagenet-r/n02980441/painting_6.jpg +- data/imagenet-r/n02098286/misc_39.jpg +- data/imagenet-r/n07880968/sketch_10.jpg +- data/imagenet-r/n07697537/misc_69.jpg +- data/imagenet-r/n04536866/videogame_5.jpg +- data/imagenet-r/n02226429/art_14.jpg +- data/imagenet-r/n01614925/painting_22.jpg +- data/imagenet-r/n03424325/misc_54.jpg +- data/imagenet-r/n04347754/toy_0.jpg +- data/imagenet-r/n02948072/embroidery_8.jpg +- data/imagenet-r/n03649909/toy_4.jpg +- data/imagenet-r/n02138441/painting_30.jpg +- data/imagenet-r/n02123045/cartoon_2.jpg +- data/imagenet-r/n02268443/misc_167.jpg +- data/imagenet-r/n02106662/sketch_12.jpg +- data/imagenet-r/n02814860/cartoon_1.jpg +- data/imagenet-r/n07742313/deviantart_6.jpg +- data/imagenet-r/n03124170/sketch_18.jpg +- data/imagenet-r/n02096585/tattoo_21.jpg +- data/imagenet-r/n04465501/painting_4.jpg +- data/imagenet-r/n02655020/misc_72.jpg +- data/imagenet-r/n02007558/tattoo_10.jpg +- data/imagenet-r/n01784675/origami_1.jpg +- data/imagenet-r/n02007558/origami_7.jpg +- data/imagenet-r/n07734744/misc_0.jpg +- data/imagenet-r/n02071294/painting_11.jpg +- data/imagenet-r/n01694178/tattoo_11.jpg +- data/imagenet-r/n01847000/sculpture_1.jpg +- data/imagenet-r/n04465501/painting_11.jpg +- data/imagenet-r/n01847000/painting_5.jpg +- data/imagenet-r/n02814860/cartoon_5.jpg +- data/imagenet-r/n03467068/art_3.jpg +- data/imagenet-r/n04347754/tattoo_6.jpg +- data/imagenet-r/n02437616/sketch_18.jpg +- data/imagenet-r/n02909870/cartoon_19.jpg +- data/imagenet-r/n02980441/toy_1.jpg +- data/imagenet-r/n07920052/art_1.jpg +- data/imagenet-r/n01910747/cartoon_2.jpg +- data/imagenet-r/n01616318/painting_1.jpg +- data/imagenet-r/n01860187/painting_0.jpg +- data/imagenet-r/n02097298/misc_1.jpg +- data/imagenet-r/n02129165/toy_3.jpg +- data/imagenet-r/n07734744/misc_14.jpg +- data/imagenet-r/n01882714/art_13.jpg +- data/imagenet-r/n03495258/toy_0.jpg +- data/imagenet-r/n02128757/sketch_6.jpg +- data/imagenet-r/n01644373/cartoon_19.jpg +- data/imagenet-r/n01518878/cartoon_2.jpg +- data/imagenet-r/n01494475/misc_127.jpg +- data/imagenet-r/n02526121/sculpture_1.jpg +- data/imagenet-r/n03452741/sketch_7.jpg +- data/imagenet-r/n07749582/painting_28.jpg +- data/imagenet-r/n03481172/videogame_17.jpg +- data/imagenet-r/n02096585/tattoo_27.jpg +- data/imagenet-r/n02363005/cartoon_46.jpg +- data/imagenet-r/n07697313/painting_15.jpg +- data/imagenet-r/n04409515/deviantart_11.jpg +- data/imagenet-r/n04536866/sketch_9.jpg +- data/imagenet-r/n02110341/misc_100.jpg +- data/imagenet-r/n01494475/misc_102.jpg +- data/imagenet-r/n03452741/cartoon_3.jpg +- data/imagenet-r/n02096585/misc_104.jpg +- data/imagenet-r/n02102318/misc_1.jpg +- data/imagenet-r/n01882714/deviantart_55.jpg +- data/imagenet-r/n04591713/painting_39.jpg +- data/imagenet-r/n04310018/art_11.jpg +- data/imagenet-r/n01614925/tattoo_8.jpg +- data/imagenet-r/n02007558/tattoo_58.jpg +- data/imagenet-r/n07753592/misc_52.jpg +- data/imagenet-r/n02236044/painting_9.jpg +- data/imagenet-r/n04552348/videogame_16.jpg +- data/imagenet-r/n02797295/misc_61.jpg +- data/imagenet-r/n03594945/art_1.jpg +- data/imagenet-r/n02119022/misc_39.jpg +- data/imagenet-r/n02123045/painting_65.jpg +- data/imagenet-r/n02134084/tattoo_13.jpg +- data/imagenet-r/n02363005/cartoon_32.jpg +- data/imagenet-r/n02092339/sketch_15.jpg +- data/imagenet-r/n07749582/painting_4.jpg +- data/imagenet-r/n02814860/embroidery_2.jpg +- data/imagenet-r/n02134084/misc_22.jpg +- data/imagenet-r/n02009912/sketch_1.jpg +- data/imagenet-r/n02119022/misc_34.jpg +- data/imagenet-r/n02391049/misc_62.jpg +- data/imagenet-r/n04310018/art_6.jpg +- data/imagenet-r/n04487394/art_0.jpg +- data/imagenet-r/n02071294/painting_6.jpg +- data/imagenet-r/n04275548/videogame_5.jpg +- data/imagenet-r/n02007558/tattoo_39.jpg +- data/imagenet-r/n04536866/misc_3.jpg +- data/imagenet-r/n01498041/cartoon_5.jpg +- data/imagenet-r/n02480855/graphic_6.jpg +- data/imagenet-r/n02102318/misc_51.jpg +- data/imagenet-r/n07697537/misc_22.jpg +- data/imagenet-r/n02102318/misc_38.jpg +- data/imagenet-r/n02113023/sketch_21.jpg +- data/imagenet-r/n01944390/misc_165.jpg +- data/imagenet-r/n02129165/deviantart_6.jpg +- data/imagenet-r/n07714990/sketch_13.jpg +- data/imagenet-r/n03775071/sketch_20.jpg +- data/imagenet-r/n01833805/videogame_2.jpg +- data/imagenet-r/n02088466/sketch_6.jpg +- data/imagenet-r/n02226429/cartoon_14.jpg +- data/imagenet-r/n04347754/sketch_7.jpg +- data/imagenet-r/n01806143/sticker_0.jpg +- data/imagenet-r/n02110958/cartoon_43.jpg +- data/imagenet-r/n02056570/sketch_10.jpg +- data/imagenet-r/n02091134/misc_26.jpg +- data/imagenet-r/n02814860/painting_19.jpg +- data/imagenet-r/n01770393/cartoon_10.jpg +- data/imagenet-r/n02130308/misc_1.jpg +- data/imagenet-r/n04086273/cartoon_8.jpg +- data/imagenet-r/n01644373/painting_32.jpg +- data/imagenet-r/n07734744/toy_5.jpg +- data/imagenet-r/n02119022/misc_25.jpg +- data/imagenet-r/n02138441/painting_32.jpg +- data/imagenet-r/n02119022/sketch_16.jpg +- data/imagenet-r/n04591713/cartoon_8.jpg +- data/imagenet-r/n04536866/deviantart_22.jpg +- data/imagenet-r/n04086273/tattoo_57.jpg +- data/imagenet-r/n02233338/misc_34.jpg +- data/imagenet-r/n01531178/painting_32.jpg +- data/imagenet-r/n02086240/misc_15.jpg +- data/imagenet-r/n02395406/cartoon_19.jpg +- data/imagenet-r/n01910747/painting_12.jpg +- data/imagenet-r/n02007558/graffiti_8.jpg +- data/imagenet-r/n07697313/deviantart_0.jpg +- data/imagenet-r/n02077923/sketch_3.jpg +- data/imagenet-r/n02094433/misc_27.jpg +- data/imagenet-r/n02007558/embroidery_33.jpg +- data/imagenet-r/n07734744/misc_18.jpg +- data/imagenet-r/n01806143/sketch_13.jpg +- data/imagenet-r/n03888257/sketch_13.jpg +- data/imagenet-r/n01820546/deviantart_14.jpg +- data/imagenet-r/n04141076/cartoon_49.jpg +- data/imagenet-r/n02110341/deviantart_12.jpg +- data/imagenet-r/n07745940/painting_9.jpg +- data/imagenet-r/n02071294/tattoo_7.jpg +- data/imagenet-r/n02410509/sculpture_45.jpg +- data/imagenet-r/n07720875/painting_8.jpg +- data/imagenet-r/n01518878/painting_25.jpg +- data/imagenet-r/n02134084/misc_148.jpg +- data/imagenet-r/n02112018/misc_38.jpg +- data/imagenet-r/n02128385/toy_4.jpg +- data/imagenet-r/n04389033/painting_2.jpg +- data/imagenet-r/n07873807/deviantart_35.jpg +- data/imagenet-r/n02130308/art_5.jpg +- data/imagenet-r/n04465501/tattoo_5.jpg +- data/imagenet-r/n01944390/tattoo_0.jpg +- data/imagenet-r/n07873807/toy_9.jpg +- data/imagenet-r/n03602883/misc_60.jpg +- data/imagenet-r/n04389033/origami_5.jpg +- data/imagenet-r/n02085620/misc_53.jpg +- data/imagenet-r/n02480855/sketch_12.jpg +- data/imagenet-r/n01531178/cartoon_24.jpg +- data/imagenet-r/n03947888/cartoon_1.jpg +- data/imagenet-r/n02123045/sketch_20.jpg +- data/imagenet-r/n01514859/painting_0.jpg +- data/imagenet-r/n01882714/tattoo_4.jpg +- data/imagenet-r/n07745940/embroidery_13.jpg +- data/imagenet-r/n02607072/sketch_9.jpg +- data/imagenet-r/n02948072/misc_7.jpg +- data/imagenet-r/n04266014/toy_22.jpg +- data/imagenet-r/n02701002/sketch_17.jpg +- data/imagenet-r/n02108089/sketch_8.jpg +- data/imagenet-r/n02909870/cartoon_33.jpg +- data/imagenet-r/n01833805/misc_7.jpg +- data/imagenet-r/n04347754/tattoo_16.jpg +- data/imagenet-r/n01882714/deviantart_31.jpg +- data/imagenet-r/n02007558/tattoo_8.jpg +- data/imagenet-r/n01484850/painting_18.jpg +- data/imagenet-r/n02099601/misc_3.jpg +- data/imagenet-r/n02906734/graffiti_1.jpg +- data/imagenet-r/n07734744/graphic_3.jpg +- data/imagenet-r/n03649909/toy_1.jpg +- data/imagenet-r/n07873807/deviantart_24.jpg +- data/imagenet-r/n03649909/toy_26.jpg +- data/imagenet-r/n02099601/misc_73.jpg +- data/imagenet-r/n02279972/art_0.jpg +- data/imagenet-r/n01614925/painting_11.jpg +- data/imagenet-r/n02110341/misc_122.jpg +- data/imagenet-r/n02841315/cartoon_25.jpg +- data/imagenet-r/n04536866/sketch_0.jpg +- data/imagenet-r/n03602883/misc_23.jpg +- data/imagenet-r/n07714990/deviantart_25.jpg +- data/imagenet-r/n09472597/sketch_3.jpg +- data/imagenet-r/n07742313/painting_2.jpg +- data/imagenet-r/n02129165/embroidery_4.jpg +- data/imagenet-r/n07614500/misc_19.jpg +- data/imagenet-r/n07753592/misc_152.jpg +- data/imagenet-r/n02939185/cartoon_16.jpg +- data/imagenet-r/n03481172/videogame_3.jpg +- data/imagenet-r/n02097298/misc_51.jpg +- data/imagenet-r/n03710193/misc_48.jpg +- data/imagenet-r/n02317335/painting_17.jpg +- data/imagenet-r/n01806143/sketch_17.jpg +- data/imagenet-r/n02165456/tattoo_77.jpg +- data/imagenet-r/n02094433/misc_32.jpg +- data/imagenet-r/n07697313/art_32.jpg +- data/imagenet-r/n02279972/cartoon_9.jpg +- data/imagenet-r/n02268443/misc_169.jpg +- data/imagenet-r/n02134084/misc_61.jpg +- data/imagenet-r/n02129604/tattoo_2.jpg +- data/imagenet-r/n02808440/misc_4.jpg +- data/imagenet-r/n02123045/painting_40.jpg +- data/imagenet-r/n04465501/deviantart_14.jpg +- data/imagenet-r/n02091134/misc_60.jpg +- data/imagenet-r/n01860187/sketch_16.jpg +- data/imagenet-r/n02226429/origami_17.jpg +- data/imagenet-r/n02236044/sculpture_17.jpg +- data/imagenet-r/n07734744/videogame_43.jpg +- data/imagenet-r/n03124170/cartoon_45.jpg +- data/imagenet-r/n02814860/cartoon_13.jpg +- data/imagenet-r/n01443537/cartoon_30.jpg +- data/imagenet-r/n04347754/videogame_16.jpg +- data/imagenet-r/n03947888/tattoo_7.jpg +- data/imagenet-r/n02110341/misc_86.jpg +- data/imagenet-r/n01484850/sketch_13.jpg +- data/imagenet-r/n02110958/sketch_2.jpg +- data/imagenet-r/n02088364/sketch_19.jpg +- data/imagenet-r/n02007558/cartoon_50.jpg +- data/imagenet-r/n03676483/sketch_13.jpg +- data/imagenet-r/n02110185/sketch_21.jpg +- data/imagenet-r/n02236044/tattoo_16.jpg +- data/imagenet-r/n04141076/painting_33.jpg +- data/imagenet-r/n01443537/graphic_1.jpg +- data/imagenet-r/n02165456/tattoo_26.jpg +- data/imagenet-r/n02980441/embroidery_4.jpg +- data/imagenet-r/n01632777/cartoon_1.jpg +- data/imagenet-r/n02268443/misc_2.jpg +- data/imagenet-r/n02130308/tattoo_6.jpg +- data/imagenet-r/n02051845/deviantart_24.jpg +- data/imagenet-r/n04522168/videogame_13.jpg +- data/imagenet-r/n02123045/art_8.jpg +- data/imagenet-r/n01806143/origami_1.jpg +- data/imagenet-r/n02097298/misc_62.jpg +- data/imagenet-r/n02190166/sculpture_2.jpg +- data/imagenet-r/n07745940/toy_6.jpg +- data/imagenet-r/n02607072/misc_59.jpg +- data/imagenet-r/n01833805/origami_2.jpg +- data/imagenet-r/n02906734/cartoon_25.jpg +- data/imagenet-r/n02948072/cartoon_67.jpg +- data/imagenet-r/n02480855/tattoo_19.jpg +- data/imagenet-r/n02480855/cartoon_17.jpg +- data/imagenet-r/n07720875/cartoon_3.jpg +- data/imagenet-r/n02219486/sticker_4.jpg +- data/imagenet-r/n02437616/graffiti_2.jpg +- data/imagenet-r/n01833805/tattoo_67.jpg +- data/imagenet-r/n02130308/tattoo_10.jpg +- data/imagenet-r/n02128385/cartoon_2.jpg +- data/imagenet-r/n02655020/deviantart_5.jpg +- data/imagenet-r/n09472597/painting_11.jpg +- data/imagenet-r/n10565667/videogame_12.jpg +- data/imagenet-r/n03495258/sketch_1.jpg +- data/imagenet-r/n01498041/painting_3.jpg +- data/imagenet-r/n03676483/sketch_14.jpg +- data/imagenet-r/n02009912/misc_14.jpg +- data/imagenet-r/n07920052/deviantart_16.jpg +- data/imagenet-r/n07753592/videogame_7.jpg +- data/imagenet-r/n02091134/misc_15.jpg +- data/imagenet-r/n02129604/deviantart_27.jpg +- data/imagenet-r/n01770393/painting_1.jpg +- data/imagenet-r/n02948072/deviantart_11.jpg +- data/imagenet-r/n02906734/embroidery_4.jpg +- data/imagenet-r/n01494475/misc_43.jpg +- data/imagenet-r/n07614500/toy_24.jpg +- data/imagenet-r/n01910747/sketch_8.jpg +- data/imagenet-r/n03494278/deviantart_3.jpg +- data/imagenet-r/n02226429/graffiti_0.jpg +- data/imagenet-r/n02088094/misc_30.jpg +- data/imagenet-r/n10565667/deviantart_25.jpg +- data/imagenet-r/n01847000/sculpture_3.jpg +- data/imagenet-r/n02113799/misc_29.jpg +- data/imagenet-r/n07734744/painting_5.jpg +- data/imagenet-r/n07753275/sketch_22.jpg +- data/imagenet-r/n02909870/cartoon_30.jpg +- data/imagenet-r/n01514859/sketch_4.jpg +- data/imagenet-r/n02843684/sketch_13.jpg +- data/imagenet-r/n02088466/sketch_10.jpg +- data/imagenet-r/n04086273/sketch_8.jpg +- data/imagenet-r/n01514859/embroidery_16.jpg +- data/imagenet-r/n04086273/painting_1.jpg +- data/imagenet-r/n03630383/cartoon_6.jpg +- data/imagenet-r/n02437616/cartoon_0.jpg +- data/imagenet-r/n02233338/misc_44.jpg +- data/imagenet-r/n02883205/cartoon_19.jpg +- data/imagenet-r/n02843684/cartoon_15.jpg +- data/imagenet-r/n04536866/painting_18.jpg +- data/imagenet-r/n01770393/deviantart_3.jpg +- data/imagenet-r/n02906734/origami_4.jpg +- data/imagenet-r/n02099712/misc_40.jpg +- data/imagenet-r/n02317335/toy_0.jpg +- data/imagenet-r/n02398521/cartoon_24.jpg +- data/imagenet-r/n04409515/cartoon_18.jpg +- data/imagenet-r/n01774750/tattoo_5.jpg +- data/imagenet-r/n02356798/sketch_14.jpg +- data/imagenet-r/n02086240/misc_32.jpg +- data/imagenet-r/n02123045/cartoon_19.jpg +- data/imagenet-r/n02165456/painting_0.jpg +- data/imagenet-r/n02134084/sketch_11.jpg +- data/imagenet-r/n01677366/misc_29.jpg +- data/imagenet-r/n02823750/cartoon_15.jpg +- data/imagenet-r/n07697313/deviantart_18.jpg +- data/imagenet-r/n04147183/sculpture_0.jpg +- data/imagenet-r/n07697313/sketch_16.jpg +- data/imagenet-r/n02009912/sketch_15.jpg +- data/imagenet-r/n01614925/sketch_0.jpg +- data/imagenet-r/n07718472/painting_8.jpg +- data/imagenet-r/n07695742/misc_2.jpg +- data/imagenet-r/n02749479/misc_11.jpg +- data/imagenet-r/n03773504/art_3.jpg +- data/imagenet-r/n02134084/misc_70.jpg +- data/imagenet-r/n01944390/misc_38.jpg +- data/imagenet-r/n02909870/cartoon_22.jpg +- data/imagenet-r/n01770393/origami_20.jpg +- data/imagenet-r/n04389033/videogame_52.jpg +- data/imagenet-r/n07873807/videogame_7.jpg +- data/imagenet-r/n02165456/tattoo_45.jpg +- data/imagenet-r/n02356798/embroidery_1.jpg +- data/imagenet-r/n04146614/toy_10.jpg +- data/imagenet-r/n01784675/origami_11.jpg +- data/imagenet-r/n02088364/misc_78.jpg +- data/imagenet-r/n02119022/misc_148.jpg +- data/imagenet-r/n03124170/painting_7.jpg +- data/imagenet-r/n07714990/toy_0.jpg +- data/imagenet-r/n02843684/graffiti_0.jpg +- data/imagenet-r/n02445715/cartoon_23.jpg +- data/imagenet-r/n02130308/tattoo_1.jpg +- data/imagenet-r/n01616318/graffiti_2.jpg +- data/imagenet-r/n02391049/misc_55.jpg +- data/imagenet-r/n02364673/toy_1.jpg +- data/imagenet-r/n02088466/sketch_19.jpg +- data/imagenet-r/n01748264/deviantart_0.jpg +- data/imagenet-r/n02423022/cartoon_2.jpg +- data/imagenet-r/n07720875/deviantart_16.jpg +- data/imagenet-r/n02112137/sketch_4.jpg +- data/imagenet-r/n02110185/painting_6.jpg +- data/imagenet-r/n07745940/deviantart_4.jpg +- data/imagenet-r/n07614500/graphic_5.jpg +- data/imagenet-r/n02099601/misc_1.jpg +- data/imagenet-r/n02110341/sketch_10.jpg +- data/imagenet-r/n01494475/misc_68.jpg +- data/imagenet-r/n01882714/deviantart_44.jpg +- data/imagenet-r/n02236044/origami_20.jpg +- data/imagenet-r/n02109525/sketch_3.jpg +- data/imagenet-r/n02346627/cartoon_16.jpg +- data/imagenet-r/n02110185/tattoo_9.jpg +- data/imagenet-r/n02236044/sculpture_0.jpg +- data/imagenet-r/n02948072/cartoon_35.jpg +- data/imagenet-r/n02950826/sketch_9.jpg +- data/imagenet-r/n02119022/misc_46.jpg +- data/imagenet-r/n01983481/sketch_8.jpg +- data/imagenet-r/n02398521/sculpture_5.jpg +- data/imagenet-r/n02951358/cartoon_3.jpg +- data/imagenet-r/n09835506/misc_39.jpg +- data/imagenet-r/n02749479/sketch_16.jpg +- data/imagenet-r/n07734744/misc_4.jpg +- data/imagenet-r/n07734744/videogame_8.jpg +- data/imagenet-r/n07697537/sketch_4.jpg +- data/imagenet-r/n02948072/deviantart_23.jpg +- data/imagenet-r/n02110958/tattoo_29.jpg +- data/imagenet-r/n07697537/misc_88.jpg +- data/imagenet-r/n02802426/videogame_10.jpg +- data/imagenet-r/n02108915/sketch_5.jpg +- data/imagenet-r/n04146614/toy_6.jpg +- data/imagenet-r/n02165456/tattoo_70.jpg +- data/imagenet-r/n01677366/sketch_14.jpg +- data/imagenet-r/n02138441/tattoo_2.jpg +- data/imagenet-r/n03272010/sketch_16.jpg +- data/imagenet-r/n07749582/painting_34.jpg +- data/imagenet-r/n01843383/painting_27.jpg +- data/imagenet-r/n02672831/painting_2.jpg +- data/imagenet-r/n02701002/sketch_12.jpg +- data/imagenet-r/n01843383/graffiti_7.jpg +- data/imagenet-r/n03467068/misc_2.jpg +- data/imagenet-r/n07734744/misc_9.jpg +- data/imagenet-r/n01614925/deviantart_15.jpg +- data/imagenet-r/n02206856/art_6.jpg +- data/imagenet-r/n01843383/tattoo_7.jpg +- data/imagenet-r/n02814860/cartoon_32.jpg +- data/imagenet-r/n07734744/deviantart_12.jpg +- data/imagenet-r/n02007558/tattoo_26.jpg +- data/imagenet-r/n04147183/deviantart_6.jpg +- data/imagenet-r/n03424325/misc_84.jpg +- data/imagenet-r/n07873807/origami_0.jpg +- data/imagenet-r/n02843684/sketch_16.jpg +- data/imagenet-r/n01443537/painting_25.jpg +- data/imagenet-r/n01843383/deviantart_60.jpg +- data/imagenet-r/n01944390/sketch_15.jpg +- data/imagenet-r/n02096585/misc_174.jpg +- data/imagenet-r/n01910747/tattoo_8.jpg +- data/imagenet-r/n01443537/sculpture_0.jpg +- data/imagenet-r/n03124170/painting_13.jpg +- data/imagenet-r/n01614925/sculpture_10.jpg +- data/imagenet-r/n02097298/misc_30.jpg +- data/imagenet-r/n01494475/misc_20.jpg +- data/imagenet-r/n04086273/tattoo_20.jpg +- data/imagenet-r/n03467068/videogame_3.jpg +- data/imagenet-r/n09835506/sketch_25.jpg +- data/imagenet-r/n02108089/misc_12.jpg +- data/imagenet-r/n07753592/misc_30.jpg +- data/imagenet-r/n04086273/art_5.jpg +- data/imagenet-r/n02279972/painting_11.jpg +- data/imagenet-r/n01843383/sketch_3.jpg +- data/imagenet-r/n04146614/cartoon_9.jpg +- data/imagenet-r/n07873807/deviantart_38.jpg +- data/imagenet-r/n01843383/embroidery_2.jpg +- data/imagenet-r/n04275548/sculpture_4.jpg +- data/imagenet-r/n02749479/sketch_21.jpg +- data/imagenet-r/n02096585/misc_127.jpg +- data/imagenet-r/n04552348/cartoon_1.jpg +- data/imagenet-r/n02110341/misc_112.jpg +- data/imagenet-r/n02236044/sketch_23.jpg +- data/imagenet-r/n02841315/cartoon_0.jpg +- data/imagenet-r/n01614925/painting_27.jpg +- data/imagenet-r/n02123045/sketch_2.jpg +- data/imagenet-r/n02843684/misc_6.jpg +- data/imagenet-r/n02980441/cartoon_22.jpg +- data/imagenet-r/n02226429/sculpture_13.jpg +- data/imagenet-r/n07614500/cartoon_15.jpg +- data/imagenet-r/n02808440/sketch_20.jpg +- data/imagenet-r/n07745940/graffiti_29.jpg +- data/imagenet-r/n02317335/toy_6.jpg +- data/imagenet-r/n01443537/deviantart_2.jpg +- data/imagenet-r/n01494475/misc_133.jpg +- data/imagenet-r/n02363005/graffiti_3.jpg +- data/imagenet-r/n07745940/toy_3.jpg +- data/imagenet-r/n02119022/misc_137.jpg +- data/imagenet-r/n02410509/toy_12.jpg +- data/imagenet-r/n04141076/cartoon_34.jpg +- data/imagenet-r/n02007558/art_8.jpg +- data/imagenet-r/n09472597/cartoon_11.jpg +- data/imagenet-r/n02106030/cartoon_0.jpg +- data/imagenet-r/n01910747/origami_0.jpg +- data/imagenet-r/n02883205/toy_1.jpg +- data/imagenet-r/n02909870/graffiti_1.jpg +- data/imagenet-r/n02841315/cartoon_5.jpg +- data/imagenet-r/n02793495/cartoon_0.jpg +- data/imagenet-r/n02398521/art_2.jpg +- data/imagenet-r/n03888257/cartoon_3.jpg +- data/imagenet-r/n02134084/tattoo_5.jpg +- data/imagenet-r/n07720875/painting_47.jpg +- data/imagenet-r/n09835506/deviantart_19.jpg +- data/imagenet-r/n02841315/graffiti_3.jpg +- data/imagenet-r/n02480855/cartoon_13.jpg +- data/imagenet-r/n03888257/art_4.jpg +- data/imagenet-r/n02226429/graphic_4.jpg +- data/imagenet-r/n02948072/deviantart_14.jpg +- data/imagenet-r/n02106030/sketch_1.jpg +- data/imagenet-r/n02966193/cartoon_4.jpg +- data/imagenet-r/n02138441/painting_5.jpg +- data/imagenet-r/n03773504/sketch_18.jpg +- data/imagenet-r/n01514859/deviantart_1.jpg +- data/imagenet-r/n02233338/misc_6.jpg +- data/imagenet-r/n02119022/misc_64.jpg +- data/imagenet-r/n01944390/tattoo_37.jpg +- data/imagenet-r/n02992529/cartoon_1.jpg +- data/imagenet-r/n09472597/origami_2.jpg +- data/imagenet-r/n02129165/sketch_15.jpg +- data/imagenet-r/n07745940/cartoon_12.jpg +- data/imagenet-r/n02236044/cartoon_31.jpg +- data/imagenet-r/n02268443/misc_18.jpg +- data/imagenet-r/n02483362/sketch_18.jpg +- data/imagenet-r/n01833805/misc_9.jpg +- data/imagenet-r/n02106030/art_15.jpg +- data/imagenet-r/n04487394/sketch_21.jpg +- data/imagenet-r/n02802426/sculpture_1.jpg +- data/imagenet-r/n01694178/sticker_2.jpg +- data/imagenet-r/n07614500/cartoon_5.jpg +- data/imagenet-r/n02793495/sketch_18.jpg +- data/imagenet-r/n02843684/toy_2.jpg +- data/imagenet-r/n02206856/tattoo_13.jpg +- data/imagenet-r/n04465501/embroidery_1.jpg +- data/imagenet-r/n02106662/misc_58.jpg +- data/imagenet-r/n02108915/tattoo_6.jpg +- data/imagenet-r/n04409515/painting_0.jpg +- data/imagenet-r/n01983481/misc_52.jpg +- data/imagenet-r/n04146614/videogame_19.jpg +- data/imagenet-r/n02391049/tattoo_6.jpg +- data/imagenet-r/n02279972/sketch_9.jpg +- data/imagenet-r/n07697537/deviantart_29.jpg +- data/imagenet-r/n02279972/sketch_12.jpg +- data/imagenet-r/n12267677/misc_50.jpg +- data/imagenet-r/n03424325/sketch_15.jpg +- data/imagenet-r/n02236044/sketch_4.jpg +- data/imagenet-r/n02980441/cartoon_20.jpg +- data/imagenet-r/n01644373/art_3.jpg +- data/imagenet-r/n03498962/cartoon_15.jpg +- data/imagenet-r/n02802426/art_0.jpg +- data/imagenet-r/n01630670/misc_2.jpg +- data/imagenet-r/n01833805/tattoo_13.jpg +- data/imagenet-r/n02769748/cartoon_3.jpg +- data/imagenet-r/n02085620/misc_61.jpg +- data/imagenet-r/n02219486/sketch_22.jpg +- data/imagenet-r/n02317335/tattoo_3.jpg +- data/imagenet-r/n04552348/painting_2.jpg +- data/imagenet-r/n04389033/cartoon_1.jpg +- data/imagenet-r/n02092339/misc_9.jpg +- data/imagenet-r/n01443537/cartoon_6.jpg +- data/imagenet-r/n01534433/painting_5.jpg +- data/imagenet-r/n01910747/tattoo_90.jpg +- data/imagenet-r/n03481172/art_8.jpg +- data/imagenet-r/n02130308/art_12.jpg +- data/imagenet-r/n01484850/tattoo_31.jpg +- data/imagenet-r/n01484850/painting_4.jpg +- data/imagenet-r/n03773504/videogame_3.jpg +- data/imagenet-r/n03124170/graphic_0.jpg +- data/imagenet-r/n01860187/graphic_1.jpg +- data/imagenet-r/n07734744/painting_32.jpg +- data/imagenet-r/n02128385/misc_2.jpg +- data/imagenet-r/n07695742/sketch_18.jpg +- data/imagenet-r/n02096585/misc_157.jpg +- data/imagenet-r/n01833805/tattoo_8.jpg +- data/imagenet-r/n02797295/misc_26.jpg +- data/imagenet-r/n04086273/deviantart_2.jpg +- data/imagenet-r/n01632777/sculpture_0.jpg +- data/imagenet-r/n02480495/art_16.jpg +- data/imagenet-r/n02510455/misc_32.jpg +- data/imagenet-r/n02086240/sketch_18.jpg +- data/imagenet-r/n02102318/misc_15.jpg +- data/imagenet-r/n02808440/misc_5.jpg +- data/imagenet-r/n04141076/painting_52.jpg +- data/imagenet-r/n02106662/misc_56.jpg +- data/imagenet-r/n02480495/sketch_1.jpg +- data/imagenet-r/n07734744/cartoon_5.jpg +- data/imagenet-r/n02909870/origami_1.jpg +- data/imagenet-r/n02097298/misc_50.jpg +- data/imagenet-r/n10565667/deviantart_21.jpg +- data/imagenet-r/n04465501/art_4.jpg +- data/imagenet-r/n03649909/toy_7.jpg +- data/imagenet-r/n02808440/sculpture_5.jpg +- data/imagenet-r/n01986214/origami_7.jpg +- data/imagenet-r/n07753275/tattoo_3.jpg +- data/imagenet-r/n02129165/cartoon_28.jpg +- data/imagenet-r/n02317335/sketch_21.jpg +- data/imagenet-r/n02129165/origami_7.jpg +- data/imagenet-r/n04389033/misc_7.jpg +- data/imagenet-r/n04465501/tattoo_13.jpg +- data/imagenet-r/n01833805/graffiti_4.jpg +- data/imagenet-r/n07697537/deviantart_8.jpg +- data/imagenet-r/n01748264/misc_3.jpg +- data/imagenet-r/n09835506/videogame_5.jpg +- data/imagenet-r/n07753592/sketch_22.jpg +- data/imagenet-r/n03495258/cartoon_9.jpg +- data/imagenet-r/n07614500/embroidery_2.jpg +- data/imagenet-r/n04536866/embroidery_0.jpg +- data/imagenet-r/n07695742/misc_3.jpg +- data/imagenet-r/n02909870/videogame_1.jpg +- data/imagenet-r/n02346627/misc_2.jpg +- data/imagenet-r/n02106662/misc_45.jpg +- data/imagenet-r/n03481172/graffiti_0.jpg +- data/imagenet-r/n02480855/sculpture_20.jpg +- data/imagenet-r/n02138441/graffiti_5.jpg +- data/imagenet-r/n01748264/sketch_21.jpg +- data/imagenet-r/n01494475/sketch_11.jpg +- data/imagenet-r/n07697313/art_21.jpg +- data/imagenet-r/n02051845/sketch_21.jpg +- data/imagenet-r/n03930630/cartoon_16.jpg +- data/imagenet-r/n04141076/sculpture_28.jpg +- data/imagenet-r/n04522168/deviantart_0.jpg +- data/imagenet-r/n07693725/cartoon_9.jpg +- data/imagenet-r/n02110958/cartoon_18.jpg +- data/imagenet-r/n01644373/cartoon_3.jpg +- data/imagenet-r/n02106662/misc_32.jpg +- data/imagenet-r/n02655020/misc_48.jpg +- data/imagenet-r/n03124170/cartoon_4.jpg +- data/imagenet-r/n02395406/sculpture_3.jpg +- data/imagenet-r/n02110341/sketch_8.jpg +- data/imagenet-r/n01518878/painting_3.jpg +- data/imagenet-r/n07749582/sticker_2.jpg +- data/imagenet-r/n02480495/sketch_4.jpg +- data/imagenet-r/n03372029/toy_2.jpg +- data/imagenet-r/n01498041/painting_2.jpg +- data/imagenet-r/n01843383/sculpture_4.jpg +- data/imagenet-r/n02085620/misc_51.jpg +- data/imagenet-r/n03594945/videogame_18.jpg +- data/imagenet-r/n02325366/misc_21.jpg +- data/imagenet-r/n02110958/cartoon_44.jpg +- data/imagenet-r/n02108915/misc_28.jpg +- data/imagenet-r/n02108915/misc_52.jpg +- data/imagenet-r/n07742313/sticker_0.jpg +- data/imagenet-r/n02607072/misc_21.jpg +- data/imagenet-r/n02481823/painting_6.jpg +- data/imagenet-r/n01944390/misc_86.jpg +- data/imagenet-r/n02085620/misc_56.jpg +- data/imagenet-r/n02219486/art_1.jpg +- data/imagenet-r/n02481823/graffiti_19.jpg +- data/imagenet-r/n01484850/deviantart_20.jpg +- data/imagenet-r/n02769748/cartoon_28.jpg +- data/imagenet-r/n04266014/cartoon_2.jpg +- data/imagenet-r/n02123045/painting_44.jpg +- data/imagenet-r/n02814860/art_23.jpg +- data/imagenet-r/n02843684/misc_1.jpg +- data/imagenet-r/n02364673/deviantart_9.jpg +- data/imagenet-r/n01770393/origami_22.jpg +- data/imagenet-r/n02398521/toy_2.jpg +- data/imagenet-r/n02007558/painting_23.jpg +- data/imagenet-r/n02099601/misc_8.jpg +- data/imagenet-r/n02071294/tattoo_5.jpg +- data/imagenet-r/n01774750/tattoo_7.jpg +- data/imagenet-r/n02077923/misc_15.jpg +- data/imagenet-r/n01910747/deviantart_3.jpg +- data/imagenet-r/n04192698/videogame_10.jpg +- data/imagenet-r/n01806143/embroidery_5.jpg +- data/imagenet-r/n02088364/videogame_1.jpg +- data/imagenet-r/n07697313/sculpture_10.jpg +- data/imagenet-r/n02607072/misc_73.jpg +- data/imagenet-r/n01644373/sculpture_0.jpg +- data/imagenet-r/n07697537/misc_45.jpg +- data/imagenet-r/n03594945/videogame_10.jpg +- data/imagenet-r/n07697313/deviantart_20.jpg +- data/imagenet-r/n02119022/misc_131.jpg +- data/imagenet-r/n02110958/painting_5.jpg +- data/imagenet-r/n07714571/sketch_0.jpg +- data/imagenet-r/n07749582/deviantart_9.jpg +- data/imagenet-r/n07734744/cartoon_27.jpg +- data/imagenet-r/n02510455/sketch_1.jpg +- data/imagenet-r/n04536866/cartoon_4.jpg +- data/imagenet-r/n02526121/sketch_0.jpg +- data/imagenet-r/n03345487/misc_6.jpg +- data/imagenet-r/n03124170/art_17.jpg +- data/imagenet-r/n04409515/graphic_2.jpg +- data/imagenet-r/n01494475/misc_15.jpg +- data/imagenet-r/n07614500/toy_17.jpg +- data/imagenet-r/n02802426/cartoon_14.jpg +- data/imagenet-r/n01614925/painting_36.jpg +- data/imagenet-r/n02206856/graffiti_40.jpg +- data/imagenet-r/n04389033/cartoon_12.jpg +- data/imagenet-r/n02110185/art_0.jpg +- data/imagenet-r/n02110341/misc_22.jpg +- data/imagenet-r/n02483362/sketch_7.jpg +- data/imagenet-r/n02165456/toy_20.jpg +- data/imagenet-r/n07742313/painting_11.jpg +- data/imagenet-r/n04389033/misc_4.jpg +- data/imagenet-r/n02236044/painting_6.jpg +- data/imagenet-r/n04389033/videogame_15.jpg +- data/imagenet-r/n02808440/cartoon_18.jpg +- data/imagenet-r/n04591713/painting_38.jpg +- data/imagenet-r/n07614500/deviantart_10.jpg +- data/imagenet-r/n01514859/cartoon_11.jpg +- data/imagenet-r/n02130308/painting_13.jpg +- data/imagenet-r/n07753592/misc_85.jpg +- data/imagenet-r/n01443537/origami_7.jpg +- data/imagenet-r/n02077923/misc_44.jpg +- data/imagenet-r/n02108915/misc_67.jpg +- data/imagenet-r/n02906734/graffiti_2.jpg +- data/imagenet-r/n03930630/videogame_10.jpg +- data/imagenet-r/n02226429/sculpture_12.jpg +- data/imagenet-r/n02165456/tattoo_9.jpg +- data/imagenet-r/n02108915/misc_107.jpg +- data/imagenet-r/n01806143/cartoon_10.jpg +- data/imagenet-r/n01843383/painting_6.jpg +- data/imagenet-r/n01770393/tattoo_2.jpg +- data/imagenet-r/n03124170/cartoon_61.jpg +- data/imagenet-r/n02129165/toy_29.jpg +- data/imagenet-r/n01443537/graffiti_4.jpg +- data/imagenet-r/n04522168/cartoon_16.jpg +- data/imagenet-r/n07745940/deviantart_7.jpg +- data/imagenet-r/n02268443/misc_132.jpg +- data/imagenet-r/n02051845/deviantart_19.jpg +- data/imagenet-r/n07614500/painting_7.jpg +- data/imagenet-r/n04310018/sketch_16.jpg +- data/imagenet-r/n02279972/art_7.jpg +- data/imagenet-r/n03594945/cartoon_1.jpg +- data/imagenet-r/n02110958/cartoon_55.jpg +- data/imagenet-r/n03272010/toy_0.jpg +- data/imagenet-r/n01843383/cartoon_4.jpg +- data/imagenet-r/n02395406/sketch_18.jpg +- data/imagenet-r/n01443537/origami_3.jpg +- data/imagenet-r/n04522168/graphic_3.jpg +- data/imagenet-r/n02138441/sculpture_19.jpg +- data/imagenet-r/n02510455/misc_45.jpg +- data/imagenet-r/n07714571/deviantart_1.jpg +- data/imagenet-r/n02219486/embroidery_9.jpg +- data/imagenet-r/n02129165/embroidery_12.jpg +- data/imagenet-r/n02802426/cartoon_4.jpg +- data/imagenet-r/n02655020/misc_77.jpg +- data/imagenet-r/n07920052/cartoon_6.jpg +- data/imagenet-r/n02130308/sketch_5.jpg +- data/imagenet-r/n07714990/deviantart_7.jpg +- data/imagenet-r/n01614925/deviantart_2.jpg +- data/imagenet-r/n02066245/art_4.jpg +- data/imagenet-r/n07873807/sketch_18.jpg +- data/imagenet-r/n01630670/painting_3.jpg +- data/imagenet-r/n01694178/tattoo_7.jpg +- data/imagenet-r/n02480855/graphic_0.jpg +- data/imagenet-r/n03424325/misc_44.jpg +- data/imagenet-r/n04409515/videogame_4.jpg +- data/imagenet-r/n02346627/cartoon_15.jpg +- data/imagenet-r/n01484850/sketch_2.jpg +- data/imagenet-r/n07697313/sketch_19.jpg +- data/imagenet-r/n04389033/sketch_6.jpg +- data/imagenet-r/n01644373/sketch_12.jpg +- data/imagenet-r/n04275548/tattoo_6.jpg +- data/imagenet-r/n02950826/sketch_11.jpg +- data/imagenet-r/n01614925/painting_25.jpg +- data/imagenet-r/n01694178/toy_1.jpg +- data/imagenet-r/n02980441/sticker_1.jpg +- data/imagenet-r/n07873807/sketch_22.jpg +- data/imagenet-r/n03372029/sculpture_30.jpg +- data/imagenet-r/n01843383/art_27.jpg +- data/imagenet-r/n02268443/misc_145.jpg +- data/imagenet-r/n04192698/videogame_17.jpg +- data/imagenet-r/n01484850/tattoo_19.jpg +- data/imagenet-r/n02317335/tattoo_15.jpg +- data/imagenet-r/n01494475/misc_37.jpg +- data/imagenet-r/n02106550/tattoo_14.jpg +- data/imagenet-r/n04141076/tattoo_6.jpg +- data/imagenet-r/n02906734/sketch_5.jpg +- data/imagenet-r/n01833805/tattoo_102.jpg +- data/imagenet-r/n04275548/embroidery_3.jpg +- data/imagenet-r/n07734744/embroidery_4.jpg +- data/imagenet-r/n02119022/misc_37.jpg +- data/imagenet-r/n07768694/deviantart_23.jpg +- data/imagenet-r/n01644373/painting_13.jpg +- data/imagenet-r/n07718472/art_3.jpg +- data/imagenet-r/n04389033/sketch_18.jpg +- data/imagenet-r/n03424325/misc_2.jpg +- data/imagenet-r/n02206856/graffiti_13.jpg +- data/imagenet-r/n04254680/toy_3.jpg +- data/imagenet-r/n02410509/cartoon_40.jpg +- data/imagenet-r/n03424325/misc_31.jpg +- data/imagenet-r/n04347754/tattoo_8.jpg +- data/imagenet-r/n01833805/origami_4.jpg +- data/imagenet-r/n03272010/cartoon_1.jpg +- data/imagenet-r/n09835506/deviantart_1.jpg +- data/imagenet-r/n02607072/misc_92.jpg +- data/imagenet-r/n02134084/misc_50.jpg +- data/imagenet-r/n02096585/misc_30.jpg +- data/imagenet-r/n02423022/painting_0.jpg +- data/imagenet-r/n02236044/cartoon_45.jpg +- data/imagenet-r/n07734744/videogame_11.jpg +- data/imagenet-r/n01644373/misc_0.jpg +- data/imagenet-r/n03124170/origami_1.jpg +- data/imagenet-r/n01632777/deviantart_15.jpg +- data/imagenet-r/n07614500/painting_5.jpg +- data/imagenet-r/n02097298/sketch_23.jpg +- data/imagenet-r/n02007558/cartoon_40.jpg +- data/imagenet-r/n02128757/toy_6.jpg +- data/imagenet-r/n07697313/art_38.jpg +- data/imagenet-r/n07745940/graffiti_28.jpg +- data/imagenet-r/n01443537/videogame_12.jpg +- data/imagenet-r/n03947888/videogame_8.jpg +- data/imagenet-r/n04325704/embroidery_0.jpg +- data/imagenet-r/n01614925/deviantart_14.jpg +- data/imagenet-r/n04552348/misc_19.jpg +- data/imagenet-r/n02364673/sketch_1.jpg +- data/imagenet-r/n02814860/embroidery_4.jpg +- data/imagenet-r/n02445715/sketch_1.jpg +- data/imagenet-r/n04310018/misc_14.jpg +- data/imagenet-r/n03888257/videogame_0.jpg +- data/imagenet-r/n02391049/sketch_15.jpg +- data/imagenet-r/n02119022/misc_130.jpg +- data/imagenet-r/n02808440/cartoon_21.jpg +- data/imagenet-r/n02110341/misc_81.jpg +- data/imagenet-r/n07745940/cartoon_18.jpg +- data/imagenet-r/n02808440/painting_23.jpg +- data/imagenet-r/n02110958/misc_7.jpg +- data/imagenet-r/n02165456/sculpture_4.jpg +- data/imagenet-r/n03649909/sketch_20.jpg +- data/imagenet-r/n07873807/sculpture_2.jpg +- data/imagenet-r/n02138441/cartoon_20.jpg +- data/imagenet-r/n04266014/toy_0.jpg +- data/imagenet-r/n01443537/painting_16.jpg +- data/imagenet-r/n03947888/cartoon_13.jpg +- data/imagenet-r/n01748264/tattoo_3.jpg +- data/imagenet-r/n01632777/toy_2.jpg +- data/imagenet-r/n03124170/painting_1.jpg +- data/imagenet-r/n02206856/cartoon_55.jpg +- data/imagenet-r/n07745940/embroidery_7.jpg +- data/imagenet-r/n02814860/art_10.jpg +- data/imagenet-r/n02219486/graffiti_0.jpg +- data/imagenet-r/n04192698/sketch_2.jpg +- data/imagenet-r/n02391049/misc_44.jpg +- data/imagenet-r/n02119022/misc_117.jpg +- data/imagenet-r/n03372029/graphic_1.jpg +- data/imagenet-r/n02883205/sticker_2.jpg +- data/imagenet-r/n04325704/cartoon_10.jpg +- data/imagenet-r/n02165456/painting_2.jpg +- data/imagenet-r/n01514859/toy_12.jpg +- data/imagenet-r/n01632777/cartoon_4.jpg +- data/imagenet-r/n01616318/cartoon_22.jpg +- data/imagenet-r/n01910747/sticker_2.jpg +- data/imagenet-r/n01494475/misc_58.jpg +- data/imagenet-r/n07749582/painting_41.jpg +- data/imagenet-r/n01632777/deviantart_10.jpg +- data/imagenet-r/n03452741/cartoon_2.jpg +- data/imagenet-r/n02206856/graffiti_36.jpg +- data/imagenet-r/n02123045/cartoon_0.jpg +- data/imagenet-r/n01518878/cartoon_61.jpg +- data/imagenet-r/n02445715/origami_1.jpg +- data/imagenet-r/n02814860/videogame_12.jpg +- data/imagenet-r/n02129165/cartoon_7.jpg +- data/imagenet-r/n03272010/painting_15.jpg +- data/imagenet-r/n07880968/sketch_22.jpg +- data/imagenet-r/n02951358/sketch_3.jpg +- data/imagenet-r/n02951358/sketch_9.jpg +- data/imagenet-r/n02317335/sticker_1.jpg +- data/imagenet-r/n09835506/painting_1.jpg +- data/imagenet-r/n03775071/cartoon_6.jpg +- data/imagenet-r/n02129165/videogame_2.jpg +- data/imagenet-r/n02106662/misc_81.jpg +- data/imagenet-r/n04325704/cartoon_24.jpg +- data/imagenet-r/n07697537/misc_28.jpg +- data/imagenet-r/n04536866/cartoon_16.jpg +- data/imagenet-r/n01748264/deviantart_7.jpg +- data/imagenet-r/n02206856/art_16.jpg +- data/imagenet-r/n02088238/sketch_19.jpg +- data/imagenet-r/n03481172/cartoon_12.jpg +- data/imagenet-r/n01774750/origami_15.jpg +- data/imagenet-r/n04536866/videogame_8.jpg +- data/imagenet-r/n03452741/origami_2.jpg +- data/imagenet-r/n07742313/sculpture_0.jpg +- data/imagenet-r/n02980441/toy_5.jpg +- data/imagenet-r/n04310018/painting_24.jpg +- data/imagenet-r/n01910747/cartoon_17.jpg +- data/imagenet-r/n02410509/art_11.jpg +- data/imagenet-r/n02099712/misc_49.jpg +- data/imagenet-r/n02110958/cartoon_2.jpg +- data/imagenet-r/n07720875/painting_20.jpg +- data/imagenet-r/n04389033/videogame_22.jpg +- data/imagenet-r/n02655020/misc_62.jpg +- data/imagenet-r/n02445715/sketch_14.jpg +- data/imagenet-r/n07880968/sketch_3.jpg +- data/imagenet-r/n04266014/cartoon_38.jpg +- data/imagenet-r/n03594945/cartoon_8.jpg +- data/imagenet-r/n02823750/cartoon_21.jpg +- data/imagenet-r/n04536866/cartoon_17.jpg +- data/imagenet-r/n02091134/misc_79.jpg +- data/imagenet-r/n01910747/tattoo_12.jpg +- data/imagenet-r/n07734744/sketch_22.jpg +- data/imagenet-r/n03775071/sketch_9.jpg +- data/imagenet-r/n02219486/art_6.jpg +- data/imagenet-r/n01774750/sketch_16.jpg +- data/imagenet-r/n02364673/deviantart_0.jpg +- data/imagenet-r/n01694178/cartoon_21.jpg +- data/imagenet-r/n02106662/sketch_23.jpg +- data/imagenet-r/n03602883/misc_12.jpg +- data/imagenet-r/n02445715/painting_7.jpg +- data/imagenet-r/n02437616/misc_1.jpg +- data/imagenet-r/n03710193/misc_45.jpg +- data/imagenet-r/n01484850/sketch_7.jpg +- data/imagenet-r/n02206856/graffiti_4.jpg +- data/imagenet-r/n03930630/cartoon_2.jpg +- data/imagenet-r/n03481172/art_3.jpg +- data/imagenet-r/n01514859/cartoon_5.jpg +- data/imagenet-r/n04552348/videogame_14.jpg +- data/imagenet-r/n04591713/cartoon_2.jpg +- data/imagenet-r/n01855672/painting_19.jpg +- data/imagenet-r/n01677366/misc_13.jpg +- data/imagenet-r/n07753592/misc_122.jpg +- data/imagenet-r/n03495258/sketch_19.jpg +- data/imagenet-r/n02325366/misc_1.jpg +- data/imagenet-r/n01910747/graphic_17.jpg +- data/imagenet-r/n02088238/misc_102.jpg +- data/imagenet-r/n01882714/cartoon_4.jpg +- data/imagenet-r/n02395406/sculpture_27.jpg +- data/imagenet-r/n04310018/toy_3.jpg +- data/imagenet-r/n03594945/cartoon_6.jpg +- data/imagenet-r/n02526121/art_5.jpg +- data/imagenet-r/n03888257/deviantart_4.jpg +- data/imagenet-r/n03495258/sculpture_7.jpg +- data/imagenet-r/n01774750/deviantart_7.jpg +- data/imagenet-r/n04487394/sketch_4.jpg +- data/imagenet-r/n02939185/cartoon_9.jpg +- data/imagenet-r/n03372029/graffiti_0.jpg +- data/imagenet-r/n01443537/misc_2.jpg +- data/imagenet-r/n04522168/painting_16.jpg +- data/imagenet-r/n02814860/sketch_9.jpg +- data/imagenet-r/n03272010/art_5.jpg +- data/imagenet-r/n02948072/cartoon_71.jpg +- data/imagenet-r/n02226429/origami_15.jpg +- data/imagenet-r/n02951358/painting_18.jpg +- data/imagenet-r/n02051845/sketch_14.jpg +- data/imagenet-r/n02129165/deviantart_16.jpg +- data/imagenet-r/n02950826/cartoon_2.jpg +- data/imagenet-r/n07753592/sketch_8.jpg +- data/imagenet-r/n02088094/misc_49.jpg +- data/imagenet-r/n01616318/sketch_8.jpg +- data/imagenet-r/n02123045/painting_54.jpg +- data/imagenet-r/n02363005/painting_5.jpg +- data/imagenet-r/n02268443/misc_34.jpg +- data/imagenet-r/n02071294/sculpture_0.jpg +- data/imagenet-r/n02749479/misc_25.jpg +- data/imagenet-r/n01770393/origami_12.jpg +- data/imagenet-r/n07714990/deviantart_14.jpg +- data/imagenet-r/n07873807/deviantart_37.jpg +- data/imagenet-r/n02088238/tattoo_0.jpg +- data/imagenet-r/n04409515/art_1.jpg +- data/imagenet-r/n07714990/toy_13.jpg +- data/imagenet-r/n04536866/sculpture_4.jpg +- data/imagenet-r/n07720875/misc_1.jpg +- data/imagenet-r/n02110341/misc_150.jpg +- data/imagenet-r/n07734744/videogame_23.jpg +- data/imagenet-r/n01514859/toy_2.jpg +- data/imagenet-r/n04192698/deviantart_18.jpg +- data/imagenet-r/n07745940/origami_8.jpg +- data/imagenet-r/n03498962/videogame_2.jpg +- data/imagenet-r/n02395406/sketch_6.jpg +- data/imagenet-r/n07753275/painting_1.jpg +- data/imagenet-r/n02097298/misc_45.jpg +- data/imagenet-r/n01616318/sculpture_6.jpg +- data/imagenet-r/n02814860/cartoon_18.jpg +- data/imagenet-r/n07745940/misc_2.jpg +- data/imagenet-r/n03481172/misc_2.jpg +- data/imagenet-r/n02951358/videogame_5.jpg +- data/imagenet-r/n02948072/embroidery_6.jpg +- data/imagenet-r/n02883205/toy_17.jpg +- data/imagenet-r/n02007558/tattoo_64.jpg +- data/imagenet-r/n02510455/misc_27.jpg +- data/imagenet-r/n04254680/videogame_33.jpg +- data/imagenet-r/n01806143/sketch_14.jpg +- data/imagenet-r/n04591713/art_1.jpg +- data/imagenet-r/n04141076/cartoon_14.jpg +- data/imagenet-r/n02091134/misc_19.jpg +- data/imagenet-r/n02119022/misc_23.jpg +- data/imagenet-r/n01514859/sketch_8.jpg +- data/imagenet-r/n04310018/videogame_23.jpg +- data/imagenet-r/n03124170/sketch_3.jpg +- data/imagenet-r/n07714571/painting_21.jpg +- data/imagenet-r/n02128757/painting_2.jpg +- data/imagenet-r/n02398521/cartoon_7.jpg +- data/imagenet-r/n10565667/painting_1.jpg +- data/imagenet-r/n02096585/misc_108.jpg +- data/imagenet-r/n04389033/videogame_25.jpg +- data/imagenet-r/n04389033/deviantart_20.jpg +- data/imagenet-r/n07614500/toy_5.jpg +- data/imagenet-r/n03930630/toy_13.jpg +- data/imagenet-r/n01784675/toy_2.jpg +- data/imagenet-r/n02007558/embroidery_32.jpg +- data/imagenet-r/n02165456/painting_13.jpg +- data/imagenet-r/n02099712/sketch_2.jpg +- data/imagenet-r/n01518878/sculpture_9.jpg +- data/imagenet-r/n02445715/cartoon_20.jpg +- data/imagenet-r/n02802426/toy_1.jpg +- data/imagenet-r/n01694178/painting_10.jpg +- data/imagenet-r/n01630670/painting_0.jpg +- data/imagenet-r/n02906734/graffiti_0.jpg +- data/imagenet-r/n02219486/tattoo_20.jpg +- data/imagenet-r/n02437616/sticker_5.jpg +- data/imagenet-r/n02134084/misc_150.jpg +- data/imagenet-r/n02966193/sketch_0.jpg +- data/imagenet-r/n01860187/tattoo_5.jpg +- data/imagenet-r/n02071294/painting_7.jpg +- data/imagenet-r/n02445715/tattoo_4.jpg +- data/imagenet-r/n02165456/toy_33.jpg +- data/imagenet-r/n01694178/deviantart_4.jpg +- data/imagenet-r/n02051845/deviantart_14.jpg +- data/imagenet-r/n02123045/graffiti_0.jpg +- data/imagenet-r/n02948072/origami_9.jpg +- data/imagenet-r/n07614500/tattoo_2.jpg +- data/imagenet-r/n02051845/sketch_24.jpg +- data/imagenet-r/n02129165/deviantart_29.jpg +- data/imagenet-r/n12267677/misc_114.jpg +- data/imagenet-r/n03676483/origami_0.jpg +- data/imagenet-r/n02980441/sketch_7.jpg +- data/imagenet-r/n02437616/deviantart_7.jpg +- data/imagenet-r/n03888257/deviantart_3.jpg +- data/imagenet-r/n02071294/art_16.jpg +- data/imagenet-r/n02123045/sketch_12.jpg +- data/imagenet-r/n01820546/deviantart_25.jpg +- data/imagenet-r/n02410509/toy_2.jpg +- data/imagenet-r/n03124170/cartoon_39.jpg +- data/imagenet-r/n02066245/art_8.jpg +- data/imagenet-r/n02106662/misc_60.jpg +- data/imagenet-r/n01494475/misc_51.jpg +- data/imagenet-r/n01494475/sketch_4.jpg +- data/imagenet-r/n04275548/sketch_18.jpg +- data/imagenet-r/n02510455/misc_76.jpg +- data/imagenet-r/n02085620/misc_19.jpg +- data/imagenet-r/n02119022/misc_99.jpg +- data/imagenet-r/n04275548/embroidery_0.jpg +- data/imagenet-r/n02883205/toy_18.jpg +- data/imagenet-r/n07720875/art_5.jpg +- data/imagenet-r/n04192698/cartoon_10.jpg +- data/imagenet-r/n01986214/sculpture_1.jpg +- data/imagenet-r/n07695742/misc_11.jpg +- data/imagenet-r/n01630670/graphic_2.jpg +- data/imagenet-r/n03345487/videogame_12.jpg +- data/imagenet-r/n07697537/sketch_2.jpg +- data/imagenet-r/n02808440/cartoon_6.jpg +- data/imagenet-r/n03372029/sketch_22.jpg +- data/imagenet-r/n02233338/misc_45.jpg +- data/imagenet-r/n02398521/cartoon_17.jpg +- data/imagenet-r/n01614925/painting_18.jpg +- data/imagenet-r/n04465501/painting_0.jpg +- data/imagenet-r/n01855672/sketch_3.jpg +- data/imagenet-r/n02480495/toy_3.jpg +- data/imagenet-r/n01514859/cartoon_30.jpg +- data/imagenet-r/n02363005/sculpture_6.jpg +- data/imagenet-r/n01644373/painting_9.jpg +- data/imagenet-r/n04552348/art_12.jpg +- data/imagenet-r/n01784675/sketch_4.jpg +- data/imagenet-r/n02110341/misc_34.jpg +- data/imagenet-r/n03124170/tattoo_15.jpg +- data/imagenet-r/n07734744/toy_8.jpg +- data/imagenet-r/n01910747/cartoon_14.jpg +- data/imagenet-r/n07697313/cartoon_36.jpg +- data/imagenet-r/n02480495/painting_3.jpg +- data/imagenet-r/n01843383/deviantart_3.jpg +- data/imagenet-r/n02086240/videogame_0.jpg +- data/imagenet-r/n02423022/graffiti_0.jpg +- data/imagenet-r/n01494475/misc_125.jpg +- data/imagenet-r/n02325366/misc_10.jpg +- data/imagenet-r/n04141076/sketch_22.jpg +- data/imagenet-r/n04310018/videogame_27.jpg +- data/imagenet-r/n02088364/misc_42.jpg +- data/imagenet-r/n02096585/tattoo_7.jpg +- data/imagenet-r/n02110341/misc_15.jpg +- data/imagenet-r/n01614925/origami_0.jpg +- data/imagenet-r/n02091134/misc_84.jpg +- data/imagenet-r/n02980441/videogame_9.jpg +- data/imagenet-r/n01632777/toy_11.jpg +- data/imagenet-r/n01847000/embroidery_0.jpg +- data/imagenet-r/n02655020/deviantart_17.jpg +- data/imagenet-r/n02317335/tattoo_24.jpg +- data/imagenet-r/n07753592/sketch_3.jpg +- data/imagenet-r/n03372029/sculpture_35.jpg +- data/imagenet-r/n01774750/sculpture_1.jpg +- data/imagenet-r/n02134084/sketch_23.jpg +- data/imagenet-r/n03345487/sketch_15.jpg +- data/imagenet-r/n01820546/painting_23.jpg +- data/imagenet-r/n02364673/cartoon_19.jpg +- data/imagenet-r/n04552348/art_14.jpg +- data/imagenet-r/n01774750/origami_9.jpg +- data/imagenet-r/n02363005/cartoon_16.jpg +- data/imagenet-r/n01644373/painting_5.jpg +- data/imagenet-r/n02526121/misc_3.jpg +- data/imagenet-r/n02086240/misc_42.jpg +- data/imagenet-r/n02129604/tattoo_40.jpg +- data/imagenet-r/n02236044/sketch_21.jpg +- data/imagenet-r/n02356798/sketch_21.jpg +- data/imagenet-r/n07873807/deviantart_27.jpg +- data/imagenet-r/n02279972/tattoo_20.jpg +- data/imagenet-r/n02007558/art_6.jpg +- data/imagenet-r/n04147183/deviantart_12.jpg +- data/imagenet-r/n02134084/misc_28.jpg +- data/imagenet-r/n03424325/videogame_16.jpg +- data/imagenet-r/n04146614/sketch_7.jpg +- data/imagenet-r/n01910747/cartoon_19.jpg +- data/imagenet-r/n07749582/graphic_4.jpg +- data/imagenet-r/n02094433/sketch_9.jpg +- data/imagenet-r/n01614925/tattoo_20.jpg +- data/imagenet-r/n03424325/misc_59.jpg +- data/imagenet-r/n02395406/embroidery_6.jpg +- data/imagenet-r/n07753592/misc_17.jpg +- data/imagenet-r/n02395406/toy_23.jpg +- data/imagenet-r/n02363005/toy_7.jpg +- data/imagenet-r/n02279972/tattoo_1.jpg +- data/imagenet-r/n01882714/painting_18.jpg +- data/imagenet-r/n01986214/sketch_7.jpg +- data/imagenet-r/n04389033/videogame_44.jpg +- data/imagenet-r/n07695742/graffiti_2.jpg +- data/imagenet-r/n01614925/deviantart_43.jpg +- data/imagenet-r/n02363005/cartoon_4.jpg +- data/imagenet-r/n01632777/deviantart_24.jpg +- data/imagenet-r/n07734744/painting_12.jpg +- data/imagenet-r/n12267677/misc_9.jpg +- data/imagenet-r/n03424325/misc_83.jpg +- data/imagenet-r/n02099601/misc_107.jpg +- data/imagenet-r/n02106550/misc_8.jpg +- data/imagenet-r/n01855672/deviantart_2.jpg +- data/imagenet-r/n02110341/sketch_16.jpg +- data/imagenet-r/n02233338/misc_40.jpg +- data/imagenet-r/n07753275/graphic_7.jpg +- data/imagenet-r/n02096585/tattoo_17.jpg +- data/imagenet-r/n01632777/sketch_10.jpg +- data/imagenet-r/n02165456/tattoo_34.jpg +- data/imagenet-r/n02363005/cartoon_29.jpg +- data/imagenet-r/n01694178/sketch_6.jpg +- data/imagenet-r/n02510455/misc_129.jpg +- data/imagenet-r/n07714571/painting_0.jpg +- data/imagenet-r/n01833805/graffiti_0.jpg +- data/imagenet-r/n02099601/misc_52.jpg +- data/imagenet-r/n02843684/painting_4.jpg +- data/imagenet-r/n02391049/misc_59.jpg +- data/imagenet-r/n02110958/painting_20.jpg +- data/imagenet-r/n04389033/graffiti_13.jpg +- data/imagenet-r/n01770393/cartoon_13.jpg +- data/imagenet-r/n01944390/misc_20.jpg +- data/imagenet-r/n02110958/cartoon_23.jpg +- data/imagenet-r/n02841315/sculpture_8.jpg +- data/imagenet-r/n07695742/misc_5.jpg +- data/imagenet-r/n02088364/sketch_18.jpg +- data/imagenet-r/n02236044/tattoo_21.jpg +- data/imagenet-r/n02110958/cartoon_76.jpg +- data/imagenet-r/n04141076/deviantart_15.jpg +- data/imagenet-r/n04192698/cartoon_3.jpg +- data/imagenet-r/n02236044/art_8.jpg +- data/imagenet-r/n02797295/misc_69.jpg +- data/imagenet-r/n07873807/cartoon_1.jpg +- data/imagenet-r/n02007558/graphic_7.jpg +- data/imagenet-r/n02966193/deviantart_6.jpg +- data/imagenet-r/n02071294/tattoo_20.jpg +- data/imagenet-r/n01518878/toy_10.jpg +- data/imagenet-r/n01616318/deviantart_11.jpg +- data/imagenet-r/n09472597/videogame_35.jpg +- data/imagenet-r/n02128757/art_5.jpg +- data/imagenet-r/n02841315/misc_5.jpg +- data/imagenet-r/n07720875/cartoon_5.jpg +- data/imagenet-r/n07753592/misc_87.jpg +- data/imagenet-r/n02009912/misc_54.jpg +- data/imagenet-r/n02113799/sketch_10.jpg +- data/imagenet-r/n01694178/painting_5.jpg +- data/imagenet-r/n01847000/graphic_5.jpg +- data/imagenet-r/n03372029/sculpture_18.jpg +- data/imagenet-r/n03947888/graphic_0.jpg +- data/imagenet-r/n01494475/misc_126.jpg +- data/imagenet-r/n03124170/graffiti_8.jpg +- data/imagenet-r/n02129165/sculpture_25.jpg +- data/imagenet-r/n07753275/painting_2.jpg +- data/imagenet-r/n07734744/sketch_21.jpg +- data/imagenet-r/n02481823/art_6.jpg +- data/imagenet-r/n02607072/misc_57.jpg +- data/imagenet-r/n02346627/toy_1.jpg +- data/imagenet-r/n03424325/misc_29.jpg +- data/imagenet-r/n01494475/sketch_19.jpg +- data/imagenet-r/n02007558/painting_3.jpg +- data/imagenet-r/n03372029/graphic_2.jpg +- data/imagenet-r/n02445715/sticker_2.jpg +- data/imagenet-r/n07745940/sketch_5.jpg +- data/imagenet-r/n01616318/painting_3.jpg +- data/imagenet-r/n02236044/origami_24.jpg +- data/imagenet-r/n02206856/tattoo_17.jpg +- data/imagenet-r/n01694178/videogame_2.jpg +- data/imagenet-r/n02108915/misc_119.jpg +- data/imagenet-r/n01770393/graffiti_8.jpg +- data/imagenet-r/n02092339/sketch_19.jpg +- data/imagenet-r/n02526121/sculpture_8.jpg +- data/imagenet-r/n02138441/painting_37.jpg +- data/imagenet-r/n02129165/toy_21.jpg +- data/imagenet-r/n07753275/misc_3.jpg +- data/imagenet-r/n01860187/painting_3.jpg +- data/imagenet-r/n01855672/sketch_1.jpg +- data/imagenet-r/n04310018/toy_7.jpg +- data/imagenet-r/n04141076/cartoon_22.jpg +- data/imagenet-r/n02110958/sculpture_5.jpg +- data/imagenet-r/n02219486/sketch_1.jpg +- data/imagenet-r/n01694178/misc_2.jpg +- data/imagenet-r/n03594945/sketch_2.jpg +- data/imagenet-r/n03594945/toy_14.jpg +- data/imagenet-r/n02138441/toy_5.jpg +- data/imagenet-r/n04409515/deviantart_16.jpg +- data/imagenet-r/n01484850/origami_7.jpg +- data/imagenet-r/n02110958/misc_4.jpg +- data/imagenet-r/n02110958/cartoon_42.jpg +- data/imagenet-r/n04141076/cartoon_5.jpg +- data/imagenet-r/n02129165/tattoo_55.jpg +- data/imagenet-r/n02391049/misc_11.jpg +- data/imagenet-r/n04086273/tattoo_54.jpg +- data/imagenet-r/n03494278/sketch_5.jpg +- data/imagenet-r/n03345487/deviantart_1.jpg +- data/imagenet-r/n04465501/graphic_0.jpg +- data/imagenet-r/n09472597/art_8.jpg +- data/imagenet-r/n07714571/deviantart_7.jpg +- data/imagenet-r/n03773504/graphic_4.jpg +- data/imagenet-r/n02939185/art_2.jpg +- data/imagenet-r/n03272010/painting_21.jpg +- data/imagenet-r/n02445715/graffiti_11.jpg +- data/imagenet-r/n02395406/sketch_13.jpg +- data/imagenet-r/n02110185/painting_14.jpg +- data/imagenet-r/n02948072/cartoon_30.jpg +- data/imagenet-r/n01632777/sketch_17.jpg +- data/imagenet-r/n02486410/sketch_6.jpg +- data/imagenet-r/n01882714/deviantart_22.jpg +- data/imagenet-r/n02841315/art_5.jpg +- data/imagenet-r/n01644373/graffiti_1.jpg +- data/imagenet-r/n02130308/tattoo_0.jpg +- data/imagenet-r/n02769748/cartoon_25.jpg +- data/imagenet-r/n04389033/sketch_4.jpg +- data/imagenet-r/n07697313/misc_11.jpg +- data/imagenet-r/n04536866/deviantart_26.jpg +- data/imagenet-r/n02165456/tattoo_48.jpg +- data/imagenet-r/n02226429/graffiti_6.jpg +- data/imagenet-r/n01484850/tattoo_15.jpg +- data/imagenet-r/n04133789/cartoon_27.jpg +- data/imagenet-r/n09835506/misc_45.jpg +- data/imagenet-r/n01882714/tattoo_17.jpg +- data/imagenet-r/n03467068/art_1.jpg +- data/imagenet-r/n01644373/deviantart_5.jpg +- data/imagenet-r/n02749479/misc_18.jpg +- data/imagenet-r/n04409515/art_3.jpg +- data/imagenet-r/n01882714/painting_6.jpg +- data/imagenet-r/n09835506/misc_24.jpg +- data/imagenet-r/n12267677/misc_118.jpg +- data/imagenet-r/n01518878/cartoon_53.jpg +- data/imagenet-r/n02510455/misc_108.jpg +- data/imagenet-r/n02112018/sketch_18.jpg +- data/imagenet-r/n02106030/painting_9.jpg +- data/imagenet-r/n03710193/misc_11.jpg +- data/imagenet-r/n02129165/cartoon_16.jpg +- data/imagenet-r/n02097298/sketch_9.jpg +- data/imagenet-r/n04266014/deviantart_13.jpg +- data/imagenet-r/n04552348/deviantart_12.jpg +- data/imagenet-r/n02672831/cartoon_3.jpg +- data/imagenet-r/n01616318/sculpture_4.jpg +- data/imagenet-r/n01484850/tattoo_6.jpg +- data/imagenet-r/n02085620/tattoo_11.jpg +- data/imagenet-r/n04192698/sketch_21.jpg +- data/imagenet-r/n02094433/sketch_0.jpg +- data/imagenet-r/n09835506/sketch_3.jpg +- data/imagenet-r/n02129604/graffiti_2.jpg +- data/imagenet-r/n02123045/cartoon_27.jpg +- data/imagenet-r/n02793495/embroidery_3.jpg +- data/imagenet-r/n07697313/art_14.jpg +- data/imagenet-r/n02510455/misc_7.jpg +- data/imagenet-r/n02109525/misc_13.jpg +- data/imagenet-r/n02883205/art_6.jpg +- data/imagenet-r/n02114367/sketch_4.jpg +- data/imagenet-r/n04118538/cartoon_23.jpg +- data/imagenet-r/n04536866/art_0.jpg +- data/imagenet-r/n01518878/sketch_18.jpg +- data/imagenet-r/n07745940/toy_21.jpg +- data/imagenet-r/n02398521/cartoon_10.jpg +- data/imagenet-r/n04266014/sticker_2.jpg +- data/imagenet-r/n02906734/graffiti_6.jpg +- data/imagenet-r/n03710193/misc_47.jpg +- data/imagenet-r/n02317335/tattoo_31.jpg +- data/imagenet-r/n01774750/deviantart_14.jpg +- data/imagenet-r/n02655020/misc_71.jpg +- data/imagenet-r/n01632777/toy_6.jpg +- data/imagenet-r/n02119022/videogame_4.jpg +- data/imagenet-r/n02128385/sculpture_6.jpg +- data/imagenet-r/n02165456/misc_10.jpg +- data/imagenet-r/n01443537/art_10.jpg +- data/imagenet-r/n02268443/misc_49.jpg +- data/imagenet-r/n07734744/sketch_8.jpg +- data/imagenet-r/n02948072/cartoon_61.jpg +- data/imagenet-r/n03649909/art_0.jpg +- data/imagenet-r/n01534433/sketch_7.jpg +- data/imagenet-r/n02108089/misc_18.jpg +- data/imagenet-r/n02447366/misc_8.jpg +- data/imagenet-r/n01616318/cartoon_28.jpg +- data/imagenet-r/n01614925/painting_29.jpg +- data/imagenet-r/n02814860/art_15.jpg +- data/imagenet-r/n02909870/videogame_2.jpg +- data/imagenet-r/n02110185/art_9.jpg +- data/imagenet-r/n02423022/art_5.jpg +- data/imagenet-r/n02814860/art_22.jpg +- data/imagenet-r/n07714990/cartoon_28.jpg +- data/imagenet-r/n03947888/cartoon_0.jpg +- data/imagenet-r/n04310018/deviantart_8.jpg +- data/imagenet-r/n04487394/deviantart_2.jpg +- data/imagenet-r/n02108915/misc_100.jpg +- data/imagenet-r/n07745940/deviantart_1.jpg +- data/imagenet-r/n02206856/embroidery_11.jpg +- data/imagenet-r/n02056570/tattoo_0.jpg +- data/imagenet-r/n02108915/misc_45.jpg +- data/imagenet-r/n02447366/toy_0.jpg +- data/imagenet-r/n03930630/cartoon_9.jpg +- data/imagenet-r/n01694178/sculpture_1.jpg +- data/imagenet-r/n01820546/videogame_0.jpg +- data/imagenet-r/n04133789/sketch_18.jpg +- data/imagenet-r/n01833805/tattoo_28.jpg +- data/imagenet-r/n01910747/painting_7.jpg +- data/imagenet-r/n07742313/videogame_9.jpg +- data/imagenet-r/n03710193/misc_53.jpg +- data/imagenet-r/n07734744/videogame_6.jpg +- data/imagenet-r/n01986214/sketch_5.jpg +- data/imagenet-r/n01806143/graphic_5.jpg +- data/imagenet-r/n02071294/art_8.jpg +- data/imagenet-r/n02823750/graphic_1.jpg +- data/imagenet-r/n02672831/sketch_3.jpg +- data/imagenet-r/n02091134/misc_27.jpg +- data/imagenet-r/n02206856/art_13.jpg +- data/imagenet-r/n02481823/sculpture_12.jpg +- data/imagenet-r/n02117135/sketch_15.jpg +- data/imagenet-r/n02483362/sketch_5.jpg +- data/imagenet-r/n02951358/sketch_19.jpg +- data/imagenet-r/n02007558/misc_11.jpg +- data/imagenet-r/n02190166/sticker_10.jpg +- data/imagenet-r/n02106662/misc_97.jpg +- data/imagenet-r/n09472597/cartoon_15.jpg +- data/imagenet-r/n01986214/cartoon_18.jpg +- data/imagenet-r/n04141076/painting_2.jpg +- data/imagenet-r/n07714990/deviantart_27.jpg +- data/imagenet-r/n04552348/sketch_2.jpg +- data/imagenet-r/n02129604/deviantart_9.jpg +- data/imagenet-r/n07714990/cartoon_33.jpg +- data/imagenet-r/n01806143/embroidery_9.jpg +- data/imagenet-r/n07714990/cartoon_24.jpg +- data/imagenet-r/n04266014/cartoon_20.jpg +- data/imagenet-r/n03710193/sketch_14.jpg +- data/imagenet-r/n02206856/cartoon_71.jpg +- data/imagenet-r/n02909870/painting_7.jpg +- data/imagenet-r/n02165456/tattoo_33.jpg +- data/imagenet-r/n02130308/painting_19.jpg +- data/imagenet-r/n02410509/sculpture_9.jpg +- data/imagenet-r/n02346627/sketch_16.jpg +- data/imagenet-r/n07695742/misc_6.jpg +- data/imagenet-r/n02346627/misc_0.jpg +- data/imagenet-r/n09835506/misc_22.jpg +- data/imagenet-r/n09835506/deviantart_22.jpg +- data/imagenet-r/n01494475/sketch_20.jpg +- data/imagenet-r/n02510455/videogame_1.jpg +- data/imagenet-r/n02268443/misc_111.jpg +- data/imagenet-r/n04536866/deviantart_23.jpg +- data/imagenet-r/n03775071/toy_0.jpg +- data/imagenet-r/n02802426/misc_4.jpg +- data/imagenet-r/n01518878/graffiti_5.jpg +- data/imagenet-r/n02098286/misc_25.jpg +- data/imagenet-r/n02526121/art_4.jpg +- data/imagenet-r/n02951358/art_2.jpg +- data/imagenet-r/n03947888/painting_0.jpg +- data/imagenet-r/n07720875/deviantart_18.jpg +- data/imagenet-r/n01833805/graphic_10.jpg +- data/imagenet-r/n03594945/videogame_20.jpg +- data/imagenet-r/n07697313/misc_6.jpg +- data/imagenet-r/n02071294/tattoo_19.jpg +- data/imagenet-r/n07753275/painting_14.jpg +- data/imagenet-r/n02802426/cartoon_10.jpg +- data/imagenet-r/n03930630/videogame_8.jpg +- data/imagenet-r/n02317335/art_4.jpg +- data/imagenet-r/n02108089/misc_28.jpg +- data/imagenet-r/n02391049/deviantart_12.jpg +- data/imagenet-r/n07697537/misc_95.jpg +- data/imagenet-r/n01494475/misc_145.jpg +- data/imagenet-r/n01630670/toy_3.jpg +- data/imagenet-r/n02481823/cartoon_10.jpg +- data/imagenet-r/n07734744/deviantart_29.jpg +- data/imagenet-r/n02948072/origami_10.jpg +- data/imagenet-r/n02364673/sketch_21.jpg +- data/imagenet-r/n02391049/sketch_3.jpg +- data/imagenet-r/n02769748/cartoon_10.jpg +- data/imagenet-r/n03649909/sketch_13.jpg +- data/imagenet-r/n04146614/videogame_25.jpg +- data/imagenet-r/n01860187/sketch_3.jpg +- data/imagenet-r/n04275548/painting_2.jpg +- data/imagenet-r/n02134084/misc_142.jpg +- data/imagenet-r/n03773504/misc_0.jpg +- data/imagenet-r/n02526121/sculpture_10.jpg +- data/imagenet-r/n07614500/cartoon_4.jpg +- data/imagenet-r/n02841315/cartoon_22.jpg +- data/imagenet-r/n01614925/deviantart_25.jpg +- data/imagenet-r/n02966193/sketch_17.jpg +- data/imagenet-r/n02364673/deviantart_3.jpg +- data/imagenet-r/n02948072/cartoon_57.jpg +- data/imagenet-r/n09835506/sculpture_4.jpg +- data/imagenet-r/n07742313/deviantart_9.jpg +- data/imagenet-r/n04347754/sketch_21.jpg +- data/imagenet-r/n02206856/sticker_5.jpg +- data/imagenet-r/n01534433/painting_4.jpg +- data/imagenet-r/n02966193/embroidery_1.jpg +- data/imagenet-r/n07873807/toy_2.jpg +- data/imagenet-r/n03124170/deviantart_3.jpg +- data/imagenet-r/n01983481/misc_20.jpg +- data/imagenet-r/n07768694/deviantart_7.jpg +- data/imagenet-r/n03345487/cartoon_2.jpg +- data/imagenet-r/n09472597/graphic_5.jpg +- data/imagenet-r/n01833805/graphic_4.jpg +- data/imagenet-r/n01944390/tattoo_12.jpg +- data/imagenet-r/n02007558/sticker_3.jpg +- data/imagenet-r/n07697313/cartoon_42.jpg +- data/imagenet-r/n03594945/graffiti_0.jpg +- data/imagenet-r/n04146614/sketch_3.jpg +- data/imagenet-r/n03124170/sketch_12.jpg +- data/imagenet-r/n01677366/sketch_6.jpg +- data/imagenet-r/n10565667/graffiti_3.jpg +- data/imagenet-r/n04409515/sketch_7.jpg +- data/imagenet-r/n04086273/misc_2.jpg +- data/imagenet-r/n01644373/tattoo_3.jpg +- data/imagenet-r/n02219486/graffiti_7.jpg +- data/imagenet-r/n04591713/painting_37.jpg +- data/imagenet-r/n04147183/sketch_10.jpg +- data/imagenet-r/n01534433/sketch_2.jpg +- data/imagenet-r/n02119022/misc_60.jpg +- data/imagenet-r/n01748264/sketch_17.jpg +- data/imagenet-r/n01616318/sketch_21.jpg +- data/imagenet-r/n04522168/sketch_5.jpg +- data/imagenet-r/n01843383/art_2.jpg +- data/imagenet-r/n07614500/painting_11.jpg +- data/imagenet-r/n03124170/graffiti_17.jpg +- data/imagenet-r/n01833805/tattoo_61.jpg +- data/imagenet-r/n01630670/painting_4.jpg +- data/imagenet-r/n01770393/sketch_21.jpg +- data/imagenet-r/n02226429/cartoon_16.jpg +- data/imagenet-r/n02088238/sketch_4.jpg +- data/imagenet-r/n01882714/painting_7.jpg +- data/imagenet-r/n01443537/videogame_8.jpg +- data/imagenet-r/n02802426/misc_0.jpg +- data/imagenet-r/n03930630/sketch_16.jpg +- data/imagenet-r/n01910747/deviantart_13.jpg +- data/imagenet-r/n02097298/misc_72.jpg +- data/imagenet-r/n02814860/misc_5.jpg +- data/imagenet-r/n01910747/sketch_9.jpg +- data/imagenet-r/n02129604/toy_9.jpg +- data/imagenet-r/n02110958/cartoon_56.jpg +- data/imagenet-r/n02883205/toy_15.jpg +- data/imagenet-r/n02088364/misc_12.jpg +- data/imagenet-r/n02909870/cartoon_16.jpg +- data/imagenet-r/n02088364/sketch_13.jpg +- data/imagenet-r/n02808440/sketch_10.jpg +- data/imagenet-r/n02097298/misc_42.jpg +- data/imagenet-r/n02236044/art_5.jpg +- data/imagenet-r/n03272010/painting_9.jpg +- data/imagenet-r/n07714990/cartoon_20.jpg +- data/imagenet-r/n02939185/sketch_14.jpg +- data/imagenet-r/n02129165/cartoon_3.jpg +- data/imagenet-r/n02802426/tattoo_17.jpg +- data/imagenet-r/n02086240/misc_37.jpg +- data/imagenet-r/n02814860/deviantart_10.jpg +- data/imagenet-r/n07714990/deviantart_19.jpg +- data/imagenet-r/n01644373/graphic_1.jpg +- data/imagenet-r/n02007558/cartoon_25.jpg +- data/imagenet-r/n02134084/videogame_2.jpg +- data/imagenet-r/n01847000/cartoon_9.jpg +- data/imagenet-r/n02226429/painting_7.jpg +- data/imagenet-r/n04254680/videogame_12.jpg +- data/imagenet-r/n01748264/tattoo_25.jpg +- data/imagenet-r/n02108089/misc_9.jpg +- data/imagenet-r/n02096585/tattoo_11.jpg +- data/imagenet-r/n02071294/painting_17.jpg +- data/imagenet-r/n01677366/misc_10.jpg +- data/imagenet-r/n02009912/misc_35.jpg +- data/imagenet-r/n02980441/deviantart_1.jpg +- data/imagenet-r/n01843383/painting_5.jpg +- data/imagenet-r/n03630383/sketch_20.jpg +- data/imagenet-r/n04086273/art_2.jpg +- data/imagenet-r/n02480495/cartoon_18.jpg +- data/imagenet-r/n12267677/deviantart_24.jpg +- data/imagenet-r/n03452741/toy_5.jpg +- data/imagenet-r/n04086273/videogame_14.jpg +- data/imagenet-r/n01833805/sketch_20.jpg +- data/imagenet-r/n01774750/toy_4.jpg +- data/imagenet-r/n02843684/embroidery_5.jpg +- data/imagenet-r/n02128385/painting_1.jpg +- data/imagenet-r/n02317335/painting_7.jpg +- data/imagenet-r/n02233338/misc_8.jpg +- data/imagenet-r/n02106662/misc_55.jpg +- data/imagenet-r/n03272010/misc_1.jpg +- data/imagenet-r/n04141076/sculpture_2.jpg +- data/imagenet-r/n04465501/tattoo_10.jpg +- data/imagenet-r/n02268443/misc_162.jpg +- data/imagenet-r/n02445715/toy_15.jpg +- data/imagenet-r/n02088094/sketch_9.jpg +- data/imagenet-r/n03372029/deviantart_0.jpg +- data/imagenet-r/n01944390/misc_121.jpg +- data/imagenet-r/n02007558/tattoo_2.jpg +- data/imagenet-r/n07873807/sculpture_3.jpg +- data/imagenet-r/n07768694/sculpture_0.jpg +- data/imagenet-r/n02701002/art_0.jpg +- data/imagenet-r/n04552348/videogame_5.jpg +- data/imagenet-r/n07697313/cartoon_10.jpg +- data/imagenet-r/n02526121/cartoon_23.jpg +- data/imagenet-r/n01833805/tattoo_32.jpg +- data/imagenet-r/n02814860/painting_13.jpg +- data/imagenet-r/n03676483/sketch_7.jpg +- data/imagenet-r/n01944390/tattoo_14.jpg +- data/imagenet-r/n03947888/toy_3.jpg +- data/imagenet-r/n02113799/sketch_17.jpg +- data/imagenet-r/n03424325/misc_15.jpg +- data/imagenet-r/n02071294/art_5.jpg +- data/imagenet-r/n02486410/painting_9.jpg +- data/imagenet-r/n01910747/cartoon_8.jpg +- data/imagenet-r/n01833805/tattoo_90.jpg +- data/imagenet-r/n07745940/art_12.jpg +- data/imagenet-r/n02325366/misc_15.jpg +- data/imagenet-r/n02007558/deviantart_1.jpg +- data/imagenet-r/n01630670/cartoon_6.jpg +- data/imagenet-r/n02130308/graffiti_6.jpg +- data/imagenet-r/n02410509/origami_15.jpg +- data/imagenet-r/n01770393/sketch_16.jpg +- data/imagenet-r/n04409515/deviantart_10.jpg +- data/imagenet-r/n03424325/videogame_20.jpg +- data/imagenet-r/n01843383/painting_40.jpg +- data/imagenet-r/n02526121/cartoon_26.jpg +- data/imagenet-r/n03124170/cartoon_9.jpg +- data/imagenet-r/n02939185/cartoon_2.jpg +- data/imagenet-r/n02091134/misc_9.jpg +- data/imagenet-r/n02948072/misc_9.jpg +- data/imagenet-r/n01944390/misc_97.jpg +- data/imagenet-r/n04552348/videogame_9.jpg +- data/imagenet-r/n02823750/painting_3.jpg +- data/imagenet-r/n01484850/videogame_10.jpg +- data/imagenet-r/n09472597/cartoon_22.jpg +- data/imagenet-r/n02226429/sculpture_5.jpg +- data/imagenet-r/n01531178/sketch_7.jpg +- data/imagenet-r/n01632777/toy_28.jpg +- data/imagenet-r/n01770393/tattoo_10.jpg +- data/imagenet-r/n07873807/sketch_17.jpg +- data/imagenet-r/n02843684/sketch_5.jpg +- data/imagenet-r/n01614925/deviantart_31.jpg +- data/imagenet-r/n01820546/cartoon_3.jpg +- data/imagenet-r/n07880968/deviantart_6.jpg +- data/imagenet-r/n03272010/painting_14.jpg +- data/imagenet-r/n01910747/painting_32.jpg +- data/imagenet-r/n01843383/painting_55.jpg +- data/imagenet-r/n02071294/painting_22.jpg +- data/imagenet-r/n01498041/cartoon_3.jpg +- data/imagenet-r/n01774750/sketch_7.jpg +- data/imagenet-r/n04389033/sketch_11.jpg +- data/imagenet-r/n01770393/sticker_1.jpg +- data/imagenet-r/n01531178/cartoon_2.jpg +- data/imagenet-r/n02088466/misc_3.jpg +- data/imagenet-r/n01944390/misc_56.jpg +- data/imagenet-r/n12267677/deviantart_18.jpg +- data/imagenet-r/n04591713/tattoo_1.jpg +- data/imagenet-r/n01484850/painting_25.jpg +- data/imagenet-r/n07720875/deviantart_13.jpg +- data/imagenet-r/n02233338/misc_10.jpg +- data/imagenet-r/n02086240/sketch_21.jpg +- data/imagenet-r/n01494475/misc_86.jpg +- data/imagenet-r/n04536866/deviantart_9.jpg +- data/imagenet-r/n07753275/sketch_10.jpg +- data/imagenet-r/n01514859/painting_32.jpg +- data/imagenet-r/n01494475/misc_35.jpg +- data/imagenet-r/n04409515/videogame_11.jpg +- data/imagenet-r/n01630670/graphic_1.jpg +- data/imagenet-r/n02423022/sculpture_16.jpg +- data/imagenet-r/n02701002/sketch_6.jpg +- data/imagenet-r/n07920052/graphic_4.jpg +- data/imagenet-r/n03372029/sculpture_11.jpg +- data/imagenet-r/n03481172/art_0.jpg +- data/imagenet-r/n07768694/painting_2.jpg +- data/imagenet-r/n01484850/misc_7.jpg +- data/imagenet-r/n04465501/painting_1.jpg +- data/imagenet-r/n02655020/misc_79.jpg +- data/imagenet-r/n07614500/sketch_15.jpg +- data/imagenet-r/n07753592/misc_47.jpg +- data/imagenet-r/n03495258/deviantart_6.jpg +- data/imagenet-r/n01494475/deviantart_4.jpg +- data/imagenet-r/n09472597/sketch_34.jpg +- data/imagenet-r/n07614500/tattoo_13.jpg +- data/imagenet-r/n01847000/tattoo_5.jpg +- data/imagenet-r/n02607072/misc_3.jpg +- data/imagenet-r/n03498962/sketch_2.jpg +- data/imagenet-r/n02099712/misc_11.jpg +- data/imagenet-r/n02123045/painting_9.jpg +- data/imagenet-r/n01833805/tattoo_6.jpg +- data/imagenet-r/n02097298/misc_57.jpg +- data/imagenet-r/n07734744/art_8.jpg +- data/imagenet-r/n02088364/misc_47.jpg +- data/imagenet-r/n02226429/cartoon_13.jpg +- data/imagenet-r/n02939185/cartoon_4.jpg +- data/imagenet-r/n02106030/art_2.jpg +- data/imagenet-r/n02007558/graffiti_35.jpg +- data/imagenet-r/n02108915/sketch_14.jpg +- data/imagenet-r/n07697537/misc_90.jpg +- data/imagenet-r/n02486410/sketch_17.jpg +- data/imagenet-r/n03424325/misc_65.jpg +- data/imagenet-r/n02437616/videogame_3.jpg +- data/imagenet-r/n02841315/misc_1.jpg +- data/imagenet-r/n04141076/cartoon_33.jpg +- data/imagenet-r/n04389033/sticker_3.jpg +- data/imagenet-r/n03775071/cartoon_10.jpg +- data/imagenet-r/n02085620/misc_48.jpg +- data/imagenet-r/n03124170/art_9.jpg +- data/imagenet-r/n02802426/sculpture_4.jpg +- data/imagenet-r/n03649909/sketch_12.jpg +- data/imagenet-r/n03602883/misc_53.jpg +- data/imagenet-r/n01843383/deviantart_8.jpg +- data/imagenet-r/n01694178/painting_14.jpg +- data/imagenet-r/n02109525/sketch_6.jpg +- data/imagenet-r/n01833805/sketch_13.jpg +- data/imagenet-r/n02410509/sculpture_28.jpg +- data/imagenet-r/n01443537/toy_11.jpg +- data/imagenet-r/n01882714/sticker_3.jpg +- data/imagenet-r/n01833805/sculpture_8.jpg +- data/imagenet-r/n02206856/embroidery_16.jpg +- data/imagenet-r/n02510455/misc_38.jpg +- data/imagenet-r/n07734744/embroidery_21.jpg +- data/imagenet-r/n03775071/painting_5.jpg +- data/imagenet-r/n02236044/cartoon_38.jpg +- data/imagenet-r/n01784675/graffiti_0.jpg +- data/imagenet-r/n01833805/tattoo_46.jpg +- data/imagenet-r/n04536866/toy_0.jpg +- data/imagenet-r/n07753592/deviantart_4.jpg +- data/imagenet-r/n03272010/sketch_13.jpg +- data/imagenet-r/n02510455/misc_67.jpg +- data/imagenet-r/n07614500/toy_25.jpg +- data/imagenet-r/n09472597/videogame_5.jpg +- data/imagenet-r/n04254680/sculpture_1.jpg +- data/imagenet-r/n04591713/painting_29.jpg +- data/imagenet-r/n02113799/sketch_21.jpg +- data/imagenet-r/n03372029/sculpture_34.jpg +- data/imagenet-r/n02110341/misc_109.jpg +- data/imagenet-r/n07720875/painting_16.jpg +- data/imagenet-r/n03372029/graffiti_3.jpg +- data/imagenet-r/n02091134/misc_57.jpg +- data/imagenet-r/n02099712/sketch_3.jpg +- data/imagenet-r/n01833805/tattoo_25.jpg +- data/imagenet-r/n02480855/toy_1.jpg +- data/imagenet-r/n07697313/painting_17.jpg +- data/imagenet-r/n02395406/graphic_5.jpg +- data/imagenet-r/n02085620/tattoo_13.jpg +- data/imagenet-r/n02129165/origami_6.jpg +- data/imagenet-r/n07697537/misc_23.jpg +- data/imagenet-r/n07697537/videogame_1.jpg +- data/imagenet-r/n02607072/deviantart_18.jpg +- data/imagenet-r/n04310018/toy_6.jpg +- data/imagenet-r/n09835506/videogame_4.jpg +- data/imagenet-r/n02843684/misc_4.jpg +- data/imagenet-r/n04310018/videogame_15.jpg +- data/imagenet-r/n02110958/cartoon_63.jpg +- data/imagenet-r/n02088238/misc_121.jpg +- data/imagenet-r/n03481172/cartoon_23.jpg +- data/imagenet-r/n07749582/painting_43.jpg +- data/imagenet-r/n01833805/misc_6.jpg +- data/imagenet-r/n02102318/misc_64.jpg +- data/imagenet-r/n02226429/painting_10.jpg +- data/imagenet-r/n02130308/painting_4.jpg +- data/imagenet-r/n03124170/art_19.jpg +- data/imagenet-r/n03888257/deviantart_1.jpg +- data/imagenet-r/n07720875/deviantart_12.jpg +- data/imagenet-r/n02106030/embroidery_0.jpg +- data/imagenet-r/n01644373/sketch_9.jpg +- data/imagenet-r/n02268443/misc_182.jpg +- data/imagenet-r/n04275548/sticker_0.jpg +- data/imagenet-r/n04310018/toy_18.jpg +- data/imagenet-r/n07720875/art_14.jpg +- data/imagenet-r/n02395406/misc_28.jpg +- data/imagenet-r/n02088238/misc_5.jpg +- data/imagenet-r/n01616318/graphic_2.jpg +- data/imagenet-r/n01843383/tattoo_10.jpg +- data/imagenet-r/n02948072/misc_12.jpg +- data/imagenet-r/n07714990/graphic_0.jpg +- data/imagenet-r/n01531178/art_11.jpg +- data/imagenet-r/n01855672/sketch_11.jpg +- data/imagenet-r/n02797295/misc_4.jpg +- data/imagenet-r/n02092339/tattoo_0.jpg +- data/imagenet-r/n04146614/misc_2.jpg +- data/imagenet-r/n01770393/tattoo_75.jpg +- data/imagenet-r/n02980441/cartoon_4.jpg +- data/imagenet-r/n02802426/deviantart_5.jpg +- data/imagenet-r/n04552348/videogame_10.jpg +- data/imagenet-r/n07714990/deviantart_26.jpg +- data/imagenet-r/n07734744/deviantart_14.jpg +- data/imagenet-r/n07695742/videogame_2.jpg +- data/imagenet-r/n02797295/misc_23.jpg +- data/imagenet-r/n07718472/sketch_10.jpg +- data/imagenet-r/n02009912/misc_31.jpg +- data/imagenet-r/n02447366/cartoon_12.jpg +- data/imagenet-r/n02099601/sketch_4.jpg +- data/imagenet-r/n01531178/cartoon_9.jpg +- data/imagenet-r/n03452741/deviantart_4.jpg +- data/imagenet-r/n04347754/toy_2.jpg +- data/imagenet-r/n02110958/painting_1.jpg +- data/imagenet-r/n01944390/misc_114.jpg +- data/imagenet-r/n02117135/art_0.jpg +- data/imagenet-r/n01843383/painting_4.jpg +- data/imagenet-r/n02268443/misc_80.jpg +- data/imagenet-r/n04347754/cartoon_13.jpg +- data/imagenet-r/n07734744/toy_26.jpg +- data/imagenet-r/n02226429/origami_13.jpg +- data/imagenet-r/n02129165/sculpture_22.jpg +- data/imagenet-r/n04118538/cartoon_5.jpg +- data/imagenet-r/n07614500/tattoo_10.jpg +- data/imagenet-r/n01820546/painting_6.jpg +- data/imagenet-r/n02268443/misc_97.jpg +- data/imagenet-r/n02233338/misc_5.jpg +- data/imagenet-r/n02906734/cartoon_5.jpg +- data/imagenet-r/n01860187/sculpture_3.jpg +- data/imagenet-r/n02363005/sculpture_9.jpg +- data/imagenet-r/n02437616/deviantart_20.jpg +- data/imagenet-r/n02992529/graffiti_2.jpg +- data/imagenet-r/n07880968/cartoon_14.jpg +- data/imagenet-r/n02906734/cartoon_55.jpg +- data/imagenet-r/n02236044/art_4.jpg +- data/imagenet-r/n03345487/toy_16.jpg +- data/imagenet-r/n02966193/cartoon_14.jpg +- data/imagenet-r/n02129165/tattoo_21.jpg +- data/imagenet-r/n02841315/sculpture_3.jpg +- data/imagenet-r/n07745940/sculpture_2.jpg +- data/imagenet-r/n02395406/art_11.jpg +- data/imagenet-r/n02119022/misc_48.jpg +- data/imagenet-r/n07753275/sketch_16.jpg +- data/imagenet-r/n02793495/sketch_0.jpg +- data/imagenet-r/n02128757/sketch_22.jpg +- data/imagenet-r/n02071294/tattoo_22.jpg +- data/imagenet-r/n01833805/misc_5.jpg +- data/imagenet-r/n01616318/deviantart_7.jpg +- data/imagenet-r/n02992529/graffiti_4.jpg +- data/imagenet-r/n07614500/videogame_4.jpg +- data/imagenet-r/n02423022/art_13.jpg +- data/imagenet-r/n02510455/misc_56.jpg +- data/imagenet-r/n02236044/sketch_6.jpg +- data/imagenet-r/n02009912/misc_23.jpg +- data/imagenet-r/n02086240/misc_25.jpg +- data/imagenet-r/n07720875/deviantart_22.jpg +- data/imagenet-r/n02129604/embroidery_7.jpg +- data/imagenet-r/n07734744/painting_1.jpg +- data/imagenet-r/n02106550/sketch_16.jpg +- data/imagenet-r/n03930630/cartoon_18.jpg +- data/imagenet-r/n02749479/sketch_9.jpg +- data/imagenet-r/n01833805/art_10.jpg +- data/imagenet-r/n04310018/art_7.jpg +- data/imagenet-r/n02096585/tattoo_1.jpg +- data/imagenet-r/n01784675/misc_0.jpg +- data/imagenet-r/n02992529/sculpture_1.jpg +- data/imagenet-r/n07745940/embroidery_12.jpg +- data/imagenet-r/n01694178/cartoon_16.jpg +- data/imagenet-r/n02980441/sketch_18.jpg +- data/imagenet-r/n02480495/sketch_22.jpg +- data/imagenet-r/n01910747/deviantart_8.jpg +- data/imagenet-r/n01855672/deviantart_6.jpg +- data/imagenet-r/n02510455/misc_135.jpg +- data/imagenet-r/n07614500/embroidery_9.jpg +- data/imagenet-r/n01820546/sketch_2.jpg +- data/imagenet-r/n02097298/misc_2.jpg +- data/imagenet-r/n04389033/misc_6.jpg +- data/imagenet-r/n03649909/toy_6.jpg +- data/imagenet-r/n04141076/sketch_21.jpg +- data/imagenet-r/n02279972/art_21.jpg +- data/imagenet-r/n02364673/sketch_7.jpg +- data/imagenet-r/n07873807/toy_14.jpg +- data/imagenet-r/n01632777/deviantart_25.jpg +- data/imagenet-r/n02096585/misc_63.jpg +- data/imagenet-r/n07753275/misc_2.jpg +- data/imagenet-r/n02096585/misc_57.jpg +- data/imagenet-r/n03372029/graffiti_5.jpg +- data/imagenet-r/n01910747/tattoo_33.jpg +- data/imagenet-r/n02980441/sketch_5.jpg +- data/imagenet-r/n01518878/sculpture_7.jpg +- data/imagenet-r/n07718472/sketch_9.jpg +- data/imagenet-r/n04522168/videogame_2.jpg +- data/imagenet-r/n02091134/misc_35.jpg +- data/imagenet-r/n02117135/sculpture_3.jpg +- data/imagenet-r/n03498962/art_6.jpg +- data/imagenet-r/n02119022/sketch_11.jpg +- data/imagenet-r/n07695742/cartoon_15.jpg +- data/imagenet-r/n01694178/tattoo_22.jpg +- data/imagenet-r/n02091032/sketch_3.jpg +- data/imagenet-r/n03124170/cartoon_54.jpg +- data/imagenet-r/n02108915/misc_9.jpg +- data/imagenet-r/n09472597/embroidery_2.jpg +- data/imagenet-r/n04254680/tattoo_7.jpg +- data/imagenet-r/n07734744/deviantart_34.jpg +- data/imagenet-r/n07718472/toy_2.jpg +- data/imagenet-r/n02106030/sketch_7.jpg +- data/imagenet-r/n01494475/sketch_3.jpg +- data/imagenet-r/n02088238/misc_98.jpg +- data/imagenet-r/n04591713/painting_30.jpg +- data/imagenet-r/n01843383/deviantart_44.jpg +- data/imagenet-r/n02110185/cartoon_17.jpg +- data/imagenet-r/n02363005/graphic_6.jpg +- data/imagenet-r/n02480855/graffiti_2.jpg +- data/imagenet-r/n02346627/videogame_0.jpg +- data/imagenet-r/n04487394/cartoon_22.jpg +- data/imagenet-r/n04310018/toy_14.jpg +- data/imagenet-r/n02085620/misc_64.jpg +- data/imagenet-r/n02808440/painting_3.jpg +- data/imagenet-r/n02051845/sketch_8.jpg +- data/imagenet-r/n04086273/cartoon_15.jpg +- data/imagenet-r/n07614500/origami_5.jpg +- data/imagenet-r/n02948072/graphic_7.jpg +- data/imagenet-r/n01694178/tattoo_12.jpg +- data/imagenet-r/n02769748/sketch_29.jpg +- data/imagenet-r/n07697313/cartoon_15.jpg +- data/imagenet-r/n04275548/misc_4.jpg +- data/imagenet-r/n02802426/deviantart_4.jpg +- data/imagenet-r/n03494278/graffiti_2.jpg +- data/imagenet-r/n02841315/cartoon_2.jpg +- data/imagenet-r/n02939185/tattoo_1.jpg +- data/imagenet-r/n02948072/deviantart_9.jpg +- data/imagenet-r/n02110341/misc_105.jpg +- data/imagenet-r/n02134084/sketch_7.jpg +- data/imagenet-r/n01806143/origami_2.jpg +- data/imagenet-r/n02268443/sketch_8.jpg +- data/imagenet-r/n04552348/cartoon_4.jpg +- data/imagenet-r/n02097298/misc_0.jpg +- data/imagenet-r/n02099601/misc_17.jpg +- data/imagenet-r/n04591713/painting_4.jpg +- data/imagenet-r/n02117135/sketch_21.jpg +- data/imagenet-r/n02268443/misc_191.jpg +- data/imagenet-r/n03467068/art_0.jpg +- data/imagenet-r/n02510455/misc_118.jpg +- data/imagenet-r/n01443537/graffiti_15.jpg +- data/imagenet-r/n02099712/sketch_15.jpg +- data/imagenet-r/n02129165/sculpture_24.jpg +- data/imagenet-r/n03676483/sculpture_0.jpg +- data/imagenet-r/n07745940/graffiti_2.jpg +- data/imagenet-r/n07749582/deviantart_25.jpg +- data/imagenet-r/n01531178/painting_7.jpg +- data/imagenet-r/n04141076/sketch_13.jpg +- data/imagenet-r/n07714990/tattoo_1.jpg +- data/imagenet-r/n02236044/origami_16.jpg +- data/imagenet-r/n02165456/tattoo_59.jpg +- data/imagenet-r/n01910747/painting_25.jpg +- data/imagenet-r/n02134084/misc_94.jpg +- data/imagenet-r/n02138441/art_9.jpg +- data/imagenet-r/n02066245/art_0.jpg +- data/imagenet-r/n03424325/misc_49.jpg +- data/imagenet-r/n04310018/art_22.jpg +- data/imagenet-r/n02607072/misc_44.jpg +- data/imagenet-r/n02119022/misc_100.jpg +- data/imagenet-r/n01847000/painting_7.jpg +- data/imagenet-r/n02980441/videogame_19.jpg +- data/imagenet-r/n02510455/videogame_2.jpg +- data/imagenet-r/n02317335/tattoo_22.jpg +- data/imagenet-r/n03372029/sculpture_8.jpg +- data/imagenet-r/n07695742/deviantart_1.jpg +- data/imagenet-r/n01910747/tattoo_70.jpg +- data/imagenet-r/n02526121/cartoon_0.jpg +- data/imagenet-r/n02480855/painting_0.jpg +- data/imagenet-r/n01443537/deviantart_14.jpg +- data/imagenet-r/n02486410/tattoo_9.jpg +- data/imagenet-r/n02356798/deviantart_0.jpg +- data/imagenet-r/n07880968/sketch_9.jpg +- data/imagenet-r/n04465501/deviantart_3.jpg +- data/imagenet-r/n03452741/deviantart_0.jpg +- data/imagenet-r/n01806143/cartoon_14.jpg +- data/imagenet-r/n01644373/painting_19.jpg +- data/imagenet-r/n02007558/cartoon_23.jpg +- data/imagenet-r/n01882714/toy_19.jpg +- data/imagenet-r/n02481823/deviantart_6.jpg +- data/imagenet-r/n02607072/misc_34.jpg +- data/imagenet-r/n01614925/deviantart_5.jpg +- data/imagenet-r/n02106662/misc_57.jpg +- data/imagenet-r/n01806143/origami_9.jpg +- data/imagenet-r/n02130308/sketch_7.jpg +- data/imagenet-r/n02129165/cartoon_36.jpg +- data/imagenet-r/n02134084/misc_49.jpg +- data/imagenet-r/n07734744/sketch_10.jpg +- data/imagenet-r/n02233338/misc_29.jpg +- data/imagenet-r/n02607072/misc_112.jpg +- data/imagenet-r/n01843383/deviantart_46.jpg +- data/imagenet-r/n01833805/embroidery_15.jpg +- data/imagenet-r/n02088094/misc_22.jpg +- data/imagenet-r/n02007558/tattoo_9.jpg +- data/imagenet-r/n07614500/painting_3.jpg +- data/imagenet-r/n04536866/cartoon_25.jpg +- data/imagenet-r/n02808440/sketch_8.jpg +- data/imagenet-r/n07745940/sketch_11.jpg +- data/imagenet-r/n03602883/misc_43.jpg +- data/imagenet-r/n03773504/sketch_11.jpg +- data/imagenet-r/n12267677/misc_0.jpg +- data/imagenet-r/n02966193/cartoon_3.jpg +- data/imagenet-r/n02129165/toy_10.jpg +- data/imagenet-r/n02051845/deviantart_7.jpg +- data/imagenet-r/n03345487/videogame_19.jpg +- data/imagenet-r/n07745940/graffiti_33.jpg +- data/imagenet-r/n07745940/art_5.jpg +- data/imagenet-r/n01986214/origami_11.jpg +- data/imagenet-r/n04310018/tattoo_2.jpg +- data/imagenet-r/n01632777/misc_3.jpg +- data/imagenet-r/n07873807/painting_2.jpg +- data/imagenet-r/n02268443/misc_72.jpg +- data/imagenet-r/n07614500/tattoo_3.jpg +- data/imagenet-r/n07714990/cartoon_26.jpg +- data/imagenet-r/n01484850/cartoon_0.jpg +- data/imagenet-r/n02109525/sketch_7.jpg +- data/imagenet-r/n03930630/sketch_14.jpg +- data/imagenet-r/n01774750/toy_1.jpg +- data/imagenet-r/n02119022/misc_74.jpg +- data/imagenet-r/n04536866/deviantart_29.jpg +- data/imagenet-r/n07718472/sketch_22.jpg +- data/imagenet-r/n02071294/cartoon_9.jpg +- data/imagenet-r/n04389033/cartoon_0.jpg +- data/imagenet-r/n02112018/misc_47.jpg +- data/imagenet-r/n04141076/cartoon_59.jpg +- data/imagenet-r/n02483362/sketch_27.jpg +- data/imagenet-r/n02655020/misc_42.jpg +- data/imagenet-r/n07614500/misc_4.jpg +- data/imagenet-r/n02110958/cartoon_21.jpg +- data/imagenet-r/n01748264/misc_0.jpg +- data/imagenet-r/n03947888/misc_11.jpg +- data/imagenet-r/n09835506/videogame_32.jpg +- data/imagenet-r/n01944390/misc_74.jpg +- data/imagenet-r/n02110341/misc_102.jpg +- data/imagenet-r/n04409515/cartoon_1.jpg +- data/imagenet-r/n01484850/deviantart_6.jpg +- data/imagenet-r/n07714990/tattoo_3.jpg +- data/imagenet-r/n02279972/cartoon_4.jpg +- data/imagenet-r/n02410509/graphic_0.jpg +- data/imagenet-r/n02391049/misc_37.jpg +- data/imagenet-r/n03124170/videogame_6.jpg +- data/imagenet-r/n09472597/cartoon_18.jpg +- data/imagenet-r/n01644373/tattoo_2.jpg +- data/imagenet-r/n04389033/videogame_54.jpg +- data/imagenet-r/n07614500/deviantart_1.jpg +- data/imagenet-r/n02236044/origami_6.jpg +- data/imagenet-r/n01616318/sketch_11.jpg +- data/imagenet-r/n02423022/sculpture_23.jpg +- data/imagenet-r/n03494278/embroidery_1.jpg +- data/imagenet-r/n02325366/sketch_15.jpg +- data/imagenet-r/n02226429/origami_3.jpg +- data/imagenet-r/n01494475/misc_8.jpg +- data/imagenet-r/n01833805/painting_32.jpg +- data/imagenet-r/n02138441/cartoon_6.jpg +- data/imagenet-r/n02391049/misc_111.jpg +- data/imagenet-r/n02110341/misc_95.jpg +- data/imagenet-r/n02099712/sketch_20.jpg +- data/imagenet-r/n01632777/cartoon_22.jpg +- data/imagenet-r/n02129604/toy_15.jpg +- data/imagenet-r/n01644373/cartoon_11.jpg +- data/imagenet-r/n02128757/sketch_5.jpg +- data/imagenet-r/n02108915/misc_15.jpg +- data/imagenet-r/n07768694/painting_17.jpg +- data/imagenet-r/n01833805/art_2.jpg +- data/imagenet-r/n02445715/cartoon_22.jpg +- data/imagenet-r/n03424325/misc_41.jpg +- data/imagenet-r/n02110958/toy_2.jpg +- data/imagenet-r/n01514859/cartoon_6.jpg +- data/imagenet-r/n01616318/tattoo_5.jpg +- data/imagenet-r/n02672831/painting_12.jpg +- data/imagenet-r/n01843383/deviantart_50.jpg +- data/imagenet-r/n03481172/graffiti_2.jpg +- data/imagenet-r/n09835506/deviantart_29.jpg +- data/imagenet-r/n02992529/sketch_5.jpg +- data/imagenet-r/n03498962/cartoon_11.jpg +- data/imagenet-r/n01944390/sketch_19.jpg +- data/imagenet-r/n02445715/cartoon_13.jpg +- data/imagenet-r/n03630383/cartoon_36.jpg +- data/imagenet-r/n02793495/sketch_15.jpg +- data/imagenet-r/n02481823/tattoo_4.jpg +- data/imagenet-r/n04522168/videogame_22.jpg +- data/imagenet-r/n02395406/graphic_8.jpg +- data/imagenet-r/n01820546/toy_1.jpg +- data/imagenet-r/n04465501/deviantart_12.jpg +- data/imagenet-r/n02110341/misc_145.jpg +- data/imagenet-r/n01843383/painting_35.jpg +- data/imagenet-r/n02814860/videogame_6.jpg +- data/imagenet-r/n07753592/misc_121.jpg +- data/imagenet-r/n02769748/cartoon_22.jpg +- data/imagenet-r/n04086273/graffiti_2.jpg +- data/imagenet-r/n01531178/art_15.jpg +- data/imagenet-r/n02526121/art_6.jpg +- data/imagenet-r/n02108915/misc_99.jpg +- data/imagenet-r/n02138441/art_18.jpg +- data/imagenet-r/n07745940/sticker_7.jpg +- data/imagenet-r/n01632777/videogame_7.jpg +- data/imagenet-r/n03676483/sketch_4.jpg +- data/imagenet-r/n02129165/sketch_8.jpg +- data/imagenet-r/n02317335/cartoon_13.jpg +- data/imagenet-r/n07697313/embroidery_0.jpg +- data/imagenet-r/n02051845/deviantart_9.jpg +- data/imagenet-r/n03124170/graffiti_6.jpg +- data/imagenet-r/n01882714/sticker_7.jpg +- data/imagenet-r/n02109525/misc_25.jpg +- data/imagenet-r/n02219486/tattoo_0.jpg +- data/imagenet-r/n02114367/misc_10.jpg +- data/imagenet-r/n04254680/videogame_3.jpg +- data/imagenet-r/n02749479/graffiti_0.jpg +- data/imagenet-r/n02106662/misc_88.jpg +- data/imagenet-r/n07697537/misc_91.jpg +- data/imagenet-r/n01443537/graffiti_17.jpg +- data/imagenet-r/n02808440/painting_0.jpg +- data/imagenet-r/n02056570/videogame_0.jpg +- data/imagenet-r/n04552348/sketch_5.jpg +- data/imagenet-r/n02056570/painting_9.jpg +- data/imagenet-r/n02110958/sculpture_1.jpg +- data/imagenet-r/n07742313/painting_14.jpg +- data/imagenet-r/n03888257/graphic_0.jpg +- data/imagenet-r/n01748264/sketch_23.jpg +- data/imagenet-r/n02106662/misc_87.jpg +- data/imagenet-r/n01910747/tattoo_65.jpg +- data/imagenet-r/n02980441/sketch_13.jpg +- data/imagenet-r/n02119022/sketch_13.jpg +- data/imagenet-r/n02123045/cartoon_17.jpg +- data/imagenet-r/n02130308/toy_3.jpg +- data/imagenet-r/n01498041/tattoo_6.jpg +- data/imagenet-r/n04266014/videogame_24.jpg +- data/imagenet-r/n03124170/videogame_7.jpg +- data/imagenet-r/n09835506/misc_42.jpg +- data/imagenet-r/n03124170/art_0.jpg +- data/imagenet-r/n02134084/misc_120.jpg +- data/imagenet-r/n02395406/graphic_4.jpg +- data/imagenet-r/n01944390/misc_41.jpg +- data/imagenet-r/n07697313/art_37.jpg +- data/imagenet-r/n02117135/tattoo_14.jpg +- data/imagenet-r/n02814860/misc_0.jpg +- data/imagenet-r/n02106166/painting_7.jpg +- data/imagenet-r/n10565667/sketch_3.jpg +- data/imagenet-r/n04086273/videogame_10.jpg +- data/imagenet-r/n04086273/tattoo_18.jpg +- data/imagenet-r/n02117135/painting_0.jpg +- data/imagenet-r/n04536866/sculpture_0.jpg +- data/imagenet-r/n01843383/tattoo_5.jpg +- data/imagenet-r/n02447366/sticker_0.jpg +- data/imagenet-r/n02088238/misc_42.jpg +- data/imagenet-r/n02948072/cartoon_9.jpg +- data/imagenet-r/n02096585/misc_80.jpg +- data/imagenet-r/n02510455/misc_87.jpg +- data/imagenet-r/n04192698/sketch_8.jpg +- data/imagenet-r/n02364673/sketch_16.jpg +- data/imagenet-r/n10565667/graffiti_1.jpg +- data/imagenet-r/n02437616/art_2.jpg +- data/imagenet-r/n03710193/misc_32.jpg +- data/imagenet-r/n01614925/tattoo_41.jpg +- data/imagenet-r/n09472597/cartoon_24.jpg +- data/imagenet-r/n10565667/deviantart_24.jpg +- data/imagenet-r/n02130308/tattoo_4.jpg +- data/imagenet-r/n07745940/misc_6.jpg +- data/imagenet-r/n01843383/painting_57.jpg +- data/imagenet-r/n02138441/painting_42.jpg +- data/imagenet-r/n02165456/graffiti_0.jpg +- data/imagenet-r/n02128757/painting_34.jpg +- data/imagenet-r/n02051845/painting_12.jpg +- data/imagenet-r/n07753275/cartoon_12.jpg +- data/imagenet-r/n02226429/tattoo_3.jpg +- data/imagenet-r/n02110958/sculpture_7.jpg +- data/imagenet-r/n07734744/sticker_20.jpg +- data/imagenet-r/n01855672/painting_13.jpg +- data/imagenet-r/n02480855/tattoo_18.jpg +- data/imagenet-r/n02749479/cartoon_4.jpg +- data/imagenet-r/n02226429/origami_22.jpg +- data/imagenet-r/n03124170/painting_8.jpg +- data/imagenet-r/n07753592/misc_36.jpg +- data/imagenet-r/n04254680/videogame_11.jpg +- data/imagenet-r/n02110958/painting_51.jpg +- data/imagenet-r/n04141076/sketch_10.jpg +- data/imagenet-r/n02110958/sticker_4.jpg +- data/imagenet-r/n02007558/sketch_20.jpg +- data/imagenet-r/n03345487/toy_7.jpg +- data/imagenet-r/n02096585/tattoo_2.jpg +- data/imagenet-r/n01843383/painting_10.jpg +- data/imagenet-r/n02051845/sketch_11.jpg +- data/imagenet-r/n02119022/misc_144.jpg +- data/imagenet-r/n02190166/tattoo_5.jpg +- data/imagenet-r/n03602883/misc_19.jpg +- data/imagenet-r/n01910747/cartoon_29.jpg +- data/imagenet-r/n02206856/embroidery_23.jpg +- data/imagenet-r/n03372029/sculpture_22.jpg +- data/imagenet-r/n02088364/misc_68.jpg +- data/imagenet-r/n02129165/misc_8.jpg +- data/imagenet-r/n12267677/misc_25.jpg +- data/imagenet-r/n02364673/misc_3.jpg +- data/imagenet-r/n02823750/sketch_5.jpg +- data/imagenet-r/n01494475/misc_115.jpg +- data/imagenet-r/n02395406/misc_10.jpg +- data/imagenet-r/n02410509/sculpture_50.jpg +- data/imagenet-r/n03602883/misc_13.jpg +- data/imagenet-r/n09835506/deviantart_15.jpg +- data/imagenet-r/n01855672/misc_11.jpg +- data/imagenet-r/n01843383/cartoon_9.jpg +- data/imagenet-r/n02883205/sketch_0.jpg +- data/imagenet-r/n02437616/videogame_0.jpg +- data/imagenet-r/n02950826/toy_4.jpg +- data/imagenet-r/n04266014/deviantart_10.jpg +- data/imagenet-r/n01847000/tattoo_23.jpg +- data/imagenet-r/n02526121/cartoon_14.jpg +- data/imagenet-r/n02480855/tattoo_58.jpg +- data/imagenet-r/n03676483/sketch_23.jpg +- data/imagenet-r/n01882714/painting_27.jpg +- data/imagenet-r/n12267677/misc_132.jpg +- data/imagenet-r/n01833805/cartoon_15.jpg +- data/imagenet-r/n02134084/misc_82.jpg +- data/imagenet-r/n04275548/sketch_7.jpg +- data/imagenet-r/n01882714/painting_23.jpg +- data/imagenet-r/n02099601/sketch_16.jpg +- data/imagenet-r/n02226429/cartoon_5.jpg +- data/imagenet-r/n02948072/cartoon_59.jpg +- data/imagenet-r/n01644373/painting_22.jpg +- data/imagenet-r/n04141076/art_6.jpg +- data/imagenet-r/n04591713/painting_5.jpg +- data/imagenet-r/n02607072/misc_37.jpg +- data/imagenet-r/n02655020/deviantart_0.jpg +- data/imagenet-r/n03372029/sketch_4.jpg +- data/imagenet-r/n02769748/origami_0.jpg +- data/imagenet-r/n04266014/graphic_0.jpg +- data/imagenet-r/n02206856/cartoon_7.jpg +- data/imagenet-r/n01494475/misc_18.jpg +- data/imagenet-r/n02119022/misc_11.jpg +- data/imagenet-r/n02099601/misc_60.jpg +- data/imagenet-r/n02088364/misc_75.jpg +- data/imagenet-r/n02051845/sketch_12.jpg +- data/imagenet-r/n02206856/embroidery_22.jpg +- data/imagenet-r/n01494475/misc_130.jpg +- data/imagenet-r/n01514859/cartoon_3.jpg +- data/imagenet-r/n04254680/sketch_3.jpg +- data/imagenet-r/n02480495/tattoo_1.jpg +- data/imagenet-r/n03594945/videogame_3.jpg +- data/imagenet-r/n02526121/sketch_1.jpg +- data/imagenet-r/n04192698/cartoon_14.jpg +- data/imagenet-r/n02236044/cartoon_5.jpg +- data/imagenet-r/n04133789/sketch_8.jpg +- data/imagenet-r/n03888257/cartoon_10.jpg +- data/imagenet-r/n02106550/tattoo_6.jpg +- data/imagenet-r/n07734744/videogame_14.jpg +- data/imagenet-r/n02395406/graffiti_7.jpg +- data/imagenet-r/n02410509/cartoon_37.jpg +- data/imagenet-r/n02086240/misc_28.jpg +- data/imagenet-r/n02088094/sketch_22.jpg +- data/imagenet-r/n07734744/sticker_5.jpg +- data/imagenet-r/n02510455/misc_117.jpg +- data/imagenet-r/n01806143/sketch_5.jpg +- data/imagenet-r/n03467068/graffiti_0.jpg +- data/imagenet-r/n02395406/deviantart_0.jpg +- data/imagenet-r/n12267677/misc_74.jpg +- data/imagenet-r/n02526121/cartoon_16.jpg +- data/imagenet-r/n04192698/deviantart_20.jpg +- data/imagenet-r/n01820546/deviantart_32.jpg +- data/imagenet-r/n01614925/sculpture_2.jpg +- data/imagenet-r/n02480855/sculpture_4.jpg +- data/imagenet-r/n03372029/sculpture_16.jpg +- data/imagenet-r/n01614925/tattoo_45.jpg +- data/imagenet-r/n02486410/cartoon_5.jpg +- data/imagenet-r/n02395406/sticker_1.jpg +- data/imagenet-r/n02423022/toy_0.jpg +- data/imagenet-r/n01644373/painting_11.jpg +- data/imagenet-r/n07742313/videogame_12.jpg +- data/imagenet-r/n02110958/cartoon_52.jpg +- data/imagenet-r/n02129165/tattoo_46.jpg +- data/imagenet-r/n02088466/misc_10.jpg +- data/imagenet-r/n02480495/sketch_2.jpg +- data/imagenet-r/n01882714/toy_16.jpg +- data/imagenet-r/n02098286/sketch_14.jpg +- data/imagenet-r/n09472597/cartoon_17.jpg +- data/imagenet-r/n02909870/graffiti_8.jpg +- data/imagenet-r/n02009912/misc_57.jpg +- data/imagenet-r/n02071294/tattoo_8.jpg +- data/imagenet-r/n02526121/cartoon_33.jpg +- data/imagenet-r/n02206856/graffiti_41.jpg +- data/imagenet-r/n01983481/sketch_15.jpg +- data/imagenet-r/n02808440/cartoon_12.jpg +- data/imagenet-r/n01774750/cartoon_10.jpg +- data/imagenet-r/n02226429/painting_9.jpg +- data/imagenet-r/n02317335/painting_18.jpg +- data/imagenet-r/n07753592/misc_167.jpg +- data/imagenet-r/n02085620/misc_110.jpg +- data/imagenet-r/n02165456/painting_11.jpg +- data/imagenet-r/n02607072/misc_75.jpg +- data/imagenet-r/n04118538/videogame_12.jpg +- data/imagenet-r/n01443537/misc_0.jpg +- data/imagenet-r/n02363005/painting_1.jpg +- data/imagenet-r/n04275548/origami_2.jpg +- data/imagenet-r/n01833805/tattoo_96.jpg +- data/imagenet-r/n03372029/sketch_18.jpg +- data/imagenet-r/n07768694/deviantart_25.jpg +- data/imagenet-r/n02843684/painting_9.jpg +- data/imagenet-r/n01770393/tattoo_13.jpg +- data/imagenet-r/n04325704/cartoon_23.jpg +- data/imagenet-r/n02363005/origami_0.jpg +- data/imagenet-r/n04141076/sculpture_3.jpg +- data/imagenet-r/n02481823/sculpture_3.jpg +- data/imagenet-r/n03773504/sculpture_4.jpg +- data/imagenet-r/n02138441/art_10.jpg +- data/imagenet-r/n02009912/misc_11.jpg +- data/imagenet-r/n02129604/tattoo_35.jpg +- data/imagenet-r/n02480495/cartoon_0.jpg +- data/imagenet-r/n01644373/cartoon_15.jpg +- data/imagenet-r/n03452741/painting_4.jpg +- data/imagenet-r/n07753275/sketch_13.jpg +- data/imagenet-r/n02123045/painting_15.jpg +- data/imagenet-r/n02363005/graffiti_0.jpg +- data/imagenet-r/n04552348/art_6.jpg +- data/imagenet-r/n01784675/misc_3.jpg +- data/imagenet-r/n03947888/videogame_15.jpg +- data/imagenet-r/n01770393/origami_15.jpg +- data/imagenet-r/n03272010/sketch_6.jpg +- data/imagenet-r/n02966193/cartoon_24.jpg +- data/imagenet-r/n03424325/misc_0.jpg +- data/imagenet-r/n01882714/toy_22.jpg +- data/imagenet-r/n01847000/misc_27.jpg +- data/imagenet-r/n01843383/tattoo_15.jpg +- data/imagenet-r/n07697313/sketch_6.jpg +- data/imagenet-r/n02793495/embroidery_6.jpg +- data/imagenet-r/n02117135/sculpture_2.jpg +- data/imagenet-r/n02110341/deviantart_4.jpg +- data/imagenet-r/n01748264/deviantart_3.jpg +- data/imagenet-r/n04536866/deviantart_16.jpg +- data/imagenet-r/n02398521/cartoon_30.jpg +- data/imagenet-r/n02486410/graffiti_6.jpg +- data/imagenet-r/n02096585/misc_151.jpg +- data/imagenet-r/n07745940/misc_19.jpg +- data/imagenet-r/n03773504/cartoon_7.jpg +- data/imagenet-r/n02119022/misc_92.jpg +- data/imagenet-r/n03372029/painting_1.jpg +- data/imagenet-r/n02906734/origami_2.jpg +- data/imagenet-r/n02268443/misc_124.jpg +- data/imagenet-r/n02808440/painting_1.jpg +- data/imagenet-r/n02109525/sketch_18.jpg +- data/imagenet-r/n04133789/art_4.jpg +- data/imagenet-r/n01518878/painting_5.jpg +- data/imagenet-r/n04254680/deviantart_29.jpg +- data/imagenet-r/n07873807/deviantart_10.jpg +- data/imagenet-r/n01847000/cartoon_16.jpg +- data/imagenet-r/n01616318/tattoo_42.jpg +- data/imagenet-r/n01694178/sculpture_2.jpg +- data/imagenet-r/n01833805/sketch_19.jpg +- data/imagenet-r/n01614925/deviantart_3.jpg +- data/imagenet-r/n02480855/tattoo_37.jpg +- data/imagenet-r/n02108915/misc_44.jpg +- data/imagenet-r/n02906734/painting_0.jpg +- data/imagenet-r/n02051845/painting_16.jpg +- data/imagenet-r/n02445715/videogame_1.jpg +- data/imagenet-r/n07714990/cartoon_3.jpg +- data/imagenet-r/n01494475/misc_32.jpg +- data/imagenet-r/n04347754/painting_0.jpg +- data/imagenet-r/n02363005/sketch_15.jpg +- data/imagenet-r/n03888257/cartoon_14.jpg +- data/imagenet-r/n02007558/graffiti_17.jpg +- data/imagenet-r/n07697313/deviantart_43.jpg +- data/imagenet-r/n07749582/deviantart_7.jpg +- data/imagenet-r/n02233338/misc_30.jpg +- data/imagenet-r/n01498041/tattoo_3.jpg +- data/imagenet-r/n12267677/misc_7.jpg +- data/imagenet-r/n02113624/misc_19.jpg +- data/imagenet-r/n07697537/misc_24.jpg +- data/imagenet-r/n02119022/misc_82.jpg +- data/imagenet-r/n01986214/sketch_15.jpg +- data/imagenet-r/n01614925/painting_7.jpg +- data/imagenet-r/n02106550/misc_56.jpg +- data/imagenet-r/n02130308/sketch_20.jpg +- data/imagenet-r/n02526121/cartoon_7.jpg +- data/imagenet-r/n03888257/cartoon_8.jpg +- data/imagenet-r/n04275548/cartoon_0.jpg +- data/imagenet-r/n01770393/tattoo_35.jpg +- data/imagenet-r/n02279972/sculpture_5.jpg +- data/imagenet-r/n07753592/deviantart_1.jpg +- data/imagenet-r/n02883205/sketch_8.jpg +- data/imagenet-r/n02056570/sketch_7.jpg +- data/imagenet-r/n01484850/art_16.jpg +- data/imagenet-r/n07734744/graffiti_4.jpg +- data/imagenet-r/n02398521/videogame_3.jpg +- data/imagenet-r/n09472597/deviantart_13.jpg +- data/imagenet-r/n04591713/deviantart_4.jpg +- data/imagenet-r/n02325366/misc_14.jpg +- data/imagenet-r/n04086273/painting_2.jpg +- data/imagenet-r/n04254680/deviantart_9.jpg +- data/imagenet-r/n02114367/misc_27.jpg +- data/imagenet-r/n01986214/sculpture_11.jpg +- data/imagenet-r/n01644373/tattoo_34.jpg +- data/imagenet-r/n02088364/sketch_15.jpg +- data/imagenet-r/n02480495/cartoon_13.jpg +- data/imagenet-r/n02119022/misc_113.jpg +- data/imagenet-r/n02129604/art_1.jpg +- data/imagenet-r/n02814860/painting_40.jpg +- data/imagenet-r/n01833805/sketch_9.jpg +- data/imagenet-r/n07873807/sketch_9.jpg +- data/imagenet-r/n07745940/sticker_10.jpg +- data/imagenet-r/n04146614/videogame_3.jpg +- data/imagenet-r/n04347754/cartoon_5.jpg +- data/imagenet-r/n02447366/graffiti_1.jpg +- data/imagenet-r/n02165456/tattoo_2.jpg +- data/imagenet-r/n02108089/misc_37.jpg +- data/imagenet-r/n02009912/sketch_17.jpg +- data/imagenet-r/n02106166/misc_2.jpg +- data/imagenet-r/n02906734/sketch_9.jpg +- data/imagenet-r/n02236044/graffiti_7.jpg +- data/imagenet-r/n02486410/painting_0.jpg +- data/imagenet-r/n04552348/sketch_1.jpg +- data/imagenet-r/n02410509/graphic_5.jpg +- data/imagenet-r/n02085620/misc_35.jpg +- data/imagenet-r/n01843383/deviantart_16.jpg +- data/imagenet-r/n02091134/misc_73.jpg +- data/imagenet-r/n04389033/deviantart_15.jpg +- data/imagenet-r/n02951358/painting_12.jpg +- data/imagenet-r/n07734744/deviantart_24.jpg +- data/imagenet-r/n02279972/misc_1.jpg +- data/imagenet-r/n01910747/sketch_3.jpg +- data/imagenet-r/n02486410/cartoon_15.jpg +- data/imagenet-r/n02480855/tattoo_11.jpg +- data/imagenet-r/n01694178/cartoon_3.jpg +- data/imagenet-r/n01531178/art_25.jpg +- data/imagenet-r/n10565667/videogame_17.jpg +- data/imagenet-r/n07695742/graphic_0.jpg +- data/imagenet-r/n01806143/misc_3.jpg +- data/imagenet-r/n02655020/misc_20.jpg +- data/imagenet-r/n02939185/painting_2.jpg +- data/imagenet-r/n03272010/art_4.jpg +- data/imagenet-r/n01494475/misc_56.jpg +- data/imagenet-r/n12267677/misc_42.jpg +- data/imagenet-r/n02814860/art_12.jpg +- data/imagenet-r/n07695742/videogame_6.jpg +- data/imagenet-r/n02098286/sketch_19.jpg +- data/imagenet-r/n09835506/deviantart_3.jpg +- data/imagenet-r/n01614925/tattoo_21.jpg +- data/imagenet-r/n04310018/painting_19.jpg +- data/imagenet-r/n02268443/misc_12.jpg +- data/imagenet-r/n01616318/sketch_19.jpg +- data/imagenet-r/n01983481/misc_35.jpg +- data/imagenet-r/n01770393/cartoon_19.jpg +- data/imagenet-r/n02655020/deviantart_4.jpg +- data/imagenet-r/n04118538/cartoon_18.jpg +- data/imagenet-r/n01843383/videogame_8.jpg +- data/imagenet-r/n02096585/misc_75.jpg +- data/imagenet-r/n02909870/cartoon_29.jpg +- data/imagenet-r/n01986214/painting_0.jpg +- data/imagenet-r/n02483362/origami_0.jpg +- data/imagenet-r/n02797295/misc_8.jpg +- data/imagenet-r/n02486410/painting_3.jpg +- data/imagenet-r/n07742313/painting_12.jpg +- data/imagenet-r/n01784675/cartoon_1.jpg +- data/imagenet-r/n07718472/art_0.jpg +- data/imagenet-r/n02128757/painting_4.jpg +- data/imagenet-r/n01770393/tattoo_40.jpg +- data/imagenet-r/n07718472/sketch_16.jpg +- data/imagenet-r/n02447366/painting_3.jpg +- data/imagenet-r/n02110341/misc_30.jpg +- data/imagenet-r/n03947888/painting_2.jpg +- data/imagenet-r/n02480855/sketch_11.jpg +- data/imagenet-r/n02110185/cartoon_0.jpg +- data/imagenet-r/n02007558/graphic_8.jpg +- data/imagenet-r/n02510455/misc_8.jpg +- data/imagenet-r/n02236044/art_11.jpg +- data/imagenet-r/n04536866/deviantart_8.jpg +- data/imagenet-r/n02607072/misc_54.jpg +- data/imagenet-r/n01644373/sketch_3.jpg +- data/imagenet-r/n02110341/deviantart_15.jpg +- data/imagenet-r/n02814860/sketch_18.jpg +- data/imagenet-r/n03649909/cartoon_6.jpg +- data/imagenet-r/n02134084/misc_54.jpg +- data/imagenet-r/n01644373/tattoo_17.jpg +- data/imagenet-r/n07753275/misc_10.jpg +- data/imagenet-r/n02395406/art_8.jpg +- data/imagenet-r/n01833805/tattoo_55.jpg +- data/imagenet-r/n04347754/painting_4.jpg +- data/imagenet-r/n02123045/cartoon_13.jpg +- data/imagenet-r/n01644373/tattoo_35.jpg +- data/imagenet-r/n02110185/graffiti_1.jpg +- data/imagenet-r/n01531178/painting_18.jpg +- data/imagenet-r/n01910747/sketch_15.jpg +- data/imagenet-r/n04347754/tattoo_14.jpg +- data/imagenet-r/n02117135/cartoon_10.jpg +- data/imagenet-r/n02814860/painting_17.jpg +- data/imagenet-r/n04552348/deviantart_31.jpg +- data/imagenet-r/n02317335/videogame_0.jpg +- data/imagenet-r/n02317335/misc_9.jpg +- data/imagenet-r/n02672831/sketch_17.jpg +- data/imagenet-r/n02802426/tattoo_11.jpg +- data/imagenet-r/n03630383/toy_4.jpg +- data/imagenet-r/n01531178/art_20.jpg +- data/imagenet-r/n02268443/sketch_5.jpg +- data/imagenet-r/n07693725/toy_2.jpg +- data/imagenet-r/n02655020/deviantart_11.jpg +- data/imagenet-r/n03481172/deviantart_7.jpg +- data/imagenet-r/n02112137/sketch_13.jpg +- data/imagenet-r/n02483362/sketch_0.jpg +- data/imagenet-r/n02123045/cartoon_1.jpg +- data/imagenet-r/n07697537/misc_40.jpg +- data/imagenet-r/n02102318/misc_42.jpg +- data/imagenet-r/n04465501/sculpture_1.jpg +- data/imagenet-r/n03467068/sketch_21.jpg +- data/imagenet-r/n02391049/deviantart_4.jpg +- data/imagenet-r/n02423022/videogame_2.jpg +- data/imagenet-r/n07697537/misc_14.jpg +- data/imagenet-r/n01843383/toy_1.jpg +- data/imagenet-r/n03773504/videogame_2.jpg +- data/imagenet-r/n03424325/misc_79.jpg +- data/imagenet-r/n02486410/cartoon_7.jpg +- data/imagenet-r/n02445715/cartoon_3.jpg +- data/imagenet-r/n02992529/cartoon_10.jpg +- data/imagenet-r/n03452741/deviantart_11.jpg +- data/imagenet-r/n02410509/origami_14.jpg +- data/imagenet-r/n02486410/art_4.jpg +- data/imagenet-r/n02056570/toy_0.jpg +- data/imagenet-r/n02097298/misc_7.jpg +- data/imagenet-r/n02098286/sketch_3.jpg +- data/imagenet-r/n02236044/graphic_2.jpg +- data/imagenet-r/n03888257/sketch_11.jpg +- data/imagenet-r/n03676483/cartoon_12.jpg +- data/imagenet-r/n02134084/misc_117.jpg +- data/imagenet-r/n02279972/sculpture_4.jpg +- data/imagenet-r/n03888257/sketch_8.jpg +- data/imagenet-r/n03947888/toy_4.jpg +- data/imagenet-r/n02129165/graffiti_20.jpg +- data/imagenet-r/n02086240/misc_22.jpg +- data/imagenet-r/n02279972/tattoo_9.jpg +- data/imagenet-r/n02841315/cartoon_24.jpg +- data/imagenet-r/n07753592/misc_38.jpg +- data/imagenet-r/n02110958/art_20.jpg +- data/imagenet-r/n02099712/sketch_16.jpg +- data/imagenet-r/n02007558/cartoon_2.jpg +- data/imagenet-r/n03372029/art_0.jpg +- data/imagenet-r/n01770393/tattoo_6.jpg +- data/imagenet-r/n02130308/painting_17.jpg +- data/imagenet-r/n04141076/cartoon_58.jpg +- data/imagenet-r/n02113624/misc_34.jpg +- data/imagenet-r/n04147183/tattoo_0.jpg +- data/imagenet-r/n01770393/sketch_8.jpg +- data/imagenet-r/n07745940/sketch_6.jpg +- data/imagenet-r/n02841315/cartoon_23.jpg +- data/imagenet-r/n02279972/tattoo_16.jpg +- data/imagenet-r/n02883205/graffiti_4.jpg +- data/imagenet-r/n01882714/tattoo_10.jpg +- data/imagenet-r/n02883205/art_7.jpg +- data/imagenet-r/n01677366/misc_9.jpg +- data/imagenet-r/n04522168/painting_24.jpg +- data/imagenet-r/n02117135/embroidery_0.jpg +- data/imagenet-r/n01882714/misc_6.jpg +- data/imagenet-r/n02437616/sticker_4.jpg +- data/imagenet-r/n07742313/sketch_23.jpg +- data/imagenet-r/n02395406/cartoon_10.jpg +- data/imagenet-r/n02364673/painting_7.jpg +- data/imagenet-r/n02007558/art_17.jpg +- data/imagenet-r/n03467068/videogame_1.jpg +- data/imagenet-r/n03345487/sketch_21.jpg +- data/imagenet-r/n01531178/cartoon_22.jpg +- data/imagenet-r/n02088238/misc_61.jpg +- data/imagenet-r/n02096585/misc_138.jpg +- data/imagenet-r/n04192698/sculpture_3.jpg +- data/imagenet-r/n01986214/misc_3.jpg +- data/imagenet-r/n01860187/embroidery_0.jpg +- data/imagenet-r/n02317335/tattoo_2.jpg +- data/imagenet-r/n02113624/sketch_22.jpg +- data/imagenet-r/n01784675/origami_5.jpg +- data/imagenet-r/n02165456/tattoo_75.jpg +- data/imagenet-r/n01484850/tattoo_29.jpg +- data/imagenet-r/n02114367/misc_57.jpg +- data/imagenet-r/n04192698/origami_0.jpg +- data/imagenet-r/n01614925/painting_10.jpg +- data/imagenet-r/n02119022/misc_133.jpg +- data/imagenet-r/n02007558/art_19.jpg +- data/imagenet-r/n02108915/misc_91.jpg +- data/imagenet-r/n07614500/tattoo_12.jpg +- data/imagenet-r/n01833805/graphic_6.jpg +- data/imagenet-r/n03272010/deviantart_6.jpg +- data/imagenet-r/n07693725/cartoon_4.jpg +- data/imagenet-r/n02391049/misc_133.jpg +- data/imagenet-r/n02099712/misc_25.jpg +- data/imagenet-r/n01882714/embroidery_0.jpg +- data/imagenet-r/n02088238/misc_3.jpg +- data/imagenet-r/n02980441/videogame_15.jpg +- data/imagenet-r/n01833805/tattoo_29.jpg +- data/imagenet-r/n01944390/tattoo_34.jpg +- data/imagenet-r/n07742313/videogame_6.jpg +- data/imagenet-r/n07697313/toy_23.jpg +- data/imagenet-r/n07718472/sketch_6.jpg +- data/imagenet-r/n02007558/art_7.jpg +- data/imagenet-r/n07745940/embroidery_27.jpg +- data/imagenet-r/n03676483/sketch_5.jpg +- data/imagenet-r/n07920052/deviantart_7.jpg +- data/imagenet-r/n10565667/deviantart_22.jpg +- data/imagenet-r/n02129165/sculpture_8.jpg +- data/imagenet-r/n04591713/art_0.jpg +- data/imagenet-r/n03930630/misc_12.jpg +- data/imagenet-r/n09835506/misc_30.jpg +- data/imagenet-r/n02980441/origami_2.jpg +- data/imagenet-r/n02363005/sculpture_7.jpg +- data/imagenet-r/n07753592/misc_92.jpg +- data/imagenet-r/n02094433/sketch_2.jpg +- data/imagenet-r/n01843383/videogame_4.jpg +- data/imagenet-r/n02106662/misc_33.jpg +- data/imagenet-r/n03594945/misc_7.jpg +- data/imagenet-r/n02769748/cartoon_36.jpg +- data/imagenet-r/n02110341/sketch_18.jpg +- data/imagenet-r/n02823750/cartoon_23.jpg +- data/imagenet-r/n04146614/graphic_0.jpg +- data/imagenet-r/n01910747/graffiti_2.jpg +- data/imagenet-r/n02219486/sculpture_3.jpg +- data/imagenet-r/n03481172/sketch_6.jpg +- data/imagenet-r/n02119022/misc_78.jpg +- data/imagenet-r/n02510455/deviantart_9.jpg +- data/imagenet-r/n02086240/sketch_14.jpg +- data/imagenet-r/n02398521/videogame_2.jpg +- data/imagenet-r/n03930630/sculpture_0.jpg +- data/imagenet-r/n02395406/embroidery_8.jpg +- data/imagenet-r/n04465501/cartoon_2.jpg +- data/imagenet-r/n02129165/tattoo_4.jpg +- data/imagenet-r/n01531178/painting_27.jpg +- data/imagenet-r/n04465501/painting_13.jpg +- data/imagenet-r/n04347754/misc_4.jpg +- data/imagenet-r/n07693725/sketch_5.jpg +- data/imagenet-r/n01847000/misc_14.jpg +- data/imagenet-r/n02129165/tattoo_67.jpg +- data/imagenet-r/n04409515/cartoon_7.jpg +- data/imagenet-r/n01910747/graphic_3.jpg +- data/imagenet-r/n07880968/sketch_19.jpg +- data/imagenet-r/n09472597/deviantart_8.jpg +- data/imagenet-r/n04389033/sticker_1.jpg +- data/imagenet-r/n02437616/painting_11.jpg +- data/imagenet-r/n02607072/misc_4.jpg +- data/imagenet-r/n02510455/misc_93.jpg +- data/imagenet-r/n01833805/deviantart_12.jpg +- data/imagenet-r/n02480855/cartoon_16.jpg +- data/imagenet-r/n02391049/misc_95.jpg +- data/imagenet-r/n07753592/misc_86.jpg +- data/imagenet-r/n03124170/art_7.jpg +- data/imagenet-r/n09472597/sketch_8.jpg +- data/imagenet-r/n02410509/painting_4.jpg +- data/imagenet-r/n07695742/videogame_7.jpg +- data/imagenet-r/n02749479/videogame_8.jpg +- data/imagenet-r/n02802426/videogame_23.jpg +- data/imagenet-r/n03930630/deviantart_5.jpg +- data/imagenet-r/n04536866/sculpture_8.jpg +- data/imagenet-r/n02110958/sketch_12.jpg +- data/imagenet-r/n03345487/cartoon_4.jpg +- data/imagenet-r/n07745940/art_8.jpg +- data/imagenet-r/n02130308/painting_21.jpg +- data/imagenet-r/n07695742/videogame_1.jpg +- data/imagenet-r/n01910747/embroidery_2.jpg +- data/imagenet-r/n01855672/art_8.jpg +- data/imagenet-r/n04522168/cartoon_21.jpg +- data/imagenet-r/n04310018/painting_0.jpg +- data/imagenet-r/n02486410/tattoo_1.jpg +- data/imagenet-r/n02071294/toy_6.jpg +- data/imagenet-r/n01944390/tattoo_40.jpg +- data/imagenet-r/n02088238/misc_81.jpg +- data/imagenet-r/n01514859/cartoon_37.jpg +- data/imagenet-r/n01616318/tattoo_31.jpg +- data/imagenet-r/n02364673/cartoon_14.jpg +- data/imagenet-r/n02797295/misc_42.jpg +- data/imagenet-r/n04086273/misc_1.jpg +- data/imagenet-r/n07614500/toy_4.jpg +- data/imagenet-r/n07920052/graphic_8.jpg +- data/imagenet-r/n07734744/sketch_19.jpg +- data/imagenet-r/n02395406/art_16.jpg +- data/imagenet-r/n02510455/misc_57.jpg +- data/imagenet-r/n04275548/misc_10.jpg +- data/imagenet-r/n07753592/misc_145.jpg +- data/imagenet-r/n07697537/videogame_26.jpg +- data/imagenet-r/n02129165/sculpture_1.jpg +- data/imagenet-r/n02110958/cartoon_19.jpg +- data/imagenet-r/n02110185/tattoo_5.jpg +- data/imagenet-r/n10565667/deviantart_2.jpg +- data/imagenet-r/n02110341/misc_16.jpg +- data/imagenet-r/n02206856/embroidery_31.jpg +- data/imagenet-r/n02437616/graphic_0.jpg +- data/imagenet-r/n02128757/cartoon_14.jpg +- data/imagenet-r/n10565667/cartoon_1.jpg +- data/imagenet-r/n04325704/deviantart_11.jpg +- data/imagenet-r/n04146614/toy_31.jpg +- data/imagenet-r/n07734744/deviantart_25.jpg +- data/imagenet-r/n01944390/misc_49.jpg +- data/imagenet-r/n02843684/art_2.jpg +- data/imagenet-r/n02480855/sketch_3.jpg +- data/imagenet-r/n02123045/painting_11.jpg +- data/imagenet-r/n02909870/sketch_2.jpg +- data/imagenet-r/n02117135/sketch_18.jpg +- data/imagenet-r/n07753592/misc_147.jpg +- data/imagenet-r/n02395406/sketch_21.jpg +- data/imagenet-r/n02364673/cartoon_1.jpg +- data/imagenet-r/n01983481/misc_9.jpg +- data/imagenet-r/n02437616/art_0.jpg +- data/imagenet-r/n04465501/sticker_0.jpg +- data/imagenet-r/n02356798/sketch_5.jpg +- data/imagenet-r/n03594945/painting_5.jpg +- data/imagenet-r/n03494278/sketch_16.jpg +- data/imagenet-r/n02437616/toy_3.jpg +- data/imagenet-r/n02088238/misc_8.jpg +- data/imagenet-r/n01944390/sketch_0.jpg +- data/imagenet-r/n01644373/tattoo_40.jpg +- data/imagenet-r/n03888257/graffiti_3.jpg +- data/imagenet-r/n07693725/sketch_14.jpg +- data/imagenet-r/n02086240/misc_30.jpg +- data/imagenet-r/n02480855/sketch_1.jpg +- data/imagenet-r/n03372029/cartoon_24.jpg +- data/imagenet-r/n02110958/sculpture_6.jpg +- data/imagenet-r/n02481823/toy_2.jpg +- data/imagenet-r/n02206856/art_19.jpg +- data/imagenet-r/n07714990/toy_6.jpg +- data/imagenet-r/n02085620/misc_90.jpg +- data/imagenet-r/n04192698/deviantart_23.jpg +- data/imagenet-r/n02410509/cartoon_26.jpg +- data/imagenet-r/n02092339/sketch_18.jpg +- data/imagenet-r/n02814860/art_19.jpg +- data/imagenet-r/n02129165/art_1.jpg +- data/imagenet-r/n07697537/videogame_2.jpg +- data/imagenet-r/n02510455/misc_74.jpg +- data/imagenet-r/n04275548/painting_11.jpg +- data/imagenet-r/n02102318/painting_6.jpg +- data/imagenet-r/n01770393/tattoo_23.jpg +- data/imagenet-r/n03930630/misc_3.jpg +- data/imagenet-r/n02106662/misc_31.jpg +- data/imagenet-r/n01514859/toy_18.jpg +- data/imagenet-r/n02483362/art_2.jpg +- data/imagenet-r/n07720875/deviantart_6.jpg +- data/imagenet-r/n02190166/sketch_10.jpg +- data/imagenet-r/n02108915/misc_34.jpg +- data/imagenet-r/n02236044/cartoon_27.jpg +- data/imagenet-r/n07697537/misc_70.jpg +- data/imagenet-r/n02268443/misc_79.jpg +- data/imagenet-r/n02108089/misc_35.jpg +- data/imagenet-r/n04552348/deviantart_13.jpg +- data/imagenet-r/n04465501/videogame_18.jpg +- data/imagenet-r/n01518878/toy_3.jpg +- data/imagenet-r/n02007558/sculpture_2.jpg +- data/imagenet-r/n04347754/sketch_24.jpg +- data/imagenet-r/n02219486/misc_4.jpg +- data/imagenet-r/n07749582/cartoon_7.jpg +- data/imagenet-r/n01860187/origami_3.jpg +- data/imagenet-r/n01986214/sketch_22.jpg +- data/imagenet-r/n02099601/misc_27.jpg +- data/imagenet-r/n03888257/sketch_19.jpg +- data/imagenet-r/n02843684/toy_1.jpg +- data/imagenet-r/n01774750/origami_17.jpg +- data/imagenet-r/n02088238/misc_34.jpg +- data/imagenet-r/n02206856/art_1.jpg +- data/imagenet-r/n04275548/toy_3.jpg +- data/imagenet-r/n02226429/sketch_4.jpg +- data/imagenet-r/n07753592/misc_70.jpg +- data/imagenet-r/n02165456/videogame_0.jpg +- data/imagenet-r/n02206856/cartoon_32.jpg +- data/imagenet-r/n04389033/graphic_5.jpg +- data/imagenet-r/n04591713/painting_10.jpg +- data/imagenet-r/n01882714/sketch_15.jpg +- data/imagenet-r/n02134084/misc_88.jpg +- data/imagenet-r/n02117135/graffiti_8.jpg +- data/imagenet-r/n03602883/misc_33.jpg +- data/imagenet-r/n02110185/sticker_0.jpg +- data/imagenet-r/n02110958/painting_15.jpg +- data/imagenet-r/n02364673/painting_18.jpg +- data/imagenet-r/n01748264/tattoo_44.jpg +- data/imagenet-r/n07768694/sketch_1.jpg +- data/imagenet-r/n01748264/sketch_7.jpg +- data/imagenet-r/n02098286/misc_28.jpg +- data/imagenet-r/n02437616/sketch_20.jpg +- data/imagenet-r/n01616318/tattoo_2.jpg +- data/imagenet-r/n10565667/videogame_21.jpg +- data/imagenet-r/n02096585/misc_180.jpg +- data/imagenet-r/n02096585/misc_187.jpg +- data/imagenet-r/n02437616/deviantart_12.jpg +- data/imagenet-r/n03372029/cartoon_18.jpg +- data/imagenet-r/n04118538/cartoon_2.jpg +- data/imagenet-r/n02099712/misc_7.jpg +- data/imagenet-r/n04347754/art_6.jpg +- data/imagenet-r/n02071294/sculpture_10.jpg +- data/imagenet-r/n02672831/graffiti_4.jpg +- data/imagenet-r/n02398521/toy_1.jpg +- data/imagenet-r/n02950826/videogame_17.jpg +- data/imagenet-r/n02802426/deviantart_12.jpg +- data/imagenet-r/n07768694/deviantart_13.jpg +- data/imagenet-r/n03498962/videogame_8.jpg +- data/imagenet-r/n01833805/tattoo_36.jpg +- data/imagenet-r/n02395406/toy_26.jpg +- data/imagenet-r/n02410509/art_6.jpg +- data/imagenet-r/n03773504/toy_0.jpg +- data/imagenet-r/n02364673/graffiti_0.jpg +- data/imagenet-r/n02110341/misc_88.jpg +- data/imagenet-r/n03494278/toy_1.jpg +- data/imagenet-r/n02110958/sketch_7.jpg +- data/imagenet-r/n02129165/deviantart_23.jpg +- data/imagenet-r/n07734744/painting_29.jpg +- data/imagenet-r/n02007558/sketch_5.jpg +- data/imagenet-r/n04086273/graffiti_9.jpg +- data/imagenet-r/n02110958/sticker_1.jpg +- data/imagenet-r/n04552348/deviantart_18.jpg +- data/imagenet-r/n03495258/misc_3.jpg +- data/imagenet-r/n02992529/sketch_23.jpg +- data/imagenet-r/n02948072/deviantart_34.jpg +- data/imagenet-r/n04310018/art_4.jpg +- data/imagenet-r/n02268443/misc_29.jpg +- data/imagenet-r/n02226429/embroidery_2.jpg +- data/imagenet-r/n01531178/painting_10.jpg +- data/imagenet-r/n01677366/sketch_12.jpg +- data/imagenet-r/n04389033/deviantart_10.jpg +- data/imagenet-r/n04389033/videogame_4.jpg +- data/imagenet-r/n02051845/cartoon_10.jpg +- data/imagenet-r/n02948072/cartoon_20.jpg +- data/imagenet-r/n07742313/sketch_21.jpg +- data/imagenet-r/n01944390/misc_40.jpg +- data/imagenet-r/n02966193/art_0.jpg +- data/imagenet-r/n01882714/sculpture_15.jpg +- data/imagenet-r/n02110341/misc_56.jpg +- data/imagenet-r/n01531178/sketch_0.jpg +- data/imagenet-r/n02088466/sketch_3.jpg +- data/imagenet-r/n02526121/sculpture_11.jpg +- data/imagenet-r/n03773504/sketch_8.jpg +- data/imagenet-r/n02099712/misc_1.jpg +- data/imagenet-r/n02317335/embroidery_9.jpg +- data/imagenet-r/n03498962/sketch_12.jpg +- data/imagenet-r/n02236044/graffiti_5.jpg +- data/imagenet-r/n02129165/graphic_4.jpg +- data/imagenet-r/n02480495/tattoo_2.jpg +- data/imagenet-r/n04118538/videogame_0.jpg +- data/imagenet-r/n02206856/sculpture_2.jpg +- data/imagenet-r/n02883205/cartoon_15.jpg +- data/imagenet-r/n07697537/misc_35.jpg +- data/imagenet-r/n04522168/cartoon_18.jpg +- data/imagenet-r/n04536866/painting_24.jpg +- data/imagenet-r/n02992529/sketch_19.jpg +- data/imagenet-r/n02398521/sculpture_7.jpg +- data/imagenet-r/n02486410/graphic_2.jpg +- data/imagenet-r/n10565667/toy_4.jpg +- data/imagenet-r/n01843383/cartoon_34.jpg +- data/imagenet-r/n02129604/tattoo_28.jpg +- data/imagenet-r/n02134084/misc_152.jpg +- data/imagenet-r/n04146614/misc_3.jpg +- data/imagenet-r/n02138441/sculpture_10.jpg +- data/imagenet-r/n02814860/art_9.jpg +- data/imagenet-r/n01774750/painting_3.jpg +- data/imagenet-r/n04465501/sketch_7.jpg +- data/imagenet-r/n02655020/deviantart_19.jpg +- data/imagenet-r/n01494475/misc_146.jpg +- data/imagenet-r/n04347754/sketch_17.jpg +- data/imagenet-r/n02317335/cartoon_20.jpg +- data/imagenet-r/n01443537/sketch_19.jpg +- data/imagenet-r/n02007558/embroidery_4.jpg +- data/imagenet-r/n03124170/misc_15.jpg +- data/imagenet-r/n07720875/painting_1.jpg +- data/imagenet-r/n02165456/tattoo_39.jpg +- data/imagenet-r/n04522168/painting_5.jpg +- data/imagenet-r/n01806143/art_10.jpg +- data/imagenet-r/n02108915/sketch_11.jpg +- data/imagenet-r/n01843383/cartoon_28.jpg +- data/imagenet-r/n02395406/misc_24.jpg +- data/imagenet-r/n02099601/misc_92.jpg +- data/imagenet-r/n01986214/deviantart_11.jpg +- data/imagenet-r/n04552348/deviantart_6.jpg +- data/imagenet-r/n01514859/deviantart_40.jpg +- data/imagenet-r/n02410509/painting_25.jpg +- data/imagenet-r/n02129165/sketch_3.jpg +- data/imagenet-r/n02138441/graffiti_3.jpg +- data/imagenet-r/n04389033/deviantart_23.jpg +- data/imagenet-r/n07745940/deviantart_3.jpg +- data/imagenet-r/n02110341/misc_62.jpg +- data/imagenet-r/n02814860/painting_34.jpg +- data/imagenet-r/n02814860/painting_9.jpg +- data/imagenet-r/n01614925/sketch_4.jpg +- data/imagenet-r/n01983481/sketch_2.jpg +- data/imagenet-r/n02486410/toy_2.jpg +- data/imagenet-r/n03272010/painting_12.jpg +- data/imagenet-r/n02134084/misc_71.jpg +- data/imagenet-r/n02097298/misc_64.jpg +- data/imagenet-r/n02165456/tattoo_74.jpg +- data/imagenet-r/n07753275/painting_21.jpg +- data/imagenet-r/n02007558/origami_10.jpg +- data/imagenet-r/n02325366/misc_13.jpg +- data/imagenet-r/n02909870/sticker_8.jpg +- data/imagenet-r/n02129604/painting_21.jpg +- data/imagenet-r/n01833805/sketch_0.jpg +- data/imagenet-r/n02909870/painting_4.jpg +- data/imagenet-r/n01514859/deviantart_10.jpg +- data/imagenet-r/n02395406/misc_27.jpg +- data/imagenet-r/n02106030/sketch_18.jpg +- data/imagenet-r/n12267677/misc_99.jpg +- data/imagenet-r/n02802426/embroidery_0.jpg +- data/imagenet-r/n02134084/misc_151.jpg +- data/imagenet-r/n02906734/painting_14.jpg +- data/imagenet-r/n01820546/art_21.jpg +- data/imagenet-r/n07714571/deviantart_6.jpg +- data/imagenet-r/n04465501/painting_2.jpg +- data/imagenet-r/n02106550/misc_38.jpg +- data/imagenet-r/n02123045/cartoon_20.jpg +- data/imagenet-r/n01860187/cartoon_11.jpg +- data/imagenet-r/n02091134/misc_61.jpg +- data/imagenet-r/n02190166/painting_2.jpg +- data/imagenet-r/n02071294/cartoon_19.jpg +- data/imagenet-r/n04146614/sculpture_0.jpg +- data/imagenet-r/n03424325/misc_74.jpg +- data/imagenet-r/n02056570/graphic_0.jpg +- data/imagenet-r/n02066245/painting_11.jpg +- data/imagenet-r/n02007558/embroidery_1.jpg +- data/imagenet-r/n07718472/toy_3.jpg +- data/imagenet-r/n03775071/sticker_2.jpg +- data/imagenet-r/n02110341/misc_38.jpg +- data/imagenet-r/n02129165/graffiti_10.jpg +- data/imagenet-r/n02395406/graphic_2.jpg +- data/imagenet-r/n02437616/cartoon_9.jpg +- data/imagenet-r/n01614925/painting_0.jpg +- data/imagenet-r/n02071294/videogame_2.jpg +- data/imagenet-r/n02096585/misc_3.jpg +- data/imagenet-r/n02051845/cartoon_1.jpg +- data/imagenet-r/n02096585/misc_158.jpg +- data/imagenet-r/n04254680/videogame_18.jpg +- data/imagenet-r/n12267677/misc_75.jpg +- data/imagenet-r/n02077923/misc_34.jpg +- data/imagenet-r/n01614925/deviantart_19.jpg +- data/imagenet-r/n03124170/videogame_11.jpg +- data/imagenet-r/n03481172/misc_1.jpg +- data/imagenet-r/n01632777/cartoon_12.jpg +- data/imagenet-r/n02480495/misc_3.jpg +- data/imagenet-r/n07753592/videogame_5.jpg +- data/imagenet-r/n07695742/misc_7.jpg +- data/imagenet-r/n04487394/deviantart_12.jpg +- data/imagenet-r/n02110185/painting_1.jpg +- data/imagenet-r/n01986214/painting_2.jpg +- data/imagenet-r/n02317335/embroidery_12.jpg +- data/imagenet-r/n03594945/sketch_8.jpg +- data/imagenet-r/n04389033/videogame_55.jpg +- data/imagenet-r/n04146614/sketch_4.jpg +- data/imagenet-r/n01644373/deviantart_9.jpg +- data/imagenet-r/n01986214/deviantart_10.jpg +- data/imagenet-r/n04389033/videogame_38.jpg +- data/imagenet-r/n03594945/videogame_4.jpg +- data/imagenet-r/n01833805/graphic_12.jpg +- data/imagenet-r/n02317335/tattoo_13.jpg +- data/imagenet-r/n02793495/embroidery_1.jpg +- data/imagenet-r/n02138441/toy_1.jpg +- data/imagenet-r/n02950826/graphic_2.jpg +- data/imagenet-r/n04522168/painting_26.jpg +- data/imagenet-r/n02802426/sticker_6.jpg +- data/imagenet-r/n04086273/painting_0.jpg +- data/imagenet-r/n02391049/misc_40.jpg +- data/imagenet-r/n02317335/embroidery_4.jpg +- data/imagenet-r/n02948072/sketch_35.jpg +- data/imagenet-r/n02110958/painting_61.jpg +- data/imagenet-r/n02091134/sketch_5.jpg +- data/imagenet-r/n07745940/origami_5.jpg +- data/imagenet-r/n02071294/cartoon_12.jpg +- data/imagenet-r/n02395406/sketch_17.jpg +- data/imagenet-r/n02655020/misc_26.jpg +- data/imagenet-r/n04254680/misc_2.jpg +- data/imagenet-r/n02363005/toy_4.jpg +- data/imagenet-r/n02793495/cartoon_3.jpg +- data/imagenet-r/n02108915/misc_26.jpg +- data/imagenet-r/n03498962/sketch_21.jpg +- data/imagenet-r/n07873807/sketch_13.jpg +- data/imagenet-r/n07734744/cartoon_45.jpg +- data/imagenet-r/n03930630/misc_2.jpg +- data/imagenet-r/n02233338/deviantart_0.jpg +- data/imagenet-r/n04254680/cartoon_6.jpg +- data/imagenet-r/n01983481/misc_17.jpg +- data/imagenet-r/n02134084/misc_113.jpg +- data/imagenet-r/n02951358/videogame_8.jpg +- data/imagenet-r/n03930630/videogame_3.jpg +- data/imagenet-r/n02481823/deviantart_26.jpg +- data/imagenet-r/n02395406/cartoon_14.jpg +- data/imagenet-r/n02123045/painting_39.jpg +- data/imagenet-r/n02363005/cartoon_18.jpg +- data/imagenet-r/n01443537/embroidery_4.jpg +- data/imagenet-r/n01820546/misc_0.jpg +- data/imagenet-r/n07753275/cartoon_7.jpg +- data/imagenet-r/n01514859/art_4.jpg +- data/imagenet-r/n02086240/misc_1.jpg +- data/imagenet-r/n01986214/tattoo_9.jpg +- data/imagenet-r/n02510455/misc_47.jpg +- data/imagenet-r/n02088238/misc_13.jpg +- data/imagenet-r/n02007558/cartoon_20.jpg +- data/imagenet-r/n02112018/misc_1.jpg +- data/imagenet-r/n02165456/misc_2.jpg +- data/imagenet-r/n01694178/cartoon_17.jpg +- data/imagenet-r/n01518878/cartoon_46.jpg +- data/imagenet-r/n04347754/embroidery_0.jpg +- data/imagenet-r/n03345487/sketch_11.jpg +- data/imagenet-r/n02112018/sketch_2.jpg +- data/imagenet-r/n01498041/graphic_1.jpg +- data/imagenet-r/n02114367/sketch_9.jpg +- data/imagenet-r/n02110185/sketch_18.jpg +- data/imagenet-r/n07873807/deviantart_23.jpg +- data/imagenet-r/n02510455/misc_2.jpg +- data/imagenet-r/n01855672/painting_8.jpg +- data/imagenet-r/n01443537/videogame_6.jpg +- data/imagenet-r/n02096585/sketch_23.jpg +- data/imagenet-r/n01855672/deviantart_11.jpg +- data/imagenet-r/n04192698/videogame_16.jpg +- data/imagenet-r/n04465501/embroidery_6.jpg +- data/imagenet-r/n02110341/misc_77.jpg +- data/imagenet-r/n02096585/misc_176.jpg +- data/imagenet-r/n01983481/misc_34.jpg +- data/imagenet-r/n02398521/painting_10.jpg +- data/imagenet-r/n07734744/sketch_7.jpg +- data/imagenet-r/n02219486/graffiti_9.jpg +- data/imagenet-r/n04522168/cartoon_25.jpg +- data/imagenet-r/n07745940/graffiti_7.jpg +- data/imagenet-r/n01843383/art_14.jpg +- data/imagenet-r/n04266014/videogame_32.jpg +- data/imagenet-r/n02510455/sketch_12.jpg +- data/imagenet-r/n02110185/painting_27.jpg +- data/imagenet-r/n02066245/sculpture_5.jpg +- data/imagenet-r/n03481172/sticker_0.jpg +- data/imagenet-r/n10565667/sculpture_0.jpg +- data/imagenet-r/n01498041/tattoo_0.jpg +- data/imagenet-r/n07695742/cartoon_2.jpg +- data/imagenet-r/n02814860/art_21.jpg +- data/imagenet-r/n03424325/misc_12.jpg +- data/imagenet-r/n07614500/sketch_22.jpg +- data/imagenet-r/n02113799/sketch_16.jpg +- data/imagenet-r/n02948072/sketch_8.jpg +- data/imagenet-r/n03602883/sketch_10.jpg +- data/imagenet-r/n01443537/painting_36.jpg +- data/imagenet-r/n01484850/misc_3.jpg +- data/imagenet-r/n03888257/videogame_14.jpg +- data/imagenet-r/n01443537/cartoon_37.jpg +- data/imagenet-r/n01748264/sketch_8.jpg +- data/imagenet-r/n01855672/cartoon_4.jpg +- data/imagenet-r/n02007558/painting_24.jpg +- data/imagenet-r/n07697313/art_43.jpg +- data/imagenet-r/n01944390/sketch_23.jpg +- data/imagenet-r/n01630670/art_1.jpg +- data/imagenet-r/n01847000/tattoo_6.jpg +- data/imagenet-r/n02395406/misc_0.jpg +- data/imagenet-r/n04409515/sketch_4.jpg +- data/imagenet-r/n02398521/sketch_4.jpg +- data/imagenet-r/n02096585/tattoo_3.jpg +- data/imagenet-r/n04086273/sticker_0.jpg +- data/imagenet-r/n04141076/deviantart_24.jpg +- data/imagenet-r/n02129604/sketch_5.jpg +- data/imagenet-r/n02814860/painting_10.jpg +- data/imagenet-r/n02395406/deviantart_2.jpg +- data/imagenet-r/n02481823/graffiti_12.jpg +- data/imagenet-r/n02138441/painting_31.jpg +- data/imagenet-r/n01484850/tattoo_20.jpg +- data/imagenet-r/n02410509/painting_9.jpg +- data/imagenet-r/n01820546/art_23.jpg +- data/imagenet-r/n02165456/art_11.jpg +- data/imagenet-r/n02226429/painting_5.jpg +- data/imagenet-r/n02092339/misc_17.jpg +- data/imagenet-r/n02117135/art_2.jpg +- data/imagenet-r/n02123045/art_9.jpg +- data/imagenet-r/n01820546/deviantart_13.jpg +- data/imagenet-r/n03272010/tattoo_5.jpg +- data/imagenet-r/n09472597/cartoon_14.jpg +- data/imagenet-r/n03467068/cartoon_12.jpg +- data/imagenet-r/n01774750/sketch_2.jpg +- data/imagenet-r/n02206856/cartoon_59.jpg +- data/imagenet-r/n01494475/misc_50.jpg +- data/imagenet-r/n01644373/cartoon_16.jpg +- data/imagenet-r/n04141076/sculpture_13.jpg +- data/imagenet-r/n02395406/cartoon_21.jpg +- data/imagenet-r/n01910747/sculpture_0.jpg +- data/imagenet-r/n02110341/sketch_22.jpg +- data/imagenet-r/n02106166/misc_15.jpg +- data/imagenet-r/n04118538/cartoon_11.jpg +- data/imagenet-r/n01484850/painting_21.jpg +- data/imagenet-r/n02165456/sticker_9.jpg +- data/imagenet-r/n07697313/misc_5.jpg +- data/imagenet-r/n03467068/videogame_4.jpg +- data/imagenet-r/n04552348/videogame_29.jpg +- data/imagenet-r/n01443537/misc_7.jpg +- data/imagenet-r/n02398521/sketch_11.jpg +- data/imagenet-r/n01855672/painting_17.jpg +- data/imagenet-r/n02391049/misc_66.jpg +- data/imagenet-r/n07614500/videogame_9.jpg +- data/imagenet-r/n02110341/misc_126.jpg +- data/imagenet-r/n03495258/sketch_0.jpg +- data/imagenet-r/n07880968/sketch_18.jpg +- data/imagenet-r/n02802426/deviantart_14.jpg +- data/imagenet-r/n01910747/painting_31.jpg +- data/imagenet-r/n02096585/misc_141.jpg +- data/imagenet-r/n02948072/painting_4.jpg +- data/imagenet-r/n02117135/sketch_3.jpg +- data/imagenet-r/n07697537/sketch_19.jpg +- data/imagenet-r/n01833805/painting_20.jpg +- data/imagenet-r/n04310018/videogame_24.jpg +- data/imagenet-r/n02129165/cartoon_35.jpg +- data/imagenet-r/n02391049/sketch_19.jpg +- data/imagenet-r/n02007558/cartoon_16.jpg +- data/imagenet-r/n02395406/misc_22.jpg +- data/imagenet-r/n01833805/videogame_6.jpg +- data/imagenet-r/n02480495/painting_32.jpg +- data/imagenet-r/n07753275/sketch_23.jpg +- data/imagenet-r/n02097298/misc_13.jpg +- data/imagenet-r/n01514859/deviantart_34.jpg +- data/imagenet-r/n02206856/painting_6.jpg +- data/imagenet-r/n04347754/cartoon_2.jpg +- data/imagenet-r/n01518878/videogame_6.jpg +- data/imagenet-r/n04325704/origami_0.jpg +- data/imagenet-r/n02802426/sketch_2.jpg +- data/imagenet-r/n07720875/sketch_1.jpg +- data/imagenet-r/n02091134/misc_85.jpg +- data/imagenet-r/n03372029/painting_9.jpg +- data/imagenet-r/n02769748/art_1.jpg +- data/imagenet-r/n02219486/graffiti_3.jpg +- data/imagenet-r/n07697537/videogame_18.jpg +- data/imagenet-r/n02129604/deviantart_14.jpg +- data/imagenet-r/n07745940/graffiti_13.jpg +- data/imagenet-r/n02808440/origami_0.jpg +- data/imagenet-r/n01484850/painting_1.jpg +- data/imagenet-r/n02447366/misc_2.jpg +- data/imagenet-r/n07753275/painting_6.jpg +- data/imagenet-r/n02395406/graphic_6.jpg +- data/imagenet-r/n02526121/cartoon_34.jpg +- data/imagenet-r/n02233338/tattoo_2.jpg +- data/imagenet-r/n02129165/embroidery_14.jpg +- data/imagenet-r/n03773504/sketch_14.jpg +- data/imagenet-r/n02129165/toy_19.jpg +- data/imagenet-r/n03124170/videogame_3.jpg +- data/imagenet-r/n02165456/art_5.jpg +- data/imagenet-r/n02233338/sketch_12.jpg +- data/imagenet-r/n07614500/embroidery_14.jpg +- data/imagenet-r/n02410509/graphic_2.jpg +- data/imagenet-r/n02110185/tattoo_4.jpg +- data/imagenet-r/n04389033/tattoo_1.jpg +- data/imagenet-r/n03481172/videogame_11.jpg +- data/imagenet-r/n02102318/misc_55.jpg +- data/imagenet-r/n01944390/misc_0.jpg +- data/imagenet-r/n04409515/painting_3.jpg +- data/imagenet-r/n03495258/sculpture_14.jpg +- data/imagenet-r/n01882714/painting_0.jpg +- data/imagenet-r/n03594945/sketch_5.jpg +- data/imagenet-r/n02071294/deviantart_11.jpg +- data/imagenet-r/n01843383/art_9.jpg +- data/imagenet-r/n01986214/sketch_8.jpg +- data/imagenet-r/n01770393/tattoo_61.jpg +- data/imagenet-r/n02883205/toy_12.jpg +- data/imagenet-r/n02106030/misc_0.jpg +- data/imagenet-r/n02906734/cartoon_16.jpg +- data/imagenet-r/n07720875/painting_15.jpg +- data/imagenet-r/n02206856/tattoo_6.jpg +- data/imagenet-r/n12267677/misc_34.jpg +- data/imagenet-r/n07753592/misc_169.jpg +- data/imagenet-r/n07734744/misc_25.jpg +- data/imagenet-r/n01820546/deviantart_12.jpg +- data/imagenet-r/n02110958/tattoo_4.jpg +- data/imagenet-r/n03594945/sketch_7.jpg +- data/imagenet-r/n04389033/origami_11.jpg +- data/imagenet-r/n02113624/misc_7.jpg +- data/imagenet-r/n04310018/deviantart_12.jpg +- data/imagenet-r/n03773504/cartoon_0.jpg +- data/imagenet-r/n02883205/sketch_5.jpg +- data/imagenet-r/n03424325/misc_32.jpg +- data/imagenet-r/n03481172/cartoon_32.jpg +- data/imagenet-r/n02398521/misc_0.jpg +- data/imagenet-r/n07697537/misc_55.jpg +- data/imagenet-r/n01694178/sticker_0.jpg +- data/imagenet-r/n02129604/deviantart_26.jpg +- data/imagenet-r/n01882714/cartoon_45.jpg +- data/imagenet-r/n01843383/deviantart_84.jpg +- data/imagenet-r/n03124170/sketch_16.jpg +- data/imagenet-r/n02510455/misc_4.jpg +- data/imagenet-r/n01531178/art_29.jpg +- data/imagenet-r/n02077923/painting_0.jpg +- data/imagenet-r/n02098286/misc_32.jpg +- data/imagenet-r/n04141076/graffiti_4.jpg +- data/imagenet-r/n04275548/cartoon_1.jpg +- data/imagenet-r/n04147183/deviantart_1.jpg +- data/imagenet-r/n07753275/graffiti_0.jpg +- data/imagenet-r/n02128757/toy_1.jpg +- data/imagenet-r/n03495258/deviantart_0.jpg +- data/imagenet-r/n02134084/deviantart_8.jpg +- data/imagenet-r/n01847000/toy_20.jpg +- data/imagenet-r/n04133789/sketch_10.jpg +- data/imagenet-r/n02486410/sketch_8.jpg +- data/imagenet-r/n07734744/toy_6.jpg +- data/imagenet-r/n02447366/painting_8.jpg +- data/imagenet-r/n02106550/misc_29.jpg +- data/imagenet-r/n01843383/deviantart_89.jpg +- data/imagenet-r/n04487394/misc_2.jpg +- data/imagenet-r/n02391049/misc_101.jpg +- data/imagenet-r/n02091032/misc_17.jpg +- data/imagenet-r/n02128757/sketch_13.jpg +- data/imagenet-r/n02129604/cartoon_1.jpg +- data/imagenet-r/n07745940/sticker_0.jpg +- data/imagenet-r/n02797295/misc_19.jpg +- data/imagenet-r/n02056570/painting_0.jpg +- data/imagenet-r/n02088238/videogame_2.jpg +- data/imagenet-r/n02939185/misc_10.jpg +- data/imagenet-r/n02802426/cartoon_3.jpg +- data/imagenet-r/n02106662/sketch_4.jpg +- data/imagenet-r/n02128385/sculpture_1.jpg +- data/imagenet-r/n01616318/sketch_9.jpg +- data/imagenet-r/n02219486/graffiti_16.jpg +- data/imagenet-r/n01443537/art_0.jpg +- data/imagenet-r/n07697537/deviantart_23.jpg +- data/imagenet-r/n02007558/art_10.jpg +- data/imagenet-r/n02317335/graphic_1.jpg +- data/imagenet-r/n04147183/sketch_0.jpg +- data/imagenet-r/n02129165/sketch_1.jpg +- data/imagenet-r/n02526121/cartoon_31.jpg +- data/imagenet-r/n07734744/embroidery_1.jpg +- data/imagenet-r/n01910747/graffiti_9.jpg +- data/imagenet-r/n01632777/deviantart_11.jpg +- data/imagenet-r/n01910747/tattoo_46.jpg +- data/imagenet-r/n01944390/misc_6.jpg +- data/imagenet-r/n03345487/misc_9.jpg +- data/imagenet-r/n02110341/misc_148.jpg +- data/imagenet-r/n07753592/misc_136.jpg +- data/imagenet-r/n07745940/embroidery_0.jpg +- data/imagenet-r/n03498962/sketch_0.jpg +- data/imagenet-r/n07873807/misc_9.jpg +- data/imagenet-r/n07734744/cartoon_38.jpg +- data/imagenet-r/n01614925/cartoon_14.jpg +- data/imagenet-r/n02206856/graffiti_23.jpg +- data/imagenet-r/n01770393/graffiti_1.jpg +- data/imagenet-r/n02364673/painting_0.jpg +- data/imagenet-r/n01843383/cartoon_1.jpg +- data/imagenet-r/n01518878/sculpture_13.jpg +- data/imagenet-r/n01514859/cartoon_32.jpg +- data/imagenet-r/n04254680/tattoo_4.jpg +- data/imagenet-r/n07753275/sketch_11.jpg +- data/imagenet-r/n02077923/misc_32.jpg +- data/imagenet-r/n03372029/deviantart_1.jpg +- data/imagenet-r/n09835506/misc_27.jpg +- data/imagenet-r/n02165456/painting_6.jpg +- data/imagenet-r/n02219486/sculpture_0.jpg +- data/imagenet-r/n04254680/sketch_14.jpg +- data/imagenet-r/n01748264/tattoo_14.jpg +- data/imagenet-r/n03424325/misc_5.jpg +- data/imagenet-r/n02108915/misc_5.jpg +- data/imagenet-r/n02128757/art_9.jpg +- data/imagenet-r/n02056570/art_1.jpg +- data/imagenet-r/n02110958/graffiti_3.jpg +- data/imagenet-r/n01806143/graphic_9.jpg +- data/imagenet-r/n04389033/sketch_23.jpg +- data/imagenet-r/n01847000/misc_21.jpg +- data/imagenet-r/n01843383/cartoon_43.jpg +- data/imagenet-r/n01843383/videogame_6.jpg +- data/imagenet-r/n02398521/toy_3.jpg +- data/imagenet-r/n01644373/art_7.jpg +- data/imagenet-r/n02749479/tattoo_0.jpg +- data/imagenet-r/n02071294/tattoo_17.jpg +- data/imagenet-r/n04266014/deviantart_9.jpg +- data/imagenet-r/n01616318/painting_0.jpg +- data/imagenet-r/n02481823/sculpture_10.jpg +- data/imagenet-r/n09835506/sketch_21.jpg +- data/imagenet-r/n02219486/embroidery_5.jpg +- data/imagenet-r/n02108915/misc_55.jpg +- data/imagenet-r/n07714571/sketch_12.jpg +- data/imagenet-r/n02007558/painting_17.jpg +- data/imagenet-r/n04552348/toy_12.jpg +- data/imagenet-r/n02096585/tattoo_19.jpg +- data/imagenet-r/n02106550/sketch_21.jpg +- data/imagenet-r/n02110341/deviantart_13.jpg +- data/imagenet-r/n04409515/sketch_10.jpg +- data/imagenet-r/n02948072/origami_4.jpg +- data/imagenet-r/n01847000/misc_16.jpg +- data/imagenet-r/n02356798/cartoon_5.jpg +- data/imagenet-r/n07614500/deviantart_7.jpg +- data/imagenet-r/n02085620/misc_44.jpg +- data/imagenet-r/n07720875/deviantart_15.jpg +- data/imagenet-r/n02165456/toy_44.jpg +- data/imagenet-r/n01748264/sketch_9.jpg +- data/imagenet-r/n10565667/sculpture_7.jpg +- data/imagenet-r/n04552348/videogame_13.jpg +- data/imagenet-r/n02007558/graphic_13.jpg +- data/imagenet-r/n01498041/cartoon_8.jpg +- data/imagenet-r/n02066245/art_1.jpg +- data/imagenet-r/n02110958/sketch_22.jpg +- data/imagenet-r/n12267677/misc_21.jpg +- data/imagenet-r/n02948072/cartoon_24.jpg +- data/imagenet-r/n02966193/art_1.jpg +- data/imagenet-r/n02486410/tattoo_2.jpg +- data/imagenet-r/n01616318/cartoon_10.jpg +- data/imagenet-r/n01847000/sketch_9.jpg +- data/imagenet-r/n03272010/sketch_1.jpg +- data/imagenet-r/n03495258/sketch_21.jpg +- data/imagenet-r/n07714990/graphic_1.jpg +- data/imagenet-r/n01694178/graphic_0.jpg +- data/imagenet-r/n02236044/cartoon_44.jpg +- data/imagenet-r/n01910747/tattoo_31.jpg +- data/imagenet-r/n03930630/toy_16.jpg +- data/imagenet-r/n07697313/cartoon_43.jpg +- data/imagenet-r/n01531178/painting_47.jpg +- data/imagenet-r/n02398521/cartoon_1.jpg +- data/imagenet-r/n04141076/painting_23.jpg +- data/imagenet-r/n03424325/misc_97.jpg +- data/imagenet-r/n02071294/deviantart_29.jpg +- data/imagenet-r/n01774750/origami_11.jpg +- data/imagenet-r/n04389033/sculpture_1.jpg +- data/imagenet-r/n02114367/misc_9.jpg +- data/imagenet-r/n04133789/painting_3.jpg +- data/imagenet-r/n02071294/cartoon_1.jpg +- data/imagenet-r/n01986214/tattoo_0.jpg +- data/imagenet-r/n02091032/misc_12.jpg +- data/imagenet-r/n07718472/sketch_5.jpg +- data/imagenet-r/n02088238/misc_74.jpg +- data/imagenet-r/n02206856/sketch_17.jpg +- data/imagenet-r/n01748264/misc_14.jpg +- data/imagenet-r/n02007558/cartoon_44.jpg +- data/imagenet-r/n02114367/misc_39.jpg +- data/imagenet-r/n01833805/tattoo_100.jpg +- data/imagenet-r/n02128757/painting_8.jpg +- data/imagenet-r/n01910747/tattoo_59.jpg +- data/imagenet-r/n02445715/sketch_21.jpg +- data/imagenet-r/n01514859/art_0.jpg +- data/imagenet-r/n04192698/toy_7.jpg +- data/imagenet-r/n03467068/graffiti_1.jpg +- data/imagenet-r/n02607072/sketch_0.jpg +- data/imagenet-r/n01644373/cartoon_4.jpg +- data/imagenet-r/n02802426/cartoon_19.jpg +- data/imagenet-r/n02883205/sticker_1.jpg +- data/imagenet-r/n02951358/sketch_20.jpg +- data/imagenet-r/n02447366/painting_14.jpg +- data/imagenet-r/n02398521/sketch_12.jpg +- data/imagenet-r/n01847000/tattoo_11.jpg +- data/imagenet-r/n02123045/painting_37.jpg +- data/imagenet-r/n02410509/misc_6.jpg +- data/imagenet-r/n04266014/deviantart_14.jpg +- data/imagenet-r/n01498041/cartoon_1.jpg +- data/imagenet-r/n02655020/videogame_24.jpg +- data/imagenet-r/n02356798/sketch_1.jpg +- data/imagenet-r/n02086240/sketch_20.jpg +- data/imagenet-r/n02236044/cartoon_32.jpg +- data/imagenet-r/n01443537/deviantart_7.jpg +- data/imagenet-r/n02391049/misc_73.jpg +- data/imagenet-r/n07693725/painting_9.jpg +- data/imagenet-r/n04254680/cartoon_14.jpg +- data/imagenet-r/n02106662/misc_11.jpg +- data/imagenet-r/n01860187/origami_4.jpg +- data/imagenet-r/n03495258/sculpture_21.jpg +- data/imagenet-r/n02391049/misc_60.jpg +- data/imagenet-r/n02096585/misc_168.jpg +- data/imagenet-r/n07714571/sketch_22.jpg +- data/imagenet-r/n01514859/embroidery_2.jpg +- data/imagenet-r/n02391049/misc_23.jpg +- data/imagenet-r/n01614925/deviantart_11.jpg +- data/imagenet-r/n02410509/sculpture_53.jpg +- data/imagenet-r/n02391049/misc_100.jpg +- data/imagenet-r/n02088364/misc_22.jpg +- data/imagenet-r/n02129604/tattoo_29.jpg +- data/imagenet-r/n02110958/tattoo_27.jpg +- data/imagenet-r/n04133789/cartoon_22.jpg +- data/imagenet-r/n02966193/sketch_21.jpg +- data/imagenet-r/n01843383/deviantart_29.jpg +- data/imagenet-r/n02391049/misc_107.jpg +- data/imagenet-r/n02096585/misc_68.jpg +- data/imagenet-r/n04275548/sketch_23.jpg +- data/imagenet-r/n07614500/graphic_3.jpg +- data/imagenet-r/n02091134/sketch_18.jpg +- data/imagenet-r/n04487394/deviantart_6.jpg +- data/imagenet-r/n02085620/tattoo_7.jpg +- data/imagenet-r/n02091032/misc_10.jpg +- data/imagenet-r/n01443537/painting_23.jpg +- data/imagenet-r/n02123045/cartoon_11.jpg +- data/imagenet-r/n01494475/misc_105.jpg +- data/imagenet-r/n07768694/sketch_14.jpg +- data/imagenet-r/n02447366/misc_1.jpg +- data/imagenet-r/n03481172/videogame_9.jpg +- data/imagenet-r/n04536866/painting_10.jpg +- data/imagenet-r/n07614500/sketch_0.jpg +- data/imagenet-r/n02346627/cartoon_14.jpg +- data/imagenet-r/n01806143/misc_2.jpg +- data/imagenet-r/n02364673/painting_20.jpg +- data/imagenet-r/n01847000/sketch_17.jpg +- data/imagenet-r/n04552348/sticker_0.jpg +- data/imagenet-r/n07714990/painting_3.jpg +- data/imagenet-r/n02007558/embroidery_10.jpg +- data/imagenet-r/n09472597/art_9.jpg +- data/imagenet-r/n02051845/graffiti_2.jpg +- data/imagenet-r/n02980441/toy_0.jpg +- data/imagenet-r/n01494475/misc_12.jpg +- data/imagenet-r/n01534433/painting_6.jpg +- data/imagenet-r/n04086273/tattoo_27.jpg +- data/imagenet-r/n02226429/origami_12.jpg +- data/imagenet-r/n01910747/misc_6.jpg +- data/imagenet-r/n01833805/origami_7.jpg +- data/imagenet-r/n02749479/misc_19.jpg +- data/imagenet-r/n01644373/cartoon_24.jpg +- data/imagenet-r/n01833805/tattoo_49.jpg +- data/imagenet-r/n09472597/misc_0.jpg +- data/imagenet-r/n03372029/sculpture_4.jpg +- data/imagenet-r/n01614925/sculpture_11.jpg +- data/imagenet-r/n02110341/misc_45.jpg +- data/imagenet-r/n03930630/misc_1.jpg +- data/imagenet-r/n07749582/cartoon_8.jpg +- data/imagenet-r/n04266014/tattoo_1.jpg +- data/imagenet-r/n02096585/misc_55.jpg +- data/imagenet-r/n01784675/toy_7.jpg +- data/imagenet-r/n02085620/misc_60.jpg +- data/imagenet-r/n04347754/sculpture_0.jpg +- data/imagenet-r/n04389033/origami_8.jpg +- data/imagenet-r/n02236044/tattoo_13.jpg +- data/imagenet-r/n02325366/misc_17.jpg +- data/imagenet-r/n07742313/deviantart_12.jpg +- data/imagenet-r/n02110958/sculpture_10.jpg +- data/imagenet-r/n02410509/misc_5.jpg +- data/imagenet-r/n02279972/tattoo_17.jpg +- data/imagenet-r/n02950826/toy_0.jpg +- data/imagenet-r/n09472597/graphic_8.jpg +- data/imagenet-r/n02094433/sketch_23.jpg +- data/imagenet-r/n01770393/tattoo_33.jpg +- data/imagenet-r/n02672831/cartoon_32.jpg +- data/imagenet-r/n04086273/tattoo_34.jpg +- data/imagenet-r/n04536866/sketch_22.jpg +- data/imagenet-r/n02129165/graffiti_6.jpg +- data/imagenet-r/n01847000/misc_24.jpg +- data/imagenet-r/n04141076/cartoon_39.jpg +- data/imagenet-r/n03676483/sketch_12.jpg +- data/imagenet-r/n01484850/deviantart_17.jpg +- data/imagenet-r/n02909870/toy_1.jpg +- data/imagenet-r/n02110958/sculpture_9.jpg +- data/imagenet-r/n07614500/sketch_17.jpg +- data/imagenet-r/n03773504/sketch_20.jpg +- data/imagenet-r/n03452741/deviantart_9.jpg +- data/imagenet-r/n02364673/deviantart_7.jpg +- data/imagenet-r/n02071294/painting_20.jpg +- data/imagenet-r/n02823750/deviantart_8.jpg +- data/imagenet-r/n01484850/art_3.jpg +- data/imagenet-r/n02088238/misc_26.jpg +- data/imagenet-r/n07720875/painting_0.jpg +- data/imagenet-r/n02909870/sculpture_0.jpg +- data/imagenet-r/n01443537/painting_19.jpg +- data/imagenet-r/n02268443/misc_122.jpg +- data/imagenet-r/n02797295/misc_59.jpg +- data/imagenet-r/n04389033/videogame_1.jpg +- data/imagenet-r/n01833805/tattoo_47.jpg +- data/imagenet-r/n02110958/painting_12.jpg +- data/imagenet-r/n02110185/painting_8.jpg +- data/imagenet-r/n02129604/painting_1.jpg +- data/imagenet-r/n01614925/sketch_7.jpg +- data/imagenet-r/n01443537/graffiti_7.jpg +- data/imagenet-r/n07718472/cartoon_14.jpg +- data/imagenet-r/n04409515/art_6.jpg +- data/imagenet-r/n02102318/misc_40.jpg +- data/imagenet-r/n01518878/cartoon_8.jpg +- data/imagenet-r/n07753592/sketch_6.jpg +- data/imagenet-r/n02102318/sketch_9.jpg +- data/imagenet-r/n03467068/cartoon_11.jpg +- data/imagenet-r/n04147183/painting_15.jpg +- data/imagenet-r/n01833805/misc_1.jpg +- data/imagenet-r/n07734744/graffiti_11.jpg +- data/imagenet-r/n01843383/painting_14.jpg +- data/imagenet-r/n02112018/sketch_3.jpg +- data/imagenet-r/n02356798/cartoon_15.jpg +- data/imagenet-r/n02190166/graffiti_1.jpg +- data/imagenet-r/n02056570/painting_4.jpg +- data/imagenet-r/n07697313/deviantart_14.jpg +- data/imagenet-r/n02112137/misc_5.jpg +- data/imagenet-r/n02268443/misc_64.jpg +- data/imagenet-r/n01443537/cartoon_13.jpg +- data/imagenet-r/n02096585/tattoo_6.jpg +- data/imagenet-r/n04552348/sketch_10.jpg +- data/imagenet-r/n02088364/sketch_14.jpg +- data/imagenet-r/n03481172/graffiti_6.jpg +- data/imagenet-r/n07714990/deviantart_28.jpg +- data/imagenet-r/n07693725/cartoon_19.jpg +- data/imagenet-r/n02268443/misc_157.jpg +- data/imagenet-r/n02091134/misc_46.jpg +- data/imagenet-r/n02071294/deviantart_37.jpg +- data/imagenet-r/n02097298/misc_66.jpg +- data/imagenet-r/n02398521/cartoon_23.jpg +- data/imagenet-r/n04591713/sketch_21.jpg +- data/imagenet-r/n01518878/toy_6.jpg +- data/imagenet-r/n02007558/sketch_22.jpg +- data/imagenet-r/n12267677/misc_80.jpg +- data/imagenet-r/n04266014/cartoon_1.jpg +- data/imagenet-r/n02088238/sketch_6.jpg +- data/imagenet-r/n02909870/graphic_17.jpg +- data/imagenet-r/n02481823/painting_13.jpg +- data/imagenet-r/n02129604/tattoo_15.jpg +- data/imagenet-r/n01748264/deviantart_5.jpg +- data/imagenet-r/n02808440/cartoon_0.jpg +- data/imagenet-r/n02110185/tattoo_6.jpg +- data/imagenet-r/n01882714/toy_34.jpg +- data/imagenet-r/n02219486/tattoo_15.jpg +- data/imagenet-r/n02480855/tattoo_49.jpg +- data/imagenet-r/n02233338/misc_26.jpg +- data/imagenet-r/n02007558/graffiti_31.jpg +- data/imagenet-r/n09835506/videogame_21.jpg +- data/imagenet-r/n02226429/cartoon_8.jpg +- data/imagenet-r/n03124170/cartoon_28.jpg +- data/imagenet-r/n07614500/tattoo_1.jpg +- data/imagenet-r/n02236044/cartoon_3.jpg +- data/imagenet-r/n02814860/sticker_4.jpg +- data/imagenet-r/n04133789/toy_0.jpg +- data/imagenet-r/n02077923/sketch_13.jpg +- data/imagenet-r/n01694178/sketch_15.jpg +- data/imagenet-r/n02056570/deviantart_7.jpg +- data/imagenet-r/n07873807/cartoon_3.jpg +- data/imagenet-r/n01498041/toy_3.jpg +- data/imagenet-r/n01843383/painting_28.jpg +- data/imagenet-r/n02134084/sketch_9.jpg +- data/imagenet-r/n02096585/sketch_8.jpg +- data/imagenet-r/n01910747/cartoon_30.jpg +- data/imagenet-r/n01944390/misc_103.jpg +- data/imagenet-r/n01910747/graffiti_6.jpg +- data/imagenet-r/n02236044/graffiti_1.jpg +- data/imagenet-r/n02437616/cartoon_5.jpg +- data/imagenet-r/n02114367/sketch_1.jpg +- data/imagenet-r/n04192698/deviantart_2.jpg +- data/imagenet-r/n04086273/cartoon_12.jpg +- data/imagenet-r/n02481823/sculpture_0.jpg +- data/imagenet-r/n01843383/graffiti_11.jpg +- data/imagenet-r/n02112018/misc_45.jpg +- data/imagenet-r/n02130308/cartoon_6.jpg +- data/imagenet-r/n02948072/sketch_7.jpg +- data/imagenet-r/n07697313/sketch_3.jpg +- data/imagenet-r/n01498041/tattoo_8.jpg +- data/imagenet-r/n02088094/misc_48.jpg +- data/imagenet-r/n02130308/sketch_18.jpg +- data/imagenet-r/n04254680/sketch_22.jpg +- data/imagenet-r/n02398521/sculpture_2.jpg +- data/imagenet-r/n02236044/origami_27.jpg +- data/imagenet-r/n02510455/deviantart_19.jpg +- data/imagenet-r/n02119022/videogame_0.jpg +- data/imagenet-r/n02085620/misc_96.jpg +- data/imagenet-r/n07745940/origami_11.jpg +- data/imagenet-r/n04086273/sketch_18.jpg +- data/imagenet-r/n01855672/sculpture_4.jpg +- data/imagenet-r/n04141076/cartoon_64.jpg +- data/imagenet-r/n02108915/misc_2.jpg +- data/imagenet-r/n03481172/cartoon_22.jpg +- data/imagenet-r/n02391049/misc_52.jpg +- data/imagenet-r/n01910747/sculpture_7.jpg +- data/imagenet-r/n03424325/misc_55.jpg +- data/imagenet-r/n02843684/sculpture_4.jpg +- data/imagenet-r/n02106550/misc_36.jpg +- data/imagenet-r/n01833805/tattoo_99.jpg +- data/imagenet-r/n02906734/origami_1.jpg +- data/imagenet-r/n07749582/painting_26.jpg +- data/imagenet-r/n07714571/sketch_11.jpg +- data/imagenet-r/n02797295/misc_56.jpg +- data/imagenet-r/n02480495/painting_18.jpg +- data/imagenet-r/n02480855/sculpture_16.jpg +- data/imagenet-r/n04275548/sculpture_6.jpg +- data/imagenet-r/n02007558/graphic_12.jpg +- data/imagenet-r/n07714990/toy_9.jpg +- data/imagenet-r/n02395406/graphic_7.jpg +- data/imagenet-r/n03424325/misc_1.jpg +- data/imagenet-r/n01614925/cartoon_0.jpg +- data/imagenet-r/n02226429/sculpture_2.jpg +- data/imagenet-r/n02190166/sketch_16.jpg +- data/imagenet-r/n02108089/misc_42.jpg +- data/imagenet-r/n04536866/painting_12.jpg +- data/imagenet-r/n04254680/sticker_1.jpg +- data/imagenet-r/n02113023/misc_20.jpg +- data/imagenet-r/n02951358/painting_8.jpg +- data/imagenet-r/n02398521/painting_12.jpg +- data/imagenet-r/n02802426/cartoon_1.jpg +- data/imagenet-r/n07714990/toy_5.jpg +- data/imagenet-r/n02110341/misc_57.jpg +- data/imagenet-r/n02106662/sketch_16.jpg +- data/imagenet-r/n02117135/painting_13.jpg +- data/imagenet-r/n02102318/sketch_0.jpg +- data/imagenet-r/n01614925/painting_40.jpg +- data/imagenet-r/n01855672/painting_2.jpg +- data/imagenet-r/n07920052/cartoon_10.jpg +- data/imagenet-r/n02480855/misc_1.jpg +- data/imagenet-r/n02672831/graffiti_10.jpg +- data/imagenet-r/n02268443/misc_50.jpg +- data/imagenet-r/n02134084/misc_87.jpg +- data/imagenet-r/n09835506/deviantart_2.jpg +- data/imagenet-r/n01860187/cartoon_1.jpg +- data/imagenet-r/n02655020/videogame_11.jpg +- data/imagenet-r/n02102318/misc_48.jpg +- data/imagenet-r/n02102318/painting_8.jpg +- data/imagenet-r/n02009912/misc_15.jpg +- data/imagenet-r/n07745940/graphic_0.jpg +- data/imagenet-r/n02108915/tattoo_1.jpg +- data/imagenet-r/n03630383/toy_2.jpg +- data/imagenet-r/n07614500/cartoon_7.jpg +- data/imagenet-r/n01614925/deviantart_18.jpg +- data/imagenet-r/n02814860/art_17.jpg +- data/imagenet-r/n01855672/art_3.jpg +- data/imagenet-r/n01843383/cartoon_20.jpg +- data/imagenet-r/n01616318/cartoon_19.jpg +- data/imagenet-r/n02317335/cartoon_22.jpg +- data/imagenet-r/n04141076/cartoon_27.jpg +- data/imagenet-r/n01820546/painting_9.jpg +- data/imagenet-r/n02607072/misc_13.jpg +- data/imagenet-r/n07693725/deviantart_5.jpg +- data/imagenet-r/n07734744/painting_7.jpg +- data/imagenet-r/n07745940/graffiti_15.jpg +- data/imagenet-r/n04536866/painting_14.jpg +- data/imagenet-r/n02701002/sketch_15.jpg +- data/imagenet-r/n02096585/sketch_21.jpg +- data/imagenet-r/n01614925/painting_28.jpg +- data/imagenet-r/n02206856/tattoo_28.jpg +- data/imagenet-r/n02051845/sketch_23.jpg +- data/imagenet-r/n02106662/misc_34.jpg +- data/imagenet-r/n01518878/cartoon_31.jpg +- data/imagenet-r/n02749479/art_0.jpg +- data/imagenet-r/n02056570/graffiti_1.jpg +- data/imagenet-r/n07920052/sketch_13.jpg +- data/imagenet-r/n02110185/sketch_0.jpg +- data/imagenet-r/n07614500/toy_16.jpg +- data/imagenet-r/n03124170/videogame_0.jpg +- data/imagenet-r/n01986214/art_1.jpg +- data/imagenet-r/n02110341/misc_51.jpg +- data/imagenet-r/n01514859/cartoon_34.jpg +- data/imagenet-r/n02138441/art_11.jpg +- data/imagenet-r/n02749479/videogame_14.jpg +- data/imagenet-r/n02117135/toy_5.jpg +- data/imagenet-r/n04275548/videogame_10.jpg +- data/imagenet-r/n12267677/misc_81.jpg +- data/imagenet-r/n07734744/graphic_5.jpg +- data/imagenet-r/n01443537/art_9.jpg +- data/imagenet-r/n07753275/sketch_1.jpg +- data/imagenet-r/n02129165/tattoo_16.jpg +- data/imagenet-r/n02007558/origami_4.jpg +- data/imagenet-r/n02106662/misc_66.jpg +- data/imagenet-r/n02206856/graffiti_33.jpg +- data/imagenet-r/n01986214/sculpture_10.jpg +- data/imagenet-r/n07697313/cartoon_5.jpg +- data/imagenet-r/n02123045/cartoon_3.jpg +- data/imagenet-r/n02951358/painting_2.jpg +- data/imagenet-r/n02802426/deviantart_3.jpg +- data/imagenet-r/n02226429/art_5.jpg +- data/imagenet-r/n02128757/art_2.jpg +- data/imagenet-r/n02112137/misc_0.jpg +- data/imagenet-r/n07697537/misc_42.jpg +- data/imagenet-r/n02951358/painting_15.jpg +- data/imagenet-r/n01986214/origami_16.jpg +- data/imagenet-r/n01944390/deviantart_13.jpg +- data/imagenet-r/n02423022/sketch_20.jpg +- data/imagenet-r/n02823750/graffiti_0.jpg +- data/imagenet-r/n02088094/sketch_4.jpg +- data/imagenet-r/n01833805/embroidery_12.jpg +- data/imagenet-r/n02009912/misc_30.jpg +- data/imagenet-r/n01632777/painting_1.jpg +- data/imagenet-r/n02317335/art_2.jpg +- data/imagenet-r/n02363005/cartoon_13.jpg +- data/imagenet-r/n12267677/deviantart_15.jpg +- data/imagenet-r/n02099601/misc_40.jpg +- data/imagenet-r/n03947888/sticker_2.jpg +- data/imagenet-r/n03594945/painting_1.jpg +- data/imagenet-r/n02823750/sketch_9.jpg +- data/imagenet-r/n02056570/deviantart_1.jpg +- data/imagenet-r/n02279972/art_20.jpg +- data/imagenet-r/n07697313/videogame_0.jpg +- data/imagenet-r/n02096585/misc_92.jpg +- data/imagenet-r/n02206856/toy_38.jpg +- data/imagenet-r/n02233338/tattoo_0.jpg +- data/imagenet-r/n02325366/misc_43.jpg +- data/imagenet-r/n02841315/painting_6.jpg +- data/imagenet-r/n01882714/graffiti_5.jpg +- data/imagenet-r/n02317335/sketch_16.jpg +- data/imagenet-r/n02206856/cartoon_13.jpg +- data/imagenet-r/n02226429/origami_5.jpg +- data/imagenet-r/n03602883/misc_37.jpg +- data/imagenet-r/n02110958/tattoo_6.jpg +- data/imagenet-r/n02510455/misc_86.jpg +- data/imagenet-r/n04591713/embroidery_0.jpg +- data/imagenet-r/n02391049/misc_63.jpg +- data/imagenet-r/n01833805/cartoon_24.jpg +- data/imagenet-r/n03272010/cartoon_24.jpg +- data/imagenet-r/n02948072/cartoon_32.jpg +- data/imagenet-r/n04133789/cartoon_3.jpg +- data/imagenet-r/n07745940/deviantart_2.jpg +- data/imagenet-r/n01986214/tattoo_8.jpg +- data/imagenet-r/n02138441/painting_2.jpg +- data/imagenet-r/n02510455/misc_49.jpg +- data/imagenet-r/n02395406/misc_18.jpg +- data/imagenet-r/n02114367/misc_24.jpg +- data/imagenet-r/n04266014/cartoon_42.jpg +- data/imagenet-r/n02481823/sculpture_9.jpg +- data/imagenet-r/n09835506/videogame_10.jpg +- data/imagenet-r/n02410509/sketch_2.jpg +- data/imagenet-r/n04347754/graffiti_1.jpg +- data/imagenet-r/n02980441/sketch_2.jpg +- data/imagenet-r/n02129604/sticker_0.jpg +- data/imagenet-r/n04275548/deviantart_5.jpg +- data/imagenet-r/n07742313/sculpture_1.jpg +- data/imagenet-r/n02398521/graffiti_3.jpg +- data/imagenet-r/n02279972/art_11.jpg +- data/imagenet-r/n07734744/graffiti_8.jpg +- data/imagenet-r/n04389033/videogame_49.jpg +- data/imagenet-r/n02007558/deviantart_6.jpg +- data/imagenet-r/n02119022/misc_73.jpg +- data/imagenet-r/n01534433/art_3.jpg +- data/imagenet-r/n02108089/misc_54.jpg +- data/imagenet-r/n02672831/sticker_6.jpg +- data/imagenet-r/n04192698/deviantart_21.jpg +- data/imagenet-r/n03888257/sketch_14.jpg +- data/imagenet-r/n01806143/origami_0.jpg +- data/imagenet-r/n02206856/painting_14.jpg +- data/imagenet-r/n02086240/misc_36.jpg +- data/imagenet-r/n07734744/toy_3.jpg +- data/imagenet-r/n01514859/painting_1.jpg +- data/imagenet-r/n02134084/misc_90.jpg +- data/imagenet-r/n03424325/misc_80.jpg +- data/imagenet-r/n03495258/videogame_3.jpg +- data/imagenet-r/n02096585/misc_111.jpg +- data/imagenet-r/n02279972/tattoo_5.jpg +- data/imagenet-r/n01774750/tattoo_19.jpg +- data/imagenet-r/n01806143/art_5.jpg +- data/imagenet-r/n07920052/cartoon_15.jpg +- data/imagenet-r/n02130308/graffiti_7.jpg +- data/imagenet-r/n04325704/cartoon_14.jpg +- data/imagenet-r/n02119022/sketch_6.jpg +- data/imagenet-r/n02672831/sculpture_5.jpg +- data/imagenet-r/n02793495/toy_2.jpg +- data/imagenet-r/n02363005/sculpture_8.jpg +- data/imagenet-r/n04147183/painting_7.jpg +- data/imagenet-r/n03649909/toy_3.jpg +- data/imagenet-r/n02130308/sketch_6.jpg +- data/imagenet-r/n02096585/misc_91.jpg +- data/imagenet-r/n07693725/painting_0.jpg +- data/imagenet-r/n07873807/videogame_4.jpg +- data/imagenet-r/n02007558/painting_8.jpg +- data/imagenet-r/n02391049/deviantart_2.jpg +- data/imagenet-r/n01910747/cartoon_28.jpg +- data/imagenet-r/n01614925/cartoon_19.jpg +- data/imagenet-r/n04310018/videogame_34.jpg +- data/imagenet-r/n02486410/sculpture_15.jpg +- data/imagenet-r/n04522168/sketch_16.jpg +- data/imagenet-r/n02086240/sketch_10.jpg +- data/imagenet-r/n01616318/cartoon_27.jpg +- data/imagenet-r/n07753592/misc_72.jpg +- data/imagenet-r/n07697537/videogame_6.jpg +- data/imagenet-r/n04389033/sketch_28.jpg +- data/imagenet-r/n07920052/deviantart_14.jpg +- data/imagenet-r/n02206856/tattoo_24.jpg +- data/imagenet-r/n04536866/painting_32.jpg +- data/imagenet-r/n04266014/toy_9.jpg +- data/imagenet-r/n01694178/sketch_4.jpg +- data/imagenet-r/n04086273/art_4.jpg +- data/imagenet-r/n02066245/sketch_17.jpg +- data/imagenet-r/n02088466/misc_12.jpg +- data/imagenet-r/n07720875/painting_34.jpg +- data/imagenet-r/n02480855/art_9.jpg +- data/imagenet-r/n01843383/toy_3.jpg +- data/imagenet-r/n04522168/deviantart_4.jpg +- data/imagenet-r/n07768694/deviantart_9.jpg +- data/imagenet-r/n02206856/sketch_19.jpg +- data/imagenet-r/n02233338/misc_52.jpg +- data/imagenet-r/n02110341/misc_117.jpg +- data/imagenet-r/n04266014/graphic_6.jpg +- data/imagenet-r/n02112137/sketch_10.jpg +- data/imagenet-r/n07734744/videogame_50.jpg +- data/imagenet-r/n02939185/tattoo_7.jpg +- data/imagenet-r/n03649909/toy_22.jpg +- data/imagenet-r/n04141076/art_5.jpg +- data/imagenet-r/n02410509/toy_8.jpg +- data/imagenet-r/n02510455/deviantart_24.jpg +- data/imagenet-r/n02437616/cartoon_20.jpg +- data/imagenet-r/n02980441/cartoon_8.jpg +- data/imagenet-r/n02447366/art_3.jpg +- data/imagenet-r/n02510455/deviantart_27.jpg +- data/imagenet-r/n04487394/toy_0.jpg +- data/imagenet-r/n02410509/cartoon_10.jpg +- data/imagenet-r/n03602883/misc_39.jpg +- data/imagenet-r/n02325366/sketch_7.jpg +- data/imagenet-r/n02823750/tattoo_0.jpg +- data/imagenet-r/n04465501/graphic_4.jpg +- data/imagenet-r/n04310018/painting_23.jpg +- data/imagenet-r/n02843684/misc_10.jpg +- data/imagenet-r/n01518878/sketch_17.jpg +- data/imagenet-r/n02906734/misc_5.jpg +- data/imagenet-r/n02317335/cartoon_3.jpg +- data/imagenet-r/n07734744/graffiti_14.jpg +- data/imagenet-r/n01833805/tattoo_7.jpg +- data/imagenet-r/n01784675/tattoo_9.jpg +- data/imagenet-r/n02423022/cartoon_18.jpg +- data/imagenet-r/n02364673/deviantart_8.jpg +- data/imagenet-r/n02480855/videogame_4.jpg +- data/imagenet-r/n02793495/sketch_1.jpg +- data/imagenet-r/n02110958/cartoon_58.jpg +- data/imagenet-r/n02445715/cartoon_31.jpg +- data/imagenet-r/n02099712/misc_9.jpg +- data/imagenet-r/n02909870/cartoon_25.jpg +- data/imagenet-r/n01833805/tattoo_85.jpg +- data/imagenet-r/n01983481/misc_48.jpg +- data/imagenet-r/n07697537/misc_101.jpg +- data/imagenet-r/n01910747/sculpture_4.jpg +- data/imagenet-r/n02113023/sketch_5.jpg +- data/imagenet-r/n01855672/sketch_21.jpg +- data/imagenet-r/n02797295/misc_45.jpg +- data/imagenet-r/n02099601/misc_38.jpg +- data/imagenet-r/n01774750/videogame_2.jpg +- data/imagenet-r/n07697537/misc_46.jpg +- data/imagenet-r/n02655020/misc_8.jpg +- data/imagenet-r/n04389033/videogame_46.jpg +- data/imagenet-r/n07734744/cartoon_47.jpg +- data/imagenet-r/n07614500/graphic_8.jpg +- data/imagenet-r/n04409515/sketch_14.jpg +- data/imagenet-r/n01774750/origami_22.jpg +- data/imagenet-r/n02165456/painting_5.jpg +- data/imagenet-r/n01494475/misc_62.jpg +- data/imagenet-r/n04254680/deviantart_7.jpg +- data/imagenet-r/n02051845/sketch_13.jpg +- data/imagenet-r/n07714990/deviantart_5.jpg +- data/imagenet-r/n07714990/painting_11.jpg +- data/imagenet-r/n01847000/graffiti_2.jpg +- data/imagenet-r/n09835506/sketch_17.jpg +- data/imagenet-r/n04347754/sticker_1.jpg +- data/imagenet-r/n02129604/art_2.jpg +- data/imagenet-r/n02948072/deviantart_6.jpg +- data/imagenet-r/n01484850/cartoon_16.jpg +- data/imagenet-r/n04389033/graffiti_17.jpg +- data/imagenet-r/n02094433/misc_35.jpg +- data/imagenet-r/n01694178/sketch_9.jpg +- data/imagenet-r/n03452741/misc_5.jpg +- data/imagenet-r/n02094433/sketch_6.jpg +- data/imagenet-r/n02091134/misc_38.jpg +- data/imagenet-r/n04266014/sticker_1.jpg +- data/imagenet-r/n02423022/origami_0.jpg +- data/imagenet-r/n04591713/painting_24.jpg +- data/imagenet-r/n03481172/sketch_15.jpg +- data/imagenet-r/n01843383/tattoo_11.jpg +- data/imagenet-r/n01518878/painting_24.jpg +- data/imagenet-r/n02106550/misc_33.jpg +- data/imagenet-r/n01677366/misc_3.jpg +- data/imagenet-r/n02948072/embroidery_34.jpg +- data/imagenet-r/n02088094/misc_53.jpg +- data/imagenet-r/n07734744/videogame_30.jpg +- data/imagenet-r/n02317335/cartoon_23.jpg +- data/imagenet-r/n02129165/tattoo_15.jpg +- data/imagenet-r/n04254680/painting_1.jpg +- data/imagenet-r/n04347754/videogame_4.jpg +- data/imagenet-r/n07742313/sketch_10.jpg +- data/imagenet-r/n02672831/toy_1.jpg +- data/imagenet-r/n02123045/cartoon_6.jpg +- data/imagenet-r/n02950826/videogame_2.jpg +- data/imagenet-r/n02672831/cartoon_28.jpg +- data/imagenet-r/n02480855/sculpture_0.jpg +- data/imagenet-r/n02909870/graffiti_6.jpg +- data/imagenet-r/n01806143/painting_13.jpg +- data/imagenet-r/n01494475/misc_49.jpg +- data/imagenet-r/n02190166/graffiti_9.jpg +- data/imagenet-r/n02363005/misc_8.jpg +- data/imagenet-r/n02814860/embroidery_12.jpg +- data/imagenet-r/n04347754/sketch_10.jpg +- data/imagenet-r/n01774750/sketch_19.jpg +- data/imagenet-r/n04591713/painting_23.jpg +- data/imagenet-r/n01484850/sculpture_6.jpg +- data/imagenet-r/n02110958/cartoon_29.jpg +- data/imagenet-r/n01910747/deviantart_14.jpg +- data/imagenet-r/n01614925/tattoo_19.jpg +- data/imagenet-r/n07695742/painting_5.jpg +- data/imagenet-r/n02672831/sculpture_0.jpg +- data/imagenet-r/n01860187/misc_4.jpg +- data/imagenet-r/n02110341/misc_27.jpg +- data/imagenet-r/n02071294/art_14.jpg +- data/imagenet-r/n02071294/painting_8.jpg +- data/imagenet-r/n02123045/painting_47.jpg +- data/imagenet-r/n02123045/cartoon_24.jpg +- data/imagenet-r/n07734744/origami_2.jpg +- data/imagenet-r/n01820546/painting_33.jpg +- data/imagenet-r/n02206856/sticker_1.jpg +- data/imagenet-r/n01847000/tattoo_10.jpg +- data/imagenet-r/n02130308/painting_9.jpg +- data/imagenet-r/n02395406/painting_0.jpg +- data/imagenet-r/n02206856/cartoon_69.jpg +- data/imagenet-r/n02113799/sketch_15.jpg +- data/imagenet-r/n02769748/sketch_26.jpg +- data/imagenet-r/n02119022/sketch_0.jpg +- data/imagenet-r/n02526121/misc_1.jpg +- data/imagenet-r/n02655020/misc_23.jpg +- data/imagenet-r/n03452741/sketch_10.jpg +- data/imagenet-r/n07734744/cartoon_39.jpg +- data/imagenet-r/n01806143/sketch_7.jpg +- data/imagenet-r/n02950826/toy_3.jpg +- data/imagenet-r/n07697537/misc_65.jpg +- data/imagenet-r/n02108089/sketch_7.jpg +- data/imagenet-r/n04192698/graphic_2.jpg +- data/imagenet-r/n03495258/tattoo_14.jpg +- data/imagenet-r/n02236044/tattoo_3.jpg +- data/imagenet-r/n01494475/sketch_21.jpg +- data/imagenet-r/n04254680/sketch_9.jpg +- data/imagenet-r/n01910747/graffiti_7.jpg +- data/imagenet-r/n02113799/misc_7.jpg +- data/imagenet-r/n01833805/painting_17.jpg +- data/imagenet-r/n02092339/misc_0.jpg +- data/imagenet-r/n02672831/graffiti_7.jpg +- data/imagenet-r/n01531178/art_5.jpg +- data/imagenet-r/n02110185/painting_34.jpg +- data/imagenet-r/n01498041/art_2.jpg +- data/imagenet-r/n07745940/art_13.jpg +- data/imagenet-r/n04266014/art_0.jpg +- data/imagenet-r/n03594945/toy_3.jpg +- data/imagenet-r/n04146614/deviantart_6.jpg +- data/imagenet-r/n07697537/videogame_16.jpg +- data/imagenet-r/n07714571/cartoon_4.jpg +- data/imagenet-r/n07734744/videogame_41.jpg +- data/imagenet-r/n04192698/sketch_3.jpg +- data/imagenet-r/n01983481/misc_38.jpg +- data/imagenet-r/n02129165/embroidery_17.jpg +- data/imagenet-r/n01774750/deviantart_16.jpg +- data/imagenet-r/n01614925/painting_13.jpg +- data/imagenet-r/n01514859/embroidery_10.jpg +- data/imagenet-r/n01498041/sketch_2.jpg +- data/imagenet-r/n01770393/graffiti_13.jpg +- data/imagenet-r/n02951358/sketch_7.jpg +- data/imagenet-r/n01910747/cartoon_10.jpg +- data/imagenet-r/n02410509/sketch_9.jpg +- data/imagenet-r/n04254680/misc_4.jpg +- data/imagenet-r/n01847000/art_3.jpg +- data/imagenet-r/n02123045/painting_51.jpg +- data/imagenet-r/n01616318/deviantart_9.jpg +- data/imagenet-r/n02219486/embroidery_8.jpg +- data/imagenet-r/n02480495/art_18.jpg +- data/imagenet-r/n04536866/sketch_3.jpg +- data/imagenet-r/n02138441/sculpture_14.jpg +- data/imagenet-r/n04409515/sketch_11.jpg +- data/imagenet-r/n02097298/sketch_13.jpg +- data/imagenet-r/n02134084/misc_109.jpg +- data/imagenet-r/n02119022/misc_122.jpg +- data/imagenet-r/n02106662/misc_46.jpg +- data/imagenet-r/n02391049/misc_6.jpg +- data/imagenet-r/n02129165/tattoo_44.jpg +- data/imagenet-r/n07697313/deviantart_27.jpg +- data/imagenet-r/n01855672/misc_8.jpg +- data/imagenet-r/n02410509/painting_0.jpg +- data/imagenet-r/n02165456/misc_1.jpg +- data/imagenet-r/n07614500/toy_22.jpg +- data/imagenet-r/n01531178/art_10.jpg +- data/imagenet-r/n07753592/misc_66.jpg +- data/imagenet-r/n01770393/tattoo_16.jpg +- data/imagenet-r/n04552348/misc_8.jpg +- data/imagenet-r/n03272010/deviantart_1.jpg +- data/imagenet-r/n04552348/sticker_6.jpg +- data/imagenet-r/n02134084/sketch_3.jpg +- data/imagenet-r/n02165456/toy_42.jpg +- data/imagenet-r/n09835506/sketch_7.jpg +- data/imagenet-r/n02110958/tattoo_24.jpg +- data/imagenet-r/n02906734/sculpture_4.jpg +- data/imagenet-r/n04266014/painting_15.jpg +- data/imagenet-r/n03602883/misc_2.jpg +- data/imagenet-r/n02106662/misc_44.jpg +- data/imagenet-r/n02106662/misc_21.jpg +- data/imagenet-r/n01614925/painting_44.jpg +- data/imagenet-r/n04389033/videogame_2.jpg +- data/imagenet-r/n04275548/sculpture_2.jpg +- data/imagenet-r/n03930630/videogame_6.jpg +- data/imagenet-r/n02607072/misc_108.jpg +- data/imagenet-r/n02108915/misc_124.jpg +- data/imagenet-r/n01860187/sketch_4.jpg +- data/imagenet-r/n04347754/videogame_5.jpg +- data/imagenet-r/n02128385/cartoon_3.jpg +- data/imagenet-r/n02110958/cartoon_59.jpg +- data/imagenet-r/n02992529/sketch_25.jpg +- data/imagenet-r/n12267677/misc_27.jpg +- data/imagenet-r/n04409515/cartoon_14.jpg +- data/imagenet-r/n01644373/painting_15.jpg +- data/imagenet-r/n01882714/deviantart_48.jpg +- data/imagenet-r/n02437616/painting_2.jpg +- data/imagenet-r/n02096585/sketch_6.jpg +- data/imagenet-r/n02130308/art_0.jpg +- data/imagenet-r/n02108915/misc_71.jpg +- data/imagenet-r/n04086273/graphic_0.jpg +- data/imagenet-r/n02106030/painting_0.jpg +- data/imagenet-r/n02077923/misc_2.jpg +- data/imagenet-r/n02088466/sketch_7.jpg +- data/imagenet-r/n01855672/sketch_15.jpg +- data/imagenet-r/n02165456/cartoon_4.jpg +- data/imagenet-r/n04275548/embroidery_9.jpg +- data/imagenet-r/n04465501/sticker_4.jpg +- data/imagenet-r/n01630670/toy_0.jpg +- data/imagenet-r/n07720875/painting_35.jpg +- data/imagenet-r/n01694178/art_7.jpg +- data/imagenet-r/n04389033/sketch_13.jpg +- data/imagenet-r/n09835506/deviantart_42.jpg +- data/imagenet-r/n02112018/misc_36.jpg +- data/imagenet-r/n03345487/videogame_4.jpg +- data/imagenet-r/n02088238/misc_71.jpg +- data/imagenet-r/n02980441/sketch_8.jpg +- data/imagenet-r/n02226429/cartoon_9.jpg +- data/imagenet-r/n02096585/misc_62.jpg +- data/imagenet-r/n02094433/misc_39.jpg +- data/imagenet-r/n03930630/toy_0.jpg +- data/imagenet-r/n01531178/graffiti_0.jpg +- data/imagenet-r/n02206856/graffiti_24.jpg +- data/imagenet-r/n02391049/sketch_8.jpg +- data/imagenet-r/n03272010/painting_23.jpg +- data/imagenet-r/n04536866/painting_11.jpg +- data/imagenet-r/n02843684/toy_4.jpg +- data/imagenet-r/n02906734/painting_2.jpg +- data/imagenet-r/n02268443/misc_66.jpg +- data/imagenet-r/n02091134/misc_22.jpg +- data/imagenet-r/n03481172/misc_0.jpg +- data/imagenet-r/n02071294/sketch_12.jpg +- data/imagenet-r/n01694178/tattoo_16.jpg +- data/imagenet-r/n01518878/cartoon_22.jpg +- data/imagenet-r/n07873807/deviantart_5.jpg +- data/imagenet-r/n07745940/art_1.jpg +- data/imagenet-r/n01784675/origami_8.jpg +- data/imagenet-r/n02279972/painting_9.jpg +- data/imagenet-r/n02437616/cartoon_10.jpg +- data/imagenet-r/n02113799/misc_9.jpg +- data/imagenet-r/n01843383/cartoon_7.jpg +- data/imagenet-r/n09835506/misc_29.jpg +- data/imagenet-r/n07695742/toy_1.jpg +- data/imagenet-r/n02071294/sculpture_8.jpg +- data/imagenet-r/n07734744/toy_14.jpg +- data/imagenet-r/n02481823/painting_4.jpg +- data/imagenet-r/n02206856/embroidery_6.jpg +- data/imagenet-r/n02099601/misc_0.jpg +- data/imagenet-r/n02526121/cartoon_29.jpg +- data/imagenet-r/n07742313/painting_24.jpg +- data/imagenet-r/n02129165/graphic_1.jpg +- data/imagenet-r/n04275548/videogame_14.jpg +- data/imagenet-r/n01910747/graffiti_11.jpg +- data/imagenet-r/n03494278/sketch_18.jpg +- data/imagenet-r/n03888257/sticker_3.jpg +- data/imagenet-r/n01847000/misc_9.jpg +- data/imagenet-r/n01843383/tattoo_3.jpg +- data/imagenet-r/n01694178/tattoo_23.jpg +- data/imagenet-r/n02091134/misc_1.jpg +- data/imagenet-r/n04266014/painting_12.jpg +- data/imagenet-r/n02110958/sketch_13.jpg +- data/imagenet-r/n04254680/deviantart_2.jpg +- data/imagenet-r/n02206856/graffiti_5.jpg +- data/imagenet-r/n07873807/deviantart_33.jpg +- data/imagenet-r/n01616318/cartoon_13.jpg +- data/imagenet-r/n03494278/painting_9.jpg +- data/imagenet-r/n02510455/misc_131.jpg +- data/imagenet-r/n02843684/embroidery_6.jpg +- data/imagenet-r/n02106662/misc_92.jpg +- data/imagenet-r/n02088238/misc_39.jpg +- data/imagenet-r/n04389033/sticker_7.jpg +- data/imagenet-r/n02948072/cartoon_80.jpg +- data/imagenet-r/n04266014/sketch_0.jpg +- data/imagenet-r/n03775071/cartoon_11.jpg +- data/imagenet-r/n04118538/art_0.jpg +- data/imagenet-r/n04591713/painting_9.jpg +- data/imagenet-r/n07695742/embroidery_0.jpg +- data/imagenet-r/n01518878/graffiti_7.jpg +- data/imagenet-r/n02363005/art_2.jpg +- data/imagenet-r/n07742313/videogame_5.jpg +- data/imagenet-r/n02102318/painting_9.jpg +- data/imagenet-r/n02948072/sketch_13.jpg +- data/imagenet-r/n01443537/painting_21.jpg +- data/imagenet-r/n01494475/deviantart_9.jpg +- data/imagenet-r/n02088238/sketch_5.jpg +- data/imagenet-r/n03775071/sketch_5.jpg +- data/imagenet-r/n01986214/origami_13.jpg +- data/imagenet-r/n02268443/misc_107.jpg +- data/imagenet-r/n02486410/graffiti_5.jpg +- data/imagenet-r/n01616318/deviantart_6.jpg +- data/imagenet-r/n01694178/sculpture_0.jpg +- data/imagenet-r/n01860187/cartoon_4.jpg +- data/imagenet-r/n03630383/cartoon_10.jpg +- data/imagenet-r/n09472597/cartoon_7.jpg +- data/imagenet-r/n02395406/deviantart_4.jpg +- data/imagenet-r/n04310018/deviantart_16.jpg +- data/imagenet-r/n02808440/sketch_21.jpg +- data/imagenet-r/n07753592/videogame_4.jpg +- data/imagenet-r/n02226429/cartoon_10.jpg +- data/imagenet-r/n02130308/origami_2.jpg +- data/imagenet-r/n01847000/sticker_3.jpg +- data/imagenet-r/n01806143/cartoon_13.jpg +- data/imagenet-r/n02134084/deviantart_12.jpg +- data/imagenet-r/n03930630/misc_7.jpg +- data/imagenet-r/n04086273/tattoo_6.jpg +- data/imagenet-r/n02480855/graffiti_17.jpg +- data/imagenet-r/n04118538/videogame_5.jpg +- data/imagenet-r/n02219486/sketch_19.jpg +- data/imagenet-r/n01806143/deviantart_10.jpg +- data/imagenet-r/n04522168/embroidery_5.jpg +- data/imagenet-r/n07718472/painting_5.jpg +- data/imagenet-r/n02481823/misc_2.jpg +- data/imagenet-r/n02110958/tattoo_20.jpg +- data/imagenet-r/n07734744/videogame_48.jpg +- data/imagenet-r/n01632777/deviantart_2.jpg +- data/imagenet-r/n02950826/videogame_12.jpg +- data/imagenet-r/n02966193/painting_13.jpg +- data/imagenet-r/n01833805/embroidery_22.jpg +- data/imagenet-r/n02112018/misc_34.jpg +- data/imagenet-r/n02129604/graffiti_11.jpg +- data/imagenet-r/n02510455/misc_132.jpg +- data/imagenet-r/n02268443/misc_91.jpg +- data/imagenet-r/n07697537/misc_60.jpg +- data/imagenet-r/n02102318/misc_47.jpg +- data/imagenet-r/n01694178/tattoo_10.jpg +- data/imagenet-r/n07749582/painting_35.jpg +- data/imagenet-r/n02056570/sketch_15.jpg +- data/imagenet-r/n02051845/deviantart_15.jpg +- data/imagenet-r/n07753592/videogame_14.jpg +- data/imagenet-r/n02113624/misc_1.jpg +- data/imagenet-r/n07920052/sketch_6.jpg +- data/imagenet-r/n03594945/misc_0.jpg +- data/imagenet-r/n02410509/painting_3.jpg +- data/imagenet-r/n02130308/videogame_1.jpg +- data/imagenet-r/n02108915/sketch_21.jpg +- data/imagenet-r/n01770393/graphic_4.jpg +- data/imagenet-r/n02219486/misc_13.jpg +- data/imagenet-r/n04146614/videogame_24.jpg +- data/imagenet-r/n02106166/painting_8.jpg +- data/imagenet-r/n07720875/painting_48.jpg +- data/imagenet-r/n02423022/cartoon_21.jpg +- data/imagenet-r/n04389033/sculpture_0.jpg +- data/imagenet-r/n02906734/cartoon_24.jpg +- data/imagenet-r/n01616318/sketch_1.jpg +- data/imagenet-r/n02134084/misc_63.jpg +- data/imagenet-r/n04133789/cartoon_9.jpg +- data/imagenet-r/n01494475/misc_93.jpg +- data/imagenet-r/n09472597/graphic_4.jpg +- data/imagenet-r/n02346627/cartoon_18.jpg +- data/imagenet-r/n03452741/art_2.jpg +- data/imagenet-r/n01774750/misc_0.jpg +- data/imagenet-r/n02526121/graffiti_0.jpg +- data/imagenet-r/n01514859/cartoon_10.jpg +- data/imagenet-r/n01882714/painting_14.jpg +- data/imagenet-r/n02108915/misc_112.jpg +- data/imagenet-r/n02007558/tattoo_31.jpg +- data/imagenet-r/n02138441/art_13.jpg +- data/imagenet-r/n01518878/graphic_1.jpg +- data/imagenet-r/n02099601/sketch_0.jpg +- data/imagenet-r/n02317335/sculpture_1.jpg +- data/imagenet-r/n02992529/sculpture_0.jpg +- data/imagenet-r/n02939185/painting_3.jpg +- data/imagenet-r/n04147183/sketch_15.jpg +- data/imagenet-r/n03124170/tattoo_3.jpg +- data/imagenet-r/n01443537/graffiti_14.jpg +- data/imagenet-r/n02130308/art_3.jpg +- data/imagenet-r/n02096585/tattoo_25.jpg +- data/imagenet-r/n07697537/sketch_22.jpg +- data/imagenet-r/n02106166/art_4.jpg +- data/imagenet-r/n02363005/deviantart_1.jpg +- data/imagenet-r/n03467068/painting_1.jpg +- data/imagenet-r/n02130308/painting_8.jpg +- data/imagenet-r/n09472597/graffiti_3.jpg +- data/imagenet-r/n02363005/cartoon_12.jpg +- data/imagenet-r/n07920052/graphic_7.jpg +- data/imagenet-r/n03452741/sketch_5.jpg +- data/imagenet-r/n02398521/misc_2.jpg +- data/imagenet-r/n01770393/cartoon_18.jpg +- data/imagenet-r/n02007558/graphic_11.jpg +- data/imagenet-r/n02123045/sketch_3.jpg +- data/imagenet-r/n03452741/deviantart_1.jpg +- data/imagenet-r/n02423022/sculpture_20.jpg +- data/imagenet-r/n01944390/misc_144.jpg +- data/imagenet-r/n03495258/sketch_3.jpg +- data/imagenet-r/n02114367/misc_17.jpg +- data/imagenet-r/n03602883/sketch_7.jpg +- data/imagenet-r/n01910747/sketch_21.jpg +- data/imagenet-r/n02980441/videogame_29.jpg +- data/imagenet-r/n02206856/toy_12.jpg +- data/imagenet-r/n03372029/sculpture_17.jpg +- data/imagenet-r/n02099712/misc_26.jpg +- data/imagenet-r/n02317335/sketch_12.jpg +- data/imagenet-r/n04141076/sculpture_10.jpg +- data/imagenet-r/n02437616/sketch_14.jpg +- data/imagenet-r/n03710193/sketch_5.jpg +- data/imagenet-r/n02607072/misc_51.jpg +- data/imagenet-r/n02814860/cartoon_22.jpg +- data/imagenet-r/n01748264/tattoo_27.jpg +- data/imagenet-r/n07749582/sketch_0.jpg +- data/imagenet-r/n07753592/misc_33.jpg +- data/imagenet-r/n02226429/art_0.jpg +- data/imagenet-r/n01498041/origami_0.jpg +- data/imagenet-r/n01882714/deviantart_51.jpg +- data/imagenet-r/n02398521/sticker_2.jpg +- data/imagenet-r/n01484850/tattoo_22.jpg +- data/imagenet-r/n02113799/sketch_11.jpg +- data/imagenet-r/n03775071/cartoon_12.jpg +- data/imagenet-r/n02607072/misc_33.jpg +- data/imagenet-r/n02655020/misc_33.jpg +- data/imagenet-r/n04146614/toy_22.jpg +- data/imagenet-r/n04147183/art_6.jpg +- data/imagenet-r/n07614500/art_3.jpg +- data/imagenet-r/n02134084/misc_84.jpg +- data/imagenet-r/n02117135/sketch_12.jpg +- data/imagenet-r/n01806143/deviantart_9.jpg +- data/imagenet-r/n01843383/deviantart_45.jpg +- data/imagenet-r/n02363005/sketch_8.jpg +- data/imagenet-r/n03888257/sketch_18.jpg +- data/imagenet-r/n02948072/sketch_5.jpg +- data/imagenet-r/n02098286/sketch_0.jpg +- data/imagenet-r/n03272010/cartoon_4.jpg +- data/imagenet-r/n03481172/cartoon_20.jpg +- data/imagenet-r/n03594945/videogame_8.jpg +- data/imagenet-r/n02134084/misc_98.jpg +- data/imagenet-r/n01910747/sketch_17.jpg +- data/imagenet-r/n02099712/sketch_18.jpg +- data/imagenet-r/n02325366/misc_50.jpg +- data/imagenet-r/n02486410/sculpture_16.jpg +- data/imagenet-r/n02219486/embroidery_3.jpg +- data/imagenet-r/n01632777/cartoon_21.jpg +- data/imagenet-r/n02007558/graffiti_34.jpg +- data/imagenet-r/n02099601/misc_75.jpg +- data/imagenet-r/n01784675/tattoo_7.jpg +- data/imagenet-r/n02007558/deviantart_5.jpg +- data/imagenet-r/n02128757/toy_0.jpg +- data/imagenet-r/n04146614/deviantart_3.jpg +- data/imagenet-r/n02110185/sketch_14.jpg +- data/imagenet-r/n01882714/sculpture_2.jpg +- data/imagenet-r/n02106662/misc_14.jpg +- data/imagenet-r/n02226429/sketch_2.jpg +- data/imagenet-r/n02950826/painting_1.jpg +- data/imagenet-r/n02802426/cartoon_6.jpg +- data/imagenet-r/n02110958/tattoo_2.jpg +- data/imagenet-r/n02364673/misc_2.jpg +- data/imagenet-r/n02219486/sketch_20.jpg +- data/imagenet-r/n01484850/sketch_11.jpg +- data/imagenet-r/n02165456/toy_43.jpg +- data/imagenet-r/n02391049/misc_4.jpg +- data/imagenet-r/n02226429/sketch_0.jpg +- data/imagenet-r/n09472597/art_10.jpg +- data/imagenet-r/n07753592/videogame_9.jpg +- data/imagenet-r/n07745940/origami_1.jpg +- data/imagenet-r/n02110341/sketch_6.jpg +- data/imagenet-r/n02007558/origami_9.jpg +- data/imagenet-r/n04310018/art_0.jpg +- data/imagenet-r/n02119022/misc_142.jpg +- data/imagenet-r/n04266014/toy_17.jpg +- data/imagenet-r/n02134084/misc_129.jpg +- data/imagenet-r/n02268443/misc_42.jpg +- data/imagenet-r/n02317335/cartoon_10.jpg +- data/imagenet-r/n02106030/sketch_11.jpg +- data/imagenet-r/n07734744/sculpture_2.jpg +- data/imagenet-r/n02939185/deviantart_0.jpg +- data/imagenet-r/n07697537/misc_36.jpg +- data/imagenet-r/n01494475/misc_42.jpg +- data/imagenet-r/n02906734/cartoon_12.jpg +- data/imagenet-r/n02123045/cartoon_14.jpg +- data/imagenet-r/n02190166/sticker_0.jpg +- data/imagenet-r/n07873807/deviantart_11.jpg +- data/imagenet-r/n02091134/misc_86.jpg +- data/imagenet-r/n04310018/painting_2.jpg +- data/imagenet-r/n02102318/sticker_1.jpg +- data/imagenet-r/n02129165/deviantart_33.jpg +- data/imagenet-r/n04086273/tattoo_13.jpg +- data/imagenet-r/n02077923/misc_9.jpg +- data/imagenet-r/n02823750/sticker_2.jpg +- data/imagenet-r/n01910747/misc_1.jpg +- data/imagenet-r/n07873807/embroidery_2.jpg +- data/imagenet-r/n02808440/sketch_14.jpg +- data/imagenet-r/n02447366/cartoon_19.jpg +- data/imagenet-r/n02481823/painting_27.jpg +- data/imagenet-r/n01518878/toy_9.jpg +- data/imagenet-r/n04254680/misc_12.jpg +- data/imagenet-r/n02363005/tattoo_5.jpg +- data/imagenet-r/n01443537/cartoon_19.jpg +- data/imagenet-r/n02883205/cartoon_5.jpg +- data/imagenet-r/n04310018/sticker_16.jpg +- data/imagenet-r/n02510455/misc_134.jpg +- data/imagenet-r/n09472597/sculpture_2.jpg +- data/imagenet-r/n02096585/misc_164.jpg +- data/imagenet-r/n02391049/sketch_23.jpg +- data/imagenet-r/n02236044/toy_8.jpg +- data/imagenet-r/n03272010/deviantart_11.jpg +- data/imagenet-r/n02510455/misc_35.jpg +- data/imagenet-r/n02190166/graffiti_3.jpg +- data/imagenet-r/n02398521/sketch_13.jpg +- data/imagenet-r/n02808440/graffiti_3.jpg +- data/imagenet-r/n01514859/cartoon_24.jpg +- data/imagenet-r/n01910747/art_4.jpg +- data/imagenet-r/n02486410/cartoon_16.jpg +- data/imagenet-r/n02098286/sketch_4.jpg +- data/imagenet-r/n07920052/painting_1.jpg +- data/imagenet-r/n02066245/sketch_10.jpg +- data/imagenet-r/n04141076/sculpture_8.jpg +- data/imagenet-r/n01514859/deviantart_38.jpg +- data/imagenet-r/n02219486/misc_7.jpg +- data/imagenet-r/n04325704/deviantart_14.jpg +- data/imagenet-r/n02110958/art_18.jpg +- data/imagenet-r/n02317335/cartoon_5.jpg +- data/imagenet-r/n02447366/sculpture_2.jpg +- data/imagenet-r/n04147183/sketch_17.jpg +- data/imagenet-r/n02236044/tattoo_7.jpg +- data/imagenet-r/n07920052/sketch_12.jpg +- data/imagenet-r/n01784675/tattoo_13.jpg +- data/imagenet-r/n01986214/tattoo_7.jpg +- data/imagenet-r/n02317335/tattoo_9.jpg +- data/imagenet-r/n01944390/misc_120.jpg +- data/imagenet-r/n04146614/toy_26.jpg +- data/imagenet-r/n03481172/videogame_1.jpg +- data/imagenet-r/n01514859/misc_8.jpg +- data/imagenet-r/n02066245/sketch_6.jpg +- data/imagenet-r/n01616318/tattoo_36.jpg +- data/imagenet-r/n07614500/toy_10.jpg +- data/imagenet-r/n02110958/tattoo_25.jpg +- data/imagenet-r/n03594945/sketch_1.jpg +- data/imagenet-r/n02097298/misc_20.jpg +- data/imagenet-r/n02114367/misc_38.jpg +- data/imagenet-r/n04522168/videogame_14.jpg +- data/imagenet-r/n02099601/misc_91.jpg +- data/imagenet-r/n02655020/misc_2.jpg +- data/imagenet-r/n04389033/art_8.jpg +- data/imagenet-r/n07693725/deviantart_7.jpg +- data/imagenet-r/n01694178/sticker_1.jpg +- data/imagenet-r/n02279972/tattoo_10.jpg +- data/imagenet-r/n04389033/deviantart_18.jpg +- data/imagenet-r/n02841315/cartoon_12.jpg +- data/imagenet-r/n01784675/painting_1.jpg +- data/imagenet-r/n04275548/tattoo_1.jpg +- data/imagenet-r/n03372029/cartoon_13.jpg +- data/imagenet-r/n02395406/tattoo_5.jpg +- data/imagenet-r/n02106550/misc_45.jpg +- data/imagenet-r/n07734744/graffiti_47.jpg +- data/imagenet-r/n01784675/tattoo_5.jpg +- data/imagenet-r/n01614925/sketch_14.jpg +- data/imagenet-r/n02363005/origami_1.jpg +- data/imagenet-r/n02398521/sculpture_17.jpg +- data/imagenet-r/n03495258/tattoo_9.jpg +- data/imagenet-r/n02206856/cartoon_60.jpg +- data/imagenet-r/n02129604/deviantart_8.jpg +- data/imagenet-r/n03272010/cartoon_14.jpg +- data/imagenet-r/n02219486/tattoo_16.jpg +- data/imagenet-r/n01632777/origami_1.jpg +- data/imagenet-r/n12267677/misc_102.jpg +- data/imagenet-r/n01833805/sculpture_11.jpg +- data/imagenet-r/n02096585/misc_144.jpg +- data/imagenet-r/n04254680/deviantart_19.jpg +- data/imagenet-r/n01784675/origami_9.jpg +- data/imagenet-r/n07745940/painting_12.jpg +- data/imagenet-r/n02129604/painting_6.jpg +- data/imagenet-r/n03272010/cartoon_21.jpg +- data/imagenet-r/n02077923/sketch_23.jpg +- data/imagenet-r/n02051845/painting_1.jpg +- data/imagenet-r/n02129604/misc_1.jpg +- data/imagenet-r/n01443537/misc_9.jpg +- data/imagenet-r/n04591713/painting_26.jpg +- data/imagenet-r/n02701002/toy_10.jpg +- data/imagenet-r/n03424325/misc_47.jpg +- data/imagenet-r/n04310018/painting_5.jpg +- data/imagenet-r/n02071294/deviantart_9.jpg +- data/imagenet-r/n03775071/sketch_8.jpg +- data/imagenet-r/n01518878/origami_6.jpg +- data/imagenet-r/n12267677/misc_128.jpg +- data/imagenet-r/n02106662/misc_37.jpg +- data/imagenet-r/n02966193/painting_12.jpg +- data/imagenet-r/n02130308/graffiti_8.jpg +- data/imagenet-r/n04325704/cartoon_20.jpg +- data/imagenet-r/n02113799/misc_33.jpg +- data/imagenet-r/n02906734/misc_2.jpg +- data/imagenet-r/n02480495/painting_35.jpg +- data/imagenet-r/n01847000/sketch_3.jpg +- data/imagenet-r/n03372029/cartoon_1.jpg +- data/imagenet-r/n04192698/embroidery_3.jpg +- data/imagenet-r/n09472597/sketch_25.jpg +- data/imagenet-r/n02206856/sketch_11.jpg +- data/imagenet-r/n01770393/origami_18.jpg +- data/imagenet-r/n04141076/cartoon_38.jpg +- data/imagenet-r/n01498041/deviantart_1.jpg +- data/imagenet-r/n02364673/sketch_8.jpg +- data/imagenet-r/n02077923/misc_42.jpg +- data/imagenet-r/n02206856/graffiti_1.jpg +- data/imagenet-r/n02112018/misc_11.jpg +- data/imagenet-r/n02129165/deviantart_7.jpg +- data/imagenet-r/n02130308/cartoon_9.jpg +- data/imagenet-r/n02219486/cartoon_5.jpg +- data/imagenet-r/n03424325/deviantart_5.jpg +- data/imagenet-r/n02363005/sketch_22.jpg +- data/imagenet-r/n02106166/sculpture_0.jpg +- data/imagenet-r/n03424325/misc_23.jpg +- data/imagenet-r/n04141076/cartoon_12.jpg +- data/imagenet-r/n02110958/sticker_6.jpg +- data/imagenet-r/n01774750/deviantart_8.jpg +- data/imagenet-r/n02007558/cartoon_10.jpg +- data/imagenet-r/n02091032/misc_3.jpg +- data/imagenet-r/n07714990/cartoon_10.jpg +- data/imagenet-r/n02009912/sketch_13.jpg +- data/imagenet-r/n07745940/deviantart_21.jpg +- data/imagenet-r/n01806143/graphic_7.jpg +- data/imagenet-r/n07720875/deviantart_14.jpg +- data/imagenet-r/n02980441/toy_7.jpg +- data/imagenet-r/n03467068/sketch_12.jpg +- data/imagenet-r/n07734744/toy_4.jpg +- data/imagenet-r/n02909870/toy_3.jpg +- data/imagenet-r/n03930630/cartoon_4.jpg +- data/imagenet-r/n04465501/videogame_24.jpg +- data/imagenet-r/n01494475/misc_13.jpg +- data/imagenet-r/n01882714/sculpture_1.jpg +- data/imagenet-r/n02391049/misc_46.jpg +- data/imagenet-r/n01847000/embroidery_8.jpg +- data/imagenet-r/n02134084/videogame_4.jpg +- data/imagenet-r/n01694178/toy_16.jpg +- data/imagenet-r/n04147183/painting_13.jpg +- data/imagenet-r/n01694178/painting_12.jpg +- data/imagenet-r/n07745940/sculpture_7.jpg +- data/imagenet-r/n01632777/cartoon_17.jpg +- data/imagenet-r/n04275548/sketch_22.jpg +- data/imagenet-r/n10565667/misc_0.jpg +- data/imagenet-r/n01847000/deviantart_2.jpg +- data/imagenet-r/n10565667/sketch_8.jpg +- data/imagenet-r/n01774750/tattoo_13.jpg +- data/imagenet-r/n04552348/misc_9.jpg +- data/imagenet-r/n02102318/misc_4.jpg +- data/imagenet-r/n02480495/cartoon_16.jpg +- data/imagenet-r/n02071294/cartoon_18.jpg +- data/imagenet-r/n01616318/cartoon_1.jpg +- data/imagenet-r/n02395406/art_0.jpg +- data/imagenet-r/n01498041/sketch_8.jpg +- data/imagenet-r/n02802426/sketch_6.jpg +- data/imagenet-r/n03594945/misc_18.jpg +- data/imagenet-r/n02106550/sketch_10.jpg +- data/imagenet-r/n01910747/graphic_15.jpg +- data/imagenet-r/n01806143/origami_10.jpg +- data/imagenet-r/n02110958/embroidery_1.jpg +- data/imagenet-r/n02769748/sketch_4.jpg +- data/imagenet-r/n02950826/graphic_0.jpg +- data/imagenet-r/n02445715/painting_14.jpg +- data/imagenet-r/n07734744/sculpture_13.jpg +- data/imagenet-r/n04147183/deviantart_14.jpg +- data/imagenet-r/n02480495/cartoon_8.jpg +- data/imagenet-r/n02655020/misc_10.jpg +- data/imagenet-r/n01843383/sticker_2.jpg +- data/imagenet-r/n03888257/cartoon_7.jpg +- data/imagenet-r/n03124170/tattoo_5.jpg +- data/imagenet-r/n02119022/sketch_1.jpg +- data/imagenet-r/n02841315/sculpture_9.jpg +- data/imagenet-r/n01632777/art_9.jpg +- data/imagenet-r/n02843684/embroidery_13.jpg +- data/imagenet-r/n02410509/art_10.jpg +- data/imagenet-r/n02088466/misc_5.jpg +- data/imagenet-r/n02437616/cartoon_27.jpg +- data/imagenet-r/n04275548/embroidery_11.jpg +- data/imagenet-r/n02106662/tattoo_3.jpg +- data/imagenet-r/n02843684/sculpture_2.jpg +- data/imagenet-r/n02106030/sketch_8.jpg +- data/imagenet-r/n07714990/deviantart_24.jpg +- data/imagenet-r/n02112137/misc_17.jpg +- data/imagenet-r/n02410509/sticker_4.jpg +- data/imagenet-r/n04310018/misc_4.jpg +- data/imagenet-r/n01514859/painting_16.jpg +- data/imagenet-r/n02483362/cartoon_7.jpg +- data/imagenet-r/n07697537/videogame_24.jpg +- data/imagenet-r/n02317335/cartoon_7.jpg +- data/imagenet-r/n02110341/misc_98.jpg +- data/imagenet-r/n01847000/cartoon_3.jpg +- data/imagenet-r/n07734744/painting_24.jpg +- data/imagenet-r/n02129604/sketch_14.jpg +- data/imagenet-r/n07753592/deviantart_7.jpg +- data/imagenet-r/n03124170/sketch_10.jpg +- data/imagenet-r/n02980441/sketch_14.jpg +- data/imagenet-r/n02480855/painting_6.jpg +- data/imagenet-r/n02236044/tattoo_6.jpg +- data/imagenet-r/n02138441/sketch_13.jpg +- data/imagenet-r/n02226429/sketch_9.jpg +- data/imagenet-r/n01944390/misc_42.jpg +- data/imagenet-r/n02948072/sketch_15.jpg +- data/imagenet-r/n07614500/deviantart_16.jpg +- data/imagenet-r/n02106662/sketch_22.jpg +- data/imagenet-r/n02134084/misc_1.jpg +- data/imagenet-r/n02206856/cartoon_33.jpg +- data/imagenet-r/n02094433/misc_21.jpg +- data/imagenet-r/n02395406/art_6.jpg +- data/imagenet-r/n07753592/misc_15.jpg +- data/imagenet-r/n02391049/deviantart_5.jpg +- data/imagenet-r/n01843383/cartoon_13.jpg +- data/imagenet-r/n01843383/misc_0.jpg +- data/imagenet-r/n09835506/sketch_23.jpg +- data/imagenet-r/n02481823/deviantart_25.jpg +- data/imagenet-r/n02481823/cartoon_4.jpg +- data/imagenet-r/n04254680/graphic_8.jpg +- data/imagenet-r/n02129165/tattoo_29.jpg +- data/imagenet-r/n09835506/deviantart_12.jpg +- data/imagenet-r/n04266014/origami_0.jpg +- data/imagenet-r/n02233338/misc_46.jpg +- data/imagenet-r/n02085620/misc_11.jpg +- data/imagenet-r/n02423022/sculpture_0.jpg +- data/imagenet-r/n01518878/sculpture_2.jpg +- data/imagenet-r/n02110341/misc_92.jpg +- data/imagenet-r/n01820546/toy_0.jpg +- data/imagenet-r/n02110958/cartoon_0.jpg +- data/imagenet-r/n07873807/tattoo_1.jpg +- data/imagenet-r/n09835506/deviantart_14.jpg +- data/imagenet-r/n07745940/sticker_5.jpg +- data/imagenet-r/n01770393/sketch_2.jpg +- data/imagenet-r/n02123045/painting_38.jpg +- data/imagenet-r/n07697537/videogame_11.jpg +- data/imagenet-r/n02395406/toy_6.jpg +- data/imagenet-r/n07718472/sketch_3.jpg +- data/imagenet-r/n02843684/embroidery_8.jpg +- data/imagenet-r/n07734744/graffiti_12.jpg +- data/imagenet-r/n02814860/deviantart_4.jpg +- data/imagenet-r/n01518878/cartoon_50.jpg +- data/imagenet-r/n02119022/misc_135.jpg +- data/imagenet-r/n12267677/misc_10.jpg +- data/imagenet-r/n02190166/sticker_6.jpg +- data/imagenet-r/n01514859/deviantart_0.jpg +- data/imagenet-r/n04487394/cartoon_11.jpg +- data/imagenet-r/n02206856/toy_6.jpg +- data/imagenet-r/n03888257/cartoon_24.jpg +- data/imagenet-r/n01630670/cartoon_13.jpg +- data/imagenet-r/n07749582/art_2.jpg +- data/imagenet-r/n01820546/sketch_9.jpg +- data/imagenet-r/n03345487/sketch_10.jpg +- data/imagenet-r/n02113624/misc_23.jpg +- data/imagenet-r/n02108915/misc_33.jpg +- data/imagenet-r/n01531178/tattoo_3.jpg +- data/imagenet-r/n01910747/sticker_4.jpg +- data/imagenet-r/n04275548/embroidery_12.jpg +- data/imagenet-r/n02113023/misc_39.jpg +- data/imagenet-r/n02098286/misc_6.jpg +- data/imagenet-r/n09472597/deviantart_6.jpg +- data/imagenet-r/n02091134/misc_52.jpg +- data/imagenet-r/n02085620/misc_94.jpg +- data/imagenet-r/n02797295/sketch_15.jpg +- data/imagenet-r/n07745940/misc_18.jpg +- data/imagenet-r/n02325366/sketch_3.jpg +- data/imagenet-r/n02091134/misc_56.jpg +- data/imagenet-r/n07734744/sketch_4.jpg +- data/imagenet-r/n02236044/origami_1.jpg +- data/imagenet-r/n02883205/painting_3.jpg +- data/imagenet-r/n03947888/toy_0.jpg +- data/imagenet-r/n02447366/misc_5.jpg +- data/imagenet-r/n07720875/painting_36.jpg +- data/imagenet-r/n02398521/sketch_0.jpg +- data/imagenet-r/n01770393/tattoo_57.jpg +- data/imagenet-r/n07745940/art_9.jpg +- data/imagenet-r/n02117135/tattoo_12.jpg +- data/imagenet-r/n03594945/cartoon_9.jpg +- data/imagenet-r/n03947888/tattoo_18.jpg +- data/imagenet-r/n03775071/cartoon_14.jpg +- data/imagenet-r/n01644373/deviantart_18.jpg +- data/imagenet-r/n02445715/cartoon_14.jpg +- data/imagenet-r/n02823750/cartoon_25.jpg +- data/imagenet-r/n02410509/sketch_12.jpg +- data/imagenet-r/n01514859/embroidery_14.jpg +- data/imagenet-r/n02268443/misc_90.jpg +- data/imagenet-r/n04522168/sketch_2.jpg +- data/imagenet-r/n01494475/misc_25.jpg +- data/imagenet-r/n02233338/tattoo_4.jpg +- data/imagenet-r/n02134084/misc_146.jpg +- data/imagenet-r/n02110958/cartoon_75.jpg +- data/imagenet-r/n02128757/sculpture_6.jpg +- data/imagenet-r/n02356798/sketch_6.jpg +- data/imagenet-r/n02007558/toy_3.jpg +- data/imagenet-r/n02346627/sculpture_9.jpg +- data/imagenet-r/n02206856/painting_4.jpg +- data/imagenet-r/n09472597/graphic_7.jpg +- data/imagenet-r/n02395406/misc_32.jpg +- data/imagenet-r/n02655020/misc_21.jpg +- data/imagenet-r/n04275548/tattoo_8.jpg +- data/imagenet-r/n04086273/tattoo_23.jpg +- data/imagenet-r/n02749479/misc_15.jpg +- data/imagenet-r/n02106030/cartoon_2.jpg +- data/imagenet-r/n03372029/painting_0.jpg +- data/imagenet-r/n02793495/sketch_17.jpg +- data/imagenet-r/n01806143/painting_7.jpg +- data/imagenet-r/n03124170/painting_21.jpg +- data/imagenet-r/n04552348/painting_4.jpg +- data/imagenet-r/n07920052/deviantart_1.jpg +- data/imagenet-r/n01820546/deviantart_9.jpg +- data/imagenet-r/n03602883/misc_27.jpg +- data/imagenet-r/n02510455/misc_13.jpg +- data/imagenet-r/n07714990/cartoon_14.jpg +- data/imagenet-r/n02099601/misc_106.jpg +- data/imagenet-r/n02363005/sketch_16.jpg +- data/imagenet-r/n01484850/art_10.jpg +- data/imagenet-r/n02066245/art_11.jpg +- data/imagenet-r/n02119022/misc_30.jpg +- data/imagenet-r/n04536866/painting_8.jpg +- data/imagenet-r/n07714990/graffiti_2.jpg +- data/imagenet-r/n01632777/toy_24.jpg +- data/imagenet-r/n04465501/embroidery_0.jpg +- data/imagenet-r/n02129604/graphic_5.jpg +- data/imagenet-r/n02051845/deviantart_5.jpg +- data/imagenet-r/n07720875/sketch_18.jpg +- data/imagenet-r/n02206856/sticker_18.jpg +- data/imagenet-r/n02117135/tattoo_11.jpg +- data/imagenet-r/n04465501/painting_15.jpg +- data/imagenet-r/n02939185/tattoo_10.jpg +- data/imagenet-r/n01694178/sculpture_5.jpg +- data/imagenet-r/n02007558/graffiti_28.jpg +- data/imagenet-r/n02106166/sketch_20.jpg +- data/imagenet-r/n02481823/sketch_2.jpg +- data/imagenet-r/n04536866/cartoon_23.jpg +- data/imagenet-r/n02279972/painting_22.jpg +- data/imagenet-r/n02051845/deviantart_12.jpg +- data/imagenet-r/n01847000/misc_10.jpg +- data/imagenet-r/n01644373/sketch_1.jpg +- data/imagenet-r/n02909870/videogame_5.jpg +- data/imagenet-r/n02437616/cartoon_13.jpg +- data/imagenet-r/n02106030/graphic_0.jpg +- data/imagenet-r/n02480855/toy_2.jpg +- data/imagenet-r/n01910747/embroidery_12.jpg +- data/imagenet-r/n02085620/sketch_1.jpg +- data/imagenet-r/n01614925/deviantart_7.jpg +- data/imagenet-r/n01882714/graffiti_2.jpg +- data/imagenet-r/n07873807/videogame_14.jpg +- data/imagenet-r/n01860187/sketch_13.jpg +- data/imagenet-r/n01644373/deviantart_2.jpg +- data/imagenet-r/n02268443/misc_138.jpg +- data/imagenet-r/n03602883/misc_14.jpg +- data/imagenet-r/n07697537/deviantart_28.jpg +- data/imagenet-r/n02236044/sketch_11.jpg +- data/imagenet-r/n02356798/sketch_0.jpg +- data/imagenet-r/n04254680/graphic_2.jpg +- data/imagenet-r/n02445715/painting_17.jpg +- data/imagenet-r/n01833805/tattoo_48.jpg +- data/imagenet-r/n01882714/toy_28.jpg +- data/imagenet-r/n01833805/painting_45.jpg +- data/imagenet-r/n02110958/art_0.jpg +- data/imagenet-r/n02236044/graffiti_17.jpg +- data/imagenet-r/n02346627/tattoo_3.jpg +- data/imagenet-r/n02099601/videogame_2.jpg +- data/imagenet-r/n02883205/sketch_23.jpg +- data/imagenet-r/n02108915/sketch_6.jpg +- data/imagenet-r/n01843383/deviantart_26.jpg +- data/imagenet-r/n02510455/deviantart_10.jpg +- data/imagenet-r/n02113799/sketch_14.jpg +- data/imagenet-r/n07734744/cartoon_49.jpg +- data/imagenet-r/n02109525/misc_16.jpg +- data/imagenet-r/n01944390/misc_133.jpg +- data/imagenet-r/n01843383/painting_54.jpg +- data/imagenet-r/n03602883/misc_0.jpg +- data/imagenet-r/n02108915/misc_117.jpg +- data/imagenet-r/n01494475/misc_137.jpg +- data/imagenet-r/n02363005/art_5.jpg +- data/imagenet-r/n02088364/misc_77.jpg +- data/imagenet-r/n02395406/misc_29.jpg +- data/imagenet-r/n03124170/toy_14.jpg +- data/imagenet-r/n07753592/videogame_3.jpg +- data/imagenet-r/n07718472/painting_10.jpg +- data/imagenet-r/n01498041/toy_5.jpg +- data/imagenet-r/n07749582/painting_20.jpg +- data/imagenet-r/n02091032/sketch_6.jpg +- data/imagenet-r/n02395406/misc_21.jpg +- data/imagenet-r/n02129165/toy_25.jpg +- data/imagenet-r/n02346627/sketch_8.jpg +- data/imagenet-r/n04266014/cartoon_7.jpg +- data/imagenet-r/n02510455/misc_106.jpg +- data/imagenet-r/n01531178/misc_9.jpg +- data/imagenet-r/n02480855/cartoon_5.jpg +- data/imagenet-r/n07697537/misc_103.jpg +- data/imagenet-r/n04118538/cartoon_12.jpg +- data/imagenet-r/n02219486/misc_3.jpg +- data/imagenet-r/n02346627/sculpture_3.jpg +- data/imagenet-r/n02051845/embroidery_1.jpg +- data/imagenet-r/n02165456/sticker_0.jpg +- data/imagenet-r/n02129165/tattoo_31.jpg +- data/imagenet-r/n01806143/misc_0.jpg +- data/imagenet-r/n02112137/misc_31.jpg +- data/imagenet-r/n03630383/cartoon_17.jpg +- data/imagenet-r/n01677366/deviantart_14.jpg +- data/imagenet-r/n02099712/misc_2.jpg +- data/imagenet-r/n03424325/videogame_25.jpg +- data/imagenet-r/n03594945/graffiti_5.jpg +- data/imagenet-r/n02219486/painting_4.jpg +- data/imagenet-r/n02607072/misc_1.jpg +- data/imagenet-r/n02085620/tattoo_8.jpg +- data/imagenet-r/n02129604/graphic_0.jpg +- data/imagenet-r/n02480855/painting_19.jpg +- data/imagenet-r/n01630670/graphic_0.jpg +- data/imagenet-r/n02206856/cartoon_0.jpg +- data/imagenet-r/n02091134/misc_59.jpg +- data/imagenet-r/n07742313/sketch_12.jpg +- data/imagenet-r/n02110958/sketch_0.jpg +- data/imagenet-r/n07697537/videogame_17.jpg +- data/imagenet-r/n02909870/sketch_9.jpg +- data/imagenet-r/n02138441/toy_0.jpg +- data/imagenet-r/n02481823/deviantart_17.jpg +- data/imagenet-r/n02363005/sketch_2.jpg +- data/imagenet-r/n09835506/deviantart_24.jpg +- data/imagenet-r/n04192698/cartoon_17.jpg +- data/imagenet-r/n04146614/cartoon_0.jpg +- data/imagenet-r/n01531178/art_7.jpg +- data/imagenet-r/n12267677/misc_18.jpg +- data/imagenet-r/n02099712/sketch_11.jpg +- data/imagenet-r/n01944390/misc_94.jpg +- data/imagenet-r/n07745940/graffiti_4.jpg +- data/imagenet-r/n02138441/art_2.jpg +- data/imagenet-r/n02480855/sketch_4.jpg +- data/imagenet-r/n02110958/cartoon_71.jpg +- data/imagenet-r/n04086273/cartoon_11.jpg +- data/imagenet-r/n02823750/sketch_3.jpg +- data/imagenet-r/n02395406/cartoon_0.jpg +- data/imagenet-r/n04522168/painting_28.jpg +- data/imagenet-r/n02110341/sketch_17.jpg +- data/imagenet-r/n01644373/sketch_22.jpg +- data/imagenet-r/n04536866/painting_28.jpg +- data/imagenet-r/n02486410/sculpture_13.jpg +- data/imagenet-r/n09472597/deviantart_5.jpg +- data/imagenet-r/n02268443/misc_53.jpg +- data/imagenet-r/n02085620/misc_3.jpg +- data/imagenet-r/n02802426/sketch_3.jpg +- data/imagenet-r/n02110185/sketch_1.jpg +- data/imagenet-r/n01443537/origami_10.jpg +- data/imagenet-r/n02395406/sculpture_19.jpg +- data/imagenet-r/n04254680/sticker_4.jpg +- data/imagenet-r/n03124170/sketch_11.jpg +- data/imagenet-r/n07745940/cartoon_14.jpg +- data/imagenet-r/n02096585/videogame_0.jpg +- data/imagenet-r/n01616318/art_1.jpg +- data/imagenet-r/n01614925/sketch_5.jpg +- data/imagenet-r/n02607072/misc_43.jpg +- data/imagenet-r/n04146614/deviantart_5.jpg +- data/imagenet-r/n02007558/tattoo_15.jpg +- data/imagenet-r/n01531178/art_0.jpg +- data/imagenet-r/n03649909/graphic_0.jpg +- data/imagenet-r/n02129604/tattoo_10.jpg +- data/imagenet-r/n01748264/tattoo_16.jpg +- data/imagenet-r/n04266014/sketch_6.jpg +- data/imagenet-r/n02906734/embroidery_8.jpg +- data/imagenet-r/n01614925/graffiti_1.jpg +- data/imagenet-r/n07714990/graphic_3.jpg +- data/imagenet-r/n12267677/sketch_15.jpg +- data/imagenet-r/n02134084/sketch_2.jpg +- data/imagenet-r/n02138441/sketch_2.jpg +- data/imagenet-r/n02007558/deviantart_2.jpg +- data/imagenet-r/n07753592/videogame_11.jpg +- data/imagenet-r/n02123045/art_1.jpg +- data/imagenet-r/n02099601/sketch_14.jpg +- data/imagenet-r/n02226429/origami_8.jpg +- data/imagenet-r/n07697537/misc_116.jpg +- data/imagenet-r/n02808440/painting_12.jpg +- data/imagenet-r/n07734744/embroidery_3.jpg +- data/imagenet-r/n07753275/painting_27.jpg +- data/imagenet-r/n02129165/sculpture_15.jpg +- data/imagenet-r/n02108089/misc_57.jpg +- data/imagenet-r/n01632777/deviantart_7.jpg +- data/imagenet-r/n01443537/sketch_17.jpg +- data/imagenet-r/n02091134/misc_31.jpg +- data/imagenet-r/n02129165/deviantart_19.jpg +- data/imagenet-r/n02841315/misc_3.jpg +- data/imagenet-r/n02391049/misc_2.jpg +- data/imagenet-r/n03930630/painting_9.jpg +- data/imagenet-r/n02113799/misc_15.jpg +- data/imagenet-r/n10565667/cartoon_7.jpg +- data/imagenet-r/n07614500/graffiti_8.jpg +- data/imagenet-r/n07745940/misc_17.jpg +- data/imagenet-r/n07614500/graffiti_5.jpg +- data/imagenet-r/n02071294/toy_11.jpg +- data/imagenet-r/n02165456/tattoo_37.jpg +- data/imagenet-r/n03495258/sculpture_13.jpg +- data/imagenet-r/n01770393/origami_5.jpg +- data/imagenet-r/n04146614/sketch_18.jpg +- data/imagenet-r/n02797295/misc_77.jpg +- data/imagenet-r/n02106166/misc_9.jpg +- data/imagenet-r/n02110341/misc_106.jpg +- data/imagenet-r/n02096585/misc_143.jpg +- data/imagenet-r/n02206856/tattoo_3.jpg +- data/imagenet-r/n01443537/painting_4.jpg +- data/imagenet-r/n02129165/deviantart_0.jpg +- data/imagenet-r/n04141076/painting_32.jpg +- data/imagenet-r/n01833805/graffiti_14.jpg +- data/imagenet-r/n01644373/painting_31.jpg +- data/imagenet-r/n02165456/tattoo_69.jpg +- data/imagenet-r/n04192698/deviantart_9.jpg +- data/imagenet-r/n02129165/embroidery_16.jpg +- data/imagenet-r/n02129604/deviantart_16.jpg +- data/imagenet-r/n02607072/videogame_1.jpg +- data/imagenet-r/n02130308/painting_34.jpg +- data/imagenet-r/n04192698/cartoon_0.jpg +- data/imagenet-r/n01910747/cartoon_25.jpg +- data/imagenet-r/n01944390/tattoo_23.jpg +- data/imagenet-r/n02398521/videogame_0.jpg +- data/imagenet-r/n02097298/misc_58.jpg +- data/imagenet-r/n02948072/graphic_8.jpg +- data/imagenet-r/n02077923/sketch_15.jpg +- data/imagenet-r/n02088364/misc_76.jpg +- data/imagenet-r/n02480855/graffiti_11.jpg +- data/imagenet-r/n02814860/cartoon_31.jpg +- data/imagenet-r/n01484850/origami_2.jpg +- data/imagenet-r/n02906734/graphic_1.jpg +- data/imagenet-r/n02165456/sketch_20.jpg +- data/imagenet-r/n02007558/art_3.jpg +- data/imagenet-r/n02109525/sketch_19.jpg +- data/imagenet-r/n03775071/sketch_7.jpg +- data/imagenet-r/n02236044/sketch_2.jpg +- data/imagenet-r/n03602883/misc_30.jpg +- data/imagenet-r/n02510455/misc_104.jpg +- data/imagenet-r/n04552348/painting_1.jpg +- data/imagenet-r/n01514859/deviantart_30.jpg +- data/imagenet-r/n02051845/origami_1.jpg +- data/imagenet-r/n04552348/art_15.jpg +- data/imagenet-r/n02108915/misc_81.jpg +- data/imagenet-r/n07693725/cartoon_6.jpg +- data/imagenet-r/n07714990/sketch_11.jpg +- data/imagenet-r/n02206856/graffiti_34.jpg +- data/imagenet-r/n02445715/sculpture_3.jpg +- data/imagenet-r/n02363005/sticker_0.jpg +- data/imagenet-r/n04266014/cartoon_26.jpg +- data/imagenet-r/n01944390/misc_158.jpg +- data/imagenet-r/n04266014/painting_3.jpg +- data/imagenet-r/n02395406/sketch_15.jpg +- data/imagenet-r/n02098286/sketch_21.jpg +- data/imagenet-r/n12267677/sketch_1.jpg +- data/imagenet-r/n07720875/deviantart_17.jpg +- data/imagenet-r/n02066245/sketch_13.jpg +- data/imagenet-r/n02279972/tattoo_7.jpg +- data/imagenet-r/n02110341/misc_137.jpg +- data/imagenet-r/n01860187/toy_1.jpg +- data/imagenet-r/n01632777/art_6.jpg +- data/imagenet-r/n02088364/misc_50.jpg +- data/imagenet-r/n02123045/painting_53.jpg +- data/imagenet-r/n12267677/misc_86.jpg +- data/imagenet-r/n02939185/sketch_9.jpg +- data/imagenet-r/n02226429/origami_0.jpg +- data/imagenet-r/n02510455/deviantart_28.jpg +- data/imagenet-r/n03467068/cartoon_0.jpg +- data/imagenet-r/n02437616/sketch_16.jpg +- data/imagenet-r/n01531178/graphic_1.jpg +- data/imagenet-r/n02950826/graffiti_0.jpg +- data/imagenet-r/n02009912/misc_53.jpg +- data/imagenet-r/n03272010/sketch_11.jpg +- data/imagenet-r/n02226429/painting_6.jpg +- data/imagenet-r/n04310018/videogame_20.jpg +- data/imagenet-r/n02948072/graphic_5.jpg +- data/imagenet-r/n02129165/graffiti_14.jpg +- data/imagenet-r/n02098286/misc_20.jpg +- data/imagenet-r/n02346627/sketch_4.jpg +- data/imagenet-r/n02447366/cartoon_10.jpg +- data/imagenet-r/n01833805/tattoo_62.jpg +- data/imagenet-r/n01518878/cartoon_30.jpg +- data/imagenet-r/n07920052/deviantart_3.jpg +- data/imagenet-r/n01632777/toy_26.jpg +- data/imagenet-r/n01694178/painting_11.jpg +- data/imagenet-r/n02088364/misc_18.jpg +- data/imagenet-r/n02066245/graphic_0.jpg +- data/imagenet-r/n01770393/tattoo_67.jpg +- data/imagenet-r/n02948072/embroidery_26.jpg +- data/imagenet-r/n02134084/misc_7.jpg +- data/imagenet-r/n04147183/art_10.jpg +- data/imagenet-r/n02445715/sketch_4.jpg +- data/imagenet-r/n01494475/misc_134.jpg +- data/imagenet-r/n02138441/painting_12.jpg +- data/imagenet-r/n02117135/toy_4.jpg +- data/imagenet-r/n02119022/misc_85.jpg +- data/imagenet-r/n02395406/sculpture_15.jpg +- data/imagenet-r/n02129165/toy_6.jpg +- data/imagenet-r/n02268443/misc_95.jpg +- data/imagenet-r/n02138441/painting_29.jpg +- data/imagenet-r/n02206856/origami_10.jpg +- data/imagenet-r/n02480495/sketch_15.jpg +- data/imagenet-r/n03424325/misc_98.jpg +- data/imagenet-r/n02134084/sketch_1.jpg +- data/imagenet-r/n07753275/cartoon_15.jpg +- data/imagenet-r/n02364673/deviantart_1.jpg +- data/imagenet-r/n02841315/cartoon_14.jpg +- data/imagenet-r/n04389033/misc_11.jpg +- data/imagenet-r/n09835506/sketch_6.jpg +- data/imagenet-r/n02769748/sketch_9.jpg +- data/imagenet-r/n02398521/painting_9.jpg +- data/imagenet-r/n07714571/painting_13.jpg +- data/imagenet-r/n02939185/sticker_2.jpg +- data/imagenet-r/n02395406/cartoon_33.jpg +- data/imagenet-r/n02219486/cartoon_1.jpg +- data/imagenet-r/n07714571/sketch_8.jpg +- data/imagenet-r/n07695742/graffiti_1.jpg +- data/imagenet-r/n02769748/sketch_5.jpg +- data/imagenet-r/n02129604/deviantart_39.jpg +- data/imagenet-r/n02814860/painting_0.jpg +- data/imagenet-r/n02480855/tattoo_34.jpg +- data/imagenet-r/n02096585/misc_105.jpg +- data/imagenet-r/n04552348/deviantart_21.jpg +- data/imagenet-r/n01531178/art_24.jpg +- data/imagenet-r/n02486410/painting_11.jpg +- data/imagenet-r/n07742313/sketch_7.jpg +- data/imagenet-r/n04266014/deviantart_5.jpg +- data/imagenet-r/n02701002/sketch_2.jpg +- data/imagenet-r/n07873807/sketch_5.jpg +- data/imagenet-r/n07734744/painting_3.jpg +- data/imagenet-r/n04325704/sculpture_1.jpg +- data/imagenet-r/n02119022/misc_36.jpg +- data/imagenet-r/n07614500/misc_23.jpg +- data/imagenet-r/n02129165/graffiti_0.jpg +- data/imagenet-r/n01833805/tattoo_79.jpg +- data/imagenet-r/n02091134/sketch_0.jpg +- data/imagenet-r/n07720875/art_4.jpg +- data/imagenet-r/n02077923/cartoon_0.jpg +- data/imagenet-r/n02117135/graphic_0.jpg +- data/imagenet-r/n02099712/misc_14.jpg +- data/imagenet-r/n01944390/tattoo_4.jpg +- data/imagenet-r/n03124170/art_13.jpg +- data/imagenet-r/n02088238/sketch_17.jpg +- data/imagenet-r/n07745940/embroidery_28.jpg +- data/imagenet-r/n02056570/deviantart_8.jpg +- data/imagenet-r/n02480855/sculpture_15.jpg +- data/imagenet-r/n02391049/sketch_9.jpg +- data/imagenet-r/n02129604/sketch_19.jpg +- data/imagenet-r/n02134084/misc_138.jpg +- data/imagenet-r/n01882714/painting_13.jpg +- data/imagenet-r/n03602883/misc_16.jpg +- data/imagenet-r/n01986214/deviantart_14.jpg +- data/imagenet-r/n01770393/painting_7.jpg +- data/imagenet-r/n02129165/cartoon_17.jpg +- data/imagenet-r/n01843383/deviantart_96.jpg +- data/imagenet-r/n04465501/toy_12.jpg +- data/imagenet-r/n02980441/misc_6.jpg +- data/imagenet-r/n01518878/cartoon_24.jpg +- data/imagenet-r/n03424325/misc_72.jpg +- data/imagenet-r/n02098286/misc_11.jpg +- data/imagenet-r/n02108915/sketch_9.jpg +- data/imagenet-r/n02672831/origami_0.jpg +- data/imagenet-r/n02317335/painting_1.jpg +- data/imagenet-r/n07745940/embroidery_15.jpg +- data/imagenet-r/n01983481/misc_36.jpg +- data/imagenet-r/n02088364/misc_67.jpg +- data/imagenet-r/n03630383/cartoon_38.jpg +- data/imagenet-r/n04487394/cartoon_13.jpg +- data/imagenet-r/n02097298/sketch_1.jpg +- data/imagenet-r/n02655020/misc_14.jpg +- data/imagenet-r/n02106030/painting_21.jpg +- data/imagenet-r/n02701002/toy_6.jpg +- data/imagenet-r/n01843383/art_12.jpg +- data/imagenet-r/n03424325/misc_9.jpg +- data/imagenet-r/n01614925/tattoo_33.jpg +- data/imagenet-r/n01882714/cartoon_10.jpg +- data/imagenet-r/n01944390/misc_64.jpg +- data/imagenet-r/n02129604/tattoo_21.jpg +- data/imagenet-r/n07745940/graffiti_37.jpg +- data/imagenet-r/n02841315/graffiti_5.jpg +- data/imagenet-r/n02165456/toy_13.jpg +- data/imagenet-r/n02129165/embroidery_8.jpg +- data/imagenet-r/n02607072/deviantart_19.jpg +- data/imagenet-r/n03124170/sketch_7.jpg +- data/imagenet-r/n04409515/cartoon_19.jpg +- data/imagenet-r/n02007558/tattoo_27.jpg +- data/imagenet-r/n03372029/sticker_0.jpg +- data/imagenet-r/n04325704/deviantart_1.jpg +- data/imagenet-r/n01882714/graffiti_6.jpg +- data/imagenet-r/n02948072/embroidery_28.jpg +- data/imagenet-r/n04465501/videogame_12.jpg +- data/imagenet-r/n04147183/art_12.jpg +- data/imagenet-r/n02980441/cartoon_9.jpg +- data/imagenet-r/n01770393/tattoo_63.jpg +- data/imagenet-r/n07697537/videogame_15.jpg +- data/imagenet-r/n02883205/cartoon_9.jpg +- data/imagenet-r/n02219486/origami_7.jpg +- data/imagenet-r/n02110958/tattoo_39.jpg +- data/imagenet-r/n07697313/cartoon_33.jpg +- data/imagenet-r/n01882714/toy_18.jpg +- data/imagenet-r/n02843684/misc_27.jpg +- data/imagenet-r/n07880968/cartoon_7.jpg +- data/imagenet-r/n01514859/sketch_0.jpg +- data/imagenet-r/n04147183/painting_4.jpg +- data/imagenet-r/n02112018/sketch_9.jpg +- data/imagenet-r/n03481172/art_1.jpg +- data/imagenet-r/n02510455/misc_95.jpg +- data/imagenet-r/n03124170/misc_16.jpg +- data/imagenet-r/n01983481/misc_18.jpg +- data/imagenet-r/n03467068/graffiti_2.jpg +- data/imagenet-r/n03424325/misc_92.jpg +- data/imagenet-r/n01770393/tattoo_22.jpg +- data/imagenet-r/n02226429/toy_2.jpg +- data/imagenet-r/n02486410/sculpture_10.jpg +- data/imagenet-r/n04254680/graphic_0.jpg +- data/imagenet-r/n01443537/graffiti_1.jpg +- data/imagenet-r/n01494475/misc_132.jpg +- data/imagenet-r/n02948072/sketch_17.jpg +- data/imagenet-r/n02110958/toy_0.jpg +- data/imagenet-r/n01944390/deviantart_15.jpg +- data/imagenet-r/n02655020/videogame_8.jpg +- data/imagenet-r/n01616318/tattoo_12.jpg +- data/imagenet-r/n07734744/sculpture_0.jpg +- data/imagenet-r/n02088466/sketch_8.jpg +- data/imagenet-r/n02398521/tattoo_3.jpg +- data/imagenet-r/n10565667/sculpture_3.jpg +- data/imagenet-r/n04347754/tattoo_5.jpg +- data/imagenet-r/n02088094/misc_1.jpg +- data/imagenet-r/n01806143/art_8.jpg +- data/imagenet-r/n02007558/deviantart_8.jpg +- data/imagenet-r/n07753275/deviantart_2.jpg +- data/imagenet-r/n02363005/graphic_7.jpg +- data/imagenet-r/n03372029/painting_11.jpg +- data/imagenet-r/n02317335/tattoo_27.jpg +- data/imagenet-r/n07734744/toy_10.jpg +- data/imagenet-r/n07720875/cartoon_6.jpg +- data/imagenet-r/n02129604/tattoo_12.jpg +- data/imagenet-r/n07718472/embroidery_1.jpg +- data/imagenet-r/n01983481/misc_26.jpg +- data/imagenet-r/n02091134/misc_89.jpg +- data/imagenet-r/n07745940/embroidery_19.jpg +- data/imagenet-r/n02364673/misc_4.jpg +- data/imagenet-r/n02749479/tattoo_3.jpg +- data/imagenet-r/n07749582/embroidery_4.jpg +- data/imagenet-r/n04310018/videogame_35.jpg +- data/imagenet-r/n01986214/cartoon_24.jpg +- data/imagenet-r/n04347754/toy_1.jpg +- data/imagenet-r/n02129165/tattoo_32.jpg +- data/imagenet-r/n04389033/sculpture_5.jpg +- data/imagenet-r/n07768694/deviantart_0.jpg +- data/imagenet-r/n04254680/videogame_10.jpg +- data/imagenet-r/n04522168/videogame_12.jpg +- data/imagenet-r/n12267677/misc_87.jpg +- data/imagenet-r/n02119022/misc_49.jpg +- data/imagenet-r/n04347754/videogame_32.jpg +- data/imagenet-r/n02445715/graffiti_6.jpg +- data/imagenet-r/n02117135/cartoon_1.jpg +- data/imagenet-r/n02486410/cartoon_30.jpg +- data/imagenet-r/n02113624/misc_2.jpg +- data/imagenet-r/n01632777/cartoon_15.jpg +- data/imagenet-r/n03498962/graphic_3.jpg +- data/imagenet-r/n01694178/graffiti_5.jpg +- data/imagenet-r/n02007558/tattoo_23.jpg +- data/imagenet-r/n01847000/toy_22.jpg +- data/imagenet-r/n01494475/misc_107.jpg +- data/imagenet-r/n02948072/art_3.jpg +- data/imagenet-r/n01833805/tattoo_86.jpg +- data/imagenet-r/n02113624/sketch_11.jpg +- data/imagenet-r/n02091134/misc_41.jpg +- data/imagenet-r/n04192698/sculpture_0.jpg +- data/imagenet-r/n01616318/embroidery_2.jpg +- data/imagenet-r/n01614925/art_11.jpg +- data/imagenet-r/n02948072/cartoon_34.jpg +- data/imagenet-r/n02883205/graphic_1.jpg +- data/imagenet-r/n01694178/deviantart_9.jpg +- data/imagenet-r/n02823750/sketch_15.jpg +- data/imagenet-r/n03124170/sketch_14.jpg +- data/imagenet-r/n04409515/painting_2.jpg +- data/imagenet-r/n10565667/videogame_18.jpg +- data/imagenet-r/n02236044/sculpture_29.jpg +- data/imagenet-r/n02106166/sketch_8.jpg +- data/imagenet-r/n02165456/tattoo_13.jpg +- data/imagenet-r/n02113799/misc_0.jpg +- data/imagenet-r/n01514859/cartoon_33.jpg +- data/imagenet-r/n02113799/misc_24.jpg +- data/imagenet-r/n02391049/misc_113.jpg +- data/imagenet-r/n01630670/origami_2.jpg +- data/imagenet-r/n02110958/sculpture_8.jpg +- data/imagenet-r/n02672831/cartoon_38.jpg +- data/imagenet-r/n02808440/cartoon_22.jpg +- data/imagenet-r/n04254680/graphic_3.jpg +- data/imagenet-r/n01820546/art_7.jpg +- data/imagenet-r/n01843383/art_11.jpg +- data/imagenet-r/n02317335/art_0.jpg +- data/imagenet-r/n04141076/deviantart_30.jpg +- data/imagenet-r/n02165456/tattoo_12.jpg +- data/imagenet-r/n02363005/sketch_5.jpg +- data/imagenet-r/n02106030/painting_20.jpg +- data/imagenet-r/n02091032/misc_20.jpg +- data/imagenet-r/n03124170/painting_30.jpg +- data/imagenet-r/n04147183/misc_3.jpg +- data/imagenet-r/n02129604/deviantart_1.jpg +- data/imagenet-r/n02410509/sculpture_23.jpg +- data/imagenet-r/n04310018/painting_37.jpg +- data/imagenet-r/n03272010/sculpture_2.jpg +- data/imagenet-r/n04266014/videogame_3.jpg +- data/imagenet-r/n03424325/sketch_20.jpg +- data/imagenet-r/n03676483/cartoon_11.jpg +- data/imagenet-r/n02655020/misc_69.jpg +- data/imagenet-r/n04536866/deviantart_10.jpg +- data/imagenet-r/n07697313/sketch_10.jpg +- data/imagenet-r/n02526121/sculpture_6.jpg +- data/imagenet-r/n04552348/toy_2.jpg +- data/imagenet-r/n04487394/deviantart_11.jpg +- data/imagenet-r/n12267677/misc_120.jpg +- data/imagenet-r/n01514859/sketch_18.jpg +- data/imagenet-r/n04310018/sketch_22.jpg +- data/imagenet-r/n07753275/graphic_0.jpg +- data/imagenet-r/n04389033/videogame_47.jpg +- data/imagenet-r/n04347754/toy_12.jpg +- data/imagenet-r/n01443537/painting_11.jpg +- data/imagenet-r/n02268443/misc_63.jpg +- data/imagenet-r/n03424325/misc_56.jpg +- data/imagenet-r/n07745940/embroidery_5.jpg +- data/imagenet-r/n04266014/misc_11.jpg +- data/imagenet-r/n02814860/sketch_12.jpg +- data/imagenet-r/n02749479/sketch_1.jpg +- data/imagenet-r/n02526121/sketch_2.jpg +- data/imagenet-r/n02395406/tattoo_13.jpg +- data/imagenet-r/n02085620/tattoo_6.jpg +- data/imagenet-r/n02445715/tattoo_8.jpg +- data/imagenet-r/n01518878/toy_5.jpg +- data/imagenet-r/n07753275/embroidery_2.jpg +- data/imagenet-r/n02364673/toy_2.jpg +- data/imagenet-r/n07720875/painting_31.jpg +- data/imagenet-r/n02841315/cartoon_21.jpg +- data/imagenet-r/n01614925/tattoo_46.jpg +- data/imagenet-r/n07720875/painting_7.jpg +- data/imagenet-r/n02113023/sketch_14.jpg +- data/imagenet-r/n02948072/sketch_11.jpg +- data/imagenet-r/n07734744/graphic_1.jpg +- data/imagenet-r/n02114367/misc_32.jpg +- data/imagenet-r/n02113624/sketch_20.jpg +- data/imagenet-r/n03594945/art_4.jpg +- data/imagenet-r/n02268443/misc_139.jpg +- data/imagenet-r/n02108915/misc_108.jpg +- data/imagenet-r/n04552348/videogame_25.jpg +- data/imagenet-r/n02091134/misc_90.jpg +- data/imagenet-r/n02480855/tattoo_4.jpg +- data/imagenet-r/n02226429/graphic_6.jpg +- data/imagenet-r/n02092339/misc_11.jpg +- data/imagenet-r/n02134084/misc_58.jpg +- data/imagenet-r/n02219486/graffiti_2.jpg +- data/imagenet-r/n02480855/sculpture_3.jpg +- data/imagenet-r/n02114367/misc_15.jpg +- data/imagenet-r/n02437616/misc_5.jpg +- data/imagenet-r/n02138441/art_20.jpg +- data/imagenet-r/n02066245/painting_5.jpg +- data/imagenet-r/n04192698/cartoon_5.jpg +- data/imagenet-r/n04591713/sketch_19.jpg +- data/imagenet-r/n02129165/cartoon_26.jpg +- data/imagenet-r/n01843383/painting_33.jpg +- data/imagenet-r/n03372029/sculpture_37.jpg +- data/imagenet-r/n03467068/sketch_2.jpg +- data/imagenet-r/n01694178/sculpture_3.jpg +- data/imagenet-r/n02077923/misc_25.jpg +- data/imagenet-r/n01514859/painting_23.jpg +- data/imagenet-r/n02410509/art_16.jpg +- data/imagenet-r/n01616318/cartoon_2.jpg +- data/imagenet-r/n07749582/embroidery_3.jpg +- data/imagenet-r/n04192698/sketch_7.jpg +- data/imagenet-r/n02395406/cartoon_4.jpg +- data/imagenet-r/n02423022/painting_2.jpg +- data/imagenet-r/n03888257/videogame_8.jpg +- data/imagenet-r/n02110958/cartoon_49.jpg +- data/imagenet-r/n02113023/sketch_7.jpg +- data/imagenet-r/n02797295/sketch_5.jpg +- data/imagenet-r/n01820546/painting_30.jpg +- data/imagenet-r/n01855672/sculpture_7.jpg +- data/imagenet-r/n04086273/tattoo_59.jpg +- data/imagenet-r/n02096585/sketch_18.jpg +- data/imagenet-r/n01748264/sketch_2.jpg +- data/imagenet-r/n02346627/cartoon_8.jpg +- data/imagenet-r/n04086273/tattoo_0.jpg +- data/imagenet-r/n07720875/deviantart_8.jpg +- data/imagenet-r/n07734744/cartoon_9.jpg +- data/imagenet-r/n01518878/deviantart_1.jpg +- data/imagenet-r/n07734744/art_0.jpg +- data/imagenet-r/n01614925/sketch_17.jpg +- data/imagenet-r/n02939185/cartoon_15.jpg +- data/imagenet-r/n02219486/toy_2.jpg +- data/imagenet-r/n07697537/deviantart_14.jpg +- data/imagenet-r/n02391049/misc_32.jpg +- data/imagenet-r/n02007558/graffiti_22.jpg +- data/imagenet-r/n02085620/misc_27.jpg +- data/imagenet-r/n02106662/misc_1.jpg +- data/imagenet-r/n07753275/deviantart_5.jpg +- data/imagenet-r/n02119022/misc_57.jpg +- data/imagenet-r/n02108915/sketch_18.jpg +- data/imagenet-r/n02138441/cartoon_16.jpg +- data/imagenet-r/n02130308/sculpture_3.jpg +- data/imagenet-r/n01944390/misc_68.jpg +- data/imagenet-r/n07614500/sticker_1.jpg +- data/imagenet-r/n01944390/sketch_4.jpg +- data/imagenet-r/n02102318/art_1.jpg +- data/imagenet-r/n02391049/misc_42.jpg +- data/imagenet-r/n03676483/cartoon_10.jpg +- data/imagenet-r/n07697313/deviantart_44.jpg +- data/imagenet-r/n04552348/art_18.jpg +- data/imagenet-r/n02364673/painting_8.jpg +- data/imagenet-r/n02480855/cartoon_15.jpg +- data/imagenet-r/n03495258/videogame_8.jpg +- data/imagenet-r/n02481823/painting_3.jpg +- data/imagenet-r/n02110185/toy_8.jpg +- data/imagenet-r/n01910747/cartoon_3.jpg +- data/imagenet-r/n02906734/cartoon_31.jpg +- data/imagenet-r/n01443537/deviantart_8.jpg +- data/imagenet-r/n07873807/misc_3.jpg +- data/imagenet-r/n02395406/art_18.jpg +- data/imagenet-r/n07749582/painting_36.jpg +- data/imagenet-r/n01843383/toy_5.jpg +- data/imagenet-r/n02130308/cartoon_5.jpg +- data/imagenet-r/n01833805/deviantart_1.jpg +- data/imagenet-r/n02823750/deviantart_2.jpg +- data/imagenet-r/n02088364/misc_26.jpg +- data/imagenet-r/n04465501/sketch_23.jpg +- data/imagenet-r/n02071294/tattoo_10.jpg +- data/imagenet-r/n04266014/origami_1.jpg +- data/imagenet-r/n02091134/misc_25.jpg +- data/imagenet-r/n02510455/misc_6.jpg +- data/imagenet-r/n02088466/misc_19.jpg +- data/imagenet-r/n02526121/art_0.jpg +- data/imagenet-r/n04347754/tattoo_11.jpg +- data/imagenet-r/n02410509/graphic_7.jpg +- data/imagenet-r/n01882714/graffiti_9.jpg +- data/imagenet-r/n01820546/painting_0.jpg +- data/imagenet-r/n02085620/tattoo_18.jpg +- data/imagenet-r/n02165456/misc_12.jpg +- data/imagenet-r/n04522168/cartoon_6.jpg +- data/imagenet-r/n01910747/tattoo_49.jpg +- data/imagenet-r/n07614500/cartoon_18.jpg +- data/imagenet-r/n01820546/painting_4.jpg +- data/imagenet-r/n02395406/painting_6.jpg +- data/imagenet-r/n01632777/cartoon_31.jpg +- data/imagenet-r/n02410509/sculpture_44.jpg +- data/imagenet-r/n04347754/misc_3.jpg +- data/imagenet-r/n07693725/graffiti_0.jpg +- data/imagenet-r/n01843383/deviantart_12.jpg +- data/imagenet-r/n01843383/painting_37.jpg +- data/imagenet-r/n01531178/sketch_12.jpg +- data/imagenet-r/n02085620/misc_50.jpg +- data/imagenet-r/n01784675/sketch_13.jpg +- data/imagenet-r/n02108089/misc_47.jpg +- data/imagenet-r/n02219486/sculpture_2.jpg +- data/imagenet-r/n02123045/cartoon_21.jpg +- data/imagenet-r/n02802426/cartoon_13.jpg +- data/imagenet-r/n02114367/sketch_8.jpg +- data/imagenet-r/n02099712/sketch_21.jpg +- data/imagenet-r/n01983481/misc_22.jpg +- data/imagenet-r/n02091134/misc_64.jpg +- data/imagenet-r/n02096585/misc_135.jpg +- data/imagenet-r/n02071294/misc_5.jpg +- data/imagenet-r/n02841315/cartoon_34.jpg +- data/imagenet-r/n01630670/cartoon_12.jpg +- data/imagenet-r/n07693725/cartoon_7.jpg +- data/imagenet-r/n02094433/misc_28.jpg +- data/imagenet-r/n07873807/graffiti_0.jpg +- data/imagenet-r/n01882714/tattoo_22.jpg +- data/imagenet-r/n02219486/toy_4.jpg +- data/imagenet-r/n04086273/sketch_7.jpg +- data/imagenet-r/n02129165/cartoon_8.jpg +- data/imagenet-r/n04254680/graffiti_0.jpg +- data/imagenet-r/n02092339/misc_1.jpg +- data/imagenet-r/n02092339/misc_39.jpg +- data/imagenet-r/n02099601/misc_58.jpg +- data/imagenet-r/n02085620/misc_63.jpg +- data/imagenet-r/n01694178/misc_4.jpg +- data/imagenet-r/n03630383/cartoon_32.jpg +- data/imagenet-r/n02128757/painting_33.jpg +- data/imagenet-r/n02356798/cartoon_13.jpg +- data/imagenet-r/n02966193/cartoon_8.jpg +- data/imagenet-r/n04141076/deviantart_32.jpg +- data/imagenet-r/n02007558/embroidery_19.jpg +- data/imagenet-r/n04147183/painting_20.jpg +- data/imagenet-r/n01944390/misc_71.jpg +- data/imagenet-r/n03124170/art_23.jpg +- data/imagenet-r/n03494278/cartoon_5.jpg +- data/imagenet-r/n03947888/tattoo_0.jpg +- data/imagenet-r/n07714571/deviantart_3.jpg +- data/imagenet-r/n02410509/embroidery_2.jpg +- data/imagenet-r/n07873807/misc_11.jpg +- data/imagenet-r/n02749479/sketch_20.jpg +- data/imagenet-r/n12267677/misc_63.jpg +- data/imagenet-r/n01882714/cartoon_37.jpg +- data/imagenet-r/n01882714/cartoon_5.jpg +- data/imagenet-r/n02007558/embroidery_2.jpg +- data/imagenet-r/n07753275/embroidery_5.jpg +- data/imagenet-r/n02226429/embroidery_1.jpg +- data/imagenet-r/n01843383/cartoon_44.jpg +- data/imagenet-r/n01632777/art_13.jpg +- data/imagenet-r/n02749479/videogame_2.jpg +- data/imagenet-r/n02233338/misc_7.jpg +- data/imagenet-r/n02793495/sketch_20.jpg +- data/imagenet-r/n07734744/graffiti_35.jpg +- data/imagenet-r/n02410509/sticker_2.jpg +- data/imagenet-r/n02317335/origami_0.jpg +- data/imagenet-r/n02128757/sketch_4.jpg +- data/imagenet-r/n02948072/embroidery_31.jpg +- data/imagenet-r/n03888257/cartoon_5.jpg +- data/imagenet-r/n02071294/art_1.jpg +- data/imagenet-r/n02447366/sculpture_4.jpg +- data/imagenet-r/n02007558/tattoo_44.jpg +- data/imagenet-r/n02086240/misc_4.jpg +- data/imagenet-r/n02088094/sketch_0.jpg +- data/imagenet-r/n02138441/art_21.jpg +- data/imagenet-r/n07697313/art_8.jpg +- data/imagenet-r/n02279972/toy_0.jpg +- data/imagenet-r/n04310018/videogame_3.jpg +- data/imagenet-r/n02110958/art_14.jpg +- data/imagenet-r/n03930630/cartoon_0.jpg +- data/imagenet-r/n04266014/videogame_25.jpg +- data/imagenet-r/n02056570/painting_6.jpg +- data/imagenet-r/n01983481/misc_7.jpg +- data/imagenet-r/n07753592/misc_3.jpg +- data/imagenet-r/n02108915/tattoo_0.jpg +- data/imagenet-r/n02948072/toy_1.jpg +- data/imagenet-r/n04325704/embroidery_1.jpg +- data/imagenet-r/n04192698/painting_6.jpg +- data/imagenet-r/n03481172/deviantart_10.jpg +- data/imagenet-r/n04465501/deviantart_4.jpg +- data/imagenet-r/n01748264/tattoo_30.jpg +- data/imagenet-r/n01843383/toy_9.jpg +- data/imagenet-r/n07753275/sketch_20.jpg +- data/imagenet-r/n01644373/tattoo_48.jpg +- data/imagenet-r/n02190166/sculpture_3.jpg +- data/imagenet-r/n02701002/toy_21.jpg +- data/imagenet-r/n01770393/sketch_15.jpg +- data/imagenet-r/n02112137/misc_1.jpg +- data/imagenet-r/n02066245/painting_13.jpg +- data/imagenet-r/n04522168/deviantart_5.jpg +- data/imagenet-r/n04086273/cartoon_18.jpg +- data/imagenet-r/n01518878/painting_15.jpg +- data/imagenet-r/n04192698/deviantart_5.jpg +- data/imagenet-r/n04389033/art_6.jpg +- data/imagenet-r/n07749582/painting_9.jpg +- data/imagenet-r/n02883205/painting_1.jpg +- data/imagenet-r/n03481172/art_11.jpg +- data/imagenet-r/n03602883/misc_26.jpg +- data/imagenet-r/n04536866/deviantart_13.jpg +- data/imagenet-r/n04275548/sculpture_5.jpg +- data/imagenet-r/n04310018/graphic_4.jpg +- data/imagenet-r/n03495258/painting_4.jpg +- data/imagenet-r/n01774750/art_4.jpg +- data/imagenet-r/n02486410/cartoon_14.jpg +- data/imagenet-r/n02106662/sketch_14.jpg +- data/imagenet-r/n02346627/cartoon_12.jpg +- data/imagenet-r/n07753592/misc_71.jpg +- data/imagenet-r/n02510455/misc_128.jpg +- data/imagenet-r/n03773504/cartoon_6.jpg +- data/imagenet-r/n04325704/painting_0.jpg +- data/imagenet-r/n03424325/videogame_28.jpg +- data/imagenet-r/n02356798/toy_0.jpg +- data/imagenet-r/n02607072/sketch_18.jpg +- data/imagenet-r/n07614500/misc_21.jpg +- data/imagenet-r/n01531178/cartoon_25.jpg +- data/imagenet-r/n02672831/painting_0.jpg +- data/imagenet-r/n02363005/cartoon_25.jpg +- data/imagenet-r/n01770393/sketch_18.jpg +- data/imagenet-r/n02088238/misc_52.jpg +- data/imagenet-r/n02108915/misc_82.jpg +- data/imagenet-r/n01784675/origami_13.jpg +- data/imagenet-r/n02236044/cartoon_43.jpg +- data/imagenet-r/n01632777/cartoon_23.jpg +- data/imagenet-r/n02951358/sketch_21.jpg +- data/imagenet-r/n02317335/cartoon_17.jpg +- data/imagenet-r/n02091134/sketch_17.jpg +- data/imagenet-r/n01944390/misc_7.jpg +- data/imagenet-r/n02948072/deviantart_4.jpg +- data/imagenet-r/n02410509/origami_3.jpg +- data/imagenet-r/n02113799/sketch_2.jpg +- data/imagenet-r/n01494475/misc_79.jpg +- data/imagenet-r/n03947888/sticker_1.jpg +- data/imagenet-r/n02268443/misc_174.jpg +- data/imagenet-r/n01694178/painting_9.jpg +- data/imagenet-r/n03272010/sketch_8.jpg +- data/imagenet-r/n07768694/sketch_6.jpg +- data/imagenet-r/n04591713/painting_2.jpg +- data/imagenet-r/n01820546/sculpture_0.jpg +- data/imagenet-r/n10565667/videogame_8.jpg +- data/imagenet-r/n07745940/painting_17.jpg +- data/imagenet-r/n02268443/misc_104.jpg +- data/imagenet-r/n01484850/deviantart_3.jpg +- data/imagenet-r/n07734744/videogame_34.jpg +- data/imagenet-r/n02206856/sculpture_9.jpg +- data/imagenet-r/n02423022/cartoon_12.jpg +- data/imagenet-r/n03947888/videogame_19.jpg +- data/imagenet-r/n01770393/tattoo_47.jpg +- data/imagenet-r/n01694178/graphic_1.jpg +- data/imagenet-r/n02106662/misc_7.jpg +- data/imagenet-r/n02749479/sketch_0.jpg +- data/imagenet-r/n02980441/videogame_17.jpg +- data/imagenet-r/n02106662/misc_3.jpg +- data/imagenet-r/n03775071/sketch_13.jpg +- data/imagenet-r/n03481172/deviantart_1.jpg +- data/imagenet-r/n01833805/graffiti_15.jpg +- data/imagenet-r/n04409515/deviantart_1.jpg +- data/imagenet-r/n02098286/sketch_11.jpg +- data/imagenet-r/n02909870/embroidery_5.jpg +- data/imagenet-r/n02128757/cartoon_20.jpg +- data/imagenet-r/n09835506/sketch_10.jpg +- data/imagenet-r/n02092339/misc_5.jpg +- data/imagenet-r/n03124170/misc_9.jpg +- data/imagenet-r/n12267677/misc_117.jpg +- data/imagenet-r/n02106550/tattoo_2.jpg +- data/imagenet-r/n09472597/videogame_19.jpg +- data/imagenet-r/n03345487/videogame_13.jpg +- data/imagenet-r/n02356798/cartoon_9.jpg +- data/imagenet-r/n02793495/painting_17.jpg +- data/imagenet-r/n01843383/tattoo_1.jpg +- data/imagenet-r/n01514859/misc_0.jpg +- data/imagenet-r/n07745940/painting_2.jpg +- data/imagenet-r/n02219486/painting_3.jpg +- data/imagenet-r/n02510455/misc_133.jpg +- data/imagenet-r/n01770393/graffiti_10.jpg +- data/imagenet-r/n07745940/graphic_4.jpg +- data/imagenet-r/n01855672/sketch_17.jpg +- data/imagenet-r/n02510455/misc_90.jpg +- data/imagenet-r/n03630383/art_1.jpg +- data/imagenet-r/n02802426/tattoo_13.jpg +- data/imagenet-r/n01614925/tattoo_35.jpg +- data/imagenet-r/n03594945/videogame_14.jpg +- data/imagenet-r/n02129165/toy_0.jpg +- data/imagenet-r/n04389033/videogame_6.jpg +- data/imagenet-r/n12267677/misc_110.jpg +- data/imagenet-r/n01944390/misc_143.jpg +- data/imagenet-r/n01518878/graphic_3.jpg +- data/imagenet-r/n03649909/sketch_9.jpg +- data/imagenet-r/n01882714/cartoon_33.jpg +- data/imagenet-r/n02445715/tattoo_5.jpg +- data/imagenet-r/n02206856/cartoon_1.jpg +- data/imagenet-r/n02110185/painting_22.jpg +- data/imagenet-r/n02966193/cartoon_21.jpg +- data/imagenet-r/n04146614/toy_28.jpg +- data/imagenet-r/n09472597/embroidery_3.jpg +- data/imagenet-r/n07753592/misc_168.jpg +- data/imagenet-r/n02077923/sketch_18.jpg +- data/imagenet-r/n02007558/deviantart_12.jpg +- data/imagenet-r/n02071294/sketch_2.jpg +- data/imagenet-r/n02655020/sketch_5.jpg +- data/imagenet-r/n02951358/painting_1.jpg +- data/imagenet-r/n02130308/sculpture_4.jpg +- data/imagenet-r/n07697313/graphic_9.jpg +- data/imagenet-r/n02480855/tattoo_13.jpg +- data/imagenet-r/n01986214/sketch_13.jpg +- data/imagenet-r/n03372029/painting_5.jpg +- data/imagenet-r/n07697313/art_4.jpg +- data/imagenet-r/n02268443/sketch_4.jpg +- data/imagenet-r/n04310018/painting_38.jpg +- data/imagenet-r/n02486410/painting_15.jpg +- data/imagenet-r/n01534433/sketch_23.jpg +- data/imagenet-r/n01514859/embroidery_9.jpg +- data/imagenet-r/n02007558/sketch_21.jpg +- data/imagenet-r/n04522168/sketch_19.jpg +- data/imagenet-r/n07873807/videogame_6.jpg +- data/imagenet-r/n02814860/sticker_8.jpg +- data/imagenet-r/n02395406/tattoo_6.jpg +- data/imagenet-r/n01494475/misc_41.jpg +- data/imagenet-r/n02843684/cartoon_10.jpg +- data/imagenet-r/n02481823/tattoo_5.jpg +- data/imagenet-r/n10565667/deviantart_7.jpg +- data/imagenet-r/n02056570/videogame_3.jpg +- data/imagenet-r/n02655020/misc_55.jpg +- data/imagenet-r/n01518878/painting_20.jpg +- data/imagenet-r/n04465501/misc_5.jpg +- data/imagenet-r/n02363005/sketch_1.jpg +- data/imagenet-r/n07734744/deviantart_28.jpg +- data/imagenet-r/n02123045/sketch_18.jpg +- data/imagenet-r/n02128385/sketch_1.jpg +- data/imagenet-r/n02226429/sticker_0.jpg +- data/imagenet-r/n02110185/painting_24.jpg +- data/imagenet-r/n04325704/art_0.jpg +- data/imagenet-r/n01833805/tattoo_20.jpg +- data/imagenet-r/n01616318/tattoo_0.jpg +- data/imagenet-r/n04254680/misc_1.jpg +- data/imagenet-r/n01484850/art_13.jpg +- data/imagenet-r/n02088238/misc_57.jpg +- data/imagenet-r/n02480855/tattoo_2.jpg +- data/imagenet-r/n01806143/cartoon_3.jpg +- data/imagenet-r/n04147183/sketch_8.jpg +- data/imagenet-r/n02088466/tattoo_0.jpg +- data/imagenet-r/n03649909/toy_17.jpg +- data/imagenet-r/n02655020/misc_25.jpg +- data/imagenet-r/n02363005/toy_1.jpg +- data/imagenet-r/n07614500/graffiti_6.jpg +- data/imagenet-r/n02007558/origami_1.jpg +- data/imagenet-r/n02346627/cartoon_0.jpg +- data/imagenet-r/n01616318/graffiti_3.jpg +- data/imagenet-r/n02423022/cartoon_13.jpg +- data/imagenet-r/n07734744/misc_19.jpg +- data/imagenet-r/n04133789/sketch_17.jpg +- data/imagenet-r/n03602883/misc_38.jpg +- data/imagenet-r/n02138441/sketch_6.jpg +- data/imagenet-r/n04536866/sketch_10.jpg +- data/imagenet-r/n10565667/videogame_26.jpg +- data/imagenet-r/n02233338/misc_38.jpg +- data/imagenet-r/n07718472/sculpture_1.jpg +- data/imagenet-r/n07734744/painting_27.jpg +- data/imagenet-r/n02117135/art_7.jpg +- data/imagenet-r/n02398521/origami_1.jpg +- data/imagenet-r/n01833805/tattoo_76.jpg +- data/imagenet-r/n01843383/cartoon_11.jpg +- data/imagenet-r/n02099712/misc_12.jpg +- data/imagenet-r/n02909870/toy_0.jpg +- data/imagenet-r/n02236044/cartoon_23.jpg +- data/imagenet-r/n02423022/sculpture_14.jpg +- data/imagenet-r/n02099601/tattoo_1.jpg +- data/imagenet-r/n01677366/misc_27.jpg +- data/imagenet-r/n01694178/toy_12.jpg +- data/imagenet-r/n07749582/painting_19.jpg +- data/imagenet-r/n01484850/tattoo_30.jpg +- data/imagenet-r/n09472597/deviantart_9.jpg +- data/imagenet-r/n02814860/cartoon_17.jpg +- data/imagenet-r/n04133789/sketch_20.jpg +- data/imagenet-r/n01882714/toy_31.jpg +- data/imagenet-r/n02108915/sketch_3.jpg +- data/imagenet-r/n02980441/cartoon_3.jpg +- data/imagenet-r/n07614500/graphic_7.jpg +- data/imagenet-r/n03481172/videogame_8.jpg +- data/imagenet-r/n07753275/sketch_17.jpg +- data/imagenet-r/n07693725/sketch_3.jpg +- data/imagenet-r/n07749582/deviantart_12.jpg +- data/imagenet-r/n02447366/sketch_7.jpg +- data/imagenet-r/n04409515/sketch_19.jpg +- data/imagenet-r/n01843383/sketch_5.jpg +- data/imagenet-r/n01494475/misc_78.jpg +- data/imagenet-r/n07768694/sketch_5.jpg +- data/imagenet-r/n02445715/graffiti_7.jpg +- data/imagenet-r/n02802426/sketch_16.jpg +- data/imagenet-r/n01494475/misc_108.jpg +- data/imagenet-r/n02165456/cartoon_2.jpg +- data/imagenet-r/n07734744/videogame_32.jpg +- data/imagenet-r/n01806143/cartoon_11.jpg +- data/imagenet-r/n02088238/misc_65.jpg +- data/imagenet-r/n02130308/painting_20.jpg +- data/imagenet-r/n01616318/painting_6.jpg +- data/imagenet-r/n04552348/toy_10.jpg +- data/imagenet-r/n02097298/sketch_5.jpg +- data/imagenet-r/n02091134/misc_13.jpg +- data/imagenet-r/n01616318/tattoo_32.jpg +- data/imagenet-r/n01774750/deviantart_0.jpg +- data/imagenet-r/n07697537/misc_74.jpg +- data/imagenet-r/n02091134/sketch_14.jpg +- data/imagenet-r/n02966193/cartoon_9.jpg +- data/imagenet-r/n01694178/sketch_20.jpg +- data/imagenet-r/n02165456/tattoo_58.jpg +- data/imagenet-r/n02268443/misc_9.jpg +- data/imagenet-r/n02939185/cartoon_8.jpg +- data/imagenet-r/n04465501/videogame_13.jpg +- data/imagenet-r/n02909870/sketch_4.jpg +- data/imagenet-r/n01770393/cartoon_15.jpg +- data/imagenet-r/n07734744/cartoon_11.jpg +- data/imagenet-r/n03602883/sketch_3.jpg +- data/imagenet-r/n02206856/sticker_23.jpg +- data/imagenet-r/n02096585/misc_95.jpg +- data/imagenet-r/n02236044/graffiti_9.jpg +- data/imagenet-r/n02510455/misc_22.jpg +- data/imagenet-r/n02317335/sticker_0.jpg +- data/imagenet-r/n02948072/sketch_23.jpg +- data/imagenet-r/n01833805/tattoo_98.jpg +- data/imagenet-r/n02128757/art_13.jpg +- data/imagenet-r/n02085620/misc_13.jpg +- data/imagenet-r/n02085620/misc_106.jpg +- data/imagenet-r/n10565667/cartoon_13.jpg +- data/imagenet-r/n01514859/toy_13.jpg +- data/imagenet-r/n02391049/misc_86.jpg +- data/imagenet-r/n04522168/sketch_6.jpg +- data/imagenet-r/n01531178/art_2.jpg +- data/imagenet-r/n02219486/tattoo_11.jpg +- data/imagenet-r/n02110341/misc_7.jpg +- data/imagenet-r/n12267677/sketch_13.jpg +- data/imagenet-r/n03495258/sculpture_17.jpg +- data/imagenet-r/n03649909/misc_6.jpg +- data/imagenet-r/n01443537/cartoon_29.jpg +- data/imagenet-r/n03124170/cartoon_49.jpg +- data/imagenet-r/n02814860/painting_49.jpg +- data/imagenet-r/n03947888/art_4.jpg +- data/imagenet-r/n02112018/misc_23.jpg +- data/imagenet-r/n01806143/painting_5.jpg +- data/imagenet-r/n01833805/graffiti_7.jpg +- data/imagenet-r/n02701002/toy_22.jpg +- data/imagenet-r/n01484850/art_6.jpg +- data/imagenet-r/n04536866/cartoon_3.jpg +- data/imagenet-r/n04254680/deviantart_16.jpg +- data/imagenet-r/n07749582/misc_3.jpg +- data/imagenet-r/n02134084/misc_121.jpg +- data/imagenet-r/n02099601/misc_103.jpg +- data/imagenet-r/n03930630/misc_10.jpg +- data/imagenet-r/n04275548/sketch_4.jpg +- data/imagenet-r/n02096585/misc_112.jpg +- data/imagenet-r/n03424325/misc_58.jpg +- data/imagenet-r/n04266014/tattoo_2.jpg +- data/imagenet-r/n02909870/cartoon_27.jpg +- data/imagenet-r/n02883205/misc_1.jpg +- data/imagenet-r/n02088238/misc_55.jpg +- data/imagenet-r/n07753592/misc_177.jpg +- data/imagenet-r/n01498041/sketch_15.jpg +- data/imagenet-r/n04266014/videogame_2.jpg +- data/imagenet-r/n02134084/misc_44.jpg +- data/imagenet-r/n02113799/misc_26.jpg +- data/imagenet-r/n02672831/sketch_18.jpg +- data/imagenet-r/n02672831/embroidery_0.jpg +- data/imagenet-r/n01514859/embroidery_7.jpg +- data/imagenet-r/n02268443/misc_56.jpg +- data/imagenet-r/n01632777/toy_5.jpg +- data/imagenet-r/n01748264/tattoo_17.jpg +- data/imagenet-r/n02128385/graffiti_2.jpg +- data/imagenet-r/n02206856/sketch_12.jpg +- data/imagenet-r/n02526121/sketch_6.jpg +- data/imagenet-r/n02007558/sketch_16.jpg +- data/imagenet-r/n02268443/misc_137.jpg +- data/imagenet-r/n03345487/toy_12.jpg +- data/imagenet-r/n04325704/cartoon_16.jpg +- data/imagenet-r/n01630670/cartoon_7.jpg +- data/imagenet-r/n07734744/toy_18.jpg +- data/imagenet-r/n07753592/misc_143.jpg +- data/imagenet-r/n01860187/deviantart_0.jpg +- data/imagenet-r/n02007558/art_25.jpg +- data/imagenet-r/n02129604/sketch_7.jpg +- data/imagenet-r/n01443537/art_2.jpg +- data/imagenet-r/n02233338/sketch_3.jpg +- data/imagenet-r/n02129165/deviantart_1.jpg +- data/imagenet-r/n02106662/misc_74.jpg +- data/imagenet-r/n02110958/cartoon_20.jpg +- data/imagenet-r/n03494278/sketch_10.jpg +- data/imagenet-r/n02097298/misc_71.jpg +- data/imagenet-r/n02909870/videogame_12.jpg +- data/imagenet-r/n02123045/painting_35.jpg +- data/imagenet-r/n04522168/cartoon_1.jpg +- data/imagenet-r/n02268443/misc_22.jpg +- data/imagenet-r/n01616318/tattoo_26.jpg +- data/imagenet-r/n02226429/art_4.jpg +- data/imagenet-r/n04389033/cartoon_7.jpg +- data/imagenet-r/n04389033/videogame_51.jpg +- data/imagenet-r/n02088094/sketch_3.jpg +- data/imagenet-r/n02113624/misc_9.jpg +- data/imagenet-r/n02233338/misc_9.jpg +- data/imagenet-r/n04141076/cartoon_11.jpg +- data/imagenet-r/n02480495/sculpture_0.jpg +- data/imagenet-r/n02219486/graffiti_12.jpg +- data/imagenet-r/n01784675/videogame_4.jpg +- data/imagenet-r/n02219486/cartoon_0.jpg +- data/imagenet-r/n01770393/sculpture_1.jpg +- data/imagenet-r/n02110958/tattoo_33.jpg +- data/imagenet-r/n01882714/embroidery_2.jpg +- data/imagenet-r/n02445715/sketch_20.jpg +- data/imagenet-r/n03594945/toy_20.jpg +- data/imagenet-r/n02108915/misc_95.jpg +- data/imagenet-r/n03602883/misc_40.jpg +- data/imagenet-r/n01614925/sketch_20.jpg +- data/imagenet-r/n07734744/toy_19.jpg +- data/imagenet-r/n02226429/sketch_8.jpg +- data/imagenet-r/n04086273/tattoo_38.jpg +- data/imagenet-r/n01748264/sketch_16.jpg +- data/imagenet-r/n02655020/misc_66.jpg +- data/imagenet-r/n01632777/deviantart_12.jpg +- data/imagenet-r/n02437616/sketch_9.jpg +- data/imagenet-r/n07718472/embroidery_0.jpg +- data/imagenet-r/n02206856/cartoon_57.jpg +- data/imagenet-r/n02883205/toy_14.jpg +- data/imagenet-r/n03345487/videogame_22.jpg +- data/imagenet-r/n01843383/painting_13.jpg +- data/imagenet-r/n02096585/sketch_2.jpg +- data/imagenet-r/n07693725/cartoon_1.jpg +- data/imagenet-r/n03495258/embroidery_2.jpg +- data/imagenet-r/n04465501/embroidery_7.jpg +- data/imagenet-r/n01484850/misc_12.jpg +- data/imagenet-r/n01882714/sketch_23.jpg +- data/imagenet-r/n02129165/videogame_0.jpg +- data/imagenet-r/n01644373/art_1.jpg +- data/imagenet-r/n02051845/painting_4.jpg +- data/imagenet-r/n02391049/misc_54.jpg +- data/imagenet-r/n04591713/painting_22.jpg +- data/imagenet-r/n01484850/art_15.jpg +- data/imagenet-r/n02098286/misc_26.jpg +- data/imagenet-r/n02085620/misc_15.jpg +- data/imagenet-r/n04275548/tattoo_3.jpg +- data/imagenet-r/n01484850/painting_3.jpg +- data/imagenet-r/n07753592/sketch_17.jpg +- data/imagenet-r/n02106662/misc_42.jpg +- data/imagenet-r/n01910747/cartoon_32.jpg +- data/imagenet-r/n03272010/cartoon_15.jpg +- data/imagenet-r/n02906734/cartoon_58.jpg +- data/imagenet-r/n03495258/tattoo_13.jpg +- data/imagenet-r/n02966193/cartoon_22.jpg +- data/imagenet-r/n09472597/sketch_15.jpg +- data/imagenet-r/n03424325/videogame_4.jpg +- data/imagenet-r/n01484850/deviantart_14.jpg +- data/imagenet-r/n02279972/tattoo_15.jpg +- data/imagenet-r/n01843383/cartoon_29.jpg +- data/imagenet-r/n03676483/art_0.jpg +- data/imagenet-r/n02236044/cartoon_39.jpg +- data/imagenet-r/n03495258/origami_0.jpg +- data/imagenet-r/n04141076/toy_0.jpg +- data/imagenet-r/n01843383/sketch_17.jpg +- data/imagenet-r/n07734744/sticker_10.jpg +- data/imagenet-r/n02129165/sculpture_6.jpg +- data/imagenet-r/n07753592/sketch_10.jpg +- data/imagenet-r/n01494475/misc_46.jpg +- data/imagenet-r/n04487394/sketch_3.jpg +- data/imagenet-r/n04118538/graphic_2.jpg +- data/imagenet-r/n01833805/painting_21.jpg +- data/imagenet-r/n07614500/embroidery_3.jpg +- data/imagenet-r/n01944390/misc_10.jpg +- data/imagenet-r/n02009912/misc_25.jpg +- data/imagenet-r/n02110185/painting_32.jpg +- data/imagenet-r/n07749582/painting_22.jpg +- data/imagenet-r/n02134084/misc_27.jpg +- data/imagenet-r/n01855672/sculpture_5.jpg +- data/imagenet-r/n07745940/painting_20.jpg +- data/imagenet-r/n02843684/embroidery_11.jpg +- data/imagenet-r/n02051845/cartoon_12.jpg +- data/imagenet-r/n02992529/sketch_9.jpg +- data/imagenet-r/n02236044/sculpture_8.jpg +- data/imagenet-r/n02138441/cartoon_10.jpg +- data/imagenet-r/n02279972/painting_39.jpg +- data/imagenet-r/n02268443/misc_119.jpg +- data/imagenet-r/n07734744/sketch_16.jpg +- data/imagenet-r/n01770393/tattoo_44.jpg +- data/imagenet-r/n01748264/tattoo_32.jpg +- data/imagenet-r/n01847000/tattoo_17.jpg +- data/imagenet-r/n07749582/sketch_9.jpg +- data/imagenet-r/n02268443/misc_159.jpg +- data/imagenet-r/n07714571/cartoon_2.jpg +- data/imagenet-r/n04310018/tattoo_1.jpg +- data/imagenet-r/n02165456/graphic_4.jpg +- data/imagenet-r/n02279972/painting_29.jpg +- data/imagenet-r/n01614925/deviantart_12.jpg +- data/imagenet-r/n03452741/sculpture_3.jpg +- data/imagenet-r/n07734744/graphic_0.jpg +- data/imagenet-r/n01616318/sketch_20.jpg +- data/imagenet-r/n01774750/graffiti_2.jpg +- data/imagenet-r/n01910747/sketch_14.jpg +- data/imagenet-r/n02906734/cartoon_46.jpg +- data/imagenet-r/n01770393/sticker_2.jpg +- data/imagenet-r/n04487394/cartoon_28.jpg +- data/imagenet-r/n02128385/sketch_3.jpg +- data/imagenet-r/n02391049/tattoo_5.jpg +- data/imagenet-r/n01833805/embroidery_16.jpg +- data/imagenet-r/n09472597/sketch_0.jpg +- data/imagenet-r/n01910747/toy_0.jpg +- data/imagenet-r/n02279972/painting_27.jpg +- data/imagenet-r/n02236044/art_2.jpg +- data/imagenet-r/n01843383/deviantart_37.jpg +- data/imagenet-r/n07718472/deviantart_3.jpg +- data/imagenet-r/n02883205/toy_19.jpg +- data/imagenet-r/n01443537/painting_33.jpg +- data/imagenet-r/n02129165/cartoon_11.jpg +- data/imagenet-r/n04389033/videogame_36.jpg +- data/imagenet-r/n01694178/sketch_18.jpg +- data/imagenet-r/n01694178/graffiti_3.jpg +- data/imagenet-r/n02346627/toy_2.jpg +- data/imagenet-r/n02797295/sketch_3.jpg +- data/imagenet-r/n07614500/painting_13.jpg +- data/imagenet-r/n04389033/videogame_34.jpg +- data/imagenet-r/n02279972/painting_5.jpg +- data/imagenet-r/n02088466/sketch_5.jpg +- data/imagenet-r/n02802426/tattoo_5.jpg +- data/imagenet-r/n09472597/painting_12.jpg +- data/imagenet-r/n02480495/painting_22.jpg +- data/imagenet-r/n02883205/art_5.jpg +- data/imagenet-r/n02948072/graphic_3.jpg +- data/imagenet-r/n02939185/sketch_6.jpg +- data/imagenet-r/n02325366/misc_31.jpg +- data/imagenet-r/n02823750/tattoo_1.jpg +- data/imagenet-r/n02992529/graffiti_3.jpg +- data/imagenet-r/n03124170/misc_13.jpg +- data/imagenet-r/n02134084/deviantart_3.jpg +- data/imagenet-r/n03930630/painting_10.jpg +- data/imagenet-r/n01833805/tattoo_15.jpg +- data/imagenet-r/n02398521/cartoon_15.jpg +- data/imagenet-r/n02391049/misc_116.jpg +- data/imagenet-r/n02447366/embroidery_4.jpg +- data/imagenet-r/n02410509/sculpture_21.jpg +- data/imagenet-r/n04409515/art_5.jpg +- data/imagenet-r/n04192698/toy_1.jpg +- data/imagenet-r/n01748264/tattoo_33.jpg +- data/imagenet-r/n02071294/sticker_1.jpg +- data/imagenet-r/n07768694/sketch_10.jpg +- data/imagenet-r/n04310018/art_15.jpg +- data/imagenet-r/n02391049/misc_5.jpg +- data/imagenet-r/n02110341/tattoo_1.jpg +- data/imagenet-r/n02112018/misc_64.jpg +- data/imagenet-r/n02843684/misc_17.jpg +- data/imagenet-r/n01860187/sculpture_4.jpg +- data/imagenet-r/n01784675/toy_5.jpg +- data/imagenet-r/n02091134/misc_3.jpg +- data/imagenet-r/n02130308/toy_0.jpg +- data/imagenet-r/n02808440/graffiti_1.jpg +- data/imagenet-r/n02447366/cartoon_30.jpg +- data/imagenet-r/n02165456/graffiti_2.jpg +- data/imagenet-r/n02138441/graffiti_2.jpg +- data/imagenet-r/n01820546/sketch_11.jpg +- data/imagenet-r/n01630670/cartoon_8.jpg +- data/imagenet-r/n12267677/misc_49.jpg +- data/imagenet-r/n12267677/misc_22.jpg +- data/imagenet-r/n07718472/sketch_2.jpg +- data/imagenet-r/n03930630/painting_1.jpg +- data/imagenet-r/n02793495/graphic_2.jpg +- data/imagenet-r/n04409515/cartoon_25.jpg +- data/imagenet-r/n02106166/sketch_3.jpg +- data/imagenet-r/n03272010/tattoo_4.jpg +- data/imagenet-r/n02088466/misc_13.jpg +- data/imagenet-r/n02085620/misc_59.jpg +- data/imagenet-r/n02098286/misc_24.jpg +- data/imagenet-r/n02480495/toy_4.jpg +- data/imagenet-r/n02268443/misc_177.jpg +- data/imagenet-r/n03649909/toy_27.jpg +- data/imagenet-r/n02939185/sketch_13.jpg +- data/imagenet-r/n02138441/art_15.jpg +- data/imagenet-r/n02098286/misc_10.jpg +- data/imagenet-r/n02395406/graffiti_5.jpg +- data/imagenet-r/n02939185/deviantart_8.jpg +- data/imagenet-r/n02980441/videogame_11.jpg +- data/imagenet-r/n01443537/sketch_15.jpg +- data/imagenet-r/n01910747/tattoo_1.jpg +- data/imagenet-r/n03452741/sculpture_2.jpg +- data/imagenet-r/n02950826/sketch_15.jpg +- data/imagenet-r/n04465501/graffiti_0.jpg +- data/imagenet-r/n07749582/graphic_1.jpg +- data/imagenet-r/n07697313/cartoon_40.jpg +- data/imagenet-r/n03372029/cartoon_12.jpg +- data/imagenet-r/n02481823/art_11.jpg +- data/imagenet-r/n03775071/embroidery_2.jpg +- data/imagenet-r/n02119022/misc_88.jpg +- data/imagenet-r/n02814860/art_2.jpg +- data/imagenet-r/n02113799/misc_2.jpg +- data/imagenet-r/n01882714/graphic_5.jpg +- data/imagenet-r/n02138441/sculpture_2.jpg +- data/imagenet-r/n02317335/cartoon_1.jpg +- data/imagenet-r/n03930630/videogame_5.jpg +- data/imagenet-r/n07695742/toy_4.jpg +- data/imagenet-r/n02363005/graphic_4.jpg +- data/imagenet-r/n01847000/sticker_4.jpg +- data/imagenet-r/n04266014/sketch_22.jpg +- data/imagenet-r/n07714571/sketch_1.jpg +- data/imagenet-r/n03345487/graphic_3.jpg +- data/imagenet-r/n04266014/misc_6.jpg +- data/imagenet-r/n07718472/sketch_12.jpg +- data/imagenet-r/n01910747/misc_11.jpg +- data/imagenet-r/n02134084/misc_136.jpg +- data/imagenet-r/n04389033/videogame_20.jpg +- data/imagenet-r/n02906734/toy_6.jpg +- data/imagenet-r/n07873807/sketch_23.jpg +- data/imagenet-r/n01882714/cartoon_42.jpg +- data/imagenet-r/n01843383/videogame_9.jpg +- data/imagenet-r/n02110958/art_21.jpg +- data/imagenet-r/n02510455/misc_116.jpg +- data/imagenet-r/n02363005/cartoon_8.jpg +- data/imagenet-r/n01531178/painting_3.jpg +- data/imagenet-r/n02123045/tattoo_0.jpg +- data/imagenet-r/n02110185/painting_20.jpg +- data/imagenet-r/n01644373/painting_18.jpg +- data/imagenet-r/n04409515/sketch_1.jpg +- data/imagenet-r/n02391049/sketch_14.jpg +- data/imagenet-r/n02510455/misc_70.jpg +- data/imagenet-r/n02939185/misc_11.jpg +- data/imagenet-r/n02526121/sculpture_0.jpg +- data/imagenet-r/n01843383/painting_18.jpg +- data/imagenet-r/n02410509/graffiti_9.jpg +- data/imagenet-r/n01843383/art_26.jpg +- data/imagenet-r/n07720875/painting_30.jpg +- data/imagenet-r/n01518878/origami_9.jpg +- data/imagenet-r/n07768694/painting_1.jpg +- data/imagenet-r/n09835506/deviantart_36.jpg +- data/imagenet-r/n02410509/graffiti_16.jpg +- data/imagenet-r/n04389033/videogame_30.jpg +- data/imagenet-r/n02117135/art_5.jpg +- data/imagenet-r/n09472597/graphic_1.jpg +- data/imagenet-r/n02085620/misc_7.jpg +- data/imagenet-r/n02480495/cartoon_12.jpg +- data/imagenet-r/n07614500/cartoon_13.jpg +- data/imagenet-r/n03930630/toy_1.jpg +- data/imagenet-r/n02797295/misc_2.jpg +- data/imagenet-r/n04552348/videogame_1.jpg +- data/imagenet-r/n04389033/sketch_1.jpg +- data/imagenet-r/n02092339/misc_16.jpg +- data/imagenet-r/n01498041/sketch_3.jpg +- data/imagenet-r/n03498962/videogame_6.jpg +- data/imagenet-r/n02108915/misc_65.jpg +- data/imagenet-r/n03947888/toy_9.jpg +- data/imagenet-r/n04141076/deviantart_10.jpg +- data/imagenet-r/n04146614/sticker_1.jpg +- data/imagenet-r/n02102318/cartoon_3.jpg +- data/imagenet-r/n02071294/sketch_10.jpg +- data/imagenet-r/n02117135/painting_2.jpg +- data/imagenet-r/n04133789/cartoon_10.jpg +- data/imagenet-r/n02510455/misc_48.jpg +- data/imagenet-r/n07734744/deviantart_23.jpg +- data/imagenet-r/n01616318/tattoo_4.jpg +- data/imagenet-r/n02009912/sketch_20.jpg +- data/imagenet-r/n02128757/toy_5.jpg +- data/imagenet-r/n02007558/toy_11.jpg +- data/imagenet-r/n07734744/sketch_3.jpg +- data/imagenet-r/n02395406/cartoon_34.jpg +- data/imagenet-r/n02077923/misc_21.jpg +- data/imagenet-r/n02108915/misc_63.jpg +- data/imagenet-r/n02219486/tattoo_10.jpg +- data/imagenet-r/n02138441/cartoon_0.jpg +- data/imagenet-r/n04310018/sketch_23.jpg +- data/imagenet-r/n04487394/sketch_0.jpg +- data/imagenet-r/n01531178/art_31.jpg +- data/imagenet-r/n02206856/tattoo_10.jpg +- data/imagenet-r/n04266014/cartoon_36.jpg +- data/imagenet-r/n04141076/origami_2.jpg +- data/imagenet-r/n02808440/sketch_1.jpg +- data/imagenet-r/n02364673/graphic_4.jpg +- data/imagenet-r/n02980441/cartoon_23.jpg +- data/imagenet-r/n07873807/deviantart_25.jpg +- data/imagenet-r/n04192698/graphic_1.jpg +- data/imagenet-r/n04146614/cartoon_6.jpg +- data/imagenet-r/n02119022/misc_159.jpg +- data/imagenet-r/n07753275/cartoon_5.jpg +- data/imagenet-r/n01910747/tattoo_10.jpg +- data/imagenet-r/n03124170/tattoo_10.jpg +- data/imagenet-r/n01847000/sketch_1.jpg +- data/imagenet-r/n01514859/painting_7.jpg +- data/imagenet-r/n01614925/sketch_11.jpg +- data/imagenet-r/n01494475/misc_140.jpg +- data/imagenet-r/n02088094/sketch_2.jpg +- data/imagenet-r/n02109525/sketch_11.jpg +- data/imagenet-r/n02797295/sketch_14.jpg +- data/imagenet-r/n03773504/toy_2.jpg +- data/imagenet-r/n07697537/misc_2.jpg +- data/imagenet-r/n02526121/sketch_15.jpg +- data/imagenet-r/n07753592/misc_19.jpg +- data/imagenet-r/n01518878/graphic_6.jpg +- data/imagenet-r/n01518878/cartoon_0.jpg +- data/imagenet-r/n02268443/misc_20.jpg +- data/imagenet-r/n04325704/misc_0.jpg +- data/imagenet-r/n01518878/deviantart_2.jpg +- data/imagenet-r/n02097298/misc_67.jpg +- data/imagenet-r/n02106550/misc_23.jpg +- data/imagenet-r/n02112137/sketch_6.jpg +- data/imagenet-r/n03424325/videogame_6.jpg +- data/imagenet-r/n01910747/tattoo_19.jpg +- data/imagenet-r/n01770393/cartoon_28.jpg +- data/imagenet-r/n04389033/graphic_2.jpg +- data/imagenet-r/n01484850/painting_8.jpg +- data/imagenet-r/n01855672/art_9.jpg +- data/imagenet-r/n02206856/sticker_21.jpg +- data/imagenet-r/n01748264/tattoo_11.jpg +- data/imagenet-r/n07753592/misc_80.jpg +- data/imagenet-r/n07697537/deviantart_3.jpg +- data/imagenet-r/n02395406/tattoo_9.jpg +- data/imagenet-r/n02356798/sketch_10.jpg +- data/imagenet-r/n02138441/painting_14.jpg +- data/imagenet-r/n02980441/painting_0.jpg +- data/imagenet-r/n01820546/cartoon_1.jpg +- data/imagenet-r/n02445715/painting_15.jpg +- data/imagenet-r/n01882714/graffiti_8.jpg +- data/imagenet-r/n03649909/sketch_7.jpg +- data/imagenet-r/n03930630/sketch_7.jpg +- data/imagenet-r/n01806143/painting_10.jpg +- data/imagenet-r/n07753275/sketch_12.jpg +- data/imagenet-r/n02206856/cartoon_10.jpg +- data/imagenet-r/n04389033/origami_7.jpg +- data/imagenet-r/n02106166/cartoon_5.jpg +- data/imagenet-r/n02236044/tattoo_23.jpg +- data/imagenet-r/n01882714/cartoon_18.jpg +- data/imagenet-r/n04522168/painting_15.jpg +- data/imagenet-r/n02088364/tattoo_3.jpg +- data/imagenet-r/n01820546/painting_15.jpg +- data/imagenet-r/n01986214/cartoon_19.jpg +- data/imagenet-r/n07734744/embroidery_20.jpg +- data/imagenet-r/n01748264/tattoo_8.jpg +- data/imagenet-r/n01770393/cartoon_30.jpg +- data/imagenet-r/n01774750/cartoon_8.jpg +- data/imagenet-r/n02480495/painting_38.jpg +- data/imagenet-r/n02346627/painting_7.jpg +- data/imagenet-r/n02909870/painting_18.jpg +- data/imagenet-r/n02980441/videogame_20.jpg +- data/imagenet-r/n07734744/painting_19.jpg +- data/imagenet-r/n02279972/tattoo_11.jpg +- data/imagenet-r/n03481172/cartoon_10.jpg +- data/imagenet-r/n01614925/cartoon_1.jpg +- data/imagenet-r/n02948072/cartoon_33.jpg +- data/imagenet-r/n01630670/sketch_5.jpg +- data/imagenet-r/n02966193/cartoon_17.jpg +- data/imagenet-r/n02088094/misc_33.jpg +- data/imagenet-r/n02219486/tattoo_2.jpg +- data/imagenet-r/n01986214/origami_5.jpg +- data/imagenet-r/n02236044/sketch_8.jpg +- data/imagenet-r/n01843383/graffiti_3.jpg +- data/imagenet-r/n01514859/deviantart_44.jpg +- data/imagenet-r/n03888257/cartoon_9.jpg +- data/imagenet-r/n02096585/sketch_10.jpg +- data/imagenet-r/n02906734/sketch_18.jpg +- data/imagenet-r/n04325704/art_1.jpg +- data/imagenet-r/n04409515/cartoon_24.jpg +- data/imagenet-r/n01644373/deviantart_7.jpg +- data/imagenet-r/n01614925/deviantart_10.jpg +- data/imagenet-r/n03424325/videogame_9.jpg +- data/imagenet-r/n03947888/misc_5.jpg +- data/imagenet-r/n02206856/misc_1.jpg +- data/imagenet-r/n02356798/sketch_7.jpg +- data/imagenet-r/n02391049/misc_18.jpg +- data/imagenet-r/n04141076/painting_25.jpg +- data/imagenet-r/n03630383/toy_5.jpg +- data/imagenet-r/n02980441/sketch_3.jpg +- data/imagenet-r/n02113023/misc_27.jpg +- data/imagenet-r/n01443537/graffiti_10.jpg +- data/imagenet-r/n02106662/misc_20.jpg +- data/imagenet-r/n04310018/sketch_21.jpg +- data/imagenet-r/n04146614/videogame_4.jpg +- data/imagenet-r/n02672831/cartoon_11.jpg +- data/imagenet-r/n02364673/sketch_0.jpg +- data/imagenet-r/n02123045/painting_34.jpg +- data/imagenet-r/n01833805/origami_12.jpg +- data/imagenet-r/n02129165/sketch_20.jpg +- data/imagenet-r/n02909870/painting_6.jpg +- data/imagenet-r/n02391049/deviantart_15.jpg +- data/imagenet-r/n02423022/cartoon_20.jpg +- data/imagenet-r/n01514859/painting_33.jpg +- data/imagenet-r/n01833805/cartoon_27.jpg +- data/imagenet-r/n01847000/tattoo_29.jpg +- data/imagenet-r/n02007558/sketch_23.jpg +- data/imagenet-r/n02814860/misc_4.jpg +- data/imagenet-r/n07745940/embroidery_2.jpg +- data/imagenet-r/n03272010/cartoon_13.jpg +- data/imagenet-r/n02948072/embroidery_19.jpg +- data/imagenet-r/n02165456/sketch_4.jpg +- data/imagenet-r/n02395406/sculpture_31.jpg +- data/imagenet-r/n02091134/misc_34.jpg +- data/imagenet-r/n02906734/cartoon_47.jpg +- data/imagenet-r/n02096585/misc_48.jpg +- data/imagenet-r/n04409515/sketch_15.jpg +- data/imagenet-r/n02112018/misc_62.jpg +- data/imagenet-r/n01820546/art_20.jpg +- data/imagenet-r/n02481823/deviantart_5.jpg +- data/imagenet-r/n02480495/sketch_7.jpg +- data/imagenet-r/n02092339/sketch_23.jpg +- data/imagenet-r/n07720875/sketch_10.jpg +- data/imagenet-r/n02091032/misc_24.jpg +- data/imagenet-r/n01616318/tattoo_29.jpg +- data/imagenet-r/n12267677/sketch_18.jpg +- data/imagenet-r/n02206856/graffiti_18.jpg +- data/imagenet-r/n07742313/misc_0.jpg +- data/imagenet-r/n12267677/misc_15.jpg +- data/imagenet-r/n02802426/videogame_2.jpg +- data/imagenet-r/n07734744/painting_11.jpg +- data/imagenet-r/n02106662/misc_67.jpg +- data/imagenet-r/n03676483/painting_1.jpg +- data/imagenet-r/n07742313/art_0.jpg +- data/imagenet-r/n01843383/deviantart_1.jpg +- data/imagenet-r/n01514859/cartoon_18.jpg +- data/imagenet-r/n02117135/sketch_23.jpg +- data/imagenet-r/n02672831/sketch_15.jpg +- data/imagenet-r/n04389033/toy_11.jpg +- data/imagenet-r/n02793495/painting_12.jpg +- data/imagenet-r/n02701002/sketch_18.jpg +- data/imagenet-r/n07697313/deviantart_4.jpg +- data/imagenet-r/n04465501/misc_8.jpg +- data/imagenet-r/n02808440/cartoon_7.jpg +- data/imagenet-r/n02106662/misc_19.jpg +- data/imagenet-r/n07734744/cartoon_17.jpg +- data/imagenet-r/n02948072/cartoon_48.jpg +- data/imagenet-r/n02206856/sticker_17.jpg +- data/imagenet-r/n02939185/misc_6.jpg +- data/imagenet-r/n01882714/sculpture_8.jpg +- data/imagenet-r/n02814860/art_13.jpg +- data/imagenet-r/n01616318/deviantart_1.jpg +- data/imagenet-r/n02802426/videogame_8.jpg +- data/imagenet-r/n02437616/graffiti_8.jpg +- data/imagenet-r/n07742313/sketch_6.jpg +- data/imagenet-r/n02088238/misc_53.jpg +- data/imagenet-r/n02110185/painting_12.jpg +- data/imagenet-r/n02950826/sketch_4.jpg +- data/imagenet-r/n01748264/tattoo_24.jpg +- data/imagenet-r/n02206856/art_10.jpg +- data/imagenet-r/n02110341/misc_87.jpg +- data/imagenet-r/n07734744/cartoon_4.jpg +- data/imagenet-r/n07745940/misc_24.jpg +- data/imagenet-r/n04147183/deviantart_2.jpg +- data/imagenet-r/n02098286/sketch_17.jpg +- data/imagenet-r/n02092339/misc_8.jpg +- data/imagenet-r/n03710193/sketch_18.jpg +- data/imagenet-r/n02110958/painting_34.jpg +- data/imagenet-r/n04487394/cartoon_31.jpg +- data/imagenet-r/n01498041/art_0.jpg +- data/imagenet-r/n07768694/tattoo_8.jpg +- data/imagenet-r/n02085620/misc_74.jpg +- data/imagenet-r/n02219486/tattoo_21.jpg +- data/imagenet-r/n01694178/deviantart_1.jpg +- data/imagenet-r/n07753275/embroidery_9.jpg +- data/imagenet-r/n01882714/sketch_4.jpg +- data/imagenet-r/n04536866/toy_1.jpg +- data/imagenet-r/n04266014/cartoon_15.jpg +- data/imagenet-r/n01833805/embroidery_27.jpg +- data/imagenet-r/n01498041/sketch_13.jpg +- data/imagenet-r/n01677366/misc_14.jpg +- data/imagenet-r/n07697537/deviantart_22.jpg +- data/imagenet-r/n02236044/misc_1.jpg +- data/imagenet-r/n04465501/deviantart_8.jpg +- data/imagenet-r/n02117135/sculpture_1.jpg +- data/imagenet-r/n02951358/cartoon_7.jpg +- data/imagenet-r/n02128757/painting_21.jpg +- data/imagenet-r/n01843383/deviantart_93.jpg +- data/imagenet-r/n01694178/cartoon_20.jpg +- data/imagenet-r/n02106166/painting_17.jpg +- data/imagenet-r/n03710193/sketch_12.jpg +- data/imagenet-r/n04487394/toy_1.jpg +- data/imagenet-r/n07720875/painting_3.jpg +- data/imagenet-r/n02391049/misc_119.jpg +- data/imagenet-r/n04347754/sketch_11.jpg +- data/imagenet-r/n02672831/sculpture_6.jpg +- data/imagenet-r/n01784675/tattoo_11.jpg +- data/imagenet-r/n04487394/cartoon_21.jpg +- data/imagenet-r/n02526121/cartoon_21.jpg +- data/imagenet-r/n02410509/painting_18.jpg +- data/imagenet-r/n02317335/tattoo_17.jpg +- data/imagenet-r/n01843383/art_17.jpg +- data/imagenet-r/n01983481/misc_33.jpg +- data/imagenet-r/n01774750/origami_7.jpg +- data/imagenet-r/n07614500/painting_8.jpg +- data/imagenet-r/n02802426/painting_5.jpg +- data/imagenet-r/n02088094/misc_3.jpg +- data/imagenet-r/n07720875/sketch_2.jpg +- data/imagenet-r/n01614925/painting_8.jpg +- data/imagenet-r/n02883205/sticker_4.jpg +- data/imagenet-r/n02138441/cartoon_1.jpg +- data/imagenet-r/n07745940/sticker_11.jpg +- data/imagenet-r/n02129604/sketch_1.jpg +- data/imagenet-r/n02909870/painting_12.jpg +- data/imagenet-r/n01910747/graphic_11.jpg +- data/imagenet-r/n02134084/misc_101.jpg +- data/imagenet-r/n03775071/sketch_19.jpg +- data/imagenet-r/n09472597/misc_3.jpg +- data/imagenet-r/n01770393/tattoo_20.jpg +- data/imagenet-r/n02110185/toy_5.jpg +- data/imagenet-r/n07745940/toy_13.jpg +- data/imagenet-r/n02123045/painting_22.jpg +- data/imagenet-r/n02939185/toy_1.jpg +- data/imagenet-r/n10565667/cartoon_2.jpg +- data/imagenet-r/n03372029/graffiti_2.jpg +- data/imagenet-r/n03124170/cartoon_32.jpg +- data/imagenet-r/n02481823/cartoon_15.jpg +- data/imagenet-r/n02206856/cartoon_50.jpg +- data/imagenet-r/n02088364/misc_73.jpg +- data/imagenet-r/n07753592/misc_103.jpg +- data/imagenet-r/n01770393/origami_21.jpg +- data/imagenet-r/n04389033/art_9.jpg +- data/imagenet-r/n01616318/deviantart_21.jpg +- data/imagenet-r/n02814860/painting_29.jpg +- data/imagenet-r/n02749479/toy_0.jpg +- data/imagenet-r/n02398521/cartoon_5.jpg +- data/imagenet-r/n01833805/cartoon_19.jpg +- data/imagenet-r/n07873807/toy_4.jpg +- data/imagenet-r/n02128385/toy_6.jpg +- data/imagenet-r/n02480855/misc_4.jpg +- data/imagenet-r/n02906734/art_0.jpg +- data/imagenet-r/n03930630/cartoon_10.jpg +- data/imagenet-r/n02481823/deviantart_8.jpg +- data/imagenet-r/n02769748/cartoon_27.jpg +- data/imagenet-r/n02398521/art_1.jpg +- data/imagenet-r/n02701002/art_3.jpg +- data/imagenet-r/n07734744/art_10.jpg +- data/imagenet-r/n02097298/sketch_10.jpg +- data/imagenet-r/n07697313/misc_0.jpg +- data/imagenet-r/n01843383/painting_19.jpg +- data/imagenet-r/n02948072/toy_4.jpg +- data/imagenet-r/n01882714/toy_17.jpg +- data/imagenet-r/n02206856/toy_22.jpg +- data/imagenet-r/n03452741/sketch_0.jpg +- data/imagenet-r/n03594945/misc_14.jpg +- data/imagenet-r/n02165456/tattoo_80.jpg +- data/imagenet-r/n02134084/sketch_19.jpg +- data/imagenet-r/n02481823/cartoon_18.jpg +- data/imagenet-r/n01843383/deviantart_88.jpg +- data/imagenet-r/n02106550/misc_27.jpg +- data/imagenet-r/n02106550/sketch_1.jpg +- data/imagenet-r/n02007558/graphic_10.jpg +- data/imagenet-r/n03467068/cartoon_17.jpg +- data/imagenet-r/n02391049/misc_93.jpg +- data/imagenet-r/n01910747/embroidery_16.jpg +- data/imagenet-r/n07745940/toy_14.jpg +- data/imagenet-r/n01860187/sketch_15.jpg +- data/imagenet-r/n07695742/cartoon_11.jpg +- data/imagenet-r/n03594945/toy_12.jpg +- data/imagenet-r/n01632777/toy_12.jpg +- data/imagenet-r/n03481172/art_2.jpg +- data/imagenet-r/n02481823/deviantart_21.jpg +- data/imagenet-r/n07734744/deviantart_18.jpg +- data/imagenet-r/n02814860/sketch_2.jpg +- data/imagenet-r/n02099601/sketch_21.jpg +- data/imagenet-r/n01531178/cartoon_27.jpg +- data/imagenet-r/n02346627/tattoo_2.jpg +- data/imagenet-r/n02481823/toy_6.jpg +- data/imagenet-r/n02106550/misc_14.jpg +- data/imagenet-r/n03345487/sketch_9.jpg +- data/imagenet-r/n02219486/origami_3.jpg +- data/imagenet-r/n01860187/origami_1.jpg +- data/imagenet-r/n02113624/misc_13.jpg +- data/imagenet-r/n02108089/misc_8.jpg +- data/imagenet-r/n02092339/misc_34.jpg +- data/imagenet-r/n02119022/misc_1.jpg +- data/imagenet-r/n04389033/painting_1.jpg +- data/imagenet-r/n02113799/sketch_19.jpg +- data/imagenet-r/n02091134/misc_40.jpg +- data/imagenet-r/n07749582/deviantart_24.jpg +- data/imagenet-r/n04141076/painting_47.jpg +- data/imagenet-r/n02841315/toy_3.jpg +- data/imagenet-r/n02114367/misc_19.jpg +- data/imagenet-r/n01847000/sketch_18.jpg +- data/imagenet-r/n02110958/painting_55.jpg +- data/imagenet-r/n02071294/graffiti_0.jpg +- data/imagenet-r/n02481823/deviantart_20.jpg +- data/imagenet-r/n02134084/misc_14.jpg +- data/imagenet-r/n04552348/deviantart_20.jpg +- data/imagenet-r/n01986214/tattoo_4.jpg +- data/imagenet-r/n02092339/misc_33.jpg +- data/imagenet-r/n03452741/origami_0.jpg +- data/imagenet-r/n07695742/painting_3.jpg +- data/imagenet-r/n01694178/sticker_4.jpg +- data/imagenet-r/n03272010/sketch_4.jpg +- data/imagenet-r/n02085620/misc_87.jpg +- data/imagenet-r/n02165456/embroidery_3.jpg +- data/imagenet-r/n04254680/videogame_29.jpg +- data/imagenet-r/n02395406/sculpture_25.jpg +- data/imagenet-r/n01484850/tattoo_24.jpg +- data/imagenet-r/n02096585/misc_53.jpg +- data/imagenet-r/n04552348/sketch_4.jpg +- data/imagenet-r/n03888257/videogame_2.jpg +- data/imagenet-r/n02769748/sketch_2.jpg +- data/imagenet-r/n02110341/misc_111.jpg +- data/imagenet-r/n01910747/sketch_4.jpg +- data/imagenet-r/n04389033/graffiti_8.jpg +- data/imagenet-r/n04266014/videogame_12.jpg +- data/imagenet-r/n09472597/sketch_13.jpg +- data/imagenet-r/n01518878/sculpture_6.jpg +- data/imagenet-r/n12267677/misc_113.jpg +- data/imagenet-r/n04522168/embroidery_8.jpg +- data/imagenet-r/n01534433/painting_7.jpg +- data/imagenet-r/n02106166/cartoon_9.jpg +- data/imagenet-r/n01770393/graffiti_6.jpg +- data/imagenet-r/n07745940/embroidery_18.jpg +- data/imagenet-r/n04254680/deviantart_15.jpg +- data/imagenet-r/n02236044/tattoo_22.jpg +- data/imagenet-r/n07714571/deviantart_4.jpg +- data/imagenet-r/n02398521/painting_4.jpg +- data/imagenet-r/n02980441/graphic_0.jpg +- data/imagenet-r/n01983481/misc_49.jpg +- data/imagenet-r/n02391049/misc_49.jpg +- data/imagenet-r/n02088364/sketch_21.jpg +- data/imagenet-r/n02950826/videogame_3.jpg +- data/imagenet-r/n02190166/sketch_2.jpg +- data/imagenet-r/n03710193/misc_9.jpg +- data/imagenet-r/n07734744/videogame_16.jpg +- data/imagenet-r/n02128757/misc_0.jpg +- data/imagenet-r/n02346627/sketch_14.jpg +- data/imagenet-r/n03495258/sketch_12.jpg +- data/imagenet-r/n01843383/deviantart_78.jpg +- data/imagenet-r/n01860187/sketch_7.jpg +- data/imagenet-r/n07734744/videogame_7.jpg +- data/imagenet-r/n02814860/sticker_7.jpg +- data/imagenet-r/n02268443/misc_161.jpg +- data/imagenet-r/n02088364/misc_45.jpg +- data/imagenet-r/n04465501/videogame_25.jpg +- data/imagenet-r/n04552348/sketch_8.jpg +- data/imagenet-r/n03947888/origami_0.jpg +- data/imagenet-r/n01644373/origami_2.jpg +- data/imagenet-r/n02802426/sketch_23.jpg +- data/imagenet-r/n02108915/sketch_12.jpg +- data/imagenet-r/n02110185/cartoon_15.jpg +- data/imagenet-r/n07697313/cartoon_19.jpg +- data/imagenet-r/n03345487/sketch_0.jpg +- data/imagenet-r/n02129604/deviantart_5.jpg +- data/imagenet-r/n02346627/sketch_0.jpg +- data/imagenet-r/n02092339/misc_18.jpg +- data/imagenet-r/n02325366/misc_54.jpg +- data/imagenet-r/n02086240/misc_6.jpg +- data/imagenet-r/n02134084/tattoo_3.jpg +- data/imagenet-r/n01944390/misc_51.jpg +- data/imagenet-r/n03775071/sticker_3.jpg +- data/imagenet-r/n02130308/painting_1.jpg +- data/imagenet-r/n02236044/origami_12.jpg +- data/imagenet-r/n02226429/sculpture_18.jpg +- data/imagenet-r/n07697313/art_9.jpg +- data/imagenet-r/n02123045/misc_1.jpg +- data/imagenet-r/n01614925/art_1.jpg +- data/imagenet-r/n02206856/cartoon_26.jpg +- data/imagenet-r/n02134084/misc_51.jpg +- data/imagenet-r/n02088238/misc_48.jpg +- data/imagenet-r/n03947888/sculpture_1.jpg +- data/imagenet-r/n01644373/tattoo_47.jpg +- data/imagenet-r/n04325704/cartoon_4.jpg +- data/imagenet-r/n02749479/sketch_11.jpg +- data/imagenet-r/n03481172/sketch_23.jpg +- data/imagenet-r/n02510455/misc_42.jpg +- data/imagenet-r/n02423022/cartoon_11.jpg +- data/imagenet-r/n02279972/painting_15.jpg +- data/imagenet-r/n02206856/cartoon_31.jpg +- data/imagenet-r/n10565667/painting_2.jpg +- data/imagenet-r/n02607072/sketch_17.jpg +- data/imagenet-r/n04389033/videogame_7.jpg +- data/imagenet-r/n02066245/sketch_0.jpg +- data/imagenet-r/n02363005/painting_2.jpg +- data/imagenet-r/n02398521/sculpture_14.jpg +- data/imagenet-r/n03345487/sketch_16.jpg +- data/imagenet-r/n02480495/painting_0.jpg +- data/imagenet-r/n02206856/sticker_0.jpg +- data/imagenet-r/n02098286/misc_48.jpg +- data/imagenet-r/n02129604/tattoo_0.jpg +- data/imagenet-r/n02966193/sketch_8.jpg +- data/imagenet-r/n02672831/sketch_22.jpg +- data/imagenet-r/n02099712/sketch_7.jpg +- data/imagenet-r/n02480495/art_17.jpg +- data/imagenet-r/n01860187/sketch_9.jpg +- data/imagenet-r/n01983481/sketch_17.jpg +- data/imagenet-r/n02236044/tattoo_4.jpg +- data/imagenet-r/n02607072/misc_89.jpg +- data/imagenet-r/n07753275/deviantart_4.jpg +- data/imagenet-r/n04465501/cartoon_0.jpg +- data/imagenet-r/n04141076/sculpture_14.jpg +- data/imagenet-r/n02672831/sculpture_2.jpg +- data/imagenet-r/n03452741/sketch_22.jpg +- data/imagenet-r/n04275548/embroidery_7.jpg +- data/imagenet-r/n02317335/painting_13.jpg +- data/imagenet-r/n02980441/cartoon_0.jpg +- data/imagenet-r/n01443537/origami_5.jpg +- data/imagenet-r/n02128385/toy_9.jpg +- data/imagenet-r/n01514859/sticker_1.jpg +- data/imagenet-r/n02117135/art_3.jpg +- data/imagenet-r/n01494475/misc_123.jpg +- data/imagenet-r/n02096585/misc_147.jpg +- data/imagenet-r/n02110341/sketch_11.jpg +- data/imagenet-r/n02138441/sculpture_4.jpg +- data/imagenet-r/n02091134/misc_8.jpg +- data/imagenet-r/n02110185/art_1.jpg +- data/imagenet-r/n07614500/graphic_1.jpg +- data/imagenet-r/n04086273/cartoon_14.jpg +- data/imagenet-r/n02085620/misc_25.jpg +- data/imagenet-r/n02939185/misc_8.jpg +- data/imagenet-r/n02099712/tattoo_0.jpg +- data/imagenet-r/n03602883/misc_29.jpg +- data/imagenet-r/n10565667/sketch_9.jpg +- data/imagenet-r/n07753592/sketch_11.jpg +- data/imagenet-r/n02112137/misc_4.jpg +- data/imagenet-r/n02481823/painting_24.jpg +- data/imagenet-r/n02096585/videogame_3.jpg +- data/imagenet-r/n01694178/painting_3.jpg +- data/imagenet-r/n04389033/videogame_40.jpg +- data/imagenet-r/n01910747/tattoo_22.jpg +- data/imagenet-r/n02317335/sketch_0.jpg +- data/imagenet-r/n04487394/sculpture_2.jpg +- data/imagenet-r/n02106662/misc_48.jpg +- data/imagenet-r/n02356798/cartoon_8.jpg +- data/imagenet-r/n03775071/sketch_0.jpg +- data/imagenet-r/n02481823/sculpture_6.jpg +- data/imagenet-r/n01632777/cartoon_16.jpg +- data/imagenet-r/n02110185/toy_3.jpg +- data/imagenet-r/n04266014/deviantart_16.jpg +- data/imagenet-r/n02480855/art_0.jpg +- data/imagenet-r/n02096585/sketch_17.jpg +- data/imagenet-r/n04310018/sketch_2.jpg +- data/imagenet-r/n09472597/cartoon_16.jpg +- data/imagenet-r/n04254680/deviantart_11.jpg +- data/imagenet-r/n02099601/sketch_19.jpg +- data/imagenet-r/n03481172/sketch_7.jpg +- data/imagenet-r/n02110341/misc_17.jpg +- data/imagenet-r/n04086273/videogame_20.jpg +- data/imagenet-r/n02219486/sculpture_18.jpg +- data/imagenet-r/n01860187/embroidery_2.jpg +- data/imagenet-r/n02398521/cartoon_3.jpg +- data/imagenet-r/n02007558/misc_14.jpg +- data/imagenet-r/n02129165/origami_1.jpg +- data/imagenet-r/n04146614/tattoo_1.jpg +- data/imagenet-r/n03649909/sketch_15.jpg +- data/imagenet-r/n07697537/deviantart_1.jpg +- data/imagenet-r/n02109525/misc_22.jpg +- data/imagenet-r/n02841315/sculpture_0.jpg +- data/imagenet-r/n02119022/misc_127.jpg +- data/imagenet-r/n07697313/cartoon_32.jpg +- data/imagenet-r/n02110341/misc_78.jpg +- data/imagenet-r/n02129604/tattoo_18.jpg +- data/imagenet-r/n02486410/sketch_20.jpg +- data/imagenet-r/n04536866/deviantart_12.jpg +- data/imagenet-r/n04409515/cartoon_10.jpg +- data/imagenet-r/n03594945/sketch_17.jpg +- data/imagenet-r/n07920052/deviantart_0.jpg +- data/imagenet-r/n07745940/art_15.jpg +- data/imagenet-r/n01531178/misc_3.jpg +- data/imagenet-r/n02134084/sketch_22.jpg +- data/imagenet-r/n02113799/misc_23.jpg +- data/imagenet-r/n04146614/art_2.jpg +- data/imagenet-r/n04266014/toy_15.jpg +- data/imagenet-r/n02346627/art_3.jpg +- data/imagenet-r/n07753592/sketch_12.jpg +- data/imagenet-r/n02410509/sketch_14.jpg +- data/imagenet-r/n02226429/painting_3.jpg +- data/imagenet-r/n07714571/graphic_1.jpg +- data/imagenet-r/n07693725/sketch_12.jpg +- data/imagenet-r/n03481172/graphic_4.jpg +- data/imagenet-r/n02071294/misc_6.jpg +- data/imagenet-r/n04310018/sketch_19.jpg +- data/imagenet-r/n07749582/painting_21.jpg +- data/imagenet-r/n04275548/graffiti_1.jpg +- data/imagenet-r/n07749582/cartoon_9.jpg +- data/imagenet-r/n03272010/sketch_9.jpg +- data/imagenet-r/n04465501/embroidery_4.jpg +- data/imagenet-r/n02109525/sketch_14.jpg +- data/imagenet-r/n07697313/painting_21.jpg +- data/imagenet-r/n09835506/misc_5.jpg +- data/imagenet-r/n02701002/toy_18.jpg +- data/imagenet-r/n02112018/misc_5.jpg +- data/imagenet-r/n01820546/art_3.jpg +- data/imagenet-r/n02088466/sketch_22.jpg +- data/imagenet-r/n01843383/sketch_9.jpg +- data/imagenet-r/n02106550/misc_0.jpg +- data/imagenet-r/n01784675/sketch_2.jpg +- data/imagenet-r/n04347754/painting_7.jpg +- data/imagenet-r/n04536866/deviantart_28.jpg +- data/imagenet-r/n01910747/tattoo_38.jpg +- data/imagenet-r/n02109525/misc_2.jpg +- data/imagenet-r/n07734744/videogame_29.jpg +- data/imagenet-r/n02391049/sketch_13.jpg +- data/imagenet-r/n07749582/embroidery_9.jpg +- data/imagenet-r/n03495258/painting_6.jpg +- data/imagenet-r/n02966193/cartoon_2.jpg +- data/imagenet-r/n02797295/misc_16.jpg +- data/imagenet-r/n02128757/sketch_15.jpg +- data/imagenet-r/n02814860/art_3.jpg +- data/imagenet-r/n12267677/sketch_8.jpg +- data/imagenet-r/n01944390/misc_28.jpg +- data/imagenet-r/n02091032/sketch_0.jpg +- data/imagenet-r/n02236044/sculpture_16.jpg +- data/imagenet-r/n04086273/tattoo_52.jpg +- data/imagenet-r/n02219486/misc_5.jpg +- data/imagenet-r/n02106166/painting_1.jpg +- data/imagenet-r/n02128757/tattoo_0.jpg +- data/imagenet-r/n04389033/graphic_9.jpg +- data/imagenet-r/n01630670/art_0.jpg +- data/imagenet-r/n03888257/art_11.jpg +- data/imagenet-r/n02769748/cartoon_39.jpg +- data/imagenet-r/n02112018/sketch_12.jpg +- data/imagenet-r/n02391049/misc_14.jpg +- data/imagenet-r/n01774750/cartoon_6.jpg +- data/imagenet-r/n04254680/cartoon_3.jpg +- data/imagenet-r/n02437616/sculpture_1.jpg +- data/imagenet-r/n01833805/tattoo_19.jpg +- data/imagenet-r/n01986214/sketch_17.jpg +- data/imagenet-r/n07753592/misc_125.jpg +- data/imagenet-r/n10565667/art_10.jpg +- data/imagenet-r/n04347754/sticker_0.jpg +- data/imagenet-r/n02325366/misc_30.jpg +- data/imagenet-r/n02793495/painting_6.jpg +- data/imagenet-r/n04133789/graffiti_0.jpg +- data/imagenet-r/n04465501/cartoon_3.jpg +- data/imagenet-r/n04389033/videogame_10.jpg +- data/imagenet-r/n02948072/cartoon_40.jpg +- data/imagenet-r/n02906734/painting_6.jpg +- data/imagenet-r/n01484850/cartoon_13.jpg +- data/imagenet-r/n07880968/sketch_6.jpg +- data/imagenet-r/n07720875/painting_32.jpg +- data/imagenet-r/n02437616/graffiti_7.jpg +- data/imagenet-r/n03372029/cartoon_19.jpg +- data/imagenet-r/n02481823/graffiti_16.jpg +- data/imagenet-r/n07920052/painting_4.jpg +- data/imagenet-r/n02110958/painting_40.jpg +- data/imagenet-r/n09472597/misc_5.jpg +- data/imagenet-r/n02526121/sketch_18.jpg +- data/imagenet-r/n01518878/cartoon_39.jpg +- data/imagenet-r/n07753592/misc_128.jpg +- data/imagenet-r/n07920052/cartoon_20.jpg +- data/imagenet-r/n01484850/sketch_18.jpg +- data/imagenet-r/n02814860/videogame_7.jpg +- data/imagenet-r/n02110341/misc_0.jpg +- data/imagenet-r/n03481172/sculpture_0.jpg +- data/imagenet-r/n07734744/sticker_17.jpg +- data/imagenet-r/n02486410/sculpture_12.jpg +- data/imagenet-r/n02129165/deviantart_2.jpg +- data/imagenet-r/n04086273/sculpture_3.jpg +- data/imagenet-r/n02110341/misc_6.jpg +- data/imagenet-r/n02480855/tattoo_23.jpg +- data/imagenet-r/n02007558/sketch_0.jpg +- data/imagenet-r/n02481823/art_5.jpg +- data/imagenet-r/n01443537/videogame_1.jpg +- data/imagenet-r/n01843383/cartoon_32.jpg +- data/imagenet-r/n02077923/sketch_20.jpg +- data/imagenet-r/n01443537/art_12.jpg +- data/imagenet-r/n02808440/sketch_5.jpg +- data/imagenet-r/n04487394/embroidery_0.jpg +- data/imagenet-r/n04409515/videogame_16.jpg +- data/imagenet-r/n01944390/tattoo_36.jpg +- data/imagenet-r/n04347754/videogame_34.jpg +- data/imagenet-r/n03272010/art_0.jpg +- data/imagenet-r/n02206856/cartoon_16.jpg +- data/imagenet-r/n02051845/tattoo_4.jpg +- data/imagenet-r/n03888257/graffiti_1.jpg +- data/imagenet-r/n07753275/deviantart_7.jpg +- data/imagenet-r/n02114367/misc_7.jpg +- data/imagenet-r/n01847000/sculpture_6.jpg +- data/imagenet-r/n02814860/painting_21.jpg +- data/imagenet-r/n01518878/misc_2.jpg +- data/imagenet-r/n02130308/toy_12.jpg +- data/imagenet-r/n07873807/sketch_0.jpg +- data/imagenet-r/n02843684/toy_3.jpg +- data/imagenet-r/n04409515/graffiti_0.jpg +- data/imagenet-r/n01910747/sketch_2.jpg +- data/imagenet-r/n01518878/graphic_7.jpg +- data/imagenet-r/n03775071/cartoon_4.jpg +- data/imagenet-r/n02797295/sketch_9.jpg +- data/imagenet-r/n02165456/cartoon_5.jpg +- data/imagenet-r/n02793495/painting_0.jpg +- data/imagenet-r/n02108915/misc_98.jpg +- data/imagenet-r/n03452741/cartoon_1.jpg +- data/imagenet-r/n01860187/tattoo_4.jpg +- data/imagenet-r/n04266014/toy_33.jpg +- data/imagenet-r/n03272010/painting_24.jpg +- data/imagenet-r/n07920052/cartoon_23.jpg +- data/imagenet-r/n02909870/sticker_6.jpg +- data/imagenet-r/n02391049/deviantart_11.jpg +- data/imagenet-r/n01944390/tattoo_21.jpg +- data/imagenet-r/n01882714/painting_30.jpg +- data/imagenet-r/n07742313/deviantart_3.jpg +- data/imagenet-r/n02190166/cartoon_1.jpg +- data/imagenet-r/n02447366/sketch_20.jpg +- data/imagenet-r/n03124170/cartoon_21.jpg +- data/imagenet-r/n01983481/misc_11.jpg +- data/imagenet-r/n01518878/videogame_0.jpg +- data/imagenet-r/n02206856/misc_19.jpg +- data/imagenet-r/n02110958/art_19.jpg +- data/imagenet-r/n02655020/misc_16.jpg +- data/imagenet-r/n07720875/deviantart_23.jpg +- data/imagenet-r/n04310018/art_14.jpg +- data/imagenet-r/n03498962/art_5.jpg +- data/imagenet-r/n07753275/misc_6.jpg +- data/imagenet-r/n01820546/deviantart_30.jpg +- data/imagenet-r/n02480855/sculpture_7.jpg +- data/imagenet-r/n02110185/cartoon_20.jpg +- data/imagenet-r/n03649909/toy_12.jpg +- data/imagenet-r/n02113799/misc_10.jpg +- data/imagenet-r/n01784675/graffiti_1.jpg +- data/imagenet-r/n02086240/sketch_5.jpg +- data/imagenet-r/n02948072/toy_3.jpg +- data/imagenet-r/n02655020/misc_98.jpg +- data/imagenet-r/n02948072/sketch_22.jpg +- data/imagenet-r/n02077923/misc_26.jpg +- data/imagenet-r/n02110958/toy_10.jpg +- data/imagenet-r/n02398521/cartoon_25.jpg +- data/imagenet-r/n01694178/deviantart_6.jpg +- data/imagenet-r/n02950826/art_2.jpg +- data/imagenet-r/n02110185/sketch_9.jpg +- data/imagenet-r/n02007558/cartoon_19.jpg +- data/imagenet-r/n04347754/sketch_0.jpg +- data/imagenet-r/n02099601/sketch_20.jpg +- data/imagenet-r/n01644373/tattoo_42.jpg +- data/imagenet-r/n02190166/tattoo_6.jpg +- data/imagenet-r/n03930630/cartoon_1.jpg +- data/imagenet-r/n02939185/cartoon_1.jpg +- data/imagenet-r/n02113624/misc_17.jpg +- data/imagenet-r/n02980441/deviantart_2.jpg +- data/imagenet-r/n02410509/cartoon_23.jpg +- data/imagenet-r/n02134084/misc_149.jpg +- data/imagenet-r/n02480855/painting_16.jpg +- data/imagenet-r/n03630383/deviantart_0.jpg +- data/imagenet-r/n04310018/deviantart_15.jpg +- data/imagenet-r/n02117135/art_14.jpg +- data/imagenet-r/n09472597/sticker_1.jpg +- data/imagenet-r/n02051845/painting_19.jpg +- data/imagenet-r/n02129604/painting_11.jpg +- data/imagenet-r/n01833805/art_12.jpg +- data/imagenet-r/n02391049/misc_68.jpg +- data/imagenet-r/n03424325/videogame_3.jpg +- data/imagenet-r/n02226429/tattoo_4.jpg +- data/imagenet-r/n02113624/misc_29.jpg +- data/imagenet-r/n02130308/cartoon_18.jpg +- data/imagenet-r/n02445715/painting_11.jpg +- data/imagenet-r/n02007558/cartoon_8.jpg +- data/imagenet-r/n02091134/misc_42.jpg +- data/imagenet-r/n04465501/misc_4.jpg +- data/imagenet-r/n12267677/misc_66.jpg +- data/imagenet-r/n02051845/painting_10.jpg +- data/imagenet-r/n02808440/art_3.jpg +- data/imagenet-r/n01944390/deviantart_11.jpg +- data/imagenet-r/n02797295/misc_40.jpg +- data/imagenet-r/n02129165/toy_26.jpg +- data/imagenet-r/n01986214/sculpture_6.jpg +- data/imagenet-r/n07697313/toy_7.jpg +- data/imagenet-r/n03947888/tattoo_15.jpg +- data/imagenet-r/n04487394/misc_1.jpg +- data/imagenet-r/n02098286/misc_19.jpg +- data/imagenet-r/n02129165/toy_4.jpg +- data/imagenet-r/n01784675/cartoon_3.jpg +- data/imagenet-r/n07614500/cartoon_0.jpg +- data/imagenet-r/n03345487/sketch_12.jpg +- data/imagenet-r/n02793495/painting_2.jpg +- data/imagenet-r/n02510455/misc_20.jpg +- data/imagenet-r/n04522168/sketch_15.jpg +- data/imagenet-r/n02091032/misc_15.jpg +- data/imagenet-r/n09835506/cartoon_0.jpg +- data/imagenet-r/n02051845/sculpture_2.jpg +- data/imagenet-r/n01910747/tattoo_15.jpg +- data/imagenet-r/n02802426/cartoon_16.jpg +- data/imagenet-r/n01986214/misc_0.jpg +- data/imagenet-r/n02102318/misc_43.jpg +- data/imagenet-r/n10565667/deviantart_1.jpg +- data/imagenet-r/n04552348/videogame_24.jpg +- data/imagenet-r/n02123045/art_7.jpg +- data/imagenet-r/n02948072/cartoon_76.jpg +- data/imagenet-r/n02906734/origami_0.jpg +- data/imagenet-r/n01514859/deviantart_5.jpg +- data/imagenet-r/n01944390/misc_45.jpg +- data/imagenet-r/n02769748/sketch_17.jpg +- data/imagenet-r/n01632777/art_12.jpg +- data/imagenet-r/n02814860/cartoon_29.jpg +- data/imagenet-r/n01694178/cartoon_11.jpg +- data/imagenet-r/n02814860/painting_41.jpg +- data/imagenet-r/n01774750/sketch_15.jpg +- data/imagenet-r/n02481823/graffiti_0.jpg +- data/imagenet-r/n02165456/tattoo_41.jpg +- data/imagenet-r/n02363005/sketch_4.jpg +- data/imagenet-r/n01843383/art_1.jpg +- data/imagenet-r/n01498041/painting_8.jpg +- data/imagenet-r/n02134084/misc_46.jpg +- data/imagenet-r/n02363005/toy_5.jpg +- data/imagenet-r/n04192698/art_5.jpg +- data/imagenet-r/n01847000/sketch_14.jpg +- data/imagenet-r/n01443537/art_5.jpg +- data/imagenet-r/n04536866/painting_4.jpg +- data/imagenet-r/n04325704/deviantart_12.jpg +- data/imagenet-r/n01944390/tattoo_28.jpg +- data/imagenet-r/n02088364/misc_20.jpg +- data/imagenet-r/n01614925/deviantart_30.jpg +- data/imagenet-r/n04409515/sketch_0.jpg +- data/imagenet-r/n01498041/painting_1.jpg +- data/imagenet-r/n02346627/painting_5.jpg +- data/imagenet-r/n02948072/sketch_27.jpg +- data/imagenet-r/n02112137/misc_16.jpg +- data/imagenet-r/n03947888/painting_7.jpg +- data/imagenet-r/n01484850/tattoo_2.jpg +- data/imagenet-r/n01514859/sculpture_2.jpg +- data/imagenet-r/n07920052/misc_0.jpg +- data/imagenet-r/n07714571/graphic_0.jpg +- data/imagenet-r/n01494475/misc_82.jpg +- data/imagenet-r/n03630383/sketch_10.jpg +- data/imagenet-r/n07734744/embroidery_5.jpg +- data/imagenet-r/n04266014/cartoon_32.jpg +- data/imagenet-r/n02510455/misc_65.jpg +- data/imagenet-r/n07697537/misc_54.jpg +- data/imagenet-r/n02110958/art_9.jpg +- data/imagenet-r/n02099601/misc_74.jpg +- data/imagenet-r/n02113624/misc_22.jpg +- data/imagenet-r/n01882714/sculpture_12.jpg +- data/imagenet-r/n07697537/misc_27.jpg +- data/imagenet-r/n02480495/sketch_16.jpg +- data/imagenet-r/n02481823/painting_7.jpg +- data/imagenet-r/n02483362/sticker_0.jpg +- data/imagenet-r/n01614925/tattoo_52.jpg +- data/imagenet-r/n02410509/sketch_20.jpg +- data/imagenet-r/n02948072/sketch_6.jpg +- data/imagenet-r/n02814860/painting_12.jpg +- data/imagenet-r/n02113023/misc_33.jpg +- data/imagenet-r/n02106166/misc_11.jpg +- data/imagenet-r/n02129604/graphic_2.jpg +- data/imagenet-r/n01860187/sketch_0.jpg +- data/imagenet-r/n02094433/misc_3.jpg +- data/imagenet-r/n01882714/deviantart_19.jpg +- data/imagenet-r/n01833805/origami_10.jpg +- data/imagenet-r/n02445715/graffiti_4.jpg +- data/imagenet-r/n02823750/sketch_13.jpg +- data/imagenet-r/n02066245/art_5.jpg +- data/imagenet-r/n01855672/tattoo_1.jpg +- data/imagenet-r/n04389033/sculpture_10.jpg +- data/imagenet-r/n02130308/sketch_2.jpg +- data/imagenet-r/n04275548/graffiti_4.jpg +- data/imagenet-r/n02325366/misc_6.jpg +- data/imagenet-r/n07714571/painting_24.jpg +- data/imagenet-r/n02841315/cartoon_36.jpg +- data/imagenet-r/n01677366/deviantart_1.jpg +- data/imagenet-r/n04133789/cartoon_17.jpg +- data/imagenet-r/n04552348/toy_3.jpg +- data/imagenet-r/n02123045/painting_31.jpg +- data/imagenet-r/n01614925/painting_17.jpg +- data/imagenet-r/n02134084/misc_130.jpg +- data/imagenet-r/n07697537/videogame_30.jpg +- data/imagenet-r/n02814860/deviantart_5.jpg +- data/imagenet-r/n01644373/sketch_16.jpg +- data/imagenet-r/n01770393/origami_17.jpg +- data/imagenet-r/n02099712/misc_6.jpg +- data/imagenet-r/n04591713/painting_44.jpg +- data/imagenet-r/n01910747/tattoo_74.jpg +- data/imagenet-r/n02051845/painting_21.jpg +- data/imagenet-r/n12267677/misc_111.jpg +- data/imagenet-r/n03481172/toy_20.jpg +- data/imagenet-r/n07697313/art_7.jpg +- data/imagenet-r/n07742313/sketch_17.jpg +- data/imagenet-r/n02130308/toy_10.jpg +- data/imagenet-r/n02134084/misc_67.jpg +- data/imagenet-r/n01644373/painting_20.jpg +- data/imagenet-r/n07614500/misc_7.jpg +- data/imagenet-r/n02814860/embroidery_13.jpg +- data/imagenet-r/n01774750/embroidery_0.jpg +- data/imagenet-r/n02363005/videogame_3.jpg +- data/imagenet-r/n02007558/graphic_19.jpg +- data/imagenet-r/n01843383/painting_11.jpg +- data/imagenet-r/n02437616/graffiti_9.jpg +- data/imagenet-r/n02129604/tattoo_24.jpg +- data/imagenet-r/n03594945/sculpture_0.jpg +- data/imagenet-r/n03775071/sketch_10.jpg +- data/imagenet-r/n01770393/art_0.jpg +- data/imagenet-r/n04536866/misc_2.jpg +- data/imagenet-r/n02749479/misc_24.jpg +- data/imagenet-r/n03602883/misc_42.jpg +- data/imagenet-r/n02486410/graffiti_2.jpg +- data/imagenet-r/n09835506/videogame_23.jpg +- data/imagenet-r/n02085620/sketch_15.jpg +- data/imagenet-r/n07693725/sketch_16.jpg +- data/imagenet-r/n02219486/tattoo_3.jpg +- data/imagenet-r/n04325704/deviantart_9.jpg +- data/imagenet-r/n07880968/painting_1.jpg +- data/imagenet-r/n02906734/cartoon_15.jpg +- data/imagenet-r/n02110341/misc_91.jpg +- data/imagenet-r/n02655020/deviantart_6.jpg +- data/imagenet-r/n04347754/tattoo_7.jpg +- data/imagenet-r/n02906734/sketch_22.jpg +- data/imagenet-r/n02071294/art_15.jpg +- data/imagenet-r/n02951358/videogame_1.jpg +- data/imagenet-r/n03495258/videogame_4.jpg +- data/imagenet-r/n02088364/misc_57.jpg +- data/imagenet-r/n02119022/sketch_2.jpg +- data/imagenet-r/n02236044/graffiti_11.jpg +- data/imagenet-r/n02883205/cartoon_17.jpg +- data/imagenet-r/n02134084/deviantart_17.jpg +- data/imagenet-r/n07873807/toy_12.jpg +- data/imagenet-r/n02094433/misc_20.jpg +- data/imagenet-r/n02165456/cartoon_21.jpg +- data/imagenet-r/n02802426/deviantart_11.jpg +- data/imagenet-r/n07718472/sketch_14.jpg +- data/imagenet-r/n01616318/graffiti_1.jpg +- data/imagenet-r/n02134084/misc_104.jpg +- data/imagenet-r/n03888257/art_9.jpg +- data/imagenet-r/n02510455/misc_29.jpg +- data/imagenet-r/n01614925/painting_37.jpg +- data/imagenet-r/n01843383/deviantart_39.jpg +- data/imagenet-r/n02480495/cartoon_11.jpg +- data/imagenet-r/n01847000/tattoo_9.jpg +- data/imagenet-r/n01833805/origami_6.jpg +- data/imagenet-r/n03481172/videogame_7.jpg +- data/imagenet-r/n02948072/cartoon_31.jpg +- data/imagenet-r/n01820546/deviantart_10.jpg +- data/imagenet-r/n04522168/sketch_14.jpg +- data/imagenet-r/n02483362/painting_2.jpg +- data/imagenet-r/n02094433/misc_16.jpg +- data/imagenet-r/n02206856/toy_20.jpg +- data/imagenet-r/n01514859/embroidery_5.jpg +- data/imagenet-r/n07718472/painting_1.jpg +- data/imagenet-r/n02106550/misc_28.jpg +- data/imagenet-r/n01806143/sketch_16.jpg +- data/imagenet-r/n02106662/misc_51.jpg +- data/imagenet-r/n04465501/cartoon_10.jpg +- data/imagenet-r/n02190166/graffiti_4.jpg +- data/imagenet-r/n02109525/misc_9.jpg +- data/imagenet-r/n02486410/toy_3.jpg +- data/imagenet-r/n02165456/tattoo_14.jpg +- data/imagenet-r/n03594945/origami_0.jpg +- data/imagenet-r/n02939185/sketch_10.jpg +- data/imagenet-r/n02110341/misc_69.jpg +- data/imagenet-r/n02129165/tattoo_35.jpg +- data/imagenet-r/n03888257/sketch_23.jpg +- data/imagenet-r/n03649909/toy_10.jpg +- data/imagenet-r/n04118538/cartoon_10.jpg +- data/imagenet-r/n07734744/deviantart_1.jpg +- data/imagenet-r/n07753592/misc_107.jpg +- data/imagenet-r/n02113624/sketch_15.jpg +- data/imagenet-r/n07753275/graphic_11.jpg +- data/imagenet-r/n09472597/sketch_9.jpg +- data/imagenet-r/n02106662/sketch_5.jpg +- data/imagenet-r/n02317335/cartoon_15.jpg +- data/imagenet-r/n02206856/embroidery_5.jpg +- data/imagenet-r/n02823750/sketch_1.jpg +- data/imagenet-r/n02749479/misc_0.jpg +- data/imagenet-r/n02112137/misc_24.jpg +- data/imagenet-r/n02437616/origami_4.jpg +- data/imagenet-r/n02437616/deviantart_2.jpg +- data/imagenet-r/n02165456/embroidery_4.jpg +- data/imagenet-r/n02088094/sketch_17.jpg +- data/imagenet-r/n02749479/graphic_0.jpg +- data/imagenet-r/n04086273/graffiti_0.jpg +- data/imagenet-r/n03272010/tattoo_7.jpg +- data/imagenet-r/n04118538/sketch_10.jpg +- data/imagenet-r/n02279972/tattoo_4.jpg +- data/imagenet-r/n02951358/deviantart_4.jpg +- data/imagenet-r/n01944390/tattoo_38.jpg +- data/imagenet-r/n03124170/painting_24.jpg +- data/imagenet-r/n03930630/sculpture_1.jpg +- data/imagenet-r/n02793495/painting_4.jpg +- data/imagenet-r/n02948072/sketch_1.jpg +- data/imagenet-r/n04146614/videogame_15.jpg +- data/imagenet-r/n02445715/misc_0.jpg +- data/imagenet-r/n02883205/cartoon_29.jpg +- data/imagenet-r/n02094433/sketch_11.jpg +- data/imagenet-r/n02481823/misc_1.jpg +- data/imagenet-r/n02391049/misc_70.jpg +- data/imagenet-r/n01847000/tattoo_24.jpg +- data/imagenet-r/n04389033/deviantart_1.jpg +- data/imagenet-r/n02607072/misc_72.jpg +- data/imagenet-r/n02056570/sketch_0.jpg +- data/imagenet-r/n02219486/graphic_1.jpg +- data/imagenet-r/n04275548/tattoo_4.jpg +- data/imagenet-r/n02130308/toy_7.jpg +- data/imagenet-r/n02051845/cartoon_9.jpg +- data/imagenet-r/n01843383/deviantart_87.jpg +- data/imagenet-r/n07697313/painting_0.jpg +- data/imagenet-r/n02236044/misc_4.jpg +- data/imagenet-r/n02510455/misc_15.jpg +- data/imagenet-r/n01443537/toy_13.jpg +- data/imagenet-r/n07753592/misc_90.jpg +- data/imagenet-r/n02980441/sketch_19.jpg +- data/imagenet-r/n01616318/cartoon_8.jpg +- data/imagenet-r/n07714990/cartoon_34.jpg +- data/imagenet-r/n02130308/toy_5.jpg +- data/imagenet-r/n02094433/misc_1.jpg +- data/imagenet-r/n04591713/painting_32.jpg +- data/imagenet-r/n02071294/painting_18.jpg +- data/imagenet-r/n02113023/sketch_20.jpg +- data/imagenet-r/n02165456/embroidery_8.jpg +- data/imagenet-r/n02841315/art_7.jpg +- data/imagenet-r/n02092339/misc_46.jpg +- data/imagenet-r/n01518878/misc_1.jpg +- data/imagenet-r/n07614500/embroidery_7.jpg +- data/imagenet-r/n03452741/sketch_9.jpg +- data/imagenet-r/n07753592/misc_157.jpg +- data/imagenet-r/n03498962/toy_4.jpg +- data/imagenet-r/n03481172/videogame_16.jpg +- data/imagenet-r/n04487394/sketch_18.jpg +- data/imagenet-r/n02980441/sketch_10.jpg +- data/imagenet-r/n02096585/misc_101.jpg +- data/imagenet-r/n01614925/cartoon_23.jpg +- data/imagenet-r/n03947888/tattoo_3.jpg +- data/imagenet-r/n04141076/cartoon_29.jpg +- data/imagenet-r/n07768694/cartoon_2.jpg +- data/imagenet-r/n02134084/misc_34.jpg +- data/imagenet-r/n02510455/deviantart_1.jpg +- data/imagenet-r/n03594945/sketch_14.jpg +- data/imagenet-r/n07753275/sketch_9.jpg +- data/imagenet-r/n02346627/graffiti_1.jpg +- data/imagenet-r/n02510455/sketch_0.jpg +- data/imagenet-r/n07753275/graphic_1.jpg +- data/imagenet-r/n04310018/sketch_6.jpg +- data/imagenet-r/n01843383/painting_46.jpg +- data/imagenet-r/n02113624/sketch_19.jpg +- data/imagenet-r/n02085620/misc_55.jpg +- data/imagenet-r/n04254680/tattoo_3.jpg +- data/imagenet-r/n02108915/misc_48.jpg +- data/imagenet-r/n02948072/graphic_9.jpg +- data/imagenet-r/n02109525/misc_4.jpg +- data/imagenet-r/n01986214/tattoo_5.jpg +- data/imagenet-r/n01443537/painting_1.jpg +- data/imagenet-r/n02097298/misc_9.jpg +- data/imagenet-r/n02391049/misc_127.jpg +- data/imagenet-r/n02092339/misc_37.jpg +- data/imagenet-r/n02091134/misc_77.jpg +- data/imagenet-r/n02088364/misc_65.jpg +- data/imagenet-r/n01531178/sticker_0.jpg +- data/imagenet-r/n01748264/deviantart_8.jpg +- data/imagenet-r/n02480495/toy_0.jpg +- data/imagenet-r/n07873807/deviantart_15.jpg +- data/imagenet-r/n02797295/misc_27.jpg +- data/imagenet-r/n02233338/misc_31.jpg +- data/imagenet-r/n02117135/cartoon_6.jpg +- data/imagenet-r/n02219486/graffiti_15.jpg +- data/imagenet-r/n04141076/sculpture_9.jpg +- data/imagenet-r/n02268443/misc_45.jpg +- data/imagenet-r/n04146614/misc_0.jpg +- data/imagenet-r/n02883205/cartoon_26.jpg +- data/imagenet-r/n03594945/toy_4.jpg +- data/imagenet-r/n02096585/misc_118.jpg +- data/imagenet-r/n02106030/sketch_22.jpg +- data/imagenet-r/n02129165/tattoo_64.jpg +- data/imagenet-r/n12267677/sketch_3.jpg +- data/imagenet-r/n02110958/painting_62.jpg +- data/imagenet-r/n09472597/art_13.jpg +- data/imagenet-r/n01770393/tattoo_18.jpg +- data/imagenet-r/n02410509/sketch_18.jpg +- data/imagenet-r/n04536866/sketch_14.jpg +- data/imagenet-r/n03594945/misc_13.jpg +- data/imagenet-r/n04146614/videogame_11.jpg +- data/imagenet-r/n02655020/sketch_0.jpg +- data/imagenet-r/n02423022/graphic_1.jpg +- data/imagenet-r/n02655020/misc_103.jpg +- data/imagenet-r/n02279972/sketch_13.jpg +- data/imagenet-r/n02526121/sketch_13.jpg +- data/imagenet-r/n02480855/painting_5.jpg +- data/imagenet-r/n02088364/misc_31.jpg +- data/imagenet-r/n03424325/misc_42.jpg +- data/imagenet-r/n02948072/painting_1.jpg +- data/imagenet-r/n02236044/cartoon_22.jpg +- data/imagenet-r/n07753592/misc_160.jpg +- data/imagenet-r/n02391049/tattoo_3.jpg +- data/imagenet-r/n02701002/sketch_10.jpg +- data/imagenet-r/n04389033/toy_3.jpg +- data/imagenet-r/n02129165/graffiti_18.jpg +- data/imagenet-r/n04310018/misc_13.jpg +- data/imagenet-r/n02841315/graffiti_4.jpg +- data/imagenet-r/n02113624/sketch_12.jpg +- data/imagenet-r/n04310018/sketch_5.jpg +- data/imagenet-r/n02268443/misc_65.jpg +- data/imagenet-r/n03272010/art_2.jpg +- data/imagenet-r/n03930630/deviantart_1.jpg +- data/imagenet-r/n01855672/videogame_2.jpg +- data/imagenet-r/n04389033/sculpture_8.jpg +- data/imagenet-r/n02219486/sculpture_17.jpg +- data/imagenet-r/n02526121/cartoon_3.jpg +- data/imagenet-r/n01847000/toy_3.jpg +- data/imagenet-r/n02138441/cartoon_3.jpg +- data/imagenet-r/n02119022/misc_8.jpg +- data/imagenet-r/n02356798/sketch_16.jpg +- data/imagenet-r/n01983481/misc_32.jpg +- data/imagenet-r/n02883205/sketch_15.jpg +- data/imagenet-r/n01614925/tattoo_9.jpg +- data/imagenet-r/n12267677/deviantart_10.jpg +- data/imagenet-r/n02123045/sculpture_3.jpg +- data/imagenet-r/n02123045/painting_50.jpg +- data/imagenet-r/n04086273/cartoon_10.jpg +- data/imagenet-r/n01443537/sketch_18.jpg +- data/imagenet-r/n02883205/sketch_12.jpg +- data/imagenet-r/n03452741/deviantart_3.jpg +- data/imagenet-r/n03498962/sketch_8.jpg +- data/imagenet-r/n03630383/sketch_15.jpg +- data/imagenet-r/n02481823/painting_18.jpg +- data/imagenet-r/n01443537/videogame_13.jpg +- data/imagenet-r/n02096585/tattoo_20.jpg +- data/imagenet-r/n02110958/embroidery_8.jpg +- data/imagenet-r/n02106166/sketch_2.jpg +- data/imagenet-r/n02395406/toy_11.jpg +- data/imagenet-r/n04141076/origami_1.jpg +- data/imagenet-r/n02480855/tattoo_24.jpg +- data/imagenet-r/n02130308/painting_28.jpg +- data/imagenet-r/n02088238/misc_118.jpg +- data/imagenet-r/n01882714/tattoo_25.jpg +- data/imagenet-r/n02092339/misc_28.jpg +- data/imagenet-r/n04465501/videogame_11.jpg +- data/imagenet-r/n01784675/art_3.jpg +- data/imagenet-r/n07734744/toy_9.jpg +- data/imagenet-r/n02909870/painting_11.jpg +- data/imagenet-r/n02980441/misc_2.jpg +- data/imagenet-r/n03498962/cartoon_3.jpg +- data/imagenet-r/n04389033/videogame_19.jpg +- data/imagenet-r/n04591713/sticker_3.jpg +- data/imagenet-r/n02007558/graphic_23.jpg +- data/imagenet-r/n01833805/embroidery_25.jpg +- data/imagenet-r/n01518878/painting_17.jpg +- data/imagenet-r/n04086273/graffiti_7.jpg +- data/imagenet-r/n07734744/videogame_15.jpg +- data/imagenet-r/n04325704/misc_1.jpg +- data/imagenet-r/n07742313/sketch_18.jpg +- data/imagenet-r/n02797295/sketch_19.jpg +- data/imagenet-r/n04118538/cartoon_29.jpg +- data/imagenet-r/n02108089/misc_17.jpg +- data/imagenet-r/n07753592/sketch_1.jpg +- data/imagenet-r/n01774750/sketch_10.jpg +- data/imagenet-r/n02088238/misc_112.jpg +- data/imagenet-r/n07742313/cartoon_0.jpg +- data/imagenet-r/n02445715/sketch_15.jpg +- data/imagenet-r/n02481823/deviantart_28.jpg +- data/imagenet-r/n04141076/sketch_6.jpg +- data/imagenet-r/n04536866/sketch_21.jpg +- data/imagenet-r/n02395406/cartoon_29.jpg +- data/imagenet-r/n01514859/cartoon_17.jpg +- data/imagenet-r/n01860187/graffiti_1.jpg +- data/imagenet-r/n02966193/misc_3.jpg +- data/imagenet-r/n04325704/cartoon_18.jpg +- data/imagenet-r/n02007558/graffiti_11.jpg +- data/imagenet-r/n02481823/sculpture_15.jpg +- data/imagenet-r/n02226429/origami_20.jpg +- data/imagenet-r/n03372029/art_4.jpg +- data/imagenet-r/n02110185/painting_17.jpg +- data/imagenet-r/n07753275/sketch_7.jpg +- data/imagenet-r/n04118538/sketch_6.jpg +- data/imagenet-r/n02364673/art_15.jpg +- data/imagenet-r/n04266014/videogame_18.jpg +- data/imagenet-r/n02134084/misc_31.jpg +- data/imagenet-r/n07697313/toy_10.jpg +- data/imagenet-r/n01531178/painting_20.jpg +- data/imagenet-r/n01494475/misc_52.jpg +- data/imagenet-r/n02092339/misc_24.jpg +- data/imagenet-r/n07873807/toy_5.jpg +- data/imagenet-r/n02071294/sculpture_2.jpg +- data/imagenet-r/n04389033/cartoon_3.jpg +- data/imagenet-r/n01614925/tattoo_25.jpg +- data/imagenet-r/n02108915/misc_78.jpg +- data/imagenet-r/n02802426/graphic_3.jpg +- data/imagenet-r/n02236044/graffiti_0.jpg +- data/imagenet-r/n02134084/misc_97.jpg +- data/imagenet-r/n03124170/cartoon_18.jpg +- data/imagenet-r/n01514859/toy_5.jpg +- data/imagenet-r/n04192698/videogame_4.jpg +- data/imagenet-r/n02129165/toy_22.jpg +- data/imagenet-r/n02395406/sculpture_12.jpg +- data/imagenet-r/n03452741/sculpture_0.jpg +- data/imagenet-r/n03452741/deviantart_6.jpg +- data/imagenet-r/n07753592/misc_56.jpg +- data/imagenet-r/n01833805/graffiti_12.jpg +- data/imagenet-r/n01677366/sketch_15.jpg +- data/imagenet-r/n01443537/painting_29.jpg +- data/imagenet-r/n01694178/tattoo_20.jpg +- data/imagenet-r/n01694178/painting_4.jpg +- data/imagenet-r/n02130308/cartoon_8.jpg +- data/imagenet-r/n02510455/misc_60.jpg +- data/imagenet-r/n04266014/videogame_7.jpg +- data/imagenet-r/n02447366/cartoon_16.jpg +- data/imagenet-r/n04141076/graffiti_2.jpg +- data/imagenet-r/n02391049/misc_13.jpg +- data/imagenet-r/n02951358/videogame_0.jpg +- data/imagenet-r/n04192698/art_6.jpg +- data/imagenet-r/n02236044/sculpture_21.jpg +- data/imagenet-r/n02106030/painting_22.jpg +- data/imagenet-r/n04192698/deviantart_7.jpg +- data/imagenet-r/n02206856/misc_5.jpg +- data/imagenet-r/n01494475/videogame_0.jpg +- data/imagenet-r/n01614925/painting_21.jpg +- data/imagenet-r/n02128757/sketch_8.jpg +- data/imagenet-r/n01614925/cartoon_13.jpg +- data/imagenet-r/n07718472/cartoon_11.jpg +- data/imagenet-r/n01531178/embroidery_4.jpg +- data/imagenet-r/n07697537/misc_100.jpg +- data/imagenet-r/n01614925/deviantart_35.jpg +- data/imagenet-r/n10565667/deviantart_27.jpg +- data/imagenet-r/n01694178/tattoo_3.jpg +- data/imagenet-r/n07745940/art_17.jpg +- data/imagenet-r/n01494475/misc_143.jpg +- data/imagenet-r/n02138441/painting_35.jpg +- data/imagenet-r/n03930630/sketch_13.jpg +- data/imagenet-r/n02939185/sticker_1.jpg +- data/imagenet-r/n02701002/sketch_0.jpg +- data/imagenet-r/n02119022/misc_80.jpg +- data/imagenet-r/n07734744/cartoon_40.jpg +- data/imagenet-r/n01644373/deviantart_17.jpg +- data/imagenet-r/n02007558/toy_13.jpg +- data/imagenet-r/n02007558/embroidery_20.jpg +- data/imagenet-r/n04389033/videogame_27.jpg +- data/imagenet-r/n02129604/toy_1.jpg +- data/imagenet-r/n01847000/misc_1.jpg +- data/imagenet-r/n03424325/misc_3.jpg +- data/imagenet-r/n02909870/cartoon_28.jpg +- data/imagenet-r/n04389033/graffiti_16.jpg +- data/imagenet-r/n07614500/art_2.jpg +- data/imagenet-r/n02437616/deviantart_19.jpg +- data/imagenet-r/n04465501/painting_5.jpg +- data/imagenet-r/n02110958/cartoon_68.jpg +- data/imagenet-r/n04141076/cartoon_0.jpg +- data/imagenet-r/n02317335/cartoon_16.jpg +- data/imagenet-r/n03481172/deviantart_2.jpg +- data/imagenet-r/n02317335/painting_10.jpg +- data/imagenet-r/n04522168/sketch_21.jpg +- data/imagenet-r/n01531178/misc_6.jpg +- data/imagenet-r/n02110958/tattoo_9.jpg +- data/imagenet-r/n02948072/cartoon_43.jpg +- data/imagenet-r/n02094433/misc_59.jpg +- data/imagenet-r/n04389033/toy_2.jpg +- data/imagenet-r/n07749582/sketch_17.jpg +- data/imagenet-r/n02099712/misc_0.jpg +- data/imagenet-r/n03649909/toy_2.jpg +- data/imagenet-r/n03773504/sticker_0.jpg +- data/imagenet-r/n01494475/deviantart_10.jpg +- data/imagenet-r/n07880968/cartoon_8.jpg +- data/imagenet-r/n02655020/sketch_14.jpg +- data/imagenet-r/n02526121/cartoon_2.jpg +- data/imagenet-r/n04141076/cartoon_56.jpg +- data/imagenet-r/n02112018/misc_3.jpg +- data/imagenet-r/n02769748/cartoon_30.jpg +- data/imagenet-r/n02092339/misc_13.jpg +- data/imagenet-r/n04409515/sticker_0.jpg +- data/imagenet-r/n07697313/toy_5.jpg +- data/imagenet-r/n07697313/deviantart_13.jpg +- data/imagenet-r/n02701002/toy_2.jpg +- data/imagenet-r/n02130308/misc_3.jpg +- data/imagenet-r/n01514859/embroidery_8.jpg +- data/imagenet-r/n09472597/sketch_24.jpg +- data/imagenet-r/n01677366/sketch_18.jpg +- data/imagenet-r/n02317335/tattoo_28.jpg +- data/imagenet-r/n01784675/sketch_9.jpg +- data/imagenet-r/n01443537/art_11.jpg +- data/imagenet-r/n07614500/art_0.jpg +- data/imagenet-r/n02802426/sketch_20.jpg +- data/imagenet-r/n02110341/misc_32.jpg +- data/imagenet-r/n02793495/sketch_7.jpg +- data/imagenet-r/n02108915/misc_39.jpg +- data/imagenet-r/n07695742/painting_4.jpg +- data/imagenet-r/n04133789/cartoon_24.jpg +- data/imagenet-r/n04591713/sketch_11.jpg +- data/imagenet-r/n02051845/cartoon_0.jpg +- data/imagenet-r/n07697313/painting_2.jpg +- data/imagenet-r/n02346627/cartoon_13.jpg +- data/imagenet-r/n01694178/origami_5.jpg +- data/imagenet-r/n04275548/embroidery_5.jpg +- data/imagenet-r/n02749479/videogame_11.jpg +- data/imagenet-r/n02268443/misc_73.jpg +- data/imagenet-r/n01833805/embroidery_7.jpg +- data/imagenet-r/n03649909/toy_28.jpg +- data/imagenet-r/n02233338/sketch_19.jpg +- data/imagenet-r/n01614925/painting_4.jpg +- data/imagenet-r/n07734744/videogame_35.jpg +- data/imagenet-r/n03594945/tattoo_1.jpg +- data/imagenet-r/n01860187/painting_1.jpg +- data/imagenet-r/n02206856/misc_18.jpg +- data/imagenet-r/n04536866/deviantart_31.jpg +- data/imagenet-r/n07697537/videogame_14.jpg +- data/imagenet-r/n02088466/misc_14.jpg +- data/imagenet-r/n02843684/sketch_7.jpg +- data/imagenet-r/n01748264/misc_20.jpg +- data/imagenet-r/n04310018/painting_33.jpg +- data/imagenet-r/n01774750/origami_16.jpg +- data/imagenet-r/n02117135/graffiti_4.jpg +- data/imagenet-r/n01443537/sketch_6.jpg +- data/imagenet-r/n07695742/deviantart_2.jpg +- data/imagenet-r/n03594945/graffiti_1.jpg +- data/imagenet-r/n01531178/cartoon_16.jpg +- data/imagenet-r/n02749479/misc_6.jpg +- data/imagenet-r/n03452741/painting_3.jpg +- data/imagenet-r/n02236044/tattoo_27.jpg +- data/imagenet-r/n01677366/misc_25.jpg +- data/imagenet-r/n02071294/painting_4.jpg +- data/imagenet-r/n02236044/tattoo_8.jpg +- data/imagenet-r/n09835506/videogame_31.jpg +- data/imagenet-r/n02948072/videogame_0.jpg +- data/imagenet-r/n03372029/sketch_17.jpg +- data/imagenet-r/n01770393/tattoo_17.jpg +- data/imagenet-r/n01986214/videogame_2.jpg +- data/imagenet-r/n03773504/graffiti_5.jpg +- data/imagenet-r/n07614500/sketch_13.jpg +- data/imagenet-r/n02094433/misc_18.jpg +- data/imagenet-r/n04487394/graphic_0.jpg +- data/imagenet-r/n02129165/deviantart_12.jpg +- data/imagenet-r/n02797295/misc_9.jpg +- data/imagenet-r/n01614925/deviantart_8.jpg +- data/imagenet-r/n03345487/toy_1.jpg +- data/imagenet-r/n02437616/misc_2.jpg +- data/imagenet-r/n02110958/cartoon_38.jpg +- data/imagenet-r/n03124170/painting_4.jpg +- data/imagenet-r/n01518878/cartoon_11.jpg +- data/imagenet-r/n03498962/videogame_1.jpg +- data/imagenet-r/n04591713/graffiti_0.jpg +- data/imagenet-r/n04146614/deviantart_8.jpg +- data/imagenet-r/n02129165/embroidery_5.jpg +- data/imagenet-r/n02423022/sculpture_1.jpg +- data/imagenet-r/n07880968/cartoon_10.jpg +- data/imagenet-r/n02992529/cartoon_0.jpg +- data/imagenet-r/n01614925/art_7.jpg +- data/imagenet-r/n01518878/cartoon_56.jpg +- data/imagenet-r/n03947888/toy_8.jpg +- data/imagenet-r/n03372029/sculpture_9.jpg +- data/imagenet-r/n02110958/sketch_15.jpg +- data/imagenet-r/n03773504/graffiti_6.jpg +- data/imagenet-r/n02410509/sculpture_24.jpg +- data/imagenet-r/n02992529/cartoon_9.jpg +- data/imagenet-r/n02106662/misc_84.jpg +- data/imagenet-r/n02106662/misc_99.jpg +- data/imagenet-r/n01882714/art_5.jpg +- data/imagenet-r/n07753275/videogame_3.jpg +- data/imagenet-r/n01514859/sketch_6.jpg +- data/imagenet-r/n04591713/sketch_9.jpg +- data/imagenet-r/n02279972/sketch_8.jpg +- data/imagenet-r/n02363005/toy_9.jpg +- data/imagenet-r/n02883205/cartoon_3.jpg +- data/imagenet-r/n04522168/videogame_11.jpg +- data/imagenet-r/n12267677/misc_130.jpg +- data/imagenet-r/n01498041/deviantart_3.jpg +- data/imagenet-r/n02966193/toy_1.jpg +- data/imagenet-r/n02445715/toy_16.jpg +- data/imagenet-r/n02526121/sketch_11.jpg +- data/imagenet-r/n02909870/cartoon_0.jpg +- data/imagenet-r/n02088238/misc_108.jpg +- data/imagenet-r/n01484850/painting_27.jpg +- data/imagenet-r/n01882714/cartoon_23.jpg +- data/imagenet-r/n04141076/deviantart_9.jpg +- data/imagenet-r/n02098286/misc_13.jpg +- data/imagenet-r/n02802426/sketch_8.jpg +- data/imagenet-r/n02106662/tattoo_2.jpg +- data/imagenet-r/n02066245/art_3.jpg +- data/imagenet-r/n01944390/misc_58.jpg +- data/imagenet-r/n04409515/deviantart_6.jpg +- data/imagenet-r/n02134084/misc_11.jpg +- data/imagenet-r/n01882714/deviantart_7.jpg +- data/imagenet-r/n02447366/cartoon_5.jpg +- data/imagenet-r/n02106550/misc_42.jpg +- data/imagenet-r/n01847000/tattoo_30.jpg +- data/imagenet-r/n02009912/misc_17.jpg +- data/imagenet-r/n01770393/cartoon_7.jpg +- data/imagenet-r/n04487394/deviantart_1.jpg +- data/imagenet-r/n01443537/cartoon_25.jpg +- data/imagenet-r/n02410509/graffiti_5.jpg +- data/imagenet-r/n02769748/graphic_1.jpg +- data/imagenet-r/n01847000/tattoo_2.jpg +- data/imagenet-r/n01910747/tattoo_43.jpg +- data/imagenet-r/n03930630/toy_12.jpg +- data/imagenet-r/n02236044/painting_16.jpg +- data/imagenet-r/n02701002/sketch_7.jpg +- data/imagenet-r/n09472597/cartoon_13.jpg +- data/imagenet-r/n01774750/graphic_0.jpg +- data/imagenet-r/n01847000/misc_17.jpg +- data/imagenet-r/n01882714/deviantart_40.jpg +- data/imagenet-r/n02112018/sketch_5.jpg +- data/imagenet-r/n01770393/tattoo_30.jpg +- data/imagenet-r/n09472597/cartoon_8.jpg +- data/imagenet-r/n02701002/toy_17.jpg +- data/imagenet-r/n02129165/toy_28.jpg +- data/imagenet-r/n01784675/sketch_19.jpg +- data/imagenet-r/n01847000/sketch_7.jpg +- data/imagenet-r/n02410509/art_21.jpg +- data/imagenet-r/n04465501/videogame_20.jpg +- data/imagenet-r/n04266014/videogame_28.jpg +- data/imagenet-r/n02364673/art_4.jpg +- data/imagenet-r/n01944390/misc_153.jpg +- data/imagenet-r/n04146614/videogame_21.jpg +- data/imagenet-r/n02106662/tattoo_0.jpg +- data/imagenet-r/n02051845/art_0.jpg +- data/imagenet-r/n02110341/deviantart_20.jpg +- data/imagenet-r/n07753275/sketch_8.jpg +- data/imagenet-r/n01882714/toy_20.jpg +- data/imagenet-r/n02883205/cartoon_0.jpg +- data/imagenet-r/n04389033/videogame_18.jpg +- data/imagenet-r/n02106550/tattoo_12.jpg +- data/imagenet-r/n02950826/sketch_18.jpg +- data/imagenet-r/n02071294/tattoo_11.jpg +- data/imagenet-r/n03372029/painting_12.jpg +- data/imagenet-r/n01443537/misc_6.jpg +- data/imagenet-r/n02096585/misc_123.jpg +- data/imagenet-r/n01630670/cartoon_10.jpg +- data/imagenet-r/n03710193/misc_21.jpg +- data/imagenet-r/n04266014/cartoon_8.jpg +- data/imagenet-r/n02808440/misc_1.jpg +- data/imagenet-r/n07714990/deviantart_9.jpg +- data/imagenet-r/n02096585/misc_87.jpg +- data/imagenet-r/n04465501/art_0.jpg +- data/imagenet-r/n02110341/misc_161.jpg +- data/imagenet-r/n02106166/sketch_1.jpg +- data/imagenet-r/n02113624/misc_16.jpg +- data/imagenet-r/n02526121/sticker_0.jpg +- data/imagenet-r/n07768694/deviantart_20.jpg +- data/imagenet-r/n02102318/misc_34.jpg +- data/imagenet-r/n07697313/deviantart_36.jpg +- data/imagenet-r/n02398521/cartoon_27.jpg +- data/imagenet-r/n07697313/cartoon_25.jpg +- data/imagenet-r/n02096585/sketch_14.jpg +- data/imagenet-r/n04465501/sketch_16.jpg +- data/imagenet-r/n01910747/sculpture_1.jpg +- data/imagenet-r/n04147183/painting_2.jpg +- data/imagenet-r/n01614925/tattoo_15.jpg +- data/imagenet-r/n02071294/graffiti_1.jpg +- data/imagenet-r/n02094433/misc_17.jpg +- data/imagenet-r/n01614925/sketch_6.jpg +- data/imagenet-r/n02510455/sketch_5.jpg +- data/imagenet-r/n02112018/sketch_11.jpg +- data/imagenet-r/n01855672/painting_5.jpg +- data/imagenet-r/n01910747/tattoo_41.jpg +- data/imagenet-r/n01632777/sketch_2.jpg +- data/imagenet-r/n01820546/deviantart_15.jpg +- data/imagenet-r/n02909870/painting_9.jpg +- data/imagenet-r/n03495258/graphic_0.jpg +- data/imagenet-r/n01806143/cartoon_12.jpg +- data/imagenet-r/n01630670/graffiti_0.jpg +- data/imagenet-r/n02129604/graphic_6.jpg +- data/imagenet-r/n02086240/misc_21.jpg +- data/imagenet-r/n02099601/misc_88.jpg +- data/imagenet-r/n01514859/sketch_9.jpg +- data/imagenet-r/n02363005/sculpture_11.jpg +- data/imagenet-r/n02119022/sketch_10.jpg +- data/imagenet-r/n01514859/art_1.jpg +- data/imagenet-r/n02395406/toy_18.jpg +- data/imagenet-r/n03498962/videogame_15.jpg +- data/imagenet-r/n02110341/deviantart_7.jpg +- data/imagenet-r/n07753275/videogame_8.jpg +- data/imagenet-r/n02009912/misc_6.jpg +- data/imagenet-r/n02510455/misc_69.jpg +- data/imagenet-r/n10565667/videogame_5.jpg +- data/imagenet-r/n04465501/tattoo_8.jpg +- data/imagenet-r/n02134084/sketch_10.jpg +- data/imagenet-r/n09835506/sketch_20.jpg +- data/imagenet-r/n01616318/tattoo_43.jpg +- data/imagenet-r/n02128757/art_12.jpg +- data/imagenet-r/n02486410/tattoo_0.jpg +- data/imagenet-r/n01677366/deviantart_2.jpg +- data/imagenet-r/n04133789/cartoon_11.jpg +- data/imagenet-r/n02106030/cartoon_5.jpg +- data/imagenet-r/n04266014/deviantart_12.jpg +- data/imagenet-r/n01843383/deviantart_83.jpg +- data/imagenet-r/n03649909/toy_20.jpg +- data/imagenet-r/n02138441/sculpture_13.jpg +- data/imagenet-r/n02098286/sketch_12.jpg +- data/imagenet-r/n02134084/misc_23.jpg +- data/imagenet-r/n07753592/deviantart_14.jpg +- data/imagenet-r/n02071294/deviantart_39.jpg +- data/imagenet-r/n01632777/toy_15.jpg +- data/imagenet-r/n02841315/sculpture_10.jpg +- data/imagenet-r/n02130308/misc_2.jpg +- data/imagenet-r/n03495258/sketch_9.jpg +- data/imagenet-r/n03424325/misc_71.jpg +- data/imagenet-r/n02123045/sketch_9.jpg +- data/imagenet-r/n04086273/cartoon_2.jpg +- data/imagenet-r/n04266014/deviantart_11.jpg +- data/imagenet-r/n02110958/sticker_2.jpg +- data/imagenet-r/n03594945/misc_19.jpg +- data/imagenet-r/n04192698/videogame_1.jpg +- data/imagenet-r/n02797295/misc_34.jpg +- data/imagenet-r/n04086273/sculpture_4.jpg +- data/imagenet-r/n02980441/videogame_4.jpg +- data/imagenet-r/n02206856/toy_35.jpg +- data/imagenet-r/n03888257/sketch_15.jpg +- data/imagenet-r/n02948072/graphic_2.jpg +- data/imagenet-r/n02113799/misc_36.jpg +- data/imagenet-r/n07734744/sticker_2.jpg +- data/imagenet-r/n02356798/painting_2.jpg +- data/imagenet-r/n02051845/painting_2.jpg +- data/imagenet-r/n01443537/painting_26.jpg +- data/imagenet-r/n02110958/cartoon_4.jpg +- data/imagenet-r/n02119022/sketch_21.jpg +- data/imagenet-r/n01632777/toy_9.jpg +- data/imagenet-r/n07614500/misc_10.jpg +- data/imagenet-r/n02607072/misc_63.jpg +- data/imagenet-r/n10565667/videogame_13.jpg +- data/imagenet-r/n07734744/toy_32.jpg +- data/imagenet-r/n02110958/sketch_5.jpg +- data/imagenet-r/n07718472/graffiti_0.jpg +- data/imagenet-r/n02106550/sketch_18.jpg +- data/imagenet-r/n09835506/sketch_5.jpg +- data/imagenet-r/n02219486/sculpture_6.jpg +- data/imagenet-r/n02480855/toy_8.jpg +- data/imagenet-r/n02325366/misc_48.jpg +- data/imagenet-r/n01944390/misc_131.jpg +- data/imagenet-r/n03424325/videogame_31.jpg +- data/imagenet-r/n07873807/sketch_11.jpg +- data/imagenet-r/n01694178/sketch_14.jpg +- data/imagenet-r/n02109525/tattoo_0.jpg +- data/imagenet-r/n04389033/sketch_9.jpg +- data/imagenet-r/n01820546/painting_11.jpg +- data/imagenet-r/n03494278/cartoon_11.jpg +- data/imagenet-r/n02088466/misc_22.jpg +- data/imagenet-r/n02088238/misc_60.jpg +- data/imagenet-r/n01770393/tattoo_55.jpg +- data/imagenet-r/n02128757/sculpture_3.jpg +- data/imagenet-r/n03630383/cartoon_1.jpg +- data/imagenet-r/n03947888/tattoo_29.jpg +- data/imagenet-r/n01843383/graphic_0.jpg +- data/imagenet-r/n02007558/tattoo_5.jpg +- data/imagenet-r/n01944390/misc_73.jpg +- data/imagenet-r/n07753592/misc_134.jpg +- data/imagenet-r/n02206856/embroidery_33.jpg +- data/imagenet-r/n02066245/tattoo_3.jpg +- data/imagenet-r/n02129604/tattoo_17.jpg +- data/imagenet-r/n02009912/misc_27.jpg +- data/imagenet-r/n02109525/sketch_0.jpg +- data/imagenet-r/n09472597/sketch_12.jpg +- data/imagenet-r/n07734744/painting_38.jpg +- data/imagenet-r/n02051845/sketch_7.jpg +- data/imagenet-r/n01632777/cartoon_2.jpg +- data/imagenet-r/n02077923/misc_27.jpg +- data/imagenet-r/n02909870/graphic_3.jpg +- data/imagenet-r/n01616318/cartoon_5.jpg +- data/imagenet-r/n03272010/cartoon_20.jpg +- data/imagenet-r/n01494475/misc_71.jpg +- data/imagenet-r/n02906734/cartoon_48.jpg +- data/imagenet-r/n02190166/sticker_7.jpg +- data/imagenet-r/n02108915/misc_37.jpg +- data/imagenet-r/n01843383/deviantart_49.jpg +- data/imagenet-r/n02481823/sketch_17.jpg +- data/imagenet-r/n03710193/misc_10.jpg +- data/imagenet-r/n01882714/toy_2.jpg +- data/imagenet-r/n01694178/art_0.jpg +- data/imagenet-r/n03124170/cartoon_30.jpg +- data/imagenet-r/n03498962/cartoon_19.jpg +- data/imagenet-r/n07614500/embroidery_8.jpg +- data/imagenet-r/n02948072/painting_3.jpg +- data/imagenet-r/n01806143/origami_4.jpg +- data/imagenet-r/n03649909/sketch_18.jpg +- data/imagenet-r/n02814860/cartoon_6.jpg +- data/imagenet-r/n02106662/misc_26.jpg +- data/imagenet-r/n02797295/sketch_20.jpg +- data/imagenet-r/n04275548/cartoon_11.jpg +- data/imagenet-r/n04118538/sketch_4.jpg +- data/imagenet-r/n02106662/misc_38.jpg +- data/imagenet-r/n02056570/painting_8.jpg +- data/imagenet-r/n02808440/painting_8.jpg +- data/imagenet-r/n12267677/misc_60.jpg +- data/imagenet-r/n01616318/tattoo_15.jpg +- data/imagenet-r/n02480855/misc_5.jpg +- data/imagenet-r/n01614925/tattoo_24.jpg +- data/imagenet-r/n02066245/tattoo_0.jpg +- data/imagenet-r/n02701002/sticker_5.jpg +- data/imagenet-r/n02071294/deviantart_15.jpg +- data/imagenet-r/n02510455/misc_85.jpg +- data/imagenet-r/n02110958/sketch_23.jpg +- data/imagenet-r/n01882714/tattoo_0.jpg +- data/imagenet-r/n02655020/videogame_0.jpg +- data/imagenet-r/n01494475/videogame_1.jpg +- data/imagenet-r/n07753592/misc_25.jpg +- data/imagenet-r/n03481172/cartoon_6.jpg +- data/imagenet-r/n07742313/painting_7.jpg +- data/imagenet-r/n09835506/deviantart_20.jpg +- data/imagenet-r/n01983481/sketch_22.jpg +- data/imagenet-r/n02346627/cartoon_17.jpg +- data/imagenet-r/n02096585/misc_150.jpg +- data/imagenet-r/n02423022/graphic_0.jpg +- data/imagenet-r/n07920052/cartoon_18.jpg +- data/imagenet-r/n01833805/sketch_2.jpg +- data/imagenet-r/n01820546/deviantart_16.jpg +- data/imagenet-r/n03272010/painting_3.jpg +- data/imagenet-r/n02607072/deviantart_14.jpg +- data/imagenet-r/n01847000/tattoo_12.jpg +- data/imagenet-r/n01944390/misc_113.jpg +- data/imagenet-r/n02948072/cartoon_55.jpg +- data/imagenet-r/n01774750/origami_5.jpg +- data/imagenet-r/n04146614/sketch_16.jpg +- data/imagenet-r/n02088238/misc_88.jpg +- data/imagenet-r/n01882714/origami_1.jpg +- data/imagenet-r/n02950826/sketch_10.jpg +- data/imagenet-r/n04536866/sculpture_5.jpg +- data/imagenet-r/n02483362/painting_7.jpg +- data/imagenet-r/n07720875/sketch_6.jpg +- data/imagenet-r/n02607072/deviantart_8.jpg +- data/imagenet-r/n02481823/sketch_11.jpg +- data/imagenet-r/n02129604/deviantart_11.jpg +- data/imagenet-r/n03124170/videogame_10.jpg +- data/imagenet-r/n02007558/tattoo_37.jpg +- data/imagenet-r/n02843684/sculpture_1.jpg +- data/imagenet-r/n02206856/toy_17.jpg +- data/imagenet-r/n02481823/sketch_16.jpg +- data/imagenet-r/n02948072/embroidery_16.jpg +- data/imagenet-r/n02325366/misc_3.jpg +- data/imagenet-r/n02398521/art_12.jpg +- data/imagenet-r/n02108915/tattoo_4.jpg +- data/imagenet-r/n02085620/misc_23.jpg +- data/imagenet-r/n04389033/sketch_12.jpg +- data/imagenet-r/n01748264/sketch_4.jpg +- data/imagenet-r/n07753592/misc_144.jpg +- data/imagenet-r/n02119022/misc_75.jpg +- data/imagenet-r/n03424325/videogame_7.jpg +- data/imagenet-r/n07753275/painting_23.jpg +- data/imagenet-r/n04254680/art_5.jpg +- data/imagenet-r/n01833805/misc_0.jpg +- data/imagenet-r/n02951358/deviantart_8.jpg +- data/imagenet-r/n02106030/art_0.jpg +- data/imagenet-r/n02051845/sketch_16.jpg +- data/imagenet-r/n02843684/misc_13.jpg +- data/imagenet-r/n01748264/misc_8.jpg +- data/imagenet-r/n01443537/sculpture_1.jpg +- data/imagenet-r/n02364673/toy_4.jpg +- data/imagenet-r/n02110341/misc_128.jpg +- data/imagenet-r/n04536866/deviantart_7.jpg +- data/imagenet-r/n02226429/sketch_6.jpg +- data/imagenet-r/n02108915/misc_51.jpg +- data/imagenet-r/n04266014/sticker_0.jpg +- data/imagenet-r/n04389033/misc_8.jpg +- data/imagenet-r/n02119022/misc_124.jpg +- data/imagenet-r/n02099601/sketch_10.jpg +- data/imagenet-r/n01855672/sketch_20.jpg +- data/imagenet-r/n02099712/sketch_9.jpg +- data/imagenet-r/n02279972/painting_6.jpg +- data/imagenet-r/n02391049/misc_97.jpg +- data/imagenet-r/n04254680/sketch_5.jpg +- data/imagenet-r/n04310018/sticker_14.jpg +- data/imagenet-r/n07697313/deviantart_45.jpg +- data/imagenet-r/n02410509/cartoon_9.jpg +- data/imagenet-r/n02129604/cartoon_4.jpg +- data/imagenet-r/n01882714/origami_0.jpg +- data/imagenet-r/n04389033/videogame_13.jpg +- data/imagenet-r/n02980441/misc_0.jpg +- data/imagenet-r/n02007558/misc_6.jpg +- data/imagenet-r/n02206856/sticker_8.jpg +- data/imagenet-r/n02226429/sculpture_16.jpg +- data/imagenet-r/n07734744/sketch_9.jpg +- data/imagenet-r/n01910747/sticker_0.jpg +- data/imagenet-r/n02119022/misc_104.jpg +- data/imagenet-r/n07745940/graffiti_8.jpg +- data/imagenet-r/n02447366/sculpture_6.jpg +- data/imagenet-r/n07753275/sketch_3.jpg +- data/imagenet-r/n01910747/graphic_0.jpg +- data/imagenet-r/n02802426/sketch_17.jpg +- data/imagenet-r/n04266014/videogame_34.jpg +- data/imagenet-r/n02096585/misc_38.jpg +- data/imagenet-r/n02317335/tattoo_20.jpg +- data/imagenet-r/n01860187/misc_2.jpg +- data/imagenet-r/n02110185/toy_9.jpg +- data/imagenet-r/n01847000/embroidery_7.jpg +- data/imagenet-r/n02980441/cartoon_15.jpg +- data/imagenet-r/n02526121/painting_1.jpg +- data/imagenet-r/n07734744/painting_15.jpg +- data/imagenet-r/n02797295/misc_55.jpg +- data/imagenet-r/n07768694/embroidery_1.jpg +- data/imagenet-r/n01983481/misc_29.jpg +- data/imagenet-r/n01986214/cartoon_21.jpg +- data/imagenet-r/n02672831/sketch_16.jpg +- data/imagenet-r/n03452741/art_5.jpg +- data/imagenet-r/n02110341/misc_152.jpg +- data/imagenet-r/n02102318/misc_3.jpg +- data/imagenet-r/n02481823/deviantart_9.jpg +- data/imagenet-r/n04266014/videogame_1.jpg +- data/imagenet-r/n01855672/misc_2.jpg +- data/imagenet-r/n02423022/sketch_7.jpg +- data/imagenet-r/n01494475/sketch_1.jpg +- data/imagenet-r/n03602883/sketch_13.jpg +- data/imagenet-r/n02007558/embroidery_29.jpg +- data/imagenet-r/n02129604/tattoo_20.jpg +- data/imagenet-r/n07742313/videogame_0.jpg +- data/imagenet-r/n07749582/cartoon_0.jpg +- data/imagenet-r/n02480495/art_13.jpg +- data/imagenet-r/n07697313/art_16.jpg +- data/imagenet-r/n02236044/tattoo_30.jpg +- data/imagenet-r/n03930630/art_2.jpg +- data/imagenet-r/n02843684/cartoon_11.jpg +- data/imagenet-r/n04086273/cartoon_3.jpg +- data/imagenet-r/n02134084/tattoo_8.jpg +- data/imagenet-r/n02437616/cartoon_1.jpg +- data/imagenet-r/n02128757/sticker_0.jpg +- data/imagenet-r/n02009912/sketch_12.jpg +- data/imagenet-r/n03947888/painting_9.jpg +- data/imagenet-r/n07745940/sketch_7.jpg +- data/imagenet-r/n02219486/tattoo_6.jpg +- data/imagenet-r/n03947888/sculpture_0.jpg +- data/imagenet-r/n02906734/painting_9.jpg +- data/imagenet-r/n02226429/painting_14.jpg +- data/imagenet-r/n04347754/videogame_27.jpg +- data/imagenet-r/n07749582/graphic_8.jpg +- data/imagenet-r/n01944390/tattoo_19.jpg +- data/imagenet-r/n07614500/deviantart_6.jpg +- data/imagenet-r/n01882714/cartoon_21.jpg +- data/imagenet-r/n04487394/art_2.jpg +- data/imagenet-r/n02395406/painting_8.jpg +- data/imagenet-r/n02410509/cartoon_20.jpg +- data/imagenet-r/n04389033/toy_5.jpg +- data/imagenet-r/n02423022/art_11.jpg +- data/imagenet-r/n01910747/tattoo_82.jpg +- data/imagenet-r/n01748264/deviantart_1.jpg +- data/imagenet-r/n02097298/sketch_15.jpg +- data/imagenet-r/n01944390/deviantart_3.jpg +- data/imagenet-r/n02655020/misc_63.jpg +- data/imagenet-r/n02437616/cartoon_7.jpg +- data/imagenet-r/n02909870/cartoon_13.jpg +- data/imagenet-r/n04266014/graffiti_0.jpg +- data/imagenet-r/n02129604/origami_2.jpg +- data/imagenet-r/n02325366/misc_51.jpg +- data/imagenet-r/n03372029/sketch_21.jpg +- data/imagenet-r/n01694178/graffiti_6.jpg +- data/imagenet-r/n03594945/videogame_1.jpg +- data/imagenet-r/n02088094/misc_0.jpg +- data/imagenet-r/n02948072/cartoon_75.jpg +- data/imagenet-r/n01843383/sketch_16.jpg +- data/imagenet-r/n02526121/painting_7.jpg +- data/imagenet-r/n07614500/embroidery_17.jpg +- data/imagenet-r/n01855672/art_0.jpg +- data/imagenet-r/n01518878/painting_14.jpg +- data/imagenet-r/n03888257/graffiti_4.jpg +- data/imagenet-r/n04325704/toy_2.jpg +- data/imagenet-r/n04118538/cartoon_16.jpg +- data/imagenet-r/n02951358/deviantart_3.jpg +- data/imagenet-r/n02165456/misc_11.jpg +- data/imagenet-r/n02108915/misc_74.jpg +- data/imagenet-r/n02117135/art_10.jpg +- data/imagenet-r/n04552348/art_19.jpg +- data/imagenet-r/n04254680/deviantart_14.jpg +- data/imagenet-r/n03930630/misc_18.jpg +- data/imagenet-r/n09472597/painting_13.jpg +- data/imagenet-r/n02138441/cartoon_25.jpg +- data/imagenet-r/n02128757/painting_29.jpg +- data/imagenet-r/n01443537/sketch_1.jpg +- data/imagenet-r/n07753592/misc_5.jpg +- data/imagenet-r/n02071294/sticker_0.jpg +- data/imagenet-r/n07697313/sketch_2.jpg +- data/imagenet-r/n07734744/misc_5.jpg +- data/imagenet-r/n03649909/sketch_10.jpg +- data/imagenet-r/n04522168/deviantart_1.jpg +- data/imagenet-r/n04310018/art_13.jpg +- data/imagenet-r/n02108915/sketch_22.jpg +- data/imagenet-r/n01882714/deviantart_26.jpg +- data/imagenet-r/n02655020/misc_67.jpg +- data/imagenet-r/n07614500/embroidery_1.jpg +- data/imagenet-r/n02808440/painting_24.jpg +- data/imagenet-r/n03424325/videogame_0.jpg +- data/imagenet-r/n02110341/misc_124.jpg +- data/imagenet-r/n02481823/graphic_3.jpg +- data/imagenet-r/n03594945/videogame_15.jpg +- data/imagenet-r/n07614500/cartoon_19.jpg +- data/imagenet-r/n02423022/embroidery_1.jpg +- data/imagenet-r/n02096585/misc_83.jpg +- data/imagenet-r/n04275548/art_2.jpg +- data/imagenet-r/n01882714/cartoon_15.jpg +- data/imagenet-r/n07714990/painting_7.jpg +- data/imagenet-r/n01614925/deviantart_21.jpg +- data/imagenet-r/n02226429/art_6.jpg +- data/imagenet-r/n01944390/misc_55.jpg +- data/imagenet-r/n01833805/sculpture_0.jpg +- data/imagenet-r/n04192698/sketch_13.jpg +- data/imagenet-r/n01820546/painting_20.jpg +- data/imagenet-r/n02088094/misc_42.jpg +- data/imagenet-r/n02233338/sketch_1.jpg +- data/imagenet-r/n02802426/painting_7.jpg +- data/imagenet-r/n02486410/cartoon_29.jpg +- data/imagenet-r/n07920052/embroidery_1.jpg +- data/imagenet-r/n04192698/videogame_8.jpg +- data/imagenet-r/n02481823/graffiti_10.jpg +- data/imagenet-r/n02423022/sculpture_6.jpg +- data/imagenet-r/n03272010/painting_19.jpg +- data/imagenet-r/n02110341/misc_43.jpg +- data/imagenet-r/n02206856/cartoon_25.jpg +- data/imagenet-r/n02437616/cartoon_23.jpg +- data/imagenet-r/n02395406/graffiti_3.jpg +- data/imagenet-r/n01514859/painting_20.jpg +- data/imagenet-r/n02190166/sketch_6.jpg +- data/imagenet-r/n02108915/sketch_8.jpg +- data/imagenet-r/n03775071/cartoon_1.jpg +- data/imagenet-r/n07745940/art_11.jpg +- data/imagenet-r/n02119022/sketch_19.jpg +- data/imagenet-r/n07753275/painting_5.jpg +- data/imagenet-r/n04487394/cartoon_3.jpg +- data/imagenet-r/n07745940/origami_6.jpg +- data/imagenet-r/n07697537/misc_107.jpg +- data/imagenet-r/n02097298/misc_69.jpg +- data/imagenet-r/n02106166/art_0.jpg +- data/imagenet-r/n02165456/toy_3.jpg +- data/imagenet-r/n01806143/art_9.jpg +- data/imagenet-r/n01644373/sketch_2.jpg +- data/imagenet-r/n07768694/painting_6.jpg +- data/imagenet-r/n02097298/misc_11.jpg +- data/imagenet-r/n01494475/deviantart_2.jpg +- data/imagenet-r/n07745940/graffiti_22.jpg +- data/imagenet-r/n02951358/cartoon_6.jpg +- data/imagenet-r/n02268443/misc_163.jpg +- data/imagenet-r/n02906734/cartoon_22.jpg +- data/imagenet-r/n04141076/deviantart_12.jpg +- data/imagenet-r/n01833805/tattoo_38.jpg +- data/imagenet-r/n02410509/graffiti_3.jpg +- data/imagenet-r/n02797295/sketch_16.jpg +- data/imagenet-r/n04266014/cartoon_33.jpg +- data/imagenet-r/n02206856/embroidery_14.jpg +- data/imagenet-r/n02219486/sketch_2.jpg +- data/imagenet-r/n02481823/origami_3.jpg +- data/imagenet-r/n01806143/embroidery_8.jpg +- data/imagenet-r/n04266014/cartoon_21.jpg +- data/imagenet-r/n04254680/misc_6.jpg +- data/imagenet-r/n02395406/misc_20.jpg +- data/imagenet-r/n02655020/misc_32.jpg +- data/imagenet-r/n02410509/cartoon_36.jpg +- data/imagenet-r/n01882714/deviantart_20.jpg +- data/imagenet-r/n04254680/tattoo_9.jpg +- data/imagenet-r/n02130308/painting_10.jpg +- data/imagenet-r/n02480855/origami_2.jpg +- data/imagenet-r/n04192698/cartoon_6.jpg +- data/imagenet-r/n03467068/cartoon_10.jpg +- data/imagenet-r/n07714990/toy_12.jpg +- data/imagenet-r/n02007558/painting_21.jpg +- data/imagenet-r/n04146614/videogame_28.jpg +- data/imagenet-r/n02233338/sketch_15.jpg +- data/imagenet-r/n01944390/misc_127.jpg +- data/imagenet-r/n01614925/sketch_12.jpg +- data/imagenet-r/n02206856/cartoon_9.jpg +- data/imagenet-r/n02099712/sketch_8.jpg +- data/imagenet-r/n03775071/sketch_2.jpg +- data/imagenet-r/n02236044/cartoon_15.jpg +- data/imagenet-r/n02138441/cartoon_5.jpg +- data/imagenet-r/n02112018/misc_50.jpg +- data/imagenet-r/n02165456/graffiti_3.jpg +- data/imagenet-r/n01630670/sketch_10.jpg +- data/imagenet-r/n01944390/misc_66.jpg +- data/imagenet-r/n02051845/deviantart_16.jpg +- data/imagenet-r/n10565667/toy_3.jpg +- data/imagenet-r/n02226429/origami_14.jpg +- data/imagenet-r/n01443537/origami_4.jpg +- data/imagenet-r/n01910747/tattoo_0.jpg +- data/imagenet-r/n02110185/painting_7.jpg +- data/imagenet-r/n02007558/sketch_1.jpg +- data/imagenet-r/n01944390/misc_122.jpg +- data/imagenet-r/n07745940/misc_22.jpg +- data/imagenet-r/n02480855/cartoon_18.jpg +- data/imagenet-r/n09835506/deviantart_28.jpg +- data/imagenet-r/n02206856/tattoo_26.jpg +- data/imagenet-r/n02123045/painting_23.jpg +- data/imagenet-r/n02843684/embroidery_15.jpg +- data/imagenet-r/n07693725/misc_0.jpg +- data/imagenet-r/n03888257/cartoon_23.jpg +- data/imagenet-r/n04347754/cartoon_14.jpg +- data/imagenet-r/n02097298/misc_6.jpg +- data/imagenet-r/n02128757/painting_22.jpg +- data/imagenet-r/n02480855/tattoo_33.jpg +- data/imagenet-r/n04465501/cartoon_13.jpg +- data/imagenet-r/n07768694/embroidery_4.jpg +- data/imagenet-r/n02526121/painting_3.jpg +- data/imagenet-r/n02096585/misc_46.jpg +- data/imagenet-r/n02423022/cartoon_23.jpg +- data/imagenet-r/n02219486/sculpture_1.jpg +- data/imagenet-r/n01784675/cartoon_0.jpg +- data/imagenet-r/n02190166/sketch_4.jpg +- data/imagenet-r/n02391049/misc_48.jpg +- data/imagenet-r/n02526121/toy_2.jpg +- data/imagenet-r/n01774750/cartoon_15.jpg +- data/imagenet-r/n04522168/painting_29.jpg +- data/imagenet-r/n02481823/graffiti_3.jpg +- data/imagenet-r/n02009912/misc_38.jpg +- data/imagenet-r/n02883205/sketch_18.jpg +- data/imagenet-r/n03424325/misc_81.jpg +- data/imagenet-r/n01518878/art_7.jpg +- data/imagenet-r/n04146614/toy_30.jpg +- data/imagenet-r/n10565667/art_0.jpg +- data/imagenet-r/n02480495/graphic_0.jpg +- data/imagenet-r/n01534433/sketch_16.jpg +- data/imagenet-r/n07920052/origami_0.jpg +- data/imagenet-r/n02077923/misc_7.jpg +- data/imagenet-r/n02130308/sketch_14.jpg +- data/imagenet-r/n02814860/painting_11.jpg +- data/imagenet-r/n01443537/deviantart_6.jpg +- data/imagenet-r/n01616318/cartoon_29.jpg +- data/imagenet-r/n04536866/cartoon_19.jpg +- data/imagenet-r/n02701002/sketch_21.jpg +- data/imagenet-r/n07734744/art_2.jpg +- data/imagenet-r/n02009912/misc_19.jpg +- data/imagenet-r/n01616318/tattoo_24.jpg +- data/imagenet-r/n02130308/graphic_2.jpg +- data/imagenet-r/n01443537/painting_2.jpg +- data/imagenet-r/n02510455/misc_103.jpg +- data/imagenet-r/n01806143/graphic_6.jpg +- data/imagenet-r/n02486410/painting_18.jpg +- data/imagenet-r/n02007558/cartoon_43.jpg +- data/imagenet-r/n07873807/videogame_9.jpg +- data/imagenet-r/n01770393/graffiti_2.jpg +- data/imagenet-r/n04522168/painting_32.jpg +- data/imagenet-r/n02906734/cartoon_20.jpg +- data/imagenet-r/n01843383/deviantart_75.jpg +- data/imagenet-r/n01833805/tattoo_70.jpg +- data/imagenet-r/n04591713/cartoon_6.jpg +- data/imagenet-r/n07880968/cartoon_16.jpg +- data/imagenet-r/n02086240/misc_8.jpg +- data/imagenet-r/n04133789/sculpture_2.jpg +- data/imagenet-r/n02980441/videogame_1.jpg +- data/imagenet-r/n02206856/cartoon_8.jpg +- data/imagenet-r/n02948072/cartoon_10.jpg +- data/imagenet-r/n09835506/misc_10.jpg +- data/imagenet-r/n02655020/misc_4.jpg +- data/imagenet-r/n02346627/art_8.jpg +- data/imagenet-r/n02007558/tattoo_56.jpg +- data/imagenet-r/n04146614/videogame_26.jpg +- data/imagenet-r/n02092339/misc_30.jpg +- data/imagenet-r/n02317335/sketch_6.jpg +- data/imagenet-r/n03272010/cartoon_22.jpg +- data/imagenet-r/n01833805/tattoo_93.jpg +- data/imagenet-r/n02123045/painting_58.jpg +- data/imagenet-r/n07693725/deviantart_8.jpg +- data/imagenet-r/n01484850/videogame_7.jpg +- data/imagenet-r/n02346627/tattoo_1.jpg +- data/imagenet-r/n07697313/art_28.jpg +- data/imagenet-r/n02398521/sticker_1.jpg +- data/imagenet-r/n07768694/deviantart_21.jpg +- data/imagenet-r/n02486410/painting_6.jpg +- data/imagenet-r/n07734744/art_1.jpg +- data/imagenet-r/n04141076/painting_10.jpg +- data/imagenet-r/n01614925/tattoo_2.jpg +- data/imagenet-r/n02279972/art_6.jpg +- data/imagenet-r/n02268443/misc_41.jpg +- data/imagenet-r/n07768694/sculpture_1.jpg +- data/imagenet-r/n07695742/deviantart_8.jpg +- data/imagenet-r/n01518878/painting_11.jpg +- data/imagenet-r/n02113624/misc_32.jpg +- data/imagenet-r/n01770393/tattoo_21.jpg +- data/imagenet-r/n02129165/sticker_3.jpg +- data/imagenet-r/n02410509/art_15.jpg +- data/imagenet-r/n01677366/misc_7.jpg +- data/imagenet-r/n01833805/painting_44.jpg +- data/imagenet-r/n02091032/sketch_17.jpg +- data/imagenet-r/n02165456/painting_12.jpg +- data/imagenet-r/n01847000/art_5.jpg +- data/imagenet-r/n01770393/tattoo_4.jpg +- data/imagenet-r/n07714571/cartoon_0.jpg +- data/imagenet-r/n02077923/misc_17.jpg +- data/imagenet-r/n01843383/sketch_7.jpg +- data/imagenet-r/n02091134/misc_20.jpg +- data/imagenet-r/n02883205/cartoon_11.jpg +- data/imagenet-r/n03676483/graffiti_2.jpg +- data/imagenet-r/n07745940/deviantart_14.jpg +- data/imagenet-r/n02346627/sketch_5.jpg +- data/imagenet-r/n02236044/origami_32.jpg +- data/imagenet-r/n04487394/deviantart_13.jpg +- data/imagenet-r/n01748264/misc_23.jpg +- data/imagenet-r/n07753275/misc_4.jpg +- data/imagenet-r/n01644373/graphic_0.jpg +- data/imagenet-r/n02206856/toy_27.jpg +- data/imagenet-r/n02607072/deviantart_17.jpg +- data/imagenet-r/n02206856/cartoon_49.jpg +- data/imagenet-r/n02236044/origami_31.jpg +- data/imagenet-r/n02480495/painting_30.jpg +- data/imagenet-r/n02391049/misc_72.jpg +- data/imagenet-r/n03594945/sketch_6.jpg +- data/imagenet-r/n02092339/sketch_4.jpg +- data/imagenet-r/n02445715/tattoo_7.jpg +- data/imagenet-r/n02134084/misc_143.jpg +- data/imagenet-r/n02510455/misc_137.jpg +- data/imagenet-r/n03947888/tattoo_28.jpg +- data/imagenet-r/n02085620/misc_81.jpg +- data/imagenet-r/n04522168/embroidery_9.jpg +- data/imagenet-r/n07734744/sculpture_8.jpg +- data/imagenet-r/n02106030/painting_1.jpg +- data/imagenet-r/n02841315/sketch_22.jpg +- data/imagenet-r/n02948072/toy_7.jpg +- data/imagenet-r/n01632777/deviantart_28.jpg +- data/imagenet-r/n02085620/misc_99.jpg +- data/imagenet-r/n01882714/painting_26.jpg +- data/imagenet-r/n02129604/tattoo_23.jpg +- data/imagenet-r/n07720875/sketch_21.jpg +- data/imagenet-r/n02106166/misc_5.jpg +- data/imagenet-r/n02129165/tattoo_58.jpg +- data/imagenet-r/n09472597/graphic_0.jpg +- data/imagenet-r/n02391049/misc_82.jpg +- data/imagenet-r/n07720875/cartoon_12.jpg +- data/imagenet-r/n02206856/graffiti_15.jpg +- data/imagenet-r/n04310018/sketch_20.jpg +- data/imagenet-r/n01910747/deviantart_7.jpg +- data/imagenet-r/n01784675/toy_0.jpg +- data/imagenet-r/n03649909/toy_21.jpg +- data/imagenet-r/n02088094/misc_47.jpg +- data/imagenet-r/n02123045/painting_42.jpg +- data/imagenet-r/n01910747/graphic_6.jpg +- data/imagenet-r/n02226429/graffiti_1.jpg +- data/imagenet-r/n02088094/misc_27.jpg +- data/imagenet-r/n04146614/toy_19.jpg +- data/imagenet-r/n04141076/deviantart_0.jpg +- data/imagenet-r/n02480855/tattoo_50.jpg +- data/imagenet-r/n04310018/sketch_3.jpg +- data/imagenet-r/n02009912/misc_56.jpg +- data/imagenet-r/n02190166/sticker_9.jpg +- data/imagenet-r/n02992529/sketch_0.jpg +- data/imagenet-r/n01833805/cartoon_16.jpg +- data/imagenet-r/n02701002/toy_7.jpg +- data/imagenet-r/n09835506/videogame_29.jpg +- data/imagenet-r/n01616318/cartoon_21.jpg +- data/imagenet-r/n04086273/sticker_9.jpg +- data/imagenet-r/n02437616/sketch_5.jpg +- data/imagenet-r/n01986214/tattoo_2.jpg +- data/imagenet-r/n01514859/painting_18.jpg +- data/imagenet-r/n02088238/misc_97.jpg +- data/imagenet-r/n02130308/videogame_2.jpg +- data/imagenet-r/n02843684/sketch_6.jpg +- data/imagenet-r/n07745940/sketch_19.jpg +- data/imagenet-r/n02129604/art_0.jpg +- data/imagenet-r/n01944390/tattoo_6.jpg +- data/imagenet-r/n02110185/sculpture_4.jpg +- data/imagenet-r/n02096585/misc_74.jpg +- data/imagenet-r/n02130308/cartoon_21.jpg +- data/imagenet-r/n02108915/misc_80.jpg +- data/imagenet-r/n01518878/videogame_4.jpg +- data/imagenet-r/n02007558/cartoon_45.jpg +- data/imagenet-r/n02106662/sketch_21.jpg +- data/imagenet-r/n04192698/deviantart_16.jpg +- data/imagenet-r/n02410509/cartoon_31.jpg +- data/imagenet-r/n04347754/sketch_19.jpg +- data/imagenet-r/n07693725/cartoon_30.jpg +- data/imagenet-r/n07695742/deviantart_11.jpg +- data/imagenet-r/n02129165/painting_8.jpg +- data/imagenet-r/n02119022/misc_81.jpg +- data/imagenet-r/n03649909/sketch_0.jpg +- data/imagenet-r/n02099601/misc_64.jpg +- data/imagenet-r/n02219486/sculpture_13.jpg +- data/imagenet-r/n07718472/painting_12.jpg +- data/imagenet-r/n01910747/embroidery_6.jpg +- data/imagenet-r/n07880968/sketch_12.jpg +- data/imagenet-r/n01833805/sticker_0.jpg +- data/imagenet-r/n01820546/painting_18.jpg +- data/imagenet-r/n02097298/misc_49.jpg +- data/imagenet-r/n01443537/embroidery_6.jpg +- data/imagenet-r/n02091134/misc_91.jpg +- data/imagenet-r/n01616318/sketch_17.jpg +- data/imagenet-r/n02480855/graphic_1.jpg +- data/imagenet-r/n02510455/misc_44.jpg +- data/imagenet-r/n02481823/toy_11.jpg +- data/imagenet-r/n02268443/misc_179.jpg +- data/imagenet-r/n02655020/sketch_16.jpg +- data/imagenet-r/n02823750/sketch_10.jpg +- data/imagenet-r/n02268443/misc_188.jpg +- data/imagenet-r/n01494475/misc_57.jpg +- data/imagenet-r/n02363005/sculpture_12.jpg +- data/imagenet-r/n01484850/sculpture_4.jpg +- data/imagenet-r/n03602883/misc_50.jpg +- data/imagenet-r/n01518878/sculpture_4.jpg +- data/imagenet-r/n04141076/sculpture_18.jpg +- data/imagenet-r/n07697537/deviantart_24.jpg +- data/imagenet-r/n02823750/sketch_18.jpg +- data/imagenet-r/n04389033/deviantart_16.jpg +- data/imagenet-r/n04266014/painting_8.jpg +- data/imagenet-r/n07745940/painting_21.jpg +- data/imagenet-r/n07734744/videogame_27.jpg +- data/imagenet-r/n01484850/deviantart_25.jpg +- data/imagenet-r/n02091134/sketch_6.jpg +- data/imagenet-r/n02951358/cartoon_2.jpg +- data/imagenet-r/n01694178/art_1.jpg +- data/imagenet-r/n02808440/graffiti_2.jpg +- data/imagenet-r/n07749582/sketch_6.jpg +- data/imagenet-r/n03498962/toy_5.jpg +- data/imagenet-r/n02233338/misc_50.jpg +- data/imagenet-r/n02317335/misc_5.jpg +- data/imagenet-r/n02346627/graffiti_0.jpg +- data/imagenet-r/n02110958/painting_42.jpg +- data/imagenet-r/n02109525/sketch_2.jpg +- data/imagenet-r/n04522168/painting_27.jpg +- data/imagenet-r/n03602883/sketch_2.jpg +- data/imagenet-r/n02701002/cartoon_9.jpg +- data/imagenet-r/n07745940/sticker_4.jpg +- data/imagenet-r/n02123045/embroidery_1.jpg +- data/imagenet-r/n01770393/painting_5.jpg +- data/imagenet-r/n04192698/painting_3.jpg +- data/imagenet-r/n07697313/toy_18.jpg +- data/imagenet-r/n01770393/sculpture_9.jpg +- data/imagenet-r/n02007558/embroidery_30.jpg +- data/imagenet-r/n02110958/painting_21.jpg +- data/imagenet-r/n07614500/deviantart_19.jpg +- data/imagenet-r/n01694178/art_5.jpg +- data/imagenet-r/n02510455/misc_51.jpg +- data/imagenet-r/n04086273/sketch_19.jpg +- data/imagenet-r/n04266014/sculpture_3.jpg +- data/imagenet-r/n02317335/painting_5.jpg +- data/imagenet-r/n04146614/toy_0.jpg +- data/imagenet-r/n01784675/misc_2.jpg +- data/imagenet-r/n04275548/sketch_12.jpg +- data/imagenet-r/n10565667/deviantart_8.jpg +- data/imagenet-r/n02607072/misc_8.jpg +- data/imagenet-r/n02106030/art_1.jpg +- data/imagenet-r/n01514859/embroidery_3.jpg +- data/imagenet-r/n12267677/misc_77.jpg +- data/imagenet-r/n02085620/misc_49.jpg +- data/imagenet-r/n02346627/art_2.jpg +- data/imagenet-r/n01614925/painting_35.jpg +- data/imagenet-r/n04465501/deviantart_7.jpg +- data/imagenet-r/n01494475/misc_136.jpg +- data/imagenet-r/n02134084/misc_145.jpg +- data/imagenet-r/n04192698/deviantart_6.jpg +- data/imagenet-r/n01806143/sculpture_4.jpg +- data/imagenet-r/n07745940/graffiti_16.jpg +- data/imagenet-r/n01632777/videogame_2.jpg +- data/imagenet-r/n02119022/misc_97.jpg +- data/imagenet-r/n02363005/cartoon_34.jpg +- data/imagenet-r/n02051845/painting_5.jpg +- data/imagenet-r/n02106030/cartoon_1.jpg +- data/imagenet-r/n04118538/cartoon_6.jpg +- data/imagenet-r/n02190166/sketch_13.jpg +- data/imagenet-r/n02410509/art_4.jpg +- data/imagenet-r/n01774750/painting_2.jpg +- data/imagenet-r/n02110185/painting_29.jpg +- data/imagenet-r/n02096585/misc_72.jpg +- data/imagenet-r/n02206856/toy_11.jpg +- data/imagenet-r/n02190166/graffiti_5.jpg +- data/imagenet-r/n02206856/cartoon_3.jpg +- data/imagenet-r/n02939185/cartoon_6.jpg +- data/imagenet-r/n01494475/misc_3.jpg +- data/imagenet-r/n02206856/toy_25.jpg +- data/imagenet-r/n01843383/graffiti_12.jpg +- data/imagenet-r/n02481823/sketch_4.jpg +- data/imagenet-r/n03710193/misc_39.jpg +- data/imagenet-r/n04275548/deviantart_2.jpg +- data/imagenet-r/n04146614/tattoo_0.jpg +- data/imagenet-r/n02906734/embroidery_7.jpg +- data/imagenet-r/n02951358/deviantart_0.jpg +- data/imagenet-r/n12267677/sketch_12.jpg +- data/imagenet-r/n02094433/deviantart_0.jpg +- data/imagenet-r/n01833805/cartoon_10.jpg +- data/imagenet-r/n02099712/misc_37.jpg +- data/imagenet-r/n03498962/videogame_5.jpg +- data/imagenet-r/n07745940/toy_8.jpg +- data/imagenet-r/n02007558/painting_0.jpg +- data/imagenet-r/n03676483/sketch_19.jpg +- data/imagenet-r/n01484850/videogame_8.jpg +- data/imagenet-r/n03775071/art_3.jpg +- data/imagenet-r/n02363005/graffiti_2.jpg +- data/imagenet-r/n02129604/deviantart_17.jpg +- data/imagenet-r/n01774750/origami_12.jpg +- data/imagenet-r/n07753592/misc_0.jpg +- data/imagenet-r/n04146614/videogame_14.jpg +- data/imagenet-r/n02106166/sketch_17.jpg +- data/imagenet-r/n02672831/sketch_0.jpg +- data/imagenet-r/n02129604/deviantart_20.jpg +- data/imagenet-r/n01630670/sketch_15.jpg +- data/imagenet-r/n02106030/sketch_9.jpg +- data/imagenet-r/n02445715/sketch_13.jpg +- data/imagenet-r/n02094433/misc_13.jpg +- data/imagenet-r/n02110185/painting_3.jpg +- data/imagenet-r/n09472597/toy_3.jpg +- data/imagenet-r/n03124170/cartoon_41.jpg +- data/imagenet-r/n04147183/painting_5.jpg +- data/imagenet-r/n02481823/art_1.jpg +- data/imagenet-r/n02110185/painting_13.jpg +- data/imagenet-r/n04389033/sticker_0.jpg +- data/imagenet-r/n02110958/embroidery_9.jpg +- data/imagenet-r/n02007558/toy_6.jpg +- data/imagenet-r/n02110185/painting_26.jpg +- data/imagenet-r/n02206856/misc_13.jpg +- data/imagenet-r/n02088238/misc_113.jpg +- data/imagenet-r/n07697313/toy_24.jpg +- data/imagenet-r/n02363005/art_3.jpg +- data/imagenet-r/n04591713/painting_25.jpg +- data/imagenet-r/n02007558/tattoo_65.jpg +- data/imagenet-r/n02948072/painting_12.jpg +- data/imagenet-r/n01774750/sticker_0.jpg +- data/imagenet-r/n03424325/deviantart_1.jpg +- data/imagenet-r/n02091134/misc_72.jpg +- data/imagenet-r/n04325704/cartoon_6.jpg +- data/imagenet-r/n03888257/graffiti_8.jpg +- data/imagenet-r/n03775071/cartoon_18.jpg +- data/imagenet-r/n02268443/misc_23.jpg +- data/imagenet-r/n01534433/videogame_0.jpg +- data/imagenet-r/n04536866/painting_34.jpg +- data/imagenet-r/n02110341/misc_65.jpg +- data/imagenet-r/n01518878/toy_7.jpg +- data/imagenet-r/n02236044/sculpture_19.jpg +- data/imagenet-r/n02110341/misc_155.jpg +- data/imagenet-r/n02423022/cartoon_26.jpg +- data/imagenet-r/n04465501/toy_3.jpg +- data/imagenet-r/n09472597/art_4.jpg +- data/imagenet-r/n02526121/cartoon_1.jpg +- data/imagenet-r/n01944390/tattoo_9.jpg +- data/imagenet-r/n07720875/sketch_15.jpg +- data/imagenet-r/n07753275/art_15.jpg +- data/imagenet-r/n10565667/deviantart_10.jpg +- data/imagenet-r/n07753275/origami_2.jpg +- data/imagenet-r/n02099601/misc_78.jpg +- data/imagenet-r/n02481823/cartoon_22.jpg +- data/imagenet-r/n04141076/sculpture_26.jpg +- data/imagenet-r/n01882714/graphic_2.jpg +- data/imagenet-r/n02086240/misc_26.jpg +- data/imagenet-r/n02802426/sketch_9.jpg +- data/imagenet-r/n07873807/toy_6.jpg +- data/imagenet-r/n02088364/misc_35.jpg +- data/imagenet-r/n02077923/misc_14.jpg +- data/imagenet-r/n04389033/sticker_8.jpg +- data/imagenet-r/n03710193/misc_16.jpg +- data/imagenet-r/n07714990/toy_8.jpg +- data/imagenet-r/n02114367/sketch_2.jpg +- data/imagenet-r/n02398521/sketch_18.jpg +- data/imagenet-r/n07697313/graphic_6.jpg +- data/imagenet-r/n07697313/painting_18.jpg +- data/imagenet-r/n02364673/graffiti_1.jpg +- data/imagenet-r/n02410509/sculpture_38.jpg +- data/imagenet-r/n01518878/cartoon_42.jpg +- data/imagenet-r/n01770393/graffiti_5.jpg +- data/imagenet-r/n02268443/misc_155.jpg +- data/imagenet-r/n02110341/misc_26.jpg +- data/imagenet-r/n03124170/deviantart_0.jpg +- data/imagenet-r/n02966193/cartoon_15.jpg +- data/imagenet-r/n03272010/sculpture_0.jpg +- data/imagenet-r/n02410509/sculpture_7.jpg +- data/imagenet-r/n03494278/sketch_12.jpg +- data/imagenet-r/n04254680/graphic_1.jpg +- data/imagenet-r/n04118538/graphic_3.jpg +- data/imagenet-r/n03594945/toy_10.jpg +- data/imagenet-r/n02129604/toy_5.jpg +- data/imagenet-r/n02883205/sketch_9.jpg +- data/imagenet-r/n02108089/misc_56.jpg +- data/imagenet-r/n01833805/embroidery_20.jpg +- data/imagenet-r/n02268443/misc_3.jpg +- data/imagenet-r/n03124170/cartoon_29.jpg +- data/imagenet-r/n09835506/misc_9.jpg +- data/imagenet-r/n02206856/embroidery_7.jpg +- data/imagenet-r/n02437616/graffiti_0.jpg +- data/imagenet-r/n03272010/painting_2.jpg +- data/imagenet-r/n02391049/misc_124.jpg +- data/imagenet-r/n02007558/art_24.jpg +- data/imagenet-r/n02607072/misc_16.jpg +- data/imagenet-r/n01855672/graphic_1.jpg +- data/imagenet-r/n01986214/origami_2.jpg +- data/imagenet-r/n02119022/misc_155.jpg +- data/imagenet-r/n02346627/painting_2.jpg +- data/imagenet-r/n07749582/embroidery_0.jpg +- data/imagenet-r/n02950826/videogame_15.jpg +- data/imagenet-r/n02071294/sketch_1.jpg +- data/imagenet-r/n02123045/painting_66.jpg +- data/imagenet-r/n04487394/deviantart_5.jpg +- data/imagenet-r/n02395406/cartoon_7.jpg +- data/imagenet-r/n02823750/cartoon_11.jpg +- data/imagenet-r/n04465501/sketch_10.jpg +- data/imagenet-r/n04086273/toy_5.jpg +- data/imagenet-r/n01784675/cartoon_5.jpg +- data/imagenet-r/n02510455/videogame_0.jpg +- data/imagenet-r/n04133789/painting_8.jpg +- data/imagenet-r/n09472597/videogame_8.jpg +- data/imagenet-r/n01694178/toy_4.jpg +- data/imagenet-r/n02110958/graphic_1.jpg +- data/imagenet-r/n02119022/misc_101.jpg +- data/imagenet-r/n03498962/cartoon_2.jpg +- data/imagenet-r/n12267677/misc_69.jpg +- data/imagenet-r/n01443537/embroidery_1.jpg +- data/imagenet-r/n02117135/sculpture_4.jpg +- data/imagenet-r/n01833805/embroidery_14.jpg +- data/imagenet-r/n01616318/sketch_18.jpg +- data/imagenet-r/n02110185/sketch_7.jpg +- data/imagenet-r/n02007558/graffiti_13.jpg +- data/imagenet-r/n02814860/videogame_13.jpg +- data/imagenet-r/n10565667/graffiti_4.jpg +- data/imagenet-r/n04086273/videogame_18.jpg +- data/imagenet-r/n02086240/sketch_12.jpg +- data/imagenet-r/n02480855/sketch_21.jpg +- data/imagenet-r/n01882714/toy_26.jpg +- data/imagenet-r/n01748264/misc_7.jpg +- data/imagenet-r/n02106030/painting_10.jpg +- data/imagenet-r/n02096585/misc_100.jpg +- data/imagenet-r/n02749479/sketch_22.jpg +- data/imagenet-r/n02966193/sketch_19.jpg +- data/imagenet-r/n02134084/deviantart_14.jpg +- data/imagenet-r/n02980441/cartoon_16.jpg +- data/imagenet-r/n02109525/sketch_22.jpg +- data/imagenet-r/n01983481/sketch_5.jpg +- data/imagenet-r/n07753275/painting_30.jpg +- data/imagenet-r/n02088094/sketch_8.jpg +- data/imagenet-r/n02108089/misc_43.jpg +- data/imagenet-r/n02129165/cartoon_25.jpg +- data/imagenet-r/n02110958/embroidery_13.jpg +- data/imagenet-r/n07697313/sculpture_11.jpg +- data/imagenet-r/n01986214/sketch_6.jpg +- data/imagenet-r/n07753592/misc_186.jpg +- data/imagenet-r/n03272010/cartoon_19.jpg +- data/imagenet-r/n07753592/misc_24.jpg +- data/imagenet-r/n02128757/cartoon_10.jpg +- data/imagenet-r/n01910747/tattoo_73.jpg +- data/imagenet-r/n01694178/sketch_3.jpg +- data/imagenet-r/n07753592/misc_175.jpg +- data/imagenet-r/n01614925/deviantart_44.jpg +- data/imagenet-r/n02423022/sketch_8.jpg +- data/imagenet-r/n02980441/videogame_14.jpg +- data/imagenet-r/n02268443/videogame_0.jpg +- data/imagenet-r/n02096585/misc_2.jpg +- data/imagenet-r/n02769748/sticker_2.jpg +- data/imagenet-r/n02088364/misc_56.jpg +- data/imagenet-r/n01944390/sketch_3.jpg +- data/imagenet-r/n09472597/videogame_25.jpg +- data/imagenet-r/n02108089/sketch_15.jpg +- data/imagenet-r/n02701002/sketch_11.jpg +- data/imagenet-r/n02106550/misc_41.jpg +- data/imagenet-r/n02802426/art_1.jpg +- data/imagenet-r/n02226429/graphic_1.jpg +- data/imagenet-r/n02701002/toy_19.jpg +- data/imagenet-r/n03594945/toy_17.jpg +- data/imagenet-r/n07697313/painting_10.jpg +- data/imagenet-r/n01614925/painting_2.jpg +- data/imagenet-r/n07614500/sketch_19.jpg +- data/imagenet-r/n02769748/cartoon_40.jpg +- data/imagenet-r/n02268443/misc_38.jpg +- data/imagenet-r/n01518878/cartoon_21.jpg +- data/imagenet-r/n02113023/misc_29.jpg +- data/imagenet-r/n02607072/misc_98.jpg +- data/imagenet-r/n02410509/sculpture_32.jpg +- data/imagenet-r/n02445715/sketch_22.jpg +- data/imagenet-r/n04347754/graffiti_2.jpg +- data/imagenet-r/n02447366/sketch_22.jpg +- data/imagenet-r/n07734744/videogame_36.jpg +- data/imagenet-r/n02607072/misc_17.jpg +- data/imagenet-r/n01847000/art_4.jpg +- data/imagenet-r/n01531178/misc_7.jpg +- data/imagenet-r/n02099601/misc_93.jpg +- data/imagenet-r/n02951358/cartoon_5.jpg +- data/imagenet-r/n03452741/sketch_3.jpg +- data/imagenet-r/n02823750/painting_1.jpg +- data/imagenet-r/n01983481/misc_45.jpg +- data/imagenet-r/n02096585/misc_198.jpg +- data/imagenet-r/n04254680/misc_11.jpg +- data/imagenet-r/n02483362/cartoon_1.jpg +- data/imagenet-r/n02395406/cartoon_39.jpg +- data/imagenet-r/n02119022/videogame_3.jpg +- data/imagenet-r/n02481823/graffiti_4.jpg +- data/imagenet-r/n12267677/misc_32.jpg +- data/imagenet-r/n07697537/misc_48.jpg +- data/imagenet-r/n07734744/videogame_0.jpg +- data/imagenet-r/n09472597/sketch_1.jpg +- data/imagenet-r/n02206856/painting_19.jpg +- data/imagenet-r/n01484850/misc_11.jpg +- data/imagenet-r/n02190166/sculpture_4.jpg +- data/imagenet-r/n01514859/cartoon_21.jpg +- data/imagenet-r/n02226429/graphic_3.jpg +- data/imagenet-r/n02391049/tattoo_1.jpg +- data/imagenet-r/n02219486/art_7.jpg +- data/imagenet-r/n07753592/misc_29.jpg +- data/imagenet-r/n02129604/sticker_1.jpg +- data/imagenet-r/n01443537/sculpture_3.jpg +- data/imagenet-r/n02098286/misc_5.jpg +- data/imagenet-r/n02206856/embroidery_9.jpg +- data/imagenet-r/n01614925/painting_39.jpg +- data/imagenet-r/n01616318/cartoon_18.jpg +- data/imagenet-r/n07873807/sculpture_1.jpg +- data/imagenet-r/n02410509/sculpture_5.jpg +- data/imagenet-r/n01944390/tattoo_30.jpg +- data/imagenet-r/n04266014/misc_0.jpg +- data/imagenet-r/n02206856/sticker_7.jpg +- data/imagenet-r/n02007558/graphic_6.jpg +- data/imagenet-r/n01847000/sketch_2.jpg +- data/imagenet-r/n04552348/deviantart_17.jpg +- data/imagenet-r/n02797295/misc_31.jpg +- data/imagenet-r/n02110958/painting_47.jpg +- data/imagenet-r/n01616318/tattoo_35.jpg +- data/imagenet-r/n02112018/misc_24.jpg +- data/imagenet-r/n01694178/graffiti_1.jpg +- data/imagenet-r/n02219486/tattoo_8.jpg +- data/imagenet-r/n01843383/graffiti_10.jpg +- data/imagenet-r/n02110185/cartoon_21.jpg +- data/imagenet-r/n02486410/sculpture_3.jpg +- data/imagenet-r/n03481172/graphic_1.jpg +- data/imagenet-r/n02279972/sketch_21.jpg +- data/imagenet-r/n02088364/misc_25.jpg +- data/imagenet-r/n01986214/toy_2.jpg +- data/imagenet-r/n04389033/videogame_42.jpg +- data/imagenet-r/n03602883/sketch_5.jpg +- data/imagenet-r/n02086240/misc_13.jpg +- data/imagenet-r/n03124170/art_3.jpg +- data/imagenet-r/n03773504/graphic_9.jpg +- data/imagenet-r/n02317335/sketch_14.jpg +- data/imagenet-r/n02480855/graphic_8.jpg +- data/imagenet-r/n02128757/tattoo_1.jpg +- data/imagenet-r/n02099712/misc_20.jpg +- data/imagenet-r/n02138441/art_3.jpg +- data/imagenet-r/n01770393/tattoo_69.jpg +- data/imagenet-r/n01983481/sketch_16.jpg +- data/imagenet-r/n07714990/tattoo_4.jpg +- data/imagenet-r/n02110185/sketch_23.jpg +- data/imagenet-r/n01860187/tattoo_7.jpg +- data/imagenet-r/n02113023/misc_14.jpg +- data/imagenet-r/n02206856/cartoon_30.jpg +- data/imagenet-r/n02808440/sculpture_4.jpg +- data/imagenet-r/n02091032/sketch_16.jpg +- data/imagenet-r/n01983481/sketch_19.jpg +- data/imagenet-r/n02445715/cartoon_37.jpg +- data/imagenet-r/n03498962/cartoon_13.jpg +- data/imagenet-r/n02948072/graphic_11.jpg +- data/imagenet-r/n02346627/misc_1.jpg +- data/imagenet-r/n02099601/misc_56.jpg +- data/imagenet-r/n02672831/sketch_21.jpg +- data/imagenet-r/n02346627/painting_1.jpg +- data/imagenet-r/n07745940/cartoon_19.jpg +- data/imagenet-r/n01843383/deviantart_58.jpg +- data/imagenet-r/n04141076/sketch_23.jpg +- data/imagenet-r/n02841315/sculpture_1.jpg +- data/imagenet-r/n02108089/misc_7.jpg +- data/imagenet-r/n02094433/sketch_14.jpg +- data/imagenet-r/n01944390/misc_115.jpg +- data/imagenet-r/n01855672/deviantart_10.jpg +- data/imagenet-r/n03124170/misc_8.jpg +- data/imagenet-r/n01774750/tattoo_3.jpg +- data/imagenet-r/n07714571/misc_5.jpg +- data/imagenet-r/n02108915/sketch_4.jpg +- data/imagenet-r/n09472597/painting_2.jpg +- data/imagenet-r/n02114367/sketch_14.jpg +- data/imagenet-r/n02797295/misc_68.jpg +- data/imagenet-r/n01644373/tattoo_20.jpg +- data/imagenet-r/n02391049/sketch_17.jpg +- data/imagenet-r/n07734744/graffiti_52.jpg +- data/imagenet-r/n02129604/toy_12.jpg +- data/imagenet-r/n02483362/origami_2.jpg +- data/imagenet-r/n02481823/misc_4.jpg +- data/imagenet-r/n07880968/deviantart_12.jpg +- data/imagenet-r/n02317335/tattoo_8.jpg +- data/imagenet-r/n02410509/misc_3.jpg +- data/imagenet-r/n02106550/misc_31.jpg +- data/imagenet-r/n02110958/cartoon_3.jpg +- data/imagenet-r/n03452741/toy_6.jpg +- data/imagenet-r/n02481823/sketch_6.jpg +- data/imagenet-r/n02481823/painting_23.jpg +- data/imagenet-r/n01614925/sketch_1.jpg +- data/imagenet-r/n04409515/videogame_9.jpg +- data/imagenet-r/n07734744/graffiti_2.jpg +- data/imagenet-r/n02486410/graffiti_0.jpg +- data/imagenet-r/n04133789/painting_5.jpg +- data/imagenet-r/n02007558/art_18.jpg +- data/imagenet-r/n02110341/misc_99.jpg +- data/imagenet-r/n04275548/graphic_1.jpg +- data/imagenet-r/n02091134/misc_2.jpg +- data/imagenet-r/n02110185/tattoo_14.jpg +- data/imagenet-r/n02802426/art_2.jpg +- data/imagenet-r/n07718472/art_2.jpg +- data/imagenet-r/n02480855/tattoo_25.jpg +- data/imagenet-r/n02364673/art_1.jpg +- data/imagenet-r/n02085620/misc_105.jpg +- data/imagenet-r/n03888257/sticker_4.jpg +- data/imagenet-r/n02410509/graffiti_13.jpg +- data/imagenet-r/n02129604/tattoo_33.jpg +- data/imagenet-r/n02110341/misc_118.jpg +- data/imagenet-r/n03372029/cartoon_11.jpg +- data/imagenet-r/n03124170/cartoon_8.jpg +- data/imagenet-r/n07734744/deviantart_0.jpg +- data/imagenet-r/n03272010/deviantart_3.jpg +- data/imagenet-r/n01855672/cartoon_0.jpg +- data/imagenet-r/n02117135/tattoo_2.jpg +- data/imagenet-r/n02236044/sticker_2.jpg +- data/imagenet-r/n04254680/misc_5.jpg +- data/imagenet-r/n02114367/sketch_17.jpg +- data/imagenet-r/n07695742/sketch_15.jpg +- data/imagenet-r/n02128757/painting_18.jpg +- data/imagenet-r/n03710193/misc_2.jpg +- data/imagenet-r/n07697537/deviantart_16.jpg +- data/imagenet-r/n02236044/origami_21.jpg +- data/imagenet-r/n02655020/misc_88.jpg +- data/imagenet-r/n02129165/sticker_0.jpg +- data/imagenet-r/n01748264/sketch_11.jpg +- data/imagenet-r/n04347754/graffiti_3.jpg +- data/imagenet-r/n02607072/deviantart_12.jpg +- data/imagenet-r/n01748264/tattoo_4.jpg +- data/imagenet-r/n04141076/sculpture_22.jpg +- data/imagenet-r/n02110958/toy_5.jpg +- data/imagenet-r/n02129604/painting_17.jpg +- data/imagenet-r/n02051845/tattoo_5.jpg +- data/imagenet-r/n02481823/painting_19.jpg +- data/imagenet-r/n03594945/videogame_22.jpg +- data/imagenet-r/n02701002/sticker_0.jpg +- data/imagenet-r/n09472597/deviantart_1.jpg +- data/imagenet-r/n03424325/misc_63.jpg +- data/imagenet-r/n02071294/videogame_3.jpg +- data/imagenet-r/n02113023/misc_18.jpg +- data/imagenet-r/n01694178/misc_3.jpg +- data/imagenet-r/n07714571/cartoon_1.jpg +- data/imagenet-r/n01632777/deviantart_4.jpg +- data/imagenet-r/n02123045/toy_2.jpg +- data/imagenet-r/n07753592/misc_31.jpg +- data/imagenet-r/n10565667/graffiti_0.jpg +- data/imagenet-r/n02843684/sketch_4.jpg +- data/imagenet-r/n07753275/sketch_14.jpg +- data/imagenet-r/n02607072/misc_100.jpg +- data/imagenet-r/n02096585/misc_152.jpg +- data/imagenet-r/n02510455/misc_112.jpg +- data/imagenet-r/n02410509/art_12.jpg +- data/imagenet-r/n07745940/graphic_7.jpg +- data/imagenet-r/n01843383/art_13.jpg +- data/imagenet-r/n12267677/misc_129.jpg +- data/imagenet-r/n02701002/toy_1.jpg +- data/imagenet-r/n01494475/misc_47.jpg +- data/imagenet-r/n02279972/tattoo_12.jpg +- data/imagenet-r/n02607072/misc_97.jpg +- data/imagenet-r/n04141076/sketch_12.jpg +- data/imagenet-r/n03498962/art_3.jpg +- data/imagenet-r/n03947888/videogame_17.jpg +- data/imagenet-r/n04591713/sticker_2.jpg +- data/imagenet-r/n04310018/sketch_14.jpg +- data/imagenet-r/n02437616/sculpture_3.jpg +- data/imagenet-r/n02088364/misc_63.jpg +- data/imagenet-r/n04347754/sticker_3.jpg +- data/imagenet-r/n02607072/misc_78.jpg +- data/imagenet-r/n02071294/cartoon_4.jpg +- data/imagenet-r/n02279972/tattoo_2.jpg +- data/imagenet-r/n01518878/sketch_7.jpg +- data/imagenet-r/n01833805/origami_0.jpg +- data/imagenet-r/n07742313/painting_22.jpg +- data/imagenet-r/n02091032/misc_26.jpg +- data/imagenet-r/n07693725/cartoon_10.jpg +- data/imagenet-r/n02007558/embroidery_28.jpg +- data/imagenet-r/n03481172/art_5.jpg +- data/imagenet-r/n02823750/sketch_12.jpg +- data/imagenet-r/n07745940/embroidery_3.jpg +- data/imagenet-r/n07734744/painting_13.jpg +- data/imagenet-r/n02051845/painting_3.jpg +- data/imagenet-r/n02077923/misc_6.jpg +- data/imagenet-r/n03345487/painting_1.jpg +- data/imagenet-r/n04141076/deviantart_7.jpg +- data/imagenet-r/n02410509/painting_1.jpg +- data/imagenet-r/n02138441/graffiti_1.jpg +- data/imagenet-r/n01833805/cartoon_1.jpg +- data/imagenet-r/n09472597/painting_0.jpg +- data/imagenet-r/n07697537/misc_41.jpg +- data/imagenet-r/n02951358/sketch_5.jpg +- data/imagenet-r/n04266014/cartoon_4.jpg +- data/imagenet-r/n02948072/cartoon_64.jpg +- data/imagenet-r/n12267677/misc_38.jpg +- data/imagenet-r/n03124170/cartoon_12.jpg +- data/imagenet-r/n07745940/embroidery_24.jpg +- data/imagenet-r/n01910747/tattoo_80.jpg +- data/imagenet-r/n02007558/cartoon_42.jpg +- data/imagenet-r/n07749582/painting_52.jpg +- data/imagenet-r/n04487394/cartoon_29.jpg +- data/imagenet-r/n03930630/sketch_4.jpg +- data/imagenet-r/n02109525/sketch_23.jpg +- data/imagenet-r/n01843383/deviantart_69.jpg +- data/imagenet-r/n02110958/art_16.jpg +- data/imagenet-r/n07714571/painting_18.jpg +- data/imagenet-r/n07753275/art_12.jpg +- data/imagenet-r/n01498041/sketch_18.jpg +- data/imagenet-r/n02437616/sketch_22.jpg +- data/imagenet-r/n02447366/misc_0.jpg +- data/imagenet-r/n04254680/videogame_16.jpg +- data/imagenet-r/n01614925/deviantart_24.jpg +- data/imagenet-r/n03495258/sculpture_5.jpg +- data/imagenet-r/n03888257/cartoon_32.jpg +- data/imagenet-r/n07745940/sticker_8.jpg +- data/imagenet-r/n02119022/misc_14.jpg +- data/imagenet-r/n01986214/cartoon_17.jpg +- data/imagenet-r/n01518878/graphic_0.jpg +- data/imagenet-r/n02099712/misc_5.jpg +- data/imagenet-r/n02096585/misc_130.jpg +- data/imagenet-r/n03424325/deviantart_6.jpg +- data/imagenet-r/n02123045/painting_25.jpg +- data/imagenet-r/n02206856/cartoon_47.jpg +- data/imagenet-r/n01983481/misc_42.jpg +- data/imagenet-r/n07873807/deviantart_14.jpg +- data/imagenet-r/n02219486/embroidery_7.jpg +- data/imagenet-r/n02117135/sculpture_5.jpg +- data/imagenet-r/n02814860/painting_22.jpg +- data/imagenet-r/n07695742/cartoon_9.jpg +- data/imagenet-r/n07753275/tattoo_4.jpg +- data/imagenet-r/n01498041/sketch_16.jpg +- data/imagenet-r/n02110958/painting_19.jpg +- data/imagenet-r/n02481823/graffiti_13.jpg +- data/imagenet-r/n01833805/sketch_15.jpg +- data/imagenet-r/n02219486/embroidery_2.jpg +- data/imagenet-r/n04389033/videogame_24.jpg +- data/imagenet-r/n02769748/cartoon_5.jpg +- data/imagenet-r/n10565667/art_2.jpg +- data/imagenet-r/n01855672/origami_0.jpg +- data/imagenet-r/n02113023/misc_31.jpg +- data/imagenet-r/n04141076/art_8.jpg +- data/imagenet-r/n02123045/toy_4.jpg +- data/imagenet-r/n02138441/art_14.jpg +- data/imagenet-r/n02117135/tattoo_9.jpg +- data/imagenet-r/n02110958/sticker_9.jpg +- data/imagenet-r/n07614500/misc_3.jpg +- data/imagenet-r/n02992529/cartoon_4.jpg +- data/imagenet-r/n01843383/painting_29.jpg +- data/imagenet-r/n02129165/tattoo_1.jpg +- data/imagenet-r/n02129604/tattoo_13.jpg +- data/imagenet-r/n02165456/painting_1.jpg +- data/imagenet-r/n02480855/graffiti_7.jpg +- data/imagenet-r/n02480495/cartoon_14.jpg +- data/imagenet-r/n03710193/misc_50.jpg +- data/imagenet-r/n02948072/toy_0.jpg +- data/imagenet-r/n03124170/sketch_2.jpg +- data/imagenet-r/n04266014/misc_8.jpg +- data/imagenet-r/n02481823/art_4.jpg +- data/imagenet-r/n07749582/graphic_6.jpg +- data/imagenet-r/n01944390/misc_87.jpg +- data/imagenet-r/n02797295/misc_70.jpg +- data/imagenet-r/n01616318/painting_17.jpg +- data/imagenet-r/n03424325/sketch_2.jpg +- data/imagenet-r/n07697313/cartoon_0.jpg +- data/imagenet-r/n02906734/cartoon_36.jpg +- data/imagenet-r/n02106662/misc_50.jpg +- data/imagenet-r/n01847000/cartoon_14.jpg +- data/imagenet-r/n02423022/art_0.jpg +- data/imagenet-r/n02279972/graffiti_0.jpg +- data/imagenet-r/n04536866/videogame_0.jpg +- data/imagenet-r/n02206856/embroidery_28.jpg +- data/imagenet-r/n01944390/misc_22.jpg +- data/imagenet-r/n02088238/misc_86.jpg +- data/imagenet-r/n01518878/deviantart_4.jpg +- data/imagenet-r/n01443537/cartoon_31.jpg +- data/imagenet-r/n02219486/cartoon_4.jpg +- data/imagenet-r/n02948072/graphic_1.jpg +- data/imagenet-r/n01820546/sketch_15.jpg +- data/imagenet-r/n04591713/deviantart_5.jpg +- data/imagenet-r/n02128385/tattoo_1.jpg +- data/imagenet-r/n02066245/art_2.jpg +- data/imagenet-r/n07734744/deviantart_21.jpg +- data/imagenet-r/n02793495/painting_21.jpg +- data/imagenet-r/n07734744/cartoon_0.jpg +- data/imagenet-r/n03372029/sketch_3.jpg +- data/imagenet-r/n07768694/sketch_3.jpg +- data/imagenet-r/n02909870/painting_19.jpg +- data/imagenet-r/n02007558/sketch_13.jpg +- data/imagenet-r/n07697537/deviantart_20.jpg +- data/imagenet-r/n01531178/cartoon_1.jpg +- data/imagenet-r/n02226429/origami_1.jpg +- data/imagenet-r/n07614500/toy_2.jpg +- data/imagenet-r/n01910747/cartoon_31.jpg +- data/imagenet-r/n02906734/cartoon_23.jpg +- data/imagenet-r/n07697537/videogame_28.jpg +- data/imagenet-r/n01843383/videogame_1.jpg +- data/imagenet-r/n02085620/misc_104.jpg +- data/imagenet-r/n01986214/deviantart_9.jpg +- data/imagenet-r/n03773504/sketch_23.jpg +- data/imagenet-r/n07753275/sketch_15.jpg +- data/imagenet-r/n01833805/toy_1.jpg +- data/imagenet-r/n02395406/painting_12.jpg +- data/imagenet-r/n03630383/cartoon_9.jpg +- data/imagenet-r/n03424325/misc_93.jpg +- data/imagenet-r/n02793495/sketch_3.jpg +- data/imagenet-r/n07734744/embroidery_23.jpg +- data/imagenet-r/n03649909/sketch_5.jpg +- data/imagenet-r/n02129165/tattoo_30.jpg +- data/imagenet-r/n02092339/misc_41.jpg +- data/imagenet-r/n07753275/sketch_21.jpg +- data/imagenet-r/n07734744/deviantart_36.jpg +- data/imagenet-r/n02007558/embroidery_5.jpg +- data/imagenet-r/n02909870/graphic_4.jpg +- data/imagenet-r/n01630670/cartoon_1.jpg +- data/imagenet-r/n02007558/sketch_3.jpg +- data/imagenet-r/n02088364/misc_61.jpg +- data/imagenet-r/n03594945/misc_16.jpg +- data/imagenet-r/n04487394/cartoon_20.jpg +- data/imagenet-r/n02808440/painting_5.jpg +- data/imagenet-r/n07697537/sketch_15.jpg +- data/imagenet-r/n02480855/graffiti_10.jpg +- data/imagenet-r/n02483362/art_0.jpg +- data/imagenet-r/n02092339/misc_36.jpg +- data/imagenet-r/n01614925/cartoon_20.jpg +- data/imagenet-r/n01910747/sculpture_2.jpg +- data/imagenet-r/n02108915/misc_23.jpg +- data/imagenet-r/n02655020/misc_13.jpg +- data/imagenet-r/n01833805/deviantart_11.jpg +- data/imagenet-r/n02114367/sketch_19.jpg +- data/imagenet-r/n02363005/sketch_13.jpg +- data/imagenet-r/n02364673/embroidery_0.jpg +- data/imagenet-r/n03710193/misc_18.jpg +- data/imagenet-r/n02106166/toy_1.jpg +- data/imagenet-r/n04409515/cartoon_21.jpg +- data/imagenet-r/n01784675/sketch_8.jpg +- data/imagenet-r/n02843684/sketch_20.jpg +- data/imagenet-r/n04591713/tattoo_2.jpg +- data/imagenet-r/n01833805/cartoon_23.jpg +- data/imagenet-r/n10565667/cartoon_4.jpg +- data/imagenet-r/n01774750/cartoon_13.jpg +- data/imagenet-r/n02279972/cartoon_3.jpg +- data/imagenet-r/n07695742/embroidery_2.jpg +- data/imagenet-r/n02007558/cartoon_26.jpg +- data/imagenet-r/n01833805/misc_10.jpg +- data/imagenet-r/n01944390/misc_116.jpg +- data/imagenet-r/n01770393/tattoo_38.jpg +- data/imagenet-r/n02129165/sticker_8.jpg +- data/imagenet-r/n02909870/graphic_14.jpg +- data/imagenet-r/n01806143/art_6.jpg +- data/imagenet-r/n04147183/art_4.jpg +- data/imagenet-r/n02097298/sketch_17.jpg +- data/imagenet-r/n04522168/painting_4.jpg +- data/imagenet-r/n03345487/videogame_6.jpg +- data/imagenet-r/n02106166/misc_13.jpg +- data/imagenet-r/n02138441/painting_33.jpg +- data/imagenet-r/n01770393/tattoo_19.jpg +- data/imagenet-r/n02607072/misc_113.jpg +- data/imagenet-r/n01860187/misc_3.jpg +- data/imagenet-r/n01855672/videogame_3.jpg +- data/imagenet-r/n02138441/cartoon_7.jpg +- data/imagenet-r/n02445715/art_4.jpg +- data/imagenet-r/n03773504/sketch_1.jpg +- data/imagenet-r/n02980441/origami_4.jpg +- data/imagenet-r/n02094433/sketch_18.jpg +- data/imagenet-r/n02423022/cartoon_30.jpg +- data/imagenet-r/n03676483/toy_0.jpg +- data/imagenet-r/n02129604/sculpture_2.jpg +- data/imagenet-r/n01820546/sketch_5.jpg +- data/imagenet-r/n02051845/sketch_6.jpg +- data/imagenet-r/n02445715/cartoon_26.jpg +- data/imagenet-r/n01806143/painting_3.jpg +- data/imagenet-r/n02092339/sketch_11.jpg +- data/imagenet-r/n09472597/sketch_19.jpg +- data/imagenet-r/n03710193/sketch_13.jpg +- data/imagenet-r/n03452741/graphic_1.jpg +- data/imagenet-r/n02363005/art_4.jpg +- data/imagenet-r/n02808440/sculpture_6.jpg +- data/imagenet-r/n02206856/cartoon_42.jpg +- data/imagenet-r/n01770393/misc_0.jpg +- data/imagenet-r/n01843383/cartoon_45.jpg +- data/imagenet-r/n02939185/sketch_15.jpg +- data/imagenet-r/n02909870/videogame_18.jpg +- data/imagenet-r/n03947888/misc_8.jpg +- data/imagenet-r/n01833805/sketch_3.jpg +- data/imagenet-r/n02092339/sketch_20.jpg +- data/imagenet-r/n01644373/tattoo_50.jpg +- data/imagenet-r/n07695742/art_0.jpg +- data/imagenet-r/n02165456/toy_38.jpg +- data/imagenet-r/n02268443/misc_32.jpg +- data/imagenet-r/n03888257/videogame_13.jpg +- data/imagenet-r/n01843383/painting_38.jpg +- data/imagenet-r/n02356798/art_3.jpg +- data/imagenet-r/n02110958/cartoon_50.jpg +- data/imagenet-r/n02206856/graffiti_25.jpg +- data/imagenet-r/n02206856/graffiti_44.jpg +- data/imagenet-r/n12267677/sketch_6.jpg +- data/imagenet-r/n02226429/painting_8.jpg +- data/imagenet-r/n04310018/sticker_7.jpg +- data/imagenet-r/n07873807/videogame_1.jpg +- data/imagenet-r/n01616318/deviantart_4.jpg +- data/imagenet-r/n02110185/tattoo_3.jpg +- data/imagenet-r/n07873807/painting_0.jpg +- data/imagenet-r/n02480855/sculpture_8.jpg +- data/imagenet-r/n02769748/embroidery_2.jpg +- data/imagenet-r/n03467068/sketch_3.jpg +- data/imagenet-r/n02007558/tattoo_49.jpg +- data/imagenet-r/n02948072/sketch_9.jpg +- data/imagenet-r/n07697313/graphic_4.jpg +- data/imagenet-r/n02883205/sketch_22.jpg +- data/imagenet-r/n02134084/sketch_4.jpg +- data/imagenet-r/n07734744/deviantart_9.jpg +- data/imagenet-r/n09835506/misc_15.jpg +- data/imagenet-r/n07753275/embroidery_15.jpg +- data/imagenet-r/n02883205/graphic_4.jpg +- data/imagenet-r/n02279972/graffiti_2.jpg +- data/imagenet-r/n01944390/misc_18.jpg +- data/imagenet-r/n04254680/videogame_6.jpg +- data/imagenet-r/n02129165/painting_16.jpg +- data/imagenet-r/n04310018/videogame_14.jpg +- data/imagenet-r/n07873807/cartoon_8.jpg +- data/imagenet-r/n07753275/painting_26.jpg +- data/imagenet-r/n03424325/cartoon_1.jpg +- data/imagenet-r/n01843383/graphic_4.jpg +- data/imagenet-r/n02398521/painting_8.jpg +- data/imagenet-r/n01855672/videogame_0.jpg +- data/imagenet-r/n04522168/embroidery_1.jpg +- data/imagenet-r/n03345487/cartoon_3.jpg +- data/imagenet-r/n07734744/misc_21.jpg +- data/imagenet-r/n01855672/sculpture_9.jpg +- data/imagenet-r/n02980441/sketch_1.jpg +- data/imagenet-r/n01518878/art_0.jpg +- data/imagenet-r/n02814860/videogame_9.jpg +- data/imagenet-r/n02423022/sketch_0.jpg +- data/imagenet-r/n04254680/deviantart_23.jpg +- data/imagenet-r/n04487394/deviantart_8.jpg +- data/imagenet-r/n01944390/misc_168.jpg +- data/imagenet-r/n07614500/embroidery_5.jpg +- data/imagenet-r/n02317335/toy_11.jpg +- data/imagenet-r/n04487394/cartoon_27.jpg +- data/imagenet-r/n01882714/art_17.jpg +- data/imagenet-r/n02165456/toy_6.jpg +- data/imagenet-r/n02480855/toy_3.jpg +- data/imagenet-r/n04147183/deviantart_8.jpg +- data/imagenet-r/n02672831/sketch_9.jpg +- data/imagenet-r/n04389033/toy_14.jpg +- data/imagenet-r/n02841315/cartoon_17.jpg +- data/imagenet-r/n01910747/graffiti_4.jpg +- data/imagenet-r/n02909870/painting_5.jpg +- data/imagenet-r/n02486410/cartoon_8.jpg +- data/imagenet-r/n02279972/painting_28.jpg +- data/imagenet-r/n02110341/misc_140.jpg +- data/imagenet-r/n07714571/cartoon_3.jpg +- data/imagenet-r/n09472597/art_0.jpg +- data/imagenet-r/n02129165/sketch_19.jpg +- data/imagenet-r/n02088094/misc_35.jpg +- data/imagenet-r/n07697537/deviantart_32.jpg +- data/imagenet-r/n02106550/misc_5.jpg +- data/imagenet-r/n07742313/sketch_0.jpg +- data/imagenet-r/n02113624/sketch_6.jpg +- data/imagenet-r/n02391049/misc_129.jpg +- data/imagenet-r/n04347754/cartoon_1.jpg +- data/imagenet-r/n04347754/cartoon_12.jpg +- data/imagenet-r/n07749582/sketch_12.jpg +- data/imagenet-r/n03272010/cartoon_3.jpg +- data/imagenet-r/n02226429/painting_15.jpg +- data/imagenet-r/n07753592/misc_185.jpg +- data/imagenet-r/n02112018/sketch_1.jpg +- data/imagenet-r/n02802426/sketch_19.jpg +- data/imagenet-r/n02106550/misc_37.jpg +- data/imagenet-r/n02966193/misc_8.jpg +- data/imagenet-r/n07718472/sketch_18.jpg +- data/imagenet-r/n02123045/art_4.jpg +- data/imagenet-r/n07880968/cartoon_11.jpg +- data/imagenet-r/n01677366/sketch_17.jpg +- data/imagenet-r/n01514859/cartoon_28.jpg +- data/imagenet-r/n01882714/cartoon_49.jpg +- data/imagenet-r/n03930630/sketch_18.jpg +- data/imagenet-r/n04275548/sketch_8.jpg +- data/imagenet-r/n12267677/misc_100.jpg +- data/imagenet-r/n03494278/deviantart_0.jpg +- data/imagenet-r/n02119022/misc_156.jpg +- data/imagenet-r/n07720875/painting_10.jpg +- data/imagenet-r/n02883205/toy_10.jpg +- data/imagenet-r/n01774750/deviantart_1.jpg +- data/imagenet-r/n02117135/art_9.jpg +- data/imagenet-r/n02165456/tattoo_50.jpg +- data/imagenet-r/n03124170/painting_9.jpg +- data/imagenet-r/n02481823/art_8.jpg +- data/imagenet-r/n02480495/cartoon_17.jpg +- data/imagenet-r/n02233338/sketch_7.jpg +- data/imagenet-r/n02113624/sketch_9.jpg +- data/imagenet-r/n02206856/origami_1.jpg +- data/imagenet-r/n01614925/painting_16.jpg +- data/imagenet-r/n04192698/deviantart_13.jpg +- data/imagenet-r/n02395406/toy_10.jpg +- data/imagenet-r/n02701002/sketch_20.jpg +- data/imagenet-r/n03124170/graffiti_15.jpg +- data/imagenet-r/n01514859/misc_2.jpg +- data/imagenet-r/n01443537/painting_28.jpg +- data/imagenet-r/n04536866/painting_20.jpg +- data/imagenet-r/n03124170/painting_22.jpg +- data/imagenet-r/n07734744/misc_26.jpg +- data/imagenet-r/n02364673/cartoon_25.jpg +- data/imagenet-r/n01531178/painting_40.jpg +- data/imagenet-r/n01833805/tattoo_43.jpg +- data/imagenet-r/n02138441/graffiti_7.jpg +- data/imagenet-r/n04146614/videogame_1.jpg +- data/imagenet-r/n01518878/painting_22.jpg +- data/imagenet-r/n07753592/misc_26.jpg +- data/imagenet-r/n02098286/misc_29.jpg +- data/imagenet-r/n03372029/painting_3.jpg +- data/imagenet-r/n02325366/misc_42.jpg +- data/imagenet-r/n02948072/deviantart_0.jpg +- data/imagenet-r/n04310018/videogame_17.jpg +- data/imagenet-r/n02206856/embroidery_15.jpg +- data/imagenet-r/n07742313/videogame_1.jpg +- data/imagenet-r/n02088364/misc_6.jpg +- data/imagenet-r/n02423022/cartoon_14.jpg +- data/imagenet-r/n02236044/art_3.jpg +- data/imagenet-r/n02119022/misc_143.jpg +- data/imagenet-r/n02672831/cartoon_13.jpg +- data/imagenet-r/n02948072/cartoon_41.jpg +- data/imagenet-r/n02268443/sketch_9.jpg +- data/imagenet-r/n07873807/graffiti_1.jpg +- data/imagenet-r/n02106662/misc_94.jpg +- data/imagenet-r/n01820546/sketch_12.jpg +- data/imagenet-r/n01820546/deviantart_18.jpg +- data/imagenet-r/n02480855/tattoo_64.jpg +- data/imagenet-r/n02363005/misc_7.jpg +- data/imagenet-r/n03124170/cartoon_34.jpg +- data/imagenet-r/n02071294/toy_5.jpg +- data/imagenet-r/n07745940/graffiti_0.jpg +- data/imagenet-r/n03649909/toy_25.jpg +- data/imagenet-r/n02391049/sketch_11.jpg +- data/imagenet-r/n02007558/tattoo_6.jpg +- data/imagenet-r/n01847000/tattoo_27.jpg +- data/imagenet-r/n01616318/deviantart_23.jpg +- data/imagenet-r/n04266014/sketch_17.jpg +- data/imagenet-r/n02909870/cartoon_9.jpg +- data/imagenet-r/n02236044/misc_2.jpg +- data/imagenet-r/n04310018/graphic_2.jpg +- data/imagenet-r/n02096585/sketch_15.jpg +- data/imagenet-r/n07749582/painting_13.jpg +- data/imagenet-r/n04536866/videogame_9.jpg +- data/imagenet-r/n02097298/misc_33.jpg +- data/imagenet-r/n02007558/cartoon_39.jpg +- data/imagenet-r/n02009912/misc_52.jpg +- data/imagenet-r/n02948072/cartoon_60.jpg +- data/imagenet-r/n02843684/sketch_9.jpg +- data/imagenet-r/n02346627/art_0.jpg +- data/imagenet-r/n04389033/tattoo_2.jpg +- data/imagenet-r/n02437616/deviantart_15.jpg +- data/imagenet-r/n07880968/sketch_11.jpg +- data/imagenet-r/n03124170/tattoo_9.jpg +- data/imagenet-r/n02948072/graphic_15.jpg +- data/imagenet-r/n02110185/origami_0.jpg +- data/imagenet-r/n02883205/toy_20.jpg +- data/imagenet-r/n01833805/sculpture_7.jpg +- data/imagenet-r/n07697313/cartoon_13.jpg +- data/imagenet-r/n03272010/toy_1.jpg +- data/imagenet-r/n04409515/graphic_5.jpg +- data/imagenet-r/n01748264/tattoo_5.jpg +- data/imagenet-r/n07614500/toy_8.jpg +- data/imagenet-r/n01534433/sketch_6.jpg +- data/imagenet-r/n02138441/sketch_23.jpg +- data/imagenet-r/n02108915/misc_20.jpg +- data/imagenet-r/n07714990/painting_10.jpg +- data/imagenet-r/n07734744/toy_15.jpg +- data/imagenet-r/n03947888/misc_1.jpg +- data/imagenet-r/n12267677/misc_125.jpg +- data/imagenet-r/n02108915/misc_1.jpg +- data/imagenet-r/n03345487/videogame_2.jpg +- data/imagenet-r/n12267677/sketch_10.jpg +- data/imagenet-r/n02607072/misc_120.jpg +- data/imagenet-r/n01806143/painting_6.jpg +- data/imagenet-r/n01833805/tattoo_14.jpg +- data/imagenet-r/n02346627/sketch_2.jpg +- data/imagenet-r/n02007558/cartoon_12.jpg +- data/imagenet-r/n04254680/graphic_5.jpg +- data/imagenet-r/n02129604/deviantart_6.jpg +- data/imagenet-r/n02206856/origami_4.jpg +- data/imagenet-r/n02106030/cartoon_6.jpg +- data/imagenet-r/n03947888/tattoo_20.jpg +- data/imagenet-r/n02481823/toy_13.jpg +- data/imagenet-r/n02841315/sketch_9.jpg +- data/imagenet-r/n04409515/videogame_15.jpg +- data/imagenet-r/n02236044/origami_13.jpg +- data/imagenet-r/n02096585/sketch_20.jpg +- data/imagenet-r/n01644373/deviantart_13.jpg +- data/imagenet-r/n04389033/graphic_7.jpg +- data/imagenet-r/n04147183/painting_8.jpg +- data/imagenet-r/n02129165/sculpture_13.jpg +- data/imagenet-r/n02134084/sketch_21.jpg +- data/imagenet-r/n04347754/art_2.jpg +- data/imagenet-r/n02526121/sculpture_19.jpg +- data/imagenet-r/n07718472/sketch_13.jpg +- data/imagenet-r/n02077923/misc_29.jpg +- data/imagenet-r/n03630383/sketch_16.jpg +- data/imagenet-r/n02526121/misc_0.jpg +- data/imagenet-r/n01748264/deviantart_6.jpg +- data/imagenet-r/n01644373/sketch_18.jpg +- data/imagenet-r/n01855672/toy_1.jpg +- data/imagenet-r/n02793495/embroidery_5.jpg +- data/imagenet-r/n01910747/tattoo_28.jpg +- data/imagenet-r/n07745940/origami_2.jpg +- data/imagenet-r/n02364673/origami_0.jpg +- data/imagenet-r/n01910747/sketch_6.jpg +- data/imagenet-r/n02701002/toy_5.jpg +- data/imagenet-r/n01910747/sketch_10.jpg +- data/imagenet-r/n03676483/misc_1.jpg +- data/imagenet-r/n01616318/deviantart_5.jpg +- data/imagenet-r/n01833805/painting_34.jpg +- data/imagenet-r/n07873807/cartoon_7.jpg +- data/imagenet-r/n02071294/tattoo_4.jpg +- data/imagenet-r/n02672831/misc_2.jpg +- data/imagenet-r/n01855672/cartoon_11.jpg +- data/imagenet-r/n02119022/misc_27.jpg +- data/imagenet-r/n02094433/sketch_19.jpg +- data/imagenet-r/n03481172/cartoon_14.jpg +- data/imagenet-r/n02395406/origami_6.jpg +- data/imagenet-r/n02906734/cartoon_35.jpg +- data/imagenet-r/n01498041/sketch_9.jpg +- data/imagenet-r/n07697313/deviantart_3.jpg +- data/imagenet-r/n02110958/sketch_21.jpg +- data/imagenet-r/n02114367/misc_41.jpg +- data/imagenet-r/n04552348/videogame_19.jpg +- data/imagenet-r/n03888257/cartoon_1.jpg +- data/imagenet-r/n04552348/videogame_0.jpg +- data/imagenet-r/n01518878/cartoon_10.jpg +- data/imagenet-r/n02009912/misc_18.jpg +- data/imagenet-r/n02071294/sketch_8.jpg +- data/imagenet-r/n01847000/toy_17.jpg +- data/imagenet-r/n07714990/toy_2.jpg +- data/imagenet-r/n03424325/graffiti_1.jpg +- data/imagenet-r/n02701002/misc_0.jpg +- data/imagenet-r/n07614500/sticker_3.jpg +- data/imagenet-r/n04465501/cartoon_4.jpg +- data/imagenet-r/n02009912/sketch_7.jpg +- data/imagenet-r/n03630383/cartoon_28.jpg +- data/imagenet-r/n02190166/sketch_3.jpg +- data/imagenet-r/n03494278/misc_2.jpg +- data/imagenet-r/n07753592/misc_170.jpg +- data/imagenet-r/n02980441/deviantart_8.jpg +- data/imagenet-r/n01632777/sketch_7.jpg +- data/imagenet-r/n02099601/misc_15.jpg +- data/imagenet-r/n02966193/cartoon_29.jpg +- data/imagenet-r/n02980441/cartoon_5.jpg +- data/imagenet-r/n07718472/cartoon_6.jpg +- data/imagenet-r/n01518878/toy_0.jpg +- data/imagenet-r/n01806143/sketch_6.jpg +- data/imagenet-r/n02356798/sketch_3.jpg +- data/imagenet-r/n02106166/painting_14.jpg +- data/imagenet-r/n02086240/misc_45.jpg +- data/imagenet-r/n02607072/misc_20.jpg +- data/imagenet-r/n02701002/painting_0.jpg +- data/imagenet-r/n02086240/misc_43.jpg +- data/imagenet-r/n07749582/painting_11.jpg +- data/imagenet-r/n01518878/sculpture_14.jpg +- data/imagenet-r/n02701002/videogame_7.jpg +- data/imagenet-r/n02007558/sketch_25.jpg +- data/imagenet-r/n02906734/sticker_6.jpg +- data/imagenet-r/n07745940/toy_0.jpg +- data/imagenet-r/n03372029/art_9.jpg +- data/imagenet-r/n02206856/embroidery_32.jpg +- data/imagenet-r/n01833805/tattoo_63.jpg +- data/imagenet-r/n03124170/misc_6.jpg +- data/imagenet-r/n03452741/origami_1.jpg +- data/imagenet-r/n02268443/misc_52.jpg +- data/imagenet-r/n04465501/toy_17.jpg +- data/imagenet-r/n02363005/sticker_4.jpg +- data/imagenet-r/n01843383/deviantart_22.jpg +- data/imagenet-r/n02165456/cartoon_1.jpg +- data/imagenet-r/n02056570/deviantart_10.jpg +- data/imagenet-r/n04536866/cartoon_0.jpg +- data/imagenet-r/n01843383/painting_49.jpg +- data/imagenet-r/n02236044/tattoo_15.jpg +- data/imagenet-r/n02395406/art_15.jpg +- data/imagenet-r/n04591713/graffiti_1.jpg +- data/imagenet-r/n02206856/graffiti_43.jpg +- data/imagenet-r/n02445715/painting_12.jpg +- data/imagenet-r/n01644373/art_6.jpg +- data/imagenet-r/n02236044/misc_3.jpg +- data/imagenet-r/n02129165/cartoon_13.jpg +- data/imagenet-r/n01774750/origami_0.jpg +- data/imagenet-r/n04389033/sketch_19.jpg +- data/imagenet-r/n07697537/misc_39.jpg +- data/imagenet-r/n02071294/deviantart_22.jpg +- data/imagenet-r/n07742313/toy_2.jpg +- data/imagenet-r/n07920052/sketch_5.jpg +- data/imagenet-r/n02117135/cartoon_9.jpg +- data/imagenet-r/n04310018/painting_20.jpg +- data/imagenet-r/n02447366/sketch_23.jpg +- data/imagenet-r/n04465501/deviantart_2.jpg +- data/imagenet-r/n02906734/cartoon_45.jpg +- data/imagenet-r/n07697537/misc_82.jpg +- data/imagenet-r/n02948072/sketch_0.jpg +- data/imagenet-r/n02086240/misc_46.jpg +- data/imagenet-r/n02071294/origami_3.jpg +- data/imagenet-r/n02447366/painting_7.jpg +- data/imagenet-r/n02138441/graffiti_11.jpg +- data/imagenet-r/n01484850/toy_9.jpg +- data/imagenet-r/n02094433/sketch_10.jpg +- data/imagenet-r/n02423022/origami_2.jpg +- data/imagenet-r/n04254680/videogame_28.jpg +- data/imagenet-r/n04133789/graphic_0.jpg +- data/imagenet-r/n03481172/sketch_19.jpg +- data/imagenet-r/n04389033/origami_10.jpg +- data/imagenet-r/n01531178/painting_14.jpg +- data/imagenet-r/n01443537/painting_32.jpg +- data/imagenet-r/n02129604/tattoo_48.jpg +- data/imagenet-r/n02206856/sketch_21.jpg +- data/imagenet-r/n01770393/cartoon_3.jpg +- data/imagenet-r/n02980441/cartoon_10.jpg +- data/imagenet-r/n01616318/sketch_0.jpg +- data/imagenet-r/n02110185/sketch_3.jpg +- data/imagenet-r/n02410509/misc_8.jpg +- data/imagenet-r/n02129604/deviantart_2.jpg +- data/imagenet-r/n02110185/graphic_0.jpg +- data/imagenet-r/n03594945/painting_2.jpg +- data/imagenet-r/n02106550/sketch_19.jpg +- data/imagenet-r/n02099712/misc_22.jpg +- data/imagenet-r/n04389033/videogame_9.jpg +- data/imagenet-r/n01860187/origami_5.jpg +- data/imagenet-r/n03947888/videogame_4.jpg +- data/imagenet-r/n02108915/sketch_0.jpg +- data/imagenet-r/n01694178/graffiti_2.jpg +- data/imagenet-r/n04310018/deviantart_11.jpg +- data/imagenet-r/n02802426/videogame_15.jpg +- data/imagenet-r/n01616318/deviantart_12.jpg +- data/imagenet-r/n04133789/cartoon_25.jpg +- data/imagenet-r/n02113799/misc_27.jpg +- data/imagenet-r/n02480855/sculpture_18.jpg +- data/imagenet-r/n04275548/misc_7.jpg +- data/imagenet-r/n02437616/sketch_17.jpg +- data/imagenet-r/n02099601/sketch_9.jpg +- data/imagenet-r/n04146614/toy_23.jpg +- data/imagenet-r/n03424325/misc_13.jpg +- data/imagenet-r/n02701002/toy_26.jpg +- data/imagenet-r/n01847000/graphic_4.jpg +- data/imagenet-r/n03372029/painting_7.jpg +- data/imagenet-r/n03452741/painting_9.jpg +- data/imagenet-r/n01614925/graphic_1.jpg +- data/imagenet-r/n03124170/tattoo_6.jpg +- data/imagenet-r/n02110341/deviantart_11.jpg +- data/imagenet-r/n02364673/sketch_20.jpg +- data/imagenet-r/n04146614/toy_17.jpg +- data/imagenet-r/n02951358/sketch_0.jpg +- data/imagenet-r/n01882714/deviantart_0.jpg +- data/imagenet-r/n02906734/misc_3.jpg +- data/imagenet-r/n02009912/misc_32.jpg +- data/imagenet-r/n01770393/painting_6.jpg +- data/imagenet-r/n07697313/deviantart_40.jpg +- data/imagenet-r/n01833805/tattoo_91.jpg +- data/imagenet-r/n02119022/misc_150.jpg +- data/imagenet-r/n09835506/misc_33.jpg +- data/imagenet-r/n02219486/misc_12.jpg +- data/imagenet-r/n04192698/videogame_2.jpg +- data/imagenet-r/n03649909/misc_1.jpg +- data/imagenet-r/n02219486/graffiti_10.jpg +- data/imagenet-r/n02129604/sculpture_0.jpg +- data/imagenet-r/n01882714/misc_1.jpg +- data/imagenet-r/n01748264/deviantart_4.jpg +- data/imagenet-r/n02395406/sculpture_20.jpg +- data/imagenet-r/n04310018/graphic_1.jpg +- data/imagenet-r/n07734744/graffiti_24.jpg +- data/imagenet-r/n02109525/sketch_8.jpg +- data/imagenet-r/n01910747/cartoon_24.jpg +- data/imagenet-r/n02226429/tattoo_2.jpg +- data/imagenet-r/n02112137/misc_13.jpg +- data/imagenet-r/n02951358/embroidery_3.jpg +- data/imagenet-r/n02190166/graffiti_2.jpg +- data/imagenet-r/n04536866/painting_22.jpg +- data/imagenet-r/n02110958/embroidery_0.jpg +- data/imagenet-r/n01443537/cartoon_38.jpg +- data/imagenet-r/n03124170/art_5.jpg +- data/imagenet-r/n01644373/embroidery_0.jpg +- data/imagenet-r/n03494278/cartoon_15.jpg +- data/imagenet-r/n07614500/videogame_10.jpg +- data/imagenet-r/n02106662/misc_69.jpg +- data/imagenet-r/n02410509/cartoon_25.jpg +- data/imagenet-r/n01833805/painting_26.jpg +- data/imagenet-r/n02219486/embroidery_1.jpg +- data/imagenet-r/n02236044/origami_2.jpg +- data/imagenet-r/n02088238/sketch_10.jpg +- data/imagenet-r/n01944390/misc_109.jpg +- data/imagenet-r/n02672831/cartoon_16.jpg +- data/imagenet-r/n01944390/misc_53.jpg +- data/imagenet-r/n01843383/cartoon_37.jpg +- data/imagenet-r/n02129165/embroidery_18.jpg +- data/imagenet-r/n02481823/art_14.jpg +- data/imagenet-r/n03773504/videogame_11.jpg +- data/imagenet-r/n02206856/cartoon_15.jpg +- data/imagenet-r/n01843383/sticker_0.jpg +- data/imagenet-r/n04275548/videogame_4.jpg +- data/imagenet-r/n04465501/deviantart_13.jpg +- data/imagenet-r/n02607072/misc_71.jpg +- data/imagenet-r/n02279972/painting_35.jpg +- data/imagenet-r/n02395406/misc_25.jpg +- data/imagenet-r/n02655020/videogame_1.jpg +- data/imagenet-r/n03602883/misc_57.jpg +- data/imagenet-r/n04591713/painting_27.jpg +- data/imagenet-r/n01882714/art_11.jpg +- data/imagenet-r/n01882714/sketch_14.jpg +- data/imagenet-r/n03372029/art_1.jpg +- data/imagenet-r/n03272010/painting_5.jpg +- data/imagenet-r/n02510455/sketch_14.jpg +- data/imagenet-r/n01882714/misc_7.jpg +- data/imagenet-r/n02094433/misc_37.jpg +- data/imagenet-r/n01484850/cartoon_14.jpg +- data/imagenet-r/n07714990/sketch_10.jpg +- data/imagenet-r/n01882714/toy_3.jpg +- data/imagenet-r/n01770393/cartoon_12.jpg +- data/imagenet-r/n02110341/sketch_14.jpg +- data/imagenet-r/n03467068/toy_1.jpg +- data/imagenet-r/n04266014/graphic_2.jpg +- data/imagenet-r/n02138441/sketch_16.jpg +- data/imagenet-r/n07768694/deviantart_2.jpg +- data/imagenet-r/n03594945/videogame_11.jpg +- data/imagenet-r/n01882714/sculpture_16.jpg +- data/imagenet-r/n02106030/art_11.jpg +- data/imagenet-r/n01882714/toy_4.jpg +- data/imagenet-r/n02106030/cartoon_3.jpg +- data/imagenet-r/n02112018/sketch_7.jpg +- data/imagenet-r/n01632777/deviantart_19.jpg +- data/imagenet-r/n02007558/embroidery_8.jpg +- data/imagenet-r/n02123045/cartoon_25.jpg +- data/imagenet-r/n02526121/sketch_10.jpg +- data/imagenet-r/n02102318/misc_16.jpg +- data/imagenet-r/n02346627/sketch_15.jpg +- data/imagenet-r/n02268443/misc_59.jpg +- data/imagenet-r/n02607072/misc_117.jpg +- data/imagenet-r/n03888257/cartoon_26.jpg +- data/imagenet-r/n01518878/cartoon_13.jpg +- data/imagenet-r/n01614925/painting_9.jpg +- data/imagenet-r/n02096585/misc_124.jpg +- data/imagenet-r/n02206856/cartoon_54.jpg +- data/imagenet-r/n01614925/sketch_21.jpg +- data/imagenet-r/n02486410/tattoo_3.jpg +- data/imagenet-r/n07697537/misc_53.jpg +- data/imagenet-r/n01774750/sketch_17.jpg +- data/imagenet-r/n04465501/art_2.jpg +- data/imagenet-r/n02110341/misc_19.jpg +- data/imagenet-r/n02123045/art_2.jpg +- data/imagenet-r/n01614925/tattoo_26.jpg +- data/imagenet-r/n01843383/tattoo_0.jpg +- data/imagenet-r/n02526121/sculpture_18.jpg +- data/imagenet-r/n01833805/deviantart_3.jpg +- data/imagenet-r/n02206856/cartoon_39.jpg +- data/imagenet-r/n02088094/misc_10.jpg +- data/imagenet-r/n02672831/painting_8.jpg +- data/imagenet-r/n02071294/painting_13.jpg +- data/imagenet-r/n01843383/painting_52.jpg +- data/imagenet-r/n07714990/art_0.jpg +- data/imagenet-r/n03888257/cartoon_30.jpg +- data/imagenet-r/n07734744/videogame_26.jpg +- data/imagenet-r/n03124170/tattoo_13.jpg +- data/imagenet-r/n01843383/toy_0.jpg +- data/imagenet-r/n02480855/cartoon_14.jpg +- data/imagenet-r/n02480855/toy_6.jpg +- data/imagenet-r/n02106662/sketch_18.jpg +- data/imagenet-r/n02395406/painting_7.jpg +- data/imagenet-r/n02423022/sketch_15.jpg +- data/imagenet-r/n07695742/cartoon_8.jpg +- data/imagenet-r/n02672831/sticker_4.jpg +- data/imagenet-r/n02091032/sketch_1.jpg +- data/imagenet-r/n02607072/misc_36.jpg +- data/imagenet-r/n02483362/sketch_10.jpg +- data/imagenet-r/n03481172/sculpture_6.jpg +- data/imagenet-r/n03124170/toy_17.jpg +- data/imagenet-r/n01484850/sketch_20.jpg +- data/imagenet-r/n02108089/tattoo_2.jpg +- data/imagenet-r/n01443537/videogame_11.jpg +- data/imagenet-r/n04552348/sketch_0.jpg +- data/imagenet-r/n04536866/painting_5.jpg +- data/imagenet-r/n04086273/videogame_13.jpg +- data/imagenet-r/n02096585/misc_1.jpg +- data/imagenet-r/n04389033/misc_9.jpg +- data/imagenet-r/n02423022/graphic_2.jpg +- data/imagenet-r/n07695742/sketch_3.jpg +- data/imagenet-r/n02226429/cartoon_7.jpg +- data/imagenet-r/n02672831/art_1.jpg +- data/imagenet-r/n02317335/cartoon_18.jpg +- data/imagenet-r/n04266014/misc_7.jpg +- data/imagenet-r/n02206856/origami_3.jpg +- data/imagenet-r/n04118538/cartoon_28.jpg +- data/imagenet-r/n02480495/painting_23.jpg +- data/imagenet-r/n03775071/sketch_17.jpg +- data/imagenet-r/n07697313/sculpture_3.jpg +- data/imagenet-r/n04536866/videogame_2.jpg +- data/imagenet-r/n02123045/painting_26.jpg +- data/imagenet-r/n01944390/misc_106.jpg +- data/imagenet-r/n02123045/painting_27.jpg +- data/imagenet-r/n02802426/tattoo_10.jpg +- data/imagenet-r/n02437616/cartoon_22.jpg +- data/imagenet-r/n04086273/tattoo_10.jpg +- data/imagenet-r/n03888257/painting_1.jpg +- data/imagenet-r/n03424325/videogame_13.jpg +- data/imagenet-r/n03498962/graphic_0.jpg +- data/imagenet-r/n04275548/sketch_15.jpg +- data/imagenet-r/n02948072/misc_11.jpg +- data/imagenet-r/n02096585/misc_5.jpg +- data/imagenet-r/n03888257/art_13.jpg +- data/imagenet-r/n02510455/deviantart_15.jpg +- data/imagenet-r/n04325704/deviantart_10.jpg +- data/imagenet-r/n02346627/painting_12.jpg +- data/imagenet-r/n02206856/sticker_10.jpg +- data/imagenet-r/n02948072/cartoon_27.jpg +- data/imagenet-r/n02106662/misc_25.jpg +- data/imagenet-r/n02110185/graphic_6.jpg +- data/imagenet-r/n04465501/toy_16.jpg +- data/imagenet-r/n02410509/origami_5.jpg +- data/imagenet-r/n09472597/sketch_29.jpg +- data/imagenet-r/n07714571/painting_7.jpg +- data/imagenet-r/n02655020/misc_54.jpg +- data/imagenet-r/n02106662/misc_16.jpg +- data/imagenet-r/n04254680/videogame_24.jpg +- data/imagenet-r/n02106030/sketch_10.jpg +- data/imagenet-r/n03498962/cartoon_18.jpg +- data/imagenet-r/n03594945/cartoon_12.jpg +- data/imagenet-r/n04254680/sketch_11.jpg +- data/imagenet-r/n01847000/cartoon_13.jpg +- data/imagenet-r/n02091134/misc_48.jpg +- data/imagenet-r/n04389033/sketch_25.jpg +- data/imagenet-r/n07880968/deviantart_10.jpg +- data/imagenet-r/n07734744/graffiti_17.jpg +- data/imagenet-r/n02510455/misc_54.jpg +- data/imagenet-r/n01484850/sketch_14.jpg +- data/imagenet-r/n03775071/graffiti_0.jpg +- data/imagenet-r/n02802426/videogame_3.jpg +- data/imagenet-r/n02364673/graphic_2.jpg +- data/imagenet-r/n02883205/sculpture_0.jpg +- data/imagenet-r/n01748264/misc_18.jpg +- data/imagenet-r/n01882714/sketch_13.jpg +- data/imagenet-r/n03930630/misc_11.jpg +- data/imagenet-r/n09835506/painting_0.jpg +- data/imagenet-r/n02814860/embroidery_10.jpg +- data/imagenet-r/n07734744/graffiti_34.jpg +- data/imagenet-r/n01774750/tattoo_17.jpg +- data/imagenet-r/n09835506/videogame_26.jpg +- data/imagenet-r/n02814860/painting_27.jpg +- data/imagenet-r/n12267677/sketch_19.jpg +- data/imagenet-r/n04522168/art_1.jpg +- data/imagenet-r/n02395406/misc_17.jpg +- data/imagenet-r/n03602883/misc_34.jpg +- data/imagenet-r/n02071294/cartoon_21.jpg +- data/imagenet-r/n02909870/sketch_15.jpg +- data/imagenet-r/n02085620/sketch_6.jpg +- data/imagenet-r/n04192698/deviantart_17.jpg +- data/imagenet-r/n02009912/misc_22.jpg +- data/imagenet-r/n04310018/painting_14.jpg +- data/imagenet-r/n02130308/tattoo_12.jpg +- data/imagenet-r/n04310018/videogame_21.jpg +- data/imagenet-r/n03594945/cartoon_0.jpg +- data/imagenet-r/n02071294/cartoon_3.jpg +- data/imagenet-r/n02950826/videogame_4.jpg +- data/imagenet-r/n02233338/sketch_5.jpg +- data/imagenet-r/n04487394/cartoon_4.jpg +- data/imagenet-r/n01644373/deviantart_24.jpg +- data/imagenet-r/n02056570/painting_3.jpg +- data/imagenet-r/n01748264/tattoo_2.jpg +- data/imagenet-r/n01484850/art_1.jpg +- data/imagenet-r/n03775071/art_0.jpg +- data/imagenet-r/n02980441/cartoon_21.jpg +- data/imagenet-r/n02097298/sketch_22.jpg +- data/imagenet-r/n03947888/videogame_24.jpg +- data/imagenet-r/n01644373/painting_36.jpg +- data/imagenet-r/n02814860/misc_2.jpg +- data/imagenet-r/n02219486/graffiti_11.jpg +- data/imagenet-r/n02051845/painting_15.jpg +- data/imagenet-r/n02009912/misc_0.jpg +- data/imagenet-r/n02510455/misc_99.jpg +- data/imagenet-r/n02701002/art_4.jpg +- data/imagenet-r/n01632777/videogame_4.jpg +- data/imagenet-r/n02526121/cartoon_6.jpg +- data/imagenet-r/n12267677/misc_106.jpg +- data/imagenet-r/n04409515/videogame_1.jpg +- data/imagenet-r/n02317335/tattoo_21.jpg +- data/imagenet-r/n02092339/misc_38.jpg +- data/imagenet-r/n07734744/toy_37.jpg +- data/imagenet-r/n02410509/cartoon_14.jpg +- data/imagenet-r/n04347754/videogame_23.jpg +- data/imagenet-r/n01616318/graphic_4.jpg +- data/imagenet-r/n02672831/cartoon_2.jpg +- data/imagenet-r/n02236044/tattoo_24.jpg +- data/imagenet-r/n01484850/deviantart_13.jpg +- data/imagenet-r/n12267677/misc_1.jpg +- data/imagenet-r/n03947888/graffiti_1.jpg +- data/imagenet-r/n02814860/painting_18.jpg +- data/imagenet-r/n02009912/sketch_11.jpg +- data/imagenet-r/n03630383/cartoon_0.jpg +- data/imagenet-r/n02138441/toy_6.jpg +- data/imagenet-r/n02206856/cartoon_2.jpg +- data/imagenet-r/n02980441/sketch_11.jpg +- data/imagenet-r/n02701002/toy_14.jpg +- data/imagenet-r/n02007558/graffiti_0.jpg +- data/imagenet-r/n07768694/painting_7.jpg +- data/imagenet-r/n04275548/painting_6.jpg +- data/imagenet-r/n07745940/toy_22.jpg +- data/imagenet-r/n02096585/misc_186.jpg +- data/imagenet-r/n02655020/misc_97.jpg +- data/imagenet-r/n03124170/sketch_6.jpg +- data/imagenet-r/n02701002/graphic_0.jpg +- data/imagenet-r/n02119022/misc_45.jpg +- data/imagenet-r/n02356798/sketch_12.jpg +- data/imagenet-r/n04465501/sketch_3.jpg +- data/imagenet-r/n01843383/cartoon_15.jpg +- data/imagenet-r/n02437616/sculpture_0.jpg +- data/imagenet-r/n02655020/misc_94.jpg +- data/imagenet-r/n02672831/sketch_19.jpg +- data/imagenet-r/n04347754/tattoo_13.jpg +- data/imagenet-r/n01518878/sketch_5.jpg +- data/imagenet-r/n03888257/sketch_16.jpg +- data/imagenet-r/n03481172/toy_18.jpg +- data/imagenet-r/n09472597/deviantart_10.jpg +- data/imagenet-r/n03775071/cartoon_7.jpg +- data/imagenet-r/n02814860/painting_39.jpg +- data/imagenet-r/n02110341/misc_104.jpg +- data/imagenet-r/n01860187/graphic_3.jpg +- data/imagenet-r/n04275548/videogame_6.jpg +- data/imagenet-r/n03649909/art_2.jpg +- data/imagenet-r/n02802426/tattoo_7.jpg +- data/imagenet-r/n02165456/toy_11.jpg +- data/imagenet-r/n02110958/sticker_3.jpg +- data/imagenet-r/n04409515/videogame_10.jpg +- data/imagenet-r/n04552348/art_7.jpg +- data/imagenet-r/n03888257/videogame_10.jpg +- data/imagenet-r/n01806143/cartoon_5.jpg +- data/imagenet-r/n02129165/painting_7.jpg +- data/imagenet-r/n04146614/toy_24.jpg +- data/imagenet-r/n02356798/art_2.jpg +- data/imagenet-r/n02110958/toy_3.jpg +- data/imagenet-r/n04465501/tattoo_1.jpg +- data/imagenet-r/n01944390/deviantart_1.jpg +- data/imagenet-r/n12267677/misc_37.jpg +- data/imagenet-r/n02085620/misc_6.jpg +- data/imagenet-r/n02099712/misc_28.jpg +- data/imagenet-r/n03888257/graffiti_6.jpg +- data/imagenet-r/n03424325/sketch_8.jpg +- data/imagenet-r/n09472597/graphic_3.jpg +- data/imagenet-r/n02802426/cartoon_5.jpg +- data/imagenet-r/n01855672/misc_0.jpg +- data/imagenet-r/n02129604/embroidery_2.jpg +- data/imagenet-r/n02128385/art_2.jpg +- data/imagenet-r/n02165456/toy_23.jpg +- data/imagenet-r/n02980441/origami_0.jpg +- data/imagenet-r/n07873807/toy_13.jpg +- data/imagenet-r/n01784675/deviantart_2.jpg +- data/imagenet-r/n01843383/art_25.jpg +- data/imagenet-r/n02113624/misc_15.jpg +- data/imagenet-r/n02129165/tattoo_20.jpg +- data/imagenet-r/n03888257/cartoon_6.jpg +- data/imagenet-r/n02085620/misc_38.jpg +- data/imagenet-r/n02099601/misc_34.jpg +- data/imagenet-r/n01616318/tattoo_28.jpg +- data/imagenet-r/n02129604/sketch_13.jpg +- data/imagenet-r/n02486410/sculpture_4.jpg +- data/imagenet-r/n04192698/sketch_1.jpg +- data/imagenet-r/n03773504/art_5.jpg +- data/imagenet-r/n02106550/misc_13.jpg +- data/imagenet-r/n02398521/painting_15.jpg +- data/imagenet-r/n02129165/cartoon_29.jpg +- data/imagenet-r/n02096585/misc_196.jpg +- data/imagenet-r/n02007558/tattoo_61.jpg +- data/imagenet-r/n04552348/deviantart_9.jpg +- data/imagenet-r/n07697313/deviantart_24.jpg +- data/imagenet-r/n04118538/cartoon_32.jpg +- data/imagenet-r/n02802426/videogame_7.jpg +- data/imagenet-r/n02395406/toy_17.jpg +- data/imagenet-r/n01833805/sketch_5.jpg +- data/imagenet-r/n02007558/tattoo_0.jpg +- data/imagenet-r/n02437616/sticker_0.jpg +- data/imagenet-r/n07614500/videogame_7.jpg +- data/imagenet-r/n02797295/misc_75.jpg +- data/imagenet-r/n02106166/cartoon_4.jpg +- data/imagenet-r/n03494278/sketch_9.jpg +- data/imagenet-r/n07745940/misc_21.jpg +- data/imagenet-r/n02051845/cartoon_3.jpg +- data/imagenet-r/n01498041/cartoon_14.jpg +- data/imagenet-r/n02071294/graphic_1.jpg +- data/imagenet-r/n01632777/toy_8.jpg +- data/imagenet-r/n01531178/painting_19.jpg +- data/imagenet-r/n04192698/misc_0.jpg +- data/imagenet-r/n02138441/sculpture_11.jpg +- data/imagenet-r/n01910747/tattoo_58.jpg +- data/imagenet-r/n01847000/painting_0.jpg +- data/imagenet-r/n02395406/misc_4.jpg +- data/imagenet-r/n02106662/misc_0.jpg +- data/imagenet-r/n02841315/sculpture_2.jpg +- data/imagenet-r/n02112137/sketch_8.jpg +- data/imagenet-r/n04118538/videogame_3.jpg +- data/imagenet-r/n02206856/graffiti_2.jpg +- data/imagenet-r/n02071294/art_9.jpg +- data/imagenet-r/n02966193/sketch_10.jpg +- data/imagenet-r/n04086273/tattoo_12.jpg +- data/imagenet-r/n07695742/deviantart_9.jpg +- data/imagenet-r/n02445715/sketch_11.jpg +- data/imagenet-r/n02445715/toy_4.jpg +- data/imagenet-r/n02364673/misc_6.jpg +- data/imagenet-r/n04086273/tattoo_33.jpg +- data/imagenet-r/n01843383/deviantart_98.jpg +- data/imagenet-r/n02808440/painting_13.jpg +- data/imagenet-r/n02091134/misc_45.jpg +- data/imagenet-r/n03930630/toy_15.jpg +- data/imagenet-r/n01944390/misc_33.jpg +- data/imagenet-r/n01774750/deviantart_4.jpg +- data/imagenet-r/n02395406/sticker_8.jpg +- data/imagenet-r/n03481172/cartoon_18.jpg +- data/imagenet-r/n02114367/misc_11.jpg +- data/imagenet-r/n02481823/deviantart_19.jpg +- data/imagenet-r/n02102318/sketch_20.jpg +- data/imagenet-r/n04536866/painting_13.jpg +- data/imagenet-r/n01847000/embroidery_10.jpg +- data/imagenet-r/n04487394/cartoon_8.jpg +- data/imagenet-r/n07745940/origami_13.jpg +- data/imagenet-r/n01518878/sticker_0.jpg +- data/imagenet-r/n03272010/painting_0.jpg +- data/imagenet-r/n07749582/painting_3.jpg +- data/imagenet-r/n01443537/embroidery_11.jpg +- data/imagenet-r/n02108915/misc_25.jpg +- data/imagenet-r/n07720875/painting_27.jpg +- data/imagenet-r/n04536866/graffiti_1.jpg +- data/imagenet-r/n04536866/sculpture_7.jpg +- data/imagenet-r/n02423022/cartoon_1.jpg +- data/imagenet-r/n01531178/painting_35.jpg +- data/imagenet-r/n01986214/sculpture_4.jpg +- data/imagenet-r/n07749582/toy_4.jpg +- data/imagenet-r/n12267677/deviantart_2.jpg +- data/imagenet-r/n02085620/misc_5.jpg +- data/imagenet-r/n03498962/sketch_7.jpg +- data/imagenet-r/n07718472/painting_7.jpg +- data/imagenet-r/n02841315/graphic_0.jpg +- data/imagenet-r/n07753592/misc_176.jpg +- data/imagenet-r/n02129165/deviantart_27.jpg +- data/imagenet-r/n02802426/cartoon_18.jpg +- data/imagenet-r/n02906734/sketch_13.jpg +- data/imagenet-r/n02110341/sketch_9.jpg +- data/imagenet-r/n02793495/sketch_19.jpg +- data/imagenet-r/n02110341/deviantart_18.jpg +- data/imagenet-r/n02814860/art_0.jpg +- data/imagenet-r/n03594945/misc_21.jpg +- data/imagenet-r/n02129165/tattoo_23.jpg +- data/imagenet-r/n01518878/painting_13.jpg +- data/imagenet-r/n03481172/toy_10.jpg +- data/imagenet-r/n02130308/art_9.jpg +- data/imagenet-r/n02226429/graffiti_4.jpg +- data/imagenet-r/n04086273/graffiti_4.jpg +- data/imagenet-r/n02138441/cartoon_12.jpg +- data/imagenet-r/n04254680/cartoon_8.jpg +- data/imagenet-r/n02128757/cartoon_12.jpg +- data/imagenet-r/n01630670/painting_6.jpg +- data/imagenet-r/n01770393/cartoon_0.jpg +- data/imagenet-r/n02802426/painting_0.jpg +- data/imagenet-r/n01514859/deviantart_23.jpg +- data/imagenet-r/n07693725/deviantart_6.jpg +- data/imagenet-r/n02190166/art_0.jpg +- data/imagenet-r/n04141076/cartoon_40.jpg +- data/imagenet-r/n02607072/misc_95.jpg +- data/imagenet-r/n02948072/sketch_33.jpg +- data/imagenet-r/n04591713/sketch_4.jpg +- data/imagenet-r/n02486410/painting_8.jpg +- data/imagenet-r/n01748264/misc_6.jpg +- data/imagenet-r/n02655020/misc_29.jpg +- data/imagenet-r/n04409515/sketch_5.jpg +- data/imagenet-r/n02096585/misc_177.jpg +- data/imagenet-r/n01494475/misc_106.jpg +- data/imagenet-r/n02909870/graphic_16.jpg +- data/imagenet-r/n03888257/graffiti_10.jpg +- data/imagenet-r/n07720875/cartoon_7.jpg +- data/imagenet-r/n07749582/deviantart_13.jpg +- data/imagenet-r/n04310018/sketch_0.jpg +- data/imagenet-r/n02814860/sticker_0.jpg +- data/imagenet-r/n02091134/misc_63.jpg +- data/imagenet-r/n02066245/sketch_2.jpg +- data/imagenet-r/n07614500/tattoo_0.jpg +- data/imagenet-r/n02395406/misc_11.jpg +- data/imagenet-r/n01632777/sketch_3.jpg +- data/imagenet-r/n07734744/art_16.jpg +- data/imagenet-r/n02480495/art_8.jpg +- data/imagenet-r/n07693725/sketch_1.jpg +- data/imagenet-r/n02112137/misc_26.jpg +- data/imagenet-r/n07880968/sketch_13.jpg +- data/imagenet-r/n07693725/cartoon_26.jpg +- data/imagenet-r/n01531178/embroidery_0.jpg +- data/imagenet-r/n02841315/sketch_10.jpg +- data/imagenet-r/n02510455/sketch_10.jpg +- data/imagenet-r/n02099601/misc_5.jpg +- data/imagenet-r/n01910747/cartoon_1.jpg +- data/imagenet-r/n04118538/graphic_0.jpg +- data/imagenet-r/n07873807/videogame_10.jpg +- data/imagenet-r/n04086273/sticker_7.jpg +- data/imagenet-r/n02091134/sketch_11.jpg +- data/imagenet-r/n01518878/cartoon_6.jpg +- data/imagenet-r/n04310018/cartoon_6.jpg +- data/imagenet-r/n02483362/sketch_25.jpg +- data/imagenet-r/n03947888/tattoo_27.jpg +- data/imagenet-r/n02129165/sculpture_17.jpg +- data/imagenet-r/n02226429/sculpture_3.jpg +- data/imagenet-r/n02480495/art_3.jpg +- data/imagenet-r/n07734744/graffiti_18.jpg +- data/imagenet-r/n02007558/tattoo_16.jpg +- data/imagenet-r/n02268443/misc_133.jpg +- data/imagenet-r/n02802426/painting_6.jpg +- data/imagenet-r/n07749582/painting_17.jpg +- data/imagenet-r/n04086273/tattoo_7.jpg +- data/imagenet-r/n02165456/sticker_2.jpg +- data/imagenet-r/n04389033/sketch_7.jpg +- data/imagenet-r/n02363005/tattoo_9.jpg +- data/imagenet-r/n02445715/sketch_19.jpg +- data/imagenet-r/n09472597/graffiti_1.jpg +- data/imagenet-r/n07745940/painting_22.jpg +- data/imagenet-r/n02088094/misc_23.jpg +- data/imagenet-r/n04389033/sketch_29.jpg +- data/imagenet-r/n01632777/sculpture_2.jpg +- data/imagenet-r/n01484850/origami_4.jpg +- data/imagenet-r/n04310018/toy_23.jpg +- data/imagenet-r/n07873807/sketch_20.jpg +- data/imagenet-r/n02106030/cartoon_8.jpg +- data/imagenet-r/n01644373/painting_21.jpg +- data/imagenet-r/n02129604/toy_13.jpg +- data/imagenet-r/n02206856/toy_5.jpg +- data/imagenet-r/n02165456/sketch_15.jpg +- data/imagenet-r/n02226429/painting_13.jpg +- data/imagenet-r/n12267677/misc_31.jpg +- data/imagenet-r/n07753592/misc_159.jpg +- data/imagenet-r/n02099601/videogame_0.jpg +- data/imagenet-r/n04192698/toy_4.jpg +- data/imagenet-r/n02106166/misc_8.jpg +- data/imagenet-r/n04254680/sketch_12.jpg +- data/imagenet-r/n01986214/cartoon_11.jpg +- data/imagenet-r/n02206856/origami_7.jpg +- data/imagenet-r/n02071294/deviantart_31.jpg +- data/imagenet-r/n02119022/misc_28.jpg +- data/imagenet-r/n02279972/art_9.jpg +- data/imagenet-r/n02219486/sketch_21.jpg +- data/imagenet-r/n02123045/painting_62.jpg +- data/imagenet-r/n01644373/painting_0.jpg +- data/imagenet-r/n01518878/cartoon_62.jpg +- data/imagenet-r/n02346627/cartoon_6.jpg +- data/imagenet-r/n02071294/cartoon_11.jpg +- data/imagenet-r/n02447366/sketch_5.jpg +- data/imagenet-r/n02085620/misc_40.jpg +- data/imagenet-r/n02106662/misc_70.jpg +- data/imagenet-r/n01833805/painting_36.jpg +- data/imagenet-r/n02410509/cartoon_0.jpg +- data/imagenet-r/n02279972/sticker_0.jpg +- data/imagenet-r/n02749479/videogame_3.jpg +- data/imagenet-r/n01770393/cartoon_24.jpg +- data/imagenet-r/n03124170/graffiti_2.jpg +- data/imagenet-r/n02110185/sculpture_3.jpg +- data/imagenet-r/n01843383/cartoon_35.jpg +- data/imagenet-r/n07753592/misc_183.jpg +- data/imagenet-r/n01843383/sculpture_8.jpg +- data/imagenet-r/n02088364/misc_66.jpg +- data/imagenet-r/n02769748/graphic_0.jpg +- data/imagenet-r/n02437616/painting_8.jpg +- data/imagenet-r/n02113624/sketch_13.jpg +- data/imagenet-r/n02325366/misc_53.jpg +- data/imagenet-r/n01770393/tattoo_25.jpg +- data/imagenet-r/n01770393/sketch_14.jpg +- data/imagenet-r/n02130308/sketch_10.jpg +- data/imagenet-r/n07753592/misc_23.jpg +- data/imagenet-r/n03630383/cartoon_22.jpg +- data/imagenet-r/n02483362/painting_0.jpg +- data/imagenet-r/n02086240/misc_34.jpg +- data/imagenet-r/n02814860/painting_23.jpg +- data/imagenet-r/n02769748/sketch_6.jpg +- data/imagenet-r/n02317335/painting_4.jpg +- data/imagenet-r/n03424325/misc_39.jpg +- data/imagenet-r/n10565667/deviantart_5.jpg +- data/imagenet-r/n04522168/videogame_5.jpg +- data/imagenet-r/n01534433/painting_16.jpg +- data/imagenet-r/n02980441/sketch_15.jpg +- data/imagenet-r/n07718472/misc_1.jpg +- data/imagenet-r/n07697537/misc_109.jpg +- data/imagenet-r/n04275548/misc_5.jpg +- data/imagenet-r/n04389033/deviantart_22.jpg +- data/imagenet-r/n04389033/origami_1.jpg +- data/imagenet-r/n07742313/sketch_2.jpg +- data/imagenet-r/n02007558/art_16.jpg +- data/imagenet-r/n01944390/tattoo_11.jpg +- data/imagenet-r/n01484850/videogame_5.jpg +- data/imagenet-r/n01986214/origami_0.jpg +- data/imagenet-r/n07734744/sculpture_6.jpg +- data/imagenet-r/n02814860/videogame_5.jpg +- data/imagenet-r/n02106662/misc_22.jpg +- data/imagenet-r/n07768694/painting_28.jpg +- data/imagenet-r/n01514859/painting_37.jpg +- data/imagenet-r/n07693725/toy_1.jpg +- data/imagenet-r/n01855672/misc_7.jpg +- data/imagenet-r/n02108089/misc_27.jpg +- data/imagenet-r/n07768694/painting_25.jpg +- data/imagenet-r/n04254680/tattoo_0.jpg +- data/imagenet-r/n07614500/misc_16.jpg +- data/imagenet-r/n04347754/cartoon_0.jpg +- data/imagenet-r/n02128757/sketch_23.jpg +- data/imagenet-r/n03630383/cartoon_16.jpg +- data/imagenet-r/n02206856/embroidery_8.jpg +- data/imagenet-r/n03272010/embroidery_0.jpg +- data/imagenet-r/n03773504/cartoon_1.jpg +- data/imagenet-r/n02051845/misc_1.jpg +- data/imagenet-r/n07734744/misc_12.jpg +- data/imagenet-r/n02883205/sketch_19.jpg +- data/imagenet-r/n02483362/sketch_26.jpg +- data/imagenet-r/n02906734/toy_3.jpg +- data/imagenet-r/n01632777/cartoon_27.jpg +- data/imagenet-r/n02841315/cartoon_16.jpg +- data/imagenet-r/n02655020/misc_68.jpg +- data/imagenet-r/n02939185/cartoon_14.jpg +- data/imagenet-r/n07697537/videogame_21.jpg +- data/imagenet-r/n02793495/painting_3.jpg +- data/imagenet-r/n02437616/deviantart_3.jpg +- data/imagenet-r/n04487394/sketch_22.jpg +- data/imagenet-r/n02672831/cartoon_29.jpg +- data/imagenet-r/n02268443/misc_172.jpg +- data/imagenet-r/n01847000/videogame_2.jpg +- data/imagenet-r/n02279972/art_14.jpg +- data/imagenet-r/n02088094/misc_50.jpg +- data/imagenet-r/n02948072/cartoon_58.jpg +- data/imagenet-r/n02363005/painting_4.jpg +- data/imagenet-r/n03947888/sticker_0.jpg +- data/imagenet-r/n01694178/cartoon_4.jpg +- data/imagenet-r/n07720875/painting_39.jpg +- data/imagenet-r/n02226429/art_7.jpg +- data/imagenet-r/n04118538/videogame_11.jpg +- data/imagenet-r/n07697313/graphic_0.jpg +- data/imagenet-r/n02112018/sketch_19.jpg +- data/imagenet-r/n02110958/cartoon_11.jpg +- data/imagenet-r/n02346627/embroidery_2.jpg +- data/imagenet-r/n01847000/art_0.jpg +- data/imagenet-r/n02526121/sketch_3.jpg +- data/imagenet-r/n01443537/sketch_9.jpg +- data/imagenet-r/n01944390/deviantart_7.jpg +- data/imagenet-r/n04141076/cartoon_13.jpg +- data/imagenet-r/n01882714/cartoon_43.jpg +- data/imagenet-r/n04389033/graphic_6.jpg +- data/imagenet-r/n02110958/sticker_10.jpg +- data/imagenet-r/n02088238/misc_66.jpg +- data/imagenet-r/n07753275/videogame_16.jpg +- data/imagenet-r/n02437616/deviantart_11.jpg +- data/imagenet-r/n02346627/cartoon_9.jpg +- data/imagenet-r/n02088094/sketch_19.jpg +- data/imagenet-r/n09835506/sculpture_9.jpg +- data/imagenet-r/n04310018/graffiti_3.jpg +- data/imagenet-r/n01632777/deviantart_13.jpg +- data/imagenet-r/n01833805/embroidery_18.jpg +- data/imagenet-r/n01770393/tattoo_54.jpg +- data/imagenet-r/n02325366/sketch_10.jpg +- data/imagenet-r/n01694178/tattoo_2.jpg +- data/imagenet-r/n04266014/videogame_21.jpg +- data/imagenet-r/n04347754/sketch_12.jpg +- data/imagenet-r/n02883205/sketch_13.jpg +- data/imagenet-r/n02966193/misc_1.jpg +- data/imagenet-r/n07745940/graffiti_25.jpg +- data/imagenet-r/n02814860/deviantart_12.jpg +- data/imagenet-r/n02797295/sketch_2.jpg +- data/imagenet-r/n03710193/misc_3.jpg +- data/imagenet-r/n04389033/graffiti_11.jpg +- data/imagenet-r/n02363005/tattoo_2.jpg +- data/imagenet-r/n01514859/toy_4.jpg +- data/imagenet-r/n02110341/misc_58.jpg +- data/imagenet-r/n02480495/cartoon_15.jpg +- data/imagenet-r/n02094433/misc_36.jpg +- data/imagenet-r/n01774750/sculpture_4.jpg +- data/imagenet-r/n02655020/videogame_10.jpg +- data/imagenet-r/n07697313/misc_8.jpg +- data/imagenet-r/n02843684/cartoon_9.jpg +- data/imagenet-r/n07753592/misc_18.jpg +- data/imagenet-r/n04591713/sketch_10.jpg +- data/imagenet-r/n02086240/sketch_4.jpg +- data/imagenet-r/n07718472/painting_11.jpg +- data/imagenet-r/n04310018/sketch_1.jpg +- data/imagenet-r/n02226429/sketch_7.jpg +- data/imagenet-r/n01514859/painting_2.jpg +- data/imagenet-r/n02793495/painting_11.jpg +- data/imagenet-r/n02802426/sketch_21.jpg +- data/imagenet-r/n02486410/cartoon_20.jpg +- data/imagenet-r/n02130308/sculpture_0.jpg +- data/imagenet-r/n02112018/misc_43.jpg +- data/imagenet-r/n02363005/sketch_20.jpg +- data/imagenet-r/n02071294/misc_4.jpg +- data/imagenet-r/n01632777/videogame_5.jpg +- data/imagenet-r/n03930630/sketch_2.jpg +- data/imagenet-r/n01632777/cartoon_6.jpg +- data/imagenet-r/n02086240/sketch_11.jpg +- data/imagenet-r/n02109525/misc_6.jpg +- data/imagenet-r/n02948072/cartoon_23.jpg +- data/imagenet-r/n01677366/sketch_22.jpg +- data/imagenet-r/n02007558/painting_14.jpg +- data/imagenet-r/n04522168/painting_31.jpg +- data/imagenet-r/n02883205/cartoon_16.jpg +- data/imagenet-r/n02236044/cartoon_33.jpg +- data/imagenet-r/n01833805/sketch_4.jpg +- data/imagenet-r/n02447366/cartoon_23.jpg +- data/imagenet-r/n02088238/misc_87.jpg +- data/imagenet-r/n02510455/deviantart_13.jpg +- data/imagenet-r/n01494475/misc_89.jpg +- data/imagenet-r/n02363005/toy_11.jpg +- data/imagenet-r/n07873807/toy_10.jpg +- data/imagenet-r/n01910747/tattoo_3.jpg +- data/imagenet-r/n04522168/cartoon_24.jpg +- data/imagenet-r/n02096585/sketch_1.jpg +- data/imagenet-r/n03649909/sketch_4.jpg +- data/imagenet-r/n01774750/sketch_21.jpg +- data/imagenet-r/n02325366/misc_12.jpg +- data/imagenet-r/n02948072/embroidery_4.jpg +- data/imagenet-r/n02106166/misc_1.jpg +- data/imagenet-r/n03630383/cartoon_26.jpg +- data/imagenet-r/n01843383/deviantart_21.jpg +- data/imagenet-r/n02823750/sketch_17.jpg +- data/imagenet-r/n01632777/painting_8.jpg +- data/imagenet-r/n02086240/misc_5.jpg +- data/imagenet-r/n01910747/painting_15.jpg +- data/imagenet-r/n02110341/misc_74.jpg +- data/imagenet-r/n10565667/toy_5.jpg +- data/imagenet-r/n04141076/sculpture_11.jpg +- data/imagenet-r/n02841315/art_6.jpg +- data/imagenet-r/n04465501/videogame_27.jpg +- data/imagenet-r/n02607072/misc_46.jpg +- data/imagenet-r/n02007558/painting_19.jpg +- data/imagenet-r/n01910747/sticker_5.jpg +- data/imagenet-r/n01770393/deviantart_1.jpg +- data/imagenet-r/n02398521/sculpture_11.jpg +- data/imagenet-r/n02110185/tattoo_12.jpg +- data/imagenet-r/n02165456/toy_28.jpg +- data/imagenet-r/n01694178/sketch_13.jpg +- data/imagenet-r/n02110958/tattoo_35.jpg +- data/imagenet-r/n02110341/deviantart_16.jpg +- data/imagenet-r/n01443537/deviantart_16.jpg +- data/imagenet-r/n01644373/cartoon_21.jpg +- data/imagenet-r/n03930630/toy_8.jpg +- data/imagenet-r/n07734744/embroidery_24.jpg +- data/imagenet-r/n02486410/sketch_7.jpg +- data/imagenet-r/n02088238/sketch_2.jpg +- data/imagenet-r/n02317335/misc_3.jpg +- data/imagenet-r/n04591713/painting_34.jpg +- data/imagenet-r/n02066245/sculpture_1.jpg +- data/imagenet-r/n02948072/cartoon_63.jpg +- data/imagenet-r/n01514859/graphic_0.jpg +- data/imagenet-r/n02108915/tattoo_9.jpg +- data/imagenet-r/n02129165/art_4.jpg +- data/imagenet-r/n07873807/misc_8.jpg +- data/imagenet-r/n01855672/tattoo_0.jpg +- data/imagenet-r/n04536866/sketch_17.jpg +- data/imagenet-r/n09835506/videogame_24.jpg +- data/imagenet-r/n02391049/deviantart_1.jpg +- data/imagenet-r/n02165456/sculpture_8.jpg +- data/imagenet-r/n02346627/sketch_9.jpg +- data/imagenet-r/n02110958/tattoo_17.jpg +- data/imagenet-r/n02130308/graphic_1.jpg +- data/imagenet-r/n04141076/sculpture_4.jpg +- data/imagenet-r/n04141076/cartoon_4.jpg +- data/imagenet-r/n02108915/misc_50.jpg +- data/imagenet-r/n02346627/sketch_21.jpg +- data/imagenet-r/n02391049/sketch_12.jpg +- data/imagenet-r/n02410509/sculpture_27.jpg +- data/imagenet-r/n07734744/painting_25.jpg +- data/imagenet-r/n02423022/sculpture_26.jpg +- data/imagenet-r/n02206856/graphic_1.jpg +- data/imagenet-r/n02909870/graffiti_2.jpg +- data/imagenet-r/n03481172/toy_1.jpg +- data/imagenet-r/n02364673/sculpture_0.jpg +- data/imagenet-r/n01694178/sketch_17.jpg +- data/imagenet-r/n01983481/misc_0.jpg +- data/imagenet-r/n02092339/misc_20.jpg +- data/imagenet-r/n03773504/graffiti_1.jpg +- data/imagenet-r/n01833805/painting_23.jpg +- data/imagenet-r/n02437616/cartoon_17.jpg +- data/imagenet-r/n07697313/toy_1.jpg +- data/imagenet-r/n02481823/sketch_9.jpg +- data/imagenet-r/n01882714/toy_27.jpg +- data/imagenet-r/n04141076/deviantart_22.jpg +- data/imagenet-r/n03495258/sketch_20.jpg +- data/imagenet-r/n04487394/sculpture_3.jpg +- data/imagenet-r/n04487394/cartoon_5.jpg +- data/imagenet-r/n01843383/art_36.jpg +- data/imagenet-r/n02483362/toy_1.jpg +- data/imagenet-r/n02112137/misc_23.jpg +- data/imagenet-r/n02134084/deviantart_2.jpg +- data/imagenet-r/n02007558/art_20.jpg +- data/imagenet-r/n02950826/sketch_8.jpg +- data/imagenet-r/n07714990/deviantart_29.jpg +- data/imagenet-r/n07745940/embroidery_26.jpg +- data/imagenet-r/n01882714/painting_28.jpg +- data/imagenet-r/n02950826/art_0.jpg +- data/imagenet-r/n04146614/videogame_32.jpg +- data/imagenet-r/n02206856/toy_10.jpg +- data/imagenet-r/n02110958/misc_3.jpg +- data/imagenet-r/n07614500/sketch_9.jpg +- data/imagenet-r/n01910747/cartoon_7.jpg +- data/imagenet-r/n02395406/origami_4.jpg +- data/imagenet-r/n02346627/art_6.jpg +- data/imagenet-r/n07697537/misc_87.jpg +- data/imagenet-r/n02437616/deviantart_13.jpg +- data/imagenet-r/n02948072/painting_5.jpg +- data/imagenet-r/n02802426/graffiti_0.jpg +- data/imagenet-r/n02119022/tattoo_0.jpg +- data/imagenet-r/n07753275/deviantart_6.jpg +- data/imagenet-r/n07714990/deviantart_8.jpg +- data/imagenet-r/n02980441/sculpture_2.jpg +- data/imagenet-r/n02672831/cartoon_37.jpg +- data/imagenet-r/n03481172/origami_3.jpg +- data/imagenet-r/n02226429/sculpture_19.jpg +- data/imagenet-r/n04310018/videogame_12.jpg +- data/imagenet-r/n03775071/graphic_0.jpg +- data/imagenet-r/n01614925/tattoo_29.jpg +- data/imagenet-r/n01632777/sketch_12.jpg +- data/imagenet-r/n04192698/sketch_14.jpg +- data/imagenet-r/n03452741/sculpture_1.jpg +- data/imagenet-r/n01534433/sketch_12.jpg +- data/imagenet-r/n04266014/painting_5.jpg +- data/imagenet-r/n02007558/tattoo_59.jpg +- data/imagenet-r/n02106662/misc_2.jpg +- data/imagenet-r/n01443537/toy_1.jpg +- data/imagenet-r/n02123045/painting_59.jpg +- data/imagenet-r/n01910747/tattoo_4.jpg +- data/imagenet-r/n02939185/embroidery_2.jpg +- data/imagenet-r/n03481172/origami_1.jpg +- data/imagenet-r/n02480855/cartoon_8.jpg +- data/imagenet-r/n02094433/misc_6.jpg +- data/imagenet-r/n02138441/art_1.jpg +- data/imagenet-r/n02395406/misc_13.jpg +- data/imagenet-r/n02364673/sculpture_4.jpg +- data/imagenet-r/n02226429/graphic_5.jpg +- data/imagenet-r/n03775071/toy_2.jpg +- data/imagenet-r/n02112018/sketch_13.jpg +- data/imagenet-r/n07697313/toy_8.jpg +- data/imagenet-r/n04409515/deviantart_12.jpg +- data/imagenet-r/n07768694/deviantart_24.jpg +- data/imagenet-r/n03272010/tattoo_0.jpg +- data/imagenet-r/n01882714/art_8.jpg +- data/imagenet-r/n01983481/misc_43.jpg +- data/imagenet-r/n02672831/sculpture_10.jpg +- data/imagenet-r/n01518878/sticker_1.jpg +- data/imagenet-r/n02108089/misc_41.jpg +- data/imagenet-r/n02672831/graffiti_2.jpg +- data/imagenet-r/n04536866/painting_9.jpg +- data/imagenet-r/n02102318/misc_57.jpg +- data/imagenet-r/n02391049/misc_84.jpg +- data/imagenet-r/n03710193/misc_43.jpg +- data/imagenet-r/n12267677/misc_47.jpg +- data/imagenet-r/n04133789/sketch_21.jpg +- data/imagenet-r/n02607072/misc_64.jpg +- data/imagenet-r/n02099601/misc_47.jpg +- data/imagenet-r/n02447366/painting_13.jpg +- data/imagenet-r/n07734744/origami_3.jpg +- data/imagenet-r/n04409515/videogame_7.jpg +- data/imagenet-r/n01770393/cartoon_20.jpg +- data/imagenet-r/n02391049/sketch_1.jpg +- data/imagenet-r/n07873807/deviantart_29.jpg +- data/imagenet-r/n02009912/sketch_16.jpg +- data/imagenet-r/n02966193/painting_5.jpg +- data/imagenet-r/n01833805/sketch_7.jpg +- data/imagenet-r/n04389033/graffiti_20.jpg +- data/imagenet-r/n04275548/graphic_0.jpg +- data/imagenet-r/n02091032/misc_16.jpg +- data/imagenet-r/n03481172/toy_3.jpg +- data/imagenet-r/n02655020/misc_86.jpg +- data/imagenet-r/n09472597/cartoon_19.jpg +- data/imagenet-r/n02007558/graphic_20.jpg +- data/imagenet-r/n02526121/painting_6.jpg +- data/imagenet-r/n10565667/videogame_10.jpg +- data/imagenet-r/n02119022/misc_47.jpg +- data/imagenet-r/n02071294/sketch_17.jpg +- data/imagenet-r/n02092339/sketch_1.jpg +- data/imagenet-r/n02102318/sketch_17.jpg +- data/imagenet-r/n02802426/toy_0.jpg +- data/imagenet-r/n02909870/cartoon_15.jpg +- data/imagenet-r/n07734744/deviantart_5.jpg +- data/imagenet-r/n02233338/misc_11.jpg +- data/imagenet-r/n04536866/cartoon_27.jpg +- data/imagenet-r/n07734744/toy_28.jpg +- data/imagenet-r/n03481172/sticker_1.jpg +- data/imagenet-r/n02395406/sketch_8.jpg +- data/imagenet-r/n02356798/sketch_22.jpg +- data/imagenet-r/n04266014/art_2.jpg +- data/imagenet-r/n02526121/cartoon_28.jpg +- data/imagenet-r/n02769748/sketch_10.jpg +- data/imagenet-r/n04552348/toy_6.jpg +- data/imagenet-r/n02129165/tattoo_5.jpg +- data/imagenet-r/n01910747/painting_17.jpg +- data/imagenet-r/n12267677/deviantart_4.jpg +- data/imagenet-r/n03494278/sketch_7.jpg +- data/imagenet-r/n07734744/graffiti_22.jpg +- data/imagenet-r/n02108915/misc_121.jpg +- data/imagenet-r/n02219486/art_0.jpg +- data/imagenet-r/n02909870/cartoon_18.jpg +- data/imagenet-r/n02391049/sketch_4.jpg +- data/imagenet-r/n12267677/misc_97.jpg +- data/imagenet-r/n04118538/cartoon_14.jpg +- data/imagenet-r/n02077923/sketch_1.jpg +- data/imagenet-r/n02108915/misc_56.jpg +- data/imagenet-r/n02391049/misc_85.jpg +- data/imagenet-r/n02119022/misc_72.jpg +- data/imagenet-r/n01443537/graffiti_16.jpg +- data/imagenet-r/n02672831/graffiti_6.jpg +- data/imagenet-r/n04275548/videogame_3.jpg +- data/imagenet-r/n01514859/painting_31.jpg +- data/imagenet-r/n02486410/painting_19.jpg +- data/imagenet-r/n02797295/sketch_10.jpg +- data/imagenet-r/n01833805/graphic_7.jpg +- data/imagenet-r/n02391049/misc_105.jpg +- data/imagenet-r/n01614925/cartoon_22.jpg +- data/imagenet-r/n04536866/cartoon_10.jpg +- data/imagenet-r/n02906734/art_2.jpg +- data/imagenet-r/n02268443/misc_11.jpg +- data/imagenet-r/n07714990/art_1.jpg +- data/imagenet-r/n01944390/tattoo_35.jpg +- data/imagenet-r/n02447366/sketch_0.jpg +- data/imagenet-r/n02129165/embroidery_11.jpg +- data/imagenet-r/n04254680/sketch_4.jpg +- data/imagenet-r/n07753592/misc_182.jpg +- data/imagenet-r/n02317335/embroidery_1.jpg +- data/imagenet-r/n01518878/painting_21.jpg +- data/imagenet-r/n02007558/cartoon_3.jpg +- data/imagenet-r/n02113624/misc_14.jpg +- data/imagenet-r/n10565667/toy_8.jpg +- data/imagenet-r/n07745940/toy_18.jpg +- data/imagenet-r/n04522168/videogame_15.jpg +- data/imagenet-r/n01748264/tattoo_23.jpg +- data/imagenet-r/n02088238/misc_56.jpg +- data/imagenet-r/n01855672/cartoon_6.jpg +- data/imagenet-r/n07753275/embroidery_3.jpg +- data/imagenet-r/n01616318/tattoo_20.jpg +- data/imagenet-r/n02007558/tattoo_42.jpg +- data/imagenet-r/n03594945/videogame_13.jpg +- data/imagenet-r/n02219486/tattoo_7.jpg +- data/imagenet-r/n02992529/sketch_21.jpg +- data/imagenet-r/n07714571/deviantart_0.jpg +- data/imagenet-r/n07720875/sculpture_0.jpg +- data/imagenet-r/n02110958/misc_8.jpg +- data/imagenet-r/n02086240/misc_0.jpg +- data/imagenet-r/n02056570/toy_3.jpg +- data/imagenet-r/n02325366/sketch_4.jpg +- data/imagenet-r/n04310018/sculpture_2.jpg +- data/imagenet-r/n07714990/sticker_2.jpg +- data/imagenet-r/n02129165/tattoo_40.jpg +- data/imagenet-r/n04310018/sticker_1.jpg +- data/imagenet-r/n02110958/painting_26.jpg +- data/imagenet-r/n02138441/sketch_10.jpg +- data/imagenet-r/n01910747/deviantart_0.jpg +- data/imagenet-r/n02948072/graphic_12.jpg +- data/imagenet-r/n07614500/tattoo_6.jpg +- data/imagenet-r/n01910747/tattoo_56.jpg +- data/imagenet-r/n04522168/sketch_23.jpg +- data/imagenet-r/n07693725/sketch_21.jpg +- data/imagenet-r/n04465501/embroidery_5.jpg +- data/imagenet-r/n01944390/misc_29.jpg +- data/imagenet-r/n02206856/painting_12.jpg +- data/imagenet-r/n02051845/cartoon_11.jpg +- data/imagenet-r/n02007558/graphic_22.jpg +- data/imagenet-r/n02317335/misc_6.jpg +- data/imagenet-r/n02096585/misc_8.jpg +- data/imagenet-r/n01774750/tattoo_12.jpg +- data/imagenet-r/n02437616/painting_9.jpg +- data/imagenet-r/n02950826/sketch_17.jpg +- data/imagenet-r/n07714571/art_4.jpg +- data/imagenet-r/n02236044/cartoon_24.jpg +- data/imagenet-r/n02128385/cartoon_4.jpg +- data/imagenet-r/n02398521/sketch_5.jpg +- data/imagenet-r/n02206856/cartoon_20.jpg +- data/imagenet-r/n02113023/sketch_0.jpg +- data/imagenet-r/n02110185/sculpture_2.jpg +- data/imagenet-r/n03775071/toy_3.jpg +- data/imagenet-r/n01694178/toy_0.jpg +- data/imagenet-r/n02119022/misc_98.jpg +- data/imagenet-r/n02437616/cartoon_18.jpg +- data/imagenet-r/n01694178/graphic_4.jpg +- data/imagenet-r/n04086273/videogame_22.jpg +- data/imagenet-r/n02129604/sketch_16.jpg +- data/imagenet-r/n02086240/sketch_22.jpg +- data/imagenet-r/n02268443/misc_151.jpg +- data/imagenet-r/n04146614/sketch_9.jpg +- data/imagenet-r/n02206856/misc_14.jpg +- data/imagenet-r/n04591713/misc_1.jpg +- data/imagenet-r/n02363005/cartoon_5.jpg +- data/imagenet-r/n02672831/cartoon_1.jpg +- data/imagenet-r/n02410509/sketch_0.jpg +- data/imagenet-r/n04325704/deviantart_8.jpg +- data/imagenet-r/n07693725/cartoon_20.jpg +- data/imagenet-r/n03773504/graphic_5.jpg +- data/imagenet-r/n02769748/cartoon_8.jpg +- data/imagenet-r/n02007558/graffiti_20.jpg +- data/imagenet-r/n03494278/misc_0.jpg +- data/imagenet-r/n04192698/sketch_10.jpg +- data/imagenet-r/n03372029/sketch_7.jpg +- data/imagenet-r/n02134084/misc_110.jpg +- data/imagenet-r/n02088238/misc_28.jpg +- data/imagenet-r/n02236044/tattoo_14.jpg +- data/imagenet-r/n02749479/sticker_0.jpg +- data/imagenet-r/n07714990/videogame_0.jpg +- data/imagenet-r/n02325366/misc_32.jpg +- data/imagenet-r/n02233338/sketch_16.jpg +- data/imagenet-r/n07749582/misc_6.jpg +- data/imagenet-r/n02510455/misc_68.jpg +- data/imagenet-r/n02091032/misc_6.jpg +- data/imagenet-r/n02129165/tattoo_60.jpg +- data/imagenet-r/n01843383/art_20.jpg +- data/imagenet-r/n02883205/graffiti_1.jpg +- data/imagenet-r/n02346627/toy_0.jpg +- data/imagenet-r/n01847000/cartoon_5.jpg +- data/imagenet-r/n02091032/sketch_5.jpg +- data/imagenet-r/n02423022/sculpture_8.jpg +- data/imagenet-r/n04409515/videogame_13.jpg +- data/imagenet-r/n01833805/videogame_1.jpg +- data/imagenet-r/n02445715/art_0.jpg +- data/imagenet-r/n12267677/misc_71.jpg +- data/imagenet-r/n12267677/misc_46.jpg +- data/imagenet-r/n01484850/cartoon_10.jpg +- data/imagenet-r/n03467068/cartoon_15.jpg +- data/imagenet-r/n07697313/deviantart_34.jpg +- data/imagenet-r/n02099601/misc_32.jpg +- data/imagenet-r/n03467068/graphic_0.jpg +- data/imagenet-r/n02071294/painting_19.jpg +- data/imagenet-r/n02007558/art_26.jpg +- data/imagenet-r/n02410509/art_5.jpg +- data/imagenet-r/n02110185/sketch_20.jpg +- data/imagenet-r/n02113799/misc_13.jpg +- data/imagenet-r/n04465501/sticker_3.jpg +- data/imagenet-r/n01860187/sculpture_1.jpg +- data/imagenet-r/n02094433/sketch_5.jpg +- data/imagenet-r/n04552348/painting_0.jpg +- data/imagenet-r/n01882714/tattoo_18.jpg +- data/imagenet-r/n07734744/videogame_22.jpg +- data/imagenet-r/n02128385/sculpture_5.jpg +- data/imagenet-r/n02325366/misc_8.jpg +- data/imagenet-r/n07920052/cartoon_11.jpg +- data/imagenet-r/n03481172/cartoon_9.jpg +- data/imagenet-r/n03495258/cartoon_7.jpg +- data/imagenet-r/n02814860/cartoon_2.jpg +- data/imagenet-r/n02486410/tattoo_5.jpg +- data/imagenet-r/n02268443/misc_37.jpg +- data/imagenet-r/n01616318/sketch_23.jpg +- data/imagenet-r/n02102318/misc_29.jpg +- data/imagenet-r/n02128385/toy_8.jpg +- data/imagenet-r/n04522168/sketch_0.jpg +- data/imagenet-r/n02480495/misc_0.jpg +- data/imagenet-r/n02123045/sketch_19.jpg +- data/imagenet-r/n02112137/sketch_2.jpg +- data/imagenet-r/n07714990/deviantart_22.jpg +- data/imagenet-r/n02410509/sculpture_14.jpg +- data/imagenet-r/n02096585/tattoo_13.jpg +- data/imagenet-r/n01833805/painting_5.jpg +- data/imagenet-r/n04141076/painting_36.jpg +- data/imagenet-r/n02268443/misc_158.jpg +- data/imagenet-r/n04086273/art_12.jpg +- data/imagenet-r/n02843684/sculpture_5.jpg +- data/imagenet-r/n03676483/misc_2.jpg +- data/imagenet-r/n01910747/sketch_13.jpg +- data/imagenet-r/n04552348/misc_5.jpg +- data/imagenet-r/n02526121/sketch_20.jpg +- data/imagenet-r/n01833805/painting_1.jpg +- data/imagenet-r/n02099712/misc_21.jpg +- data/imagenet-r/n01484850/sketch_4.jpg +- data/imagenet-r/n03124170/sketch_17.jpg +- data/imagenet-r/n02077923/misc_22.jpg +- data/imagenet-r/n04086273/art_11.jpg +- data/imagenet-r/n02980441/art_4.jpg +- data/imagenet-r/n01843383/deviantart_9.jpg +- data/imagenet-r/n02056570/painting_1.jpg +- data/imagenet-r/n04118538/sketch_2.jpg +- data/imagenet-r/n02129165/tattoo_71.jpg +- data/imagenet-r/n01614925/tattoo_38.jpg +- data/imagenet-r/n01514859/embroidery_0.jpg +- data/imagenet-r/n02129604/toy_16.jpg +- data/imagenet-r/n04086273/art_8.jpg +- data/imagenet-r/n01860187/misc_0.jpg +- data/imagenet-r/n01616318/sketch_22.jpg +- data/imagenet-r/n04254680/misc_10.jpg +- data/imagenet-r/n02883205/graffiti_2.jpg +- data/imagenet-r/n03494278/sketch_19.jpg +- data/imagenet-r/n04409515/videogame_17.jpg +- data/imagenet-r/n02206856/painting_3.jpg +- data/imagenet-r/n01784675/toy_1.jpg +- data/imagenet-r/n02102318/sketch_12.jpg +- data/imagenet-r/n02110341/misc_18.jpg +- data/imagenet-r/n07734744/sculpture_1.jpg +- data/imagenet-r/n02129604/painting_23.jpg +- data/imagenet-r/n02480855/painting_20.jpg +- data/imagenet-r/n01882714/toy_35.jpg +- data/imagenet-r/n07753592/sketch_13.jpg +- data/imagenet-r/n02219486/sculpture_7.jpg +- data/imagenet-r/n02119022/misc_111.jpg +- data/imagenet-r/n02410509/toy_5.jpg +- data/imagenet-r/n01806143/sketch_20.jpg +- data/imagenet-r/n02119022/sketch_22.jpg +- data/imagenet-r/n02364673/art_7.jpg +- data/imagenet-r/n01986214/painting_7.jpg +- data/imagenet-r/n02410509/sketch_22.jpg +- data/imagenet-r/n01677366/sketch_13.jpg +- data/imagenet-r/n07753592/misc_16.jpg +- data/imagenet-r/n02483362/toy_2.jpg +- data/imagenet-r/n04266014/cartoon_35.jpg +- data/imagenet-r/n01843383/painting_47.jpg +- data/imagenet-r/n02843684/painting_3.jpg +- data/imagenet-r/n07734744/toy_42.jpg +- data/imagenet-r/n07742313/sketch_5.jpg +- data/imagenet-r/n02364673/painting_5.jpg +- data/imagenet-r/n02317335/painting_16.jpg +- data/imagenet-r/n04266014/cartoon_25.jpg +- data/imagenet-r/n01774750/sketch_14.jpg +- data/imagenet-r/n01514859/deviantart_27.jpg +- data/imagenet-r/n04389033/sketch_3.jpg +- data/imagenet-r/n02364673/painting_12.jpg +- data/imagenet-r/n03630383/sketch_13.jpg +- data/imagenet-r/n07734744/deviantart_20.jpg +- data/imagenet-r/n02128757/graphic_0.jpg +- data/imagenet-r/n02655020/misc_95.jpg +- data/imagenet-r/n07614500/deviantart_12.jpg +- data/imagenet-r/n07693725/cartoon_24.jpg +- data/imagenet-r/n01518878/sculpture_10.jpg +- data/imagenet-r/n01616318/cartoon_14.jpg +- data/imagenet-r/n07880968/sketch_7.jpg +- data/imagenet-r/n02165456/sketch_9.jpg +- data/imagenet-r/n04254680/art_0.jpg +- data/imagenet-r/n03452741/painting_10.jpg +- data/imagenet-r/n03930630/painting_12.jpg +- data/imagenet-r/n02906734/cartoon_11.jpg +- data/imagenet-r/n01518878/cartoon_19.jpg +- data/imagenet-r/n07697313/art_23.jpg +- data/imagenet-r/n01944390/misc_39.jpg +- data/imagenet-r/n01614925/tattoo_40.jpg +- data/imagenet-r/n07734744/deviantart_22.jpg +- data/imagenet-r/n02130308/art_10.jpg +- data/imagenet-r/n04347754/cartoon_7.jpg +- data/imagenet-r/n02510455/misc_61.jpg +- data/imagenet-r/n10565667/toy_7.jpg +- data/imagenet-r/n02480495/sketch_13.jpg +- data/imagenet-r/n02480855/tattoo_29.jpg +- data/imagenet-r/n01518878/cartoon_17.jpg +- data/imagenet-r/n02481823/tattoo_1.jpg +- data/imagenet-r/n01694178/graphic_5.jpg +- data/imagenet-r/n02099601/misc_105.jpg +- data/imagenet-r/n02480855/art_1.jpg +- data/imagenet-r/n04310018/misc_6.jpg +- data/imagenet-r/n02481823/sketch_18.jpg +- data/imagenet-r/n01983481/misc_5.jpg +- data/imagenet-r/n04325704/cartoon_30.jpg +- data/imagenet-r/n01632777/deviantart_5.jpg +- data/imagenet-r/n03124170/cartoon_70.jpg +- data/imagenet-r/n04536866/painting_2.jpg +- data/imagenet-r/n02480495/toy_8.jpg +- data/imagenet-r/n02071294/origami_1.jpg +- data/imagenet-r/n03467068/sketch_11.jpg +- data/imagenet-r/n01484850/cartoon_1.jpg +- data/imagenet-r/n02410509/toy_10.jpg +- data/imagenet-r/n02129604/tattoo_34.jpg +- data/imagenet-r/n04522168/painting_3.jpg +- data/imagenet-r/n01616318/tattoo_27.jpg +- data/imagenet-r/n02112018/misc_44.jpg +- data/imagenet-r/n07920052/sticker_2.jpg +- data/imagenet-r/n02279972/sketch_3.jpg +- data/imagenet-r/n07742313/deviantart_0.jpg +- data/imagenet-r/n07614500/tattoo_7.jpg +- data/imagenet-r/n01484850/deviantart_2.jpg +- data/imagenet-r/n04552348/sketch_3.jpg +- data/imagenet-r/n02510455/misc_122.jpg +- data/imagenet-r/n02480495/painting_33.jpg +- data/imagenet-r/n02077923/misc_12.jpg +- data/imagenet-r/n02883205/cartoon_22.jpg +- data/imagenet-r/n01774750/deviantart_5.jpg +- data/imagenet-r/n07614500/misc_26.jpg +- data/imagenet-r/n02085620/misc_43.jpg +- data/imagenet-r/n02948072/sketch_2.jpg +- data/imagenet-r/n04487394/sketch_20.jpg +- data/imagenet-r/n03888257/videogame_3.jpg +- data/imagenet-r/n07749582/deviantart_0.jpg +- data/imagenet-r/n01833805/origami_8.jpg +- data/imagenet-r/n02007558/painting_10.jpg +- data/imagenet-r/n03930630/art_1.jpg +- data/imagenet-r/n02526121/videogame_1.jpg +- data/imagenet-r/n10565667/sketch_2.jpg +- data/imagenet-r/n01910747/tattoo_68.jpg +- data/imagenet-r/n07714990/tattoo_5.jpg +- data/imagenet-r/n03272010/misc_0.jpg +- data/imagenet-r/n01531178/art_18.jpg +- data/imagenet-r/n01494475/misc_0.jpg +- data/imagenet-r/n02128757/painting_31.jpg +- data/imagenet-r/n02110958/sculpture_2.jpg +- data/imagenet-r/n03272010/art_6.jpg +- data/imagenet-r/n01833805/embroidery_9.jpg +- data/imagenet-r/n02797295/misc_41.jpg +- data/imagenet-r/n10565667/videogame_28.jpg +- data/imagenet-r/n04347754/videogame_18.jpg +- data/imagenet-r/n03930630/sketch_9.jpg +- data/imagenet-r/n01882714/tattoo_16.jpg +- data/imagenet-r/n02445715/videogame_7.jpg +- data/imagenet-r/n01806143/graffiti_2.jpg +- data/imagenet-r/n02130308/cartoon_25.jpg +- data/imagenet-r/n07920052/toy_0.jpg +- data/imagenet-r/n07734744/embroidery_7.jpg +- data/imagenet-r/n03424325/deviantart_3.jpg +- data/imagenet-r/n07695742/sketch_12.jpg +- data/imagenet-r/n04141076/painting_4.jpg +- data/imagenet-r/n04146614/cartoon_4.jpg +- data/imagenet-r/n07697537/deviantart_11.jpg +- data/imagenet-r/n02134084/tattoo_7.jpg +- data/imagenet-r/n02113023/misc_12.jpg +- data/imagenet-r/n07873807/deviantart_9.jpg +- data/imagenet-r/n02364673/art_13.jpg +- data/imagenet-r/n01531178/cartoon_10.jpg +- data/imagenet-r/n02165456/tattoo_29.jpg +- data/imagenet-r/n01986214/sketch_11.jpg +- data/imagenet-r/n10565667/videogame_11.jpg +- data/imagenet-r/n01855672/painting_12.jpg +- data/imagenet-r/n03124170/painting_3.jpg +- data/imagenet-r/n04254680/sticker_2.jpg +- data/imagenet-r/n07693725/cartoon_29.jpg +- data/imagenet-r/n02096585/misc_12.jpg +- data/imagenet-r/n02086240/sketch_15.jpg +- data/imagenet-r/n02526121/sculpture_2.jpg +- data/imagenet-r/n01986214/deviantart_15.jpg +- data/imagenet-r/n03452741/cartoon_0.jpg +- data/imagenet-r/n01833805/painting_39.jpg +- data/imagenet-r/n03494278/graffiti_0.jpg +- data/imagenet-r/n04552348/videogame_12.jpg +- data/imagenet-r/n02106550/tattoo_8.jpg +- data/imagenet-r/n02108915/misc_21.jpg +- data/imagenet-r/n02092339/misc_7.jpg +- data/imagenet-r/n01860187/tattoo_1.jpg +- data/imagenet-r/n07753275/art_6.jpg +- data/imagenet-r/n04465501/sculpture_2.jpg +- data/imagenet-r/n01694178/tattoo_26.jpg +- data/imagenet-r/n02236044/painting_4.jpg +- data/imagenet-r/n01644373/art_8.jpg +- data/imagenet-r/n02138441/cartoon_18.jpg +- data/imagenet-r/n02117135/graffiti_6.jpg +- data/imagenet-r/n02749479/misc_32.jpg +- data/imagenet-r/n02007558/graphic_5.jpg +- data/imagenet-r/n02134084/misc_48.jpg +- data/imagenet-r/n02206856/tattoo_16.jpg +- data/imagenet-r/n02410509/sculpture_31.jpg +- data/imagenet-r/n02071294/deviantart_25.jpg +- data/imagenet-r/n02206856/painting_0.jpg +- data/imagenet-r/n02165456/origami_3.jpg +- data/imagenet-r/n07720875/sketch_22.jpg +- data/imagenet-r/n07745940/origami_10.jpg +- data/imagenet-r/n04465501/toy_18.jpg +- data/imagenet-r/n02088364/misc_34.jpg +- data/imagenet-r/n07742313/painting_17.jpg +- data/imagenet-r/n02129165/videogame_3.jpg +- data/imagenet-r/n03676483/sketch_6.jpg +- data/imagenet-r/n07753275/art_9.jpg +- data/imagenet-r/n01630670/cartoon_5.jpg +- data/imagenet-r/n07714571/art_0.jpg +- data/imagenet-r/n03124170/cartoon_10.jpg +- data/imagenet-r/n02165456/tattoo_6.jpg +- data/imagenet-r/n02099712/misc_18.jpg +- data/imagenet-r/n01944390/misc_172.jpg +- data/imagenet-r/n02206856/sketch_4.jpg +- data/imagenet-r/n02364673/sketch_12.jpg +- data/imagenet-r/n02268443/sketch_15.jpg +- data/imagenet-r/n04266014/cartoon_9.jpg +- data/imagenet-r/n01518878/cartoon_37.jpg +- data/imagenet-r/n02701002/toy_16.jpg +- data/imagenet-r/n02110958/tattoo_30.jpg +- data/imagenet-r/n02486410/cartoon_17.jpg +- data/imagenet-r/n02966193/painting_11.jpg +- data/imagenet-r/n07720875/painting_19.jpg +- data/imagenet-r/n01843383/deviantart_30.jpg +- data/imagenet-r/n03424325/sketch_11.jpg +- data/imagenet-r/n01944390/sketch_21.jpg +- data/imagenet-r/n04389033/toy_15.jpg +- data/imagenet-r/n02480855/art_3.jpg +- data/imagenet-r/n02110185/toy_10.jpg +- data/imagenet-r/n04522168/sketch_7.jpg +- data/imagenet-r/n02607072/misc_109.jpg +- data/imagenet-r/n02486410/cartoon_1.jpg +- data/imagenet-r/n02391049/sketch_2.jpg +- data/imagenet-r/n02098286/sketch_23.jpg +- data/imagenet-r/n02123045/painting_6.jpg +- data/imagenet-r/n02909870/graffiti_7.jpg +- data/imagenet-r/n01531178/sculpture_1.jpg +- data/imagenet-r/n02085620/misc_36.jpg +- data/imagenet-r/n07714990/deviantart_3.jpg +- data/imagenet-r/n02106550/misc_68.jpg +- data/imagenet-r/n02510455/misc_120.jpg +- data/imagenet-r/n02950826/sketch_20.jpg +- data/imagenet-r/n02007558/tattoo_17.jpg +- data/imagenet-r/n02410509/cartoon_17.jpg +- data/imagenet-r/n03947888/tattoo_9.jpg +- data/imagenet-r/n01882714/toy_5.jpg +- data/imagenet-r/n03498962/painting_4.jpg +- data/imagenet-r/n01986214/sketch_21.jpg +- data/imagenet-r/n02906734/misc_12.jpg +- data/imagenet-r/n02398521/toy_4.jpg +- data/imagenet-r/n03947888/tattoo_17.jpg +- data/imagenet-r/n04522168/embroidery_7.jpg +- data/imagenet-r/n04310018/graffiti_2.jpg +- data/imagenet-r/n02486410/graffiti_9.jpg +- data/imagenet-r/n07742313/sketch_22.jpg +- data/imagenet-r/n01514859/art_5.jpg +- data/imagenet-r/n02206856/painting_11.jpg +- data/imagenet-r/n02206856/cartoon_18.jpg +- data/imagenet-r/n01944390/tattoo_15.jpg +- data/imagenet-r/n04522168/sketch_3.jpg +- data/imagenet-r/n01514859/painting_8.jpg +- data/imagenet-r/n02701002/misc_1.jpg +- data/imagenet-r/n02009912/misc_44.jpg +- data/imagenet-r/n07768694/tattoo_0.jpg +- data/imagenet-r/n02481823/tattoo_7.jpg +- data/imagenet-r/n02088238/misc_46.jpg +- data/imagenet-r/n03676483/sketch_9.jpg +- data/imagenet-r/n01518878/painting_10.jpg +- data/imagenet-r/n07749582/deviantart_18.jpg +- data/imagenet-r/n07614500/videogame_3.jpg +- data/imagenet-r/n02672831/cartoon_31.jpg +- data/imagenet-r/n04487394/cartoon_30.jpg +- data/imagenet-r/n01531178/painting_22.jpg +- data/imagenet-r/n01484850/painting_22.jpg +- data/imagenet-r/n02007558/embroidery_7.jpg +- data/imagenet-r/n02481823/painting_10.jpg +- data/imagenet-r/n02110958/cartoon_65.jpg +- data/imagenet-r/n02066245/art_10.jpg +- data/imagenet-r/n04389033/art_7.jpg +- data/imagenet-r/n02480855/art_6.jpg +- data/imagenet-r/n04522168/graphic_2.jpg +- data/imagenet-r/n02841315/art_8.jpg +- data/imagenet-r/n02226429/sculpture_7.jpg +- data/imagenet-r/n02445715/sketch_6.jpg +- data/imagenet-r/n02814860/deviantart_16.jpg +- data/imagenet-r/n02655020/deviantart_8.jpg +- data/imagenet-r/n02823750/sketch_21.jpg +- data/imagenet-r/n02134084/videogame_9.jpg +- data/imagenet-r/n02085620/misc_28.jpg +- data/imagenet-r/n04254680/origami_2.jpg +- data/imagenet-r/n02480855/painting_4.jpg +- data/imagenet-r/n02165456/toy_36.jpg +- data/imagenet-r/n02112018/misc_20.jpg +- data/imagenet-r/n02980441/graphic_6.jpg +- data/imagenet-r/n02007558/sticker_4.jpg +- data/imagenet-r/n01498041/cartoon_6.jpg +- data/imagenet-r/n12267677/sketch_23.jpg +- data/imagenet-r/n03124170/tattoo_11.jpg +- data/imagenet-r/n02051845/sketch_2.jpg +- data/imagenet-r/n04266014/sketch_24.jpg +- data/imagenet-r/n02607072/misc_58.jpg +- data/imagenet-r/n01855672/deviantart_0.jpg +- data/imagenet-r/n01843383/sketch_20.jpg +- data/imagenet-r/n02113799/misc_20.jpg +- data/imagenet-r/n01806143/origami_6.jpg +- data/imagenet-r/n02948072/origami_1.jpg +- data/imagenet-r/n01860187/origami_2.jpg +- data/imagenet-r/n07695742/sticker_0.jpg +- data/imagenet-r/n01944390/misc_139.jpg +- data/imagenet-r/n02138441/painting_4.jpg +- data/imagenet-r/n02051845/sketch_20.jpg +- data/imagenet-r/n07697537/misc_104.jpg +- data/imagenet-r/n07695742/toy_0.jpg +- data/imagenet-r/n04347754/videogame_10.jpg +- data/imagenet-r/n04266014/cartoon_40.jpg +- data/imagenet-r/n02823750/graphic_6.jpg +- data/imagenet-r/n02909870/videogame_8.jpg +- data/imagenet-r/n01494475/misc_114.jpg +- data/imagenet-r/n02233338/misc_2.jpg +- data/imagenet-r/n04192698/deviantart_11.jpg +- data/imagenet-r/n02841315/toy_10.jpg +- data/imagenet-r/n02096585/misc_190.jpg +- data/imagenet-r/n01484850/tattoo_27.jpg +- data/imagenet-r/n02128757/art_10.jpg +- data/imagenet-r/n07695742/cartoon_17.jpg +- data/imagenet-r/n02480855/tattoo_31.jpg +- data/imagenet-r/n02480495/sculpture_4.jpg +- data/imagenet-r/n07745940/sketch_14.jpg +- data/imagenet-r/n07697537/deviantart_13.jpg +- data/imagenet-r/n07745940/deviantart_19.jpg +- data/imagenet-r/n04465501/cartoon_14.jpg +- data/imagenet-r/n03649909/toy_23.jpg +- data/imagenet-r/n02808440/sketch_15.jpg +- data/imagenet-r/n04465501/sketch_20.jpg +- data/imagenet-r/n04465501/videogame_3.jpg +- data/imagenet-r/n01910747/graffiti_12.jpg +- data/imagenet-r/n01616318/cartoon_15.jpg +- data/imagenet-r/n02363005/cartoon_22.jpg +- data/imagenet-r/n02398521/painting_6.jpg +- data/imagenet-r/n01518878/cartoon_45.jpg +- data/imagenet-r/n03481172/art_6.jpg +- data/imagenet-r/n02007558/cartoon_29.jpg +- data/imagenet-r/n02325366/sketch_9.jpg +- data/imagenet-r/n07753275/painting_20.jpg +- data/imagenet-r/n04133789/art_0.jpg +- data/imagenet-r/n02980441/toy_3.jpg +- data/imagenet-r/n02510455/misc_82.jpg +- data/imagenet-r/n12267677/misc_134.jpg +- data/imagenet-r/n02091032/misc_30.jpg +- data/imagenet-r/n02088364/misc_15.jpg +- data/imagenet-r/n02749479/misc_10.jpg +- data/imagenet-r/n07697313/deviantart_33.jpg +- data/imagenet-r/n07614500/painting_15.jpg +- data/imagenet-r/n07714990/sculpture_0.jpg +- data/imagenet-r/n02106550/misc_47.jpg +- data/imagenet-r/n02056570/art_6.jpg +- data/imagenet-r/n02423022/cartoon_24.jpg +- data/imagenet-r/n02948072/embroidery_9.jpg +- data/imagenet-r/n09472597/sticker_0.jpg +- data/imagenet-r/n01882714/sculpture_4.jpg +- data/imagenet-r/n02437616/sculpture_8.jpg +- data/imagenet-r/n03452741/deviantart_8.jpg +- data/imagenet-r/n01443537/painting_35.jpg +- data/imagenet-r/n07920052/cartoon_8.jpg +- data/imagenet-r/n02655020/misc_80.jpg +- data/imagenet-r/n02445715/origami_3.jpg +- data/imagenet-r/n02085620/misc_24.jpg +- data/imagenet-r/n01944390/misc_134.jpg +- data/imagenet-r/n02102318/misc_39.jpg +- data/imagenet-r/n02395406/videogame_0.jpg +- data/imagenet-r/n02906734/cartoon_17.jpg +- data/imagenet-r/n07768694/painting_14.jpg +- data/imagenet-r/n01644373/cartoon_13.jpg +- data/imagenet-r/n02951358/art_3.jpg +- data/imagenet-r/n07720875/sketch_13.jpg +- data/imagenet-r/n03498962/sketch_18.jpg +- data/imagenet-r/n04310018/videogame_10.jpg +- data/imagenet-r/n02797295/misc_10.jpg +- data/imagenet-r/n07697537/misc_120.jpg +- data/imagenet-r/n02445715/painting_2.jpg +- data/imagenet-r/n02279972/sculpture_1.jpg +- data/imagenet-r/n02110958/painting_58.jpg +- data/imagenet-r/n07749582/cartoon_10.jpg +- data/imagenet-r/n02110958/cartoon_13.jpg +- data/imagenet-r/n02447366/sketch_8.jpg +- data/imagenet-r/n04347754/deviantart_6.jpg +- data/imagenet-r/n04141076/cartoon_48.jpg +- data/imagenet-r/n02268443/misc_105.jpg +- data/imagenet-r/n02883205/sticker_0.jpg +- data/imagenet-r/n02948072/sketch_16.jpg +- data/imagenet-r/n02950826/cartoon_1.jpg +- data/imagenet-r/n01443537/art_4.jpg +- data/imagenet-r/n02096585/misc_37.jpg +- data/imagenet-r/n01843383/cartoon_23.jpg +- data/imagenet-r/n01632777/cartoon_18.jpg +- data/imagenet-r/n02110958/misc_1.jpg +- data/imagenet-r/n02510455/misc_83.jpg +- data/imagenet-r/n01694178/cartoon_6.jpg +- data/imagenet-r/n02410509/sketch_11.jpg +- data/imagenet-r/n07753592/misc_108.jpg +- data/imagenet-r/n02236044/cartoon_37.jpg +- data/imagenet-r/n01531178/misc_5.jpg +- data/imagenet-r/n02948072/embroidery_5.jpg +- data/imagenet-r/n01514859/origami_0.jpg +- data/imagenet-r/n01860187/sculpture_5.jpg +- data/imagenet-r/n02206856/embroidery_4.jpg +- data/imagenet-r/n02071294/art_0.jpg +- data/imagenet-r/n02134084/misc_107.jpg +- data/imagenet-r/n12267677/misc_89.jpg +- data/imagenet-r/n01774750/deviantart_10.jpg +- data/imagenet-r/n01518878/sketch_16.jpg +- data/imagenet-r/n04552348/videogame_27.jpg +- data/imagenet-r/n02410509/painting_15.jpg +- data/imagenet-r/n01843383/sculpture_0.jpg +- data/imagenet-r/n02481823/sculpture_18.jpg +- data/imagenet-r/n04254680/embroidery_0.jpg +- data/imagenet-r/n02906734/cartoon_53.jpg +- data/imagenet-r/n02486410/sculpture_1.jpg +- data/imagenet-r/n02325366/sketch_6.jpg +- data/imagenet-r/n02007558/tattoo_20.jpg +- data/imagenet-r/n02410509/toy_9.jpg +- data/imagenet-r/n02279972/tattoo_26.jpg +- data/imagenet-r/n07720875/painting_40.jpg +- data/imagenet-r/n03710193/sketch_4.jpg +- data/imagenet-r/n02802426/videogame_0.jpg +- data/imagenet-r/n04465501/videogame_10.jpg +- data/imagenet-r/n07753592/misc_98.jpg +- data/imagenet-r/n02481823/painting_9.jpg +- data/imagenet-r/n03930630/misc_8.jpg +- data/imagenet-r/n03930630/sketch_8.jpg +- data/imagenet-r/n02906734/sketch_23.jpg +- data/imagenet-r/n02112018/misc_10.jpg +- data/imagenet-r/n03124170/videogame_8.jpg +- data/imagenet-r/n02138441/sketch_22.jpg +- data/imagenet-r/n02510455/misc_125.jpg +- data/imagenet-r/n02206856/sculpture_8.jpg +- data/imagenet-r/n04465501/painting_19.jpg +- data/imagenet-r/n04192698/sketch_20.jpg +- data/imagenet-r/n02236044/misc_0.jpg +- data/imagenet-r/n07614500/painting_4.jpg +- data/imagenet-r/n02797295/misc_54.jpg +- data/imagenet-r/n02226429/embroidery_4.jpg +- data/imagenet-r/n02980441/origami_3.jpg +- data/imagenet-r/n07720875/sketch_8.jpg +- data/imagenet-r/n01630670/misc_1.jpg +- data/imagenet-r/n02526121/sculpture_5.jpg +- data/imagenet-r/n04275548/tattoo_2.jpg +- data/imagenet-r/n07697537/videogame_27.jpg +- data/imagenet-r/n01694178/tattoo_9.jpg +- data/imagenet-r/n07693725/cartoon_17.jpg +- data/imagenet-r/n03947888/videogame_14.jpg +- data/imagenet-r/n02814860/sculpture_1.jpg +- data/imagenet-r/n03495258/sketch_18.jpg +- data/imagenet-r/n02123045/painting_18.jpg +- data/imagenet-r/n02007558/graffiti_33.jpg +- data/imagenet-r/n01644373/cartoon_10.jpg +- data/imagenet-r/n01806143/embroidery_12.jpg +- data/imagenet-r/n01843383/embroidery_4.jpg +- data/imagenet-r/n01774750/sculpture_0.jpg +- data/imagenet-r/n02088094/misc_5.jpg +- data/imagenet-r/n02510455/misc_64.jpg +- data/imagenet-r/n02110958/art_15.jpg +- data/imagenet-r/n07742313/painting_25.jpg +- data/imagenet-r/n01531178/cartoon_32.jpg +- data/imagenet-r/n03481172/sketch_14.jpg +- data/imagenet-r/n02797295/misc_49.jpg +- data/imagenet-r/n02480855/misc_3.jpg +- data/imagenet-r/n01833805/tattoo_23.jpg +- data/imagenet-r/n01531178/painting_21.jpg +- data/imagenet-r/n02843684/sketch_8.jpg +- data/imagenet-r/n02138441/art_22.jpg +- data/imagenet-r/n03124170/graffiti_3.jpg +- data/imagenet-r/n02607072/misc_99.jpg +- data/imagenet-r/n02672831/sketch_12.jpg +- data/imagenet-r/n07745940/cartoon_4.jpg +- data/imagenet-r/n07753592/videogame_6.jpg +- data/imagenet-r/n02363005/toy_0.jpg +- data/imagenet-r/n03494278/painting_1.jpg +- data/imagenet-r/n04310018/art_5.jpg +- data/imagenet-r/n01494475/videogame_3.jpg +- data/imagenet-r/n01774750/sketch_6.jpg +- data/imagenet-r/n04325704/toy_1.jpg +- data/imagenet-r/n12267677/misc_121.jpg +- data/imagenet-r/n03649909/toy_19.jpg +- data/imagenet-r/n02268443/misc_25.jpg +- data/imagenet-r/n04192698/graffiti_2.jpg +- data/imagenet-r/n01843383/deviantart_76.jpg +- data/imagenet-r/n09472597/cartoon_27.jpg +- data/imagenet-r/n12267677/misc_109.jpg +- data/imagenet-r/n01986214/cartoon_22.jpg +- data/imagenet-r/n02219486/tattoo_12.jpg +- data/imagenet-r/n02980441/graphic_2.jpg +- data/imagenet-r/n03345487/graphic_0.jpg +- data/imagenet-r/n02814860/cartoon_12.jpg +- data/imagenet-r/n01882714/tattoo_19.jpg +- data/imagenet-r/n02410509/art_13.jpg +- data/imagenet-r/n02007558/cartoon_46.jpg +- data/imagenet-r/n01983481/deviantart_2.jpg +- data/imagenet-r/n03594945/art_5.jpg +- data/imagenet-r/n03494278/cartoon_4.jpg +- data/imagenet-r/n02051845/sculpture_8.jpg +- data/imagenet-r/n04389033/videogame_14.jpg +- data/imagenet-r/n02510455/misc_59.jpg +- data/imagenet-r/n02447366/cartoon_0.jpg +- data/imagenet-r/n02165456/tattoo_28.jpg +- data/imagenet-r/n04310018/toy_2.jpg +- data/imagenet-r/n02447366/embroidery_8.jpg +- data/imagenet-r/n03602883/sketch_19.jpg +- data/imagenet-r/n01531178/deviantart_3.jpg +- data/imagenet-r/n02948072/graphic_13.jpg +- data/imagenet-r/n02051845/toy_2.jpg +- data/imagenet-r/n01806143/deviantart_8.jpg +- data/imagenet-r/n04347754/sketch_15.jpg +- data/imagenet-r/n02486410/cartoon_31.jpg +- data/imagenet-r/n02096585/sketch_22.jpg +- data/imagenet-r/n07614500/embroidery_12.jpg +- data/imagenet-r/n02119022/misc_86.jpg +- data/imagenet-r/n07753275/deviantart_1.jpg +- data/imagenet-r/n02843684/cartoon_1.jpg +- data/imagenet-r/n02112018/misc_8.jpg +- data/imagenet-r/n02808440/painting_16.jpg +- data/imagenet-r/n02268443/misc_44.jpg +- data/imagenet-r/n01833805/cartoon_22.jpg +- data/imagenet-r/n02206856/toy_13.jpg +- data/imagenet-r/n02268443/misc_189.jpg +- data/imagenet-r/n02655020/misc_58.jpg +- data/imagenet-r/n02437616/painting_0.jpg +- data/imagenet-r/n02966193/cartoon_12.jpg +- data/imagenet-r/n07697313/toy_3.jpg +- data/imagenet-r/n02672831/cartoon_10.jpg +- data/imagenet-r/n03424325/misc_11.jpg +- data/imagenet-r/n02480495/toy_6.jpg +- data/imagenet-r/n01748264/misc_17.jpg +- data/imagenet-r/n07697537/deviantart_4.jpg +- data/imagenet-r/n02966193/deviantart_0.jpg +- data/imagenet-r/n04409515/videogame_12.jpg +- data/imagenet-r/n03495258/sculpture_4.jpg +- data/imagenet-r/n02129604/art_3.jpg +- data/imagenet-r/n04141076/deviantart_1.jpg +- data/imagenet-r/n02769748/cartoon_41.jpg +- data/imagenet-r/n02129165/sculpture_2.jpg +- data/imagenet-r/n07697313/embroidery_1.jpg +- data/imagenet-r/n04147183/painting_9.jpg +- data/imagenet-r/n02607072/misc_6.jpg +- data/imagenet-r/n02823750/sketch_4.jpg +- data/imagenet-r/n07714990/cartoon_5.jpg +- data/imagenet-r/n02317335/art_1.jpg +- data/imagenet-r/n07614500/toy_23.jpg +- data/imagenet-r/n03452741/sketch_2.jpg +- data/imagenet-r/n02226429/cartoon_1.jpg +- data/imagenet-r/n02088094/misc_46.jpg +- data/imagenet-r/n02948072/cartoon_62.jpg +- data/imagenet-r/n02106550/tattoo_1.jpg +- data/imagenet-r/n07745940/sketch_12.jpg +- data/imagenet-r/n01770393/sketch_11.jpg +- data/imagenet-r/n03930630/deviantart_0.jpg +- data/imagenet-r/n01847000/sticker_5.jpg +- data/imagenet-r/n02769748/graphic_4.jpg +- data/imagenet-r/n01614925/sketch_23.jpg +- data/imagenet-r/n03630383/toy_6.jpg +- data/imagenet-r/n02655020/misc_99.jpg +- data/imagenet-r/n04347754/sketch_6.jpg +- data/imagenet-r/n07697313/sculpture_1.jpg +- data/imagenet-r/n02088094/misc_20.jpg +- data/imagenet-r/n04389033/deviantart_0.jpg +- data/imagenet-r/n04192698/embroidery_2.jpg +- data/imagenet-r/n02481823/art_3.jpg +- data/imagenet-r/n07742313/videogame_15.jpg +- data/imagenet-r/n04522168/painting_6.jpg +- data/imagenet-r/n01770393/cartoon_2.jpg +- data/imagenet-r/n03710193/misc_4.jpg +- data/imagenet-r/n02317335/art_6.jpg +- data/imagenet-r/n01833805/painting_8.jpg +- data/imagenet-r/n01644373/art_10.jpg +- data/imagenet-r/n02117135/videogame_2.jpg +- data/imagenet-r/n02966193/painting_0.jpg +- data/imagenet-r/n02056570/cartoon_10.jpg +- data/imagenet-r/n01847000/toy_19.jpg +- data/imagenet-r/n02483362/painting_6.jpg +- data/imagenet-r/n02948072/deviantart_15.jpg +- data/imagenet-r/n07720875/painting_28.jpg +- data/imagenet-r/n03947888/videogame_25.jpg +- data/imagenet-r/n01616318/deviantart_24.jpg +- data/imagenet-r/n01833805/tattoo_58.jpg +- data/imagenet-r/n02066245/painting_1.jpg +- data/imagenet-r/n02110341/misc_142.jpg +- data/imagenet-r/n02317335/sculpture_8.jpg +- data/imagenet-r/n02085620/misc_89.jpg +- data/imagenet-r/n01833805/tattoo_66.jpg +- data/imagenet-r/n02007558/sculpture_1.jpg +- data/imagenet-r/n02655020/sketch_20.jpg +- data/imagenet-r/n02129604/painting_19.jpg +- data/imagenet-r/n03594945/sketch_0.jpg +- data/imagenet-r/n01833805/tattoo_5.jpg +- data/imagenet-r/n01514859/sketch_7.jpg +- data/imagenet-r/n01910747/tattoo_17.jpg +- data/imagenet-r/n02110341/misc_21.jpg +- data/imagenet-r/n07697313/graphic_3.jpg +- data/imagenet-r/n12267677/misc_98.jpg +- data/imagenet-r/n01514859/deviantart_42.jpg +- data/imagenet-r/n03494278/art_2.jpg +- data/imagenet-r/n02129165/graffiti_16.jpg +- data/imagenet-r/n02814860/cartoon_0.jpg +- data/imagenet-r/n02206856/tattoo_18.jpg +- data/imagenet-r/n04389033/sticker_6.jpg +- data/imagenet-r/n02007558/graffiti_23.jpg +- data/imagenet-r/n01694178/toy_13.jpg +- data/imagenet-r/n04325704/deviantart_3.jpg +- data/imagenet-r/n07714990/misc_2.jpg +- data/imagenet-r/n02085620/tattoo_3.jpg +- data/imagenet-r/n04141076/sketch_14.jpg +- data/imagenet-r/n04086273/toy_3.jpg +- data/imagenet-r/n02130308/painting_12.jpg +- data/imagenet-r/n03124170/sculpture_3.jpg +- data/imagenet-r/n02279972/painting_17.jpg +- data/imagenet-r/n03888257/cartoon_15.jpg +- data/imagenet-r/n03594945/sticker_0.jpg +- data/imagenet-r/n07753592/misc_62.jpg +- data/imagenet-r/n07714990/graphic_4.jpg +- data/imagenet-r/n01518878/graffiti_2.jpg +- data/imagenet-r/n02098286/sketch_7.jpg +- data/imagenet-r/n03649909/sketch_6.jpg +- data/imagenet-r/n07753275/misc_8.jpg +- data/imagenet-r/n07714571/painting_12.jpg +- data/imagenet-r/n02106166/cartoon_8.jpg +- data/imagenet-r/n02268443/misc_94.jpg +- data/imagenet-r/n02110341/misc_46.jpg +- data/imagenet-r/n02129604/origami_3.jpg +- data/imagenet-r/n09835506/videogame_1.jpg +- data/imagenet-r/n02088094/misc_7.jpg +- data/imagenet-r/n01498041/deviantart_5.jpg +- data/imagenet-r/n03947888/toy_5.jpg +- data/imagenet-r/n03124170/videogame_2.jpg +- data/imagenet-r/n01531178/painting_34.jpg +- data/imagenet-r/n02906734/cartoon_9.jpg +- data/imagenet-r/n02481823/tattoo_0.jpg +- data/imagenet-r/n02097298/misc_34.jpg +- data/imagenet-r/n02088364/tattoo_2.jpg +- data/imagenet-r/n01514859/toy_9.jpg +- data/imagenet-r/n02110341/misc_20.jpg +- data/imagenet-r/n07614500/sketch_4.jpg +- data/imagenet-r/n02085620/sketch_8.jpg +- data/imagenet-r/n03124170/graffiti_10.jpg +- data/imagenet-r/n02165456/cartoon_13.jpg +- data/imagenet-r/n02364673/deviantart_6.jpg +- data/imagenet-r/n02165456/sketch_22.jpg +- data/imagenet-r/n01843383/deviantart_18.jpg +- data/imagenet-r/n01910747/painting_14.jpg +- data/imagenet-r/n02085620/misc_41.jpg +- data/imagenet-r/n02099712/misc_3.jpg +- data/imagenet-r/n02071294/sculpture_5.jpg +- data/imagenet-r/n01910747/graffiti_3.jpg +- data/imagenet-r/n01910747/deviantart_1.jpg +- data/imagenet-r/n03630383/art_0.jpg +- data/imagenet-r/n02701002/toy_23.jpg +- data/imagenet-r/n04347754/art_9.jpg +- data/imagenet-r/n09472597/deviantart_0.jpg +- data/imagenet-r/n01944390/sketch_11.jpg +- data/imagenet-r/n10565667/videogame_6.jpg +- data/imagenet-r/n01443537/videogame_0.jpg +- data/imagenet-r/n02134084/misc_10.jpg +- data/imagenet-r/n01614925/cartoon_10.jpg +- data/imagenet-r/n02437616/misc_4.jpg +- data/imagenet-r/n02129604/painting_5.jpg +- data/imagenet-r/n01614925/misc_1.jpg +- data/imagenet-r/n01514859/deviantart_31.jpg +- data/imagenet-r/n04409515/deviantart_2.jpg +- data/imagenet-r/n04347754/toy_4.jpg +- data/imagenet-r/n07749582/toy_6.jpg +- data/imagenet-r/n04522168/painting_17.jpg +- data/imagenet-r/n07745940/misc_1.jpg +- data/imagenet-r/n03773504/cartoon_4.jpg +- data/imagenet-r/n02317335/sketch_20.jpg +- data/imagenet-r/n02088364/misc_72.jpg +- data/imagenet-r/n07734744/art_4.jpg +- data/imagenet-r/n02129165/embroidery_10.jpg +- data/imagenet-r/n02483362/sketch_8.jpg +- data/imagenet-r/n02841315/sculpture_16.jpg +- data/imagenet-r/n07734744/misc_16.jpg +- data/imagenet-r/n01820546/painting_22.jpg +- data/imagenet-r/n02410509/origami_2.jpg +- data/imagenet-r/n02129165/cartoon_31.jpg +- data/imagenet-r/n03481172/cartoon_5.jpg +- data/imagenet-r/n01632777/cartoon_25.jpg +- data/imagenet-r/n01843383/art_30.jpg +- data/imagenet-r/n01443537/graffiti_21.jpg +- data/imagenet-r/n01644373/deviantart_20.jpg +- data/imagenet-r/n02802426/sketch_24.jpg +- data/imagenet-r/n02480855/sketch_15.jpg +- data/imagenet-r/n07873807/videogame_15.jpg +- data/imagenet-r/n02077923/sketch_5.jpg +- data/imagenet-r/n02113624/sketch_16.jpg +- data/imagenet-r/n03930630/cartoon_7.jpg +- data/imagenet-r/n01694178/toy_14.jpg +- data/imagenet-r/n04310018/deviantart_4.jpg +- data/imagenet-r/n02051845/sketch_19.jpg +- data/imagenet-r/n02363005/cartoon_31.jpg +- data/imagenet-r/n02114367/misc_40.jpg +- data/imagenet-r/n02906734/graphic_2.jpg +- data/imagenet-r/n07734744/toy_35.jpg +- data/imagenet-r/n02423022/sketch_21.jpg +- data/imagenet-r/n02423022/cartoon_25.jpg +- data/imagenet-r/n02129165/misc_5.jpg +- data/imagenet-r/n01833805/tattoo_50.jpg +- data/imagenet-r/n02510455/misc_40.jpg +- data/imagenet-r/n04192698/graffiti_3.jpg +- data/imagenet-r/n02113023/sketch_9.jpg +- data/imagenet-r/n02206856/tattoo_27.jpg +- data/imagenet-r/n07697537/misc_86.jpg +- data/imagenet-r/n02447366/sketch_10.jpg +- data/imagenet-r/n07734744/deviantart_30.jpg +- data/imagenet-r/n04465501/sketch_9.jpg +- data/imagenet-r/n02939185/embroidery_0.jpg +- data/imagenet-r/n01944390/misc_161.jpg +- data/imagenet-r/n02317335/toy_5.jpg +- data/imagenet-r/n02480855/art_5.jpg +- data/imagenet-r/n01630670/cartoon_3.jpg +- data/imagenet-r/n02138441/painting_19.jpg +- data/imagenet-r/n01784675/toy_6.jpg +- data/imagenet-r/n01944390/tattoo_20.jpg +- data/imagenet-r/n04389033/sketch_26.jpg +- data/imagenet-r/n02088094/misc_41.jpg +- data/imagenet-r/n03773504/sketch_3.jpg +- data/imagenet-r/n02123045/toy_3.jpg +- data/imagenet-r/n07873807/deviantart_20.jpg +- data/imagenet-r/n07714990/cartoon_31.jpg +- data/imagenet-r/n07753592/misc_163.jpg +- data/imagenet-r/n04141076/toy_6.jpg +- data/imagenet-r/n01882714/origami_7.jpg +- data/imagenet-r/n02129165/tattoo_13.jpg +- data/imagenet-r/n02102318/misc_2.jpg +- data/imagenet-r/n04141076/cartoon_9.jpg +- data/imagenet-r/n01484850/graphic_1.jpg +- data/imagenet-r/n02279972/cartoon_7.jpg +- data/imagenet-r/n02066245/sketch_23.jpg +- data/imagenet-r/n01748264/sketch_0.jpg +- data/imagenet-r/n01630670/toy_1.jpg +- data/imagenet-r/n03272010/cartoon_11.jpg +- data/imagenet-r/n02802426/sketch_1.jpg +- data/imagenet-r/n03272010/toy_5.jpg +- data/imagenet-r/n09472597/graffiti_5.jpg +- data/imagenet-r/n02119022/videogame_6.jpg +- data/imagenet-r/n01843383/deviantart_85.jpg +- data/imagenet-r/n04552348/sticker_2.jpg +- data/imagenet-r/n04465501/sculpture_3.jpg +- data/imagenet-r/n01630670/sketch_2.jpg +- data/imagenet-r/n02395406/painting_18.jpg +- data/imagenet-r/n02481823/deviantart_27.jpg +- data/imagenet-r/n01847000/tattoo_18.jpg +- data/imagenet-r/n02980441/art_5.jpg +- data/imagenet-r/n07734744/toy_2.jpg +- data/imagenet-r/n07697313/art_13.jpg +- data/imagenet-r/n02317335/tattoo_5.jpg +- data/imagenet-r/n03630383/cartoon_30.jpg +- data/imagenet-r/n07697537/misc_38.jpg +- data/imagenet-r/n10565667/toy_9.jpg +- data/imagenet-r/n04347754/tattoo_1.jpg +- data/imagenet-r/n02510455/misc_34.jpg +- data/imagenet-r/n02841315/cartoon_6.jpg +- data/imagenet-r/n02130308/graffiti_1.jpg +- data/imagenet-r/n01833805/painting_18.jpg +- data/imagenet-r/n01944390/misc_124.jpg +- data/imagenet-r/n01770393/tattoo_14.jpg +- data/imagenet-r/n04147183/misc_1.jpg +- data/imagenet-r/n02226429/toy_3.jpg +- data/imagenet-r/n02094433/misc_23.jpg +- data/imagenet-r/n04266014/cartoon_12.jpg +- data/imagenet-r/n02236044/graffiti_8.jpg +- data/imagenet-r/n02108915/misc_0.jpg +- data/imagenet-r/n04118538/sketch_5.jpg +- data/imagenet-r/n01518878/videogame_3.jpg +- data/imagenet-r/n02110958/embroidery_6.jpg +- data/imagenet-r/n07768694/sketch_11.jpg +- data/imagenet-r/n07753592/misc_141.jpg +- data/imagenet-r/n02009912/misc_29.jpg +- data/imagenet-r/n04409515/art_4.jpg +- data/imagenet-r/n01983481/misc_10.jpg +- data/imagenet-r/n03498962/misc_1.jpg +- data/imagenet-r/n02883205/sketch_10.jpg +- data/imagenet-r/n03495258/videogame_7.jpg +- data/imagenet-r/n01484850/cartoon_15.jpg +- data/imagenet-r/n01694178/deviantart_10.jpg +- data/imagenet-r/n03630383/cartoon_15.jpg +- data/imagenet-r/n01748264/sketch_18.jpg +- data/imagenet-r/n01630670/sketch_7.jpg +- data/imagenet-r/n02096585/misc_32.jpg +- data/imagenet-r/n02701002/cartoon_1.jpg +- data/imagenet-r/n01484850/toy_2.jpg +- data/imagenet-r/n02363005/cartoon_39.jpg +- data/imagenet-r/n02233338/misc_13.jpg +- data/imagenet-r/n03775071/cartoon_0.jpg +- data/imagenet-r/n01882714/sketch_0.jpg +- data/imagenet-r/n01694178/tattoo_1.jpg +- data/imagenet-r/n01910747/embroidery_9.jpg +- data/imagenet-r/n02123045/cartoon_5.jpg +- data/imagenet-r/n01843383/deviantart_52.jpg +- data/imagenet-r/n02110958/art_10.jpg +- data/imagenet-r/n01774750/sketch_22.jpg +- data/imagenet-r/n02108915/misc_57.jpg +- data/imagenet-r/n04389033/videogame_31.jpg +- data/imagenet-r/n02086240/sketch_17.jpg +- data/imagenet-r/n02672831/painting_7.jpg +- data/imagenet-r/n07749582/painting_12.jpg +- data/imagenet-r/n07880968/sketch_21.jpg +- data/imagenet-r/n02445715/toy_12.jpg +- data/imagenet-r/n03124170/videogame_14.jpg +- data/imagenet-r/n03481172/cartoon_19.jpg +- data/imagenet-r/n07697537/videogame_4.jpg +- data/imagenet-r/n02980441/cartoon_17.jpg +- data/imagenet-r/n04522168/sticker_3.jpg +- data/imagenet-r/n02113023/misc_16.jpg +- data/imagenet-r/n02108915/misc_18.jpg +- data/imagenet-r/n03676483/cartoon_8.jpg +- data/imagenet-r/n02481823/art_17.jpg +- data/imagenet-r/n07753592/misc_174.jpg +- data/imagenet-r/n02363005/cartoon_27.jpg +- data/imagenet-r/n04254680/tattoo_5.jpg +- data/imagenet-r/n02219486/sticker_1.jpg +- data/imagenet-r/n02102318/cartoon_0.jpg +- data/imagenet-r/n07742313/videogame_13.jpg +- data/imagenet-r/n04591713/painting_13.jpg +- data/imagenet-r/n02088094/misc_6.jpg +- data/imagenet-r/n04487394/graphic_2.jpg +- data/imagenet-r/n03930630/cartoon_5.jpg +- data/imagenet-r/n02102318/misc_35.jpg +- data/imagenet-r/n02909870/sculpture_1.jpg +- data/imagenet-r/n01784675/sketch_6.jpg +- data/imagenet-r/n03498962/sketch_9.jpg +- data/imagenet-r/n04536866/deviantart_19.jpg +- data/imagenet-r/n07873807/painting_4.jpg +- data/imagenet-r/n02325366/sketch_12.jpg +- data/imagenet-r/n04536866/origami_0.jpg +- data/imagenet-r/n02395406/sculpture_13.jpg +- data/imagenet-r/n01531178/painting_29.jpg +- data/imagenet-r/n02906734/cartoon_41.jpg +- data/imagenet-r/n02883205/art_4.jpg +- data/imagenet-r/n02071294/deviantart_0.jpg +- data/imagenet-r/n01847000/tattoo_32.jpg +- data/imagenet-r/n02672831/graffiti_5.jpg +- data/imagenet-r/n02051845/toy_0.jpg +- data/imagenet-r/n02793495/art_3.jpg +- data/imagenet-r/n07745940/art_16.jpg +- data/imagenet-r/n02797295/misc_28.jpg +- data/imagenet-r/n04465501/toy_6.jpg +- data/imagenet-r/n02268443/misc_81.jpg +- data/imagenet-r/n01531178/deviantart_5.jpg +- data/imagenet-r/n01855672/graffiti_4.jpg +- data/imagenet-r/n03773504/videogame_10.jpg +- data/imagenet-r/n02395406/cartoon_12.jpg +- data/imagenet-r/n01833805/tattoo_31.jpg +- data/imagenet-r/n02117135/toy_2.jpg +- data/imagenet-r/n02130308/graffiti_4.jpg +- data/imagenet-r/n02129165/cartoon_15.jpg +- data/imagenet-r/n01833805/cartoon_8.jpg +- data/imagenet-r/n04536866/sketch_5.jpg +- data/imagenet-r/n02099712/misc_15.jpg +- data/imagenet-r/n01614925/graffiti_2.jpg +- data/imagenet-r/n02110958/toy_8.jpg +- data/imagenet-r/n12267677/misc_91.jpg +- data/imagenet-r/n01847000/videogame_3.jpg +- data/imagenet-r/n02117135/sketch_22.jpg +- data/imagenet-r/n01484850/toy_11.jpg +- data/imagenet-r/n04266014/cartoon_5.jpg +- data/imagenet-r/n02325366/misc_38.jpg +- data/imagenet-r/n01882714/deviantart_53.jpg +- data/imagenet-r/n01531178/deviantart_4.jpg +- data/imagenet-r/n01514859/deviantart_16.jpg +- data/imagenet-r/n01784675/cartoon_2.jpg +- data/imagenet-r/n02092339/misc_45.jpg +- data/imagenet-r/n02112018/misc_18.jpg +- data/imagenet-r/n03481172/misc_4.jpg +- data/imagenet-r/n04146614/toy_25.jpg +- data/imagenet-r/n01843383/deviantart_51.jpg +- data/imagenet-r/n02085620/misc_79.jpg +- data/imagenet-r/n02088364/misc_19.jpg +- data/imagenet-r/n02007558/sketch_2.jpg +- data/imagenet-r/n03124170/art_20.jpg +- data/imagenet-r/n02480495/sketch_12.jpg +- data/imagenet-r/n04086273/videogame_8.jpg +- data/imagenet-r/n02112137/sketch_9.jpg +- data/imagenet-r/n03498962/sketch_17.jpg +- data/imagenet-r/n02096585/misc_28.jpg +- data/imagenet-r/n01944390/misc_57.jpg +- data/imagenet-r/n02119022/misc_95.jpg +- data/imagenet-r/n01494475/misc_121.jpg +- data/imagenet-r/n02410509/cartoon_24.jpg +- data/imagenet-r/n07720875/painting_44.jpg +- data/imagenet-r/n03775071/sticker_0.jpg +- data/imagenet-r/n02110958/embroidery_17.jpg +- data/imagenet-r/n02129604/painting_28.jpg +- data/imagenet-r/n07734744/deviantart_31.jpg +- data/imagenet-r/n02410509/sculpture_22.jpg +- data/imagenet-r/n07614500/graffiti_4.jpg +- data/imagenet-r/n07768694/graphic_0.jpg +- data/imagenet-r/n07753275/embroidery_11.jpg +- data/imagenet-r/n01616318/sketch_12.jpg +- data/imagenet-r/n07753275/videogame_13.jpg +- data/imagenet-r/n04086273/tattoo_16.jpg +- data/imagenet-r/n01498041/deviantart_2.jpg +- data/imagenet-r/n02447366/painting_6.jpg +- data/imagenet-r/n09472597/videogame_29.jpg +- data/imagenet-r/n02109525/misc_10.jpg +- data/imagenet-r/n02165456/painting_10.jpg +- data/imagenet-r/n02233338/misc_43.jpg +- data/imagenet-r/n02129165/cartoon_19.jpg +- data/imagenet-r/n07714990/cartoon_6.jpg +- data/imagenet-r/n02363005/misc_3.jpg +- data/imagenet-r/n02110185/sketch_22.jpg +- data/imagenet-r/n02129165/toy_27.jpg +- data/imagenet-r/n04325704/cartoon_8.jpg +- data/imagenet-r/n02236044/sculpture_28.jpg +- data/imagenet-r/n10565667/art_7.jpg +- data/imagenet-r/n02398521/sketch_22.jpg +- data/imagenet-r/n02526121/cartoon_37.jpg +- data/imagenet-r/n02007558/graphic_3.jpg +- data/imagenet-r/n12267677/misc_126.jpg +- data/imagenet-r/n03345487/misc_4.jpg +- data/imagenet-r/n02134084/videogame_6.jpg +- data/imagenet-r/n07734744/toy_22.jpg +- data/imagenet-r/n02106166/painting_13.jpg +- data/imagenet-r/n01820546/painting_12.jpg +- data/imagenet-r/n04310018/videogame_9.jpg +- data/imagenet-r/n07742313/cartoon_1.jpg +- data/imagenet-r/n04347754/sketch_8.jpg +- data/imagenet-r/n02051845/deviantart_13.jpg +- data/imagenet-r/n02092339/misc_2.jpg +- data/imagenet-r/n02226429/art_3.jpg +- data/imagenet-r/n02655020/sketch_19.jpg +- data/imagenet-r/n01614925/tattoo_17.jpg +- data/imagenet-r/n01534433/art_2.jpg +- data/imagenet-r/n01484850/painting_24.jpg +- data/imagenet-r/n04146614/sketch_0.jpg +- data/imagenet-r/n02134084/deviantart_1.jpg +- data/imagenet-r/n02117135/tattoo_5.jpg +- data/imagenet-r/n04591713/sketch_15.jpg +- data/imagenet-r/n07697537/misc_96.jpg +- data/imagenet-r/n02134084/deviantart_5.jpg +- data/imagenet-r/n03494278/cartoon_17.jpg +- data/imagenet-r/n02395406/cartoon_9.jpg +- data/imagenet-r/n04465501/origami_0.jpg +- data/imagenet-r/n01644373/tattoo_36.jpg +- data/imagenet-r/n01514859/deviantart_8.jpg +- data/imagenet-r/n02701002/tattoo_2.jpg +- data/imagenet-r/n02085620/sketch_0.jpg +- data/imagenet-r/n02119022/misc_134.jpg +- data/imagenet-r/n03498962/cartoon_16.jpg +- data/imagenet-r/n02119022/misc_43.jpg +- data/imagenet-r/n07753592/misc_113.jpg +- data/imagenet-r/n02655020/deviantart_13.jpg +- data/imagenet-r/n01910747/art_5.jpg +- data/imagenet-r/n04141076/painting_7.jpg +- data/imagenet-r/n03930630/painting_2.jpg +- data/imagenet-r/n04086273/deviantart_1.jpg +- data/imagenet-r/n02130308/painting_15.jpg +- data/imagenet-r/n02088094/misc_16.jpg +- data/imagenet-r/n02843684/sketch_2.jpg +- data/imagenet-r/n07734744/cartoon_42.jpg +- data/imagenet-r/n02279972/art_19.jpg +- data/imagenet-r/n02113799/misc_28.jpg +- data/imagenet-r/n02206856/graffiti_35.jpg +- data/imagenet-r/n02948072/origami_8.jpg +- data/imagenet-r/n04536866/painting_31.jpg +- data/imagenet-r/n02112018/misc_19.jpg +- data/imagenet-r/n02423022/cartoon_10.jpg +- data/imagenet-r/n03649909/sketch_17.jpg +- data/imagenet-r/n10565667/graphic_1.jpg +- data/imagenet-r/n12267677/deviantart_9.jpg +- data/imagenet-r/n02808440/art_7.jpg +- data/imagenet-r/n04552348/art_8.jpg +- data/imagenet-r/n01820546/painting_24.jpg +- data/imagenet-r/n07753275/embroidery_13.jpg +- data/imagenet-r/n02128757/sketch_2.jpg +- data/imagenet-r/n02129604/painting_4.jpg +- data/imagenet-r/n02364673/cartoon_6.jpg +- data/imagenet-r/n04275548/misc_9.jpg +- data/imagenet-r/n02950826/graphic_1.jpg +- data/imagenet-r/n02110341/misc_151.jpg +- data/imagenet-r/n02391049/misc_19.jpg +- data/imagenet-r/n02480855/tattoo_12.jpg +- data/imagenet-r/n02113624/misc_31.jpg +- data/imagenet-r/n01614925/tattoo_0.jpg +- data/imagenet-r/n01944390/tattoo_2.jpg +- data/imagenet-r/n02883205/art_0.jpg +- data/imagenet-r/n07697313/sculpture_6.jpg +- data/imagenet-r/n10565667/deviantart_17.jpg +- data/imagenet-r/n02951358/sketch_4.jpg +- data/imagenet-r/n07734744/sketch_6.jpg +- data/imagenet-r/n01944390/misc_69.jpg +- data/imagenet-r/n07614500/tattoo_9.jpg +- data/imagenet-r/n01694178/tattoo_15.jpg +- data/imagenet-r/n02071294/videogame_1.jpg +- data/imagenet-r/n02128757/toy_3.jpg +- data/imagenet-r/n09472597/deviantart_2.jpg +- data/imagenet-r/n02108915/misc_41.jpg +- data/imagenet-r/n03345487/sketch_20.jpg +- data/imagenet-r/n01498041/tattoo_9.jpg +- data/imagenet-r/n02948072/cartoon_17.jpg +- data/imagenet-r/n07714990/deviantart_16.jpg +- data/imagenet-r/n07697537/misc_21.jpg +- data/imagenet-r/n04146614/sketch_8.jpg +- data/imagenet-r/n02823750/sketch_6.jpg +- data/imagenet-r/n04522168/cartoon_4.jpg +- data/imagenet-r/n02085620/misc_80.jpg +- data/imagenet-r/n12267677/misc_36.jpg +- data/imagenet-r/n02165456/art_2.jpg +- data/imagenet-r/n04141076/cartoon_16.jpg +- data/imagenet-r/n07753592/misc_55.jpg +- data/imagenet-r/n02980441/deviantart_5.jpg +- data/imagenet-r/n01518878/sketch_1.jpg +- data/imagenet-r/n02110958/misc_9.jpg +- data/imagenet-r/n02206856/tattoo_1.jpg +- data/imagenet-r/n03452741/painting_8.jpg +- data/imagenet-r/n01514859/sketch_2.jpg +- data/imagenet-r/n03345487/toy_25.jpg +- data/imagenet-r/n01484850/art_14.jpg +- data/imagenet-r/n02346627/sketch_20.jpg +- data/imagenet-r/n07742313/painting_23.jpg +- data/imagenet-r/n01784675/cartoon_8.jpg +- data/imagenet-r/n07614500/embroidery_0.jpg +- data/imagenet-r/n02843684/sketch_15.jpg +- data/imagenet-r/n04141076/deviantart_13.jpg +- data/imagenet-r/n03773504/videogame_6.jpg +- data/imagenet-r/n04086273/videogame_7.jpg +- data/imagenet-r/n01677366/deviantart_10.jpg +- data/imagenet-r/n02672831/cartoon_4.jpg +- data/imagenet-r/n02110185/graphic_1.jpg +- data/imagenet-r/n02268443/sketch_19.jpg +- data/imagenet-r/n01855672/cartoon_1.jpg +- data/imagenet-r/n02447366/cartoon_24.jpg +- data/imagenet-r/n02106662/misc_47.jpg +- data/imagenet-r/n04141076/cartoon_51.jpg +- data/imagenet-r/n02481823/origami_1.jpg +- data/imagenet-r/n02445715/cartoon_6.jpg +- data/imagenet-r/n01534433/sketch_13.jpg +- data/imagenet-r/n04389033/videogame_11.jpg +- data/imagenet-r/n02129604/deviantart_37.jpg +- data/imagenet-r/n02526121/cartoon_27.jpg +- data/imagenet-r/n07720875/toy_1.jpg +- data/imagenet-r/n01882714/toy_24.jpg +- data/imagenet-r/n02088238/misc_80.jpg +- data/imagenet-r/n01820546/deviantart_31.jpg +- data/imagenet-r/n02085620/misc_78.jpg +- data/imagenet-r/n02480855/graffiti_9.jpg +- data/imagenet-r/n02066245/sketch_22.jpg +- data/imagenet-r/n02909870/cartoon_21.jpg +- data/imagenet-r/n02909870/sticker_0.jpg +- data/imagenet-r/n02088364/misc_43.jpg +- data/imagenet-r/n02486410/sketch_22.jpg +- data/imagenet-r/n02106662/sketch_20.jpg +- data/imagenet-r/n01843383/art_16.jpg +- data/imagenet-r/n01774750/painting_0.jpg +- data/imagenet-r/n02096585/misc_185.jpg +- data/imagenet-r/n02106166/painting_18.jpg +- data/imagenet-r/n02110958/graphic_3.jpg +- data/imagenet-r/n02843684/misc_26.jpg +- data/imagenet-r/n10565667/deviantart_12.jpg +- data/imagenet-r/n02841315/graffiti_2.jpg +- data/imagenet-r/n04086273/tattoo_47.jpg +- data/imagenet-r/n01534433/sketch_20.jpg +- data/imagenet-r/n07697537/misc_64.jpg +- data/imagenet-r/n02206856/toy_16.jpg +- data/imagenet-r/n02480855/sketch_7.jpg +- data/imagenet-r/n07693725/sketch_15.jpg +- data/imagenet-r/n02317335/toy_1.jpg +- data/imagenet-r/n04192698/deviantart_19.jpg +- data/imagenet-r/n07753275/painting_13.jpg +- data/imagenet-r/n02948072/cartoon_52.jpg +- data/imagenet-r/n02236044/cartoon_17.jpg +- data/imagenet-r/n09472597/sketch_20.jpg +- data/imagenet-r/n02138441/art_19.jpg +- data/imagenet-r/n01443537/deviantart_12.jpg +- data/imagenet-r/n02088364/misc_48.jpg +- data/imagenet-r/n04465501/deviantart_1.jpg +- data/imagenet-r/n02268443/misc_28.jpg +- data/imagenet-r/n02672831/cartoon_6.jpg +- data/imagenet-r/n02110185/cartoon_3.jpg +- data/imagenet-r/n02966193/toy_4.jpg +- data/imagenet-r/n04310018/sculpture_3.jpg +- data/imagenet-r/n02317335/toy_10.jpg +- data/imagenet-r/n03272010/sketch_19.jpg +- data/imagenet-r/n01944390/misc_35.jpg +- data/imagenet-r/n02102318/sculpture_0.jpg +- data/imagenet-r/n02395406/toy_32.jpg +- data/imagenet-r/n02112018/misc_46.jpg +- data/imagenet-r/n02097298/misc_47.jpg +- data/imagenet-r/n07697537/deviantart_18.jpg +- data/imagenet-r/n03345487/sketch_6.jpg +- data/imagenet-r/n07745940/sketch_16.jpg +- data/imagenet-r/n02110958/toy_1.jpg +- data/imagenet-r/n04310018/videogame_13.jpg +- data/imagenet-r/n01986214/sketch_3.jpg +- data/imagenet-r/n03775071/cartoon_23.jpg +- data/imagenet-r/n02843684/sketch_21.jpg +- data/imagenet-r/n07734744/cartoon_19.jpg +- data/imagenet-r/n01614925/deviantart_32.jpg +- data/imagenet-r/n02113799/misc_25.jpg +- data/imagenet-r/n01632777/sketch_19.jpg +- data/imagenet-r/n04347754/videogame_31.jpg +- data/imagenet-r/n01614925/sketch_18.jpg +- data/imagenet-r/n02110958/art_6.jpg +- data/imagenet-r/n02398521/videogame_5.jpg +- data/imagenet-r/n01910747/tattoo_47.jpg +- data/imagenet-r/n01443537/cartoon_16.jpg +- data/imagenet-r/n01843383/painting_31.jpg +- data/imagenet-r/n02088238/misc_43.jpg +- data/imagenet-r/n01632777/painting_5.jpg +- data/imagenet-r/n01616318/sketch_16.jpg +- data/imagenet-r/n03947888/tattoo_5.jpg +- data/imagenet-r/n02134084/misc_115.jpg +- data/imagenet-r/n01910747/sketch_22.jpg +- data/imagenet-r/n02206856/art_15.jpg +- data/imagenet-r/n02086240/misc_17.jpg +- data/imagenet-r/n03345487/misc_1.jpg +- data/imagenet-r/n02951358/painting_3.jpg +- data/imagenet-r/n02802426/cartoon_11.jpg +- data/imagenet-r/n10565667/graffiti_5.jpg +- data/imagenet-r/n01484850/sketch_5.jpg +- data/imagenet-r/n02398521/toy_15.jpg +- data/imagenet-r/n02129165/tattoo_37.jpg +- data/imagenet-r/n02655020/sketch_9.jpg +- data/imagenet-r/n04389033/graffiti_14.jpg +- data/imagenet-r/n02510455/sketch_2.jpg +- data/imagenet-r/n02088238/misc_4.jpg +- data/imagenet-r/n01630670/cartoon_0.jpg +- data/imagenet-r/n04310018/painting_3.jpg +- data/imagenet-r/n01514859/toy_1.jpg +- data/imagenet-r/n02091134/misc_78.jpg +- data/imagenet-r/n03649909/art_1.jpg +- data/imagenet-r/n02106166/sketch_5.jpg +- data/imagenet-r/n04147183/sketch_14.jpg +- data/imagenet-r/n04192698/painting_2.jpg +- data/imagenet-r/n01498041/sketch_12.jpg +- data/imagenet-r/n07697537/misc_58.jpg +- data/imagenet-r/n02437616/sculpture_7.jpg +- data/imagenet-r/n02088238/misc_36.jpg +- data/imagenet-r/n01531178/cartoon_12.jpg +- data/imagenet-r/n02279972/painting_36.jpg +- data/imagenet-r/n02966193/cartoon_20.jpg +- data/imagenet-r/n02129165/sculpture_5.jpg +- data/imagenet-r/n09472597/painting_6.jpg +- data/imagenet-r/n02236044/cartoon_36.jpg +- data/imagenet-r/n07734744/cartoon_35.jpg +- data/imagenet-r/n01855672/sketch_8.jpg +- data/imagenet-r/n01498041/deviantart_4.jpg +- data/imagenet-r/n07753592/misc_73.jpg +- data/imagenet-r/n01855672/painting_1.jpg +- data/imagenet-r/n10565667/deviantart_3.jpg +- data/imagenet-r/n01910747/graffiti_1.jpg +- data/imagenet-r/n01820546/art_9.jpg +- data/imagenet-r/n03481172/sketch_17.jpg +- data/imagenet-r/n07714571/sketch_20.jpg +- data/imagenet-r/n04325704/cartoon_1.jpg +- data/imagenet-r/n04389033/deviantart_5.jpg +- data/imagenet-r/n02906734/cartoon_51.jpg +- data/imagenet-r/n02437616/sketch_6.jpg +- data/imagenet-r/n03594945/videogame_21.jpg +- data/imagenet-r/n01534433/sketch_5.jpg +- data/imagenet-r/n01843383/art_5.jpg +- data/imagenet-r/n09835506/misc_19.jpg +- data/imagenet-r/n01630670/sculpture_3.jpg +- data/imagenet-r/n02206856/toy_43.jpg +- data/imagenet-r/n07749582/deviantart_21.jpg +- data/imagenet-r/n01806143/sketch_2.jpg +- data/imagenet-r/n12267677/misc_90.jpg +- data/imagenet-r/n01514859/sculpture_3.jpg +- data/imagenet-r/n01910747/tattoo_11.jpg +- data/imagenet-r/n02088364/misc_10.jpg +- data/imagenet-r/n07697537/deviantart_19.jpg +- data/imagenet-r/n02906734/toy_8.jpg +- data/imagenet-r/n02445715/art_6.jpg +- data/imagenet-r/n02480495/art_4.jpg +- data/imagenet-r/n03124170/videogame_1.jpg +- data/imagenet-r/n02190166/tattoo_7.jpg +- data/imagenet-r/n02130308/art_14.jpg +- data/imagenet-r/n03676483/cartoon_7.jpg +- data/imagenet-r/n02110341/sketch_20.jpg +- data/imagenet-r/n07714990/cartoon_13.jpg +- data/imagenet-r/n04389033/graffiti_15.jpg +- data/imagenet-r/n01614925/tattoo_50.jpg +- data/imagenet-r/n03594945/misc_4.jpg +- data/imagenet-r/n01847000/cartoon_10.jpg +- data/imagenet-r/n03676483/graffiti_5.jpg +- data/imagenet-r/n01944390/misc_82.jpg +- data/imagenet-r/n02219486/tattoo_23.jpg +- data/imagenet-r/n04409515/sketch_17.jpg +- data/imagenet-r/n01748264/tattoo_35.jpg +- data/imagenet-r/n03498962/cartoon_6.jpg +- data/imagenet-r/n02909870/sketch_7.jpg +- data/imagenet-r/n02099601/misc_101.jpg +- data/imagenet-r/n02097298/misc_56.jpg +- data/imagenet-r/n10565667/deviantart_16.jpg +- data/imagenet-r/n07753275/videogame_5.jpg +- data/imagenet-r/n04465501/painting_9.jpg +- data/imagenet-r/n04147183/sketch_12.jpg +- data/imagenet-r/n02009912/sketch_8.jpg +- data/imagenet-r/n02672831/cartoon_27.jpg +- data/imagenet-r/n01484850/misc_1.jpg +- data/imagenet-r/n02112018/misc_51.jpg +- data/imagenet-r/n02086240/misc_40.jpg +- data/imagenet-r/n02099601/sketch_2.jpg +- data/imagenet-r/n01944390/misc_105.jpg +- data/imagenet-r/n02128757/art_3.jpg +- data/imagenet-r/n03467068/cartoon_4.jpg +- data/imagenet-r/n01770393/cartoon_8.jpg +- data/imagenet-r/n01770393/tattoo_72.jpg +- data/imagenet-r/n02129165/deviantart_3.jpg +- data/imagenet-r/n07614500/cartoon_8.jpg +- data/imagenet-r/n07768694/videogame_2.jpg +- data/imagenet-r/n07697313/cartoon_11.jpg +- data/imagenet-r/n02268443/misc_150.jpg +- data/imagenet-r/n02110958/cartoon_6.jpg +- data/imagenet-r/n01484850/tattoo_13.jpg +- data/imagenet-r/n03930630/misc_6.jpg +- data/imagenet-r/n07697537/misc_63.jpg +- data/imagenet-r/n02480495/sketch_11.jpg +- data/imagenet-r/n01882714/cartoon_24.jpg +- data/imagenet-r/n02114367/misc_31.jpg +- data/imagenet-r/n04275548/sketch_11.jpg +- data/imagenet-r/n02066245/embroidery_0.jpg +- data/imagenet-r/n01833805/art_0.jpg +- data/imagenet-r/n02113799/sketch_23.jpg +- data/imagenet-r/n09472597/embroidery_1.jpg +- data/imagenet-r/n02939185/deviantart_12.jpg +- data/imagenet-r/n07745940/painting_15.jpg +- data/imagenet-r/n03498962/toy_2.jpg +- data/imagenet-r/n01944390/misc_102.jpg +- data/imagenet-r/n02091134/misc_76.jpg +- data/imagenet-r/n02088364/tattoo_0.jpg +- data/imagenet-r/n04536866/art_2.jpg +- data/imagenet-r/n04522168/videogame_19.jpg +- data/imagenet-r/n02113023/sketch_1.jpg +- data/imagenet-r/n02814860/videogame_2.jpg +- data/imagenet-r/n02395406/graphic_0.jpg +- data/imagenet-r/n02165456/cartoon_6.jpg +- data/imagenet-r/n04389033/videogame_43.jpg +- data/imagenet-r/n04389033/videogame_0.jpg +- data/imagenet-r/n02071294/sketch_11.jpg +- data/imagenet-r/n02823750/sketch_19.jpg +- data/imagenet-r/n01531178/cartoon_7.jpg +- data/imagenet-r/n03124170/cartoon_24.jpg +- data/imagenet-r/n07753592/misc_40.jpg +- data/imagenet-r/n01534433/deviantart_0.jpg +- data/imagenet-r/n03930630/misc_15.jpg +- data/imagenet-r/n07745940/painting_3.jpg +- data/imagenet-r/n02391049/sketch_10.jpg +- data/imagenet-r/n02802426/sketch_0.jpg +- data/imagenet-r/n04141076/cartoon_36.jpg +- data/imagenet-r/n04389033/videogame_12.jpg +- data/imagenet-r/n02071294/sketch_4.jpg +- data/imagenet-r/n04254680/deviantart_22.jpg +- data/imagenet-r/n02948072/sketch_36.jpg +- data/imagenet-r/n02364673/art_20.jpg +- data/imagenet-r/n04409515/misc_1.jpg +- data/imagenet-r/n07745940/embroidery_10.jpg +- data/imagenet-r/n02980441/videogame_10.jpg +- data/imagenet-r/n01944390/misc_70.jpg +- data/imagenet-r/n07734744/art_23.jpg +- data/imagenet-r/n02096585/misc_59.jpg +- data/imagenet-r/n07749582/misc_4.jpg +- data/imagenet-r/n02481823/painting_17.jpg +- data/imagenet-r/n01910747/tattoo_85.jpg +- data/imagenet-r/n01843383/painting_7.jpg +- data/imagenet-r/n01910747/tattoo_21.jpg +- data/imagenet-r/n02088364/misc_70.jpg +- data/imagenet-r/n01644373/cartoon_14.jpg +- data/imagenet-r/n04266014/videogame_4.jpg +- data/imagenet-r/n01820546/deviantart_7.jpg +- data/imagenet-r/n02114367/sketch_21.jpg +- data/imagenet-r/n03888257/art_6.jpg +- data/imagenet-r/n01644373/deviantart_22.jpg +- data/imagenet-r/n01531178/painting_15.jpg +- data/imagenet-r/n02128385/embroidery_1.jpg +- data/imagenet-r/n02109525/misc_1.jpg +- data/imagenet-r/n02802426/sketch_13.jpg +- data/imagenet-r/n01534433/art_0.jpg +- data/imagenet-r/n02423022/cartoon_16.jpg +- data/imagenet-r/n04310018/tattoo_7.jpg +- data/imagenet-r/n01518878/deviantart_6.jpg +- data/imagenet-r/n02119022/misc_157.jpg +- data/imagenet-r/n07697537/misc_76.jpg +- data/imagenet-r/n04141076/sculpture_17.jpg +- data/imagenet-r/n02096585/misc_42.jpg +- data/imagenet-r/n02096585/misc_14.jpg +- data/imagenet-r/n07614500/cartoon_21.jpg +- data/imagenet-r/n02129165/graphic_5.jpg +- data/imagenet-r/n02950826/misc_0.jpg +- data/imagenet-r/n02110958/cartoon_1.jpg +- data/imagenet-r/n01910747/sketch_7.jpg +- data/imagenet-r/n02106166/cartoon_10.jpg +- data/imagenet-r/n04389033/toy_4.jpg +- data/imagenet-r/n04146614/cartoon_8.jpg +- data/imagenet-r/n01986214/origami_4.jpg +- data/imagenet-r/n01882714/painting_4.jpg +- data/imagenet-r/n02655020/sketch_3.jpg +- data/imagenet-r/n02117135/painting_4.jpg +- data/imagenet-r/n01784675/tattoo_2.jpg +- data/imagenet-r/n09835506/videogame_13.jpg +- data/imagenet-r/n02980441/toy_8.jpg +- data/imagenet-r/n01806143/cartoon_0.jpg +- data/imagenet-r/n07614500/graphic_2.jpg +- data/imagenet-r/n01774750/cartoon_2.jpg +- data/imagenet-r/n07614500/toy_14.jpg +- data/imagenet-r/n02110341/misc_12.jpg +- data/imagenet-r/n07880968/deviantart_7.jpg +- data/imagenet-r/n01882714/deviantart_49.jpg +- data/imagenet-r/n02480855/painting_3.jpg +- data/imagenet-r/n02110341/misc_23.jpg +- data/imagenet-r/n04522168/sketch_1.jpg +- data/imagenet-r/n03775071/sketch_14.jpg +- data/imagenet-r/n02206856/art_22.jpg +- data/imagenet-r/n01820546/painting_13.jpg +- data/imagenet-r/n02948072/sketch_12.jpg +- data/imagenet-r/n02071294/deviantart_41.jpg +- data/imagenet-r/n02906734/sketch_3.jpg +- data/imagenet-r/n07753592/misc_32.jpg +- data/imagenet-r/n02395406/toy_8.jpg +- data/imagenet-r/n02363005/sculpture_2.jpg +- data/imagenet-r/n02447366/sketch_13.jpg +- data/imagenet-r/n01514859/sketch_14.jpg +- data/imagenet-r/n02356798/cartoon_0.jpg +- data/imagenet-r/n02655020/videogame_20.jpg +- data/imagenet-r/n02117135/sketch_19.jpg +- data/imagenet-r/n02108089/misc_23.jpg +- data/imagenet-r/n02129604/tattoo_49.jpg +- data/imagenet-r/n01748264/tattoo_26.jpg +- data/imagenet-r/n02130308/painting_18.jpg +- data/imagenet-r/n02279972/tattoo_23.jpg +- data/imagenet-r/n01518878/sculpture_1.jpg +- data/imagenet-r/n01843383/painting_15.jpg +- data/imagenet-r/n04389033/toy_13.jpg +- data/imagenet-r/n02206856/cartoon_70.jpg +- data/imagenet-r/n02085620/misc_66.jpg +- data/imagenet-r/n01774750/art_6.jpg +- data/imagenet-r/n02106030/origami_0.jpg +- data/imagenet-r/n03930630/painting_0.jpg +- data/imagenet-r/n02363005/graphic_2.jpg +- data/imagenet-r/n02071294/sketch_3.jpg +- data/imagenet-r/n04552348/misc_3.jpg +- data/imagenet-r/n02909870/art_2.jpg +- data/imagenet-r/n03124170/art_11.jpg +- data/imagenet-r/n01443537/sketch_8.jpg +- data/imagenet-r/n01944390/deviantart_8.jpg +- data/imagenet-r/n09472597/misc_2.jpg +- data/imagenet-r/n01910747/painting_13.jpg +- data/imagenet-r/n01748264/tattoo_22.jpg +- data/imagenet-r/n04266014/sketch_12.jpg +- data/imagenet-r/n07714990/painting_0.jpg +- data/imagenet-r/n02094433/misc_55.jpg +- data/imagenet-r/n02607072/misc_61.jpg +- data/imagenet-r/n02007558/misc_21.jpg +- data/imagenet-r/n02268443/misc_60.jpg +- data/imagenet-r/n02096585/misc_184.jpg +- data/imagenet-r/n02110341/misc_94.jpg +- data/imagenet-r/n02085620/sketch_11.jpg +- data/imagenet-r/n02423022/cartoon_0.jpg +- data/imagenet-r/n01644373/sketch_14.jpg +- data/imagenet-r/n04254680/deviantart_20.jpg +- data/imagenet-r/n07753592/misc_153.jpg +- data/imagenet-r/n12267677/deviantart_14.jpg +- data/imagenet-r/n04146614/videogame_9.jpg +- data/imagenet-r/n03710193/deviantart_1.jpg +- data/imagenet-r/n03930630/sketch_5.jpg +- data/imagenet-r/n02841315/cartoon_31.jpg +- data/imagenet-r/n03773504/videogame_15.jpg +- data/imagenet-r/n02130308/tattoo_16.jpg +- data/imagenet-r/n03930630/sketch_10.jpg +- data/imagenet-r/n02948072/embroidery_22.jpg +- data/imagenet-r/n02906734/toy_4.jpg +- data/imagenet-r/n04310018/painting_31.jpg +- data/imagenet-r/n03498962/cartoon_4.jpg +- data/imagenet-r/n07697313/painting_12.jpg +- data/imagenet-r/n02480855/tattoo_14.jpg +- data/imagenet-r/n02219486/sculpture_4.jpg +- data/imagenet-r/n07697313/misc_1.jpg +- data/imagenet-r/n02129604/toy_10.jpg +- data/imagenet-r/n02130308/painting_6.jpg +- data/imagenet-r/n09472597/videogame_15.jpg +- data/imagenet-r/n02808440/cartoon_11.jpg +- data/imagenet-r/n01518878/graphic_4.jpg +- data/imagenet-r/n02236044/sculpture_12.jpg +- data/imagenet-r/n07718472/sketch_20.jpg +- data/imagenet-r/n02206856/painting_20.jpg +- data/imagenet-r/n04086273/art_13.jpg +- data/imagenet-r/n01847000/cartoon_7.jpg +- data/imagenet-r/n04552348/deviantart_1.jpg +- data/imagenet-r/n04552348/videogame_2.jpg +- data/imagenet-r/n02395406/cartoon_1.jpg +- data/imagenet-r/n01806143/graphic_0.jpg +- data/imagenet-r/n02364673/sketch_22.jpg +- data/imagenet-r/n01616318/sketch_14.jpg +- data/imagenet-r/n07695742/cartoon_19.jpg +- data/imagenet-r/n02094433/misc_5.jpg +- data/imagenet-r/n03498962/sketch_20.jpg +- data/imagenet-r/n01614925/sculpture_9.jpg +- data/imagenet-r/n02364673/sketch_14.jpg +- data/imagenet-r/n04522168/graffiti_2.jpg +- data/imagenet-r/n07745940/painting_4.jpg +- data/imagenet-r/n02325366/misc_20.jpg +- data/imagenet-r/n02480855/tattoo_40.jpg +- data/imagenet-r/n07873807/deviantart_21.jpg +- data/imagenet-r/n02363005/graphic_5.jpg +- data/imagenet-r/n04133789/misc_1.jpg +- data/imagenet-r/n02391049/misc_120.jpg +- data/imagenet-r/n07697537/deviantart_25.jpg +- data/imagenet-r/n01944390/misc_93.jpg +- data/imagenet-r/n02099601/misc_22.jpg +- data/imagenet-r/n02129165/sticker_5.jpg +- data/imagenet-r/n04591713/painting_14.jpg +- data/imagenet-r/n02423022/cartoon_4.jpg +- data/imagenet-r/n01514859/painting_34.jpg +- data/imagenet-r/n02655020/videogame_6.jpg +- data/imagenet-r/n02356798/graffiti_1.jpg +- data/imagenet-r/n04552348/art_3.jpg +- data/imagenet-r/n02233338/misc_33.jpg +- data/imagenet-r/n02655020/videogame_12.jpg +- data/imagenet-r/n02398521/sculpture_16.jpg +- data/imagenet-r/n02398521/graffiti_4.jpg +- data/imagenet-r/n07873807/cartoon_5.jpg +- data/imagenet-r/n02099601/misc_39.jpg +- data/imagenet-r/n01644373/painting_24.jpg +- data/imagenet-r/n01882714/painting_2.jpg +- data/imagenet-r/n03773504/toy_1.jpg +- data/imagenet-r/n03930630/sketch_1.jpg +- data/imagenet-r/n02206856/art_3.jpg +- data/imagenet-r/n07745940/toy_5.jpg +- data/imagenet-r/n07697313/toy_16.jpg +- data/imagenet-r/n01616318/misc_2.jpg +- data/imagenet-r/n07614500/graphic_6.jpg +- data/imagenet-r/n01910747/embroidery_10.jpg +- data/imagenet-r/n02112137/sketch_0.jpg +- data/imagenet-r/n02480495/painting_28.jpg +- data/imagenet-r/n02356798/painting_4.jpg +- data/imagenet-r/n01614925/painting_14.jpg +- data/imagenet-r/n02110341/misc_14.jpg +- data/imagenet-r/n02363005/cartoon_19.jpg +- data/imagenet-r/n02130308/art_11.jpg +- data/imagenet-r/n02423022/sketch_2.jpg +- data/imagenet-r/n02114367/misc_5.jpg +- data/imagenet-r/n03498962/cartoon_12.jpg +- data/imagenet-r/n02481823/sketch_22.jpg +- data/imagenet-r/n03494278/painting_8.jpg +- data/imagenet-r/n03495258/tattoo_0.jpg +- data/imagenet-r/n01531178/sculpture_0.jpg +- data/imagenet-r/n02948072/painting_10.jpg +- data/imagenet-r/n03124170/toy_15.jpg +- data/imagenet-r/n02445715/painting_13.jpg +- data/imagenet-r/n07753592/misc_81.jpg +- data/imagenet-r/n09472597/cartoon_4.jpg +- data/imagenet-r/n02113023/sketch_15.jpg +- data/imagenet-r/n04266014/videogame_26.jpg +- data/imagenet-r/n02233338/sketch_2.jpg +- data/imagenet-r/n01774750/tattoo_2.jpg +- data/imagenet-r/n01944390/misc_111.jpg +- data/imagenet-r/n02395406/sculpture_0.jpg +- data/imagenet-r/n02129604/embroidery_6.jpg +- data/imagenet-r/n04552348/sculpture_0.jpg +- data/imagenet-r/n07753592/misc_158.jpg +- data/imagenet-r/n01514859/deviantart_41.jpg +- data/imagenet-r/n04141076/deviantart_4.jpg +- data/imagenet-r/n02051845/art_7.jpg +- data/imagenet-r/n03124170/toy_8.jpg +- data/imagenet-r/n02233338/sketch_23.jpg +- data/imagenet-r/n01518878/cartoon_27.jpg +- data/imagenet-r/n01882714/painting_9.jpg +- data/imagenet-r/n07734744/sculpture_7.jpg +- data/imagenet-r/n02410509/art_20.jpg +- data/imagenet-r/n02363005/art_7.jpg +- data/imagenet-r/n04310018/sketch_10.jpg +- data/imagenet-r/n01616318/cartoon_6.jpg +- data/imagenet-r/n04275548/deviantart_3.jpg +- data/imagenet-r/n02165456/toy_26.jpg +- data/imagenet-r/n01531178/cartoon_28.jpg +- data/imagenet-r/n02481823/sculpture_7.jpg +- data/imagenet-r/n01770393/cartoon_11.jpg +- data/imagenet-r/n04086273/tattoo_42.jpg +- data/imagenet-r/n01882714/cartoon_35.jpg +- data/imagenet-r/n02106550/misc_48.jpg +- data/imagenet-r/n02051845/art_10.jpg +- data/imagenet-r/n03494278/sketch_15.jpg +- data/imagenet-r/n04133789/sketch_5.jpg +- data/imagenet-r/n02091134/misc_23.jpg +- data/imagenet-r/n02607072/misc_74.jpg +- data/imagenet-r/n04141076/art_11.jpg +- data/imagenet-r/n01833805/graffiti_5.jpg +- data/imagenet-r/n07920052/sticker_0.jpg +- data/imagenet-r/n01944390/misc_151.jpg +- data/imagenet-r/n02226429/painting_1.jpg +- data/imagenet-r/n02480855/tattoo_38.jpg +- data/imagenet-r/n04465501/toy_13.jpg +- data/imagenet-r/n01784675/sketch_16.jpg +- data/imagenet-r/n01518878/origami_5.jpg +- data/imagenet-r/n01847000/misc_15.jpg +- data/imagenet-r/n07753275/toy_8.jpg +- data/imagenet-r/n02051845/tattoo_7.jpg +- data/imagenet-r/n01986214/painting_3.jpg +- data/imagenet-r/n03495258/cartoon_12.jpg +- data/imagenet-r/n02655020/sketch_7.jpg +- data/imagenet-r/n04086273/misc_4.jpg +- data/imagenet-r/n01847000/misc_18.jpg +- data/imagenet-r/n03372029/sculpture_33.jpg +- data/imagenet-r/n04325704/graffiti_2.jpg +- data/imagenet-r/n02906734/sculpture_0.jpg +- data/imagenet-r/n02841315/cartoon_18.jpg +- data/imagenet-r/n07697313/art_26.jpg +- data/imagenet-r/n02363005/sketch_14.jpg +- data/imagenet-r/n04266014/cartoon_19.jpg +- data/imagenet-r/n02129604/toy_17.jpg +- data/imagenet-r/n03345487/toy_13.jpg +- data/imagenet-r/n01944390/tattoo_7.jpg +- data/imagenet-r/n02206856/deviantart_1.jpg +- data/imagenet-r/n04118538/cartoon_31.jpg +- data/imagenet-r/n12267677/sketch_21.jpg +- data/imagenet-r/n02480855/tattoo_1.jpg +- data/imagenet-r/n01534433/sketch_21.jpg +- data/imagenet-r/n01784675/sketch_12.jpg +- data/imagenet-r/n02236044/sketch_20.jpg +- data/imagenet-r/n07693725/cartoon_27.jpg +- data/imagenet-r/n03947888/videogame_0.jpg +- data/imagenet-r/n02056570/sketch_19.jpg +- data/imagenet-r/n03498962/sketch_13.jpg +- data/imagenet-r/n02114367/sketch_15.jpg +- data/imagenet-r/n04141076/sculpture_27.jpg +- data/imagenet-r/n02317335/tattoo_0.jpg +- data/imagenet-r/n01770393/sketch_7.jpg +- data/imagenet-r/n02106550/misc_4.jpg +- data/imagenet-r/n01632777/cartoon_13.jpg +- data/imagenet-r/n02129604/tattoo_32.jpg +- data/imagenet-r/n04254680/videogame_19.jpg +- data/imagenet-r/n02206856/misc_16.jpg +- data/imagenet-r/n02980441/misc_1.jpg +- data/imagenet-r/n01910747/painting_16.jpg +- data/imagenet-r/n02814860/painting_4.jpg +- data/imagenet-r/n04266014/toy_11.jpg +- data/imagenet-r/n01443537/deviantart_11.jpg +- data/imagenet-r/n04310018/deviantart_1.jpg +- data/imagenet-r/n02701002/cartoon_6.jpg +- data/imagenet-r/n02096585/misc_159.jpg +- data/imagenet-r/n02110185/painting_38.jpg +- data/imagenet-r/n02051845/deviantart_4.jpg +- data/imagenet-r/n04141076/deviantart_18.jpg +- data/imagenet-r/n04409515/cartoon_4.jpg +- data/imagenet-r/n02226429/sticker_1.jpg +- data/imagenet-r/n02948072/deviantart_19.jpg +- data/imagenet-r/n02701002/videogame_6.jpg +- data/imagenet-r/n03498962/toy_3.jpg +- data/imagenet-r/n07734744/painting_30.jpg +- data/imagenet-r/n02106166/sketch_13.jpg +- data/imagenet-r/n07742313/videogame_8.jpg +- data/imagenet-r/n01944390/misc_142.jpg +- data/imagenet-r/n01882714/graphic_4.jpg +- data/imagenet-r/n02356798/sculpture_0.jpg +- data/imagenet-r/n09472597/toy_1.jpg +- data/imagenet-r/n02410509/painting_21.jpg +- data/imagenet-r/n01494475/misc_142.jpg +- data/imagenet-r/n07697537/misc_93.jpg +- data/imagenet-r/n03947888/toy_6.jpg +- data/imagenet-r/n02110341/misc_9.jpg +- data/imagenet-r/n03424325/sketch_12.jpg +- data/imagenet-r/n02701002/toy_13.jpg +- data/imagenet-r/n01882714/art_0.jpg +- data/imagenet-r/n02233338/misc_47.jpg +- data/imagenet-r/n03594945/graffiti_2.jpg +- data/imagenet-r/n01644373/tattoo_22.jpg +- data/imagenet-r/n02108915/misc_126.jpg +- data/imagenet-r/n02106166/sketch_7.jpg +- data/imagenet-r/n04552348/painting_3.jpg +- data/imagenet-r/n02909870/graphic_9.jpg +- data/imagenet-r/n02236044/tattoo_2.jpg +- data/imagenet-r/n01498041/sculpture_1.jpg +- data/imagenet-r/n02909870/sketch_17.jpg +- data/imagenet-r/n02226429/cartoon_3.jpg +- data/imagenet-r/n01644373/painting_6.jpg +- data/imagenet-r/n02085620/misc_93.jpg +- data/imagenet-r/n09472597/cartoon_28.jpg +- data/imagenet-r/n04536866/deviantart_15.jpg +- data/imagenet-r/n07714990/cartoon_11.jpg +- data/imagenet-r/n03345487/sketch_22.jpg +- data/imagenet-r/n02364673/toy_0.jpg +- data/imagenet-r/n02410509/sketch_19.jpg +- data/imagenet-r/n03372029/sketch_6.jpg +- data/imagenet-r/n02814860/art_14.jpg +- data/imagenet-r/n02219486/tattoo_1.jpg +- data/imagenet-r/n01882714/tattoo_1.jpg +- data/imagenet-r/n03124170/cartoon_13.jpg +- data/imagenet-r/n02088364/misc_14.jpg +- data/imagenet-r/n02007558/cartoon_21.jpg +- data/imagenet-r/n01531178/tattoo_9.jpg +- data/imagenet-r/n07697313/art_39.jpg +- data/imagenet-r/n02129604/painting_14.jpg +- data/imagenet-r/n02129165/tattoo_70.jpg +- data/imagenet-r/n02948072/embroidery_11.jpg +- data/imagenet-r/n02236044/sketch_13.jpg +- data/imagenet-r/n02129165/tattoo_61.jpg +- data/imagenet-r/n02088364/misc_46.jpg +- data/imagenet-r/n02129604/embroidery_4.jpg +- data/imagenet-r/n03424325/misc_7.jpg +- data/imagenet-r/n02948072/graffiti_0.jpg +- data/imagenet-r/n04347754/videogame_6.jpg +- data/imagenet-r/n02808440/painting_20.jpg +- data/imagenet-r/n02110958/tattoo_18.jpg +- data/imagenet-r/n01632777/sketch_14.jpg +- data/imagenet-r/n04310018/videogame_11.jpg +- data/imagenet-r/n02607072/deviantart_1.jpg +- data/imagenet-r/n02607072/misc_105.jpg +- data/imagenet-r/n02086240/sketch_8.jpg +- data/imagenet-r/n02117135/tattoo_4.jpg +- data/imagenet-r/n02085620/misc_33.jpg +- data/imagenet-r/n07742313/sketch_13.jpg +- data/imagenet-r/n04310018/graphic_3.jpg +- data/imagenet-r/n01882714/graphic_7.jpg +- data/imagenet-r/n07614500/sketch_8.jpg +- data/imagenet-r/n02108915/misc_31.jpg +- data/imagenet-r/n07745940/painting_7.jpg +- data/imagenet-r/n02948072/deviantart_13.jpg +- data/imagenet-r/n02007558/tattoo_63.jpg +- data/imagenet-r/n07749582/sketch_13.jpg +- data/imagenet-r/n02099712/misc_38.jpg +- data/imagenet-r/n04141076/painting_50.jpg +- data/imagenet-r/n02268443/misc_118.jpg +- data/imagenet-r/n02088238/sketch_11.jpg +- data/imagenet-r/n07720875/art_16.jpg +- data/imagenet-r/n02096585/sketch_5.jpg +- data/imagenet-r/n02980441/videogame_13.jpg +- data/imagenet-r/n02486410/painting_13.jpg +- data/imagenet-r/n04086273/embroidery_0.jpg +- data/imagenet-r/n07873807/deviantart_0.jpg +- data/imagenet-r/n02883205/cartoon_23.jpg +- data/imagenet-r/n02843684/sketch_0.jpg +- data/imagenet-r/n04409515/deviantart_7.jpg +- data/imagenet-r/n01806143/deviantart_11.jpg +- data/imagenet-r/n04118538/sculpture_0.jpg +- data/imagenet-r/n04536866/videogame_6.jpg +- data/imagenet-r/n02672831/painting_10.jpg +- data/imagenet-r/n01882714/graphic_3.jpg +- data/imagenet-r/n02007558/graffiti_1.jpg +- data/imagenet-r/n07749582/graphic_3.jpg +- data/imagenet-r/n02096585/tattoo_30.jpg +- data/imagenet-r/n02129165/embroidery_3.jpg +- data/imagenet-r/n02423022/videogame_4.jpg +- data/imagenet-r/n07695742/sketch_23.jpg +- data/imagenet-r/n04147183/painting_11.jpg +- data/imagenet-r/n07768694/sketch_2.jpg +- data/imagenet-r/n02007558/embroidery_23.jpg +- data/imagenet-r/n02088238/misc_82.jpg +- data/imagenet-r/n03481172/toy_2.jpg +- data/imagenet-r/n02526121/cartoon_9.jpg +- data/imagenet-r/n04141076/sketch_16.jpg +- data/imagenet-r/n07745940/deviantart_18.jpg +- data/imagenet-r/n04086273/tattoo_25.jpg +- data/imagenet-r/n02526121/graphic_0.jpg +- data/imagenet-r/n02219486/misc_9.jpg +- data/imagenet-r/n02007558/sketch_14.jpg +- data/imagenet-r/n03602883/sketch_9.jpg +- data/imagenet-r/n02906734/painting_8.jpg +- data/imagenet-r/n07693725/sketch_18.jpg +- data/imagenet-r/n01910747/toy_4.jpg +- data/imagenet-r/n01944390/deviantart_5.jpg +- data/imagenet-r/n01910747/painting_3.jpg +- data/imagenet-r/n02814860/art_6.jpg +- data/imagenet-r/n10565667/videogame_25.jpg +- data/imagenet-r/n01694178/painting_2.jpg +- data/imagenet-r/n03773504/art_0.jpg +- data/imagenet-r/n04146614/toy_2.jpg +- data/imagenet-r/n02007558/painting_1.jpg +- data/imagenet-r/n02206856/painting_18.jpg +- data/imagenet-r/n01833805/tattoo_80.jpg +- data/imagenet-r/n03676483/sketch_15.jpg +- data/imagenet-r/n02793495/sketch_8.jpg +- data/imagenet-r/n01531178/cartoon_29.jpg +- data/imagenet-r/n02110958/graffiti_0.jpg +- data/imagenet-r/n02088364/sketch_2.jpg +- data/imagenet-r/n02486410/cartoon_27.jpg +- data/imagenet-r/n02481823/painting_26.jpg +- data/imagenet-r/n01986214/toy_3.jpg +- data/imagenet-r/n02364673/sketch_5.jpg +- data/imagenet-r/n02106662/misc_27.jpg +- data/imagenet-r/n04141076/sculpture_12.jpg +- data/imagenet-r/n01833805/tattoo_27.jpg +- data/imagenet-r/n02268443/misc_160.jpg +- data/imagenet-r/n02909870/sticker_3.jpg +- data/imagenet-r/n02086240/sketch_0.jpg +- data/imagenet-r/n02071294/toy_1.jpg +- data/imagenet-r/n01748264/deviantart_10.jpg +- data/imagenet-r/n02655020/misc_31.jpg +- data/imagenet-r/n02088238/misc_90.jpg +- data/imagenet-r/n09472597/videogame_17.jpg +- data/imagenet-r/n07768694/painting_4.jpg +- data/imagenet-r/n02395406/painting_3.jpg +- data/imagenet-r/n02793495/sketch_11.jpg +- data/imagenet-r/n03124170/painting_26.jpg +- data/imagenet-r/n03345487/sketch_5.jpg +- data/imagenet-r/n03498962/videogame_4.jpg +- data/imagenet-r/n10565667/sketch_15.jpg +- data/imagenet-r/n02802426/cartoon_21.jpg +- data/imagenet-r/n02236044/painting_17.jpg +- data/imagenet-r/n07920052/sketch_18.jpg +- data/imagenet-r/n02526121/cartoon_35.jpg +- data/imagenet-r/n03930630/deviantart_6.jpg +- data/imagenet-r/n04266014/sketch_9.jpg +- data/imagenet-r/n12267677/misc_104.jpg +- data/imagenet-r/n02268443/misc_154.jpg +- data/imagenet-r/n02841315/sketch_0.jpg +- data/imagenet-r/n02098286/sketch_6.jpg +- data/imagenet-r/n07697313/cartoon_1.jpg +- data/imagenet-r/n02814860/cartoon_11.jpg +- data/imagenet-r/n01518878/sculpture_12.jpg +- data/imagenet-r/n02906734/graffiti_7.jpg +- data/imagenet-r/n02206856/tattoo_19.jpg +- data/imagenet-r/n02088238/misc_12.jpg +- data/imagenet-r/n03594945/sketch_9.jpg +- data/imagenet-r/n01882714/sketch_3.jpg +- data/imagenet-r/n02356798/painting_1.jpg +- data/imagenet-r/n01806143/graffiti_9.jpg +- data/imagenet-r/n02980441/misc_3.jpg +- data/imagenet-r/n02802426/sketch_11.jpg +- data/imagenet-r/n04275548/embroidery_13.jpg +- data/imagenet-r/n01944390/misc_65.jpg +- data/imagenet-r/n02749479/misc_31.jpg +- data/imagenet-r/n02410509/sculpture_52.jpg +- data/imagenet-r/n04141076/cartoon_17.jpg +- data/imagenet-r/n02106030/painting_2.jpg +- data/imagenet-r/n02092339/sketch_22.jpg +- data/imagenet-r/n01494475/misc_31.jpg +- data/imagenet-r/n02138441/art_17.jpg +- data/imagenet-r/n02130308/painting_22.jpg +- data/imagenet-r/n03424325/videogame_19.jpg +- data/imagenet-r/n04146614/videogame_18.jpg +- data/imagenet-r/n04147183/sketch_5.jpg +- data/imagenet-r/n07693725/cartoon_13.jpg +- data/imagenet-r/n02793495/graphic_0.jpg +- data/imagenet-r/n02085620/sketch_12.jpg +- data/imagenet-r/n03710193/misc_19.jpg +- data/imagenet-r/n02106550/sketch_7.jpg +- data/imagenet-r/n01498041/cartoon_11.jpg +- data/imagenet-r/n04147183/misc_0.jpg +- data/imagenet-r/n01518878/cartoon_34.jpg +- data/imagenet-r/n02129604/toy_4.jpg +- data/imagenet-r/n03775071/art_1.jpg +- data/imagenet-r/n01784675/videogame_1.jpg +- data/imagenet-r/n02906734/sketch_21.jpg +- data/imagenet-r/n02110958/sketch_19.jpg +- data/imagenet-r/n10565667/toy_1.jpg +- data/imagenet-r/n01494475/misc_44.jpg +- data/imagenet-r/n01843383/deviantart_95.jpg +- data/imagenet-r/n07714990/painting_5.jpg +- data/imagenet-r/n07714571/graffiti_0.jpg +- data/imagenet-r/n03888257/cartoon_19.jpg +- data/imagenet-r/n07745940/art_10.jpg +- data/imagenet-r/n02948072/misc_10.jpg +- data/imagenet-r/n01514859/deviantart_11.jpg +- data/imagenet-r/n01531178/painting_6.jpg +- data/imagenet-r/n03498962/cartoon_10.jpg +- data/imagenet-r/n02445715/cartoon_15.jpg +- data/imagenet-r/n04536866/sketch_13.jpg +- data/imagenet-r/n01443537/graffiti_3.jpg +- data/imagenet-r/n02939185/painting_1.jpg +- data/imagenet-r/n02823750/cartoon_22.jpg +- data/imagenet-r/n03495258/tattoo_1.jpg +- data/imagenet-r/n07697313/graffiti_2.jpg +- data/imagenet-r/n07697313/cartoon_2.jpg +- data/imagenet-r/n02481823/deviantart_12.jpg +- data/imagenet-r/n01882714/sketch_6.jpg +- data/imagenet-r/n02071294/deviantart_34.jpg +- data/imagenet-r/n07873807/painting_1.jpg +- data/imagenet-r/n02814860/sketch_0.jpg +- data/imagenet-r/n01616318/graphic_5.jpg +- data/imagenet-r/n02085620/misc_2.jpg +- data/imagenet-r/n07734744/toy_40.jpg +- data/imagenet-r/n02007558/tattoo_14.jpg +- data/imagenet-r/n04146614/sketch_11.jpg +- data/imagenet-r/n02106030/art_14.jpg +- data/imagenet-r/n04310018/videogame_32.jpg +- data/imagenet-r/n02481823/cartoon_8.jpg +- data/imagenet-r/n02113624/sketch_17.jpg +- data/imagenet-r/n01498041/tattoo_10.jpg +- data/imagenet-r/n02206856/cartoon_11.jpg +- data/imagenet-r/n01494475/sketch_14.jpg +- data/imagenet-r/n04347754/origami_0.jpg +- data/imagenet-r/n02114367/misc_2.jpg +- data/imagenet-r/n02077923/misc_8.jpg +- data/imagenet-r/n07753592/misc_46.jpg +- data/imagenet-r/n02007558/graphic_4.jpg +- data/imagenet-r/n07749582/graphic_5.jpg +- data/imagenet-r/n01484850/graffiti_1.jpg +- data/imagenet-r/n03494278/sketch_17.jpg +- data/imagenet-r/n01843383/tattoo_14.jpg +- data/imagenet-r/n01770393/sketch_6.jpg +- data/imagenet-r/n01882714/deviantart_27.jpg +- data/imagenet-r/n02128757/sketch_19.jpg +- data/imagenet-r/n03773504/videogame_8.jpg +- data/imagenet-r/n02655020/misc_64.jpg +- data/imagenet-r/n07714990/sketch_18.jpg +- data/imagenet-r/n02486410/painting_7.jpg +- data/imagenet-r/n12267677/misc_24.jpg +- data/imagenet-r/n04275548/sticker_3.jpg +- data/imagenet-r/n07614500/cartoon_22.jpg +- data/imagenet-r/n02480855/tattoo_56.jpg +- data/imagenet-r/n02110341/misc_52.jpg +- data/imagenet-r/n03124170/toy_12.jpg +- data/imagenet-r/n07753275/art_4.jpg +- data/imagenet-r/n01614925/deviantart_23.jpg +- data/imagenet-r/n03775071/painting_2.jpg +- data/imagenet-r/n02391049/misc_77.jpg +- data/imagenet-r/n03676483/sculpture_3.jpg +- data/imagenet-r/n02007558/graffiti_29.jpg +- data/imagenet-r/n02129604/tattoo_38.jpg +- data/imagenet-r/n04141076/misc_3.jpg +- data/imagenet-r/n02134084/sketch_14.jpg +- data/imagenet-r/n01882714/deviantart_45.jpg +- data/imagenet-r/n02769748/sketch_25.jpg +- data/imagenet-r/n01843383/deviantart_68.jpg +- data/imagenet-r/n07768694/sketch_19.jpg +- data/imagenet-r/n02097298/misc_19.jpg +- data/imagenet-r/n02607072/misc_104.jpg +- data/imagenet-r/n02110341/misc_53.jpg +- data/imagenet-r/n01518878/graffiti_6.jpg +- data/imagenet-r/n03602883/misc_22.jpg +- data/imagenet-r/n01882714/origami_4.jpg +- data/imagenet-r/n04141076/sketch_2.jpg +- data/imagenet-r/n07718472/sketch_17.jpg +- data/imagenet-r/n01820546/sketch_1.jpg +- data/imagenet-r/n02423022/sculpture_4.jpg +- data/imagenet-r/n02480855/tattoo_59.jpg +- data/imagenet-r/n03775071/sketch_16.jpg +- data/imagenet-r/n09472597/cartoon_12.jpg +- data/imagenet-r/n07693725/sketch_11.jpg +- data/imagenet-r/n07749582/deviantart_22.jpg +- data/imagenet-r/n04266014/sketch_19.jpg +- data/imagenet-r/n02092339/misc_21.jpg +- data/imagenet-r/n02909870/sticker_1.jpg +- data/imagenet-r/n07873807/sketch_10.jpg +- data/imagenet-r/n04487394/sketch_11.jpg +- data/imagenet-r/n02129604/deviantart_35.jpg +- data/imagenet-r/n02655020/misc_59.jpg +- data/imagenet-r/n02086240/misc_20.jpg +- data/imagenet-r/n04133789/art_6.jpg +- data/imagenet-r/n02480495/tattoo_3.jpg +- data/imagenet-r/n02129165/cartoon_30.jpg +- data/imagenet-r/n02410509/sculpture_48.jpg +- data/imagenet-r/n07697537/sketch_17.jpg +- data/imagenet-r/n04266014/toy_26.jpg +- data/imagenet-r/n07697537/deviantart_10.jpg +- data/imagenet-r/n02088364/misc_52.jpg +- data/imagenet-r/n03888257/sketch_22.jpg +- data/imagenet-r/n01784675/sculpture_2.jpg +- data/imagenet-r/n07697313/cartoon_24.jpg +- data/imagenet-r/n04266014/deviantart_2.jpg +- data/imagenet-r/n02134084/misc_108.jpg +- data/imagenet-r/n04254680/sketch_19.jpg +- data/imagenet-r/n02346627/cartoon_19.jpg +- data/imagenet-r/n01833805/sculpture_6.jpg +- data/imagenet-r/n07720875/painting_14.jpg +- data/imagenet-r/n02128385/painting_8.jpg +- data/imagenet-r/n03495258/art_1.jpg +- data/imagenet-r/n02128385/cartoon_0.jpg +- data/imagenet-r/n03947888/tattoo_19.jpg +- data/imagenet-r/n01882714/cartoon_47.jpg +- data/imagenet-r/n02112018/tattoo_0.jpg +- data/imagenet-r/n09472597/sketch_30.jpg +- data/imagenet-r/n02480495/cartoon_3.jpg +- data/imagenet-r/n02395406/toy_13.jpg +- data/imagenet-r/n02486410/cartoon_9.jpg +- data/imagenet-r/n01514859/graffiti_2.jpg +- data/imagenet-r/n03888257/painting_0.jpg +- data/imagenet-r/n01910747/cartoon_20.jpg +- data/imagenet-r/n01616318/deviantart_13.jpg +- data/imagenet-r/n02483362/sketch_24.jpg +- data/imagenet-r/n02106550/sketch_11.jpg +- data/imagenet-r/n01644373/painting_35.jpg +- data/imagenet-r/n02009912/misc_21.jpg +- data/imagenet-r/n03272010/cartoon_23.jpg +- data/imagenet-r/n02356798/embroidery_0.jpg +- data/imagenet-r/n04086273/sketch_3.jpg +- data/imagenet-r/n07742313/toy_6.jpg +- data/imagenet-r/n02883205/graffiti_8.jpg +- data/imagenet-r/n02480495/sketch_14.jpg +- data/imagenet-r/n01833805/videogame_3.jpg +- data/imagenet-r/n03594945/painting_6.jpg +- data/imagenet-r/n01494475/misc_9.jpg +- data/imagenet-r/n02096585/misc_169.jpg +- data/imagenet-r/n02219486/sticker_3.jpg +- data/imagenet-r/n07745940/graphic_1.jpg +- data/imagenet-r/n02129165/tattoo_52.jpg +- data/imagenet-r/n03124170/cartoon_72.jpg +- data/imagenet-r/n02128757/painting_11.jpg +- data/imagenet-r/n02814860/cartoon_19.jpg +- data/imagenet-r/n02129604/painting_12.jpg +- data/imagenet-r/n02102318/misc_31.jpg +- data/imagenet-r/n04254680/videogame_37.jpg +- data/imagenet-r/n04086273/sticker_8.jpg +- data/imagenet-r/n07745940/deviantart_9.jpg +- data/imagenet-r/n01632777/painting_7.jpg +- data/imagenet-r/n03481172/sketch_16.jpg +- data/imagenet-r/n02398521/sketch_9.jpg +- data/imagenet-r/n02219486/tattoo_19.jpg +- data/imagenet-r/n01820546/art_14.jpg +- data/imagenet-r/n07873807/videogame_16.jpg +- data/imagenet-r/n02398521/toy_18.jpg +- data/imagenet-r/n01616318/sketch_5.jpg +- data/imagenet-r/n02092339/sketch_13.jpg +- data/imagenet-r/n04389033/deviantart_19.jpg +- data/imagenet-r/n02092339/misc_23.jpg +- data/imagenet-r/n03124170/toy_9.jpg +- data/imagenet-r/n07718472/cartoon_10.jpg +- data/imagenet-r/n01616318/toy_0.jpg +- data/imagenet-r/n02088238/videogame_1.jpg +- data/imagenet-r/n02481823/cartoon_9.jpg +- data/imagenet-r/n07714990/sketch_12.jpg +- data/imagenet-r/n02219486/sticker_6.jpg +- data/imagenet-r/n07742313/painting_4.jpg +- data/imagenet-r/n02110341/deviantart_10.jpg +- data/imagenet-r/n01944390/misc_54.jpg +- data/imagenet-r/n02108915/misc_16.jpg +- data/imagenet-r/n07745940/sticker_3.jpg +- data/imagenet-r/n01614925/deviantart_1.jpg +- data/imagenet-r/n07749582/sketch_19.jpg +- data/imagenet-r/n02841315/sculpture_15.jpg +- data/imagenet-r/n01833805/embroidery_1.jpg +- data/imagenet-r/n02883205/cartoon_25.jpg +- data/imagenet-r/n02117135/videogame_1.jpg +- data/imagenet-r/n02226429/tattoo_10.jpg +- data/imagenet-r/n02364673/deviantart_10.jpg +- data/imagenet-r/n03424325/sketch_0.jpg +- data/imagenet-r/n04141076/sculpture_24.jpg +- data/imagenet-r/n02909870/sculpture_3.jpg +- data/imagenet-r/n04325704/painting_4.jpg +- data/imagenet-r/n04266014/toy_6.jpg +- data/imagenet-r/n07920052/graphic_0.jpg +- data/imagenet-r/n07753592/misc_48.jpg +- data/imagenet-r/n02106166/sculpture_2.jpg +- data/imagenet-r/n02793495/cartoon_6.jpg +- data/imagenet-r/n07753592/misc_105.jpg +- data/imagenet-r/n02007558/painting_20.jpg +- data/imagenet-r/n03124170/painting_34.jpg +- data/imagenet-r/n02802426/videogame_16.jpg +- data/imagenet-r/n02364673/cartoon_0.jpg +- data/imagenet-r/n01944390/tattoo_29.jpg +- data/imagenet-r/n02206856/cartoon_37.jpg +- data/imagenet-r/n07745940/graffiti_30.jpg +- data/imagenet-r/n07695742/cartoon_16.jpg +- data/imagenet-r/n02363005/cartoon_9.jpg +- data/imagenet-r/n03773504/graphic_6.jpg +- data/imagenet-r/n10565667/cartoon_0.jpg +- data/imagenet-r/n02071294/sculpture_7.jpg +- data/imagenet-r/n04591713/sticker_0.jpg +- data/imagenet-r/n07697537/misc_19.jpg +- data/imagenet-r/n04310018/painting_34.jpg +- data/imagenet-r/n02346627/sketch_19.jpg +- data/imagenet-r/n01847000/tattoo_13.jpg +- data/imagenet-r/n02129604/misc_2.jpg +- data/imagenet-r/n12267677/misc_112.jpg +- data/imagenet-r/n02099601/misc_81.jpg +- data/imagenet-r/n04552348/art_9.jpg +- data/imagenet-r/n04254680/deviantart_0.jpg +- data/imagenet-r/n01843383/painting_16.jpg +- data/imagenet-r/n03930630/videogame_9.jpg +- data/imagenet-r/n02808440/cartoon_10.jpg +- data/imagenet-r/n03888257/sketch_9.jpg +- data/imagenet-r/n02279972/cartoon_6.jpg +- data/imagenet-r/n02480495/painting_29.jpg +- data/imagenet-r/n01910747/sketch_12.jpg +- data/imagenet-r/n02094433/misc_15.jpg +- data/imagenet-r/n02410509/painting_14.jpg +- data/imagenet-r/n02106662/misc_9.jpg +- data/imagenet-r/n02112137/misc_21.jpg +- data/imagenet-r/n02106166/misc_20.jpg +- data/imagenet-r/n07749582/sketch_14.jpg +- data/imagenet-r/n02966193/toy_6.jpg +- data/imagenet-r/n09472597/videogame_36.jpg +- data/imagenet-r/n02071294/cartoon_6.jpg +- data/imagenet-r/n04254680/videogame_38.jpg +- data/imagenet-r/n02802426/tattoo_8.jpg +- data/imagenet-r/n02094433/sketch_20.jpg +- data/imagenet-r/n02317335/graphic_2.jpg +- data/imagenet-r/n07714571/sketch_21.jpg +- data/imagenet-r/n04133789/sketch_3.jpg +- data/imagenet-r/n02980441/videogame_0.jpg +- data/imagenet-r/n01944390/misc_11.jpg +- data/imagenet-r/n02510455/misc_37.jpg +- data/imagenet-r/n07695742/art_1.jpg +- data/imagenet-r/n01514859/painting_14.jpg +- data/imagenet-r/n02447366/cartoon_28.jpg +- data/imagenet-r/n01910747/tattoo_36.jpg +- data/imagenet-r/n04522168/cartoon_10.jpg +- data/imagenet-r/n02843684/sketch_1.jpg +- data/imagenet-r/n02423022/embroidery_2.jpg +- data/imagenet-r/n02980441/videogame_2.jpg +- data/imagenet-r/n07742313/deviantart_1.jpg +- data/imagenet-r/n01774750/origami_14.jpg +- data/imagenet-r/n02088238/misc_29.jpg +- data/imagenet-r/n02165456/cartoon_7.jpg +- data/imagenet-r/n07742313/sketch_1.jpg +- data/imagenet-r/n03124170/painting_15.jpg +- data/imagenet-r/n02814860/misc_6.jpg +- data/imagenet-r/n07614500/misc_24.jpg +- data/imagenet-r/n02395406/sculpture_26.jpg +- data/imagenet-r/n02071294/cartoon_17.jpg +- data/imagenet-r/n07697537/misc_16.jpg +- data/imagenet-r/n02088364/misc_59.jpg +- data/imagenet-r/n02102318/misc_36.jpg +- data/imagenet-r/n01616318/toy_2.jpg +- data/imagenet-r/n02088238/misc_93.jpg +- data/imagenet-r/n07753275/videogame_12.jpg +- data/imagenet-r/n01514859/deviantart_12.jpg +- data/imagenet-r/n02071294/deviantart_13.jpg +- data/imagenet-r/n02317335/graphic_0.jpg +- data/imagenet-r/n02112018/misc_29.jpg +- data/imagenet-r/n07697313/art_12.jpg +- data/imagenet-r/n02607072/misc_49.jpg +- data/imagenet-r/n02108915/misc_73.jpg +- data/imagenet-r/n02364673/misc_10.jpg +- data/imagenet-r/n01694178/art_4.jpg +- data/imagenet-r/n02206856/toy_15.jpg +- data/imagenet-r/n02096585/misc_50.jpg +- data/imagenet-r/n07745940/cartoon_2.jpg +- data/imagenet-r/n02236044/origami_14.jpg +- data/imagenet-r/n01518878/sticker_2.jpg +- data/imagenet-r/n02088238/misc_31.jpg +- data/imagenet-r/n04192698/videogame_3.jpg +- data/imagenet-r/n04086273/tattoo_4.jpg +- data/imagenet-r/n03888257/sketch_17.jpg +- data/imagenet-r/n02948072/misc_4.jpg +- data/imagenet-r/n03602883/misc_11.jpg +- data/imagenet-r/n04254680/sketch_7.jpg +- data/imagenet-r/n02119022/misc_94.jpg +- data/imagenet-r/n07697313/deviantart_10.jpg +- data/imagenet-r/n04536866/cartoon_15.jpg +- data/imagenet-r/n02096585/misc_17.jpg +- data/imagenet-r/n02110958/embroidery_16.jpg +- data/imagenet-r/n04325704/cartoon_21.jpg +- data/imagenet-r/n02206856/art_2.jpg +- data/imagenet-r/n01614925/toy_0.jpg +- data/imagenet-r/n01882714/tattoo_3.jpg +- data/imagenet-r/n02077923/misc_31.jpg +- data/imagenet-r/n01833805/graphic_0.jpg +- data/imagenet-r/n01644373/painting_23.jpg +- data/imagenet-r/n02480495/painting_12.jpg +- data/imagenet-r/n02129604/painting_3.jpg +- data/imagenet-r/n02190166/graphic_1.jpg +- data/imagenet-r/n02165456/tattoo_53.jpg +- data/imagenet-r/n02793495/sketch_2.jpg +- data/imagenet-r/n03345487/misc_8.jpg +- data/imagenet-r/n02165456/tattoo_40.jpg +- data/imagenet-r/n02051845/deviantart_6.jpg +- data/imagenet-r/n01806143/cartoon_16.jpg +- data/imagenet-r/n02097298/misc_15.jpg +- data/imagenet-r/n02437616/cartoon_24.jpg +- data/imagenet-r/n01677366/sketch_0.jpg +- data/imagenet-r/n02948072/sketch_26.jpg +- data/imagenet-r/n02317335/sketch_11.jpg +- data/imagenet-r/n04536866/sketch_4.jpg +- data/imagenet-r/n02423022/sculpture_18.jpg +- data/imagenet-r/n02701002/videogame_2.jpg +- data/imagenet-r/n02085620/misc_91.jpg +- data/imagenet-r/n09472597/graffiti_2.jpg +- data/imagenet-r/n02113023/sketch_6.jpg +- data/imagenet-r/n07614500/toy_6.jpg +- data/imagenet-r/n01514859/painting_29.jpg +- data/imagenet-r/n02138441/painting_36.jpg +- data/imagenet-r/n04389033/sketch_16.jpg +- data/imagenet-r/n01644373/painting_28.jpg +- data/imagenet-r/n03424325/misc_30.jpg +- data/imagenet-r/n04522168/sticker_2.jpg +- data/imagenet-r/n02701002/cartoon_3.jpg +- data/imagenet-r/n07693725/painting_5.jpg +- data/imagenet-r/n01847000/cartoon_0.jpg +- data/imagenet-r/n02410509/sculpture_3.jpg +- data/imagenet-r/n04465501/sticker_2.jpg +- data/imagenet-r/n07734744/sculpture_5.jpg +- data/imagenet-r/n02992529/deviantart_1.jpg +- data/imagenet-r/n02113624/misc_18.jpg +- data/imagenet-r/n02814860/deviantart_2.jpg +- data/imagenet-r/n02129604/graffiti_0.jpg +- data/imagenet-r/n02749479/sketch_18.jpg +- data/imagenet-r/n02814860/embroidery_9.jpg +- data/imagenet-r/n02110341/misc_47.jpg +- data/imagenet-r/n04141076/deviantart_26.jpg +- data/imagenet-r/n04487394/cartoon_16.jpg +- data/imagenet-r/n03947888/tattoo_25.jpg +- data/imagenet-r/n04275548/painting_7.jpg +- data/imagenet-r/n02346627/art_7.jpg +- data/imagenet-r/n07768694/painting_9.jpg +- data/imagenet-r/n02398521/cartoon_20.jpg +- data/imagenet-r/n02317335/toy_8.jpg +- data/imagenet-r/n04192698/sketch_19.jpg +- data/imagenet-r/n02110341/deviantart_0.jpg +- data/imagenet-r/n07753592/misc_89.jpg +- data/imagenet-r/n02134084/misc_122.jpg +- data/imagenet-r/n02391049/misc_21.jpg +- data/imagenet-r/n07697537/videogame_3.jpg +- data/imagenet-r/n02106550/tattoo_9.jpg +- data/imagenet-r/n07693725/videogame_0.jpg +- data/imagenet-r/n02134084/misc_12.jpg +- data/imagenet-r/n01784675/sculpture_5.jpg +- data/imagenet-r/n02117135/painting_14.jpg +- data/imagenet-r/n04192698/toy_3.jpg +- data/imagenet-r/n07880968/sketch_1.jpg +- data/imagenet-r/n02219486/misc_10.jpg +- data/imagenet-r/n02395406/deviantart_6.jpg +- data/imagenet-r/n02437616/embroidery_1.jpg +- data/imagenet-r/n02007558/art_0.jpg +- data/imagenet-r/n02009912/misc_45.jpg +- data/imagenet-r/n02071294/deviantart_38.jpg +- data/imagenet-r/n02423022/sculpture_15.jpg +- data/imagenet-r/n02808440/painting_15.jpg +- data/imagenet-r/n02410509/sculpture_13.jpg +- data/imagenet-r/n07734744/cartoon_3.jpg +- data/imagenet-r/n04141076/cartoon_62.jpg +- data/imagenet-r/n02236044/cartoon_21.jpg +- data/imagenet-r/n02106030/art_9.jpg +- data/imagenet-r/n02099601/misc_7.jpg +- data/imagenet-r/n04409515/cartoon_20.jpg +- data/imagenet-r/n02317335/tattoo_19.jpg +- data/imagenet-r/n07714990/embroidery_2.jpg +- data/imagenet-r/n03467068/cartoon_18.jpg +- data/imagenet-r/n02364673/painting_4.jpg +- data/imagenet-r/n01694178/tattoo_4.jpg +- data/imagenet-r/n02206856/embroidery_29.jpg +- data/imagenet-r/n03498962/painting_5.jpg +- data/imagenet-r/n02007558/cartoon_37.jpg +- data/imagenet-r/n02966193/sketch_3.jpg +- data/imagenet-r/n01944390/misc_80.jpg +- data/imagenet-r/n03649909/cartoon_2.jpg +- data/imagenet-r/n02445715/sticker_0.jpg +- data/imagenet-r/n02138441/painting_20.jpg +- data/imagenet-r/n02395406/sculpture_11.jpg +- data/imagenet-r/n02410509/sketch_7.jpg +- data/imagenet-r/n07920052/cartoon_17.jpg +- data/imagenet-r/n02445715/art_1.jpg +- data/imagenet-r/n02088364/misc_4.jpg +- data/imagenet-r/n04266014/painting_4.jpg +- data/imagenet-r/n07697313/sketch_12.jpg +- data/imagenet-r/n02410509/origami_7.jpg +- data/imagenet-r/n07749582/deviantart_4.jpg +- data/imagenet-r/n02129165/sculpture_10.jpg +- data/imagenet-r/n02948072/embroidery_1.jpg +- data/imagenet-r/n04389033/deviantart_4.jpg +- data/imagenet-r/n02398521/cartoon_6.jpg +- data/imagenet-r/n02486410/embroidery_0.jpg +- data/imagenet-r/n02814860/sketch_19.jpg +- data/imagenet-r/n01534433/sketch_3.jpg +- data/imagenet-r/n01986214/art_3.jpg +- data/imagenet-r/n03424325/deviantart_8.jpg +- data/imagenet-r/n02793495/sketch_16.jpg +- data/imagenet-r/n09472597/videogame_34.jpg +- data/imagenet-r/n02009912/sketch_6.jpg +- data/imagenet-r/n02099601/misc_61.jpg +- data/imagenet-r/n01944390/misc_62.jpg +- data/imagenet-r/n03676483/graffiti_1.jpg +- data/imagenet-r/n02802426/deviantart_6.jpg +- data/imagenet-r/n01860187/misc_1.jpg +- data/imagenet-r/n04192698/origami_1.jpg +- data/imagenet-r/n02165456/tattoo_7.jpg +- data/imagenet-r/n07753592/misc_172.jpg +- data/imagenet-r/n01843383/graffiti_13.jpg +- data/imagenet-r/n02130308/tattoo_13.jpg +- data/imagenet-r/n02110185/tattoo_10.jpg +- data/imagenet-r/n01770393/sketch_22.jpg +- data/imagenet-r/n02112018/misc_28.jpg +- data/imagenet-r/n01494475/misc_10.jpg +- data/imagenet-r/n01748264/misc_16.jpg +- data/imagenet-r/n07753592/misc_79.jpg +- data/imagenet-r/n02088364/misc_51.jpg +- data/imagenet-r/n01910747/sketch_0.jpg +- data/imagenet-r/n02066245/misc_0.jpg +- data/imagenet-r/n02325366/misc_19.jpg +- data/imagenet-r/n02268443/misc_190.jpg +- data/imagenet-r/n04141076/sketch_18.jpg +- data/imagenet-r/n03424325/misc_78.jpg +- data/imagenet-r/n02883205/toy_2.jpg +- data/imagenet-r/n02364673/toy_3.jpg +- data/imagenet-r/n02007558/tattoo_34.jpg +- data/imagenet-r/n02106166/painting_5.jpg +- data/imagenet-r/n03888257/cartoon_0.jpg +- data/imagenet-r/n03124170/videogame_13.jpg +- data/imagenet-r/n03372029/cartoon_8.jpg +- data/imagenet-r/n02129604/misc_0.jpg +- data/imagenet-r/n07920052/sketch_3.jpg +- data/imagenet-r/n02051845/deviantart_20.jpg +- data/imagenet-r/n02391049/misc_83.jpg +- data/imagenet-r/n01882714/misc_5.jpg +- data/imagenet-r/n02094433/misc_25.jpg +- data/imagenet-r/n01983481/sketch_0.jpg +- data/imagenet-r/n02410509/painting_2.jpg +- data/imagenet-r/n02113624/misc_25.jpg +- data/imagenet-r/n02134084/misc_75.jpg +- data/imagenet-r/n02906734/graphic_5.jpg +- data/imagenet-r/n02097298/sketch_2.jpg +- data/imagenet-r/n02112137/misc_10.jpg +- data/imagenet-r/n01694178/tattoo_19.jpg +- data/imagenet-r/n02130308/tattoo_3.jpg +- data/imagenet-r/n02701002/sketch_16.jpg +- data/imagenet-r/n02128385/graffiti_0.jpg +- data/imagenet-r/n02802426/videogame_22.jpg +- data/imagenet-r/n01484850/sketch_22.jpg +- data/imagenet-r/n02206856/sticker_13.jpg +- data/imagenet-r/n07745940/deviantart_15.jpg +- data/imagenet-r/n01630670/misc_0.jpg +- data/imagenet-r/n02480855/painting_9.jpg +- data/imagenet-r/n01614925/sketch_8.jpg +- data/imagenet-r/n01843383/cartoon_33.jpg +- data/imagenet-r/n07720875/art_17.jpg +- data/imagenet-r/n01944390/misc_164.jpg +- data/imagenet-r/n02395406/sketch_16.jpg +- data/imagenet-r/n02134084/misc_25.jpg +- data/imagenet-r/n02814860/embroidery_8.jpg +- data/imagenet-r/n02129165/toy_18.jpg +- data/imagenet-r/n02980441/painting_3.jpg +- data/imagenet-r/n02391049/deviantart_6.jpg +- data/imagenet-r/n04147183/art_13.jpg +- data/imagenet-r/n02108915/misc_104.jpg +- data/imagenet-r/n04266014/painting_2.jpg +- data/imagenet-r/n02096585/misc_39.jpg +- data/imagenet-r/n02106550/sketch_0.jpg +- data/imagenet-r/n02138441/sketch_14.jpg +- data/imagenet-r/n03594945/toy_8.jpg +- data/imagenet-r/n03452741/deviantart_5.jpg +- data/imagenet-r/n02102318/misc_54.jpg +- data/imagenet-r/n04325704/deviantart_6.jpg +- data/imagenet-r/n02797295/misc_18.jpg +- data/imagenet-r/n04086273/tattoo_30.jpg +- data/imagenet-r/n02749479/misc_28.jpg +- data/imagenet-r/n03649909/sketch_22.jpg +- data/imagenet-r/n07873807/cartoon_6.jpg +- data/imagenet-r/n07697313/embroidery_8.jpg +- data/imagenet-r/n02883205/origami_1.jpg +- data/imagenet-r/n02138441/sketch_4.jpg +- data/imagenet-r/n01806143/cartoon_6.jpg +- data/imagenet-r/n01770393/tattoo_26.jpg +- data/imagenet-r/n04192698/videogame_19.jpg +- data/imagenet-r/n02268443/misc_1.jpg +- data/imagenet-r/n02099601/sketch_8.jpg +- data/imagenet-r/n07697537/misc_62.jpg +- data/imagenet-r/n02948072/deviantart_25.jpg +- data/imagenet-r/n02206856/cartoon_22.jpg +- data/imagenet-r/n02106030/cartoon_7.jpg +- data/imagenet-r/n07753592/misc_129.jpg +- data/imagenet-r/n04147183/sketch_9.jpg +- data/imagenet-r/n09835506/sketch_9.jpg +- data/imagenet-r/n07697537/sketch_18.jpg +- data/imagenet-r/n02325366/misc_41.jpg +- data/imagenet-r/n04325704/cartoon_27.jpg +- data/imagenet-r/n02236044/graffiti_15.jpg +- data/imagenet-r/n02088094/misc_29.jpg +- data/imagenet-r/n01847000/toy_4.jpg +- data/imagenet-r/n03888257/sketch_1.jpg +- data/imagenet-r/n01855672/art_5.jpg +- data/imagenet-r/n02097298/misc_79.jpg +- data/imagenet-r/n03649909/misc_5.jpg +- data/imagenet-r/n02138441/sketch_17.jpg +- data/imagenet-r/n02391049/misc_3.jpg +- data/imagenet-r/n04192698/deviantart_12.jpg +- data/imagenet-r/n02480495/sketch_0.jpg +- data/imagenet-r/n04266014/toy_32.jpg +- data/imagenet-r/n02510455/misc_105.jpg +- data/imagenet-r/n03124170/art_18.jpg +- data/imagenet-r/n02398521/toy_12.jpg +- data/imagenet-r/n01910747/sticker_1.jpg +- data/imagenet-r/n07745940/cartoon_13.jpg +- data/imagenet-r/n07753275/videogame_1.jpg +- data/imagenet-r/n02007558/deviantart_13.jpg +- data/imagenet-r/n09472597/toy_9.jpg +- data/imagenet-r/n01443537/toy_5.jpg +- data/imagenet-r/n02279972/painting_37.jpg +- data/imagenet-r/n02236044/sculpture_22.jpg +- data/imagenet-r/n02091134/sketch_13.jpg +- data/imagenet-r/n03947888/videogame_20.jpg +- data/imagenet-r/n02951358/cartoon_1.jpg +- data/imagenet-r/n02992529/painting_2.jpg +- data/imagenet-r/n01843383/painting_32.jpg +- data/imagenet-r/n01910747/graffiti_8.jpg +- data/imagenet-r/n02165456/painting_3.jpg +- data/imagenet-r/n02607072/sketch_11.jpg +- data/imagenet-r/n01910747/tattoo_23.jpg +- data/imagenet-r/n02219486/sticker_7.jpg +- data/imagenet-r/n03452741/graphic_2.jpg +- data/imagenet-r/n02056570/videogame_1.jpg +- data/imagenet-r/n02980441/cartoon_18.jpg +- data/imagenet-r/n01494475/misc_59.jpg +- data/imagenet-r/n04310018/videogame_4.jpg +- data/imagenet-r/n01498041/art_4.jpg +- data/imagenet-r/n07697313/sticker_3.jpg +- data/imagenet-r/n01494475/misc_147.jpg +- data/imagenet-r/n03775071/sketch_21.jpg +- data/imagenet-r/n03124170/misc_10.jpg +- data/imagenet-r/n02398521/origami_2.jpg +- data/imagenet-r/n07873807/sketch_19.jpg +- data/imagenet-r/n02445715/sketch_3.jpg +- data/imagenet-r/n02672831/sticker_1.jpg +- data/imagenet-r/n04146614/toy_11.jpg +- data/imagenet-r/n02085620/tattoo_4.jpg +- data/imagenet-r/n02110958/tattoo_22.jpg +- data/imagenet-r/n04141076/deviantart_3.jpg +- data/imagenet-r/n02486410/cartoon_23.jpg +- data/imagenet-r/n01774750/cartoon_7.jpg +- data/imagenet-r/n10565667/sculpture_5.jpg +- data/imagenet-r/n03773504/videogame_12.jpg +- data/imagenet-r/n02395406/toy_14.jpg +- data/imagenet-r/n02808440/sketch_18.jpg +- data/imagenet-r/n07714990/deviantart_6.jpg +- data/imagenet-r/n04192698/sketch_12.jpg +- data/imagenet-r/n02226429/origami_23.jpg +- data/imagenet-r/n02395406/origami_1.jpg +- data/imagenet-r/n03372029/sketch_16.jpg +- data/imagenet-r/n02007558/graphic_15.jpg +- data/imagenet-r/n01644373/cartoon_2.jpg +- data/imagenet-r/n02317335/tattoo_1.jpg +- data/imagenet-r/n01843383/deviantart_11.jpg +- data/imagenet-r/n01855672/graffiti_1.jpg +- data/imagenet-r/n02672831/cartoon_9.jpg +- data/imagenet-r/n01443537/graffiti_8.jpg +- data/imagenet-r/n02346627/painting_3.jpg +- data/imagenet-r/n04552348/art_5.jpg +- data/imagenet-r/n02398521/painting_19.jpg +- data/imagenet-r/n01944390/sketch_14.jpg +- data/imagenet-r/n02841315/art_3.jpg +- data/imagenet-r/n02980441/embroidery_3.jpg +- data/imagenet-r/n02481823/painting_14.jpg +- data/imagenet-r/n02808440/painting_2.jpg +- data/imagenet-r/n02980441/sculpture_1.jpg +- data/imagenet-r/n03495258/cartoon_2.jpg +- data/imagenet-r/n01614925/cartoon_6.jpg +- data/imagenet-r/n07697537/misc_119.jpg +- data/imagenet-r/n02395406/cartoon_36.jpg +- data/imagenet-r/n02317335/painting_14.jpg +- data/imagenet-r/n02098286/misc_2.jpg +- data/imagenet-r/n04141076/tattoo_4.jpg +- data/imagenet-r/n02510455/deviantart_25.jpg +- data/imagenet-r/n02236044/tattoo_19.jpg +- data/imagenet-r/n01443537/sketch_12.jpg +- data/imagenet-r/n02108915/misc_14.jpg +- data/imagenet-r/n01632777/sketch_15.jpg +- data/imagenet-r/n02007558/graffiti_21.jpg +- data/imagenet-r/n02939185/sketch_23.jpg +- data/imagenet-r/n04254680/misc_13.jpg +- data/imagenet-r/n02808440/painting_11.jpg +- data/imagenet-r/n02129165/sculpture_19.jpg +- data/imagenet-r/n01632777/deviantart_26.jpg +- data/imagenet-r/n03630383/sculpture_1.jpg +- data/imagenet-r/n02106030/sketch_3.jpg +- data/imagenet-r/n01910747/sculpture_8.jpg +- data/imagenet-r/n01677366/misc_0.jpg +- data/imagenet-r/n01484850/origami_3.jpg +- data/imagenet-r/n01882714/art_4.jpg +- data/imagenet-r/n01644373/tattoo_18.jpg +- data/imagenet-r/n01784675/art_4.jpg +- data/imagenet-r/n07753592/misc_142.jpg +- data/imagenet-r/n02607072/misc_55.jpg +- data/imagenet-r/n02134084/misc_77.jpg +- data/imagenet-r/n04266014/toy_23.jpg +- data/imagenet-r/n07697313/toy_12.jpg +- data/imagenet-r/n07697537/misc_110.jpg +- data/imagenet-r/n02980441/origami_5.jpg +- data/imagenet-r/n07718472/deviantart_6.jpg +- data/imagenet-r/n02481823/cartoon_19.jpg +- data/imagenet-r/n02939185/tattoo_5.jpg +- data/imagenet-r/n02129165/embroidery_1.jpg +- data/imagenet-r/n07697313/deviantart_19.jpg +- data/imagenet-r/n02138441/sketch_11.jpg +- data/imagenet-r/n01494475/misc_84.jpg +- data/imagenet-r/n01644373/sketch_10.jpg +- data/imagenet-r/n02071294/graphic_0.jpg +- data/imagenet-r/n02410509/sculpture_39.jpg +- data/imagenet-r/n02007558/cartoon_36.jpg +- data/imagenet-r/n01833805/videogame_4.jpg +- data/imagenet-r/n02906734/embroidery_2.jpg +- data/imagenet-r/n02219486/embroidery_6.jpg +- data/imagenet-r/n09472597/painting_7.jpg +- data/imagenet-r/n02268443/misc_168.jpg +- data/imagenet-r/n02906734/sticker_1.jpg +- data/imagenet-r/n04591713/sculpture_2.jpg +- data/imagenet-r/n02391049/misc_53.jpg +- data/imagenet-r/n07714990/sketch_6.jpg +- data/imagenet-r/n07745940/graffiti_14.jpg +- data/imagenet-r/n07753592/sketch_18.jpg +- data/imagenet-r/n02119022/misc_41.jpg +- data/imagenet-r/n04310018/videogame_6.jpg +- data/imagenet-r/n01514859/sculpture_1.jpg +- data/imagenet-r/n02123045/cartoon_26.jpg +- data/imagenet-r/n02110341/deviantart_14.jpg +- data/imagenet-r/n07697313/toy_22.jpg +- data/imagenet-r/n04275548/sketch_6.jpg +- data/imagenet-r/n02423022/art_9.jpg +- data/imagenet-r/n01847000/sticker_6.jpg +- data/imagenet-r/n03272010/painting_22.jpg +- data/imagenet-r/n07745940/graffiti_32.jpg +- data/imagenet-r/n02364673/misc_5.jpg +- data/imagenet-r/n01514859/misc_6.jpg +- data/imagenet-r/n02364673/graphic_1.jpg +- data/imagenet-r/n02134084/misc_9.jpg +- data/imagenet-r/n07880968/cartoon_19.jpg +- data/imagenet-r/n07768694/tattoo_1.jpg +- data/imagenet-r/n07697313/toy_20.jpg +- data/imagenet-r/n03124170/cartoon_11.jpg +- data/imagenet-r/n07873807/cartoon_2.jpg +- data/imagenet-r/n07753275/graphic_5.jpg +- data/imagenet-r/n02009912/misc_2.jpg +- data/imagenet-r/n02823750/cartoon_20.jpg +- data/imagenet-r/n02071294/sculpture_6.jpg +- data/imagenet-r/n02701002/sticker_3.jpg +- data/imagenet-r/n04192698/sketch_0.jpg +- data/imagenet-r/n02510455/misc_11.jpg +- data/imagenet-r/n02814860/cartoon_27.jpg +- data/imagenet-r/n07753592/misc_65.jpg +- data/imagenet-r/n03124170/cartoon_35.jpg +- data/imagenet-r/n01882714/cartoon_28.jpg +- data/imagenet-r/n09835506/misc_20.jpg +- data/imagenet-r/n01484850/misc_0.jpg +- data/imagenet-r/n02098286/misc_14.jpg +- data/imagenet-r/n02129165/sculpture_14.jpg +- data/imagenet-r/n02391049/misc_131.jpg +- data/imagenet-r/n01770393/cartoon_21.jpg +- data/imagenet-r/n02106030/sketch_4.jpg +- data/imagenet-r/n02980441/sketch_20.jpg +- data/imagenet-r/n07697313/sketch_9.jpg +- data/imagenet-r/n09835506/sketch_1.jpg +- data/imagenet-r/n07753592/misc_180.jpg +- data/imagenet-r/n02980441/videogame_18.jpg +- data/imagenet-r/n04133789/cartoon_21.jpg +- data/imagenet-r/n01833805/sketch_6.jpg +- data/imagenet-r/n01774750/origami_4.jpg +- data/imagenet-r/n02655020/misc_43.jpg +- data/imagenet-r/n02410509/cartoon_33.jpg +- data/imagenet-r/n04147183/painting_14.jpg +- data/imagenet-r/n02486410/tattoo_7.jpg +- data/imagenet-r/n01944390/misc_30.jpg +- data/imagenet-r/n02980441/cartoon_11.jpg +- data/imagenet-r/n03124170/toy_0.jpg +- data/imagenet-r/n01498041/sculpture_0.jpg +- data/imagenet-r/n02672831/sketch_6.jpg +- data/imagenet-r/n02108089/misc_39.jpg +- data/imagenet-r/n01847000/tattoo_7.jpg +- data/imagenet-r/n02906734/graphic_4.jpg +- data/imagenet-r/n07614500/painting_10.jpg +- data/imagenet-r/n02129165/tattoo_3.jpg +- data/imagenet-r/n02219486/graphic_2.jpg +- data/imagenet-r/n02102318/painting_2.jpg +- data/imagenet-r/n02077923/sketch_22.jpg +- data/imagenet-r/n03424325/misc_50.jpg +- data/imagenet-r/n02110185/sketch_10.jpg +- data/imagenet-r/n01847000/toy_0.jpg +- data/imagenet-r/n02099601/misc_89.jpg +- data/imagenet-r/n02980441/cartoon_2.jpg +- data/imagenet-r/n07753592/misc_34.jpg +- data/imagenet-r/n02226429/origami_9.jpg +- data/imagenet-r/n04536866/deviantart_2.jpg +- data/imagenet-r/n01494475/deviantart_1.jpg +- data/imagenet-r/n02123045/sketch_7.jpg +- data/imagenet-r/n02108915/misc_87.jpg +- data/imagenet-r/n02948072/cartoon_3.jpg +- data/imagenet-r/n02165456/cartoon_19.jpg +- data/imagenet-r/n02129604/graphic_7.jpg +- data/imagenet-r/n03947888/toy_7.jpg +- data/imagenet-r/n07614500/graffiti_9.jpg +- data/imagenet-r/n01774750/painting_1.jpg +- data/imagenet-r/n02395406/tattoo_0.jpg +- data/imagenet-r/n07734744/cartoon_31.jpg +- data/imagenet-r/n02129604/painting_26.jpg +- data/imagenet-r/n02510455/misc_72.jpg +- data/imagenet-r/n02102318/misc_59.jpg +- data/imagenet-r/n03452741/graphic_0.jpg +- data/imagenet-r/n04141076/painting_41.jpg +- data/imagenet-r/n07753275/painting_11.jpg +- data/imagenet-r/n02097298/misc_44.jpg +- data/imagenet-r/n01531178/art_27.jpg +- data/imagenet-r/n07695742/sketch_8.jpg +- data/imagenet-r/n02206856/sketch_16.jpg +- data/imagenet-r/n02108089/sketch_12.jpg +- data/imagenet-r/n02071294/sketch_0.jpg +- data/imagenet-r/n02098286/misc_35.jpg +- data/imagenet-r/n04409515/videogame_6.jpg +- data/imagenet-r/n01694178/painting_6.jpg +- data/imagenet-r/n09472597/graffiti_4.jpg +- data/imagenet-r/n01833805/painting_9.jpg +- data/imagenet-r/n01983481/misc_15.jpg +- data/imagenet-r/n03124170/cartoon_1.jpg +- data/imagenet-r/n01983481/deviantart_0.jpg +- data/imagenet-r/n02480855/sculpture_1.jpg +- data/imagenet-r/n07693725/toy_4.jpg +- data/imagenet-r/n02056570/deviantart_2.jpg +- data/imagenet-r/n04347754/misc_2.jpg +- data/imagenet-r/n07718472/deviantart_2.jpg +- data/imagenet-r/n02129165/misc_11.jpg +- data/imagenet-r/n02088238/misc_64.jpg +- data/imagenet-r/n02268443/misc_186.jpg +- data/imagenet-r/n02123045/sketch_8.jpg +- data/imagenet-r/n02165456/tattoo_67.jpg +- data/imagenet-r/n04266014/cartoon_13.jpg +- data/imagenet-r/n02091134/sketch_10.jpg +- data/imagenet-r/n02480855/sketch_19.jpg +- data/imagenet-r/n02066245/origami_0.jpg +- data/imagenet-r/n07753275/deviantart_3.jpg +- data/imagenet-r/n01616318/painting_2.jpg +- data/imagenet-r/n01514859/deviantart_29.jpg +- data/imagenet-r/n02793495/cartoon_8.jpg +- data/imagenet-r/n01855672/toy_3.jpg +- data/imagenet-r/n07734744/cartoon_12.jpg +- data/imagenet-r/n02165456/tattoo_56.jpg +- data/imagenet-r/n01770393/tattoo_56.jpg +- data/imagenet-r/n02113624/misc_24.jpg +- data/imagenet-r/n04254680/cartoon_7.jpg +- data/imagenet-r/n02510455/deviantart_0.jpg +- data/imagenet-r/n03424325/misc_53.jpg +- data/imagenet-r/n02607072/sketch_12.jpg +- data/imagenet-r/n02134084/misc_45.jpg +- data/imagenet-r/n03424325/misc_64.jpg +- data/imagenet-r/n12267677/deviantart_5.jpg +- data/imagenet-r/n07695742/deviantart_7.jpg +- data/imagenet-r/n02088094/misc_15.jpg +- data/imagenet-r/n02226429/sketch_13.jpg +- data/imagenet-r/n04254680/sticker_0.jpg +- data/imagenet-r/n07745940/sticker_13.jpg +- data/imagenet-r/n01632777/cartoon_19.jpg +- data/imagenet-r/n02980441/graphic_5.jpg +- data/imagenet-r/n01614925/painting_34.jpg +- data/imagenet-r/n01784675/sculpture_6.jpg +- data/imagenet-r/n01694178/art_14.jpg +- data/imagenet-r/n01494475/misc_69.jpg +- data/imagenet-r/n02480855/sketch_14.jpg +- data/imagenet-r/n04465501/videogame_17.jpg +- data/imagenet-r/n02769748/origami_1.jpg +- data/imagenet-r/n03594945/sketch_3.jpg +- data/imagenet-r/n02106662/misc_98.jpg +- data/imagenet-r/n02106030/painting_8.jpg +- data/imagenet-r/n01632777/videogame_1.jpg +- data/imagenet-r/n02088364/misc_21.jpg +- data/imagenet-r/n04310018/toy_9.jpg +- data/imagenet-r/n02346627/embroidery_1.jpg +- data/imagenet-r/n02117135/sketch_14.jpg +- data/imagenet-r/n02437616/sketch_10.jpg +- data/imagenet-r/n02481823/painting_15.jpg +- data/imagenet-r/n02410509/graphic_8.jpg +- data/imagenet-r/n02268443/misc_14.jpg +- data/imagenet-r/n07880968/deviantart_8.jpg +- data/imagenet-r/n03372029/graffiti_1.jpg +- data/imagenet-r/n03467068/sketch_8.jpg +- data/imagenet-r/n03630383/cartoon_3.jpg +- data/imagenet-r/n02481823/sculpture_5.jpg +- data/imagenet-r/n03272010/sketch_7.jpg +- data/imagenet-r/n02966193/misc_7.jpg +- data/imagenet-r/n03649909/sketch_3.jpg +- data/imagenet-r/n04266014/misc_5.jpg +- data/imagenet-r/n02808440/art_5.jpg +- data/imagenet-r/n01644373/sketch_24.jpg +- data/imagenet-r/n01784675/sketch_23.jpg +- data/imagenet-r/n01860187/sketch_11.jpg +- data/imagenet-r/n01774750/deviantart_15.jpg +- data/imagenet-r/n02445715/cartoon_2.jpg +- data/imagenet-r/n02480855/graffiti_13.jpg +- data/imagenet-r/n03495258/videogame_13.jpg +- data/imagenet-r/n01833805/sculpture_2.jpg +- data/imagenet-r/n02206856/cartoon_24.jpg +- data/imagenet-r/n02883205/sculpture_1.jpg +- data/imagenet-r/n02481823/toy_1.jpg +- data/imagenet-r/n02099601/misc_77.jpg +- data/imagenet-r/n02009912/misc_39.jpg +- data/imagenet-r/n07753592/misc_7.jpg +- data/imagenet-r/n02980441/videogame_25.jpg +- data/imagenet-r/n02480855/cartoon_7.jpg +- data/imagenet-r/n02909870/videogame_9.jpg +- data/imagenet-r/n07873807/deviantart_32.jpg +- data/imagenet-r/n03649909/art_4.jpg +- data/imagenet-r/n01847000/graphic_2.jpg +- data/imagenet-r/n07745940/deviantart_22.jpg +- data/imagenet-r/n02113799/misc_17.jpg +- data/imagenet-r/n02108915/misc_89.jpg +- data/imagenet-r/n02672831/graffiti_8.jpg +- data/imagenet-r/n04254680/art_4.jpg +- data/imagenet-r/n07614500/videogame_12.jpg +- data/imagenet-r/n02066245/painting_10.jpg +- data/imagenet-r/n03947888/painting_10.jpg +- data/imagenet-r/n04465501/sketch_0.jpg +- data/imagenet-r/n07718472/sketch_15.jpg +- data/imagenet-r/n02088094/sketch_13.jpg +- data/imagenet-r/n12267677/misc_57.jpg +- data/imagenet-r/n02445715/tattoo_9.jpg +- data/imagenet-r/n02134084/misc_6.jpg +- data/imagenet-r/n02480855/sticker_0.jpg +- data/imagenet-r/n03710193/sketch_9.jpg +- data/imagenet-r/n02447366/painting_1.jpg +- data/imagenet-r/n04086273/sticker_6.jpg +- data/imagenet-r/n02607072/misc_102.jpg +- data/imagenet-r/n01614925/tattoo_7.jpg +- data/imagenet-r/n01843383/sticker_3.jpg +- data/imagenet-r/n04266014/painting_18.jpg +- data/imagenet-r/n01910747/tattoo_13.jpg +- data/imagenet-r/n02129165/graphic_7.jpg +- data/imagenet-r/n02395406/cartoon_32.jpg +- data/imagenet-r/n02948072/painting_15.jpg +- data/imagenet-r/n02814860/painting_32.jpg +- data/imagenet-r/n02066245/painting_7.jpg +- data/imagenet-r/n02481823/toy_0.jpg +- data/imagenet-r/n07734744/sticker_16.jpg +- data/imagenet-r/n04465501/sketch_22.jpg +- data/imagenet-r/n01882714/graffiti_1.jpg +- data/imagenet-r/n01833805/tattoo_64.jpg +- data/imagenet-r/n02106166/graffiti_0.jpg +- data/imagenet-r/n02410509/painting_5.jpg +- data/imagenet-r/n02106166/sketch_15.jpg +- data/imagenet-r/n07745940/cartoon_17.jpg +- data/imagenet-r/n01784675/sketch_11.jpg +- data/imagenet-r/n02317335/misc_4.jpg +- data/imagenet-r/n04591713/sketch_5.jpg +- data/imagenet-r/n01784675/sculpture_4.jpg +- data/imagenet-r/n01847000/deviantart_1.jpg +- data/imagenet-r/n02102318/misc_26.jpg +- data/imagenet-r/n01443537/misc_3.jpg +- data/imagenet-r/n01820546/deviantart_21.jpg +- data/imagenet-r/n01443537/cartoon_3.jpg +- data/imagenet-r/n02056570/sketch_20.jpg +- data/imagenet-r/n01833805/painting_40.jpg +- data/imagenet-r/n02110185/graphic_5.jpg +- data/imagenet-r/n02701002/sculpture_0.jpg +- data/imagenet-r/n07745940/deviantart_5.jpg +- data/imagenet-r/n03710193/sketch_11.jpg +- data/imagenet-r/n02119022/misc_69.jpg +- data/imagenet-r/n04118538/sketch_11.jpg +- data/imagenet-r/n09472597/sketch_23.jpg +- data/imagenet-r/n02092339/misc_14.jpg +- data/imagenet-r/n04266014/sketch_21.jpg +- data/imagenet-r/n01843383/graphic_1.jpg +- data/imagenet-r/n07880968/deviantart_4.jpg +- data/imagenet-r/n02883205/sculpture_8.jpg +- data/imagenet-r/n02134084/misc_55.jpg +- data/imagenet-r/n01806143/embroidery_3.jpg +- data/imagenet-r/n01531178/painting_30.jpg +- data/imagenet-r/n02098286/misc_3.jpg +- data/imagenet-r/n02510455/sketch_23.jpg +- data/imagenet-r/n04254680/art_6.jpg +- data/imagenet-r/n02206856/graffiti_3.jpg +- data/imagenet-r/n02112137/misc_27.jpg +- data/imagenet-r/n02007558/graffiti_5.jpg +- data/imagenet-r/n04552348/deviantart_5.jpg +- data/imagenet-r/n04086273/sketch_10.jpg +- data/imagenet-r/n01833805/art_4.jpg +- data/imagenet-r/n01443537/sketch_13.jpg +- data/imagenet-r/n02071294/deviantart_17.jpg +- data/imagenet-r/n02814860/sketch_5.jpg +- data/imagenet-r/n03481172/cartoon_11.jpg +- data/imagenet-r/n02823750/misc_3.jpg +- data/imagenet-r/n07720875/sketch_5.jpg +- data/imagenet-r/n02395406/misc_9.jpg +- data/imagenet-r/n09835506/sculpture_5.jpg +- data/imagenet-r/n02480855/tattoo_42.jpg +- data/imagenet-r/n02423022/sketch_17.jpg +- data/imagenet-r/n01882714/painting_24.jpg +- data/imagenet-r/n07753592/misc_164.jpg +- data/imagenet-r/n04266014/cartoon_29.jpg +- data/imagenet-r/n04141076/cartoon_37.jpg +- data/imagenet-r/n07768694/sketch_7.jpg +- data/imagenet-r/n01494475/misc_135.jpg +- data/imagenet-r/n07753592/misc_109.jpg +- data/imagenet-r/n01833805/tattoo_94.jpg +- data/imagenet-r/n07753592/deviantart_6.jpg +- data/imagenet-r/n02481823/sketch_12.jpg +- data/imagenet-r/n04465501/cartoon_5.jpg +- data/imagenet-r/n01770393/tattoo_50.jpg +- data/imagenet-r/n07753592/misc_76.jpg +- data/imagenet-r/n02526121/sketch_7.jpg +- data/imagenet-r/n01843383/painting_3.jpg +- data/imagenet-r/n02098286/misc_9.jpg +- data/imagenet-r/n02106166/cartoon_3.jpg +- data/imagenet-r/n02802426/tattoo_6.jpg +- data/imagenet-r/n02051845/sculpture_1.jpg +- data/imagenet-r/n02206856/graffiti_12.jpg +- data/imagenet-r/n01882714/tattoo_13.jpg +- data/imagenet-r/n03498962/sculpture_0.jpg +- data/imagenet-r/n01910747/videogame_4.jpg +- data/imagenet-r/n04310018/art_1.jpg +- data/imagenet-r/n03124170/sketch_15.jpg +- data/imagenet-r/n03124170/art_1.jpg +- data/imagenet-r/n02364673/art_17.jpg +- data/imagenet-r/n02483362/sketch_3.jpg +- data/imagenet-r/n04552348/misc_4.jpg +- data/imagenet-r/n03649909/sketch_16.jpg +- data/imagenet-r/n02110958/sketch_20.jpg +- data/imagenet-r/n02102318/misc_0.jpg +- data/imagenet-r/n02099601/misc_29.jpg +- data/imagenet-r/n07745940/origami_12.jpg +- data/imagenet-r/n01770393/tattoo_3.jpg +- data/imagenet-r/n03124170/tattoo_1.jpg +- data/imagenet-r/n01443537/painting_22.jpg +- data/imagenet-r/n01498041/cartoon_4.jpg +- data/imagenet-r/n03947888/misc_7.jpg +- data/imagenet-r/n04141076/painting_39.jpg +- data/imagenet-r/n01443537/sketch_2.jpg +- data/imagenet-r/n03124170/misc_17.jpg +- data/imagenet-r/n02843684/sketch_10.jpg +- data/imagenet-r/n02165456/tattoo_24.jpg +- data/imagenet-r/n01616318/painting_5.jpg +- data/imagenet-r/n04347754/deviantart_1.jpg +- data/imagenet-r/n02909870/videogame_7.jpg +- data/imagenet-r/n01944390/misc_60.jpg +- data/imagenet-r/n03602883/sketch_0.jpg +- data/imagenet-r/n02410509/sculpture_16.jpg +- data/imagenet-r/n04141076/cartoon_10.jpg +- data/imagenet-r/n01514859/misc_1.jpg +- data/imagenet-r/n03930630/misc_16.jpg +- data/imagenet-r/n01910747/sketch_1.jpg +- data/imagenet-r/n01843383/cartoon_27.jpg +- data/imagenet-r/n02364673/art_6.jpg +- data/imagenet-r/n04347754/misc_0.jpg +- data/imagenet-r/n02948072/misc_6.jpg +- data/imagenet-r/n02966193/sketch_13.jpg +- data/imagenet-r/n01443537/toy_4.jpg +- data/imagenet-r/n01910747/tattoo_14.jpg +- data/imagenet-r/n02268443/misc_39.jpg +- data/imagenet-r/n04086273/sticker_4.jpg +- data/imagenet-r/n02088238/misc_79.jpg +- data/imagenet-r/n04552348/deviantart_16.jpg +- data/imagenet-r/n01614925/deviantart_46.jpg +- data/imagenet-r/n04389033/sculpture_15.jpg +- data/imagenet-r/n01833805/painting_7.jpg +- data/imagenet-r/n02363005/tattoo_6.jpg +- data/imagenet-r/n02236044/cartoon_35.jpg +- data/imagenet-r/n01944390/sketch_2.jpg +- data/imagenet-r/n07614500/sketch_12.jpg +- data/imagenet-r/n03594945/videogame_26.jpg +- data/imagenet-r/n02206856/graphic_4.jpg +- data/imagenet-r/n01644373/deviantart_10.jpg +- data/imagenet-r/n02437616/misc_6.jpg +- data/imagenet-r/n03947888/tattoo_2.jpg +- data/imagenet-r/n02909870/embroidery_0.jpg +- data/imagenet-r/n02096585/misc_117.jpg +- data/imagenet-r/n02480855/cartoon_10.jpg +- data/imagenet-r/n02129604/sticker_2.jpg +- data/imagenet-r/n02480495/cartoon_9.jpg +- data/imagenet-r/n04552348/misc_17.jpg +- data/imagenet-r/n02486410/cartoon_6.jpg +- data/imagenet-r/n02398521/art_4.jpg +- data/imagenet-r/n04192698/sculpture_1.jpg +- data/imagenet-r/n01616318/tattoo_11.jpg +- data/imagenet-r/n07695742/sculpture_0.jpg +- data/imagenet-r/n02364673/painting_15.jpg +- data/imagenet-r/n02130308/cartoon_1.jpg +- data/imagenet-r/n02112018/misc_16.jpg +- data/imagenet-r/n02980441/painting_2.jpg +- data/imagenet-r/n02129604/painting_18.jpg +- data/imagenet-r/n02110185/graphic_3.jpg +- data/imagenet-r/n01484850/cartoon_7.jpg +- data/imagenet-r/n01882714/cartoon_46.jpg +- data/imagenet-r/n02088094/sketch_18.jpg +- data/imagenet-r/n02356798/toy_3.jpg +- data/imagenet-r/n07749582/painting_39.jpg +- data/imagenet-r/n02486410/graffiti_1.jpg +- data/imagenet-r/n02445715/cartoon_11.jpg +- data/imagenet-r/n03630383/cartoon_33.jpg +- data/imagenet-r/n02841315/toy_5.jpg +- data/imagenet-r/n04192698/sculpture_5.jpg +- data/imagenet-r/n02165456/embroidery_1.jpg +- data/imagenet-r/n02398521/painting_3.jpg +- data/imagenet-r/n02096585/misc_96.jpg +- data/imagenet-r/n02119022/misc_21.jpg +- data/imagenet-r/n02226429/sculpture_15.jpg +- data/imagenet-r/n02134084/misc_116.jpg +- data/imagenet-r/n01882714/sketch_16.jpg +- data/imagenet-r/n03495258/videogame_14.jpg +- data/imagenet-r/n01882714/graffiti_3.jpg +- data/imagenet-r/n02317335/painting_11.jpg +- data/imagenet-r/n02113624/sketch_18.jpg +- data/imagenet-r/n02134084/misc_0.jpg +- data/imagenet-r/n02009912/misc_4.jpg +- data/imagenet-r/n02480855/art_10.jpg +- data/imagenet-r/n02317335/tattoo_25.jpg +- data/imagenet-r/n10565667/sculpture_6.jpg +- data/imagenet-r/n02206856/toy_8.jpg +- data/imagenet-r/n02363005/sticker_3.jpg +- data/imagenet-r/n01614925/cartoon_17.jpg +- data/imagenet-r/n01514859/videogame_2.jpg +- data/imagenet-r/n07734744/embroidery_9.jpg +- data/imagenet-r/n04465501/sculpture_0.jpg +- data/imagenet-r/n04552348/misc_16.jpg +- data/imagenet-r/n02106550/misc_52.jpg +- data/imagenet-r/n02909870/cartoon_31.jpg +- data/imagenet-r/n02233338/misc_24.jpg +- data/imagenet-r/n04266014/cartoon_17.jpg +- data/imagenet-r/n01632777/toy_7.jpg +- data/imagenet-r/n07697537/sketch_1.jpg +- data/imagenet-r/n02236044/painting_5.jpg +- data/imagenet-r/n02056570/sketch_21.jpg +- data/imagenet-r/n04487394/sketch_9.jpg +- data/imagenet-r/n02129604/tattoo_6.jpg +- data/imagenet-r/n02077923/misc_36.jpg +- data/imagenet-r/n02992529/sketch_12.jpg +- data/imagenet-r/n04254680/tattoo_2.jpg +- data/imagenet-r/n02129165/tattoo_63.jpg +- data/imagenet-r/n01833805/embroidery_5.jpg +- data/imagenet-r/n02814860/videogame_11.jpg +- data/imagenet-r/n02128757/cartoon_19.jpg +- data/imagenet-r/n01847000/toy_2.jpg +- data/imagenet-r/n01784675/deviantart_3.jpg +- data/imagenet-r/n07753592/misc_115.jpg +- data/imagenet-r/n03602883/misc_51.jpg +- data/imagenet-r/n01616318/deviantart_10.jpg +- data/imagenet-r/n02129604/tattoo_43.jpg +- data/imagenet-r/n02410509/deviantart_0.jpg +- data/imagenet-r/n03272010/deviantart_21.jpg +- data/imagenet-r/n01833805/cartoon_18.jpg +- data/imagenet-r/n02165456/tattoo_1.jpg +- data/imagenet-r/n02056570/sketch_4.jpg +- data/imagenet-r/n09472597/sketch_26.jpg +- data/imagenet-r/n04118538/sketch_8.jpg +- data/imagenet-r/n02363005/origami_2.jpg +- data/imagenet-r/n01986214/videogame_0.jpg +- data/imagenet-r/n02279972/painting_34.jpg +- data/imagenet-r/n02749479/videogame_5.jpg +- data/imagenet-r/n02102318/painting_10.jpg +- data/imagenet-r/n01843383/cartoon_48.jpg +- data/imagenet-r/n02510455/deviantart_18.jpg +- data/imagenet-r/n12267677/misc_76.jpg +- data/imagenet-r/n02106662/misc_40.jpg +- data/imagenet-r/n02226429/sketch_3.jpg +- data/imagenet-r/n01944390/sketch_16.jpg +- data/imagenet-r/n04409515/cartoon_6.jpg +- data/imagenet-r/n02480855/painting_8.jpg +- data/imagenet-r/n03773504/videogame_14.jpg +- data/imagenet-r/n02236044/embroidery_3.jpg +- data/imagenet-r/n02088364/misc_27.jpg +- data/imagenet-r/n02480855/tattoo_47.jpg +- data/imagenet-r/n03495258/cartoon_11.jpg +- data/imagenet-r/n07734744/embroidery_0.jpg +- data/imagenet-r/n02097298/misc_14.jpg +- data/imagenet-r/n04389033/deviantart_21.jpg +- data/imagenet-r/n01632777/toy_30.jpg +- data/imagenet-r/n02099712/misc_30.jpg +- data/imagenet-r/n01632777/painting_2.jpg +- data/imagenet-r/n02165456/embroidery_0.jpg +- data/imagenet-r/n01882714/cartoon_19.jpg +- data/imagenet-r/n02007558/painting_11.jpg +- data/imagenet-r/n02883205/toy_13.jpg +- data/imagenet-r/n07614500/toy_3.jpg +- data/imagenet-r/n04275548/sketch_13.jpg +- data/imagenet-r/n02007558/cartoon_7.jpg +- data/imagenet-r/n07614500/graffiti_1.jpg +- data/imagenet-r/n02769748/art_0.jpg +- data/imagenet-r/n04146614/toy_20.jpg +- data/imagenet-r/n07753592/misc_41.jpg +- data/imagenet-r/n01770393/graphic_0.jpg +- data/imagenet-r/n02236044/art_1.jpg +- data/imagenet-r/n02883205/sketch_7.jpg +- data/imagenet-r/n07695742/deviantart_14.jpg +- data/imagenet-r/n04141076/tattoo_2.jpg +- data/imagenet-r/n04146614/toy_18.jpg +- data/imagenet-r/n02106662/misc_78.jpg +- data/imagenet-r/n01910747/painting_8.jpg +- data/imagenet-r/n01833805/tattoo_18.jpg +- data/imagenet-r/n07714990/misc_0.jpg +- data/imagenet-r/n02793495/sketch_23.jpg +- data/imagenet-r/n01630670/painting_7.jpg +- data/imagenet-r/n02980441/deviantart_6.jpg +- data/imagenet-r/n02841315/cartoon_3.jpg +- data/imagenet-r/n01833805/graffiti_10.jpg +- data/imagenet-r/n01983481/sketch_10.jpg +- data/imagenet-r/n01882714/deviantart_28.jpg +- data/imagenet-r/n01614925/deviantart_34.jpg +- data/imagenet-r/n12267677/misc_53.jpg +- data/imagenet-r/n02423022/videogame_0.jpg +- data/imagenet-r/n04536866/art_3.jpg +- data/imagenet-r/n02395406/painting_1.jpg +- data/imagenet-r/n02672831/art_0.jpg +- data/imagenet-r/n02655020/misc_38.jpg +- data/imagenet-r/n04310018/videogame_25.jpg +- data/imagenet-r/n02672831/sketch_4.jpg +- data/imagenet-r/n09835506/sketch_8.jpg +- data/imagenet-r/n02123045/painting_33.jpg +- data/imagenet-r/n07880968/sculpture_0.jpg +- data/imagenet-r/n02129165/sculpture_7.jpg +- data/imagenet-r/n07753592/misc_139.jpg +- data/imagenet-r/n04192698/cartoon_11.jpg +- data/imagenet-r/n02112137/sketch_19.jpg +- data/imagenet-r/n02085620/misc_98.jpg +- data/imagenet-r/n02091134/misc_10.jpg +- data/imagenet-r/n03372029/cartoon_17.jpg +- data/imagenet-r/n07742313/toy_3.jpg +- data/imagenet-r/n04266014/tattoo_3.jpg +- data/imagenet-r/n01484850/art_8.jpg +- data/imagenet-r/n02883205/toy_3.jpg +- data/imagenet-r/n04086273/sculpture_2.jpg +- data/imagenet-r/n02672831/deviantart_3.jpg +- data/imagenet-r/n02009912/misc_9.jpg +- data/imagenet-r/n02110341/sketch_21.jpg +- data/imagenet-r/n04275548/videogame_7.jpg +- data/imagenet-r/n01630670/embroidery_1.jpg +- data/imagenet-r/n07734744/deviantart_19.jpg +- data/imagenet-r/n02948072/deviantart_35.jpg +- data/imagenet-r/n02099712/sketch_4.jpg +- data/imagenet-r/n01882714/painting_17.jpg +- data/imagenet-r/n04141076/painting_46.jpg +- data/imagenet-r/n02395406/cartoon_13.jpg +- data/imagenet-r/n02110341/misc_97.jpg +- data/imagenet-r/n07920052/graphic_10.jpg +- data/imagenet-r/n02445715/tattoo_1.jpg +- data/imagenet-r/n07749582/toy_5.jpg +- data/imagenet-r/n02085620/misc_10.jpg +- data/imagenet-r/n02363005/sketch_11.jpg +- data/imagenet-r/n02655020/deviantart_14.jpg +- data/imagenet-r/n01882714/sculpture_13.jpg +- data/imagenet-r/n01806143/sketch_12.jpg +- data/imagenet-r/n02165456/tattoo_36.jpg +- data/imagenet-r/n03630383/toy_3.jpg +- data/imagenet-r/n02117135/painting_3.jpg +- data/imagenet-r/n07734744/deviantart_3.jpg +- data/imagenet-r/n02391049/misc_134.jpg +- data/imagenet-r/n02108089/misc_20.jpg +- data/imagenet-r/n02113023/misc_32.jpg +- data/imagenet-r/n07734744/sketch_2.jpg +- data/imagenet-r/n02128385/art_0.jpg +- data/imagenet-r/n02134084/misc_35.jpg +- data/imagenet-r/n02279972/sketch_6.jpg +- data/imagenet-r/n02395406/cartoon_30.jpg +- data/imagenet-r/n02096585/misc_98.jpg +- data/imagenet-r/n02102318/misc_28.jpg +- data/imagenet-r/n07753275/sketch_5.jpg +- data/imagenet-r/n02130308/painting_29.jpg +- data/imagenet-r/n07749582/sticker_1.jpg +- data/imagenet-r/n01833805/tattoo_30.jpg +- data/imagenet-r/n02134084/misc_16.jpg +- data/imagenet-r/n02102318/misc_7.jpg +- data/imagenet-r/n01833805/cartoon_25.jpg +- data/imagenet-r/n02088238/misc_95.jpg +- data/imagenet-r/n01770393/tattoo_58.jpg +- data/imagenet-r/n02607072/misc_42.jpg +- data/imagenet-r/n03345487/painting_2.jpg +- data/imagenet-r/n02906734/sketch_19.jpg +- data/imagenet-r/n02071294/deviantart_30.jpg +- data/imagenet-r/n01514859/cartoon_35.jpg +- data/imagenet-r/n01820546/painting_31.jpg +- data/imagenet-r/n01833805/misc_3.jpg +- data/imagenet-r/n02909870/sketch_19.jpg +- data/imagenet-r/n07720875/sketch_3.jpg +- data/imagenet-r/n03930630/painting_8.jpg +- data/imagenet-r/n02110341/deviantart_8.jpg +- data/imagenet-r/n04118538/sketch_15.jpg +- data/imagenet-r/n07734744/toy_33.jpg +- data/imagenet-r/n02236044/sketch_1.jpg +- data/imagenet-r/n02123045/cartoon_10.jpg +- data/imagenet-r/n02112018/misc_37.jpg +- data/imagenet-r/n02138441/tattoo_0.jpg +- data/imagenet-r/n02088466/misc_7.jpg +- data/imagenet-r/n01531178/graphic_2.jpg +- data/imagenet-r/n04086273/sketch_11.jpg +- data/imagenet-r/n02130308/cartoon_14.jpg +- data/imagenet-r/n02447366/sketch_19.jpg +- data/imagenet-r/n02097298/misc_27.jpg +- data/imagenet-r/n01910747/painting_18.jpg +- data/imagenet-r/n04192698/deviantart_0.jpg +- data/imagenet-r/n02206856/cartoon_38.jpg +- data/imagenet-r/n02437616/cartoon_8.jpg +- data/imagenet-r/n07714990/toy_7.jpg +- data/imagenet-r/n02395406/sculpture_4.jpg +- data/imagenet-r/n04254680/toy_2.jpg +- data/imagenet-r/n07695742/deviantart_12.jpg +- data/imagenet-r/n01983481/sketch_6.jpg +- data/imagenet-r/n02395406/embroidery_4.jpg +- data/imagenet-r/n02391049/sketch_18.jpg +- data/imagenet-r/n02113023/misc_35.jpg +- data/imagenet-r/n04254680/deviantart_6.jpg +- data/imagenet-r/n02950826/sketch_13.jpg +- data/imagenet-r/n01986214/origami_8.jpg +- data/imagenet-r/n04325704/deviantart_7.jpg +- data/imagenet-r/n09472597/toy_6.jpg +- data/imagenet-r/n02808440/sculpture_2.jpg +- data/imagenet-r/n02268443/misc_194.jpg +- data/imagenet-r/n02841315/sketch_21.jpg +- data/imagenet-r/n09472597/embroidery_0.jpg +- data/imagenet-r/n02110958/painting_29.jpg +- data/imagenet-r/n01944390/misc_96.jpg +- data/imagenet-r/n01514859/misc_7.jpg +- data/imagenet-r/n01806143/cartoon_1.jpg +- data/imagenet-r/n02437616/toy_1.jpg +- data/imagenet-r/n04118538/videogame_1.jpg +- data/imagenet-r/n07753592/misc_58.jpg +- data/imagenet-r/n01806143/origami_5.jpg +- data/imagenet-r/n02106550/sketch_14.jpg +- data/imagenet-r/n02363005/cartoon_36.jpg +- data/imagenet-r/n07720875/deviantart_7.jpg +- data/imagenet-r/n07753275/art_2.jpg +- data/imagenet-r/n02056570/sketch_13.jpg +- data/imagenet-r/n01614925/tattoo_34.jpg +- data/imagenet-r/n01514859/deviantart_18.jpg +- data/imagenet-r/n02769748/sketch_24.jpg +- data/imagenet-r/n01806143/painting_1.jpg +- data/imagenet-r/n02909870/videogame_4.jpg +- data/imagenet-r/n02966193/cartoon_11.jpg +- data/imagenet-r/n01498041/videogame_0.jpg +- data/imagenet-r/n01630670/sketch_21.jpg +- data/imagenet-r/n01531178/painting_31.jpg +- data/imagenet-r/n02398521/art_0.jpg +- data/imagenet-r/n02099601/misc_11.jpg +- data/imagenet-r/n02123045/painting_4.jpg +- data/imagenet-r/n01843383/deviantart_20.jpg +- data/imagenet-r/n01910747/graffiti_0.jpg +- data/imagenet-r/n03498962/sketch_15.jpg +- data/imagenet-r/n02094433/videogame_0.jpg +- data/imagenet-r/n01847000/tattoo_3.jpg +- data/imagenet-r/n01986214/tattoo_6.jpg +- data/imagenet-r/n02749479/misc_20.jpg +- data/imagenet-r/n02480495/painting_10.jpg +- data/imagenet-r/n07734744/deviantart_4.jpg +- data/imagenet-r/n01882714/cartoon_40.jpg +- data/imagenet-r/n02279972/graffiti_1.jpg +- data/imagenet-r/n02009912/sketch_3.jpg +- data/imagenet-r/n02268443/misc_130.jpg +- data/imagenet-r/n02510455/deviantart_16.jpg +- data/imagenet-r/n01882714/deviantart_29.jpg +- data/imagenet-r/n03594945/sketch_4.jpg +- data/imagenet-r/n04536866/deviantart_20.jpg +- data/imagenet-r/n02268443/sketch_6.jpg +- data/imagenet-r/n01833805/tattoo_101.jpg +- data/imagenet-r/n03888257/cartoon_4.jpg +- data/imagenet-r/n03494278/sketch_0.jpg +- data/imagenet-r/n02268443/misc_193.jpg +- data/imagenet-r/n07734744/deviantart_13.jpg +- data/imagenet-r/n02123045/sculpture_0.jpg +- data/imagenet-r/n02317335/misc_0.jpg +- data/imagenet-r/n01443537/deviantart_15.jpg +- data/imagenet-r/n02112018/sketch_22.jpg +- data/imagenet-r/n02437616/tattoo_4.jpg +- data/imagenet-r/n04275548/embroidery_15.jpg +- data/imagenet-r/n01847000/tattoo_0.jpg +- data/imagenet-r/n01616318/graphic_1.jpg +- data/imagenet-r/n01806143/painting_9.jpg +- data/imagenet-r/n07753592/sketch_2.jpg +- data/imagenet-r/n04266014/videogame_8.jpg +- data/imagenet-r/n02480855/sculpture_10.jpg +- data/imagenet-r/n02841315/graphic_3.jpg +- data/imagenet-r/n07697537/deviantart_30.jpg +- data/imagenet-r/n02526121/toy_0.jpg +- data/imagenet-r/n07614500/misc_6.jpg +- data/imagenet-r/n01833805/cartoon_14.jpg +- data/imagenet-r/n02480495/misc_4.jpg +- data/imagenet-r/n01882714/cartoon_26.jpg +- data/imagenet-r/n02206856/cartoon_21.jpg +- data/imagenet-r/n02102318/misc_63.jpg +- data/imagenet-r/n01774750/toy_2.jpg +- data/imagenet-r/n02007558/embroidery_18.jpg +- data/imagenet-r/n04465501/tattoo_6.jpg +- data/imagenet-r/n02480855/tattoo_35.jpg +- data/imagenet-r/n02091032/sketch_9.jpg +- data/imagenet-r/n01843383/deviantart_72.jpg +- data/imagenet-r/n02481823/cartoon_0.jpg +- data/imagenet-r/n12267677/deviantart_27.jpg +- data/imagenet-r/n02098286/misc_18.jpg +- data/imagenet-r/n03452741/art_3.jpg +- data/imagenet-r/n02085620/tattoo_9.jpg +- data/imagenet-r/n02097298/misc_10.jpg +- data/imagenet-r/n02088466/sketch_0.jpg +- data/imagenet-r/n01843383/sticker_1.jpg +- data/imagenet-r/n03930630/toy_7.jpg +- data/imagenet-r/n01770393/tattoo_5.jpg +- data/imagenet-r/n04389033/toy_10.jpg +- data/imagenet-r/n02134084/misc_91.jpg +- data/imagenet-r/n07753592/misc_130.jpg +- data/imagenet-r/n01748264/sketch_14.jpg +- data/imagenet-r/n02325366/misc_49.jpg +- data/imagenet-r/n02808440/painting_4.jpg +- data/imagenet-r/n02077923/misc_20.jpg +- data/imagenet-r/n07695742/sketch_19.jpg +- data/imagenet-r/n02110958/graffiti_5.jpg +- data/imagenet-r/n02398521/toy_14.jpg +- data/imagenet-r/n01843383/misc_2.jpg +- data/imagenet-r/n02138441/sculpture_18.jpg +- data/imagenet-r/n02112018/misc_54.jpg +- data/imagenet-r/n07742313/cartoon_2.jpg +- data/imagenet-r/n02325366/misc_29.jpg +- data/imagenet-r/n07697313/art_0.jpg +- data/imagenet-r/n02966193/cartoon_23.jpg +- data/imagenet-r/n02233338/sketch_14.jpg +- data/imagenet-r/n02226429/art_8.jpg +- data/imagenet-r/n02909870/videogame_0.jpg +- data/imagenet-r/n04266014/painting_1.jpg +- data/imagenet-r/n02113624/sketch_10.jpg +- data/imagenet-r/n03594945/toy_19.jpg +- data/imagenet-r/n02109525/sketch_4.jpg +- data/imagenet-r/n02398521/sketch_14.jpg +- data/imagenet-r/n02481823/painting_5.jpg +- data/imagenet-r/n01806143/origami_7.jpg +- data/imagenet-r/n02066245/sketch_15.jpg +- data/imagenet-r/n02268443/misc_128.jpg +- data/imagenet-r/n03495258/cartoon_5.jpg +- data/imagenet-r/n02088094/misc_9.jpg +- data/imagenet-r/n01847000/misc_20.jpg +- data/imagenet-r/n04086273/cartoon_20.jpg +- data/imagenet-r/n02797295/misc_51.jpg +- data/imagenet-r/n01910747/graphic_12.jpg +- data/imagenet-r/n01632777/cartoon_29.jpg +- data/imagenet-r/n02356798/sketch_18.jpg +- data/imagenet-r/n01677366/deviantart_0.jpg +- data/imagenet-r/n01770393/tattoo_31.jpg +- data/imagenet-r/n01443537/origami_8.jpg +- data/imagenet-r/n02134084/deviantart_16.jpg +- data/imagenet-r/n02165456/sketch_12.jpg +- data/imagenet-r/n01882714/sticker_0.jpg +- data/imagenet-r/n02655020/videogame_7.jpg +- data/imagenet-r/n01443537/misc_8.jpg +- data/imagenet-r/n04389033/graffiti_22.jpg +- data/imagenet-r/n02395406/sticker_7.jpg +- data/imagenet-r/n01494475/deviantart_7.jpg +- data/imagenet-r/n02480495/painting_20.jpg +- data/imagenet-r/n01983481/misc_30.jpg +- data/imagenet-r/n04389033/graffiti_19.jpg +- data/imagenet-r/n01983481/sketch_4.jpg +- data/imagenet-r/n04536866/videogame_12.jpg +- data/imagenet-r/n02119022/misc_77.jpg +- data/imagenet-r/n02808440/cartoon_8.jpg +- data/imagenet-r/n02356798/painting_0.jpg +- data/imagenet-r/n02110958/painting_36.jpg +- data/imagenet-r/n02219486/toy_5.jpg +- data/imagenet-r/n01630670/origami_1.jpg +- data/imagenet-r/n02483362/cartoon_3.jpg +- data/imagenet-r/n02129165/sculpture_12.jpg +- data/imagenet-r/n02108089/misc_21.jpg +- data/imagenet-r/n03888257/graffiti_7.jpg +- data/imagenet-r/n02219486/origami_2.jpg +- data/imagenet-r/n01748264/tattoo_19.jpg +- data/imagenet-r/n02108089/misc_3.jpg +- data/imagenet-r/n02119022/misc_115.jpg +- data/imagenet-r/n01910747/cartoon_16.jpg +- data/imagenet-r/n02655020/misc_93.jpg +- data/imagenet-r/n01843383/cartoon_42.jpg +- data/imagenet-r/n02206856/graphic_7.jpg +- data/imagenet-r/n01443537/art_8.jpg +- data/imagenet-r/n07745940/sculpture_3.jpg +- data/imagenet-r/n04266014/sketch_7.jpg +- data/imagenet-r/n02134084/misc_8.jpg +- data/imagenet-r/n07720875/cartoon_1.jpg +- data/imagenet-r/n03594945/videogame_12.jpg +- data/imagenet-r/n07734744/graffiti_31.jpg +- data/imagenet-r/n02510455/sketch_9.jpg +- data/imagenet-r/n02119022/misc_107.jpg +- data/imagenet-r/n02398521/toy_13.jpg +- data/imagenet-r/n12267677/misc_23.jpg +- data/imagenet-r/n01843383/painting_8.jpg +- data/imagenet-r/n07718472/cartoon_4.jpg +- data/imagenet-r/n02110185/cartoon_8.jpg +- data/imagenet-r/n01614925/cartoon_12.jpg +- data/imagenet-r/n02129165/graffiti_3.jpg +- data/imagenet-r/n02007558/art_11.jpg +- data/imagenet-r/n02097298/sketch_20.jpg +- data/imagenet-r/n07749582/tattoo_1.jpg +- data/imagenet-r/n02797295/misc_74.jpg +- data/imagenet-r/n01833805/graffiti_3.jpg +- data/imagenet-r/n01843383/deviantart_53.jpg +- data/imagenet-r/n02128385/sculpture_7.jpg +- data/imagenet-r/n07693725/toy_3.jpg +- data/imagenet-r/n02980441/embroidery_1.jpg +- data/imagenet-r/n01986214/sketch_14.jpg +- data/imagenet-r/n02437616/sketch_13.jpg +- data/imagenet-r/n07718472/cartoon_17.jpg +- data/imagenet-r/n04147183/art_8.jpg +- data/imagenet-r/n01847000/sketch_0.jpg +- data/imagenet-r/n02814860/sketch_4.jpg +- data/imagenet-r/n04141076/painting_37.jpg +- data/imagenet-r/n01843383/graphic_3.jpg +- data/imagenet-r/n02129604/deviantart_25.jpg +- data/imagenet-r/n01616318/tattoo_10.jpg +- data/imagenet-r/n02236044/graphic_3.jpg +- data/imagenet-r/n02279972/tattoo_25.jpg +- data/imagenet-r/n10565667/misc_1.jpg +- data/imagenet-r/n01518878/painting_8.jpg +- data/imagenet-r/n07745940/misc_4.jpg +- data/imagenet-r/n02106662/sketch_15.jpg +- data/imagenet-r/n04141076/painting_18.jpg +- data/imagenet-r/n07880968/art_0.jpg +- data/imagenet-r/n02088238/misc_27.jpg +- data/imagenet-r/n02114367/misc_18.jpg +- data/imagenet-r/n02672831/sketch_13.jpg +- data/imagenet-r/n03498962/sketch_22.jpg +- data/imagenet-r/n02096585/misc_119.jpg +- data/imagenet-r/n03930630/misc_9.jpg +- data/imagenet-r/n02106550/misc_21.jpg +- data/imagenet-r/n03124170/art_8.jpg +- data/imagenet-r/n01986214/painting_6.jpg +- data/imagenet-r/n07753592/misc_161.jpg +- data/imagenet-r/n01531178/painting_1.jpg +- data/imagenet-r/n01833805/cartoon_4.jpg +- data/imagenet-r/n02364673/cartoon_16.jpg +- data/imagenet-r/n02948072/embroidery_32.jpg +- data/imagenet-r/n12267677/misc_35.jpg +- data/imagenet-r/n01833805/tattoo_0.jpg +- data/imagenet-r/n07753592/misc_112.jpg +- data/imagenet-r/n04266014/deviantart_4.jpg +- data/imagenet-r/n02395406/toy_12.jpg +- data/imagenet-r/n01644373/cartoon_9.jpg +- data/imagenet-r/n01518878/sketch_4.jpg +- data/imagenet-r/n03498962/toy_1.jpg +- data/imagenet-r/n04254680/deviantart_27.jpg +- data/imagenet-r/n02481823/deviantart_30.jpg +- data/imagenet-r/n04266014/sketch_3.jpg +- data/imagenet-r/n07734744/sticker_14.jpg +- data/imagenet-r/n02325366/misc_26.jpg +- data/imagenet-r/n02814860/painting_47.jpg +- data/imagenet-r/n03452741/sketch_11.jpg +- data/imagenet-r/n02206856/cartoon_56.jpg +- data/imagenet-r/n01770393/graphic_1.jpg +- data/imagenet-r/n02165456/toy_10.jpg +- data/imagenet-r/n01484850/painting_19.jpg +- data/imagenet-r/n02480855/tattoo_43.jpg +- data/imagenet-r/n02110958/sculpture_4.jpg +- data/imagenet-r/n12267677/misc_93.jpg +- data/imagenet-r/n02510455/deviantart_21.jpg +- data/imagenet-r/n02279972/sketch_7.jpg +- data/imagenet-r/n02363005/cartoon_24.jpg +- data/imagenet-r/n02086240/misc_10.jpg +- data/imagenet-r/n04536866/misc_0.jpg +- data/imagenet-r/n03495258/origami_2.jpg +- data/imagenet-r/n04141076/painting_24.jpg +- data/imagenet-r/n02206856/graphic_8.jpg +- data/imagenet-r/n02802426/art_3.jpg +- data/imagenet-r/n07697313/embroidery_2.jpg +- data/imagenet-r/n03630383/sketch_14.jpg +- data/imagenet-r/n02088238/misc_32.jpg +- data/imagenet-r/n02236044/tattoo_29.jpg +- data/imagenet-r/n01518878/painting_7.jpg +- data/imagenet-r/n07753275/origami_1.jpg +- data/imagenet-r/n04192698/deviantart_24.jpg +- data/imagenet-r/n02099601/misc_6.jpg +- data/imagenet-r/n07734744/cartoon_34.jpg +- data/imagenet-r/n02226429/origami_11.jpg +- data/imagenet-r/n04147183/sketch_11.jpg +- data/imagenet-r/n07873807/sketch_12.jpg +- data/imagenet-r/n01531178/misc_8.jpg +- data/imagenet-r/n03124170/cartoon_69.jpg +- data/imagenet-r/n02091032/sketch_19.jpg +- data/imagenet-r/n03888257/cartoon_34.jpg +- data/imagenet-r/n04310018/toy_0.jpg +- data/imagenet-r/n02130308/painting_26.jpg +- data/imagenet-r/n02481823/art_9.jpg +- data/imagenet-r/n02843684/sketch_12.jpg +- data/imagenet-r/n03710193/misc_6.jpg +- data/imagenet-r/n02802426/sketch_12.jpg +- data/imagenet-r/n01910747/cartoon_6.jpg +- data/imagenet-r/n02672831/cartoon_39.jpg +- data/imagenet-r/n02391049/misc_64.jpg +- data/imagenet-r/n03775071/painting_1.jpg +- data/imagenet-r/n02130308/toy_4.jpg +- data/imagenet-r/n02909870/graphic_10.jpg +- data/imagenet-r/n02410509/toy_6.jpg +- data/imagenet-r/n01833805/tattoo_95.jpg +- data/imagenet-r/n02097298/sketch_7.jpg +- data/imagenet-r/n02138441/toy_2.jpg +- data/imagenet-r/n02364673/cartoon_8.jpg +- data/imagenet-r/n07745940/graffiti_12.jpg +- data/imagenet-r/n02113023/misc_5.jpg +- data/imagenet-r/n02363005/cartoon_14.jpg +- data/imagenet-r/n02102318/embroidery_0.jpg +- data/imagenet-r/n02948072/deviantart_18.jpg +- data/imagenet-r/n07745940/graffiti_10.jpg +- data/imagenet-r/n07697537/sketch_12.jpg +- data/imagenet-r/n02094433/misc_57.jpg +- data/imagenet-r/n02106662/misc_91.jpg +- data/imagenet-r/n03481172/art_10.jpg +- data/imagenet-r/n01518878/graffiti_10.jpg +- data/imagenet-r/n01514859/cartoon_26.jpg +- data/imagenet-r/n03372029/cartoon_22.jpg +- data/imagenet-r/n02110185/painting_39.jpg +- data/imagenet-r/n01843383/painting_22.jpg +- data/imagenet-r/n02066245/art_12.jpg +- data/imagenet-r/n04141076/painting_28.jpg +- data/imagenet-r/n04347754/deviantart_2.jpg +- data/imagenet-r/n01843383/art_19.jpg +- data/imagenet-r/n02843684/cartoon_16.jpg +- data/imagenet-r/n01833805/tattoo_10.jpg +- data/imagenet-r/n02007558/origami_3.jpg +- data/imagenet-r/n02486410/sketch_14.jpg +- data/imagenet-r/n03947888/videogame_7.jpg +- data/imagenet-r/n02110341/misc_71.jpg +- data/imagenet-r/n03372029/sculpture_36.jpg +- data/imagenet-r/n02009912/misc_47.jpg +- data/imagenet-r/n12267677/misc_16.jpg +- data/imagenet-r/n02363005/cartoon_15.jpg +- data/imagenet-r/n04347754/videogame_1.jpg +- data/imagenet-r/n01833805/graphic_8.jpg +- data/imagenet-r/n02119022/videogame_5.jpg +- data/imagenet-r/n02749479/misc_9.jpg +- data/imagenet-r/n03602883/sketch_4.jpg +- data/imagenet-r/n02445715/toy_5.jpg +- data/imagenet-r/n04266014/graphic_4.jpg +- data/imagenet-r/n02086240/misc_19.jpg +- data/imagenet-r/n02410509/sketch_5.jpg +- data/imagenet-r/n03594945/sketch_13.jpg +- data/imagenet-r/n04310018/videogame_19.jpg +- data/imagenet-r/n02134084/misc_157.jpg +- data/imagenet-r/n07614500/embroidery_21.jpg +- data/imagenet-r/n01614925/graffiti_3.jpg +- data/imagenet-r/n02793495/cartoon_1.jpg +- data/imagenet-r/n02091134/misc_68.jpg +- data/imagenet-r/n01518878/cartoon_32.jpg +- data/imagenet-r/n01514859/cartoon_8.jpg +- data/imagenet-r/n02117135/art_6.jpg +- data/imagenet-r/n02091134/sketch_3.jpg +- data/imagenet-r/n02226429/sculpture_0.jpg +- data/imagenet-r/n02268443/misc_85.jpg +- data/imagenet-r/n02948072/deviantart_1.jpg +- data/imagenet-r/n01614925/cartoon_2.jpg +- data/imagenet-r/n02268443/misc_184.jpg +- data/imagenet-r/n02909870/cartoon_6.jpg +- data/imagenet-r/n02883205/cartoon_28.jpg +- data/imagenet-r/n09835506/sculpture_6.jpg +- data/imagenet-r/n07768694/sketch_4.jpg +- data/imagenet-r/n04086273/tattoo_24.jpg +- data/imagenet-r/n02114367/misc_48.jpg +- data/imagenet-r/n04552348/deviantart_3.jpg +- data/imagenet-r/n01514859/deviantart_43.jpg +- data/imagenet-r/n01498041/sketch_10.jpg +- data/imagenet-r/n04266014/art_1.jpg +- data/imagenet-r/n02906734/sketch_0.jpg +- data/imagenet-r/n10565667/deviantart_4.jpg +- data/imagenet-r/n02398521/cartoon_19.jpg +- data/imagenet-r/n02481823/toy_14.jpg +- data/imagenet-r/n01855672/painting_16.jpg +- data/imagenet-r/n07714571/sketch_6.jpg +- data/imagenet-r/n02437616/toy_0.jpg +- data/imagenet-r/n01632777/cartoon_11.jpg +- data/imagenet-r/n01694178/tattoo_25.jpg +- data/imagenet-r/n03947888/art_2.jpg +- data/imagenet-r/n02909870/painting_0.jpg +- data/imagenet-r/n01770393/tattoo_68.jpg +- data/imagenet-r/n02108089/misc_55.jpg +- data/imagenet-r/n02655020/misc_18.jpg +- data/imagenet-r/n01770393/tattoo_48.jpg +- data/imagenet-r/n03452741/painting_0.jpg +- data/imagenet-r/n02364673/cartoon_15.jpg +- data/imagenet-r/n07745940/graffiti_35.jpg +- data/imagenet-r/n02056570/deviantart_3.jpg +- data/imagenet-r/n02346627/painting_8.jpg +- data/imagenet-r/n02096585/tattoo_16.jpg +- data/imagenet-r/n02051845/deviantart_17.jpg +- data/imagenet-r/n04147183/sketch_2.jpg +- data/imagenet-r/n01616318/art_0.jpg +- data/imagenet-r/n01484850/toy_1.jpg +- data/imagenet-r/n02769748/sketch_11.jpg +- data/imagenet-r/n03494278/art_0.jpg +- data/imagenet-r/n01833805/cartoon_13.jpg +- data/imagenet-r/n02165456/tattoo_5.jpg +- data/imagenet-r/n01531178/art_6.jpg +- data/imagenet-r/n04141076/art_12.jpg +- data/imagenet-r/n01644373/painting_8.jpg +- data/imagenet-r/n01833805/embroidery_0.jpg +- data/imagenet-r/n04266014/videogame_30.jpg +- data/imagenet-r/n02110185/painting_30.jpg +- data/imagenet-r/n01518878/cartoon_29.jpg +- data/imagenet-r/n02906734/graffiti_4.jpg +- data/imagenet-r/n04146614/videogame_12.jpg +- data/imagenet-r/n04325704/deviantart_13.jpg +- data/imagenet-r/n02108915/misc_102.jpg +- data/imagenet-r/n07753275/painting_12.jpg +- data/imagenet-r/n02085620/misc_1.jpg +- data/imagenet-r/n01774750/videogame_1.jpg +- data/imagenet-r/n01882714/sketch_2.jpg +- data/imagenet-r/n02236044/cartoon_7.jpg +- data/imagenet-r/n02814860/deviantart_14.jpg +- data/imagenet-r/n04389033/videogame_21.jpg +- data/imagenet-r/n02510455/misc_71.jpg +- data/imagenet-r/n02391049/videogame_1.jpg +- data/imagenet-r/n07693725/painting_8.jpg +- data/imagenet-r/n02119022/misc_61.jpg +- data/imagenet-r/n02317335/tattoo_11.jpg +- data/imagenet-r/n01644373/tattoo_41.jpg +- data/imagenet-r/n04552348/videogame_20.jpg +- data/imagenet-r/n04310018/deviantart_2.jpg +- data/imagenet-r/n02165456/embroidery_2.jpg +- data/imagenet-r/n09472597/graphic_10.jpg +- data/imagenet-r/n02110341/misc_49.jpg +- data/imagenet-r/n02130308/cartoon_23.jpg +- data/imagenet-r/n07753275/cartoon_4.jpg +- data/imagenet-r/n01534433/sketch_18.jpg +- data/imagenet-r/n02130308/graffiti_5.jpg +- data/imagenet-r/n04192698/cartoon_8.jpg +- data/imagenet-r/n10565667/deviantart_23.jpg +- data/imagenet-r/n03676483/cartoon_19.jpg +- data/imagenet-r/n02655020/videogame_2.jpg +- data/imagenet-r/n03124170/cartoon_33.jpg +- data/imagenet-r/n02094433/misc_51.jpg +- data/imagenet-r/n02226429/sketch_19.jpg +- data/imagenet-r/n02966193/embroidery_0.jpg +- data/imagenet-r/n07880968/sketch_14.jpg +- data/imagenet-r/n02672831/cartoon_25.jpg +- data/imagenet-r/n02071294/painting_1.jpg +- data/imagenet-r/n02909870/videogame_13.jpg +- data/imagenet-r/n02480855/tattoo_15.jpg +- data/imagenet-r/n02206856/toy_32.jpg +- data/imagenet-r/n02480495/painting_40.jpg +- data/imagenet-r/n02233338/misc_49.jpg +- data/imagenet-r/n04389033/videogame_50.jpg +- data/imagenet-r/n02112018/misc_58.jpg +- data/imagenet-r/n02410509/toy_11.jpg +- data/imagenet-r/n03124170/toy_7.jpg +- data/imagenet-r/n01770393/art_1.jpg +- data/imagenet-r/n02096585/misc_29.jpg +- data/imagenet-r/n02410509/sculpture_43.jpg +- data/imagenet-r/n01986214/toy_7.jpg +- data/imagenet-r/n07714571/painting_5.jpg +- data/imagenet-r/n01494475/misc_118.jpg +- data/imagenet-r/n07697313/cartoon_12.jpg +- data/imagenet-r/n02356798/cartoon_2.jpg +- data/imagenet-r/n02948072/toy_9.jpg +- data/imagenet-r/n02123045/painting_41.jpg +- data/imagenet-r/n04254680/sketch_13.jpg +- data/imagenet-r/n04409515/cartoon_17.jpg +- data/imagenet-r/n04086273/tattoo_29.jpg +- data/imagenet-r/n02099601/sketch_6.jpg +- data/imagenet-r/n04465501/sketch_19.jpg +- data/imagenet-r/n01498041/deviantart_7.jpg +- data/imagenet-r/n03930630/misc_22.jpg +- data/imagenet-r/n03124170/cartoon_38.jpg +- data/imagenet-r/n02951358/painting_14.jpg +- data/imagenet-r/n07734744/art_22.jpg +- data/imagenet-r/n02108915/misc_106.jpg +- data/imagenet-r/n02701002/cartoon_4.jpg +- data/imagenet-r/n04522168/deviantart_9.jpg +- data/imagenet-r/n02841315/painting_1.jpg +- data/imagenet-r/n02325366/misc_16.jpg +- data/imagenet-r/n02051845/tattoo_3.jpg +- data/imagenet-r/n02206856/cartoon_41.jpg +- data/imagenet-r/n02096585/misc_7.jpg +- data/imagenet-r/n02138441/sketch_9.jpg +- data/imagenet-r/n02447366/cartoon_15.jpg +- data/imagenet-r/n02106166/misc_7.jpg +- data/imagenet-r/n02481823/sketch_14.jpg +- data/imagenet-r/n02097298/sketch_21.jpg +- data/imagenet-r/n02510455/sketch_7.jpg +- data/imagenet-r/n07614500/art_4.jpg +- data/imagenet-r/n07753592/misc_75.jpg +- data/imagenet-r/n02447366/embroidery_6.jpg +- data/imagenet-r/n02190166/cartoon_3.jpg +- data/imagenet-r/n01770393/sketch_9.jpg +- data/imagenet-r/n02099601/sketch_23.jpg +- data/imagenet-r/n02091134/misc_54.jpg +- data/imagenet-r/n01882714/sketch_19.jpg +- data/imagenet-r/n07753275/art_17.jpg +- data/imagenet-r/n02909870/embroidery_2.jpg +- data/imagenet-r/n02134084/misc_119.jpg +- data/imagenet-r/n02007558/tattoo_35.jpg +- data/imagenet-r/n02909870/embroidery_4.jpg +- data/imagenet-r/n01983481/misc_8.jpg +- data/imagenet-r/n07768694/deviantart_22.jpg +- data/imagenet-r/n04147183/art_2.jpg +- data/imagenet-r/n07745940/misc_11.jpg +- data/imagenet-r/n07697537/misc_79.jpg +- data/imagenet-r/n02814860/sketch_11.jpg +- data/imagenet-r/n02099601/misc_82.jpg +- data/imagenet-r/n02268443/misc_178.jpg +- data/imagenet-r/n01986214/cartoon_25.jpg +- data/imagenet-r/n03498962/videogame_3.jpg +- data/imagenet-r/n07734744/misc_13.jpg +- data/imagenet-r/n03947888/videogame_9.jpg +- data/imagenet-r/n01484850/videogame_0.jpg +- data/imagenet-r/n02480855/graphic_4.jpg +- data/imagenet-r/n01531178/art_13.jpg +- data/imagenet-r/n02948072/sketch_14.jpg +- data/imagenet-r/n01806143/sculpture_7.jpg +- data/imagenet-r/n04141076/graffiti_5.jpg +- data/imagenet-r/n02655020/sketch_2.jpg +- data/imagenet-r/n07920052/sketch_9.jpg +- data/imagenet-r/n02398521/painting_13.jpg +- data/imagenet-r/n02007558/misc_24.jpg +- data/imagenet-r/n01833805/painting_10.jpg +- data/imagenet-r/n02481823/sculpture_16.jpg +- data/imagenet-r/n02110958/cartoon_31.jpg +- data/imagenet-r/n04325704/cartoon_0.jpg +- data/imagenet-r/n02883205/graffiti_0.jpg +- data/imagenet-r/n03773504/videogame_1.jpg +- data/imagenet-r/n01614925/graffiti_0.jpg +- data/imagenet-r/n02110341/misc_136.jpg +- data/imagenet-r/n07749582/sculpture_0.jpg +- data/imagenet-r/n01531178/deviantart_1.jpg +- data/imagenet-r/n04141076/painting_45.jpg +- data/imagenet-r/n02071294/sketch_22.jpg +- data/imagenet-r/n04347754/videogame_17.jpg +- data/imagenet-r/n02138441/painting_8.jpg +- data/imagenet-r/n01614925/tattoo_37.jpg +- data/imagenet-r/n02119022/misc_20.jpg +- data/imagenet-r/n04192698/videogame_14.jpg +- data/imagenet-r/n10565667/sketch_1.jpg +- data/imagenet-r/n02099601/misc_30.jpg +- data/imagenet-r/n02808440/misc_6.jpg +- data/imagenet-r/n04522168/videogame_16.jpg +- data/imagenet-r/n02607072/misc_48.jpg +- data/imagenet-r/n02395406/origami_11.jpg +- data/imagenet-r/n02119022/misc_118.jpg +- data/imagenet-r/n01843383/tattoo_2.jpg +- data/imagenet-r/n02106030/painting_18.jpg +- data/imagenet-r/n04266014/videogame_10.jpg +- data/imagenet-r/n02480855/painting_10.jpg +- data/imagenet-r/n02437616/origami_3.jpg +- data/imagenet-r/n01484850/sketch_1.jpg +- data/imagenet-r/n02356798/sketch_13.jpg +- data/imagenet-r/n02481823/cartoon_1.jpg +- data/imagenet-r/n02814860/art_16.jpg +- data/imagenet-r/n02823750/sticker_1.jpg +- data/imagenet-r/n02219486/tattoo_13.jpg +- data/imagenet-r/n01632777/sketch_8.jpg +- data/imagenet-r/n04522168/painting_20.jpg +- data/imagenet-r/n03594945/tattoo_2.jpg +- data/imagenet-r/n02445715/tattoo_2.jpg +- data/imagenet-r/n07714990/toy_4.jpg +- data/imagenet-r/n07753592/misc_27.jpg +- data/imagenet-r/n02395406/sticker_2.jpg +- data/imagenet-r/n04389033/sketch_10.jpg +- data/imagenet-r/n02102318/sketch_6.jpg +- data/imagenet-r/n07714571/painting_8.jpg +- data/imagenet-r/n07734744/videogame_39.jpg +- data/imagenet-r/n07734744/toy_13.jpg +- data/imagenet-r/n02129604/tattoo_16.jpg +- data/imagenet-r/n01630670/origami_3.jpg +- data/imagenet-r/n07697313/cartoon_3.jpg +- data/imagenet-r/n01774750/painting_4.jpg +- data/imagenet-r/n02423022/origami_4.jpg +- data/imagenet-r/n02317335/misc_7.jpg +- data/imagenet-r/n02423022/art_2.jpg +- data/imagenet-r/n04266014/toy_1.jpg +- data/imagenet-r/n01498041/toy_2.jpg +- data/imagenet-r/n01498041/deviantart_0.jpg +- data/imagenet-r/n02672831/cartoon_14.jpg +- data/imagenet-r/n01494475/misc_5.jpg +- data/imagenet-r/n01498041/origami_2.jpg +- data/imagenet-r/n02793495/embroidery_4.jpg +- data/imagenet-r/n02909870/cartoon_17.jpg +- data/imagenet-r/n02007558/sketch_4.jpg +- data/imagenet-r/n03272010/sketch_17.jpg +- data/imagenet-r/n07753592/misc_114.jpg +- data/imagenet-r/n07753592/deviantart_11.jpg +- data/imagenet-r/n01632777/videogame_6.jpg +- data/imagenet-r/n02110958/tattoo_40.jpg +- data/imagenet-r/n07614500/cartoon_3.jpg +- data/imagenet-r/n07718472/cartoon_20.jpg +- data/imagenet-r/n02268443/misc_70.jpg +- data/imagenet-r/n02066245/cartoon_3.jpg +- data/imagenet-r/n07745940/sculpture_6.jpg +- data/imagenet-r/n02130308/videogame_0.jpg +- data/imagenet-r/n02099601/misc_68.jpg +- data/imagenet-r/n02106030/sculpture_0.jpg +- data/imagenet-r/n07753592/misc_64.jpg +- data/imagenet-r/n03124170/painting_28.jpg +- data/imagenet-r/n02363005/sculpture_18.jpg +- data/imagenet-r/n02480855/tattoo_27.jpg +- data/imagenet-r/n04141076/deviantart_6.jpg +- data/imagenet-r/n04409515/painting_1.jpg +- data/imagenet-r/n02130308/sketch_17.jpg +- data/imagenet-r/n02279972/cartoon_1.jpg +- data/imagenet-r/n02112018/misc_15.jpg +- data/imagenet-r/n04409515/videogame_8.jpg +- data/imagenet-r/n02423022/graphic_6.jpg +- data/imagenet-r/n01983481/sketch_7.jpg +- data/imagenet-r/n01518878/art_4.jpg +- data/imagenet-r/n01630670/cartoon_14.jpg +- data/imagenet-r/n02206856/cartoon_43.jpg +- data/imagenet-r/n01514859/cartoon_7.jpg +- data/imagenet-r/n02948072/embroidery_12.jpg +- data/imagenet-r/n02317335/tattoo_23.jpg +- data/imagenet-r/n01833805/tattoo_53.jpg +- data/imagenet-r/n03481172/sketch_0.jpg +- data/imagenet-r/n04141076/art_1.jpg +- data/imagenet-r/n02447366/cartoon_27.jpg +- data/imagenet-r/n02363005/deviantart_0.jpg +- data/imagenet-r/n02129165/sculpture_23.jpg +- data/imagenet-r/n03424325/misc_75.jpg +- data/imagenet-r/n07693725/cartoon_12.jpg +- data/imagenet-r/n02117135/cartoon_8.jpg +- data/imagenet-r/n02966193/painting_6.jpg +- data/imagenet-r/n04522168/painting_7.jpg +- data/imagenet-r/n02206856/graffiti_30.jpg +- data/imagenet-r/n02112137/sketch_21.jpg +- data/imagenet-r/n02909870/sketch_22.jpg +- data/imagenet-r/n04389033/toy_7.jpg +- data/imagenet-r/n02098286/misc_36.jpg +- data/imagenet-r/n02129165/art_2.jpg +- data/imagenet-r/n04147183/art_7.jpg +- data/imagenet-r/n02165456/toy_7.jpg +- data/imagenet-r/n02134084/misc_69.jpg +- data/imagenet-r/n01843383/cartoon_39.jpg +- data/imagenet-r/n04389033/videogame_45.jpg +- data/imagenet-r/n02655020/videogame_25.jpg +- data/imagenet-r/n01847000/sketch_22.jpg +- data/imagenet-r/n02268443/misc_123.jpg +- data/imagenet-r/n02480495/painting_39.jpg +- data/imagenet-r/n01983481/sketch_11.jpg +- data/imagenet-r/n03481172/deviantart_3.jpg +- data/imagenet-r/n02749479/videogame_1.jpg +- data/imagenet-r/n02909870/origami_0.jpg +- data/imagenet-r/n07920052/sketch_4.jpg +- data/imagenet-r/n03345487/sticker_2.jpg +- data/imagenet-r/n07749582/painting_54.jpg +- data/imagenet-r/n03481172/sketch_22.jpg +- data/imagenet-r/n01514859/origami_1.jpg +- data/imagenet-r/n03272010/painting_13.jpg +- data/imagenet-r/n07697537/sketch_13.jpg +- data/imagenet-r/n07745940/cartoon_16.jpg +- data/imagenet-r/n07734744/misc_10.jpg +- data/imagenet-r/n01806143/sculpture_2.jpg +- data/imagenet-r/n04266014/deviantart_6.jpg +- data/imagenet-r/n01770393/graphic_3.jpg +- data/imagenet-r/n01784675/sketch_5.jpg +- data/imagenet-r/n01986214/sculpture_9.jpg +- data/imagenet-r/n01770393/painting_3.jpg +- data/imagenet-r/n03495258/sculpture_10.jpg +- data/imagenet-r/n03498962/sketch_14.jpg +- data/imagenet-r/n01644373/sketch_21.jpg +- data/imagenet-r/n07714990/cartoon_12.jpg +- data/imagenet-r/n04141076/painting_42.jpg +- data/imagenet-r/n07614500/embroidery_4.jpg +- data/imagenet-r/n03272010/deviantart_0.jpg +- data/imagenet-r/n04275548/art_0.jpg +- data/imagenet-r/n03710193/misc_17.jpg +- data/imagenet-r/n01748264/tattoo_1.jpg +- data/imagenet-r/n02110185/sculpture_1.jpg +- data/imagenet-r/n07734744/art_12.jpg +- data/imagenet-r/n01498041/toy_0.jpg +- data/imagenet-r/n02129165/embroidery_7.jpg +- data/imagenet-r/n01833805/embroidery_21.jpg +- data/imagenet-r/n01986214/cartoon_15.jpg +- data/imagenet-r/n02906734/sketch_2.jpg +- data/imagenet-r/n07742313/painting_5.jpg +- data/imagenet-r/n07734744/embroidery_6.jpg +- data/imagenet-r/n01531178/painting_49.jpg +- data/imagenet-r/n02096585/misc_85.jpg +- data/imagenet-r/n01882714/painting_29.jpg +- data/imagenet-r/n07734744/cartoon_32.jpg +- data/imagenet-r/n07697537/videogame_20.jpg +- data/imagenet-r/n01944390/tattoo_24.jpg +- data/imagenet-r/n07734744/painting_10.jpg +- data/imagenet-r/n01910747/toy_2.jpg +- data/imagenet-r/n07734744/toy_25.jpg +- data/imagenet-r/n02165456/origami_0.jpg +- data/imagenet-r/n04146614/painting_0.jpg +- data/imagenet-r/n02102318/misc_45.jpg +- data/imagenet-r/n07697313/toy_2.jpg +- data/imagenet-r/n01770393/sketch_13.jpg +- data/imagenet-r/n02007558/cartoon_0.jpg +- data/imagenet-r/n07695742/sketch_0.jpg +- data/imagenet-r/n07753275/videogame_11.jpg +- data/imagenet-r/n02391049/misc_57.jpg +- data/imagenet-r/n04146614/deviantart_1.jpg +- data/imagenet-r/n04465501/toy_0.jpg +- data/imagenet-r/n03602883/sketch_1.jpg +- data/imagenet-r/n04465501/deviantart_15.jpg +- data/imagenet-r/n07873807/toy_8.jpg +- data/imagenet-r/n02226429/sculpture_20.jpg +- data/imagenet-r/n02906734/painting_16.jpg +- data/imagenet-r/n07734744/embroidery_15.jpg +- data/imagenet-r/n02363005/art_1.jpg +- data/imagenet-r/n01494475/misc_61.jpg +- data/imagenet-r/n01614925/deviantart_33.jpg +- data/imagenet-r/n02906734/cartoon_0.jpg +- data/imagenet-r/n01644373/deviantart_25.jpg +- data/imagenet-r/n09835506/graffiti_0.jpg +- data/imagenet-r/n07753592/deviantart_15.jpg +- data/imagenet-r/n04522168/painting_11.jpg +- data/imagenet-r/n01860187/tattoo_2.jpg +- data/imagenet-r/n07753592/misc_49.jpg +- data/imagenet-r/n02363005/sculpture_5.jpg +- data/imagenet-r/n07920052/cartoon_3.jpg +- data/imagenet-r/n02099601/misc_19.jpg +- data/imagenet-r/n04522168/painting_22.jpg +- data/imagenet-r/n04389033/cartoon_5.jpg +- data/imagenet-r/n02841315/painting_4.jpg +- data/imagenet-r/n02317335/tattoo_10.jpg +- data/imagenet-r/n02110958/painting_31.jpg +- data/imagenet-r/n01531178/painting_24.jpg +- data/imagenet-r/n01748264/tattoo_10.jpg +- data/imagenet-r/n02966193/sketch_15.jpg +- data/imagenet-r/n03495258/tattoo_10.jpg +- data/imagenet-r/n02056570/sketch_5.jpg +- data/imagenet-r/n02165456/toy_24.jpg +- data/imagenet-r/n01644373/art_5.jpg +- data/imagenet-r/n02909870/cartoon_10.jpg +- data/imagenet-r/n02007558/toy_9.jpg +- data/imagenet-r/n02106550/sketch_8.jpg +- data/imagenet-r/n01843383/deviantart_86.jpg +- data/imagenet-r/n02268443/sketch_21.jpg +- data/imagenet-r/n01983481/sketch_14.jpg +- data/imagenet-r/n07614500/sticker_4.jpg +- data/imagenet-r/n02808440/painting_10.jpg +- data/imagenet-r/n07695742/sketch_2.jpg +- data/imagenet-r/n02088238/misc_51.jpg +- data/imagenet-r/n01484850/videogame_4.jpg +- data/imagenet-r/n07920052/sketch_14.jpg +- data/imagenet-r/n02843684/art_4.jpg +- data/imagenet-r/n04536866/painting_1.jpg +- data/imagenet-r/n07753275/sketch_18.jpg +- data/imagenet-r/n01843383/misc_5.jpg +- data/imagenet-r/n01910747/embroidery_1.jpg +- data/imagenet-r/n04275548/videogame_11.jpg +- data/imagenet-r/n02793495/painting_13.jpg +- data/imagenet-r/n02395406/cartoon_37.jpg +- data/imagenet-r/n01514859/videogame_0.jpg +- data/imagenet-r/n07753275/sculpture_2.jpg +- data/imagenet-r/n03930630/art_5.jpg +- data/imagenet-r/n02395406/origami_2.jpg +- data/imagenet-r/n02814860/sketch_10.jpg +- data/imagenet-r/n02007558/misc_8.jpg +- data/imagenet-r/n01484850/cartoon_9.jpg +- data/imagenet-r/n01614925/painting_5.jpg +- data/imagenet-r/n02113624/sketch_7.jpg +- data/imagenet-r/n02948072/deviantart_17.jpg +- data/imagenet-r/n02098286/misc_45.jpg +- data/imagenet-r/n02129165/painting_2.jpg +- data/imagenet-r/n09835506/misc_38.jpg +- data/imagenet-r/n02110185/sketch_15.jpg +- data/imagenet-r/n02655020/sketch_15.jpg +- data/imagenet-r/n01443537/deviantart_0.jpg +- data/imagenet-r/n02114367/misc_12.jpg +- data/imagenet-r/n04118538/sketch_17.jpg +- data/imagenet-r/n09472597/misc_1.jpg +- data/imagenet-r/n01677366/misc_15.jpg +- data/imagenet-r/n03272010/painting_8.jpg +- data/imagenet-r/n01518878/toy_4.jpg +- data/imagenet-r/n03888257/videogame_12.jpg +- data/imagenet-r/n01833805/embroidery_8.jpg +- data/imagenet-r/n01847000/toy_5.jpg +- data/imagenet-r/n01498041/misc_4.jpg +- data/imagenet-r/n09472597/graphic_9.jpg +- data/imagenet-r/n03630383/sketch_17.jpg +- data/imagenet-r/n02138441/sculpture_0.jpg +- data/imagenet-r/n02112018/sketch_10.jpg +- data/imagenet-r/n02099601/sketch_15.jpg +- data/imagenet-r/n01855672/sketch_9.jpg +- data/imagenet-r/n02088466/sketch_1.jpg +- data/imagenet-r/n01882714/sketch_22.jpg +- data/imagenet-r/n02950826/sculpture_1.jpg +- data/imagenet-r/n02481823/painting_25.jpg +- data/imagenet-r/n09472597/toy_11.jpg +- data/imagenet-r/n07742313/toy_1.jpg +- data/imagenet-r/n02128757/sculpture_2.jpg +- data/imagenet-r/n02951358/art_1.jpg +- data/imagenet-r/n02108915/misc_4.jpg +- data/imagenet-r/n07753592/misc_118.jpg +- data/imagenet-r/n02113799/sketch_3.jpg +- data/imagenet-r/n07873807/deviantart_36.jpg +- data/imagenet-r/n02356798/art_0.jpg +- data/imagenet-r/n07714990/deviantart_15.jpg +- data/imagenet-r/n02447366/sketch_3.jpg +- data/imagenet-r/n02391049/misc_39.jpg +- data/imagenet-r/n01855672/painting_4.jpg +- data/imagenet-r/n07749582/sketch_3.jpg +- data/imagenet-r/n02883205/sculpture_2.jpg +- data/imagenet-r/n01784675/origami_4.jpg +- data/imagenet-r/n02980441/embroidery_2.jpg +- data/imagenet-r/n04141076/deviantart_8.jpg +- data/imagenet-r/n02128757/painting_1.jpg +- data/imagenet-r/n03424325/misc_60.jpg +- data/imagenet-r/n01694178/graphic_2.jpg +- data/imagenet-r/n02749479/misc_1.jpg +- data/imagenet-r/n07873807/sketch_16.jpg +- data/imagenet-r/n02364673/art_11.jpg +- data/imagenet-r/n02108915/misc_114.jpg +- data/imagenet-r/n07873807/misc_6.jpg +- data/imagenet-r/n02951358/sketch_18.jpg +- data/imagenet-r/n02236044/cartoon_11.jpg +- data/imagenet-r/n02165456/sticker_6.jpg +- data/imagenet-r/n03272010/painting_10.jpg +- data/imagenet-r/n02883205/sculpture_4.jpg +- data/imagenet-r/n02112137/misc_15.jpg +- data/imagenet-r/n04487394/cartoon_24.jpg +- data/imagenet-r/n01518878/origami_10.jpg +- data/imagenet-r/n02395406/sculpture_6.jpg +- data/imagenet-r/n01855672/sculpture_3.jpg +- data/imagenet-r/n04591713/painting_3.jpg +- data/imagenet-r/n01910747/misc_12.jpg +- data/imagenet-r/n07714990/deviantart_12.jpg +- data/imagenet-r/n02113799/misc_3.jpg +- data/imagenet-r/n07714990/cartoon_38.jpg +- data/imagenet-r/n02113023/misc_19.jpg +- data/imagenet-r/n02950826/videogame_13.jpg +- data/imagenet-r/n02948072/cartoon_50.jpg +- data/imagenet-r/n01694178/art_12.jpg +- data/imagenet-r/n04146614/sketch_10.jpg +- data/imagenet-r/n01770393/painting_0.jpg +- data/imagenet-r/n04536866/cartoon_18.jpg +- data/imagenet-r/n01820546/deviantart_29.jpg +- data/imagenet-r/n01770393/tattoo_42.jpg +- data/imagenet-r/n02909870/sketch_1.jpg +- data/imagenet-r/n01614925/painting_26.jpg +- data/imagenet-r/n02447366/embroidery_7.jpg +- data/imagenet-r/n02447366/painting_5.jpg +- data/imagenet-r/n07697313/cartoon_18.jpg +- data/imagenet-r/n02356798/sketch_11.jpg +- data/imagenet-r/n02749479/sketch_12.jpg +- data/imagenet-r/n02279972/embroidery_5.jpg +- data/imagenet-r/n04347754/sketch_20.jpg +- data/imagenet-r/n01632777/cartoon_7.jpg +- data/imagenet-r/n02077923/sketch_8.jpg +- data/imagenet-r/n07880968/deviantart_3.jpg +- data/imagenet-r/n02106662/misc_83.jpg +- data/imagenet-r/n01531178/art_12.jpg +- data/imagenet-r/n02226429/toy_0.jpg +- data/imagenet-r/n12267677/misc_70.jpg +- data/imagenet-r/n02980441/sticker_0.jpg +- data/imagenet-r/n02906734/painting_4.jpg +- data/imagenet-r/n12267677/misc_95.jpg +- data/imagenet-r/n02119022/misc_91.jpg +- data/imagenet-r/n04536866/deviantart_1.jpg +- data/imagenet-r/n01843383/painting_51.jpg +- data/imagenet-r/n02226429/origami_2.jpg +- data/imagenet-r/n01514859/painting_4.jpg +- data/imagenet-r/n02236044/cartoon_10.jpg +- data/imagenet-r/n03481172/toy_16.jpg +- data/imagenet-r/n02510455/videogame_4.jpg +- data/imagenet-r/n01614925/deviantart_29.jpg +- data/imagenet-r/n02113624/misc_36.jpg +- data/imagenet-r/n02096585/misc_149.jpg +- data/imagenet-r/n02129165/tattoo_68.jpg +- data/imagenet-r/n02398521/videogame_4.jpg +- data/imagenet-r/n02110185/tattoo_13.jpg +- data/imagenet-r/n07734744/sticker_8.jpg +- data/imagenet-r/n02088238/misc_17.jpg +- data/imagenet-r/n01748264/tattoo_43.jpg +- data/imagenet-r/n02909870/sketch_3.jpg +- data/imagenet-r/n03888257/cartoon_2.jpg +- data/imagenet-r/n02097298/misc_55.jpg +- data/imagenet-r/n02114367/misc_36.jpg +- data/imagenet-r/n02279972/painting_2.jpg +- data/imagenet-r/n01484850/sculpture_0.jpg +- data/imagenet-r/n02066245/sketch_5.jpg +- data/imagenet-r/n01910747/painting_26.jpg +- data/imagenet-r/n02769748/cartoon_9.jpg +- data/imagenet-r/n03424325/sketch_13.jpg +- data/imagenet-r/n01498041/cartoon_13.jpg +- data/imagenet-r/n03372029/sketch_1.jpg +- data/imagenet-r/n02951358/sketch_22.jpg +- data/imagenet-r/n03424325/sketch_1.jpg +- data/imagenet-r/n07745940/deviantart_16.jpg +- data/imagenet-r/n07614500/toy_19.jpg +- data/imagenet-r/n02138441/graphic_0.jpg +- data/imagenet-r/n02119022/misc_71.jpg +- data/imagenet-r/n03345487/misc_3.jpg +- data/imagenet-r/n07745940/misc_8.jpg +- data/imagenet-r/n02123045/painting_46.jpg +- data/imagenet-r/n02119022/misc_90.jpg +- data/imagenet-r/n07695742/cartoon_6.jpg +- data/imagenet-r/n03773504/toy_3.jpg +- data/imagenet-r/n04266014/painting_13.jpg +- data/imagenet-r/n03775071/cartoon_16.jpg +- data/imagenet-r/n01630670/sculpture_1.jpg +- data/imagenet-r/n07734744/art_11.jpg +- data/imagenet-r/n02113023/sketch_17.jpg +- data/imagenet-r/n07745940/graphic_10.jpg +- data/imagenet-r/n01910747/deviantart_4.jpg +- data/imagenet-r/n03345487/toy_8.jpg +- data/imagenet-r/n07718472/painting_2.jpg +- data/imagenet-r/n02769748/graphic_2.jpg +- data/imagenet-r/n04465501/videogame_26.jpg +- data/imagenet-r/n02483362/sculpture_0.jpg +- data/imagenet-r/n04275548/painting_9.jpg +- data/imagenet-r/n02317335/tattoo_6.jpg +- data/imagenet-r/n01833805/painting_24.jpg +- data/imagenet-r/n01882714/painting_10.jpg +- data/imagenet-r/n02206856/toy_19.jpg +- data/imagenet-r/n07734744/toy_21.jpg +- data/imagenet-r/n01514859/cartoon_0.jpg +- data/imagenet-r/n02130308/origami_4.jpg +- data/imagenet-r/n02134084/misc_85.jpg +- data/imagenet-r/n02117135/graffiti_1.jpg +- data/imagenet-r/n07693725/sketch_19.jpg +- data/imagenet-r/n01694178/cartoon_14.jpg +- data/imagenet-r/n02099601/misc_24.jpg +- data/imagenet-r/n03930630/sketch_19.jpg +- data/imagenet-r/n02129604/tattoo_36.jpg +- data/imagenet-r/n01806143/deviantart_3.jpg +- data/imagenet-r/n02226429/painting_11.jpg +- data/imagenet-r/n02808440/misc_0.jpg +- data/imagenet-r/n01820546/art_1.jpg +- data/imagenet-r/n04266014/sketch_15.jpg +- data/imagenet-r/n03630383/cartoon_35.jpg +- data/imagenet-r/n02088238/misc_99.jpg +- data/imagenet-r/n03773504/art_1.jpg +- data/imagenet-r/n03775071/embroidery_3.jpg +- data/imagenet-r/n01770393/art_4.jpg +- data/imagenet-r/n01484850/painting_12.jpg +- data/imagenet-r/n01882714/toy_29.jpg +- data/imagenet-r/n02843684/cartoon_14.jpg +- data/imagenet-r/n03467068/sketch_18.jpg +- data/imagenet-r/n04310018/misc_7.jpg +- data/imagenet-r/n02279972/art_1.jpg +- data/imagenet-r/n01910747/tattoo_69.jpg +- data/imagenet-r/n02268443/misc_164.jpg +- data/imagenet-r/n01632777/cartoon_24.jpg +- data/imagenet-r/n02423022/sketch_1.jpg +- data/imagenet-r/n09835506/misc_6.jpg +- data/imagenet-r/n02117135/videogame_5.jpg +- data/imagenet-r/n07714571/misc_2.jpg +- data/imagenet-r/n02951358/sticker_0.jpg +- data/imagenet-r/n07880968/deviantart_13.jpg +- data/imagenet-r/n02906734/sketch_6.jpg +- data/imagenet-r/n02165456/misc_8.jpg +- data/imagenet-r/n02395406/cartoon_6.jpg +- data/imagenet-r/n03494278/painting_4.jpg +- data/imagenet-r/n02096585/misc_199.jpg +- data/imagenet-r/n02363005/graffiti_6.jpg +- data/imagenet-r/n01910747/tattoo_44.jpg +- data/imagenet-r/n02110958/cartoon_27.jpg +- data/imagenet-r/n03947888/graffiti_2.jpg +- data/imagenet-r/n01983481/misc_40.jpg +- data/imagenet-r/n02317335/cartoon_0.jpg +- data/imagenet-r/n02510455/misc_19.jpg +- data/imagenet-r/n02317335/origami_1.jpg +- data/imagenet-r/n01806143/graffiti_5.jpg +- data/imagenet-r/n07753275/graphic_3.jpg +- data/imagenet-r/n02088466/misc_23.jpg +- data/imagenet-r/n03930630/painting_13.jpg +- data/imagenet-r/n04409515/deviantart_8.jpg +- data/imagenet-r/n04465501/deviantart_5.jpg +- data/imagenet-r/n01882714/cartoon_13.jpg +- data/imagenet-r/n02086240/sketch_2.jpg +- data/imagenet-r/n03602883/misc_41.jpg +- data/imagenet-r/n02071294/sketch_20.jpg +- data/imagenet-r/n01882714/toy_32.jpg +- data/imagenet-r/n02672831/painting_6.jpg +- data/imagenet-r/n02391049/misc_30.jpg +- data/imagenet-r/n09472597/cartoon_2.jpg +- data/imagenet-r/n07697313/art_42.jpg +- data/imagenet-r/n07745940/graphic_6.jpg +- data/imagenet-r/n07742313/art_2.jpg +- data/imagenet-r/n03424325/videogame_5.jpg +- data/imagenet-r/n01632777/cartoon_28.jpg +- data/imagenet-r/n01986214/cartoon_4.jpg +- data/imagenet-r/n10565667/sketch_0.jpg +- data/imagenet-r/n02980441/videogame_26.jpg +- data/imagenet-r/n02219486/sculpture_11.jpg +- data/imagenet-r/n03424325/deviantart_4.jpg +- data/imagenet-r/n02802426/tattoo_14.jpg +- data/imagenet-r/n02510455/misc_53.jpg +- data/imagenet-r/n01910747/tattoo_24.jpg +- data/imagenet-r/n02094433/sketch_1.jpg +- data/imagenet-r/n07720875/art_2.jpg +- data/imagenet-r/n02841315/cartoon_32.jpg +- data/imagenet-r/n02123045/painting_21.jpg +- data/imagenet-r/n02445715/art_3.jpg +- data/imagenet-r/n04552348/sketch_13.jpg +- data/imagenet-r/n03594945/graffiti_7.jpg +- data/imagenet-r/n01855672/misc_4.jpg +- data/imagenet-r/n07753592/misc_97.jpg +- data/imagenet-r/n02088238/misc_110.jpg +- data/imagenet-r/n04275548/painting_0.jpg +- data/imagenet-r/n07734744/cartoon_25.jpg +- data/imagenet-r/n02134084/misc_132.jpg +- data/imagenet-r/n02410509/cartoon_7.jpg +- data/imagenet-r/n04536866/deviantart_5.jpg +- data/imagenet-r/n03372029/cartoon_5.jpg +- data/imagenet-r/n01484850/tattoo_23.jpg +- data/imagenet-r/n03124170/cartoon_42.jpg +- data/imagenet-r/n02802426/sculpture_2.jpg +- data/imagenet-r/n01910747/tattoo_30.jpg +- data/imagenet-r/n02071294/deviantart_23.jpg +- data/imagenet-r/n03947888/tattoo_8.jpg +- data/imagenet-r/n02802426/graphic_2.jpg +- data/imagenet-r/n07753592/misc_104.jpg +- data/imagenet-r/n02138441/sketch_3.jpg +- data/imagenet-r/n04266014/sketch_13.jpg +- data/imagenet-r/n02346627/misc_3.jpg +- data/imagenet-r/n01774750/tattoo_22.jpg +- data/imagenet-r/n01531178/art_14.jpg +- data/imagenet-r/n01614925/sculpture_4.jpg +- data/imagenet-r/n02098286/misc_0.jpg +- data/imagenet-r/n01514859/sketch_5.jpg +- data/imagenet-r/n07695742/deviantart_10.jpg +- data/imagenet-r/n01774750/origami_21.jpg +- data/imagenet-r/n07734744/sticker_6.jpg +- data/imagenet-r/n02233338/misc_28.jpg +- data/imagenet-r/n02088238/misc_18.jpg +- data/imagenet-r/n02066245/sketch_18.jpg +- data/imagenet-r/n01820546/painting_27.jpg +- data/imagenet-r/n02317335/art_3.jpg +- data/imagenet-r/n07697537/misc_106.jpg +- data/imagenet-r/n03467068/painting_2.jpg +- data/imagenet-r/n03495258/sketch_7.jpg +- data/imagenet-r/n03345487/graphic_2.jpg +- data/imagenet-r/n07614500/misc_9.jpg +- data/imagenet-r/n01843383/painting_30.jpg +- data/imagenet-r/n01484850/tattoo_16.jpg +- data/imagenet-r/n01806143/toy_0.jpg +- data/imagenet-r/n02112018/misc_60.jpg +- data/imagenet-r/n01910747/deviantart_11.jpg +- data/imagenet-r/n03124170/painting_6.jpg +- data/imagenet-r/n01443537/sketch_11.jpg +- data/imagenet-r/n01534433/painting_2.jpg +- data/imagenet-r/n07734744/sketch_13.jpg +- data/imagenet-r/n02007558/painting_7.jpg +- data/imagenet-r/n02236044/cartoon_20.jpg +- data/imagenet-r/n02802426/sticker_7.jpg +- data/imagenet-r/n02391049/misc_50.jpg +- data/imagenet-r/n07745940/graffiti_36.jpg +- data/imagenet-r/n02909870/art_0.jpg +- data/imagenet-r/n03124170/painting_36.jpg +- data/imagenet-r/n02607072/misc_94.jpg +- data/imagenet-r/n01614925/deviantart_37.jpg +- data/imagenet-r/n02091134/misc_47.jpg +- data/imagenet-r/n02123045/cartoon_23.jpg +- data/imagenet-r/n02951358/sculpture_3.jpg +- data/imagenet-r/n07718472/sketch_23.jpg +- data/imagenet-r/n02091032/sketch_11.jpg +- data/imagenet-r/n02410509/sculpture_33.jpg +- data/imagenet-r/n02051845/sketch_15.jpg +- data/imagenet-r/n02909870/sculpture_4.jpg +- data/imagenet-r/n07614500/deviantart_8.jpg +- data/imagenet-r/n02391049/misc_17.jpg +- data/imagenet-r/n03773504/cartoon_5.jpg +- data/imagenet-r/n01774750/cartoon_1.jpg +- data/imagenet-r/n01443537/graffiti_19.jpg +- data/imagenet-r/n02091032/misc_27.jpg +- data/imagenet-r/n02948072/misc_2.jpg +- data/imagenet-r/n01484850/sketch_12.jpg +- data/imagenet-r/n02346627/sculpture_2.jpg +- data/imagenet-r/n02129165/tattoo_48.jpg +- data/imagenet-r/n02607072/misc_103.jpg +- data/imagenet-r/n02279972/painting_13.jpg +- data/imagenet-r/n03272010/deviantart_12.jpg +- data/imagenet-r/n02480855/toy_9.jpg +- data/imagenet-r/n04133789/cartoon_23.jpg +- data/imagenet-r/n02051845/painting_6.jpg +- data/imagenet-r/n02128757/art_0.jpg +- data/imagenet-r/n02391049/deviantart_8.jpg +- data/imagenet-r/n02356798/origami_0.jpg +- data/imagenet-r/n02749479/misc_16.jpg +- data/imagenet-r/n01484850/tattoo_12.jpg +- data/imagenet-r/n09472597/art_12.jpg +- data/imagenet-r/n03495258/graphic_1.jpg +- data/imagenet-r/n01833805/graphic_2.jpg +- data/imagenet-r/n03124170/graffiti_13.jpg +- data/imagenet-r/n12267677/deviantart_8.jpg +- data/imagenet-r/n04086273/tattoo_26.jpg +- data/imagenet-r/n03930630/sketch_12.jpg +- data/imagenet-r/n02134084/misc_126.jpg +- data/imagenet-r/n02096585/misc_44.jpg +- data/imagenet-r/n02279972/sculpture_0.jpg +- data/imagenet-r/n07697313/art_41.jpg +- data/imagenet-r/n02948072/embroidery_15.jpg +- data/imagenet-r/n02128757/sketch_21.jpg +- data/imagenet-r/n02480495/art_0.jpg +- data/imagenet-r/n02948072/misc_3.jpg +- data/imagenet-r/n02814860/misc_1.jpg +- data/imagenet-r/n03773504/videogame_13.jpg +- data/imagenet-r/n02447366/misc_3.jpg +- data/imagenet-r/n07720875/deviantart_2.jpg +- data/imagenet-r/n12267677/misc_41.jpg +- data/imagenet-r/n02134084/deviantart_4.jpg +- data/imagenet-r/n03773504/videogame_19.jpg +- data/imagenet-r/n01531178/misc_0.jpg +- data/imagenet-r/n02110958/graphic_0.jpg +- data/imagenet-r/n02769748/cartoon_6.jpg +- data/imagenet-r/n07753275/embroidery_12.jpg +- data/imagenet-r/n02607072/misc_101.jpg +- data/imagenet-r/n01986214/deviantart_3.jpg +- data/imagenet-r/n04310018/sketch_4.jpg +- data/imagenet-r/n01910747/graphic_10.jpg +- data/imagenet-r/n03649909/toy_5.jpg +- data/imagenet-r/n04310018/sketch_17.jpg +- data/imagenet-r/n02190166/origami_2.jpg +- data/imagenet-r/n07749582/deviantart_17.jpg +- data/imagenet-r/n02106662/misc_89.jpg +- data/imagenet-r/n03888257/sketch_2.jpg +- data/imagenet-r/n01855672/sketch_6.jpg +- data/imagenet-r/n02128757/sketch_7.jpg +- data/imagenet-r/n01514859/sketch_15.jpg +- data/imagenet-r/n02395406/toy_24.jpg +- data/imagenet-r/n01882714/art_7.jpg +- data/imagenet-r/n02007558/tattoo_52.jpg +- data/imagenet-r/n09472597/videogame_16.jpg +- data/imagenet-r/n07697313/sculpture_12.jpg +- data/imagenet-r/n04325704/deviantart_5.jpg +- data/imagenet-r/n02814860/cartoon_3.jpg +- data/imagenet-r/n02481823/deviantart_22.jpg +- data/imagenet-r/n02909870/sketch_16.jpg +- data/imagenet-r/n02130308/sketch_15.jpg +- data/imagenet-r/n02112137/sketch_20.jpg +- data/imagenet-r/n07697313/painting_22.jpg +- data/imagenet-r/n03124170/cartoon_36.jpg +- data/imagenet-r/n02106550/misc_39.jpg +- data/imagenet-r/n09835506/deviantart_16.jpg +- data/imagenet-r/n07714990/painting_4.jpg +- data/imagenet-r/n02099712/misc_43.jpg +- data/imagenet-r/n02480855/art_2.jpg +- data/imagenet-r/n01833805/painting_15.jpg +- data/imagenet-r/n07718472/graphic_0.jpg +- data/imagenet-r/n01833805/cartoon_7.jpg +- data/imagenet-r/n03930630/misc_20.jpg +- data/imagenet-r/n01806143/embroidery_1.jpg +- data/imagenet-r/n01514859/embroidery_15.jpg +- data/imagenet-r/n01616318/tattoo_3.jpg +- data/imagenet-r/n02108915/tattoo_5.jpg +- data/imagenet-r/n02106166/painting_3.jpg +- data/imagenet-r/n03345487/videogame_8.jpg +- data/imagenet-r/n01614925/videogame_0.jpg +- data/imagenet-r/n02437616/videogame_2.jpg +- data/imagenet-r/n04552348/art_17.jpg +- data/imagenet-r/n01944390/misc_47.jpg +- data/imagenet-r/n03602883/misc_20.jpg +- data/imagenet-r/n01910747/graphic_5.jpg +- data/imagenet-r/n02948072/cartoon_45.jpg +- data/imagenet-r/n02088094/misc_38.jpg +- data/imagenet-r/n02236044/painting_13.jpg +- data/imagenet-r/n02051845/sketch_0.jpg +- data/imagenet-r/n02206856/videogame_0.jpg +- data/imagenet-r/n03630383/toy_7.jpg +- data/imagenet-r/n04325704/cartoon_32.jpg +- data/imagenet-r/n01833805/embroidery_24.jpg +- data/imagenet-r/n02102318/painting_1.jpg +- data/imagenet-r/n02486410/tattoo_8.jpg +- data/imagenet-r/n02130308/cartoon_2.jpg +- data/imagenet-r/n02364673/cartoon_18.jpg +- data/imagenet-r/n02110958/embroidery_14.jpg +- data/imagenet-r/n03481172/sketch_10.jpg +- data/imagenet-r/n02007558/deviantart_9.jpg +- data/imagenet-r/n09472597/painting_1.jpg +- data/imagenet-r/n04522168/graffiti_1.jpg +- data/imagenet-r/n03498962/art_1.jpg +- data/imagenet-r/n03124170/sketch_13.jpg +- data/imagenet-r/n02843684/embroidery_1.jpg +- data/imagenet-r/n02009912/sketch_19.jpg +- data/imagenet-r/n01843383/painting_20.jpg +- data/imagenet-r/n07714571/painting_22.jpg +- data/imagenet-r/n02268443/misc_196.jpg +- data/imagenet-r/n01983481/misc_39.jpg +- data/imagenet-r/n07734744/sticker_7.jpg +- data/imagenet-r/n07714990/cartoon_4.jpg +- data/imagenet-r/n01944390/misc_118.jpg +- data/imagenet-r/n02410509/embroidery_3.jpg +- data/imagenet-r/n02909870/cartoon_7.jpg +- data/imagenet-r/n03481172/painting_0.jpg +- data/imagenet-r/n02106550/misc_66.jpg +- data/imagenet-r/n01882714/toy_15.jpg +- data/imagenet-r/n02128757/toy_7.jpg +- data/imagenet-r/n02110958/tattoo_13.jpg +- data/imagenet-r/n02088238/sketch_21.jpg +- data/imagenet-r/n07749582/deviantart_19.jpg +- data/imagenet-r/n03372029/sculpture_3.jpg +- data/imagenet-r/n01443537/origami_6.jpg +- data/imagenet-r/n02165456/tattoo_65.jpg +- data/imagenet-r/n01632777/art_5.jpg +- data/imagenet-r/n04465501/sketch_15.jpg +- data/imagenet-r/n07614500/graphic_9.jpg +- data/imagenet-r/n02190166/sticker_2.jpg +- data/imagenet-r/n02749479/sketch_3.jpg +- data/imagenet-r/n02398521/art_17.jpg +- data/imagenet-r/n04552348/sticker_7.jpg +- data/imagenet-r/n02119022/misc_10.jpg +- data/imagenet-r/n01855672/deviantart_7.jpg +- data/imagenet-r/n02672831/sculpture_9.jpg +- data/imagenet-r/n01770393/sketch_17.jpg +- data/imagenet-r/n07734744/art_21.jpg +- data/imagenet-r/n02793495/toy_0.jpg +- data/imagenet-r/n02071294/deviantart_26.jpg +- data/imagenet-r/n02110185/cartoon_16.jpg +- data/imagenet-r/n03494278/graphic_1.jpg +- data/imagenet-r/n02106662/sketch_19.jpg +- data/imagenet-r/n01518878/sculpture_3.jpg +- data/imagenet-r/n03594945/sculpture_3.jpg +- data/imagenet-r/n02091134/misc_70.jpg +- data/imagenet-r/n02108915/misc_113.jpg +- data/imagenet-r/n03345487/videogame_11.jpg +- data/imagenet-r/n01632777/videogame_8.jpg +- data/imagenet-r/n02395406/cartoon_8.jpg +- data/imagenet-r/n01514859/painting_3.jpg +- data/imagenet-r/n02364673/sketch_10.jpg +- data/imagenet-r/n02841315/sketch_3.jpg +- data/imagenet-r/n07745940/graffiti_1.jpg +- data/imagenet-r/n07693725/cartoon_0.jpg +- data/imagenet-r/n07742313/painting_1.jpg +- data/imagenet-r/n03467068/toy_0.jpg +- data/imagenet-r/n01514859/cartoon_1.jpg +- data/imagenet-r/n02206856/misc_7.jpg +- data/imagenet-r/n03345487/toy_6.jpg +- data/imagenet-r/n01986214/misc_5.jpg +- data/imagenet-r/n03452741/painting_7.jpg +- data/imagenet-r/n07714990/sketch_19.jpg +- data/imagenet-r/n02363005/origami_3.jpg +- data/imagenet-r/n02056570/sketch_23.jpg +- data/imagenet-r/n04275548/painting_13.jpg +- data/imagenet-r/n07745940/embroidery_20.jpg +- data/imagenet-r/n07880968/deviantart_1.jpg +- data/imagenet-r/n09835506/sketch_13.jpg +- data/imagenet-r/n02279972/painting_24.jpg +- data/imagenet-r/n02128757/sketch_20.jpg +- data/imagenet-r/n02793495/painting_19.jpg +- data/imagenet-r/n04133789/art_1.jpg +- data/imagenet-r/n04552348/art_4.jpg +- data/imagenet-r/n07714990/cartoon_8.jpg +- data/imagenet-r/n02526121/painting_5.jpg +- data/imagenet-r/n01910747/painting_28.jpg +- data/imagenet-r/n02607072/sketch_1.jpg +- data/imagenet-r/n02071294/deviantart_44.jpg +- data/imagenet-r/n02102318/sketch_21.jpg +- data/imagenet-r/n03467068/sticker_0.jpg +- data/imagenet-r/n02906734/painting_15.jpg +- data/imagenet-r/n02077923/misc_18.jpg +- data/imagenet-r/n02088094/sketch_23.jpg +- data/imagenet-r/n02951358/painting_13.jpg +- data/imagenet-r/n02219486/graphic_0.jpg +- data/imagenet-r/n01882714/misc_4.jpg +- data/imagenet-r/n02481823/art_0.jpg +- data/imagenet-r/n07873807/sketch_14.jpg +- data/imagenet-r/n01484850/tattoo_21.jpg +- data/imagenet-r/n02966193/cartoon_6.jpg +- data/imagenet-r/n07693725/cartoon_16.jpg +- data/imagenet-r/n02106550/misc_59.jpg +- data/imagenet-r/n01855672/painting_10.jpg +- data/imagenet-r/n04275548/toy_1.jpg +- data/imagenet-r/n02480495/cartoon_10.jpg +- data/imagenet-r/n02445715/painting_6.jpg +- data/imagenet-r/n02119022/sketch_17.jpg +- data/imagenet-r/n02480855/tattoo_26.jpg +- data/imagenet-r/n02096585/tattoo_26.jpg +- data/imagenet-r/n04266014/toy_34.jpg +- data/imagenet-r/n02268443/misc_77.jpg +- data/imagenet-r/n02119022/sketch_12.jpg +- data/imagenet-r/n01847000/sketch_6.jpg +- data/imagenet-r/n02951358/sculpture_0.jpg +- data/imagenet-r/n04389033/toy_0.jpg +- data/imagenet-r/n07697537/misc_5.jpg +- data/imagenet-r/n03372029/graphic_0.jpg +- data/imagenet-r/n02843684/cartoon_13.jpg +- data/imagenet-r/n02980441/cartoon_7.jpg +- data/imagenet-r/n02134084/deviantart_9.jpg +- data/imagenet-r/n03481172/sketch_2.jpg +- data/imagenet-r/n04522168/deviantart_7.jpg +- data/imagenet-r/n02056570/sketch_16.jpg +- data/imagenet-r/n01616318/tattoo_21.jpg +- data/imagenet-r/n02236044/art_10.jpg +- data/imagenet-r/n02007558/misc_15.jpg +- data/imagenet-r/n01770393/origami_1.jpg +- data/imagenet-r/n01882714/tattoo_7.jpg +- data/imagenet-r/n01644373/sketch_13.jpg +- data/imagenet-r/n01847000/toy_21.jpg +- data/imagenet-r/n02701002/videogame_10.jpg +- data/imagenet-r/n03594945/videogame_16.jpg +- data/imagenet-r/n04591713/cartoon_0.jpg +- data/imagenet-r/n02268443/misc_21.jpg +- data/imagenet-r/n02119022/tattoo_3.jpg +- data/imagenet-r/n04118538/cartoon_20.jpg +- data/imagenet-r/n09472597/cartoon_6.jpg +- data/imagenet-r/n02808440/sketch_7.jpg +- data/imagenet-r/n01494475/sketch_17.jpg +- data/imagenet-r/n02106166/misc_6.jpg +- data/imagenet-r/n01882714/painting_25.jpg +- data/imagenet-r/n01443537/painting_0.jpg +- data/imagenet-r/n01847000/sketch_8.jpg +- data/imagenet-r/n02363005/cartoon_38.jpg +- data/imagenet-r/n03947888/embroidery_0.jpg +- data/imagenet-r/n02007558/sketch_18.jpg +- data/imagenet-r/n02883205/graphic_0.jpg +- data/imagenet-r/n01843383/painting_12.jpg +- data/imagenet-r/n02165456/sculpture_10.jpg +- data/imagenet-r/n01748264/tattoo_12.jpg +- data/imagenet-r/n02841315/sketch_12.jpg +- data/imagenet-r/n07697313/deviantart_29.jpg +- data/imagenet-r/n02486410/graphic_0.jpg +- data/imagenet-r/n02129604/deviantart_22.jpg +- data/imagenet-r/n02128757/art_4.jpg +- data/imagenet-r/n02097298/misc_39.jpg +- data/imagenet-r/n04465501/cartoon_12.jpg +- data/imagenet-r/n01820546/painting_2.jpg +- data/imagenet-r/n01644373/cartoon_17.jpg +- data/imagenet-r/n02823750/misc_1.jpg +- data/imagenet-r/n04325704/painting_1.jpg +- data/imagenet-r/n02395406/embroidery_5.jpg +- data/imagenet-r/n01847000/sketch_21.jpg +- data/imagenet-r/n02841315/cartoon_35.jpg +- data/imagenet-r/n04141076/origami_3.jpg +- data/imagenet-r/n01534433/embroidery_0.jpg +- data/imagenet-r/n02123045/painting_64.jpg +- data/imagenet-r/n02102318/painting_11.jpg +- data/imagenet-r/n01882714/painting_22.jpg +- data/imagenet-r/n02992529/deviantart_0.jpg +- data/imagenet-r/n07873807/videogame_8.jpg +- data/imagenet-r/n02119022/misc_108.jpg +- data/imagenet-r/n02950826/sticker_0.jpg +- data/imagenet-r/n04146614/graffiti_1.jpg +- data/imagenet-r/n07714571/cartoon_6.jpg +- data/imagenet-r/n01986214/toy_1.jpg +- data/imagenet-r/n02510455/videogame_3.jpg +- data/imagenet-r/n02268443/misc_165.jpg +- data/imagenet-r/n02317335/embroidery_11.jpg +- data/imagenet-r/n09835506/misc_11.jpg +- data/imagenet-r/n07745940/cartoon_5.jpg +- data/imagenet-r/n01820546/graphic_0.jpg +- data/imagenet-r/n01784675/deviantart_0.jpg +- data/imagenet-r/n02206856/misc_8.jpg +- data/imagenet-r/n01677366/misc_6.jpg +- data/imagenet-r/n02206856/sketch_13.jpg +- data/imagenet-r/n04275548/cartoon_5.jpg +- data/imagenet-r/n01614925/deviantart_20.jpg +- data/imagenet-r/n04254680/deviantart_1.jpg +- data/imagenet-r/n02909870/painting_13.jpg +- data/imagenet-r/n07734744/toy_17.jpg +- data/imagenet-r/n07697313/graphic_8.jpg +- data/imagenet-r/n09472597/sketch_4.jpg +- data/imagenet-r/n02106662/misc_49.jpg +- data/imagenet-r/n07695742/cartoon_20.jpg +- data/imagenet-r/n07749582/painting_42.jpg +- data/imagenet-r/n01644373/art_0.jpg +- data/imagenet-r/n02110185/cartoon_7.jpg +- data/imagenet-r/n02655020/videogame_27.jpg +- data/imagenet-r/n10565667/videogame_14.jpg +- data/imagenet-r/n02134084/misc_33.jpg +- data/imagenet-r/n07720875/deviantart_9.jpg +- data/imagenet-r/n02447366/art_2.jpg +- data/imagenet-r/n02481823/art_18.jpg +- data/imagenet-r/n02112137/sketch_16.jpg +- data/imagenet-r/n01443537/art_6.jpg +- data/imagenet-r/n01860187/toy_0.jpg +- data/imagenet-r/n04310018/videogame_31.jpg +- data/imagenet-r/n02110958/painting_38.jpg +- data/imagenet-r/n02110958/cartoon_78.jpg +- data/imagenet-r/n07920052/graphic_3.jpg +- data/imagenet-r/n02165456/sculpture_6.jpg +- data/imagenet-r/n04147183/deviantart_11.jpg +- data/imagenet-r/n07734744/videogame_45.jpg +- data/imagenet-r/n07697313/painting_11.jpg +- data/imagenet-r/n02363005/sketch_3.jpg +- data/imagenet-r/n04552348/videogame_3.jpg +- data/imagenet-r/n01770393/art_3.jpg +- data/imagenet-r/n03481172/origami_0.jpg +- data/imagenet-r/n01855672/cartoon_5.jpg +- data/imagenet-r/n02317335/sketch_4.jpg +- data/imagenet-r/n02110185/graphic_2.jpg +- data/imagenet-r/n02883205/sticker_3.jpg +- data/imagenet-r/n01770393/sketch_5.jpg +- data/imagenet-r/n01534433/painting_9.jpg +- data/imagenet-r/n03773504/cartoon_9.jpg +- data/imagenet-r/n03594945/art_0.jpg +- data/imagenet-r/n02364673/cartoon_22.jpg +- data/imagenet-r/n02445715/graphic_1.jpg +- data/imagenet-r/n02106166/cartoon_1.jpg +- data/imagenet-r/n02398521/graphic_0.jpg +- data/imagenet-r/n02096585/misc_162.jpg +- data/imagenet-r/n01820546/deviantart_26.jpg +- data/imagenet-r/n01847000/graphic_1.jpg +- data/imagenet-r/n07718472/graffiti_1.jpg +- data/imagenet-r/n02279972/origami_0.jpg +- data/imagenet-r/n01484850/sculpture_3.jpg +- data/imagenet-r/n01694178/tattoo_24.jpg +- data/imagenet-r/n02091134/misc_28.jpg +- data/imagenet-r/n02395406/painting_13.jpg +- data/imagenet-r/n04409515/sculpture_0.jpg +- data/imagenet-r/n02423022/misc_0.jpg +- data/imagenet-r/n01910747/tattoo_34.jpg +- data/imagenet-r/n02206856/graphic_10.jpg +- data/imagenet-r/n02051845/painting_20.jpg +- data/imagenet-r/n02410509/sculpture_34.jpg +- data/imagenet-r/n01833805/painting_27.jpg +- data/imagenet-r/n01847000/tattoo_28.jpg +- data/imagenet-r/n02099601/sketch_13.jpg +- data/imagenet-r/n02108915/misc_62.jpg +- data/imagenet-r/n02108915/misc_79.jpg +- data/imagenet-r/n02086240/sketch_7.jpg +- data/imagenet-r/n02129165/deviantart_25.jpg +- data/imagenet-r/n02364673/cartoon_12.jpg +- data/imagenet-r/n04254680/art_3.jpg +- data/imagenet-r/n02106550/misc_26.jpg +- data/imagenet-r/n07768694/sketch_8.jpg +- data/imagenet-r/n02088094/misc_37.jpg +- data/imagenet-r/n02110958/painting_54.jpg +- data/imagenet-r/n03372029/art_7.jpg +- data/imagenet-r/n02106662/misc_52.jpg +- data/imagenet-r/n02481823/cartoon_7.jpg +- data/imagenet-r/n01855672/toy_0.jpg +- data/imagenet-r/n07695742/videogame_5.jpg +- data/imagenet-r/n09472597/origami_1.jpg +- data/imagenet-r/n03773504/art_2.jpg +- data/imagenet-r/n07718472/painting_13.jpg +- data/imagenet-r/n01677366/deviantart_8.jpg +- data/imagenet-r/n01910747/toy_3.jpg +- data/imagenet-r/n07697537/misc_12.jpg +- data/imagenet-r/n02129165/graphic_2.jpg +- data/imagenet-r/n09472597/graffiti_0.jpg +- data/imagenet-r/n01518878/toy_11.jpg +- data/imagenet-r/n02363005/graphic_8.jpg +- data/imagenet-r/n02992529/sticker_3.jpg +- data/imagenet-r/n02447366/art_0.jpg +- data/imagenet-r/n04118538/cartoon_25.jpg +- data/imagenet-r/n02445715/cartoon_9.jpg +- data/imagenet-r/n02395406/art_2.jpg +- data/imagenet-r/n02098286/misc_8.jpg +- data/imagenet-r/n02085620/sketch_13.jpg +- data/imagenet-r/n02102318/sketch_10.jpg +- data/imagenet-r/n02364673/art_2.jpg +- data/imagenet-r/n02009912/sketch_18.jpg +- data/imagenet-r/n04310018/painting_30.jpg +- data/imagenet-r/n02206856/toy_23.jpg +- data/imagenet-r/n02110185/painting_33.jpg +- data/imagenet-r/n04465501/sketch_6.jpg +- data/imagenet-r/n09835506/videogame_7.jpg +- data/imagenet-r/n02268443/misc_58.jpg +- data/imagenet-r/n02510455/misc_80.jpg +- data/imagenet-r/n04266014/deviantart_3.jpg +- data/imagenet-r/n02114367/misc_8.jpg +- data/imagenet-r/n03124170/cartoon_23.jpg +- data/imagenet-r/n02481823/art_15.jpg +- data/imagenet-r/n02106662/misc_43.jpg +- data/imagenet-r/n04465501/cartoon_7.jpg +- data/imagenet-r/n04254680/graphic_4.jpg +- data/imagenet-r/n03345487/cartoon_0.jpg +- data/imagenet-r/n02007558/embroidery_15.jpg +- data/imagenet-r/n07693725/painting_3.jpg +- data/imagenet-r/n02939185/sketch_19.jpg +- data/imagenet-r/n02909870/sketch_6.jpg +- data/imagenet-r/n02346627/sketch_11.jpg +- data/imagenet-r/n01514859/cartoon_25.jpg +- data/imagenet-r/n02071294/origami_5.jpg +- data/imagenet-r/n03124170/toy_5.jpg +- data/imagenet-r/n03124170/toy_2.jpg +- data/imagenet-r/n03495258/painting_5.jpg +- data/imagenet-r/n01644373/toy_1.jpg +- data/imagenet-r/n03602883/misc_36.jpg +- data/imagenet-r/n02992529/cartoon_5.jpg +- data/imagenet-r/n07742313/videogame_14.jpg +- data/imagenet-r/n04522168/videogame_6.jpg +- data/imagenet-r/n03594945/toy_7.jpg +- data/imagenet-r/n02510455/deviantart_6.jpg +- data/imagenet-r/n02106662/misc_13.jpg +- data/imagenet-r/n03930630/toy_3.jpg +- data/imagenet-r/n04347754/videogame_30.jpg +- data/imagenet-r/n03947888/misc_4.jpg +- data/imagenet-r/n02808440/sketch_4.jpg +- data/imagenet-r/n09835506/videogame_16.jpg +- data/imagenet-r/n07745940/cartoon_9.jpg +- data/imagenet-r/n02096585/misc_31.jpg +- data/imagenet-r/n07614500/misc_2.jpg +- data/imagenet-r/n02114367/misc_62.jpg +- data/imagenet-r/n02268443/misc_74.jpg +- data/imagenet-r/n02410509/misc_7.jpg +- data/imagenet-r/n03495258/sketch_4.jpg +- data/imagenet-r/n02317335/misc_8.jpg +- data/imagenet-r/n02395406/origami_5.jpg +- data/imagenet-r/n07614500/painting_16.jpg +- data/imagenet-r/n02098286/sketch_16.jpg +- data/imagenet-r/n01531178/painting_51.jpg +- data/imagenet-r/n04552348/art_2.jpg +- data/imagenet-r/n02096585/misc_79.jpg +- data/imagenet-r/n02206856/toy_21.jpg +- data/imagenet-r/n02129165/origami_5.jpg +- data/imagenet-r/n01774750/tattoo_0.jpg +- data/imagenet-r/n02939185/sketch_7.jpg +- data/imagenet-r/n04487394/painting_1.jpg +- data/imagenet-r/n02346627/painting_0.jpg +- data/imagenet-r/n02085620/sketch_14.jpg +- data/imagenet-r/n03372029/sculpture_15.jpg +- data/imagenet-r/n01443537/embroidery_8.jpg +- data/imagenet-r/n04465501/sketch_17.jpg +- data/imagenet-r/n02206856/embroidery_25.jpg +- data/imagenet-r/n03947888/tattoo_13.jpg +- data/imagenet-r/n01443537/graphic_2.jpg +- data/imagenet-r/n07734744/painting_21.jpg +- data/imagenet-r/n02841315/toy_2.jpg +- data/imagenet-r/n04536866/graphic_0.jpg +- data/imagenet-r/n02447366/embroidery_3.jpg +- data/imagenet-r/n02423022/painting_5.jpg +- data/imagenet-r/n02808440/painting_9.jpg +- data/imagenet-r/n01616318/sketch_15.jpg +- data/imagenet-r/n04192698/sculpture_2.jpg +- data/imagenet-r/n02096585/misc_165.jpg +- data/imagenet-r/n02236044/origami_8.jpg +- data/imagenet-r/n02130308/origami_3.jpg +- data/imagenet-r/n03602883/sketch_8.jpg +- data/imagenet-r/n07753275/art_5.jpg +- data/imagenet-r/n02129604/deviantart_15.jpg +- data/imagenet-r/n10565667/art_12.jpg +- data/imagenet-r/n02655020/deviantart_16.jpg +- data/imagenet-r/n07734744/cartoon_1.jpg +- data/imagenet-r/n02110341/misc_133.jpg +- data/imagenet-r/n01843383/sketch_10.jpg +- data/imagenet-r/n02088238/misc_103.jpg +- data/imagenet-r/n02129165/toy_12.jpg +- data/imagenet-r/n01806143/embroidery_11.jpg +- data/imagenet-r/n02481823/art_19.jpg +- data/imagenet-r/n02007558/graffiti_10.jpg +- data/imagenet-r/n02346627/painting_15.jpg +- data/imagenet-r/n01531178/sketch_6.jpg +- data/imagenet-r/n04591713/sketch_14.jpg +- data/imagenet-r/n02607072/misc_0.jpg +- data/imagenet-r/n04522168/painting_25.jpg +- data/imagenet-r/n07749582/painting_0.jpg +- data/imagenet-r/n03424325/videogame_10.jpg +- data/imagenet-r/n07742313/deviantart_13.jpg +- data/imagenet-r/n01644373/tattoo_9.jpg +- data/imagenet-r/n01494475/misc_74.jpg +- data/imagenet-r/n02117135/cartoon_3.jpg +- data/imagenet-r/n02206856/cartoon_14.jpg +- data/imagenet-r/n07697313/misc_2.jpg +- data/imagenet-r/n02096585/misc_192.jpg +- data/imagenet-r/n07714571/sketch_18.jpg +- data/imagenet-r/n09472597/sketch_22.jpg +- data/imagenet-r/n07920052/sketch_15.jpg +- data/imagenet-r/n04325704/cartoon_15.jpg +- data/imagenet-r/n09835506/sketch_4.jpg +- data/imagenet-r/n02948072/painting_14.jpg +- data/imagenet-r/n03930630/videogame_2.jpg +- data/imagenet-r/n04146614/videogame_22.jpg +- data/imagenet-r/n02356798/misc_1.jpg +- data/imagenet-r/n04141076/cartoon_32.jpg +- data/imagenet-r/n02128385/misc_1.jpg +- data/imagenet-r/n02906734/graphic_6.jpg +- data/imagenet-r/n01944390/misc_135.jpg +- data/imagenet-r/n07720875/deviantart_4.jpg +- data/imagenet-r/n02410509/sculpture_20.jpg +- data/imagenet-r/n01910747/sticker_6.jpg +- data/imagenet-r/n02102318/painting_4.jpg +- data/imagenet-r/n04487394/cartoon_6.jpg +- data/imagenet-r/n04522168/art_2.jpg +- data/imagenet-r/n01514859/cartoon_38.jpg +- data/imagenet-r/n01632777/art_3.jpg +- data/imagenet-r/n01910747/tattoo_35.jpg +- data/imagenet-r/n02510455/sketch_11.jpg +- data/imagenet-r/n09472597/sketch_5.jpg +- data/imagenet-r/n07873807/painting_5.jpg +- data/imagenet-r/n03424325/deviantart_0.jpg +- data/imagenet-r/n03676483/misc_4.jpg +- data/imagenet-r/n02129604/graffiti_8.jpg +- data/imagenet-r/n07749582/embroidery_5.jpg +- data/imagenet-r/n01833805/painting_11.jpg +- data/imagenet-r/n02117135/painting_10.jpg +- data/imagenet-r/n07714990/art_3.jpg +- data/imagenet-r/n04254680/deviantart_13.jpg +- data/imagenet-r/n01518878/cartoon_20.jpg +- data/imagenet-r/n10565667/deviantart_9.jpg +- data/imagenet-r/n09472597/painting_10.jpg +- data/imagenet-r/n03676483/cartoon_1.jpg +- data/imagenet-r/n02165456/misc_0.jpg +- data/imagenet-r/n01833805/deviantart_5.jpg +- data/imagenet-r/n04254680/videogame_35.jpg +- data/imagenet-r/n01910747/painting_24.jpg +- data/imagenet-r/n04522168/cartoon_0.jpg +- data/imagenet-r/n02814860/deviantart_19.jpg +- data/imagenet-r/n02395406/sketch_11.jpg +- data/imagenet-r/n02966193/sketch_9.jpg +- data/imagenet-r/n04536866/deviantart_17.jpg +- data/imagenet-r/n07697313/sketch_17.jpg +- data/imagenet-r/n04389033/cartoon_2.jpg +- data/imagenet-r/n02112018/misc_59.jpg +- data/imagenet-r/n01677366/misc_11.jpg +- data/imagenet-r/n02607072/misc_50.jpg +- data/imagenet-r/n03630383/sketch_6.jpg +- data/imagenet-r/n03124170/toy_22.jpg +- data/imagenet-r/n01833805/tattoo_51.jpg +- data/imagenet-r/n01784675/graffiti_2.jpg +- data/imagenet-r/n02481823/deviantart_11.jpg +- data/imagenet-r/n02279972/sketch_4.jpg +- data/imagenet-r/n02802426/sculpture_6.jpg +- data/imagenet-r/n02129165/origami_4.jpg +- data/imagenet-r/n02071294/painting_16.jpg +- data/imagenet-r/n02226429/art_2.jpg +- data/imagenet-r/n02510455/misc_111.jpg +- data/imagenet-r/n02088238/misc_70.jpg +- data/imagenet-r/n01986214/origami_3.jpg +- data/imagenet-r/n07753592/videogame_1.jpg +- data/imagenet-r/n07697313/toy_6.jpg +- data/imagenet-r/n02119022/misc_151.jpg +- data/imagenet-r/n04118538/sketch_1.jpg +- data/imagenet-r/n02841315/cartoon_20.jpg +- data/imagenet-r/n01494475/sketch_15.jpg +- data/imagenet-r/n04310018/art_19.jpg +- data/imagenet-r/n02007558/origami_0.jpg +- data/imagenet-r/n02410509/painting_23.jpg +- data/imagenet-r/n07768694/painting_18.jpg +- data/imagenet-r/n02950826/videogame_0.jpg +- data/imagenet-r/n01910747/painting_4.jpg +- data/imagenet-r/n02091032/sketch_2.jpg +- data/imagenet-r/n04192698/graphic_0.jpg +- data/imagenet-r/n02410509/art_0.jpg +- data/imagenet-r/n02226429/sketch_10.jpg +- data/imagenet-r/n02106550/misc_35.jpg +- data/imagenet-r/n01514859/art_7.jpg +- data/imagenet-r/n01616318/graffiti_0.jpg +- data/imagenet-r/n09835506/deviantart_0.jpg +- data/imagenet-r/n02165456/painting_4.jpg +- data/imagenet-r/n07697313/cartoon_37.jpg +- data/imagenet-r/n07734744/graphic_6.jpg +- data/imagenet-r/n07714990/cartoon_9.jpg +- data/imagenet-r/n03594945/sketch_15.jpg +- data/imagenet-r/n02395406/toy_20.jpg +- data/imagenet-r/n02138441/sketch_19.jpg +- data/imagenet-r/n02279972/tattoo_21.jpg +- data/imagenet-r/n04086273/cartoon_19.jpg +- data/imagenet-r/n02007558/deviantart_0.jpg +- data/imagenet-r/n02797295/misc_71.jpg +- data/imagenet-r/n02129604/graffiti_3.jpg +- data/imagenet-r/n02437616/origami_2.jpg +- data/imagenet-r/n02190166/sculpture_1.jpg +- data/imagenet-r/n07697537/videogame_5.jpg +- data/imagenet-r/n01677366/sketch_10.jpg +- data/imagenet-r/n02097298/misc_29.jpg +- data/imagenet-r/n02480495/painting_36.jpg +- data/imagenet-r/n02279972/sketch_15.jpg +- data/imagenet-r/n03710193/sketch_15.jpg +- data/imagenet-r/n01644373/cartoon_12.jpg +- data/imagenet-r/n02481823/graffiti_14.jpg +- data/imagenet-r/n01616318/cartoon_26.jpg +- data/imagenet-r/n02808440/painting_21.jpg +- data/imagenet-r/n02410509/sculpture_54.jpg +- data/imagenet-r/n02391049/misc_94.jpg +- data/imagenet-r/n03495258/cartoon_14.jpg +- data/imagenet-r/n02088466/misc_11.jpg +- data/imagenet-r/n02190166/sticker_11.jpg +- data/imagenet-r/n01694178/sketch_0.jpg +- data/imagenet-r/n02099601/misc_45.jpg +- data/imagenet-r/n02138441/toy_3.jpg +- data/imagenet-r/n02088238/misc_68.jpg +- data/imagenet-r/n02268443/misc_173.jpg +- data/imagenet-r/n02106166/cartoon_6.jpg +- data/imagenet-r/n02129604/graphic_8.jpg +- data/imagenet-r/n02480855/misc_6.jpg +- data/imagenet-r/n02117135/tattoo_0.jpg +- data/imagenet-r/n02129165/cartoon_24.jpg +- data/imagenet-r/n02268443/misc_87.jpg +- data/imagenet-r/n07753275/cartoon_8.jpg +- data/imagenet-r/n02110958/painting_41.jpg +- data/imagenet-r/n02088466/sketch_11.jpg +- data/imagenet-r/n02106550/misc_1.jpg +- data/imagenet-r/n02097298/misc_35.jpg +- data/imagenet-r/n02841315/cartoon_27.jpg +- data/imagenet-r/n02655020/videogame_28.jpg +- data/imagenet-r/n04086273/painting_5.jpg +- data/imagenet-r/n07714990/toy_10.jpg +- data/imagenet-r/n02364673/art_14.jpg +- data/imagenet-r/n02481823/cartoon_20.jpg +- data/imagenet-r/n02480855/sketch_0.jpg +- data/imagenet-r/n02906734/embroidery_3.jpg +- data/imagenet-r/n02672831/painting_13.jpg +- data/imagenet-r/n07753592/misc_178.jpg +- data/imagenet-r/n01614925/tattoo_13.jpg +- data/imagenet-r/n01774750/tattoo_4.jpg +- data/imagenet-r/n01843383/deviantart_15.jpg +- data/imagenet-r/n02364673/cartoon_24.jpg +- data/imagenet-r/n07768694/deviantart_19.jpg +- data/imagenet-r/n10565667/videogame_16.jpg +- data/imagenet-r/n01784675/painting_0.jpg +- data/imagenet-r/n07873807/graffiti_2.jpg +- data/imagenet-r/n02749479/sketch_15.jpg +- data/imagenet-r/n01944390/misc_146.jpg +- data/imagenet-r/n02526121/sketch_14.jpg +- data/imagenet-r/n02110185/sketch_8.jpg +- data/imagenet-r/n02814860/embroidery_6.jpg +- data/imagenet-r/n04310018/toy_11.jpg +- data/imagenet-r/n02110341/misc_153.jpg +- data/imagenet-r/n02802426/sculpture_7.jpg +- data/imagenet-r/n12267677/misc_26.jpg +- data/imagenet-r/n02480855/tattoo_17.jpg +- data/imagenet-r/n07697313/cartoon_23.jpg +- data/imagenet-r/n02088364/tattoo_4.jpg +- data/imagenet-r/n03481172/sketch_12.jpg +- data/imagenet-r/n02325366/sketch_18.jpg +- data/imagenet-r/n07745940/misc_9.jpg +- data/imagenet-r/n02091032/misc_29.jpg +- data/imagenet-r/n03494278/deviantart_2.jpg +- data/imagenet-r/n02363005/sketch_17.jpg +- data/imagenet-r/n01860187/sketch_6.jpg +- data/imagenet-r/n07718472/cartoon_9.jpg +- data/imagenet-r/n03272010/cartoon_9.jpg +- data/imagenet-r/n03710193/sketch_3.jpg +- data/imagenet-r/n01614925/painting_3.jpg +- data/imagenet-r/n02007558/sticker_2.jpg +- data/imagenet-r/n01614925/cartoon_9.jpg +- data/imagenet-r/n02447366/sketch_11.jpg +- data/imagenet-r/n07734744/cartoon_37.jpg +- data/imagenet-r/n01443537/painting_3.jpg +- data/imagenet-r/n03481172/sketch_21.jpg +- data/imagenet-r/n02134084/misc_156.jpg +- data/imagenet-r/n04310018/toy_10.jpg +- data/imagenet-r/n02102318/misc_41.jpg +- data/imagenet-r/n02134084/sketch_5.jpg +- data/imagenet-r/n07734744/toy_7.jpg +- data/imagenet-r/n03498962/videogame_9.jpg +- data/imagenet-r/n02410509/misc_9.jpg +- data/imagenet-r/n03649909/sculpture_0.jpg +- data/imagenet-r/n02077923/sketch_12.jpg +- data/imagenet-r/n03676483/sculpture_1.jpg +- data/imagenet-r/n04275548/toy_2.jpg +- data/imagenet-r/n02909870/graphic_0.jpg +- data/imagenet-r/n04310018/misc_3.jpg +- data/imagenet-r/n01833805/embroidery_19.jpg +- data/imagenet-r/n02110185/painting_2.jpg +- data/imagenet-r/n02883205/painting_5.jpg +- data/imagenet-r/n02110958/cartoon_77.jpg +- data/imagenet-r/n03775071/cartoon_5.jpg +- data/imagenet-r/n02843684/cartoon_18.jpg +- data/imagenet-r/n09835506/misc_44.jpg +- data/imagenet-r/n07697313/sketch_7.jpg +- data/imagenet-r/n04086273/tattoo_32.jpg +- data/imagenet-r/n01514859/misc_4.jpg +- data/imagenet-r/n02814860/painting_44.jpg +- data/imagenet-r/n07920052/cartoon_4.jpg +- data/imagenet-r/n07753592/misc_184.jpg +- data/imagenet-r/n01644373/tattoo_28.jpg +- data/imagenet-r/n02437616/art_6.jpg +- data/imagenet-r/n02007558/toy_5.jpg +- data/imagenet-r/n02317335/sculpture_11.jpg +- data/imagenet-r/n02814860/cartoon_26.jpg +- data/imagenet-r/n02129604/graffiti_5.jpg +- data/imagenet-r/n02486410/sketch_19.jpg +- data/imagenet-r/n04141076/cartoon_47.jpg +- data/imagenet-r/n07920052/graphic_5.jpg +- data/imagenet-r/n02085620/tattoo_1.jpg +- data/imagenet-r/n02486410/cartoon_11.jpg +- data/imagenet-r/n02134084/tattoo_9.jpg +- data/imagenet-r/n02950826/sketch_2.jpg +- data/imagenet-r/n01986214/sculpture_0.jpg +- data/imagenet-r/n01806143/embroidery_4.jpg +- data/imagenet-r/n02510455/misc_96.jpg +- data/imagenet-r/n02108915/misc_128.jpg +- data/imagenet-r/n02797295/sketch_8.jpg +- data/imagenet-r/n01847000/misc_7.jpg +- data/imagenet-r/n03345487/toy_2.jpg +- data/imagenet-r/n02841315/cartoon_30.jpg +- data/imagenet-r/n02948072/cartoon_12.jpg +- data/imagenet-r/n02481823/deviantart_1.jpg +- data/imagenet-r/n02129165/tattoo_34.jpg +- data/imagenet-r/n03773504/sketch_4.jpg +- data/imagenet-r/n07753275/embroidery_7.jpg +- data/imagenet-r/n02410509/sketch_4.jpg +- data/imagenet-r/n04266014/toy_28.jpg +- data/imagenet-r/n01855672/misc_6.jpg +- data/imagenet-r/n01484850/painting_0.jpg +- data/imagenet-r/n02096585/tattoo_12.jpg +- data/imagenet-r/n04133789/sketch_2.jpg +- data/imagenet-r/n01498041/tattoo_2.jpg +- data/imagenet-r/n02410509/sculpture_49.jpg +- data/imagenet-r/n02769748/toy_0.jpg +- data/imagenet-r/n01443537/toy_7.jpg +- data/imagenet-r/n07753275/videogame_0.jpg +- data/imagenet-r/n02206856/graffiti_19.jpg +- data/imagenet-r/n02814860/embroidery_3.jpg +- data/imagenet-r/n01910747/tattoo_42.jpg +- data/imagenet-r/n02607072/misc_30.jpg +- data/imagenet-r/n03424325/videogame_24.jpg +- data/imagenet-r/n02106030/painting_14.jpg +- data/imagenet-r/n02114367/misc_4.jpg +- data/imagenet-r/n02165456/tattoo_73.jpg +- data/imagenet-r/n04389033/videogame_37.jpg +- data/imagenet-r/n02113799/misc_4.jpg +- data/imagenet-r/n09472597/videogame_23.jpg +- data/imagenet-r/n09835506/videogame_3.jpg +- data/imagenet-r/n02749479/videogame_4.jpg +- data/imagenet-r/n01616318/deviantart_20.jpg +- data/imagenet-r/n02906734/cartoon_2.jpg +- data/imagenet-r/n02007558/painting_4.jpg +- data/imagenet-r/n07753592/sketch_0.jpg +- data/imagenet-r/n02395406/toy_21.jpg +- data/imagenet-r/n03124170/misc_2.jpg +- data/imagenet-r/n01882714/misc_3.jpg +- data/imagenet-r/n01632777/videogame_9.jpg +- data/imagenet-r/n02883205/sketch_21.jpg +- data/imagenet-r/n02108089/misc_25.jpg +- data/imagenet-r/n04266014/toy_13.jpg +- data/imagenet-r/n02096585/misc_189.jpg +- data/imagenet-r/n07614500/toy_9.jpg +- data/imagenet-r/n02110185/tattoo_0.jpg +- data/imagenet-r/n04086273/sculpture_0.jpg +- data/imagenet-r/n02356798/sketch_20.jpg +- data/imagenet-r/n10565667/videogame_19.jpg +- data/imagenet-r/n01910747/sculpture_6.jpg +- data/imagenet-r/n01833805/tattoo_71.jpg +- data/imagenet-r/n02110958/sketch_9.jpg +- data/imagenet-r/n01484850/videogame_3.jpg +- data/imagenet-r/n02096585/misc_45.jpg +- data/imagenet-r/n02364673/art_0.jpg +- data/imagenet-r/n04347754/sketch_3.jpg +- data/imagenet-r/n02486410/art_5.jpg +- data/imagenet-r/n07734744/graffiti_46.jpg +- data/imagenet-r/n02481823/sketch_19.jpg +- data/imagenet-r/n02096585/sketch_9.jpg +- data/imagenet-r/n02364673/painting_13.jpg +- data/imagenet-r/n04522168/art_0.jpg +- data/imagenet-r/n04552348/deviantart_7.jpg +- data/imagenet-r/n02486410/origami_0.jpg +- data/imagenet-r/n04389033/deviantart_17.jpg +- data/imagenet-r/n02092339/sketch_14.jpg +- data/imagenet-r/n02129165/sticker_1.jpg +- data/imagenet-r/n04465501/cartoon_19.jpg +- data/imagenet-r/n02085620/misc_46.jpg +- data/imagenet-r/n04347754/toy_11.jpg +- data/imagenet-r/n07768694/painting_26.jpg +- data/imagenet-r/n02009912/misc_33.jpg +- data/imagenet-r/n02113023/sketch_10.jpg +- data/imagenet-r/n02364673/misc_8.jpg +- data/imagenet-r/n04389033/graffiti_6.jpg +- data/imagenet-r/n01518878/sketch_0.jpg +- data/imagenet-r/n02980441/sketch_23.jpg +- data/imagenet-r/n09835506/deviantart_27.jpg +- data/imagenet-r/n02346627/cartoon_1.jpg +- data/imagenet-r/n02007558/origami_6.jpg +- data/imagenet-r/n02966193/sketch_18.jpg +- data/imagenet-r/n04310018/sticker_17.jpg +- data/imagenet-r/n07768694/tattoo_4.jpg +- data/imagenet-r/n02398521/cartoon_16.jpg +- data/imagenet-r/n07697537/sketch_7.jpg +- data/imagenet-r/n02410509/painting_17.jpg +- data/imagenet-r/n03775071/sketch_18.jpg +- data/imagenet-r/n09835506/misc_40.jpg +- data/imagenet-r/n02423022/art_8.jpg +- data/imagenet-r/n01644373/cartoon_23.jpg +- data/imagenet-r/n02219486/sketch_11.jpg +- data/imagenet-r/n04552348/videogame_28.jpg +- data/imagenet-r/n02007558/tattoo_62.jpg +- data/imagenet-r/n01484850/painting_13.jpg +- data/imagenet-r/n02437616/deviantart_9.jpg +- data/imagenet-r/n02951358/painting_7.jpg +- data/imagenet-r/n02106030/sketch_21.jpg +- data/imagenet-r/n01774750/art_1.jpg +- data/imagenet-r/n02279972/painting_30.jpg +- data/imagenet-r/n10565667/sketch_10.jpg +- data/imagenet-r/n03888257/cartoon_36.jpg +- data/imagenet-r/n02236044/tattoo_28.jpg +- data/imagenet-r/n02099601/sketch_22.jpg +- data/imagenet-r/n02814860/sticker_6.jpg +- data/imagenet-r/n02056570/deviantart_9.jpg +- data/imagenet-r/n07734744/painting_20.jpg +- data/imagenet-r/n02883205/graffiti_6.jpg +- data/imagenet-r/n01882714/cartoon_30.jpg +- data/imagenet-r/n03602883/misc_5.jpg +- data/imagenet-r/n01944390/tattoo_44.jpg +- data/imagenet-r/n04389033/painting_3.jpg +- data/imagenet-r/n02219486/painting_7.jpg +- data/imagenet-r/n02134084/sketch_0.jpg +- data/imagenet-r/n04141076/deviantart_2.jpg +- data/imagenet-r/n02119022/misc_18.jpg +- data/imagenet-r/n03424325/misc_70.jpg +- data/imagenet-r/n02410509/sculpture_18.jpg +- data/imagenet-r/n02051845/art_1.jpg +- data/imagenet-r/n04389033/videogame_16.jpg +- data/imagenet-r/n02948072/cartoon_25.jpg +- data/imagenet-r/n04536866/tattoo_4.jpg +- data/imagenet-r/n04591713/deviantart_0.jpg +- data/imagenet-r/n01616318/tattoo_30.jpg +- data/imagenet-r/n02206856/embroidery_10.jpg +- data/imagenet-r/n07753275/art_14.jpg +- data/imagenet-r/n02483362/painting_3.jpg +- data/imagenet-r/n02138441/sculpture_16.jpg +- data/imagenet-r/n01944390/sketch_20.jpg +- data/imagenet-r/n10565667/toy_11.jpg +- data/imagenet-r/n01986214/deviantart_4.jpg +- data/imagenet-r/n02948072/embroidery_25.jpg +- data/imagenet-r/n04147183/deviantart_3.jpg +- data/imagenet-r/n07734744/cartoon_14.jpg +- data/imagenet-r/n02113624/misc_12.jpg +- data/imagenet-r/n01748264/deviantart_9.jpg +- data/imagenet-r/n02051845/sketch_10.jpg +- data/imagenet-r/n01806143/art_2.jpg +- data/imagenet-r/n02447366/origami_0.jpg +- data/imagenet-r/n07697537/deviantart_27.jpg +- data/imagenet-r/n04389033/sculpture_6.jpg +- data/imagenet-r/n01748264/sketch_5.jpg +- data/imagenet-r/n02843684/embroidery_4.jpg +- data/imagenet-r/n03773504/videogame_9.jpg +- data/imagenet-r/n02165456/painting_14.jpg +- data/imagenet-r/n10565667/art_3.jpg +- data/imagenet-r/n10565667/sketch_13.jpg +- data/imagenet-r/n10565667/art_5.jpg +- data/imagenet-r/n02108089/misc_15.jpg +- data/imagenet-r/n02363005/cartoon_28.jpg +- data/imagenet-r/n02129165/tattoo_25.jpg +- data/imagenet-r/n02410509/sketch_23.jpg +- data/imagenet-r/n04389033/sketch_15.jpg +- data/imagenet-r/n04591713/deviantart_6.jpg +- data/imagenet-r/n01616318/painting_4.jpg +- data/imagenet-r/n04146614/deviantart_4.jpg +- data/imagenet-r/n02129604/art_4.jpg +- data/imagenet-r/n03947888/videogame_5.jpg +- data/imagenet-r/n02102318/misc_5.jpg +- data/imagenet-r/n01843383/art_31.jpg +- data/imagenet-r/n03481172/art_7.jpg +- data/imagenet-r/n01820546/videogame_1.jpg +- data/imagenet-r/n02510455/misc_30.jpg +- data/imagenet-r/n07753592/misc_96.jpg +- data/imagenet-r/n02106550/misc_53.jpg +- data/imagenet-r/n03947888/videogame_23.jpg +- data/imagenet-r/n02051845/painting_8.jpg +- data/imagenet-r/n01944390/misc_1.jpg +- data/imagenet-r/n01774750/deviantart_13.jpg +- data/imagenet-r/n02088364/misc_1.jpg +- data/imagenet-r/n01944390/misc_167.jpg +- data/imagenet-r/n01806143/sculpture_0.jpg +- data/imagenet-r/n02423022/sketch_5.jpg +- data/imagenet-r/n02119022/misc_2.jpg +- data/imagenet-r/n04147183/painting_23.jpg +- data/imagenet-r/n02113023/sketch_12.jpg +- data/imagenet-r/n02268443/sketch_3.jpg +- data/imagenet-r/n04465501/painting_16.jpg +- data/imagenet-r/n04310018/art_12.jpg +- data/imagenet-r/n02437616/toy_6.jpg +- data/imagenet-r/n02226429/sketch_18.jpg +- data/imagenet-r/n07697313/deviantart_28.jpg +- data/imagenet-r/n02279972/painting_10.jpg +- data/imagenet-r/n01882714/videogame_3.jpg +- data/imagenet-r/n02226429/cartoon_15.jpg +- data/imagenet-r/n02119022/misc_129.jpg +- data/imagenet-r/n02391049/misc_80.jpg +- data/imagenet-r/n02980441/toy_4.jpg +- data/imagenet-r/n02749479/sketch_13.jpg +- data/imagenet-r/n04522168/cartoon_26.jpg +- data/imagenet-r/n01843383/painting_39.jpg +- data/imagenet-r/n02099601/misc_20.jpg +- data/imagenet-r/n07768694/painting_0.jpg +- data/imagenet-r/n02113023/sketch_11.jpg +- data/imagenet-r/n02119022/misc_58.jpg +- data/imagenet-r/n01882714/tattoo_28.jpg +- data/imagenet-r/n02948072/art_4.jpg +- data/imagenet-r/n02607072/deviantart_11.jpg +- data/imagenet-r/n02814860/cartoon_34.jpg +- data/imagenet-r/n07714990/sticker_0.jpg +- data/imagenet-r/n02226429/tattoo_5.jpg +- data/imagenet-r/n02071294/sketch_7.jpg +- data/imagenet-r/n04146614/videogame_7.jpg +- data/imagenet-r/n01644373/tattoo_49.jpg +- data/imagenet-r/n02088238/misc_59.jpg +- data/imagenet-r/n02268443/misc_5.jpg +- data/imagenet-r/n02939185/cartoon_10.jpg +- data/imagenet-r/n02808440/cartoon_1.jpg +- data/imagenet-r/n02134084/misc_125.jpg +- data/imagenet-r/n04522168/sketch_8.jpg +- data/imagenet-r/n10565667/sculpture_1.jpg +- data/imagenet-r/n02356798/art_1.jpg +- data/imagenet-r/n01833805/deviantart_4.jpg +- data/imagenet-r/n02769748/sculpture_1.jpg +- data/imagenet-r/n02447366/cartoon_26.jpg +- data/imagenet-r/n02117135/cartoon_7.jpg +- data/imagenet-r/n02110958/cartoon_67.jpg +- data/imagenet-r/n02088238/misc_40.jpg +- data/imagenet-r/n02410509/art_7.jpg +- data/imagenet-r/n07753592/sketch_23.jpg +- data/imagenet-r/n04086273/videogame_5.jpg +- data/imagenet-r/n01644373/tattoo_44.jpg +- data/imagenet-r/n01910747/tattoo_81.jpg +- data/imagenet-r/n02129165/cartoon_32.jpg +- data/imagenet-r/n02129165/tattoo_43.jpg +- data/imagenet-r/n03930630/sketch_15.jpg +- data/imagenet-r/n04086273/tattoo_46.jpg +- data/imagenet-r/n02906734/cartoon_30.jpg +- data/imagenet-r/n02007558/cartoon_13.jpg +- data/imagenet-r/n03124170/art_2.jpg +- data/imagenet-r/n01910747/tattoo_6.jpg +- data/imagenet-r/n02325366/misc_11.jpg +- data/imagenet-r/n07734744/painting_31.jpg +- data/imagenet-r/n02410509/graffiti_8.jpg +- data/imagenet-r/n02883205/origami_0.jpg +- data/imagenet-r/n02123045/painting_48.jpg +- data/imagenet-r/n02123045/painting_55.jpg +- data/imagenet-r/n03930630/sketch_0.jpg +- data/imagenet-r/n04254680/deviantart_3.jpg +- data/imagenet-r/n02992529/cartoon_8.jpg +- data/imagenet-r/n02398521/tattoo_6.jpg +- data/imagenet-r/n02113023/sketch_18.jpg +- data/imagenet-r/n03775071/sculpture_0.jpg +- data/imagenet-r/n02769748/cartoon_7.jpg +- data/imagenet-r/n07718472/painting_3.jpg +- data/imagenet-r/n02481823/misc_0.jpg +- data/imagenet-r/n02071294/art_4.jpg +- data/imagenet-r/n07873807/deviantart_1.jpg +- data/imagenet-r/n02526121/sculpture_13.jpg +- data/imagenet-r/n01443537/deviantart_10.jpg +- data/imagenet-r/n02112018/misc_13.jpg +- data/imagenet-r/n02814860/sketch_16.jpg +- data/imagenet-r/n01498041/painting_9.jpg +- data/imagenet-r/n01944390/tattoo_16.jpg +- data/imagenet-r/n02110958/art_4.jpg +- data/imagenet-r/n01694178/tattoo_17.jpg +- data/imagenet-r/n02410509/painting_10.jpg +- data/imagenet-r/n02108915/misc_54.jpg +- data/imagenet-r/n07693725/sketch_9.jpg +- data/imagenet-r/n01498041/painting_4.jpg +- data/imagenet-r/n01484850/cartoon_12.jpg +- data/imagenet-r/n09835506/misc_28.jpg +- data/imagenet-r/n02106662/misc_39.jpg +- data/imagenet-r/n01531178/cartoon_33.jpg +- data/imagenet-r/n01494475/misc_6.jpg +- data/imagenet-r/n02206856/toy_37.jpg +- data/imagenet-r/n02092339/misc_47.jpg +- data/imagenet-r/n07714571/art_3.jpg +- data/imagenet-r/n02077923/origami_2.jpg +- data/imagenet-r/n03424325/misc_88.jpg +- data/imagenet-r/n02814860/deviantart_15.jpg +- data/imagenet-r/n02607072/sketch_2.jpg +- data/imagenet-r/n01910747/graphic_2.jpg +- data/imagenet-r/n02096585/sketch_3.jpg +- data/imagenet-r/n03676483/cartoon_13.jpg +- data/imagenet-r/n02088094/misc_17.jpg +- data/imagenet-r/n02410509/misc_2.jpg +- data/imagenet-r/n02843684/misc_7.jpg +- data/imagenet-r/n01843383/deviantart_14.jpg +- data/imagenet-r/n02129165/videogame_4.jpg +- data/imagenet-r/n03481172/cartoon_21.jpg +- data/imagenet-r/n04141076/cartoon_18.jpg +- data/imagenet-r/n02447366/painting_9.jpg +- data/imagenet-r/n02128757/cartoon_11.jpg +- data/imagenet-r/n04086273/tattoo_22.jpg +- data/imagenet-r/n04192698/deviantart_15.jpg +- data/imagenet-r/n03372029/toy_0.jpg +- data/imagenet-r/n07768694/deviantart_10.jpg +- data/imagenet-r/n02113799/sketch_8.jpg +- data/imagenet-r/n03345487/videogame_3.jpg +- data/imagenet-r/n03467068/sketch_13.jpg +- data/imagenet-r/n02109525/sketch_9.jpg +- data/imagenet-r/n03272010/cartoon_25.jpg +- data/imagenet-r/n03272010/cartoon_26.jpg +- data/imagenet-r/n02106030/art_5.jpg +- data/imagenet-r/n07745940/art_7.jpg +- data/imagenet-r/n01443537/cartoon_8.jpg +- data/imagenet-r/n04522168/graphic_1.jpg +- data/imagenet-r/n04325704/sculpture_0.jpg +- data/imagenet-r/n03602883/misc_55.jpg +- data/imagenet-r/n07734744/videogame_18.jpg +- data/imagenet-r/n01614925/painting_32.jpg +- data/imagenet-r/n03930630/art_4.jpg +- data/imagenet-r/n02268443/sketch_17.jpg +- data/imagenet-r/n02966193/misc_2.jpg +- data/imagenet-r/n02007558/sketch_8.jpg +- data/imagenet-r/n02108915/misc_122.jpg +- data/imagenet-r/n03594945/videogame_6.jpg +- data/imagenet-r/n02808440/graphic_0.jpg +- data/imagenet-r/n03649909/cartoon_3.jpg +- data/imagenet-r/n04310018/painting_26.jpg +- data/imagenet-r/n02110185/sketch_13.jpg +- data/imagenet-r/n03594945/art_2.jpg +- data/imagenet-r/n02980441/toy_2.jpg +- data/imagenet-r/n02480495/graffiti_1.jpg +- data/imagenet-r/n02906734/cartoon_21.jpg +- data/imagenet-r/n02094433/misc_48.jpg +- data/imagenet-r/n02797295/misc_6.jpg +- data/imagenet-r/n01847000/misc_4.jpg +- data/imagenet-r/n04266014/toy_8.jpg +- data/imagenet-r/n01910747/graphic_9.jpg +- data/imagenet-r/n02843684/cartoon_8.jpg +- data/imagenet-r/n04465501/sketch_4.jpg +- data/imagenet-r/n07734744/painting_2.jpg +- data/imagenet-r/n02108915/misc_7.jpg +- data/imagenet-r/n03775071/painting_3.jpg +- data/imagenet-r/n10565667/art_13.jpg +- data/imagenet-r/n01443537/painting_31.jpg +- data/imagenet-r/n03372029/sketch_12.jpg +- data/imagenet-r/n02129604/graffiti_6.jpg +- data/imagenet-r/n04266014/painting_9.jpg +- data/imagenet-r/n01944390/misc_117.jpg +- data/imagenet-r/n02051845/deviantart_3.jpg +- data/imagenet-r/n02769748/cartoon_32.jpg +- data/imagenet-r/n03594945/toy_1.jpg +- data/imagenet-r/n02769748/origami_3.jpg +- data/imagenet-r/n02883205/sculpture_10.jpg +- data/imagenet-r/n07720875/deviantart_21.jpg +- data/imagenet-r/n02097298/sketch_19.jpg +- data/imagenet-r/n02108915/misc_10.jpg +- data/imagenet-r/n04536866/tattoo_0.jpg +- data/imagenet-r/n01843383/deviantart_13.jpg +- data/imagenet-r/n01518878/sculpture_8.jpg +- data/imagenet-r/n02268443/misc_7.jpg +- data/imagenet-r/n03481172/art_13.jpg +- data/imagenet-r/n03710193/sketch_1.jpg +- data/imagenet-r/n04310018/painting_35.jpg +- data/imagenet-r/n02099712/misc_48.jpg +- data/imagenet-r/n02099712/misc_36.jpg +- data/imagenet-r/n02123045/misc_2.jpg +- data/imagenet-r/n02091134/sketch_16.jpg +- data/imagenet-r/n01855672/deviantart_4.jpg +- data/imagenet-r/n07720875/cartoon_2.jpg +- data/imagenet-r/n07693725/painting_4.jpg +- data/imagenet-r/n02966193/cartoon_25.jpg +- data/imagenet-r/n02130308/cartoon_11.jpg +- data/imagenet-r/n03930630/art_0.jpg +- data/imagenet-r/n02356798/sketch_4.jpg +- data/imagenet-r/n02088364/misc_41.jpg +- data/imagenet-r/n02843684/misc_14.jpg +- data/imagenet-r/n04254680/sketch_1.jpg +- data/imagenet-r/n02117135/sketch_13.jpg +- data/imagenet-r/n02841315/sketch_4.jpg +- data/imagenet-r/n02071294/tattoo_1.jpg +- data/imagenet-r/n07614500/embroidery_13.jpg +- data/imagenet-r/n02480855/graffiti_3.jpg +- data/imagenet-r/n07753592/deviantart_5.jpg +- data/imagenet-r/n02056570/misc_0.jpg +- data/imagenet-r/n03481172/cartoon_13.jpg +- data/imagenet-r/n02906734/embroidery_1.jpg +- data/imagenet-r/n02356798/misc_0.jpg +- data/imagenet-r/n02108915/misc_29.jpg +- data/imagenet-r/n02130308/toy_11.jpg +- data/imagenet-r/n02268443/misc_82.jpg +- data/imagenet-r/n01843383/graffiti_6.jpg +- data/imagenet-r/n04266014/videogame_0.jpg +- data/imagenet-r/n01644373/tattoo_43.jpg +- data/imagenet-r/n02051845/sculpture_0.jpg +- data/imagenet-r/n04141076/sculpture_5.jpg +- data/imagenet-r/n07734744/sketch_0.jpg +- data/imagenet-r/n02206856/sticker_6.jpg +- data/imagenet-r/n02007558/tattoo_25.jpg +- data/imagenet-r/n02814860/videogame_10.jpg +- data/imagenet-r/n02130308/misc_0.jpg +- data/imagenet-r/n02395406/painting_11.jpg +- data/imagenet-r/n02051845/painting_14.jpg +- data/imagenet-r/n07695742/videogame_4.jpg +- data/imagenet-r/n03481172/toy_5.jpg +- data/imagenet-r/n01806143/origami_11.jpg +- data/imagenet-r/n03594945/toy_5.jpg +- data/imagenet-r/n02108089/misc_30.jpg +- data/imagenet-r/n02123045/sketch_16.jpg +- data/imagenet-r/n01443537/sticker_1.jpg +- data/imagenet-r/n02130308/painting_5.jpg +- data/imagenet-r/n03594945/videogame_23.jpg +- data/imagenet-r/n04133789/art_5.jpg +- data/imagenet-r/n01860187/cartoon_8.jpg +- data/imagenet-r/n01644373/deviantart_4.jpg +- data/imagenet-r/n03710193/misc_15.jpg +- data/imagenet-r/n02483362/sketch_16.jpg +- data/imagenet-r/n02607072/misc_88.jpg +- data/imagenet-r/n07720875/art_7.jpg +- data/imagenet-r/n01944390/misc_12.jpg +- data/imagenet-r/n02481823/painting_28.jpg +- data/imagenet-r/n03602883/sketch_11.jpg +- data/imagenet-r/n02007558/graffiti_27.jpg +- data/imagenet-r/n01860187/cartoon_6.jpg +- data/imagenet-r/n02099601/misc_80.jpg +- data/imagenet-r/n02110958/embroidery_5.jpg +- data/imagenet-r/n01944390/misc_170.jpg +- data/imagenet-r/n02814860/videogame_8.jpg +- data/imagenet-r/n02206856/sculpture_3.jpg +- data/imagenet-r/n02437616/sketch_3.jpg +- data/imagenet-r/n01614925/tattoo_32.jpg +- data/imagenet-r/n01882714/sketch_20.jpg +- data/imagenet-r/n02129604/sketch_3.jpg +- data/imagenet-r/n02134084/misc_144.jpg +- data/imagenet-r/n02423022/misc_2.jpg +- data/imagenet-r/n04086273/painting_8.jpg +- data/imagenet-r/n01614925/tattoo_22.jpg +- data/imagenet-r/n02445715/graffiti_8.jpg +- data/imagenet-r/n02096585/misc_203.jpg +- data/imagenet-r/n01644373/sketch_6.jpg +- data/imagenet-r/n07745940/embroidery_23.jpg +- data/imagenet-r/n02056570/art_5.jpg +- data/imagenet-r/n01443537/videogame_5.jpg +- data/imagenet-r/n01784675/sculpture_0.jpg +- data/imagenet-r/n02007558/art_28.jpg +- data/imagenet-r/n02119022/misc_22.jpg +- data/imagenet-r/n02486410/art_1.jpg +- data/imagenet-r/n04310018/painting_32.jpg +- data/imagenet-r/n04275548/videogame_2.jpg +- data/imagenet-r/n07742313/sketch_16.jpg +- data/imagenet-r/n03424325/sketch_5.jpg +- data/imagenet-r/n02007558/deviantart_7.jpg +- data/imagenet-r/n02843684/cartoon_2.jpg +- data/imagenet-r/n01882714/art_3.jpg +- data/imagenet-r/n02108915/tattoo_3.jpg +- data/imagenet-r/n07880968/sketch_2.jpg +- data/imagenet-r/n01910747/embroidery_5.jpg +- data/imagenet-r/n07614500/cartoon_23.jpg +- data/imagenet-r/n01644373/painting_25.jpg +- data/imagenet-r/n02808440/toy_0.jpg +- data/imagenet-r/n02123045/painting_32.jpg +- data/imagenet-r/n02099601/misc_57.jpg +- data/imagenet-r/n02110185/painting_40.jpg +- data/imagenet-r/n07697313/art_34.jpg +- data/imagenet-r/n02134084/misc_73.jpg +- data/imagenet-r/n02481823/sketch_20.jpg +- data/imagenet-r/n01944390/misc_132.jpg +- data/imagenet-r/n02085620/misc_31.jpg +- data/imagenet-r/n01632777/toy_19.jpg +- data/imagenet-r/n02906734/graphic_0.jpg +- data/imagenet-r/n01614925/painting_23.jpg +- data/imagenet-r/n02317335/tattoo_12.jpg +- data/imagenet-r/n02268443/sketch_13.jpg +- data/imagenet-r/n02110958/graphic_2.jpg +- data/imagenet-r/n02391049/misc_114.jpg +- data/imagenet-r/n02797295/misc_48.jpg +- data/imagenet-r/n01644373/deviantart_26.jpg +- data/imagenet-r/n01630670/sculpture_0.jpg +- data/imagenet-r/n01843383/misc_1.jpg +- data/imagenet-r/n07614500/toy_12.jpg +- data/imagenet-r/n01986214/origami_1.jpg +- data/imagenet-r/n02526121/sculpture_12.jpg +- data/imagenet-r/n07753275/videogame_21.jpg +- data/imagenet-r/n02814860/embroidery_1.jpg +- data/imagenet-r/n01843383/cartoon_5.jpg +- data/imagenet-r/n04146614/cartoon_5.jpg +- data/imagenet-r/n01514859/deviantart_17.jpg +- data/imagenet-r/n01518878/sketch_12.jpg +- data/imagenet-r/n02129165/tattoo_33.jpg +- data/imagenet-r/n01843383/videogame_2.jpg +- data/imagenet-r/n04141076/art_13.jpg +- data/imagenet-r/n01770393/cartoon_22.jpg +- data/imagenet-r/n02233338/tattoo_8.jpg +- data/imagenet-r/n03930630/painting_3.jpg +- data/imagenet-r/n07745940/embroidery_30.jpg +- data/imagenet-r/n02607072/misc_32.jpg +- data/imagenet-r/n02966193/painting_7.jpg +- data/imagenet-r/n01614925/tattoo_10.jpg +- data/imagenet-r/n02279972/painting_20.jpg +- data/imagenet-r/n04086273/deviantart_10.jpg +- data/imagenet-r/n03630383/sculpture_0.jpg +- data/imagenet-r/n02749479/misc_4.jpg +- data/imagenet-r/n02129165/deviantart_20.jpg +- data/imagenet-r/n02130308/origami_0.jpg +- data/imagenet-r/n01443537/cartoon_20.jpg +- data/imagenet-r/n03495258/painting_9.jpg +- data/imagenet-r/n04275548/sketch_1.jpg +- data/imagenet-r/n02138441/graffiti_4.jpg +- data/imagenet-r/n03272010/tattoo_8.jpg +- data/imagenet-r/n10565667/deviantart_15.jpg +- data/imagenet-r/n02883205/cartoon_7.jpg +- data/imagenet-r/n02206856/painting_8.jpg +- data/imagenet-r/n04133789/cartoon_8.jpg +- data/imagenet-r/n03481172/misc_5.jpg +- data/imagenet-r/n02117135/sketch_8.jpg +- data/imagenet-r/n01443537/sculpture_2.jpg +- data/imagenet-r/n02190166/misc_0.jpg +- data/imagenet-r/n02841315/cartoon_8.jpg +- data/imagenet-r/n02906734/misc_11.jpg +- data/imagenet-r/n02110341/misc_8.jpg +- data/imagenet-r/n02098286/misc_1.jpg +- data/imagenet-r/n03467068/cartoon_8.jpg +- data/imagenet-r/n02445715/videogame_0.jpg +- data/imagenet-r/n02749479/misc_23.jpg +- data/imagenet-r/n07749582/painting_51.jpg +- data/imagenet-r/n02085620/sketch_10.jpg +- data/imagenet-r/n04409515/cartoon_12.jpg +- data/imagenet-r/n04147183/sketch_7.jpg +- data/imagenet-r/n02138441/painting_7.jpg +- data/imagenet-r/n02206856/sketch_14.jpg +- data/imagenet-r/n02206856/toy_42.jpg +- data/imagenet-r/n01910747/sticker_3.jpg +- data/imagenet-r/n02843684/sticker_1.jpg +- data/imagenet-r/n01632777/cartoon_30.jpg +- data/imagenet-r/n02410509/origami_4.jpg +- data/imagenet-r/n02483362/sculpture_1.jpg +- data/imagenet-r/n02268443/misc_69.jpg +- data/imagenet-r/n03481172/cartoon_1.jpg +- data/imagenet-r/n02129165/tattoo_17.jpg +- data/imagenet-r/n02206856/graffiti_17.jpg +- data/imagenet-r/n02128757/sketch_18.jpg +- data/imagenet-r/n02939185/tattoo_11.jpg +- data/imagenet-r/n02480855/graffiti_5.jpg +- data/imagenet-r/n02088364/misc_5.jpg +- data/imagenet-r/n01531178/cartoon_15.jpg +- data/imagenet-r/n02391049/misc_26.jpg +- data/imagenet-r/n01443537/embroidery_9.jpg +- data/imagenet-r/n02802426/misc_1.jpg +- data/imagenet-r/n07697313/sketch_21.jpg +- data/imagenet-r/n04254680/videogame_23.jpg +- data/imagenet-r/n01910747/embroidery_18.jpg +- data/imagenet-r/n02410509/misc_1.jpg +- data/imagenet-r/n04310018/misc_10.jpg +- data/imagenet-r/n07697537/misc_32.jpg +- data/imagenet-r/n02445715/graffiti_12.jpg +- data/imagenet-r/n09835506/misc_12.jpg +- data/imagenet-r/n02113799/sketch_20.jpg +- data/imagenet-r/n02134084/misc_93.jpg +- data/imagenet-r/n04147183/painting_3.jpg +- data/imagenet-r/n02206856/cartoon_53.jpg +- data/imagenet-r/n02129604/tattoo_5.jpg +- data/imagenet-r/n01644373/painting_33.jpg +- data/imagenet-r/n07614500/tattoo_4.jpg +- data/imagenet-r/n02226429/graphic_0.jpg +- data/imagenet-r/n01494475/misc_34.jpg +- data/imagenet-r/n02391049/misc_126.jpg +- data/imagenet-r/n01944390/sketch_5.jpg +- data/imagenet-r/n02398521/tattoo_5.jpg +- data/imagenet-r/n02607072/misc_81.jpg +- data/imagenet-r/n02939185/sketch_1.jpg +- data/imagenet-r/n02106550/misc_43.jpg +- data/imagenet-r/n02130308/graphic_4.jpg +- data/imagenet-r/n04409515/cartoon_22.jpg +- data/imagenet-r/n02088094/misc_24.jpg +- data/imagenet-r/n02088094/misc_28.jpg +- data/imagenet-r/n02206856/origami_8.jpg +- data/imagenet-r/n02398521/painting_1.jpg +- data/imagenet-r/n01644373/sketch_5.jpg +- data/imagenet-r/n03710193/misc_22.jpg +- data/imagenet-r/n07614500/embroidery_6.jpg +- data/imagenet-r/n02091032/sketch_23.jpg +- data/imagenet-r/n02219486/toy_1.jpg +- data/imagenet-r/n09835506/deviantart_41.jpg +- data/imagenet-r/n07753592/misc_166.jpg +- data/imagenet-r/n01630670/art_5.jpg +- data/imagenet-r/n01632777/deviantart_0.jpg +- data/imagenet-r/n04275548/misc_12.jpg +- data/imagenet-r/n03888257/cartoon_29.jpg +- data/imagenet-r/n02268443/misc_120.jpg +- data/imagenet-r/n04310018/art_20.jpg +- data/imagenet-r/n01514859/deviantart_13.jpg +- data/imagenet-r/n02672831/cartoon_23.jpg +- data/imagenet-r/n04133789/sketch_7.jpg +- data/imagenet-r/n01843383/deviantart_54.jpg +- data/imagenet-r/n02110958/cartoon_26.jpg +- data/imagenet-r/n07873807/deviantart_30.jpg +- data/imagenet-r/n02655020/deviantart_15.jpg +- data/imagenet-r/n02808440/sculpture_3.jpg +- data/imagenet-r/n03124170/misc_1.jpg +- data/imagenet-r/n07697537/misc_118.jpg +- data/imagenet-r/n04347754/art_0.jpg +- data/imagenet-r/n02129604/embroidery_3.jpg +- data/imagenet-r/n01534433/art_4.jpg +- data/imagenet-r/n01644373/tattoo_33.jpg +- data/imagenet-r/n07614500/embroidery_11.jpg +- data/imagenet-r/n01614925/tattoo_39.jpg +- data/imagenet-r/n01484850/videogame_6.jpg +- data/imagenet-r/n03481172/cartoon_29.jpg +- data/imagenet-r/n02992529/sketch_16.jpg +- data/imagenet-r/n03630383/sketch_18.jpg +- data/imagenet-r/n09472597/cartoon_1.jpg +- data/imagenet-r/n02410509/cartoon_27.jpg +- data/imagenet-r/n07734744/painting_6.jpg +- data/imagenet-r/n04266014/videogame_11.jpg +- data/imagenet-r/n02206856/misc_0.jpg +- data/imagenet-r/n04389033/cartoon_6.jpg +- data/imagenet-r/n02802426/deviantart_1.jpg +- data/imagenet-r/n01531178/painting_50.jpg +- data/imagenet-r/n02088094/misc_36.jpg +- data/imagenet-r/n02129165/cartoon_22.jpg +- data/imagenet-r/n02102318/painting_0.jpg +- data/imagenet-r/n02110341/misc_42.jpg +- data/imagenet-r/n02483362/sketch_17.jpg +- data/imagenet-r/n07880968/deviantart_11.jpg +- data/imagenet-r/n07697537/videogame_8.jpg +- data/imagenet-r/n03124170/painting_10.jpg +- data/imagenet-r/n02510455/misc_139.jpg +- data/imagenet-r/n01944390/misc_140.jpg +- data/imagenet-r/n01843383/deviantart_32.jpg +- data/imagenet-r/n02206856/misc_10.jpg +- data/imagenet-r/n07768694/deviantart_18.jpg +- data/imagenet-r/n02948072/toy_5.jpg +- data/imagenet-r/n02134084/misc_13.jpg +- data/imagenet-r/n01498041/origami_1.jpg +- data/imagenet-r/n02206856/misc_15.jpg +- data/imagenet-r/n02966193/sketch_6.jpg +- data/imagenet-r/n02279972/art_13.jpg +- data/imagenet-r/n01531178/painting_37.jpg +- data/imagenet-r/n04141076/painting_21.jpg +- data/imagenet-r/n02110958/painting_27.jpg +- data/imagenet-r/n02088238/misc_24.jpg +- data/imagenet-r/n02948072/cartoon_77.jpg +- data/imagenet-r/n02883205/sculpture_3.jpg +- data/imagenet-r/n01833805/tattoo_104.jpg +- data/imagenet-r/n02363005/sketch_6.jpg +- data/imagenet-r/n03124170/toy_4.jpg +- data/imagenet-r/n02071294/toy_8.jpg +- data/imagenet-r/n02966193/painting_2.jpg +- data/imagenet-r/n03481172/sticker_4.jpg +- data/imagenet-r/n07697313/art_10.jpg +- data/imagenet-r/n02088466/sketch_2.jpg +- data/imagenet-r/n01860187/cartoon_2.jpg +- data/imagenet-r/n02701002/sculpture_1.jpg +- data/imagenet-r/n02980441/videogame_3.jpg +- data/imagenet-r/n02099712/sketch_14.jpg +- data/imagenet-r/n01882714/sculpture_14.jpg +- data/imagenet-r/n01843383/graffiti_1.jpg +- data/imagenet-r/n03124170/cartoon_40.jpg +- data/imagenet-r/n02410509/cartoon_13.jpg +- data/imagenet-r/n02106662/misc_53.jpg +- data/imagenet-r/n02129165/cartoon_10.jpg +- data/imagenet-r/n01843383/toy_6.jpg +- data/imagenet-r/n07749582/sculpture_1.jpg +- data/imagenet-r/n02130308/tattoo_8.jpg +- data/imagenet-r/n02096585/tattoo_4.jpg +- data/imagenet-r/n03272010/deviantart_5.jpg +- data/imagenet-r/n02138441/cartoon_13.jpg +- data/imagenet-r/n02106030/sketch_16.jpg +- data/imagenet-r/n02094433/sketch_22.jpg +- data/imagenet-r/n02356798/cartoon_4.jpg +- data/imagenet-r/n02108915/misc_72.jpg +- data/imagenet-r/n03124170/cartoon_5.jpg +- data/imagenet-r/n02106030/sculpture_1.jpg +- data/imagenet-r/n07614500/toy_11.jpg +- data/imagenet-r/n04266014/videogame_35.jpg +- data/imagenet-r/n02206856/art_18.jpg +- data/imagenet-r/n04275548/sketch_14.jpg +- data/imagenet-r/n12267677/misc_51.jpg +- data/imagenet-r/n02051845/deviantart_10.jpg +- data/imagenet-r/n07753275/sticker_0.jpg +- data/imagenet-r/n02130308/sketch_3.jpg +- data/imagenet-r/n04146614/toy_14.jpg +- data/imagenet-r/n02096585/tattoo_5.jpg +- data/imagenet-r/n02138441/misc_3.jpg +- data/imagenet-r/n02823750/cartoon_16.jpg +- data/imagenet-r/n01484850/cartoon_8.jpg +- data/imagenet-r/n02906734/toy_1.jpg +- data/imagenet-r/n02481823/cartoon_3.jpg +- data/imagenet-r/n03372029/cartoon_4.jpg +- data/imagenet-r/n01748264/tattoo_42.jpg +- data/imagenet-r/n04465501/tattoo_4.jpg +- data/imagenet-r/n02410509/sculpture_2.jpg +- data/imagenet-r/n04141076/toy_2.jpg +- data/imagenet-r/n02395406/art_3.jpg +- data/imagenet-r/n01860187/art_1.jpg +- data/imagenet-r/n01494475/misc_4.jpg +- data/imagenet-r/n02363005/videogame_2.jpg +- data/imagenet-r/n04552348/videogame_6.jpg +- data/imagenet-r/n02445715/sketch_18.jpg +- data/imagenet-r/n02056570/sketch_11.jpg +- data/imagenet-r/n02909870/painting_1.jpg +- data/imagenet-r/n02814860/cartoon_36.jpg +- data/imagenet-r/n02883205/art_8.jpg +- data/imagenet-r/n01644373/sketch_17.jpg +- data/imagenet-r/n02395406/sculpture_1.jpg +- data/imagenet-r/n02088238/misc_54.jpg +- data/imagenet-r/n07873807/graphic_0.jpg +- data/imagenet-r/n03481172/toy_19.jpg +- data/imagenet-r/n03930630/cartoon_17.jpg +- data/imagenet-r/n02117135/videogame_6.jpg +- data/imagenet-r/n04266014/misc_1.jpg +- data/imagenet-r/n02123045/toy_0.jpg +- data/imagenet-r/n02129165/cartoon_4.jpg +- data/imagenet-r/n07614500/art_7.jpg +- data/imagenet-r/n02823750/cartoon_12.jpg +- data/imagenet-r/n01748264/deviantart_12.jpg +- data/imagenet-r/n02129165/tattoo_51.jpg +- data/imagenet-r/n02268443/misc_62.jpg +- data/imagenet-r/n04118538/sketch_0.jpg +- data/imagenet-r/n01910747/cartoon_4.jpg +- data/imagenet-r/n02088238/misc_76.jpg +- data/imagenet-r/n02236044/cartoon_13.jpg +- data/imagenet-r/n03498962/art_2.jpg +- data/imagenet-r/n02481823/painting_30.jpg +- data/imagenet-r/n02701002/sticker_2.jpg +- data/imagenet-r/n02088094/misc_54.jpg +- data/imagenet-r/n02206856/toy_18.jpg +- data/imagenet-r/n07697537/misc_49.jpg +- data/imagenet-r/n07734744/toy_41.jpg +- data/imagenet-r/n04141076/sticker_0.jpg +- data/imagenet-r/n03424325/videogame_11.jpg +- data/imagenet-r/n02268443/misc_40.jpg +- data/imagenet-r/n04141076/embroidery_0.jpg +- data/imagenet-r/n02447366/toy_3.jpg +- data/imagenet-r/n04487394/cartoon_32.jpg +- data/imagenet-r/n02526121/cartoon_30.jpg +- data/imagenet-r/n03495258/tattoo_11.jpg +- data/imagenet-r/n02814860/painting_45.jpg +- data/imagenet-r/n01833805/tattoo_68.jpg +- data/imagenet-r/n02268443/misc_51.jpg +- data/imagenet-r/n01774750/sketch_12.jpg +- data/imagenet-r/n01986214/deviantart_7.jpg +- data/imagenet-r/n02445715/cartoon_38.jpg +- data/imagenet-r/n03498962/cartoon_8.jpg +- data/imagenet-r/n02481823/deviantart_14.jpg +- data/imagenet-r/n02071294/sketch_14.jpg +- data/imagenet-r/n02099712/misc_34.jpg +- data/imagenet-r/n02099712/misc_50.jpg +- data/imagenet-r/n01484850/sketch_9.jpg +- data/imagenet-r/n02007558/cartoon_18.jpg +- data/imagenet-r/n01882714/cartoon_22.jpg +- data/imagenet-r/n02939185/misc_0.jpg +- data/imagenet-r/n02395406/misc_3.jpg +- data/imagenet-r/n02236044/cartoon_25.jpg +- data/imagenet-r/n07697537/misc_44.jpg +- data/imagenet-r/n02106550/misc_50.jpg +- data/imagenet-r/n04347754/misc_6.jpg +- data/imagenet-r/n07693725/cartoon_15.jpg +- data/imagenet-r/n03710193/misc_49.jpg +- data/imagenet-r/n02445715/cartoon_8.jpg +- data/imagenet-r/n01882714/sculpture_3.jpg +- data/imagenet-r/n07697313/deviantart_38.jpg +- data/imagenet-r/n04325704/cartoon_19.jpg +- data/imagenet-r/n02085620/misc_9.jpg +- data/imagenet-r/n07873807/sketch_3.jpg +- data/imagenet-r/n02447366/sticker_2.jpg +- data/imagenet-r/n02092339/misc_15.jpg +- data/imagenet-r/n04086273/cartoon_16.jpg +- data/imagenet-r/n07714571/painting_17.jpg +- data/imagenet-r/n04310018/sketch_18.jpg +- data/imagenet-r/n02110958/tattoo_16.jpg +- data/imagenet-r/n01882714/sketch_24.jpg +- data/imagenet-r/n07697313/cartoon_34.jpg +- data/imagenet-r/n02134084/misc_141.jpg +- data/imagenet-r/n02099601/misc_2.jpg +- data/imagenet-r/n02410509/toy_13.jpg +- data/imagenet-r/n03630383/toy_1.jpg +- data/imagenet-r/n02966193/toy_2.jpg +- data/imagenet-r/n02391049/misc_56.jpg +- data/imagenet-r/n02363005/tattoo_4.jpg +- data/imagenet-r/n01833805/deviantart_2.jpg +- data/imagenet-r/n02268443/misc_17.jpg +- data/imagenet-r/n02909870/art_5.jpg +- data/imagenet-r/n02802426/cartoon_12.jpg +- data/imagenet-r/n03272010/toy_2.jpg +- data/imagenet-r/n04141076/cartoon_30.jpg +- data/imagenet-r/n02395406/painting_16.jpg +- data/imagenet-r/n03888257/art_0.jpg +- data/imagenet-r/n01677366/deviantart_3.jpg +- data/imagenet-r/n02130308/sketch_19.jpg +- data/imagenet-r/n01498041/cartoon_18.jpg +- data/imagenet-r/n01514859/cartoon_9.jpg +- data/imagenet-r/n03775071/sketch_3.jpg +- data/imagenet-r/n02363005/sculpture_0.jpg +- data/imagenet-r/n02091134/misc_83.jpg +- data/imagenet-r/n02437616/deviantart_0.jpg +- data/imagenet-r/n02056570/art_4.jpg +- data/imagenet-r/n02099601/misc_36.jpg +- data/imagenet-r/n03481172/art_4.jpg +- data/imagenet-r/n02096585/misc_10.jpg +- data/imagenet-r/n01843383/videogame_10.jpg +- data/imagenet-r/n04266014/painting_6.jpg +- data/imagenet-r/n04141076/sculpture_23.jpg +- data/imagenet-r/n01882714/deviantart_30.jpg +- data/imagenet-r/n02077923/misc_4.jpg +- data/imagenet-r/n01514859/sticker_2.jpg +- data/imagenet-r/n02106550/misc_18.jpg +- data/imagenet-r/n01910747/painting_29.jpg +- data/imagenet-r/n02749479/misc_34.jpg +- data/imagenet-r/n02110185/painting_0.jpg +- data/imagenet-r/n07749582/embroidery_7.jpg +- data/imagenet-r/n04141076/sketch_0.jpg +- data/imagenet-r/n02123045/misc_0.jpg +- data/imagenet-r/n02129165/toy_9.jpg +- data/imagenet-r/n07714571/sketch_7.jpg +- data/imagenet-r/n02098286/sketch_20.jpg +- data/imagenet-r/n02607072/misc_14.jpg +- data/imagenet-r/n03494278/painting_5.jpg +- data/imagenet-r/n02483362/art_4.jpg +- data/imagenet-r/n12267677/misc_52.jpg +- data/imagenet-r/n07693725/art_0.jpg +- data/imagenet-r/n02134084/misc_137.jpg +- data/imagenet-r/n04254680/sketch_18.jpg +- data/imagenet-r/n07714571/sketch_23.jpg +- data/imagenet-r/n04192698/art_7.jpg +- data/imagenet-r/n02106166/art_2.jpg +- data/imagenet-r/n04389033/videogame_32.jpg +- data/imagenet-r/n02206856/graffiti_10.jpg +- data/imagenet-r/n02130308/painting_2.jpg +- data/imagenet-r/n07714990/sketch_17.jpg +- data/imagenet-r/n03481172/videogame_4.jpg +- data/imagenet-r/n03272010/cartoon_8.jpg +- data/imagenet-r/n07720875/sketch_14.jpg +- data/imagenet-r/n02106166/misc_14.jpg +- data/imagenet-r/n07920052/deviantart_8.jpg +- data/imagenet-r/n01843383/tattoo_8.jpg +- data/imagenet-r/n02948072/cartoon_16.jpg +- data/imagenet-r/n01944390/misc_163.jpg +- data/imagenet-r/n03481172/toy_17.jpg +- data/imagenet-r/n04347754/art_4.jpg +- data/imagenet-r/n02749479/painting_0.jpg +- data/imagenet-r/n02108089/misc_13.jpg +- data/imagenet-r/n02655020/misc_76.jpg +- data/imagenet-r/n02808440/sketch_2.jpg +- data/imagenet-r/n01944390/misc_32.jpg +- data/imagenet-r/n01770393/graffiti_3.jpg +- data/imagenet-r/n02114367/misc_44.jpg +- data/imagenet-r/n07734744/sticker_1.jpg +- data/imagenet-r/n02165456/toy_12.jpg +- data/imagenet-r/n01630670/art_8.jpg +- data/imagenet-r/n04409515/sketch_8.jpg +- data/imagenet-r/n10565667/videogame_4.jpg +- data/imagenet-r/n02129604/graphic_4.jpg +- data/imagenet-r/n02607072/misc_62.jpg +- data/imagenet-r/n02909870/sketch_18.jpg +- data/imagenet-r/n02130308/painting_35.jpg +- data/imagenet-r/n01614925/sketch_13.jpg +- data/imagenet-r/n02391049/misc_61.jpg +- data/imagenet-r/n01843383/art_22.jpg +- data/imagenet-r/n07697313/toy_9.jpg +- data/imagenet-r/n09835506/sketch_14.jpg +- data/imagenet-r/n04552348/sticker_1.jpg +- data/imagenet-r/n02410509/sculpture_6.jpg +- data/imagenet-r/n07714571/painting_11.jpg +- data/imagenet-r/n02129604/deviantart_19.jpg +- data/imagenet-r/n02906734/cartoon_1.jpg +- data/imagenet-r/n02423022/cartoon_17.jpg +- data/imagenet-r/n01944390/misc_8.jpg +- data/imagenet-r/n02346627/cartoon_5.jpg +- data/imagenet-r/n04325704/art_3.jpg +- data/imagenet-r/n07734744/cartoon_20.jpg +- data/imagenet-r/n02268443/misc_141.jpg +- data/imagenet-r/n01694178/cartoon_22.jpg +- data/imagenet-r/n01514859/painting_10.jpg +- data/imagenet-r/n02165456/tattoo_31.jpg +- data/imagenet-r/n12267677/misc_28.jpg +- data/imagenet-r/n02128757/cartoon_4.jpg +- data/imagenet-r/n02219486/sketch_6.jpg +- data/imagenet-r/n04325704/cartoon_11.jpg +- data/imagenet-r/n07768694/embroidery_0.jpg +- data/imagenet-r/n01484850/sketch_0.jpg +- data/imagenet-r/n02607072/misc_115.jpg +- data/imagenet-r/n09835506/videogame_15.jpg +- data/imagenet-r/n04310018/deviantart_13.jpg +- data/imagenet-r/n01833805/tattoo_88.jpg +- data/imagenet-r/n02445715/cartoon_19.jpg +- data/imagenet-r/n04133789/art_7.jpg +- data/imagenet-r/n02481823/cartoon_5.jpg +- data/imagenet-r/n02607072/deviantart_15.jpg +- data/imagenet-r/n02445715/cartoon_39.jpg +- data/imagenet-r/n04086273/videogame_6.jpg +- data/imagenet-r/n02410509/painting_19.jpg +- data/imagenet-r/n02823750/painting_5.jpg +- data/imagenet-r/n02480495/misc_1.jpg +- data/imagenet-r/n04254680/toy_0.jpg +- data/imagenet-r/n04118538/cartoon_13.jpg +- data/imagenet-r/n02129604/sketch_10.jpg +- data/imagenet-r/n07753275/art_3.jpg +- data/imagenet-r/n01882714/deviantart_54.jpg +- data/imagenet-r/n01498041/cartoon_7.jpg +- data/imagenet-r/n02701002/cartoon_5.jpg +- data/imagenet-r/n02447366/embroidery_0.jpg +- data/imagenet-r/n04086273/painting_7.jpg +- data/imagenet-r/n02797295/misc_80.jpg +- data/imagenet-r/n03124170/painting_19.jpg +- data/imagenet-r/n01983481/misc_41.jpg +- data/imagenet-r/n03494278/cartoon_2.jpg +- data/imagenet-r/n01614925/art_8.jpg +- data/imagenet-r/n04275548/embroidery_8.jpg +- data/imagenet-r/n04325704/cartoon_31.jpg +- data/imagenet-r/n01494475/misc_124.jpg +- data/imagenet-r/n02071294/tattoo_2.jpg +- data/imagenet-r/n04325704/cartoon_9.jpg +- data/imagenet-r/n02447366/misc_6.jpg +- data/imagenet-r/n02096585/misc_20.jpg +- data/imagenet-r/n04522168/art_6.jpg +- data/imagenet-r/n09472597/toy_7.jpg +- data/imagenet-r/n04086273/sticker_1.jpg +- data/imagenet-r/n02129604/tattoo_31.jpg +- data/imagenet-r/n02134084/misc_47.jpg +- data/imagenet-r/n01632777/art_7.jpg +- data/imagenet-r/n09835506/deviantart_38.jpg +- data/imagenet-r/n02939185/tattoo_2.jpg +- data/imagenet-r/n04487394/cartoon_18.jpg +- data/imagenet-r/n02102318/sketch_14.jpg +- data/imagenet-r/n02106166/painting_16.jpg +- data/imagenet-r/n02814860/cartoon_8.jpg +- data/imagenet-r/n02206856/painting_15.jpg +- data/imagenet-r/n01910747/tattoo_88.jpg +- data/imagenet-r/n01677366/deviantart_16.jpg +- data/imagenet-r/n01944390/tattoo_1.jpg +- data/imagenet-r/n02110185/painting_28.jpg +- data/imagenet-r/n02190166/sculpture_5.jpg +- data/imagenet-r/n02391049/misc_99.jpg +- data/imagenet-r/n02088364/misc_37.jpg +- data/imagenet-r/n02098286/sketch_2.jpg +- data/imagenet-r/n02114367/sketch_6.jpg +- data/imagenet-r/n04465501/toy_11.jpg +- data/imagenet-r/n02077923/sketch_0.jpg +- data/imagenet-r/n03481172/misc_3.jpg +- data/imagenet-r/n02364673/art_5.jpg +- data/imagenet-r/n02123045/sketch_17.jpg +- data/imagenet-r/n02437616/cartoon_21.jpg +- data/imagenet-r/n01847000/toy_18.jpg +- data/imagenet-r/n02110958/misc_0.jpg +- data/imagenet-r/n03467068/sketch_5.jpg +- data/imagenet-r/n01616318/tattoo_22.jpg +- data/imagenet-r/n02279972/tattoo_6.jpg +- data/imagenet-r/n02233338/tattoo_6.jpg +- data/imagenet-r/n03345487/sketch_18.jpg +- data/imagenet-r/n02129165/sticker_9.jpg +- data/imagenet-r/n02066245/toy_3.jpg +- data/imagenet-r/n07697537/sketch_0.jpg +- data/imagenet-r/n01944390/tattoo_39.jpg +- data/imagenet-r/n01843383/deviantart_71.jpg +- data/imagenet-r/n03773504/graphic_8.jpg +- data/imagenet-r/n02325366/misc_4.jpg +- data/imagenet-r/n03630383/sketch_12.jpg +- data/imagenet-r/n07734744/graffiti_10.jpg +- data/imagenet-r/n02190166/sticker_8.jpg +- data/imagenet-r/n02130308/cartoon_20.jpg +- data/imagenet-r/n02009912/misc_10.jpg +- data/imagenet-r/n02802426/sketch_14.jpg +- data/imagenet-r/n02007558/embroidery_16.jpg +- data/imagenet-r/n02233338/deviantart_2.jpg +- data/imagenet-r/n02130308/painting_25.jpg +- data/imagenet-r/n03773504/sketch_16.jpg +- data/imagenet-r/n04133789/videogame_3.jpg +- data/imagenet-r/n02134084/tattoo_15.jpg +- data/imagenet-r/n01498041/sketch_14.jpg +- data/imagenet-r/n02102318/misc_24.jpg +- data/imagenet-r/n01774750/misc_3.jpg +- data/imagenet-r/n02219486/painting_5.jpg +- data/imagenet-r/n01494475/misc_70.jpg +- data/imagenet-r/n03630383/sketch_3.jpg +- data/imagenet-r/n01498041/toy_1.jpg +- data/imagenet-r/n02363005/misc_5.jpg +- data/imagenet-r/n02007558/graffiti_6.jpg +- data/imagenet-r/n01677366/misc_5.jpg +- data/imagenet-r/n02088238/misc_14.jpg +- data/imagenet-r/n02814860/painting_6.jpg +- data/imagenet-r/n04141076/toy_1.jpg +- data/imagenet-r/n02129604/graffiti_4.jpg +- data/imagenet-r/n03372029/sculpture_23.jpg +- data/imagenet-r/n07734744/graffiti_13.jpg +- data/imagenet-r/n01632777/deviantart_23.jpg +- data/imagenet-r/n09835506/videogame_9.jpg +- data/imagenet-r/n04536866/deviantart_33.jpg +- data/imagenet-r/n04536866/videogame_1.jpg +- data/imagenet-r/n07697313/deviantart_37.jpg +- data/imagenet-r/n02510455/misc_55.jpg +- data/imagenet-r/n07745940/misc_14.jpg +- data/imagenet-r/n07697313/art_19.jpg +- data/imagenet-r/n01443537/misc_1.jpg +- data/imagenet-r/n02007558/cartoon_1.jpg +- data/imagenet-r/n07745940/graffiti_17.jpg +- data/imagenet-r/n04389033/origami_6.jpg +- data/imagenet-r/n02130308/graphic_5.jpg +- data/imagenet-r/n02226429/painting_2.jpg +- data/imagenet-r/n02110185/toy_1.jpg +- data/imagenet-r/n02445715/videogame_8.jpg +- data/imagenet-r/n01944390/misc_154.jpg +- data/imagenet-r/n07697313/painting_7.jpg +- data/imagenet-r/n02793495/painting_10.jpg +- data/imagenet-r/n01694178/sketch_8.jpg +- data/imagenet-r/n02447366/sketch_14.jpg +- data/imagenet-r/n01644373/cartoon_18.jpg +- data/imagenet-r/n04465501/misc_0.jpg +- data/imagenet-r/n07753592/misc_110.jpg +- data/imagenet-r/n07714571/sketch_16.jpg +- data/imagenet-r/n02106166/sketch_11.jpg +- data/imagenet-r/n04118538/videogame_6.jpg +- data/imagenet-r/n02123045/painting_1.jpg +- data/imagenet-r/n02114367/misc_51.jpg +- data/imagenet-r/n02110958/painting_10.jpg +- data/imagenet-r/n02190166/tattoo_2.jpg +- data/imagenet-r/n02165456/toy_8.jpg +- data/imagenet-r/n04389033/graffiti_2.jpg +- data/imagenet-r/n01632777/sketch_18.jpg +- data/imagenet-r/n02510455/misc_119.jpg +- data/imagenet-r/n02655020/misc_3.jpg +- data/imagenet-r/n02113624/sketch_8.jpg +- data/imagenet-r/n02268443/misc_75.jpg +- data/imagenet-r/n02701002/art_2.jpg +- data/imagenet-r/n04118538/sketch_12.jpg +- data/imagenet-r/n07697537/misc_26.jpg +- data/imagenet-r/n01833805/tattoo_74.jpg +- data/imagenet-r/n02701002/toy_4.jpg +- data/imagenet-r/n01443537/origami_1.jpg +- data/imagenet-r/n02206856/tattoo_20.jpg +- data/imagenet-r/n02110958/painting_7.jpg +- data/imagenet-r/n02939185/tattoo_4.jpg +- data/imagenet-r/n04522168/cartoon_5.jpg +- data/imagenet-r/n02206856/graffiti_27.jpg +- data/imagenet-r/n02749479/misc_2.jpg +- data/imagenet-r/n01910747/sculpture_10.jpg +- data/imagenet-r/n07749582/misc_1.jpg +- data/imagenet-r/n02395406/painting_10.jpg +- data/imagenet-r/n09835506/deviantart_11.jpg +- data/imagenet-r/n07753592/deviantart_0.jpg +- data/imagenet-r/n09835506/videogame_20.jpg +- data/imagenet-r/n02108915/misc_3.jpg +- data/imagenet-r/n02398521/sketch_3.jpg +- data/imagenet-r/n02096585/videogame_1.jpg +- data/imagenet-r/n04192698/deviantart_14.jpg +- data/imagenet-r/n02129604/tattoo_47.jpg +- data/imagenet-r/n01632777/misc_2.jpg +- data/imagenet-r/n02088466/misc_9.jpg +- data/imagenet-r/n02906734/misc_0.jpg +- data/imagenet-r/n03930630/deviantart_4.jpg +- data/imagenet-r/n02113799/misc_19.jpg +- data/imagenet-r/n02114367/sketch_10.jpg +- data/imagenet-r/n04146614/videogame_5.jpg +- data/imagenet-r/n01498041/sketch_5.jpg +- data/imagenet-r/n01806143/graffiti_1.jpg +- data/imagenet-r/n02051845/art_9.jpg +- data/imagenet-r/n02085620/sketch_3.jpg +- data/imagenet-r/n01944390/tattoo_41.jpg +- data/imagenet-r/n02226429/sculpture_14.jpg +- data/imagenet-r/n02749479/misc_21.jpg +- data/imagenet-r/n02317335/toy_2.jpg +- data/imagenet-r/n07734744/embroidery_8.jpg +- data/imagenet-r/n01833805/cartoon_21.jpg +- data/imagenet-r/n01986214/deviantart_1.jpg +- data/imagenet-r/n02883205/sketch_14.jpg +- data/imagenet-r/n02128757/cartoon_1.jpg +- data/imagenet-r/n02108915/tattoo_8.jpg +- data/imagenet-r/n07745940/deviantart_8.jpg +- data/imagenet-r/n02226429/misc_0.jpg +- data/imagenet-r/n01494475/misc_28.jpg +- data/imagenet-r/n01614925/painting_15.jpg +- data/imagenet-r/n02091134/misc_14.jpg +- data/imagenet-r/n07714990/graphic_2.jpg +- data/imagenet-r/n02206856/art_9.jpg +- data/imagenet-r/n02110958/graphic_4.jpg +- data/imagenet-r/n03272010/deviantart_7.jpg +- data/imagenet-r/n02802426/sticker_4.jpg +- data/imagenet-r/n02883205/sculpture_5.jpg +- data/imagenet-r/n01855672/deviantart_12.jpg +- data/imagenet-r/n02423022/sketch_13.jpg +- data/imagenet-r/n01677366/deviantart_12.jpg +- data/imagenet-r/n03124170/videogame_15.jpg +- data/imagenet-r/n02906734/graffiti_9.jpg +- data/imagenet-r/n07614500/origami_4.jpg +- data/imagenet-r/n02236044/cartoon_14.jpg +- data/imagenet-r/n03372029/cartoon_21.jpg +- data/imagenet-r/n01820546/art_10.jpg +- data/imagenet-r/n03481172/sculpture_8.jpg +- data/imagenet-r/n02797295/misc_1.jpg +- data/imagenet-r/n02980441/sculpture_0.jpg +- data/imagenet-r/n02268443/misc_144.jpg +- data/imagenet-r/n03498962/sketch_3.jpg +- data/imagenet-r/n02437616/sketch_12.jpg +- data/imagenet-r/n01534433/sketch_19.jpg +- data/imagenet-r/n04465501/misc_6.jpg +- data/imagenet-r/n02009912/misc_58.jpg +- data/imagenet-r/n03452741/toy_4.jpg +- data/imagenet-r/n02769748/cartoon_19.jpg +- data/imagenet-r/n01944390/misc_5.jpg +- data/imagenet-r/n09835506/tattoo_3.jpg +- data/imagenet-r/n01677366/deviantart_17.jpg +- data/imagenet-r/n01494475/sketch_13.jpg +- data/imagenet-r/n03345487/art_0.jpg +- data/imagenet-r/n01882714/painting_3.jpg +- data/imagenet-r/n01518878/origami_3.jpg +- data/imagenet-r/n07753275/cartoon_18.jpg +- data/imagenet-r/n02909870/art_4.jpg +- data/imagenet-r/n01514859/painting_9.jpg +- data/imagenet-r/n07745940/embroidery_4.jpg +- data/imagenet-r/n03495258/sketch_15.jpg +- data/imagenet-r/n04389033/art_3.jpg +- data/imagenet-r/n02480495/painting_16.jpg +- data/imagenet-r/n03498962/sketch_19.jpg +- data/imagenet-r/n04275548/sculpture_0.jpg +- data/imagenet-r/n02106030/painting_7.jpg +- data/imagenet-r/n07734744/cartoon_22.jpg +- data/imagenet-r/n01484850/videogame_1.jpg +- data/imagenet-r/n01983481/misc_21.jpg +- data/imagenet-r/n02123045/sketch_11.jpg +- data/imagenet-r/n03649909/sketch_8.jpg +- data/imagenet-r/n01833805/sculpture_12.jpg +- data/imagenet-r/n02114367/misc_26.jpg +- data/imagenet-r/n03481172/graffiti_5.jpg +- data/imagenet-r/n02096585/misc_25.jpg +- data/imagenet-r/n02206856/embroidery_19.jpg +- data/imagenet-r/n07734744/art_7.jpg +- data/imagenet-r/n02085620/misc_86.jpg +- data/imagenet-r/n04465501/videogame_9.jpg +- data/imagenet-r/n02364673/art_21.jpg +- data/imagenet-r/n02607072/misc_93.jpg +- data/imagenet-r/n02129604/tattoo_45.jpg +- data/imagenet-r/n04310018/cartoon_7.jpg +- data/imagenet-r/n02480855/tattoo_62.jpg +- data/imagenet-r/n07614500/origami_0.jpg +- data/imagenet-r/n02268443/misc_71.jpg +- data/imagenet-r/n02071294/art_7.jpg +- data/imagenet-r/n03345487/toy_17.jpg +- data/imagenet-r/n03495258/deviantart_1.jpg +- data/imagenet-r/n02909870/cartoon_2.jpg +- data/imagenet-r/n07714990/deviantart_18.jpg +- data/imagenet-r/n02948072/cartoon_73.jpg +- data/imagenet-r/n02325366/sketch_21.jpg +- data/imagenet-r/n01748264/misc_9.jpg +- data/imagenet-r/n02097298/misc_4.jpg +- data/imagenet-r/n01774750/deviantart_11.jpg +- data/imagenet-r/n01614925/art_3.jpg +- data/imagenet-r/n12267677/misc_107.jpg +- data/imagenet-r/n03272010/graffiti_0.jpg +- data/imagenet-r/n02113023/misc_11.jpg +- data/imagenet-r/n02099601/misc_55.jpg +- data/imagenet-r/n01847000/sketch_13.jpg +- data/imagenet-r/n01694178/cartoon_1.jpg +- data/imagenet-r/n02110185/misc_1.jpg +- data/imagenet-r/n01784675/videogame_0.jpg +- data/imagenet-r/n03630383/cartoon_14.jpg +- data/imagenet-r/n07720875/painting_4.jpg +- data/imagenet-r/n02206856/sticker_3.jpg +- data/imagenet-r/n04389033/origami_0.jpg +- data/imagenet-r/n03272010/deviantart_9.jpg +- data/imagenet-r/n02110341/misc_121.jpg +- data/imagenet-r/n02909870/embroidery_6.jpg +- data/imagenet-r/n03124170/misc_0.jpg +- data/imagenet-r/n01770393/painting_4.jpg +- data/imagenet-r/n02071294/misc_0.jpg +- data/imagenet-r/n02086240/misc_12.jpg +- data/imagenet-r/n03947888/toy_10.jpg +- data/imagenet-r/n03467068/sketch_19.jpg +- data/imagenet-r/n04141076/cartoon_6.jpg +- data/imagenet-r/n02655020/misc_0.jpg +- data/imagenet-r/n03452741/toy_3.jpg +- data/imagenet-r/n09835506/misc_8.jpg +- data/imagenet-r/n02236044/sketch_22.jpg +- data/imagenet-r/n02119022/misc_141.jpg +- data/imagenet-r/n04310018/misc_2.jpg +- data/imagenet-r/n01494475/misc_27.jpg +- data/imagenet-r/n02088364/misc_3.jpg +- data/imagenet-r/n04465501/misc_1.jpg +- data/imagenet-r/n02128757/cartoon_13.jpg +- data/imagenet-r/n01833805/embroidery_11.jpg +- data/imagenet-r/n01677366/misc_24.jpg +- data/imagenet-r/n03372029/sketch_19.jpg +- data/imagenet-r/n02128757/painting_25.jpg +- data/imagenet-r/n02317335/embroidery_3.jpg +- data/imagenet-r/n02268443/sketch_0.jpg +- data/imagenet-r/n02951358/embroidery_5.jpg +- data/imagenet-r/n02808440/sketch_25.jpg +- data/imagenet-r/n02939185/misc_13.jpg +- data/imagenet-r/n02134084/misc_79.jpg +- data/imagenet-r/n01774750/sketch_3.jpg +- data/imagenet-r/n07768694/deviantart_16.jpg +- data/imagenet-r/n04254680/videogame_31.jpg +- data/imagenet-r/n01833805/art_5.jpg +- data/imagenet-r/n02165456/art_1.jpg +- data/imagenet-r/n07714571/painting_19.jpg +- data/imagenet-r/n02480855/toy_10.jpg +- data/imagenet-r/n01806143/sketch_15.jpg +- data/imagenet-r/n04536866/cartoon_13.jpg +- data/imagenet-r/n01632777/cartoon_20.jpg +- data/imagenet-r/n07745940/art_6.jpg +- data/imagenet-r/n02108915/misc_30.jpg +- data/imagenet-r/n01644373/deviantart_16.jpg +- data/imagenet-r/n01843383/deviantart_47.jpg +- data/imagenet-r/n02410509/painting_20.jpg +- data/imagenet-r/n02007558/deviantart_4.jpg +- data/imagenet-r/n02395406/sticker_0.jpg +- data/imagenet-r/n02097298/misc_36.jpg +- data/imagenet-r/n02092339/sketch_9.jpg +- data/imagenet-r/n02102318/misc_46.jpg +- data/imagenet-r/n04254680/cartoon_4.jpg +- data/imagenet-r/n02317335/embroidery_8.jpg +- data/imagenet-r/n01494475/misc_75.jpg +- data/imagenet-r/n03888257/videogame_7.jpg +- data/imagenet-r/n01770393/tattoo_70.jpg +- data/imagenet-r/n04141076/sketch_19.jpg +- data/imagenet-r/n04552348/videogame_11.jpg +- data/imagenet-r/n01694178/art_13.jpg +- data/imagenet-r/n02279972/sculpture_2.jpg +- data/imagenet-r/n01986214/cartoon_6.jpg +- data/imagenet-r/n02655020/misc_7.jpg +- data/imagenet-r/n12267677/deviantart_25.jpg +- data/imagenet-r/n02110185/painting_9.jpg +- data/imagenet-r/n02108089/misc_10.jpg +- data/imagenet-r/n02802426/videogame_6.jpg +- data/imagenet-r/n02992529/sketch_24.jpg +- data/imagenet-r/n02391049/misc_76.jpg +- data/imagenet-r/n02364673/tattoo_0.jpg +- data/imagenet-r/n01843383/deviantart_59.jpg +- data/imagenet-r/n02423022/sketch_10.jpg +- data/imagenet-r/n07768694/tattoo_7.jpg +- data/imagenet-r/n02841315/art_9.jpg +- data/imagenet-r/n02447366/cartoon_9.jpg +- data/imagenet-r/n03594945/art_3.jpg +- data/imagenet-r/n01518878/deviantart_5.jpg +- data/imagenet-r/n12267677/sketch_11.jpg +- data/imagenet-r/n04147183/art_11.jpg +- data/imagenet-r/n02951358/misc_2.jpg +- data/imagenet-r/n02906734/sculpture_1.jpg +- data/imagenet-r/n04086273/art_6.jpg +- data/imagenet-r/n09835506/deviantart_13.jpg +- data/imagenet-r/n04133789/cartoon_18.jpg +- data/imagenet-r/n02445715/cartoon_24.jpg +- data/imagenet-r/n03272010/graphic_1.jpg +- data/imagenet-r/n03930630/cartoon_20.jpg +- data/imagenet-r/n02128385/painting_0.jpg +- data/imagenet-r/n02883205/painting_8.jpg +- data/imagenet-r/n02165456/painting_8.jpg +- data/imagenet-r/n02480495/art_10.jpg +- data/imagenet-r/n02410509/sculpture_35.jpg +- data/imagenet-r/n02206856/toy_29.jpg +- data/imagenet-r/n04522168/cartoon_8.jpg +- data/imagenet-r/n01784675/art_0.jpg +- data/imagenet-r/n03481172/graphic_2.jpg +- data/imagenet-r/n01514859/embroidery_11.jpg +- data/imagenet-r/n01910747/cartoon_18.jpg +- data/imagenet-r/n02395406/sketch_9.jpg +- data/imagenet-r/n02391049/tattoo_2.jpg +- data/imagenet-r/n02206856/sketch_7.jpg +- data/imagenet-r/n01843383/videogame_3.jpg +- data/imagenet-r/n01514859/toy_10.jpg +- data/imagenet-r/n01784675/origami_12.jpg +- data/imagenet-r/n02843684/misc_3.jpg +- data/imagenet-r/n01514859/sticker_0.jpg +- data/imagenet-r/n02056570/cartoon_7.jpg +- data/imagenet-r/n02346627/painting_14.jpg +- data/imagenet-r/n02097298/misc_52.jpg +- data/imagenet-r/n07749582/cartoon_4.jpg +- data/imagenet-r/n09472597/sketch_31.jpg +- data/imagenet-r/n02096585/misc_125.jpg +- data/imagenet-r/n04275548/art_1.jpg +- data/imagenet-r/n02317335/painting_3.jpg +- data/imagenet-r/n02091032/sketch_12.jpg +- data/imagenet-r/n01882714/toy_8.jpg +- data/imagenet-r/n01770393/origami_0.jpg +- data/imagenet-r/n02165456/sculpture_5.jpg +- data/imagenet-r/n02480855/tattoo_10.jpg +- data/imagenet-r/n04118538/cartoon_22.jpg +- data/imagenet-r/n02526121/misc_2.jpg +- data/imagenet-r/n02951358/videogame_7.jpg +- data/imagenet-r/n07720875/painting_9.jpg +- data/imagenet-r/n02939185/sketch_21.jpg +- data/imagenet-r/n04141076/deviantart_14.jpg +- data/imagenet-r/n02088094/misc_19.jpg +- data/imagenet-r/n02138441/painting_40.jpg +- data/imagenet-r/n01986214/sketch_2.jpg +- data/imagenet-r/n01677366/videogame_0.jpg +- data/imagenet-r/n07614500/sculpture_0.jpg +- data/imagenet-r/n07734744/cartoon_16.jpg +- data/imagenet-r/n07697313/deviantart_41.jpg +- data/imagenet-r/n01944390/misc_3.jpg +- data/imagenet-r/n03888257/cartoon_35.jpg +- data/imagenet-r/n02110341/sketch_4.jpg +- data/imagenet-r/n02165456/sculpture_11.jpg +- data/imagenet-r/n02056570/misc_1.jpg +- data/imagenet-r/n01847000/sketch_5.jpg +- data/imagenet-r/n02102318/misc_19.jpg +- data/imagenet-r/n02481823/cartoon_14.jpg +- data/imagenet-r/n01514859/deviantart_7.jpg +- data/imagenet-r/n04275548/sketch_9.jpg +- data/imagenet-r/n07768694/sketch_17.jpg +- data/imagenet-r/n01774750/sculpture_3.jpg +- data/imagenet-r/n02129165/toy_24.jpg +- data/imagenet-r/n07614500/videogame_0.jpg +- data/imagenet-r/n07734744/toy_30.jpg +- data/imagenet-r/n02391049/misc_132.jpg +- data/imagenet-r/n07749582/sketch_10.jpg +- data/imagenet-r/n04389033/graffiti_10.jpg +- data/imagenet-r/n02110341/misc_157.jpg +- data/imagenet-r/n07745940/painting_8.jpg +- data/imagenet-r/n02769748/cartoon_1.jpg +- data/imagenet-r/n01986214/deviantart_18.jpg +- data/imagenet-r/n04254680/sketch_17.jpg +- data/imagenet-r/n01514859/sketch_19.jpg +- data/imagenet-r/n02423022/cartoon_9.jpg +- data/imagenet-r/n03452741/toy_7.jpg +- data/imagenet-r/n02128757/sketch_9.jpg +- data/imagenet-r/n04310018/deviantart_0.jpg +- data/imagenet-r/n02802426/toy_2.jpg +- data/imagenet-r/n01986214/toy_0.jpg +- data/imagenet-r/n07920052/cartoon_5.jpg +- data/imagenet-r/n07714571/painting_23.jpg +- data/imagenet-r/n02398521/sketch_16.jpg +- data/imagenet-r/n02102318/embroidery_1.jpg +- data/imagenet-r/n01514859/toy_7.jpg +- data/imagenet-r/n02939185/sketch_3.jpg +- data/imagenet-r/n01774750/tattoo_14.jpg +- data/imagenet-r/n04266014/toy_10.jpg +- data/imagenet-r/n02088238/tattoo_2.jpg +- data/imagenet-r/n01443537/cartoon_7.jpg +- data/imagenet-r/n02129165/tattoo_56.jpg +- data/imagenet-r/n02112018/misc_9.jpg +- data/imagenet-r/n03676483/cartoon_22.jpg +- data/imagenet-r/n01694178/deviantart_8.jpg +- data/imagenet-r/n02480855/tattoo_57.jpg +- data/imagenet-r/n02437616/cartoon_15.jpg +- data/imagenet-r/n02051845/art_12.jpg +- data/imagenet-r/n02123045/cartoon_15.jpg +- data/imagenet-r/n02410509/sketch_3.jpg +- data/imagenet-r/n02939185/deviantart_9.jpg +- data/imagenet-r/n07749582/sketch_8.jpg +- data/imagenet-r/n02096585/misc_170.jpg +- data/imagenet-r/n07697313/deviantart_32.jpg +- data/imagenet-r/n01514859/painting_39.jpg +- data/imagenet-r/n02808440/art_6.jpg +- data/imagenet-r/n02480855/tattoo_5.jpg +- data/imagenet-r/n04192698/art_3.jpg +- data/imagenet-r/n07697537/misc_6.jpg +- data/imagenet-r/n07745940/deviantart_10.jpg +- data/imagenet-r/n02108915/tattoo_2.jpg +- data/imagenet-r/n04552348/deviantart_19.jpg +- data/imagenet-r/n03481172/sculpture_7.jpg +- data/imagenet-r/n04347754/videogame_22.jpg +- data/imagenet-r/n01494475/misc_72.jpg +- data/imagenet-r/n02279972/embroidery_6.jpg +- data/imagenet-r/n04310018/videogame_16.jpg +- data/imagenet-r/n02007558/tattoo_13.jpg +- data/imagenet-r/n01986214/cartoon_8.jpg +- data/imagenet-r/n02749479/tattoo_4.jpg +- data/imagenet-r/n07753275/cartoon_0.jpg +- data/imagenet-r/n04086273/tattoo_55.jpg +- data/imagenet-r/n02106166/painting_4.jpg +- data/imagenet-r/n07614500/misc_17.jpg +- data/imagenet-r/n07745940/toy_7.jpg +- data/imagenet-r/n02480855/painting_11.jpg +- data/imagenet-r/n01644373/tattoo_16.jpg +- data/imagenet-r/n01644373/cartoon_0.jpg +- data/imagenet-r/n02268443/misc_43.jpg +- data/imagenet-r/n01694178/cartoon_0.jpg +- data/imagenet-r/n07734744/toy_39.jpg +- data/imagenet-r/n01944390/misc_138.jpg +- data/imagenet-r/n07920052/deviantart_9.jpg +- data/imagenet-r/n02091134/misc_16.jpg +- data/imagenet-r/n01843383/art_4.jpg +- data/imagenet-r/n02088238/misc_119.jpg +- data/imagenet-r/n04310018/graffiti_1.jpg +- data/imagenet-r/n02966193/sculpture_0.jpg +- data/imagenet-r/n02096585/misc_22.jpg +- data/imagenet-r/n01531178/painting_43.jpg +- data/imagenet-r/n07753592/misc_179.jpg +- data/imagenet-r/n03498962/painting_0.jpg +- data/imagenet-r/n02007558/toy_8.jpg +- data/imagenet-r/n02480495/sculpture_1.jpg +- data/imagenet-r/n07734744/embroidery_13.jpg +- data/imagenet-r/n02398521/sticker_0.jpg +- data/imagenet-r/n02363005/sculpture_13.jpg +- data/imagenet-r/n07753592/misc_162.jpg +- data/imagenet-r/n04086273/cartoon_13.jpg +- data/imagenet-r/n07749582/sticker_0.jpg +- data/imagenet-r/n01770393/sketch_3.jpg +- data/imagenet-r/n02909870/graphic_15.jpg +- data/imagenet-r/n01986214/cartoon_13.jpg +- data/imagenet-r/n02672831/deviantart_4.jpg +- data/imagenet-r/n03775071/embroidery_4.jpg +- data/imagenet-r/n03272010/painting_16.jpg +- data/imagenet-r/n01910747/sketch_11.jpg +- data/imagenet-r/n02607072/sketch_19.jpg +- data/imagenet-r/n02992529/sketch_26.jpg +- data/imagenet-r/n02701002/videogame_0.jpg +- data/imagenet-r/n02007558/graffiti_15.jpg +- data/imagenet-r/n02909870/graffiti_3.jpg +- data/imagenet-r/n02486410/painting_16.jpg +- data/imagenet-r/n02395406/toy_5.jpg +- data/imagenet-r/n02398521/deviantart_0.jpg +- data/imagenet-r/n01531178/cartoon_14.jpg +- data/imagenet-r/n01443537/painting_6.jpg +- data/imagenet-r/n01847000/painting_6.jpg +- data/imagenet-r/n07768694/sketch_12.jpg +- data/imagenet-r/n02814860/cartoon_7.jpg +- data/imagenet-r/n02119022/sketch_7.jpg +- data/imagenet-r/n01484850/deviantart_10.jpg +- data/imagenet-r/n02980441/cartoon_1.jpg +- data/imagenet-r/n01843383/deviantart_34.jpg +- data/imagenet-r/n02110958/embroidery_10.jpg +- data/imagenet-r/n01806143/deviantart_5.jpg +- data/imagenet-r/n02909870/graffiti_4.jpg +- data/imagenet-r/n02814860/deviantart_20.jpg +- data/imagenet-r/n01494475/deviantart_5.jpg +- data/imagenet-r/n02410509/cartoon_30.jpg +- data/imagenet-r/n02906734/sticker_5.jpg +- data/imagenet-r/n01855672/sketch_13.jpg +- data/imagenet-r/n02607072/misc_82.jpg +- data/imagenet-r/n01910747/painting_19.jpg +- data/imagenet-r/n01774750/misc_2.jpg +- data/imagenet-r/n01484850/tattoo_14.jpg +- data/imagenet-r/n02481823/deviantart_4.jpg +- data/imagenet-r/n02077923/misc_43.jpg +- data/imagenet-r/n01443537/sticker_0.jpg +- data/imagenet-r/n01514859/cartoon_29.jpg +- data/imagenet-r/n07873807/cartoon_0.jpg +- data/imagenet-r/n02236044/cartoon_0.jpg +- data/imagenet-r/n02112018/misc_41.jpg +- data/imagenet-r/n04266014/cartoon_22.jpg +- data/imagenet-r/n10565667/sketch_19.jpg +- data/imagenet-r/n02134084/misc_111.jpg +- data/imagenet-r/n02219486/art_4.jpg +- data/imagenet-r/n03345487/toy_3.jpg +- data/imagenet-r/n02007558/tattoo_33.jpg +- data/imagenet-r/n02128385/sketch_0.jpg +- data/imagenet-r/n07734744/sketch_14.jpg +- data/imagenet-r/n02268443/misc_8.jpg +- data/imagenet-r/n02094433/sketch_15.jpg +- data/imagenet-r/n01847000/sculpture_0.jpg +- data/imagenet-r/n02391049/misc_35.jpg +- data/imagenet-r/n02206856/sketch_18.jpg +- data/imagenet-r/n03124170/cartoon_47.jpg +- data/imagenet-r/n02268443/sketch_22.jpg +- data/imagenet-r/n02279972/art_4.jpg +- data/imagenet-r/n02226429/sketch_11.jpg +- data/imagenet-r/n02391049/misc_58.jpg +- data/imagenet-r/n02206856/sculpture_4.jpg +- data/imagenet-r/n01518878/origami_0.jpg +- data/imagenet-r/n04465501/videogame_32.jpg +- data/imagenet-r/n02749479/misc_7.jpg +- data/imagenet-r/n01847000/painting_3.jpg +- data/imagenet-r/n02236044/graphic_0.jpg +- data/imagenet-r/n03424325/misc_26.jpg +- data/imagenet-r/n04275548/toy_0.jpg +- data/imagenet-r/n02138441/sculpture_1.jpg +- data/imagenet-r/n03494278/graphic_0.jpg +- data/imagenet-r/n02088094/misc_18.jpg +- data/imagenet-r/n02793495/sketch_9.jpg +- data/imagenet-r/n02939185/sketch_8.jpg +- data/imagenet-r/n04192698/videogame_12.jpg +- data/imagenet-r/n02007558/origami_5.jpg +- data/imagenet-r/n03372029/cartoon_10.jpg +- data/imagenet-r/n02672831/sticker_5.jpg +- data/imagenet-r/n03602883/misc_49.jpg +- data/imagenet-r/n02071294/tattoo_14.jpg +- data/imagenet-r/n07745940/art_3.jpg +- data/imagenet-r/n04118538/sketch_16.jpg +- data/imagenet-r/n01498041/art_3.jpg +- data/imagenet-r/n02481823/deviantart_2.jpg +- data/imagenet-r/n01855672/graphic_0.jpg +- data/imagenet-r/n07734744/cartoon_13.jpg +- data/imagenet-r/n09835506/misc_34.jpg +- data/imagenet-r/n04133789/painting_2.jpg +- data/imagenet-r/n02363005/cartoon_11.jpg +- data/imagenet-r/n02510455/misc_81.jpg +- data/imagenet-r/n02165456/sketch_19.jpg +- data/imagenet-r/n02363005/art_0.jpg +- data/imagenet-r/n01860187/sculpture_0.jpg +- data/imagenet-r/n07734744/sketch_11.jpg +- data/imagenet-r/n12267677/misc_33.jpg +- data/imagenet-r/n01514859/deviantart_6.jpg +- data/imagenet-r/n02226429/origami_19.jpg +- data/imagenet-r/n02113023/misc_24.jpg +- data/imagenet-r/n02051845/painting_9.jpg +- data/imagenet-r/n02481823/sculpture_17.jpg +- data/imagenet-r/n01443537/toy_10.jpg +- data/imagenet-r/n02395406/sculpture_17.jpg +- data/imagenet-r/n02219486/painting_1.jpg +- data/imagenet-r/n02841315/toy_1.jpg +- data/imagenet-r/n02268443/misc_143.jpg +- data/imagenet-r/n04266014/sticker_3.jpg +- data/imagenet-r/n07753592/videogame_12.jpg +- data/imagenet-r/n02102318/painting_5.jpg +- data/imagenet-r/n02437616/cartoon_16.jpg +- data/imagenet-r/n02130308/misc_4.jpg +- data/imagenet-r/n07749582/deviantart_23.jpg +- data/imagenet-r/n03424325/deviantart_2.jpg +- data/imagenet-r/n02119022/misc_32.jpg +- data/imagenet-r/n07697313/misc_9.jpg +- data/imagenet-r/n04389033/graffiti_1.jpg +- data/imagenet-r/n07720875/sketch_11.jpg +- data/imagenet-r/n01616318/painting_19.jpg +- data/imagenet-r/n01632777/toy_21.jpg +- data/imagenet-r/n02088466/sketch_4.jpg +- data/imagenet-r/n04192698/sketch_15.jpg +- data/imagenet-r/n02138441/cartoon_11.jpg +- data/imagenet-r/n02219486/tattoo_17.jpg +- data/imagenet-r/n02110958/cartoon_33.jpg +- data/imagenet-r/n07745940/sticker_2.jpg +- data/imagenet-r/n02110341/misc_79.jpg +- data/imagenet-r/n02951358/sketch_1.jpg +- data/imagenet-r/n07714990/cartoon_29.jpg +- data/imagenet-r/n04086273/videogame_17.jpg +- data/imagenet-r/n07745940/sculpture_1.jpg +- data/imagenet-r/n03272010/deviantart_22.jpg +- data/imagenet-r/n07768694/painting_15.jpg +- data/imagenet-r/n01806143/sticker_1.jpg +- data/imagenet-r/n02096585/misc_179.jpg +- data/imagenet-r/n01644373/tattoo_4.jpg +- data/imagenet-r/n01498041/misc_2.jpg +- data/imagenet-r/n01484850/deviantart_15.jpg +- data/imagenet-r/n02119022/sketch_8.jpg +- data/imagenet-r/n02129604/toy_18.jpg +- data/imagenet-r/n04133789/art_2.jpg +- data/imagenet-r/n01616318/sketch_10.jpg +- data/imagenet-r/n04254680/videogame_20.jpg +- data/imagenet-r/n03594945/toy_16.jpg +- data/imagenet-r/n01630670/misc_4.jpg +- data/imagenet-r/n02102318/sketch_8.jpg +- data/imagenet-r/n04146614/videogame_8.jpg +- data/imagenet-r/n01910747/embroidery_19.jpg +- data/imagenet-r/n02128385/sketch_4.jpg +- data/imagenet-r/n02797295/misc_36.jpg +- data/imagenet-r/n02236044/toy_2.jpg +- data/imagenet-r/n02129165/tattoo_11.jpg +- data/imagenet-r/n02346627/painting_6.jpg +- data/imagenet-r/n02607072/misc_28.jpg +- data/imagenet-r/n07720875/art_8.jpg +- data/imagenet-r/n02769748/sketch_13.jpg +- data/imagenet-r/n04275548/cartoon_8.jpg +- data/imagenet-r/n01882714/deviantart_35.jpg +- data/imagenet-r/n01944390/misc_72.jpg +- data/imagenet-r/n01616318/tattoo_23.jpg +- data/imagenet-r/n02165456/embroidery_5.jpg +- data/imagenet-r/n03602883/misc_62.jpg +- data/imagenet-r/n07749582/painting_29.jpg +- data/imagenet-r/n02607072/videogame_2.jpg +- data/imagenet-r/n09835506/deviantart_7.jpg +- data/imagenet-r/n01614925/tattoo_28.jpg +- data/imagenet-r/n02106662/misc_96.jpg +- data/imagenet-r/n01630670/sketch_16.jpg +- data/imagenet-r/n02117135/art_1.jpg +- data/imagenet-r/n02113624/sketch_3.jpg +- data/imagenet-r/n04310018/art_16.jpg +- data/imagenet-r/n02883205/toy_11.jpg +- data/imagenet-r/n04086273/tattoo_5.jpg +- data/imagenet-r/n07749582/painting_47.jpg +- data/imagenet-r/n03710193/sketch_10.jpg +- data/imagenet-r/n01833805/embroidery_2.jpg +- data/imagenet-r/n02051845/sketch_4.jpg +- data/imagenet-r/n02119022/misc_154.jpg +- data/imagenet-r/n02051845/cartoon_7.jpg +- data/imagenet-r/n02108089/misc_34.jpg +- data/imagenet-r/n03272010/cartoon_18.jpg +- data/imagenet-r/n02190166/graffiti_6.jpg +- data/imagenet-r/n01484850/tattoo_11.jpg +- data/imagenet-r/n07714990/cartoon_1.jpg +- data/imagenet-r/n09472597/videogame_0.jpg +- data/imagenet-r/n03467068/videogame_2.jpg +- data/imagenet-r/n02165456/tattoo_32.jpg +- data/imagenet-r/n02071294/cartoon_7.jpg +- data/imagenet-r/n04347754/videogame_2.jpg +- data/imagenet-r/n04310018/deviantart_5.jpg +- data/imagenet-r/n07880968/cartoon_13.jpg +- data/imagenet-r/n02190166/sketch_7.jpg +- data/imagenet-r/n07753275/art_18.jpg +- data/imagenet-r/n02363005/cartoon_3.jpg +- data/imagenet-r/n02410509/sculpture_11.jpg +- data/imagenet-r/n02092339/misc_27.jpg +- data/imagenet-r/n07714990/sketch_7.jpg +- data/imagenet-r/n02206856/misc_12.jpg +- data/imagenet-r/n01944390/misc_162.jpg +- data/imagenet-r/n02051845/deviantart_23.jpg +- data/imagenet-r/n01514859/painting_26.jpg +- data/imagenet-r/n01882714/tattoo_15.jpg +- data/imagenet-r/n02128757/sculpture_1.jpg +- data/imagenet-r/n02226429/art_13.jpg +- data/imagenet-r/n01806143/sketch_1.jpg +- data/imagenet-r/n01498041/origami_4.jpg +- data/imagenet-r/n02138441/cartoon_14.jpg +- data/imagenet-r/n02483362/sketch_6.jpg +- data/imagenet-r/n03630383/cartoon_21.jpg +- data/imagenet-r/n02395406/sculpture_28.jpg +- data/imagenet-r/n01882714/cartoon_16.jpg +- data/imagenet-r/n01616318/sketch_4.jpg +- data/imagenet-r/n02206856/toy_3.jpg +- data/imagenet-r/n02480855/tattoo_30.jpg +- data/imagenet-r/n09472597/deviantart_11.jpg +- data/imagenet-r/n02108915/misc_131.jpg +- data/imagenet-r/n02391049/misc_109.jpg +- data/imagenet-r/n01632777/toy_22.jpg +- data/imagenet-r/n02364673/sketch_9.jpg +- data/imagenet-r/n01833805/sketch_8.jpg +- data/imagenet-r/n07693725/sketch_13.jpg +- data/imagenet-r/n03467068/sketch_20.jpg +- data/imagenet-r/n02119022/misc_53.jpg +- data/imagenet-r/n07920052/painting_0.jpg +- data/imagenet-r/n03930630/toy_11.jpg +- data/imagenet-r/n07880968/cartoon_3.jpg +- data/imagenet-r/n01514859/painting_17.jpg +- data/imagenet-r/n02108915/misc_60.jpg +- data/imagenet-r/n02099712/misc_44.jpg +- data/imagenet-r/n02398521/sketch_1.jpg +- data/imagenet-r/n01494475/misc_92.jpg +- data/imagenet-r/n02094433/misc_41.jpg +- data/imagenet-r/n02395406/cartoon_18.jpg +- data/imagenet-r/n02106662/misc_18.jpg +- data/imagenet-r/n07614500/videogame_11.jpg +- data/imagenet-r/n02129165/painting_12.jpg +- data/imagenet-r/n01806143/misc_4.jpg +- data/imagenet-r/n02655020/videogame_9.jpg +- data/imagenet-r/n07745940/graffiti_18.jpg +- data/imagenet-r/n02219486/origami_4.jpg +- data/imagenet-r/n02051845/painting_0.jpg +- data/imagenet-r/n02108915/sketch_13.jpg +- data/imagenet-r/n04552348/misc_1.jpg +- data/imagenet-r/n02190166/sticker_5.jpg +- data/imagenet-r/n04389033/videogame_48.jpg +- data/imagenet-r/n01986214/misc_1.jpg +- data/imagenet-r/n02655020/misc_17.jpg +- data/imagenet-r/n02843684/painting_8.jpg +- data/imagenet-r/n07734744/deviantart_17.jpg +- data/imagenet-r/n04389033/deviantart_8.jpg +- data/imagenet-r/n02085620/misc_52.jpg +- data/imagenet-r/n01833805/embroidery_13.jpg +- data/imagenet-r/n02510455/misc_73.jpg +- data/imagenet-r/n02094433/misc_29.jpg +- data/imagenet-r/n04536866/painting_35.jpg +- data/imagenet-r/n03594945/misc_2.jpg +- data/imagenet-r/n04487394/deviantart_9.jpg +- data/imagenet-r/n03272010/cartoon_12.jpg +- data/imagenet-r/n02071294/deviantart_35.jpg +- data/imagenet-r/n01632777/sculpture_1.jpg +- data/imagenet-r/n09472597/videogame_28.jpg +- data/imagenet-r/n02480855/sketch_5.jpg +- data/imagenet-r/n02110185/cartoon_13.jpg +- data/imagenet-r/n02096585/misc_194.jpg +- data/imagenet-r/n02113023/misc_34.jpg +- data/imagenet-r/n07614500/origami_2.jpg +- data/imagenet-r/n02802426/painting_2.jpg +- data/imagenet-r/n01770393/graffiti_12.jpg +- data/imagenet-r/n02066245/tattoo_2.jpg +- data/imagenet-r/n04141076/cartoon_42.jpg +- data/imagenet-r/n02219486/art_3.jpg +- data/imagenet-r/n01514859/cartoon_4.jpg +- data/imagenet-r/n12267677/misc_39.jpg +- data/imagenet-r/n04118538/sketch_3.jpg +- data/imagenet-r/n02128757/art_16.jpg +- data/imagenet-r/n02992529/sketch_4.jpg +- data/imagenet-r/n07614500/origami_3.jpg +- data/imagenet-r/n02607072/sketch_3.jpg +- data/imagenet-r/n02939185/sketch_5.jpg +- data/imagenet-r/n02980441/painting_5.jpg +- data/imagenet-r/n01820546/misc_1.jpg +- data/imagenet-r/n07873807/videogame_0.jpg +- data/imagenet-r/n01910747/cartoon_0.jpg +- data/imagenet-r/n02526121/cartoon_36.jpg +- data/imagenet-r/n09835506/videogame_18.jpg +- data/imagenet-r/n03710193/misc_0.jpg +- data/imagenet-r/n01806143/toy_1.jpg +- data/imagenet-r/n03452741/sketch_21.jpg +- data/imagenet-r/n02138441/cartoon_15.jpg +- data/imagenet-r/n03372029/sculpture_1.jpg +- data/imagenet-r/n02445715/sketch_16.jpg +- data/imagenet-r/n02437616/sketch_19.jpg +- data/imagenet-r/n03773504/painting_1.jpg +- data/imagenet-r/n02268443/misc_149.jpg +- data/imagenet-r/n04310018/painting_10.jpg +- data/imagenet-r/n04591713/sketch_2.jpg +- data/imagenet-r/n03710193/misc_44.jpg +- data/imagenet-r/n02410509/sketch_21.jpg +- data/imagenet-r/n02190166/sticker_4.jpg +- data/imagenet-r/n02909870/painting_16.jpg +- data/imagenet-r/n04275548/embroidery_1.jpg +- data/imagenet-r/n02206856/tattoo_22.jpg +- data/imagenet-r/n01843383/cartoon_10.jpg +- data/imagenet-r/n02279972/misc_2.jpg +- data/imagenet-r/n03930630/cartoon_6.jpg +- data/imagenet-r/n02808440/cartoon_13.jpg +- data/imagenet-r/n03888257/sketch_3.jpg +- data/imagenet-r/n02113799/misc_22.jpg +- data/imagenet-r/n01632777/sketch_20.jpg +- data/imagenet-r/n04118538/cartoon_15.jpg +- data/imagenet-r/n02808440/painting_14.jpg +- data/imagenet-r/n04275548/embroidery_16.jpg +- data/imagenet-r/n09472597/videogame_9.jpg +- data/imagenet-r/n02056570/sketch_17.jpg +- data/imagenet-r/n04591713/cartoon_3.jpg +- data/imagenet-r/n01833805/tattoo_42.jpg +- data/imagenet-r/n02219486/graffiti_14.jpg +- data/imagenet-r/n01494475/misc_76.jpg +- data/imagenet-r/n02398521/cartoon_13.jpg +- data/imagenet-r/n03676483/sketch_1.jpg +- data/imagenet-r/n02948072/misc_5.jpg +- data/imagenet-r/n02966193/sculpture_1.jpg +- data/imagenet-r/n04141076/sticker_1.jpg +- data/imagenet-r/n01616318/graffiti_6.jpg +- data/imagenet-r/n02655020/misc_36.jpg +- data/imagenet-r/n02051845/graffiti_1.jpg +- data/imagenet-r/n01843383/cartoon_16.jpg +- data/imagenet-r/n02007558/cartoon_30.jpg +- data/imagenet-r/n01882714/deviantart_15.jpg +- data/imagenet-r/n01614925/deviantart_26.jpg +- data/imagenet-r/n02071294/deviantart_43.jpg +- data/imagenet-r/n03124170/art_10.jpg +- data/imagenet-r/n09472597/sculpture_1.jpg +- data/imagenet-r/n03773504/graphic_3.jpg +- data/imagenet-r/n02437616/sketch_21.jpg +- data/imagenet-r/n02948072/toy_6.jpg +- data/imagenet-r/n02980441/sketch_6.jpg +- data/imagenet-r/n02364673/art_18.jpg +- data/imagenet-r/n01616318/tattoo_19.jpg +- data/imagenet-r/n02841315/sculpture_5.jpg +- data/imagenet-r/n01614925/toy_2.jpg +- data/imagenet-r/n04465501/sculpture_4.jpg +- data/imagenet-r/n04347754/videogame_14.jpg +- data/imagenet-r/n03424325/misc_20.jpg +- data/imagenet-r/n02398521/sculpture_1.jpg +- data/imagenet-r/n03888257/sketch_20.jpg +- data/imagenet-r/n02129165/graffiti_1.jpg +- data/imagenet-r/n07873807/toy_11.jpg +- data/imagenet-r/n02363005/tattoo_7.jpg +- data/imagenet-r/n02096585/misc_84.jpg +- data/imagenet-r/n02119022/misc_9.jpg +- data/imagenet-r/n02085620/tattoo_15.jpg +- data/imagenet-r/n01847000/tattoo_19.jpg +- data/imagenet-r/n02129165/toy_20.jpg +- data/imagenet-r/n02510455/misc_92.jpg +- data/imagenet-r/n02883205/graffiti_7.jpg +- data/imagenet-r/n02219486/sculpture_10.jpg +- data/imagenet-r/n02769748/sketch_20.jpg +- data/imagenet-r/n02123045/painting_10.jpg +- data/imagenet-r/n01860187/sculpture_2.jpg +- data/imagenet-r/n07749582/sketch_22.jpg +- data/imagenet-r/n02085620/misc_37.jpg +- data/imagenet-r/n02909870/cartoon_32.jpg +- data/imagenet-r/n02108089/sketch_14.jpg +- data/imagenet-r/n07714571/sketch_9.jpg +- data/imagenet-r/n02071294/deviantart_2.jpg +- data/imagenet-r/n01644373/tattoo_10.jpg +- data/imagenet-r/n07697313/cartoon_30.jpg +- data/imagenet-r/n02110341/misc_64.jpg +- data/imagenet-r/n01677366/deviantart_4.jpg +- data/imagenet-r/n02106662/misc_35.jpg +- data/imagenet-r/n07742313/painting_8.jpg +- data/imagenet-r/n01847000/graphic_3.jpg +- data/imagenet-r/n02206856/cartoon_27.jpg +- data/imagenet-r/n01806143/graphic_2.jpg +- data/imagenet-r/n02088094/misc_13.jpg +- data/imagenet-r/n04192698/cartoon_15.jpg +- data/imagenet-r/n02112137/sketch_11.jpg +- data/imagenet-r/n02607072/misc_116.jpg +- data/imagenet-r/n02356798/sketch_19.jpg +- data/imagenet-r/n07734744/toy_27.jpg +- data/imagenet-r/n04310018/painting_12.jpg +- data/imagenet-r/n02099712/misc_39.jpg +- data/imagenet-r/n01630670/sketch_19.jpg +- data/imagenet-r/n03272010/deviantart_23.jpg +- data/imagenet-r/n02447366/sketch_2.jpg +- data/imagenet-r/n02410509/graphic_4.jpg +- data/imagenet-r/n07734744/art_13.jpg +- data/imagenet-r/n01494475/deviantart_3.jpg +- data/imagenet-r/n01944390/tattoo_31.jpg +- data/imagenet-r/n04536866/cartoon_6.jpg +- data/imagenet-r/n02110185/cartoon_5.jpg +- data/imagenet-r/n04118538/cartoon_4.jpg +- data/imagenet-r/n02123045/sketch_15.jpg +- data/imagenet-r/n02110341/misc_13.jpg +- data/imagenet-r/n09835506/sketch_15.jpg +- data/imagenet-r/n02071294/origami_0.jpg +- data/imagenet-r/n02802426/tattoo_2.jpg +- data/imagenet-r/n04266014/sketch_18.jpg +- data/imagenet-r/n04389033/graphic_3.jpg +- data/imagenet-r/n07734744/toy_12.jpg +- data/imagenet-r/n07768694/painting_21.jpg +- data/imagenet-r/n07880968/graffiti_0.jpg +- data/imagenet-r/n02883205/toy_21.jpg +- data/imagenet-r/n03775071/cartoon_22.jpg +- data/imagenet-r/n02268443/sketch_23.jpg +- data/imagenet-r/n07695742/cartoon_3.jpg +- data/imagenet-r/n02129604/deviantart_33.jpg +- data/imagenet-r/n01986214/origami_9.jpg +- data/imagenet-r/n02992529/sketch_22.jpg +- data/imagenet-r/n01847000/toy_6.jpg +- data/imagenet-r/n07753275/graphic_2.jpg +- data/imagenet-r/n04254680/cartoon_12.jpg +- data/imagenet-r/n07714990/deviantart_2.jpg +- data/imagenet-r/n01855672/art_1.jpg +- data/imagenet-r/n01910747/deviantart_12.jpg +- data/imagenet-r/n03930630/misc_17.jpg +- data/imagenet-r/n02909870/sketch_12.jpg +- data/imagenet-r/n04409515/painting_4.jpg +- data/imagenet-r/n07734744/videogame_1.jpg +- data/imagenet-r/n07720875/painting_29.jpg +- data/imagenet-r/n02410509/cartoon_3.jpg +- data/imagenet-r/n01632777/deviantart_1.jpg +- data/imagenet-r/n04409515/sketch_20.jpg +- data/imagenet-r/n02793495/painting_20.jpg +- data/imagenet-r/n03930630/origami_0.jpg +- data/imagenet-r/n04536866/painting_21.jpg +- data/imagenet-r/n02481823/deviantart_10.jpg +- data/imagenet-r/n07753592/misc_12.jpg +- data/imagenet-r/n02445715/cartoon_25.jpg +- data/imagenet-r/n01882714/toy_23.jpg +- data/imagenet-r/n02099712/sketch_13.jpg +- data/imagenet-r/n02165456/tattoo_44.jpg +- data/imagenet-r/n02099712/misc_19.jpg +- data/imagenet-r/n02395406/toy_28.jpg +- data/imagenet-r/n02009912/sketch_0.jpg +- data/imagenet-r/n02948072/painting_2.jpg +- data/imagenet-r/n04310018/sketch_9.jpg +- data/imagenet-r/n01632777/videogame_10.jpg +- data/imagenet-r/n03775071/sketch_23.jpg +- data/imagenet-r/n01770393/cartoon_32.jpg +- data/imagenet-r/n02346627/sculpture_4.jpg +- data/imagenet-r/n02091134/misc_11.jpg +- data/imagenet-r/n01820546/deviantart_1.jpg +- data/imagenet-r/n07697537/sketch_6.jpg +- data/imagenet-r/n02364673/painting_9.jpg +- data/imagenet-r/n03888257/sketch_21.jpg +- data/imagenet-r/n02481823/painting_20.jpg +- data/imagenet-r/n02088238/sketch_20.jpg +- data/imagenet-r/n12267677/sketch_17.jpg +- data/imagenet-r/n04552348/painting_8.jpg +- data/imagenet-r/n02398521/toy_0.jpg +- data/imagenet-r/n02841315/toy_9.jpg +- data/imagenet-r/n04465501/cartoon_11.jpg +- data/imagenet-r/n02655020/misc_101.jpg +- data/imagenet-r/n02841315/graphic_2.jpg +- data/imagenet-r/n01614925/sculpture_0.jpg +- data/imagenet-r/n02119022/misc_125.jpg +- data/imagenet-r/n02119022/misc_120.jpg +- data/imagenet-r/n07768694/videogame_3.jpg +- data/imagenet-r/n04325704/cartoon_5.jpg +- data/imagenet-r/n02085620/misc_88.jpg +- data/imagenet-r/n07714571/painting_15.jpg +- data/imagenet-r/n03773504/sculpture_0.jpg +- data/imagenet-r/n02129165/cartoon_14.jpg +- data/imagenet-r/n04389033/toy_17.jpg +- data/imagenet-r/n07734744/painting_37.jpg +- data/imagenet-r/n01774750/art_2.jpg +- data/imagenet-r/n03594945/sculpture_1.jpg +- data/imagenet-r/n02906734/cartoon_18.jpg +- data/imagenet-r/n02085620/misc_69.jpg +- data/imagenet-r/n01882714/sketch_1.jpg +- data/imagenet-r/n02655020/misc_81.jpg +- data/imagenet-r/n02123045/painting_24.jpg +- data/imagenet-r/n02129165/sticker_4.jpg +- data/imagenet-r/n01882714/cartoon_20.jpg +- data/imagenet-r/n04522168/sketch_18.jpg +- data/imagenet-r/n04266014/deviantart_7.jpg +- data/imagenet-r/n01498041/misc_3.jpg +- data/imagenet-r/n02110958/misc_11.jpg +- data/imagenet-r/n02939185/cartoon_7.jpg +- data/imagenet-r/n10565667/cartoon_5.jpg +- data/imagenet-r/n02056570/sketch_18.jpg +- data/imagenet-r/n01843383/cartoon_0.jpg +- data/imagenet-r/n02097298/misc_70.jpg +- data/imagenet-r/n02423022/cartoon_22.jpg +- data/imagenet-r/n01860187/sketch_5.jpg +- data/imagenet-r/n02129604/graffiti_10.jpg +- data/imagenet-r/n04552348/videogame_23.jpg +- data/imagenet-r/n07720875/painting_11.jpg +- data/imagenet-r/n02814860/painting_26.jpg +- data/imagenet-r/n07753275/graphic_10.jpg +- data/imagenet-r/n01443537/sketch_16.jpg +- data/imagenet-r/n04254680/sketch_15.jpg +- data/imagenet-r/n01843383/deviantart_65.jpg +- data/imagenet-r/n02108089/misc_2.jpg +- data/imagenet-r/n03345487/videogame_16.jpg +- data/imagenet-r/n01944390/misc_149.jpg +- data/imagenet-r/n02165456/misc_9.jpg +- data/imagenet-r/n10565667/graphic_0.jpg +- data/imagenet-r/n04487394/sculpture_1.jpg +- data/imagenet-r/n02219486/embroidery_0.jpg +- data/imagenet-r/n03495258/sculpture_12.jpg +- data/imagenet-r/n02841315/art_4.jpg +- data/imagenet-r/n01484850/toy_4.jpg +- data/imagenet-r/n07749582/art_4.jpg +- data/imagenet-r/n02134084/tattoo_4.jpg +- data/imagenet-r/n04275548/graffiti_2.jpg +- data/imagenet-r/n07880968/sketch_5.jpg +- data/imagenet-r/n02233338/sketch_18.jpg +- data/imagenet-r/n04389033/origami_9.jpg +- data/imagenet-r/n01986214/misc_7.jpg +- data/imagenet-r/n02526121/sculpture_9.jpg +- data/imagenet-r/n04146614/origami_0.jpg +- data/imagenet-r/n03710193/misc_29.jpg +- data/imagenet-r/n07697313/deviantart_30.jpg +- data/imagenet-r/n03676483/painting_5.jpg +- data/imagenet-r/n01484850/painting_20.jpg +- data/imagenet-r/n07745940/deviantart_12.jpg +- data/imagenet-r/n01616318/graffiti_4.jpg +- data/imagenet-r/n04254680/cartoon_2.jpg +- data/imagenet-r/n07697537/misc_66.jpg +- data/imagenet-r/n02948072/painting_8.jpg +- data/imagenet-r/n02110341/misc_36.jpg +- data/imagenet-r/n09835506/sketch_18.jpg +- data/imagenet-r/n01855672/embroidery_0.jpg +- data/imagenet-r/n04141076/art_9.jpg +- data/imagenet-r/n07734744/cartoon_29.jpg +- data/imagenet-r/n02437616/videogame_1.jpg +- data/imagenet-r/n01494475/misc_39.jpg +- data/imagenet-r/n02091032/sketch_10.jpg +- data/imagenet-r/n03452741/cartoon_4.jpg +- data/imagenet-r/n04389033/sculpture_7.jpg +- data/imagenet-r/n09472597/art_6.jpg +- data/imagenet-r/n02051845/sketch_9.jpg +- data/imagenet-r/n04389033/toy_6.jpg +- data/imagenet-r/n01518878/cartoon_43.jpg +- data/imagenet-r/n07768694/deviantart_5.jpg +- data/imagenet-r/n04389033/videogame_17.jpg +- data/imagenet-r/n02077923/misc_28.jpg +- data/imagenet-r/n04254680/videogame_4.jpg +- data/imagenet-r/n01630670/misc_5.jpg +- data/imagenet-r/n02447366/graffiti_5.jpg +- data/imagenet-r/n02165456/toy_16.jpg +- data/imagenet-r/n07697537/misc_115.jpg +- data/imagenet-r/n01986214/misc_2.jpg +- data/imagenet-r/n02051845/sketch_5.jpg +- data/imagenet-r/n02138441/cartoon_24.jpg +- data/imagenet-r/n02110341/misc_25.jpg +- data/imagenet-r/n03594945/videogame_5.jpg +- data/imagenet-r/n09472597/sketch_2.jpg +- data/imagenet-r/n02325366/misc_44.jpg +- data/imagenet-r/n01833805/cartoon_2.jpg +- data/imagenet-r/n02363005/sculpture_14.jpg +- data/imagenet-r/n02007558/sculpture_0.jpg +- data/imagenet-r/n02843684/cartoon_20.jpg +- data/imagenet-r/n01514859/deviantart_19.jpg +- data/imagenet-r/n02793495/art_1.jpg +- data/imagenet-r/n04487394/cartoon_12.jpg +- data/imagenet-r/n07697537/misc_30.jpg +- data/imagenet-r/n01860187/embroidery_3.jpg +- data/imagenet-r/n01774750/tattoo_10.jpg +- data/imagenet-r/n07753275/painting_22.jpg +- data/imagenet-r/n02814860/deviantart_11.jpg +- data/imagenet-r/n01443537/cartoon_0.jpg +- data/imagenet-r/n01910747/graphic_13.jpg +- data/imagenet-r/n02410509/sketch_10.jpg +- data/imagenet-r/n04552348/painting_9.jpg +- data/imagenet-r/n01484850/painting_10.jpg +- data/imagenet-r/n02165456/tattoo_4.jpg +- data/imagenet-r/n03345487/toy_27.jpg +- data/imagenet-r/n02279972/art_12.jpg +- data/imagenet-r/n07695742/deviantart_3.jpg +- data/imagenet-r/n02113023/misc_4.jpg +- data/imagenet-r/n02268443/misc_10.jpg +- data/imagenet-r/n02510455/misc_31.jpg +- data/imagenet-r/n01514859/cartoon_14.jpg +- data/imagenet-r/n02009912/misc_34.jpg +- data/imagenet-r/n01531178/cartoon_20.jpg +- data/imagenet-r/n02109525/misc_7.jpg +- data/imagenet-r/n02410509/embroidery_1.jpg +- data/imagenet-r/n01644373/tattoo_37.jpg +- data/imagenet-r/n07714990/sketch_15.jpg +- data/imagenet-r/n02233338/tattoo_5.jpg +- data/imagenet-r/n02236044/painting_10.jpg +- data/imagenet-r/n02129604/deviantart_24.jpg +- data/imagenet-r/n01494475/misc_83.jpg +- data/imagenet-r/n04192698/art_2.jpg +- data/imagenet-r/n02123045/painting_5.jpg +- data/imagenet-r/n01518878/sketch_9.jpg +- data/imagenet-r/n04133789/graphic_2.jpg +- data/imagenet-r/n01843383/cartoon_3.jpg +- data/imagenet-r/n02510455/misc_10.jpg +- data/imagenet-r/n01531178/painting_13.jpg +- data/imagenet-r/n02808440/cartoon_9.jpg +- data/imagenet-r/n01820546/painting_28.jpg +- data/imagenet-r/n02841315/cartoon_1.jpg +- data/imagenet-r/n02099601/tattoo_0.jpg +- data/imagenet-r/n01614925/sculpture_5.jpg +- data/imagenet-r/n01986214/sculpture_8.jpg +- data/imagenet-r/n01694178/sketch_16.jpg +- data/imagenet-r/n03602883/misc_48.jpg +- data/imagenet-r/n01855672/art_2.jpg +- data/imagenet-r/n02088094/misc_11.jpg +- data/imagenet-r/n02423022/sculpture_12.jpg +- data/imagenet-r/n02948072/deviantart_3.jpg +- data/imagenet-r/n02814860/painting_42.jpg +- data/imagenet-r/n02447366/sketch_12.jpg +- data/imagenet-r/n07714571/sketch_4.jpg +- data/imagenet-r/n07873807/videogame_3.jpg +- data/imagenet-r/n02395406/cartoon_3.jpg +- data/imagenet-r/n01833805/cartoon_17.jpg +- data/imagenet-r/n07745940/deviantart_20.jpg +- data/imagenet-r/n03467068/deviantart_1.jpg +- data/imagenet-r/n01770393/origami_11.jpg +- data/imagenet-r/n02092339/misc_12.jpg +- data/imagenet-r/n01518878/origami_1.jpg +- data/imagenet-r/n02447366/art_1.jpg +- data/imagenet-r/n03494278/sketch_1.jpg +- data/imagenet-r/n03495258/sculpture_20.jpg +- data/imagenet-r/n02110185/tattoo_8.jpg +- data/imagenet-r/n02843684/art_0.jpg +- data/imagenet-r/n01748264/tattoo_0.jpg +- data/imagenet-r/n02077923/sketch_16.jpg +- data/imagenet-r/n04347754/videogame_29.jpg +- data/imagenet-r/n02395406/cartoon_27.jpg +- data/imagenet-r/n07880968/deviantart_9.jpg +- data/imagenet-r/n02114367/misc_49.jpg +- data/imagenet-r/n02325366/sketch_11.jpg +- data/imagenet-r/n02110958/cartoon_7.jpg +- data/imagenet-r/n07734744/videogame_3.jpg +- data/imagenet-r/n03481172/graffiti_8.jpg +- data/imagenet-r/n02110958/cartoon_80.jpg +- data/imagenet-r/n02088094/misc_31.jpg +- data/imagenet-r/n02099601/misc_66.jpg +- data/imagenet-r/n02391049/misc_45.jpg +- data/imagenet-r/n07697313/misc_4.jpg +- data/imagenet-r/n02165456/tattoo_47.jpg +- data/imagenet-r/n02510455/misc_89.jpg +- data/imagenet-r/n02236044/sculpture_23.jpg +- data/imagenet-r/n02091134/misc_50.jpg +- data/imagenet-r/n02843684/misc_19.jpg +- data/imagenet-r/n03495258/tattoo_15.jpg +- data/imagenet-r/n01531178/painting_8.jpg +- data/imagenet-r/n01944390/misc_91.jpg +- data/imagenet-r/n01882714/cartoon_9.jpg +- data/imagenet-r/n03272010/cartoon_5.jpg +- data/imagenet-r/n01614925/sketch_22.jpg +- data/imagenet-r/n02108915/misc_68.jpg +- data/imagenet-r/n01882714/cartoon_44.jpg +- data/imagenet-r/n01833805/tattoo_22.jpg +- data/imagenet-r/n07753275/videogame_9.jpg +- data/imagenet-r/n02233338/misc_1.jpg +- data/imagenet-r/n02112018/sketch_14.jpg +- data/imagenet-r/n02823750/sketch_2.jpg +- data/imagenet-r/n01833805/tattoo_17.jpg +- data/imagenet-r/n02106166/painting_9.jpg +- data/imagenet-r/n02808440/sculpture_0.jpg +- data/imagenet-r/n02071294/deviantart_27.jpg +- data/imagenet-r/n02134084/sketch_12.jpg +- data/imagenet-r/n02268443/misc_112.jpg +- data/imagenet-r/n02236044/painting_15.jpg +- data/imagenet-r/n01616318/tattoo_17.jpg +- data/imagenet-r/n01843383/deviantart_40.jpg +- data/imagenet-r/n07614500/graffiti_10.jpg +- data/imagenet-r/n03676483/painting_4.jpg +- data/imagenet-r/n07697313/deviantart_23.jpg +- data/imagenet-r/n01910747/misc_8.jpg +- data/imagenet-r/n12267677/deviantart_11.jpg +- data/imagenet-r/n02325366/sketch_1.jpg +- data/imagenet-r/n02128757/painting_27.jpg +- data/imagenet-r/n02071294/painting_21.jpg +- data/imagenet-r/n01847000/toy_12.jpg +- data/imagenet-r/n02445715/cartoon_32.jpg +- data/imagenet-r/n01882714/sketch_17.jpg +- data/imagenet-r/n02113799/misc_18.jpg +- data/imagenet-r/n02398521/misc_1.jpg +- data/imagenet-r/n04147183/sketch_1.jpg +- data/imagenet-r/n01983481/misc_19.jpg +- data/imagenet-r/n04147183/painting_16.jpg +- data/imagenet-r/n07734744/deviantart_32.jpg +- data/imagenet-r/n07749582/cartoon_6.jpg +- data/imagenet-r/n07753275/graffiti_1.jpg +- data/imagenet-r/n02114367/misc_46.jpg +- data/imagenet-r/n02112137/misc_22.jpg +- data/imagenet-r/n02843684/painting_10.jpg +- data/imagenet-r/n02480495/painting_34.jpg +- data/imagenet-r/n02096585/misc_137.jpg +- data/imagenet-r/n02088364/sketch_23.jpg +- data/imagenet-r/n02134084/deviantart_13.jpg +- data/imagenet-r/n02106662/misc_90.jpg +- data/imagenet-r/n02364673/cartoon_9.jpg +- data/imagenet-r/n02268443/misc_19.jpg +- data/imagenet-r/n02134084/tattoo_17.jpg +- data/imagenet-r/n02097298/sketch_16.jpg +- data/imagenet-r/n02134084/misc_65.jpg +- data/imagenet-r/n03467068/cartoon_14.jpg +- data/imagenet-r/n03124170/cartoon_7.jpg +- data/imagenet-r/n02948072/cartoon_18.jpg +- data/imagenet-r/n03424325/misc_28.jpg +- data/imagenet-r/n02480855/toy_4.jpg +- data/imagenet-r/n02268443/misc_131.jpg +- data/imagenet-r/n02110341/misc_154.jpg +- data/imagenet-r/n03773504/graffiti_7.jpg +- data/imagenet-r/n07697313/deviantart_35.jpg +- data/imagenet-r/n01910747/painting_27.jpg +- data/imagenet-r/n02814860/cartoon_24.jpg +- data/imagenet-r/n12267677/deviantart_13.jpg +- data/imagenet-r/n02096585/misc_49.jpg +- data/imagenet-r/n02110958/painting_14.jpg +- data/imagenet-r/n02510455/misc_91.jpg +- data/imagenet-r/n02088094/sketch_10.jpg +- data/imagenet-r/n04086273/sketch_5.jpg +- data/imagenet-r/n07734744/sticker_3.jpg +- data/imagenet-r/n01614925/videogame_1.jpg +- data/imagenet-r/n01518878/cartoon_51.jpg +- data/imagenet-r/n02219486/embroidery_10.jpg +- data/imagenet-r/n01944390/sketch_22.jpg +- data/imagenet-r/n02769748/misc_0.jpg +- data/imagenet-r/n03481172/sculpture_2.jpg +- data/imagenet-r/n02009912/misc_41.jpg +- data/imagenet-r/n07745940/graffiti_21.jpg +- data/imagenet-r/n01983481/deviantart_3.jpg +- data/imagenet-r/n01833805/painting_46.jpg +- data/imagenet-r/n03775071/painting_0.jpg +- data/imagenet-r/n07920052/deviantart_6.jpg +- data/imagenet-r/n01770393/tattoo_46.jpg +- data/imagenet-r/n01498041/origami_3.jpg +- data/imagenet-r/n03272010/painting_1.jpg +- data/imagenet-r/n02317335/sketch_19.jpg +- data/imagenet-r/n03676483/sketch_21.jpg +- data/imagenet-r/n04522168/art_5.jpg +- data/imagenet-r/n02007558/tattoo_3.jpg +- data/imagenet-r/n02279972/painting_31.jpg +- data/imagenet-r/n07614500/cartoon_11.jpg +- data/imagenet-r/n01944390/misc_50.jpg +- data/imagenet-r/n02948072/sculpture_0.jpg +- data/imagenet-r/n01630670/sketch_9.jpg +- data/imagenet-r/n02123045/painting_29.jpg +- data/imagenet-r/n01443537/cartoon_32.jpg +- data/imagenet-r/n02363005/sculpture_16.jpg +- data/imagenet-r/n07734744/cartoon_26.jpg +- data/imagenet-r/n02363005/cartoon_42.jpg +- data/imagenet-r/n01518878/origami_8.jpg +- data/imagenet-r/n02099601/misc_48.jpg +- data/imagenet-r/n02110958/art_11.jpg +- data/imagenet-r/n02948072/embroidery_0.jpg +- data/imagenet-r/n07880968/cartoon_2.jpg +- data/imagenet-r/n02102318/sketch_15.jpg +- data/imagenet-r/n02007558/painting_18.jpg +- data/imagenet-r/n02447366/cartoon_4.jpg +- data/imagenet-r/n07697313/sketch_1.jpg +- data/imagenet-r/n03372029/painting_10.jpg +- data/imagenet-r/n02233338/deviantart_3.jpg +- data/imagenet-r/n04310018/cartoon_1.jpg +- data/imagenet-r/n02097298/sketch_14.jpg +- data/imagenet-r/n02108915/tattoo_13.jpg +- data/imagenet-r/n01774750/tattoo_21.jpg +- data/imagenet-r/n04118538/videogame_14.jpg +- data/imagenet-r/n03481172/cartoon_15.jpg +- data/imagenet-r/n07614500/origami_6.jpg +- data/imagenet-r/n02607072/misc_80.jpg +- data/imagenet-r/n02206856/misc_4.jpg +- data/imagenet-r/n02113799/misc_30.jpg +- data/imagenet-r/n02909870/sketch_20.jpg +- data/imagenet-r/n07697537/misc_94.jpg +- data/imagenet-r/n04141076/deviantart_27.jpg +- data/imagenet-r/n03602883/misc_25.jpg +- data/imagenet-r/n02206856/sticker_15.jpg +- data/imagenet-r/n07920052/cartoon_1.jpg +- data/imagenet-r/n07697313/sketch_24.jpg +- data/imagenet-r/n02096585/misc_113.jpg +- data/imagenet-r/n03124170/painting_32.jpg +- data/imagenet-r/n03124170/sculpture_13.jpg +- data/imagenet-r/n04141076/painting_43.jpg +- data/imagenet-r/n02007558/graffiti_2.jpg +- data/imagenet-r/n04552348/toy_8.jpg +- data/imagenet-r/n02950826/videogame_9.jpg +- data/imagenet-r/n02236044/origami_18.jpg +- data/imagenet-r/n01806143/cartoon_2.jpg +- data/imagenet-r/n04310018/sticker_3.jpg +- data/imagenet-r/n07697313/misc_14.jpg +- data/imagenet-r/n04389033/misc_0.jpg +- data/imagenet-r/n02102318/misc_20.jpg +- data/imagenet-r/n02268443/misc_127.jpg +- data/imagenet-r/n04118538/videogame_4.jpg +- data/imagenet-r/n02992529/graphic_0.jpg +- data/imagenet-r/n04389033/deviantart_12.jpg +- data/imagenet-r/n02134084/misc_139.jpg +- data/imagenet-r/n03594945/videogame_24.jpg +- data/imagenet-r/n07742313/painting_13.jpg +- data/imagenet-r/n02051845/painting_11.jpg +- data/imagenet-r/n04254680/videogame_25.jpg +- data/imagenet-r/n03495258/painting_3.jpg +- data/imagenet-r/n02113799/misc_8.jpg +- data/imagenet-r/n02992529/deviantart_2.jpg +- data/imagenet-r/n01484850/cartoon_6.jpg +- data/imagenet-r/n02363005/cartoon_17.jpg +- data/imagenet-r/n02085620/misc_12.jpg +- data/imagenet-r/n02112137/misc_11.jpg +- data/imagenet-r/n01833805/graffiti_16.jpg +- data/imagenet-r/n02883205/sketch_17.jpg +- data/imagenet-r/n02106550/tattoo_4.jpg +- data/imagenet-r/n02346627/sketch_1.jpg +- data/imagenet-r/n02129604/sketch_21.jpg +- data/imagenet-r/n02096585/misc_6.jpg +- data/imagenet-r/n01614925/sketch_16.jpg +- data/imagenet-r/n04552348/toy_4.jpg +- data/imagenet-r/n02129604/tattoo_7.jpg +- data/imagenet-r/n02226429/tattoo_1.jpg +- data/imagenet-r/n02123045/painting_7.jpg +- data/imagenet-r/n02110958/cartoon_39.jpg +- data/imagenet-r/n02129165/tattoo_24.jpg +- data/imagenet-r/n02410509/art_8.jpg +- data/imagenet-r/n02480495/toy_5.jpg +- data/imagenet-r/n04552348/cartoon_2.jpg +- data/imagenet-r/n02948072/deviantart_27.jpg +- data/imagenet-r/n02226429/sculpture_1.jpg +- data/imagenet-r/n02088364/misc_54.jpg +- data/imagenet-r/n04552348/misc_13.jpg +- data/imagenet-r/n02206856/art_8.jpg +- data/imagenet-r/n01443537/embroidery_2.jpg +- data/imagenet-r/n03773504/graphic_0.jpg +- data/imagenet-r/n03452741/sketch_4.jpg +- data/imagenet-r/n02110341/misc_127.jpg +- data/imagenet-r/n01833805/tattoo_103.jpg +- data/imagenet-r/n02510455/misc_3.jpg +- data/imagenet-r/n03481172/videogame_15.jpg +- data/imagenet-r/n04522168/sketch_11.jpg +- data/imagenet-r/n01770393/origami_2.jpg +- data/imagenet-r/n04141076/misc_2.jpg +- data/imagenet-r/n02088466/misc_8.jpg +- data/imagenet-r/n10565667/painting_0.jpg +- data/imagenet-r/n01748264/misc_10.jpg +- data/imagenet-r/n01443537/videogame_9.jpg +- data/imagenet-r/n02165456/tattoo_79.jpg +- data/imagenet-r/n07697313/sketch_20.jpg +- data/imagenet-r/n03452741/sketch_14.jpg +- data/imagenet-r/n02128385/embroidery_0.jpg +- data/imagenet-r/n03498962/sketch_4.jpg +- data/imagenet-r/n04552348/deviantart_11.jpg +- data/imagenet-r/n02110185/sticker_1.jpg +- data/imagenet-r/n02219486/videogame_0.jpg +- data/imagenet-r/n02088238/misc_120.jpg +- data/imagenet-r/n03424325/misc_57.jpg +- data/imagenet-r/n07753592/misc_69.jpg +- data/imagenet-r/n01770393/sketch_1.jpg +- data/imagenet-r/n07749582/sketch_16.jpg +- data/imagenet-r/n02106030/painting_15.jpg +- data/imagenet-r/n03888257/cartoon_27.jpg +- data/imagenet-r/n02007558/misc_12.jpg +- data/imagenet-r/n02486410/art_2.jpg +- data/imagenet-r/n04465501/painting_14.jpg +- data/imagenet-r/n04086273/art_10.jpg +- data/imagenet-r/n03649909/art_7.jpg +- data/imagenet-r/n02112018/misc_55.jpg +- data/imagenet-r/n01616318/tattoo_16.jpg +- data/imagenet-r/n07693725/cartoon_3.jpg +- data/imagenet-r/n02906734/cartoon_33.jpg +- data/imagenet-r/n01843383/deviantart_23.jpg +- data/imagenet-r/n01833805/tattoo_41.jpg +- data/imagenet-r/n02808440/painting_18.jpg +- data/imagenet-r/n01843383/deviantart_61.jpg +- data/imagenet-r/n02066245/art_9.jpg +- data/imagenet-r/n03481172/toy_15.jpg +- data/imagenet-r/n02906734/toy_0.jpg +- data/imagenet-r/n04146614/videogame_29.jpg +- data/imagenet-r/n07880968/cartoon_4.jpg +- data/imagenet-r/n02110341/misc_146.jpg +- data/imagenet-r/n02129165/painting_5.jpg +- data/imagenet-r/n02481823/sculpture_4.jpg +- data/imagenet-r/n04192698/sketch_9.jpg +- data/imagenet-r/n02007558/painting_22.jpg +- data/imagenet-r/n07753592/misc_20.jpg +- data/imagenet-r/n01784675/sketch_3.jpg +- data/imagenet-r/n02672831/cartoon_18.jpg +- data/imagenet-r/n03494278/cartoon_9.jpg +- data/imagenet-r/n02066245/sculpture_6.jpg +- data/imagenet-r/n01514859/toy_15.jpg +- data/imagenet-r/n02106030/sketch_23.jpg +- data/imagenet-r/n02395406/art_7.jpg +- data/imagenet-r/n02423022/toy_1.jpg +- data/imagenet-r/n01784675/sculpture_7.jpg +- data/imagenet-r/n03498962/videogame_12.jpg +- data/imagenet-r/n02398521/sketch_8.jpg +- data/imagenet-r/n09472597/painting_3.jpg +- data/imagenet-r/n07745940/art_0.jpg +- data/imagenet-r/n02106166/sketch_14.jpg +- data/imagenet-r/n02279972/sketch_2.jpg +- data/imagenet-r/n03452741/videogame_1.jpg +- data/imagenet-r/n02129604/cartoon_0.jpg +- data/imagenet-r/n04266014/misc_17.jpg +- data/imagenet-r/n01910747/tattoo_79.jpg +- data/imagenet-r/n02129165/deviantart_13.jpg +- data/imagenet-r/n02769748/sticker_0.jpg +- data/imagenet-r/n02108915/misc_101.jpg +- data/imagenet-r/n07920052/misc_2.jpg +- data/imagenet-r/n07697313/deviantart_7.jpg +- data/imagenet-r/n02948072/embroidery_10.jpg +- data/imagenet-r/n02607072/misc_107.jpg +- data/imagenet-r/n01774750/tattoo_18.jpg +- data/imagenet-r/n07753275/graffiti_2.jpg +- data/imagenet-r/n01770393/tattoo_52.jpg +- data/imagenet-r/n02423022/art_12.jpg +- data/imagenet-r/n02655020/misc_61.jpg +- data/imagenet-r/n01677366/videogame_1.jpg +- data/imagenet-r/n04310018/cartoon_2.jpg +- data/imagenet-r/n07920052/painting_3.jpg +- data/imagenet-r/n02701002/toy_27.jpg +- data/imagenet-r/n02410509/videogame_0.jpg +- data/imagenet-r/n01694178/origami_1.jpg +- data/imagenet-r/n07697537/videogame_7.jpg +- data/imagenet-r/n07753592/misc_35.jpg +- data/imagenet-r/n03124170/videogame_9.jpg +- data/imagenet-r/n07614500/graphic_0.jpg +- data/imagenet-r/n03602883/sketch_20.jpg +- data/imagenet-r/n02233338/tattoo_3.jpg +- data/imagenet-r/n09835506/misc_26.jpg +- data/imagenet-r/n01677366/sketch_7.jpg +- data/imagenet-r/n02110185/sketch_12.jpg +- data/imagenet-r/n02119022/misc_29.jpg +- data/imagenet-r/n02129165/deviantart_10.jpg +- data/imagenet-r/n02395406/graffiti_6.jpg +- data/imagenet-r/n02117135/tattoo_7.jpg +- data/imagenet-r/n02106550/misc_54.jpg +- data/imagenet-r/n02097298/misc_32.jpg +- data/imagenet-r/n02510455/misc_62.jpg +- data/imagenet-r/n02749479/sketch_6.jpg +- data/imagenet-r/n03345487/misc_0.jpg +- data/imagenet-r/n03649909/cartoon_1.jpg +- data/imagenet-r/n02480855/tattoo_65.jpg +- data/imagenet-r/n04522168/videogame_23.jpg +- data/imagenet-r/n02119022/misc_140.jpg +- data/imagenet-r/n01944390/tattoo_27.jpg +- data/imagenet-r/n02823750/sketch_0.jpg +- data/imagenet-r/n02363005/cartoon_2.jpg +- data/imagenet-r/n02236044/sculpture_24.jpg +- data/imagenet-r/n01694178/cartoon_12.jpg +- data/imagenet-r/n02948072/origami_0.jpg +- data/imagenet-r/n04552348/sketch_9.jpg +- data/imagenet-r/n01882714/toy_7.jpg +- data/imagenet-r/n02481823/tattoo_2.jpg +- data/imagenet-r/n02655020/misc_60.jpg +- data/imagenet-r/n02423022/sculpture_10.jpg +- data/imagenet-r/n02094433/misc_58.jpg +- data/imagenet-r/n02906734/cartoon_7.jpg +- data/imagenet-r/n04347754/cartoon_8.jpg +- data/imagenet-r/n02483362/cartoon_6.jpg +- data/imagenet-r/n02802426/misc_5.jpg +- data/imagenet-r/n03272010/origami_1.jpg +- data/imagenet-r/n07873807/sketch_6.jpg +- data/imagenet-r/n03345487/graffiti_0.jpg +- data/imagenet-r/n01494475/misc_63.jpg +- data/imagenet-r/n02906734/misc_10.jpg +- data/imagenet-r/n01847000/embroidery_4.jpg +- data/imagenet-r/n02097298/misc_5.jpg +- data/imagenet-r/n02486410/sketch_5.jpg +- data/imagenet-r/n01860187/cartoon_9.jpg +- data/imagenet-r/n07697313/embroidery_4.jpg +- data/imagenet-r/n01910747/tattoo_40.jpg +- data/imagenet-r/n02883205/sketch_1.jpg +- data/imagenet-r/n01630670/painting_2.jpg +- data/imagenet-r/n02108089/misc_38.jpg +- data/imagenet-r/n04389033/origami_4.jpg +- data/imagenet-r/n04310018/sketch_13.jpg +- data/imagenet-r/n02206856/graphic_2.jpg +- data/imagenet-r/n01820546/deviantart_5.jpg +- data/imagenet-r/n02423022/sculpture_25.jpg +- data/imagenet-r/n12267677/misc_54.jpg +- data/imagenet-r/n03272010/toy_3.jpg +- data/imagenet-r/n01882714/sculpture_6.jpg +- data/imagenet-r/n04591713/painting_15.jpg +- data/imagenet-r/n02134084/deviantart_6.jpg +- data/imagenet-r/n03424325/videogame_17.jpg +- data/imagenet-r/n02106030/sketch_15.jpg +- data/imagenet-r/n02749479/misc_3.jpg +- data/imagenet-r/n02051845/origami_2.jpg +- data/imagenet-r/n07734744/graphic_4.jpg +- data/imagenet-r/n07720875/deviantart_24.jpg +- data/imagenet-r/n04141076/cartoon_25.jpg +- data/imagenet-r/n02129165/sculpture_11.jpg +- data/imagenet-r/n02110958/sculpture_3.jpg +- data/imagenet-r/n07873807/embroidery_0.jpg +- data/imagenet-r/n02130308/painting_24.jpg +- data/imagenet-r/n02437616/toy_7.jpg +- data/imagenet-r/n02130308/cartoon_7.jpg +- data/imagenet-r/n01833805/misc_4.jpg +- data/imagenet-r/n03495258/videogame_10.jpg +- data/imagenet-r/n01518878/cartoon_23.jpg +- data/imagenet-r/n01531178/art_3.jpg +- data/imagenet-r/n07753592/misc_124.jpg +- data/imagenet-r/n02483362/sketch_2.jpg +- data/imagenet-r/n01843383/deviantart_62.jpg +- data/imagenet-r/n01843383/cartoon_19.jpg +- data/imagenet-r/n04552348/deviantart_23.jpg +- data/imagenet-r/n04347754/painting_1.jpg +- data/imagenet-r/n04325704/cartoon_29.jpg +- data/imagenet-r/n02909870/graphic_7.jpg +- data/imagenet-r/n02094433/sketch_4.jpg +- data/imagenet-r/n07697537/misc_37.jpg +- data/imagenet-r/n04118538/cartoon_21.jpg +- data/imagenet-r/n02793495/sketch_10.jpg +- data/imagenet-r/n07693725/sculpture_3.jpg +- data/imagenet-r/n07920052/cartoon_0.jpg +- data/imagenet-r/n03124170/sketch_0.jpg +- data/imagenet-r/n02950826/cartoon_6.jpg +- data/imagenet-r/n02480855/graffiti_12.jpg +- data/imagenet-r/n04536866/sketch_16.jpg +- data/imagenet-r/n02088238/misc_117.jpg +- data/imagenet-r/n01986214/deviantart_16.jpg +- data/imagenet-r/n02226429/sculpture_22.jpg +- data/imagenet-r/n07753275/tattoo_1.jpg +- data/imagenet-r/n01882714/toy_9.jpg +- data/imagenet-r/n02480855/art_4.jpg +- data/imagenet-r/n02134084/misc_133.jpg +- data/imagenet-r/n01944390/misc_75.jpg +- data/imagenet-r/n02091032/misc_22.jpg +- data/imagenet-r/n01494475/deviantart_6.jpg +- data/imagenet-r/n04389033/graphic_4.jpg +- data/imagenet-r/n01494475/misc_88.jpg +- data/imagenet-r/n02128385/toy_12.jpg +- data/imagenet-r/n02094433/misc_49.jpg +- data/imagenet-r/n02129165/tattoo_14.jpg +- data/imagenet-r/n03888257/graffiti_5.jpg +- data/imagenet-r/n02481823/graffiti_17.jpg +- data/imagenet-r/n01944390/misc_100.jpg +- data/imagenet-r/n03602883/misc_32.jpg +- data/imagenet-r/n02480495/art_9.jpg +- data/imagenet-r/n03594945/misc_5.jpg +- data/imagenet-r/n02437616/cartoon_4.jpg +- data/imagenet-r/n01614925/painting_38.jpg +- data/imagenet-r/n07695742/videogame_3.jpg +- data/imagenet-r/n02134084/tattoo_16.jpg +- data/imagenet-r/n02097298/misc_26.jpg +- data/imagenet-r/n01784675/painting_3.jpg +- data/imagenet-r/n04310018/painting_22.jpg +- data/imagenet-r/n01910747/graffiti_5.jpg +- data/imagenet-r/n04141076/cartoon_45.jpg +- data/imagenet-r/n02117135/toy_0.jpg +- data/imagenet-r/n01616318/sketch_7.jpg +- data/imagenet-r/n02091134/misc_74.jpg +- data/imagenet-r/n01498041/painting_6.jpg +- data/imagenet-r/n02607072/misc_18.jpg +- data/imagenet-r/n03594945/misc_6.jpg +- data/imagenet-r/n02980441/videogame_16.jpg +- data/imagenet-r/n03594945/sketch_10.jpg +- data/imagenet-r/n02951358/painting_16.jpg +- data/imagenet-r/n02883205/painting_6.jpg +- data/imagenet-r/n04409515/deviantart_4.jpg +- data/imagenet-r/n02165456/sketch_21.jpg +- data/imagenet-r/n04146614/videogame_13.jpg +- data/imagenet-r/n07742313/cartoon_4.jpg +- data/imagenet-r/n10565667/sketch_21.jpg +- data/imagenet-r/n03345487/toy_20.jpg +- data/imagenet-r/n04133789/painting_4.jpg +- data/imagenet-r/n03775071/cartoon_15.jpg +- data/imagenet-r/n03372029/sculpture_2.jpg +- data/imagenet-r/n02526121/sculpture_14.jpg +- data/imagenet-r/n03710193/misc_40.jpg +- data/imagenet-r/n02106166/graphic_0.jpg +- data/imagenet-r/n12267677/misc_62.jpg +- data/imagenet-r/n01833805/misc_8.jpg +- data/imagenet-r/n02483362/sketch_1.jpg +- data/imagenet-r/n01944390/deviantart_14.jpg +- data/imagenet-r/n02086240/misc_2.jpg +- data/imagenet-r/n07749582/painting_6.jpg +- data/imagenet-r/n04522168/origami_2.jpg +- data/imagenet-r/n04389033/graffiti_9.jpg +- data/imagenet-r/n04347754/videogame_0.jpg +- data/imagenet-r/n01443537/cartoon_41.jpg +- data/imagenet-r/n03947888/tattoo_24.jpg +- data/imagenet-r/n01843383/sketch_19.jpg +- data/imagenet-r/n01770393/deviantart_0.jpg +- data/imagenet-r/n01616318/sculpture_3.jpg +- data/imagenet-r/n02843684/sculpture_0.jpg +- data/imagenet-r/n02236044/graffiti_13.jpg +- data/imagenet-r/n07749582/painting_24.jpg +- data/imagenet-r/n02236044/art_13.jpg +- data/imagenet-r/n01443537/graffiti_5.jpg +- data/imagenet-r/n02841315/painting_3.jpg +- data/imagenet-r/n01944390/tattoo_26.jpg +- data/imagenet-r/n02814860/painting_25.jpg +- data/imagenet-r/n02110341/sketch_7.jpg +- data/imagenet-r/n03345487/sketch_7.jpg +- data/imagenet-r/n01847000/art_2.jpg +- data/imagenet-r/n02607072/misc_84.jpg +- data/imagenet-r/n02071294/cartoon_22.jpg +- data/imagenet-r/n04310018/sketch_7.jpg +- data/imagenet-r/n04254680/videogame_7.jpg +- data/imagenet-r/n04552348/videogame_4.jpg +- data/imagenet-r/n03345487/toy_26.jpg +- data/imagenet-r/n03930630/cartoon_12.jpg +- data/imagenet-r/n02655020/misc_19.jpg +- data/imagenet-r/n02980441/videogame_24.jpg +- data/imagenet-r/n04133789/painting_7.jpg +- data/imagenet-r/n02363005/videogame_4.jpg +- data/imagenet-r/n02108915/sketch_19.jpg +- data/imagenet-r/n02483362/painting_5.jpg +- data/imagenet-r/n03594945/toy_2.jpg +- data/imagenet-r/n02165456/sketch_14.jpg +- data/imagenet-r/n01944390/tattoo_13.jpg +- data/imagenet-r/n02108089/tattoo_0.jpg +- data/imagenet-r/n02134084/sketch_17.jpg +- data/imagenet-r/n01833805/graffiti_20.jpg +- data/imagenet-r/n01531178/cartoon_4.jpg +- data/imagenet-r/n07714571/art_2.jpg +- data/imagenet-r/n01833805/deviantart_14.jpg +- data/imagenet-r/n04146614/painting_3.jpg +- data/imagenet-r/n04591713/misc_0.jpg +- data/imagenet-r/n02447366/sketch_9.jpg +- data/imagenet-r/n02206856/toy_36.jpg +- data/imagenet-r/n01843383/deviantart_63.jpg +- data/imagenet-r/n03272010/sticker_1.jpg +- data/imagenet-r/n07768694/tattoo_2.jpg +- data/imagenet-r/n02437616/videogame_4.jpg +- data/imagenet-r/n07697537/misc_89.jpg +- data/imagenet-r/n04192698/videogame_5.jpg +- data/imagenet-r/n01847000/cartoon_15.jpg +- data/imagenet-r/n07714990/deviantart_11.jpg +- data/imagenet-r/n02108089/sketch_9.jpg +- data/imagenet-r/n07768694/sketch_13.jpg +- data/imagenet-r/n02317335/sketch_22.jpg +- data/imagenet-r/n02129604/tattoo_44.jpg +- data/imagenet-r/n04147183/art_0.jpg +- data/imagenet-r/n01833805/painting_43.jpg +- data/imagenet-r/n02480495/misc_2.jpg +- data/imagenet-r/n01518878/art_1.jpg +- data/imagenet-r/n02410509/sculpture_47.jpg +- data/imagenet-r/n07734744/painting_34.jpg +- data/imagenet-r/n01498041/sculpture_3.jpg +- data/imagenet-r/n01882714/cartoon_36.jpg +- data/imagenet-r/n01632777/painting_6.jpg +- data/imagenet-r/n07749582/deviantart_15.jpg +- data/imagenet-r/n04146614/toy_4.jpg +- data/imagenet-r/n03272010/sculpture_1.jpg +- data/imagenet-r/n07768694/sketch_20.jpg +- data/imagenet-r/n03345487/videogame_14.jpg +- data/imagenet-r/n02268443/misc_147.jpg +- data/imagenet-r/n02129165/origami_0.jpg +- data/imagenet-r/n02607072/misc_66.jpg +- data/imagenet-r/n01843383/deviantart_27.jpg +- data/imagenet-r/n07697537/deviantart_12.jpg +- data/imagenet-r/n07749582/sketch_20.jpg +- data/imagenet-r/n02395406/graffiti_0.jpg +- data/imagenet-r/n02236044/cartoon_6.jpg +- data/imagenet-r/n01748264/sketch_13.jpg +- data/imagenet-r/n04465501/sticker_1.jpg +- data/imagenet-r/n02099601/misc_4.jpg +- data/imagenet-r/n01806143/sculpture_10.jpg +- data/imagenet-r/n04086273/sketch_6.jpg +- data/imagenet-r/n01784675/painting_2.jpg +- data/imagenet-r/n02814860/videogame_4.jpg +- data/imagenet-r/n01531178/cartoon_30.jpg +- data/imagenet-r/n01774750/art_5.jpg +- data/imagenet-r/n07720875/painting_38.jpg +- data/imagenet-r/n07734744/graffiti_9.jpg +- data/imagenet-r/n04266014/graphic_3.jpg +- data/imagenet-r/n04347754/sketch_1.jpg +- data/imagenet-r/n02071294/deviantart_10.jpg +- data/imagenet-r/n01443537/graffiti_11.jpg +- data/imagenet-r/n01616318/toy_1.jpg +- data/imagenet-r/n02091032/misc_28.jpg +- data/imagenet-r/n03773504/sketch_15.jpg +- data/imagenet-r/n02823750/graphic_0.jpg +- data/imagenet-r/n01833805/cartoon_9.jpg +- data/imagenet-r/n02445715/sticker_1.jpg +- data/imagenet-r/n01514859/cartoon_12.jpg +- data/imagenet-r/n02112137/misc_25.jpg +- data/imagenet-r/n02099712/misc_17.jpg +- data/imagenet-r/n02802426/graffiti_1.jpg +- data/imagenet-r/n02906734/embroidery_6.jpg +- data/imagenet-r/n02939185/misc_3.jpg +- data/imagenet-r/n07768694/deviantart_15.jpg +- data/imagenet-r/n02480855/toy_7.jpg +- data/imagenet-r/n07734744/deviantart_27.jpg +- data/imagenet-r/n01882714/cartoon_48.jpg +- data/imagenet-r/n01484850/deviantart_16.jpg +- data/imagenet-r/n02129165/embroidery_15.jpg +- data/imagenet-r/n02219486/origami_0.jpg +- data/imagenet-r/n02108089/misc_26.jpg +- data/imagenet-r/n01518878/cartoon_3.jpg +- data/imagenet-r/n02110958/graphic_5.jpg +- data/imagenet-r/n02088094/misc_8.jpg +- data/imagenet-r/n04146614/misc_4.jpg +- data/imagenet-r/n02129165/toy_15.jpg +- data/imagenet-r/n02066245/tattoo_5.jpg +- data/imagenet-r/n04141076/sketch_11.jpg +- data/imagenet-r/n04310018/toy_4.jpg +- data/imagenet-r/n03630383/cartoon_7.jpg +- data/imagenet-r/n01614925/sculpture_6.jpg +- data/imagenet-r/n04591713/painting_42.jpg +- data/imagenet-r/n04465501/sketch_11.jpg +- data/imagenet-r/n07753275/origami_0.jpg +- data/imagenet-r/n02099601/misc_42.jpg +- data/imagenet-r/n04409515/sketch_18.jpg +- data/imagenet-r/n01644373/toy_3.jpg +- data/imagenet-r/n02480855/tattoo_48.jpg +- data/imagenet-r/n04465501/graphic_1.jpg +- data/imagenet-r/n01882714/cartoon_3.jpg +- data/imagenet-r/n01531178/painting_45.jpg +- data/imagenet-r/n07753592/misc_74.jpg +- data/imagenet-r/n02395406/sticker_3.jpg +- data/imagenet-r/n02346627/art_5.jpg +- data/imagenet-r/n07749582/origami_1.jpg +- data/imagenet-r/n01833805/embroidery_26.jpg +- data/imagenet-r/n02607072/misc_26.jpg +- data/imagenet-r/n02219486/tattoo_4.jpg +- data/imagenet-r/n02219486/graffiti_8.jpg +- data/imagenet-r/n02134084/misc_3.jpg +- data/imagenet-r/n03372029/sculpture_21.jpg +- data/imagenet-r/n07753275/painting_16.jpg +- data/imagenet-r/n03676483/misc_3.jpg +- data/imagenet-r/n02007558/embroidery_21.jpg +- data/imagenet-r/n02114367/misc_60.jpg +- data/imagenet-r/n02106662/misc_59.jpg +- data/imagenet-r/n02096585/misc_90.jpg +- data/imagenet-r/n02206856/sketch_8.jpg +- data/imagenet-r/n07753275/videogame_18.jpg +- data/imagenet-r/n07749582/sketch_11.jpg +- data/imagenet-r/n02102318/misc_44.jpg +- data/imagenet-r/n04347754/tattoo_3.jpg +- data/imagenet-r/n01614925/deviantart_0.jpg +- data/imagenet-r/n01616318/sketch_6.jpg +- data/imagenet-r/n02814860/cartoon_9.jpg +- data/imagenet-r/n02447366/cartoon_22.jpg +- data/imagenet-r/n01518878/sketch_6.jpg +- data/imagenet-r/n07753592/misc_63.jpg +- data/imagenet-r/n03424325/misc_76.jpg +- data/imagenet-r/n02480495/sketch_20.jpg +- data/imagenet-r/n02980441/videogame_28.jpg +- data/imagenet-r/n07697313/art_33.jpg +- data/imagenet-r/n01531178/cartoon_19.jpg +- data/imagenet-r/n02165456/toy_14.jpg +- data/imagenet-r/n02793495/painting_7.jpg +- data/imagenet-r/n02395406/art_1.jpg +- data/imagenet-r/n07693725/sketch_6.jpg +- data/imagenet-r/n02797295/misc_3.jpg +- data/imagenet-r/n02948072/cartoon_65.jpg +- data/imagenet-r/n02233338/deviantart_1.jpg +- data/imagenet-r/n02091134/misc_66.jpg +- data/imagenet-r/n02119022/misc_38.jpg +- data/imagenet-r/n02655020/misc_92.jpg +- data/imagenet-r/n01614925/tattoo_3.jpg +- data/imagenet-r/n02110341/deviantart_5.jpg +- data/imagenet-r/n02236044/origami_22.jpg +- data/imagenet-r/n02110185/graphic_7.jpg +- data/imagenet-r/n03630383/cartoon_8.jpg +- data/imagenet-r/n02607072/misc_60.jpg +- data/imagenet-r/n04192698/painting_1.jpg +- data/imagenet-r/n03649909/sketch_2.jpg +- data/imagenet-r/n02672831/painting_11.jpg +- data/imagenet-r/n01910747/painting_5.jpg +- data/imagenet-r/n03602883/misc_8.jpg +- data/imagenet-r/n04192698/sticker_1.jpg +- data/imagenet-r/n02134084/misc_38.jpg +- data/imagenet-r/n02398521/art_3.jpg +- data/imagenet-r/n02096585/misc_58.jpg +- data/imagenet-r/n01484850/cartoon_4.jpg +- data/imagenet-r/n02134084/misc_89.jpg +- data/imagenet-r/n03495258/embroidery_0.jpg +- data/imagenet-r/n02672831/painting_3.jpg +- data/imagenet-r/n03272010/graphic_2.jpg +- data/imagenet-r/n04147183/origami_0.jpg +- data/imagenet-r/n02206856/toy_7.jpg +- data/imagenet-r/n07742313/painting_6.jpg +- data/imagenet-r/n02085620/misc_32.jpg +- data/imagenet-r/n02128757/toy_8.jpg +- data/imagenet-r/n01806143/graffiti_4.jpg +- data/imagenet-r/n01833805/painting_0.jpg +- data/imagenet-r/n04146614/deviantart_0.jpg +- data/imagenet-r/n01855672/cartoon_10.jpg +- data/imagenet-r/n02814860/sketch_15.jpg +- data/imagenet-r/n02951358/sketch_11.jpg +- data/imagenet-r/n02909870/sketch_5.jpg +- data/imagenet-r/n03481172/sketch_24.jpg +- data/imagenet-r/n07753592/misc_50.jpg +- data/imagenet-r/n07720875/sketch_20.jpg +- data/imagenet-r/n03930630/painting_14.jpg +- data/imagenet-r/n04133789/art_9.jpg +- data/imagenet-r/n03467068/sticker_2.jpg +- data/imagenet-r/n02814860/cartoon_16.jpg +- data/imagenet-r/n01983481/misc_46.jpg +- data/imagenet-r/n02906734/cartoon_43.jpg +- data/imagenet-r/n09835506/videogame_19.jpg +- data/imagenet-r/n02480855/tattoo_55.jpg +- data/imagenet-r/n01494475/misc_73.jpg +- data/imagenet-r/n02007558/toy_0.jpg +- data/imagenet-r/n02410509/sculpture_8.jpg +- data/imagenet-r/n07697537/videogame_29.jpg +- data/imagenet-r/n01910747/tattoo_64.jpg +- data/imagenet-r/n07768694/deviantart_17.jpg +- data/imagenet-r/n07734744/videogame_49.jpg +- data/imagenet-r/n01986214/cartoon_5.jpg +- data/imagenet-r/n01806143/sculpture_5.jpg +- data/imagenet-r/n02110958/art_22.jpg +- data/imagenet-r/n02114367/sketch_5.jpg +- data/imagenet-r/n02939185/misc_12.jpg +- data/imagenet-r/n02128385/painting_2.jpg +- data/imagenet-r/n02841315/sculpture_14.jpg +- data/imagenet-r/n01882714/tattoo_5.jpg +- data/imagenet-r/n02112137/misc_18.jpg +- data/imagenet-r/n07768694/painting_5.jpg +- data/imagenet-r/n02980441/graphic_4.jpg +- data/imagenet-r/n01518878/toy_1.jpg +- data/imagenet-r/n01748264/misc_15.jpg +- data/imagenet-r/n02481823/graffiti_5.jpg +- data/imagenet-r/n02481823/sticker_1.jpg +- data/imagenet-r/n03602883/sketch_18.jpg +- data/imagenet-r/n04146614/toy_7.jpg +- data/imagenet-r/n07714990/cartoon_0.jpg +- data/imagenet-r/n02119022/sketch_9.jpg +- data/imagenet-r/n07697313/misc_13.jpg +- data/imagenet-r/n03424325/videogame_23.jpg +- data/imagenet-r/n01910747/tattoo_25.jpg +- data/imagenet-r/n09472597/deviantart_4.jpg +- data/imagenet-r/n01770393/graffiti_0.jpg +- data/imagenet-r/n02749479/sketch_2.jpg +- data/imagenet-r/n02948072/misc_8.jpg +- data/imagenet-r/n02097298/misc_17.jpg +- data/imagenet-r/n02236044/graffiti_12.jpg +- data/imagenet-r/n04086273/tattoo_17.jpg +- data/imagenet-r/n02398521/graffiti_0.jpg +- data/imagenet-r/n02056570/cartoon_4.jpg +- data/imagenet-r/n07734744/misc_17.jpg +- data/imagenet-r/n07714990/cartoon_35.jpg +- data/imagenet-r/n02088238/sketch_13.jpg +- data/imagenet-r/n07697313/toy_25.jpg +- data/imagenet-r/n02129165/cartoon_2.jpg +- data/imagenet-r/n01843383/cartoon_18.jpg +- data/imagenet-r/n02007558/graphic_2.jpg +- data/imagenet-r/n09835506/deviantart_4.jpg +- data/imagenet-r/n02317335/tattoo_32.jpg +- data/imagenet-r/n01983481/sketch_3.jpg +- data/imagenet-r/n02480495/painting_15.jpg +- data/imagenet-r/n01882714/deviantart_6.jpg +- data/imagenet-r/n09472597/painting_5.jpg +- data/imagenet-r/n02088364/misc_17.jpg +- data/imagenet-r/n01910747/graphic_14.jpg +- data/imagenet-r/n07753592/misc_126.jpg +- data/imagenet-r/n01518878/sketch_11.jpg +- data/imagenet-r/n02483362/misc_0.jpg +- data/imagenet-r/n02948072/sketch_4.jpg +- data/imagenet-r/n02056570/sketch_1.jpg +- data/imagenet-r/n04347754/art_7.jpg +- data/imagenet-r/n07697313/art_11.jpg +- data/imagenet-r/n02007558/embroidery_22.jpg +- data/imagenet-r/n07734744/graffiti_1.jpg +- data/imagenet-r/n07749582/graphic_2.jpg +- data/imagenet-r/n02134084/deviantart_11.jpg +- data/imagenet-r/n02123045/misc_3.jpg +- data/imagenet-r/n02071294/deviantart_14.jpg +- data/imagenet-r/n01644373/painting_4.jpg +- data/imagenet-r/n01614925/sketch_15.jpg +- data/imagenet-r/n07697537/misc_102.jpg +- data/imagenet-r/n02363005/graffiti_1.jpg +- data/imagenet-r/n02206856/art_23.jpg +- data/imagenet-r/n02481823/graffiti_2.jpg +- data/imagenet-r/n02206856/art_17.jpg +- data/imagenet-r/n02051845/deviantart_21.jpg +- data/imagenet-r/n02607072/deviantart_0.jpg +- data/imagenet-r/n02398521/sculpture_8.jpg +- data/imagenet-r/n04465501/toy_4.jpg +- data/imagenet-r/n10565667/cartoon_12.jpg +- data/imagenet-r/n09472597/sketch_14.jpg +- data/imagenet-r/n02119022/misc_84.jpg +- data/imagenet-r/n02094433/tattoo_0.jpg +- data/imagenet-r/n01847000/toy_9.jpg +- data/imagenet-r/n01986214/sculpture_12.jpg +- data/imagenet-r/n02364673/graffiti_2.jpg +- data/imagenet-r/n01694178/cartoon_5.jpg +- data/imagenet-r/n07734744/painting_33.jpg +- data/imagenet-r/n02268443/misc_15.jpg +- data/imagenet-r/n02129165/graffiti_19.jpg +- data/imagenet-r/n07768694/tattoo_5.jpg +- data/imagenet-r/n02841315/sketch_6.jpg +- data/imagenet-r/n04133789/cartoon_0.jpg +- data/imagenet-r/n07697537/videogame_10.jpg +- data/imagenet-r/n07697313/painting_23.jpg +- data/imagenet-r/n01843383/misc_4.jpg +- data/imagenet-r/n02110341/misc_72.jpg +- data/imagenet-r/n02423022/videogame_6.jpg +- data/imagenet-r/n04389033/cartoon_10.jpg +- data/imagenet-r/n02410509/art_17.jpg +- data/imagenet-r/n02802426/deviantart_9.jpg +- data/imagenet-r/n04409515/videogame_14.jpg +- data/imagenet-r/n04254680/deviantart_28.jpg +- data/imagenet-r/n02948072/deviantart_33.jpg +- data/imagenet-r/n02843684/misc_11.jpg +- data/imagenet-r/n02317335/sculpture_6.jpg +- data/imagenet-r/n02445715/painting_0.jpg +- data/imagenet-r/n01484850/art_12.jpg +- data/imagenet-r/n01882714/deviantart_24.jpg +- data/imagenet-r/n02106550/misc_58.jpg +- data/imagenet-r/n01498041/tattoo_7.jpg +- data/imagenet-r/n02672831/graffiti_9.jpg +- data/imagenet-r/n02909870/cartoon_23.jpg +- data/imagenet-r/n02268443/misc_16.jpg +- data/imagenet-r/n01443537/painting_14.jpg +- data/imagenet-r/n02672831/cartoon_33.jpg +- data/imagenet-r/n01770393/tattoo_71.jpg +- data/imagenet-r/n07734744/misc_2.jpg +- data/imagenet-r/n07753592/sketch_16.jpg +- data/imagenet-r/n02607072/misc_23.jpg +- data/imagenet-r/n02395406/sculpture_9.jpg +- data/imagenet-r/n03452741/deviantart_10.jpg +- data/imagenet-r/n07720875/painting_6.jpg +- data/imagenet-r/n04522168/cartoon_12.jpg +- data/imagenet-r/n01770393/tattoo_7.jpg +- data/imagenet-r/n01855672/misc_1.jpg +- data/imagenet-r/n12267677/misc_40.jpg +- data/imagenet-r/n07697313/cartoon_21.jpg +- data/imagenet-r/n02128757/misc_2.jpg +- data/imagenet-r/n02113624/misc_26.jpg +- data/imagenet-r/n02110341/misc_29.jpg +- data/imagenet-r/n03602883/misc_7.jpg +- data/imagenet-r/n04118538/videogame_7.jpg +- data/imagenet-r/n03424325/videogame_1.jpg +- data/imagenet-r/n02007558/misc_7.jpg +- data/imagenet-r/n07697537/sketch_20.jpg +- data/imagenet-r/n02110958/cartoon_35.jpg +- data/imagenet-r/n02007558/art_29.jpg +- data/imagenet-r/n01944390/misc_126.jpg +- data/imagenet-r/n04347754/sticker_5.jpg +- data/imagenet-r/n02526121/cartoon_24.jpg +- data/imagenet-r/n02909870/sketch_23.jpg +- data/imagenet-r/n01843383/painting_17.jpg +- data/imagenet-r/n02007558/painting_25.jpg +- data/imagenet-r/n02102318/misc_62.jpg +- data/imagenet-r/n03676483/graphic_0.jpg +- data/imagenet-r/n02117135/graphic_1.jpg +- data/imagenet-r/n03594945/cartoon_2.jpg +- data/imagenet-r/n02749479/misc_5.jpg +- data/imagenet-r/n02088238/misc_77.jpg +- data/imagenet-r/n01784675/tattoo_3.jpg +- data/imagenet-r/n01843383/cartoon_24.jpg +- data/imagenet-r/n02797295/misc_13.jpg +- data/imagenet-r/n07745940/painting_1.jpg +- data/imagenet-r/n02134084/misc_102.jpg +- data/imagenet-r/n02129165/graphic_9.jpg +- data/imagenet-r/n04086273/graffiti_5.jpg +- data/imagenet-r/n02480855/tattoo_44.jpg +- data/imagenet-r/n04254680/sketch_6.jpg +- data/imagenet-r/n02364673/graphic_3.jpg +- data/imagenet-r/n02395406/art_12.jpg +- data/imagenet-r/n01484850/painting_6.jpg +- data/imagenet-r/n01443537/cartoon_39.jpg +- data/imagenet-r/n02268443/misc_100.jpg +- data/imagenet-r/n02906734/painting_13.jpg +- data/imagenet-r/n02480855/tattoo_45.jpg +- data/imagenet-r/n02701002/sketch_3.jpg +- data/imagenet-r/n02423022/sketch_18.jpg +- data/imagenet-r/n02106550/misc_12.jpg +- data/imagenet-r/n07720875/sketch_7.jpg +- data/imagenet-r/n01882714/painting_19.jpg +- data/imagenet-r/n02236044/videogame_0.jpg +- data/imagenet-r/n02843684/sketch_23.jpg +- data/imagenet-r/n02110341/misc_35.jpg +- data/imagenet-r/n07693725/sculpture_1.jpg +- data/imagenet-r/n03888257/sketch_6.jpg +- data/imagenet-r/n07693725/painting_1.jpg +- data/imagenet-r/n07920052/painting_8.jpg +- data/imagenet-r/n01644373/tattoo_29.jpg +- data/imagenet-r/n02814860/videogame_14.jpg +- data/imagenet-r/n03372029/art_8.jpg +- data/imagenet-r/n03630383/cartoon_2.jpg +- data/imagenet-r/n02165456/sketch_0.jpg +- data/imagenet-r/n01644373/deviantart_1.jpg +- data/imagenet-r/n01443537/embroidery_3.jpg +- data/imagenet-r/n07734744/cartoon_15.jpg +- data/imagenet-r/n01616318/deviantart_3.jpg +- data/imagenet-r/n07873807/cartoon_10.jpg +- data/imagenet-r/n04133789/sketch_1.jpg +- data/imagenet-r/n02395406/cartoon_28.jpg +- data/imagenet-r/n01944390/sketch_9.jpg +- data/imagenet-r/n03602883/misc_61.jpg +- data/imagenet-r/n02091032/misc_4.jpg +- data/imagenet-r/n02206856/sticker_26.jpg +- data/imagenet-r/n03947888/tattoo_11.jpg +- data/imagenet-r/n02279972/sketch_11.jpg +- data/imagenet-r/n02007558/toy_12.jpg +- data/imagenet-r/n07734744/cartoon_8.jpg +- data/imagenet-r/n02268443/misc_33.jpg +- data/imagenet-r/n02138441/sketch_12.jpg +- data/imagenet-r/n02391049/misc_47.jpg +- data/imagenet-r/n01616318/cartoon_24.jpg +- data/imagenet-r/n02110958/tattoo_1.jpg +- data/imagenet-r/n02099601/misc_100.jpg +- data/imagenet-r/n07768694/sketch_22.jpg +- data/imagenet-r/n02066245/art_6.jpg +- data/imagenet-r/n02410509/toy_1.jpg +- data/imagenet-r/n01986214/sketch_16.jpg +- data/imagenet-r/n02398521/painting_16.jpg +- data/imagenet-r/n02088238/sketch_3.jpg +- data/imagenet-r/n04266014/sculpture_6.jpg +- data/imagenet-r/n07742313/painting_18.jpg +- data/imagenet-r/n02802426/videogame_14.jpg +- data/imagenet-r/n03888257/cartoon_20.jpg +- data/imagenet-r/n01443537/toy_8.jpg +- data/imagenet-r/n07734744/deviantart_7.jpg +- data/imagenet-r/n02110958/tattoo_11.jpg +- data/imagenet-r/n02088364/misc_32.jpg +- data/imagenet-r/n04536866/graffiti_0.jpg +- data/imagenet-r/n04522168/cartoon_29.jpg +- data/imagenet-r/n07745940/misc_20.jpg +- data/imagenet-r/n02206856/tattoo_21.jpg +- data/imagenet-r/n02098286/sketch_15.jpg +- data/imagenet-r/n03124170/cartoon_31.jpg +- data/imagenet-r/n02437616/origami_6.jpg +- data/imagenet-r/n02112137/sketch_15.jpg +- data/imagenet-r/n02951358/sketch_17.jpg +- data/imagenet-r/n02906734/painting_11.jpg +- data/imagenet-r/n02219486/origami_5.jpg +- data/imagenet-r/n02130308/misc_5.jpg +- data/imagenet-r/n02088238/misc_100.jpg +- data/imagenet-r/n02071294/toy_3.jpg +- data/imagenet-r/n02480855/videogame_3.jpg +- data/imagenet-r/n01833805/cartoon_26.jpg +- data/imagenet-r/n03124170/cartoon_63.jpg +- data/imagenet-r/n01882714/cartoon_29.jpg +- data/imagenet-r/n02909870/embroidery_3.jpg +- data/imagenet-r/n02814860/painting_28.jpg +- data/imagenet-r/n04254680/deviantart_21.jpg +- data/imagenet-r/n03888257/misc_0.jpg +- data/imagenet-r/n07614500/deviantart_3.jpg +- data/imagenet-r/n02398521/cartoon_12.jpg +- data/imagenet-r/n03372029/sketch_0.jpg +- data/imagenet-r/n02128757/toy_4.jpg +- data/imagenet-r/n02119022/misc_5.jpg +- data/imagenet-r/n02480495/painting_31.jpg +- data/imagenet-r/n02951358/deviantart_5.jpg +- data/imagenet-r/n04147183/painting_6.jpg +- data/imagenet-r/n03602883/sketch_12.jpg +- data/imagenet-r/n07920052/sketch_17.jpg +- data/imagenet-r/n02110341/misc_135.jpg +- data/imagenet-r/n02129165/graphic_6.jpg +- data/imagenet-r/n02113624/sketch_4.jpg +- data/imagenet-r/n02091032/sketch_14.jpg +- data/imagenet-r/n02091032/sketch_21.jpg +- data/imagenet-r/n01847000/embroidery_2.jpg +- data/imagenet-r/n02096585/tattoo_28.jpg +- data/imagenet-r/n02110341/misc_143.jpg +- data/imagenet-r/n02950826/videogame_14.jpg +- data/imagenet-r/n03649909/toy_0.jpg +- data/imagenet-r/n02445715/sketch_2.jpg +- data/imagenet-r/n04266014/graphic_5.jpg +- data/imagenet-r/n07695742/deviantart_13.jpg +- data/imagenet-r/n02966193/misc_5.jpg +- data/imagenet-r/n02110958/sketch_1.jpg +- data/imagenet-r/n01632777/cartoon_32.jpg +- data/imagenet-r/n02236044/tattoo_1.jpg +- data/imagenet-r/n01630670/sketch_3.jpg +- data/imagenet-r/n01614925/deviantart_17.jpg +- data/imagenet-r/n02951358/graphic_0.jpg +- data/imagenet-r/n07718472/deviantart_1.jpg +- data/imagenet-r/n07753275/videogame_22.jpg +- data/imagenet-r/n02447366/painting_15.jpg +- data/imagenet-r/n07614500/graffiti_0.jpg +- data/imagenet-r/n02236044/origami_0.jpg +- data/imagenet-r/n02655020/deviantart_18.jpg +- data/imagenet-r/n01833805/tattoo_4.jpg +- data/imagenet-r/n02236044/tattoo_12.jpg +- data/imagenet-r/n01774750/sketch_20.jpg +- data/imagenet-r/n02395406/cartoon_2.jpg +- data/imagenet-r/n02091032/misc_14.jpg +- data/imagenet-r/n03676483/graphic_1.jpg +- data/imagenet-r/n09472597/toy_5.jpg +- data/imagenet-r/n04465501/cartoon_16.jpg +- data/imagenet-r/n07734744/videogame_12.jpg +- data/imagenet-r/n01518878/painting_16.jpg +- data/imagenet-r/n04409515/sketch_9.jpg +- data/imagenet-r/n02391049/misc_69.jpg +- data/imagenet-r/n02410509/misc_10.jpg +- data/imagenet-r/n02268443/sketch_10.jpg +- data/imagenet-r/n03676483/cartoon_2.jpg +- data/imagenet-r/n03888257/cartoon_13.jpg +- data/imagenet-r/n02106166/misc_18.jpg +- data/imagenet-r/n02793495/painting_8.jpg +- data/imagenet-r/n04522168/deviantart_2.jpg +- data/imagenet-r/n04552348/deviantart_25.jpg +- data/imagenet-r/n04275548/deviantart_1.jpg +- data/imagenet-r/n02112137/sketch_1.jpg +- data/imagenet-r/n01443537/cartoon_2.jpg +- data/imagenet-r/n07720875/painting_43.jpg +- data/imagenet-r/n01833805/cartoon_5.jpg +- data/imagenet-r/n04254680/graffiti_1.jpg +- data/imagenet-r/n01784675/origami_6.jpg +- data/imagenet-r/n02951358/misc_1.jpg +- data/imagenet-r/n02655020/misc_65.jpg +- data/imagenet-r/n02106030/sketch_2.jpg +- data/imagenet-r/n07768694/cartoon_0.jpg +- data/imagenet-r/n02106166/sketch_12.jpg +- data/imagenet-r/n01910747/misc_9.jpg +- data/imagenet-r/n02108915/misc_75.jpg +- data/imagenet-r/n02219486/painting_2.jpg +- data/imagenet-r/n07697537/misc_97.jpg +- data/imagenet-r/n02130308/cartoon_15.jpg +- data/imagenet-r/n07753592/videogame_0.jpg +- data/imagenet-r/n07718472/deviantart_0.jpg +- data/imagenet-r/n04536866/sculpture_2.jpg +- data/imagenet-r/n03710193/misc_33.jpg +- data/imagenet-r/n02950826/sketch_21.jpg +- data/imagenet-r/n02808440/cartoon_20.jpg +- data/imagenet-r/n03498962/videogame_7.jpg +- data/imagenet-r/n01833805/deviantart_0.jpg +- data/imagenet-r/n02841315/cartoon_33.jpg +- data/imagenet-r/n04552348/misc_7.jpg +- data/imagenet-r/n01806143/deviantart_13.jpg +- data/imagenet-r/n02007558/cartoon_33.jpg +- data/imagenet-r/n02317335/tattoo_14.jpg +- data/imagenet-r/n02445715/painting_3.jpg +- data/imagenet-r/n02113023/misc_13.jpg +- data/imagenet-r/n07614500/deviantart_18.jpg +- data/imagenet-r/n02110185/tattoo_2.jpg +- data/imagenet-r/n03124170/tattoo_4.jpg +- data/imagenet-r/n02992529/graffiti_0.jpg +- data/imagenet-r/n07753592/misc_6.jpg +- data/imagenet-r/n04146614/toy_21.jpg +- data/imagenet-r/n01833805/tattoo_105.jpg +- data/imagenet-r/n02325366/misc_0.jpg +- data/imagenet-r/n02117135/toy_3.jpg +- data/imagenet-r/n04487394/sketch_5.jpg +- data/imagenet-r/n07742313/painting_26.jpg +- data/imagenet-r/n02110341/misc_120.jpg +- data/imagenet-r/n01748264/tattoo_9.jpg +- data/imagenet-r/n01484850/painting_7.jpg +- data/imagenet-r/n02268443/misc_192.jpg +- data/imagenet-r/n01748264/tattoo_6.jpg +- data/imagenet-r/n02113624/misc_3.jpg +- data/imagenet-r/n02085620/misc_70.jpg +- data/imagenet-r/n07734744/sketch_23.jpg +- data/imagenet-r/n02672831/sketch_2.jpg +- data/imagenet-r/n02510455/misc_140.jpg +- data/imagenet-r/n02128385/toy_0.jpg +- data/imagenet-r/n03124170/sketch_5.jpg +- data/imagenet-r/n01986214/sculpture_7.jpg +- data/imagenet-r/n07693725/sketch_0.jpg +- data/imagenet-r/n02110958/graffiti_6.jpg +- data/imagenet-r/n03495258/cartoon_3.jpg +- data/imagenet-r/n02279972/painting_18.jpg +- data/imagenet-r/n01770393/graphic_2.jpg +- data/imagenet-r/n01882714/painting_15.jpg +- data/imagenet-r/n02364673/cartoon_11.jpg +- data/imagenet-r/n04146614/painting_4.jpg +- data/imagenet-r/n01847000/misc_0.jpg +- data/imagenet-r/n07753275/toy_6.jpg +- data/imagenet-r/n07753592/misc_127.jpg +- data/imagenet-r/n03424325/sketch_7.jpg +- data/imagenet-r/n03452741/sketch_1.jpg +- data/imagenet-r/n01770393/graffiti_7.jpg +- data/imagenet-r/n02279972/painting_40.jpg +- data/imagenet-r/n02134084/misc_37.jpg +- data/imagenet-r/n04591713/painting_11.jpg +- data/imagenet-r/n02206856/cartoon_12.jpg +- data/imagenet-r/n02108915/misc_35.jpg +- data/imagenet-r/n02007558/tattoo_29.jpg +- data/imagenet-r/n02364673/painting_2.jpg +- data/imagenet-r/n04141076/sketch_8.jpg +- data/imagenet-r/n02655020/misc_73.jpg +- data/imagenet-r/n02802426/toy_4.jpg +- data/imagenet-r/n02138441/sketch_7.jpg +- data/imagenet-r/n02410509/art_14.jpg +- data/imagenet-r/n02066245/sculpture_2.jpg +- data/imagenet-r/n02483362/art_3.jpg +- data/imagenet-r/n04465501/sketch_2.jpg +- data/imagenet-r/n02106550/misc_20.jpg +- data/imagenet-r/n03345487/graffiti_1.jpg +- data/imagenet-r/n02206856/cartoon_51.jpg +- data/imagenet-r/n02091134/misc_67.jpg +- data/imagenet-r/n02445715/cartoon_34.jpg +- data/imagenet-r/n01833805/deviantart_6.jpg +- data/imagenet-r/n07614500/origami_8.jpg +- data/imagenet-r/n04275548/videogame_13.jpg +- data/imagenet-r/n01484850/painting_5.jpg +- data/imagenet-r/n09472597/painting_9.jpg +- data/imagenet-r/n02099601/sketch_18.jpg +- data/imagenet-r/n07693725/cartoon_25.jpg +- data/imagenet-r/n04133789/cartoon_12.jpg +- data/imagenet-r/n02091134/misc_53.jpg +- data/imagenet-r/n02236044/sculpture_4.jpg +- data/imagenet-r/n10565667/cartoon_14.jpg +- data/imagenet-r/n02655020/misc_46.jpg +- data/imagenet-r/n03481172/graffiti_7.jpg +- data/imagenet-r/n02481823/deviantart_18.jpg +- data/imagenet-r/n02510455/misc_24.jpg +- data/imagenet-r/n01518878/cartoon_58.jpg +- data/imagenet-r/n02056570/cartoon_1.jpg +- data/imagenet-r/n01531178/painting_25.jpg +- data/imagenet-r/n01882714/graffiti_0.jpg +- data/imagenet-r/n01694178/sketch_10.jpg +- data/imagenet-r/n07920052/misc_1.jpg +- data/imagenet-r/n04254680/graphic_6.jpg +- data/imagenet-r/n02672831/misc_0.jpg +- data/imagenet-r/n01847000/art_1.jpg +- data/imagenet-r/n02356798/videogame_0.jpg +- data/imagenet-r/n01847000/cartoon_11.jpg +- data/imagenet-r/n02106550/misc_62.jpg +- data/imagenet-r/n02113023/sketch_4.jpg +- data/imagenet-r/n01630670/sketch_6.jpg +- data/imagenet-r/n01770393/cartoon_33.jpg +- data/imagenet-r/n03124170/sculpture_2.jpg +- data/imagenet-r/n02437616/painting_4.jpg +- data/imagenet-r/n01847000/misc_12.jpg +- data/imagenet-r/n02110185/toy_6.jpg +- data/imagenet-r/n01614925/graphic_0.jpg +- data/imagenet-r/n09472597/origami_3.jpg +- data/imagenet-r/n02102318/misc_30.jpg +- data/imagenet-r/n02823750/cartoon_6.jpg +- data/imagenet-r/n04141076/sculpture_1.jpg +- data/imagenet-r/n01833805/tattoo_16.jpg +- data/imagenet-r/n03467068/sculpture_0.jpg +- data/imagenet-r/n03773504/sketch_19.jpg +- data/imagenet-r/n04409515/sketch_21.jpg +- data/imagenet-r/n02364673/sketch_13.jpg +- data/imagenet-r/n03424325/misc_8.jpg +- data/imagenet-r/n02129604/deviantart_12.jpg +- data/imagenet-r/n02094433/misc_44.jpg +- data/imagenet-r/n01843383/cartoon_2.jpg +- data/imagenet-r/n07742313/art_4.jpg +- data/imagenet-r/n07714990/videogame_2.jpg +- data/imagenet-r/n01494475/misc_98.jpg +- data/imagenet-r/n01484850/misc_10.jpg +- data/imagenet-r/n03495258/graphic_3.jpg +- data/imagenet-r/n04522168/painting_13.jpg +- data/imagenet-r/n02088094/sketch_14.jpg +- data/imagenet-r/n07734744/sculpture_3.jpg +- data/imagenet-r/n04552348/deviantart_22.jpg +- data/imagenet-r/n02091134/misc_21.jpg +- data/imagenet-r/n02206856/sticker_19.jpg +- data/imagenet-r/n02841315/cartoon_15.jpg +- data/imagenet-r/n04487394/sketch_6.jpg +- data/imagenet-r/n02268443/misc_57.jpg +- data/imagenet-r/n02802426/tattoo_9.jpg +- data/imagenet-r/n01531178/origami_0.jpg +- data/imagenet-r/n01494475/misc_122.jpg +- data/imagenet-r/n02769748/sketch_14.jpg +- data/imagenet-r/n03930630/sketch_23.jpg +- data/imagenet-r/n04254680/tattoo_8.jpg +- data/imagenet-r/n07697537/misc_13.jpg +- data/imagenet-r/n02138441/sculpture_3.jpg +- data/imagenet-r/n02236044/art_16.jpg +- data/imagenet-r/n03372029/graffiti_7.jpg +- data/imagenet-r/n02325366/sketch_14.jpg +- data/imagenet-r/n04465501/videogame_5.jpg +- data/imagenet-r/n02051845/painting_18.jpg +- data/imagenet-r/n07697313/videogame_6.jpg +- data/imagenet-r/n02088238/misc_45.jpg +- data/imagenet-r/n01498041/cartoon_0.jpg +- data/imagenet-r/n02423022/videogame_5.jpg +- data/imagenet-r/n07753275/cartoon_9.jpg +- data/imagenet-r/n03498962/sketch_10.jpg +- data/imagenet-r/n04141076/sketch_1.jpg +- data/imagenet-r/n01806143/sculpture_9.jpg +- data/imagenet-r/n01514859/toy_16.jpg +- data/imagenet-r/n02106662/tattoo_4.jpg +- data/imagenet-r/n02206856/cartoon_61.jpg +- data/imagenet-r/n03372029/sculpture_20.jpg +- data/imagenet-r/n07873807/sketch_4.jpg +- data/imagenet-r/n07720875/art_1.jpg +- data/imagenet-r/n02092339/misc_6.jpg +- data/imagenet-r/n07753592/sketch_20.jpg +- data/imagenet-r/n01514859/sculpture_4.jpg +- data/imagenet-r/n04552348/painting_5.jpg +- data/imagenet-r/n03947888/videogame_18.jpg +- data/imagenet-r/n01630670/sketch_13.jpg +- data/imagenet-r/n07753592/misc_120.jpg +- data/imagenet-r/n01644373/tattoo_11.jpg +- data/imagenet-r/n01855672/sketch_2.jpg +- data/imagenet-r/n04389033/sketch_5.jpg +- data/imagenet-r/n04536866/sketch_6.jpg +- data/imagenet-r/n07734744/graffiti_42.jpg +- data/imagenet-r/n02138441/misc_4.jpg +- data/imagenet-r/n04552348/misc_6.jpg +- data/imagenet-r/n07745940/misc_3.jpg +- data/imagenet-r/n04141076/deviantart_25.jpg +- data/imagenet-r/n07734744/toy_16.jpg +- data/imagenet-r/n02110958/graffiti_1.jpg +- data/imagenet-r/n01614925/deviantart_42.jpg +- data/imagenet-r/n04591713/painting_35.jpg +- data/imagenet-r/n02129604/art_5.jpg +- data/imagenet-r/n03630383/sketch_19.jpg +- data/imagenet-r/n01616318/deviantart_18.jpg +- data/imagenet-r/n02108915/misc_109.jpg +- data/imagenet-r/n07873807/deviantart_34.jpg +- data/imagenet-r/n03775071/sketch_22.jpg +- data/imagenet-r/n02134084/misc_80.jpg +- data/imagenet-r/n02939185/deviantart_11.jpg +- data/imagenet-r/n01694178/painting_1.jpg +- data/imagenet-r/n07695742/sketch_21.jpg +- data/imagenet-r/n02447366/cartoon_8.jpg +- data/imagenet-r/n02268443/misc_152.jpg +- data/imagenet-r/n01694178/art_10.jpg +- data/imagenet-r/n04141076/painting_11.jpg +- data/imagenet-r/n07697313/misc_10.jpg +- data/imagenet-r/n02206856/painting_7.jpg +- data/imagenet-r/n02447366/sketch_18.jpg +- data/imagenet-r/n07697537/misc_117.jpg +- data/imagenet-r/n03494278/painting_7.jpg +- data/imagenet-r/n07880968/cartoon_17.jpg +- data/imagenet-r/n02486410/cartoon_22.jpg +- data/imagenet-r/n02364673/painting_14.jpg +- data/imagenet-r/n02909870/cartoon_1.jpg +- data/imagenet-r/n07745940/graffiti_31.jpg +- data/imagenet-r/n02088238/misc_91.jpg +- data/imagenet-r/n02123045/sculpture_2.jpg +- data/imagenet-r/n01770393/tattoo_45.jpg +- data/imagenet-r/n01784675/cartoon_6.jpg +- data/imagenet-r/n03498962/videogame_14.jpg +- data/imagenet-r/n03773504/sketch_17.jpg +- data/imagenet-r/n02948072/toy_2.jpg +- data/imagenet-r/n02106550/misc_15.jpg +- data/imagenet-r/n02395406/videogame_1.jpg +- data/imagenet-r/n04522168/videogame_1.jpg +- data/imagenet-r/n04310018/painting_21.jpg +- data/imagenet-r/n04146614/toy_9.jpg +- data/imagenet-r/n02410509/art_19.jpg +- data/imagenet-r/n03676483/cartoon_4.jpg +- data/imagenet-r/n04266014/toy_7.jpg +- data/imagenet-r/n02966193/cartoon_27.jpg +- data/imagenet-r/n02119022/tattoo_4.jpg +- data/imagenet-r/n07734744/sculpture_17.jpg +- data/imagenet-r/n02841315/painting_0.jpg +- data/imagenet-r/n01748264/sketch_6.jpg +- data/imagenet-r/n01534433/videogame_3.jpg +- data/imagenet-r/n01494475/misc_138.jpg +- data/imagenet-r/n02939185/deviantart_3.jpg +- data/imagenet-r/n07753275/cartoon_1.jpg +- data/imagenet-r/n02128385/toy_2.jpg +- data/imagenet-r/n07753275/sketch_6.jpg +- data/imagenet-r/n09472597/deviantart_17.jpg +- data/imagenet-r/n04086273/tattoo_9.jpg +- data/imagenet-r/n02481823/painting_21.jpg +- data/imagenet-r/n07768694/deviantart_1.jpg +- data/imagenet-r/n03424325/misc_10.jpg +- data/imagenet-r/n07693725/sculpture_0.jpg +- data/imagenet-r/n02051845/sculpture_5.jpg +- data/imagenet-r/n01518878/sketch_13.jpg +- data/imagenet-r/n02129165/misc_4.jpg +- data/imagenet-r/n01518878/painting_12.jpg +- data/imagenet-r/n07768694/videogame_1.jpg +- data/imagenet-r/n03495258/painting_2.jpg +- data/imagenet-r/n02112137/sketch_3.jpg +- data/imagenet-r/n02279972/painting_3.jpg +- data/imagenet-r/n07734744/graphic_7.jpg +- data/imagenet-r/n01694178/cartoon_8.jpg +- data/imagenet-r/n02007558/graffiti_36.jpg +- data/imagenet-r/n01514859/sketch_1.jpg +- data/imagenet-r/n07697313/graffiti_4.jpg +- data/imagenet-r/n01632777/cartoon_5.jpg +- data/imagenet-r/n02802426/tattoo_0.jpg +- data/imagenet-r/n02206856/embroidery_20.jpg +- data/imagenet-r/n02219486/sculpture_20.jpg +- data/imagenet-r/n02410509/sketch_1.jpg +- data/imagenet-r/n01484850/art_7.jpg +- data/imagenet-r/n07695742/sketch_22.jpg +- data/imagenet-r/n02138441/art_4.jpg +- data/imagenet-r/n02219486/sketch_12.jpg +- data/imagenet-r/n04347754/graffiti_0.jpg +- data/imagenet-r/n04536866/cartoon_1.jpg +- data/imagenet-r/n03467068/sketch_0.jpg +- data/imagenet-r/n02510455/misc_102.jpg +- data/imagenet-r/n10565667/cartoon_10.jpg +- data/imagenet-r/n02165456/cartoon_22.jpg +- data/imagenet-r/n04086273/videogame_3.jpg +- data/imagenet-r/n02110958/tattoo_14.jpg +- data/imagenet-r/n02445715/cartoon_30.jpg +- data/imagenet-r/n02410509/origami_11.jpg +- data/imagenet-r/n02317335/cartoon_6.jpg +- data/imagenet-r/n02129604/graffiti_7.jpg +- data/imagenet-r/n07614500/graffiti_3.jpg +- data/imagenet-r/n02486410/sketch_12.jpg +- data/imagenet-r/n03372029/sculpture_0.jpg +- data/imagenet-r/n01644373/deviantart_0.jpg +- data/imagenet-r/n07734744/videogame_28.jpg +- data/imagenet-r/n02106166/sketch_21.jpg +- data/imagenet-r/n02325366/misc_23.jpg +- data/imagenet-r/n07695742/painting_2.jpg +- data/imagenet-r/n07920052/embroidery_0.jpg +- data/imagenet-r/n02130308/painting_33.jpg +- data/imagenet-r/n02206856/graffiti_0.jpg +- data/imagenet-r/n02483362/painting_4.jpg +- data/imagenet-r/n01784675/origami_7.jpg +- data/imagenet-r/n02364673/sketch_19.jpg +- data/imagenet-r/n02007558/toy_15.jpg +- data/imagenet-r/n02134084/videogame_5.jpg +- data/imagenet-r/n02109525/misc_23.jpg +- data/imagenet-r/n02128385/sculpture_4.jpg +- data/imagenet-r/n02843684/embroidery_10.jpg +- data/imagenet-r/n02948072/embroidery_18.jpg +- data/imagenet-r/n04536866/deviantart_4.jpg +- data/imagenet-r/n02481823/sketch_10.jpg +- data/imagenet-r/n02110341/misc_134.jpg +- data/imagenet-r/n04347754/videogame_24.jpg +- data/imagenet-r/n03424325/misc_16.jpg +- data/imagenet-r/n03124170/cartoon_37.jpg +- data/imagenet-r/n01644373/tattoo_5.jpg +- data/imagenet-r/n04141076/cartoon_53.jpg +- data/imagenet-r/n01644373/origami_0.jpg +- data/imagenet-r/n01986214/painting_5.jpg +- data/imagenet-r/n02096585/misc_106.jpg +- data/imagenet-r/n01748264/misc_13.jpg +- data/imagenet-r/n02410509/cartoon_1.jpg +- data/imagenet-r/n01694178/tattoo_5.jpg +- data/imagenet-r/n02948072/sketch_28.jpg +- data/imagenet-r/n02236044/origami_11.jpg +- data/imagenet-r/n02398521/toy_11.jpg +- data/imagenet-r/n02110185/sketch_11.jpg +- data/imagenet-r/n02909870/sticker_7.jpg +- data/imagenet-r/n02437616/painting_7.jpg +- data/imagenet-r/n01443537/cartoon_33.jpg +- data/imagenet-r/n02607072/deviantart_4.jpg +- data/imagenet-r/n01518878/art_2.jpg +- data/imagenet-r/n02808440/cartoon_23.jpg +- data/imagenet-r/n02447366/sticker_5.jpg +- data/imagenet-r/n02445715/toy_6.jpg +- data/imagenet-r/n02510455/misc_58.jpg +- data/imagenet-r/n01614925/sculpture_1.jpg +- data/imagenet-r/n04086273/tattoo_21.jpg +- data/imagenet-r/n02077923/misc_16.jpg +- data/imagenet-r/n01748264/tattoo_41.jpg +- data/imagenet-r/n02085620/tattoo_0.jpg +- data/imagenet-r/n02206856/tattoo_4.jpg +- data/imagenet-r/n02138441/painting_28.jpg +- data/imagenet-r/n07768694/painting_11.jpg +- data/imagenet-r/n01443537/graffiti_18.jpg +- data/imagenet-r/n02909870/sculpture_5.jpg +- data/imagenet-r/n01498041/graphic_0.jpg +- data/imagenet-r/n02066245/sculpture_3.jpg +- data/imagenet-r/n01443537/graphic_3.jpg +- data/imagenet-r/n02481823/graphic_2.jpg +- data/imagenet-r/n04522168/sticker_4.jpg +- data/imagenet-r/n02129604/deviantart_31.jpg +- data/imagenet-r/n04146614/deviantart_12.jpg +- data/imagenet-r/n01616318/origami_0.jpg +- data/imagenet-r/n02096585/misc_73.jpg +- data/imagenet-r/n02655020/misc_75.jpg +- data/imagenet-r/n02099601/misc_99.jpg +- data/imagenet-r/n01774750/origami_2.jpg +- data/imagenet-r/n01882714/embroidery_1.jpg +- data/imagenet-r/n03272010/origami_2.jpg +- data/imagenet-r/n03930630/misc_5.jpg +- data/imagenet-r/n09835506/deviantart_5.jpg +- data/imagenet-r/n02480855/tattoo_32.jpg +- data/imagenet-r/n07753275/cartoon_10.jpg +- data/imagenet-r/n02129604/tattoo_46.jpg +- data/imagenet-r/n04465501/painting_6.jpg +- data/imagenet-r/n02364673/cartoon_4.jpg +- data/imagenet-r/n02279972/painting_12.jpg +- data/imagenet-r/n04147183/painting_18.jpg +- data/imagenet-r/n02106550/misc_64.jpg +- data/imagenet-r/n02395406/origami_0.jpg +- data/imagenet-r/n04552348/sticker_3.jpg +- data/imagenet-r/n02007558/graffiti_3.jpg +- data/imagenet-r/n07873807/toy_3.jpg +- data/imagenet-r/n02102318/misc_8.jpg +- data/imagenet-r/n01644373/tattoo_52.jpg +- data/imagenet-r/n02129165/painting_15.jpg +- data/imagenet-r/n07753275/misc_12.jpg +- data/imagenet-r/n01443537/graffiti_6.jpg +- data/imagenet-r/n03372029/sketch_2.jpg +- data/imagenet-r/n03124170/cartoon_2.jpg +- data/imagenet-r/n01677366/misc_1.jpg +- data/imagenet-r/n02165456/tattoo_21.jpg +- data/imagenet-r/n01882714/art_9.jpg +- data/imagenet-r/n07697313/sticker_1.jpg +- data/imagenet-r/n01514859/deviantart_3.jpg +- data/imagenet-r/n02123045/cartoon_22.jpg +- data/imagenet-r/n02607072/deviantart_20.jpg +- data/imagenet-r/n07720875/painting_2.jpg +- data/imagenet-r/n03124170/sketch_19.jpg +- data/imagenet-r/n04536866/sketch_2.jpg +- data/imagenet-r/n02106550/tattoo_13.jpg +- data/imagenet-r/n03124170/cartoon_52.jpg +- data/imagenet-r/n02701002/cartoon_2.jpg +- data/imagenet-r/n02317335/sketch_3.jpg +- data/imagenet-r/n02112137/misc_6.jpg +- data/imagenet-r/n02607072/sketch_16.jpg +- data/imagenet-r/n02268443/sketch_2.jpg +- data/imagenet-r/n07753592/misc_150.jpg +- data/imagenet-r/n02110185/toy_2.jpg +- data/imagenet-r/n03424325/misc_96.jpg +- data/imagenet-r/n01847000/misc_3.jpg +- data/imagenet-r/n02165456/tattoo_22.jpg +- data/imagenet-r/n02395406/toy_30.jpg +- data/imagenet-r/n02480855/cartoon_0.jpg +- data/imagenet-r/n03124170/cartoon_44.jpg +- data/imagenet-r/n04086273/videogame_21.jpg +- data/imagenet-r/n07720875/painting_24.jpg +- data/imagenet-r/n03676483/toy_1.jpg +- data/imagenet-r/n02701002/videogame_4.jpg +- data/imagenet-r/n02445715/videogame_5.jpg +- data/imagenet-r/n03372029/sculpture_24.jpg +- data/imagenet-r/n04310018/painting_6.jpg +- data/imagenet-r/n01632777/art_4.jpg +- data/imagenet-r/n03602883/sketch_21.jpg +- data/imagenet-r/n02110341/misc_132.jpg +- data/imagenet-r/n02138441/toy_4.jpg +- data/imagenet-r/n02814860/cartoon_10.jpg +- data/imagenet-r/n02391049/misc_12.jpg +- data/imagenet-r/n02823750/art_0.jpg +- data/imagenet-r/n01632777/misc_1.jpg +- data/imagenet-r/n02108915/misc_96.jpg +- data/imagenet-r/n07745940/toy_12.jpg +- data/imagenet-r/n02110185/sketch_4.jpg +- data/imagenet-r/n04465501/videogame_15.jpg +- data/imagenet-r/n02268443/misc_146.jpg +- data/imagenet-r/n02363005/tattoo_3.jpg +- data/imagenet-r/n02437616/sculpture_4.jpg +- data/imagenet-r/n04141076/toy_7.jpg +- data/imagenet-r/n04192698/graffiti_0.jpg +- data/imagenet-r/n02797295/misc_12.jpg +- data/imagenet-r/n01644373/painting_27.jpg +- data/imagenet-r/n02088094/misc_12.jpg +- data/imagenet-r/n02445715/misc_1.jpg +- data/imagenet-r/n02106166/misc_4.jpg +- data/imagenet-r/n02099601/sketch_11.jpg +- data/imagenet-r/n01855672/painting_3.jpg +- data/imagenet-r/n04266014/misc_15.jpg +- data/imagenet-r/n01748264/sketch_15.jpg +- data/imagenet-r/n01944390/misc_147.jpg +- data/imagenet-r/n03124170/graffiti_14.jpg +- data/imagenet-r/n02364673/sculpture_2.jpg +- data/imagenet-r/n04310018/painting_7.jpg +- data/imagenet-r/n01518878/misc_3.jpg +- data/imagenet-r/n02445715/toy_8.jpg +- data/imagenet-r/n01774750/tattoo_20.jpg +- data/imagenet-r/n02655020/sketch_6.jpg +- data/imagenet-r/n09472597/videogame_1.jpg +- data/imagenet-r/n01882714/toy_10.jpg +- data/imagenet-r/n02814860/deviantart_17.jpg +- data/imagenet-r/n02128757/sculpture_5.jpg +- data/imagenet-r/n02437616/art_7.jpg +- data/imagenet-r/n07753592/misc_91.jpg +- data/imagenet-r/n03676483/painting_7.jpg +- data/imagenet-r/n03649909/art_5.jpg +- data/imagenet-r/n07614500/graffiti_7.jpg +- data/imagenet-r/n07753592/deviantart_10.jpg +- data/imagenet-r/n07753275/toy_1.jpg +- data/imagenet-r/n02086240/misc_35.jpg +- data/imagenet-r/n02097298/misc_16.jpg +- data/imagenet-r/n02481823/tattoo_8.jpg +- data/imagenet-r/n03947888/deviantart_0.jpg +- data/imagenet-r/n03498962/cartoon_14.jpg +- data/imagenet-r/n01514859/videogame_1.jpg +- data/imagenet-r/n02085620/misc_97.jpg +- data/imagenet-r/n02110958/cartoon_32.jpg +- data/imagenet-r/n04141076/sketch_17.jpg +- data/imagenet-r/n01494475/misc_29.jpg +- data/imagenet-r/n04254680/cartoon_5.jpg +- data/imagenet-r/n04465501/sketch_21.jpg +- data/imagenet-r/n07742313/videogame_7.jpg +- data/imagenet-r/n07753592/sketch_7.jpg +- data/imagenet-r/n01774750/art_3.jpg +- data/imagenet-r/n09835506/deviantart_10.jpg +- data/imagenet-r/n07714990/deviantart_4.jpg +- data/imagenet-r/n01843383/embroidery_1.jpg +- data/imagenet-r/n02129604/tattoo_9.jpg +- data/imagenet-r/n02066245/sketch_7.jpg +- data/imagenet-r/n01855672/painting_7.jpg +- data/imagenet-r/n02948072/sketch_37.jpg +- data/imagenet-r/n01443537/cartoon_1.jpg +- data/imagenet-r/n04275548/art_4.jpg +- data/imagenet-r/n07742313/painting_20.jpg +- data/imagenet-r/n04522168/cartoon_3.jpg +- data/imagenet-r/n07734744/videogame_21.jpg +- data/imagenet-r/n01518878/painting_9.jpg +- data/imagenet-r/n02110341/misc_159.jpg +- data/imagenet-r/n07753592/misc_42.jpg +- data/imagenet-r/n01843383/deviantart_2.jpg +- data/imagenet-r/n01882714/videogame_1.jpg +- data/imagenet-r/n03495258/sketch_16.jpg +- data/imagenet-r/n01882714/cartoon_32.jpg +- data/imagenet-r/n02672831/painting_15.jpg +- data/imagenet-r/n02317335/sculpture_9.jpg +- data/imagenet-r/n02317335/graphic_3.jpg +- data/imagenet-r/n07745940/graphic_9.jpg +- data/imagenet-r/n02088364/sketch_6.jpg +- data/imagenet-r/n02483362/cartoon_0.jpg +- data/imagenet-r/n07753592/misc_116.jpg +- data/imagenet-r/n02009912/misc_7.jpg +- data/imagenet-r/n02356798/graffiti_0.jpg +- data/imagenet-r/n04409515/cartoon_11.jpg +- data/imagenet-r/n02841315/cartoon_13.jpg +- data/imagenet-r/n02110958/misc_10.jpg +- data/imagenet-r/n02480495/painting_27.jpg +- data/imagenet-r/n01843383/sketch_24.jpg +- data/imagenet-r/n04409515/deviantart_15.jpg +- data/imagenet-r/n02123045/art_5.jpg +- data/imagenet-r/n02510455/misc_130.jpg +- data/imagenet-r/n02279972/sketch_5.jpg +- data/imagenet-r/n01843383/graphic_2.jpg +- data/imagenet-r/n01882714/deviantart_41.jpg +- data/imagenet-r/n01770393/cartoon_25.jpg +- data/imagenet-r/n03494278/art_1.jpg +- data/imagenet-r/n02097298/misc_8.jpg +- data/imagenet-r/n01944390/misc_89.jpg +- data/imagenet-r/n02802426/sketch_22.jpg +- data/imagenet-r/n04409515/cartoon_23.jpg +- data/imagenet-r/n02445715/cartoon_17.jpg +- data/imagenet-r/n02099712/sketch_19.jpg +- data/imagenet-r/n02410509/painting_12.jpg +- data/imagenet-r/n02445715/toy_0.jpg +- data/imagenet-r/n07745940/cartoon_15.jpg +- data/imagenet-r/n02110341/misc_123.jpg +- data/imagenet-r/n07749582/sketch_15.jpg +- data/imagenet-r/n02483362/sketch_15.jpg +- data/imagenet-r/n03424325/misc_66.jpg +- data/imagenet-r/n02007558/misc_5.jpg +- data/imagenet-r/n02134084/misc_15.jpg +- data/imagenet-r/n02086240/misc_24.jpg +- data/imagenet-r/n02106662/misc_29.jpg +- data/imagenet-r/n03602883/misc_31.jpg +- data/imagenet-r/n02096585/misc_161.jpg +- data/imagenet-r/n01944390/tattoo_33.jpg +- data/imagenet-r/n02098286/sketch_10.jpg +- data/imagenet-r/n02447366/sticker_1.jpg +- data/imagenet-r/n02268443/misc_185.jpg +- data/imagenet-r/n04147183/deviantart_16.jpg +- data/imagenet-r/n04275548/art_5.jpg +- data/imagenet-r/n02607072/misc_67.jpg +- data/imagenet-r/n07745940/misc_16.jpg +- data/imagenet-r/n01944390/misc_21.jpg +- data/imagenet-r/n02190166/painting_0.jpg +- data/imagenet-r/n02108089/misc_31.jpg +- data/imagenet-r/n02445715/cartoon_27.jpg +- data/imagenet-r/n03947888/cartoon_8.jpg +- data/imagenet-r/n07697313/art_30.jpg +- data/imagenet-r/n07697537/videogame_12.jpg +- data/imagenet-r/n02094433/sketch_21.jpg +- data/imagenet-r/n02091134/misc_87.jpg +- data/imagenet-r/n09472597/art_3.jpg +- data/imagenet-r/n02094433/misc_34.jpg +- data/imagenet-r/n01630670/painting_5.jpg +- data/imagenet-r/n04147183/painting_26.jpg +- data/imagenet-r/n02099601/misc_87.jpg +- data/imagenet-r/n07718472/sketch_21.jpg +- data/imagenet-r/n01770393/origami_3.jpg +- data/imagenet-r/n02066245/toy_0.jpg +- data/imagenet-r/n02088094/sketch_21.jpg +- data/imagenet-r/n02841315/sketch_7.jpg +- data/imagenet-r/n02951358/origami_1.jpg +- data/imagenet-r/n01833805/sculpture_13.jpg +- data/imagenet-r/n02007558/misc_3.jpg +- data/imagenet-r/n03495258/tattoo_12.jpg +- data/imagenet-r/n07873807/toy_1.jpg +- data/imagenet-r/n02769748/sketch_7.jpg +- data/imagenet-r/n02088364/sketch_8.jpg +- data/imagenet-r/n03124170/misc_4.jpg +- data/imagenet-r/n03947888/tattoo_22.jpg +- data/imagenet-r/n09472597/sculpture_4.jpg +- data/imagenet-r/n02206856/sketch_15.jpg +- data/imagenet-r/n01443537/painting_5.jpg +- data/imagenet-r/n02526121/sketch_9.jpg +- data/imagenet-r/n02106662/sketch_2.jpg +- data/imagenet-r/n07720875/painting_5.jpg +- data/imagenet-r/n02106166/sketch_10.jpg +- data/imagenet-r/n02236044/sketch_0.jpg +- data/imagenet-r/n03495258/videogame_6.jpg +- data/imagenet-r/n02480495/art_11.jpg +- data/imagenet-r/n02395406/toy_31.jpg +- data/imagenet-r/n02814860/painting_1.jpg +- data/imagenet-r/n12267677/sketch_16.jpg +- data/imagenet-r/n02123045/sketch_14.jpg +- data/imagenet-r/n02948072/cartoon_69.jpg +- data/imagenet-r/n02119022/misc_7.jpg +- data/imagenet-r/n04487394/art_5.jpg +- data/imagenet-r/n04141076/cartoon_8.jpg +- data/imagenet-r/n01910747/tattoo_61.jpg +- data/imagenet-r/n04254680/cartoon_13.jpg +- data/imagenet-r/n04552348/videogame_18.jpg +- data/imagenet-r/n02113799/misc_31.jpg +- data/imagenet-r/n01820546/deviantart_0.jpg +- data/imagenet-r/n01644373/deviantart_19.jpg +- data/imagenet-r/n02119022/misc_16.jpg +- data/imagenet-r/n07614500/misc_28.jpg +- data/imagenet-r/n02108915/misc_133.jpg +- data/imagenet-r/n02363005/misc_4.jpg +- data/imagenet-r/n03710193/misc_46.jpg +- data/imagenet-r/n02007558/tattoo_18.jpg +- data/imagenet-r/n07697537/misc_83.jpg +- data/imagenet-r/n02808440/sketch_26.jpg +- data/imagenet-r/n02096585/misc_51.jpg +- data/imagenet-r/n02110341/misc_37.jpg +- data/imagenet-r/n10565667/deviantart_28.jpg +- data/imagenet-r/n02128385/art_1.jpg +- data/imagenet-r/n04141076/cartoon_43.jpg +- data/imagenet-r/n07697313/cartoon_7.jpg +- data/imagenet-r/n03372029/cartoon_20.jpg +- data/imagenet-r/n03481172/painting_1.jpg +- data/imagenet-r/n01694178/tattoo_0.jpg +- data/imagenet-r/n02655020/misc_82.jpg +- data/imagenet-r/n02841315/sketch_16.jpg +- data/imagenet-r/n02672831/sketch_10.jpg +- data/imagenet-r/n02129604/tattoo_41.jpg +- data/imagenet-r/n02236044/art_14.jpg +- data/imagenet-r/n02096585/misc_70.jpg +- data/imagenet-r/n07742313/sketch_4.jpg +- data/imagenet-r/n02447366/cartoon_11.jpg +- data/imagenet-r/n02607072/misc_79.jpg +- data/imagenet-r/n02066245/art_14.jpg +- data/imagenet-r/n02085620/tattoo_2.jpg +- data/imagenet-r/n07753275/misc_0.jpg +- data/imagenet-r/n02206856/graffiti_14.jpg +- data/imagenet-r/n02480495/painting_14.jpg +- data/imagenet-r/n03888257/art_10.jpg +- data/imagenet-r/n02108089/misc_46.jpg +- data/imagenet-r/n02130308/art_1.jpg +- data/imagenet-r/n02110958/painting_17.jpg +- data/imagenet-r/n02906734/art_4.jpg +- data/imagenet-r/n01833805/tattoo_3.jpg +- data/imagenet-r/n02980441/deviantart_3.jpg +- data/imagenet-r/n02279972/art_8.jpg +- data/imagenet-r/n02992529/sketch_14.jpg +- data/imagenet-r/n02769748/sketch_15.jpg +- data/imagenet-r/n02086240/misc_11.jpg +- data/imagenet-r/n04487394/art_3.jpg +- data/imagenet-r/n02395406/cartoon_11.jpg +- data/imagenet-r/n02097298/misc_74.jpg +- data/imagenet-r/n02398521/art_5.jpg +- data/imagenet-r/n03775071/sticker_1.jpg +- data/imagenet-r/n02236044/sculpture_7.jpg +- data/imagenet-r/n01514859/painting_24.jpg +- data/imagenet-r/n02109525/misc_3.jpg +- data/imagenet-r/n02110341/misc_90.jpg +- data/imagenet-r/n03888257/toy_0.jpg +- data/imagenet-r/n02802426/sculpture_0.jpg +- data/imagenet-r/n02165456/cartoon_0.jpg +- data/imagenet-r/n02106550/sketch_5.jpg +- data/imagenet-r/n02226429/sketch_1.jpg +- data/imagenet-r/n02110958/cartoon_51.jpg +- data/imagenet-r/n03345487/videogame_1.jpg +- data/imagenet-r/n01910747/graffiti_14.jpg +- data/imagenet-r/n02129604/sketch_8.jpg +- data/imagenet-r/n02410509/art_18.jpg +- data/imagenet-r/n01910747/painting_20.jpg +- data/imagenet-r/n02966193/deviantart_5.jpg +- data/imagenet-r/n03947888/misc_6.jpg +- data/imagenet-r/n03481172/art_9.jpg +- data/imagenet-r/n02317335/painting_0.jpg +- data/imagenet-r/n02007558/graffiti_16.jpg +- data/imagenet-r/n01833805/tattoo_56.jpg +- data/imagenet-r/n01498041/sketch_19.jpg +- data/imagenet-r/n01843383/cartoon_25.jpg +- data/imagenet-r/n02410509/cartoon_18.jpg +- data/imagenet-r/n02317335/sketch_13.jpg +- data/imagenet-r/n04389033/videogame_35.jpg +- data/imagenet-r/n01944390/misc_169.jpg +- data/imagenet-r/n02088094/misc_40.jpg +- data/imagenet-r/n03602883/sketch_14.jpg +- data/imagenet-r/n02966193/misc_0.jpg +- data/imagenet-r/n07614500/cartoon_2.jpg +- data/imagenet-r/n02129604/painting_25.jpg +- data/imagenet-r/n02814860/painting_24.jpg +- data/imagenet-r/n01833805/sketch_17.jpg +- data/imagenet-r/n01882714/sketch_5.jpg +- data/imagenet-r/n02071294/cartoon_20.jpg +- data/imagenet-r/n02130308/sketch_8.jpg +- data/imagenet-r/n03710193/misc_14.jpg +- data/imagenet-r/n02808440/misc_2.jpg +- data/imagenet-r/n02607072/videogame_5.jpg +- data/imagenet-r/n01694178/graffiti_0.jpg +- data/imagenet-r/n02165456/sketch_11.jpg +- data/imagenet-r/n02769748/cartoon_33.jpg +- data/imagenet-r/n04147183/painting_22.jpg +- data/imagenet-r/n12267677/misc_94.jpg +- data/imagenet-r/n02088094/misc_4.jpg +- data/imagenet-r/n01644373/tattoo_24.jpg +- data/imagenet-r/n02793495/painting_15.jpg +- data/imagenet-r/n03888257/art_8.jpg +- data/imagenet-r/n02410509/cartoon_34.jpg +- data/imagenet-r/n02398521/art_11.jpg +- data/imagenet-r/n02808440/sketch_23.jpg +- data/imagenet-r/n02346627/sculpture_8.jpg +- data/imagenet-r/n07718472/cartoon_2.jpg +- data/imagenet-r/n01882714/painting_16.jpg +- data/imagenet-r/n02672831/deviantart_6.jpg +- data/imagenet-r/n04254680/cartoon_16.jpg +- data/imagenet-r/n02088364/misc_30.jpg +- data/imagenet-r/n02769748/cartoon_21.jpg +- data/imagenet-r/n01748264/tattoo_29.jpg +- data/imagenet-r/n01518878/sketch_10.jpg +- data/imagenet-r/n07697313/sketch_22.jpg +- data/imagenet-r/n01616318/sketch_2.jpg +- data/imagenet-r/n03467068/sketch_10.jpg +- data/imagenet-r/n02939185/misc_14.jpg +- data/imagenet-r/n02099712/misc_35.jpg +- data/imagenet-r/n02117135/tattoo_6.jpg +- data/imagenet-r/n02906734/misc_9.jpg +- data/imagenet-r/n02909870/sticker_5.jpg +- data/imagenet-r/n02007558/misc_4.jpg +- data/imagenet-r/n01855672/sculpture_6.jpg +- data/imagenet-r/n07768694/painting_24.jpg +- data/imagenet-r/n02096585/misc_94.jpg +- data/imagenet-r/n02085620/misc_68.jpg +- data/imagenet-r/n03467068/sticker_1.jpg +- data/imagenet-r/n03481172/cartoon_24.jpg +- data/imagenet-r/n07718472/sketch_19.jpg +- data/imagenet-r/n02119022/misc_68.jpg +- data/imagenet-r/n01677366/sketch_5.jpg +- data/imagenet-r/n04409515/cartoon_0.jpg +- data/imagenet-r/n02106166/painting_10.jpg +- data/imagenet-r/n02480855/cartoon_11.jpg +- data/imagenet-r/n03424325/misc_61.jpg +- data/imagenet-r/n02395406/art_5.jpg +- data/imagenet-r/n04487394/cartoon_25.jpg +- data/imagenet-r/n02395406/deviantart_5.jpg +- data/imagenet-r/n01843383/graffiti_9.jpg +- data/imagenet-r/n01694178/deviantart_0.jpg +- data/imagenet-r/n02134084/videogame_1.jpg +- data/imagenet-r/n03710193/misc_30.jpg +- data/imagenet-r/n02165456/painting_7.jpg +- data/imagenet-r/n02510455/misc_101.jpg +- data/imagenet-r/n02117135/sketch_9.jpg +- data/imagenet-r/n02948072/deviantart_26.jpg +- data/imagenet-r/n02814860/deviantart_18.jpg +- data/imagenet-r/n04487394/painting_4.jpg +- data/imagenet-r/n04086273/tattoo_49.jpg +- data/imagenet-r/n01847000/sticker_1.jpg +- data/imagenet-r/n02909870/art_7.jpg +- data/imagenet-r/n01882714/deviantart_43.jpg +- data/imagenet-r/n02814860/deviantart_6.jpg +- data/imagenet-r/n02906734/cartoon_10.jpg +- data/imagenet-r/n02071294/cartoon_8.jpg +- data/imagenet-r/n02883205/cartoon_1.jpg +- data/imagenet-r/n01944390/misc_27.jpg +- data/imagenet-r/n01843383/cartoon_8.jpg +- data/imagenet-r/n03124170/deviantart_4.jpg +- data/imagenet-r/n03124170/embroidery_0.jpg +- data/imagenet-r/n01514859/embroidery_6.jpg +- data/imagenet-r/n09472597/toy_0.jpg +- data/imagenet-r/n04591713/painting_7.jpg +- data/imagenet-r/n02138441/cartoon_9.jpg +- data/imagenet-r/n03124170/cartoon_71.jpg +- data/imagenet-r/n01882714/deviantart_14.jpg +- data/imagenet-r/n02480855/sketch_10.jpg +- data/imagenet-r/n02102318/cartoon_4.jpg +- data/imagenet-r/n02113799/sketch_1.jpg +- data/imagenet-r/n02510455/misc_21.jpg +- data/imagenet-r/n02909870/painting_15.jpg +- data/imagenet-r/n03452741/videogame_4.jpg +- data/imagenet-r/n02950826/videogame_11.jpg +- data/imagenet-r/n02948072/deviantart_30.jpg +- data/imagenet-r/n07734744/misc_24.jpg +- data/imagenet-r/n02114367/misc_61.jpg +- data/imagenet-r/n02092339/sketch_7.jpg +- data/imagenet-r/n02108089/sketch_5.jpg +- data/imagenet-r/n02108915/misc_76.jpg +- data/imagenet-r/n07749582/painting_23.jpg +- data/imagenet-r/n02206856/painting_17.jpg +- data/imagenet-r/n04254680/videogame_32.jpg +- data/imagenet-r/n02190166/sketch_9.jpg +- data/imagenet-r/n02445715/toy_13.jpg +- data/imagenet-r/n07720875/deviantart_3.jpg +- data/imagenet-r/n04275548/embroidery_17.jpg +- data/imagenet-r/n01855672/sketch_0.jpg +- data/imagenet-r/n03630383/cartoon_18.jpg +- data/imagenet-r/n02480495/toy_2.jpg +- data/imagenet-r/n02130308/painting_3.jpg +- data/imagenet-r/n04409515/deviantart_0.jpg +- data/imagenet-r/n02108915/misc_42.jpg +- data/imagenet-r/n02102318/origami_0.jpg +- data/imagenet-r/n01644373/tattoo_12.jpg +- data/imagenet-r/n02233338/misc_16.jpg +- data/imagenet-r/n03272010/painting_20.jpg +- data/imagenet-r/n01484850/graphic_2.jpg +- data/imagenet-r/n02814860/graffiti_1.jpg +- data/imagenet-r/n02481823/deviantart_16.jpg +- data/imagenet-r/n07734744/misc_27.jpg +- data/imagenet-r/n01820546/painting_7.jpg +- data/imagenet-r/n02948072/painting_7.jpg +- data/imagenet-r/n02236044/graffiti_6.jpg +- data/imagenet-r/n02056570/sketch_8.jpg +- data/imagenet-r/n01860187/sculpture_6.jpg +- data/imagenet-r/n01644373/deviantart_6.jpg +- data/imagenet-r/n02130308/painting_11.jpg +- data/imagenet-r/n01833805/sculpture_9.jpg +- data/imagenet-r/n02423022/graphic_3.jpg +- data/imagenet-r/n02391049/misc_92.jpg +- data/imagenet-r/n02094433/misc_14.jpg +- data/imagenet-r/n02134084/misc_81.jpg +- data/imagenet-r/n07714990/embroidery_1.jpg +- data/imagenet-r/n01518878/toy_2.jpg +- data/imagenet-r/n02655020/deviantart_10.jpg +- data/imagenet-r/n04146614/sketch_5.jpg +- data/imagenet-r/n04591713/sketch_6.jpg +- data/imagenet-r/n01644373/tattoo_31.jpg +- data/imagenet-r/n02066245/painting_3.jpg +- data/imagenet-r/n02129165/cartoon_6.jpg +- data/imagenet-r/n07745940/painting_16.jpg +- data/imagenet-r/n09472597/graphic_11.jpg +- data/imagenet-r/n04254680/cartoon_11.jpg +- data/imagenet-r/n01855672/sketch_5.jpg +- data/imagenet-r/n02108915/misc_85.jpg +- data/imagenet-r/n02980441/cartoon_13.jpg +- data/imagenet-r/n04141076/painting_0.jpg +- data/imagenet-r/n04552348/misc_18.jpg +- data/imagenet-r/n07753592/videogame_2.jpg +- data/imagenet-r/n02480495/art_1.jpg +- data/imagenet-r/n02236044/graffiti_3.jpg +- data/imagenet-r/n01630670/sketch_18.jpg +- data/imagenet-r/n01910747/tattoo_52.jpg +- data/imagenet-r/n07753592/misc_140.jpg +- data/imagenet-r/n02134084/misc_32.jpg +- data/imagenet-r/n02108915/misc_13.jpg +- data/imagenet-r/n02109525/misc_5.jpg +- data/imagenet-r/n01531178/art_19.jpg +- data/imagenet-r/n07697313/deviantart_2.jpg +- data/imagenet-r/n01443537/origami_12.jpg +- data/imagenet-r/n07718472/sketch_1.jpg +- data/imagenet-r/n01616318/tattoo_9.jpg +- data/imagenet-r/n09472597/embroidery_4.jpg +- data/imagenet-r/n02226429/origami_18.jpg +- data/imagenet-r/n02437616/tattoo_5.jpg +- data/imagenet-r/n02797295/misc_65.jpg +- data/imagenet-r/n02206856/sketch_0.jpg +- data/imagenet-r/n02165456/origami_2.jpg +- data/imagenet-r/n02951358/sketch_13.jpg +- data/imagenet-r/n07873807/cartoon_9.jpg +- data/imagenet-r/n02165456/tattoo_15.jpg +- data/imagenet-r/n07695742/toy_9.jpg +- data/imagenet-r/n02129604/toy_8.jpg +- data/imagenet-r/n02165456/toy_35.jpg +- data/imagenet-r/n01770393/cartoon_14.jpg +- data/imagenet-r/n02206856/cartoon_19.jpg +- data/imagenet-r/n02098286/misc_30.jpg +- data/imagenet-r/n02279972/painting_0.jpg +- data/imagenet-r/n01534433/sketch_0.jpg +- data/imagenet-r/n01806143/painting_8.jpg +- data/imagenet-r/n01632777/painting_0.jpg +- data/imagenet-r/n02823750/cartoon_4.jpg +- data/imagenet-r/n04266014/painting_0.jpg +- data/imagenet-r/n01983481/misc_27.jpg +- data/imagenet-r/n02123045/cartoon_9.jpg +- data/imagenet-r/n04254680/painting_2.jpg +- data/imagenet-r/n02486410/tattoo_6.jpg +- data/imagenet-r/n02843684/misc_0.jpg +- data/imagenet-r/n02106030/cartoon_4.jpg +- data/imagenet-r/n07720875/painting_13.jpg +- data/imagenet-r/n01855672/painting_15.jpg +- data/imagenet-r/n04266014/deviantart_8.jpg +- data/imagenet-r/n07720875/cartoon_4.jpg +- data/imagenet-r/n07734744/misc_20.jpg +- data/imagenet-r/n02007558/tattoo_45.jpg +- data/imagenet-r/n02129165/embroidery_13.jpg +- data/imagenet-r/n01443537/origami_0.jpg +- data/imagenet-r/n02398521/painting_11.jpg +- data/imagenet-r/n02980441/misc_4.jpg +- data/imagenet-r/n07697313/art_35.jpg +- data/imagenet-r/n02056570/videogame_2.jpg +- data/imagenet-r/n02165456/tattoo_20.jpg +- data/imagenet-r/n02481823/deviantart_24.jpg +- data/imagenet-r/n02088238/sketch_8.jpg +- data/imagenet-r/n03424325/misc_82.jpg +- data/imagenet-r/n02701002/sticker_1.jpg +- data/imagenet-r/n01843383/cartoon_47.jpg +- data/imagenet-r/n07745940/embroidery_8.jpg +- data/imagenet-r/n07697313/art_6.jpg +- data/imagenet-r/n02749479/sketch_8.jpg +- data/imagenet-r/n02110958/painting_23.jpg +- data/imagenet-r/n04086273/sketch_2.jpg +- data/imagenet-r/n02797295/misc_5.jpg +- data/imagenet-r/n01910747/misc_7.jpg +- data/imagenet-r/n01644373/tattoo_19.jpg +- data/imagenet-r/n02797295/misc_58.jpg +- data/imagenet-r/n02437616/sketch_4.jpg +- data/imagenet-r/n02009912/misc_20.jpg +- data/imagenet-r/n03495258/painting_0.jpg +- data/imagenet-r/n02655020/misc_22.jpg +- data/imagenet-r/n07614500/misc_8.jpg +- data/imagenet-r/n01820546/sketch_4.jpg +- data/imagenet-r/n01494475/videogame_2.jpg +- data/imagenet-r/n02410509/sculpture_40.jpg +- data/imagenet-r/n04141076/sketch_3.jpg +- data/imagenet-r/n03947888/painting_5.jpg +- data/imagenet-r/n04118538/sketch_13.jpg +- data/imagenet-r/n02395406/sketch_7.jpg +- data/imagenet-r/n07768694/deviantart_14.jpg +- data/imagenet-r/n04310018/sticker_10.jpg +- data/imagenet-r/n01514859/cartoon_2.jpg +- data/imagenet-r/n01518878/toy_8.jpg +- data/imagenet-r/n01694178/videogame_0.jpg +- data/imagenet-r/n02165456/graffiti_1.jpg +- data/imagenet-r/n02129604/cartoon_7.jpg +- data/imagenet-r/n04266014/videogame_23.jpg +- data/imagenet-r/n02110958/graphic_7.jpg +- data/imagenet-r/n02279972/art_3.jpg +- data/imagenet-r/n02268443/misc_13.jpg +- data/imagenet-r/n02948072/deviantart_20.jpg +- data/imagenet-r/n07753275/graphic_4.jpg +- data/imagenet-r/n02950826/sketch_7.jpg +- data/imagenet-r/n01644373/cartoon_8.jpg +- data/imagenet-r/n07697313/art_17.jpg +- data/imagenet-r/n02233338/misc_32.jpg +- data/imagenet-r/n02091134/sketch_19.jpg +- data/imagenet-r/n01534433/sketch_14.jpg +- data/imagenet-r/n07614500/art_6.jpg +- data/imagenet-r/n01847000/tattoo_31.jpg +- data/imagenet-r/n02481823/painting_29.jpg +- data/imagenet-r/n02948072/embroidery_23.jpg +- data/imagenet-r/n02206856/sculpture_1.jpg +- data/imagenet-r/n07714571/sketch_3.jpg +- data/imagenet-r/n04310018/sticker_12.jpg +- data/imagenet-r/n02091134/sketch_2.jpg +- data/imagenet-r/n02391049/sketch_7.jpg +- data/imagenet-r/n02909870/cartoon_5.jpg +- data/imagenet-r/n01616318/tattoo_41.jpg +- data/imagenet-r/n04266014/cartoon_34.jpg +- data/imagenet-r/n07920052/graphic_9.jpg +- data/imagenet-r/n02268443/misc_27.jpg +- data/imagenet-r/n02138441/art_7.jpg +- data/imagenet-r/n02085620/misc_76.jpg +- data/imagenet-r/n02481823/painting_12.jpg +- data/imagenet-r/n07753275/tattoo_5.jpg +- data/imagenet-r/n10565667/deviantart_6.jpg +- data/imagenet-r/n01847000/sculpture_2.jpg +- data/imagenet-r/n01531178/art_26.jpg +- data/imagenet-r/n01632777/origami_2.jpg +- data/imagenet-r/n01833805/deviantart_9.jpg +- data/imagenet-r/n04192698/graffiti_1.jpg +- data/imagenet-r/n02480495/art_7.jpg +- data/imagenet-r/n02268443/misc_96.jpg +- data/imagenet-r/n01632777/sketch_5.jpg +- data/imagenet-r/n02481823/videogame_0.jpg +- data/imagenet-r/n02410509/cartoon_4.jpg +- data/imagenet-r/n02841315/misc_0.jpg +- data/imagenet-r/n01443537/toy_2.jpg +- data/imagenet-r/n07753275/graphic_6.jpg +- data/imagenet-r/n02128757/painting_9.jpg +- data/imagenet-r/n03773504/graphic_7.jpg +- data/imagenet-r/n03676483/graffiti_4.jpg +- data/imagenet-r/n02119022/misc_40.jpg +- data/imagenet-r/n01833805/tattoo_73.jpg +- data/imagenet-r/n02190166/origami_1.jpg +- data/imagenet-r/n02007558/sculpture_3.jpg +- data/imagenet-r/n01677366/misc_17.jpg +- data/imagenet-r/n02129165/tattoo_36.jpg +- data/imagenet-r/n04522168/painting_14.jpg +- data/imagenet-r/n03602883/misc_24.jpg +- data/imagenet-r/n01806143/embroidery_13.jpg +- data/imagenet-r/n02190166/cartoon_6.jpg +- data/imagenet-r/n03888257/videogame_15.jpg +- data/imagenet-r/n03372029/painting_17.jpg +- data/imagenet-r/n02391049/misc_67.jpg +- data/imagenet-r/n03452741/videogame_3.jpg +- data/imagenet-r/n02510455/misc_109.jpg +- data/imagenet-r/n02108089/sketch_0.jpg +- data/imagenet-r/n02219486/sculpture_16.jpg +- data/imagenet-r/n01694178/cartoon_13.jpg +- data/imagenet-r/n02219486/toy_3.jpg +- data/imagenet-r/n02236044/origami_10.jpg +- data/imagenet-r/n02447366/origami_1.jpg +- data/imagenet-r/n02106662/misc_12.jpg +- data/imagenet-r/n02117135/painting_8.jpg +- data/imagenet-r/n04347754/embroidery_1.jpg +- data/imagenet-r/n07753275/art_1.jpg +- data/imagenet-r/n02410509/origami_0.jpg +- data/imagenet-r/n04389033/misc_2.jpg +- data/imagenet-r/n03947888/art_1.jpg +- data/imagenet-r/n02909870/cartoon_8.jpg +- data/imagenet-r/n02190166/tattoo_3.jpg +- data/imagenet-r/n01644373/painting_14.jpg +- data/imagenet-r/n03947888/videogame_10.jpg +- data/imagenet-r/n02510455/misc_46.jpg +- data/imagenet-r/n07749582/deviantart_2.jpg +- data/imagenet-r/n02091032/misc_1.jpg +- data/imagenet-r/n02655020/sketch_17.jpg +- data/imagenet-r/n02110958/cartoon_9.jpg +- data/imagenet-r/n01770393/cartoon_29.jpg +- data/imagenet-r/n02106166/painting_19.jpg +- data/imagenet-r/n01748264/tattoo_21.jpg +- data/imagenet-r/n07753592/misc_1.jpg +- data/imagenet-r/n01494475/misc_48.jpg +- data/imagenet-r/n02098286/misc_16.jpg +- data/imagenet-r/n04275548/sculpture_7.jpg +- data/imagenet-r/n01614925/deviantart_39.jpg +- data/imagenet-r/n07614500/misc_13.jpg +- data/imagenet-r/n01806143/painting_12.jpg +- data/imagenet-r/n04310018/videogame_1.jpg +- data/imagenet-r/n01833805/painting_31.jpg +- data/imagenet-r/n02138441/sculpture_7.jpg +- data/imagenet-r/n02398521/videogame_1.jpg +- data/imagenet-r/n01833805/tattoo_89.jpg +- data/imagenet-r/n07768694/deviantart_26.jpg +- data/imagenet-r/n02346627/cartoon_2.jpg +- data/imagenet-r/n02510455/misc_1.jpg +- data/imagenet-r/n07745940/sculpture_4.jpg +- data/imagenet-r/n02481823/videogame_1.jpg +- data/imagenet-r/n01770393/tattoo_78.jpg +- data/imagenet-r/n01770393/painting_2.jpg +- data/imagenet-r/n02395406/sculpture_16.jpg +- data/imagenet-r/n02009912/misc_50.jpg +- data/imagenet-r/n02097298/misc_65.jpg +- data/imagenet-r/n07697537/misc_75.jpg +- data/imagenet-r/n02077923/sketch_21.jpg +- data/imagenet-r/n02106662/misc_62.jpg +- data/imagenet-r/n01494475/misc_64.jpg +- data/imagenet-r/n04552348/toy_13.jpg +- data/imagenet-r/n02096585/misc_160.jpg +- data/imagenet-r/n02088238/misc_35.jpg +- data/imagenet-r/n07768694/graffiti_0.jpg +- data/imagenet-r/n02445715/sketch_10.jpg +- data/imagenet-r/n03424325/sketch_14.jpg +- data/imagenet-r/n04275548/tattoo_0.jpg +- data/imagenet-r/n02110341/misc_84.jpg +- data/imagenet-r/n07697313/misc_15.jpg +- data/imagenet-r/n02480855/sketch_22.jpg +- data/imagenet-r/n02769748/cartoon_17.jpg +- data/imagenet-r/n04409515/graphic_4.jpg +- data/imagenet-r/n02236044/graphic_1.jpg +- data/imagenet-r/n02165456/cartoon_10.jpg +- data/imagenet-r/n03494278/deviantart_4.jpg +- data/imagenet-r/n02980441/painting_7.jpg +- data/imagenet-r/n07753592/misc_8.jpg +- data/imagenet-r/n02134084/misc_5.jpg +- data/imagenet-r/n02391049/misc_87.jpg +- data/imagenet-r/n02109525/sketch_5.jpg +- data/imagenet-r/n02948072/cartoon_37.jpg +- data/imagenet-r/n02165456/cartoon_20.jpg +- data/imagenet-r/n03930630/deviantart_2.jpg +- data/imagenet-r/n02906734/cartoon_52.jpg +- data/imagenet-r/n03272010/art_1.jpg +- data/imagenet-r/n02843684/painting_5.jpg +- data/imagenet-r/n04552348/art_0.jpg +- data/imagenet-r/n03676483/cartoon_14.jpg +- data/imagenet-r/n02445715/videogame_9.jpg +- data/imagenet-r/n02097298/misc_40.jpg +- data/imagenet-r/n03947888/deviantart_1.jpg +- data/imagenet-r/n02749479/misc_33.jpg +- data/imagenet-r/n01770393/origami_8.jpg +- data/imagenet-r/n04552348/painting_6.jpg +- data/imagenet-r/n01614925/toy_1.jpg +- data/imagenet-r/n02086240/sketch_19.jpg +- data/imagenet-r/n03947888/cartoon_10.jpg +- data/imagenet-r/n02088466/sketch_17.jpg +- data/imagenet-r/n03649909/toy_8.jpg +- data/imagenet-r/n02165456/graphic_6.jpg +- data/imagenet-r/n01514859/painting_38.jpg +- data/imagenet-r/n07697313/cartoon_4.jpg +- data/imagenet-r/n03495258/sketch_2.jpg +- data/imagenet-r/n07873807/misc_0.jpg +- data/imagenet-r/n02110341/misc_59.jpg +- data/imagenet-r/n02793495/sketch_13.jpg +- data/imagenet-r/n02007558/deviantart_14.jpg +- data/imagenet-r/n02112018/misc_49.jpg +- data/imagenet-r/n02108915/misc_129.jpg +- data/imagenet-r/n04086273/sketch_1.jpg +- data/imagenet-r/n07697313/embroidery_6.jpg +- data/imagenet-r/n03372029/sculpture_7.jpg +- data/imagenet-r/n01518878/cartoon_5.jpg +- data/imagenet-r/n03775071/cartoon_17.jpg +- data/imagenet-r/n01443537/toy_6.jpg +- data/imagenet-r/n02086240/misc_33.jpg +- data/imagenet-r/n04310018/deviantart_3.jpg +- data/imagenet-r/n02190166/painting_1.jpg +- data/imagenet-r/n03602883/misc_35.jpg +- data/imagenet-r/n02883205/sketch_6.jpg +- data/imagenet-r/n03372029/deviantart_7.jpg +- data/imagenet-r/n02398521/graffiti_5.jpg +- data/imagenet-r/n04465501/misc_2.jpg +- data/imagenet-r/n02088466/misc_24.jpg +- data/imagenet-r/n03495258/sketch_6.jpg +- data/imagenet-r/n02481823/cartoon_2.jpg +- data/imagenet-r/n12267677/misc_55.jpg +- data/imagenet-r/n02395406/cartoon_17.jpg +- data/imagenet-r/n09472597/sketch_28.jpg +- data/imagenet-r/n03602883/misc_52.jpg +- data/imagenet-r/n02099601/misc_43.jpg +- data/imagenet-r/n02423022/cartoon_19.jpg +- data/imagenet-r/n02119022/misc_126.jpg +- data/imagenet-r/n02091032/misc_25.jpg +- data/imagenet-r/n01833805/graffiti_8.jpg +- data/imagenet-r/n07873807/videogame_12.jpg +- data/imagenet-r/n04465501/painting_17.jpg +- data/imagenet-r/n04310018/painting_27.jpg +- data/imagenet-r/n02138441/painting_1.jpg +- data/imagenet-r/n02099712/misc_8.jpg +- data/imagenet-r/n04133789/sketch_16.jpg +- data/imagenet-r/n10565667/videogame_22.jpg +- data/imagenet-r/n03630383/cartoon_5.jpg +- data/imagenet-r/n02114367/misc_43.jpg +- data/imagenet-r/n02268443/misc_116.jpg +- data/imagenet-r/n02206856/sketch_6.jpg +- data/imagenet-r/n07753592/misc_132.jpg +- data/imagenet-r/n04192698/sketch_16.jpg +- data/imagenet-r/n02701002/sketch_1.jpg +- data/imagenet-r/n04266014/sculpture_5.jpg +- data/imagenet-r/n02109525/misc_21.jpg +- data/imagenet-r/n07734744/painting_26.jpg +- data/imagenet-r/n01860187/sketch_10.jpg +- data/imagenet-r/n07734744/sculpture_15.jpg +- data/imagenet-r/n02948072/toy_8.jpg +- data/imagenet-r/n02129165/deviantart_15.jpg +- data/imagenet-r/n02134084/misc_24.jpg +- data/imagenet-r/n03649909/art_3.jpg +- data/imagenet-r/n02094433/misc_2.jpg +- data/imagenet-r/n07753275/embroidery_14.jpg +- data/imagenet-r/n02096585/misc_193.jpg +- data/imagenet-r/n03272010/cartoon_2.jpg +- data/imagenet-r/n07749582/sketch_5.jpg +- data/imagenet-r/n01833805/painting_37.jpg +- data/imagenet-r/n02102318/sketch_23.jpg +- data/imagenet-r/n02110341/misc_60.jpg +- data/imagenet-r/n02486410/sketch_16.jpg +- data/imagenet-r/n07697537/misc_112.jpg +- data/imagenet-r/n02086240/sketch_13.jpg +- data/imagenet-r/n01484850/toy_6.jpg +- data/imagenet-r/n01910747/tattoo_37.jpg +- data/imagenet-r/n04552348/toy_1.jpg +- data/imagenet-r/n01833805/videogame_0.jpg +- data/imagenet-r/n04522168/videogame_24.jpg +- data/imagenet-r/n03345487/sketch_3.jpg +- data/imagenet-r/n03710193/misc_8.jpg +- data/imagenet-r/n04147183/art_1.jpg +- data/imagenet-r/n02051845/tattoo_6.jpg +- data/imagenet-r/n01748264/misc_1.jpg +- data/imagenet-r/n07920052/deviantart_12.jpg +- data/imagenet-r/n01833805/painting_3.jpg +- data/imagenet-r/n02129604/origami_1.jpg +- data/imagenet-r/n01910747/tattoo_18.jpg +- data/imagenet-r/n01770393/sketch_10.jpg +- data/imagenet-r/n04536866/cartoon_11.jpg +- data/imagenet-r/n02480855/graffiti_0.jpg +- data/imagenet-r/n02129604/embroidery_0.jpg +- data/imagenet-r/n04389033/sticker_2.jpg +- data/imagenet-r/n02481823/sculpture_1.jpg +- data/imagenet-r/n02128757/embroidery_0.jpg +- data/imagenet-r/n03495258/sculpture_15.jpg +- data/imagenet-r/n01514859/sculpture_0.jpg +- data/imagenet-r/n02268443/sketch_7.jpg +- data/imagenet-r/n02007558/misc_9.jpg +- data/imagenet-r/n02106550/misc_67.jpg +- data/imagenet-r/n02129604/painting_13.jpg +- data/imagenet-r/n04536866/deviantart_27.jpg +- data/imagenet-r/n02108915/misc_12.jpg +- data/imagenet-r/n02486410/cartoon_21.jpg +- data/imagenet-r/n02966193/misc_4.jpg +- data/imagenet-r/n04133789/cartoon_2.jpg +- data/imagenet-r/n02206856/misc_9.jpg +- data/imagenet-r/n02128385/sculpture_3.jpg +- data/imagenet-r/n04310018/sticker_8.jpg +- data/imagenet-r/n03481172/sculpture_1.jpg +- data/imagenet-r/n02843684/painting_2.jpg +- data/imagenet-r/n02110185/painting_42.jpg +- data/imagenet-r/n04141076/painting_5.jpg +- data/imagenet-r/n07734744/art_9.jpg +- data/imagenet-r/n12267677/misc_59.jpg +- data/imagenet-r/n01843383/embroidery_3.jpg +- data/imagenet-r/n02526121/painting_2.jpg +- data/imagenet-r/n03452741/videogame_0.jpg +- data/imagenet-r/n07745940/cartoon_11.jpg +- data/imagenet-r/n02950826/sketch_14.jpg +- data/imagenet-r/n01616318/graphic_3.jpg +- data/imagenet-r/n04266014/videogame_20.jpg +- data/imagenet-r/n04266014/videogame_9.jpg +- data/imagenet-r/n02088238/misc_47.jpg +- data/imagenet-r/n03602883/misc_59.jpg +- data/imagenet-r/n07734744/graffiti_53.jpg +- data/imagenet-r/n02129604/deviantart_0.jpg +- data/imagenet-r/n02486410/cartoon_4.jpg +- data/imagenet-r/n02410509/origami_6.jpg +- data/imagenet-r/n02071294/toy_0.jpg +- data/imagenet-r/n01614925/tattoo_31.jpg +- data/imagenet-r/n07720875/origami_0.jpg +- data/imagenet-r/n04118538/cartoon_35.jpg +- data/imagenet-r/n03630383/cartoon_37.jpg +- data/imagenet-r/n07734744/graffiti_3.jpg +- data/imagenet-r/n02110341/misc_44.jpg +- data/imagenet-r/n04465501/videogame_31.jpg +- data/imagenet-r/n02797295/misc_38.jpg +- data/imagenet-r/n02007558/art_23.jpg +- data/imagenet-r/n02094433/misc_53.jpg +- data/imagenet-r/n02802426/deviantart_2.jpg +- data/imagenet-r/n03495258/painting_10.jpg +- data/imagenet-r/n01944390/sketch_6.jpg +- data/imagenet-r/n01514859/painting_13.jpg +- data/imagenet-r/n01806143/painting_14.jpg +- data/imagenet-r/n02138441/cartoon_21.jpg +- data/imagenet-r/n07742313/videogame_2.jpg +- data/imagenet-r/n02814860/videogame_0.jpg +- data/imagenet-r/n02128757/painting_7.jpg +- data/imagenet-r/n02843684/misc_2.jpg +- data/imagenet-r/n02056570/sketch_3.jpg +- data/imagenet-r/n04310018/tattoo_6.jpg +- data/imagenet-r/n02802426/graphic_0.jpg +- data/imagenet-r/n07697537/deviantart_0.jpg +- data/imagenet-r/n02655020/misc_100.jpg +- data/imagenet-r/n02480855/tattoo_8.jpg +- data/imagenet-r/n02138441/cartoon_2.jpg +- data/imagenet-r/n02481823/toy_15.jpg +- data/imagenet-r/n01518878/art_8.jpg +- data/imagenet-r/n02206856/cartoon_17.jpg +- data/imagenet-r/n02091134/sketch_22.jpg +- data/imagenet-r/n03775071/sketch_4.jpg +- data/imagenet-r/n02007558/tattoo_54.jpg +- data/imagenet-r/n02096585/misc_110.jpg +- data/imagenet-r/n03495258/tattoo_6.jpg +- data/imagenet-r/n07745940/deviantart_6.jpg +- data/imagenet-r/n02364673/art_9.jpg +- data/imagenet-r/n02096585/misc_120.jpg +- data/imagenet-r/n01644373/art_2.jpg +- data/imagenet-r/n03495258/cartoon_13.jpg +- data/imagenet-r/n02106662/sketch_1.jpg +- data/imagenet-r/n02317335/cartoon_4.jpg +- data/imagenet-r/n02130308/painting_30.jpg +- data/imagenet-r/n01847000/embroidery_9.jpg +- data/imagenet-r/n02098286/misc_34.jpg +- data/imagenet-r/n02106030/sketch_17.jpg +- data/imagenet-r/n02480855/painting_21.jpg +- data/imagenet-r/n02486410/sculpture_19.jpg +- data/imagenet-r/n02108089/misc_53.jpg +- data/imagenet-r/n02110958/cartoon_14.jpg +- data/imagenet-r/n04487394/cartoon_0.jpg +- data/imagenet-r/n02672831/cartoon_7.jpg +- data/imagenet-r/n10565667/misc_3.jpg +- data/imagenet-r/n03494278/sketch_8.jpg +- data/imagenet-r/n04389033/sticker_9.jpg +- data/imagenet-r/n02486410/sketch_15.jpg +- data/imagenet-r/n01806143/cartoon_4.jpg +- data/imagenet-r/n01770393/tattoo_60.jpg +- data/imagenet-r/n02119022/misc_89.jpg +- data/imagenet-r/n01833805/cartoon_11.jpg +- data/imagenet-r/n03481172/cartoon_4.jpg +- data/imagenet-r/n03594945/toy_21.jpg +- data/imagenet-r/n07614500/painting_14.jpg +- data/imagenet-r/n01531178/painting_41.jpg +- data/imagenet-r/n02138441/sculpture_6.jpg +- data/imagenet-r/n04552348/toy_5.jpg +- data/imagenet-r/n02112018/misc_4.jpg +- data/imagenet-r/n04591713/deviantart_3.jpg +- data/imagenet-r/n02948072/graphic_10.jpg +- data/imagenet-r/n03773504/painting_0.jpg +- data/imagenet-r/n02445715/sculpture_2.jpg +- data/imagenet-r/n01518878/painting_1.jpg +- data/imagenet-r/n04147183/painting_0.jpg +- data/imagenet-r/n02909870/sticker_2.jpg +- data/imagenet-r/n02007558/cartoon_17.jpg +- data/imagenet-r/n02279972/toy_1.jpg +- data/imagenet-r/n02007558/tattoo_55.jpg +- data/imagenet-r/n01855672/cartoon_2.jpg +- data/imagenet-r/n04487394/sketch_12.jpg +- data/imagenet-r/n04389033/graffiti_21.jpg +- data/imagenet-r/n07753275/graffiti_3.jpg +- data/imagenet-r/n02091032/misc_7.jpg +- data/imagenet-r/n04409515/videogame_0.jpg +- data/imagenet-r/n02410509/sculpture_25.jpg +- data/imagenet-r/n02793495/painting_22.jpg +- data/imagenet-r/n02219486/tattoo_5.jpg +- data/imagenet-r/n02906734/cartoon_19.jpg +- data/imagenet-r/n02226429/origami_10.jpg +- data/imagenet-r/n02102318/misc_52.jpg +- data/imagenet-r/n07745940/misc_12.jpg +- data/imagenet-r/n03495258/sketch_11.jpg +- data/imagenet-r/n02363005/sculpture_17.jpg +- data/imagenet-r/n02077923/misc_11.jpg +- data/imagenet-r/n04141076/painting_51.jpg +- data/imagenet-r/n03495258/sculpture_8.jpg +- data/imagenet-r/n02883205/painting_10.jpg +- data/imagenet-r/n01910747/origami_1.jpg +- data/imagenet-r/n02130308/sketch_13.jpg +- data/imagenet-r/n01910747/tattoo_16.jpg +- data/imagenet-r/n02268443/misc_134.jpg +- data/imagenet-r/n01614925/tattoo_42.jpg +- data/imagenet-r/n07753275/painting_7.jpg +- data/imagenet-r/n02219486/sketch_16.jpg +- data/imagenet-r/n02672831/cartoon_8.jpg +- data/imagenet-r/n07745940/graphic_2.jpg +- data/imagenet-r/n01498041/misc_0.jpg +- data/imagenet-r/n04347754/graffiti_6.jpg +- data/imagenet-r/n02802426/videogame_5.jpg +- data/imagenet-r/n02398521/painting_7.jpg +- data/imagenet-r/n02110958/painting_30.jpg +- data/imagenet-r/n04591713/sculpture_1.jpg +- data/imagenet-r/n01484850/sketch_6.jpg +- data/imagenet-r/n10565667/misc_2.jpg +- data/imagenet-r/n02096585/misc_171.jpg +- data/imagenet-r/n03124170/painting_23.jpg +- data/imagenet-r/n02138441/tattoo_1.jpg +- data/imagenet-r/n02346627/art_4.jpg +- data/imagenet-r/n04254680/painting_3.jpg +- data/imagenet-r/n02823750/cartoon_19.jpg +- data/imagenet-r/n04465501/cartoon_1.jpg +- data/imagenet-r/n02110958/sketch_16.jpg +- data/imagenet-r/n02129165/toy_17.jpg +- data/imagenet-r/n04254680/deviantart_18.jpg +- data/imagenet-r/n02486410/sculpture_6.jpg +- data/imagenet-r/n03124170/graphic_4.jpg +- data/imagenet-r/n01644373/painting_34.jpg +- data/imagenet-r/n01534433/videogame_2.jpg +- data/imagenet-r/n07920052/sticker_1.jpg +- data/imagenet-r/n03947888/misc_9.jpg +- data/imagenet-r/n02009912/misc_8.jpg +- data/imagenet-r/n02007558/cartoon_6.jpg +- data/imagenet-r/n02445715/videogame_2.jpg +- data/imagenet-r/n01632777/cartoon_10.jpg +- data/imagenet-r/n02099712/misc_45.jpg +- data/imagenet-r/n04522168/embroidery_2.jpg +- data/imagenet-r/n02950826/embroidery_0.jpg +- data/imagenet-r/n02279972/tattoo_13.jpg +- data/imagenet-r/n07742313/deviantart_10.jpg +- data/imagenet-r/n12267677/misc_30.jpg +- data/imagenet-r/n02391049/deviantart_7.jpg +- data/imagenet-r/n01833805/painting_28.jpg +- data/imagenet-r/n07734744/deviantart_26.jpg +- data/imagenet-r/n02088238/sketch_14.jpg +- data/imagenet-r/n02056570/art_2.jpg +- data/imagenet-r/n04310018/sculpture_1.jpg +- data/imagenet-r/n01843383/art_18.jpg +- data/imagenet-r/n04522168/graffiti_3.jpg +- data/imagenet-r/n02102318/graphic_0.jpg +- data/imagenet-r/n07745940/misc_7.jpg +- data/imagenet-r/n02447366/embroidery_1.jpg +- data/imagenet-r/n03773504/videogame_18.jpg +- data/imagenet-r/n02129165/toy_11.jpg +- data/imagenet-r/n02814860/toy_1.jpg +- data/imagenet-r/n01806143/embroidery_10.jpg +- data/imagenet-r/n04347754/painting_5.jpg +- data/imagenet-r/n02113799/sketch_4.jpg +- data/imagenet-r/n02009912/misc_13.jpg +- data/imagenet-r/n01910747/tattoo_63.jpg +- data/imagenet-r/n04522168/embroidery_4.jpg +- data/imagenet-r/n07695742/cartoon_12.jpg +- data/imagenet-r/n01847000/embroidery_5.jpg +- data/imagenet-r/n01847000/misc_25.jpg +- data/imagenet-r/n02445715/toy_14.jpg +- data/imagenet-r/n01632777/sketch_6.jpg +- data/imagenet-r/n07614500/art_1.jpg +- data/imagenet-r/n02091134/misc_58.jpg +- data/imagenet-r/n07880968/sketch_8.jpg +- data/imagenet-r/n01694178/cartoon_7.jpg +- data/imagenet-r/n02437616/deviantart_14.jpg +- data/imagenet-r/n02129165/cartoon_12.jpg +- data/imagenet-r/n07749582/sketch_18.jpg +- data/imagenet-r/n02325366/sketch_13.jpg +- data/imagenet-r/n02951358/sketch_10.jpg +- data/imagenet-r/n02088238/misc_19.jpg +- data/imagenet-r/n07714990/deviantart_21.jpg +- data/imagenet-r/n02236044/origami_30.jpg +- data/imagenet-r/n03345487/toy_11.jpg +- data/imagenet-r/n03424325/misc_52.jpg +- data/imagenet-r/n01944390/misc_83.jpg +- data/imagenet-r/n02007558/cartoon_27.jpg +- data/imagenet-r/n04389033/deviantart_11.jpg +- data/imagenet-r/n01614925/cartoon_8.jpg +- data/imagenet-r/n10565667/deviantart_20.jpg +- data/imagenet-r/n02096585/tattoo_9.jpg +- data/imagenet-r/n02966193/painting_4.jpg +- data/imagenet-r/n02317335/tattoo_30.jpg +- data/imagenet-r/n02102318/sketch_18.jpg +- data/imagenet-r/n01498041/painting_5.jpg +- data/imagenet-r/n01843383/painting_53.jpg +- data/imagenet-r/n03676483/cartoon_15.jpg +- data/imagenet-r/n04487394/sculpture_0.jpg +- data/imagenet-r/n02814860/videogame_17.jpg +- data/imagenet-r/n04310018/painting_17.jpg +- data/imagenet-r/n01514859/deviantart_9.jpg +- data/imagenet-r/n02814860/cartoon_35.jpg +- data/imagenet-r/n02099712/sketch_12.jpg +- data/imagenet-r/n01616318/graffiti_5.jpg +- data/imagenet-r/n04146614/deviantart_2.jpg +- data/imagenet-r/n03372029/graffiti_6.jpg +- data/imagenet-r/n01514859/cartoon_27.jpg +- data/imagenet-r/n03124170/cartoon_55.jpg +- data/imagenet-r/n04591713/painting_0.jpg +- data/imagenet-r/n07873807/deviantart_40.jpg +- data/imagenet-r/n02268443/misc_114.jpg +- data/imagenet-r/n02364673/painting_11.jpg +- data/imagenet-r/n04465501/videogame_8.jpg +- data/imagenet-r/n04465501/deviantart_16.jpg +- data/imagenet-r/n02134084/misc_62.jpg +- data/imagenet-r/n04487394/cartoon_19.jpg +- data/imagenet-r/n02129604/painting_10.jpg +- data/imagenet-r/n02007558/sketch_6.jpg +- data/imagenet-r/n01774750/sketch_4.jpg +- data/imagenet-r/n02129165/tattoo_59.jpg +- data/imagenet-r/n07753275/toy_4.jpg +- data/imagenet-r/n02445715/cartoon_40.jpg +- data/imagenet-r/n07742313/deviantart_7.jpg +- data/imagenet-r/n02094433/misc_42.jpg +- data/imagenet-r/n07697313/sculpture_2.jpg +- data/imagenet-r/n01882714/tattoo_23.jpg +- data/imagenet-r/n07749582/deviantart_14.jpg +- data/imagenet-r/n07753275/videogame_10.jpg +- data/imagenet-r/n07745940/painting_11.jpg +- data/imagenet-r/n02398521/cartoon_22.jpg +- data/imagenet-r/n12267677/misc_115.jpg +- data/imagenet-r/n02130308/sculpture_1.jpg +- data/imagenet-r/n04254680/cartoon_18.jpg +- data/imagenet-r/n04310018/misc_8.jpg +- data/imagenet-r/n07745940/sketch_17.jpg +- data/imagenet-r/n02099601/misc_9.jpg +- data/imagenet-r/n02190166/cartoon_2.jpg +- data/imagenet-r/n07749582/deviantart_16.jpg +- data/imagenet-r/n02447366/painting_4.jpg +- data/imagenet-r/n02437616/toy_5.jpg +- data/imagenet-r/n02088238/misc_49.jpg +- data/imagenet-r/n02096585/misc_182.jpg +- data/imagenet-r/n04254680/art_7.jpg +- data/imagenet-r/n02909870/cartoon_35.jpg +- data/imagenet-r/n02909870/videogame_17.jpg +- data/imagenet-r/n02206856/sticker_4.jpg +- data/imagenet-r/n04310018/sketch_15.jpg +- data/imagenet-r/n07697313/graphic_1.jpg +- data/imagenet-r/n04086273/videogame_1.jpg +- data/imagenet-r/n02117135/sketch_2.jpg +- data/imagenet-r/n02841315/sculpture_13.jpg +- data/imagenet-r/n02480495/art_14.jpg +- data/imagenet-r/n07718472/sketch_8.jpg +- data/imagenet-r/n01806143/sketch_19.jpg +- data/imagenet-r/n02129604/painting_9.jpg +- data/imagenet-r/n02129165/graffiti_17.jpg +- data/imagenet-r/n07614500/cartoon_12.jpg +- data/imagenet-r/n07768694/painting_12.jpg +- data/imagenet-r/n02007558/tattoo_22.jpg +- data/imagenet-r/n01882714/deviantart_9.jpg +- data/imagenet-r/n02099712/sketch_6.jpg +- data/imagenet-r/n12267677/misc_85.jpg +- data/imagenet-r/n02007558/misc_22.jpg +- data/imagenet-r/n04275548/embroidery_2.jpg +- data/imagenet-r/n02113799/sketch_22.jpg +- data/imagenet-r/n02486410/painting_14.jpg +- data/imagenet-r/n01494475/misc_21.jpg +- data/imagenet-r/n02109525/misc_11.jpg +- data/imagenet-r/n04465501/toy_15.jpg +- data/imagenet-r/n02398521/art_13.jpg +- data/imagenet-r/n02190166/tattoo_0.jpg +- data/imagenet-r/n02051845/painting_22.jpg +- data/imagenet-r/n01484850/art_9.jpg +- data/imagenet-r/n02325366/sketch_16.jpg +- data/imagenet-r/n02410509/art_9.jpg +- data/imagenet-r/n07720875/painting_25.jpg +- data/imagenet-r/n02948072/cartoon_0.jpg +- data/imagenet-r/n03345487/graphic_1.jpg +- data/imagenet-r/n01531178/art_23.jpg +- data/imagenet-r/n02108915/sketch_17.jpg +- data/imagenet-r/n02091134/misc_4.jpg +- data/imagenet-r/n02423022/sketch_11.jpg +- data/imagenet-r/n02051845/sculpture_4.jpg +- data/imagenet-r/n07734744/cartoon_7.jpg +- data/imagenet-r/n01843383/toy_7.jpg +- data/imagenet-r/n01514859/embroidery_17.jpg +- data/imagenet-r/n01518878/painting_0.jpg +- data/imagenet-r/n01614925/cartoon_3.jpg +- data/imagenet-r/n04347754/sketch_22.jpg +- data/imagenet-r/n01694178/art_2.jpg +- data/imagenet-r/n02423022/painting_9.jpg +- data/imagenet-r/n07697537/misc_11.jpg +- data/imagenet-r/n02279972/painting_7.jpg +- data/imagenet-r/n01484850/tattoo_0.jpg +- data/imagenet-r/n07920052/cartoon_12.jpg +- data/imagenet-r/n03424325/misc_36.jpg +- data/imagenet-r/n02110958/painting_33.jpg +- data/imagenet-r/n03481172/cartoon_25.jpg +- data/imagenet-r/n02077923/videogame_0.jpg +- data/imagenet-r/n01833805/tattoo_52.jpg +- data/imagenet-r/n01843383/art_24.jpg +- data/imagenet-r/n01614925/misc_2.jpg +- data/imagenet-r/n07697313/painting_19.jpg +- data/imagenet-r/n02797295/misc_0.jpg +- data/imagenet-r/n03498962/cartoon_0.jpg +- data/imagenet-r/n02841315/graphic_1.jpg +- data/imagenet-r/n07734744/toy_11.jpg +- data/imagenet-r/n04141076/graffiti_0.jpg +- data/imagenet-r/n04465501/misc_7.jpg +- data/imagenet-r/n01806143/cartoon_9.jpg +- data/imagenet-r/n07745940/origami_9.jpg +- data/imagenet-r/n02138441/art_12.jpg +- data/imagenet-r/n01806143/art_1.jpg +- data/imagenet-r/n02007558/tattoo_19.jpg +- data/imagenet-r/n02966193/sketch_1.jpg +- data/imagenet-r/n02950826/cartoon_4.jpg +- data/imagenet-r/n02088094/sketch_7.jpg +- data/imagenet-r/n02655020/misc_35.jpg +- data/imagenet-r/n03424325/misc_46.jpg +- data/imagenet-r/n01774750/sculpture_6.jpg +- data/imagenet-r/n07720875/deviantart_1.jpg +- data/imagenet-r/n02843684/embroidery_2.jpg +- data/imagenet-r/n04141076/cartoon_7.jpg +- data/imagenet-r/n02206856/art_14.jpg +- data/imagenet-r/n04192698/videogame_6.jpg +- data/imagenet-r/n03372029/sketch_10.jpg +- data/imagenet-r/n03676483/sketch_20.jpg +- data/imagenet-r/n01632777/deviantart_22.jpg +- data/imagenet-r/n02480855/painting_7.jpg +- data/imagenet-r/n04347754/toy_5.jpg +- data/imagenet-r/n02128385/sculpture_0.jpg +- data/imagenet-r/n02110958/art_13.jpg +- data/imagenet-r/n02102318/misc_11.jpg +- data/imagenet-r/n02486410/art_3.jpg +- data/imagenet-r/n02099601/misc_33.jpg +- data/imagenet-r/n02398521/cartoon_11.jpg +- data/imagenet-r/n02009912/misc_16.jpg +- data/imagenet-r/n02097298/misc_31.jpg +- data/imagenet-r/n04465501/sketch_1.jpg +- data/imagenet-r/n01843383/sketch_0.jpg +- data/imagenet-r/n03481172/sculpture_5.jpg +- data/imagenet-r/n02395406/graphic_3.jpg +- data/imagenet-r/n12267677/misc_48.jpg +- data/imagenet-r/n02655020/misc_30.jpg +- data/imagenet-r/n02769748/graffiti_1.jpg +- data/imagenet-r/n04487394/deviantart_7.jpg +- data/imagenet-r/n02480855/cartoon_1.jpg +- data/imagenet-r/n02423022/cartoon_8.jpg +- data/imagenet-r/n02906734/sticker_4.jpg +- data/imagenet-r/n04147183/misc_2.jpg +- data/imagenet-r/n02906734/cartoon_3.jpg +- data/imagenet-r/n01843383/sculpture_6.jpg +- data/imagenet-r/n04254680/misc_3.jpg +- data/imagenet-r/n02480855/graffiti_1.jpg +- data/imagenet-r/n02486410/sketch_18.jpg +- data/imagenet-r/n02236044/sculpture_5.jpg +- data/imagenet-r/n02814860/painting_2.jpg +- data/imagenet-r/n02445715/graffiti_10.jpg +- data/imagenet-r/n02486410/toy_0.jpg +- data/imagenet-r/n02096585/misc_36.jpg +- data/imagenet-r/n02410509/sculpture_12.jpg +- data/imagenet-r/n02190166/tattoo_1.jpg +- data/imagenet-r/n04275548/sketch_17.jpg +- data/imagenet-r/n01944390/misc_44.jpg +- data/imagenet-r/n02948072/deviantart_2.jpg +- data/imagenet-r/n02077923/misc_23.jpg +- data/imagenet-r/n02481823/cartoon_24.jpg +- data/imagenet-r/n03272010/tattoo_2.jpg +- data/imagenet-r/n02113023/misc_10.jpg +- data/imagenet-r/n02106550/misc_40.jpg +- data/imagenet-r/n02165456/toy_37.jpg +- data/imagenet-r/n02113799/sketch_18.jpg +- data/imagenet-r/n07720875/painting_23.jpg +- data/imagenet-r/n02128757/sketch_12.jpg +- data/imagenet-r/n04266014/toy_16.jpg +- data/imagenet-r/n02086240/sketch_16.jpg +- data/imagenet-r/n02395406/sculpture_7.jpg +- data/imagenet-r/n04536866/deviantart_3.jpg +- data/imagenet-r/n01910747/art_6.jpg +- data/imagenet-r/n01632777/origami_0.jpg +- data/imagenet-r/n02526121/cartoon_22.jpg +- data/imagenet-r/n07734744/cartoon_36.jpg +- data/imagenet-r/n02909870/videogame_15.jpg +- data/imagenet-r/n07745940/graffiti_9.jpg +- data/imagenet-r/n02113023/sketch_8.jpg +- data/imagenet-r/n02423022/sculpture_19.jpg +- data/imagenet-r/n01820546/painting_14.jpg +- data/imagenet-r/n03602883/misc_4.jpg +- data/imagenet-r/n02165456/sculpture_0.jpg +- data/imagenet-r/n07880968/deviantart_5.jpg +- data/imagenet-r/n01518878/graffiti_4.jpg +- data/imagenet-r/n09835506/misc_1.jpg +- data/imagenet-r/n02481823/graphic_1.jpg +- data/imagenet-r/n01983481/misc_37.jpg +- data/imagenet-r/n04522168/sketch_17.jpg +- data/imagenet-r/n04141076/deviantart_31.jpg +- data/imagenet-r/n04389033/misc_3.jpg +- data/imagenet-r/n02948072/embroidery_24.jpg +- data/imagenet-r/n02206856/tattoo_23.jpg +- data/imagenet-r/n04275548/misc_2.jpg +- data/imagenet-r/n02085620/tattoo_12.jpg +- data/imagenet-r/n03345487/videogame_9.jpg +- data/imagenet-r/n02268443/misc_99.jpg +- data/imagenet-r/n01518878/sketch_3.jpg +- data/imagenet-r/n02130308/painting_31.jpg +- data/imagenet-r/n02814860/sketch_3.jpg +- data/imagenet-r/n07749582/embroidery_1.jpg +- data/imagenet-r/n04254680/videogame_14.jpg +- data/imagenet-r/n02165456/sketch_17.jpg +- data/imagenet-r/n02992529/graffiti_1.jpg +- data/imagenet-r/n03272010/deviantart_2.jpg +- data/imagenet-r/n03481172/videogame_14.jpg +- data/imagenet-r/n01514859/painting_5.jpg +- data/imagenet-r/n02395406/toy_15.jpg +- data/imagenet-r/n04147183/art_5.jpg +- data/imagenet-r/n01833805/painting_22.jpg +- data/imagenet-r/n02092339/misc_22.jpg +- data/imagenet-r/n03930630/videogame_1.jpg +- data/imagenet-r/n07614500/painting_1.jpg +- data/imagenet-r/n03630383/sketch_8.jpg +- data/imagenet-r/n07614500/embroidery_20.jpg +- data/imagenet-r/n02268443/misc_78.jpg +- data/imagenet-r/n01843383/deviantart_80.jpg +- data/imagenet-r/n02841315/painting_5.jpg +- data/imagenet-r/n01484850/cartoon_3.jpg +- data/imagenet-r/n02128385/graffiti_1.jpg +- data/imagenet-r/n03495258/cartoon_6.jpg +- data/imagenet-r/n02445715/graffiti_5.jpg +- data/imagenet-r/n01843383/painting_1.jpg +- data/imagenet-r/n04254680/videogame_13.jpg +- data/imagenet-r/n01770393/cartoon_6.jpg +- data/imagenet-r/n02481823/deviantart_13.jpg +- data/imagenet-r/n02112018/misc_30.jpg +- data/imagenet-r/n02085620/misc_4.jpg +- data/imagenet-r/n01531178/sketch_8.jpg +- data/imagenet-r/n02096585/misc_154.jpg +- data/imagenet-r/n01855672/art_4.jpg +- data/imagenet-r/n01944390/misc_9.jpg +- data/imagenet-r/n02206856/cartoon_52.jpg +- data/imagenet-r/n04141076/painting_27.jpg +- data/imagenet-r/n02088466/sketch_14.jpg +- data/imagenet-r/n04389033/videogame_41.jpg +- data/imagenet-r/n02346627/cartoon_10.jpg +- data/imagenet-r/n03498962/toy_6.jpg +- data/imagenet-r/n02190166/misc_1.jpg +- data/imagenet-r/n07920052/deviantart_10.jpg +- data/imagenet-r/n02843684/embroidery_12.jpg +- data/imagenet-r/n02395406/painting_15.jpg +- data/imagenet-r/n02526121/sculpture_17.jpg +- data/imagenet-r/n02950826/cartoon_3.jpg +- data/imagenet-r/n02110341/misc_1.jpg +- data/imagenet-r/n01614925/deviantart_13.jpg +- data/imagenet-r/n04192698/cartoon_2.jpg +- data/imagenet-r/n01983481/misc_47.jpg +- data/imagenet-r/n01694178/deviantart_2.jpg +- data/imagenet-r/n02701002/sketch_4.jpg +- data/imagenet-r/n02526121/sketch_17.jpg +- data/imagenet-r/n01910747/graphic_7.jpg +- data/imagenet-r/n03630383/cartoon_20.jpg +- data/imagenet-r/n03710193/sketch_21.jpg +- data/imagenet-r/n02007558/deviantart_3.jpg +- data/imagenet-r/n07693725/toy_0.jpg +- data/imagenet-r/n02395406/deviantart_1.jpg +- data/imagenet-r/n04552348/cartoon_5.jpg +- data/imagenet-r/n07753275/toy_5.jpg +- data/imagenet-r/n02233338/sketch_13.jpg +- data/imagenet-r/n01882714/sketch_21.jpg +- data/imagenet-r/n02325366/sketch_22.jpg +- data/imagenet-r/n02797295/misc_79.jpg +- data/imagenet-r/n02364673/sketch_3.jpg +- data/imagenet-r/n02607072/deviantart_9.jpg +- data/imagenet-r/n07697313/painting_20.jpg +- data/imagenet-r/n07695742/deviantart_5.jpg +- data/imagenet-r/n03649909/cartoon_5.jpg +- data/imagenet-r/n04275548/painting_8.jpg +- data/imagenet-r/n02445715/painting_10.jpg +- data/imagenet-r/n02391049/misc_115.jpg +- data/imagenet-r/n02096585/misc_183.jpg +- data/imagenet-r/n04536866/painting_15.jpg +- data/imagenet-r/n03372029/painting_16.jpg +- data/imagenet-r/n02165456/graffiti_6.jpg +- data/imagenet-r/n02129165/cartoon_21.jpg +- data/imagenet-r/n10565667/toy_0.jpg +- data/imagenet-r/n07697537/misc_52.jpg +- data/imagenet-r/n02939185/tattoo_6.jpg +- data/imagenet-r/n02088238/misc_22.jpg +- data/imagenet-r/n04254680/videogame_34.jpg +- data/imagenet-r/n02219486/graphic_3.jpg +- data/imagenet-r/n02480855/sketch_17.jpg +- data/imagenet-r/n07873807/deviantart_3.jpg +- data/imagenet-r/n07714990/painting_6.jpg +- data/imagenet-r/n02655020/misc_74.jpg +- data/imagenet-r/n07734744/videogame_25.jpg +- data/imagenet-r/n03947888/painting_11.jpg +- data/imagenet-r/n02085620/misc_42.jpg +- data/imagenet-r/n07697313/sketch_13.jpg +- data/imagenet-r/n02447366/cartoon_20.jpg +- data/imagenet-r/n01820546/sketch_8.jpg +- data/imagenet-r/n07734744/cartoon_41.jpg +- data/imagenet-r/n02113023/misc_28.jpg +- data/imagenet-r/n02655020/misc_9.jpg +- data/imagenet-r/n02279972/painting_32.jpg +- data/imagenet-r/n12267677/deviantart_3.jpg +- data/imagenet-r/n04389033/cartoon_11.jpg +- data/imagenet-r/n02980441/videogame_8.jpg +- data/imagenet-r/n04536866/deviantart_14.jpg +- data/imagenet-r/n03494278/cartoon_8.jpg +- data/imagenet-r/n02672831/sculpture_3.jpg +- data/imagenet-r/n01784675/tattoo_12.jpg +- data/imagenet-r/n07614500/deviantart_17.jpg +- data/imagenet-r/n01518878/sketch_8.jpg +- data/imagenet-r/n01910747/painting_10.jpg +- data/imagenet-r/n02480495/painting_13.jpg +- data/imagenet-r/n02088466/misc_25.jpg +- data/imagenet-r/n02165456/tattoo_46.jpg +- data/imagenet-r/n02007558/art_21.jpg +- data/imagenet-r/n03124170/cartoon_16.jpg +- data/imagenet-r/n04146614/graffiti_0.jpg +- data/imagenet-r/n02951358/painting_19.jpg +- data/imagenet-r/n02655020/misc_83.jpg +- data/imagenet-r/n01944390/misc_107.jpg +- data/imagenet-r/n01531178/sculpture_2.jpg +- data/imagenet-r/n03124170/painting_29.jpg +- data/imagenet-r/n02219486/sketch_3.jpg +- data/imagenet-r/n01518878/painting_4.jpg +- data/imagenet-r/n02268443/misc_101.jpg +- data/imagenet-r/n01910747/tattoo_27.jpg +- data/imagenet-r/n03481172/cartoon_31.jpg +- data/imagenet-r/n07873807/sketch_7.jpg +- data/imagenet-r/n02395406/toy_2.jpg +- data/imagenet-r/n03372029/cartoon_15.jpg +- data/imagenet-r/n10565667/videogame_2.jpg +- data/imagenet-r/n02110958/cartoon_69.jpg +- data/imagenet-r/n02117135/videogame_4.jpg +- data/imagenet-r/n02445715/sketch_0.jpg +- data/imagenet-r/n01614925/deviantart_28.jpg +- data/imagenet-r/n02410509/sculpture_1.jpg +- data/imagenet-r/n04118538/graphic_1.jpg +- data/imagenet-r/n02071294/deviantart_24.jpg +- data/imagenet-r/n07697537/misc_59.jpg +- data/imagenet-r/n02395406/toy_9.jpg +- data/imagenet-r/n01494475/misc_90.jpg +- data/imagenet-r/n02056570/cartoon_8.jpg +- data/imagenet-r/n02236044/sculpture_20.jpg +- data/imagenet-r/n02129604/deviantart_30.jpg +- data/imagenet-r/n02129165/art_0.jpg +- data/imagenet-r/n02007558/tattoo_41.jpg +- data/imagenet-r/n03930630/toy_2.jpg +- data/imagenet-r/n02909870/toy_2.jpg +- data/imagenet-r/n04522168/videogame_7.jpg +- data/imagenet-r/n03467068/sketch_17.jpg +- data/imagenet-r/n02948072/embroidery_2.jpg +- data/imagenet-r/n02119022/misc_110.jpg +- data/imagenet-r/n03481172/cartoon_27.jpg +- data/imagenet-r/n02486410/sketch_9.jpg +- data/imagenet-r/n04409515/sketch_13.jpg +- data/imagenet-r/n01614925/painting_6.jpg +- data/imagenet-r/n07880968/cartoon_1.jpg +- data/imagenet-r/n12267677/deviantart_6.jpg +- data/imagenet-r/n02085620/tattoo_16.jpg +- data/imagenet-r/n01531178/art_8.jpg +- data/imagenet-r/n02814860/art_18.jpg +- data/imagenet-r/n02007558/cartoon_51.jpg +- data/imagenet-r/n01514859/sketch_17.jpg +- data/imagenet-r/n07749582/cartoon_3.jpg +- data/imagenet-r/n02797295/misc_15.jpg +- data/imagenet-r/n02190166/cartoon_4.jpg +- data/imagenet-r/n02094433/misc_60.jpg +- data/imagenet-r/n02317335/sculpture_4.jpg +- data/imagenet-r/n02088364/misc_2.jpg +- data/imagenet-r/n01833805/painting_19.jpg +- data/imagenet-r/n02793495/painting_16.jpg +- data/imagenet-r/n01882714/graphic_8.jpg +- data/imagenet-r/n01531178/cartoon_23.jpg +- data/imagenet-r/n02106550/sketch_22.jpg +- data/imagenet-r/n02206856/cartoon_66.jpg +- data/imagenet-r/n02486410/sketch_0.jpg +- data/imagenet-r/n02966193/cartoon_13.jpg +- data/imagenet-r/n02114367/misc_21.jpg +- data/imagenet-r/n02883205/toy_7.jpg +- data/imagenet-r/n02423022/art_3.jpg +- data/imagenet-r/n01833805/art_7.jpg +- data/imagenet-r/n02445715/sketch_9.jpg +- data/imagenet-r/n04147183/tattoo_2.jpg +- data/imagenet-r/n02114367/sketch_22.jpg +- data/imagenet-r/n04389033/sketch_14.jpg +- data/imagenet-r/n01944390/misc_15.jpg +- data/imagenet-r/n02165456/tattoo_57.jpg +- data/imagenet-r/n01910747/toy_6.jpg +- data/imagenet-r/n03372029/art_3.jpg +- data/imagenet-r/n02948072/cartoon_4.jpg +- data/imagenet-r/n01514859/cartoon_22.jpg +- data/imagenet-r/n03494278/cartoon_6.jpg +- data/imagenet-r/n04536866/sketch_15.jpg +- data/imagenet-r/n04465501/painting_3.jpg +- data/imagenet-r/n02346627/cartoon_7.jpg +- data/imagenet-r/n04146614/videogame_23.jpg +- data/imagenet-r/n01770393/cartoon_27.jpg +- data/imagenet-r/n03930630/graphic_1.jpg +- data/imagenet-r/n02129604/toy_6.jpg +- data/imagenet-r/n02134084/misc_64.jpg +- data/imagenet-r/n03930630/painting_4.jpg +- data/imagenet-r/n09835506/videogame_0.jpg +- data/imagenet-r/n02948072/embroidery_21.jpg +- data/imagenet-r/n03452741/sketch_18.jpg +- data/imagenet-r/n02510455/misc_26.jpg +- data/imagenet-r/n04141076/art_7.jpg +- data/imagenet-r/n02480855/tattoo_7.jpg +- data/imagenet-r/n01770393/sculpture_3.jpg +- data/imagenet-r/n02279972/painting_19.jpg +- data/imagenet-r/n01614925/art_0.jpg +- data/imagenet-r/n02113023/misc_2.jpg +- data/imagenet-r/n02206856/graffiti_7.jpg +- data/imagenet-r/n02165456/toy_30.jpg +- data/imagenet-r/n02165456/cartoon_12.jpg +- data/imagenet-r/n01820546/deviantart_23.jpg +- data/imagenet-r/n02510455/sketch_6.jpg +- data/imagenet-r/n01443537/graffiti_2.jpg +- data/imagenet-r/n02480855/painting_18.jpg +- data/imagenet-r/n01784675/graphic_0.jpg +- data/imagenet-r/n02206856/misc_11.jpg +- data/imagenet-r/n02106550/sketch_2.jpg +- data/imagenet-r/n01847000/sketch_12.jpg +- data/imagenet-r/n02948072/deviantart_28.jpg +- data/imagenet-r/n02992529/embroidery_0.jpg +- data/imagenet-r/n02096585/tattoo_24.jpg +- data/imagenet-r/n01514859/embroidery_12.jpg +- data/imagenet-r/n02410509/sketch_17.jpg +- data/imagenet-r/n01770393/sculpture_7.jpg +- data/imagenet-r/n04552348/misc_0.jpg +- data/imagenet-r/n07693725/sculpture_2.jpg +- data/imagenet-r/n02071294/cartoon_5.jpg +- data/imagenet-r/n02110341/misc_115.jpg +- data/imagenet-r/n04591713/cartoon_4.jpg +- data/imagenet-r/n02823750/deviantart_4.jpg +- data/imagenet-r/n03649909/toy_24.jpg +- data/imagenet-r/n09835506/deviantart_18.jpg +- data/imagenet-r/n02134084/misc_127.jpg +- data/imagenet-r/n02769748/cartoon_13.jpg +- data/imagenet-r/n02325366/misc_34.jpg +- data/imagenet-r/n02106030/art_4.jpg +- data/imagenet-r/n02325366/misc_7.jpg +- data/imagenet-r/n02526121/cartoon_18.jpg +- data/imagenet-r/n02066245/painting_2.jpg +- data/imagenet-r/n04465501/videogame_4.jpg +- data/imagenet-r/n02206856/tattoo_2.jpg +- data/imagenet-r/n02113624/misc_11.jpg +- data/imagenet-r/n02009912/misc_51.jpg +- data/imagenet-r/n02906734/art_3.jpg +- data/imagenet-r/n02206856/cartoon_34.jpg +- data/imagenet-r/n02096585/misc_52.jpg +- data/imagenet-r/n02268443/sketch_14.jpg +- data/imagenet-r/n01616318/sculpture_7.jpg +- data/imagenet-r/n01614925/sketch_19.jpg +- data/imagenet-r/n07734744/embroidery_16.jpg +- data/imagenet-r/n02951358/embroidery_2.jpg +- data/imagenet-r/n02526121/cartoon_8.jpg +- data/imagenet-r/n02106166/misc_17.jpg +- data/imagenet-r/n02096585/misc_71.jpg +- data/imagenet-r/n02951358/misc_0.jpg +- data/imagenet-r/n01494475/misc_99.jpg +- data/imagenet-r/n02088238/misc_92.jpg +- data/imagenet-r/n07745940/sketch_0.jpg +- data/imagenet-r/n04146614/tattoo_2.jpg +- data/imagenet-r/n01944390/misc_174.jpg +- data/imagenet-r/n01944390/sketch_7.jpg +- data/imagenet-r/n01632777/cartoon_26.jpg +- data/imagenet-r/n09472597/deviantart_12.jpg +- data/imagenet-r/n01614925/cartoon_7.jpg +- data/imagenet-r/n02655020/videogame_18.jpg +- data/imagenet-r/n03495258/videogame_9.jpg +- data/imagenet-r/n02109525/misc_24.jpg +- data/imagenet-r/n02007558/cartoon_15.jpg +- data/imagenet-r/n02236044/misc_5.jpg +- data/imagenet-r/n03494278/painting_6.jpg +- data/imagenet-r/n02106166/art_5.jpg +- data/imagenet-r/n02206856/graphic_5.jpg +- data/imagenet-r/n07697537/misc_33.jpg +- data/imagenet-r/n09835506/misc_17.jpg +- data/imagenet-r/n02094433/misc_9.jpg +- data/imagenet-r/n03452741/painting_5.jpg +- data/imagenet-r/n01806143/deviantart_2.jpg +- data/imagenet-r/n02092339/misc_35.jpg +- data/imagenet-r/n07695742/sketch_14.jpg +- data/imagenet-r/n02206856/tattoo_14.jpg +- data/imagenet-r/n04192698/sketch_23.jpg +- data/imagenet-r/n02410509/sculpture_37.jpg +- data/imagenet-r/n07695742/sketch_4.jpg +- data/imagenet-r/n02481823/cartoon_11.jpg +- data/imagenet-r/n03481172/videogame_10.jpg +- data/imagenet-r/n02094433/misc_38.jpg +- data/imagenet-r/n07749582/painting_49.jpg +- data/imagenet-r/n02206856/videogame_1.jpg +- data/imagenet-r/n07753592/misc_156.jpg +- data/imagenet-r/n01882714/deviantart_38.jpg +- data/imagenet-r/n02317335/cartoon_9.jpg +- data/imagenet-r/n02091134/sketch_7.jpg +- data/imagenet-r/n02165456/misc_3.jpg +- data/imagenet-r/n07753275/tattoo_0.jpg +- data/imagenet-r/n02672831/toy_2.jpg +- data/imagenet-r/n07614500/painting_0.jpg +- data/imagenet-r/n02071294/painting_3.jpg +- data/imagenet-r/n02206856/toy_26.jpg +- data/imagenet-r/n04266014/toy_12.jpg +- data/imagenet-r/n02655020/misc_70.jpg +- data/imagenet-r/n01944390/misc_85.jpg +- data/imagenet-r/n03947888/tattoo_12.jpg +- data/imagenet-r/n01843383/sketch_12.jpg +- data/imagenet-r/n01843383/sketch_11.jpg +- data/imagenet-r/n02883205/cartoon_4.jpg +- data/imagenet-r/n07745940/cartoon_8.jpg +- data/imagenet-r/n02279972/cartoon_2.jpg +- data/imagenet-r/n04146614/videogame_0.jpg +- data/imagenet-r/n01534433/videogame_1.jpg +- data/imagenet-r/n02906734/art_1.jpg +- data/imagenet-r/n03424325/misc_40.jpg +- data/imagenet-r/n01820546/art_15.jpg +- data/imagenet-r/n02447366/painting_17.jpg +- data/imagenet-r/n02363005/cartoon_7.jpg +- data/imagenet-r/n01882714/cartoon_12.jpg +- data/imagenet-r/n02909870/art_3.jpg +- data/imagenet-r/n01644373/art_11.jpg +- data/imagenet-r/n03594945/misc_3.jpg +- data/imagenet-r/n07745940/embroidery_21.jpg +- data/imagenet-r/n01518878/cartoon_44.jpg +- data/imagenet-r/n02206856/graffiti_32.jpg +- data/imagenet-r/n01843383/deviantart_25.jpg +- data/imagenet-r/n02526121/art_1.jpg +- data/imagenet-r/n01616318/tattoo_7.jpg +- data/imagenet-r/n02483362/graffiti_1.jpg +- data/imagenet-r/n02948072/deviantart_32.jpg +- data/imagenet-r/n01843383/painting_2.jpg +- data/imagenet-r/n03602883/misc_44.jpg +- data/imagenet-r/n01770393/tattoo_8.jpg +- data/imagenet-r/n02236044/sketch_17.jpg +- data/imagenet-r/n02128757/sketch_16.jpg +- data/imagenet-r/n01774750/cartoon_5.jpg +- data/imagenet-r/n04591713/painting_33.jpg +- data/imagenet-r/n02110185/sketch_2.jpg +- data/imagenet-r/n02655020/videogame_21.jpg +- data/imagenet-r/n03930630/cartoon_14.jpg +- data/imagenet-r/n02906734/cartoon_38.jpg +- data/imagenet-r/n02363005/sculpture_4.jpg +- data/imagenet-r/n01833805/painting_12.jpg +- data/imagenet-r/n02980441/videogame_7.jpg +- data/imagenet-r/n03124170/deviantart_5.jpg +- data/imagenet-r/n01882714/cartoon_14.jpg +- data/imagenet-r/n02939185/misc_2.jpg +- data/imagenet-r/n04389033/cartoon_8.jpg +- data/imagenet-r/n04347754/videogame_35.jpg +- data/imagenet-r/n02410509/sculpture_10.jpg +- data/imagenet-r/n10565667/cartoon_9.jpg +- data/imagenet-r/n02117135/sketch_0.jpg +- data/imagenet-r/n02802426/tattoo_1.jpg +- data/imagenet-r/n02108089/misc_51.jpg +- data/imagenet-r/n02129604/graffiti_9.jpg +- data/imagenet-r/n01770393/sculpture_4.jpg +- data/imagenet-r/n02236044/embroidery_1.jpg +- data/imagenet-r/n02110341/deviantart_1.jpg +- data/imagenet-r/n02110185/painting_21.jpg +- data/imagenet-r/n02437616/sketch_23.jpg +- data/imagenet-r/n01531178/art_21.jpg +- data/imagenet-r/n02486410/cartoon_12.jpg +- data/imagenet-r/n07734744/sticker_0.jpg +- data/imagenet-r/n02165456/cartoon_3.jpg +- data/imagenet-r/n02480495/cartoon_1.jpg +- data/imagenet-r/n07734744/art_19.jpg +- data/imagenet-r/n03947888/painting_4.jpg +- data/imagenet-r/n02110185/toy_4.jpg +- data/imagenet-r/n02108915/misc_46.jpg +- data/imagenet-r/n02948072/embroidery_29.jpg +- data/imagenet-r/n02110341/sketch_24.jpg +- data/imagenet-r/n01847000/misc_23.jpg +- data/imagenet-r/n02749479/origami_0.jpg +- data/imagenet-r/n02066245/sketch_21.jpg +- data/imagenet-r/n02102318/toy_1.jpg +- data/imagenet-r/n04522168/videogame_3.jpg +- data/imagenet-r/n02793495/misc_0.jpg +- data/imagenet-r/n07873807/toy_7.jpg +- data/imagenet-r/n02423022/sketch_19.jpg +- data/imagenet-r/n01484850/art_11.jpg +- data/imagenet-r/n02356798/sketch_15.jpg +- data/imagenet-r/n01882714/deviantart_1.jpg +- data/imagenet-r/n07753275/videogame_17.jpg +- data/imagenet-r/n02226429/tattoo_8.jpg +- data/imagenet-r/n03602883/misc_17.jpg +- data/imagenet-r/n02086240/sketch_9.jpg +- data/imagenet-r/n02391049/misc_118.jpg +- data/imagenet-r/n04536866/deviantart_30.jpg +- data/imagenet-r/n04591713/painting_17.jpg +- data/imagenet-r/n02128385/tattoo_0.jpg +- data/imagenet-r/n04147183/deviantart_9.jpg +- data/imagenet-r/n02056570/cartoon_6.jpg +- data/imagenet-r/n03494278/cartoon_1.jpg +- data/imagenet-r/n02099712/misc_41.jpg +- data/imagenet-r/n02701002/toy_8.jpg +- data/imagenet-r/n04266014/videogame_17.jpg +- data/imagenet-r/n02802426/cartoon_0.jpg +- data/imagenet-r/n02883205/cartoon_24.jpg +- data/imagenet-r/n02206856/graphic_11.jpg +- data/imagenet-r/n01632777/deviantart_27.jpg +- data/imagenet-r/n02951358/painting_6.jpg +- data/imagenet-r/n01484850/tattoo_1.jpg +- data/imagenet-r/n02219486/tattoo_18.jpg +- data/imagenet-r/n01833805/painting_35.jpg +- data/imagenet-r/n02108915/misc_61.jpg +- data/imagenet-r/n02607072/misc_7.jpg +- data/imagenet-r/n01694178/toy_15.jpg +- data/imagenet-r/n04141076/cartoon_54.jpg +- data/imagenet-r/n02071294/origami_2.jpg +- data/imagenet-r/n02398521/painting_2.jpg +- data/imagenet-r/n02447366/sketch_21.jpg +- data/imagenet-r/n01484850/deviantart_4.jpg +- data/imagenet-r/n12267677/misc_119.jpg +- data/imagenet-r/n01843383/sketch_15.jpg +- data/imagenet-r/n02129604/toy_2.jpg +- data/imagenet-r/n04347754/deviantart_4.jpg +- data/imagenet-r/n02814860/deviantart_3.jpg +- data/imagenet-r/n07697313/art_5.jpg +- data/imagenet-r/n02129165/painting_1.jpg +- data/imagenet-r/n07920052/painting_2.jpg +- data/imagenet-r/n04192698/embroidery_0.jpg +- data/imagenet-r/n04522168/videogame_0.jpg +- data/imagenet-r/n02909870/cartoon_20.jpg +- data/imagenet-r/n02056570/videogame_4.jpg +- data/imagenet-r/n02793495/toy_3.jpg +- data/imagenet-r/n02236044/sculpture_18.jpg +- data/imagenet-r/n04192698/sketch_17.jpg +- data/imagenet-r/n02165456/sketch_7.jpg +- data/imagenet-r/n02165456/sketch_8.jpg +- data/imagenet-r/n07614500/cartoon_10.jpg +- data/imagenet-r/n03775071/toy_1.jpg +- data/imagenet-r/n03124170/misc_7.jpg +- data/imagenet-r/n07614500/sketch_2.jpg +- data/imagenet-r/n07734744/painting_35.jpg +- data/imagenet-r/n01514859/cartoon_31.jpg +- data/imagenet-r/n04086273/cartoon_9.jpg +- data/imagenet-r/n04347754/videogame_33.jpg +- data/imagenet-r/n02655020/misc_78.jpg +- data/imagenet-r/n01616318/videogame_0.jpg +- data/imagenet-r/n07745940/origami_4.jpg +- data/imagenet-r/n10565667/videogame_7.jpg +- data/imagenet-r/n03481172/graphic_0.jpg +- data/imagenet-r/n01986214/misc_4.jpg +- data/imagenet-r/n02106030/art_12.jpg +- data/imagenet-r/n02110341/misc_160.jpg +- data/imagenet-r/n07734744/art_17.jpg +- data/imagenet-r/n01944390/sketch_13.jpg +- data/imagenet-r/n02948072/sketch_25.jpg +- data/imagenet-r/n04522168/cartoon_19.jpg +- data/imagenet-r/n02793495/painting_1.jpg +- data/imagenet-r/n03481172/sticker_3.jpg +- data/imagenet-r/n02110341/misc_89.jpg +- data/imagenet-r/n04118538/videogame_10.jpg +- data/imagenet-r/n02317335/embroidery_10.jpg +- data/imagenet-r/n02437616/graphic_1.jpg +- data/imagenet-r/n04389033/deviantart_2.jpg +- data/imagenet-r/n01806143/cartoon_15.jpg +- data/imagenet-r/n02939185/painting_0.jpg +- data/imagenet-r/n02102318/graphic_1.jpg +- data/imagenet-r/n02843684/misc_24.jpg +- data/imagenet-r/n01843383/deviantart_17.jpg +- data/imagenet-r/n04133789/sculpture_0.jpg +- data/imagenet-r/n02096585/misc_132.jpg +- data/imagenet-r/n01770393/origami_6.jpg +- data/imagenet-r/n02607072/misc_38.jpg +- data/imagenet-r/n02106166/painting_6.jpg +- data/imagenet-r/n01847000/painting_1.jpg +- data/imagenet-r/n01514859/cartoon_20.jpg +- data/imagenet-r/n07614500/videogame_5.jpg +- data/imagenet-r/n02364673/misc_1.jpg +- data/imagenet-r/n02883205/sketch_4.jpg +- data/imagenet-r/n04086273/deviantart_11.jpg +- data/imagenet-r/n02094433/misc_43.jpg +- data/imagenet-r/n03773504/sketch_12.jpg +- data/imagenet-r/n02398521/tattoo_1.jpg +- data/imagenet-r/n04552348/sketch_7.jpg +- data/imagenet-r/n02483362/sketch_19.jpg +- data/imagenet-r/n01847000/cartoon_1.jpg +- data/imagenet-r/n01843383/deviantart_79.jpg +- data/imagenet-r/n07734744/graffiti_39.jpg +- data/imagenet-r/n02841315/sculpture_7.jpg +- data/imagenet-r/n02279972/tattoo_8.jpg +- data/imagenet-r/n02607072/misc_121.jpg +- data/imagenet-r/n03710193/misc_37.jpg +- data/imagenet-r/n03930630/painting_7.jpg +- data/imagenet-r/n02701002/sketch_5.jpg +- data/imagenet-r/n07753592/misc_11.jpg +- data/imagenet-r/n01770393/sculpture_8.jpg +- data/imagenet-r/n07714571/painting_16.jpg +- data/imagenet-r/n02112137/sketch_22.jpg +- data/imagenet-r/n07695742/cartoon_14.jpg +- data/imagenet-r/n01616318/painting_18.jpg +- data/imagenet-r/n04275548/tattoo_5.jpg +- data/imagenet-r/n02346627/cartoon_4.jpg +- data/imagenet-r/n07695742/sketch_5.jpg +- data/imagenet-r/n02138441/graffiti_0.jpg +- data/imagenet-r/n02108915/misc_58.jpg +- data/imagenet-r/n02346627/cartoon_11.jpg +- data/imagenet-r/n01644373/art_4.jpg +- data/imagenet-r/n01534433/painting_15.jpg +- data/imagenet-r/n01514859/graphic_2.jpg +- data/imagenet-r/n04536866/painting_30.jpg +- data/imagenet-r/n01910747/tattoo_71.jpg +- data/imagenet-r/n02106166/misc_19.jpg +- data/imagenet-r/n02117135/art_8.jpg +- data/imagenet-r/n02769748/cartoon_23.jpg +- data/imagenet-r/n02951358/embroidery_4.jpg +- data/imagenet-r/n04192698/sketch_22.jpg +- data/imagenet-r/n02423022/sculpture_17.jpg +- data/imagenet-r/n01910747/misc_0.jpg +- data/imagenet-r/n01494475/misc_77.jpg +- data/imagenet-r/n07873807/sticker_0.jpg +- data/imagenet-r/n02510455/misc_63.jpg +- data/imagenet-r/n01986214/cartoon_29.jpg +- data/imagenet-r/n07695742/misc_12.jpg +- data/imagenet-r/n07745940/embroidery_11.jpg +- data/imagenet-r/n02883205/cartoon_2.jpg +- data/imagenet-r/n02395406/art_4.jpg +- data/imagenet-r/n04465501/deviantart_6.jpg +- data/imagenet-r/n04389033/videogame_53.jpg +- data/imagenet-r/n07734744/deviantart_35.jpg +- data/imagenet-r/n02701002/cartoon_8.jpg +- data/imagenet-r/n01632777/toy_17.jpg +- data/imagenet-r/n02007558/cartoon_4.jpg +- data/imagenet-r/n02096585/misc_88.jpg +- data/imagenet-r/n07714990/sketch_2.jpg +- data/imagenet-r/n02114367/misc_28.jpg +- data/imagenet-r/n01944390/misc_23.jpg +- data/imagenet-r/n01770393/cartoon_16.jpg +- data/imagenet-r/n02130308/sketch_0.jpg +- data/imagenet-r/n02480855/toy_5.jpg +- data/imagenet-r/n02808440/sketch_9.jpg +- data/imagenet-r/n04310018/cartoon_3.jpg +- data/imagenet-r/n04141076/cartoon_46.jpg +- data/imagenet-r/n02236044/origami_29.jpg +- data/imagenet-r/n07742313/art_1.jpg +- data/imagenet-r/n01694178/painting_13.jpg +- data/imagenet-r/n04254680/cartoon_0.jpg +- data/imagenet-r/n02395406/tattoo_10.jpg +- data/imagenet-r/n02486410/painting_10.jpg +- data/imagenet-r/n02106030/toy_0.jpg +- data/imagenet-r/n02226429/art_9.jpg +- data/imagenet-r/n04487394/painting_0.jpg +- data/imagenet-r/n03649909/sketch_19.jpg +- data/imagenet-r/n02802426/videogame_19.jpg +- data/imagenet-r/n04266014/sketch_23.jpg +- data/imagenet-r/n02236044/origami_5.jpg +- data/imagenet-r/n07745940/sculpture_5.jpg +- data/imagenet-r/n02966193/sketch_11.jpg +- data/imagenet-r/n02071294/painting_2.jpg +- data/imagenet-r/n01518878/cartoon_36.jpg +- data/imagenet-r/n02219486/sticker_5.jpg +- data/imagenet-r/n02109525/misc_19.jpg +- data/imagenet-r/n02085620/misc_75.jpg +- data/imagenet-r/n02510455/misc_66.jpg +- data/imagenet-r/n02128757/painting_10.jpg +- data/imagenet-r/n01784675/sketch_18.jpg +- data/imagenet-r/n02802426/videogame_21.jpg +- data/imagenet-r/n02165456/sticker_7.jpg +- data/imagenet-r/n07734744/graffiti_30.jpg +- data/imagenet-r/n02129165/deviantart_4.jpg +- data/imagenet-r/n03947888/cartoon_3.jpg +- data/imagenet-r/n02526121/videogame_0.jpg +- data/imagenet-r/n02966193/sketch_16.jpg +- data/imagenet-r/n04275548/embroidery_18.jpg +- data/imagenet-r/n02119022/videogame_2.jpg +- data/imagenet-r/n09835506/sketch_19.jpg +- data/imagenet-r/n04389033/misc_5.jpg +- data/imagenet-r/n01820546/art_6.jpg +- data/imagenet-r/n04536866/deviantart_0.jpg +- data/imagenet-r/n04487394/cartoon_14.jpg +- data/imagenet-r/n02951358/sculpture_1.jpg +- data/imagenet-r/n02510455/misc_5.jpg +- data/imagenet-r/n02980441/painting_1.jpg +- data/imagenet-r/n02129165/sculpture_20.jpg +- data/imagenet-r/n02814860/origami_0.jpg +- data/imagenet-r/n01833805/embroidery_10.jpg +- data/imagenet-r/n04389033/sketch_8.jpg +- data/imagenet-r/n02165456/graphic_1.jpg +- data/imagenet-r/n04409515/sketch_2.jpg +- data/imagenet-r/n02398521/sketch_20.jpg +- data/imagenet-r/n01531178/sculpture_4.jpg +- data/imagenet-r/n07745940/sketch_10.jpg +- data/imagenet-r/n02096585/misc_142.jpg +- data/imagenet-r/n02480855/graffiti_4.jpg +- data/imagenet-r/n02007558/tattoo_28.jpg +- data/imagenet-r/n01843383/sketch_1.jpg +- data/imagenet-r/n02823750/deviantart_6.jpg +- data/imagenet-r/n07734744/graffiti_48.jpg +- data/imagenet-r/n02110341/misc_24.jpg +- data/imagenet-r/n03775071/cartoon_20.jpg +- data/imagenet-r/n02325366/misc_39.jpg +- data/imagenet-r/n01443537/painting_13.jpg +- data/imagenet-r/n01986214/cartoon_20.jpg +- data/imagenet-r/n01843383/sculpture_5.jpg +- data/imagenet-r/n02226429/sketch_5.jpg +- data/imagenet-r/n07753592/misc_137.jpg +- data/imagenet-r/n01986214/sketch_4.jpg +- data/imagenet-r/n07697537/misc_72.jpg +- data/imagenet-r/n03495258/videogame_1.jpg +- data/imagenet-r/n02097298/sketch_0.jpg +- data/imagenet-r/n02088364/sketch_22.jpg +- data/imagenet-r/n03124170/cartoon_51.jpg +- data/imagenet-r/n02096585/misc_163.jpg +- data/imagenet-r/n02236044/painting_12.jpg +- data/imagenet-r/n09472597/sculpture_3.jpg +- data/imagenet-r/n07734744/sculpture_11.jpg +- data/imagenet-r/n02007558/toy_14.jpg +- data/imagenet-r/n02088238/misc_33.jpg +- data/imagenet-r/n02108915/misc_111.jpg +- data/imagenet-r/n02190166/sketch_15.jpg +- data/imagenet-r/n02437616/art_3.jpg +- data/imagenet-r/n03124170/sculpture_9.jpg +- data/imagenet-r/n02099712/misc_46.jpg +- data/imagenet-r/n03272010/painting_26.jpg +- data/imagenet-r/n04141076/tattoo_5.jpg +- data/imagenet-r/n02112137/misc_7.jpg +- data/imagenet-r/n02486410/art_0.jpg +- data/imagenet-r/n03424325/misc_4.jpg +- data/imagenet-r/n02797295/misc_25.jpg +- data/imagenet-r/n07714571/deviantart_2.jpg +- data/imagenet-r/n02007558/misc_13.jpg +- data/imagenet-r/n07749582/painting_18.jpg +- data/imagenet-r/n02317335/tattoo_26.jpg +- data/imagenet-r/n02279972/cartoon_11.jpg +- data/imagenet-r/n07880968/deviantart_2.jpg +- data/imagenet-r/n01770393/graffiti_9.jpg +- data/imagenet-r/n02110958/tattoo_32.jpg +- data/imagenet-r/n01882714/deviantart_21.jpg +- data/imagenet-r/n02481823/art_2.jpg +- data/imagenet-r/n02437616/sticker_3.jpg +- data/imagenet-r/n01843383/deviantart_91.jpg +- data/imagenet-r/n02071294/sculpture_4.jpg +- data/imagenet-r/n02480855/cartoon_12.jpg +- data/imagenet-r/n02134084/misc_18.jpg +- data/imagenet-r/n02110185/misc_0.jpg +- data/imagenet-r/n02797295/misc_11.jpg +- data/imagenet-r/n02099601/misc_76.jpg +- data/imagenet-r/n02130308/sketch_1.jpg +- data/imagenet-r/n03124170/sketch_21.jpg +- data/imagenet-r/n02097298/misc_78.jpg +- data/imagenet-r/n07920052/deviantart_5.jpg +- data/imagenet-r/n02165456/cartoon_18.jpg +- data/imagenet-r/n07753275/sketch_2.jpg +- data/imagenet-r/n12267677/sketch_5.jpg +- data/imagenet-r/n07745940/deviantart_17.jpg +- data/imagenet-r/n03345487/toy_21.jpg +- data/imagenet-r/n02106550/misc_32.jpg +- data/imagenet-r/n02098286/misc_27.jpg +- data/imagenet-r/n02110958/painting_50.jpg +- data/imagenet-r/n01494475/misc_129.jpg +- data/imagenet-r/n07768694/graphic_2.jpg +- data/imagenet-r/n02268443/misc_176.jpg +- data/imagenet-r/n03452741/art_1.jpg +- data/imagenet-r/n04146614/cartoon_1.jpg +- data/imagenet-r/n02007558/sticker_5.jpg +- data/imagenet-r/n03372029/painting_2.jpg +- data/imagenet-r/n04266014/sketch_5.jpg +- data/imagenet-r/n01494475/misc_65.jpg +- data/imagenet-r/n01614925/painting_30.jpg +- data/imagenet-r/n04389033/sketch_24.jpg +- data/imagenet-r/n02480855/tattoo_6.jpg +- data/imagenet-r/n02007558/misc_16.jpg +- data/imagenet-r/n04522168/painting_0.jpg +- data/imagenet-r/n01843383/sketch_2.jpg +- data/imagenet-r/n03710193/misc_13.jpg +- data/imagenet-r/n12267677/misc_136.jpg +- data/imagenet-r/n02906734/misc_7.jpg +- data/imagenet-r/n03495258/sculpture_19.jpg +- data/imagenet-r/n07753275/sculpture_0.jpg +- data/imagenet-r/n02106662/sketch_7.jpg +- data/imagenet-r/n09835506/misc_16.jpg +- data/imagenet-r/n07697313/sketch_0.jpg +- data/imagenet-r/n04347754/videogame_7.jpg +- data/imagenet-r/n01882714/deviantart_47.jpg +- data/imagenet-r/n02802426/painting_1.jpg +- data/imagenet-r/n04347754/toy_3.jpg +- data/imagenet-r/n09472597/graphic_6.jpg +- data/imagenet-r/n07749582/painting_53.jpg +- data/imagenet-r/n02085620/misc_39.jpg +- data/imagenet-r/n02056570/deviantart_4.jpg +- data/imagenet-r/n01806143/sketch_3.jpg +- data/imagenet-r/n04465501/embroidery_3.jpg +- data/imagenet-r/n02363005/tattoo_10.jpg +- data/imagenet-r/n02165456/cartoon_14.jpg +- data/imagenet-r/n02356798/cartoon_6.jpg +- data/imagenet-r/n02447366/graffiti_4.jpg +- data/imagenet-r/n01806143/origami_12.jpg +- data/imagenet-r/n02814860/painting_38.jpg +- data/imagenet-r/n04536866/deviantart_21.jpg +- data/imagenet-r/n02129165/sketch_4.jpg +- data/imagenet-r/n02701002/toy_12.jpg +- data/imagenet-r/n02219486/origami_9.jpg +- data/imagenet-r/n02445715/toy_9.jpg +- data/imagenet-r/n02113023/misc_26.jpg +- data/imagenet-r/n01616318/tattoo_25.jpg +- data/imagenet-r/n03124170/misc_11.jpg +- data/imagenet-r/n03424325/misc_43.jpg +- data/imagenet-r/n01616318/tattoo_39.jpg +- data/imagenet-r/n02423022/embroidery_0.jpg +- data/imagenet-r/n01820546/art_11.jpg +- data/imagenet-r/n07614500/misc_31.jpg +- data/imagenet-r/n03775071/sculpture_1.jpg +- data/imagenet-r/n02395406/tattoo_4.jpg +- data/imagenet-r/n04591713/painting_46.jpg +- data/imagenet-r/n03345487/sketch_2.jpg +- data/imagenet-r/n01694178/misc_1.jpg +- data/imagenet-r/n02007558/tattoo_53.jpg +- data/imagenet-r/n02206856/sculpture_5.jpg +- data/imagenet-r/n03424325/misc_48.jpg +- data/imagenet-r/n09472597/videogame_4.jpg +- data/imagenet-r/n02106550/misc_17.jpg +- data/imagenet-r/n02165456/cartoon_17.jpg +- data/imagenet-r/n01632777/deviantart_16.jpg +- data/imagenet-r/n04389033/painting_4.jpg +- data/imagenet-r/n03594945/misc_20.jpg +- data/imagenet-r/n01944390/misc_166.jpg +- data/imagenet-r/n01784675/sketch_15.jpg +- data/imagenet-r/n01630670/art_7.jpg +- data/imagenet-r/n02009912/misc_28.jpg +- data/imagenet-r/n07714571/sketch_14.jpg +- data/imagenet-r/n01534433/painting_3.jpg +- data/imagenet-r/n07718472/cartoon_1.jpg +- data/imagenet-r/n03775071/sketch_1.jpg +- data/imagenet-r/n02510455/misc_18.jpg +- data/imagenet-r/n07749582/tattoo_0.jpg +- data/imagenet-r/n02437616/sketch_8.jpg +- data/imagenet-r/n01677366/deviantart_11.jpg +- data/imagenet-r/n07749582/sketch_4.jpg +- data/imagenet-r/n03494278/sketch_14.jpg +- data/imagenet-r/n01484850/sculpture_2.jpg +- data/imagenet-r/n02364673/art_19.jpg +- data/imagenet-r/n02007558/embroidery_6.jpg +- data/imagenet-r/n02117135/cartoon_5.jpg +- data/imagenet-r/n09835506/deviantart_23.jpg +- data/imagenet-r/n02236044/sculpture_11.jpg +- data/imagenet-r/n02701002/toy_9.jpg +- data/imagenet-r/n02226429/origami_6.jpg +- data/imagenet-r/n04141076/cartoon_3.jpg +- data/imagenet-r/n02749479/sketch_17.jpg +- data/imagenet-r/n01910747/sketch_20.jpg +- data/imagenet-r/n01644373/misc_1.jpg +- data/imagenet-r/n01632777/toy_25.jpg +- data/imagenet-r/n02108089/misc_1.jpg +- data/imagenet-r/n02395406/graffiti_1.jpg +- data/imagenet-r/n03773504/videogame_5.jpg +- data/imagenet-r/n02129604/tattoo_22.jpg +- data/imagenet-r/n02108915/misc_123.jpg +- data/imagenet-r/n01910747/deviantart_2.jpg +- data/imagenet-r/n07614500/deviantart_15.jpg +- data/imagenet-r/n02096585/sketch_7.jpg +- data/imagenet-r/n02814860/videogame_3.jpg +- data/imagenet-r/n02769748/cartoon_14.jpg +- data/imagenet-r/n02398521/sketch_17.jpg +- data/imagenet-r/n07753592/misc_151.jpg +- data/imagenet-r/n02096585/misc_146.jpg +- data/imagenet-r/n01833805/videogame_5.jpg +- data/imagenet-r/n02219486/sketch_4.jpg +- data/imagenet-r/n04146614/videogame_31.jpg +- data/imagenet-r/n07920052/cartoon_21.jpg +- data/imagenet-r/n02117135/sculpture_0.jpg +- data/imagenet-r/n02134084/misc_40.jpg +- data/imagenet-r/n02749479/cartoon_2.jpg +- data/imagenet-r/n02391049/misc_34.jpg +- data/imagenet-r/n01518878/origami_4.jpg +- data/imagenet-r/n02226429/origami_21.jpg +- data/imagenet-r/n02130308/painting_36.jpg +- data/imagenet-r/n02119022/misc_121.jpg +- data/imagenet-r/n02655020/sketch_8.jpg +- data/imagenet-r/n07873807/sculpture_0.jpg +- data/imagenet-r/n02279972/painting_38.jpg +- data/imagenet-r/n02883205/painting_2.jpg +- data/imagenet-r/n04591713/sketch_18.jpg +- data/imagenet-r/n03372029/sculpture_13.jpg +- data/imagenet-r/n02071294/sketch_19.jpg +- data/imagenet-r/n02098286/misc_23.jpg +- data/imagenet-r/n02130308/painting_0.jpg +- data/imagenet-r/n02051845/sketch_1.jpg +- data/imagenet-r/n02233338/sketch_22.jpg +- data/imagenet-r/n02909870/graphic_8.jpg +- data/imagenet-r/n01983481/misc_14.jpg +- data/imagenet-r/n02948072/origami_3.jpg +- data/imagenet-r/n02701002/toy_20.jpg +- data/imagenet-r/n01616318/tattoo_14.jpg +- data/imagenet-r/n02607072/sketch_10.jpg +- data/imagenet-r/n02102318/misc_33.jpg +- data/imagenet-r/n02110958/sketch_3.jpg +- data/imagenet-r/n04552348/sketch_6.jpg +- data/imagenet-r/n04133789/cartoon_16.jpg +- data/imagenet-r/n01820546/painting_16.jpg +- data/imagenet-r/n09835506/videogame_6.jpg +- data/imagenet-r/n02655020/misc_49.jpg +- data/imagenet-r/n04254680/sketch_20.jpg +- data/imagenet-r/n02096585/misc_60.jpg +- data/imagenet-r/n01443537/sketch_7.jpg +- data/imagenet-r/n02236044/sketch_9.jpg +- data/imagenet-r/n07714571/painting_10.jpg +- data/imagenet-r/n02655020/videogame_26.jpg +- data/imagenet-r/n01820546/painting_32.jpg +- data/imagenet-r/n04347754/toy_9.jpg +- data/imagenet-r/n02483362/sketch_21.jpg +- data/imagenet-r/n02123045/tattoo_1.jpg +- data/imagenet-r/n04522168/embroidery_11.jpg +- data/imagenet-r/n02051845/graffiti_0.jpg +- data/imagenet-r/n03495258/sculpture_16.jpg +- data/imagenet-r/n01820546/sculpture_3.jpg +- data/imagenet-r/n02480855/tattoo_46.jpg +- data/imagenet-r/n02364673/art_10.jpg +- data/imagenet-r/n02134084/sketch_6.jpg +- data/imagenet-r/n02096585/misc_18.jpg +- data/imagenet-r/n02106030/painting_12.jpg +- data/imagenet-r/n07697537/misc_114.jpg +- data/imagenet-r/n02117135/tattoo_8.jpg +- data/imagenet-r/n03345487/toy_22.jpg +- data/imagenet-r/n02123045/sticker_0.jpg +- data/imagenet-r/n04254680/misc_14.jpg +- data/imagenet-r/n01614925/cartoon_5.jpg +- data/imagenet-r/n01843383/deviantart_42.jpg +- data/imagenet-r/n02797295/misc_43.jpg +- data/imagenet-r/n01494475/misc_22.jpg +- data/imagenet-r/n04487394/painting_2.jpg +- data/imagenet-r/n02410509/graphic_6.jpg +- data/imagenet-r/n02206856/painting_10.jpg +- data/imagenet-r/n04146614/videogame_27.jpg +- data/imagenet-r/n02481823/cartoon_17.jpg +- data/imagenet-r/n02066245/cartoon_0.jpg +- data/imagenet-r/n02948072/origami_7.jpg +- data/imagenet-r/n02481823/videogame_4.jpg +- data/imagenet-r/n04192698/deviantart_1.jpg +- data/imagenet-r/n02123045/painting_63.jpg +- data/imagenet-r/n04465501/misc_3.jpg +- data/imagenet-r/n02808440/painting_7.jpg +- data/imagenet-r/n04266014/misc_13.jpg +- data/imagenet-r/n02088094/misc_32.jpg +- data/imagenet-r/n02364673/art_16.jpg +- data/imagenet-r/n02480855/graffiti_19.jpg +- data/imagenet-r/n04141076/painting_22.jpg +- data/imagenet-r/n02129165/tattoo_54.jpg +- data/imagenet-r/n01833805/deviantart_8.jpg +- data/imagenet-r/n02088364/sketch_9.jpg +- data/imagenet-r/n03124170/painting_17.jpg +- data/imagenet-r/n03495258/sculpture_0.jpg +- data/imagenet-r/n03467068/cartoon_13.jpg +- data/imagenet-r/n02391049/sketch_0.jpg +- data/imagenet-r/n01534433/painting_10.jpg +- data/imagenet-r/n02793495/sketch_5.jpg +- data/imagenet-r/n03710193/misc_1.jpg +- data/imagenet-r/n02086240/misc_31.jpg +- data/imagenet-r/n01860187/embroidery_1.jpg +- data/imagenet-r/n01614925/tattoo_12.jpg +- data/imagenet-r/n02110958/painting_35.jpg +- data/imagenet-r/n03676483/cartoon_9.jpg +- data/imagenet-r/n03649909/misc_3.jpg +- data/imagenet-r/n02437616/deviantart_6.jpg +- data/imagenet-r/n04254680/deviantart_32.jpg +- data/imagenet-r/n04086273/videogame_9.jpg +- data/imagenet-r/n09472597/videogame_14.jpg +- data/imagenet-r/n02165456/tattoo_81.jpg +- data/imagenet-r/n01910747/cartoon_13.jpg +- data/imagenet-r/n02236044/painting_14.jpg +- data/imagenet-r/n02226429/deviantart_2.jpg +- data/imagenet-r/n07753275/videogame_7.jpg +- data/imagenet-r/n01748264/tattoo_40.jpg +- data/imagenet-r/n04310018/embroidery_0.jpg +- data/imagenet-r/n04522168/videogame_8.jpg +- data/imagenet-r/n07734744/painting_14.jpg +- data/imagenet-r/n04536866/graffiti_2.jpg +- data/imagenet-r/n02165456/tattoo_51.jpg +- data/imagenet-r/n03930630/sculpture_3.jpg +- data/imagenet-r/n01843383/deviantart_82.jpg +- data/imagenet-r/n01443537/misc_10.jpg +- data/imagenet-r/n01882714/deviantart_18.jpg +- data/imagenet-r/n01484850/tattoo_3.jpg +- data/imagenet-r/n01784675/cartoon_4.jpg +- data/imagenet-r/n04325704/cartoon_22.jpg +- data/imagenet-r/n02841315/sketch_14.jpg +- data/imagenet-r/n02110958/art_17.jpg +- data/imagenet-r/n01770393/tattoo_24.jpg +- data/imagenet-r/n03947888/tattoo_1.jpg +- data/imagenet-r/n01910747/cartoon_9.jpg +- data/imagenet-r/n02138441/painting_11.jpg +- data/imagenet-r/n02966193/embroidery_3.jpg +- data/imagenet-r/n01514859/painting_40.jpg +- data/imagenet-r/n01443537/art_3.jpg +- data/imagenet-r/n01774750/sketch_18.jpg +- data/imagenet-r/n07697313/deviantart_8.jpg +- data/imagenet-r/n01632777/art_14.jpg +- data/imagenet-r/n02437616/sticker_1.jpg +- data/imagenet-r/n02110958/painting_16.jpg +- data/imagenet-r/n02130308/toy_1.jpg +- data/imagenet-r/n07697313/painting_5.jpg +- data/imagenet-r/n07714571/sketch_2.jpg +- data/imagenet-r/n01833805/tattoo_57.jpg +- data/imagenet-r/n02165456/sculpture_3.jpg +- data/imagenet-r/n01531178/embroidery_3.jpg +- data/imagenet-r/n03594945/sketch_16.jpg +- data/imagenet-r/n03594945/misc_12.jpg +- data/imagenet-r/n02701002/art_1.jpg +- data/imagenet-r/n02317335/sculpture_0.jpg +- data/imagenet-r/n07745940/toy_11.jpg +- data/imagenet-r/n03372029/embroidery_1.jpg +- data/imagenet-r/n02480495/cartoon_2.jpg +- data/imagenet-r/n07697313/deviantart_31.jpg +- data/imagenet-r/n03345487/videogame_23.jpg +- data/imagenet-r/n02398521/painting_17.jpg +- data/imagenet-r/n01855672/deviantart_8.jpg +- data/imagenet-r/n02128757/toy_2.jpg +- data/imagenet-r/n01484850/deviantart_5.jpg +- data/imagenet-r/n03495258/deviantart_7.jpg +- data/imagenet-r/n02391049/deviantart_13.jpg +- data/imagenet-r/n02909870/cartoon_26.jpg +- data/imagenet-r/n02110958/cartoon_10.jpg +- data/imagenet-r/n01494475/misc_33.jpg +- data/imagenet-r/n03495258/sculpture_9.jpg +- data/imagenet-r/n02071294/deviantart_33.jpg +- data/imagenet-r/n07697537/deviantart_6.jpg +- data/imagenet-r/n02951358/cartoon_0.jpg +- data/imagenet-r/n03124170/painting_12.jpg +- data/imagenet-r/n02769748/cartoon_29.jpg +- data/imagenet-r/n02119022/sketch_5.jpg +- data/imagenet-r/n02950826/sketch_12.jpg +- data/imagenet-r/n02486410/painting_17.jpg +- data/imagenet-r/n07753592/deviantart_3.jpg +- data/imagenet-r/n02948072/art_5.jpg +- data/imagenet-r/n02096585/tattoo_29.jpg +- data/imagenet-r/n03345487/sketch_19.jpg +- data/imagenet-r/n04409515/sketch_16.jpg +- data/imagenet-r/n02117135/toy_1.jpg +- data/imagenet-r/n01644373/toy_2.jpg +- data/imagenet-r/n02939185/deviantart_13.jpg +- data/imagenet-r/n02123045/art_3.jpg +- data/imagenet-r/n07920052/graphic_6.jpg +- data/imagenet-r/n01833805/graffiti_19.jpg +- data/imagenet-r/n02510455/deviantart_29.jpg +- data/imagenet-r/n03272010/cartoon_7.jpg +- data/imagenet-r/n02117135/sketch_17.jpg +- data/imagenet-r/n02480855/origami_3.jpg +- data/imagenet-r/n02325366/misc_28.jpg +- data/imagenet-r/n02088094/misc_43.jpg +- data/imagenet-r/n02481823/sketch_5.jpg +- data/imagenet-r/n02007558/origami_2.jpg +- data/imagenet-r/n02099601/sketch_3.jpg +- data/imagenet-r/n07697313/embroidery_7.jpg +- data/imagenet-r/n02607072/misc_69.jpg +- data/imagenet-r/n03495258/embroidery_3.jpg +- data/imagenet-r/n07734744/misc_1.jpg +- data/imagenet-r/n07697537/misc_68.jpg +- data/imagenet-r/n07734744/cartoon_6.jpg +- data/imagenet-r/n02094433/misc_40.jpg +- data/imagenet-r/n01806143/deviantart_1.jpg +- data/imagenet-r/n02391049/misc_112.jpg +- data/imagenet-r/n02236044/sculpture_13.jpg +- data/imagenet-r/n02607072/misc_76.jpg +- data/imagenet-r/n02007558/cartoon_49.jpg +- data/imagenet-r/n03602883/sketch_17.jpg +- data/imagenet-r/n02843684/misc_20.jpg +- data/imagenet-r/n01806143/cartoon_19.jpg +- data/imagenet-r/n07734744/sculpture_14.jpg +- data/imagenet-r/n01910747/tattoo_39.jpg +- data/imagenet-r/n02510455/misc_97.jpg +- data/imagenet-r/n02110958/art_1.jpg +- data/imagenet-r/n07920052/deviantart_2.jpg +- data/imagenet-r/n01820546/painting_19.jpg +- data/imagenet-r/n03481172/sculpture_3.jpg +- data/imagenet-r/n02951358/sketch_16.jpg +- data/imagenet-r/n02106550/misc_57.jpg +- data/imagenet-r/n04591713/deviantart_2.jpg +- data/imagenet-r/n02510455/sketch_4.jpg +- data/imagenet-r/n03494278/painting_0.jpg +- data/imagenet-r/n02843684/misc_18.jpg +- data/imagenet-r/n04310018/art_21.jpg +- data/imagenet-r/n02108915/misc_24.jpg +- data/imagenet-r/n02948072/sketch_19.jpg +- data/imagenet-r/n01630670/art_4.jpg +- data/imagenet-r/n03424325/videogame_14.jpg +- data/imagenet-r/n02939185/cartoon_11.jpg +- data/imagenet-r/n07614500/videogame_1.jpg +- data/imagenet-r/n01944390/misc_92.jpg +- data/imagenet-r/n01614925/art_10.jpg +- data/imagenet-r/n02823750/cartoon_3.jpg +- data/imagenet-r/n02480855/videogame_1.jpg +- data/imagenet-r/n07753592/misc_13.jpg +- data/imagenet-r/n03495258/tattoo_3.jpg +- data/imagenet-r/n01616318/tattoo_33.jpg +- data/imagenet-r/n02317335/sketch_2.jpg +- data/imagenet-r/n03888257/cartoon_17.jpg +- data/imagenet-r/n04141076/cartoon_24.jpg +- data/imagenet-r/n01616318/tattoo_1.jpg +- data/imagenet-r/n09472597/misc_6.jpg +- data/imagenet-r/n02480855/tattoo_39.jpg +- data/imagenet-r/n07718472/painting_0.jpg +- data/imagenet-r/n02279972/misc_3.jpg +- data/imagenet-r/n01644373/embroidery_1.jpg +- data/imagenet-r/n01632777/toy_1.jpg +- data/imagenet-r/n04389033/sketch_20.jpg +- data/imagenet-r/n07697537/videogame_25.jpg +- data/imagenet-r/n02091134/sketch_12.jpg +- data/imagenet-r/n02480855/graphic_2.jpg +- data/imagenet-r/n07745940/sticker_6.jpg +- data/imagenet-r/n04266014/misc_18.jpg +- data/imagenet-r/n07695742/painting_7.jpg +- data/imagenet-r/n02423022/art_16.jpg +- data/imagenet-r/n12267677/misc_72.jpg +- data/imagenet-r/n09472597/videogame_13.jpg +- data/imagenet-r/n02909870/graphic_12.jpg +- data/imagenet-r/n03888257/cartoon_18.jpg +- data/imagenet-r/n04275548/sticker_1.jpg +- data/imagenet-r/n07745940/graffiti_20.jpg +- data/imagenet-r/n07697313/videogame_5.jpg +- data/imagenet-r/n01910747/embroidery_17.jpg +- data/imagenet-r/n02190166/sticker_1.jpg +- data/imagenet-r/n01748264/misc_11.jpg +- data/imagenet-r/n12267677/misc_82.jpg +- data/imagenet-r/n02236044/graffiti_2.jpg +- data/imagenet-r/n07745940/sketch_3.jpg +- data/imagenet-r/n04389033/origami_3.jpg +- data/imagenet-r/n02128757/cartoon_7.jpg +- data/imagenet-r/n02483362/sticker_1.jpg +- data/imagenet-r/n01882714/sketch_12.jpg +- data/imagenet-r/n02906734/cartoon_28.jpg +- data/imagenet-r/n01784675/sketch_22.jpg +- data/imagenet-r/n01784675/sketch_14.jpg +- data/imagenet-r/n07734744/embroidery_18.jpg +- data/imagenet-r/n02749479/misc_14.jpg +- data/imagenet-r/n07697313/cartoon_45.jpg +- data/imagenet-r/n02129604/sculpture_1.jpg +- data/imagenet-r/n04389033/toy_12.jpg +- data/imagenet-r/n02226429/origami_25.jpg +- data/imagenet-r/n02119022/sketch_3.jpg +- data/imagenet-r/n01443537/deviantart_3.jpg +- data/imagenet-r/n01784675/deviantart_4.jpg +- data/imagenet-r/n02108089/misc_29.jpg +- data/imagenet-r/n02129165/tattoo_28.jpg +- data/imagenet-r/n01484850/toy_12.jpg +- data/imagenet-r/n02906734/embroidery_5.jpg +- data/imagenet-r/n02410509/origami_9.jpg +- data/imagenet-r/n02066245/painting_4.jpg +- data/imagenet-r/n01494475/misc_16.jpg +- data/imagenet-r/n01882714/toy_0.jpg +- data/imagenet-r/n01748264/tattoo_28.jpg +- data/imagenet-r/n02672831/graffiti_11.jpg +- data/imagenet-r/n01910747/sketch_5.jpg +- data/imagenet-r/n02112018/misc_57.jpg +- data/imagenet-r/n02423022/origami_1.jpg +- data/imagenet-r/n02119022/misc_56.jpg +- data/imagenet-r/n02113023/misc_3.jpg +- data/imagenet-r/n02268443/art_0.jpg +- data/imagenet-r/n07873807/deviantart_8.jpg +- data/imagenet-r/n03773504/painting_2.jpg +- data/imagenet-r/n02437616/origami_1.jpg +- data/imagenet-r/n01616318/embroidery_0.jpg +- data/imagenet-r/n04266014/cartoon_31.jpg +- data/imagenet-r/n02268443/misc_110.jpg +- data/imagenet-r/n02077923/sketch_17.jpg +- data/imagenet-r/n01694178/tattoo_27.jpg +- data/imagenet-r/n07693725/deviantart_3.jpg +- data/imagenet-r/n02363005/misc_1.jpg +- data/imagenet-r/n02356798/cartoon_14.jpg +- data/imagenet-r/n02219486/sketch_17.jpg +- data/imagenet-r/n01616318/cartoon_17.jpg +- data/imagenet-r/n09835506/videogame_25.jpg +- data/imagenet-r/n03676483/cartoon_20.jpg +- data/imagenet-r/n09472597/sketch_33.jpg +- data/imagenet-r/n07745940/toy_16.jpg +- data/imagenet-r/n02701002/tattoo_3.jpg +- data/imagenet-r/n02317335/cartoon_11.jpg +- data/imagenet-r/n02112018/misc_12.jpg +- data/imagenet-r/n02007558/graffiti_12.jpg +- data/imagenet-r/n02510455/misc_16.jpg +- data/imagenet-r/n04487394/graphic_3.jpg +- data/imagenet-r/n02206856/sticker_22.jpg +- data/imagenet-r/n01833805/sculpture_3.jpg +- data/imagenet-r/n04141076/cartoon_19.jpg +- data/imagenet-r/n02483362/cartoon_5.jpg +- data/imagenet-r/n02437616/painting_3.jpg +- data/imagenet-r/n02106166/sculpture_3.jpg +- data/imagenet-r/n01514859/painting_27.jpg +- data/imagenet-r/n02128757/cartoon_0.jpg +- data/imagenet-r/n02395406/sculpture_10.jpg +- data/imagenet-r/n01484850/tattoo_9.jpg +- data/imagenet-r/n01443537/cartoon_35.jpg +- data/imagenet-r/n02112018/misc_22.jpg +- data/imagenet-r/n12267677/sketch_22.jpg +- data/imagenet-r/n02113624/sketch_2.jpg +- data/imagenet-r/n02128757/sketch_1.jpg +- data/imagenet-r/n01882714/toy_33.jpg +- data/imagenet-r/n02346627/toy_3.jpg +- data/imagenet-r/n01986214/cartoon_28.jpg +- data/imagenet-r/n07714990/sketch_9.jpg +- data/imagenet-r/n01847000/tattoo_8.jpg +- data/imagenet-r/n07720875/cartoon_0.jpg +- data/imagenet-r/n02051845/misc_0.jpg +- data/imagenet-r/n04389033/misc_1.jpg +- data/imagenet-r/n02129604/tattoo_25.jpg +- data/imagenet-r/n01614925/deviantart_22.jpg +- data/imagenet-r/n03124170/painting_20.jpg +- data/imagenet-r/n04086273/deviantart_7.jpg +- data/imagenet-r/n01694178/sticker_3.jpg +- data/imagenet-r/n02134084/videogame_3.jpg +- data/imagenet-r/n02092339/misc_19.jpg +- data/imagenet-r/n09835506/deviantart_40.jpg +- data/imagenet-r/n01644373/sketch_20.jpg +- data/imagenet-r/n02948072/embroidery_3.jpg +- data/imagenet-r/n01694178/origami_3.jpg +- data/imagenet-r/n04536866/deviantart_24.jpg +- data/imagenet-r/n04266014/painting_19.jpg +- data/imagenet-r/n04275548/art_3.jpg +- data/imagenet-r/n03124170/cartoon_19.jpg +- data/imagenet-r/n02088364/misc_58.jpg +- data/imagenet-r/n02108915/misc_53.jpg +- data/imagenet-r/n07697313/painting_1.jpg +- data/imagenet-r/n02843684/painting_11.jpg +- data/imagenet-r/n02447366/cartoon_29.jpg +- data/imagenet-r/n02130308/cartoon_0.jpg +- data/imagenet-r/n02165456/toy_17.jpg +- data/imagenet-r/n07697537/misc_4.jpg +- data/imagenet-r/n02106166/painting_15.jpg +- data/imagenet-r/n02096585/misc_145.jpg +- data/imagenet-r/n02129604/tattoo_30.jpg +- data/imagenet-r/n07753592/misc_123.jpg +- data/imagenet-r/n04192698/deviantart_4.jpg +- data/imagenet-r/n02099712/misc_23.jpg +- data/imagenet-r/n04133789/art_8.jpg +- data/imagenet-r/n03649909/sketch_1.jpg +- data/imagenet-r/n07695742/cartoon_5.jpg +- data/imagenet-r/n02129165/toy_16.jpg +- data/imagenet-r/n02102318/misc_23.jpg +- data/imagenet-r/n02102318/misc_12.jpg +- data/imagenet-r/n02134084/tattoo_0.jpg +- data/imagenet-r/n02129604/tattoo_1.jpg +- data/imagenet-r/n03498962/misc_4.jpg +- data/imagenet-r/n03272010/sketch_18.jpg +- data/imagenet-r/n02607072/misc_41.jpg +- data/imagenet-r/n04347754/sketch_9.jpg +- data/imagenet-r/n01882714/origami_6.jpg +- data/imagenet-r/n01614925/deviantart_45.jpg +- data/imagenet-r/n07753592/deviantart_13.jpg +- data/imagenet-r/n02056570/painting_5.jpg +- data/imagenet-r/n02814860/cartoon_20.jpg +- data/imagenet-r/n02113023/sketch_13.jpg +- data/imagenet-r/n02123045/painting_28.jpg +- data/imagenet-r/n01531178/cartoon_26.jpg +- data/imagenet-r/n01531178/tattoo_6.jpg +- data/imagenet-r/n02165456/tattoo_62.jpg +- data/imagenet-r/n03124170/graffiti_0.jpg +- data/imagenet-r/n02206856/embroidery_17.jpg +- data/imagenet-r/n03602883/misc_28.jpg +- data/imagenet-r/n01843383/toy_2.jpg +- data/imagenet-r/n04266014/toy_2.jpg +- data/imagenet-r/n02091134/misc_29.jpg +- data/imagenet-r/n01855672/painting_18.jpg +- data/imagenet-r/n02094433/misc_31.jpg +- data/imagenet-r/n02445715/cartoon_12.jpg +- data/imagenet-r/n02112137/sketch_14.jpg +- data/imagenet-r/n04487394/sketch_17.jpg +- data/imagenet-r/n01882714/origami_3.jpg +- data/imagenet-r/n02769748/sketch_21.jpg +- data/imagenet-r/n02114367/misc_55.jpg +- data/imagenet-r/n01494475/cartoon_0.jpg +- data/imagenet-r/n02134084/misc_20.jpg +- data/imagenet-r/n02123045/painting_16.jpg +- data/imagenet-r/n02802426/sticker_0.jpg +- data/imagenet-r/n02445715/graphic_0.jpg +- data/imagenet-r/n07697537/deviantart_9.jpg +- data/imagenet-r/n02992529/sketch_10.jpg +- data/imagenet-r/n10565667/toy_2.jpg +- data/imagenet-r/n04254680/deviantart_4.jpg +- data/imagenet-r/n04254680/cartoon_15.jpg +- data/imagenet-r/n04146614/sketch_14.jpg +- data/imagenet-r/n02138441/sculpture_20.jpg +- data/imagenet-r/n02110958/tattoo_5.jpg +- data/imagenet-r/n03602883/sketch_15.jpg +- data/imagenet-r/n02808440/cartoon_4.jpg +- data/imagenet-r/n02007558/embroidery_27.jpg +- data/imagenet-r/n01833805/art_9.jpg +- data/imagenet-r/n04310018/painting_13.jpg +- data/imagenet-r/n02607072/misc_22.jpg +- data/imagenet-r/n02110341/misc_50.jpg +- data/imagenet-r/n02480495/sketch_19.jpg +- data/imagenet-r/n02395406/toy_27.jpg +- data/imagenet-r/n01644373/sketch_19.jpg +- data/imagenet-r/n07614500/misc_0.jpg +- data/imagenet-r/n04266014/deviantart_17.jpg +- data/imagenet-r/n02226429/tattoo_7.jpg +- data/imagenet-r/n01843383/cartoon_6.jpg +- data/imagenet-r/n10565667/toy_6.jpg +- data/imagenet-r/n03775071/cartoon_3.jpg +- data/imagenet-r/n02165456/tattoo_76.jpg +- data/imagenet-r/n04347754/cartoon_10.jpg +- data/imagenet-r/n02102318/sketch_2.jpg +- data/imagenet-r/n01910747/sketch_18.jpg +- data/imagenet-r/n02906734/sketch_17.jpg +- data/imagenet-r/n10565667/art_8.jpg +- data/imagenet-r/n02950826/cartoon_5.jpg +- data/imagenet-r/n02481823/tattoo_3.jpg +- data/imagenet-r/n01518878/art_5.jpg +- data/imagenet-r/n03676483/cartoon_0.jpg +- data/imagenet-r/n02165456/cartoon_8.jpg +- data/imagenet-r/n02797295/misc_78.jpg +- data/imagenet-r/n01944390/misc_78.jpg +- data/imagenet-r/n02607072/sketch_13.jpg +- data/imagenet-r/n02395406/sculpture_23.jpg +- data/imagenet-r/n02236044/sketch_15.jpg +- data/imagenet-r/n01983481/misc_6.jpg +- data/imagenet-r/n02992529/cartoon_6.jpg +- data/imagenet-r/n04266014/deviantart_1.jpg +- data/imagenet-r/n02437616/graffiti_6.jpg +- data/imagenet-r/n02447366/sticker_4.jpg +- data/imagenet-r/n02165456/toy_1.jpg +- data/imagenet-r/n02102318/misc_50.jpg +- data/imagenet-r/n01494475/misc_111.jpg +- data/imagenet-r/n02108915/sketch_7.jpg +- data/imagenet-r/n01770393/tattoo_27.jpg +- data/imagenet-r/n07720875/art_0.jpg +- data/imagenet-r/n01944390/misc_136.jpg +- data/imagenet-r/n07714990/art_2.jpg +- data/imagenet-r/n02129165/sketch_23.jpg +- data/imagenet-r/n02091134/misc_37.jpg +- data/imagenet-r/n04086273/art_15.jpg +- data/imagenet-r/n07749582/deviantart_1.jpg +- data/imagenet-r/n07734744/videogame_24.jpg +- data/imagenet-r/n02948072/deviantart_8.jpg +- data/imagenet-r/n07734744/graffiti_23.jpg +- data/imagenet-r/n01518878/cartoon_54.jpg +- data/imagenet-r/n02364673/painting_10.jpg +- data/imagenet-r/n01910747/tattoo_51.jpg +- data/imagenet-r/n02007558/painting_16.jpg +- data/imagenet-r/n01514859/deviantart_22.jpg +- data/imagenet-r/n02951358/sketch_14.jpg +- data/imagenet-r/n07734744/sticker_19.jpg +- data/imagenet-r/n02346627/art_9.jpg +- data/imagenet-r/n07614500/misc_18.jpg +- data/imagenet-r/n02108089/misc_32.jpg +- data/imagenet-r/n02130308/painting_27.jpg +- data/imagenet-r/n02110958/cartoon_48.jpg +- data/imagenet-r/n02906734/sticker_0.jpg +- data/imagenet-r/n01518878/painting_23.jpg +- data/imagenet-r/n07697313/sticker_0.jpg +- data/imagenet-r/n02526121/toy_1.jpg +- data/imagenet-r/n02395406/toy_0.jpg +- data/imagenet-r/n01843383/cartoon_46.jpg +- data/imagenet-r/n03124170/graphic_1.jpg +- data/imagenet-r/n02447366/cartoon_18.jpg +- data/imagenet-r/n04133789/sketch_13.jpg +- data/imagenet-r/n03630383/cartoon_12.jpg +- data/imagenet-r/n02112018/sketch_17.jpg +- data/imagenet-r/n02268443/misc_26.jpg +- data/imagenet-r/n02106662/sketch_17.jpg +- data/imagenet-r/n02106550/misc_19.jpg +- data/imagenet-r/n02106166/art_7.jpg +- data/imagenet-r/n01843383/sculpture_2.jpg +- data/imagenet-r/n02410509/art_1.jpg +- data/imagenet-r/n02317335/sketch_18.jpg +- data/imagenet-r/n02481823/graphic_0.jpg +- data/imagenet-r/n02423022/cartoon_7.jpg +- data/imagenet-r/n02206856/graffiti_6.jpg +- data/imagenet-r/n03124170/painting_35.jpg +- data/imagenet-r/n02108915/misc_40.jpg +- data/imagenet-r/n02391049/videogame_0.jpg +- data/imagenet-r/n12267677/deviantart_21.jpg +- data/imagenet-r/n03124170/painting_11.jpg +- data/imagenet-r/n02814860/painting_20.jpg +- data/imagenet-r/n02447366/graffiti_2.jpg +- data/imagenet-r/n01677366/sketch_4.jpg +- data/imagenet-r/n02398521/videogame_9.jpg +- data/imagenet-r/n03495258/painting_1.jpg +- data/imagenet-r/n07697537/misc_71.jpg +- data/imagenet-r/n01806143/art_7.jpg +- data/imagenet-r/n09472597/deviantart_3.jpg +- data/imagenet-r/n01847000/sketch_15.jpg +- data/imagenet-r/n02108915/misc_88.jpg +- data/imagenet-r/n01843383/painting_43.jpg +- data/imagenet-r/n03345487/videogame_18.jpg +- data/imagenet-r/n02398521/sketch_19.jpg +- data/imagenet-r/n01531178/cartoon_3.jpg +- data/imagenet-r/n01443537/cartoon_4.jpg +- data/imagenet-r/n02129165/sketch_11.jpg +- data/imagenet-r/n01986214/sketch_1.jpg +- data/imagenet-r/n01514859/sketch_16.jpg +- data/imagenet-r/n03372029/sculpture_12.jpg +- data/imagenet-r/n01910747/misc_2.jpg +- data/imagenet-r/n02802426/toy_5.jpg +- data/imagenet-r/n04389033/sculpture_4.jpg +- data/imagenet-r/n02398521/cartoon_8.jpg +- data/imagenet-r/n01614925/cartoon_18.jpg +- data/imagenet-r/n02445715/graffiti_2.jpg +- data/imagenet-r/n02906734/cartoon_56.jpg +- data/imagenet-r/n02206856/toy_41.jpg +- data/imagenet-r/n04389033/art_4.jpg +- data/imagenet-r/n03124170/tattoo_12.jpg +- data/imagenet-r/n02423022/sketch_6.jpg +- data/imagenet-r/n02391049/misc_41.jpg +- data/imagenet-r/n02098286/misc_41.jpg +- data/imagenet-r/n02655020/misc_50.jpg +- data/imagenet-r/n12267677/sketch_7.jpg +- data/imagenet-r/n01443537/embroidery_10.jpg +- data/imagenet-r/n02099601/videogame_1.jpg +- data/imagenet-r/n02526121/sculpture_15.jpg +- data/imagenet-r/n07745940/toy_19.jpg +- data/imagenet-r/n04522168/cartoon_15.jpg +- data/imagenet-r/n02279972/art_18.jpg +- data/imagenet-r/n07693725/cartoon_8.jpg +- data/imagenet-r/n04086273/toy_6.jpg +- data/imagenet-r/n02814860/cartoon_30.jpg +- data/imagenet-r/n04591713/painting_6.jpg +- data/imagenet-r/n01843383/deviantart_92.jpg +- data/imagenet-r/n01632777/cartoon_33.jpg +- data/imagenet-r/n04487394/graffiti_0.jpg +- data/imagenet-r/n01484850/sketch_19.jpg +- data/imagenet-r/n03594945/tattoo_0.jpg +- data/imagenet-r/n03124170/tattoo_8.jpg +- data/imagenet-r/n07753592/misc_155.jpg +- data/imagenet-r/n02088238/sketch_9.jpg +- data/imagenet-r/n02236044/sculpture_15.jpg +- data/imagenet-r/n02007558/embroidery_3.jpg +- data/imagenet-r/n02190166/sketch_8.jpg +- data/imagenet-r/n02317335/embroidery_6.jpg +- data/imagenet-r/n01644373/tattoo_0.jpg +- data/imagenet-r/n03930630/art_6.jpg +- data/imagenet-r/n02098286/misc_38.jpg +- data/imagenet-r/n02110341/misc_107.jpg +- data/imagenet-r/n03498962/graphic_4.jpg +- data/imagenet-r/n01910747/sculpture_9.jpg +- data/imagenet-r/n07745940/sketch_20.jpg +- data/imagenet-r/n01806143/sticker_2.jpg +- data/imagenet-r/n02119022/misc_102.jpg +- data/imagenet-r/n04118538/sketch_19.jpg +- data/imagenet-r/n04141076/graphic_0.jpg +- data/imagenet-r/n02410509/cartoon_21.jpg +- data/imagenet-r/n02481823/sculpture_13.jpg +- data/imagenet-r/n01843383/art_8.jpg +- data/imagenet-r/n07693725/deviantart_4.jpg +- data/imagenet-r/n01632777/toy_16.jpg +- data/imagenet-r/n01694178/toy_9.jpg +- data/imagenet-r/n01534433/sketch_11.jpg +- data/imagenet-r/n02165456/art_8.jpg +- data/imagenet-r/n01632777/deviantart_14.jpg +- data/imagenet-r/n01910747/tattoo_9.jpg +- data/imagenet-r/n02088364/sketch_17.jpg +- data/imagenet-r/n01833805/tattoo_2.jpg +- data/imagenet-r/n02098286/misc_31.jpg +- data/imagenet-r/n02814860/painting_33.jpg +- data/imagenet-r/n04086273/tattoo_58.jpg +- data/imagenet-r/n03124170/toy_11.jpg +- data/imagenet-r/n03424325/sketch_9.jpg +- data/imagenet-r/n07720875/deviantart_0.jpg +- data/imagenet-r/n07734744/deviantart_15.jpg +- data/imagenet-r/n07697313/graphic_5.jpg +- data/imagenet-r/n01531178/painting_38.jpg +- data/imagenet-r/n02793495/painting_18.jpg +- data/imagenet-r/n02112137/misc_3.jpg +- data/imagenet-r/n04347754/sketch_16.jpg +- data/imagenet-r/n02980441/sketch_12.jpg +- data/imagenet-r/n01806143/sketch_18.jpg +- data/imagenet-r/n02486410/sculpture_0.jpg +- data/imagenet-r/n03372029/painting_13.jpg +- data/imagenet-r/n02097298/misc_68.jpg +- data/imagenet-r/n03602883/misc_21.jpg +- data/imagenet-r/n02423022/art_17.jpg +- data/imagenet-r/n07718472/cartoon_13.jpg +- data/imagenet-r/n07695742/sketch_11.jpg +- data/imagenet-r/n03424325/videogame_27.jpg +- data/imagenet-r/n02841315/sketch_15.jpg +- data/imagenet-r/n01833805/origami_3.jpg +- data/imagenet-r/n02939185/cartoon_5.jpg +- data/imagenet-r/n07697537/misc_113.jpg +- data/imagenet-r/n02526121/cartoon_17.jpg +- data/imagenet-r/n04147183/painting_21.jpg +- data/imagenet-r/n02091032/misc_0.jpg +- data/imagenet-r/n04266014/videogame_6.jpg +- data/imagenet-r/n02007558/tattoo_60.jpg +- data/imagenet-r/n02119022/misc_33.jpg +- data/imagenet-r/n01774750/origami_1.jpg +- data/imagenet-r/n04347754/deviantart_5.jpg +- data/imagenet-r/n02117135/painting_11.jpg +- data/imagenet-r/n02108089/misc_48.jpg +- data/imagenet-r/n02802426/tattoo_16.jpg +- data/imagenet-r/n02165456/misc_6.jpg +- data/imagenet-r/n04141076/cartoon_55.jpg +- data/imagenet-r/n03888257/sketch_7.jpg +- data/imagenet-r/n02423022/painting_7.jpg +- data/imagenet-r/n03676483/sculpture_2.jpg +- data/imagenet-r/n04266014/toy_24.jpg +- data/imagenet-r/n04141076/sculpture_15.jpg +- data/imagenet-r/n02395406/sculpture_14.jpg +- data/imagenet-r/n02607072/sketch_4.jpg +- data/imagenet-r/n02445715/painting_8.jpg +- data/imagenet-r/n01770393/tattoo_62.jpg +- data/imagenet-r/n02395406/misc_5.jpg +- data/imagenet-r/n01616318/deviantart_26.jpg +- data/imagenet-r/n02951358/art_0.jpg +- data/imagenet-r/n02110958/painting_39.jpg +- data/imagenet-r/n07768694/painting_8.jpg +- data/imagenet-r/n02110958/painting_8.jpg +- data/imagenet-r/n02951358/videogame_4.jpg +- data/imagenet-r/n02206856/graffiti_26.jpg +- data/imagenet-r/n02098286/misc_15.jpg +- data/imagenet-r/n02096585/misc_86.jpg +- data/imagenet-r/n01855672/graffiti_2.jpg +- data/imagenet-r/n02165456/toy_29.jpg +- data/imagenet-r/n04325704/deviantart_4.jpg +- data/imagenet-r/n02951358/deviantart_1.jpg +- data/imagenet-r/n02071294/cartoon_15.jpg +- data/imagenet-r/n01833805/tattoo_97.jpg +- data/imagenet-r/n07720875/deviantart_5.jpg +- data/imagenet-r/n02364673/deviantart_4.jpg +- data/imagenet-r/n01986214/cartoon_23.jpg +- data/imagenet-r/n04118538/cartoon_0.jpg +- data/imagenet-r/n02138441/sculpture_12.jpg +- data/imagenet-r/n01910747/sculpture_5.jpg +- data/imagenet-r/n04266014/cartoon_16.jpg +- data/imagenet-r/n02980441/videogame_12.jpg +- data/imagenet-r/n04266014/misc_3.jpg +- data/imagenet-r/n03372029/embroidery_2.jpg +- data/imagenet-r/n02092339/misc_49.jpg +- data/imagenet-r/n02226429/painting_12.jpg +- data/imagenet-r/n04086273/tattoo_1.jpg +- data/imagenet-r/n01644373/painting_16.jpg +- data/imagenet-r/n07734744/videogame_37.jpg +- data/imagenet-r/n02823750/tattoo_2.jpg +- data/imagenet-r/n03272010/deviantart_19.jpg +- data/imagenet-r/n02165456/sketch_2.jpg +- data/imagenet-r/n04552348/misc_14.jpg +- data/imagenet-r/n02091134/misc_62.jpg +- data/imagenet-r/n03345487/sketch_8.jpg +- data/imagenet-r/n02108915/misc_130.jpg +- data/imagenet-r/n10565667/deviantart_11.jpg +- data/imagenet-r/n02793495/sketch_6.jpg +- data/imagenet-r/n02447366/sticker_3.jpg +- data/imagenet-r/n03272010/cartoon_10.jpg +- data/imagenet-r/n02410509/sketch_13.jpg +- data/imagenet-r/n02190166/sculpture_0.jpg +- data/imagenet-r/n07742313/sketch_8.jpg +- data/imagenet-r/n02206856/sticker_12.jpg +- data/imagenet-r/n02447366/cartoon_13.jpg +- data/imagenet-r/n01910747/misc_4.jpg +- data/imagenet-r/n04266014/videogame_29.jpg +- data/imagenet-r/n02951358/painting_0.jpg +- data/imagenet-r/n01644373/deviantart_15.jpg +- data/imagenet-r/n01614925/tattoo_27.jpg +- data/imagenet-r/n02607072/deviantart_6.jpg +- data/imagenet-r/n04310018/cartoon_5.jpg +- data/imagenet-r/n02391049/misc_16.jpg +- data/imagenet-r/n02134084/misc_134.jpg +- data/imagenet-r/n02113023/misc_7.jpg +- data/imagenet-r/n04275548/videogame_9.jpg +- data/imagenet-r/n02071294/deviantart_12.jpg +- data/imagenet-r/n02110185/sculpture_5.jpg +- data/imagenet-r/n01910747/tattoo_57.jpg +- data/imagenet-r/n03676483/painting_3.jpg +- data/imagenet-r/n02128757/misc_3.jpg +- data/imagenet-r/n07614500/toy_20.jpg +- data/imagenet-r/n02066245/sketch_20.jpg +- data/imagenet-r/n03930630/art_3.jpg +- data/imagenet-r/n03124170/painting_0.jpg +- data/imagenet-r/n02906734/sketch_10.jpg +- data/imagenet-r/n04591713/deviantart_1.jpg +- data/imagenet-r/n02119022/misc_146.jpg +- data/imagenet-r/n09835506/sketch_0.jpg +- data/imagenet-r/n01514859/misc_3.jpg +- data/imagenet-r/n01534433/embroidery_1.jpg +- data/imagenet-r/n02672831/embroidery_1.jpg +- data/imagenet-r/n02096585/misc_173.jpg +- data/imagenet-r/n02802426/embroidery_2.jpg +- data/imagenet-r/n01843383/cartoon_30.jpg +- data/imagenet-r/n01843383/graphic_5.jpg +- data/imagenet-r/n02655020/misc_6.jpg +- data/imagenet-r/n01748264/misc_12.jpg +- data/imagenet-r/n04389033/cartoon_4.jpg +- data/imagenet-r/n01806143/sculpture_8.jpg +- data/imagenet-r/n02129165/graffiti_5.jpg +- data/imagenet-r/n01986214/origami_10.jpg +- data/imagenet-r/n04465501/deviantart_17.jpg +- data/imagenet-r/n01518878/sculpture_0.jpg +- data/imagenet-r/n04118538/videogame_2.jpg +- data/imagenet-r/n07753592/misc_9.jpg +- data/imagenet-r/n07768694/deviantart_6.jpg +- data/imagenet-r/n01484850/art_4.jpg +- data/imagenet-r/n02802426/videogame_11.jpg +- data/imagenet-r/n02128385/sculpture_2.jpg +- data/imagenet-r/n03602883/misc_3.jpg +- data/imagenet-r/n04133789/sculpture_3.jpg +- data/imagenet-r/n02134084/sketch_15.jpg +- data/imagenet-r/n02395406/painting_5.jpg +- data/imagenet-r/n02119022/misc_83.jpg +- data/imagenet-r/n02071294/art_3.jpg +- data/imagenet-r/n02097298/sketch_12.jpg +- data/imagenet-r/n02114367/misc_37.jpg +- data/imagenet-r/n02007558/sticker_7.jpg +- data/imagenet-r/n02138441/art_0.jpg +- data/imagenet-r/n02106030/sketch_5.jpg +- data/imagenet-r/n04192698/sticker_0.jpg +- data/imagenet-r/n01443537/cartoon_23.jpg +- data/imagenet-r/n07734744/toy_29.jpg +- data/imagenet-r/n01843383/painting_41.jpg +- data/imagenet-r/n07873807/sketch_8.jpg +- data/imagenet-r/n02481823/sticker_4.jpg +- data/imagenet-r/n04275548/videogame_0.jpg +- data/imagenet-r/n07753275/art_7.jpg +- data/imagenet-r/n02395406/cartoon_38.jpg +- data/imagenet-r/n01644373/tattoo_13.jpg +- data/imagenet-r/n02088466/misc_4.jpg +- data/imagenet-r/n02363005/sculpture_1.jpg +- data/imagenet-r/n04146614/sticker_0.jpg +- data/imagenet-r/n02110341/misc_119.jpg +- data/imagenet-r/n03272010/deviantart_16.jpg +- data/imagenet-r/n02128757/painting_20.jpg +- data/imagenet-r/n07873807/videogame_11.jpg +- data/imagenet-r/n02948072/embroidery_35.jpg +- data/imagenet-r/n02268443/misc_83.jpg +- data/imagenet-r/n04254680/origami_0.jpg +- data/imagenet-r/n02097298/misc_22.jpg +- data/imagenet-r/n01531178/tattoo_10.jpg +- data/imagenet-r/n02655020/deviantart_1.jpg +- data/imagenet-r/n02085620/misc_30.jpg +- data/imagenet-r/n02364673/videogame_0.jpg +- data/imagenet-r/n07749582/art_3.jpg +- data/imagenet-r/n01518878/sketch_15.jpg +- data/imagenet-r/n02102318/misc_49.jpg +- data/imagenet-r/n02106550/sketch_20.jpg +- data/imagenet-r/n02219486/sticker_0.jpg +- data/imagenet-r/n04409515/sketch_12.jpg +- data/imagenet-r/n02950826/painting_2.jpg +- data/imagenet-r/n07697313/sketch_23.jpg +- data/imagenet-r/n02607072/misc_45.jpg +- data/imagenet-r/n02481823/origami_2.jpg +- data/imagenet-r/n02841315/cartoon_7.jpg +- data/imagenet-r/n01632777/cartoon_8.jpg +- data/imagenet-r/n01860187/cartoon_0.jpg +- data/imagenet-r/n02129604/deviantart_13.jpg +- data/imagenet-r/n02077923/sketch_6.jpg +- data/imagenet-r/n04310018/videogame_7.jpg +- data/imagenet-r/n02007558/cartoon_48.jpg +- data/imagenet-r/n02346627/art_1.jpg +- data/imagenet-r/n02077923/sketch_14.jpg +- data/imagenet-r/n02814860/cartoon_37.jpg +- data/imagenet-r/n07753275/misc_9.jpg +- data/imagenet-r/n02097298/misc_59.jpg +- data/imagenet-r/n02106662/misc_10.jpg +- data/imagenet-r/n02007558/cartoon_47.jpg +- data/imagenet-r/n04086273/tattoo_45.jpg +- data/imagenet-r/n04536866/sketch_1.jpg +- data/imagenet-r/n02398521/art_14.jpg +- data/imagenet-r/n02088364/sketch_4.jpg +- data/imagenet-r/n02445715/cartoon_21.jpg +- data/imagenet-r/n02883205/sketch_3.jpg +- data/imagenet-r/n07742313/painting_0.jpg +- data/imagenet-r/n02007558/sketch_7.jpg +- data/imagenet-r/n02672831/graffiti_1.jpg +- data/imagenet-r/n01806143/graffiti_7.jpg +- data/imagenet-r/n02009912/misc_37.jpg +- data/imagenet-r/n01531178/sketch_10.jpg +- data/imagenet-r/n01630670/sketch_1.jpg +- data/imagenet-r/n01910747/embroidery_15.jpg +- data/imagenet-r/n01531178/painting_5.jpg +- data/imagenet-r/n04389033/sketch_0.jpg +- data/imagenet-r/n02279972/painting_23.jpg +- data/imagenet-r/n01514859/embroidery_13.jpg +- data/imagenet-r/n02206856/cartoon_68.jpg +- data/imagenet-r/n04266014/misc_9.jpg +- data/imagenet-r/n02486410/sketch_3.jpg +- data/imagenet-r/n02110958/sketch_17.jpg +- data/imagenet-r/n02486410/cartoon_0.jpg +- data/imagenet-r/n02066245/painting_9.jpg +- data/imagenet-r/n07742313/graphic_0.jpg +- data/imagenet-r/n02510455/deviantart_5.jpg +- data/imagenet-r/n03930630/cartoon_15.jpg +- data/imagenet-r/n02206856/art_12.jpg +- data/imagenet-r/n02007558/embroidery_12.jpg +- data/imagenet-r/n02226429/cartoon_11.jpg +- data/imagenet-r/n02317335/sketch_9.jpg +- data/imagenet-r/n02112137/misc_12.jpg +- data/imagenet-r/n02096585/misc_191.jpg +- data/imagenet-r/n01443537/painting_27.jpg +- data/imagenet-r/n03495258/videogame_11.jpg +- data/imagenet-r/n02123045/cartoon_7.jpg +- data/imagenet-r/n04133789/sketch_22.jpg +- data/imagenet-r/n07614500/sketch_7.jpg +- data/imagenet-r/n02096585/misc_201.jpg +- data/imagenet-r/n04310018/videogame_2.jpg +- data/imagenet-r/n03888257/deviantart_0.jpg +- data/imagenet-r/n02437616/sketch_15.jpg +- data/imagenet-r/n03467068/sketch_14.jpg +- data/imagenet-r/n01677366/deviantart_7.jpg +- data/imagenet-r/n02129165/tattoo_50.jpg +- data/imagenet-r/n01882714/deviantart_16.jpg +- data/imagenet-r/n02483362/sketch_20.jpg +- data/imagenet-r/n02119022/misc_4.jpg +- data/imagenet-r/n02279972/art_17.jpg +- data/imagenet-r/n07697537/misc_61.jpg +- data/imagenet-r/n02841315/sketch_8.jpg +- data/imagenet-r/n02102318/misc_14.jpg +- data/imagenet-r/n01774750/tattoo_9.jpg +- data/imagenet-r/n09472597/deviantart_15.jpg +- data/imagenet-r/n04522168/embroidery_0.jpg +- data/imagenet-r/n01847000/cartoon_8.jpg +- data/imagenet-r/n02909870/videogame_3.jpg +- data/imagenet-r/n02883205/graphic_3.jpg +- data/imagenet-r/n04310018/tattoo_5.jpg +- data/imagenet-r/n01882714/sketch_11.jpg +- data/imagenet-r/n01882714/painting_21.jpg +- data/imagenet-r/n01614925/deviantart_36.jpg +- data/imagenet-r/n10565667/videogame_20.jpg +- data/imagenet-r/n09835506/sketch_22.jpg +- data/imagenet-r/n02823750/cartoon_5.jpg +- data/imagenet-r/n02128757/painting_24.jpg +- data/imagenet-r/n02119022/tattoo_2.jpg +- data/imagenet-r/n02356798/sketch_8.jpg +- data/imagenet-r/n02909870/sculpture_6.jpg +- data/imagenet-r/n07873807/misc_10.jpg +- data/imagenet-r/n01784675/origami_2.jpg +- data/imagenet-r/n02129165/painting_9.jpg +- data/imagenet-r/n04310018/tattoo_3.jpg +- data/imagenet-r/n01986214/tattoo_1.jpg +- data/imagenet-r/n07873807/deviantart_19.jpg +- data/imagenet-r/n02802426/painting_3.jpg +- data/imagenet-r/n02117135/sketch_11.jpg +- data/imagenet-r/n03773504/videogame_4.jpg +- data/imagenet-r/n07695742/toy_6.jpg +- data/imagenet-r/n02099601/misc_96.jpg +- data/imagenet-r/n03424325/misc_94.jpg +- data/imagenet-r/n04487394/cartoon_9.jpg +- data/imagenet-r/n02071294/deviantart_21.jpg +- data/imagenet-r/n01983481/sketch_18.jpg +- data/imagenet-r/n02843684/sculpture_3.jpg +- data/imagenet-r/n02480855/sculpture_19.jpg +- data/imagenet-r/n02526121/sketch_16.jpg +- data/imagenet-r/n02091032/misc_13.jpg +- data/imagenet-r/n07768694/deviantart_4.jpg +- data/imagenet-r/n04487394/cartoon_33.jpg +- data/imagenet-r/n04086273/sketch_16.jpg +- data/imagenet-r/n02236044/art_0.jpg +- data/imagenet-r/n07714990/tattoo_2.jpg +- data/imagenet-r/n04310018/sticker_0.jpg +- data/imagenet-r/n02481823/art_7.jpg +- data/imagenet-r/n02085620/misc_107.jpg +- data/imagenet-r/n01944390/misc_150.jpg +- data/imagenet-r/n02909870/sculpture_2.jpg +- data/imagenet-r/n01614925/painting_19.jpg +- data/imagenet-r/n02906734/sketch_7.jpg +- data/imagenet-r/n02279972/graphic_0.jpg +- data/imagenet-r/n01833805/painting_30.jpg +- data/imagenet-r/n02802426/origami_0.jpg +- data/imagenet-r/n02165456/sculpture_7.jpg +- data/imagenet-r/n02106550/misc_63.jpg +- data/imagenet-r/n02906734/cartoon_32.jpg +- data/imagenet-r/n12267677/misc_116.jpg +- data/imagenet-r/n01806143/embroidery_0.jpg +- data/imagenet-r/n01514859/cartoon_19.jpg +- data/imagenet-r/n03494278/cartoon_14.jpg +- data/imagenet-r/n02077923/misc_41.jpg +- data/imagenet-r/n02480855/sculpture_12.jpg +- data/imagenet-r/n03452741/sketch_16.jpg +- data/imagenet-r/n03424325/misc_89.jpg +- data/imagenet-r/n02138441/painting_23.jpg +- data/imagenet-r/n07749582/painting_48.jpg +- data/imagenet-r/n02363005/cartoon_35.jpg +- data/imagenet-r/n02480855/sketch_2.jpg +- data/imagenet-r/n01518878/cartoon_48.jpg +- data/imagenet-r/n01843383/deviantart_94.jpg +- data/imagenet-r/n01494475/sketch_2.jpg +- data/imagenet-r/n04266014/sculpture_1.jpg +- data/imagenet-r/n03775071/cartoon_24.jpg +- data/imagenet-r/n02808440/painting_17.jpg +- data/imagenet-r/n02447366/sketch_15.jpg +- data/imagenet-r/n02206856/graffiti_42.jpg +- data/imagenet-r/n07753275/painting_10.jpg +- data/imagenet-r/n02096585/misc_9.jpg +- data/imagenet-r/n01910747/embroidery_11.jpg +- data/imagenet-r/n02437616/cartoon_12.jpg +- data/imagenet-r/n02106166/misc_12.jpg +- data/imagenet-r/n04146614/toy_5.jpg +- data/imagenet-r/n01484850/tattoo_7.jpg +- data/imagenet-r/n02117135/art_11.jpg +- data/imagenet-r/n02128757/cartoon_15.jpg +- data/imagenet-r/n02117135/tattoo_1.jpg +- data/imagenet-r/n03424325/graffiti_0.jpg +- data/imagenet-r/n02992529/sketch_15.jpg +- data/imagenet-r/n02843684/cartoon_19.jpg +- data/imagenet-r/n04465501/misc_9.jpg +- data/imagenet-r/n01484850/painting_23.jpg +- data/imagenet-r/n04310018/sticker_13.jpg +- data/imagenet-r/n02110958/sticker_8.jpg +- data/imagenet-r/n02966193/painting_1.jpg +- data/imagenet-r/n01531178/painting_16.jpg +- data/imagenet-r/n02814860/origami_1.jpg +- data/imagenet-r/n10565667/videogame_9.jpg +- data/imagenet-r/n02099601/misc_54.jpg +- data/imagenet-r/n02510455/sketch_16.jpg +- data/imagenet-r/n07753275/painting_24.jpg +- data/imagenet-r/n01494475/misc_14.jpg +- data/imagenet-r/n02088238/misc_85.jpg +- data/imagenet-r/n01855672/misc_10.jpg +- data/imagenet-r/n04465501/toy_19.jpg +- data/imagenet-r/n07614500/sketch_16.jpg +- data/imagenet-r/n02939185/deviantart_5.jpg +- data/imagenet-r/n01770393/tattoo_39.jpg +- data/imagenet-r/n07734744/graffiti_20.jpg +- data/imagenet-r/n02134084/tattoo_11.jpg +- data/imagenet-r/n01494475/misc_91.jpg +- data/imagenet-r/n02233338/misc_4.jpg +- data/imagenet-r/n02883205/art_3.jpg +- data/imagenet-r/n02113624/misc_21.jpg +- data/imagenet-r/n01944390/tattoo_5.jpg +- data/imagenet-r/n02814860/sketch_17.jpg +- data/imagenet-r/n01616318/deviantart_17.jpg +- data/imagenet-r/n07753592/misc_93.jpg +- data/imagenet-r/n02823750/deviantart_3.jpg +- data/imagenet-r/n04133789/cartoon_7.jpg +- data/imagenet-r/n01443537/embroidery_7.jpg +- data/imagenet-r/n02447366/painting_16.jpg +- data/imagenet-r/n02268443/origami_0.jpg +- data/imagenet-r/n02808440/painting_6.jpg +- data/imagenet-r/n01983481/misc_44.jpg +- data/imagenet-r/n04254680/videogame_0.jpg +- data/imagenet-r/n02843684/misc_16.jpg +- data/imagenet-r/n04522168/cartoon_7.jpg +- data/imagenet-r/n02113799/misc_32.jpg +- data/imagenet-r/n03424325/misc_27.jpg +- data/imagenet-r/n02909870/videogame_10.jpg +- data/imagenet-r/n02129165/toy_23.jpg +- data/imagenet-r/n04192698/videogame_15.jpg +- data/imagenet-r/n02099601/misc_44.jpg +- data/imagenet-r/n02119022/misc_139.jpg +- data/imagenet-r/n02206856/graphic_6.jpg +- data/imagenet-r/n04266014/sculpture_4.jpg +- data/imagenet-r/n02190166/sticker_3.jpg +- data/imagenet-r/n02129165/sketch_18.jpg +- data/imagenet-r/n02110958/painting_22.jpg +- data/imagenet-r/n02119022/misc_145.jpg +- data/imagenet-r/n02110958/tattoo_19.jpg +- data/imagenet-r/n04275548/misc_0.jpg +- data/imagenet-r/n01494475/sketch_7.jpg +- data/imagenet-r/n01694178/tattoo_29.jpg +- data/imagenet-r/n02480855/cartoon_6.jpg +- data/imagenet-r/n07734744/graffiti_33.jpg +- data/imagenet-r/n02966193/cartoon_7.jpg +- data/imagenet-r/n07753592/misc_111.jpg +- data/imagenet-r/n02129604/deviantart_4.jpg +- data/imagenet-r/n03947888/misc_0.jpg +- data/imagenet-r/n04141076/sculpture_7.jpg +- data/imagenet-r/n04310018/videogame_26.jpg +- data/imagenet-r/n04522168/painting_19.jpg +- data/imagenet-r/n02841315/graffiti_1.jpg +- data/imagenet-r/n01820546/painting_25.jpg +- data/imagenet-r/n04254680/deviantart_30.jpg +- data/imagenet-r/n07753275/painting_29.jpg +- data/imagenet-r/n02117135/painting_7.jpg +- data/imagenet-r/n02950826/sketch_6.jpg +- data/imagenet-r/n02112018/misc_53.jpg +- data/imagenet-r/n02363005/toy_2.jpg +- data/imagenet-r/n01531178/painting_46.jpg +- data/imagenet-r/n02099601/misc_16.jpg +- data/imagenet-r/n02808440/toy_1.jpg +- data/imagenet-r/n07734744/deviantart_16.jpg +- data/imagenet-r/n02096585/misc_65.jpg +- data/imagenet-r/n01986214/cartoon_2.jpg +- data/imagenet-r/n02007558/cartoon_14.jpg +- data/imagenet-r/n02088238/misc_114.jpg +- data/imagenet-r/n02510455/misc_124.jpg +- data/imagenet-r/n02129604/toy_11.jpg +- data/imagenet-r/n01644373/art_9.jpg +- data/imagenet-r/n01806143/deviantart_7.jpg +- data/imagenet-r/n02317335/tattoo_29.jpg +- data/imagenet-r/n04536866/embroidery_1.jpg +- data/imagenet-r/n02483362/origami_1.jpg +- data/imagenet-r/n02066245/tattoo_4.jpg +- data/imagenet-r/n01855672/sticker_0.jpg +- data/imagenet-r/n02510455/deviantart_12.jpg +- data/imagenet-r/n04536866/painting_7.jpg +- data/imagenet-r/n07714990/sketch_8.jpg +- data/imagenet-r/n02481823/sketch_21.jpg +- data/imagenet-r/n07745940/cartoon_6.jpg +- data/imagenet-r/n02480495/sketch_10.jpg +- data/imagenet-r/n02129165/sketch_0.jpg +- data/imagenet-r/n04465501/art_3.jpg +- data/imagenet-r/n03775071/sketch_12.jpg +- data/imagenet-r/n04389033/sticker_10.jpg +- data/imagenet-r/n02480855/sculpture_9.jpg +- data/imagenet-r/n07720875/sketch_12.jpg +- data/imagenet-r/n01694178/deviantart_7.jpg +- data/imagenet-r/n02808440/sculpture_7.jpg +- data/imagenet-r/n03452741/sketch_23.jpg +- data/imagenet-r/n02423022/videogame_1.jpg +- data/imagenet-r/n07745940/painting_6.jpg +- data/imagenet-r/n02134084/tattoo_12.jpg +- data/imagenet-r/n02165456/tattoo_25.jpg +- data/imagenet-r/n01910747/art_3.jpg +- data/imagenet-r/n02066245/sketch_9.jpg +- data/imagenet-r/n01944390/misc_36.jpg +- data/imagenet-r/n02437616/misc_0.jpg +- data/imagenet-r/n01443537/cartoon_5.jpg +- data/imagenet-r/n02445715/graffiti_1.jpg +- data/imagenet-r/n02364673/sketch_18.jpg +- data/imagenet-r/n02119022/misc_149.jpg +- data/imagenet-r/n01843383/art_28.jpg +- data/imagenet-r/n04275548/painting_3.jpg +- data/imagenet-r/n03947888/painting_8.jpg +- data/imagenet-r/n03424325/misc_17.jpg +- data/imagenet-r/n02226429/cartoon_12.jpg +- data/imagenet-r/n01860187/sketch_8.jpg +- data/imagenet-r/n02113624/sketch_5.jpg +- data/imagenet-r/n01694178/art_3.jpg +- data/imagenet-r/n07614500/misc_14.jpg +- data/imagenet-r/n03424325/videogame_15.jpg +- data/imagenet-r/n02391049/misc_89.jpg +- data/imagenet-r/n04086273/deviantart_5.jpg +- data/imagenet-r/n07697537/deviantart_17.jpg +- data/imagenet-r/n01531178/sculpture_3.jpg +- data/imagenet-r/n02098286/sketch_18.jpg +- data/imagenet-r/n01806143/graphic_11.jpg +- data/imagenet-r/n02655020/misc_56.jpg +- data/imagenet-r/n01843383/deviantart_24.jpg +- data/imagenet-r/n02096585/misc_156.jpg +- data/imagenet-r/n02672831/cartoon_35.jpg +- data/imagenet-r/n02119022/misc_132.jpg +- data/imagenet-r/n02071294/deviantart_3.jpg +- data/imagenet-r/n07614500/sketch_14.jpg +- data/imagenet-r/n02129604/deviantart_18.jpg +- data/imagenet-r/n07734744/sticker_18.jpg +- data/imagenet-r/n02007558/painting_13.jpg +- data/imagenet-r/n02098286/misc_4.jpg +- data/imagenet-r/n03272010/art_8.jpg +- data/imagenet-r/n01644373/tattoo_38.jpg +- data/imagenet-r/n04254680/videogame_27.jpg +- data/imagenet-r/n02007558/tattoo_40.jpg +- data/imagenet-r/n02009912/misc_5.jpg +- data/imagenet-r/n07734744/embroidery_14.jpg +- data/imagenet-r/n01443537/deviantart_4.jpg +- data/imagenet-r/n04192698/toy_6.jpg +- data/imagenet-r/n02096585/misc_139.jpg +- data/imagenet-r/n02398521/art_6.jpg +- data/imagenet-r/n04389033/sketch_27.jpg +- data/imagenet-r/n02948072/deviantart_5.jpg +- data/imagenet-r/n01944390/misc_16.jpg +- data/imagenet-r/n12267677/misc_79.jpg +- data/imagenet-r/n02672831/cartoon_30.jpg +- data/imagenet-r/n02110958/tattoo_21.jpg +- data/imagenet-r/n02607072/misc_40.jpg +- data/imagenet-r/n02110341/misc_125.jpg +- data/imagenet-r/n02948072/sketch_20.jpg +- data/imagenet-r/n02481823/graffiti_15.jpg +- data/imagenet-r/n01806143/misc_6.jpg +- data/imagenet-r/n01833805/graphic_9.jpg +- data/imagenet-r/n02363005/cartoon_41.jpg +- data/imagenet-r/n04254680/videogame_9.jpg +- data/imagenet-r/n07697313/misc_7.jpg +- data/imagenet-r/n02110958/cartoon_34.jpg +- data/imagenet-r/n02346627/painting_4.jpg +- data/imagenet-r/n01843383/painting_0.jpg +- data/imagenet-r/n03594945/toy_6.jpg +- data/imagenet-r/n02110185/sketch_19.jpg +- data/imagenet-r/n01806143/sculpture_11.jpg +- data/imagenet-r/n03630383/toy_8.jpg +- data/imagenet-r/n02206856/embroidery_13.jpg +- data/imagenet-r/n02672831/cartoon_34.jpg +- data/imagenet-r/n02130308/painting_7.jpg +- data/imagenet-r/n02088238/videogame_0.jpg +- data/imagenet-r/n01944390/misc_123.jpg +- data/imagenet-r/n02607072/misc_15.jpg +- data/imagenet-r/n01784675/tattoo_8.jpg +- data/imagenet-r/n04347754/videogame_11.jpg +- data/imagenet-r/n02110341/misc_139.jpg +- data/imagenet-r/n01748264/misc_22.jpg +- data/imagenet-r/n01443537/graffiti_13.jpg +- data/imagenet-r/n03888257/videogame_1.jpg +- data/imagenet-r/n02113799/misc_6.jpg +- data/imagenet-r/n10565667/art_4.jpg +- data/imagenet-r/n01820546/art_12.jpg +- data/imagenet-r/n01806143/graffiti_3.jpg +- data/imagenet-r/n03124170/tattoo_2.jpg +- data/imagenet-r/n02106166/misc_3.jpg +- data/imagenet-r/n02007558/tattoo_48.jpg +- data/imagenet-r/n03888257/toy_1.jpg +- data/imagenet-r/n02808440/sketch_12.jpg +- data/imagenet-r/n01518878/cartoon_28.jpg +- data/imagenet-r/n02134084/misc_36.jpg +- data/imagenet-r/n01632777/art_2.jpg +- data/imagenet-r/n02110958/cartoon_15.jpg +- data/imagenet-r/n03124170/cartoon_17.jpg +- data/imagenet-r/n02110341/misc_66.jpg +- data/imagenet-r/n07697313/painting_16.jpg +- data/imagenet-r/n02110958/cartoon_8.jpg +- data/imagenet-r/n02106550/tattoo_5.jpg +- data/imagenet-r/n02233338/misc_35.jpg +- data/imagenet-r/n02410509/cartoon_32.jpg +- data/imagenet-r/n01820546/deviantart_28.jpg +- data/imagenet-r/n07873807/videogame_13.jpg +- data/imagenet-r/n03481172/deviantart_0.jpg +- data/imagenet-r/n02992529/cartoon_3.jpg +- data/imagenet-r/n01833805/origami_9.jpg +- data/imagenet-r/n02165456/tattoo_72.jpg +- data/imagenet-r/n02808440/embroidery_0.jpg +- data/imagenet-r/n02113023/misc_9.jpg +- data/imagenet-r/n04141076/deviantart_29.jpg +- data/imagenet-r/n04141076/toy_3.jpg +- data/imagenet-r/n01531178/painting_17.jpg +- data/imagenet-r/n02481823/painting_0.jpg +- data/imagenet-r/n02909870/painting_14.jpg +- data/imagenet-r/n03495258/videogame_0.jpg +- data/imagenet-r/n03424325/misc_85.jpg +- data/imagenet-r/n02088094/sketch_12.jpg +- data/imagenet-r/n01774750/cartoon_14.jpg +- data/imagenet-r/n04347754/art_5.jpg +- data/imagenet-r/n07718472/painting_4.jpg +- data/imagenet-r/n09835506/tattoo_2.jpg +- data/imagenet-r/n01498041/sculpture_2.jpg +- data/imagenet-r/n02114367/misc_47.jpg +- data/imagenet-r/n09835506/deviantart_9.jpg +- data/imagenet-r/n02099712/misc_47.jpg +- data/imagenet-r/n02165456/sticker_3.jpg +- data/imagenet-r/n01882714/deviantart_39.jpg +- data/imagenet-r/n04536866/cartoon_5.jpg +- data/imagenet-r/n02398521/sketch_21.jpg +- data/imagenet-r/n02088094/sketch_6.jpg +- data/imagenet-r/n02808440/cartoon_15.jpg +- data/imagenet-r/n02123045/painting_49.jpg +- data/imagenet-r/n01910747/cartoon_33.jpg +- data/imagenet-r/n03498962/sketch_1.jpg +- data/imagenet-r/n04086273/cartoon_6.jpg +- data/imagenet-r/n02206856/toy_0.jpg +- data/imagenet-r/n07734744/art_18.jpg +- data/imagenet-r/n01518878/art_3.jpg +- data/imagenet-r/n01770393/tattoo_43.jpg +- data/imagenet-r/n01820546/art_17.jpg +- data/imagenet-r/n02909870/graffiti_0.jpg +- data/imagenet-r/n07753275/sticker_1.jpg +- data/imagenet-r/n02130308/tattoo_2.jpg +- data/imagenet-r/n04552348/toy_14.jpg +- data/imagenet-r/n02233338/misc_22.jpg +- data/imagenet-r/n04325704/toy_4.jpg +- data/imagenet-r/n07714571/sketch_5.jpg +- data/imagenet-r/n02106166/cartoon_2.jpg +- data/imagenet-r/n01518878/cartoon_15.jpg +- data/imagenet-r/n03272010/tattoo_6.jpg +- data/imagenet-r/n07714571/painting_9.jpg +- data/imagenet-r/n02883205/graphic_2.jpg +- data/imagenet-r/n09472597/videogame_37.jpg +- data/imagenet-r/n03345487/misc_2.jpg +- data/imagenet-r/n07873807/cartoon_4.jpg +- data/imagenet-r/n01986214/cartoon_1.jpg +- data/imagenet-r/n01833805/origami_5.jpg +- data/imagenet-r/n03272010/sketch_20.jpg +- data/imagenet-r/n09835506/deviantart_6.jpg +- data/imagenet-r/n04536866/painting_33.jpg +- data/imagenet-r/n07753592/misc_149.jpg +- data/imagenet-r/n01614925/deviantart_16.jpg +- data/imagenet-r/n04192698/painting_5.jpg +- data/imagenet-r/n04347754/toy_8.jpg +- data/imagenet-r/n03481172/graphic_3.jpg +- data/imagenet-r/n04591713/painting_40.jpg +- data/imagenet-r/n07697537/deviantart_5.jpg +- data/imagenet-r/n02951358/sculpture_2.jpg +- data/imagenet-r/n02814860/origami_4.jpg +- data/imagenet-r/n01644373/painting_2.jpg +- data/imagenet-r/n07749582/cartoon_11.jpg +- data/imagenet-r/n02129165/toy_1.jpg +- data/imagenet-r/n01443537/cartoon_18.jpg +- data/imagenet-r/n03345487/videogame_21.jpg +- data/imagenet-r/n03630383/sketch_4.jpg +- data/imagenet-r/n02951358/painting_9.jpg +- data/imagenet-r/n02395406/embroidery_2.jpg +- data/imagenet-r/n01806143/graphic_3.jpg +- data/imagenet-r/n07920052/deviantart_13.jpg +- data/imagenet-r/n04536866/painting_3.jpg +- data/imagenet-r/n02106550/misc_24.jpg +- data/imagenet-r/n02110185/cartoon_6.jpg +- data/imagenet-r/n12267677/misc_4.jpg +- data/imagenet-r/n04536866/painting_29.jpg +- data/imagenet-r/n02110958/art_2.jpg +- data/imagenet-r/n09835506/tattoo_1.jpg +- data/imagenet-r/n02802426/sketch_5.jpg +- data/imagenet-r/n07920052/painting_7.jpg +- data/imagenet-r/n03495258/deviantart_3.jpg +- data/imagenet-r/n02814860/toy_0.jpg +- data/imagenet-r/n02190166/embroidery_1.jpg +- data/imagenet-r/n03481172/toy_4.jpg +- data/imagenet-r/n02447366/toy_2.jpg +- data/imagenet-r/n01843383/deviantart_31.jpg +- data/imagenet-r/n03481172/videogame_2.jpg +- data/imagenet-r/n07697313/painting_9.jpg +- data/imagenet-r/n04192698/videogame_0.jpg +- data/imagenet-r/n07714990/sketch_1.jpg +- data/imagenet-r/n02481823/painting_31.jpg +- data/imagenet-r/n02395406/sketch_12.jpg +- data/imagenet-r/n02096585/misc_23.jpg +- data/imagenet-r/n01494475/misc_116.jpg +- data/imagenet-r/n02106550/sketch_4.jpg +- data/imagenet-r/n07734744/sketch_17.jpg +- data/imagenet-r/n02129604/painting_22.jpg +- data/imagenet-r/n02749479/videogame_9.jpg +- data/imagenet-r/n03888257/videogame_6.jpg +- data/imagenet-r/n02398521/sketch_10.jpg +- data/imagenet-r/n04522168/sketch_10.jpg +- data/imagenet-r/n04536866/painting_27.jpg +- data/imagenet-r/n01616318/painting_9.jpg +- data/imagenet-r/n02123045/painting_2.jpg +- data/imagenet-r/n01944390/tattoo_25.jpg +- data/imagenet-r/n02823750/painting_4.jpg +- data/imagenet-r/n04266014/cartoon_0.jpg +- data/imagenet-r/n02236044/sculpture_9.jpg +- data/imagenet-r/n04086273/tattoo_35.jpg +- data/imagenet-r/n04086273/tattoo_15.jpg +- data/imagenet-r/n07714990/toy_1.jpg +- data/imagenet-r/n01910747/tattoo_72.jpg +- data/imagenet-r/n01531178/art_1.jpg +- data/imagenet-r/n02088364/misc_55.jpg +- data/imagenet-r/n02085620/misc_83.jpg +- data/imagenet-r/n03594945/cartoon_10.jpg +- data/imagenet-r/n02129165/tattoo_18.jpg +- data/imagenet-r/n02510455/deviantart_8.jpg +- data/imagenet-r/n02236044/sketch_10.jpg +- data/imagenet-r/n02410509/cartoon_39.jpg +- data/imagenet-r/n07714990/painting_1.jpg +- data/imagenet-r/n02119022/misc_147.jpg +- data/imagenet-r/n12267677/deviantart_1.jpg +- data/imagenet-r/n02112018/misc_42.jpg +- data/imagenet-r/n02481823/cartoon_21.jpg +- data/imagenet-r/n01910747/toy_1.jpg +- data/imagenet-r/n02106662/misc_54.jpg +- data/imagenet-r/n02480855/cartoon_9.jpg +- data/imagenet-r/n02085620/misc_20.jpg +- data/imagenet-r/n02129604/painting_15.jpg +- data/imagenet-r/n07614500/deviantart_2.jpg +- data/imagenet-r/n01944390/misc_175.jpg +- data/imagenet-r/n07745940/painting_18.jpg +- data/imagenet-r/n02279972/art_22.jpg +- data/imagenet-r/n02165456/toy_32.jpg +- data/imagenet-r/n02119022/misc_54.jpg +- data/imagenet-r/n07768694/graphic_1.jpg +- data/imagenet-r/n03594945/sticker_1.jpg +- data/imagenet-r/n02236044/toy_3.jpg +- data/imagenet-r/n02102318/toy_0.jpg +- data/imagenet-r/n04347754/sticker_2.jpg +- data/imagenet-r/n02749479/videogame_6.jpg +- data/imagenet-r/n02445715/tattoo_6.jpg +- data/imagenet-r/n02992529/sketch_7.jpg +- data/imagenet-r/n07745940/graffiti_19.jpg +- data/imagenet-r/n02106030/painting_6.jpg +- data/imagenet-r/n02398521/cartoon_28.jpg +- data/imagenet-r/n04118538/sketch_14.jpg +- data/imagenet-r/n02655020/deviantart_9.jpg +- data/imagenet-r/n01847000/tattoo_16.jpg +- data/imagenet-r/n07714990/sketch_16.jpg +- data/imagenet-r/n02110185/painting_19.jpg +- data/imagenet-r/n02481823/deviantart_23.jpg +- data/imagenet-r/n02233338/tattoo_12.jpg +- data/imagenet-r/n01614925/deviantart_9.jpg +- data/imagenet-r/n03947888/videogame_2.jpg +- data/imagenet-r/n02077923/misc_39.jpg +- data/imagenet-r/n03372029/cartoon_9.jpg +- data/imagenet-r/n02206856/sketch_22.jpg +- data/imagenet-r/n01833805/sketch_14.jpg +- data/imagenet-r/n02939185/art_1.jpg +- data/imagenet-r/n02007558/graffiti_30.jpg +- data/imagenet-r/n07614500/embroidery_15.jpg +- data/imagenet-r/n02077923/misc_38.jpg +- data/imagenet-r/n02091134/sketch_21.jpg +- data/imagenet-r/n03124170/cartoon_62.jpg +- data/imagenet-r/n02206856/tattoo_12.jpg +- data/imagenet-r/n03495258/cartoon_0.jpg +- data/imagenet-r/n04536866/videogame_7.jpg +- data/imagenet-r/n01616318/deviantart_15.jpg +- data/imagenet-r/n02088364/misc_60.jpg +- data/imagenet-r/n02110341/misc_116.jpg +- data/imagenet-r/n02909870/painting_10.jpg +- data/imagenet-r/n02119022/misc_76.jpg +- data/imagenet-r/n04192698/cartoon_1.jpg +- data/imagenet-r/n02410509/graffiti_15.jpg +- data/imagenet-r/n02165456/graffiti_8.jpg +- data/imagenet-r/n09835506/misc_14.jpg +- data/imagenet-r/n02091134/misc_49.jpg +- data/imagenet-r/n02096585/tattoo_23.jpg +- data/imagenet-r/n02279972/embroidery_3.jpg +- data/imagenet-r/n01882714/sketch_18.jpg +- data/imagenet-r/n02797295/misc_50.jpg +- data/imagenet-r/n02226429/sculpture_9.jpg +- data/imagenet-r/n01784675/videogame_3.jpg +- data/imagenet-r/n04536866/painting_0.jpg +- data/imagenet-r/n01784675/art_5.jpg +- data/imagenet-r/n07873807/videogame_17.jpg +- data/imagenet-r/n02445715/painting_5.jpg +- data/imagenet-r/n02317335/sketch_10.jpg +- data/imagenet-r/n02219486/embroidery_4.jpg +- data/imagenet-r/n07697313/sculpture_4.jpg +- data/imagenet-r/n07714990/deviantart_13.jpg +- data/imagenet-r/n02607072/misc_53.jpg +- data/imagenet-r/n02481823/sketch_23.jpg +- data/imagenet-r/n02797295/misc_44.jpg +- data/imagenet-r/n02088364/misc_36.jpg +- data/imagenet-r/n07714990/toy_15.jpg +- data/imagenet-r/n01644373/painting_10.jpg +- data/imagenet-r/n07742313/sketch_19.jpg +- data/imagenet-r/n02814860/embroidery_5.jpg +- data/imagenet-r/n02980441/videogame_21.jpg +- data/imagenet-r/n02117135/videogame_0.jpg +- data/imagenet-r/n07695742/sketch_16.jpg +- data/imagenet-r/n02906734/sticker_3.jpg +- data/imagenet-r/n04347754/tattoo_2.jpg +- data/imagenet-r/n02096585/misc_35.jpg +- data/imagenet-r/n04465501/sketch_13.jpg +- data/imagenet-r/n02071294/deviantart_6.jpg +- data/imagenet-r/n01498041/sculpture_4.jpg +- data/imagenet-r/n04141076/painting_12.jpg +- data/imagenet-r/n01518878/graffiti_9.jpg +- data/imagenet-r/n07714990/cartoon_25.jpg +- data/imagenet-r/n07718472/sketch_0.jpg +- data/imagenet-r/n02110958/graphic_8.jpg +- data/imagenet-r/n04086273/tattoo_50.jpg +- data/imagenet-r/n01644373/deviantart_21.jpg +- data/imagenet-r/n02797295/misc_20.jpg +- data/imagenet-r/n02219486/toy_0.jpg +- data/imagenet-r/n02447366/painting_0.jpg +- data/imagenet-r/n03372029/sculpture_31.jpg +- data/imagenet-r/n02092339/misc_48.jpg +- data/imagenet-r/n02128757/toy_9.jpg +- data/imagenet-r/n02410509/cartoon_22.jpg +- data/imagenet-r/n01910747/cartoon_5.jpg +- data/imagenet-r/n02129165/sculpture_0.jpg +- data/imagenet-r/n04266014/cartoon_39.jpg +- data/imagenet-r/n02814860/sketch_8.jpg +- data/imagenet-r/n02007558/embroidery_0.jpg +- data/imagenet-r/n02165456/toy_40.jpg +- data/imagenet-r/n02480855/graffiti_14.jpg +- data/imagenet-r/n10565667/sketch_22.jpg +- data/imagenet-r/n03372029/embroidery_0.jpg +- data/imagenet-r/n02363005/cartoon_33.jpg +- data/imagenet-r/n01774750/deviantart_3.jpg +- data/imagenet-r/n04325704/deviantart_15.jpg +- data/imagenet-r/n02099712/misc_10.jpg +- data/imagenet-r/n02672831/sculpture_7.jpg +- data/imagenet-r/n02410509/toy_7.jpg +- data/imagenet-r/n07714990/sticker_1.jpg +- data/imagenet-r/n02823750/deviantart_0.jpg +- data/imagenet-r/n02206856/tattoo_11.jpg +- data/imagenet-r/n02445715/graffiti_9.jpg +- data/imagenet-r/n04310018/videogame_18.jpg +- data/imagenet-r/n02363005/sketch_21.jpg +- data/imagenet-r/n07697537/sketch_14.jpg +- data/imagenet-r/n01498041/cartoon_2.jpg +- data/imagenet-r/n01632777/sketch_0.jpg +- data/imagenet-r/n02190166/sketch_5.jpg +- data/imagenet-r/n12267677/misc_103.jpg +- data/imagenet-r/n10565667/art_11.jpg +- data/imagenet-r/n02066245/tattoo_1.jpg +- data/imagenet-r/n04465501/videogame_16.jpg +- data/imagenet-r/n07614500/sticker_0.jpg +- data/imagenet-r/n02939185/misc_5.jpg +- data/imagenet-r/n03649909/cartoon_0.jpg +- data/imagenet-r/n02980441/sketch_16.jpg +- data/imagenet-r/n07720875/painting_21.jpg +- data/imagenet-r/n02106662/misc_28.jpg +- data/imagenet-r/n07714990/embroidery_0.jpg +- data/imagenet-r/n02395406/sculpture_21.jpg +- data/imagenet-r/n02206856/tattoo_25.jpg +- data/imagenet-r/n01694178/cartoon_2.jpg +- data/imagenet-r/n02007558/painting_5.jpg +- data/imagenet-r/n04141076/sculpture_25.jpg +- data/imagenet-r/n02134084/videogame_0.jpg +- data/imagenet-r/n01855672/sketch_4.jpg +- data/imagenet-r/n03495258/painting_8.jpg +- data/imagenet-r/n01614925/painting_1.jpg +- data/imagenet-r/n02410509/graffiti_7.jpg +- data/imagenet-r/n02110958/painting_57.jpg +- data/imagenet-r/n02110341/tattoo_2.jpg +- data/imagenet-r/n02410509/cartoon_2.jpg +- data/imagenet-r/n01843383/graffiti_2.jpg +- data/imagenet-r/n02445715/sketch_17.jpg +- data/imagenet-r/n04591713/tattoo_0.jpg +- data/imagenet-r/n01833805/tattoo_1.jpg +- data/imagenet-r/n04254680/origami_1.jpg +- data/imagenet-r/n01443537/toy_3.jpg +- data/imagenet-r/n01843383/deviantart_38.jpg +- data/imagenet-r/n02165456/cartoon_15.jpg +- data/imagenet-r/n01860187/art_0.jpg +- data/imagenet-r/n02423022/art_6.jpg +- data/imagenet-r/n01843383/deviantart_55.jpg +- data/imagenet-r/n02092339/misc_3.jpg +- data/imagenet-r/n01484850/graphic_0.jpg +- data/imagenet-r/n07697537/misc_73.jpg +- data/imagenet-r/n07873807/deviantart_13.jpg +- data/imagenet-r/n02356798/cartoon_3.jpg +- data/imagenet-r/n02096585/misc_19.jpg +- data/imagenet-r/n01882714/sculpture_9.jpg +- data/imagenet-r/n02088094/misc_39.jpg +- data/imagenet-r/n02607072/misc_85.jpg +- data/imagenet-r/n02110341/misc_103.jpg +- data/imagenet-r/n01484850/videogame_9.jpg +- data/imagenet-r/n03272010/deviantart_8.jpg +- data/imagenet-r/n01677366/sketch_8.jpg +- data/imagenet-r/n02206856/graffiti_38.jpg +- data/imagenet-r/n02123045/painting_56.jpg +- data/imagenet-r/n04591713/sketch_12.jpg +- data/imagenet-r/n02317335/cartoon_8.jpg +- data/imagenet-r/n01616318/tattoo_40.jpg +- data/imagenet-r/n07720875/painting_12.jpg +- data/imagenet-r/n02701002/toy_11.jpg +- data/imagenet-r/n02096585/misc_61.jpg +- data/imagenet-r/n01820546/deviantart_2.jpg +- data/imagenet-r/n02364673/cartoon_3.jpg +- data/imagenet-r/n01843383/art_23.jpg +- data/imagenet-r/n04347754/graffiti_4.jpg +- data/imagenet-r/n04347754/art_8.jpg +- data/imagenet-r/n04552348/deviantart_10.jpg +- data/imagenet-r/n02395406/tattoo_2.jpg +- data/imagenet-r/n01531178/painting_33.jpg +- data/imagenet-r/n01847000/misc_6.jpg +- data/imagenet-r/n07734744/graffiti_49.jpg +- data/imagenet-r/n07745940/cartoon_10.jpg +- data/imagenet-r/n07745940/toy_15.jpg +- data/imagenet-r/n02110185/cartoon_4.jpg +- data/imagenet-r/n01443537/painting_8.jpg +- data/imagenet-r/n03930630/sculpture_2.jpg +- data/imagenet-r/n04266014/cartoon_37.jpg +- data/imagenet-r/n04141076/painting_13.jpg +- data/imagenet-r/n01614925/cartoon_4.jpg +- data/imagenet-r/n02607072/misc_5.jpg +- data/imagenet-r/n02138441/graffiti_10.jpg +- data/imagenet-r/n03649909/sketch_14.jpg +- data/imagenet-r/n03630383/sketch_9.jpg +- data/imagenet-r/n02190166/tattoo_4.jpg +- data/imagenet-r/n10565667/sketch_4.jpg +- data/imagenet-r/n03372029/sculpture_38.jpg +- data/imagenet-r/n02099601/misc_50.jpg +- data/imagenet-r/n07697313/sculpture_9.jpg +- data/imagenet-r/n04487394/cartoon_15.jpg +- data/imagenet-r/n03372029/sculpture_14.jpg +- data/imagenet-r/n02110958/art_7.jpg +- data/imagenet-r/n04536866/videogame_10.jpg +- data/imagenet-r/n01820546/sculpture_1.jpg +- data/imagenet-r/n07614500/misc_1.jpg +- data/imagenet-r/n07720875/graphic_0.jpg +- data/imagenet-r/n03773504/sketch_9.jpg +- data/imagenet-r/n02655020/videogame_13.jpg +- data/imagenet-r/n01944390/misc_19.jpg +- data/imagenet-r/n01855672/sculpture_1.jpg +- data/imagenet-r/n02129165/embroidery_6.jpg +- data/imagenet-r/n02655020/misc_15.jpg +- data/imagenet-r/n02088238/sketch_7.jpg +- data/imagenet-r/n02526121/sketch_19.jpg +- data/imagenet-r/n02672831/cartoon_12.jpg +- data/imagenet-r/n04133789/painting_1.jpg +- data/imagenet-r/n02110341/misc_163.jpg +- data/imagenet-r/n07920052/sketch_1.jpg +- data/imagenet-r/n04522168/cartoon_14.jpg +- data/imagenet-r/n01774750/painting_5.jpg +- data/imagenet-r/n09472597/videogame_7.jpg +- data/imagenet-r/n07714571/painting_6.jpg +- data/imagenet-r/n01910747/painting_11.jpg +- data/imagenet-r/n02129604/origami_0.jpg +- data/imagenet-r/n02398521/cartoon_21.jpg +- data/imagenet-r/n02980441/toy_6.jpg +- data/imagenet-r/n02138441/sculpture_15.jpg +- data/imagenet-r/n02883205/sculpture_6.jpg +- data/imagenet-r/n02112018/misc_56.jpg +- data/imagenet-r/n02843684/misc_12.jpg +- data/imagenet-r/n02841315/art_1.jpg +- data/imagenet-r/n01855672/art_6.jpg +- data/imagenet-r/n01860187/graphic_2.jpg +- data/imagenet-r/n07720875/art_3.jpg +- data/imagenet-r/n02096585/misc_41.jpg +- data/imagenet-r/n03888257/sticker_5.jpg +- data/imagenet-r/n01806143/origami_8.jpg +- data/imagenet-r/n07880968/deviantart_0.jpg +- data/imagenet-r/n01494475/sketch_12.jpg +- data/imagenet-r/n02071294/deviantart_18.jpg +- data/imagenet-r/n02486410/sculpture_5.jpg +- data/imagenet-r/n07614500/sticker_6.jpg +- data/imagenet-r/n02410509/graffiti_0.jpg +- data/imagenet-r/n04310018/painting_15.jpg +- data/imagenet-r/n02117135/cartoon_4.jpg +- data/imagenet-r/n02992529/sketch_1.jpg +- data/imagenet-r/n04275548/videogame_8.jpg +- data/imagenet-r/n01855672/sculpture_2.jpg +- data/imagenet-r/n02966193/sketch_5.jpg +- data/imagenet-r/n01843383/deviantart_56.jpg +- data/imagenet-r/n02134084/sketch_20.jpg +- data/imagenet-r/n03452741/sketch_6.jpg +- data/imagenet-r/n01614925/sketch_24.jpg +- data/imagenet-r/n02113799/sketch_12.jpg +- data/imagenet-r/n02814860/art_7.jpg +- data/imagenet-r/n02939185/cartoon_13.jpg +- data/imagenet-r/n02672831/painting_14.jpg +- data/imagenet-r/n04146614/videogame_6.jpg +- data/imagenet-r/n01632777/toy_23.jpg +- data/imagenet-r/n04325704/painting_2.jpg +- data/imagenet-r/n02906734/cartoon_34.jpg +- data/imagenet-r/n02097298/misc_12.jpg +- data/imagenet-r/n03930630/videogame_0.jpg +- data/imagenet-r/n02701002/cartoon_7.jpg +- data/imagenet-r/n03649909/sculpture_1.jpg +- data/imagenet-r/n03495258/sculpture_18.jpg +- data/imagenet-r/n01820546/sketch_14.jpg +- data/imagenet-r/n02398521/tattoo_2.jpg +- data/imagenet-r/n02007558/tattoo_66.jpg +- data/imagenet-r/n02486410/painting_5.jpg +- data/imagenet-r/n02056570/cartoon_5.jpg +- data/imagenet-r/n02951358/sketch_8.jpg +- data/imagenet-r/n07720875/sketch_0.jpg +- data/imagenet-r/n01910747/tattoo_48.jpg +- data/imagenet-r/n04266014/toy_4.jpg +- data/imagenet-r/n01632777/deviantart_6.jpg +- data/imagenet-r/n02268443/misc_93.jpg +- data/imagenet-r/n02088364/misc_53.jpg +- data/imagenet-r/n01910747/graphic_1.jpg +- data/imagenet-r/n02099601/misc_104.jpg +- data/imagenet-r/n03888257/cartoon_33.jpg +- data/imagenet-r/n07753275/cartoon_6.jpg +- data/imagenet-r/n02480495/tattoo_4.jpg +- data/imagenet-r/n02077923/sketch_11.jpg +- data/imagenet-r/n04266014/cartoon_24.jpg +- data/imagenet-r/n01614925/painting_31.jpg +- data/imagenet-r/n07693725/cartoon_23.jpg +- data/imagenet-r/n02364673/sketch_6.jpg +- data/imagenet-r/n01833805/tattoo_87.jpg +- data/imagenet-r/n02480855/graffiti_8.jpg +- data/imagenet-r/n01518878/sketch_2.jpg +- data/imagenet-r/n02123045/toy_1.jpg +- data/imagenet-r/n01531178/art_30.jpg +- data/imagenet-r/n02088094/sketch_5.jpg +- data/imagenet-r/n01847000/misc_11.jpg +- data/imagenet-r/n02423022/sketch_22.jpg +- data/imagenet-r/n02007558/tattoo_46.jpg +- data/imagenet-r/n03773504/videogame_0.jpg +- data/imagenet-r/n02106550/misc_65.jpg +- data/imagenet-r/n01882714/tattoo_26.jpg +- data/imagenet-r/n02391049/misc_130.jpg +- data/imagenet-r/n02226429/art_11.jpg +- data/imagenet-r/n01774750/deviantart_2.jpg +- data/imagenet-r/n07714990/painting_9.jpg +- data/imagenet-r/n02607072/misc_10.jpg +- data/imagenet-r/n02398521/videogame_8.jpg +- data/imagenet-r/n07749582/art_1.jpg +- data/imagenet-r/n01770393/art_2.jpg +- data/imagenet-r/n02088238/misc_104.jpg +- data/imagenet-r/n09835506/misc_36.jpg +- data/imagenet-r/n07695742/cartoon_10.jpg +- data/imagenet-r/n07753592/misc_61.jpg +- data/imagenet-r/n04147183/tattoo_3.jpg +- data/imagenet-r/n07697537/misc_15.jpg +- data/imagenet-r/n02134084/misc_4.jpg +- data/imagenet-r/n02948072/deviantart_29.jpg +- data/imagenet-r/n07734744/toy_34.jpg +- data/imagenet-r/n04487394/deviantart_3.jpg +- data/imagenet-r/n01774750/origami_8.jpg +- data/imagenet-r/n02110185/painting_16.jpg +- data/imagenet-r/n02423022/cartoon_15.jpg +- data/imagenet-r/n07768694/cartoon_1.jpg +- data/imagenet-r/n02317335/art_5.jpg +- data/imagenet-r/n02112137/misc_2.jpg +- data/imagenet-r/n02749479/misc_13.jpg +- data/imagenet-r/n03888257/misc_1.jpg +- data/imagenet-r/n02129165/graffiti_15.jpg +- data/imagenet-r/n01843383/cartoon_38.jpg +- data/imagenet-r/n01644373/tattoo_14.jpg +- data/imagenet-r/n01806143/origami_14.jpg +- data/imagenet-r/n04086273/art_0.jpg +- data/imagenet-r/n01630670/cartoon_4.jpg +- data/imagenet-r/n01847000/misc_19.jpg +- data/imagenet-r/n02233338/misc_21.jpg +- data/imagenet-r/n02325366/misc_25.jpg +- data/imagenet-r/n01630670/sketch_11.jpg +- data/imagenet-r/n02051845/deviantart_8.jpg +- data/imagenet-r/n04389033/videogame_8.jpg +- data/imagenet-r/n02110958/painting_25.jpg +- data/imagenet-r/n02279972/sketch_22.jpg +- data/imagenet-r/n02128385/toy_3.jpg +- data/imagenet-r/n03124170/cartoon_66.jpg +- data/imagenet-r/n02112137/misc_28.jpg +- data/imagenet-r/n02769748/graphic_3.jpg +- data/imagenet-r/n07734744/cartoon_48.jpg +- data/imagenet-r/n02398521/toy_16.jpg +- data/imagenet-r/n02138441/sketch_0.jpg +- data/imagenet-r/n04254680/sketch_21.jpg +- data/imagenet-r/n01882714/tattoo_2.jpg +- data/imagenet-r/n01531178/painting_26.jpg +- data/imagenet-r/n01514859/graffiti_0.jpg +- data/imagenet-r/n02672831/sculpture_8.jpg +- data/imagenet-r/n02883205/toy_6.jpg +- data/imagenet-r/n01847000/deviantart_0.jpg +- data/imagenet-r/n07734744/art_5.jpg +- data/imagenet-r/n02363005/misc_6.jpg +- data/imagenet-r/n02112018/misc_61.jpg +- data/imagenet-r/n02395406/embroidery_3.jpg +- data/imagenet-r/n07745940/misc_15.jpg +- data/imagenet-r/n02085620/misc_34.jpg +- data/imagenet-r/n07718472/cartoon_16.jpg +- data/imagenet-r/n02769748/cartoon_31.jpg +- data/imagenet-r/n09835506/misc_25.jpg +- data/imagenet-r/n03888257/sticker_0.jpg +- data/imagenet-r/n03495258/deviantart_2.jpg +- data/imagenet-r/n02268443/misc_102.jpg +- data/imagenet-r/n02992529/sketch_2.jpg +- data/imagenet-r/n02395406/embroidery_1.jpg +- data/imagenet-r/n02391049/misc_122.jpg +- data/imagenet-r/n02966193/deviantart_1.jpg +- data/imagenet-r/n02110958/painting_56.jpg +- data/imagenet-r/n01806143/deviantart_4.jpg +- data/imagenet-r/n02088364/sketch_11.jpg +- data/imagenet-r/n03947888/cartoon_9.jpg +- data/imagenet-r/n07697537/misc_43.jpg +- data/imagenet-r/n03494278/art_4.jpg +- data/imagenet-r/n02206856/embroidery_27.jpg +- data/imagenet-r/n02391049/misc_117.jpg +- data/imagenet-r/n02793495/art_2.jpg +- data/imagenet-r/n02128757/art_6.jpg +- data/imagenet-r/n02091032/sketch_20.jpg +- data/imagenet-r/n01882714/sculpture_10.jpg +- data/imagenet-r/n03676483/cartoon_17.jpg +- data/imagenet-r/n07742313/toy_4.jpg +- data/imagenet-r/n02279972/sketch_23.jpg +- data/imagenet-r/n01910747/embroidery_7.jpg +- data/imagenet-r/n02092339/misc_44.jpg +- data/imagenet-r/n02219486/painting_6.jpg +- data/imagenet-r/n02883205/sketch_11.jpg +- data/imagenet-r/n02106166/painting_11.jpg +- data/imagenet-r/n02092339/sketch_6.jpg +- data/imagenet-r/n04118538/cartoon_8.jpg +- data/imagenet-r/n02091134/misc_7.jpg +- data/imagenet-r/n09472597/videogame_27.jpg +- data/imagenet-r/n02088238/misc_63.jpg +- data/imagenet-r/n02483362/art_1.jpg +- data/imagenet-r/n04536866/cartoon_26.jpg +- data/imagenet-r/n02138441/painting_21.jpg +- data/imagenet-r/n02226429/sculpture_6.jpg +- data/imagenet-r/n02117135/graffiti_5.jpg +- data/imagenet-r/n02108915/misc_86.jpg +- data/imagenet-r/n01632777/toy_18.jpg +- data/imagenet-r/n02110341/misc_70.jpg +- data/imagenet-r/n01806143/sketch_0.jpg +- data/imagenet-r/n02395406/misc_14.jpg +- data/imagenet-r/n04146614/toy_13.jpg +- data/imagenet-r/n02317335/toy_4.jpg +- data/imagenet-r/n02106662/misc_23.jpg +- data/imagenet-r/n02129165/cartoon_1.jpg +- data/imagenet-r/n02510455/sketch_13.jpg +- data/imagenet-r/n02226429/toy_4.jpg +- data/imagenet-r/n02138441/sculpture_8.jpg +- data/imagenet-r/n04133789/cartoon_26.jpg +- data/imagenet-r/n03124170/cartoon_15.jpg +- data/imagenet-r/n02445715/cartoon_28.jpg +- data/imagenet-r/n04465501/graphic_2.jpg +- data/imagenet-r/n02206856/graffiti_9.jpg +- data/imagenet-r/n02117135/sketch_20.jpg +- data/imagenet-r/n02510455/sketch_19.jpg +- data/imagenet-r/n04389033/videogame_23.jpg +- data/imagenet-r/n01514859/toy_8.jpg +- data/imagenet-r/n02129165/graphic_3.jpg +- data/imagenet-r/n02129165/cartoon_23.jpg +- data/imagenet-r/n02110341/misc_48.jpg +- data/imagenet-r/n02423022/graphic_5.jpg +- data/imagenet-r/n07714990/cartoon_21.jpg +- data/imagenet-r/n02437616/cartoon_11.jpg +- data/imagenet-r/n01531178/cartoon_0.jpg +- data/imagenet-r/n04522168/sketch_9.jpg +- data/imagenet-r/n02808440/painting_19.jpg +- data/imagenet-r/n02129604/tattoo_3.jpg +- data/imagenet-r/n07695742/painting_8.jpg +- data/imagenet-r/n02843684/cartoon_17.jpg +- data/imagenet-r/n02948072/cartoon_70.jpg +- data/imagenet-r/n02236044/toy_5.jpg +- data/imagenet-r/n02129165/toy_7.jpg +- data/imagenet-r/n07697537/videogame_13.jpg +- data/imagenet-r/n07614500/embroidery_19.jpg +- data/imagenet-r/n02909870/sketch_11.jpg +- data/imagenet-r/n02391049/deviantart_3.jpg +- data/imagenet-r/n02236044/embroidery_4.jpg +- data/imagenet-r/n07734744/embroidery_11.jpg +- data/imagenet-r/n04141076/sketch_9.jpg +- data/imagenet-r/n04275548/painting_5.jpg +- data/imagenet-r/n02607072/deviantart_13.jpg +- data/imagenet-r/n02138441/sculpture_5.jpg +- data/imagenet-r/n01443537/painting_30.jpg +- data/imagenet-r/n02165456/cartoon_11.jpg +- data/imagenet-r/n02346627/sketch_17.jpg +- data/imagenet-r/n07697313/misc_16.jpg +- data/imagenet-r/n02007558/art_22.jpg +- data/imagenet-r/n07718472/art_1.jpg +- data/imagenet-r/n02395406/sculpture_29.jpg +- data/imagenet-r/n01910747/cartoon_21.jpg +- data/imagenet-r/n04552348/cartoon_3.jpg +- data/imagenet-r/n02655020/misc_5.jpg +- data/imagenet-r/n03930630/cartoon_11.jpg +- data/imagenet-r/n01774750/origami_19.jpg +- data/imagenet-r/n01534433/art_5.jpg +- data/imagenet-r/n04487394/sketch_16.jpg +- data/imagenet-r/n01910747/graphic_4.jpg +- data/imagenet-r/n02607072/videogame_4.jpg +- data/imagenet-r/n07742313/sketch_9.jpg +- data/imagenet-r/n02206856/graffiti_37.jpg +- data/imagenet-r/n02480855/tattoo_21.jpg +- data/imagenet-r/n07734744/toy_20.jpg +- data/imagenet-r/n04192698/deviantart_22.jpg +- data/imagenet-r/n02110341/misc_5.jpg +- data/imagenet-r/n02056570/sketch_12.jpg +- data/imagenet-r/n02423022/sketch_3.jpg +- data/imagenet-r/n12267677/sketch_20.jpg +- data/imagenet-r/n02423022/sculpture_11.jpg +- data/imagenet-r/n02117135/cartoon_11.jpg +- data/imagenet-r/n03481172/cartoon_3.jpg +- data/imagenet-r/n02906734/cartoon_57.jpg +- data/imagenet-r/n02948072/sketch_34.jpg +- data/imagenet-r/n01614925/painting_42.jpg +- data/imagenet-r/n04254680/painting_0.jpg +- data/imagenet-r/n02364673/art_8.jpg +- data/imagenet-r/n02130308/cartoon_19.jpg +- data/imagenet-r/n01843383/deviantart_4.jpg +- data/imagenet-r/n04086273/toy_0.jpg +- data/imagenet-r/n07614500/misc_15.jpg +- data/imagenet-r/n02114367/misc_34.jpg +- data/imagenet-r/n04487394/sketch_15.jpg +- data/imagenet-r/n02066245/misc_1.jpg +- data/imagenet-r/n04465501/videogame_29.jpg +- data/imagenet-r/n02109525/sketch_13.jpg +- data/imagenet-r/n02091032/misc_19.jpg +- data/imagenet-r/n04086273/tattoo_28.jpg +- data/imagenet-r/n02268443/sketch_11.jpg +- data/imagenet-r/n02481823/sketch_3.jpg +- data/imagenet-r/n02363005/cartoon_37.jpg +- data/imagenet-r/n02226429/painting_0.jpg +- data/imagenet-r/n02655020/sketch_22.jpg +- data/imagenet-r/n02268443/misc_67.jpg +- data/imagenet-r/n01860187/tattoo_6.jpg +- data/imagenet-r/n02129165/sculpture_21.jpg +- data/imagenet-r/n02096585/misc_115.jpg +- data/imagenet-r/n01644373/sketch_0.jpg +- data/imagenet-r/n02364673/painting_16.jpg +- data/imagenet-r/n03345487/toy_0.jpg +- data/imagenet-r/n02129604/art_7.jpg +- data/imagenet-r/n02410509/cartoon_11.jpg +- data/imagenet-r/n03124170/painting_33.jpg +- data/imagenet-r/n02096585/misc_76.jpg +- data/imagenet-r/n02110958/art_12.jpg +- data/imagenet-r/n02395406/sculpture_5.jpg +- data/imagenet-r/n02233338/misc_41.jpg +- data/imagenet-r/n07742313/videogame_3.jpg +- data/imagenet-r/n02066245/toy_2.jpg +- data/imagenet-r/n03481172/cartoon_17.jpg +- data/imagenet-r/n02129604/sticker_3.jpg +- data/imagenet-r/n02769748/cartoon_35.jpg +- data/imagenet-r/n02071294/art_10.jpg +- data/imagenet-r/n02423022/cartoon_28.jpg +- data/imagenet-r/n02088238/sketch_15.jpg +- data/imagenet-r/n02092339/misc_26.jpg +- data/imagenet-r/n01820546/art_18.jpg +- data/imagenet-r/n02607072/sketch_20.jpg +- data/imagenet-r/n07734744/origami_1.jpg +- data/imagenet-r/n01644373/art_13.jpg +- data/imagenet-r/n02391049/misc_25.jpg +- data/imagenet-r/n01882714/sticker_6.jpg +- data/imagenet-r/n02134084/misc_155.jpg +- data/imagenet-r/n02510455/deviantart_4.jpg +- data/imagenet-r/n01770393/tattoo_11.jpg +- data/imagenet-r/n02797295/misc_81.jpg +- data/imagenet-r/n02206856/graffiti_11.jpg +- data/imagenet-r/n02808440/graphic_2.jpg +- data/imagenet-r/n01833805/art_3.jpg +- data/imagenet-r/n07753592/misc_10.jpg +- data/imagenet-r/n07695742/sketch_10.jpg +- data/imagenet-r/n04465501/graphic_3.jpg +- data/imagenet-r/n04266014/videogame_16.jpg +- data/imagenet-r/n02410509/sculpture_17.jpg +- data/imagenet-r/n03424325/misc_6.jpg +- data/imagenet-r/n02108089/tattoo_3.jpg +- data/imagenet-r/n02906734/embroidery_0.jpg +- data/imagenet-r/n02108915/misc_22.jpg +- data/imagenet-r/n04310018/sketch_11.jpg +- data/imagenet-r/n01616318/painting_16.jpg +- data/imagenet-r/n07768694/sketch_15.jpg +- data/imagenet-r/n03602883/misc_45.jpg +- data/imagenet-r/n01494475/misc_60.jpg +- data/imagenet-r/n02236044/painting_19.jpg +- data/imagenet-r/n01694178/toy_8.jpg +- data/imagenet-r/n02088466/sketch_23.jpg +- data/imagenet-r/n02808440/graphic_3.jpg +- data/imagenet-r/n02510455/sketch_17.jpg +- data/imagenet-r/n04118538/cartoon_24.jpg +- data/imagenet-r/n02110341/deviantart_6.jpg +- data/imagenet-r/n03424325/misc_86.jpg +- data/imagenet-r/n03124170/deviantart_6.jpg +- data/imagenet-r/n02526121/cartoon_19.jpg +- data/imagenet-r/n07734744/misc_3.jpg +- data/imagenet-r/n02113023/misc_8.jpg +- data/imagenet-r/n02236044/cartoon_41.jpg +- data/imagenet-r/n01882714/tattoo_12.jpg +- data/imagenet-r/n02481823/painting_8.jpg +- data/imagenet-r/n04389033/toy_16.jpg +- data/imagenet-r/n07745940/art_14.jpg +- data/imagenet-r/n02114367/sketch_18.jpg +- data/imagenet-r/n02108915/tattoo_11.jpg +- data/imagenet-r/n02134084/misc_59.jpg +- data/imagenet-r/n01806143/sticker_3.jpg +- data/imagenet-r/n04133789/embroidery_0.jpg +- data/imagenet-r/n07697537/deviantart_21.jpg +- data/imagenet-r/n04389033/sculpture_13.jpg +- data/imagenet-r/n02802426/sculpture_5.jpg +- data/imagenet-r/n02410509/painting_22.jpg +- data/imagenet-r/n02841315/sketch_2.jpg +- data/imagenet-r/n02233338/misc_25.jpg +- data/imagenet-r/n04266014/cartoon_28.jpg +- data/imagenet-r/n02655020/videogame_15.jpg +- data/imagenet-r/n01806143/graphic_4.jpg +- data/imagenet-r/n07614500/toy_7.jpg +- data/imagenet-r/n02481823/deviantart_15.jpg +- data/imagenet-r/n02110958/toy_6.jpg +- data/imagenet-r/n02117135/sketch_10.jpg +- data/imagenet-r/n07768694/deviantart_11.jpg +- data/imagenet-r/n02106166/sketch_4.jpg +- data/imagenet-r/n03452741/toy_0.jpg +- data/imagenet-r/n04465501/videogame_1.jpg +- data/imagenet-r/n02279972/painting_14.jpg +- data/imagenet-r/n04192698/embroidery_1.jpg +- data/imagenet-r/n02088364/misc_8.jpg +- data/imagenet-r/n02749479/videogame_13.jpg +- data/imagenet-r/n01494475/misc_85.jpg +- data/imagenet-r/n02909870/sketch_10.jpg +- data/imagenet-r/n02793495/toy_1.jpg +- data/imagenet-r/n02106662/misc_68.jpg +- data/imagenet-r/n04552348/deviantart_4.jpg +- data/imagenet-r/n07873807/painting_3.jpg +- data/imagenet-r/n02395406/cartoon_16.jpg +- data/imagenet-r/n02797295/sketch_18.jpg +- data/imagenet-r/n04465501/tattoo_2.jpg +- data/imagenet-r/n07720875/painting_42.jpg +- data/imagenet-r/n01677366/deviantart_15.jpg +- data/imagenet-r/n02317335/cartoon_19.jpg +- data/imagenet-r/n01847000/deviantart_3.jpg +- data/imagenet-r/n02129604/sketch_9.jpg +- data/imagenet-r/n01494475/misc_103.jpg +- data/imagenet-r/n02480855/tattoo_22.jpg +- data/imagenet-r/n02130308/sketch_12.jpg +- data/imagenet-r/n02843684/painting_6.jpg +- data/imagenet-r/n01694178/misc_0.jpg +- data/imagenet-r/n02410509/sticker_0.jpg +- data/imagenet-r/n04086273/deviantart_0.jpg +- data/imagenet-r/n03272010/sketch_14.jpg +- data/imagenet-r/n03594945/toy_15.jpg +- data/imagenet-r/n02909870/cartoon_4.jpg +- data/imagenet-r/n02113799/misc_16.jpg +- data/imagenet-r/n02130308/tattoo_7.jpg +- data/imagenet-r/n02091134/misc_18.jpg +- data/imagenet-r/n07734744/graffiti_15.jpg +- data/imagenet-r/n02085620/misc_100.jpg +- data/imagenet-r/n01944390/misc_52.jpg +- data/imagenet-r/n02106030/painting_13.jpg +- data/imagenet-r/n02980441/art_3.jpg +- data/imagenet-r/n04147183/toy_0.jpg +- data/imagenet-r/n02445715/sketch_7.jpg +- data/imagenet-r/n02096585/misc_24.jpg +- data/imagenet-r/n07697537/sketch_16.jpg +- data/imagenet-r/n02486410/sculpture_2.jpg +- data/imagenet-r/n01632777/deviantart_3.jpg +- data/imagenet-r/n02823750/cartoon_14.jpg +- data/imagenet-r/n01843383/deviantart_64.jpg +- data/imagenet-r/n02480495/sketch_18.jpg +- data/imagenet-r/n01677366/deviantart_13.jpg +- data/imagenet-r/n09472597/sketch_18.jpg +- data/imagenet-r/n07742313/painting_3.jpg +- data/imagenet-r/n02948072/cartoon_47.jpg +- data/imagenet-r/n04347754/graffiti_5.jpg +- data/imagenet-r/n03630383/misc_0.jpg +- data/imagenet-r/n02966193/painting_8.jpg +- data/imagenet-r/n02226429/sketch_21.jpg +- data/imagenet-r/n02094433/misc_54.jpg +- data/imagenet-r/n02085620/misc_0.jpg +- data/imagenet-r/n03773504/cartoon_3.jpg +- data/imagenet-r/n02112018/misc_7.jpg +- data/imagenet-r/n02099601/misc_102.jpg +- data/imagenet-r/n02066245/sculpture_0.jpg +- data/imagenet-r/n04347754/art_1.jpg +- data/imagenet-r/n04325704/sculpture_2.jpg +- data/imagenet-r/n02317335/embroidery_2.jpg +- data/imagenet-r/n02130308/cartoon_22.jpg +- data/imagenet-r/n01833805/painting_4.jpg +- data/imagenet-r/n02130308/graffiti_2.jpg +- data/imagenet-r/n02808440/sculpture_1.jpg +- data/imagenet-r/n04086273/tattoo_19.jpg +- data/imagenet-r/n02980441/painting_8.jpg +- data/imagenet-r/n02007558/tattoo_32.jpg +- data/imagenet-r/n01494475/misc_55.jpg +- data/imagenet-r/n02110185/cartoon_19.jpg +- data/imagenet-r/n07753592/misc_101.jpg +- data/imagenet-r/n02823750/graphic_5.jpg +- data/imagenet-r/n02129604/deviantart_3.jpg +- data/imagenet-r/n01630670/painting_1.jpg +- data/imagenet-r/n02007558/art_1.jpg +- data/imagenet-r/n04552348/sticker_5.jpg +- data/imagenet-r/n01632777/painting_4.jpg +- data/imagenet-r/n01677366/sketch_3.jpg +- data/imagenet-r/n02165456/embroidery_7.jpg +- data/imagenet-r/n02071294/misc_3.jpg +- data/imagenet-r/n02398521/art_9.jpg +- data/imagenet-r/n04325704/sketch_1.jpg +- data/imagenet-r/n01910747/toy_5.jpg +- data/imagenet-r/n02088238/sketch_22.jpg +- data/imagenet-r/n09835506/sketch_24.jpg +- data/imagenet-r/n02051845/art_5.jpg +- data/imagenet-r/n02051845/sketch_17.jpg +- data/imagenet-r/n02814860/sketch_14.jpg +- data/imagenet-r/n02317335/painting_8.jpg +- data/imagenet-r/n09472597/videogame_20.jpg +- data/imagenet-r/n07742313/toy_0.jpg +- data/imagenet-r/n02279972/tattoo_18.jpg +- data/imagenet-r/n01910747/cartoon_26.jpg +- data/imagenet-r/n07753275/videogame_23.jpg +- data/imagenet-r/n04347754/videogame_15.jpg +- data/imagenet-r/n01616318/cartoon_9.jpg +- data/imagenet-r/n03649909/toy_11.jpg +- data/imagenet-r/n02948072/deviantart_16.jpg +- data/imagenet-r/n02071294/deviantart_28.jpg +- data/imagenet-r/n02480495/sketch_23.jpg +- data/imagenet-r/n02483362/sketch_22.jpg +- data/imagenet-r/n02112018/misc_25.jpg +- data/imagenet-r/n02099601/misc_79.jpg +- data/imagenet-r/n02486410/cartoon_26.jpg +- data/imagenet-r/n07734744/art_14.jpg +- data/imagenet-r/n03630383/sketch_21.jpg +- data/imagenet-r/n02226429/sculpture_11.jpg +- data/imagenet-r/n02085620/sketch_19.jpg +- data/imagenet-r/n02096585/misc_16.jpg +- data/imagenet-r/n02092339/sketch_2.jpg +- data/imagenet-r/n02097298/misc_53.jpg +- data/imagenet-r/n02099712/misc_42.jpg +- data/imagenet-r/n01882714/videogame_2.jpg +- data/imagenet-r/n02607072/misc_31.jpg +- data/imagenet-r/n02437616/deviantart_1.jpg +- data/imagenet-r/n09835506/sculpture_10.jpg +- data/imagenet-r/n02802426/cartoon_15.jpg +- data/imagenet-r/n03676483/sketch_2.jpg +- data/imagenet-r/n01614925/art_4.jpg +- data/imagenet-r/n02134084/misc_131.jpg +- data/imagenet-r/n02395406/toy_7.jpg +- data/imagenet-r/n02077923/cartoon_1.jpg +- data/imagenet-r/n02129604/sketch_11.jpg +- data/imagenet-r/n01644373/sketch_4.jpg +- data/imagenet-r/n04347754/videogame_12.jpg +- data/imagenet-r/n02883205/art_1.jpg +- data/imagenet-r/n03372029/cartoon_14.jpg +- data/imagenet-r/n02128385/sketch_2.jpg +- data/imagenet-r/n02165456/tattoo_0.jpg +- data/imagenet-r/n02480855/sculpture_5.jpg +- data/imagenet-r/n07734744/sketch_1.jpg +- data/imagenet-r/n04310018/sticker_6.jpg +- data/imagenet-r/n04192698/toy_2.jpg +- data/imagenet-r/n02992529/misc_0.jpg +- data/imagenet-r/n02672831/cartoon_19.jpg +- data/imagenet-r/n02391049/misc_79.jpg +- data/imagenet-r/n01694178/cartoon_19.jpg +- data/imagenet-r/n03676483/painting_6.jpg +- data/imagenet-r/n02363005/cartoon_21.jpg +- data/imagenet-r/n02481823/art_10.jpg +- data/imagenet-r/n02317335/sculpture_5.jpg +- data/imagenet-r/n02769748/cartoon_38.jpg +- data/imagenet-r/n07873807/misc_1.jpg +- data/imagenet-r/n02410509/art_2.jpg +- data/imagenet-r/n02802426/sticker_1.jpg +- data/imagenet-r/n02233338/misc_15.jpg +- data/imagenet-r/n02051845/cartoon_2.jpg +- data/imagenet-r/n02138441/art_8.jpg +- data/imagenet-r/n01944390/misc_110.jpg +- data/imagenet-r/n02099712/sketch_17.jpg +- data/imagenet-r/n07734744/graffiti_51.jpg +- data/imagenet-r/n01847000/painting_2.jpg +- data/imagenet-r/n02793495/art_0.jpg +- data/imagenet-r/n01784675/art_1.jpg +- data/imagenet-r/n03494278/embroidery_0.jpg +- data/imagenet-r/n02793495/painting_9.jpg +- data/imagenet-r/n02071294/painting_0.jpg +- data/imagenet-r/n02097298/sketch_18.jpg +- data/imagenet-r/n01843383/deviantart_41.jpg +- data/imagenet-r/n12267677/sketch_4.jpg +- data/imagenet-r/n02138441/sketch_18.jpg +- data/imagenet-r/n04133789/painting_0.jpg +- data/imagenet-r/n02268443/misc_103.jpg +- data/imagenet-r/n04536866/deviantart_25.jpg +- data/imagenet-r/n04086273/videogame_11.jpg +- data/imagenet-r/n03649909/toy_18.jpg +- data/imagenet-r/n02009912/misc_36.jpg +- data/imagenet-r/n01443537/origami_11.jpg +- data/imagenet-r/n03124170/cartoon_14.jpg +- data/imagenet-r/n01644373/painting_1.jpg +- data/imagenet-r/n02480855/graffiti_15.jpg +- data/imagenet-r/n03630383/cartoon_25.jpg +- data/imagenet-r/n07873807/graphic_2.jpg +- data/imagenet-r/n03630383/sketch_11.jpg +- data/imagenet-r/n04325704/cartoon_26.jpg +- data/imagenet-r/n02206856/painting_13.jpg +- data/imagenet-r/n02364673/misc_0.jpg +- data/imagenet-r/n02268443/misc_98.jpg +- data/imagenet-r/n07745940/sketch_22.jpg +- data/imagenet-r/n03888257/art_12.jpg +- data/imagenet-r/n02802426/cartoon_8.jpg +- data/imagenet-r/n07697313/cartoon_39.jpg +- data/imagenet-r/n01806143/painting_0.jpg +- data/imagenet-r/n07753275/deviantart_0.jpg +- data/imagenet-r/n07734744/graffiti_32.jpg +- data/imagenet-r/n12267677/misc_61.jpg +- data/imagenet-r/n09472597/painting_15.jpg +- data/imagenet-r/n01986214/toy_6.jpg +- data/imagenet-r/n02110341/misc_129.jpg +- data/imagenet-r/n02007558/sticker_6.jpg +- data/imagenet-r/n02092339/misc_10.jpg +- data/imagenet-r/n02672831/sketch_11.jpg +- data/imagenet-r/n01882714/cartoon_0.jpg +- data/imagenet-r/n02814860/painting_5.jpg +- data/imagenet-r/n02906734/sculpture_2.jpg +- data/imagenet-r/n02051845/misc_3.jpg +- data/imagenet-r/n01843383/painting_9.jpg +- data/imagenet-r/n04133789/cartoon_19.jpg +- data/imagenet-r/n02134084/misc_29.jpg +- data/imagenet-r/n01983481/misc_28.jpg +- data/imagenet-r/n02346627/sketch_13.jpg +- data/imagenet-r/n01806143/embroidery_7.jpg +- data/imagenet-r/n02102318/sketch_22.jpg +- data/imagenet-r/n02906734/toy_5.jpg +- data/imagenet-r/n02130308/painting_16.jpg +- data/imagenet-r/n04591713/deviantart_8.jpg +- data/imagenet-r/n01843383/art_21.jpg +- data/imagenet-r/n03494278/sketch_21.jpg +- data/imagenet-r/n02165456/art_6.jpg +- data/imagenet-r/n07873807/deviantart_31.jpg +- data/imagenet-r/n02088238/sketch_18.jpg +- data/imagenet-r/n04487394/art_1.jpg +- data/imagenet-r/n07745940/graffiti_24.jpg +- data/imagenet-r/n02128757/painting_23.jpg +- data/imagenet-r/n02085620/misc_62.jpg +- data/imagenet-r/n02129604/tattoo_37.jpg +- data/imagenet-r/n03630383/sketch_1.jpg +- data/imagenet-r/n02088364/misc_40.jpg +- data/imagenet-r/n01531178/art_32.jpg +- data/imagenet-r/n02814860/painting_36.jpg +- data/imagenet-r/n04118538/videogame_8.jpg +- data/imagenet-r/n02110958/misc_6.jpg +- data/imagenet-r/n03888257/graffiti_0.jpg +- data/imagenet-r/n02948072/cartoon_78.jpg +- data/imagenet-r/n01986214/sketch_20.jpg +- data/imagenet-r/n03649909/art_6.jpg +- data/imagenet-r/n02108089/misc_0.jpg +- data/imagenet-r/n01494475/misc_53.jpg +- data/imagenet-r/n02510455/sketch_22.jpg +- data/imagenet-r/n03930630/painting_11.jpg +- data/imagenet-r/n04536866/cartoon_12.jpg +- data/imagenet-r/n02655020/sketch_23.jpg +- data/imagenet-r/n02109525/sketch_21.jpg +- data/imagenet-r/n03481172/videogame_12.jpg +- data/imagenet-r/n02814860/art_1.jpg +- data/imagenet-r/n04487394/deviantart_10.jpg +- data/imagenet-r/n03930630/sticker_0.jpg +- data/imagenet-r/n02841315/painting_2.jpg +- data/imagenet-r/n07753275/misc_7.jpg +- data/imagenet-r/n02091134/tattoo_0.jpg +- data/imagenet-r/n01847000/toy_16.jpg +- data/imagenet-r/n02088364/misc_11.jpg +- data/imagenet-r/n04146614/toy_1.jpg +- data/imagenet-r/n02110185/cartoon_9.jpg +- data/imagenet-r/n03424325/misc_73.jpg +- data/imagenet-r/n01514859/painting_25.jpg +- data/imagenet-r/n02814860/art_8.jpg +- data/imagenet-r/n02356798/cartoon_12.jpg +- data/imagenet-r/n02480855/misc_2.jpg +- data/imagenet-r/n02823750/graphic_2.jpg +- data/imagenet-r/n04522168/cartoon_23.jpg +- data/imagenet-r/n02086240/misc_39.jpg +- data/imagenet-r/n02510455/misc_107.jpg +- data/imagenet-r/n04147183/sculpture_1.jpg +- data/imagenet-r/n01882714/deviantart_2.jpg +- data/imagenet-r/n10565667/sculpture_4.jpg +- data/imagenet-r/n02071294/sketch_13.jpg +- data/imagenet-r/n01910747/videogame_0.jpg +- data/imagenet-r/n02268443/misc_117.jpg +- data/imagenet-r/n02110958/painting_18.jpg +- data/imagenet-r/n02119022/misc_116.jpg +- data/imagenet-r/n07695742/deviantart_6.jpg +- data/imagenet-r/n02423022/sketch_12.jpg +- data/imagenet-r/n02077923/misc_24.jpg +- data/imagenet-r/n01514859/deviantart_45.jpg +- data/imagenet-r/n02486410/painting_1.jpg +- data/imagenet-r/n02317335/cartoon_21.jpg +- data/imagenet-r/n07742313/sketch_14.jpg +- data/imagenet-r/n03452741/misc_0.jpg +- data/imagenet-r/n02883205/embroidery_2.jpg +- data/imagenet-r/n04141076/cartoon_1.jpg +- data/imagenet-r/n01531178/painting_0.jpg +- data/imagenet-r/n02117135/graffiti_2.jpg +- data/imagenet-r/n01847000/embroidery_3.jpg +- data/imagenet-r/n02114367/misc_13.jpg +- data/imagenet-r/n02128757/art_15.jpg +- data/imagenet-r/n02364673/cartoon_10.jpg +- data/imagenet-r/n02128757/painting_14.jpg +- data/imagenet-r/n02480855/painting_12.jpg +- data/imagenet-r/n03594945/cartoon_3.jpg +- data/imagenet-r/n01855672/toy_2.jpg +- data/imagenet-r/n01882714/graffiti_4.jpg +- data/imagenet-r/n02007558/embroidery_24.jpg +- data/imagenet-r/n04275548/misc_11.jpg +- data/imagenet-r/n12267677/misc_135.jpg +- data/imagenet-r/n12267677/misc_17.jpg +- data/imagenet-r/n02114367/misc_59.jpg +- data/imagenet-r/n02802426/videogame_17.jpg +- data/imagenet-r/n02233338/misc_51.jpg +- data/imagenet-r/n02233338/tattoo_15.jpg +- data/imagenet-r/n01833805/sketch_18.jpg +- data/imagenet-r/n02364673/painting_1.jpg +- data/imagenet-r/n02317335/sketch_1.jpg +- data/imagenet-r/n02106662/misc_93.jpg +- data/imagenet-r/n02110958/tattoo_23.jpg +- data/imagenet-r/n02526121/sculpture_4.jpg +- data/imagenet-r/n07714990/toy_11.jpg +- data/imagenet-r/n01518878/embroidery_1.jpg +- data/imagenet-r/n02655020/misc_11.jpg +- data/imagenet-r/n02129165/deviantart_17.jpg +- data/imagenet-r/n02966193/cartoon_26.jpg +- data/imagenet-r/n02094433/misc_26.jpg +- data/imagenet-r/n02445715/art_5.jpg +- data/imagenet-r/n04146614/deviantart_10.jpg +- data/imagenet-r/n07714990/deviantart_23.jpg +- data/imagenet-r/n02233338/misc_48.jpg +- data/imagenet-r/n02091134/misc_17.jpg +- data/imagenet-r/n02219486/graffiti_1.jpg +- data/imagenet-r/n02129165/sketch_5.jpg +- data/imagenet-r/n12267677/misc_56.jpg +- data/imagenet-r/n02129165/tattoo_49.jpg +- data/imagenet-r/n02206856/painting_5.jpg +- data/imagenet-r/n07749582/art_8.jpg +- data/imagenet-r/n02356798/toy_1.jpg +- data/imagenet-r/n04522168/deviantart_3.jpg +- data/imagenet-r/n02092339/misc_25.jpg +- data/imagenet-r/n04266014/toy_27.jpg +- data/imagenet-r/n02129165/misc_12.jpg +- data/imagenet-r/n02445715/cartoon_36.jpg +- data/imagenet-r/n02510455/sketch_3.jpg +- data/imagenet-r/n04146614/toy_29.jpg +- data/imagenet-r/n04146614/videogame_17.jpg +- data/imagenet-r/n02906734/sketch_20.jpg +- data/imagenet-r/n02279972/cartoon_8.jpg +- data/imagenet-r/n01784675/sketch_20.jpg +- data/imagenet-r/n02096585/misc_188.jpg +- data/imagenet-r/n02364673/sketch_11.jpg +- data/imagenet-r/n09835506/misc_0.jpg +- data/imagenet-r/n02088238/misc_41.jpg +- data/imagenet-r/n02950826/misc_1.jpg +- data/imagenet-r/n02110958/cartoon_57.jpg +- data/imagenet-r/n02134084/sketch_13.jpg +- data/imagenet-r/n02325366/misc_33.jpg +- data/imagenet-r/n07734744/graffiti_5.jpg +- data/imagenet-r/n02051845/embroidery_0.jpg +- data/imagenet-r/n03481172/toy_12.jpg +- data/imagenet-r/n02086240/misc_47.jpg +- data/imagenet-r/n02317335/sculpture_10.jpg +- data/imagenet-r/n02510455/misc_136.jpg +- data/imagenet-r/n03124170/art_22.jpg +- data/imagenet-r/n02480855/sculpture_14.jpg +- data/imagenet-r/n03930630/misc_19.jpg +- data/imagenet-r/n02808440/graffiti_5.jpg +- data/imagenet-r/n02480855/tattoo_3.jpg +- data/imagenet-r/n01443537/videogame_4.jpg +- data/imagenet-r/n01910747/deviantart_9.jpg +- data/imagenet-r/n01494475/sketch_0.jpg +- data/imagenet-r/n04118538/cartoon_17.jpg +- data/imagenet-r/n01910747/cartoon_12.jpg +- data/imagenet-r/n04465501/art_1.jpg +- data/imagenet-r/n04275548/videogame_1.jpg +- data/imagenet-r/n02939185/deviantart_14.jpg +- data/imagenet-r/n04522168/painting_8.jpg +- data/imagenet-r/n04266014/cartoon_18.jpg +- data/imagenet-r/n07734744/sticker_13.jpg +- data/imagenet-r/n03124170/graffiti_9.jpg +- data/imagenet-r/n02106030/art_13.jpg +- data/imagenet-r/n02398521/sculpture_15.jpg +- data/imagenet-r/n07753592/misc_22.jpg +- data/imagenet-r/n02129604/tattoo_4.jpg +- data/imagenet-r/n02085620/misc_29.jpg +- data/imagenet-r/n02279972/sketch_16.jpg +- data/imagenet-r/n02007558/painting_12.jpg +- data/imagenet-r/n02106662/sketch_6.jpg +- data/imagenet-r/n02206856/graphic_9.jpg +- data/imagenet-r/n04409515/sketch_6.jpg +- data/imagenet-r/n04266014/painting_14.jpg +- data/imagenet-r/n03467068/toy_2.jpg +- data/imagenet-r/n04254680/misc_7.jpg +- data/imagenet-r/n02607072/misc_96.jpg +- data/imagenet-r/n02236044/sketch_19.jpg +- data/imagenet-r/n04310018/painting_11.jpg +- data/imagenet-r/n03773504/sculpture_3.jpg +- data/imagenet-r/n01632777/cartoon_0.jpg +- data/imagenet-r/n02939185/cartoon_3.jpg +- data/imagenet-r/n07714990/cartoon_37.jpg +- data/imagenet-r/n02843684/sketch_11.jpg +- data/imagenet-r/n02364673/graphic_0.jpg +- data/imagenet-r/n02129165/graffiti_13.jpg +- data/imagenet-r/n02112137/misc_8.jpg +- data/imagenet-r/n01843383/deviantart_48.jpg +- data/imagenet-r/n03602883/sketch_16.jpg +- data/imagenet-r/n02346627/sculpture_5.jpg +- data/imagenet-r/n02056570/art_0.jpg +- data/imagenet-r/n02113799/sketch_7.jpg +- data/imagenet-r/n02106662/misc_86.jpg +- data/imagenet-r/n01820546/painting_29.jpg +- data/imagenet-r/n01860187/cartoon_14.jpg +- data/imagenet-r/n02797295/misc_33.jpg +- data/imagenet-r/n02948072/cartoon_22.jpg +- data/imagenet-r/n02480855/sketch_9.jpg +- data/imagenet-r/n02363005/painting_0.jpg +- data/imagenet-r/n01784675/tattoo_4.jpg +- data/imagenet-r/n07753275/art_11.jpg +- data/imagenet-r/n01806143/sketch_11.jpg +- data/imagenet-r/n01614925/tattoo_5.jpg +- data/imagenet-r/n03630383/cartoon_31.jpg +- data/imagenet-r/n02364673/painting_6.jpg +- data/imagenet-r/n03124170/cartoon_22.jpg +- data/imagenet-r/n04389033/videogame_28.jpg +- data/imagenet-r/n02410509/sculpture_0.jpg +- data/imagenet-r/n03424325/misc_18.jpg +- data/imagenet-r/n04192698/origami_2.jpg +- data/imagenet-r/n07753592/deviantart_2.jpg +- data/imagenet-r/n07734744/misc_23.jpg +- data/imagenet-r/n04141076/deviantart_23.jpg +- data/imagenet-r/n01498041/tattoo_5.jpg +- data/imagenet-r/n02088466/sketch_21.jpg +- data/imagenet-r/n01443537/toy_12.jpg +- data/imagenet-r/n02268443/misc_86.jpg +- data/imagenet-r/n03372029/art_2.jpg +- data/imagenet-r/n07697313/toy_13.jpg +- data/imagenet-r/n07697537/deviantart_31.jpg +- data/imagenet-r/n02226429/cartoon_6.jpg +- data/imagenet-r/n02948072/cartoon_28.jpg +- data/imagenet-r/n02091134/sketch_23.jpg +- data/imagenet-r/n02108915/sketch_20.jpg +- data/imagenet-r/n02117135/tattoo_10.jpg +- data/imagenet-r/n07749582/art_5.jpg +- data/imagenet-r/n02096585/tattoo_10.jpg +- data/imagenet-r/n02110958/cartoon_74.jpg +- data/imagenet-r/n02123045/painting_17.jpg +- data/imagenet-r/n12267677/misc_78.jpg +- data/imagenet-r/n01843383/deviantart_19.jpg +- data/imagenet-r/n04275548/sketch_20.jpg +- data/imagenet-r/n01770393/sketch_12.jpg +- data/imagenet-r/n04325704/painting_5.jpg +- data/imagenet-r/n02236044/videogame_1.jpg +- data/imagenet-r/n03930630/painting_6.jpg +- data/imagenet-r/n03467068/sketch_15.jpg +- data/imagenet-r/n09472597/cartoon_5.jpg +- data/imagenet-r/n02128385/sketch_5.jpg +- data/imagenet-r/n07734744/videogame_9.jpg +- data/imagenet-r/n09835506/videogame_8.jpg +- data/imagenet-r/n02480495/sculpture_3.jpg +- data/imagenet-r/n07753592/misc_57.jpg +- data/imagenet-r/n01443537/cartoon_12.jpg +- data/imagenet-r/n07873807/deviantart_6.jpg +- data/imagenet-r/n12267677/misc_58.jpg +- data/imagenet-r/n07749582/deviantart_6.jpg +- data/imagenet-r/n07718472/toy_1.jpg +- data/imagenet-r/n02395406/misc_23.jpg +- data/imagenet-r/n01986214/sketch_9.jpg +- data/imagenet-r/n10565667/cartoon_3.jpg +- data/imagenet-r/n02797295/misc_72.jpg +- data/imagenet-r/n02123045/cartoon_12.jpg +- data/imagenet-r/n01518878/cartoon_38.jpg +- data/imagenet-r/n02110185/tattoo_7.jpg +- data/imagenet-r/n04086273/toy_4.jpg +- data/imagenet-r/n02106550/misc_60.jpg +- data/imagenet-r/n01630670/art_2.jpg +- data/imagenet-r/n02841315/sketch_11.jpg +- data/imagenet-r/n03498962/art_0.jpg +- data/imagenet-r/n04389033/graffiti_18.jpg +- data/imagenet-r/n07734744/videogame_20.jpg +- data/imagenet-r/n01944390/misc_95.jpg +- data/imagenet-r/n01632777/videogame_3.jpg +- data/imagenet-r/n01614925/deviantart_40.jpg +- data/imagenet-r/n02701002/toy_24.jpg +- data/imagenet-r/n02088466/sketch_16.jpg +- data/imagenet-r/n04347754/misc_1.jpg +- data/imagenet-r/n02128757/cartoon_9.jpg +- data/imagenet-r/n01882714/sculpture_7.jpg +- data/imagenet-r/n01484850/deviantart_21.jpg +- data/imagenet-r/n07734744/origami_0.jpg +- data/imagenet-r/n07714990/deviantart_10.jpg +- data/imagenet-r/n02134084/tattoo_2.jpg +- data/imagenet-r/n04147183/deviantart_4.jpg +- data/imagenet-r/n02486410/sketch_1.jpg +- data/imagenet-r/n07697313/cartoon_41.jpg +- data/imagenet-r/n12267677/misc_5.jpg +- data/imagenet-r/n04347754/videogame_3.jpg +- data/imagenet-r/n01614925/tattoo_14.jpg +- data/imagenet-r/n02134084/misc_60.jpg +- data/imagenet-r/n04275548/embroidery_10.jpg +- data/imagenet-r/n02317335/cartoon_14.jpg +- data/imagenet-r/n01806143/origami_3.jpg +- data/imagenet-r/n02655020/misc_85.jpg +- data/imagenet-r/n02948072/misc_1.jpg +- data/imagenet-r/n02808440/graffiti_0.jpg +- data/imagenet-r/n07614500/painting_2.jpg +- data/imagenet-r/n02088238/misc_2.jpg +- data/imagenet-r/n02007558/graphic_9.jpg +- data/imagenet-r/n01632777/cartoon_3.jpg +- data/imagenet-r/n02980441/videogame_6.jpg +- data/imagenet-r/n02106030/art_7.jpg +- data/imagenet-r/n01534433/sketch_17.jpg +- data/imagenet-r/n02117135/painting_9.jpg +- data/imagenet-r/n04522168/painting_1.jpg +- data/imagenet-r/n01855672/painting_0.jpg +- data/imagenet-r/n01910747/painting_9.jpg +- data/imagenet-r/n02071294/misc_1.jpg +- data/imagenet-r/n02948072/deviantart_10.jpg +- data/imagenet-r/n01630670/embroidery_0.jpg +- data/imagenet-r/n02939185/deviantart_2.jpg +- data/imagenet-r/n02051845/embroidery_3.jpg +- data/imagenet-r/n02085620/misc_72.jpg +- data/imagenet-r/n04118538/sketch_20.jpg +- data/imagenet-r/n09835506/misc_2.jpg +- data/imagenet-r/n04487394/painting_3.jpg +- data/imagenet-r/n02395406/cartoon_26.jpg +- data/imagenet-r/n01833805/origami_11.jpg +- data/imagenet-r/n01847000/tattoo_26.jpg +- data/imagenet-r/n02094433/misc_0.jpg +- data/imagenet-r/n02883205/misc_2.jpg +- data/imagenet-r/n02445715/art_2.jpg +- data/imagenet-r/n03124170/misc_18.jpg +- data/imagenet-r/n02098286/misc_22.jpg +- data/imagenet-r/n01843383/painting_25.jpg +- data/imagenet-r/n01843383/painting_23.jpg +- data/imagenet-r/n02948072/cartoon_54.jpg +- data/imagenet-r/n09835506/sculpture_0.jpg +- data/imagenet-r/n01843383/tattoo_17.jpg +- data/imagenet-r/n01518878/sketch_19.jpg +- data/imagenet-r/n02206856/graffiti_21.jpg +- data/imagenet-r/n02317335/painting_2.jpg +- data/imagenet-r/n02823750/painting_2.jpg +- data/imagenet-r/n01614925/art_6.jpg +- data/imagenet-r/n04118538/cartoon_26.jpg +- data/imagenet-r/n04522168/graphic_4.jpg +- data/imagenet-r/n04266014/toy_25.jpg +- data/imagenet-r/n01694178/toy_5.jpg +- data/imagenet-r/n02939185/sticker_0.jpg +- data/imagenet-r/n02410509/painting_7.jpg +- data/imagenet-r/n02085620/misc_73.jpg +- data/imagenet-r/n02108915/misc_84.jpg +- data/imagenet-r/n02091032/sketch_7.jpg +- data/imagenet-r/n02814860/sticker_2.jpg +- data/imagenet-r/n04325704/cartoon_17.jpg +- data/imagenet-r/n02102318/sketch_19.jpg +- data/imagenet-r/n01847000/misc_13.jpg +- data/imagenet-r/n02236044/sculpture_10.jpg +- data/imagenet-r/n02092339/sketch_12.jpg +- data/imagenet-r/n07749582/painting_14.jpg +- data/imagenet-r/n02423022/art_1.jpg +- data/imagenet-r/n01944390/misc_152.jpg +- data/imagenet-r/n02980441/toy_10.jpg +- data/imagenet-r/n01770393/origami_16.jpg +- data/imagenet-r/n04254680/cartoon_1.jpg +- data/imagenet-r/n03272010/painting_7.jpg +- data/imagenet-r/n07873807/toy_0.jpg +- data/imagenet-r/n04254680/sketch_2.jpg +- data/imagenet-r/n02110341/sketch_2.jpg +- data/imagenet-r/n07734744/videogame_19.jpg +- data/imagenet-r/n01694178/sketch_12.jpg +- data/imagenet-r/n04487394/sketch_8.jpg +- data/imagenet-r/n07734744/toy_44.jpg +- data/imagenet-r/n01494475/misc_141.jpg +- data/imagenet-r/n02398521/cartoon_0.jpg +- data/imagenet-r/n01833805/cartoon_6.jpg +- data/imagenet-r/n02110341/sketch_1.jpg +- data/imagenet-r/n04310018/art_8.jpg +- data/imagenet-r/n01677366/deviantart_9.jpg +- data/imagenet-r/n10565667/cartoon_11.jpg +- data/imagenet-r/n07753592/misc_84.jpg +- data/imagenet-r/n02129604/painting_16.jpg +- data/imagenet-r/n02966193/deviantart_2.jpg +- data/imagenet-r/n01986214/deviantart_13.jpg +- data/imagenet-r/n02165456/tattoo_3.jpg +- data/imagenet-r/n01494475/misc_117.jpg +- data/imagenet-r/n01632777/cartoon_9.jpg +- data/imagenet-r/n07753275/tattoo_7.jpg +- data/imagenet-r/n01748264/tattoo_39.jpg +- data/imagenet-r/n02088364/misc_71.jpg +- data/imagenet-r/n02391049/misc_36.jpg +- data/imagenet-r/n01784675/sculpture_3.jpg +- data/imagenet-r/n03372029/sculpture_19.jpg +- data/imagenet-r/n02088238/misc_75.jpg +- data/imagenet-r/n03124170/painting_27.jpg +- data/imagenet-r/n02233338/tattoo_14.jpg +- data/imagenet-r/n02363005/misc_2.jpg +- data/imagenet-r/n03372029/sketch_9.jpg +- data/imagenet-r/n02797295/misc_14.jpg +- data/imagenet-r/n03124170/graffiti_4.jpg +- data/imagenet-r/n04536866/painting_6.jpg +- data/imagenet-r/n01882714/art_12.jpg +- data/imagenet-r/n04465501/tattoo_0.jpg +- data/imagenet-r/n02108915/misc_17.jpg +- data/imagenet-r/n02526121/sculpture_20.jpg +- data/imagenet-r/n07734744/embroidery_19.jpg +- data/imagenet-r/n02939185/misc_4.jpg +- data/imagenet-r/n02672831/misc_1.jpg +- data/imagenet-r/n07745940/origami_0.jpg +- data/imagenet-r/n07697313/cartoon_35.jpg +- data/imagenet-r/n02097298/sketch_4.jpg +- data/imagenet-r/n04192698/art_4.jpg +- data/imagenet-r/n07695742/deviantart_4.jpg +- data/imagenet-r/n02486410/graphic_1.jpg +- data/imagenet-r/n02092339/misc_31.jpg +- data/imagenet-r/n07697313/art_15.jpg +- data/imagenet-r/n03124170/painting_5.jpg +- data/imagenet-r/n02948072/cartoon_29.jpg +- data/imagenet-r/n03676483/cartoon_5.jpg +- data/imagenet-r/n01833805/videogame_7.jpg +- data/imagenet-r/n02948072/cartoon_72.jpg +- data/imagenet-r/n04536866/sketch_23.jpg +- data/imagenet-r/n02108915/misc_49.jpg +- data/imagenet-r/n02096585/misc_67.jpg +- data/imagenet-r/n01944390/tattoo_32.jpg +- data/imagenet-r/n01910747/art_0.jpg +- data/imagenet-r/n02939185/deviantart_6.jpg +- data/imagenet-r/n02129604/deviantart_7.jpg +- data/imagenet-r/n02480855/toy_11.jpg +- data/imagenet-r/n07749582/origami_0.jpg +- data/imagenet-r/n04266014/sketch_10.jpg +- data/imagenet-r/n02363005/cartoon_43.jpg +- data/imagenet-r/n01632777/art_11.jpg +- data/imagenet-r/n04465501/videogame_2.jpg +- data/imagenet-r/n01983481/misc_2.jpg +- data/imagenet-r/n02486410/painting_4.jpg +- data/imagenet-r/n02071294/tattoo_16.jpg +- data/imagenet-r/n02138441/graffiti_12.jpg +- data/imagenet-r/n02398521/embroidery_1.jpg +- data/imagenet-r/n03124170/sculpture_5.jpg +- data/imagenet-r/n07697313/cartoon_6.jpg +- data/imagenet-r/n01484850/cartoon_2.jpg +- data/imagenet-r/n07734744/graffiti_0.jpg +- data/imagenet-r/n01774750/graffiti_1.jpg +- data/imagenet-r/n02802426/toy_6.jpg +- data/imagenet-r/n04552348/cartoon_0.jpg +- data/imagenet-r/n07745940/graffiti_11.jpg +- data/imagenet-r/n02117135/painting_12.jpg +- data/imagenet-r/n02165456/tattoo_35.jpg +- data/imagenet-r/n02099601/misc_85.jpg +- data/imagenet-r/n01882714/deviantart_5.jpg +- data/imagenet-r/n02071294/painting_5.jpg +- data/imagenet-r/n04266014/videogame_31.jpg +- data/imagenet-r/n02138441/cartoon_23.jpg +- data/imagenet-r/n02165456/sculpture_12.jpg +- data/imagenet-r/n02948072/graphic_0.jpg +- data/imagenet-r/n02219486/origami_1.jpg +- data/imagenet-r/n02236044/cartoon_4.jpg +- data/imagenet-r/n01843383/tattoo_9.jpg +- data/imagenet-r/n02129165/sculpture_4.jpg +- data/imagenet-r/n07614500/videogame_6.jpg +- data/imagenet-r/n07720875/art_15.jpg +- data/imagenet-r/n01820546/misc_2.jpg +- data/imagenet-r/n04536866/sketch_8.jpg +- data/imagenet-r/n02279972/sketch_1.jpg +- data/imagenet-r/n01494475/misc_97.jpg +- data/imagenet-r/n02129165/tattoo_53.jpg +- data/imagenet-r/n09835506/deviantart_17.jpg +- data/imagenet-r/n02701002/graphic_1.jpg +- data/imagenet-r/n03888257/sketch_12.jpg +- data/imagenet-r/n04389033/deviantart_24.jpg +- data/imagenet-r/n03649909/misc_2.jpg +- data/imagenet-r/n04465501/toy_10.jpg +- data/imagenet-r/n01820546/painting_21.jpg +- data/imagenet-r/n02190166/painting_3.jpg +- data/imagenet-r/n02814860/sticker_3.jpg +- data/imagenet-r/n09472597/sketch_27.jpg +- data/imagenet-r/n02906734/cartoon_4.jpg +- data/imagenet-r/n02108089/misc_24.jpg +- data/imagenet-r/n02268443/misc_135.jpg +- data/imagenet-r/n02088094/misc_25.jpg +- data/imagenet-r/n07697313/cartoon_20.jpg +- data/imagenet-r/n02108915/misc_90.jpg +- data/imagenet-r/n02769748/sketch_16.jpg +- data/imagenet-r/n04310018/misc_12.jpg +- data/imagenet-r/n02088466/misc_26.jpg +- data/imagenet-r/n09835506/deviantart_37.jpg +- data/imagenet-r/n02130308/art_13.jpg +- data/imagenet-r/n02099601/misc_70.jpg +- data/imagenet-r/n01910747/embroidery_0.jpg +- data/imagenet-r/n02906734/sketch_16.jpg +- data/imagenet-r/n02007558/art_9.jpg +- data/imagenet-r/n02110341/misc_31.jpg +- data/imagenet-r/n02134084/misc_41.jpg +- data/imagenet-r/n02364673/art_3.jpg +- data/imagenet-r/n04133789/painting_6.jpg +- data/imagenet-r/n02123045/sketch_1.jpg +- data/imagenet-r/n04086273/art_9.jpg +- data/imagenet-r/n02909870/graphic_5.jpg +- data/imagenet-r/n02128757/painting_5.jpg +- data/imagenet-r/n02206856/graphic_0.jpg +- data/imagenet-r/n02113624/sketch_14.jpg +- data/imagenet-r/n02134084/misc_86.jpg +- data/imagenet-r/n02190166/sketch_18.jpg +- data/imagenet-r/n04310018/tattoo_0.jpg +- data/imagenet-r/n07749582/misc_8.jpg +- data/imagenet-r/n12267677/misc_65.jpg +- data/imagenet-r/n02948072/cartoon_5.jpg +- data/imagenet-r/n07734744/toy_43.jpg +- data/imagenet-r/n03467068/sketch_16.jpg +- data/imagenet-r/n02106550/misc_51.jpg +- data/imagenet-r/n01847000/toy_10.jpg +- data/imagenet-r/n01748264/tattoo_20.jpg +- data/imagenet-r/n02134084/tattoo_6.jpg +- data/imagenet-r/n01882714/cartoon_25.jpg +- data/imagenet-r/n01833805/tattoo_24.jpg +- data/imagenet-r/n01494475/misc_81.jpg +- data/imagenet-r/n03345487/videogame_15.jpg +- data/imagenet-r/n04086273/deviantart_4.jpg +- data/imagenet-r/n12267677/deviantart_26.jpg +- data/imagenet-r/n01882714/toy_12.jpg +- data/imagenet-r/n04536866/art_6.jpg +- data/imagenet-r/n02480855/tattoo_36.jpg +- data/imagenet-r/n02051845/sketch_22.jpg +- data/imagenet-r/n07734744/videogame_47.jpg +- data/imagenet-r/n07614500/misc_5.jpg +- data/imagenet-r/n09472597/embroidery_6.jpg +- data/imagenet-r/n04487394/sketch_14.jpg +- data/imagenet-r/n02099601/misc_108.jpg +- data/imagenet-r/n02950826/videogame_1.jpg +- data/imagenet-r/n04141076/misc_5.jpg +- data/imagenet-r/n07697313/cartoon_38.jpg +- data/imagenet-r/n04409515/cartoon_13.jpg +- data/imagenet-r/n02966193/deviantart_3.jpg +- data/imagenet-r/n02071294/deviantart_20.jpg +- data/imagenet-r/n02085620/sketch_5.jpg +- data/imagenet-r/n07880968/deviantart_14.jpg +- data/imagenet-r/n01534433/cartoon_0.jpg +- data/imagenet-r/n03345487/videogame_10.jpg +- data/imagenet-r/n07720875/misc_0.jpg +- data/imagenet-r/n02088364/misc_38.jpg +- data/imagenet-r/n04552348/deviantart_27.jpg +- data/imagenet-r/n02317335/misc_2.jpg +- data/imagenet-r/n01860187/tattoo_8.jpg +- data/imagenet-r/n01944390/misc_84.jpg +- data/imagenet-r/n04266014/misc_16.jpg +- data/imagenet-r/n04266014/misc_4.jpg +- data/imagenet-r/n02088238/misc_58.jpg +- data/imagenet-r/n02843684/misc_5.jpg +- data/imagenet-r/n02797295/misc_24.jpg +- data/imagenet-r/n02108915/misc_8.jpg +- data/imagenet-r/n02268443/misc_55.jpg +- data/imagenet-r/n02939185/sketch_12.jpg +- data/imagenet-r/n07697537/misc_47.jpg +- data/imagenet-r/n03710193/misc_7.jpg +- data/imagenet-r/n02108089/sketch_17.jpg +- data/imagenet-r/n02108915/sketch_1.jpg +- data/imagenet-r/n07734744/graffiti_29.jpg +- data/imagenet-r/n02391049/misc_104.jpg +- data/imagenet-r/n04118538/sketch_9.jpg +- data/imagenet-r/n02110958/sticker_0.jpg +- data/imagenet-r/n02363005/cartoon_40.jpg +- data/imagenet-r/n02797295/sketch_11.jpg +- data/imagenet-r/n01944390/deviantart_9.jpg +- data/imagenet-r/n02395406/sticker_4.jpg +- data/imagenet-r/n04266014/painting_10.jpg +- data/imagenet-r/n07753592/misc_77.jpg +- data/imagenet-r/n02102318/sketch_13.jpg +- data/imagenet-r/n02110185/sketch_16.jpg +- data/imagenet-r/n02346627/tattoo_0.jpg +- data/imagenet-r/n03594945/misc_15.jpg +- data/imagenet-r/n02445715/cartoon_33.jpg +- data/imagenet-r/n03481172/painting_4.jpg +- data/imagenet-r/n02480855/origami_4.jpg +- data/imagenet-r/n02226429/sculpture_23.jpg +- data/imagenet-r/n02480855/sketch_16.jpg +- data/imagenet-r/n02129604/toy_7.jpg +- data/imagenet-r/n02119022/misc_119.jpg +- data/imagenet-r/n02130308/graffiti_3.jpg +- data/imagenet-r/n01694178/videogame_3.jpg +- data/imagenet-r/n04552348/misc_15.jpg +- data/imagenet-r/n01614925/tattoo_30.jpg +- data/imagenet-r/n02165456/toy_22.jpg +- data/imagenet-r/n02395406/cartoon_24.jpg +- data/imagenet-r/n07718472/cartoon_12.jpg +- data/imagenet-r/n02398521/toy_7.jpg +- data/imagenet-r/n02950826/art_1.jpg +- data/imagenet-r/n02279972/painting_4.jpg +- data/imagenet-r/n02510455/misc_113.jpg +- data/imagenet-r/n01644373/graffiti_0.jpg +- data/imagenet-r/n02128385/sketch_7.jpg +- data/imagenet-r/n03710193/sketch_22.jpg +- data/imagenet-r/n02086240/misc_7.jpg +- data/imagenet-r/n12267677/misc_2.jpg +- data/imagenet-r/n02823750/cartoon_7.jpg +- data/imagenet-r/n01833805/tattoo_75.jpg +- data/imagenet-r/n01614925/cartoon_11.jpg +- data/imagenet-r/n01843383/cartoon_22.jpg +- data/imagenet-r/n02165456/sketch_13.jpg +- data/imagenet-r/n02410509/cartoon_16.jpg +- data/imagenet-r/n07753592/misc_173.jpg +- data/imagenet-r/n01855672/painting_11.jpg +- data/imagenet-r/n02966193/graphic_1.jpg +- data/imagenet-r/n02655020/misc_28.jpg +- data/imagenet-r/n02325366/sketch_8.jpg +- data/imagenet-r/n02112018/misc_33.jpg +- data/imagenet-r/n03372029/sketch_11.jpg +- data/imagenet-r/n02268443/misc_84.jpg +- data/imagenet-r/n07734744/graffiti_50.jpg +- data/imagenet-r/n02510455/misc_79.jpg +- data/imagenet-r/n02363005/sticker_1.jpg +- data/imagenet-r/n02939185/sketch_22.jpg +- data/imagenet-r/n02951358/sketch_12.jpg +- data/imagenet-r/n02423022/graphic_4.jpg +- data/imagenet-r/n04536866/cartoon_24.jpg +- data/imagenet-r/n02268443/misc_140.jpg +- data/imagenet-r/n01630670/sketch_14.jpg +- data/imagenet-r/n02128385/painting_7.jpg +- data/imagenet-r/n02119022/misc_6.jpg +- data/imagenet-r/n03124170/deviantart_7.jpg +- data/imagenet-r/n07718472/sculpture_2.jpg +- data/imagenet-r/n01882714/cartoon_17.jpg +- data/imagenet-r/n03124170/art_15.jpg +- data/imagenet-r/n09472597/painting_14.jpg +- data/imagenet-r/n02106550/tattoo_3.jpg +- data/imagenet-r/n02346627/sculpture_1.jpg +- data/imagenet-r/n04465501/videogame_0.jpg +- data/imagenet-r/n02165456/toy_15.jpg +- data/imagenet-r/n02134084/misc_52.jpg +- data/imagenet-r/n01986214/cartoon_9.jpg +- data/imagenet-r/n02802426/tattoo_4.jpg +- data/imagenet-r/n02091032/misc_18.jpg +- data/imagenet-r/n03372029/cartoon_0.jpg +- data/imagenet-r/n04133789/cartoon_14.jpg +- data/imagenet-r/n09835506/videogame_12.jpg +- data/imagenet-r/n02841315/sculpture_4.jpg +- data/imagenet-r/n01843383/painting_24.jpg +- data/imagenet-r/n01833805/sketch_12.jpg +- data/imagenet-r/n07753275/painting_0.jpg +- data/imagenet-r/n02363005/videogame_5.jpg +- data/imagenet-r/n02051845/painting_13.jpg +- data/imagenet-r/n02607072/misc_68.jpg +- data/imagenet-r/n01677366/sketch_11.jpg +- data/imagenet-r/n02097298/misc_75.jpg +- data/imagenet-r/n01770393/tattoo_15.jpg +- data/imagenet-r/n01518878/painting_6.jpg +- data/imagenet-r/n04141076/tattoo_3.jpg +- data/imagenet-r/n02007558/cartoon_22.jpg +- data/imagenet-r/n04141076/painting_6.jpg +- data/imagenet-r/n04118538/cartoon_9.jpg +- data/imagenet-r/n04192698/embroidery_4.jpg +- data/imagenet-r/n03630383/sketch_22.jpg +- data/imagenet-r/n07714990/toy_14.jpg +- data/imagenet-r/n09835506/sculpture_7.jpg +- data/imagenet-r/n03930630/sketch_17.jpg +- data/imagenet-r/n07720875/cartoon_11.jpg +- data/imagenet-r/n02071294/art_11.jpg +- data/imagenet-r/n01484850/deviantart_24.jpg +- data/imagenet-r/n02106030/painting_4.jpg +- data/imagenet-r/n07714990/painting_8.jpg +- data/imagenet-r/n02906734/sketch_11.jpg +- data/imagenet-r/n01632777/deviantart_21.jpg +- data/imagenet-r/n07697313/art_18.jpg +- data/imagenet-r/n07734744/embroidery_2.jpg +- data/imagenet-r/n02128385/toy_1.jpg +- data/imagenet-r/n03498962/sketch_5.jpg +- data/imagenet-r/n02226429/art_1.jpg +- data/imagenet-r/n03481172/graffiti_3.jpg +- data/imagenet-r/n03498962/cartoon_5.jpg +- data/imagenet-r/n02106550/misc_3.jpg +- data/imagenet-r/n02391049/misc_27.jpg +- data/imagenet-r/n01630670/toy_2.jpg +- data/imagenet-r/n04310018/videogame_28.jpg +- data/imagenet-r/n02486410/sketch_11.jpg +- data/imagenet-r/n07614500/embroidery_10.jpg +- data/imagenet-r/n04465501/videogame_28.jpg +- data/imagenet-r/n03124170/toy_1.jpg +- data/imagenet-r/n02096585/misc_26.jpg +- data/imagenet-r/n02226429/sculpture_4.jpg +- data/imagenet-r/n01910747/tattoo_26.jpg +- data/imagenet-r/n02119022/sketch_20.jpg +- data/imagenet-r/n03773504/sculpture_1.jpg +- data/imagenet-r/n04192698/painting_4.jpg +- data/imagenet-r/n02110185/painting_5.jpg +- data/imagenet-r/n01882714/deviantart_33.jpg +- data/imagenet-r/n02094433/misc_50.jpg +- data/imagenet-r/n02085620/misc_8.jpg +- data/imagenet-r/n01910747/tattoo_45.jpg +- data/imagenet-r/n01833805/painting_38.jpg +- data/imagenet-r/n02108915/misc_132.jpg +- data/imagenet-r/n02655020/misc_24.jpg +- data/imagenet-r/n02110958/embroidery_15.jpg +- data/imagenet-r/n02110185/cartoon_22.jpg +- data/imagenet-r/n02793495/painting_14.jpg +- data/imagenet-r/n02128757/sketch_14.jpg +- data/imagenet-r/n04133789/cartoon_5.jpg +- data/imagenet-r/n04389033/deviantart_7.jpg +- data/imagenet-r/n03947888/videogame_21.jpg +- data/imagenet-r/n04133789/cartoon_4.jpg +- data/imagenet-r/n02071294/deviantart_19.jpg +- data/imagenet-r/n07753275/cartoon_16.jpg +- data/imagenet-r/n02051845/tattoo_1.jpg +- data/imagenet-r/n04275548/painting_1.jpg +- data/imagenet-r/n02395406/sketch_10.jpg +- data/imagenet-r/n01518878/cartoon_26.jpg +- data/imagenet-r/n02655020/deviantart_12.jpg +- data/imagenet-r/n02138441/graffiti_9.jpg +- data/imagenet-r/n01843383/art_7.jpg +- data/imagenet-r/n02672831/cartoon_21.jpg +- data/imagenet-r/n02123045/painting_20.jpg +- data/imagenet-r/n02395406/graffiti_8.jpg +- data/imagenet-r/n02112018/sketch_0.jpg +- data/imagenet-r/n02447366/sticker_6.jpg +- data/imagenet-r/n03372029/art_12.jpg +- data/imagenet-r/n04310018/sticker_4.jpg +- data/imagenet-r/n02480495/art_2.jpg +- data/imagenet-r/n01882714/art_16.jpg +- data/imagenet-r/n02085620/videogame_2.jpg +- data/imagenet-r/n03124170/art_16.jpg +- data/imagenet-r/n07749582/painting_44.jpg +- data/imagenet-r/n04347754/art_3.jpg +- data/imagenet-r/n01632777/deviantart_17.jpg +- data/imagenet-r/n02802426/sculpture_3.jpg +- data/imagenet-r/n07745940/misc_23.jpg +- data/imagenet-r/n02992529/sketch_20.jpg +- data/imagenet-r/n07873807/videogame_5.jpg +- data/imagenet-r/n02071294/cartoon_13.jpg +- data/imagenet-r/n09835506/sketch_16.jpg +- data/imagenet-r/n02051845/art_4.jpg +- data/imagenet-r/n07753275/embroidery_8.jpg +- data/imagenet-r/n02226429/origami_4.jpg +- data/imagenet-r/n02110341/misc_96.jpg +- data/imagenet-r/n10565667/toy_13.jpg +- data/imagenet-r/n07697313/embroidery_3.jpg +- data/imagenet-r/n01833805/graffiti_9.jpg +- data/imagenet-r/n03676483/painting_0.jpg +- data/imagenet-r/n02112137/misc_9.jpg +- data/imagenet-r/n01498041/sketch_17.jpg +- data/imagenet-r/n02206856/toy_44.jpg +- data/imagenet-r/n01616318/cartoon_25.jpg +- data/imagenet-r/n07768694/embroidery_2.jpg +- data/imagenet-r/n01882714/painting_1.jpg +- data/imagenet-r/n02423022/misc_3.jpg +- data/imagenet-r/n07697537/sketch_23.jpg +- data/imagenet-r/n04552348/videogame_30.jpg +- data/imagenet-r/n03649909/toy_29.jpg +- data/imagenet-r/n01531178/sketch_1.jpg +- data/imagenet-r/n04522168/painting_21.jpg +- data/imagenet-r/n03124170/painting_14.jpg +- data/imagenet-r/n04310018/art_17.jpg +- data/imagenet-r/n02841315/sculpture_17.jpg +- data/imagenet-r/n01534433/sketch_22.jpg +- data/imagenet-r/n02110341/misc_93.jpg +- data/imagenet-r/n02110958/cartoon_40.jpg +- data/imagenet-r/n02948072/sketch_18.jpg +- data/imagenet-r/n01518878/origami_2.jpg +- data/imagenet-r/n02483362/sketch_12.jpg +- data/imagenet-r/n01514859/art_3.jpg +- data/imagenet-r/n04192698/cartoon_13.jpg +- data/imagenet-r/n07614500/deviantart_5.jpg +- data/imagenet-r/n03495258/misc_4.jpg +- data/imagenet-r/n01833805/graffiti_11.jpg +- data/imagenet-r/n02980441/sketch_21.jpg +- data/imagenet-r/n04192698/cartoon_16.jpg +- data/imagenet-r/n01944390/misc_63.jpg +- data/imagenet-r/n02437616/embroidery_0.jpg +- data/imagenet-r/n02134084/videogame_7.jpg +- data/imagenet-r/n04254680/sketch_23.jpg +- data/imagenet-r/n07734744/videogame_5.jpg +- data/imagenet-r/n02138441/painting_15.jpg +- data/imagenet-r/n02233338/misc_36.jpg +- data/imagenet-r/n01494475/misc_40.jpg +- data/imagenet-r/n07714571/sketch_19.jpg +- data/imagenet-r/n02129604/sketch_20.jpg +- data/imagenet-r/n02098286/misc_33.jpg +- data/imagenet-r/n01944390/misc_88.jpg +- data/imagenet-r/n07768694/sketch_9.jpg +- data/imagenet-r/n04310018/deviantart_6.jpg +- data/imagenet-r/n12267677/deviantart_16.jpg +- data/imagenet-r/n01833805/sketch_16.jpg +- data/imagenet-r/n07753592/misc_83.jpg +- data/imagenet-r/n04086273/sticker_10.jpg +- data/imagenet-r/n02447366/sculpture_5.jpg +- data/imagenet-r/n02483362/sketch_13.jpg +- data/imagenet-r/n02108915/misc_69.jpg +- data/imagenet-r/n07697313/art_25.jpg +- data/imagenet-r/n02233338/sketch_6.jpg +- data/imagenet-r/n07720875/painting_22.jpg +- data/imagenet-r/n04141076/cartoon_65.jpg +- data/imagenet-r/n02099601/sketch_1.jpg +- data/imagenet-r/n02088364/misc_0.jpg +- data/imagenet-r/n02980441/embroidery_0.jpg +- data/imagenet-r/n02814860/painting_46.jpg +- data/imagenet-r/n07880968/cartoon_5.jpg +- data/imagenet-r/n02112018/misc_48.jpg +- data/imagenet-r/n02279972/art_5.jpg +- data/imagenet-r/n02128757/painting_32.jpg +- data/imagenet-r/n02098286/sketch_13.jpg +- data/imagenet-r/n03452741/sketch_12.jpg +- data/imagenet-r/n02106030/sketch_0.jpg +- data/imagenet-r/n04275548/origami_0.jpg +- data/imagenet-r/n03495258/misc_2.jpg +- data/imagenet-r/n02092339/sketch_16.jpg +- data/imagenet-r/n07693725/deviantart_1.jpg +- data/imagenet-r/n09472597/cartoon_0.jpg +- data/imagenet-r/n01748264/misc_4.jpg +- data/imagenet-r/n02134084/tattoo_1.jpg +- data/imagenet-r/n02672831/sketch_23.jpg +- data/imagenet-r/n02113799/misc_11.jpg +- data/imagenet-r/n01614925/tattoo_49.jpg +- data/imagenet-r/n02106166/painting_12.jpg +- data/imagenet-r/n02102318/misc_60.jpg +- data/imagenet-r/n04310018/art_3.jpg +- data/imagenet-r/n02096585/misc_64.jpg +- data/imagenet-r/n01498041/tattoo_4.jpg +- data/imagenet-r/n03710193/misc_24.jpg +- data/imagenet-r/n03947888/tattoo_4.jpg +- data/imagenet-r/n01986214/deviantart_8.jpg +- data/imagenet-r/n02009912/misc_48.jpg +- data/imagenet-r/n02129165/cartoon_5.jpg +- data/imagenet-r/n10565667/deviantart_26.jpg +- data/imagenet-r/n02114367/sketch_16.jpg +- data/imagenet-r/n04465501/tattoo_14.jpg +- data/imagenet-r/n01774750/sculpture_5.jpg +- data/imagenet-r/n04275548/misc_3.jpg +- data/imagenet-r/n02410509/toy_0.jpg +- data/imagenet-r/n01882714/tattoo_6.jpg +- data/imagenet-r/n01677366/misc_21.jpg +- data/imagenet-r/n02106550/misc_25.jpg +- data/imagenet-r/n07734744/toy_38.jpg +- data/imagenet-r/n02802426/sticker_5.jpg +- data/imagenet-r/n02797295/sketch_1.jpg +- data/imagenet-r/n02219486/sculpture_14.jpg +- data/imagenet-r/n02356798/cartoon_1.jpg +- data/imagenet-r/n02906734/origami_5.jpg +- data/imagenet-r/n02134084/misc_95.jpg +- data/imagenet-r/n01855672/toy_4.jpg +- data/imagenet-r/n01847000/toy_7.jpg +- data/imagenet-r/n01616318/sculpture_1.jpg +- data/imagenet-r/n01694178/cartoon_15.jpg +- data/imagenet-r/n04086273/sketch_13.jpg +- data/imagenet-r/n03481172/cartoon_2.jpg +- data/imagenet-r/n03594945/sketch_18.jpg +- data/imagenet-r/n02793495/cartoon_5.jpg +- data/imagenet-r/n03272010/graffiti_1.jpg +- data/imagenet-r/n02607072/misc_90.jpg +- data/imagenet-r/n02236044/origami_19.jpg +- data/imagenet-r/n01833805/embroidery_17.jpg +- data/imagenet-r/n02110185/painting_10.jpg +- data/imagenet-r/n02129604/sketch_4.jpg +- data/imagenet-r/n02410509/sculpture_19.jpg +- data/imagenet-r/n01833805/graphic_1.jpg +- data/imagenet-r/n03602883/misc_18.jpg +- data/imagenet-r/n03372029/sculpture_27.jpg +- data/imagenet-r/n01847000/graphic_0.jpg +- data/imagenet-r/n02071294/painting_14.jpg +- data/imagenet-r/n02948072/cartoon_14.jpg +- data/imagenet-r/n02088238/misc_89.jpg +- data/imagenet-r/n02108089/misc_52.jpg +- data/imagenet-r/n02099601/misc_71.jpg +- data/imagenet-r/n01531178/art_16.jpg +- data/imagenet-r/n07734744/graffiti_6.jpg +- data/imagenet-r/n02110341/misc_85.jpg +- data/imagenet-r/n02097298/misc_24.jpg +- data/imagenet-r/n01843383/painting_21.jpg +- data/imagenet-r/n02110341/misc_101.jpg +- data/imagenet-r/n02129165/cartoon_20.jpg +- data/imagenet-r/n07745940/sculpture_0.jpg +- data/imagenet-r/n02481823/toy_9.jpg +- data/imagenet-r/n03494278/cartoon_7.jpg +- data/imagenet-r/n02814860/deviantart_7.jpg +- data/imagenet-r/n03947888/painting_1.jpg +- data/imagenet-r/n02206856/toy_14.jpg +- data/imagenet-r/n02085620/tattoo_5.jpg +- data/imagenet-r/n02510455/misc_75.jpg +- data/imagenet-r/n07697537/sketch_21.jpg +- data/imagenet-r/n02447366/graffiti_0.jpg +- data/imagenet-r/n01944390/misc_155.jpg +- data/imagenet-r/n04254680/videogame_15.jpg +- data/imagenet-r/n10565667/painting_3.jpg +- data/imagenet-r/n02129604/sticker_5.jpg +- data/imagenet-r/n02672831/cartoon_5.jpg +- data/imagenet-r/n04552348/deviantart_8.jpg +- data/imagenet-r/n02110185/painting_37.jpg +- data/imagenet-r/n02007558/embroidery_14.jpg +- data/imagenet-r/n02108915/misc_59.jpg +- data/imagenet-r/n02391049/misc_121.jpg +- data/imagenet-r/n02769748/sketch_27.jpg +- data/imagenet-r/n02110185/painting_36.jpg +- data/imagenet-r/n02088364/misc_33.jpg +- data/imagenet-r/n02110185/sketch_17.jpg +- data/imagenet-r/n01694178/art_11.jpg +- data/imagenet-r/n02398521/sculpture_4.jpg +- data/imagenet-r/n01632777/sketch_13.jpg +- data/imagenet-r/n04536866/sculpture_1.jpg +- data/imagenet-r/n02088094/misc_34.jpg +- data/imagenet-r/n04552348/art_1.jpg +- data/imagenet-r/n02480855/sculpture_11.jpg +- data/imagenet-r/n01514859/deviantart_4.jpg +- data/imagenet-r/n04266014/misc_14.jpg +- data/imagenet-r/n01616318/cartoon_4.jpg +- data/imagenet-r/n02363005/graphic_0.jpg +- data/imagenet-r/n07734744/sketch_18.jpg +- data/imagenet-r/n02130308/graphic_3.jpg +- data/imagenet-r/n02823750/cartoon_2.jpg +- data/imagenet-r/n01443537/art_1.jpg +- data/imagenet-r/n04275548/deviantart_4.jpg +- data/imagenet-r/n02165456/tattoo_11.jpg +- data/imagenet-r/n03481172/toy_13.jpg +- data/imagenet-r/n09472597/cartoon_25.jpg +- data/imagenet-r/n02797295/sketch_17.jpg +- data/imagenet-r/n01498041/sketch_21.jpg +- data/imagenet-r/n02114367/sketch_13.jpg +- data/imagenet-r/n03930630/misc_21.jpg +- data/imagenet-r/n02138441/painting_6.jpg +- data/imagenet-r/n02088466/misc_0.jpg +- data/imagenet-r/n02113023/misc_38.jpg +- data/imagenet-r/n02071294/origami_4.jpg +- data/imagenet-r/n03372029/painting_14.jpg +- data/imagenet-r/n02236044/graffiti_4.jpg +- data/imagenet-r/n01833805/tattoo_83.jpg +- data/imagenet-r/n02437616/art_9.jpg +- data/imagenet-r/n04389033/sketch_2.jpg +- data/imagenet-r/n02410509/origami_1.jpg +- data/imagenet-r/n01484850/painting_26.jpg +- data/imagenet-r/n03372029/deviantart_2.jpg +- data/imagenet-r/n07745940/misc_13.jpg +- data/imagenet-r/n01632777/toy_3.jpg +- data/imagenet-r/n02226429/sculpture_10.jpg +- data/imagenet-r/n02096585/misc_89.jpg +- data/imagenet-r/n02113023/misc_21.jpg +- data/imagenet-r/n02099601/misc_90.jpg +- data/imagenet-r/n02108915/misc_118.jpg +- data/imagenet-r/n03947888/sketch_0.jpg +- data/imagenet-r/n01882714/cartoon_31.jpg +- data/imagenet-r/n04266014/toy_30.jpg +- data/imagenet-r/n02236044/sculpture_14.jpg +- data/imagenet-r/n01616318/painting_13.jpg +- data/imagenet-r/n01494475/misc_2.jpg +- data/imagenet-r/n02094433/misc_12.jpg +- data/imagenet-r/n09472597/deviantart_14.jpg +- data/imagenet-r/n07753592/misc_82.jpg +- data/imagenet-r/n03947888/videogame_22.jpg +- data/imagenet-r/n07920052/cartoon_9.jpg +- data/imagenet-r/n02391049/misc_29.jpg +- data/imagenet-r/n02165456/tattoo_18.jpg +- data/imagenet-r/n04325704/cartoon_12.jpg +- data/imagenet-r/n04536866/sketch_19.jpg +- data/imagenet-r/n02268443/misc_175.jpg +- data/imagenet-r/n02447366/graffiti_6.jpg +- data/imagenet-r/n07734744/sculpture_9.jpg +- data/imagenet-r/n07614500/deviantart_11.jpg +- data/imagenet-r/n02769748/cartoon_0.jpg +- data/imagenet-r/n02129165/sketch_7.jpg +- data/imagenet-r/n02092339/misc_42.jpg +- data/imagenet-r/n02096585/misc_82.jpg +- data/imagenet-r/n03888257/sticker_2.jpg +- data/imagenet-r/n02236044/painting_7.jpg +- data/imagenet-r/n03773504/sketch_7.jpg +- data/imagenet-r/n01882714/toy_21.jpg +- data/imagenet-r/n02363005/cartoon_0.jpg +- data/imagenet-r/n02391049/misc_22.jpg +- data/imagenet-r/n01677366/misc_12.jpg +- data/imagenet-r/n02950826/videogame_8.jpg +- data/imagenet-r/n01518878/cartoon_57.jpg +- data/imagenet-r/n02480855/cartoon_4.jpg +- data/imagenet-r/n02906734/cartoon_44.jpg +- data/imagenet-r/n07697313/art_36.jpg +- data/imagenet-r/n03467068/cartoon_1.jpg +- data/imagenet-r/n04552348/art_21.jpg +- data/imagenet-r/n02123045/painting_30.jpg +- data/imagenet-r/n02114367/misc_0.jpg +- data/imagenet-r/n02165456/tattoo_38.jpg +- data/imagenet-r/n07749582/painting_2.jpg +- data/imagenet-r/n02129165/cartoon_9.jpg +- data/imagenet-r/n07753592/sketch_5.jpg +- data/imagenet-r/n02128757/cartoon_3.jpg +- data/imagenet-r/n03495258/toy_1.jpg +- data/imagenet-r/n02106550/misc_61.jpg +- data/imagenet-r/n01616318/painting_14.jpg +- data/imagenet-r/n02948072/graphic_4.jpg +- data/imagenet-r/n09835506/deviantart_35.jpg +- data/imagenet-r/n07695742/deviantart_0.jpg +- data/imagenet-r/n02802426/videogame_24.jpg +- data/imagenet-r/n04536866/graphic_1.jpg +- data/imagenet-r/n02085620/misc_17.jpg +- data/imagenet-r/n02268443/misc_148.jpg +- data/imagenet-r/n03947888/videogame_16.jpg +- data/imagenet-r/n02165456/tattoo_61.jpg +- data/imagenet-r/n03424325/misc_87.jpg +- data/imagenet-r/n07614500/sketch_11.jpg +- data/imagenet-r/n02808440/cartoon_14.jpg +- data/imagenet-r/n02445715/videogame_3.jpg +- data/imagenet-r/n02226429/graffiti_7.jpg +- data/imagenet-r/n01910747/painting_2.jpg +- data/imagenet-r/n02437616/deviantart_8.jpg +- data/imagenet-r/n03710193/sketch_17.jpg +- data/imagenet-r/n04591713/graphic_0.jpg +- data/imagenet-r/n01443537/embroidery_5.jpg +- data/imagenet-r/n01882714/tattoo_9.jpg +- data/imagenet-r/n02317335/painting_12.jpg +- data/imagenet-r/n04192698/cartoon_7.jpg +- data/imagenet-r/n02364673/cartoon_5.jpg +- data/imagenet-r/n03930630/sketch_24.jpg +- data/imagenet-r/n09472597/sketch_17.jpg +- data/imagenet-r/n01632777/sketch_16.jpg +- data/imagenet-r/n02346627/painting_10.jpg +- data/imagenet-r/n02206856/cartoon_45.jpg +- data/imagenet-r/n01677366/misc_4.jpg +- data/imagenet-r/n04254680/toy_1.jpg +- data/imagenet-r/n02391049/misc_31.jpg +- data/imagenet-r/n01694178/origami_4.jpg +- data/imagenet-r/n04465501/deviantart_11.jpg +- data/imagenet-r/n01518878/cartoon_33.jpg +- data/imagenet-r/n04389033/deviantart_6.jpg +- data/imagenet-r/n02701002/videogame_9.jpg +- data/imagenet-r/n02797295/misc_67.jpg +- data/imagenet-r/n02117135/sketch_4.jpg +- data/imagenet-r/n07614500/art_5.jpg +- data/imagenet-r/n04552348/art_10.jpg +- data/imagenet-r/n01484850/painting_11.jpg +- data/imagenet-r/n02206856/cartoon_28.jpg +- data/imagenet-r/n02071294/videogame_0.jpg +- data/imagenet-r/n04310018/graffiti_4.jpg +- data/imagenet-r/n01748264/sketch_19.jpg +- data/imagenet-r/n01748264/misc_19.jpg +- data/imagenet-r/n07768694/painting_3.jpg +- data/imagenet-r/n02841315/toy_0.jpg +- data/imagenet-r/n02206856/cartoon_5.jpg +- data/imagenet-r/n07768694/art_2.jpg +- data/imagenet-r/n02363005/sculpture_3.jpg +- data/imagenet-r/n02009912/sketch_2.jpg +- data/imagenet-r/n02391049/sketch_20.jpg +- data/imagenet-r/n01514859/painting_12.jpg +- data/imagenet-r/n09835506/misc_21.jpg +- data/imagenet-r/n01843383/deviantart_77.jpg +- data/imagenet-r/n02948072/deviantart_7.jpg +- data/imagenet-r/n02066245/sketch_1.jpg +- data/imagenet-r/n02950826/cartoon_0.jpg +- data/imagenet-r/n01443537/painting_7.jpg +- data/imagenet-r/n02883205/cartoon_27.jpg +- data/imagenet-r/n07880968/sketch_15.jpg +- data/imagenet-r/n07873807/misc_12.jpg +- data/imagenet-r/n04487394/art_4.jpg +- data/imagenet-r/n04552348/videogame_22.jpg +- data/imagenet-r/n07749582/cartoon_1.jpg +- data/imagenet-r/n02655020/deviantart_3.jpg +- data/imagenet-r/n04147183/sketch_18.jpg +- data/imagenet-r/n09472597/misc_4.jpg +- data/imagenet-r/n03930630/sketch_21.jpg +- data/imagenet-r/n02110341/misc_164.jpg +- data/imagenet-r/n07720875/deviantart_19.jpg +- data/imagenet-r/n02007558/cartoon_9.jpg +- data/imagenet-r/n03773504/videogame_7.jpg +- data/imagenet-r/n03452741/sticker_0.jpg +- data/imagenet-r/n01986214/toy_4.jpg +- data/imagenet-r/n02112137/sketch_7.jpg +- data/imagenet-r/n03272010/deviantart_18.jpg +- data/imagenet-r/n01944390/tattoo_3.jpg +- data/imagenet-r/n02607072/videogame_6.jpg +- data/imagenet-r/n02096585/misc_81.jpg +- data/imagenet-r/n02051845/art_6.jpg +- data/imagenet-r/n02447366/painting_11.jpg +- data/imagenet-r/n02951358/embroidery_1.jpg +- data/imagenet-r/n02119022/misc_50.jpg +- data/imagenet-r/n02672831/deviantart_2.jpg +- data/imagenet-r/n03594945/videogame_25.jpg +- data/imagenet-r/n02051845/cartoon_5.jpg +- data/imagenet-r/n01770393/origami_13.jpg +- data/imagenet-r/n04536866/painting_26.jpg +- data/imagenet-r/n04146614/art_0.jpg +- data/imagenet-r/n04591713/sketch_8.jpg +- data/imagenet-r/n02391049/tattoo_4.jpg +- data/imagenet-r/n02391049/misc_75.jpg +- data/imagenet-r/n01694178/tattoo_13.jpg +- data/imagenet-r/n01910747/misc_10.jpg +- data/imagenet-r/n02391049/misc_110.jpg +- data/imagenet-r/n01882714/art_6.jpg +- data/imagenet-r/n02445715/videogame_4.jpg +- data/imagenet-r/n01518878/cartoon_12.jpg +- data/imagenet-r/n02138441/painting_18.jpg +- data/imagenet-r/n02909870/graphic_11.jpg +- data/imagenet-r/n01498041/sketch_20.jpg +- data/imagenet-r/n02130308/graphic_0.jpg +- data/imagenet-r/n04141076/cartoon_61.jpg +- data/imagenet-r/n03773504/sculpture_2.jpg +- data/imagenet-r/n02980441/cartoon_12.jpg +- data/imagenet-r/n01944390/misc_101.jpg +- data/imagenet-r/n09835506/sketch_12.jpg +- data/imagenet-r/n02128757/cartoon_17.jpg +- data/imagenet-r/n01514859/misc_5.jpg +- data/imagenet-r/n02802426/cartoon_2.jpg +- data/imagenet-r/n02088364/sketch_1.jpg +- data/imagenet-r/n02123045/cartoon_29.jpg +- data/imagenet-r/n07753275/painting_15.jpg +- data/imagenet-r/n02138441/sticker_1.jpg +- data/imagenet-r/n03495258/videogame_5.jpg +- data/imagenet-r/n02102318/sketch_11.jpg +- data/imagenet-r/n07697313/deviantart_26.jpg +- data/imagenet-r/n07745940/painting_10.jpg +- data/imagenet-r/n02110341/tattoo_3.jpg +- data/imagenet-r/n04591713/painting_41.jpg +- data/imagenet-r/n01531178/painting_39.jpg +- data/imagenet-r/n02391049/deviantart_0.jpg +- data/imagenet-r/n03930630/videogame_4.jpg +- data/imagenet-r/n04275548/cartoon_4.jpg +- data/imagenet-r/n02071294/deviantart_32.jpg +- data/imagenet-r/n02129604/deviantart_23.jpg +- data/imagenet-r/n02112018/misc_26.jpg +- data/imagenet-r/n07734744/videogame_31.jpg +- data/imagenet-r/n07745940/sketch_9.jpg +- data/imagenet-r/n02950826/videogame_10.jpg +- data/imagenet-r/n01820546/painting_3.jpg +- data/imagenet-r/n02007558/embroidery_31.jpg +- data/imagenet-r/n01484850/tattoo_18.jpg +- data/imagenet-r/n01514859/painting_6.jpg +- data/imagenet-r/n01514859/embroidery_4.jpg +- data/imagenet-r/n04310018/misc_9.jpg +- data/imagenet-r/n03124170/misc_12.jpg +- data/imagenet-r/n02088364/sketch_3.jpg +- data/imagenet-r/n04275548/videogame_12.jpg +- data/imagenet-r/n03495258/sketch_13.jpg +- data/imagenet-r/n02009912/misc_3.jpg +- data/imagenet-r/n03345487/sketch_14.jpg +- data/imagenet-r/n01847000/cartoon_2.jpg +- data/imagenet-r/n02108089/misc_4.jpg +- data/imagenet-r/n04389033/videogame_56.jpg +- data/imagenet-r/n03710193/sketch_16.jpg +- data/imagenet-r/n03649909/toy_16.jpg +- data/imagenet-r/n02364673/sketch_4.jpg +- data/imagenet-r/n02481823/art_13.jpg +- data/imagenet-r/n02279972/painting_26.jpg +- data/imagenet-r/n02233338/misc_12.jpg +- data/imagenet-r/n01531178/tattoo_5.jpg +- data/imagenet-r/n02096585/misc_4.jpg +- data/imagenet-r/n02797295/sketch_6.jpg +- data/imagenet-r/n02909870/misc_0.jpg +- data/imagenet-r/n02219486/tattoo_9.jpg +- data/imagenet-r/n02099601/misc_94.jpg +- data/imagenet-r/n02102318/misc_61.jpg +- data/imagenet-r/n09472597/sketch_7.jpg +- data/imagenet-r/n01986214/painting_1.jpg +- data/imagenet-r/n02123045/painting_19.jpg +- data/imagenet-r/n01632777/sketch_1.jpg +- data/imagenet-r/n03494278/graffiti_1.jpg +- data/imagenet-r/n07734744/videogame_13.jpg +- data/imagenet-r/n01630670/origami_0.jpg +- data/imagenet-r/n02356798/cartoon_11.jpg +- data/imagenet-r/n02110958/painting_32.jpg +- data/imagenet-r/n02119022/misc_65.jpg +- data/imagenet-r/n02129165/sculpture_18.jpg +- data/imagenet-r/n03424325/deviantart_7.jpg +- data/imagenet-r/n04254680/deviantart_33.jpg +- data/imagenet-r/n07734744/sculpture_4.jpg +- data/imagenet-r/n02951358/sketch_2.jpg +- data/imagenet-r/n02071294/embroidery_0.jpg +- data/imagenet-r/n03947888/toy_11.jpg +- data/imagenet-r/n02077923/misc_1.jpg +- data/imagenet-r/n02655020/misc_102.jpg +- data/imagenet-r/n02110958/painting_0.jpg +- data/imagenet-r/n02071294/tattoo_13.jpg +- data/imagenet-r/n02701002/videogame_8.jpg +- data/imagenet-r/n01514859/deviantart_20.jpg +- data/imagenet-r/n01677366/sketch_20.jpg +- data/imagenet-r/n02363005/toy_3.jpg +- data/imagenet-r/n04086273/sticker_3.jpg +- data/imagenet-r/n02134084/misc_72.jpg +- data/imagenet-r/n02268443/misc_88.jpg +- data/imagenet-r/n02279972/art_15.jpg +- data/imagenet-r/n02966193/toy_3.jpg +- data/imagenet-r/n02607072/misc_52.jpg +- data/imagenet-r/n02980441/sketch_4.jpg +- data/imagenet-r/n02092339/sketch_0.jpg +- data/imagenet-r/n03775071/sketch_6.jpg +- data/imagenet-r/n01614925/cartoon_16.jpg +- data/imagenet-r/n02085620/misc_67.jpg +- data/imagenet-r/n02398521/cartoon_26.jpg +- data/imagenet-r/n02802426/videogame_25.jpg +- data/imagenet-r/n04146614/videogame_16.jpg +- data/imagenet-r/n02129165/graffiti_11.jpg +- data/imagenet-r/n04552348/videogame_8.jpg +- data/imagenet-r/n01614925/art_5.jpg +- data/imagenet-r/n02843684/embroidery_3.jpg +- data/imagenet-r/n07697537/misc_80.jpg +- data/imagenet-r/n04536866/videogame_3.jpg +- data/imagenet-r/n02769748/sketch_1.jpg +- data/imagenet-r/n01986214/deviantart_0.jpg +- data/imagenet-r/n02510455/misc_98.jpg +- data/imagenet-r/n07749582/painting_31.jpg +- data/imagenet-r/n02364673/sketch_15.jpg +- data/imagenet-r/n12267677/deviantart_19.jpg +- data/imagenet-r/n02410509/graphic_3.jpg +- data/imagenet-r/n02056570/sketch_6.jpg +- data/imagenet-r/n02447366/sculpture_1.jpg +- data/imagenet-r/n03888257/deviantart_2.jpg +- data/imagenet-r/n07753275/embroidery_0.jpg +- data/imagenet-r/n02128757/painting_3.jpg +- data/imagenet-r/n02906734/sticker_2.jpg +- data/imagenet-r/n01833805/tattoo_78.jpg +- data/imagenet-r/n03773504/misc_1.jpg +- data/imagenet-r/n02607072/misc_2.jpg +- data/imagenet-r/n01514859/cartoon_23.jpg +- data/imagenet-r/n02486410/cartoon_2.jpg +- data/imagenet-r/n02113624/misc_8.jpg +- data/imagenet-r/n04275548/embroidery_6.jpg +- data/imagenet-r/n07697313/graffiti_3.jpg +- data/imagenet-r/n02110341/deviantart_2.jpg +- data/imagenet-r/n02114367/misc_65.jpg +- data/imagenet-r/n01910747/deviantart_6.jpg +- data/imagenet-r/n02128757/sculpture_0.jpg +- data/imagenet-r/n07734744/painting_17.jpg +- data/imagenet-r/n02233338/tattoo_10.jpg +- data/imagenet-r/n07697313/misc_12.jpg +- data/imagenet-r/n04141076/painting_3.jpg +- data/imagenet-r/n02526121/painting_9.jpg +- data/imagenet-r/n02948072/painting_13.jpg +- data/imagenet-r/n02088238/misc_25.jpg +- data/imagenet-r/n04536866/sketch_20.jpg +- data/imagenet-r/n01833805/deviantart_13.jpg +- data/imagenet-r/n02655020/videogame_23.jpg +- data/imagenet-r/n04086273/graffiti_6.jpg +- data/imagenet-r/n07768694/sketch_16.jpg +- data/imagenet-r/n02102318/misc_25.jpg +- data/imagenet-r/n02226429/embroidery_5.jpg +- data/imagenet-r/n02106550/sketch_15.jpg +- data/imagenet-r/n02480495/sculpture_6.jpg +- data/imagenet-r/n02206856/cartoon_40.jpg +- data/imagenet-r/n02071294/sketch_9.jpg +- data/imagenet-r/n01986214/cartoon_3.jpg +- data/imagenet-r/n02113624/misc_27.jpg +- data/imagenet-r/n02219486/sketch_9.jpg +- data/imagenet-r/n03594945/graffiti_4.jpg +- data/imagenet-r/n02797295/misc_64.jpg +- data/imagenet-r/n02119022/misc_13.jpg +- data/imagenet-r/n02843684/cartoon_7.jpg +- data/imagenet-r/n02119022/misc_15.jpg +- data/imagenet-r/n02108915/misc_66.jpg +- data/imagenet-r/n01882714/deviantart_12.jpg +- data/imagenet-r/n02206856/cartoon_65.jpg +- data/imagenet-r/n10565667/deviantart_13.jpg +- data/imagenet-r/n02814860/painting_8.jpg +- data/imagenet-r/n02356798/sketch_2.jpg +- data/imagenet-r/n02398521/toy_9.jpg +- data/imagenet-r/n02108089/misc_16.jpg +- data/imagenet-r/n02701002/tattoo_0.jpg +- data/imagenet-r/n02480495/painting_26.jpg +- data/imagenet-r/n02325366/misc_40.jpg +- data/imagenet-r/n02138441/painting_25.jpg +- data/imagenet-r/n01843383/sketch_6.jpg +- data/imagenet-r/n04487394/deviantart_4.jpg +- data/imagenet-r/n04141076/tattoo_8.jpg +- data/imagenet-r/n01847000/sculpture_5.jpg +- data/imagenet-r/n01944390/misc_25.jpg +- data/imagenet-r/n03649909/toy_15.jpg +- data/imagenet-r/n02051845/art_13.jpg +- data/imagenet-r/n09472597/videogame_6.jpg +- data/imagenet-r/n02948072/embroidery_17.jpg +- data/imagenet-r/n01784675/videogame_2.jpg +- data/imagenet-r/n02108089/misc_5.jpg +- data/imagenet-r/n01534433/sketch_9.jpg +- data/imagenet-r/n04310018/painting_9.jpg +- data/imagenet-r/n02110958/toy_4.jpg +- data/imagenet-r/n02119022/misc_96.jpg +- data/imagenet-r/n04409515/deviantart_5.jpg +- data/imagenet-r/n04275548/misc_6.jpg +- data/imagenet-r/n02051845/art_11.jpg +- data/imagenet-r/n01847000/embroidery_1.jpg +- data/imagenet-r/n02356798/toy_4.jpg +- data/imagenet-r/n02007558/graffiti_4.jpg +- data/imagenet-r/n02325366/sketch_17.jpg +- data/imagenet-r/n02129604/painting_24.jpg +- data/imagenet-r/n02279972/sculpture_3.jpg +- data/imagenet-r/n01531178/misc_2.jpg +- data/imagenet-r/n02510455/misc_114.jpg +- data/imagenet-r/n01944390/misc_108.jpg +- data/imagenet-r/n02391049/tattoo_0.jpg +- data/imagenet-r/n02086240/misc_14.jpg +- data/imagenet-r/n04310018/videogame_5.jpg +- data/imagenet-r/n02071294/art_6.jpg +- data/imagenet-r/n04310018/toy_16.jpg +- data/imagenet-r/n02096585/tattoo_31.jpg +- data/imagenet-r/n01833805/art_11.jpg +- data/imagenet-r/n02129165/cartoon_0.jpg +- data/imagenet-r/n02085620/videogame_1.jpg +- data/imagenet-r/n02480495/sculpture_2.jpg +- data/imagenet-r/n02423022/sculpture_13.jpg +- data/imagenet-r/n02051845/deviantart_22.jpg +- data/imagenet-r/n02395406/toy_22.jpg +- data/imagenet-r/n03594945/toy_18.jpg +- data/imagenet-r/n01944390/misc_160.jpg +- data/imagenet-r/n01944390/misc_14.jpg +- data/imagenet-r/n02114367/misc_35.jpg +- data/imagenet-r/n07714990/cartoon_15.jpg +- data/imagenet-r/n02097298/misc_54.jpg +- data/imagenet-r/n02119022/misc_112.jpg +- data/imagenet-r/n03424325/misc_95.jpg +- data/imagenet-r/n01494475/misc_110.jpg +- data/imagenet-r/n03481172/painting_5.jpg +- data/imagenet-r/n03773504/graffiti_4.jpg +- data/imagenet-r/n01443537/toy_0.jpg +- data/imagenet-r/n03947888/art_0.jpg +- data/imagenet-r/n02423022/sculpture_7.jpg +- data/imagenet-r/n04192698/videogame_7.jpg +- data/imagenet-r/n02219486/tattoo_25.jpg +- data/imagenet-r/n01806143/sketch_10.jpg +- data/imagenet-r/n01843383/painting_45.jpg +- data/imagenet-r/n02672831/sketch_20.jpg +- data/imagenet-r/n02096585/tattoo_15.jpg +- data/imagenet-r/n02091134/misc_80.jpg +- data/imagenet-r/n02906734/cartoon_26.jpg +- data/imagenet-r/n01910747/art_2.jpg +- data/imagenet-r/n07734744/graphic_2.jpg +- data/imagenet-r/n02410509/cartoon_38.jpg +- data/imagenet-r/n02099601/misc_37.jpg +- data/imagenet-r/n03710193/misc_42.jpg +- data/imagenet-r/n02423022/cartoon_5.jpg +- data/imagenet-r/n04465501/tattoo_3.jpg +- data/imagenet-r/n02398521/videogame_7.jpg +- data/imagenet-r/n02236044/cartoon_29.jpg +- data/imagenet-r/n04133789/cartoon_20.jpg +- data/imagenet-r/n02906734/painting_10.jpg +- data/imagenet-r/n02486410/graffiti_4.jpg +- data/imagenet-r/n02086240/sketch_1.jpg +- data/imagenet-r/n07614500/sketch_21.jpg +- data/imagenet-r/n01806143/deviantart_12.jpg +- data/imagenet-r/n04536866/tattoo_2.jpg +- data/imagenet-r/n02106662/misc_30.jpg +- data/imagenet-r/n01843383/deviantart_97.jpg +- data/imagenet-r/n02398521/cartoon_29.jpg +- data/imagenet-r/n03124170/sketch_20.jpg +- data/imagenet-r/n01843383/cartoon_26.jpg +- data/imagenet-r/n07920052/painting_5.jpg +- data/imagenet-r/n07734744/cartoon_2.jpg +- data/imagenet-r/n02236044/cartoon_28.jpg +- data/imagenet-r/n01833805/painting_6.jpg +- data/imagenet-r/n02607072/misc_91.jpg +- data/imagenet-r/n01614925/tattoo_43.jpg +- data/imagenet-r/n02097298/misc_23.jpg +- data/imagenet-r/n04389033/videogame_39.jpg +- data/imagenet-r/n02096585/videogame_4.jpg +- data/imagenet-r/n02129604/sketch_6.jpg +- data/imagenet-r/n02364673/misc_7.jpg +- data/imagenet-r/n02268443/misc_46.jpg +- data/imagenet-r/n02206856/cartoon_64.jpg +- data/imagenet-r/n01443537/painting_12.jpg +- data/imagenet-r/n02236044/sketch_7.jpg +- data/imagenet-r/n02749479/videogame_0.jpg +- data/imagenet-r/n02110185/toy_0.jpg +- data/imagenet-r/n02123045/painting_0.jpg +- data/imagenet-r/n03888257/sticker_1.jpg +- data/imagenet-r/n02948072/embroidery_7.jpg +- data/imagenet-r/n02481823/toy_3.jpg +- data/imagenet-r/n02129165/tattoo_62.jpg +- data/imagenet-r/n02236044/embroidery_2.jpg +- data/imagenet-r/n02423022/sketch_9.jpg +- data/imagenet-r/n02481823/sticker_3.jpg +- data/imagenet-r/n01770393/tattoo_64.jpg +- data/imagenet-r/n02843684/cartoon_23.jpg +- data/imagenet-r/n01770393/cartoon_4.jpg +- data/imagenet-r/n02445715/cartoon_35.jpg +- data/imagenet-r/n02206856/art_20.jpg +- data/imagenet-r/n04086273/painting_3.jpg +- data/imagenet-r/n02096585/misc_167.jpg +- data/imagenet-r/n02948072/sketch_29.jpg +- data/imagenet-r/n02268443/misc_4.jpg +- data/imagenet-r/n03888257/videogame_4.jpg +- data/imagenet-r/n02129165/deviantart_22.jpg +- data/imagenet-r/n07714990/cartoon_18.jpg +- data/imagenet-r/n02607072/misc_119.jpg +- data/imagenet-r/n01843383/sketch_13.jpg +- data/imagenet-r/n02391049/misc_51.jpg +- data/imagenet-r/n02364673/sculpture_7.jpg +- data/imagenet-r/n01531178/painting_23.jpg +- data/imagenet-r/n02130308/art_7.jpg +- data/imagenet-r/n02909870/videogame_14.jpg +- data/imagenet-r/n02077923/origami_1.jpg +- data/imagenet-r/n02607072/deviantart_2.jpg +- data/imagenet-r/n02841315/art_0.jpg +- data/imagenet-r/n02948072/cartoon_38.jpg +- data/imagenet-r/n01614925/deviantart_41.jpg +- data/imagenet-r/n02219486/graffiti_13.jpg +- data/imagenet-r/n02092339/misc_43.jpg +- data/imagenet-r/n09835506/misc_23.jpg +- data/imagenet-r/n02113624/sketch_1.jpg +- data/imagenet-r/n04086273/painting_4.jpg +- data/imagenet-r/n02085620/misc_103.jpg +- data/imagenet-r/n04266014/cartoon_30.jpg +- data/imagenet-r/n02607072/sketch_5.jpg +- data/imagenet-r/n01630670/cartoon_11.jpg +- data/imagenet-r/n01616318/tattoo_37.jpg +- data/imagenet-r/n02129165/graphic_8.jpg +- data/imagenet-r/n02423022/painting_3.jpg +- data/imagenet-r/n02793495/painting_5.jpg +- data/imagenet-r/n12267677/misc_68.jpg +- data/imagenet-r/n03710193/misc_23.jpg +- data/imagenet-r/n01514859/sticker_3.jpg +- data/imagenet-r/n03467068/deviantart_2.jpg +- data/imagenet-r/n03888257/cartoon_21.jpg +- data/imagenet-r/n02129604/graffiti_1.jpg +- data/imagenet-r/n02091134/misc_32.jpg +- data/imagenet-r/n02088364/sketch_5.jpg +- data/imagenet-r/n01910747/embroidery_13.jpg +- data/imagenet-r/n02279972/embroidery_4.jpg +- data/imagenet-r/n03424325/misc_24.jpg +- data/imagenet-r/n07697313/deviantart_5.jpg +- data/imagenet-r/n02114367/misc_42.jpg +- data/imagenet-r/n07697313/sticker_2.jpg +- data/imagenet-r/n02325366/misc_9.jpg +- data/imagenet-r/n02793495/sketch_21.jpg +- data/imagenet-r/n09472597/videogame_18.jpg +- data/imagenet-r/n07920052/deviantart_11.jpg +- data/imagenet-r/n03930630/deviantart_3.jpg +- data/imagenet-r/n02823750/sketch_8.jpg +- data/imagenet-r/n02797295/misc_47.jpg +- data/imagenet-r/n02447366/toy_1.jpg +- data/imagenet-r/n01833805/graffiti_17.jpg +- data/imagenet-r/n02110185/sculpture_0.jpg +- data/imagenet-r/n03124170/sculpture_0.jpg +- data/imagenet-r/n04591713/sketch_13.jpg +- data/imagenet-r/n01806143/graphic_8.jpg +- data/imagenet-r/n01518878/cartoon_9.jpg +- data/imagenet-r/n12267677/sketch_2.jpg +- data/imagenet-r/n03345487/sticker_3.jpg +- data/imagenet-r/n01616318/tattoo_38.jpg +- data/imagenet-r/n02236044/sculpture_6.jpg +- data/imagenet-r/n03372029/cartoon_23.jpg +- data/imagenet-r/n02110958/tattoo_12.jpg +- data/imagenet-r/n02363005/videogame_0.jpg +- data/imagenet-r/n02398521/sculpture_0.jpg +- data/imagenet-r/n01882714/deviantart_23.jpg +- data/imagenet-r/n03495258/origami_1.jpg +- data/imagenet-r/n02980441/origami_1.jpg +- data/imagenet-r/n03630383/cartoon_27.jpg +- data/imagenet-r/n02966193/sculpture_3.jpg +- data/imagenet-r/n01770393/origami_4.jpg +- data/imagenet-r/n01882714/sticker_5.jpg +- data/imagenet-r/n02279972/art_2.jpg +- data/imagenet-r/n02909870/painting_17.jpg +- data/imagenet-r/n04310018/misc_1.jpg +- data/imagenet-r/n02066245/sketch_16.jpg +- data/imagenet-r/n02437616/misc_3.jpg +- data/imagenet-r/n02966193/cartoon_1.jpg +- data/imagenet-r/n02112018/tattoo_1.jpg +- data/imagenet-r/n01443537/painting_24.jpg +- data/imagenet-r/n07614500/misc_20.jpg +- data/imagenet-r/n02317335/sketch_15.jpg +- data/imagenet-r/n02109525/misc_0.jpg +- data/imagenet-r/n02091134/misc_39.jpg +- data/imagenet-r/n02088238/misc_7.jpg +- data/imagenet-r/n02398521/sculpture_13.jpg +- data/imagenet-r/n02165456/misc_4.jpg +- data/imagenet-r/n01806143/graphic_10.jpg +- data/imagenet-r/n02950826/sculpture_2.jpg +- data/imagenet-r/n01518878/cartoon_18.jpg +- data/imagenet-r/n03124170/cartoon_46.jpg +- data/imagenet-r/n02051845/sketch_3.jpg +- data/imagenet-r/n07768694/painting_27.jpg +- data/imagenet-r/n02233338/misc_19.jpg +- data/imagenet-r/n03888257/cartoon_31.jpg +- data/imagenet-r/n07734744/graffiti_40.jpg +- data/imagenet-r/n02129604/toy_14.jpg +- data/imagenet-r/n02077923/sketch_4.jpg +- data/imagenet-r/n02119022/misc_109.jpg +- data/imagenet-r/n02395406/art_13.jpg +- data/imagenet-r/n01944390/misc_46.jpg +- data/imagenet-r/n04146614/videogame_30.jpg +- data/imagenet-r/n01632777/toy_13.jpg +- data/imagenet-r/n02099601/misc_59.jpg +- data/imagenet-r/n02883205/sketch_2.jpg +- data/imagenet-r/n02091134/sketch_4.jpg +- data/imagenet-r/n02085620/misc_26.jpg +- data/imagenet-r/n02129165/toy_13.jpg +- data/imagenet-r/n02268443/misc_76.jpg +- data/imagenet-r/n04141076/painting_8.jpg +- data/imagenet-r/n02445715/origami_2.jpg +- data/imagenet-r/n04266014/cartoon_23.jpg +- data/imagenet-r/n04086273/cartoon_1.jpg +- data/imagenet-r/n02510455/misc_33.jpg +- data/imagenet-r/n02108915/misc_19.jpg +- data/imagenet-r/n09835506/videogame_2.jpg +- data/imagenet-r/n02363005/cartoon_26.jpg +- data/imagenet-r/n02088238/misc_9.jpg +- data/imagenet-r/n02992529/painting_1.jpg +- data/imagenet-r/n04465501/toy_5.jpg +- data/imagenet-r/n07697537/videogame_9.jpg +- data/imagenet-r/n02447366/cartoon_14.jpg +- data/imagenet-r/n03424325/videogame_21.jpg +- data/imagenet-r/n01882714/tattoo_14.jpg +- data/imagenet-r/n02110341/misc_61.jpg +- data/imagenet-r/n01843383/sketch_23.jpg +- data/imagenet-r/n04310018/art_10.jpg +- data/imagenet-r/n07880968/cartoon_18.jpg +- data/imagenet-r/n01770393/painting_8.jpg +- data/imagenet-r/n01770393/sketch_20.jpg +- data/imagenet-r/n01534433/painting_8.jpg +- data/imagenet-r/n07753592/misc_28.jpg +- data/imagenet-r/n02980441/sketch_9.jpg +- data/imagenet-r/n04141076/painting_19.jpg +- data/imagenet-r/n02843684/art_1.jpg +- data/imagenet-r/n03498962/videogame_0.jpg +- data/imagenet-r/n01843383/sculpture_3.jpg +- data/imagenet-r/n02077923/misc_3.jpg +- data/imagenet-r/n02317335/sketch_17.jpg +- data/imagenet-r/n04389033/videogame_26.jpg +- data/imagenet-r/n01847000/videogame_1.jpg +- data/imagenet-r/n04266014/toy_31.jpg +- data/imagenet-r/n02395406/embroidery_7.jpg +- data/imagenet-r/n03424325/misc_14.jpg +- data/imagenet-r/n01833805/sculpture_14.jpg +- data/imagenet-r/n02883205/misc_0.jpg +- data/imagenet-r/n02398521/art_10.jpg +- data/imagenet-r/n01843383/painting_56.jpg +- data/imagenet-r/n03424325/videogame_22.jpg +- data/imagenet-r/n01514859/deviantart_15.jpg +- data/imagenet-r/n01882714/graphic_1.jpg +- data/imagenet-r/n02206856/cartoon_35.jpg +- data/imagenet-r/n02110958/art_5.jpg +- data/imagenet-r/n07720875/cartoon_8.jpg +- data/imagenet-r/n03710193/misc_26.jpg +- data/imagenet-r/n02843684/sketch_22.jpg +- data/imagenet-r/n03710193/misc_25.jpg +- data/imagenet-r/n02097298/misc_21.jpg +- data/imagenet-r/n04146614/graffiti_2.jpg +- data/imagenet-r/n01944390/misc_76.jpg +- data/imagenet-r/n12267677/deviantart_17.jpg +- data/imagenet-r/n02123045/painting_57.jpg +- data/imagenet-r/n02950826/sketch_16.jpg +- data/imagenet-r/n09472597/videogame_10.jpg +- data/imagenet-r/n02950826/painting_0.jpg +- data/imagenet-r/n04409515/graphic_1.jpg +- data/imagenet-r/n01443537/cartoon_27.jpg +- data/imagenet-r/n02099712/misc_13.jpg +- data/imagenet-r/n07768694/painting_20.jpg +- data/imagenet-r/n02102318/sticker_0.jpg +- data/imagenet-r/n03494278/sketch_11.jpg +- data/imagenet-r/n02110958/art_3.jpg +- data/imagenet-r/n01820546/toy_2.jpg +- data/imagenet-r/n04192698/deviantart_8.jpg +- data/imagenet-r/n01882714/cartoon_27.jpg +- data/imagenet-r/n03710193/sketch_0.jpg +- data/imagenet-r/n02102318/cartoon_1.jpg +- data/imagenet-r/n02071294/sculpture_1.jpg +- data/imagenet-r/n02096585/misc_77.jpg +- data/imagenet-r/n01514859/cartoon_15.jpg +- data/imagenet-r/n02219486/sculpture_12.jpg +- data/imagenet-r/n03594945/videogame_9.jpg +- data/imagenet-r/n09835506/videogame_30.jpg +- data/imagenet-r/n02802426/graphic_1.jpg +- data/imagenet-r/n09472597/sketch_35.jpg +- data/imagenet-r/n01694178/sticker_5.jpg +- data/imagenet-r/n02110341/misc_110.jpg +- data/imagenet-r/n04141076/painting_40.jpg +- data/imagenet-r/n01531178/tattoo_7.jpg +- data/imagenet-r/n07880968/cartoon_6.jpg +- data/imagenet-r/n01806143/deviantart_14.jpg +- data/imagenet-r/n02391049/deviantart_14.jpg +- data/imagenet-r/n02992529/sketch_3.jpg +- data/imagenet-r/n02007558/art_4.jpg +- data/imagenet-r/n02110958/misc_5.jpg +- data/imagenet-r/n04133789/sketch_14.jpg +- data/imagenet-r/n03467068/cartoon_7.jpg +- data/imagenet-r/n04254680/videogame_21.jpg +- data/imagenet-r/n03372029/sketch_8.jpg +- data/imagenet-r/n02130308/painting_32.jpg +- data/imagenet-r/n02883205/cartoon_20.jpg +- data/imagenet-r/n03467068/videogame_0.jpg +- data/imagenet-r/n04133789/videogame_1.jpg +- data/imagenet-r/n01986214/deviantart_6.jpg +- data/imagenet-r/n01820546/painting_17.jpg +- data/imagenet-r/n02088364/misc_79.jpg +- data/imagenet-r/n02447366/graffiti_3.jpg +- data/imagenet-r/n04591713/sculpture_0.jpg +- data/imagenet-r/n01484850/sketch_15.jpg +- data/imagenet-r/n03272010/sketch_2.jpg +- data/imagenet-r/n03773504/sketch_6.jpg +- data/imagenet-r/n02088094/misc_14.jpg +- data/imagenet-r/n02486410/sculpture_9.jpg +- data/imagenet-r/n02091134/sketch_20.jpg +- data/imagenet-r/n02445715/sketch_5.jpg +- data/imagenet-r/n01616318/deviantart_8.jpg +- data/imagenet-r/n01882714/deviantart_8.jpg +- data/imagenet-r/n04141076/cartoon_26.jpg +- data/imagenet-r/n02233338/misc_23.jpg +- data/imagenet-r/n07753275/painting_4.jpg +- data/imagenet-r/n07734744/deviantart_2.jpg +- data/imagenet-r/n07749582/cartoon_5.jpg +- data/imagenet-r/n02129604/deviantart_29.jpg +- data/imagenet-r/n02129604/cartoon_6.jpg +- data/imagenet-r/n03481172/sticker_2.jpg +- data/imagenet-r/n02110958/painting_49.jpg +- data/imagenet-r/n02134084/misc_128.jpg +- data/imagenet-r/n07742313/deviantart_4.jpg +- data/imagenet-r/n04192698/videogame_18.jpg +- data/imagenet-r/n02395406/sculpture_22.jpg +- data/imagenet-r/n01644373/painting_12.jpg +- data/imagenet-r/n03594945/misc_17.jpg +- data/imagenet-r/n02843684/embroidery_7.jpg +- data/imagenet-r/n01847000/misc_8.jpg +- data/imagenet-r/n07749582/painting_33.jpg +- data/imagenet-r/n07734744/graffiti_44.jpg +- data/imagenet-r/n02769748/cartoon_16.jpg +- data/imagenet-r/n02129604/cartoon_3.jpg +- data/imagenet-r/n02007558/toy_2.jpg +- data/imagenet-r/n02268443/misc_6.jpg +- data/imagenet-r/n02236044/sculpture_25.jpg +- data/imagenet-r/n04310018/misc_0.jpg +- data/imagenet-r/n07714990/graffiti_1.jpg +- data/imagenet-r/n02607072/deviantart_16.jpg +- data/imagenet-r/n02088466/misc_21.jpg +- data/imagenet-r/n02268443/misc_142.jpg +- data/imagenet-r/n02906734/cartoon_42.jpg +- data/imagenet-r/n02123045/sculpture_5.jpg +- data/imagenet-r/n04347754/cartoon_6.jpg +- data/imagenet-r/n04310018/art_18.jpg +- data/imagenet-r/n03124170/cartoon_56.jpg +- data/imagenet-r/n02106030/painting_5.jpg +- data/imagenet-r/n01833805/embroidery_23.jpg +- data/imagenet-r/n01616318/sketch_13.jpg +- data/imagenet-r/n01616318/tattoo_34.jpg +- data/imagenet-r/n02108089/misc_36.jpg +- data/imagenet-r/n04086273/sketch_17.jpg +- data/imagenet-r/n07697313/deviantart_12.jpg +- data/imagenet-r/n02114367/misc_45.jpg +- data/imagenet-r/n04275548/sketch_21.jpg +- data/imagenet-r/n07920052/deviantart_4.jpg +- data/imagenet-r/n07753275/sketch_19.jpg +- data/imagenet-r/n02110958/painting_37.jpg +- data/imagenet-r/n04086273/tattoo_51.jpg +- data/imagenet-r/n02096585/misc_47.jpg +- data/imagenet-r/n12267677/deviantart_23.jpg +- data/imagenet-r/n04141076/painting_44.jpg +- data/imagenet-r/n04141076/painting_35.jpg +- data/imagenet-r/n01514859/graffiti_1.jpg +- data/imagenet-r/n02071294/tattoo_0.jpg +- data/imagenet-r/n07693725/cartoon_18.jpg +- data/imagenet-r/n03676483/sketch_11.jpg +- data/imagenet-r/n01498041/sketch_4.jpg +- data/imagenet-r/n02279972/misc_0.jpg +- data/imagenet-r/n03494278/sketch_4.jpg +- data/imagenet-r/n01644373/tattoo_23.jpg +- data/imagenet-r/n02410509/cartoon_8.jpg +- data/imagenet-r/n04141076/painting_48.jpg +- data/imagenet-r/n02129165/graffiti_8.jpg +- data/imagenet-r/n02129604/sketch_18.jpg +- data/imagenet-r/n03775071/cartoon_13.jpg +- data/imagenet-r/n02113023/sketch_22.jpg +- data/imagenet-r/n03124170/cartoon_0.jpg +- data/imagenet-r/n02119022/misc_62.jpg +- data/imagenet-r/n02077923/misc_0.jpg +- data/imagenet-r/n02117135/painting_5.jpg +- data/imagenet-r/n02113023/misc_6.jpg +- data/imagenet-r/n01847000/sketch_4.jpg +- data/imagenet-r/n02129165/tattoo_41.jpg +- data/imagenet-r/n02098286/sketch_22.jpg +- data/imagenet-r/n02117135/sketch_5.jpg +- data/imagenet-r/n12267677/misc_127.jpg +- data/imagenet-r/n01694178/tattoo_28.jpg +- data/imagenet-r/n02130308/art_2.jpg +- data/imagenet-r/n07614500/deviantart_9.jpg +- data/imagenet-r/n01614925/tattoo_44.jpg +- data/imagenet-r/n09835506/sketch_27.jpg +- data/imagenet-r/n02128385/misc_0.jpg +- data/imagenet-r/n02843684/graffiti_1.jpg +- data/imagenet-r/n02364673/cartoon_26.jpg +- data/imagenet-r/n07695742/graffiti_0.jpg +- data/imagenet-r/n02480855/sticker_1.jpg +- data/imagenet-r/n02130308/origami_1.jpg +- data/imagenet-r/n02206856/graffiti_31.jpg +- data/imagenet-r/n02226429/tattoo_9.jpg +- data/imagenet-r/n01843383/art_3.jpg +- data/imagenet-r/n02091032/misc_21.jpg +- data/imagenet-r/n07753275/painting_18.jpg +- data/imagenet-r/n01748264/tattoo_15.jpg +- data/imagenet-r/n04086273/videogame_12.jpg +- data/imagenet-r/n02099712/misc_27.jpg +- data/imagenet-r/n07614500/embroidery_18.jpg +- data/imagenet-r/n02071294/cartoon_16.jpg +- data/imagenet-r/n03481172/sketch_5.jpg +- data/imagenet-r/n03124170/graffiti_11.jpg +- data/imagenet-r/n04310018/toy_20.jpg +- data/imagenet-r/n01531178/cartoon_17.jpg +- data/imagenet-r/n02356798/cartoon_10.jpg +- data/imagenet-r/n07714571/origami_0.jpg +- data/imagenet-r/n02106030/painting_11.jpg +- data/imagenet-r/n02138441/sketch_15.jpg +- data/imagenet-r/n02701002/toy_25.jpg +- data/imagenet-r/n07753592/misc_14.jpg +- data/imagenet-r/n01518878/graffiti_8.jpg +- data/imagenet-r/n02437616/videogame_5.jpg +- data/imagenet-r/n04266014/painting_21.jpg +- data/imagenet-r/n10565667/tattoo_0.jpg +- data/imagenet-r/n03452741/deviantart_7.jpg +- data/imagenet-r/n02395406/sketch_19.jpg +- data/imagenet-r/n01644373/sketch_8.jpg +- data/imagenet-r/n02802426/videogame_18.jpg +- data/imagenet-r/n01616318/deviantart_25.jpg +- data/imagenet-r/n03775071/origami_0.jpg +- data/imagenet-r/n01820546/art_19.jpg +- data/imagenet-r/n02051845/misc_2.jpg +- data/imagenet-r/n02138441/toy_8.jpg +- data/imagenet-r/n02395406/toy_4.jpg +- data/imagenet-r/n04347754/videogame_21.jpg +- data/imagenet-r/n02110341/misc_130.jpg +- data/imagenet-r/n02165456/sketch_3.jpg +- data/imagenet-r/n02607072/misc_114.jpg +- data/imagenet-r/n04409515/sketch_3.jpg +- data/imagenet-r/n01882714/sculpture_11.jpg +- data/imagenet-r/n01498041/sticker_0.jpg +- data/imagenet-r/n02814860/painting_3.jpg +- data/imagenet-r/n02655020/misc_41.jpg +- data/imagenet-r/n04133789/sculpture_4.jpg +- data/imagenet-r/n02098286/misc_37.jpg +- data/imagenet-r/n03498962/sketch_11.jpg +- data/imagenet-r/n02909870/graphic_1.jpg +- data/imagenet-r/n04389033/graffiti_12.jpg +- data/imagenet-r/n02480495/painting_7.jpg +- data/imagenet-r/n02950826/sketch_1.jpg +- data/imagenet-r/n02808440/embroidery_1.jpg +- data/imagenet-r/n02110341/deviantart_19.jpg +- data/imagenet-r/n02939185/deviantart_4.jpg +- data/imagenet-r/n01632777/painting_3.jpg +- data/imagenet-r/n04266014/toy_19.jpg +- data/imagenet-r/n02112018/misc_17.jpg +- data/imagenet-r/n02364673/cartoon_7.jpg +- data/imagenet-r/n02814860/origami_2.jpg +- data/imagenet-r/n02106166/art_6.jpg +- data/imagenet-r/n01644373/origami_1.jpg +- data/imagenet-r/n01910747/tattoo_32.jpg +- data/imagenet-r/n02607072/sketch_14.jpg +- data/imagenet-r/n02395406/toy_16.jpg +- data/imagenet-r/n02279972/tattoo_24.jpg +- data/imagenet-r/n02129165/videogame_1.jpg +- data/imagenet-r/n02088238/misc_15.jpg +- data/imagenet-r/n01882714/deviantart_46.jpg +- data/imagenet-r/n07873807/graphic_1.jpg +- data/imagenet-r/n07714990/sketch_3.jpg +- data/imagenet-r/n04552348/art_16.jpg +- data/imagenet-r/n02119022/misc_12.jpg +- data/imagenet-r/n07697537/sketch_5.jpg +- data/imagenet-r/n02808440/sketch_16.jpg +- data/imagenet-r/n02071294/deviantart_4.jpg +- data/imagenet-r/n03495258/art_0.jpg +- data/imagenet-r/n03272010/painting_4.jpg +- data/imagenet-r/n04310018/toy_13.jpg +- data/imagenet-r/n07714571/cartoon_5.jpg +- data/imagenet-r/n02948072/sketch_24.jpg +- data/imagenet-r/n04266014/sketch_1.jpg +- data/imagenet-r/n04118538/cartoon_34.jpg +- data/imagenet-r/n03272010/tattoo_3.jpg +- data/imagenet-r/n02607072/misc_12.jpg +- data/imagenet-r/n01677366/sketch_23.jpg +- data/imagenet-r/n07753275/embroidery_4.jpg +- data/imagenet-r/n02165456/sketch_18.jpg +- data/imagenet-r/n04146614/deviantart_9.jpg +- data/imagenet-r/n03481172/videogame_0.jpg +- data/imagenet-r/n02346627/painting_11.jpg +- data/imagenet-r/n01882714/graphic_6.jpg +- data/imagenet-r/n07614500/graphic_4.jpg +- data/imagenet-r/n02395406/sculpture_24.jpg +- data/imagenet-r/n02206856/cartoon_48.jpg +- data/imagenet-r/n03424325/misc_51.jpg +- data/imagenet-r/n02950826/misc_2.jpg +- data/imagenet-r/n07749582/graphic_7.jpg +- data/imagenet-r/n07745940/origami_16.jpg +- data/imagenet-r/n02106030/sketch_12.jpg +- data/imagenet-r/n02138441/sketch_5.jpg +- data/imagenet-r/n04192698/sketch_4.jpg +- data/imagenet-r/n02165456/sketch_16.jpg +- data/imagenet-r/n01843383/misc_3.jpg +- data/imagenet-r/n02109525/sketch_10.jpg +- data/imagenet-r/n02088466/sketch_18.jpg +- data/imagenet-r/n01531178/sketch_2.jpg +- data/imagenet-r/n04310018/painting_8.jpg +- data/imagenet-r/n02526121/art_3.jpg +- data/imagenet-r/n02364673/cartoon_28.jpg +- data/imagenet-r/n01443537/cartoon_36.jpg +- data/imagenet-r/n02094433/misc_8.jpg +- data/imagenet-r/n02802426/cartoon_9.jpg +- data/imagenet-r/n04133789/videogame_2.jpg +- data/imagenet-r/n02701002/sticker_6.jpg +- data/imagenet-r/n01847000/videogame_0.jpg +- data/imagenet-r/n01632777/sketch_4.jpg +- data/imagenet-r/n03930630/toy_5.jpg +- data/imagenet-r/n04141076/art_2.jpg +- data/imagenet-r/n02655020/misc_96.jpg +- data/imagenet-r/n02655020/misc_53.jpg +- data/imagenet-r/n01855672/videogame_1.jpg +- data/imagenet-r/n02088238/misc_101.jpg +- data/imagenet-r/n02110958/painting_45.jpg +- data/imagenet-r/n02480855/tattoo_20.jpg +- data/imagenet-r/n04086273/art_14.jpg +- data/imagenet-r/n01910747/painting_6.jpg +- data/imagenet-r/n02906734/cartoon_39.jpg +- data/imagenet-r/n01694178/sketch_7.jpg +- data/imagenet-r/n02437616/art_4.jpg +- data/imagenet-r/n10565667/art_6.jpg +- data/imagenet-r/n04147183/deviantart_15.jpg +- data/imagenet-r/n02009912/misc_1.jpg +- data/imagenet-r/n02088238/misc_94.jpg +- data/imagenet-r/n01944390/misc_173.jpg +- data/imagenet-r/n07753592/misc_88.jpg +- data/imagenet-r/n02106166/embroidery_1.jpg +- data/imagenet-r/n02437616/toy_2.jpg +- data/imagenet-r/n02119022/misc_35.jpg +- data/imagenet-r/n01882714/cartoon_11.jpg +- data/imagenet-r/n02236044/toy_1.jpg +- data/imagenet-r/n01882714/origami_2.jpg +- data/imagenet-r/n02236044/art_12.jpg +- data/imagenet-r/n02939185/misc_7.jpg +- data/imagenet-r/n01443537/painting_37.jpg +- data/imagenet-r/n01443537/sketch_10.jpg +- data/imagenet-r/n02906734/painting_12.jpg +- data/imagenet-r/n02233338/misc_18.jpg +- data/imagenet-r/n07873807/deviantart_28.jpg +- data/imagenet-r/n02138441/cartoon_8.jpg +- data/imagenet-r/n07714571/misc_0.jpg +- data/imagenet-r/n02009912/sketch_5.jpg +- data/imagenet-r/n02108089/misc_14.jpg +- data/imagenet-r/n02091134/misc_71.jpg +- data/imagenet-r/n01847000/tattoo_1.jpg +- data/imagenet-r/n03494278/misc_1.jpg +- data/imagenet-r/n02279972/sketch_19.jpg +- data/imagenet-r/n02437616/videogame_6.jpg +- data/imagenet-r/n07693725/painting_10.jpg +- data/imagenet-r/n02128385/toy_11.jpg +- data/imagenet-r/n01833805/sketch_1.jpg +- data/imagenet-r/n04192698/art_1.jpg +- data/imagenet-r/n02134084/deviantart_7.jpg +- data/imagenet-r/n02190166/sketch_11.jpg +- data/imagenet-r/n02106550/misc_6.jpg +- data/imagenet-r/n02279972/embroidery_2.jpg +- data/imagenet-r/n02007558/misc_17.jpg +- data/imagenet-r/n03124170/sculpture_6.jpg +- data/imagenet-r/n02134084/misc_105.jpg +- data/imagenet-r/n02134084/misc_53.jpg +- data/imagenet-r/n03594945/cartoon_5.jpg +- data/imagenet-r/n04325704/cartoon_25.jpg +- data/imagenet-r/n01843383/deviantart_10.jpg +- data/imagenet-r/n02814860/deviantart_8.jpg +- data/imagenet-r/n03452741/videogame_2.jpg +- data/imagenet-r/n03124170/sculpture_10.jpg +- data/imagenet-r/n09472597/sticker_2.jpg +- data/imagenet-r/n02410509/painting_16.jpg +- data/imagenet-r/n03481172/deviantart_4.jpg +- data/imagenet-r/n02395406/deviantart_3.jpg +- data/imagenet-r/n03495258/misc_0.jpg +- data/imagenet-r/n07693725/painting_2.jpg +- data/imagenet-r/n01770393/tattoo_76.jpg +- data/imagenet-r/n01847000/toy_14.jpg +- data/imagenet-r/n01983481/misc_3.jpg +- data/imagenet-r/n02128757/painting_30.jpg +- data/imagenet-r/n02129165/graffiti_7.jpg +- data/imagenet-r/n01443537/cartoon_26.jpg +- data/imagenet-r/n02129165/toy_14.jpg +- data/imagenet-r/n07734744/cartoon_43.jpg +- data/imagenet-r/n01694178/tattoo_18.jpg +- data/imagenet-r/n02814860/deviantart_9.jpg +- data/imagenet-r/n02119022/misc_19.jpg +- data/imagenet-r/n03452741/toy_8.jpg +- data/imagenet-r/n02110958/painting_3.jpg +- data/imagenet-r/n02091032/sketch_4.jpg +- data/imagenet-r/n02138441/painting_27.jpg +- data/imagenet-r/n03710193/sketch_7.jpg +- data/imagenet-r/n04389033/toy_8.jpg +- data/imagenet-r/n01833805/tattoo_34.jpg +- data/imagenet-r/n02165456/art_4.jpg +- data/imagenet-r/n03481172/cartoon_16.jpg +- data/imagenet-r/n02607072/misc_27.jpg +- data/imagenet-r/n01806143/deviantart_0.jpg +- data/imagenet-r/n02108089/tattoo_1.jpg +- data/imagenet-r/n03124170/toy_6.jpg +- data/imagenet-r/n04465501/cartoon_17.jpg +- data/imagenet-r/n02051845/art_2.jpg +- data/imagenet-r/n02437616/art_1.jpg +- data/imagenet-r/n04389033/sculpture_2.jpg +- data/imagenet-r/n01518878/cartoon_40.jpg +- data/imagenet-r/n01944390/misc_31.jpg +- data/imagenet-r/n02088238/misc_83.jpg +- data/imagenet-r/n04141076/cartoon_41.jpg +- data/imagenet-r/n04536866/deviantart_32.jpg +- data/imagenet-r/n02948072/cartoon_1.jpg +- data/imagenet-r/n07734744/cartoon_30.jpg +- data/imagenet-r/n04141076/sculpture_6.jpg +- data/imagenet-r/n02883205/painting_7.jpg +- data/imagenet-r/n01843383/cartoon_21.jpg +- data/imagenet-r/n07753275/videogame_4.jpg +- data/imagenet-r/n01847000/painting_4.jpg +- data/imagenet-r/n02112018/misc_31.jpg +- data/imagenet-r/n07734744/painting_36.jpg +- data/imagenet-r/n02236044/cartoon_16.jpg +- data/imagenet-r/n01843383/art_29.jpg +- data/imagenet-r/n09472597/cartoon_9.jpg +- data/imagenet-r/n04254680/sticker_3.jpg +- data/imagenet-r/n07753275/sketch_0.jpg +- data/imagenet-r/n09835506/deviantart_26.jpg +- data/imagenet-r/n02114367/misc_30.jpg +- data/imagenet-r/n02123045/sketch_6.jpg +- data/imagenet-r/n02906734/graffiti_8.jpg +- data/imagenet-r/n03345487/videogame_7.jpg +- data/imagenet-r/n02106550/misc_55.jpg +- data/imagenet-r/n04409515/cartoon_3.jpg +- data/imagenet-r/n04522168/painting_9.jpg +- data/imagenet-r/n02114367/misc_16.jpg +- data/imagenet-r/n07745940/embroidery_29.jpg +- data/imagenet-r/n01843383/sketch_22.jpg +- data/imagenet-r/n02219486/sketch_18.jpg +- data/imagenet-r/n02110185/toy_7.jpg +- data/imagenet-r/n02423022/art_4.jpg +- data/imagenet-r/n04141076/painting_17.jpg +- data/imagenet-r/n01944390/videogame_0.jpg +- data/imagenet-r/n02110958/cartoon_22.jpg +- data/imagenet-r/n01443537/cartoon_9.jpg +- data/imagenet-r/n04266014/art_3.jpg +- data/imagenet-r/n02110958/cartoon_60.jpg +- data/imagenet-r/n03947888/videogame_11.jpg +- data/imagenet-r/n04552348/toy_11.jpg +- data/imagenet-r/n01443537/origami_9.jpg +- data/imagenet-r/n02909870/sketch_13.jpg +- data/imagenet-r/n02114367/misc_33.jpg +- data/imagenet-r/n04310018/videogame_8.jpg +- data/imagenet-r/n09472597/graphic_2.jpg +- data/imagenet-r/n02951358/sketch_23.jpg +- data/imagenet-r/n01833805/painting_13.jpg +- data/imagenet-r/n03498962/cartoon_17.jpg +- data/imagenet-r/n12267677/misc_64.jpg +- data/imagenet-r/n01944390/misc_125.jpg +- data/imagenet-r/n01833805/deviantart_10.jpg +- data/imagenet-r/n04275548/painting_10.jpg +- data/imagenet-r/n02113624/misc_4.jpg +- data/imagenet-r/n02051845/cartoon_8.jpg +- data/imagenet-r/n02992529/sticker_2.jpg +- data/imagenet-r/n02226429/graffiti_2.jpg +- data/imagenet-r/n07697537/videogame_31.jpg +- data/imagenet-r/n02481823/videogame_2.jpg +- data/imagenet-r/n02091134/misc_69.jpg +- data/imagenet-r/n02769748/sketch_3.jpg +- data/imagenet-r/n02364673/sketch_17.jpg +- data/imagenet-r/n02325366/sketch_20.jpg +- data/imagenet-r/n02356798/cartoon_16.jpg +- data/imagenet-r/n02480495/toy_9.jpg +- data/imagenet-r/n02486410/sketch_13.jpg +- data/imagenet-r/n02128757/art_14.jpg +- data/imagenet-r/n02091032/misc_2.jpg +- data/imagenet-r/n03372029/painting_4.jpg +- data/imagenet-r/n03481172/sketch_1.jpg +- data/imagenet-r/n07745940/embroidery_1.jpg +- data/imagenet-r/n02086240/misc_44.jpg +- data/imagenet-r/n02110185/tattoo_1.jpg +- data/imagenet-r/n02097298/sketch_3.jpg +- data/imagenet-r/n04254680/videogame_2.jpg +- data/imagenet-r/n07768694/painting_19.jpg +- data/imagenet-r/n03124170/cartoon_57.jpg +- data/imagenet-r/n01843383/cartoon_40.jpg +- data/imagenet-r/n02129165/deviantart_26.jpg +- data/imagenet-r/n07745940/graffiti_34.jpg +- data/imagenet-r/n02165456/tattoo_66.jpg +- data/imagenet-r/n02948072/misc_0.jpg +- data/imagenet-r/n01944390/misc_17.jpg +- data/imagenet-r/n02130308/tattoo_5.jpg +- data/imagenet-r/n07614500/graffiti_2.jpg +- data/imagenet-r/n04118538/toy_0.jpg +- data/imagenet-r/n02909870/embroidery_1.jpg +- data/imagenet-r/n07697537/deviantart_7.jpg +- data/imagenet-r/n07742313/painting_10.jpg +- data/imagenet-r/n03773504/videogame_16.jpg +- data/imagenet-r/n02814860/graffiti_0.jpg +- data/imagenet-r/n01632777/sketch_11.jpg +- data/imagenet-r/n02841315/cartoon_26.jpg +- data/imagenet-r/n02906734/misc_1.jpg +- data/imagenet-r/n07697313/deviantart_39.jpg +- data/imagenet-r/n01882714/toy_25.jpg +- data/imagenet-r/n02098286/misc_46.jpg +- data/imagenet-r/n02906734/cartoon_40.jpg +- data/imagenet-r/n02398521/painting_5.jpg +- data/imagenet-r/n07873807/deviantart_7.jpg +- data/imagenet-r/n01630670/cartoon_9.jpg +- data/imagenet-r/n02110185/painting_18.jpg +- data/imagenet-r/n02510455/misc_14.jpg +- data/imagenet-r/n01498041/sculpture_5.jpg +- data/imagenet-r/n07697537/misc_9.jpg +- data/imagenet-r/n03124170/sculpture_4.jpg +- data/imagenet-r/n02268443/misc_109.jpg +- data/imagenet-r/n02672831/cartoon_17.jpg +- data/imagenet-r/n01833805/graphic_5.jpg +- data/imagenet-r/n02128757/cartoon_8.jpg +- data/imagenet-r/n02110958/sketch_14.jpg +- data/imagenet-r/n02437616/cartoon_19.jpg +- data/imagenet-r/n03494278/sketch_20.jpg +- data/imagenet-r/n02793495/sketch_4.jpg +- data/imagenet-r/n01770393/origami_7.jpg +- data/imagenet-r/n07697537/deviantart_2.jpg +- data/imagenet-r/n02190166/sketch_0.jpg +- data/imagenet-r/n02007558/art_15.jpg +- data/imagenet-r/n02007558/tattoo_43.jpg +- data/imagenet-r/n02510455/misc_50.jpg +- data/imagenet-r/n04086273/sticker_2.jpg +- data/imagenet-r/n07753592/misc_94.jpg +- data/imagenet-r/n02363005/sketch_9.jpg +- data/imagenet-r/n01770393/cartoon_9.jpg +- data/imagenet-r/n01860187/cartoon_10.jpg +- data/imagenet-r/n07753275/art_0.jpg +- data/imagenet-r/n02317335/tattoo_7.jpg +- data/imagenet-r/n02190166/origami_0.jpg +- data/imagenet-r/n02123045/sketch_4.jpg +- data/imagenet-r/n01694178/sketch_11.jpg +- data/imagenet-r/n01632777/deviantart_8.jpg +- data/imagenet-r/n02793495/painting_24.jpg +- data/imagenet-r/n02364673/painting_3.jpg +- data/imagenet-r/n02395406/tattoo_7.jpg +- data/imagenet-r/n02129165/cartoon_27.jpg +- data/imagenet-r/n02007558/sketch_15.jpg +- data/imagenet-r/n02123045/sketch_10.jpg +- data/imagenet-r/n02051845/sculpture_7.jpg +- data/imagenet-r/n12267677/misc_45.jpg +- data/imagenet-r/n07614500/cartoon_1.jpg +- data/imagenet-r/n07714571/sketch_13.jpg +- data/imagenet-r/n02085620/sketch_2.jpg +- data/imagenet-r/n02279972/embroidery_1.jpg +- data/imagenet-r/n02814860/sticker_10.jpg +- data/imagenet-r/n02110958/cartoon_45.jpg +- data/imagenet-r/n02117135/graffiti_3.jpg +- data/imagenet-r/n02510455/sketch_21.jpg +- data/imagenet-r/n02088238/misc_10.jpg +- data/imagenet-r/n02085620/videogame_0.jpg +- data/imagenet-r/n03272010/deviantart_14.jpg +- data/imagenet-r/n07749582/toy_8.jpg +- data/imagenet-r/n02951358/videogame_3.jpg +- data/imagenet-r/n02909870/videogame_11.jpg +- data/imagenet-r/n01774750/tattoo_16.jpg +- data/imagenet-r/n01806143/art_3.jpg +- data/imagenet-r/n07880968/cartoon_9.jpg +- data/imagenet-r/n02099712/misc_4.jpg +- data/imagenet-r/n02814860/sticker_9.jpg +- data/imagenet-r/n03930630/embroidery_0.jpg +- data/imagenet-r/n01774750/tattoo_8.jpg +- data/imagenet-r/n02071294/sketch_24.jpg +- data/imagenet-r/n02226429/cartoon_4.jpg +- data/imagenet-r/n02236044/origami_23.jpg +- data/imagenet-r/n02814860/painting_37.jpg +- data/imagenet-r/n02814860/videogame_1.jpg +- data/imagenet-r/n02165456/painting_9.jpg +- data/imagenet-r/n02268443/misc_115.jpg +- data/imagenet-r/n02823750/cartoon_18.jpg +- data/imagenet-r/n02883205/toy_22.jpg +- data/imagenet-r/n02128757/cartoon_2.jpg +- data/imagenet-r/n01616318/sketch_3.jpg +- data/imagenet-r/n03888257/cartoon_22.jpg +- data/imagenet-r/n04325704/deviantart_0.jpg +- data/imagenet-r/n07720875/sketch_23.jpg +- data/imagenet-r/n07753275/embroidery_1.jpg +- data/imagenet-r/n12267677/misc_73.jpg +- data/imagenet-r/n02165456/art_9.jpg +- data/imagenet-r/n02206856/origami_2.jpg +- data/imagenet-r/n04536866/painting_17.jpg +- data/imagenet-r/n01910747/embroidery_3.jpg +- data/imagenet-r/n02841315/toy_6.jpg +- data/imagenet-r/n02346627/cartoon_3.jpg +- data/imagenet-r/n02486410/painting_2.jpg +- data/imagenet-r/n02808440/origami_1.jpg +- data/imagenet-r/n02088466/misc_18.jpg +- data/imagenet-r/n02749479/misc_29.jpg +- data/imagenet-r/n02088238/misc_105.jpg +- data/imagenet-r/n02363005/graffiti_4.jpg +- data/imagenet-r/n02123045/sketch_0.jpg +- data/imagenet-r/n02106662/sketch_0.jpg +- data/imagenet-r/n02481823/origami_0.jpg +- data/imagenet-r/n02106166/sketch_23.jpg +- data/imagenet-r/n03773504/cartoon_8.jpg +- data/imagenet-r/n02279972/painting_1.jpg +- data/imagenet-r/n02112018/sketch_8.jpg +- data/imagenet-r/n07714990/cartoon_19.jpg +- data/imagenet-r/n02117135/videogame_3.jpg +- data/imagenet-r/n03930630/sketch_20.jpg +- data/imagenet-r/n01616318/painting_15.jpg +- data/imagenet-r/n01944390/tattoo_18.jpg +- data/imagenet-r/n01694178/origami_6.jpg +- data/imagenet-r/n01843383/embroidery_0.jpg +- data/imagenet-r/n02950826/videogame_16.jpg +- data/imagenet-r/n02883205/toy_16.jpg +- data/imagenet-r/n02364673/deviantart_2.jpg +- data/imagenet-r/n02092339/sketch_21.jpg +- data/imagenet-r/n02219486/tattoo_14.jpg +- data/imagenet-r/n02129604/deviantart_34.jpg +- data/imagenet-r/n03272010/cartoon_6.jpg +- data/imagenet-r/n02268443/sketch_12.jpg +- data/imagenet-r/n04141076/deviantart_16.jpg +- data/imagenet-r/n07920052/deviantart_15.jpg +- data/imagenet-r/n04465501/painting_8.jpg +- data/imagenet-r/n04347754/videogame_28.jpg +- data/imagenet-r/n01644373/painting_29.jpg +- data/imagenet-r/n02113023/misc_25.jpg +- data/imagenet-r/n02219486/misc_11.jpg +- data/imagenet-r/n07718472/cartoon_15.jpg +- data/imagenet-r/n02906734/cartoon_54.jpg +- data/imagenet-r/n07697313/painting_24.jpg +- data/imagenet-r/n02114367/misc_22.jpg +- data/imagenet-r/n02410509/sculpture_46.jpg +- data/imagenet-r/n01882714/embroidery_3.jpg +- data/imagenet-r/n02071294/sketch_23.jpg +- data/imagenet-r/n01748264/tattoo_7.jpg +- data/imagenet-r/n02088238/misc_73.jpg +- data/imagenet-r/n02108915/misc_116.jpg +- data/imagenet-r/n02749479/videogame_12.jpg +- data/imagenet-r/n04536866/cartoon_14.jpg +- data/imagenet-r/n04118538/cartoon_33.jpg +- data/imagenet-r/n02447366/painting_2.jpg +- data/imagenet-r/n04325704/cartoon_28.jpg +- data/imagenet-r/n02123045/sculpture_6.jpg +- data/imagenet-r/n01983481/sketch_21.jpg +- data/imagenet-r/n07714571/misc_3.jpg +- data/imagenet-r/n04591713/painting_16.jpg +- data/imagenet-r/n02939185/sculpture_0.jpg +- data/imagenet-r/n02206856/embroidery_30.jpg +- data/imagenet-r/n03424325/misc_68.jpg +- data/imagenet-r/n07768694/deviantart_8.jpg +- data/imagenet-r/n02091134/misc_12.jpg +- data/imagenet-r/n02077923/misc_30.jpg +- data/imagenet-r/n01843383/deviantart_7.jpg +- data/imagenet-r/n02092339/misc_50.jpg +- data/imagenet-r/n07873807/misc_5.jpg +- data/imagenet-r/n02423022/sketch_16.jpg +- data/imagenet-r/n07695742/misc_4.jpg +- data/imagenet-r/n02939185/sketch_4.jpg +- data/imagenet-r/n02206856/cartoon_36.jpg +- data/imagenet-r/n02112018/misc_39.jpg +- data/imagenet-r/n07734744/cartoon_24.jpg +- data/imagenet-r/n02797295/misc_76.jpg +- data/imagenet-r/n02655020/sketch_11.jpg +- data/imagenet-r/n02950826/sculpture_0.jpg +- data/imagenet-r/n02206856/tattoo_7.jpg +- data/imagenet-r/n02106166/toy_0.jpg +- data/imagenet-r/n07695742/sketch_9.jpg +- data/imagenet-r/n04141076/art_4.jpg +- data/imagenet-r/n02317335/toy_7.jpg +- data/imagenet-r/n02268443/misc_156.jpg +- data/imagenet-r/n02980441/videogame_22.jpg +- data/imagenet-r/n02134084/misc_112.jpg +- data/imagenet-r/n02007558/embroidery_13.jpg +- data/imagenet-r/n02092339/misc_40.jpg +- data/imagenet-r/n01494475/misc_94.jpg +- data/imagenet-r/n02123045/painting_36.jpg +- data/imagenet-r/n02119022/misc_70.jpg +- data/imagenet-r/n02165456/toy_21.jpg +- data/imagenet-r/n02108089/misc_19.jpg +- data/imagenet-r/n03594945/painting_4.jpg +- data/imagenet-r/n02363005/sketch_7.jpg +- data/imagenet-r/n02206856/cartoon_4.jpg +- data/imagenet-r/n02129165/misc_9.jpg +- data/imagenet-r/n02091134/misc_55.jpg +- data/imagenet-r/n03345487/toy_9.jpg +- data/imagenet-r/n07697313/sketch_4.jpg +- data/imagenet-r/n01806143/graffiti_6.jpg +- data/imagenet-r/n02423022/sculpture_24.jpg +- data/imagenet-r/n01833805/toy_0.jpg +- data/imagenet-r/n02206856/embroidery_26.jpg +- data/imagenet-r/n01498041/cartoon_16.jpg +- data/imagenet-r/n01983481/misc_1.jpg +- data/imagenet-r/n02481823/graffiti_7.jpg +- data/imagenet-r/n07697313/toy_15.jpg +- data/imagenet-r/n02206856/toy_34.jpg +- data/imagenet-r/n02906734/cartoon_6.jpg +- data/imagenet-r/n04536866/cartoon_2.jpg +- data/imagenet-r/n02268443/misc_54.jpg +- data/imagenet-r/n02317335/tattoo_4.jpg +- data/imagenet-r/n02236044/tattoo_0.jpg +- data/imagenet-r/n03452741/sketch_13.jpg +- data/imagenet-r/n01843383/sculpture_1.jpg +- data/imagenet-r/n02437616/cartoon_28.jpg +- data/imagenet-r/n02797295/misc_37.jpg +- data/imagenet-r/n02206856/misc_6.jpg +- data/imagenet-r/n07614500/toy_13.jpg +- data/imagenet-r/n01616318/deviantart_19.jpg +- data/imagenet-r/n02797295/sketch_12.jpg +- data/imagenet-r/n02092339/sketch_3.jpg +- data/imagenet-r/n01644373/cartoon_7.jpg +- data/imagenet-r/n02007558/misc_2.jpg +- data/imagenet-r/n01484850/tattoo_28.jpg +- data/imagenet-r/n04536866/sketch_18.jpg +- data/imagenet-r/n02966193/cartoon_0.jpg +- data/imagenet-r/n02112018/misc_27.jpg +- data/imagenet-r/n07714990/cartoon_2.jpg +- data/imagenet-r/n07734744/cartoon_28.jpg +- data/imagenet-r/n02966193/sketch_20.jpg +- data/imagenet-r/n04409515/cartoon_9.jpg +- data/imagenet-r/n03272010/cartoon_27.jpg +- data/imagenet-r/n02117135/graffiti_0.jpg +- data/imagenet-r/n07734744/sculpture_16.jpg +- data/imagenet-r/n01443537/cartoon_14.jpg +- data/imagenet-r/n07697313/toy_21.jpg +- data/imagenet-r/n02410509/graffiti_14.jpg +- data/imagenet-r/n02814860/cartoon_4.jpg +- data/imagenet-r/n09835506/sculpture_3.jpg +- data/imagenet-r/n02655020/videogame_19.jpg +targets: +- 177 +- 142 +- 63 +- 42 +- 14 +- 113 +- 107 +- 87 +- 154 +- 132 +- 132 +- 156 +- 177 +- 195 +- 162 +- 87 +- 195 +- 38 +- 26 +- 189 +- 50 +- 79 +- 37 +- 33 +- 85 +- 112 +- 182 +- 122 +- 73 +- 98 +- 1 +- 108 +- 35 +- 5 +- 141 +- 109 +- 60 +- 109 +- 66 +- 91 +- 100 +- 192 +- 141 +- 152 +- 0 +- 52 +- 36 +- 133 +- 92 +- 60 +- 9 +- 134 +- 37 +- 14 +- 0 +- 147 +- 174 +- 171 +- 20 +- 172 +- 99 +- 127 +- 137 +- 53 +- 147 +- 32 +- 57 +- 132 +- 186 +- 116 +- 151 +- 123 +- 138 +- 39 +- 168 +- 20 +- 32 +- 92 +- 149 +- 34 +- 140 +- 72 +- 122 +- 81 +- 70 +- 57 +- 125 +- 194 +- 73 +- 52 +- 107 +- 80 +- 73 +- 15 +- 63 +- 48 +- 71 +- 171 +- 33 +- 9 +- 148 +- 5 +- 198 +- 190 +- 103 +- 168 +- 55 +- 152 +- 32 +- 25 +- 61 +- 103 +- 158 +- 1 +- 136 +- 180 +- 62 +- 53 +- 70 +- 87 +- 193 +- 58 +- 142 +- 67 +- 57 +- 196 +- 47 +- 53 +- 137 +- 148 +- 172 +- 15 +- 179 +- 65 +- 117 +- 64 +- 101 +- 113 +- 91 +- 132 +- 117 +- 175 +- 30 +- 66 +- 178 +- 94 +- 148 +- 35 +- 71 +- 73 +- 145 +- 35 +- 115 +- 189 +- 169 +- 93 +- 45 +- 159 +- 184 +- 94 +- 174 +- 192 +- 13 +- 59 +- 52 +- 37 +- 93 +- 98 +- 112 +- 21 +- 129 +- 102 +- 17 +- 30 +- 164 +- 142 +- 108 +- 3 +- 193 +- 73 +- 90 +- 64 +- 79 +- 20 +- 157 +- 20 +- 113 +- 198 +- 185 +- 33 +- 64 +- 33 +- 3 +- 89 +- 129 +- 76 +- 187 +- 13 +- 181 +- 153 +- 115 +- 165 +- 135 +- 35 +- 113 +- 132 +- 87 +- 177 +- 28 +- 182 +- 145 +- 167 +- 117 +- 175 +- 160 +- 90 +- 96 +- 133 +- 169 +- 93 +- 48 +- 145 +- 117 +- 90 +- 107 +- 132 +- 10 +- 91 +- 112 +- 20 +- 99 +- 168 +- 163 +- 139 +- 1 +- 36 +- 164 +- 78 +- 96 +- 12 +- 175 +- 3 +- 78 +- 39 +- 36 +- 194 +- 91 +- 42 +- 198 +- 116 +- 20 +- 93 +- 62 +- 38 +- 107 +- 37 +- 107 +- 46 +- 58 +- 35 +- 27 +- 121 +- 14 +- 123 +- 98 +- 129 +- 60 +- 72 +- 197 +- 47 +- 3 +- 114 +- 148 +- 57 +- 28 +- 113 +- 36 +- 30 +- 36 +- 10 +- 93 +- 57 +- 25 +- 140 +- 80 +- 82 +- 153 +- 20 +- 133 +- 29 +- 196 +- 20 +- 113 +- 60 +- 189 +- 134 +- 158 +- 48 +- 94 +- 198 +- 192 +- 71 +- 182 +- 78 +- 68 +- 88 +- 159 +- 106 +- 148 +- 64 +- 58 +- 106 +- 16 +- 159 +- 128 +- 38 +- 140 +- 15 +- 164 +- 61 +- 132 +- 94 +- 50 +- 102 +- 101 +- 188 +- 172 +- 187 +- 14 +- 129 +- 132 +- 20 +- 32 +- 156 +- 69 +- 113 +- 17 +- 106 +- 17 +- 156 +- 120 +- 112 +- 48 +- 18 +- 93 +- 16 +- 27 +- 186 +- 193 +- 35 +- 63 +- 99 +- 178 +- 160 +- 135 +- 22 +- 49 +- 60 +- 0 +- 196 +- 133 +- 120 +- 142 +- 78 +- 125 +- 67 +- 164 +- 64 +- 47 +- 165 +- 98 +- 168 +- 113 +- 73 +- 3 +- 122 +- 129 +- 15 +- 48 +- 32 +- 72 +- 7 +- 20 +- 166 +- 11 +- 168 +- 158 +- 122 +- 0 +- 13 +- 74 +- 142 +- 148 +- 173 +- 151 +- 164 +- 60 +- 135 +- 146 +- 94 +- 50 +- 14 +- 69 +- 102 +- 38 +- 38 +- 71 +- 110 +- 76 +- 14 +- 148 +- 88 +- 79 +- 186 +- 174 +- 87 +- 62 +- 166 +- 39 +- 181 +- 99 +- 47 +- 125 +- 114 +- 102 +- 69 +- 145 +- 63 +- 153 +- 55 +- 98 +- 136 +- 174 +- 33 +- 34 +- 113 +- 152 +- 187 +- 61 +- 9 +- 123 +- 57 +- 61 +- 57 +- 195 +- 76 +- 25 +- 119 +- 9 +- 93 +- 114 +- 69 +- 104 +- 49 +- 65 +- 169 +- 109 +- 191 +- 80 +- 164 +- 0 +- 78 +- 130 +- 143 +- 133 +- 83 +- 133 +- 39 +- 112 +- 150 +- 103 +- 162 +- 184 +- 78 +- 58 +- 187 +- 114 +- 159 +- 106 +- 0 +- 191 +- 92 +- 157 +- 7 +- 36 +- 73 +- 27 +- 9 +- 41 +- 148 +- 115 +- 194 +- 97 +- 123 +- 84 +- 170 +- 71 +- 105 +- 11 +- 94 +- 63 +- 156 +- 48 +- 145 +- 132 +- 168 +- 155 +- 147 +- 11 +- 168 +- 102 +- 118 +- 36 +- 190 +- 65 +- 180 +- 44 +- 162 +- 113 +- 113 +- 37 +- 102 +- 72 +- 37 +- 43 +- 138 +- 92 +- 0 +- 130 +- 30 +- 86 +- 175 +- 53 +- 179 +- 188 +- 53 +- 89 +- 113 +- 112 +- 171 +- 53 +- 3 +- 113 +- 20 +- 83 +- 21 +- 106 +- 9 +- 122 +- 53 +- 58 +- 90 +- 153 +- 122 +- 73 +- 112 +- 135 +- 145 +- 57 +- 89 +- 44 +- 172 +- 99 +- 57 +- 120 +- 53 +- 92 +- 106 +- 53 +- 116 +- 162 +- 90 +- 163 +- 48 +- 168 +- 18 +- 112 +- 164 +- 9 +- 13 +- 98 +- 63 +- 67 +- 94 +- 49 +- 122 +- 145 +- 96 +- 94 +- 36 +- 192 +- 158 +- 20 +- 186 +- 6 +- 153 +- 119 +- 187 +- 18 +- 183 +- 65 +- 189 +- 78 +- 71 +- 44 +- 18 +- 38 +- 189 +- 98 +- 102 +- 6 +- 4 +- 30 +- 184 +- 61 +- 25 +- 36 +- 58 +- 23 +- 186 +- 35 +- 94 +- 168 +- 142 +- 161 +- 14 +- 6 +- 42 +- 43 +- 185 +- 63 +- 183 +- 9 +- 171 +- 64 +- 108 +- 138 +- 169 +- 190 +- 92 +- 194 +- 120 +- 37 +- 120 +- 24 +- 21 +- 168 +- 13 +- 28 +- 31 +- 43 +- 176 +- 14 +- 54 +- 128 +- 110 +- 49 +- 163 +- 159 +- 12 +- 122 +- 199 +- 153 +- 160 +- 148 +- 32 +- 32 +- 184 +- 73 +- 165 +- 113 +- 88 +- 103 +- 90 +- 14 +- 139 +- 57 +- 74 +- 5 +- 100 +- 80 +- 107 +- 67 +- 158 +- 108 +- 5 +- 113 +- 187 +- 135 +- 174 +- 64 +- 17 +- 67 +- 75 +- 152 +- 35 +- 49 +- 35 +- 159 +- 64 +- 14 +- 37 +- 84 +- 44 +- 99 +- 87 +- 63 +- 93 +- 103 +- 187 +- 147 +- 108 +- 160 +- 38 +- 30 +- 84 +- 145 +- 133 +- 173 +- 141 +- 158 +- 151 +- 40 +- 72 +- 28 +- 108 +- 79 +- 73 +- 82 +- 48 +- 182 +- 175 +- 5 +- 137 +- 62 +- 53 +- 128 +- 1 +- 2 +- 72 +- 138 +- 138 +- 193 +- 50 +- 149 +- 58 +- 128 +- 110 +- 149 +- 32 +- 54 +- 101 +- 164 +- 3 +- 9 +- 97 +- 114 +- 65 +- 20 +- 156 +- 198 +- 109 +- 29 +- 153 +- 77 +- 60 +- 7 +- 133 +- 50 +- 28 +- 37 +- 1 +- 133 +- 36 +- 72 +- 127 +- 175 +- 113 +- 100 +- 93 +- 167 +- 81 +- 73 +- 169 +- 145 +- 63 +- 43 +- 112 +- 171 +- 159 +- 11 +- 48 +- 161 +- 0 +- 193 +- 159 +- 168 +- 159 +- 67 +- 10 +- 63 +- 61 +- 148 +- 99 +- 122 +- 29 +- 138 +- 69 +- 141 +- 98 +- 0 +- 138 +- 60 +- 53 +- 114 +- 73 +- 35 +- 122 +- 151 +- 94 +- 142 +- 173 +- 63 +- 91 +- 120 +- 1 +- 72 +- 86 +- 53 +- 82 +- 122 +- 151 +- 30 +- 100 +- 127 +- 110 +- 35 +- 43 +- 79 +- 181 +- 148 +- 27 +- 112 +- 8 +- 106 +- 176 +- 185 +- 38 +- 21 +- 169 +- 147 +- 32 +- 133 +- 159 +- 28 +- 116 +- 118 +- 112 +- 185 +- 13 +- 106 +- 137 +- 53 +- 142 +- 77 +- 32 +- 49 +- 145 +- 144 +- 158 +- 69 +- 14 +- 116 +- 113 +- 36 +- 51 +- 28 +- 150 +- 159 +- 21 +- 171 +- 26 +- 192 +- 21 +- 129 +- 14 +- 86 +- 44 +- 50 +- 78 +- 90 +- 170 +- 168 +- 113 +- 28 +- 73 +- 74 +- 63 +- 135 +- 20 +- 177 +- 133 +- 94 +- 122 +- 15 +- 124 +- 112 +- 163 +- 97 +- 3 +- 41 +- 91 +- 189 +- 194 +- 36 +- 67 +- 48 +- 94 +- 67 +- 72 +- 0 +- 17 +- 106 +- 30 +- 101 +- 122 +- 15 +- 84 +- 74 +- 73 +- 171 +- 94 +- 3 +- 110 +- 77 +- 194 +- 36 +- 137 +- 119 +- 124 +- 0 +- 61 +- 74 +- 115 +- 153 +- 145 +- 175 +- 74 +- 117 +- 171 +- 164 +- 182 +- 41 +- 3 +- 35 +- 86 +- 52 +- 180 +- 180 +- 49 +- 44 +- 121 +- 35 +- 108 +- 124 +- 37 +- 93 +- 84 +- 171 +- 95 +- 160 +- 109 +- 93 +- 117 +- 193 +- 13 +- 91 +- 153 +- 192 +- 104 +- 72 +- 71 +- 159 +- 79 +- 41 +- 52 +- 101 +- 1 +- 143 +- 93 +- 47 +- 153 +- 113 +- 121 +- 110 +- 109 +- 97 +- 185 +- 108 +- 16 +- 41 +- 76 +- 22 +- 32 +- 171 +- 141 +- 160 +- 61 +- 163 +- 10 +- 19 +- 130 +- 99 +- 87 +- 2 +- 153 +- 95 +- 132 +- 82 +- 91 +- 1 +- 167 +- 189 +- 87 +- 109 +- 42 +- 178 +- 137 +- 122 +- 151 +- 3 +- 86 +- 102 +- 98 +- 180 +- 173 +- 35 +- 118 +- 99 +- 136 +- 115 +- 164 +- 96 +- 142 +- 198 +- 162 +- 114 +- 27 +- 106 +- 95 +- 169 +- 27 +- 93 +- 71 +- 48 +- 113 +- 61 +- 77 +- 94 +- 31 +- 82 +- 152 +- 135 +- 115 +- 3 +- 94 +- 160 +- 180 +- 102 +- 119 +- 20 +- 100 +- 26 +- 60 +- 10 +- 158 +- 47 +- 36 +- 61 +- 91 +- 73 +- 127 +- 177 +- 65 +- 174 +- 90 +- 159 +- 159 +- 63 +- 141 +- 157 +- 20 +- 0 +- 104 +- 182 +- 41 +- 43 +- 185 +- 176 +- 69 +- 110 +- 76 +- 78 +- 4 +- 165 +- 198 +- 41 +- 0 +- 185 +- 173 +- 164 +- 102 +- 63 +- 173 +- 35 +- 24 +- 166 +- 13 +- 76 +- 189 +- 198 +- 164 +- 134 +- 192 +- 73 +- 8 +- 108 +- 145 +- 145 +- 116 +- 100 +- 128 +- 36 +- 116 +- 119 +- 71 +- 77 +- 75 +- 103 +- 176 +- 81 +- 37 +- 67 +- 137 +- 25 +- 65 +- 112 +- 64 +- 19 +- 5 +- 61 +- 96 +- 28 +- 163 +- 157 +- 48 +- 73 +- 113 +- 153 +- 133 +- 5 +- 53 +- 80 +- 170 +- 145 +- 2 +- 158 +- 91 +- 7 +- 90 +- 48 +- 112 +- 47 +- 13 +- 74 +- 33 +- 79 +- 49 +- 99 +- 137 +- 109 +- 78 +- 81 +- 134 +- 97 +- 163 +- 109 +- 96 +- 28 +- 167 +- 80 +- 125 +- 168 +- 191 +- 106 +- 120 +- 20 +- 83 +- 78 +- 21 +- 92 +- 153 +- 175 +- 196 +- 112 +- 21 +- 82 +- 99 +- 82 +- 96 +- 120 +- 132 +- 75 +- 159 +- 103 +- 112 +- 96 +- 74 +- 113 +- 24 +- 21 +- 156 +- 144 +- 19 +- 48 +- 25 +- 152 +- 90 +- 74 +- 0 +- 96 +- 185 +- 100 +- 127 +- 14 +- 156 +- 9 +- 194 +- 72 +- 159 +- 114 +- 58 +- 72 +- 18 +- 103 +- 7 +- 168 +- 72 +- 158 +- 77 +- 168 +- 139 +- 106 +- 20 +- 4 +- 198 +- 182 +- 115 +- 186 +- 177 +- 18 +- 71 +- 99 +- 39 +- 34 +- 185 +- 33 +- 137 +- 15 +- 145 +- 73 +- 35 +- 152 +- 113 +- 149 +- 50 +- 147 +- 21 +- 145 +- 20 +- 137 +- 41 +- 94 +- 115 +- 168 +- 171 +- 185 +- 138 +- 114 +- 12 +- 167 +- 30 +- 35 +- 152 +- 165 +- 19 +- 91 +- 158 +- 72 +- 110 +- 185 +- 1 +- 1 +- 30 +- 169 +- 32 +- 72 +- 72 +- 158 +- 35 +- 194 +- 57 +- 55 +- 81 +- 64 +- 186 +- 127 +- 184 +- 178 +- 86 +- 41 +- 82 +- 11 +- 102 +- 74 +- 70 +- 132 +- 18 +- 28 +- 148 +- 54 +- 159 +- 133 +- 93 +- 0 +- 98 +- 32 +- 45 +- 44 +- 132 +- 89 +- 28 +- 162 +- 169 +- 132 +- 44 +- 24 +- 182 +- 100 +- 68 +- 6 +- 22 +- 35 +- 135 +- 101 +- 163 +- 179 +- 115 +- 32 +- 128 +- 77 +- 196 +- 44 +- 125 +- 164 +- 183 +- 133 +- 100 +- 155 +- 119 +- 111 +- 131 +- 93 +- 182 +- 94 +- 65 +- 101 +- 69 +- 22 +- 49 +- 109 +- 79 +- 74 +- 36 +- 88 +- 0 +- 122 +- 142 +- 113 +- 102 +- 17 +- 199 +- 172 +- 154 +- 115 +- 112 +- 3 +- 187 +- 11 +- 170 +- 3 +- 27 +- 15 +- 91 +- 42 +- 138 +- 94 +- 171 +- 197 +- 138 +- 154 +- 141 +- 185 +- 134 +- 45 +- 14 +- 153 +- 193 +- 22 +- 113 +- 75 +- 60 +- 198 +- 143 +- 179 +- 47 +- 171 +- 149 +- 66 +- 161 +- 180 +- 20 +- 146 +- 108 +- 186 +- 75 +- 158 +- 27 +- 163 +- 125 +- 27 +- 60 +- 27 +- 101 +- 22 +- 171 +- 187 +- 0 +- 148 +- 192 +- 147 +- 103 +- 147 +- 44 +- 44 +- 145 +- 100 +- 142 +- 93 +- 121 +- 43 +- 182 +- 59 +- 167 +- 180 +- 15 +- 71 +- 14 +- 1 +- 133 +- 198 +- 152 +- 43 +- 141 +- 49 +- 172 +- 194 +- 37 +- 145 +- 176 +- 149 +- 113 +- 102 +- 97 +- 194 +- 54 +- 17 +- 92 +- 165 +- 116 +- 78 +- 184 +- 167 +- 63 +- 18 +- 112 +- 4 +- 97 +- 102 +- 44 +- 193 +- 129 +- 171 +- 199 +- 4 +- 106 +- 73 +- 190 +- 51 +- 81 +- 186 +- 14 +- 58 +- 20 +- 133 +- 1 +- 92 +- 73 +- 130 +- 174 +- 169 +- 57 +- 28 +- 110 +- 10 +- 83 +- 199 +- 36 +- 84 +- 115 +- 151 +- 53 +- 63 +- 73 +- 14 +- 176 +- 114 +- 98 +- 95 +- 132 +- 122 +- 43 +- 141 +- 153 +- 135 +- 3 +- 153 +- 125 +- 72 +- 119 +- 7 +- 187 +- 7 +- 67 +- 135 +- 168 +- 86 +- 27 +- 178 +- 35 +- 43 +- 80 +- 3 +- 27 +- 28 +- 20 +- 78 +- 33 +- 98 +- 26 +- 84 +- 172 +- 90 +- 198 +- 130 +- 39 +- 13 +- 53 +- 195 +- 57 +- 5 +- 24 +- 117 +- 57 +- 14 +- 109 +- 9 +- 88 +- 49 +- 25 +- 108 +- 86 +- 158 +- 64 +- 142 +- 41 +- 136 +- 137 +- 58 +- 20 +- 106 +- 51 +- 188 +- 163 +- 133 +- 167 +- 14 +- 3 +- 166 +- 58 +- 15 +- 34 +- 21 +- 198 +- 70 +- 153 +- 14 +- 94 +- 2 +- 20 +- 176 +- 148 +- 192 +- 114 +- 169 +- 21 +- 53 +- 167 +- 73 +- 178 +- 47 +- 102 +- 58 +- 163 +- 143 +- 32 +- 186 +- 98 +- 140 +- 74 +- 114 +- 106 +- 9 +- 112 +- 134 +- 52 +- 86 +- 153 +- 53 +- 198 +- 62 +- 109 +- 159 +- 114 +- 140 +- 123 +- 58 +- 24 +- 10 +- 32 +- 71 +- 25 +- 80 +- 145 +- 93 +- 152 +- 61 +- 145 +- 169 +- 176 +- 170 +- 188 +- 181 +- 137 +- 160 +- 51 +- 32 +- 64 +- 79 +- 63 +- 99 +- 87 +- 145 +- 186 +- 63 +- 33 +- 50 +- 31 +- 104 +- 164 +- 14 +- 135 +- 113 +- 7 +- 98 +- 178 +- 6 +- 20 +- 138 +- 37 +- 70 +- 21 +- 76 +- 18 +- 158 +- 159 +- 121 +- 128 +- 73 +- 43 +- 17 +- 16 +- 53 +- 185 +- 155 +- 14 +- 192 +- 122 +- 132 +- 14 +- 171 +- 100 +- 113 +- 121 +- 168 +- 157 +- 14 +- 93 +- 99 +- 86 +- 100 +- 63 +- 186 +- 26 +- 10 +- 34 +- 137 +- 48 +- 71 +- 137 +- 47 +- 104 +- 14 +- 38 +- 133 +- 82 +- 128 +- 35 +- 37 +- 37 +- 50 +- 91 +- 44 +- 9 +- 91 +- 72 +- 95 +- 160 +- 175 +- 14 +- 107 +- 98 +- 148 +- 73 +- 189 +- 71 +- 6 +- 28 +- 142 +- 116 +- 91 +- 71 +- 82 +- 95 +- 115 +- 53 +- 102 +- 27 +- 140 +- 19 +- 139 +- 12 +- 92 +- 114 +- 13 +- 43 +- 163 +- 27 +- 113 +- 103 +- 139 +- 150 +- 39 +- 154 +- 156 +- 140 +- 117 +- 129 +- 72 +- 58 +- 66 +- 53 +- 142 +- 129 +- 113 +- 98 +- 35 +- 131 +- 63 +- 134 +- 142 +- 25 +- 69 +- 165 +- 96 +- 76 +- 23 +- 52 +- 69 +- 168 +- 81 +- 4 +- 35 +- 18 +- 94 +- 82 +- 36 +- 152 +- 183 +- 177 +- 198 +- 14 +- 115 +- 23 +- 63 +- 170 +- 100 +- 168 +- 39 +- 80 +- 71 +- 125 +- 113 +- 144 +- 141 +- 162 +- 14 +- 91 +- 90 +- 157 +- 23 +- 94 +- 185 +- 13 +- 5 +- 153 +- 19 +- 100 +- 63 +- 134 +- 135 +- 159 +- 17 +- 158 +- 120 +- 97 +- 106 +- 74 +- 90 +- 152 +- 90 +- 137 +- 153 +- 13 +- 182 +- 150 +- 151 +- 47 +- 66 +- 31 +- 36 +- 103 +- 185 +- 126 +- 73 +- 138 +- 186 +- 26 +- 113 +- 150 +- 6 +- 145 +- 95 +- 10 +- 53 +- 11 +- 96 +- 38 +- 147 +- 42 +- 91 +- 128 +- 67 +- 173 +- 57 +- 63 +- 102 +- 185 +- 54 +- 133 +- 116 +- 43 +- 55 +- 18 +- 178 +- 102 +- 48 +- 78 +- 60 +- 142 +- 163 +- 135 +- 156 +- 10 +- 66 +- 142 +- 89 +- 100 +- 122 +- 104 +- 35 +- 166 +- 94 +- 175 +- 140 +- 158 +- 27 +- 168 +- 0 +- 153 +- 78 +- 30 +- 8 +- 21 +- 91 +- 50 +- 36 +- 33 +- 13 +- 100 +- 49 +- 137 +- 103 +- 153 +- 167 +- 38 +- 122 +- 70 +- 191 +- 52 +- 64 +- 117 +- 60 +- 28 +- 20 +- 132 +- 149 +- 50 +- 112 +- 108 +- 60 +- 148 +- 35 +- 78 +- 113 +- 25 +- 50 +- 53 +- 14 +- 136 +- 20 +- 63 +- 93 +- 67 +- 94 +- 16 +- 184 +- 24 +- 4 +- 35 +- 173 +- 81 +- 94 +- 94 +- 75 +- 91 +- 74 +- 106 +- 142 +- 63 +- 27 +- 32 +- 155 +- 141 +- 109 +- 36 +- 93 +- 150 +- 198 +- 159 +- 68 +- 158 +- 161 +- 79 +- 63 +- 72 +- 84 +- 15 +- 44 +- 58 +- 48 +- 169 +- 32 +- 27 +- 120 +- 192 +- 194 +- 73 +- 186 +- 28 +- 159 +- 63 +- 168 +- 115 +- 170 +- 55 +- 2 +- 98 +- 145 +- 14 +- 30 +- 194 +- 48 +- 104 +- 74 +- 125 +- 28 +- 177 +- 138 +- 51 +- 14 +- 41 +- 21 +- 72 +- 61 +- 115 +- 179 +- 53 +- 160 +- 44 +- 23 +- 31 +- 58 +- 41 +- 195 +- 183 +- 149 +- 151 +- 82 +- 134 +- 64 +- 48 +- 53 +- 3 +- 99 +- 54 +- 57 +- 140 +- 167 +- 138 +- 30 +- 94 +- 74 +- 166 +- 35 +- 49 +- 133 +- 173 +- 73 +- 132 +- 155 +- 110 +- 111 +- 26 +- 162 +- 108 +- 37 +- 122 +- 67 +- 197 +- 163 +- 197 +- 72 +- 193 +- 189 +- 84 +- 108 +- 153 +- 13 +- 36 +- 164 +- 148 +- 62 +- 101 +- 73 +- 44 +- 73 +- 78 +- 82 +- 58 +- 133 +- 66 +- 3 +- 56 +- 174 +- 57 +- 57 +- 66 +- 93 +- 53 +- 154 +- 95 +- 102 +- 90 +- 100 +- 77 +- 97 +- 174 +- 76 +- 22 +- 112 +- 186 +- 174 +- 148 +- 94 +- 53 +- 30 +- 0 +- 177 +- 173 +- 152 +- 98 +- 72 +- 113 +- 19 +- 38 +- 162 +- 98 +- 73 +- 99 +- 26 +- 72 +- 158 +- 72 +- 20 +- 81 +- 90 +- 53 +- 173 +- 36 +- 146 +- 16 +- 153 +- 171 +- 137 +- 7 +- 35 +- 24 +- 97 +- 143 +- 145 +- 82 +- 192 +- 16 +- 44 +- 19 +- 53 +- 119 +- 76 +- 118 +- 101 +- 33 +- 167 +- 38 +- 166 +- 132 +- 24 +- 14 +- 78 +- 116 +- 132 +- 156 +- 98 +- 102 +- 28 +- 158 +- 10 +- 50 +- 79 +- 137 +- 54 +- 101 +- 171 +- 145 +- 36 +- 156 +- 7 +- 173 +- 171 +- 145 +- 61 +- 26 +- 5 +- 1 +- 167 +- 77 +- 168 +- 45 +- 189 +- 144 +- 113 +- 82 +- 192 +- 80 +- 136 +- 113 +- 100 +- 60 +- 89 +- 82 +- 24 +- 167 +- 77 +- 134 +- 112 +- 38 +- 137 +- 112 +- 70 +- 82 +- 170 +- 28 +- 193 +- 72 +- 35 +- 123 +- 5 +- 132 +- 59 +- 186 +- 187 +- 39 +- 198 +- 167 +- 171 +- 190 +- 67 +- 109 +- 98 +- 49 +- 99 +- 128 +- 0 +- 50 +- 131 +- 122 +- 96 +- 116 +- 14 +- 137 +- 51 +- 9 +- 114 +- 124 +- 96 +- 158 +- 149 +- 184 +- 30 +- 39 +- 125 +- 5 +- 28 +- 117 +- 152 +- 164 +- 96 +- 163 +- 157 +- 15 +- 114 +- 86 +- 4 +- 21 +- 132 +- 33 +- 53 +- 133 +- 183 +- 66 +- 48 +- 84 +- 93 +- 65 +- 70 +- 90 +- 94 +- 184 +- 36 +- 137 +- 69 +- 142 +- 67 +- 155 +- 45 +- 182 +- 26 +- 106 +- 33 +- 115 +- 185 +- 14 +- 112 +- 38 +- 138 +- 69 +- 173 +- 41 +- 27 +- 145 +- 129 +- 96 +- 189 +- 20 +- 133 +- 175 +- 25 +- 62 +- 24 +- 85 +- 37 +- 36 +- 75 +- 112 +- 144 +- 148 +- 167 +- 189 +- 116 +- 114 +- 120 +- 99 +- 119 +- 197 +- 32 +- 113 +- 65 +- 186 +- 10 +- 2 +- 57 +- 26 +- 111 +- 75 +- 28 +- 7 +- 5 +- 36 +- 125 +- 3 +- 14 +- 106 +- 94 +- 92 +- 129 +- 154 +- 0 +- 172 +- 39 +- 56 +- 69 +- 168 +- 70 +- 163 +- 192 +- 128 +- 53 +- 47 +- 159 +- 180 +- 113 +- 120 +- 153 +- 70 +- 38 +- 185 +- 140 +- 174 +- 103 +- 60 +- 79 +- 178 +- 86 +- 145 +- 24 +- 3 +- 103 +- 59 +- 44 +- 112 +- 91 +- 142 +- 115 +- 190 +- 114 +- 79 +- 131 +- 53 +- 90 +- 187 +- 75 +- 161 +- 139 +- 70 +- 193 +- 157 +- 150 +- 177 +- 114 +- 150 +- 154 +- 48 +- 15 +- 38 +- 11 +- 20 +- 100 +- 168 +- 93 +- 50 +- 28 +- 48 +- 3 +- 17 +- 78 +- 28 +- 152 +- 82 +- 14 +- 129 +- 164 +- 28 +- 11 +- 140 +- 153 +- 129 +- 66 +- 3 +- 163 +- 49 +- 49 +- 179 +- 43 +- 195 +- 140 +- 142 +- 40 +- 79 +- 160 +- 105 +- 161 +- 164 +- 37 +- 107 +- 64 +- 89 +- 194 +- 170 +- 37 +- 53 +- 184 +- 21 +- 70 +- 41 +- 23 +- 117 +- 192 +- 70 +- 197 +- 135 +- 59 +- 168 +- 189 +- 166 +- 78 +- 120 +- 189 +- 15 +- 35 +- 80 +- 120 +- 18 +- 99 +- 72 +- 104 +- 20 +- 137 +- 114 +- 148 +- 158 +- 85 +- 83 +- 114 +- 94 +- 18 +- 120 +- 119 +- 132 +- 119 +- 130 +- 151 +- 66 +- 132 +- 76 +- 193 +- 82 +- 97 +- 20 +- 89 +- 81 +- 140 +- 95 +- 90 +- 77 +- 75 +- 165 +- 49 +- 85 +- 157 +- 0 +- 32 +- 111 +- 77 +- 112 +- 36 +- 20 +- 138 +- 63 +- 14 +- 86 +- 40 +- 194 +- 104 +- 132 +- 95 +- 13 +- 14 +- 58 +- 193 +- 133 +- 150 +- 20 +- 94 +- 166 +- 181 +- 174 +- 35 +- 10 +- 141 +- 44 +- 13 +- 96 +- 99 +- 196 +- 53 +- 108 +- 1 +- 54 +- 48 +- 143 +- 92 +- 153 +- 110 +- 160 +- 36 +- 100 +- 80 +- 65 +- 141 +- 82 +- 64 +- 35 +- 140 +- 64 +- 129 +- 40 +- 33 +- 35 +- 169 +- 153 +- 52 +- 186 +- 159 +- 76 +- 50 +- 100 +- 14 +- 38 +- 194 +- 99 +- 73 +- 186 +- 192 +- 103 +- 162 +- 43 +- 141 +- 93 +- 72 +- 81 +- 94 +- 148 +- 103 +- 153 +- 19 +- 151 +- 91 +- 70 +- 198 +- 58 +- 95 +- 61 +- 115 +- 97 +- 139 +- 57 +- 63 +- 181 +- 113 +- 82 +- 100 +- 116 +- 99 +- 37 +- 35 +- 72 +- 11 +- 174 +- 48 +- 171 +- 76 +- 177 +- 174 +- 124 +- 92 +- 113 +- 58 +- 9 +- 38 +- 164 +- 187 +- 66 +- 99 +- 82 +- 97 +- 190 +- 76 +- 64 +- 191 +- 1 +- 55 +- 76 +- 95 +- 58 +- 28 +- 189 +- 40 +- 80 +- 38 +- 137 +- 72 +- 149 +- 171 +- 27 +- 128 +- 77 +- 192 +- 12 +- 3 +- 35 +- 37 +- 100 +- 116 +- 107 +- 114 +- 141 +- 108 +- 61 +- 161 +- 71 +- 146 +- 138 +- 168 +- 37 +- 142 +- 172 +- 163 +- 64 +- 182 +- 20 +- 129 +- 110 +- 175 +- 165 +- 75 +- 156 +- 189 +- 9 +- 109 +- 95 +- 171 +- 116 +- 98 +- 99 +- 0 +- 171 +- 159 +- 10 +- 132 +- 78 +- 66 +- 16 +- 11 +- 72 +- 97 +- 84 +- 51 +- 84 +- 59 +- 76 +- 115 +- 174 +- 90 +- 90 +- 76 +- 137 +- 131 +- 104 +- 129 +- 198 +- 179 +- 65 +- 118 +- 43 +- 51 +- 31 +- 14 +- 82 +- 192 +- 184 +- 97 +- 48 +- 55 +- 72 +- 35 +- 113 +- 20 +- 57 +- 72 +- 163 +- 87 +- 23 +- 102 +- 91 +- 142 +- 98 +- 140 +- 130 +- 159 +- 159 +- 173 +- 102 +- 193 +- 58 +- 4 +- 132 +- 48 +- 140 +- 123 +- 167 +- 184 +- 104 +- 49 +- 31 +- 168 +- 35 +- 5 +- 131 +- 171 +- 119 +- 37 +- 151 +- 93 +- 23 +- 65 +- 70 +- 174 +- 53 +- 125 +- 78 +- 92 +- 30 +- 3 +- 109 +- 64 +- 79 +- 145 +- 129 +- 49 +- 122 +- 20 +- 73 +- 71 +- 0 +- 151 +- 60 +- 138 +- 53 +- 82 +- 156 +- 75 +- 163 +- 61 +- 192 +- 35 +- 30 +- 159 +- 94 +- 48 +- 3 +- 3 +- 112 +- 190 +- 70 +- 86 +- 78 +- 135 +- 0 +- 152 +- 20 +- 2 +- 187 +- 125 +- 14 +- 187 +- 61 +- 82 +- 6 +- 24 +- 43 +- 78 +- 69 +- 134 +- 127 +- 64 +- 144 +- 164 +- 165 +- 47 +- 146 +- 198 +- 92 +- 21 +- 197 +- 8 +- 20 +- 150 +- 121 +- 48 +- 35 +- 82 +- 76 +- 112 +- 198 +- 90 +- 173 +- 90 +- 26 +- 24 +- 29 +- 112 +- 73 +- 160 +- 74 +- 5 +- 99 +- 103 +- 42 +- 11 +- 75 +- 49 +- 1 +- 159 +- 92 +- 28 +- 75 +- 159 +- 1 +- 14 +- 49 +- 183 +- 30 +- 118 +- 151 +- 43 +- 57 +- 194 +- 49 +- 102 +- 72 +- 47 +- 94 +- 198 +- 82 +- 79 +- 26 +- 96 +- 183 +- 138 +- 31 +- 106 +- 113 +- 141 +- 25 +- 26 +- 190 +- 78 +- 180 +- 141 +- 149 +- 82 +- 164 +- 96 +- 122 +- 134 +- 152 +- 61 +- 80 +- 75 +- 100 +- 95 +- 20 +- 68 +- 0 +- 185 +- 182 +- 129 +- 81 +- 68 +- 62 +- 111 +- 11 +- 106 +- 100 +- 19 +- 122 +- 90 +- 19 +- 77 +- 64 +- 48 +- 90 +- 190 +- 65 +- 113 +- 110 +- 151 +- 94 +- 53 +- 101 +- 100 +- 11 +- 8 +- 160 +- 174 +- 62 +- 103 +- 3 +- 21 +- 63 +- 34 +- 102 +- 16 +- 122 +- 32 +- 189 +- 122 +- 84 +- 19 +- 20 +- 133 +- 58 +- 176 +- 33 +- 82 +- 169 +- 65 +- 90 +- 57 +- 158 +- 125 +- 3 +- 82 +- 149 +- 30 +- 32 +- 192 +- 134 +- 0 +- 98 +- 12 +- 66 +- 164 +- 134 +- 86 +- 186 +- 89 +- 109 +- 171 +- 145 +- 28 +- 158 +- 82 +- 153 +- 48 +- 56 +- 131 +- 32 +- 0 +- 133 +- 89 +- 163 +- 122 +- 65 +- 19 +- 194 +- 63 +- 48 +- 87 +- 52 +- 43 +- 153 +- 90 +- 102 +- 66 +- 37 +- 14 +- 91 +- 35 +- 194 +- 20 +- 82 +- 14 +- 5 +- 152 +- 135 +- 61 +- 171 +- 129 +- 182 +- 124 +- 43 +- 71 +- 47 +- 137 +- 54 +- 110 +- 37 +- 125 +- 94 +- 67 +- 32 +- 154 +- 152 +- 82 +- 167 +- 25 +- 35 +- 184 +- 35 +- 73 +- 0 +- 25 +- 63 +- 192 +- 11 +- 159 +- 160 +- 107 +- 58 +- 169 +- 87 +- 132 +- 1 +- 198 +- 53 +- 75 +- 114 +- 119 +- 6 +- 69 +- 71 +- 171 +- 24 +- 99 +- 113 +- 134 +- 72 +- 1 +- 159 +- 85 +- 91 +- 184 +- 119 +- 21 +- 160 +- 65 +- 37 +- 185 +- 125 +- 132 +- 53 +- 73 +- 100 +- 140 +- 29 +- 59 +- 158 +- 116 +- 83 +- 152 +- 177 +- 87 +- 78 +- 33 +- 45 +- 70 +- 113 +- 154 +- 144 +- 53 +- 42 +- 194 +- 126 +- 177 +- 125 +- 94 +- 139 +- 197 +- 95 +- 178 +- 43 +- 108 +- 88 +- 115 +- 110 +- 122 +- 37 +- 20 +- 49 +- 83 +- 35 +- 167 +- 113 +- 153 +- 74 +- 153 +- 58 +- 81 +- 48 +- 99 +- 94 +- 31 +- 106 +- 113 +- 112 +- 171 +- 114 +- 97 +- 53 +- 182 +- 61 +- 26 +- 152 +- 29 +- 137 +- 44 +- 0 +- 110 +- 26 +- 84 +- 21 +- 138 +- 177 +- 197 +- 72 +- 60 +- 159 +- 33 +- 53 +- 53 +- 65 +- 28 +- 162 +- 198 +- 101 +- 115 +- 149 +- 44 +- 110 +- 138 +- 127 +- 20 +- 163 +- 90 +- 144 +- 48 +- 169 +- 102 +- 33 +- 191 +- 63 +- 128 +- 71 +- 0 +- 84 +- 174 +- 163 +- 20 +- 62 +- 8 +- 72 +- 24 +- 102 +- 4 +- 70 +- 115 +- 33 +- 86 +- 87 +- 27 +- 185 +- 168 +- 153 +- 141 +- 133 +- 140 +- 65 +- 158 +- 21 +- 198 +- 109 +- 159 +- 111 +- 45 +- 198 +- 75 +- 126 +- 150 +- 95 +- 171 +- 84 +- 20 +- 111 +- 14 +- 177 +- 153 +- 41 +- 61 +- 77 +- 89 +- 50 +- 28 +- 43 +- 119 +- 180 +- 154 +- 65 +- 33 +- 164 +- 192 +- 101 +- 62 +- 79 +- 191 +- 80 +- 168 +- 122 +- 194 +- 40 +- 26 +- 108 +- 165 +- 87 +- 194 +- 90 +- 127 +- 61 +- 194 +- 112 +- 192 +- 194 +- 7 +- 125 +- 72 +- 45 +- 4 +- 53 +- 194 +- 90 +- 116 +- 63 +- 47 +- 42 +- 128 +- 126 +- 122 +- 164 +- 145 +- 51 +- 154 +- 160 +- 93 +- 63 +- 147 +- 60 +- 97 +- 33 +- 163 +- 27 +- 20 +- 186 +- 173 +- 13 +- 145 +- 199 +- 57 +- 98 +- 153 +- 14 +- 162 +- 28 +- 14 +- 186 +- 137 +- 112 +- 48 +- 141 +- 175 +- 101 +- 90 +- 157 +- 128 +- 129 +- 159 +- 168 +- 2 +- 193 +- 72 +- 192 +- 120 +- 118 +- 186 +- 196 +- 114 +- 179 +- 57 +- 93 +- 35 +- 33 +- 158 +- 166 +- 32 +- 187 +- 72 +- 63 +- 184 +- 117 +- 97 +- 198 +- 143 +- 32 +- 95 +- 71 +- 187 +- 122 +- 142 +- 139 +- 159 +- 14 +- 72 +- 11 +- 125 +- 112 +- 122 +- 150 +- 169 +- 107 +- 182 +- 99 +- 107 +- 89 +- 83 +- 14 +- 113 +- 53 +- 68 +- 191 +- 146 +- 197 +- 133 +- 105 +- 142 +- 122 +- 90 +- 163 +- 7 +- 160 +- 27 +- 40 +- 142 +- 47 +- 198 +- 135 +- 65 +- 10 +- 182 +- 20 +- 24 +- 101 +- 95 +- 187 +- 149 +- 125 +- 84 +- 67 +- 11 +- 132 +- 110 +- 38 +- 25 +- 20 +- 44 +- 98 +- 73 +- 63 +- 168 +- 3 +- 45 +- 29 +- 185 +- 197 +- 106 +- 62 +- 53 +- 78 +- 90 +- 153 +- 58 +- 153 +- 168 +- 76 +- 111 +- 77 +- 57 +- 149 +- 53 +- 68 +- 148 +- 102 +- 133 +- 62 +- 136 +- 148 +- 26 +- 65 +- 168 +- 100 +- 36 +- 128 +- 94 +- 57 +- 19 +- 158 +- 138 +- 160 +- 194 +- 153 +- 21 +- 9 +- 144 +- 14 +- 69 +- 175 +- 127 +- 139 +- 5 +- 38 +- 116 +- 20 +- 27 +- 82 +- 21 +- 112 +- 98 +- 146 +- 172 +- 93 +- 26 +- 46 +- 180 +- 65 +- 43 +- 27 +- 48 +- 108 +- 66 +- 107 +- 112 +- 19 +- 181 +- 38 +- 179 +- 142 +- 78 +- 44 +- 165 +- 79 +- 107 +- 107 +- 39 +- 94 +- 138 +- 195 +- 63 +- 112 +- 3 +- 19 +- 53 +- 115 +- 49 +- 158 +- 134 +- 50 +- 40 +- 113 +- 94 +- 93 +- 188 +- 90 +- 112 +- 171 +- 173 +- 108 +- 182 +- 162 +- 197 +- 181 +- 11 +- 63 +- 73 +- 75 +- 48 +- 61 +- 30 +- 162 +- 66 +- 116 +- 24 +- 113 +- 122 +- 152 +- 35 +- 20 +- 108 +- 171 +- 75 +- 133 +- 164 +- 180 +- 43 +- 98 +- 177 +- 105 +- 37 +- 180 +- 75 +- 58 +- 170 +- 143 +- 136 +- 14 +- 39 +- 74 +- 49 +- 96 +- 24 +- 156 +- 15 +- 1 +- 143 +- 197 +- 120 +- 133 +- 90 +- 171 +- 25 +- 2 +- 18 +- 132 +- 49 +- 171 +- 98 +- 16 +- 72 +- 100 +- 10 +- 194 +- 14 +- 86 +- 102 +- 45 +- 94 +- 75 +- 30 +- 100 +- 82 +- 111 +- 101 +- 149 +- 44 +- 192 +- 129 +- 13 +- 125 +- 116 +- 193 +- 65 +- 120 +- 113 +- 159 +- 20 +- 36 +- 199 +- 172 +- 179 +- 77 +- 189 +- 60 +- 171 +- 80 +- 113 +- 61 +- 78 +- 21 +- 87 +- 90 +- 120 +- 109 +- 60 +- 181 +- 148 +- 124 +- 36 +- 179 +- 183 +- 96 +- 83 +- 17 +- 148 +- 90 +- 40 +- 106 +- 20 +- 194 +- 153 +- 112 +- 91 +- 70 +- 151 +- 80 +- 115 +- 99 +- 37 +- 159 +- 181 +- 171 +- 93 +- 101 +- 185 +- 57 +- 8 +- 123 +- 71 +- 38 +- 53 +- 151 +- 51 +- 171 +- 25 +- 48 +- 101 +- 105 +- 113 +- 178 +- 17 +- 158 +- 192 +- 100 +- 76 +- 13 +- 154 +- 100 +- 42 +- 192 +- 16 +- 2 +- 143 +- 64 +- 91 +- 9 +- 182 +- 69 +- 49 +- 113 +- 14 +- 157 +- 170 +- 97 +- 38 +- 183 +- 72 +- 41 +- 104 +- 187 +- 14 +- 190 +- 37 +- 153 +- 46 +- 19 +- 139 +- 156 +- 109 +- 37 +- 79 +- 159 +- 113 +- 63 +- 169 +- 109 +- 0 +- 145 +- 26 +- 173 +- 27 +- 27 +- 33 +- 44 +- 129 +- 125 +- 102 +- 32 +- 159 +- 196 +- 185 +- 117 +- 196 +- 47 +- 101 +- 170 +- 10 +- 160 +- 53 +- 182 +- 144 +- 130 +- 102 +- 136 +- 113 +- 49 +- 35 +- 26 +- 129 +- 193 +- 179 +- 164 +- 118 +- 179 +- 38 +- 187 +- 60 +- 145 +- 146 +- 96 +- 3 +- 129 +- 109 +- 10 +- 32 +- 72 +- 153 +- 112 +- 103 +- 179 +- 165 +- 48 +- 198 +- 198 +- 164 +- 164 +- 113 +- 134 +- 171 +- 33 +- 148 +- 82 +- 171 +- 34 +- 54 +- 36 +- 167 +- 79 +- 117 +- 113 +- 60 +- 118 +- 37 +- 172 +- 77 +- 87 +- 168 +- 145 +- 26 +- 153 +- 34 +- 14 +- 12 +- 179 +- 140 +- 11 +- 62 +- 94 +- 101 +- 1 +- 92 +- 37 +- 127 +- 113 +- 77 +- 190 +- 35 +- 109 +- 112 +- 61 +- 62 +- 114 +- 180 +- 153 +- 192 +- 26 +- 33 +- 164 +- 115 +- 110 +- 5 +- 93 +- 30 +- 169 +- 135 +- 78 +- 36 +- 108 +- 194 +- 35 +- 133 +- 19 +- 192 +- 0 +- 63 +- 140 +- 99 +- 114 +- 163 +- 86 +- 163 +- 78 +- 0 +- 44 +- 72 +- 69 +- 101 +- 16 +- 108 +- 108 +- 112 +- 159 +- 116 +- 141 +- 50 +- 138 +- 165 +- 129 +- 88 +- 72 +- 23 +- 24 +- 169 +- 28 +- 132 +- 76 +- 90 +- 148 +- 138 +- 57 +- 6 +- 29 +- 123 +- 19 +- 0 +- 116 +- 64 +- 176 +- 71 +- 185 +- 159 +- 44 +- 68 +- 81 +- 95 +- 13 +- 98 +- 90 +- 196 +- 141 +- 140 +- 171 +- 194 +- 86 +- 93 +- 9 +- 69 +- 142 +- 47 +- 160 +- 198 +- 185 +- 182 +- 106 +- 94 +- 157 +- 120 +- 76 +- 34 +- 53 +- 44 +- 103 +- 198 +- 113 +- 149 +- 171 +- 156 +- 167 +- 193 +- 35 +- 116 +- 153 +- 55 +- 189 +- 33 +- 53 +- 185 +- 47 +- 101 +- 72 +- 26 +- 171 +- 106 +- 115 +- 55 +- 100 +- 9 +- 108 +- 95 +- 159 +- 102 +- 101 +- 121 +- 131 +- 10 +- 103 +- 182 +- 96 +- 193 +- 107 +- 102 +- 122 +- 145 +- 95 +- 121 +- 75 +- 142 +- 70 +- 115 +- 185 +- 165 +- 195 +- 186 +- 82 +- 91 +- 67 +- 99 +- 98 +- 148 +- 33 +- 60 +- 78 +- 141 +- 57 +- 38 +- 131 +- 110 +- 60 +- 151 +- 150 +- 149 +- 72 +- 113 +- 74 +- 118 +- 4 +- 14 +- 68 +- 125 +- 100 +- 142 +- 37 +- 107 +- 185 +- 175 +- 197 +- 173 +- 99 +- 85 +- 181 +- 1 +- 192 +- 148 +- 138 +- 114 +- 110 +- 92 +- 56 +- 71 +- 170 +- 159 +- 69 +- 115 +- 78 +- 45 +- 145 +- 186 +- 147 +- 117 +- 109 +- 167 +- 61 +- 132 +- 138 +- 20 +- 30 +- 182 +- 156 +- 49 +- 23 +- 178 +- 83 +- 73 +- 122 +- 148 +- 90 +- 37 +- 56 +- 96 +- 89 +- 148 +- 186 +- 96 +- 181 +- 117 +- 65 +- 114 +- 20 +- 164 +- 117 +- 170 +- 58 +- 87 +- 111 +- 16 +- 153 +- 13 +- 171 +- 137 +- 104 +- 49 +- 158 +- 76 +- 22 +- 50 +- 3 +- 84 +- 175 +- 99 +- 98 +- 62 +- 132 +- 65 +- 32 +- 34 +- 121 +- 50 +- 79 +- 92 +- 83 +- 63 +- 78 +- 66 +- 60 +- 53 +- 96 +- 189 +- 102 +- 59 +- 86 +- 160 +- 1 +- 78 +- 153 +- 104 +- 2 +- 70 +- 110 +- 74 +- 20 +- 156 +- 157 +- 20 +- 177 +- 92 +- 11 +- 132 +- 108 +- 98 +- 118 +- 43 +- 72 +- 97 +- 110 +- 32 +- 0 +- 194 +- 98 +- 186 +- 99 +- 94 +- 48 +- 20 +- 91 +- 36 +- 101 +- 78 +- 142 +- 49 +- 6 +- 113 +- 178 +- 37 +- 145 +- 69 +- 164 +- 146 +- 106 +- 47 +- 91 +- 107 +- 35 +- 57 +- 29 +- 143 +- 153 +- 106 +- 67 +- 154 +- 149 +- 182 +- 26 +- 96 +- 122 +- 119 +- 91 +- 100 +- 186 +- 90 +- 194 +- 168 +- 86 +- 100 +- 146 +- 65 +- 67 +- 61 +- 153 +- 70 +- 59 +- 181 +- 8 +- 158 +- 61 +- 110 +- 124 +- 72 +- 49 +- 154 +- 83 +- 168 +- 181 +- 157 +- 75 +- 49 +- 58 +- 92 +- 160 +- 61 +- 8 +- 115 +- 63 +- 72 +- 1 +- 135 +- 111 +- 151 +- 156 +- 79 +- 159 +- 40 +- 185 +- 120 +- 159 +- 18 +- 157 +- 116 +- 137 +- 82 +- 144 +- 113 +- 157 +- 112 +- 96 +- 65 +- 87 +- 171 +- 125 +- 86 +- 110 +- 74 +- 24 +- 14 +- 90 +- 26 +- 157 +- 94 +- 125 +- 86 +- 29 +- 173 +- 125 +- 122 +- 10 +- 188 +- 21 +- 91 +- 198 +- 121 +- 182 +- 24 +- 108 +- 4 +- 148 +- 124 +- 34 +- 69 +- 5 +- 33 +- 137 +- 77 +- 186 +- 171 +- 114 +- 158 +- 62 +- 97 +- 29 +- 171 +- 68 +- 35 +- 148 +- 110 +- 21 +- 96 +- 56 +- 21 +- 158 +- 72 +- 109 +- 20 +- 126 +- 27 +- 39 +- 94 +- 60 +- 71 +- 13 +- 89 +- 113 +- 187 +- 141 +- 64 +- 145 +- 132 +- 194 +- 33 +- 78 +- 185 +- 83 +- 185 +- 94 +- 74 +- 116 +- 174 +- 33 +- 174 +- 109 +- 163 +- 107 +- 5 +- 198 +- 115 +- 82 +- 62 +- 43 +- 1 +- 144 +- 153 +- 60 +- 72 +- 54 +- 118 +- 41 +- 113 +- 83 +- 5 +- 79 +- 53 +- 189 +- 73 +- 36 +- 18 +- 74 +- 9 +- 192 +- 123 +- 76 +- 116 +- 108 +- 9 +- 6 +- 27 +- 105 +- 192 +- 91 +- 61 +- 161 +- 37 +- 49 +- 48 +- 33 +- 113 +- 125 +- 99 +- 73 +- 13 +- 38 +- 168 +- 30 +- 98 +- 58 +- 102 +- 63 +- 108 +- 78 +- 171 +- 196 +- 82 +- 99 +- 194 +- 53 +- 53 +- 44 +- 149 +- 149 +- 26 +- 35 +- 44 +- 101 +- 25 +- 128 +- 170 +- 182 +- 48 +- 134 +- 72 +- 106 +- 44 +- 94 +- 114 +- 164 +- 37 +- 82 +- 150 +- 9 +- 113 +- 3 +- 182 +- 36 +- 24 +- 146 +- 61 +- 42 +- 171 +- 189 +- 176 +- 175 +- 134 +- 81 +- 85 +- 138 +- 140 +- 153 +- 116 +- 46 +- 59 +- 186 +- 47 +- 128 +- 139 +- 94 +- 2 +- 47 +- 113 +- 168 +- 119 +- 15 +- 154 +- 71 +- 65 +- 114 +- 94 +- 66 +- 1 +- 15 +- 121 +- 28 +- 41 +- 143 +- 192 +- 61 +- 142 +- 151 +- 145 +- 25 +- 78 +- 72 +- 177 +- 191 +- 20 +- 147 +- 171 +- 186 +- 82 +- 79 +- 116 +- 57 +- 162 +- 6 +- 137 +- 183 +- 60 +- 73 +- 163 +- 181 +- 134 +- 16 +- 100 +- 27 +- 156 +- 96 +- 32 +- 8 +- 36 +- 93 +- 27 +- 74 +- 64 +- 125 +- 173 +- 71 +- 171 +- 66 +- 64 +- 178 +- 185 +- 20 +- 56 +- 149 +- 93 +- 120 +- 173 +- 33 +- 28 +- 187 +- 76 +- 6 +- 38 +- 153 +- 128 +- 112 +- 132 +- 106 +- 165 +- 28 +- 142 +- 16 +- 37 +- 168 +- 191 +- 26 +- 41 +- 14 +- 132 +- 14 +- 72 +- 168 +- 147 +- 156 +- 119 +- 138 +- 53 +- 100 +- 34 +- 113 +- 155 +- 58 +- 53 +- 16 +- 138 +- 145 +- 96 +- 7 +- 82 +- 73 +- 99 +- 150 +- 62 +- 175 +- 126 +- 82 +- 35 +- 147 +- 101 +- 100 +- 140 +- 38 +- 37 +- 131 +- 110 +- 147 +- 173 +- 0 +- 35 +- 60 +- 105 +- 195 +- 130 +- 104 +- 21 +- 1 +- 110 +- 50 +- 128 +- 125 +- 38 +- 176 +- 171 +- 47 +- 193 +- 72 +- 37 +- 187 +- 30 +- 149 +- 96 +- 44 +- 77 +- 92 +- 140 +- 24 +- 104 +- 58 +- 94 +- 30 +- 38 +- 72 +- 57 +- 143 +- 82 +- 151 +- 48 +- 28 +- 93 +- 70 +- 186 +- 142 +- 128 +- 43 +- 11 +- 122 +- 82 +- 26 +- 73 +- 94 +- 90 +- 115 +- 112 +- 50 +- 92 +- 20 +- 140 +- 17 +- 125 +- 84 +- 101 +- 69 +- 112 +- 27 +- 24 +- 78 +- 30 +- 20 +- 99 +- 164 +- 156 +- 98 +- 37 +- 67 +- 113 +- 152 +- 35 +- 172 +- 74 +- 122 +- 47 +- 35 +- 18 +- 194 +- 141 +- 34 +- 174 +- 63 +- 94 +- 63 +- 198 +- 0 +- 87 +- 114 +- 92 +- 139 +- 56 +- 48 +- 90 +- 171 +- 122 +- 35 +- 158 +- 14 +- 28 +- 0 +- 77 +- 35 +- 125 +- 50 +- 148 +- 77 +- 153 +- 58 +- 65 +- 135 +- 102 +- 29 +- 7 +- 38 +- 3 +- 32 +- 69 +- 0 +- 20 +- 155 +- 121 +- 168 +- 16 +- 100 +- 163 +- 61 +- 173 +- 163 +- 138 +- 40 +- 27 +- 171 +- 41 +- 96 +- 101 +- 58 +- 101 +- 82 +- 59 +- 24 +- 71 +- 8 +- 120 +- 48 +- 165 +- 74 +- 7 +- 164 +- 24 +- 178 +- 98 +- 100 +- 89 +- 76 +- 140 +- 118 +- 39 +- 86 +- 98 +- 91 +- 102 +- 35 +- 59 +- 147 +- 154 +- 14 +- 182 +- 181 +- 74 +- 185 +- 7 +- 8 +- 114 +- 102 +- 78 +- 83 +- 41 +- 145 +- 30 +- 66 +- 36 +- 82 +- 35 +- 142 +- 30 +- 171 +- 5 +- 21 +- 78 +- 152 +- 97 +- 18 +- 159 +- 44 +- 54 +- 65 +- 127 +- 178 +- 82 +- 110 +- 127 +- 103 +- 54 +- 125 +- 3 +- 38 +- 90 +- 163 +- 140 +- 70 +- 193 +- 101 +- 188 +- 106 +- 113 +- 124 +- 36 +- 63 +- 35 +- 14 +- 47 +- 71 +- 29 +- 66 +- 104 +- 58 +- 73 +- 95 +- 94 +- 197 +- 38 +- 194 +- 125 +- 78 +- 132 +- 16 +- 75 +- 114 +- 35 +- 53 +- 64 +- 13 +- 182 +- 21 +- 59 +- 138 +- 179 +- 49 +- 94 +- 190 +- 7 +- 195 +- 42 +- 135 +- 79 +- 6 +- 188 +- 53 +- 21 +- 112 +- 132 +- 58 +- 125 +- 94 +- 18 +- 0 +- 35 +- 50 +- 73 +- 169 +- 20 +- 137 +- 124 +- 132 +- 102 +- 64 +- 83 +- 13 +- 114 +- 37 +- 119 +- 110 +- 72 +- 133 +- 132 +- 9 +- 52 +- 61 +- 83 +- 68 +- 160 +- 100 +- 73 +- 190 +- 89 +- 21 +- 114 +- 98 +- 70 +- 26 +- 122 +- 145 +- 102 +- 72 +- 58 +- 79 +- 115 +- 113 +- 123 +- 65 +- 174 +- 129 +- 136 +- 60 +- 20 +- 152 +- 96 +- 137 +- 49 +- 113 +- 71 +- 125 +- 150 +- 190 +- 47 +- 94 +- 97 +- 162 +- 175 +- 91 +- 75 +- 129 +- 35 +- 159 +- 51 +- 26 +- 151 +- 24 +- 36 +- 129 +- 41 +- 66 +- 70 +- 85 +- 74 +- 31 +- 185 +- 20 +- 33 +- 145 +- 102 +- 14 +- 85 +- 47 +- 77 +- 115 +- 112 +- 102 +- 119 +- 185 +- 143 +- 73 +- 169 +- 174 +- 168 +- 56 +- 0 +- 34 +- 61 +- 34 +- 194 +- 176 +- 72 +- 179 +- 67 +- 26 +- 134 +- 53 +- 49 +- 158 +- 0 +- 96 +- 6 +- 126 +- 73 +- 83 +- 125 +- 192 +- 91 +- 86 +- 101 +- 21 +- 166 +- 79 +- 93 +- 133 +- 167 +- 163 +- 42 +- 24 +- 61 +- 91 +- 152 +- 159 +- 129 +- 122 +- 142 +- 21 +- 94 +- 101 +- 3 +- 162 +- 167 +- 82 +- 128 +- 41 +- 182 +- 152 +- 97 +- 71 +- 18 +- 112 +- 71 +- 46 +- 102 +- 113 +- 111 +- 85 +- 1 +- 142 +- 138 +- 163 +- 47 +- 38 +- 98 +- 12 +- 78 +- 110 +- 38 +- 111 +- 76 +- 30 +- 8 +- 77 +- 10 +- 35 +- 53 +- 137 +- 89 +- 185 +- 29 +- 61 +- 192 +- 115 +- 175 +- 77 +- 82 +- 170 +- 189 +- 72 +- 46 +- 139 +- 134 +- 19 +- 57 +- 90 +- 84 +- 147 +- 57 +- 71 +- 113 +- 182 +- 113 +- 112 +- 178 +- 110 +- 37 +- 194 +- 20 +- 128 +- 108 +- 152 +- 36 +- 138 +- 30 +- 148 +- 58 +- 63 +- 58 +- 107 +- 194 +- 166 +- 133 +- 163 +- 97 +- 38 +- 87 +- 149 +- 11 +- 153 +- 69 +- 122 +- 106 +- 82 +- 175 +- 53 +- 148 +- 14 +- 143 +- 7 +- 64 +- 198 +- 101 +- 47 +- 100 +- 123 +- 167 +- 129 +- 192 +- 132 +- 134 +- 128 +- 0 +- 151 +- 153 +- 63 +- 134 +- 82 +- 74 +- 192 +- 129 +- 40 +- 53 +- 53 +- 140 +- 128 +- 157 +- 172 +- 110 +- 164 +- 43 +- 111 +- 104 +- 190 +- 47 +- 90 +- 198 +- 18 +- 176 +- 40 +- 196 +- 106 +- 132 +- 110 +- 57 +- 35 +- 26 +- 12 +- 12 +- 156 +- 128 +- 185 +- 195 +- 177 +- 191 +- 4 +- 158 +- 20 +- 83 +- 58 +- 73 +- 55 +- 15 +- 127 +- 192 +- 106 +- 162 +- 24 +- 132 +- 132 +- 20 +- 152 +- 98 +- 53 +- 74 +- 162 +- 25 +- 183 +- 113 +- 192 +- 49 +- 177 +- 102 +- 189 +- 198 +- 154 +- 20 +- 80 +- 136 +- 30 +- 133 +- 120 +- 91 +- 72 +- 141 +- 101 +- 197 +- 190 +- 99 +- 138 +- 102 +- 124 +- 77 +- 160 +- 64 +- 84 +- 53 +- 152 +- 28 +- 146 +- 188 +- 114 +- 105 +- 8 +- 151 +- 57 +- 182 +- 77 +- 159 +- 175 +- 119 +- 160 +- 16 +- 93 +- 116 +- 91 +- 87 +- 109 +- 70 +- 108 +- 147 +- 99 +- 100 +- 184 +- 124 +- 21 +- 191 +- 50 +- 63 +- 140 +- 179 +- 96 +- 114 +- 95 +- 138 +- 157 +- 168 +- 74 +- 180 +- 49 +- 47 +- 58 +- 102 +- 192 +- 34 +- 145 +- 15 +- 142 +- 185 +- 86 +- 51 +- 10 +- 134 +- 174 +- 94 +- 142 +- 32 +- 113 +- 171 +- 170 +- 15 +- 114 +- 185 +- 108 +- 162 +- 13 +- 108 +- 121 +- 160 +- 14 +- 169 +- 59 +- 187 +- 177 +- 44 +- 12 +- 73 +- 24 +- 144 +- 186 +- 81 +- 191 +- 183 +- 53 +- 61 +- 94 +- 110 +- 100 +- 114 +- 94 +- 19 +- 100 +- 195 +- 43 +- 112 +- 1 +- 35 +- 159 +- 24 +- 58 +- 182 +- 17 +- 132 +- 41 +- 171 +- 11 +- 4 +- 92 +- 186 +- 99 +- 29 +- 20 +- 198 +- 79 +- 180 +- 148 +- 133 +- 38 +- 75 +- 137 +- 133 +- 142 +- 91 +- 70 +- 199 +- 61 +- 20 +- 151 +- 106 +- 3 +- 82 +- 145 +- 9 +- 149 +- 174 +- 197 +- 79 +- 182 +- 64 +- 96 +- 113 +- 164 +- 88 +- 98 +- 11 +- 124 +- 14 +- 115 +- 26 +- 32 +- 95 +- 38 +- 60 +- 83 +- 123 +- 17 +- 79 +- 96 +- 63 +- 20 +- 147 +- 115 +- 170 +- 113 +- 45 +- 16 +- 30 +- 93 +- 174 +- 25 +- 150 +- 113 +- 66 +- 65 +- 14 +- 53 +- 104 +- 187 +- 168 +- 170 +- 156 +- 130 +- 185 +- 175 +- 32 +- 186 +- 3 +- 45 +- 132 +- 138 +- 13 +- 63 +- 160 +- 152 +- 40 +- 175 +- 154 +- 169 +- 53 +- 145 +- 51 +- 41 +- 43 +- 145 +- 0 +- 113 +- 60 +- 95 +- 148 +- 115 +- 163 +- 135 +- 47 +- 115 +- 109 +- 37 +- 47 +- 4 +- 185 +- 0 +- 142 +- 178 +- 64 +- 187 +- 114 +- 113 +- 16 +- 171 +- 90 +- 168 +- 100 +- 49 +- 102 +- 14 +- 177 +- 128 +- 128 +- 174 +- 61 +- 194 +- 151 +- 140 +- 110 +- 48 +- 24 +- 87 +- 17 +- 122 +- 73 +- 3 +- 15 +- 68 +- 60 +- 14 +- 188 +- 32 +- 93 +- 26 +- 175 +- 78 +- 156 +- 141 +- 116 +- 90 +- 21 +- 101 +- 187 +- 119 +- 95 +- 99 +- 62 +- 101 +- 78 +- 34 +- 179 +- 179 +- 61 +- 142 +- 74 +- 84 +- 88 +- 171 +- 167 +- 20 +- 142 +- 81 +- 124 +- 176 +- 113 +- 99 +- 165 +- 20 +- 125 +- 122 +- 25 +- 35 +- 108 +- 72 +- 55 +- 135 +- 187 +- 164 +- 151 +- 142 +- 115 +- 98 +- 159 +- 159 +- 136 +- 85 +- 25 +- 158 +- 5 +- 110 +- 157 +- 110 +- 114 +- 72 +- 132 +- 41 +- 1 +- 138 +- 16 +- 112 +- 113 +- 98 +- 57 +- 84 +- 79 +- 74 +- 76 +- 150 +- 171 +- 119 +- 81 +- 53 +- 90 +- 40 +- 87 +- 64 +- 32 +- 132 +- 35 +- 28 +- 173 +- 194 +- 10 +- 32 +- 59 +- 128 +- 116 +- 32 +- 99 +- 108 +- 153 +- 86 +- 69 +- 87 +- 4 +- 186 +- 21 +- 32 +- 120 +- 53 +- 166 +- 168 +- 87 +- 158 +- 53 +- 113 +- 35 +- 99 +- 145 +- 42 +- 131 +- 14 +- 63 +- 58 +- 39 +- 11 +- 175 +- 78 +- 19 +- 94 +- 9 +- 173 +- 23 +- 168 +- 30 +- 120 +- 142 +- 113 +- 114 +- 84 +- 33 +- 175 +- 142 +- 127 +- 91 +- 0 +- 120 +- 112 +- 117 +- 113 +- 115 +- 109 +- 153 +- 69 +- 114 +- 42 +- 88 +- 194 +- 14 +- 186 +- 153 +- 120 +- 168 +- 53 +- 150 +- 119 +- 122 +- 35 +- 159 +- 185 +- 185 +- 147 +- 139 +- 63 +- 159 +- 120 +- 123 +- 43 +- 186 +- 5 +- 119 +- 102 +- 178 +- 2 +- 143 +- 23 +- 73 +- 78 +- 141 +- 14 +- 65 +- 194 +- 154 +- 192 +- 169 +- 77 +- 84 +- 198 +- 51 +- 91 +- 194 +- 48 +- 68 +- 9 +- 165 +- 157 +- 47 +- 148 +- 67 +- 154 +- 0 +- 30 +- 134 +- 176 +- 24 +- 24 +- 150 +- 141 +- 183 +- 169 +- 56 +- 86 +- 123 +- 128 +- 59 +- 5 +- 142 +- 17 +- 178 +- 30 +- 59 +- 82 +- 178 +- 13 +- 122 +- 153 +- 117 +- 118 +- 64 +- 175 +- 133 +- 137 +- 149 +- 121 +- 36 +- 3 +- 34 +- 132 +- 30 +- 49 +- 141 +- 103 +- 96 +- 33 +- 101 +- 127 +- 81 +- 101 +- 150 +- 153 +- 78 +- 159 +- 69 +- 106 +- 132 +- 53 +- 72 +- 100 +- 96 +- 140 +- 164 +- 11 +- 28 +- 169 +- 194 +- 100 +- 178 +- 167 +- 53 +- 192 +- 53 +- 71 +- 182 +- 51 +- 44 +- 192 +- 159 +- 66 +- 186 +- 128 +- 5 +- 63 +- 141 +- 139 +- 163 +- 159 +- 12 +- 62 +- 31 +- 138 +- 15 +- 158 +- 92 +- 107 +- 198 +- 66 +- 45 +- 100 +- 113 +- 115 +- 39 +- 177 +- 20 +- 113 +- 82 +- 29 +- 138 +- 110 +- 30 +- 91 +- 42 +- 140 +- 171 +- 101 +- 158 +- 67 +- 97 +- 13 +- 106 +- 77 +- 92 +- 36 +- 152 +- 153 +- 73 +- 33 +- 61 +- 112 +- 145 +- 136 +- 155 +- 139 +- 184 +- 37 +- 167 +- 99 +- 182 +- 182 +- 142 +- 124 +- 182 +- 135 +- 144 +- 105 +- 21 +- 153 +- 114 +- 159 +- 32 +- 19 +- 171 +- 84 +- 99 +- 37 +- 82 +- 191 +- 30 +- 13 +- 134 +- 41 +- 132 +- 17 +- 141 +- 60 +- 152 +- 171 +- 159 +- 56 +- 168 +- 132 +- 151 +- 7 +- 134 +- 75 +- 113 +- 84 +- 114 +- 109 +- 5 +- 147 +- 187 +- 13 +- 113 +- 120 +- 160 +- 112 +- 102 +- 176 +- 4 +- 136 +- 110 +- 75 +- 168 +- 53 +- 61 +- 189 +- 90 +- 69 +- 124 +- 169 +- 28 +- 112 +- 21 +- 15 +- 171 +- 191 +- 194 +- 158 +- 195 +- 13 +- 46 +- 122 +- 108 +- 91 +- 92 +- 179 +- 97 +- 164 +- 14 +- 35 +- 187 +- 194 +- 170 +- 61 +- 14 +- 33 +- 20 +- 3 +- 94 +- 86 +- 102 +- 0 +- 82 +- 47 +- 69 +- 90 +- 169 +- 68 +- 134 +- 149 +- 5 +- 12 +- 71 +- 126 +- 115 +- 24 +- 171 +- 193 +- 24 +- 43 +- 113 +- 108 +- 166 +- 193 +- 53 +- 61 +- 66 +- 179 +- 159 +- 183 +- 188 +- 133 +- 64 +- 67 +- 108 +- 113 +- 102 +- 171 +- 178 +- 132 +- 3 +- 115 +- 43 +- 76 +- 193 +- 95 +- 11 +- 118 +- 84 +- 171 +- 48 +- 113 +- 94 +- 83 +- 59 +- 12 +- 22 +- 72 +- 42 +- 62 +- 51 +- 128 +- 110 +- 185 +- 152 +- 132 +- 93 +- 101 +- 14 +- 62 +- 130 +- 37 +- 168 +- 64 +- 66 +- 180 +- 177 +- 53 +- 185 +- 56 +- 22 +- 42 +- 71 +- 194 +- 129 +- 179 +- 157 +- 42 +- 167 +- 192 +- 49 +- 53 +- 190 +- 109 +- 63 +- 43 +- 136 +- 71 +- 112 +- 119 +- 30 +- 94 +- 125 +- 187 +- 153 +- 78 +- 121 +- 186 +- 114 +- 11 +- 94 +- 164 +- 178 +- 174 +- 137 +- 73 +- 149 +- 171 +- 7 +- 99 +- 114 +- 159 +- 115 +- 3 +- 162 +- 65 +- 14 +- 106 +- 88 +- 38 +- 69 +- 141 +- 149 +- 54 +- 65 +- 188 +- 113 +- 135 +- 133 +- 53 +- 102 +- 132 +- 171 +- 117 +- 1 +- 0 +- 78 +- 149 +- 53 +- 144 +- 144 +- 20 +- 89 +- 194 +- 153 +- 94 +- 165 +- 103 +- 1 +- 74 +- 160 +- 149 +- 113 +- 3 +- 156 +- 140 +- 147 +- 149 +- 144 +- 81 +- 110 +- 165 +- 85 +- 172 +- 12 +- 36 +- 159 +- 34 +- 47 +- 175 +- 158 +- 18 +- 111 +- 33 +- 72 +- 198 +- 149 +- 78 +- 163 +- 75 +- 12 +- 117 +- 103 +- 185 +- 86 +- 128 +- 0 +- 26 +- 82 +- 32 +- 90 +- 163 +- 189 +- 54 +- 48 +- 153 +- 159 +- 101 +- 186 +- 182 +- 24 +- 151 +- 199 +- 56 +- 114 +- 94 +- 26 +- 168 +- 127 +- 65 +- 13 +- 190 +- 194 +- 7 +- 118 +- 146 +- 22 +- 113 +- 177 +- 147 +- 87 +- 53 +- 165 +- 113 +- 3 +- 142 +- 7 +- 64 +- 163 +- 15 +- 28 +- 43 +- 138 +- 11 +- 133 +- 81 +- 125 +- 147 +- 12 +- 2 +- 80 +- 78 +- 58 +- 121 +- 148 +- 168 +- 98 +- 133 +- 164 +- 112 +- 171 +- 78 +- 95 +- 15 +- 28 +- 124 +- 162 +- 160 +- 100 +- 170 +- 120 +- 171 +- 174 +- 50 +- 159 +- 8 +- 96 +- 65 +- 81 +- 5 +- 171 +- 59 +- 125 +- 4 +- 179 +- 104 +- 5 +- 165 +- 190 +- 168 +- 50 +- 152 +- 64 +- 158 +- 179 +- 117 +- 116 +- 49 +- 13 +- 122 +- 88 +- 61 +- 66 +- 145 +- 90 +- 48 +- 30 +- 47 +- 11 +- 63 +- 57 +- 128 +- 178 +- 104 +- 16 +- 174 +- 99 +- 105 +- 149 +- 90 +- 185 +- 159 +- 153 +- 49 +- 42 +- 108 +- 191 +- 121 +- 149 +- 74 +- 11 +- 101 +- 38 +- 90 +- 91 +- 186 +- 26 +- 156 +- 160 +- 48 +- 57 +- 110 +- 165 +- 65 +- 20 +- 35 +- 92 +- 17 +- 37 +- 155 +- 18 +- 36 +- 133 +- 48 +- 125 +- 70 +- 93 +- 169 +- 1 +- 181 +- 94 +- 140 +- 78 +- 34 +- 92 +- 101 +- 147 +- 99 +- 192 +- 98 +- 127 +- 40 +- 160 +- 198 +- 91 +- 175 +- 116 +- 175 +- 86 +- 64 +- 155 +- 133 +- 44 +- 188 +- 68 +- 134 +- 123 +- 53 +- 144 +- 157 +- 129 +- 93 +- 153 +- 155 +- 113 +- 194 +- 175 +- 87 +- 4 +- 139 +- 177 +- 3 +- 24 +- 58 +- 126 +- 168 +- 57 +- 110 +- 56 +- 177 +- 159 +- 176 +- 189 +- 54 +- 68 +- 194 +- 109 +- 26 +- 76 +- 14 +- 75 +- 99 +- 174 +- 129 +- 2 +- 183 +- 45 +- 64 +- 159 +- 102 +- 69 +- 32 +- 52 +- 71 +- 76 +- 137 +- 149 +- 181 +- 72 +- 186 +- 167 +- 182 +- 99 +- 181 +- 32 +- 3 +- 48 +- 160 +- 113 +- 70 +- 35 +- 57 +- 48 +- 38 +- 20 +- 149 +- 122 +- 53 +- 29 +- 122 +- 67 +- 42 +- 169 +- 58 +- 129 +- 86 +- 171 +- 173 +- 189 +- 152 +- 111 +- 33 +- 3 +- 182 +- 148 +- 106 +- 9 +- 169 +- 153 +- 182 +- 121 +- 139 +- 0 +- 183 +- 138 +- 117 +- 165 +- 101 +- 86 +- 181 +- 187 +- 194 +- 58 +- 132 +- 193 +- 146 +- 154 +- 73 +- 190 +- 182 +- 171 +- 72 +- 79 +- 71 +- 91 +- 31 +- 152 +- 134 +- 38 +- 11 +- 17 +- 34 +- 157 +- 80 +- 102 +- 79 +- 102 +- 29 +- 72 +- 65 +- 185 +- 118 +- 11 +- 20 +- 129 +- 156 +- 28 +- 146 +- 141 +- 178 +- 85 +- 13 +- 192 +- 78 +- 38 +- 195 +- 91 +- 66 +- 186 +- 173 +- 125 +- 14 +- 194 +- 21 +- 98 +- 85 +- 148 +- 41 +- 20 +- 47 +- 64 +- 24 +- 173 +- 67 +- 58 +- 139 +- 35 +- 75 +- 133 +- 15 +- 42 +- 59 +- 35 +- 157 +- 63 +- 81 +- 183 +- 100 +- 151 +- 126 +- 44 +- 173 +- 153 +- 43 +- 75 +- 107 +- 174 +- 163 +- 164 +- 102 +- 69 +- 61 +- 58 +- 54 +- 74 +- 3 +- 185 +- 3 +- 109 +- 149 +- 0 +- 96 +- 53 +- 62 +- 78 +- 96 +- 77 +- 33 +- 122 +- 93 +- 124 +- 58 +- 7 +- 112 +- 169 +- 62 +- 147 +- 102 +- 105 +- 15 +- 32 +- 61 +- 181 +- 127 +- 145 +- 195 +- 113 +- 101 +- 100 +- 37 +- 72 +- 156 +- 85 +- 132 +- 37 +- 5 +- 149 +- 161 +- 112 +- 192 +- 102 +- 3 +- 46 +- 56 +- 125 +- 165 +- 196 +- 132 +- 14 +- 41 +- 143 +- 8 +- 19 +- 159 +- 148 +- 116 +- 2 +- 127 +- 18 +- 130 +- 45 +- 163 +- 164 +- 112 +- 78 +- 37 +- 3 +- 28 +- 114 +- 104 +- 10 +- 153 +- 173 +- 24 +- 160 +- 133 +- 193 +- 148 +- 78 +- 28 +- 63 +- 3 +- 109 +- 96 +- 20 +- 53 +- 76 +- 125 +- 1 +- 121 +- 114 +- 93 +- 162 +- 16 +- 70 +- 44 +- 128 +- 40 +- 110 +- 124 +- 52 +- 69 +- 48 +- 79 +- 129 +- 69 +- 198 +- 180 +- 87 +- 7 +- 36 +- 168 +- 119 +- 78 +- 106 +- 196 +- 0 +- 43 +- 150 +- 115 +- 78 +- 189 +- 100 +- 112 +- 53 +- 5 +- 33 +- 14 +- 160 +- 102 +- 134 +- 151 +- 161 +- 196 +- 171 +- 61 +- 150 +- 144 +- 60 +- 108 +- 64 +- 146 +- 155 +- 70 +- 0 +- 1 +- 178 +- 48 +- 35 +- 189 +- 17 +- 131 +- 113 +- 99 +- 85 +- 152 +- 186 +- 108 +- 49 +- 171 +- 143 +- 162 +- 105 +- 76 +- 76 +- 0 +- 136 +- 162 +- 57 +- 86 +- 131 +- 120 +- 180 +- 58 +- 73 +- 141 +- 183 +- 102 +- 92 +- 41 +- 119 +- 196 +- 149 +- 194 +- 33 +- 159 +- 50 +- 197 +- 110 +- 116 +- 148 +- 173 +- 53 +- 133 +- 168 +- 100 +- 122 +- 99 +- 13 +- 115 +- 27 +- 148 +- 196 +- 10 +- 198 +- 46 +- 0 +- 18 +- 12 +- 182 +- 63 +- 117 +- 99 +- 31 +- 160 +- 42 +- 13 +- 90 +- 112 +- 15 +- 158 +- 51 +- 78 +- 100 +- 1 +- 152 +- 147 +- 100 +- 152 +- 91 +- 53 +- 85 +- 128 +- 26 +- 138 +- 102 +- 155 +- 75 +- 122 +- 135 +- 194 +- 12 +- 47 +- 7 +- 140 +- 84 +- 5 +- 106 +- 139 +- 25 +- 66 +- 110 +- 158 +- 142 +- 92 +- 119 +- 1 +- 90 +- 6 +- 35 +- 24 +- 72 +- 186 +- 114 +- 192 +- 93 +- 1 +- 92 +- 79 +- 170 +- 79 +- 120 +- 167 +- 38 +- 7 +- 21 +- 102 +- 168 +- 99 +- 194 +- 188 +- 159 +- 35 +- 91 +- 18 +- 85 +- 91 +- 142 +- 86 +- 141 +- 19 +- 159 +- 110 +- 167 +- 33 +- 30 +- 36 +- 191 +- 190 +- 119 +- 112 +- 24 +- 164 +- 164 +- 57 +- 122 +- 119 +- 117 +- 31 +- 195 +- 149 +- 122 +- 90 +- 72 +- 56 +- 82 +- 158 +- 38 +- 148 +- 95 +- 132 +- 12 +- 64 +- 157 +- 113 +- 187 +- 13 +- 31 +- 159 +- 10 +- 20 +- 14 +- 182 +- 57 +- 113 +- 124 +- 193 +- 139 +- 131 +- 172 +- 99 +- 109 +- 95 +- 193 +- 41 +- 149 +- 158 +- 93 +- 82 +- 61 +- 165 +- 4 +- 124 +- 20 +- 149 +- 98 +- 137 +- 11 +- 152 +- 131 +- 97 +- 101 +- 78 +- 133 +- 140 +- 145 +- 12 +- 106 +- 198 +- 159 +- 112 +- 138 +- 43 +- 168 +- 78 +- 73 +- 61 +- 77 +- 35 +- 82 +- 117 +- 117 +- 99 +- 14 +- 130 +- 122 +- 185 +- 185 +- 148 +- 100 +- 101 +- 154 +- 158 +- 194 +- 180 +- 77 +- 168 +- 6 +- 77 +- 171 +- 145 +- 112 +- 177 +- 112 +- 150 +- 140 +- 37 +- 112 +- 174 +- 185 +- 94 +- 145 +- 30 +- 141 +- 178 +- 188 +- 36 +- 113 +- 28 +- 20 +- 20 +- 159 +- 125 +- 33 +- 21 +- 187 +- 159 +- 63 +- 76 +- 64 +- 72 +- 158 +- 49 +- 160 +- 49 +- 151 +- 140 +- 72 +- 102 +- 196 +- 159 +- 175 +- 104 +- 17 +- 184 +- 145 +- 52 +- 79 +- 167 +- 158 +- 68 +- 54 +- 12 +- 169 +- 133 +- 133 +- 188 +- 148 +- 61 +- 186 +- 130 +- 49 +- 157 +- 122 +- 63 +- 43 +- 48 +- 183 +- 138 +- 103 +- 45 +- 10 +- 173 +- 133 +- 147 +- 185 +- 116 +- 162 +- 142 +- 14 +- 17 +- 25 +- 112 +- 113 +- 1 +- 165 +- 171 +- 93 +- 37 +- 123 +- 9 +- 84 +- 91 +- 109 +- 66 +- 122 +- 103 +- 1 +- 140 +- 162 +- 117 +- 168 +- 130 +- 198 +- 168 +- 44 +- 102 +- 137 +- 114 +- 75 +- 184 +- 63 +- 196 +- 42 +- 35 +- 139 +- 112 +- 81 +- 76 +- 72 +- 73 +- 182 +- 31 +- 10 +- 92 +- 35 +- 170 +- 52 +- 23 +- 112 +- 182 +- 15 +- 137 +- 72 +- 184 +- 192 +- 23 +- 108 +- 108 +- 132 +- 152 +- 61 +- 10 +- 120 +- 96 +- 119 +- 151 +- 24 +- 62 +- 4 +- 41 +- 167 +- 187 +- 95 +- 32 +- 132 +- 158 +- 59 +- 43 +- 108 +- 8 +- 58 +- 169 +- 78 +- 132 +- 154 +- 144 +- 33 +- 39 +- 114 +- 42 +- 122 +- 192 +- 54 +- 33 +- 153 +- 141 +- 168 +- 188 +- 186 +- 109 +- 33 +- 132 +- 68 +- 114 +- 186 +- 188 +- 35 +- 157 +- 33 +- 192 +- 64 +- 101 +- 97 +- 58 +- 92 +- 108 +- 173 +- 48 +- 152 +- 132 +- 119 +- 159 +- 144 +- 118 +- 198 +- 137 +- 122 +- 90 +- 176 +- 22 +- 101 +- 67 +- 27 +- 90 +- 64 +- 48 +- 56 +- 85 +- 167 +- 51 +- 107 +- 133 +- 65 +- 133 +- 90 +- 64 +- 153 +- 83 +- 112 +- 198 +- 196 +- 112 +- 100 +- 68 +- 19 +- 153 +- 74 +- 134 +- 187 +- 87 +- 60 +- 176 +- 125 +- 80 +- 156 +- 61 +- 96 +- 36 +- 61 +- 82 +- 31 +- 48 +- 152 +- 39 +- 100 +- 174 +- 64 +- 78 +- 44 +- 115 +- 177 +- 70 +- 130 +- 45 +- 6 +- 101 +- 53 +- 17 +- 30 +- 59 +- 78 +- 99 +- 198 +- 74 +- 18 +- 148 +- 87 +- 21 +- 164 +- 57 +- 101 +- 72 +- 1 +- 77 +- 139 +- 57 +- 13 +- 171 +- 189 +- 102 +- 34 +- 113 +- 191 +- 173 +- 122 +- 72 +- 36 +- 74 +- 63 +- 50 +- 174 +- 113 +- 72 +- 150 +- 144 +- 44 +- 110 +- 38 +- 2 +- 58 +- 21 +- 106 +- 185 +- 155 +- 159 +- 134 +- 55 +- 123 +- 95 +- 114 +- 177 +- 195 +- 15 +- 53 +- 20 +- 58 +- 99 +- 171 +- 8 +- 125 +- 39 +- 155 +- 186 +- 113 +- 173 +- 74 +- 29 +- 187 +- 115 +- 86 +- 145 +- 69 +- 146 +- 138 +- 53 +- 149 +- 22 +- 132 +- 185 +- 73 +- 31 +- 63 +- 102 +- 60 +- 17 +- 3 +- 108 +- 139 +- 116 +- 131 +- 108 +- 197 +- 67 +- 24 +- 115 +- 38 +- 112 +- 8 +- 188 +- 198 +- 100 +- 72 +- 132 +- 79 +- 145 +- 99 +- 160 +- 193 +- 44 +- 190 +- 147 +- 90 +- 170 +- 181 +- 14 +- 134 +- 86 +- 50 +- 33 +- 58 +- 102 +- 109 +- 92 +- 95 +- 132 +- 118 +- 93 +- 161 +- 71 +- 50 +- 149 +- 125 +- 73 +- 20 +- 9 +- 171 +- 149 +- 102 +- 2 +- 65 +- 138 +- 128 +- 159 +- 84 +- 99 +- 36 +- 21 +- 152 +- 26 +- 14 +- 180 +- 6 +- 173 +- 9 +- 84 +- 122 +- 97 +- 48 +- 93 +- 98 +- 138 +- 101 +- 159 +- 36 +- 156 +- 19 +- 104 +- 120 +- 194 +- 26 +- 91 +- 133 +- 192 +- 125 +- 132 +- 159 +- 13 +- 20 +- 171 +- 98 +- 113 +- 153 +- 36 +- 94 +- 154 +- 152 +- 153 +- 43 +- 101 +- 90 +- 49 +- 165 +- 11 +- 33 +- 13 +- 167 +- 113 +- 139 +- 51 +- 190 +- 75 +- 179 +- 117 +- 48 +- 107 +- 149 +- 101 +- 19 +- 170 +- 145 +- 16 +- 20 +- 125 +- 193 +- 175 +- 5 +- 133 +- 168 +- 141 +- 9 +- 57 +- 78 +- 76 +- 177 +- 39 +- 15 +- 94 +- 110 +- 15 +- 69 +- 98 +- 129 +- 175 +- 58 +- 63 +- 132 +- 42 +- 82 +- 192 +- 159 +- 170 +- 153 +- 84 +- 135 +- 58 +- 79 +- 76 +- 187 +- 101 +- 125 +- 2 +- 137 +- 185 +- 1 +- 136 +- 102 +- 53 +- 167 +- 63 +- 19 +- 182 +- 189 +- 124 +- 131 +- 180 +- 0 +- 138 +- 66 +- 163 +- 26 +- 141 +- 186 +- 30 +- 177 +- 122 +- 99 +- 198 +- 133 +- 113 +- 17 +- 151 +- 91 +- 138 +- 132 +- 79 +- 63 +- 67 +- 21 +- 48 +- 149 +- 1 +- 63 +- 170 +- 90 +- 116 +- 132 +- 27 +- 112 +- 98 +- 58 +- 14 +- 77 +- 134 +- 136 +- 25 +- 43 +- 70 +- 181 +- 77 +- 149 +- 170 +- 86 +- 48 +- 171 +- 76 +- 82 +- 61 +- 146 +- 138 +- 121 +- 94 +- 36 +- 152 +- 42 +- 94 +- 37 +- 135 +- 56 +- 0 +- 60 +- 28 +- 51 +- 135 +- 145 +- 94 +- 180 +- 142 +- 69 +- 158 +- 14 +- 192 +- 139 +- 101 +- 171 +- 110 +- 149 +- 60 +- 101 +- 26 +- 82 +- 79 +- 192 +- 132 +- 26 +- 148 +- 38 +- 77 +- 89 +- 27 +- 20 +- 92 +- 25 +- 58 +- 112 +- 171 +- 104 +- 121 +- 168 +- 30 +- 68 +- 0 +- 176 +- 58 +- 173 +- 174 +- 98 +- 122 +- 153 +- 11 +- 20 +- 58 +- 94 +- 38 +- 44 +- 171 +- 164 +- 9 +- 40 +- 189 +- 129 +- 135 +- 177 +- 38 +- 64 +- 51 +- 167 +- 90 +- 170 +- 110 +- 157 +- 146 +- 194 +- 167 +- 109 +- 151 +- 149 +- 39 +- 119 +- 21 +- 182 +- 92 +- 174 +- 5 +- 199 +- 181 +- 29 +- 148 +- 3 +- 122 +- 115 +- 93 +- 188 +- 113 +- 39 +- 115 +- 148 +- 122 +- 100 +- 60 +- 70 +- 20 +- 106 +- 114 +- 151 +- 69 +- 53 +- 14 +- 10 +- 52 +- 80 +- 45 +- 13 +- 171 +- 102 +- 44 +- 79 +- 147 +- 20 +- 92 +- 12 +- 49 +- 86 +- 14 +- 164 +- 40 +- 32 +- 147 +- 133 +- 65 +- 51 +- 70 +- 113 +- 158 +- 112 +- 120 +- 142 +- 51 +- 103 +- 182 +- 85 +- 114 +- 35 +- 192 +- 130 +- 14 +- 126 +- 0 +- 33 +- 114 +- 127 +- 29 +- 53 +- 47 +- 119 +- 166 +- 94 +- 147 +- 168 +- 42 +- 84 +- 152 +- 28 +- 171 +- 50 +- 171 +- 168 +- 5 +- 194 +- 1 +- 12 +- 41 +- 78 +- 100 +- 15 +- 128 +- 151 +- 113 +- 6 +- 18 +- 102 +- 74 +- 128 +- 132 +- 125 +- 71 +- 56 +- 35 +- 186 +- 194 +- 71 +- 171 +- 91 +- 153 +- 157 +- 17 +- 136 +- 164 +- 153 +- 98 +- 136 +- 92 +- 158 +- 38 +- 91 +- 39 +- 146 +- 23 +- 14 +- 188 +- 44 +- 115 +- 57 +- 76 +- 75 +- 61 +- 95 +- 148 +- 9 +- 94 +- 125 +- 58 +- 11 +- 90 +- 148 +- 138 +- 182 +- 20 +- 108 +- 77 +- 192 +- 129 +- 40 +- 103 +- 35 +- 36 +- 17 +- 156 +- 110 +- 150 +- 153 +- 52 +- 14 +- 134 +- 135 +- 122 +- 47 +- 115 +- 38 +- 100 +- 149 +- 142 +- 79 +- 143 +- 142 +- 145 +- 96 +- 32 +- 16 +- 182 +- 158 +- 37 +- 143 +- 159 +- 101 +- 94 +- 113 +- 32 +- 47 +- 180 +- 185 +- 67 +- 175 +- 31 +- 25 +- 49 +- 147 +- 72 +- 155 +- 151 +- 16 +- 188 +- 94 +- 164 +- 114 +- 77 +- 133 +- 114 +- 20 +- 72 +- 63 +- 185 +- 100 +- 57 +- 101 +- 49 +- 92 +- 157 +- 116 +- 174 +- 50 +- 6 +- 61 +- 24 +- 128 +- 147 +- 112 +- 64 +- 145 +- 78 +- 77 +- 60 +- 94 +- 74 +- 36 +- 96 +- 173 +- 6 +- 131 +- 146 +- 192 +- 109 +- 11 +- 90 +- 171 +- 146 +- 171 +- 178 +- 145 +- 171 +- 53 +- 149 +- 22 +- 116 +- 92 +- 69 +- 180 +- 24 +- 196 +- 14 +- 104 +- 31 +- 94 +- 20 +- 166 +- 32 +- 121 +- 96 +- 125 +- 109 +- 99 +- 92 +- 56 +- 179 +- 125 +- 176 +- 6 +- 41 +- 196 +- 11 +- 186 +- 73 +- 83 +- 149 +- 11 +- 159 +- 72 +- 20 +- 11 +- 171 +- 95 +- 133 +- 96 +- 10 +- 20 +- 102 +- 109 +- 21 +- 47 +- 124 +- 189 +- 121 +- 142 +- 199 +- 93 +- 48 +- 182 +- 168 +- 48 +- 170 +- 64 +- 186 +- 167 +- 58 +- 71 +- 152 +- 174 +- 152 +- 156 +- 149 +- 158 +- 132 +- 80 +- 43 +- 106 +- 7 +- 29 +- 159 +- 22 +- 27 +- 111 +- 65 +- 133 +- 133 +- 97 +- 192 +- 182 +- 114 +- 142 +- 48 +- 73 +- 4 +- 86 +- 192 +- 55 +- 26 +- 131 +- 1 +- 125 +- 119 +- 172 +- 14 +- 142 +- 73 +- 44 +- 171 +- 76 +- 86 +- 194 +- 20 +- 50 +- 19 +- 75 +- 36 +- 147 +- 175 +- 118 +- 198 +- 164 +- 42 +- 82 +- 143 +- 64 +- 57 +- 157 +- 100 +- 45 +- 186 +- 185 +- 72 +- 36 +- 31 +- 24 +- 122 +- 66 +- 14 +- 115 +- 11 +- 20 +- 3 +- 174 +- 57 +- 80 +- 38 +- 132 +- 84 +- 6 +- 90 +- 162 +- 4 +- 78 +- 13 +- 155 +- 190 +- 152 +- 136 +- 172 +- 35 +- 72 +- 133 +- 75 +- 99 +- 86 +- 99 +- 177 +- 153 +- 185 +- 99 +- 112 +- 170 +- 13 +- 142 +- 90 +- 54 +- 7 +- 58 +- 186 +- 172 +- 188 +- 144 +- 43 +- 98 +- 188 +- 1 +- 133 +- 112 +- 63 +- 54 +- 142 +- 182 +- 46 +- 50 +- 192 +- 41 +- 129 +- 154 +- 113 +- 50 +- 33 +- 140 +- 156 +- 180 +- 117 +- 143 +- 190 +- 90 +- 26 +- 161 +- 82 +- 36 +- 149 +- 24 +- 37 +- 113 +- 186 +- 171 +- 32 +- 146 +- 61 +- 98 +- 194 +- 110 +- 99 +- 125 +- 122 +- 59 +- 171 +- 112 +- 115 +- 106 +- 192 +- 58 +- 101 +- 171 +- 20 +- 33 +- 163 +- 139 +- 72 +- 115 +- 68 +- 185 +- 110 +- 53 +- 11 +- 70 +- 160 +- 120 +- 7 +- 75 +- 159 +- 16 +- 80 +- 73 +- 184 +- 49 +- 38 +- 177 +- 104 +- 30 +- 114 +- 190 +- 27 +- 11 +- 165 +- 46 +- 171 +- 67 +- 126 +- 190 +- 41 +- 31 +- 102 +- 147 +- 156 +- 179 +- 147 +- 94 +- 53 +- 158 +- 18 +- 172 +- 196 +- 58 +- 19 +- 73 +- 109 +- 127 +- 138 +- 186 +- 111 +- 139 +- 28 +- 194 +- 113 +- 125 +- 161 +- 149 +- 52 +- 49 +- 192 +- 144 +- 72 +- 117 +- 149 +- 149 +- 112 +- 169 +- 113 +- 70 +- 45 +- 20 +- 48 +- 116 +- 47 +- 11 +- 43 +- 150 +- 38 +- 97 +- 128 +- 189 +- 192 +- 125 +- 48 +- 137 +- 73 +- 113 +- 86 +- 19 +- 66 +- 168 +- 26 +- 111 +- 103 +- 177 +- 22 +- 37 +- 168 +- 79 +- 35 +- 84 +- 129 +- 50 +- 84 +- 158 +- 72 +- 125 +- 173 +- 149 +- 1 +- 188 +- 186 +- 21 +- 198 +- 46 +- 185 +- 127 +- 74 +- 164 +- 99 +- 174 +- 9 +- 152 +- 50 +- 90 +- 100 +- 192 +- 94 +- 53 +- 24 +- 188 +- 145 +- 120 +- 50 +- 158 +- 31 +- 15 +- 10 +- 91 +- 76 +- 7 +- 129 +- 50 +- 198 +- 120 +- 182 +- 14 +- 193 +- 126 +- 40 +- 20 +- 160 +- 143 +- 94 +- 113 +- 173 +- 29 +- 81 +- 158 +- 192 +- 30 +- 14 +- 186 +- 37 +- 180 +- 101 +- 102 +- 24 +- 73 +- 94 +- 153 +- 20 +- 175 +- 42 +- 141 +- 155 +- 53 +- 72 +- 127 +- 152 +- 62 +- 76 +- 154 +- 26 +- 112 +- 87 +- 189 +- 94 +- 36 +- 75 +- 182 +- 104 +- 90 +- 21 +- 164 +- 171 +- 190 +- 106 +- 110 +- 66 +- 3 +- 103 +- 152 +- 62 +- 72 +- 149 +- 14 +- 110 +- 159 +- 54 +- 174 +- 19 +- 46 +- 158 +- 164 +- 30 +- 66 +- 72 +- 63 +- 23 +- 53 +- 35 +- 125 +- 0 +- 38 +- 5 +- 22 +- 102 +- 73 +- 101 +- 149 +- 175 +- 58 +- 139 +- 115 +- 21 +- 133 +- 69 +- 108 +- 33 +- 170 +- 120 +- 93 +- 171 +- 58 +- 95 +- 182 +- 122 +- 110 +- 102 +- 134 +- 10 +- 88 +- 8 +- 113 +- 183 +- 113 +- 137 +- 51 +- 187 +- 20 +- 37 +- 140 +- 98 +- 63 +- 153 +- 69 +- 37 +- 53 +- 128 +- 75 +- 184 +- 152 +- 14 +- 82 +- 195 +- 21 +- 183 +- 113 +- 17 +- 35 +- 12 +- 152 +- 113 +- 20 +- 187 +- 176 +- 20 +- 7 +- 1 +- 42 +- 67 +- 37 +- 38 +- 161 +- 12 +- 112 +- 153 +- 138 +- 79 +- 14 +- 111 +- 96 +- 97 +- 22 +- 56 +- 169 +- 157 +- 9 +- 10 +- 14 +- 174 +- 109 +- 120 +- 103 +- 20 +- 14 +- 58 +- 114 +- 35 +- 187 +- 60 +- 83 +- 135 +- 151 +- 81 +- 56 +- 30 +- 114 +- 50 +- 165 +- 19 +- 30 +- 41 +- 184 +- 13 +- 196 +- 170 +- 166 +- 125 +- 134 +- 173 +- 41 +- 60 +- 12 +- 186 +- 22 +- 117 +- 96 +- 67 +- 171 +- 114 +- 53 +- 178 +- 187 +- 15 +- 14 +- 12 +- 28 +- 103 +- 0 +- 142 +- 189 +- 53 +- 191 +- 72 +- 171 +- 171 +- 24 +- 98 +- 91 +- 106 +- 115 +- 11 +- 106 +- 38 +- 54 +- 89 +- 20 +- 102 +- 133 +- 119 +- 78 +- 113 +- 44 +- 152 +- 119 +- 120 +- 58 +- 26 +- 35 +- 91 +- 106 +- 152 +- 21 +- 53 +- 65 +- 19 +- 151 +- 81 +- 113 +- 19 +- 13 +- 182 +- 3 +- 170 +- 26 +- 42 +- 58 +- 63 +- 49 +- 42 +- 132 +- 0 +- 38 +- 83 +- 179 +- 159 +- 18 +- 153 +- 187 +- 70 +- 120 +- 48 +- 127 +- 186 +- 35 +- 136 +- 37 +- 144 +- 193 +- 85 +- 194 +- 129 +- 129 +- 175 +- 86 +- 98 +- 99 +- 68 +- 43 +- 144 +- 4 +- 150 +- 164 +- 52 +- 130 +- 61 +- 132 +- 141 +- 116 +- 24 +- 55 +- 36 +- 71 +- 119 +- 109 +- 66 +- 0 +- 73 +- 149 +- 5 +- 25 +- 85 +- 171 +- 112 +- 77 +- 82 +- 188 +- 73 +- 61 +- 122 +- 93 +- 73 +- 113 +- 97 +- 140 +- 14 +- 30 +- 92 +- 182 +- 99 +- 59 +- 137 +- 2 +- 102 +- 91 +- 171 +- 193 +- 7 +- 170 +- 168 +- 36 +- 179 +- 102 +- 142 +- 106 +- 108 +- 134 +- 134 +- 38 +- 96 +- 73 +- 198 +- 94 +- 17 +- 194 +- 20 +- 33 +- 115 +- 101 +- 187 +- 168 +- 91 +- 90 +- 175 +- 93 +- 135 +- 20 +- 39 +- 102 +- 9 +- 147 +- 159 +- 76 +- 52 +- 73 +- 102 +- 11 +- 119 +- 14 +- 133 +- 86 +- 169 +- 84 +- 63 +- 199 +- 30 +- 138 +- 27 +- 113 +- 15 +- 24 +- 138 +- 81 +- 24 +- 50 +- 60 +- 14 +- 147 +- 20 +- 26 +- 125 +- 171 +- 6 +- 15 +- 149 +- 18 +- 169 +- 168 +- 90 +- 28 +- 159 +- 83 +- 35 +- 78 +- 129 +- 167 +- 150 +- 29 +- 195 +- 167 +- 84 +- 28 +- 19 +- 183 +- 153 +- 94 +- 97 +- 153 +- 188 +- 153 +- 166 +- 115 +- 14 +- 106 +- 198 +- 179 +- 19 +- 36 +- 196 +- 160 +- 82 +- 69 +- 62 +- 133 +- 72 +- 111 +- 163 +- 189 +- 163 +- 182 +- 39 +- 198 +- 33 +- 27 +- 21 +- 188 +- 63 +- 64 +- 39 +- 195 +- 146 +- 55 +- 99 +- 13 +- 74 +- 156 +- 4 +- 13 +- 150 +- 182 +- 60 +- 191 +- 56 +- 80 +- 50 +- 188 +- 80 +- 175 +- 182 +- 188 +- 20 +- 69 +- 94 +- 137 +- 171 +- 14 +- 73 +- 117 +- 142 +- 64 +- 96 +- 53 +- 0 +- 197 +- 93 +- 53 +- 168 +- 82 +- 10 +- 171 +- 41 +- 28 +- 168 +- 35 +- 109 +- 159 +- 37 +- 198 +- 193 +- 181 +- 66 +- 91 +- 154 +- 64 +- 69 +- 37 +- 102 +- 80 +- 198 +- 154 +- 30 +- 32 +- 196 +- 170 +- 26 +- 45 +- 160 +- 159 +- 140 +- 122 +- 125 +- 171 +- 114 +- 13 +- 115 +- 11 +- 192 +- 125 +- 11 +- 1 +- 144 +- 104 +- 159 +- 165 +- 15 +- 138 +- 185 +- 91 +- 43 +- 115 +- 45 +- 34 +- 38 +- 116 +- 76 +- 156 +- 92 +- 21 +- 188 +- 33 +- 137 +- 117 +- 112 +- 73 +- 48 +- 97 +- 92 +- 180 +- 132 +- 69 +- 39 +- 114 +- 133 +- 14 +- 36 +- 44 +- 110 +- 77 +- 17 +- 110 +- 125 +- 132 +- 84 +- 82 +- 91 +- 113 +- 155 +- 153 +- 98 +- 105 +- 180 +- 146 +- 93 +- 72 +- 122 +- 73 +- 28 +- 55 +- 63 +- 108 +- 192 +- 14 +- 110 +- 168 +- 95 +- 58 +- 179 +- 58 +- 53 +- 35 +- 149 +- 184 +- 171 +- 53 +- 116 +- 64 +- 50 +- 120 +- 82 +- 79 +- 16 +- 10 +- 132 +- 132 +- 137 +- 86 +- 100 +- 132 +- 196 +- 32 +- 27 +- 132 +- 114 +- 48 +- 89 +- 101 +- 30 +- 51 +- 1 +- 132 +- 6 +- 132 +- 6 +- 68 +- 74 +- 20 +- 164 +- 167 +- 107 +- 147 +- 142 +- 50 +- 189 +- 182 +- 112 +- 90 +- 171 +- 112 +- 70 +- 37 +- 109 +- 64 +- 48 +- 164 +- 112 +- 53 +- 167 +- 14 +- 171 +- 136 +- 179 +- 198 +- 53 +- 27 +- 189 +- 113 +- 73 +- 53 +- 38 +- 38 +- 108 +- 82 +- 170 +- 103 +- 179 +- 126 +- 50 +- 161 +- 160 +- 73 +- 32 +- 172 +- 122 +- 163 +- 93 +- 57 +- 90 +- 159 +- 170 +- 103 +- 98 +- 179 +- 49 +- 101 +- 171 +- 131 +- 5 +- 121 +- 133 +- 93 +- 164 +- 58 +- 164 +- 43 +- 76 +- 57 +- 189 +- 21 +- 31 +- 116 +- 102 +- 90 +- 189 +- 100 +- 124 +- 147 +- 171 +- 102 +- 108 +- 11 +- 64 +- 192 +- 186 +- 127 +- 79 +- 108 +- 26 +- 6 +- 31 +- 1 +- 26 +- 33 +- 47 +- 159 +- 52 +- 113 +- 100 +- 32 +- 121 +- 43 +- 97 +- 119 +- 84 +- 132 +- 141 +- 44 +- 3 +- 113 +- 109 +- 44 +- 3 +- 24 +- 151 +- 82 +- 16 +- 198 +- 187 +- 128 +- 77 +- 39 +- 91 +- 148 +- 91 +- 1 +- 198 +- 118 +- 25 +- 42 +- 28 +- 197 +- 84 +- 32 +- 121 +- 13 +- 135 +- 15 +- 28 +- 3 +- 110 +- 173 +- 39 +- 100 +- 188 +- 74 +- 167 +- 24 +- 169 +- 49 +- 12 +- 113 +- 192 +- 129 +- 115 +- 179 +- 168 +- 32 +- 24 +- 15 +- 3 +- 39 +- 195 +- 30 +- 171 +- 13 +- 188 +- 20 +- 51 +- 116 +- 94 +- 90 +- 79 +- 73 +- 188 +- 36 +- 191 +- 64 +- 53 +- 76 +- 79 +- 179 +- 129 +- 182 +- 189 +- 160 +- 186 +- 121 +- 3 +- 48 +- 165 +- 116 +- 17 +- 43 +- 0 +- 72 +- 169 +- 163 +- 189 +- 60 +- 35 +- 92 +- 191 +- 72 +- 64 +- 58 +- 24 +- 128 +- 104 +- 189 +- 21 +- 186 +- 43 +- 19 +- 125 +- 88 +- 0 +- 13 +- 106 +- 157 +- 53 +- 85 +- 35 +- 189 +- 128 +- 156 +- 115 +- 125 +- 70 +- 77 +- 184 +- 144 +- 65 +- 35 +- 90 +- 20 +- 163 +- 133 +- 131 +- 43 +- 82 +- 14 +- 20 +- 76 +- 63 +- 139 +- 56 +- 55 +- 94 +- 173 +- 62 +- 198 +- 74 +- 140 +- 77 +- 30 +- 153 +- 33 +- 82 +- 108 +- 18 +- 105 +- 131 +- 171 +- 198 +- 4 +- 57 +- 103 +- 41 +- 41 +- 97 +- 57 +- 53 +- 67 +- 47 +- 141 +- 58 +- 109 +- 82 +- 160 +- 111 +- 149 +- 107 +- 93 +- 33 +- 42 +- 94 +- 182 +- 86 +- 175 +- 122 +- 138 +- 71 +- 93 +- 93 +- 170 +- 140 +- 75 +- 175 +- 24 +- 128 +- 31 +- 150 +- 18 +- 99 +- 35 +- 43 +- 69 +- 48 +- 183 +- 48 +- 3 +- 1 +- 35 +- 182 +- 160 +- 148 +- 98 +- 57 +- 30 +- 26 +- 177 +- 176 +- 114 +- 43 +- 61 +- 40 +- 146 +- 158 +- 50 +- 102 +- 10 +- 70 +- 84 +- 79 +- 169 +- 90 +- 145 +- 187 +- 189 +- 71 +- 175 +- 91 +- 3 +- 47 +- 8 +- 63 +- 82 +- 74 +- 113 +- 5 +- 40 +- 105 +- 52 +- 40 +- 140 +- 18 +- 100 +- 156 +- 153 +- 131 +- 106 +- 57 +- 47 +- 182 +- 91 +- 161 +- 15 +- 35 +- 98 +- 5 +- 113 +- 20 +- 142 +- 43 +- 175 +- 57 +- 0 +- 159 +- 96 +- 41 +- 186 +- 94 +- 136 +- 159 +- 74 +- 32 +- 91 +- 106 +- 6 +- 28 +- 125 +- 171 +- 0 +- 98 +- 24 +- 99 +- 156 +- 77 +- 56 +- 26 +- 75 +- 171 +- 198 +- 36 +- 120 +- 110 +- 164 +- 28 +- 182 +- 147 +- 198 +- 154 +- 128 +- 108 +- 14 +- 192 +- 120 +- 162 +- 114 +- 73 +- 11 +- 53 +- 99 +- 53 +- 7 +- 54 +- 76 +- 85 +- 2 +- 114 +- 114 +- 148 +- 99 +- 195 +- 161 +- 80 +- 3 +- 54 +- 49 +- 21 +- 174 +- 151 +- 199 +- 13 +- 150 +- 37 +- 116 +- 159 +- 159 +- 193 +- 20 +- 58 +- 32 +- 75 +- 113 +- 3 +- 108 +- 51 +- 61 +- 40 +- 19 +- 172 +- 51 +- 26 +- 63 +- 129 +- 177 +- 195 +- 171 +- 86 +- 184 +- 173 +- 113 +- 119 +- 161 +- 69 +- 74 +- 18 +- 79 +- 178 +- 37 +- 183 +- 76 +- 42 +- 179 +- 142 +- 33 +- 120 +- 136 +- 102 +- 96 +- 15 +- 185 +- 71 +- 98 +- 131 +- 133 +- 68 +- 72 +- 147 +- 33 +- 167 +- 122 +- 58 +- 158 +- 132 +- 159 +- 72 +- 95 +- 152 +- 76 +- 147 +- 136 +- 44 +- 91 +- 74 +- 14 +- 114 +- 2 +- 185 +- 101 +- 129 +- 119 +- 4 +- 94 +- 3 +- 139 +- 22 +- 159 +- 96 +- 61 +- 48 +- 5 +- 196 +- 109 +- 79 +- 133 +- 9 +- 99 +- 10 +- 80 +- 150 +- 91 +- 98 +- 61 +- 183 +- 43 +- 70 +- 148 +- 68 +- 96 +- 198 +- 74 +- 141 +- 74 +- 80 +- 155 +- 102 +- 130 +- 20 +- 151 +- 119 +- 168 +- 14 +- 154 +- 95 +- 100 +- 145 +- 96 +- 106 +- 153 +- 151 +- 90 +- 17 +- 109 +- 2 +- 102 +- 56 +- 195 +- 53 +- 143 +- 74 +- 80 +- 153 +- 48 +- 174 +- 158 +- 18 +- 64 +- 50 +- 20 +- 153 +- 114 +- 65 +- 11 +- 0 +- 185 +- 72 +- 48 +- 122 +- 28 +- 141 +- 113 +- 70 +- 95 +- 49 +- 10 +- 8 +- 102 +- 61 +- 138 +- 35 +- 106 +- 19 +- 93 +- 44 +- 194 +- 0 +- 147 +- 72 +- 148 +- 158 +- 158 +- 138 +- 147 +- 194 +- 192 +- 113 +- 170 +- 171 +- 187 +- 160 +- 97 +- 185 +- 190 +- 12 +- 184 +- 14 +- 76 +- 133 +- 149 +- 132 +- 158 +- 87 +- 42 +- 42 +- 53 +- 161 +- 105 +- 78 +- 20 +- 118 +- 27 +- 94 +- 132 +- 118 +- 92 +- 171 +- 72 +- 63 +- 153 +- 82 +- 147 +- 37 +- 76 +- 102 +- 43 +- 36 +- 152 +- 27 +- 13 +- 179 +- 160 +- 98 +- 91 +- 121 +- 112 +- 74 +- 77 +- 117 +- 199 +- 101 +- 20 +- 108 +- 122 +- 164 +- 153 +- 178 +- 160 +- 38 +- 196 +- 30 +- 82 +- 97 +- 98 +- 121 +- 68 +- 133 +- 169 +- 51 +- 86 +- 132 +- 190 +- 179 +- 182 +- 172 +- 179 +- 93 +- 107 +- 194 +- 22 +- 24 +- 45 +- 50 +- 156 +- 154 +- 113 +- 169 +- 114 +- 194 +- 106 +- 39 +- 4 +- 14 +- 159 +- 116 +- 126 +- 160 +- 79 +- 186 +- 20 +- 167 +- 174 +- 36 +- 198 +- 12 +- 107 +- 43 +- 187 +- 113 +- 25 +- 93 +- 113 +- 160 +- 82 +- 191 +- 101 +- 167 +- 54 +- 163 +- 35 +- 153 +- 24 +- 55 +- 113 +- 138 +- 110 +- 187 +- 194 +- 24 +- 131 +- 29 +- 138 +- 194 +- 36 +- 122 +- 179 +- 116 +- 61 +- 70 +- 139 +- 14 +- 194 +- 112 +- 93 +- 69 +- 142 +- 27 +- 58 +- 154 +- 35 +- 26 +- 99 +- 49 +- 182 +- 20 +- 85 +- 174 +- 94 +- 151 +- 84 +- 95 +- 19 +- 152 +- 115 +- 20 +- 1 +- 110 +- 23 +- 127 +- 71 +- 72 +- 80 +- 197 +- 2 +- 91 +- 27 +- 35 +- 91 +- 72 +- 30 +- 153 +- 102 +- 63 +- 153 +- 151 +- 40 +- 64 +- 58 +- 171 +- 173 +- 20 +- 49 +- 90 +- 109 +- 76 +- 118 +- 127 +- 168 +- 88 +- 65 +- 171 +- 46 +- 11 +- 121 +- 185 +- 36 +- 76 +- 185 +- 57 +- 125 +- 80 +- 142 +- 92 +- 171 +- 10 +- 96 +- 179 +- 192 +- 124 +- 40 +- 184 +- 54 +- 20 +- 55 +- 77 +- 137 +- 78 +- 95 +- 168 +- 162 +- 27 +- 2 +- 25 +- 175 +- 100 +- 126 +- 35 +- 53 +- 119 +- 147 +- 33 +- 126 +- 170 +- 169 +- 14 +- 41 +- 24 +- 24 +- 32 +- 89 +- 133 +- 156 +- 89 +- 198 +- 20 +- 192 +- 11 +- 34 +- 64 +- 165 +- 196 +- 163 +- 132 +- 113 +- 88 +- 2 +- 181 +- 160 +- 87 +- 3 +- 70 +- 142 +- 115 +- 107 +- 88 +- 151 +- 5 +- 164 +- 105 +- 27 +- 192 +- 90 +- 14 +- 158 +- 142 +- 57 +- 9 +- 166 +- 153 +- 163 +- 167 +- 14 +- 104 +- 32 +- 73 +- 29 +- 57 +- 13 +- 53 +- 197 +- 131 +- 35 +- 112 +- 61 +- 125 +- 57 +- 165 +- 115 +- 26 +- 119 +- 55 +- 169 +- 171 +- 157 +- 107 +- 48 +- 113 +- 125 +- 38 +- 132 +- 99 +- 110 +- 36 +- 192 +- 60 +- 36 +- 97 +- 75 +- 192 +- 130 +- 99 +- 161 +- 101 +- 53 +- 9 +- 113 +- 193 +- 97 +- 49 +- 101 +- 109 +- 61 +- 159 +- 97 +- 195 +- 113 +- 177 +- 79 +- 63 +- 40 +- 182 +- 115 +- 52 +- 0 +- 26 +- 117 +- 141 +- 69 +- 182 +- 133 +- 58 +- 112 +- 113 +- 148 +- 129 +- 100 +- 174 +- 5 +- 38 +- 182 +- 149 +- 185 +- 156 +- 38 +- 91 +- 149 +- 190 +- 124 +- 74 +- 73 +- 93 +- 5 +- 198 +- 89 +- 32 +- 192 +- 125 +- 151 +- 115 +- 68 +- 181 +- 120 +- 193 +- 63 +- 32 +- 163 +- 100 +- 5 +- 29 +- 119 +- 109 +- 63 +- 128 +- 102 +- 42 +- 189 +- 175 +- 14 +- 20 +- 141 +- 167 +- 174 +- 153 +- 27 +- 86 +- 140 +- 145 +- 177 +- 72 +- 86 +- 14 +- 139 +- 174 +- 129 +- 141 +- 132 +- 41 +- 60 +- 148 +- 181 +- 113 +- 21 +- 103 +- 158 +- 92 +- 37 +- 78 +- 46 +- 106 +- 97 +- 140 +- 0 +- 75 +- 174 +- 19 +- 73 +- 26 +- 40 +- 90 +- 80 +- 167 +- 75 +- 117 +- 14 +- 55 +- 163 +- 144 +- 138 +- 12 +- 165 +- 152 +- 64 +- 185 +- 168 +- 28 +- 30 +- 66 +- 162 +- 20 +- 78 +- 171 +- 192 +- 198 +- 171 +- 0 +- 71 +- 94 +- 64 +- 7 +- 193 +- 35 +- 166 +- 152 +- 176 +- 127 +- 73 +- 0 +- 104 +- 58 +- 171 +- 97 +- 142 +- 101 +- 182 +- 188 +- 72 +- 70 +- 4 +- 71 +- 53 +- 21 +- 58 +- 159 +- 38 +- 11 +- 151 +- 50 +- 70 +- 194 +- 59 +- 164 +- 187 +- 140 +- 128 +- 27 +- 144 +- 100 +- 118 +- 20 +- 192 +- 15 +- 132 +- 31 +- 75 +- 69 +- 65 +- 15 +- 151 +- 91 +- 70 +- 193 +- 61 +- 171 +- 171 +- 58 +- 151 +- 61 +- 188 +- 39 +- 51 +- 149 +- 95 +- 166 +- 182 +- 175 +- 63 +- 179 +- 42 +- 140 +- 32 +- 20 +- 149 +- 72 +- 8 +- 159 +- 38 +- 151 +- 18 +- 98 +- 41 +- 3 +- 79 +- 143 +- 78 +- 128 +- 26 +- 38 +- 0 +- 68 +- 13 +- 20 +- 62 +- 24 +- 73 +- 173 +- 101 +- 50 +- 19 +- 53 +- 34 +- 60 +- 102 +- 165 +- 103 +- 58 +- 30 +- 173 +- 37 +- 103 +- 129 +- 101 +- 143 +- 187 +- 145 +- 25 +- 77 +- 18 +- 90 +- 32 +- 177 +- 103 +- 38 +- 5 +- 94 +- 37 +- 94 +- 64 +- 17 +- 67 +- 64 +- 64 +- 153 +- 115 +- 96 +- 65 +- 182 +- 160 +- 20 +- 2 +- 152 +- 45 +- 13 +- 100 +- 24 +- 126 +- 7 +- 162 +- 133 +- 63 +- 27 +- 144 +- 197 +- 170 +- 102 +- 186 +- 132 +- 76 +- 117 +- 122 +- 181 +- 79 +- 41 +- 128 +- 58 +- 107 +- 82 +- 69 +- 51 +- 28 +- 180 +- 71 +- 31 +- 91 +- 139 +- 37 +- 41 +- 120 +- 72 +- 175 +- 72 +- 154 +- 129 +- 158 +- 142 +- 119 +- 102 +- 118 +- 122 +- 90 +- 53 +- 74 +- 72 +- 100 +- 185 +- 192 +- 99 +- 168 +- 140 +- 102 +- 61 +- 165 +- 171 +- 198 +- 78 +- 24 +- 109 +- 182 +- 163 +- 192 +- 53 +- 149 +- 26 +- 69 +- 70 +- 2 +- 20 +- 192 +- 120 +- 71 +- 22 +- 43 +- 64 +- 99 +- 149 +- 141 +- 141 +- 69 +- 68 +- 73 +- 30 +- 100 +- 171 +- 64 +- 77 +- 168 +- 63 +- 139 +- 98 +- 13 +- 71 +- 176 +- 167 +- 116 +- 37 +- 185 +- 40 +- 15 +- 3 +- 87 +- 164 +- 20 +- 28 +- 60 +- 53 +- 109 +- 136 +- 100 +- 72 +- 193 +- 140 +- 160 +- 139 +- 38 +- 14 +- 140 +- 9 +- 30 +- 73 +- 50 +- 179 +- 94 +- 99 +- 96 +- 55 +- 91 +- 145 +- 109 +- 124 +- 24 +- 17 +- 142 +- 77 +- 53 +- 186 +- 24 +- 75 +- 110 +- 13 +- 81 +- 3 +- 132 +- 192 +- 20 +- 190 +- 1 +- 55 +- 173 +- 159 +- 100 +- 154 +- 0 +- 91 +- 154 +- 16 +- 140 +- 102 +- 173 +- 60 +- 129 +- 70 +- 90 +- 63 +- 36 +- 152 +- 9 +- 68 +- 67 +- 142 +- 14 +- 171 +- 142 +- 79 +- 76 +- 4 +- 133 +- 179 +- 21 +- 5 +- 84 +- 37 +- 4 +- 169 +- 87 +- 125 +- 158 +- 54 +- 35 +- 133 +- 83 +- 50 +- 143 +- 27 +- 49 +- 63 +- 117 +- 98 +- 136 +- 102 +- 144 +- 94 +- 114 +- 141 +- 33 +- 54 +- 112 +- 195 +- 79 +- 129 +- 133 +- 136 +- 159 +- 77 +- 149 +- 193 +- 151 +- 114 +- 22 +- 49 +- 14 +- 28 +- 66 +- 4 +- 197 +- 33 +- 161 +- 102 +- 71 +- 15 +- 115 +- 14 +- 8 +- 48 +- 49 +- 128 +- 14 +- 20 +- 79 +- 125 +- 1 +- 14 +- 61 +- 153 +- 48 +- 133 +- 24 +- 61 +- 55 +- 35 +- 3 +- 171 +- 159 +- 20 +- 185 +- 124 +- 27 +- 128 +- 158 +- 57 +- 148 +- 73 +- 120 +- 189 +- 1 +- 99 +- 27 +- 182 +- 59 +- 17 +- 152 +- 127 +- 56 +- 142 +- 48 +- 125 +- 44 +- 136 +- 62 +- 15 +- 73 +- 140 +- 69 +- 149 +- 135 +- 7 +- 61 +- 48 +- 63 +- 128 +- 73 +- 0 +- 97 +- 0 +- 53 +- 153 +- 128 +- 104 +- 198 +- 153 +- 153 +- 195 +- 188 +- 129 +- 186 +- 58 +- 174 +- 122 +- 78 +- 112 +- 76 +- 125 +- 112 +- 61 +- 169 +- 129 +- 175 +- 151 +- 94 +- 184 +- 49 +- 7 +- 113 +- 35 +- 161 +- 18 +- 113 +- 134 +- 192 +- 35 +- 160 +- 74 +- 53 +- 122 +- 28 +- 43 +- 38 +- 106 +- 29 +- 85 +- 141 +- 185 +- 91 +- 173 +- 96 +- 111 +- 69 +- 113 +- 170 +- 170 +- 35 +- 14 +- 100 +- 77 +- 46 +- 171 +- 37 +- 154 +- 113 +- 64 +- 178 +- 58 +- 49 +- 38 +- 176 +- 30 +- 157 +- 58 +- 159 +- 136 +- 184 +- 164 +- 106 +- 27 +- 99 +- 158 +- 132 +- 35 +- 107 +- 158 +- 32 +- 120 +- 8 +- 84 +- 176 +- 86 +- 43 +- 86 +- 186 +- 36 +- 53 +- 163 +- 64 +- 176 +- 82 +- 149 +- 33 +- 13 +- 113 +- 133 +- 49 +- 195 +- 37 +- 174 +- 129 +- 100 +- 18 +- 148 +- 14 +- 58 +- 114 +- 83 +- 98 +- 196 +- 101 +- 168 +- 138 +- 131 +- 182 +- 72 +- 51 +- 99 +- 39 +- 169 +- 190 +- 31 +- 119 +- 87 +- 32 +- 185 +- 195 +- 84 +- 176 +- 90 +- 188 +- 32 +- 96 +- 25 +- 121 +- 132 +- 185 +- 153 +- 164 +- 53 +- 72 +- 109 +- 138 +- 159 +- 80 +- 179 +- 175 +- 52 +- 41 +- 73 +- 160 +- 37 +- 13 +- 151 +- 46 +- 138 +- 166 +- 149 +- 99 +- 96 +- 26 +- 110 +- 107 +- 193 +- 10 +- 136 +- 42 +- 141 +- 107 +- 187 +- 157 +- 31 +- 93 +- 106 +- 2 +- 93 +- 82 +- 140 +- 69 +- 119 +- 198 +- 33 +- 179 +- 173 +- 183 +- 94 +- 139 +- 64 +- 142 +- 140 +- 19 +- 184 +- 82 +- 14 +- 66 +- 148 +- 35 +- 14 +- 93 +- 104 +- 112 +- 72 +- 24 +- 33 +- 66 +- 32 +- 101 +- 2 +- 132 +- 140 +- 61 +- 157 +- 12 +- 68 +- 160 +- 92 +- 53 +- 128 +- 7 +- 20 +- 73 +- 5 +- 57 +- 105 +- 31 +- 90 +- 58 +- 36 +- 145 +- 192 +- 71 +- 121 +- 72 +- 125 +- 113 +- 192 +- 63 +- 51 +- 152 +- 115 +- 152 +- 57 +- 62 +- 154 +- 186 +- 155 +- 0 +- 25 +- 35 +- 27 +- 96 +- 11 +- 35 +- 124 +- 168 +- 174 +- 65 +- 167 +- 20 +- 24 +- 81 +- 78 +- 113 +- 56 +- 134 +- 91 +- 193 +- 129 +- 173 +- 12 +- 98 +- 79 +- 112 +- 199 +- 32 +- 92 +- 78 +- 66 +- 10 +- 37 +- 78 +- 55 +- 82 +- 64 +- 28 +- 61 +- 188 +- 128 +- 36 +- 31 +- 36 +- 99 +- 79 +- 153 +- 158 +- 141 +- 57 +- 148 +- 136 +- 9 +- 113 +- 120 +- 34 +- 171 +- 102 +- 93 +- 68 +- 170 +- 17 +- 174 +- 24 +- 67 +- 163 +- 134 +- 152 +- 177 +- 125 +- 97 +- 116 +- 118 +- 48 +- 194 +- 38 +- 85 +- 112 +- 58 +- 119 +- 133 +- 174 +- 180 +- 113 +- 58 +- 63 +- 185 +- 198 +- 177 +- 186 +- 138 +- 81 +- 62 +- 102 +- 27 +- 37 +- 92 +- 143 +- 151 +- 128 +- 24 +- 0 +- 158 +- 99 +- 13 +- 182 +- 72 +- 171 +- 117 +- 61 +- 81 +- 32 +- 147 +- 193 +- 157 +- 63 +- 9 +- 158 +- 184 +- 57 +- 130 +- 179 +- 11 +- 142 +- 19 +- 154 +- 108 +- 158 +- 149 +- 41 +- 199 +- 159 +- 125 +- 167 +- 71 +- 132 +- 95 +- 134 +- 128 +- 38 +- 8 +- 187 +- 187 +- 7 +- 70 +- 108 +- 53 +- 109 +- 90 +- 56 +- 72 +- 9 +- 174 +- 18 +- 57 +- 199 +- 37 +- 171 +- 38 +- 40 +- 49 +- 77 +- 152 +- 102 +- 168 +- 186 +- 30 +- 122 +- 7 +- 64 +- 142 +- 179 +- 11 +- 4 +- 91 +- 49 +- 86 +- 58 +- 107 +- 82 +- 68 +- 135 +- 37 +- 81 +- 94 +- 72 +- 91 +- 75 +- 121 +- 9 +- 113 +- 112 +- 34 +- 74 +- 129 +- 112 +- 72 +- 65 +- 153 +- 122 +- 53 +- 95 +- 74 +- 115 +- 15 +- 78 +- 153 +- 171 +- 80 +- 81 +- 180 +- 43 +- 174 +- 32 +- 65 +- 35 +- 79 +- 159 +- 100 +- 95 +- 176 +- 91 +- 61 +- 47 +- 17 +- 56 +- 83 +- 77 +- 62 +- 37 +- 76 +- 95 +- 140 +- 120 +- 4 +- 35 +- 186 +- 168 +- 113 +- 19 +- 62 +- 99 +- 19 +- 174 +- 153 +- 134 +- 160 +- 127 +- 124 +- 159 +- 69 +- 76 +- 1 +- 199 +- 53 +- 44 +- 176 +- 171 +- 175 +- 60 +- 24 +- 61 +- 153 +- 7 +- 37 +- 69 +- 41 +- 5 +- 73 +- 146 +- 148 +- 166 +- 48 +- 27 +- 159 +- 112 +- 1 +- 33 +- 166 +- 58 +- 110 +- 169 +- 84 +- 31 +- 187 +- 156 +- 135 +- 174 +- 152 +- 64 +- 83 +- 39 +- 179 +- 32 +- 68 +- 80 +- 156 +- 58 +- 177 +- 89 +- 114 +- 114 +- 35 +- 63 +- 51 +- 133 +- 142 +- 72 +- 32 +- 141 +- 37 +- 5 +- 132 +- 111 +- 116 +- 8 +- 14 +- 34 +- 186 +- 178 +- 94 +- 31 +- 58 +- 47 +- 7 +- 93 +- 151 +- 46 +- 3 +- 82 +- 0 +- 159 +- 159 +- 198 +- 143 +- 140 +- 73 +- 99 +- 199 +- 141 +- 94 +- 194 +- 43 +- 158 +- 159 +- 198 +- 26 +- 102 +- 97 +- 169 +- 94 +- 13 +- 58 +- 113 +- 90 +- 175 +- 149 +- 153 +- 53 +- 153 +- 7 +- 28 +- 101 +- 134 +- 111 +- 189 +- 28 +- 140 +- 88 +- 155 +- 43 +- 199 +- 170 +- 91 +- 182 +- 36 +- 37 +- 158 +- 90 +- 90 +- 63 +- 35 +- 118 +- 72 +- 153 +- 56 +- 159 +- 92 +- 75 +- 132 +- 79 +- 66 +- 157 +- 44 +- 13 +- 60 +- 63 +- 109 +- 63 +- 48 +- 52 +- 132 +- 38 +- 48 +- 151 +- 121 +- 171 +- 134 +- 102 +- 198 +- 69 +- 99 +- 82 +- 96 +- 154 +- 61 +- 191 +- 79 +- 66 +- 172 +- 125 +- 84 +- 148 +- 120 +- 182 +- 53 +- 159 +- 171 +- 128 +- 109 +- 6 +- 141 +- 96 +- 198 +- 163 +- 187 +- 73 +- 122 +- 58 +- 186 +- 153 +- 84 +- 101 +- 27 +- 196 +- 50 +- 20 +- 142 +- 90 +- 48 +- 128 +- 170 +- 28 +- 26 +- 99 +- 24 +- 92 +- 22 +- 141 +- 18 +- 184 +- 148 +- 141 +- 102 +- 69 +- 91 +- 31 +- 133 +- 38 +- 110 +- 133 +- 125 +- 148 +- 186 +- 67 +- 182 +- 168 +- 150 +- 171 +- 57 +- 33 +- 163 +- 163 +- 82 +- 60 +- 97 +- 115 +- 103 +- 196 +- 31 +- 112 +- 97 +- 151 +- 94 +- 2 +- 38 +- 106 +- 96 +- 45 +- 194 +- 37 +- 58 +- 156 +- 35 +- 10 +- 170 +- 61 +- 79 +- 191 +- 163 +- 25 +- 79 +- 65 +- 65 +- 106 +- 156 +- 28 +- 132 +- 184 +- 141 +- 171 +- 94 +- 133 +- 115 +- 63 +- 153 +- 105 +- 5 +- 191 +- 112 +- 48 +- 96 +- 148 +- 170 +- 111 +- 31 +- 149 +- 55 +- 87 +- 140 +- 102 +- 73 +- 41 +- 99 +- 186 +- 46 +- 101 +- 25 +- 109 +- 58 +- 82 +- 125 +- 163 +- 99 +- 61 +- 158 +- 173 +- 73 +- 25 +- 182 +- 132 +- 113 +- 192 +- 96 +- 91 +- 115 +- 116 +- 0 +- 140 +- 149 +- 114 +- 57 +- 132 +- 144 +- 173 +- 55 +- 45 +- 47 +- 50 +- 158 +- 14 +- 181 +- 58 +- 98 +- 38 +- 64 +- 157 +- 182 +- 33 +- 152 +- 173 +- 75 +- 87 +- 79 +- 57 +- 33 +- 137 +- 124 +- 69 +- 18 +- 133 +- 96 +- 101 +- 125 +- 81 +- 58 +- 171 +- 131 +- 24 +- 38 +- 199 +- 157 +- 168 +- 40 +- 15 +- 197 +- 31 +- 111 +- 158 +- 49 +- 114 +- 144 +- 74 +- 125 +- 26 +- 171 +- 13 +- 153 +- 3 +- 101 +- 122 +- 91 +- 188 +- 90 +- 11 +- 173 +- 158 +- 169 +- 98 +- 102 +- 188 +- 31 +- 113 +- 56 +- 193 +- 58 +- 132 +- 191 +- 186 +- 192 +- 145 +- 37 +- 15 +- 48 +- 21 +- 188 +- 132 +- 25 +- 1 +- 28 +- 138 +- 56 +- 163 +- 187 +- 168 +- 62 +- 187 +- 98 +- 28 +- 128 +- 186 +- 93 +- 27 +- 81 +- 97 +- 192 +- 137 +- 3 +- 110 +- 132 +- 73 +- 7 +- 20 +- 140 +- 133 +- 125 +- 35 +- 102 +- 168 +- 35 +- 7 +- 125 +- 21 +- 102 +- 129 +- 67 +- 72 +- 74 +- 91 +- 50 +- 50 +- 80 +- 66 +- 128 +- 193 +- 91 +- 132 +- 63 +- 138 +- 94 +- 102 +- 20 +- 175 +- 104 +- 158 +- 142 +- 95 +- 71 +- 90 +- 13 +- 70 +- 57 +- 106 +- 119 +- 9 +- 169 +- 60 +- 131 +- 93 +- 179 +- 132 +- 20 +- 175 +- 90 +- 35 +- 170 +- 103 +- 83 +- 51 +- 20 +- 95 +- 160 +- 167 +- 158 +- 94 +- 57 +- 167 +- 110 +- 20 +- 16 +- 69 +- 40 +- 153 +- 58 +- 153 +- 3 +- 174 +- 185 +- 184 +- 92 +- 20 +- 171 +- 14 +- 166 +- 183 +- 140 +- 72 +- 7 +- 70 +- 149 +- 75 +- 97 +- 108 +- 158 +- 14 +- 142 +- 187 +- 80 +- 198 +- 84 +- 79 +- 95 +- 186 +- 51 +- 82 +- 183 +- 73 +- 81 +- 31 +- 174 +- 43 +- 168 +- 181 +- 167 +- 141 +- 101 +- 24 +- 142 +- 18 +- 59 +- 133 +- 3 +- 182 +- 69 +- 171 +- 95 +- 1 +- 132 +- 191 +- 60 +- 13 +- 43 +- 116 +- 58 +- 162 +- 192 +- 158 +- 6 +- 12 +- 145 +- 30 +- 148 +- 21 +- 92 +- 83 +- 40 +- 183 +- 128 +- 22 +- 144 +- 62 +- 83 +- 182 +- 125 +- 121 +- 157 +- 69 +- 72 +- 174 +- 145 +- 53 +- 27 +- 127 +- 189 +- 94 +- 102 +- 61 +- 140 +- 31 +- 41 +- 93 +- 122 +- 178 +- 143 +- 87 +- 133 +- 133 +- 149 +- 132 +- 198 +- 106 +- 3 +- 115 +- 128 +- 113 +- 20 +- 92 +- 6 +- 91 +- 149 +- 85 +- 62 +- 171 +- 145 +- 129 +- 111 +- 29 +- 99 +- 20 +- 175 +- 32 +- 55 +- 53 +- 114 +- 132 +- 177 +- 184 +- 79 +- 27 +- 70 +- 24 +- 116 +- 63 +- 38 +- 48 +- 73 +- 152 +- 112 +- 121 +- 194 +- 166 +- 20 +- 125 +- 158 +- 78 +- 132 +- 54 +- 53 +- 51 +- 135 +- 50 +- 48 +- 182 +- 16 +- 132 +- 158 +- 150 +- 134 +- 170 +- 38 +- 121 +- 186 +- 40 +- 175 +- 101 +- 12 +- 187 +- 106 +- 42 +- 125 +- 79 +- 80 +- 45 +- 5 +- 35 +- 192 +- 37 +- 101 +- 37 +- 7 +- 189 +- 157 +- 133 +- 101 +- 78 +- 26 +- 147 +- 14 +- 71 +- 88 +- 87 +- 88 +- 15 +- 132 +- 68 +- 186 +- 5 +- 82 +- 70 +- 61 +- 189 +- 153 +- 115 +- 161 +- 144 +- 28 +- 39 +- 86 +- 191 +- 57 +- 193 +- 119 +- 5 +- 14 +- 1 +- 145 +- 90 +- 110 +- 94 +- 35 +- 73 +- 177 +- 3 +- 125 +- 107 +- 26 +- 57 +- 94 +- 74 +- 160 +- 65 +- 110 +- 134 +- 106 +- 65 +- 115 +- 12 +- 159 +- 12 +- 73 +- 150 +- 115 +- 95 +- 149 +- 27 +- 110 +- 193 +- 48 +- 58 +- 138 +- 94 +- 112 +- 175 +- 18 +- 14 +- 119 +- 66 +- 98 +- 97 +- 21 +- 158 +- 187 +- 124 +- 101 +- 181 +- 99 +- 56 +- 183 +- 99 +- 20 +- 73 +- 43 +- 97 +- 58 +- 171 +- 94 +- 103 +- 96 +- 184 +- 174 +- 198 +- 10 +- 37 +- 91 +- 147 +- 33 +- 125 +- 24 +- 156 +- 163 +- 26 +- 53 +- 141 +- 67 +- 189 +- 120 +- 5 +- 153 +- 196 +- 192 +- 108 +- 105 +- 56 +- 175 +- 4 +- 186 +- 198 +- 26 +- 43 +- 196 +- 49 +- 127 +- 45 +- 13 +- 58 +- 100 +- 103 +- 61 +- 154 +- 153 +- 151 +- 9 +- 170 +- 13 +- 193 +- 109 +- 95 +- 0 +- 193 +- 73 +- 3 +- 63 +- 82 +- 198 +- 37 +- 7 +- 107 +- 115 +- 95 +- 152 +- 61 +- 198 +- 49 +- 68 +- 133 +- 50 +- 138 +- 97 +- 185 +- 171 +- 90 +- 94 +- 168 +- 182 +- 95 +- 77 +- 57 +- 189 +- 102 +- 16 +- 26 +- 36 +- 133 +- 93 +- 90 +- 72 +- 124 +- 171 +- 112 +- 132 +- 29 +- 14 +- 28 +- 5 +- 125 +- 146 +- 0 +- 183 +- 81 +- 0 +- 173 +- 60 +- 135 +- 76 +- 130 +- 102 +- 49 +- 93 +- 170 +- 188 +- 128 +- 186 +- 46 +- 63 +- 61 +- 30 +- 159 +- 28 +- 21 +- 151 +- 188 +- 40 +- 33 +- 192 +- 64 +- 113 +- 23 +- 85 +- 3 +- 125 +- 162 +- 3 +- 48 +- 158 +- 42 +- 15 +- 116 +- 147 +- 51 +- 65 +- 49 +- 77 +- 48 +- 99 +- 78 +- 194 +- 37 +- 144 +- 40 +- 78 +- 157 +- 66 +- 77 +- 52 +- 110 +- 82 +- 76 +- 20 +- 39 +- 198 +- 170 +- 67 +- 192 +- 113 +- 158 +- 168 +- 6 +- 156 +- 169 +- 49 +- 27 +- 89 +- 97 +- 185 +- 171 +- 31 +- 20 +- 4 +- 58 +- 17 +- 41 +- 30 +- 82 +- 192 +- 181 +- 41 +- 7 +- 101 +- 133 +- 192 +- 175 +- 35 +- 102 +- 159 +- 65 +- 70 +- 3 +- 199 +- 75 +- 21 +- 183 +- 186 +- 39 +- 156 +- 58 +- 166 +- 43 +- 165 +- 77 +- 0 +- 99 +- 53 +- 148 +- 11 +- 114 +- 68 +- 145 +- 84 +- 99 +- 7 +- 153 +- 8 +- 2 +- 142 +- 158 +- 21 +- 119 +- 97 +- 20 +- 56 +- 189 +- 73 +- 137 +- 125 +- 181 +- 173 +- 194 +- 132 +- 196 +- 190 +- 192 +- 85 +- 78 +- 69 +- 135 +- 105 +- 185 +- 148 +- 188 +- 88 +- 43 +- 32 +- 171 +- 94 +- 176 +- 38 +- 112 +- 53 +- 71 +- 58 +- 82 +- 78 +- 3 +- 35 +- 13 +- 194 +- 83 +- 138 +- 101 +- 90 +- 144 +- 30 +- 1 +- 117 +- 107 +- 124 +- 139 +- 57 +- 162 +- 17 +- 106 +- 133 +- 119 +- 30 +- 60 +- 114 +- 77 +- 142 +- 156 +- 37 +- 102 +- 171 +- 6 +- 99 +- 83 +- 44 +- 37 +- 2 +- 124 +- 168 +- 136 +- 33 +- 189 +- 19 +- 135 +- 17 +- 30 +- 194 +- 77 +- 5 +- 101 +- 100 +- 73 +- 65 +- 153 +- 94 +- 152 +- 20 +- 186 +- 122 +- 120 +- 168 +- 47 +- 15 +- 180 +- 23 +- 53 +- 153 +- 0 +- 50 +- 153 +- 110 +- 117 +- 197 +- 13 +- 145 +- 91 +- 62 +- 133 +- 145 +- 121 +- 73 +- 65 +- 106 +- 41 +- 179 +- 92 +- 128 +- 72 +- 158 +- 70 +- 109 +- 174 +- 184 +- 82 +- 67 +- 27 +- 77 +- 98 +- 82 +- 137 +- 20 +- 28 +- 49 +- 53 +- 19 +- 179 +- 122 +- 147 +- 163 +- 65 +- 58 +- 18 +- 13 +- 149 +- 67 +- 13 +- 87 +- 112 +- 37 +- 82 +- 49 +- 59 +- 158 +- 100 +- 168 +- 122 +- 138 +- 74 +- 20 +- 178 +- 26 +- 67 +- 35 +- 74 +- 195 +- 6 +- 153 +- 130 +- 32 +- 132 +- 28 +- 157 +- 99 +- 50 +- 78 +- 101 +- 133 +- 37 +- 13 +- 150 +- 149 +- 178 +- 35 +- 133 +- 30 +- 145 +- 28 +- 198 +- 192 +- 20 +- 14 +- 69 +- 110 +- 186 +- 142 +- 69 +- 10 +- 194 +- 27 +- 94 +- 99 +- 36 +- 91 +- 61 +- 164 +- 48 +- 133 +- 116 +- 170 +- 33 +- 86 +- 94 +- 97 +- 61 +- 97 +- 78 +- 52 +- 51 +- 133 +- 73 +- 106 +- 152 +- 39 +- 143 +- 198 +- 188 +- 77 +- 100 +- 3 +- 99 +- 73 +- 132 +- 44 +- 32 +- 59 +- 35 +- 194 +- 114 +- 6 +- 13 +- 133 +- 44 +- 99 +- 13 +- 45 +- 14 +- 109 +- 79 +- 192 +- 83 +- 70 +- 58 +- 13 +- 73 +- 62 +- 179 +- 172 +- 33 +- 69 +- 63 +- 35 +- 110 +- 107 +- 29 +- 21 +- 11 +- 33 +- 156 +- 13 +- 99 +- 98 +- 93 +- 145 +- 164 +- 138 +- 102 +- 0 +- 125 +- 15 +- 63 +- 109 +- 82 +- 113 +- 125 +- 100 +- 107 +- 117 +- 158 +- 152 +- 135 +- 140 +- 103 +- 171 +- 172 +- 198 +- 59 +- 169 +- 185 +- 186 +- 14 +- 190 +- 73 +- 190 +- 38 +- 40 +- 197 +- 129 +- 150 +- 35 +- 95 +- 142 +- 164 +- 0 +- 101 +- 47 +- 38 +- 8 +- 152 +- 115 +- 61 +- 183 +- 19 +- 113 +- 0 +- 114 +- 85 +- 26 +- 100 +- 21 +- 50 +- 78 +- 21 +- 24 +- 103 +- 136 +- 98 +- 26 +- 94 +- 74 +- 13 +- 112 +- 157 +- 185 +- 145 +- 38 +- 64 +- 54 +- 1 +- 108 +- 6 +- 74 +- 7 +- 91 +- 147 +- 66 +- 76 +- 149 +- 192 +- 142 +- 52 +- 137 +- 89 +- 195 +- 149 +- 86 +- 4 +- 17 +- 101 +- 67 +- 28 +- 157 +- 165 +- 109 +- 41 +- 38 +- 87 +- 14 +- 171 +- 119 +- 149 +- 156 +- 39 +- 99 +- 13 +- 38 +- 187 +- 106 +- 17 +- 33 +- 94 +- 34 +- 138 +- 179 +- 26 +- 63 +- 8 +- 15 +- 64 +- 150 +- 136 +- 24 +- 41 +- 78 +- 38 +- 22 +- 154 +- 57 +- 50 +- 112 +- 53 +- 101 +- 153 +- 35 +- 82 +- 102 +- 3 +- 8 +- 149 +- 113 +- 64 +- 132 +- 14 +- 56 +- 192 +- 56 +- 94 +- 157 +- 49 +- 10 +- 157 +- 33 +- 107 +- 122 +- 134 +- 122 +- 197 +- 14 +- 11 +- 188 +- 94 +- 22 +- 36 +- 131 +- 186 +- 12 +- 101 +- 53 +- 52 +- 119 +- 78 +- 60 +- 140 +- 59 +- 100 +- 26 +- 171 +- 105 +- 20 +- 163 +- 57 +- 14 +- 122 +- 198 +- 3 +- 160 +- 143 +- 71 +- 82 +- 44 +- 38 +- 170 +- 132 +- 99 +- 101 +- 158 +- 51 +- 145 +- 99 +- 14 +- 99 +- 149 +- 64 +- 114 +- 99 +- 167 +- 53 +- 59 +- 56 +- 43 +- 173 +- 171 +- 132 +- 31 +- 153 +- 91 +- 73 +- 73 +- 97 +- 161 +- 163 +- 17 +- 72 +- 107 +- 156 +- 94 +- 114 +- 73 +- 122 +- 62 +- 15 +- 158 +- 122 +- 73 +- 9 +- 0 +- 115 +- 129 +- 187 +- 58 +- 16 +- 192 +- 158 +- 61 +- 141 +- 153 +- 53 +- 97 +- 129 +- 102 +- 4 +- 122 +- 153 +- 142 +- 57 +- 95 +- 163 +- 112 +- 159 +- 14 +- 96 +- 168 +- 58 +- 63 +- 1 +- 171 +- 28 +- 76 +- 15 +- 187 +- 90 +- 38 +- 125 +- 5 +- 163 +- 70 +- 65 +- 77 +- 115 +- 103 +- 97 +- 148 +- 68 +- 13 +- 125 +- 11 +- 32 +- 132 +- 136 +- 191 +- 175 +- 70 +- 41 +- 195 +- 18 +- 77 +- 0 +- 65 +- 90 +- 36 +- 98 +- 78 +- 132 +- 87 +- 132 +- 49 +- 85 +- 78 +- 39 +- 38 +- 49 +- 174 +- 171 +- 96 +- 112 +- 61 +- 113 +- 64 +- 163 +- 144 +- 187 +- 25 +- 101 +- 74 +- 37 +- 168 +- 197 +- 42 +- 125 +- 29 +- 23 +- 26 +- 35 +- 14 +- 3 +- 177 +- 33 +- 157 +- 99 +- 16 +- 115 +- 125 +- 192 +- 86 +- 14 +- 0 +- 197 +- 186 +- 131 +- 96 +- 75 +- 120 +- 162 +- 107 +- 53 +- 100 +- 24 +- 108 +- 98 +- 58 +- 169 +- 38 +- 184 +- 168 +- 7 +- 38 +- 87 +- 113 +- 135 +- 159 +- 74 +- 104 +- 74 +- 0 +- 132 +- 20 +- 119 +- 63 +- 116 +- 20 +- 63 +- 54 +- 92 +- 99 +- 114 +- 168 +- 119 +- 103 +- 158 +- 92 +- 108 +- 153 +- 14 +- 27 +- 183 +- 176 +- 13 +- 18 +- 14 +- 190 +- 132 +- 112 +- 24 +- 170 +- 93 +- 82 +- 179 +- 79 +- 91 +- 179 +- 44 +- 164 +- 52 +- 35 +- 99 +- 77 +- 105 +- 128 +- 47 +- 137 +- 193 +- 101 +- 32 +- 119 +- 57 +- 179 +- 39 +- 48 +- 116 +- 176 +- 113 +- 102 +- 104 +- 132 +- 158 +- 82 +- 48 +- 181 +- 41 +- 175 +- 128 +- 96 +- 79 +- 132 +- 60 +- 0 +- 195 +- 66 +- 113 +- 194 +- 172 +- 46 +- 113 +- 88 +- 78 +- 120 +- 82 +- 90 +- 107 +- 152 +- 148 +- 175 +- 14 +- 78 +- 107 +- 14 +- 95 +- 114 +- 50 +- 81 +- 69 +- 198 +- 61 +- 134 +- 14 +- 187 +- 71 +- 141 +- 48 +- 131 +- 113 +- 168 +- 164 +- 68 +- 30 +- 123 +- 140 +- 57 +- 148 +- 154 +- 135 +- 153 +- 77 +- 171 +- 76 +- 27 +- 82 +- 26 +- 103 +- 190 +- 82 +- 194 +- 46 +- 26 +- 118 +- 75 +- 124 +- 186 +- 67 +- 142 +- 18 +- 186 +- 72 +- 58 +- 61 +- 60 +- 76 +- 131 +- 99 +- 60 +- 144 +- 96 +- 71 +- 152 +- 197 +- 112 +- 61 +- 54 +- 60 +- 187 +- 4 +- 62 +- 176 +- 140 +- 65 +- 156 +- 164 +- 53 +- 153 +- 31 +- 196 +- 33 +- 75 +- 162 +- 5 +- 113 +- 132 +- 120 +- 39 +- 142 +- 100 +- 132 +- 1 +- 93 +- 142 +- 14 +- 189 +- 55 +- 142 +- 113 +- 164 +- 49 +- 122 +- 68 +- 76 +- 116 +- 33 +- 115 +- 60 +- 99 +- 101 +- 38 +- 18 +- 37 +- 167 +- 63 +- 14 +- 5 +- 132 +- 171 +- 107 +- 109 +- 20 +- 64 +- 38 +- 126 +- 53 +- 149 +- 24 +- 59 +- 117 +- 128 +- 135 +- 123 +- 53 +- 141 +- 114 +- 159 +- 78 +- 99 +- 84 +- 2 +- 67 +- 29 +- 103 +- 72 +- 65 +- 53 +- 30 +- 68 +- 193 +- 2 +- 133 +- 4 +- 25 +- 98 +- 187 +- 101 +- 85 +- 1 +- 155 +- 65 +- 149 +- 60 +- 8 +- 142 +- 87 +- 136 +- 33 +- 57 +- 139 +- 153 +- 74 +- 191 +- 130 +- 114 +- 122 +- 78 +- 0 +- 132 +- 79 +- 122 +- 159 +- 82 +- 145 +- 5 +- 190 +- 159 +- 190 +- 93 +- 36 +- 67 +- 191 +- 72 +- 110 +- 176 +- 161 +- 35 +- 172 +- 189 +- 110 +- 84 +- 172 +- 36 +- 153 +- 79 +- 53 +- 171 +- 122 +- 94 +- 101 +- 78 +- 71 +- 1 +- 113 +- 100 +- 36 +- 65 +- 24 +- 53 +- 150 +- 11 +- 112 +- 35 +- 20 +- 135 +- 175 +- 139 +- 14 +- 53 +- 88 +- 40 +- 13 +- 75 +- 76 +- 150 +- 83 +- 33 +- 3 +- 158 +- 53 +- 125 +- 115 +- 168 +- 120 +- 174 +- 182 +- 94 +- 108 +- 158 +- 52 +- 95 +- 111 +- 179 +- 31 +- 90 +- 141 +- 144 +- 73 +- 75 +- 99 +- 140 +- 14 +- 97 +- 102 +- 24 +- 14 +- 99 +- 101 +- 82 +- 28 +- 182 +- 31 +- 26 +- 149 +- 101 +- 113 +- 2 +- 3 +- 117 +- 171 +- 114 +- 0 +- 32 +- 38 +- 72 +- 24 +- 100 +- 120 +- 96 +- 80 +- 93 +- 87 +- 158 +- 171 +- 43 +- 133 +- 195 +- 95 +- 168 +- 182 +- 152 +- 77 +- 156 +- 113 +- 98 +- 83 +- 106 +- 140 +- 73 +- 126 +- 189 +- 91 +- 148 +- 149 +- 9 +- 22 +- 43 +- 153 +- 179 +- 194 +- 121 +- 148 +- 187 +- 192 +- 14 +- 135 +- 30 +- 97 +- 94 +- 46 +- 96 +- 107 +- 102 +- 94 +- 37 +- 196 +- 108 +- 160 +- 182 +- 61 +- 137 +- 11 +- 53 +- 8 +- 158 +- 129 +- 53 +- 9 +- 14 +- 20 +- 70 +- 15 +- 48 +- 137 +- 39 +- 24 +- 96 +- 129 +- 14 +- 36 +- 162 +- 16 +- 41 +- 101 +- 80 +- 192 +- 1 +- 91 +- 78 +- 63 +- 112 +- 183 +- 47 +- 182 +- 61 +- 66 +- 47 +- 98 +- 142 +- 102 +- 112 +- 142 +- 187 +- 119 +- 44 +- 51 +- 57 +- 111 +- 163 +- 61 +- 62 +- 101 +- 69 +- 174 +- 65 +- 149 +- 19 +- 127 +- 76 +- 74 +- 185 +- 15 +- 187 +- 114 +- 172 +- 79 +- 114 +- 117 +- 97 +- 94 +- 197 +- 147 +- 90 +- 173 +- 83 +- 115 +- 32 +- 54 +- 55 +- 14 +- 0 +- 140 +- 158 +- 28 +- 14 +- 101 +- 11 +- 182 +- 69 +- 92 +- 124 +- 138 +- 152 +- 128 +- 109 +- 132 +- 168 +- 3 +- 159 +- 100 +- 194 +- 40 +- 36 +- 49 +- 28 +- 163 +- 91 +- 0 +- 186 +- 48 +- 148 +- 152 +- 199 +- 148 +- 77 +- 174 +- 166 +- 79 +- 73 +- 196 +- 98 +- 4 +- 52 +- 179 +- 198 +- 187 +- 38 +- 171 +- 5 +- 25 +- 159 +- 68 +- 192 +- 73 +- 114 +- 90 +- 192 +- 75 +- 127 +- 145 +- 133 +- 191 +- 102 +- 164 +- 26 +- 169 +- 57 +- 156 +- 64 +- 62 +- 141 +- 73 +- 180 +- 113 +- 138 +- 188 +- 151 +- 18 +- 2 +- 173 +- 171 +- 90 +- 30 +- 154 +- 56 +- 149 +- 135 +- 100 +- 63 +- 99 +- 154 +- 146 +- 114 +- 156 +- 47 +- 132 +- 152 +- 187 +- 78 +- 20 +- 187 +- 190 +- 51 +- 83 +- 94 +- 37 +- 3 +- 156 +- 142 +- 75 +- 31 +- 113 +- 15 +- 32 +- 38 +- 140 +- 102 +- 60 +- 158 +- 79 +- 181 +- 65 +- 20 +- 14 +- 149 +- 72 +- 124 +- 119 +- 184 +- 112 +- 48 +- 175 +- 140 +- 158 +- 198 +- 129 +- 30 +- 112 +- 36 +- 77 +- 174 +- 156 +- 67 +- 151 +- 50 +- 82 +- 36 +- 53 +- 6 +- 101 +- 38 +- 76 +- 32 +- 191 +- 149 +- 3 +- 143 +- 110 +- 74 +- 151 +- 1 +- 41 +- 27 +- 99 +- 82 +- 159 +- 107 +- 127 +- 113 +- 113 +- 125 +- 176 +- 133 +- 109 +- 170 +- 49 +- 170 +- 101 +- 62 +- 62 +- 179 +- 145 +- 62 +- 183 +- 187 +- 20 +- 86 +- 99 +- 99 +- 74 +- 72 +- 63 +- 150 +- 142 +- 8 +- 94 +- 148 +- 156 +- 6 +- 99 +- 73 +- 96 +- 38 +- 158 +- 169 +- 148 +- 120 +- 68 +- 169 +- 170 +- 190 +- 182 +- 176 +- 171 +- 61 +- 102 +- 49 +- 14 +- 160 +- 158 +- 154 +- 96 +- 35 +- 21 +- 40 +- 66 +- 4 +- 151 +- 171 +- 105 +- 187 +- 159 +- 59 +- 35 +- 83 +- 0 +- 78 +- 53 +- 159 +- 79 +- 33 +- 142 +- 5 +- 190 +- 160 +- 162 +- 187 +- 181 +- 81 +- 175 +- 160 +- 61 +- 86 +- 37 +- 94 +- 113 +- 60 +- 101 +- 114 +- 157 +- 75 +- 114 +- 87 +- 31 +- 28 +- 27 +- 158 +- 63 +- 86 +- 116 +- 22 +- 84 +- 11 +- 113 +- 62 +- 35 +- 14 +- 75 +- 69 +- 193 +- 113 +- 140 +- 90 +- 132 +- 113 +- 37 +- 58 +- 113 +- 153 +- 113 +- 0 +- 92 +- 107 +- 133 +- 114 +- 20 +- 103 +- 152 +- 194 +- 92 +- 64 +- 16 +- 64 +- 106 +- 98 +- 69 +- 113 +- 96 +- 145 +- 112 +- 69 +- 28 +- 44 +- 99 +- 151 +- 165 +- 99 +- 96 +- 181 +- 156 +- 151 +- 159 +- 18 +- 49 +- 72 +- 140 +- 84 +- 4 +- 87 +- 197 +- 0 +- 28 +- 187 +- 20 +- 144 +- 53 +- 142 +- 190 +- 63 +- 67 +- 103 +- 95 +- 32 +- 181 +- 9 +- 93 +- 152 +- 53 +- 153 +- 116 +- 183 +- 82 +- 61 +- 152 +- 141 +- 82 +- 3 +- 20 +- 32 +- 112 +- 85 +- 102 +- 59 +- 35 +- 44 +- 11 +- 79 +- 122 +- 111 +- 131 +- 186 +- 130 +- 86 +- 182 +- 189 +- 14 +- 33 +- 62 +- 186 +- 195 +- 30 +- 68 +- 156 +- 19 +- 123 +- 132 +- 118 +- 149 +- 186 +- 193 +- 177 +- 180 +- 138 +- 99 +- 34 +- 106 +- 191 +- 27 +- 154 +- 194 +- 19 +- 175 +- 119 +- 157 +- 13 +- 158 +- 177 +- 21 +- 185 +- 162 +- 106 +- 97 +- 138 +- 106 +- 180 +- 168 +- 0 +- 86 +- 119 +- 105 +- 42 +- 182 +- 82 +- 19 +- 10 +- 153 +- 27 +- 34 +- 27 +- 46 +- 118 +- 102 +- 185 +- 92 +- 114 +- 93 +- 134 +- 114 +- 187 +- 112 +- 154 +- 154 +- 133 +- 191 +- 162 +- 120 +- 129 +- 74 +- 29 +- 52 +- 108 +- 140 +- 98 +- 24 +- 13 +- 69 +- 24 +- 36 +- 93 +- 53 +- 98 +- 61 +- 168 +- 160 +- 100 +- 112 +- 85 +- 90 +- 35 +- 65 +- 11 +- 113 +- 95 +- 84 +- 187 +- 189 +- 135 +- 111 +- 120 +- 32 +- 8 +- 153 +- 54 +- 21 +- 62 +- 137 +- 180 +- 21 +- 94 +- 63 +- 30 +- 36 +- 81 +- 94 +- 164 +- 36 +- 103 +- 184 +- 101 +- 121 +- 176 +- 113 +- 46 +- 94 +- 153 +- 81 +- 150 +- 54 +- 64 +- 161 +- 116 +- 49 +- 14 +- 132 +- 171 +- 113 +- 61 +- 148 +- 78 +- 66 +- 40 +- 185 +- 156 +- 141 +- 125 +- 60 +- 98 +- 67 +- 134 +- 101 +- 195 +- 95 +- 184 +- 121 +- 114 +- 32 +- 132 +- 9 +- 89 +- 91 +- 120 +- 153 +- 142 +- 74 +- 170 +- 44 +- 66 +- 127 +- 180 +- 52 +- 69 +- 0 +- 82 +- 55 +- 90 +- 96 +- 153 +- 72 +- 15 +- 190 +- 49 +- 100 +- 49 +- 60 +- 152 +- 123 +- 141 +- 169 +- 64 +- 132 +- 80 +- 16 +- 198 +- 132 +- 179 +- 194 +- 186 +- 133 +- 94 +- 193 +- 21 +- 74 +- 75 +- 174 +- 13 +- 110 +- 21 +- 43 +- 100 +- 153 +- 196 +- 71 +- 18 +- 164 +- 41 +- 163 +- 1 +- 19 +- 99 +- 95 +- 116 +- 113 +- 78 +- 192 +- 93 +- 137 +- 32 +- 73 +- 43 +- 153 +- 198 +- 15 +- 43 +- 99 +- 30 +- 101 +- 147 +- 109 +- 140 +- 112 +- 59 +- 61 +- 103 +- 109 +- 113 +- 25 +- 95 +- 8 +- 134 +- 49 +- 37 +- 89 +- 87 +- 81 +- 63 +- 53 +- 32 +- 60 +- 68 +- 153 +- 73 +- 122 +- 199 +- 113 +- 20 +- 168 +- 43 +- 194 +- 94 +- 187 +- 73 +- 50 +- 112 +- 47 +- 164 +- 180 +- 150 +- 126 +- 192 +- 173 +- 187 +- 63 +- 194 +- 184 +- 109 +- 122 +- 126 +- 102 +- 32 +- 147 +- 35 +- 50 +- 120 +- 86 +- 38 +- 45 +- 173 +- 177 +- 194 +- 191 +- 162 +- 32 +- 186 +- 87 +- 14 +- 73 +- 24 +- 57 +- 141 +- 78 +- 90 +- 120 +- 133 +- 102 +- 177 +- 5 +- 102 +- 3 +- 184 +- 154 +- 71 +- 24 +- 78 +- 184 +- 140 +- 72 +- 54 +- 152 +- 50 +- 75 +- 91 +- 153 +- 17 +- 91 +- 146 +- 175 +- 108 +- 189 +- 19 +- 177 +- 61 +- 82 +- 132 +- 20 +- 186 +- 133 +- 124 +- 3 +- 149 +- 187 +- 148 +- 105 +- 133 +- 73 +- 144 +- 44 +- 27 +- 104 +- 38 +- 14 +- 150 +- 14 +- 141 +- 60 +- 61 +- 115 +- 138 +- 56 +- 81 +- 112 +- 76 +- 163 +- 58 +- 16 +- 153 +- 102 +- 136 +- 168 +- 173 +- 171 +- 195 +- 124 +- 14 +- 107 +- 70 +- 148 +- 97 +- 72 +- 160 +- 20 +- 186 +- 151 +- 31 +- 73 +- 9 +- 39 +- 53 +- 127 +- 142 +- 190 +- 113 +- 27 +- 58 +- 192 +- 187 +- 160 +- 144 +- 132 +- 177 +- 72 +- 95 +- 175 +- 137 +- 122 +- 0 +- 74 +- 64 +- 63 +- 146 +- 162 +- 65 +- 163 +- 36 +- 19 +- 179 +- 114 +- 113 +- 183 +- 198 +- 11 +- 55 +- 108 +- 182 +- 1 +- 47 +- 138 +- 81 +- 74 +- 82 +- 61 +- 97 +- 18 +- 94 +- 40 +- 193 +- 89 +- 61 +- 171 +- 81 +- 75 +- 117 +- 27 +- 96 +- 197 +- 116 +- 94 +- 52 +- 44 +- 120 +- 177 +- 183 +- 45 +- 163 +- 27 +- 167 +- 153 +- 50 +- 198 +- 107 +- 89 +- 69 +- 29 +- 136 +- 180 +- 110 +- 132 +- 149 +- 106 +- 32 +- 4 +- 40 +- 144 +- 19 +- 116 +- 5 +- 41 +- 36 +- 38 +- 90 +- 101 +- 142 +- 36 +- 33 +- 180 +- 159 +- 37 +- 137 +- 9 +- 13 +- 78 +- 160 +- 151 +- 197 +- 115 +- 168 +- 20 +- 114 +- 132 +- 28 +- 33 +- 188 +- 1 +- 10 +- 142 +- 36 +- 131 +- 186 +- 67 +- 145 +- 56 +- 132 +- 122 +- 33 +- 96 +- 15 +- 20 +- 119 +- 53 +- 0 +- 84 +- 18 +- 133 +- 70 +- 125 +- 177 +- 135 +- 64 +- 134 +- 28 +- 143 +- 124 +- 82 +- 33 +- 18 +- 158 +- 199 +- 164 +- 107 +- 132 +- 23 +- 106 +- 36 +- 118 +- 92 +- 127 +- 75 +- 100 +- 142 +- 49 +- 44 +- 94 +- 134 +- 157 +- 171 +- 130 +- 171 +- 116 +- 112 +- 26 +- 187 +- 113 +- 133 +- 186 +- 108 +- 103 +- 175 +- 28 +- 11 +- 79 +- 174 +- 78 +- 71 +- 154 +- 149 +- 105 +- 122 +- 165 +- 91 +- 72 +- 72 +- 181 +- 0 +- 83 +- 113 +- 133 +- 96 +- 163 +- 114 +- 160 +- 19 +- 49 +- 11 +- 119 +- 114 +- 199 +- 184 +- 1 +- 97 +- 41 +- 56 +- 65 +- 90 +- 134 +- 33 +- 150 +- 120 +- 32 +- 185 +- 47 +- 82 +- 169 +- 170 +- 153 +- 171 +- 173 +- 192 +- 14 +- 33 +- 156 +- 138 +- 138 +- 80 +- 35 +- 97 +- 26 +- 144 +- 51 +- 136 +- 72 +- 137 +- 108 +- 149 +- 19 +- 103 +- 186 +- 184 +- 150 +- 130 +- 153 +- 37 +- 35 +- 186 +- 182 +- 96 +- 23 +- 154 +- 131 +- 41 +- 82 +- 59 +- 128 +- 107 +- 97 +- 39 +- 91 +- 171 +- 11 +- 64 +- 44 +- 142 +- 100 +- 101 +- 111 +- 73 +- 149 +- 108 +- 64 +- 26 +- 81 +- 20 +- 40 +- 178 +- 187 +- 147 +- 61 +- 198 +- 73 +- 73 +- 87 +- 28 +- 16 +- 23 +- 193 +- 151 +- 1 +- 100 +- 108 +- 141 +- 129 +- 15 +- 67 +- 44 +- 94 +- 90 +- 63 +- 111 +- 142 +- 192 +- 87 +- 49 +- 82 +- 63 +- 59 +- 140 +- 163 +- 90 +- 171 +- 35 +- 109 +- 178 +- 42 +- 147 +- 128 +- 137 +- 122 +- 64 +- 171 +- 15 +- 122 +- 113 +- 18 +- 93 +- 154 +- 170 +- 67 +- 115 +- 77 +- 90 +- 168 +- 148 +- 16 +- 152 +- 125 +- 174 +- 79 +- 113 +- 48 +- 53 +- 95 +- 35 +- 60 +- 149 +- 20 +- 147 +- 140 +- 10 +- 50 +- 151 +- 175 +- 21 +- 193 +- 28 +- 145 +- 66 +- 171 +- 133 +- 90 +- 127 +- 186 +- 181 +- 124 +- 44 +- 102 +- 141 +- 92 +- 191 +- 158 +- 88 +- 69 +- 58 +- 71 +- 192 +- 153 +- 107 +- 42 +- 151 +- 61 +- 74 +- 153 +- 100 +- 186 +- 106 +- 21 +- 166 +- 125 +- 175 +- 14 +- 66 +- 27 +- 26 +- 182 +- 174 +- 186 +- 166 +- 0 +- 14 +- 26 +- 153 +- 151 +- 3 +- 82 +- 4 +- 93 +- 133 +- 159 +- 68 +- 130 +- 50 +- 195 +- 73 +- 14 +- 157 +- 149 +- 120 +- 43 +- 35 +- 198 +- 98 +- 100 +- 95 +- 75 +- 99 +- 133 +- 36 +- 131 +- 18 +- 145 +- 91 +- 20 +- 192 +- 51 +- 118 +- 153 +- 126 +- 77 +- 192 +- 98 +- 144 +- 61 +- 115 +- 44 +- 0 +- 133 +- 113 +- 27 +- 1 +- 82 +- 30 +- 120 +- 57 +- 20 +- 139 +- 125 +- 76 +- 146 +- 37 +- 130 +- 135 +- 5 +- 120 +- 22 +- 28 +- 149 +- 115 +- 67 +- 192 +- 194 +- 87 +- 123 +- 146 +- 185 +- 156 +- 30 +- 95 +- 142 +- 56 +- 125 +- 38 +- 66 +- 35 +- 142 +- 152 +- 72 +- 123 +- 144 +- 135 +- 18 +- 79 +- 57 +- 27 +- 97 +- 149 +- 38 +- 69 +- 179 +- 99 +- 112 +- 109 +- 53 +- 97 +- 51 +- 174 +- 157 +- 106 +- 162 +- 58 +- 167 +- 11 +- 3 +- 91 +- 48 +- 43 +- 24 +- 38 +- 133 +- 7 +- 160 +- 2 +- 94 +- 126 +- 55 +- 96 +- 165 +- 150 +- 86 +- 22 +- 112 +- 20 +- 112 +- 154 +- 113 +- 122 +- 160 +- 78 +- 91 +- 107 +- 78 +- 113 +- 31 +- 192 +- 17 +- 29 +- 166 +- 116 +- 187 +- 91 +- 14 +- 11 +- 119 +- 72 +- 121 +- 9 +- 44 +- 133 +- 57 +- 61 +- 3 +- 181 +- 99 +- 28 +- 76 +- 20 +- 49 +- 3 +- 125 +- 70 +- 158 +- 181 +- 128 +- 70 +- 78 +- 118 +- 75 +- 60 +- 100 +- 138 +- 139 +- 33 +- 81 +- 18 +- 102 +- 149 +- 35 +- 184 +- 152 +- 192 +- 101 +- 19 +- 32 +- 90 +- 45 +- 62 +- 192 +- 54 +- 122 +- 152 +- 171 +- 3 +- 153 +- 50 +- 21 +- 6 +- 111 +- 0 +- 159 +- 34 +- 186 +- 44 +- 162 +- 115 +- 69 +- 20 +- 99 +- 82 +- 73 +- 132 +- 74 +- 119 +- 172 +- 101 +- 90 +- 63 +- 11 +- 57 +- 191 +- 174 +- 153 +- 14 +- 72 +- 32 +- 90 +- 97 +- 129 +- 70 +- 113 +- 149 +- 90 +- 97 +- 151 +- 163 +- 70 +- 159 +- 12 +- 35 +- 64 +- 128 +- 129 +- 51 +- 39 +- 46 +- 97 +- 159 +- 182 +- 13 +- 44 +- 147 +- 20 +- 4 +- 91 +- 51 +- 65 +- 37 +- 192 +- 121 +- 44 +- 170 +- 28 +- 110 +- 163 +- 20 +- 32 +- 76 +- 180 +- 6 +- 109 +- 120 +- 174 +- 189 +- 168 +- 156 +- 3 +- 197 +- 113 +- 119 +- 132 +- 16 +- 58 +- 159 +- 110 +- 78 +- 158 +- 36 +- 21 +- 192 +- 173 +- 159 +- 102 +- 93 +- 10 +- 115 +- 171 +- 152 +- 161 +- 30 +- 58 +- 174 +- 75 +- 102 +- 83 +- 113 +- 85 +- 84 +- 173 +- 60 +- 154 +- 37 +- 159 +- 84 +- 9 +- 184 +- 0 +- 174 +- 174 +- 174 +- 172 +- 96 +- 35 +- 192 +- 159 +- 10 +- 115 +- 92 +- 125 +- 15 +- 107 +- 53 +- 160 +- 134 +- 100 +- 99 +- 144 +- 15 +- 173 +- 58 +- 109 +- 7 +- 58 +- 60 +- 170 +- 36 +- 83 +- 46 +- 142 +- 64 +- 91 +- 76 +- 98 +- 133 +- 120 +- 132 +- 98 +- 36 +- 194 +- 13 +- 162 +- 151 +- 53 +- 156 +- 51 +- 46 +- 36 +- 132 +- 102 +- 50 +- 3 +- 27 +- 98 +- 198 +- 92 +- 28 +- 95 +- 142 +- 178 +- 67 +- 78 +- 151 +- 174 +- 191 +- 14 +- 54 +- 154 +- 66 +- 72 +- 95 +- 192 +- 99 +- 57 +- 28 +- 153 +- 35 +- 35 +- 141 +- 57 +- 69 +- 20 +- 73 +- 153 +- 2 +- 113 +- 192 +- 119 +- 164 +- 164 +- 141 +- 26 +- 23 +- 65 +- 46 +- 121 +- 54 +- 150 +- 149 +- 198 +- 106 +- 167 +- 122 +- 68 +- 3 +- 62 +- 58 +- 72 +- 185 +- 192 +- 138 +- 40 +- 62 +- 32 +- 44 +- 108 +- 140 +- 145 +- 171 +- 12 +- 127 +- 29 +- 21 +- 3 +- 50 +- 153 +- 90 +- 166 +- 136 +- 192 +- 9 +- 53 +- 35 +- 160 +- 158 +- 154 +- 177 +- 57 +- 77 +- 137 +- 51 +- 34 +- 81 +- 89 +- 155 +- 86 +- 86 +- 6 +- 94 +- 122 +- 151 +- 124 +- 16 +- 113 +- 112 +- 141 +- 142 +- 4 +- 20 +- 138 +- 1 +- 67 +- 17 +- 91 +- 11 +- 1 +- 13 +- 5 +- 69 +- 196 +- 139 +- 33 +- 101 +- 153 +- 9 +- 64 +- 113 +- 138 +- 121 +- 174 +- 122 +- 137 +- 125 +- 101 +- 58 +- 173 +- 54 +- 1 +- 54 +- 119 +- 71 +- 135 +- 138 +- 93 +- 53 +- 182 +- 142 +- 160 +- 22 +- 91 +- 104 +- 104 +- 164 +- 47 +- 19 +- 71 +- 40 +- 4 +- 148 +- 141 +- 191 +- 7 +- 9 +- 26 +- 66 +- 18 +- 198 +- 63 +- 38 +- 99 +- 197 +- 160 +- 69 +- 191 +- 138 +- 148 +- 142 +- 53 +- 101 +- 28 +- 173 +- 158 +- 113 +- 171 +- 20 +- 3 +- 148 +- 82 +- 173 +- 103 +- 160 +- 60 +- 1 +- 172 +- 164 +- 122 +- 148 +- 1 +- 45 +- 165 +- 28 +- 22 +- 161 +- 50 +- 71 +- 58 +- 149 +- 16 +- 20 +- 165 +- 156 +- 72 +- 58 +- 3 +- 171 +- 76 +- 112 +- 132 +- 125 +- 78 +- 170 +- 57 +- 112 +- 41 +- 90 +- 28 +- 94 +- 197 +- 122 +- 157 +- 20 +- 36 +- 70 +- 91 +- 116 +- 193 +- 21 +- 20 +- 9 +- 132 +- 138 +- 52 +- 153 +- 63 +- 28 +- 67 +- 164 +- 156 +- 11 +- 133 +- 78 +- 149 +- 58 +- 128 +- 74 +- 69 +- 112 +- 49 +- 142 +- 72 +- 194 +- 139 +- 28 +- 176 +- 53 +- 63 +- 75 +- 167 +- 152 +- 3 +- 53 +- 92 +- 61 +- 182 +- 35 +- 53 +- 158 +- 114 +- 25 +- 141 +- 94 +- 50 +- 4 +- 112 +- 120 +- 57 +- 195 +- 162 +- 35 +- 148 +- 122 +- 87 +- 116 +- 30 +- 86 +- 174 +- 119 +- 171 +- 45 +- 160 +- 66 +- 122 +- 146 +- 18 +- 69 +- 48 +- 59 +- 89 +- 41 +- 162 +- 175 +- 128 +- 169 +- 83 +- 30 +- 171 +- 171 +- 153 +- 9 +- 74 +- 192 +- 161 +- 142 +- 160 +- 35 +- 171 +- 177 +- 178 +- 38 +- 7 +- 140 +- 194 +- 122 +- 43 +- 133 +- 26 +- 153 +- 192 +- 91 +- 37 +- 41 +- 44 +- 34 +- 78 +- 83 +- 171 +- 125 +- 28 +- 63 +- 98 +- 145 +- 194 +- 58 +- 65 +- 50 +- 178 +- 144 +- 148 +- 169 +- 136 +- 136 +- 171 +- 65 +- 28 +- 22 +- 63 +- 126 +- 110 +- 44 +- 99 +- 176 +- 74 +- 116 +- 189 +- 142 +- 91 +- 61 +- 179 +- 45 +- 53 +- 72 +- 106 +- 79 +- 67 +- 73 +- 37 +- 129 +- 125 +- 199 +- 28 +- 63 +- 112 +- 32 +- 160 +- 23 +- 195 +- 186 +- 192 +- 113 +- 101 +- 171 +- 159 +- 43 +- 140 +- 136 +- 35 +- 107 +- 48 +- 161 +- 52 +- 37 +- 73 +- 100 +- 58 +- 53 +- 171 +- 51 +- 102 +- 78 +- 62 +- 171 +- 4 +- 120 +- 140 +- 158 +- 72 +- 95 +- 102 +- 119 +- 14 +- 96 +- 73 +- 198 +- 4 +- 160 +- 133 +- 123 +- 165 +- 188 +- 13 +- 104 +- 132 +- 53 +- 73 +- 192 +- 108 +- 35 +- 53 +- 175 +- 148 +- 90 +- 86 +- 30 +- 6 +- 196 +- 191 +- 138 +- 73 +- 6 +- 63 +- 101 +- 171 +- 116 +- 24 +- 173 +- 152 +- 148 +- 92 +- 90 +- 30 +- 143 +- 32 +- 69 +- 149 +- 137 +- 84 +- 64 +- 192 +- 158 +- 82 +- 165 +- 145 +- 96 +- 163 +- 41 +- 197 +- 187 +- 3 +- 119 +- 28 +- 82 +- 95 +- 106 +- 160 +- 141 +- 66 +- 101 +- 164 +- 35 +- 63 +- 143 +- 84 +- 35 +- 142 +- 131 +- 153 +- 95 +- 168 +- 31 +- 149 +- 188 +- 136 +- 171 +- 37 +- 113 +- 158 +- 21 +- 142 +- 158 +- 154 +- 42 +- 167 +- 87 +- 3 +- 14 +- 142 +- 109 +- 75 +- 41 +- 31 +- 149 +- 198 +- 104 +- 104 +- 32 +- 20 +- 132 +- 178 +- 82 +- 168 +- 37 +- 144 +- 129 +- 40 +- 22 +- 41 +- 132 +- 133 +- 124 +- 128 +- 106 +- 154 +- 12 +- 57 +- 127 +- 91 +- 72 +- 132 +- 133 +- 78 +- 156 +- 192 +- 195 +- 4 +- 194 +- 96 +- 14 +- 142 +- 187 +- 43 +- 86 +- 158 +- 82 +- 189 +- 130 +- 148 +- 62 +- 61 +- 121 +- 96 +- 47 +- 76 +- 197 +- 156 +- 160 +- 90 +- 53 +- 101 +- 158 +- 132 +- 29 +- 61 +- 144 +- 153 +- 162 +- 11 +- 175 +- 158 +- 164 +- 35 +- 127 +- 59 +- 50 +- 55 +- 161 +- 24 +- 40 +- 78 +- 26 +- 127 +- 77 +- 56 +- 159 +- 171 +- 148 +- 27 +- 160 +- 86 +- 71 +- 56 +- 181 +- 53 +- 102 +- 58 +- 160 +- 129 +- 162 +- 172 +- 79 +- 67 +- 58 +- 114 +- 111 +- 113 +- 0 +- 176 +- 169 +- 174 +- 125 +- 50 +- 187 +- 148 +- 112 +- 194 +- 53 +- 133 +- 44 +- 163 +- 192 +- 127 +- 125 +- 69 +- 170 +- 58 +- 147 +- 124 +- 113 +- 142 +- 185 +- 61 +- 0 +- 24 +- 177 +- 110 +- 124 +- 51 +- 32 +- 50 +- 44 +- 91 +- 14 +- 41 +- 45 +- 149 +- 50 +- 41 +- 57 +- 192 +- 143 +- 5 +- 26 +- 131 +- 125 +- 152 +- 132 +- 62 +- 188 +- 154 +- 57 +- 139 +- 73 +- 190 +- 55 +- 112 +- 116 +- 124 +- 145 +- 198 +- 124 +- 154 +- 90 +- 151 +- 186 +- 57 +- 125 +- 78 +- 74 +- 44 +- 178 +- 42 +- 107 +- 56 +- 3 +- 171 +- 153 +- 130 +- 58 +- 11 +- 146 +- 194 +- 7 +- 59 +- 111 +- 64 +- 29 +- 160 +- 97 +- 164 +- 76 +- 33 +- 72 +- 89 +- 115 +- 120 +- 25 +- 81 +- 35 +- 8 +- 37 +- 58 +- 53 +- 184 +- 2 +- 195 +- 113 +- 146 +- 148 +- 39 +- 43 +- 20 +- 25 +- 148 +- 184 +- 45 +- 78 +- 62 +- 107 +- 109 +- 110 +- 145 +- 195 +- 62 +- 96 +- 20 +- 130 +- 95 +- 3 +- 158 +- 125 +- 137 +- 113 +- 74 +- 44 +- 93 +- 93 +- 133 +- 100 +- 94 +- 133 +- 122 +- 20 +- 94 +- 159 +- 148 +- 98 +- 11 +- 41 +- 58 +- 133 +- 183 +- 185 +- 154 +- 28 +- 64 +- 99 +- 127 +- 56 +- 131 +- 164 +- 111 +- 72 +- 146 +- 0 +- 159 +- 74 +- 100 +- 79 +- 85 +- 142 +- 188 +- 131 +- 37 +- 14 +- 188 +- 122 +- 171 +- 72 +- 178 +- 151 +- 171 +- 162 +- 153 +- 175 +- 82 +- 44 +- 99 +- 44 +- 138 +- 65 +- 90 +- 77 +- 125 +- 74 +- 123 +- 69 +- 141 +- 34 +- 111 +- 92 +- 62 +- 60 +- 173 +- 128 +- 58 +- 98 +- 162 +- 49 +- 113 +- 14 +- 75 +- 119 +- 177 +- 138 +- 94 +- 98 +- 145 +- 112 +- 47 +- 27 +- 171 +- 72 +- 86 +- 43 +- 119 +- 19 +- 170 +- 130 +- 73 +- 69 +- 63 +- 168 +- 137 +- 134 +- 160 +- 139 +- 13 +- 142 +- 31 +- 76 +- 199 +- 64 +- 39 +- 117 +- 54 +- 58 +- 44 +- 130 +- 145 +- 81 +- 132 +- 182 +- 152 +- 187 +- 61 +- 94 +- 87 +- 159 +- 5 +- 31 +- 116 +- 6 +- 113 +- 32 +- 190 +- 164 +- 17 +- 14 +- 111 +- 160 +- 90 +- 171 +- 113 +- 128 +- 64 +- 97 +- 50 +- 125 +- 91 +- 38 +- 63 +- 142 +- 198 +- 81 +- 87 +- 187 +- 27 +- 102 +- 2 +- 84 +- 135 +- 109 +- 112 +- 24 +- 86 +- 46 +- 156 +- 33 +- 185 +- 11 +- 157 +- 195 +- 71 +- 171 +- 159 +- 86 +- 48 +- 187 +- 73 +- 114 +- 198 +- 80 +- 15 +- 89 +- 158 +- 79 +- 117 +- 44 +- 168 +- 36 +- 91 +- 145 +- 7 +- 64 +- 177 +- 14 +- 130 +- 137 +- 177 +- 49 +- 142 +- 180 +- 67 +- 178 +- 78 +- 109 +- 51 +- 26 +- 14 +- 0 +- 127 +- 38 +- 60 +- 93 +- 74 +- 94 +- 138 +- 28 +- 53 +- 192 +- 20 +- 82 +- 135 +- 12 +- 107 +- 26 +- 49 +- 145 +- 189 +- 114 +- 158 +- 163 +- 185 +- 120 +- 75 +- 79 +- 24 +- 11 +- 172 +- 43 +- 23 +- 194 +- 97 +- 53 +- 170 +- 51 +- 18 +- 154 +- 1 +- 182 +- 24 +- 83 +- 180 +- 69 +- 57 +- 44 +- 45 +- 41 +- 86 +- 141 +- 88 +- 119 +- 0 +- 5 +- 192 +- 171 +- 151 +- 157 +- 160 +- 61 +- 153 +- 82 +- 194 +- 171 +- 53 +- 61 +- 157 +- 9 +- 61 +- 197 +- 147 +- 135 +- 175 +- 186 +- 90 +- 116 +- 49 +- 126 +- 132 +- 114 +- 0 +- 38 +- 131 +- 167 +- 180 +- 71 +- 178 +- 158 +- 136 +- 30 +- 75 +- 130 +- 63 +- 113 +- 133 +- 58 +- 189 +- 48 +- 0 +- 197 +- 33 +- 107 +- 149 +- 61 +- 116 +- 51 +- 109 +- 35 +- 63 +- 113 +- 194 +- 175 +- 159 +- 48 +- 94 +- 54 +- 75 +- 26 +- 61 +- 170 +- 117 +- 177 +- 91 +- 43 +- 75 +- 181 +- 127 +- 65 +- 107 +- 61 +- 178 +- 109 +- 101 +- 95 +- 122 +- 35 +- 68 +- 166 +- 185 +- 38 +- 76 +- 173 +- 164 +- 192 +- 178 +- 175 +- 90 +- 133 +- 61 +- 67 +- 38 +- 77 +- 37 +- 94 +- 138 +- 163 +- 160 +- 129 +- 145 +- 120 +- 91 +- 20 +- 75 +- 162 +- 152 +- 57 +- 56 +- 63 +- 94 +- 38 +- 28 +- 28 +- 142 +- 185 +- 113 +- 58 +- 181 +- 47 +- 53 +- 95 +- 91 +- 4 +- 90 +- 140 +- 99 +- 31 +- 20 +- 5 +- 113 +- 65 +- 96 +- 99 +- 57 +- 175 +- 114 +- 187 +- 75 +- 179 +- 121 +- 86 +- 153 +- 50 +- 23 +- 188 +- 20 +- 187 +- 70 +- 82 +- 65 +- 140 +- 122 +- 33 +- 51 +- 3 +- 36 +- 32 +- 13 +- 53 +- 72 +- 60 +- 187 +- 3 +- 145 +- 192 +- 69 +- 19 +- 50 +- 153 +- 109 +- 32 +- 149 +- 29 +- 122 +- 61 +- 106 +- 168 +- 68 +- 101 +- 174 +- 78 +- 110 +- 81 +- 20 +- 88 +- 113 +- 142 +- 196 +- 33 +- 194 +- 171 +- 73 +- 142 +- 120 +- 98 +- 194 +- 171 +- 182 +- 64 +- 162 +- 33 +- 168 +- 21 +- 116 +- 30 +- 55 +- 136 +- 183 +- 178 +- 77 +- 20 +- 137 +- 179 +- 16 +- 198 +- 94 +- 131 +- 62 +- 149 +- 19 +- 113 +- 44 +- 45 +- 96 +- 100 +- 0 +- 96 +- 165 +- 113 +- 24 +- 61 +- 98 +- 46 +- 173 +- 149 +- 122 +- 82 +- 110 +- 18 +- 142 +- 101 +- 99 +- 107 +- 76 +- 148 +- 175 +- 21 +- 36 +- 133 +- 159 +- 71 +- 115 +- 74 +- 123 +- 77 +- 30 +- 110 +- 72 +- 94 +- 48 +- 180 +- 27 +- 57 +- 94 +- 86 +- 51 +- 60 +- 90 +- 28 +- 62 +- 32 +- 36 +- 125 +- 45 +- 115 +- 26 +- 1 +- 176 +- 107 +- 92 +- 153 +- 88 +- 139 +- 168 +- 35 +- 147 +- 50 +- 71 +- 54 +- 116 +- 132 +- 58 +- 115 +- 0 +- 16 +- 175 +- 50 +- 44 +- 112 +- 108 +- 176 +- 66 +- 85 +- 91 +- 119 +- 57 +- 175 +- 22 +- 14 +- 173 +- 36 +- 173 +- 172 +- 86 +- 146 +- 32 +- 27 +- 186 +- 89 +- 0 +- 198 +- 129 +- 91 +- 52 +- 146 +- 152 +- 96 +- 192 +- 12 +- 27 +- 171 +- 58 +- 173 +- 61 +- 132 +- 177 +- 98 +- 60 +- 62 +- 30 +- 161 +- 195 +- 82 +- 132 +- 115 +- 171 +- 38 +- 186 +- 138 +- 194 +- 74 +- 97 +- 14 +- 40 +- 89 +- 36 +- 181 +- 141 +- 52 +- 61 +- 138 +- 104 +- 65 +- 145 +- 196 +- 82 +- 108 +- 63 +- 35 +- 60 +- 79 +- 94 +- 110 +- 173 +- 138 +- 163 +- 146 +- 159 +- 75 +- 79 +- 9 +- 113 +- 159 +- 128 +- 14 +- 100 +- 196 +- 93 +- 1 +- 42 +- 86 +- 198 +- 74 +- 186 +- 38 +- 11 +- 90 +- 46 +- 63 +- 43 +- 114 +- 8 +- 158 +- 110 +- 61 +- 24 +- 131 +- 177 +- 23 +- 63 +- 50 +- 178 +- 13 +- 134 +- 106 +- 153 +- 167 +- 44 +- 22 +- 60 +- 117 +- 30 +- 137 +- 41 +- 76 +- 184 +- 142 +- 91 +- 10 +- 22 +- 192 +- 146 +- 187 +- 116 +- 171 +- 53 +- 120 +- 141 +- 67 +- 189 +- 34 +- 74 +- 131 +- 67 +- 116 +- 186 +- 197 +- 10 +- 14 +- 110 +- 145 +- 65 +- 166 +- 102 +- 4 +- 158 +- 115 +- 79 +- 173 +- 53 +- 20 +- 132 +- 112 +- 198 +- 73 +- 186 +- 184 +- 76 +- 102 +- 13 +- 97 +- 115 +- 18 +- 112 +- 64 +- 129 +- 21 +- 65 +- 189 +- 35 +- 106 +- 96 +- 90 +- 36 +- 128 +- 33 +- 35 +- 100 +- 119 +- 110 +- 54 +- 164 +- 165 +- 175 +- 128 +- 187 +- 172 +- 127 +- 198 +- 28 +- 133 +- 48 +- 130 +- 108 +- 193 +- 33 +- 171 +- 60 +- 136 +- 77 +- 105 +- 50 +- 191 +- 113 +- 91 +- 104 +- 176 +- 86 +- 154 +- 192 +- 113 +- 145 +- 58 +- 93 +- 11 +- 131 +- 164 +- 48 +- 44 +- 198 +- 43 +- 101 +- 159 +- 113 +- 51 +- 52 +- 119 +- 121 +- 142 +- 103 +- 125 +- 75 +- 23 +- 33 +- 152 +- 26 +- 27 +- 19 +- 153 +- 141 +- 187 +- 169 +- 113 +- 71 +- 192 +- 74 +- 169 +- 183 +- 141 +- 93 +- 149 +- 99 +- 41 +- 132 +- 104 +- 0 +- 104 +- 82 +- 39 +- 102 +- 91 +- 74 +- 121 +- 114 +- 147 +- 47 +- 134 +- 37 +- 97 +- 189 +- 149 +- 95 +- 24 +- 163 +- 65 +- 18 +- 64 +- 79 +- 18 +- 112 +- 36 +- 36 +- 51 +- 124 +- 128 +- 127 +- 184 +- 35 +- 159 +- 113 +- 109 +- 1 +- 69 +- 128 +- 132 +- 79 +- 164 +- 35 +- 132 +- 151 +- 101 +- 62 +- 72 +- 178 +- 174 +- 197 +- 53 +- 135 +- 170 +- 165 +- 125 +- 163 +- 71 +- 3 +- 152 +- 122 +- 26 +- 53 +- 172 +- 81 +- 58 +- 0 +- 174 +- 42 +- 110 +- 87 +- 18 +- 32 +- 175 +- 78 +- 116 +- 52 +- 25 +- 159 +- 75 +- 167 +- 92 +- 22 +- 133 +- 166 +- 32 +- 94 +- 115 +- 26 +- 37 +- 102 +- 48 +- 44 +- 19 +- 158 +- 113 +- 76 +- 145 +- 126 +- 117 +- 159 +- 186 +- 173 +- 159 +- 182 +- 51 +- 159 +- 29 +- 26 +- 176 +- 154 +- 0 +- 37 +- 75 +- 173 +- 30 +- 48 +- 1 +- 186 +- 2 +- 14 +- 96 +- 20 +- 9 +- 61 +- 183 +- 42 +- 37 +- 165 +- 109 +- 152 +- 3 +- 122 +- 153 +- 192 +- 163 +- 32 +- 0 +- 81 +- 120 +- 103 +- 46 +- 142 +- 100 +- 61 +- 39 +- 140 +- 155 +- 192 +- 28 +- 27 +- 25 +- 168 +- 125 +- 145 +- 77 +- 164 +- 182 +- 45 +- 53 +- 100 +- 140 +- 67 +- 134 +- 18 +- 156 +- 112 +- 75 +- 185 +- 16 +- 19 +- 136 +- 170 +- 102 +- 3 +- 154 +- 127 +- 106 +- 82 +- 14 +- 94 +- 89 +- 114 +- 12 +- 182 +- 154 +- 55 +- 87 +- 11 +- 9 +- 84 +- 29 +- 129 +- 82 +- 52 +- 111 +- 2 +- 72 +- 113 +- 160 +- 72 +- 136 +- 156 +- 194 +- 133 +- 0 +- 100 +- 168 +- 47 +- 9 +- 87 +- 140 +- 58 +- 132 +- 86 +- 112 +- 138 +- 132 +- 14 +- 152 +- 25 +- 68 +- 143 +- 14 +- 56 +- 67 +- 198 +- 78 +- 142 +- 168 +- 115 +- 53 +- 63 +- 166 +- 133 +- 153 +- 24 +- 2 +- 177 +- 198 +- 33 +- 41 +- 132 +- 34 +- 65 +- 83 +- 190 +- 83 +- 113 +- 175 +- 152 +- 111 +- 105 +- 9 +- 5 +- 90 +- 7 +- 78 +- 108 +- 97 +- 142 +- 78 +- 135 +- 78 +- 89 +- 73 +- 102 +- 21 +- 38 +- 142 +- 48 +- 184 +- 133 +- 153 +- 3 +- 24 +- 90 +- 72 +- 100 +- 136 +- 57 +- 113 +- 112 +- 182 +- 110 +- 58 +- 54 +- 160 +- 39 +- 94 +- 190 +- 14 +- 121 +- 181 +- 114 +- 62 +- 86 +- 49 +- 166 +- 151 +- 20 +- 120 +- 63 +- 58 +- 102 +- 176 +- 164 +- 122 +- 96 +- 113 +- 96 +- 182 +- 156 +- 72 +- 102 +- 52 +- 107 +- 20 +- 154 +- 133 +- 137 +- 25 +- 91 +- 135 +- 138 +- 109 +- 131 +- 160 +- 63 +- 50 +- 171 +- 34 +- 187 +- 37 +- 158 +- 16 +- 171 +- 181 +- 133 +- 90 +- 73 +- 73 +- 158 +- 20 +- 163 +- 118 +- 168 +- 60 +- 91 +- 133 +- 159 +- 107 +- 142 +- 131 +- 23 +- 159 +- 78 +- 1 +- 193 +- 173 +- 26 +- 87 +- 34 +- 23 +- 32 +- 96 +- 128 +- 105 +- 14 +- 119 +- 144 +- 147 +- 125 +- 90 +- 112 +- 163 +- 125 +- 98 +- 164 +- 72 +- 35 +- 192 +- 5 +- 163 +- 102 +- 98 +- 7 +- 163 +- 171 +- 122 +- 184 +- 117 +- 48 +- 14 +- 100 +- 160 +- 151 +- 114 +- 158 +- 123 +- 174 +- 84 +- 122 +- 0 +- 133 +- 117 +- 88 +- 31 +- 163 +- 11 +- 110 +- 95 +- 21 +- 99 +- 114 +- 175 +- 6 +- 189 +- 20 +- 70 +- 64 +- 57 +- 17 +- 68 +- 115 +- 40 +- 69 +- 53 +- 14 +- 67 +- 53 +- 8 +- 160 +- 69 +- 92 +- 52 +- 48 +- 35 +- 149 +- 77 +- 20 +- 99 +- 157 +- 179 +- 55 +- 8 +- 61 +- 6 +- 82 +- 170 +- 157 +- 31 +- 65 +- 186 +- 94 +- 56 +- 120 +- 117 +- 125 +- 101 +- 153 +- 35 +- 54 +- 138 +- 181 +- 133 +- 102 +- 50 +- 109 +- 152 +- 114 +- 170 +- 79 +- 130 +- 91 +- 181 +- 188 +- 192 +- 185 +- 37 +- 99 +- 73 +- 63 +- 16 +- 25 +- 44 +- 130 +- 11 +- 36 +- 35 +- 82 +- 66 +- 144 +- 135 +- 100 +- 162 +- 81 +- 17 +- 38 +- 151 +- 36 +- 58 +- 143 +- 96 +- 168 +- 185 +- 102 +- 163 +- 132 +- 149 +- 79 +- 170 +- 196 +- 69 +- 129 +- 161 +- 43 +- 86 +- 106 +- 81 +- 145 +- 69 +- 33 +- 135 +- 70 +- 165 +- 133 +- 153 +- 119 +- 176 +- 172 +- 159 +- 91 +- 171 +- 134 +- 170 +- 24 +- 86 +- 132 +- 10 +- 78 +- 21 +- 6 +- 162 +- 173 +- 113 +- 71 +- 158 +- 35 +- 72 +- 106 +- 148 +- 76 +- 148 +- 14 +- 87 +- 182 +- 140 +- 99 +- 161 +- 53 +- 53 +- 163 +- 129 +- 124 +- 187 +- 196 +- 37 +- 131 +- 183 +- 40 +- 181 +- 73 +- 118 +- 38 +- 93 +- 95 +- 75 +- 98 +- 152 +- 132 +- 38 +- 78 +- 58 +- 126 +- 145 +- 159 +- 145 +- 88 +- 196 +- 35 +- 189 +- 149 +- 58 +- 16 +- 5 +- 1 +- 76 +- 112 +- 103 +- 78 +- 135 +- 157 +- 91 +- 153 +- 158 +- 66 +- 115 +- 47 +- 62 +- 50 +- 1 +- 13 +- 1 +- 180 +- 119 +- 169 +- 0 +- 92 +- 193 +- 174 +- 81 +- 45 +- 121 +- 137 +- 167 +- 22 +- 56 +- 24 +- 14 +- 161 +- 58 +- 80 +- 175 +- 151 +- 159 +- 129 +- 122 +- 15 +- 53 +- 114 +- 115 +- 9 +- 168 +- 175 +- 168 +- 122 +- 18 +- 58 +- 3 +- 48 +- 81 +- 33 +- 50 +- 198 +- 91 +- 26 +- 163 +- 81 +- 141 +- 79 +- 13 +- 45 +- 96 +- 138 +- 161 +- 1 +- 0 +- 58 +- 172 +- 78 +- 14 +- 140 +- 127 +- 14 +- 92 +- 10 +- 154 +- 171 +- 53 +- 86 +- 51 +- 76 +- 37 +- 77 +- 33 +- 27 +- 172 +- 51 +- 49 +- 125 +- 83 +- 14 +- 5 +- 182 +- 192 +- 113 +- 62 +- 132 +- 74 +- 175 +- 92 +- 86 +- 51 +- 81 +- 142 +- 35 +- 50 +- 53 +- 37 +- 175 +- 82 +- 168 +- 84 +- 64 +- 156 +- 60 +- 57 +- 157 +- 3 +- 140 +- 109 +- 71 +- 113 +- 101 +- 129 +- 198 +- 122 +- 115 +- 126 +- 184 +- 143 +- 14 +- 41 +- 61 +- 105 +- 104 +- 43 +- 69 +- 178 +- 51 +- 38 +- 113 +- 132 +- 32 +- 35 +- 110 +- 172 +- 182 +- 72 +- 136 +- 92 +- 35 +- 8 +- 158 +- 91 +- 195 +- 112 +- 10 +- 64 +- 152 +- 156 +- 169 +- 28 +- 38 +- 64 +- 132 +- 140 +- 99 +- 82 +- 147 +- 175 +- 14 +- 50 +- 110 +- 110 +- 78 +- 137 +- 152 +- 166 +- 20 +- 111 +- 108 +- 90 +- 171 +- 152 +- 175 +- 107 +- 129 +- 112 +- 115 +- 3 +- 154 +- 182 +- 99 +- 21 +- 5 +- 13 +- 133 +- 140 +- 0 +- 183 +- 82 +- 40 +- 139 +- 102 +- 25 +- 47 +- 36 +- 79 +- 112 +- 48 +- 168 +- 11 +- 195 +- 50 +- 77 +- 17 +- 179 +- 153 +- 16 +- 77 +- 78 +- 65 +- 90 +- 32 +- 78 +- 87 +- 179 +- 86 +- 83 +- 171 +- 193 +- 128 +- 177 +- 60 +- 14 +- 92 +- 19 +- 3 +- 180 +- 187 +- 160 +- 99 +- 71 +- 141 +- 45 +- 89 +- 3 +- 190 +- 69 +- 44 +- 38 +- 145 +- 20 +- 192 +- 37 +- 153 +- 51 +- 113 +- 75 +- 60 +- 72 +- 111 +- 178 +- 88 +- 18 +- 132 +- 105 +- 51 +- 13 +- 182 +- 84 +- 149 +- 149 +- 16 +- 92 +- 27 +- 36 +- 133 +- 21 +- 153 +- 186 +- 114 +- 162 +- 102 +- 135 +- 168 +- 57 +- 65 +- 197 +- 113 +- 27 +- 95 +- 133 +- 35 +- 53 +- 20 +- 44 +- 49 +- 190 +- 5 +- 132 +- 186 +- 7 +- 153 +- 99 +- 182 +- 161 +- 102 +- 197 +- 129 +- 133 +- 20 +- 113 +- 175 +- 78 +- 164 +- 198 +- 28 +- 112 +- 37 +- 96 +- 171 +- 149 +- 171 +- 173 +- 50 +- 65 +- 64 +- 174 +- 186 +- 36 +- 196 +- 33 +- 75 +- 97 +- 185 +- 113 +- 142 +- 35 +- 51 +- 18 +- 45 +- 37 +- 133 +- 53 +- 48 +- 170 +- 159 +- 192 +- 43 +- 169 +- 26 +- 102 +- 9 +- 49 +- 41 +- 32 +- 132 +- 144 +- 62 +- 179 +- 187 +- 142 +- 122 +- 179 +- 114 +- 113 +- 99 +- 50 +- 82 +- 117 +- 71 +- 151 +- 114 +- 19 +- 24 +- 133 +- 177 +- 85 +- 48 +- 16 +- 131 +- 21 +- 20 +- 37 +- 72 +- 20 +- 58 +- 129 +- 167 +- 187 +- 53 +- 20 +- 107 +- 166 +- 66 +- 1 +- 162 +- 95 +- 157 +- 53 +- 139 +- 94 +- 78 +- 35 +- 57 +- 38 +- 26 +- 97 +- 82 +- 32 +- 122 +- 142 +- 69 +- 38 +- 188 +- 170 +- 144 +- 71 +- 132 +- 168 +- 9 +- 48 +- 40 +- 189 +- 40 +- 181 +- 28 +- 3 +- 137 +- 195 +- 0 +- 28 +- 122 +- 113 +- 115 +- 106 +- 45 +- 82 +- 58 +- 16 +- 126 +- 171 +- 15 +- 120 +- 20 +- 113 +- 142 +- 30 +- 194 +- 115 +- 72 +- 156 +- 51 +- 8 +- 192 +- 75 +- 65 +- 95 +- 101 +- 193 +- 43 +- 189 +- 122 +- 113 +- 72 +- 7 +- 93 +- 151 +- 94 +- 171 +- 59 +- 73 +- 76 +- 105 +- 180 +- 69 +- 110 +- 148 +- 95 +- 198 +- 38 +- 14 +- 73 +- 132 +- 187 +- 3 +- 26 +- 189 +- 63 +- 65 +- 137 +- 177 +- 36 +- 5 +- 180 +- 83 +- 16 +- 181 +- 48 +- 35 +- 85 +- 126 +- 126 +- 33 +- 90 +- 48 +- 118 +- 17 +- 41 +- 101 +- 103 +- 4 +- 72 +- 74 +- 168 +- 176 +- 112 +- 180 +- 150 +- 152 +- 154 +- 63 +- 168 +- 79 +- 14 +- 168 +- 109 +- 82 +- 126 +- 166 +- 186 +- 64 +- 113 +- 182 +- 169 +- 194 +- 192 +- 142 +- 166 +- 189 +- 56 +- 183 +- 151 +- 163 +- 116 +- 105 +- 122 +- 71 +- 14 +- 26 +- 157 +- 180 +- 79 +- 6 +- 51 +- 56 +- 153 +- 138 +- 110 +- 37 +- 148 +- 99 +- 150 +- 93 +- 22 +- 118 +- 67 +- 31 +- 14 +- 18 +- 163 +- 60 +- 20 +- 49 +- 41 +- 46 +- 63 +- 11 +- 73 +- 23 +- 99 +- 92 +- 14 +- 2 +- 66 +- 42 +- 193 +- 48 +- 84 +- 32 +- 142 +- 84 +- 85 +- 128 +- 113 +- 179 +- 100 +- 88 +- 73 +- 75 +- 40 +- 72 +- 87 +- 120 +- 114 +- 132 +- 97 +- 92 +- 33 +- 152 +- 99 +- 21 +- 117 +- 114 +- 120 +- 78 +- 10 +- 171 +- 138 +- 20 +- 97 +- 158 +- 79 +- 43 +- 30 +- 192 +- 8 +- 161 +- 64 +- 144 +- 81 +- 171 +- 47 +- 41 +- 14 +- 63 +- 116 +- 32 +- 186 +- 156 +- 40 +- 45 +- 47 +- 168 +- 174 +- 79 +- 160 +- 149 +- 100 +- 182 +- 197 +- 140 +- 132 +- 185 +- 181 +- 26 +- 179 +- 33 +- 191 +- 33 +- 144 +- 46 +- 176 +- 114 +- 73 +- 76 +- 33 +- 11 +- 112 +- 186 +- 107 +- 143 +- 158 +- 14 +- 89 +- 184 +- 169 +- 97 +- 21 +- 125 +- 196 +- 53 +- 193 +- 27 +- 145 +- 32 +- 87 +- 151 +- 136 +- 113 +- 163 +- 47 +- 171 +- 18 +- 42 +- 142 +- 43 +- 140 +- 145 +- 54 +- 141 +- 26 +- 37 +- 30 +- 168 +- 137 +- 2 +- 64 +- 173 +- 133 +- 95 +- 62 +- 170 +- 152 +- 31 +- 158 +- 60 +- 61 +- 108 +- 171 +- 137 +- 106 +- 71 +- 12 +- 99 +- 61 +- 163 +- 15 +- 176 +- 99 +- 28 +- 19 +- 159 +- 93 +- 113 +- 30 +- 163 +- 94 +- 158 +- 113 +- 72 +- 112 +- 10 +- 125 +- 195 +- 115 +- 138 +- 106 +- 121 +- 78 +- 178 +- 185 +- 103 +- 154 +- 142 +- 185 +- 158 +- 133 +- 171 +- 154 +- 37 +- 55 +- 52 +- 70 +- 97 +- 187 +- 94 +- 95 +- 164 +- 114 +- 157 +- 31 +- 184 +- 102 +- 144 +- 82 +- 151 +- 91 +- 92 +- 192 +- 166 +- 101 +- 4 +- 36 +- 113 +- 18 +- 84 +- 199 +- 145 +- 178 +- 152 +- 88 +- 152 +- 186 +- 57 +- 149 +- 51 +- 21 +- 40 +- 173 +- 182 +- 35 +- 182 +- 51 +- 87 +- 105 +- 120 +- 113 +- 185 +- 20 +- 61 +- 133 +- 74 +- 43 +- 171 +- 110 +- 192 +- 32 +- 103 +- 30 +- 110 +- 129 +- 93 +- 89 +- 100 +- 174 +- 0 +- 57 +- 72 +- 41 +- 192 +- 49 +- 125 +- 63 +- 70 +- 137 +- 28 +- 113 +- 56 +- 2 +- 103 +- 181 +- 148 +- 171 +- 161 +- 157 +- 97 +- 20 +- 78 +- 155 +- 88 +- 9 +- 102 +- 93 +- 149 +- 48 +- 129 +- 21 +- 73 +- 28 +- 158 +- 28 +- 75 +- 90 +- 84 +- 192 +- 185 +- 102 +- 168 +- 65 +- 11 +- 187 +- 76 +- 122 +- 50 +- 182 +- 67 +- 154 +- 41 +- 100 +- 112 +- 57 +- 29 +- 84 +- 128 +- 171 +- 30 +- 51 +- 122 +- 187 +- 62 +- 8 +- 122 +- 149 +- 151 +- 125 +- 92 +- 115 +- 90 +- 79 +- 156 +- 109 +- 132 +- 86 +- 141 +- 44 +- 38 +- 152 +- 125 +- 64 +- 97 +- 120 +- 83 +- 144 +- 82 +- 163 +- 20 +- 106 +- 107 +- 28 +- 35 +- 152 +- 122 +- 137 +- 73 +- 130 +- 0 +- 132 +- 133 +- 61 +- 164 +- 50 +- 71 +- 73 +- 93 +- 144 +- 73 +- 188 +- 49 +- 105 +- 50 +- 142 +- 99 +- 11 +- 21 +- 33 +- 0 +- 82 +- 38 +- 73 +- 57 +- 71 +- 166 +- 188 +- 41 +- 137 +- 91 +- 74 +- 16 +- 48 +- 30 +- 3 +- 194 +- 143 +- 74 +- 138 +- 94 +- 11 +- 64 +- 142 +- 96 +- 76 +- 158 +- 77 +- 139 +- 28 +- 136 +- 41 +- 56 +- 156 +- 19 +- 101 +- 84 +- 58 +- 73 +- 97 +- 91 +- 182 +- 41 +- 109 +- 79 +- 186 +- 132 +- 3 +- 177 +- 76 +- 99 +- 166 +- 17 +- 63 +- 99 +- 152 +- 80 +- 135 +- 149 +- 15 +- 31 +- 61 +- 128 +- 72 +- 158 +- 145 +- 26 +- 64 +- 193 +- 99 +- 109 +- 44 +- 27 +- 53 +- 125 +- 8 +- 19 +- 102 +- 122 +- 116 +- 193 +- 151 +- 113 +- 182 +- 48 +- 99 +- 53 +- 132 +- 87 +- 132 +- 179 +- 49 +- 49 +- 94 +- 7 +- 161 +- 99 +- 39 +- 191 +- 169 +- 18 +- 72 +- 5 +- 53 +- 169 +- 164 +- 100 +- 120 +- 53 +- 132 +- 114 +- 55 +- 135 +- 58 +- 43 +- 169 +- 41 +- 104 +- 192 +- 41 +- 94 +- 48 +- 175 +- 161 +- 21 +- 20 +- 78 +- 80 +- 108 +- 16 +- 90 +- 58 +- 59 +- 154 +- 142 +- 83 +- 116 +- 50 +- 94 +- 58 +- 146 +- 172 +- 41 +- 15 +- 133 +- 37 +- 196 +- 47 +- 186 +- 196 +- 176 +- 83 +- 156 +- 150 +- 114 +- 8 +- 136 +- 18 +- 180 +- 14 +- 20 +- 87 +- 106 +- 54 +- 7 +- 73 +- 15 +- 186 +- 171 +- 122 +- 167 +- 108 +- 71 +- 56 +- 168 +- 87 +- 5 +- 82 +- 3 +- 24 +- 164 +- 102 +- 36 +- 42 +- 158 +- 153 +- 26 +- 163 +- 34 +- 134 +- 28 +- 36 +- 63 +- 138 +- 96 +- 22 +- 20 +- 37 +- 67 +- 90 +- 48 +- 174 +- 88 +- 158 +- 133 +- 137 +- 160 +- 185 +- 79 +- 18 +- 179 +- 125 +- 168 +- 90 +- 193 +- 154 +- 50 +- 8 +- 128 +- 152 +- 171 +- 5 +- 189 +- 172 +- 148 +- 72 +- 69 +- 14 +- 13 +- 120 +- 23 +- 54 +- 80 +- 42 +- 82 +- 135 +- 65 +- 121 +- 168 +- 61 +- 155 +- 48 +- 189 +- 43 +- 0 +- 144 +- 98 +- 72 +- 81 +- 153 +- 125 +- 192 +- 153 +- 4 +- 15 +- 160 +- 49 +- 20 +- 14 +- 62 +- 53 +- 192 +- 49 +- 159 +- 58 +- 136 +- 16 +- 4 +- 63 +- 125 +- 3 +- 14 +- 132 +- 198 +- 148 +- 22 +- 67 +- 50 +- 185 +- 0 +- 54 +- 83 +- 24 +- 136 +- 28 +- 183 +- 189 +- 192 +- 65 +- 67 +- 147 +- 150 +- 132 +- 179 +- 26 +- 7 +- 54 +- 84 +- 182 +- 133 +- 115 +- 89 +- 178 +- 104 +- 66 +- 69 +- 187 +- 20 +- 19 +- 51 +- 90 +- 128 +- 89 +- 160 +- 150 +- 36 +- 130 +- 169 +- 56 +- 38 +- 21 +- 82 +- 42 +- 82 +- 53 +- 185 +- 78 +- 22 +- 0 +- 100 +- 66 +- 102 +- 3 +- 42 +- 57 +- 33 +- 187 +- 132 +- 3 +- 69 +- 198 +- 119 +- 58 +- 53 +- 73 +- 73 +- 61 +- 186 +- 10 +- 30 +- 73 +- 132 +- 38 +- 107 +- 34 +- 100 +- 187 +- 117 +- 118 +- 102 +- 113 +- 111 +- 12 +- 172 +- 138 +- 175 +- 171 +- 26 +- 146 +- 41 +- 71 +- 116 +- 19 +- 195 +- 5 +- 148 +- 169 +- 138 +- 107 +- 28 +- 25 +- 86 +- 32 +- 3 +- 149 +- 113 +- 134 +- 102 +- 168 +- 197 +- 165 +- 28 +- 148 +- 14 +- 170 +- 194 +- 196 +- 78 +- 27 +- 182 +- 79 +- 92 +- 10 +- 28 +- 8 +- 35 +- 94 +- 186 +- 26 +- 19 +- 138 +- 13 +- 158 +- 163 +- 99 +- 5 +- 168 +- 176 +- 153 +- 99 +- 78 +- 138 +- 155 +- 140 +- 133 +- 122 +- 150 +- 115 +- 186 +- 98 +- 76 +- 139 +- 171 +- 0 +- 180 +- 106 +- 0 +- 103 +- 125 +- 0 +- 114 +- 171 +- 59 +- 120 +- 199 +- 60 +- 74 +- 143 +- 101 +- 190 +- 164 +- 26 +- 70 +- 9 +- 6 +- 71 +- 19 +- 101 +- 71 +- 113 +- 20 +- 35 +- 122 +- 65 +- 13 +- 133 +- 197 +- 0 +- 149 +- 95 +- 21 +- 188 +- 53 +- 94 +- 133 +- 162 +- 72 +- 57 +- 139 +- 153 +- 28 +- 139 +- 76 +- 39 +- 87 +- 79 +- 63 +- 134 +- 145 +- 192 +- 158 +- 15 +- 131 +- 82 +- 51 +- 91 +- 61 +- 182 +- 185 +- 0 +- 125 +- 101 +- 72 +- 120 +- 142 +- 102 +- 152 +- 118 +- 28 +- 133 +- 25 +- 47 +- 199 +- 63 +- 33 +- 149 +- 102 +- 171 +- 127 +- 91 +- 47 +- 194 +- 187 +- 115 +- 101 +- 181 +- 142 +- 30 +- 128 +- 149 +- 152 +- 174 +- 33 +- 140 +- 74 +- 14 +- 77 +- 5 +- 142 +- 74 +- 149 +- 192 +- 18 +- 122 +- 152 +- 177 +- 184 +- 166 +- 36 +- 14 +- 146 +- 20 +- 130 +- 35 +- 151 +- 16 +- 60 +- 146 +- 189 +- 137 +- 194 +- 117 +- 100 +- 172 +- 110 +- 185 +- 110 +- 168 +- 154 +- 108 +- 66 +- 129 +- 152 +- 192 +- 159 +- 15 +- 187 +- 146 +- 28 +- 15 +- 100 +- 175 +- 126 +- 79 +- 72 +- 114 +- 56 +- 84 +- 99 +- 145 +- 59 +- 116 +- 112 +- 63 +- 60 +- 91 +- 14 +- 30 +- 65 +- 14 +- 51 +- 147 +- 100 +- 94 +- 149 +- 114 +- 114 +- 82 +- 39 +- 135 +- 37 +- 29 +- 108 +- 145 +- 163 +- 90 +- 95 +- 51 +- 41 +- 21 +- 116 +- 48 +- 133 +- 38 +- 54 +- 169 +- 168 +- 0 +- 55 +- 13 +- 99 +- 78 +- 194 +- 155 +- 102 +- 0 +- 141 +- 69 +- 86 +- 9 +- 163 +- 166 +- 41 +- 135 +- 15 +- 162 +- 114 +- 163 +- 112 +- 80 +- 15 +- 123 +- 17 +- 0 +- 61 +- 133 +- 87 +- 106 +- 48 +- 183 +- 20 +- 68 +- 138 +- 57 +- 133 +- 137 +- 182 +- 121 +- 122 +- 80 +- 91 +- 146 +- 16 +- 119 +- 137 +- 65 +- 64 +- 123 +- 87 +- 149 +- 24 +- 82 +- 186 +- 16 +- 156 +- 170 +- 36 +- 126 +- 14 +- 106 +- 64 +- 91 +- 30 +- 104 +- 45 +- 174 +- 195 +- 111 +- 142 +- 171 +- 99 +- 77 +- 188 +- 101 +- 155 +- 113 +- 165 +- 113 +- 102 +- 35 +- 78 +- 17 +- 196 +- 152 +- 90 +- 86 +- 175 +- 14 +- 107 +- 48 +- 70 +- 37 +- 80 +- 32 +- 153 +- 163 +- 14 +- 151 +- 81 +- 22 +- 83 +- 173 +- 84 +- 181 +- 14 +- 125 +- 153 +- 114 +- 93 +- 38 +- 125 +- 159 +- 149 +- 177 +- 87 +- 61 +- 142 +- 20 +- 144 +- 125 +- 93 +- 138 +- 70 +- 4 +- 45 +- 171 +- 88 +- 91 +- 160 +- 9 +- 11 +- 158 +- 113 +- 24 +- 53 +- 167 +- 117 +- 94 +- 118 +- 115 +- 101 +- 101 +- 95 +- 16 +- 113 +- 125 +- 70 +- 192 +- 198 +- 112 +- 71 +- 131 +- 195 +- 113 +- 48 +- 64 +- 139 +- 20 +- 196 +- 43 +- 87 +- 58 +- 61 +- 60 +- 30 +- 193 +- 3 +- 177 +- 9 +- 197 +- 91 +- 43 +- 37 +- 79 +- 38 +- 30 +- 149 +- 182 +- 171 +- 47 +- 121 +- 20 +- 90 +- 87 +- 94 +- 97 +- 90 +- 28 +- 87 +- 108 +- 49 +- 148 +- 33 +- 59 +- 6 +- 38 +- 70 +- 172 +- 72 +- 42 +- 179 +- 174 +- 55 +- 159 +- 70 +- 60 +- 114 +- 36 +- 14 +- 160 +- 1 +- 63 +- 140 +- 30 +- 163 +- 68 +- 10 +- 102 +- 184 +- 41 +- 182 +- 83 +- 187 +- 20 +- 120 +- 20 +- 19 +- 42 +- 159 +- 152 +- 126 +- 169 +- 192 +- 183 +- 110 +- 69 +- 98 +- 107 +- 94 +- 87 +- 96 +- 29 +- 158 +- 87 +- 119 +- 153 +- 148 +- 153 +- 142 +- 112 +- 152 +- 110 +- 179 +- 94 +- 62 +- 129 +- 43 +- 65 +- 72 +- 10 +- 32 +- 174 +- 90 +- 73 +- 30 +- 147 +- 26 +- 143 +- 64 +- 72 +- 35 +- 26 +- 70 +- 73 +- 28 +- 199 +- 181 +- 15 +- 39 +- 20 +- 41 +- 74 +- 104 +- 151 +- 118 +- 120 +- 193 +- 24 +- 194 +- 14 +- 113 +- 95 +- 197 +- 91 +- 53 +- 151 +- 107 +- 94 +- 154 +- 184 +- 35 +- 3 +- 60 +- 129 +- 34 +- 39 +- 153 +- 151 +- 103 +- 33 +- 33 +- 41 +- 74 +- 63 +- 47 +- 52 +- 185 +- 76 +- 35 +- 175 +- 2 +- 180 +- 95 +- 27 +- 168 +- 81 +- 21 +- 58 +- 20 +- 159 +- 112 +- 174 +- 90 +- 4 +- 49 +- 107 +- 62 +- 53 +- 166 +- 42 +- 3 +- 91 +- 61 +- 3 +- 104 +- 115 +- 92 +- 137 +- 61 +- 73 +- 10 +- 106 +- 142 +- 97 +- 64 +- 64 +- 78 +- 42 +- 125 +- 20 +- 109 +- 35 +- 152 +- 41 +- 193 +- 196 +- 133 +- 132 +- 175 +- 152 +- 94 +- 65 +- 24 +- 148 +- 26 +- 91 +- 94 +- 156 +- 146 +- 175 +- 154 +- 76 +- 95 +- 90 +- 26 +- 187 +- 187 +- 171 +- 91 +- 133 +- 57 +- 66 +- 18 +- 5 +- 150 +- 60 +- 125 +- 35 +- 63 +- 51 +- 20 +- 132 +- 104 +- 24 +- 20 +- 116 +- 34 +- 70 +- 145 +- 155 +- 64 +- 65 +- 146 +- 173 +- 32 +- 2 +- 192 +- 71 +- 102 +- 81 +- 140 +- 138 +- 47 +- 170 +- 173 +- 113 +- 53 +- 61 +- 182 +- 112 +- 129 +- 185 +- 170 +- 37 +- 120 +- 32 +- 181 +- 21 +- 72 +- 160 +- 29 +- 14 +- 53 +- 112 +- 133 +- 139 +- 31 +- 18 +- 113 +- 158 +- 64 +- 60 +- 94 +- 30 +- 60 +- 20 +- 4 +- 118 +- 136 +- 79 +- 21 +- 109 +- 71 +- 9 +- 158 +- 171 +- 77 +- 137 +- 166 +- 74 +- 38 +- 129 +- 88 +- 72 +- 107 +- 70 +- 156 +- 65 +- 39 +- 135 +- 64 +- 53 +- 160 +- 82 +- 24 +- 79 +- 54 +- 42 +- 38 +- 170 +- 69 +- 83 +- 69 +- 53 +- 26 +- 38 +- 70 +- 168 +- 3 +- 41 +- 70 +- 90 +- 192 +- 146 +- 116 +- 58 +- 102 +- 29 +- 149 +- 86 +- 46 +- 144 +- 0 +- 34 +- 71 +- 177 +- 101 +- 80 +- 82 +- 93 +- 153 +- 74 +- 167 +- 113 +- 187 +- 94 +- 46 +- 170 +- 134 +- 16 +- 0 +- 52 +- 182 +- 44 +- 149 +- 190 +- 151 +- 158 +- 159 +- 102 +- 171 +- 116 +- 128 +- 81 +- 142 +- 182 +- 148 +- 3 +- 175 +- 26 +- 0 +- 23 +- 86 +- 160 +- 61 +- 82 +- 83 +- 14 +- 12 +- 141 +- 63 +- 195 +- 63 +- 142 +- 53 +- 18 +- 32 +- 88 +- 87 +- 41 +- 53 +- 26 +- 114 +- 149 +- 68 +- 128 +- 140 +- 90 +- 19 +- 58 +- 171 +- 158 +- 123 +- 159 +- 147 +- 31 +- 146 +- 181 +- 9 +- 82 +- 167 +- 118 +- 48 +- 112 +- 77 +- 190 +- 185 +- 188 +- 167 +- 153 +- 195 +- 22 +- 20 +- 40 +- 82 +- 163 +- 152 +- 25 +- 132 +- 2 +- 139 +- 97 +- 50 +- 133 +- 103 +- 17 +- 116 +- 41 +- 194 +- 90 +- 93 +- 137 +- 0 +- 35 +- 174 +- 37 +- 178 +- 95 +- 26 +- 110 +- 38 +- 106 +- 27 +- 79 +- 113 +- 15 +- 128 +- 133 +- 154 +- 134 +- 113 +- 46 +- 79 +- 120 +- 24 +- 159 +- 13 +- 93 +- 55 +- 179 +- 157 +- 63 +- 182 +- 153 +- 5 +- 123 +- 0 +- 20 +- 73 +- 92 +- 180 +- 79 +- 58 +- 140 +- 73 +- 110 +- 182 +- 142 +- 153 +- 160 +- 106 +- 82 +- 137 +- 174 +- 72 +- 66 +- 41 +- 112 +- 192 +- 131 +- 198 +- 37 +- 82 +- 145 +- 197 +- 168 +- 125 +- 35 +- 20 +- 141 +- 187 +- 151 +- 89 +- 102 +- 36 +- 160 +- 70 +- 169 +- 112 +- 52 +- 24 +- 128 +- 140 +- 3 +- 20 +- 61 +- 175 +- 139 +- 146 +- 196 +- 49 +- 7 +- 14 +- 183 +- 132 +- 140 +- 144 +- 171 +- 70 +- 4 +- 111 +- 119 +- 170 +- 14 +- 41 +- 83 +- 111 +- 159 +- 58 +- 0 +- 153 +- 137 +- 102 +- 61 +- 55 +- 93 +- 64 +- 147 +- 92 +- 114 +- 141 +- 125 +- 78 +- 141 +- 44 +- 102 +- 117 +- 100 +- 158 +- 38 +- 114 +- 120 +- 112 +- 46 +- 171 +- 0 +- 0 +- 134 +- 100 +- 122 +- 38 +- 157 +- 171 +- 144 +- 33 +- 102 +- 23 +- 90 +- 61 +- 192 +- 114 +- 163 +- 40 +- 198 +- 48 +- 10 +- 143 +- 17 +- 44 +- 78 +- 54 +- 2 +- 6 +- 2 +- 167 +- 8 +- 64 +- 171 +- 85 +- 39 +- 69 +- 171 +- 90 +- 142 +- 115 +- 112 +- 113 +- 180 +- 167 +- 56 +- 90 +- 180 +- 145 +- 95 +- 94 +- 92 +- 58 +- 58 +- 74 +- 186 +- 112 +- 79 +- 87 +- 155 +- 20 +- 168 +- 55 +- 56 +- 171 +- 37 +- 44 +- 196 +- 117 +- 60 +- 12 +- 103 +- 171 +- 77 +- 192 +- 103 +- 149 +- 160 +- 196 +- 175 +- 171 +- 99 +- 132 +- 49 +- 47 +- 0 +- 152 +- 179 +- 63 +- 198 +- 171 +- 101 +- 79 +- 58 +- 15 +- 53 +- 53 +- 119 +- 94 +- 120 +- 92 +- 199 +- 69 +- 21 +- 134 +- 154 +- 96 +- 132 +- 187 +- 28 +- 1 +- 94 +- 182 +- 171 +- 53 +- 167 +- 115 +- 161 +- 102 +- 53 +- 16 +- 114 +- 168 +- 177 +- 109 +- 10 +- 11 +- 79 +- 141 +- 69 +- 96 +- 14 +- 13 +- 73 +- 132 +- 178 +- 159 +- 129 +- 192 +- 174 +- 66 +- 43 +- 172 +- 125 +- 114 +- 168 +- 48 +- 11 +- 76 +- 140 +- 70 +- 113 +- 0 +- 5 +- 113 +- 15 +- 11 +- 138 +- 102 +- 48 +- 33 +- 162 +- 8 +- 107 +- 151 +- 183 +- 106 +- 170 +- 32 +- 191 +- 132 +- 152 +- 98 +- 16 +- 80 +- 194 +- 93 +- 10 +- 88 +- 83 +- 197 +- 55 +- 104 +- 188 +- 101 +- 43 +- 119 +- 171 +- 74 +- 180 +- 32 +- 110 +- 14 +- 138 +- 50 +- 185 +- 158 +- 198 +- 65 +- 154 +- 32 +- 24 +- 53 +- 125 +- 129 +- 3 +- 133 +- 35 +- 181 +- 77 +- 151 +- 187 +- 197 +- 183 +- 168 +- 77 +- 0 +- 0 +- 63 +- 121 +- 73 +- 63 +- 113 +- 61 +- 57 +- 129 +- 79 +- 115 +- 94 +- 174 +- 160 +- 75 +- 6 +- 48 +- 113 +- 58 +- 102 +- 151 +- 183 +- 160 +- 48 +- 131 +- 49 +- 76 +- 159 +- 60 +- 178 +- 107 +- 9 +- 53 +- 45 +- 90 +- 114 +- 50 +- 56 +- 33 +- 61 +- 63 +- 97 +- 119 +- 57 +- 196 +- 184 +- 65 +- 163 +- 161 +- 33 +- 53 +- 113 +- 18 +- 120 +- 50 +- 22 +- 141 +- 188 +- 99 +- 114 +- 127 +- 105 +- 103 +- 115 +- 116 +- 147 +- 103 +- 30 +- 138 +- 147 +- 28 +- 199 +- 61 +- 93 +- 153 +- 56 +- 66 +- 54 +- 180 +- 77 +- 170 +- 153 +- 145 +- 106 +- 100 +- 75 +- 103 +- 94 +- 119 +- 82 +- 64 +- 159 +- 113 +- 188 +- 74 +- 20 +- 90 +- 27 +- 111 +- 58 +- 114 +- 148 +- 38 +- 67 +- 91 +- 158 +- 168 +- 193 +- 185 +- 26 +- 82 +- 70 +- 6 +- 98 +- 42 +- 17 +- 43 +- 101 +- 168 +- 94 +- 4 +- 198 +- 182 +- 110 +- 155 +- 128 +- 100 +- 177 +- 157 +- 43 +- 0 +- 113 +- 35 +- 15 +- 167 +- 4 +- 116 +- 36 +- 44 +- 159 +- 134 +- 93 +- 42 +- 180 +- 100 +- 13 +- 35 +- 3 +- 14 +- 159 +- 0 +- 169 +- 65 +- 140 +- 94 +- 90 +- 38 +- 20 +- 53 +- 143 +- 113 +- 48 +- 121 +- 2 +- 122 +- 75 +- 53 +- 98 +- 99 +- 75 +- 37 +- 87 +- 135 +- 7 +- 73 +- 90 +- 168 +- 186 +- 113 +- 20 +- 95 +- 138 +- 146 +- 76 +- 73 +- 104 +- 86 +- 158 +- 105 +- 70 +- 21 +- 139 +- 127 +- 20 +- 175 +- 49 +- 120 +- 52 +- 114 +- 72 +- 132 +- 149 +- 76 +- 53 +- 198 +- 38 +- 78 +- 11 +- 139 +- 156 +- 148 +- 73 +- 135 +- 181 +- 0 +- 152 +- 24 +- 94 +- 81 +- 144 +- 59 +- 72 +- 145 +- 51 +- 142 +- 117 +- 92 +- 20 +- 137 +- 101 +- 145 +- 112 +- 159 +- 38 +- 20 +- 151 +- 53 +- 22 +- 24 +- 69 +- 87 +- 152 +- 108 +- 44 +- 133 +- 129 +- 132 +- 43 +- 129 +- 186 +- 175 +- 128 +- 197 +- 60 +- 64 +- 96 +- 0 +- 191 +- 154 +- 60 +- 3 +- 93 +- 35 +- 188 +- 110 +- 41 +- 46 +- 115 +- 73 +- 21 +- 115 +- 170 +- 134 +- 63 +- 121 +- 82 +- 10 +- 81 +- 185 +- 20 +- 171 +- 21 +- 186 +- 144 +- 0 +- 74 +- 159 +- 1 +- 58 +- 157 +- 176 +- 39 +- 127 +- 199 +- 150 +- 121 +- 100 +- 175 +- 76 +- 130 +- 175 +- 55 +- 32 +- 97 +- 20 +- 66 +- 44 +- 168 +- 188 +- 98 +- 158 +- 162 +- 153 +- 28 +- 74 +- 172 +- 82 +- 184 +- 125 +- 138 +- 153 +- 63 +- 90 +- 3 +- 54 +- 65 +- 99 +- 90 +- 14 +- 110 +- 92 +- 181 +- 66 +- 78 +- 162 +- 194 +- 182 +- 98 +- 148 +- 36 +- 79 +- 106 +- 120 +- 119 +- 10 +- 137 +- 198 +- 59 +- 148 +- 173 +- 25 +- 187 +- 190 +- 102 +- 188 +- 115 +- 50 +- 107 +- 72 +- 163 +- 45 +- 134 +- 44 +- 79 +- 26 +- 90 +- 122 +- 168 +- 127 +- 79 +- 134 +- 129 +- 161 +- 164 +- 151 +- 173 +- 87 +- 134 +- 38 +- 97 +- 78 +- 90 +- 6 +- 37 +- 66 +- 81 +- 164 +- 26 +- 112 +- 53 +- 139 +- 145 +- 42 +- 192 +- 171 +- 92 +- 149 +- 8 +- 102 +- 149 +- 77 +- 164 +- 64 +- 67 +- 101 +- 136 +- 97 +- 38 +- 158 +- 35 +- 14 +- 7 +- 73 +- 87 +- 89 +- 194 +- 199 +- 183 +- 22 +- 80 +- 165 +- 112 +- 72 +- 166 +- 17 +- 76 +- 26 +- 57 +- 186 +- 0 +- 153 +- 168 +- 98 +- 152 +- 84 +- 91 +- 151 +- 113 +- 93 +- 0 +- 141 +- 53 +- 122 +- 132 +- 32 +- 157 +- 124 +- 18 +- 72 +- 114 +- 15 +- 153 +- 30 +- 4 +- 61 +- 122 +- 109 +- 133 +- 74 +- 76 +- 72 +- 148 +- 133 +- 127 +- 14 +- 0 +- 140 +- 1 +- 1 +- 188 +- 49 +- 94 +- 137 +- 5 +- 133 +- 81 +- 65 +- 19 +- 177 +- 32 +- 87 +- 194 +- 187 +- 72 +- 145 +- 87 +- 198 +- 37 +- 180 +- 73 +- 54 +- 36 +- 118 +- 70 +- 99 +- 102 +- 90 +- 81 +- 169 +- 66 +- 28 +- 178 +- 164 +- 181 +- 14 +- 100 +- 86 +- 66 +- 38 +- 2 +- 136 +- 149 +- 20 +- 156 +- 133 +- 50 +- 87 +- 113 +- 37 +- 113 +- 196 +- 60 +- 194 +- 168 +- 50 +- 20 +- 16 +- 9 +- 60 +- 113 +- 153 +- 100 +- 72 +- 181 +- 134 +- 160 +- 180 +- 144 +- 10 +- 100 +- 55 +- 9 +- 91 +- 138 +- 102 +- 176 +- 21 +- 178 +- 63 +- 58 +- 112 +- 143 +- 38 +- 99 +- 87 +- 115 +- 49 +- 189 +- 158 +- 115 +- 186 +- 38 +- 150 +- 120 +- 28 +- 74 +- 159 +- 37 +- 47 +- 38 +- 94 +- 101 +- 103 +- 170 +- 24 +- 186 +- 187 +- 189 +- 116 +- 94 +- 133 +- 153 +- 146 +- 84 +- 24 +- 168 +- 94 +- 159 +- 177 +- 161 +- 132 +- 69 +- 157 +- 157 +- 113 +- 162 +- 133 +- 125 +- 159 +- 98 +- 36 +- 122 +- 157 +- 172 +- 35 +- 32 +- 69 +- 192 +- 8 +- 145 +- 132 +- 84 +- 179 +- 153 +- 68 +- 170 +- 36 +- 46 +- 142 +- 106 +- 184 +- 76 +- 115 +- 101 +- 142 +- 29 +- 185 +- 40 +- 96 +- 191 +- 110 +- 115 +- 44 +- 166 +- 186 +- 94 +- 188 +- 49 +- 68 +- 20 +- 100 +- 42 +- 171 +- 14 +- 158 +- 161 +- 76 +- 56 +- 61 +- 177 +- 82 +- 32 +- 122 +- 68 +- 24 +- 85 +- 177 +- 132 +- 147 +- 75 +- 27 +- 33 +- 71 +- 173 +- 159 +- 125 +- 112 +- 73 +- 57 +- 185 +- 78 +- 12 +- 44 +- 28 +- 102 +- 185 +- 93 +- 101 +- 116 +- 73 +- 7 +- 138 +- 133 +- 9 +- 154 +- 148 +- 0 +- 37 +- 56 +- 90 +- 125 +- 99 +- 77 +- 104 +- 45 +- 17 +- 103 +- 35 +- 107 +- 107 +- 78 +- 125 +- 31 +- 86 +- 50 +- 129 +- 132 +- 112 +- 99 +- 197 +- 3 +- 46 +- 164 +- 140 +- 140 +- 0 +- 73 +- 171 +- 16 +- 53 +- 101 +- 47 +- 19 +- 196 +- 41 +- 105 +- 42 +- 132 +- 54 +- 111 +- 145 +- 78 +- 164 +- 43 +- 41 +- 37 +- 23 +- 174 +- 26 +- 26 +- 92 +- 30 +- 72 +- 16 +- 67 +- 20 +- 14 +- 91 +- 50 +- 48 +- 5 +- 82 +- 28 +- 63 +- 101 +- 98 +- 53 +- 174 +- 121 +- 0 +- 129 +- 107 +- 153 +- 69 +- 174 +- 118 +- 149 +- 182 +- 166 +- 0 +- 139 +- 58 +- 50 +- 82 +- 168 +- 190 +- 23 +- 101 +- 76 +- 154 +- 0 +- 107 +- 145 +- 138 +- 114 +- 71 +- 58 +- 27 +- 35 +- 47 +- 57 +- 175 +- 113 +- 102 +- 113 +- 182 +- 97 +- 153 +- 20 +- 61 +- 180 +- 113 +- 147 +- 63 +- 172 +- 148 +- 72 +- 69 +- 182 +- 133 +- 167 +- 82 +- 53 +- 73 +- 154 +- 45 +- 195 +- 68 +- 142 +- 108 +- 144 +- 56 +- 53 +- 192 +- 49 +- 149 +- 170 +- 171 +- 73 +- 138 +- 194 +- 24 +- 73 +- 3 +- 154 +- 130 +- 65 +- 87 +- 37 +- 60 +- 186 +- 33 +- 138 +- 53 +- 81 +- 65 +- 140 +- 122 +- 35 +- 75 +- 61 +- 137 +- 153 +- 43 +- 159 +- 65 +- 112 +- 41 +- 69 +- 171 +- 159 +- 73 +- 170 +- 194 +- 59 +- 79 +- 24 +- 122 +- 156 +- 167 +- 94 +- 151 +- 120 +- 40 +- 57 +- 3 +- 10 +- 53 +- 74 +- 42 +- 32 +- 1 +- 73 +- 99 +- 95 +- 168 +- 20 +- 146 +- 49 +- 28 +- 141 +- 59 +- 48 +- 31 +- 153 +- 94 +- 60 +- 36 +- 131 +- 158 +- 192 +- 149 +- 53 +- 40 +- 74 +- 185 +- 199 +- 0 +- 74 +- 153 +- 7 +- 14 +- 59 +- 3 +- 57 +- 73 +- 21 +- 71 +- 113 +- 133 +- 140 +- 183 +- 105 +- 129 +- 13 +- 60 +- 70 +- 137 +- 135 +- 16 +- 170 +- 150 +- 103 +- 21 +- 18 +- 14 +- 178 +- 37 +- 167 +- 83 +- 126 +- 101 +- 20 +- 36 +- 109 +- 129 +- 66 +- 172 +- 43 +- 0 +- 158 +- 189 +- 170 +- 166 +- 101 +- 158 +- 82 +- 50 +- 41 +- 114 +- 82 +- 115 +- 180 +- 72 +- 51 +- 72 +- 180 +- 171 +- 59 +- 90 +- 19 +- 0 +- 124 +- 180 +- 198 +- 14 +- 71 +- 97 +- 75 +- 131 +- 30 +- 153 +- 101 +- 13 +- 101 +- 137 +- 12 +- 98 +- 57 +- 28 +- 113 +- 143 +- 86 +- 0 +- 163 +- 47 +- 81 +- 138 +- 174 +- 183 +- 154 +- 86 +- 192 +- 146 +- 193 +- 171 +- 154 +- 153 +- 101 +- 180 +- 28 +- 112 +- 50 +- 91 +- 194 +- 78 +- 46 +- 116 +- 198 +- 11 +- 153 +- 166 +- 177 +- 63 +- 8 +- 141 +- 73 +- 69 +- 10 +- 36 +- 44 +- 61 +- 199 +- 179 +- 90 +- 43 +- 53 +- 53 +- 79 +- 84 +- 159 +- 60 +- 35 +- 75 +- 64 +- 182 +- 131 +- 99 +- 51 +- 32 +- 43 +- 88 +- 16 +- 45 +- 78 +- 82 +- 36 +- 198 +- 135 +- 111 +- 20 +- 30 +- 6 +- 77 +- 122 +- 113 +- 53 +- 106 +- 149 +- 116 +- 152 +- 82 +- 28 +- 123 +- 96 +- 92 +- 48 +- 86 +- 177 +- 106 +- 102 +- 142 +- 26 +- 135 +- 140 +- 79 +- 128 +- 97 +- 175 +- 182 +- 107 +- 144 +- 110 +- 169 +- 118 +- 133 +- 50 +- 149 +- 18 +- 74 +- 165 +- 125 +- 29 +- 91 +- 20 +- 147 +- 29 +- 3 +- 152 +- 135 +- 108 +- 20 +- 57 +- 93 +- 65 +- 7 +- 41 +- 119 +- 193 +- 20 +- 179 +- 60 +- 39 +- 140 +- 176 +- 153 +- 140 +- 159 +- 120 +- 61 +- 171 +- 101 +- 70 +- 72 +- 70 +- 8 +- 193 +- 100 +- 141 +- 171 +- 20 +- 98 +- 49 +- 105 +- 90 +- 122 +- 87 +- 164 +- 45 +- 63 +- 90 +- 91 +- 189 +- 76 +- 89 +- 130 +- 35 +- 132 +- 161 +- 36 +- 120 +- 37 +- 18 +- 107 +- 109 +- 186 +- 151 +- 33 +- 187 +- 119 +- 91 +- 132 +- 132 +- 112 +- 174 +- 44 +- 143 +- 177 +- 36 +- 191 +- 187 +- 106 +- 157 +- 35 +- 91 +- 75 +- 106 +- 43 +- 66 +- 184 +- 103 +- 156 +- 21 +- 42 +- 198 +- 190 +- 9 +- 38 +- 167 +- 126 +- 51 +- 42 +- 57 +- 168 +- 27 +- 91 +- 149 +- 128 +- 58 +- 187 +- 112 +- 69 +- 120 +- 14 +- 43 +- 0 +- 144 +- 69 +- 24 +- 60 +- 61 +- 55 +- 29 +- 38 +- 117 +- 21 +- 30 +- 175 +- 96 +- 38 +- 182 +- 53 +- 145 +- 101 +- 121 +- 67 +- 154 +- 171 +- 152 +- 90 +- 153 +- 76 +- 56 +- 92 +- 32 +- 66 +- 177 +- 66 +- 21 +- 23 +- 9 +- 64 +- 32 +- 91 +- 72 +- 4 +- 140 +- 3 +- 174 +- 156 +- 100 +- 152 +- 145 +- 95 +- 19 +- 64 +- 63 +- 178 +- 114 +- 113 +- 78 +- 145 +- 25 +- 119 +- 85 +- 58 +- 3 +- 115 +- 99 +- 143 +- 45 +- 122 +- 154 +- 142 +- 67 +- 190 +- 26 +- 9 +- 151 +- 34 +- 21 +- 187 +- 35 +- 77 +- 156 +- 36 +- 171 +- 101 +- 146 +- 35 +- 72 +- 36 +- 72 +- 116 +- 145 +- 185 +- 38 +- 113 +- 4 +- 99 +- 125 +- 15 +- 158 +- 91 +- 151 +- 18 +- 134 +- 26 +- 152 +- 66 +- 118 +- 68 +- 96 +- 140 +- 156 +- 67 +- 113 +- 90 +- 75 +- 20 +- 95 +- 100 +- 125 +- 28 +- 60 +- 49 +- 93 +- 161 +- 8 +- 19 +- 100 +- 93 +- 27 +- 149 +- 94 +- 5 +- 35 +- 64 +- 121 +- 159 +- 38 +- 71 +- 185 +- 67 +- 117 +- 170 +- 94 +- 78 +- 0 +- 153 +- 8 +- 58 +- 76 +- 122 +- 41 +- 97 +- 36 +- 53 +- 116 +- 15 +- 21 +- 98 +- 165 +- 85 +- 185 +- 63 +- 21 +- 194 +- 57 +- 37 +- 140 +- 59 +- 60 +- 79 +- 53 +- 90 +- 179 +- 36 +- 198 +- 63 +- 125 +- 113 +- 20 +- 59 +- 86 +- 28 +- 26 +- 20 +- 39 +- 113 +- 122 +- 77 +- 90 +- 65 +- 159 +- 102 +- 58 +- 24 +- 179 +- 72 +- 50 +- 48 +- 102 +- 149 +- 60 +- 14 +- 96 +- 26 +- 133 +- 72 +- 147 +- 53 +- 1 +- 11 +- 60 +- 195 +- 171 +- 179 +- 148 +- 95 +- 58 +- 50 +- 157 +- 129 +- 48 +- 84 +- 122 +- 189 +- 34 +- 174 +- 134 +- 60 +- 73 +- 56 +- 20 +- 189 +- 67 +- 182 +- 78 +- 74 +- 72 +- 73 +- 48 +- 133 +- 72 +- 144 +- 25 +- 192 +- 134 +- 106 +- 160 +- 23 +- 14 +- 0 +- 67 +- 46 +- 158 +- 158 +- 140 +- 149 +- 187 +- 87 +- 21 +- 136 +- 109 +- 129 +- 150 +- 44 +- 62 +- 111 +- 44 +- 104 +- 0 +- 132 +- 93 +- 65 +- 136 +- 67 +- 164 +- 153 +- 31 +- 57 +- 171 +- 113 +- 182 +- 114 +- 134 +- 187 +- 152 +- 148 +- 163 +- 25 +- 124 +- 127 +- 56 +- 182 +- 86 +- 127 +- 119 +- 186 +- 81 +- 106 +- 75 +- 14 +- 86 +- 44 +- 93 +- 99 +- 112 +- 77 +- 129 +- 160 +- 10 +- 37 +- 180 +- 3 +- 28 +- 175 +- 35 +- 122 +- 81 +- 195 +- 180 +- 82 +- 60 +- 181 +- 93 +- 144 +- 11 +- 24 +- 93 +- 72 +- 44 +- 43 +- 181 +- 87 +- 3 +- 146 +- 160 +- 154 +- 53 +- 160 +- 133 +- 77 +- 27 +- 149 +- 82 +- 90 +- 145 +- 144 +- 113 +- 125 +- 162 +- 189 +- 65 +- 151 +- 93 +- 115 +- 164 +- 58 +- 143 +- 101 +- 168 +- 57 +- 57 +- 27 +- 153 +- 140 +- 7 +- 128 +- 1 +- 35 +- 100 +- 168 +- 192 +- 27 +- 36 +- 24 +- 68 +- 149 +- 153 +- 108 +- 38 +- 128 +- 125 +- 63 +- 58 +- 94 +- 120 +- 0 +- 36 +- 51 +- 1 +- 168 +- 107 +- 129 +- 162 +- 41 +- 23 +- 94 +- 6 +- 65 +- 131 +- 79 +- 33 +- 27 +- 11 +- 149 +- 25 +- 112 +- 15 +- 29 +- 137 +- 171 +- 14 +- 178 +- 20 +- 63 +- 29 +- 47 +- 73 +- 171 +- 87 +- 93 +- 115 +- 7 +- 48 +- 187 +- 36 +- 77 +- 192 +- 0 +- 44 +- 47 +- 90 +- 120 +- 132 +- 139 +- 98 +- 157 +- 93 +- 157 +- 106 +- 41 +- 49 +- 110 +- 133 +- 27 +- 50 +- 149 +- 139 +- 7 +- 27 +- 28 +- 193 +- 3 +- 13 +- 66 +- 103 +- 69 +- 129 +- 90 +- 64 +- 198 +- 62 +- 158 +- 182 +- 27 +- 150 +- 72 +- 57 +- 28 +- 139 +- 110 +- 154 +- 137 +- 12 +- 177 +- 192 +- 153 +- 35 +- 101 +- 3 +- 20 +- 0 +- 38 +- 174 +- 137 +- 96 +- 109 +- 124 +- 104 +- 179 +- 192 +- 27 +- 143 +- 171 +- 41 +- 91 +- 96 +- 37 +- 62 +- 74 +- 146 +- 24 +- 174 +- 8 +- 64 +- 63 +- 178 +- 17 +- 13 +- 71 +- 108 +- 27 +- 82 +- 171 +- 185 +- 20 +- 158 +- 78 +- 19 +- 87 +- 112 +- 192 +- 72 +- 48 +- 192 +- 53 +- 41 +- 10 +- 14 +- 26 +- 122 +- 53 +- 0 +- 165 +- 170 +- 53 +- 12 +- 32 +- 37 +- 106 +- 191 +- 90 +- 132 +- 136 +- 50 +- 48 +- 32 +- 86 +- 130 +- 171 +- 164 +- 10 +- 49 +- 115 +- 71 +- 188 +- 90 +- 134 +- 97 +- 53 +- 129 +- 129 +- 163 +- 82 +- 140 +- 33 +- 113 +- 94 +- 94 +- 11 +- 122 +- 141 +- 101 +- 158 +- 112 +- 50 +- 30 +- 17 +- 195 +- 146 +- 174 +- 137 +- 156 +- 133 +- 42 +- 137 +- 72 +- 93 +- 134 +- 63 +- 71 +- 184 +- 79 +- 58 +- 19 +- 35 +- 79 +- 95 +- 167 +- 179 +- 45 +- 48 +- 181 +- 151 +- 109 +- 186 +- 127 +- 153 +- 125 +- 65 +- 13 +- 30 +- 119 +- 68 +- 9 +- 18 +- 19 +- 165 +- 71 +- 90 +- 189 +- 60 +- 52 +- 145 +- 198 +- 70 +- 63 +- 192 +- 91 +- 66 +- 23 +- 116 +- 19 +- 4 +- 53 +- 78 +- 117 +- 112 +- 34 +- 3 +- 178 +- 179 +- 92 +- 74 +- 124 +- 69 +- 135 +- 141 +- 188 +- 17 +- 87 +- 134 +- 65 +- 20 +- 70 +- 197 +- 180 +- 71 +- 153 +- 101 +- 74 +- 142 +- 7 +- 153 +- 156 +- 189 +- 152 +- 5 +- 29 +- 101 +- 112 +- 40 +- 97 +- 14 +- 38 +- 182 +- 164 +- 140 +- 136 +- 33 +- 170 +- 20 +- 184 +- 144 +- 132 +- 194 +- 98 +- 109 +- 27 +- 50 +- 65 +- 175 +- 114 +- 95 +- 44 +- 103 +- 99 +- 83 +- 37 +- 78 +- 102 +- 113 +- 42 +- 109 +- 11 +- 170 +- 51 +- 49 +- 105 +- 162 +- 189 +- 35 +- 53 +- 28 +- 60 +- 57 +- 176 +- 33 +- 25 +- 2 +- 176 +- 173 +- 159 +- 72 +- 120 +- 88 +- 73 +- 105 +- 54 +- 113 +- 65 +- 30 +- 26 +- 132 +- 140 +- 61 +- 179 +- 119 +- 33 +- 113 +- 96 +- 68 +- 82 +- 94 +- 128 +- 150 +- 54 +- 44 +- 189 +- 87 +- 142 +- 23 +- 82 +- 194 +- 4 +- 72 +- 60 +- 7 +- 15 +- 37 +- 55 +- 171 +- 194 +- 183 +- 177 +- 126 +- 132 +- 166 +- 193 +- 120 +- 153 +- 12 +- 110 +- 119 +- 56 +- 12 +- 131 +- 47 +- 186 +- 95 +- 161 +- 93 +- 30 +- 98 +- 66 +- 138 +- 74 +- 48 +- 60 +- 82 +- 92 +- 49 +- 108 +- 35 +- 100 +- 98 +- 30 +- 45 +- 73 +- 41 +- 64 +- 171 +- 66 +- 100 +- 159 +- 61 +- 35 +- 35 +- 48 +- 170 +- 27 +- 76 +- 140 +- 151 +- 67 +- 125 +- 103 +- 9 +- 102 +- 168 +- 35 +- 37 +- 63 +- 187 +- 194 +- 168 +- 113 +- 158 +- 116 +- 50 +- 30 +- 122 +- 0 +- 147 +- 133 +- 20 +- 150 +- 82 +- 153 +- 163 +- 79 +- 141 +- 109 +- 199 +- 42 +- 153 +- 50 +- 193 +- 171 +- 38 +- 113 +- 77 +- 48 +- 197 +- 170 +- 24 +- 170 +- 66 +- 160 +- 69 +- 102 +- 112 +- 26 +- 97 +- 148 +- 53 +- 57 +- 63 +- 111 +- 42 +- 8 +- 64 +- 155 +- 126 +- 57 +- 142 +- 149 +- 96 +- 98 +- 79 +- 142 +- 165 +- 35 +- 90 +- 28 +- 97 +- 81 +- 125 +- 192 +- 73 +- 90 +- 72 +- 82 +- 25 +- 193 +- 8 +- 160 +- 125 +- 54 +- 198 +- 170 +- 95 +- 12 +- 134 +- 50 +- 113 +- 28 +- 194 +- 132 +- 78 +- 100 +- 114 +- 139 +- 171 +- 67 +- 14 +- 99 +- 103 +- 64 +- 101 +- 192 +- 21 +- 172 +- 69 +- 138 +- 91 +- 115 +- 51 +- 16 +- 145 +- 168 +- 185 +- 123 +- 67 +- 100 +- 131 +- 48 +- 21 +- 73 +- 167 +- 113 +- 46 +- 168 +- 132 +- 149 +- 159 +- 94 +- 111 +- 138 +- 78 +- 60 +- 45 +- 37 +- 159 +- 43 +- 192 +- 18 +- 25 +- 101 +- 79 +- 60 +- 63 +- 149 +- 72 +- 66 +- 51 +- 56 +- 117 +- 64 +- 120 +- 77 +- 7 +- 162 +- 145 +- 187 +- 183 +- 108 +- 163 +- 106 +- 82 +- 139 +- 64 +- 71 +- 130 +- 49 +- 33 +- 125 +- 145 +- 38 +- 148 +- 9 +- 185 +- 192 +- 57 +- 86 +- 1 +- 187 +- 34 +- 148 +- 47 +- 113 +- 128 +- 58 +- 6 +- 13 +- 83 +- 41 +- 90 +- 37 +- 70 +- 74 +- 143 +- 53 +- 5 +- 130 +- 186 +- 193 +- 102 +- 129 +- 195 +- 4 +- 98 +- 196 +- 128 +- 184 +- 68 +- 156 +- 8 +- 129 +- 124 +- 49 +- 148 +- 14 +- 148 +- 67 +- 57 +- 13 +- 20 +- 145 +- 11 +- 99 +- 143 +- 125 +- 176 +- 20 +- 163 +- 74 +- 130 +- 0 +- 198 +- 65 +- 124 +- 153 +- 95 +- 44 +- 173 +- 173 +- 3 +- 49 +- 186 +- 193 +- 120 +- 153 +- 152 +- 129 +- 115 +- 17 +- 102 +- 198 +- 5 +- 161 +- 68 +- 156 +- 70 +- 113 +- 195 +- 98 +- 128 +- 90 +- 12 +- 135 +- 104 +- 132 +- 50 +- 76 +- 44 +- 43 +- 166 +- 112 +- 78 +- 82 +- 29 +- 125 +- 28 +- 129 +- 119 +- 137 +- 88 +- 0 +- 38 +- 113 +- 91 +- 77 +- 23 +- 179 +- 194 +- 185 +- 166 +- 96 +- 149 +- 49 +- 54 +- 106 +- 192 +- 43 +- 25 +- 173 +- 30 +- 58 +- 104 +- 113 +- 33 +- 183 +- 157 +- 55 +- 183 +- 198 +- 135 +- 53 +- 24 +- 30 +- 45 +- 142 +- 93 +- 57 +- 17 +- 39 +- 122 +- 73 +- 28 +- 38 +- 195 +- 106 +- 195 +- 124 +- 171 +- 97 +- 142 +- 94 +- 189 +- 43 +- 133 +- 60 +- 152 +- 113 +- 24 +- 186 +- 75 +- 48 +- 20 +- 12 +- 179 +- 132 +- 3 +- 69 +- 173 +- 53 +- 45 +- 78 +- 190 +- 147 +- 60 +- 107 +- 69 +- 148 +- 10 +- 53 +- 55 +- 0 +- 106 +- 95 +- 42 +- 94 +- 177 +- 128 +- 125 +- 195 +- 7 +- 140 +- 3 +- 131 +- 72 +- 189 +- 102 +- 75 +- 17 +- 172 +- 145 +- 100 +- 141 +- 93 +- 79 +- 155 +- 160 +- 3 +- 42 +- 141 +- 18 +- 152 +- 47 +- 33 +- 7 +- 92 +- 11 +- 21 +- 61 +- 3 +- 191 +- 38 +- 143 +- 151 +- 80 +- 100 +- 83 +- 132 +- 174 +- 198 +- 153 +- 142 +- 72 +- 36 +- 103 +- 170 +- 29 +- 61 +- 70 +- 49 +- 193 +- 117 +- 119 +- 158 +- 140 +- 66 +- 33 +- 111 +- 177 +- 97 +- 177 +- 38 +- 1 +- 19 +- 132 +- 20 +- 116 +- 24 +- 24 +- 111 +- 43 +- 25 +- 25 +- 14 +- 97 +- 49 +- 108 +- 72 +- 167 +- 27 +- 182 +- 79 +- 35 +- 4 +- 196 +- 41 +- 92 +- 27 +- 25 +- 47 +- 110 +- 35 +- 24 +- 35 +- 171 +- 175 +- 191 +- 151 +- 12 +- 101 +- 35 +- 41 +- 100 +- 92 +- 92 +- 69 +- 120 +- 157 +- 90 +- 97 +- 44 +- 95 +- 118 +- 72 +- 78 +- 2 +- 113 +- 173 +- 160 +- 80 +- 49 +- 100 +- 73 +- 38 +- 141 +- 67 +- 38 +- 122 +- 153 +- 145 +- 131 +- 153 +- 64 +- 116 +- 178 +- 151 +- 101 +- 113 +- 73 +- 6 +- 65 +- 99 +- 125 +- 128 +- 120 +- 20 +- 108 +- 171 +- 169 +- 101 +- 89 +- 26 +- 50 +- 168 +- 91 +- 184 +- 74 +- 178 +- 27 +- 9 +- 97 +- 35 +- 105 +- 53 +- 16 +- 147 +- 197 +- 34 +- 108 +- 134 +- 165 +- 139 +- 102 +- 38 +- 96 +- 157 +- 152 +- 60 +- 112 +- 195 +- 97 +- 73 +- 159 +- 192 +- 21 +- 77 +- 99 +- 113 +- 158 +- 62 +- 123 +- 122 +- 142 +- 137 +- 133 +- 37 +- 98 +- 102 +- 47 +- 138 +- 66 +- 175 +- 90 +- 72 +- 164 +- 24 +- 53 +- 116 +- 114 +- 124 +- 168 +- 141 +- 89 +- 186 +- 88 +- 113 +- 44 +- 5 +- 99 +- 122 +- 106 +- 24 +- 175 +- 150 +- 82 +- 75 +- 174 +- 139 +- 164 +- 182 +- 11 +- 57 +- 144 +- 176 +- 18 +- 31 +- 159 +- 113 +- 58 +- 74 +- 112 +- 188 +- 123 +- 129 +- 177 +- 132 +- 32 +- 113 +- 27 +- 78 +- 83 +- 70 +- 133 +- 24 +- 129 +- 112 +- 78 +- 116 +- 49 +- 60 +- 79 +- 102 +- 67 +- 63 +- 95 +- 20 +- 74 +- 13 +- 6 +- 199 +- 66 +- 151 +- 19 +- 153 +- 198 +- 102 +- 176 +- 178 +- 173 +- 128 +- 131 +- 44 +- 42 +- 82 +- 14 +- 33 +- 196 +- 119 +- 41 +- 73 +- 59 +- 53 +- 53 +- 102 +- 44 +- 53 +- 182 +- 171 +- 49 +- 143 +- 112 +- 131 +- 151 +- 101 +- 185 +- 178 +- 192 +- 128 +- 138 +- 126 +- 3 +- 124 +- 107 +- 33 +- 168 +- 12 +- 175 +- 170 +- 58 +- 13 +- 114 +- 26 +- 86 +- 106 +- 26 +- 48 +- 113 +- 185 +- 42 +- 113 +- 145 +- 65 +- 14 +- 48 +- 91 +- 130 +- 174 +- 99 +- 125 +- 4 +- 75 +- 0 +- 145 +- 74 +- 152 +- 84 +- 7 +- 194 +- 157 +- 137 +- 95 +- 73 +- 25 +- 96 +- 137 +- 139 +- 73 +- 93 +- 132 +- 64 +- 138 +- 167 +- 113 +- 178 +- 179 +- 94 +- 133 +- 135 +- 77 +- 103 +- 70 +- 12 +- 133 +- 73 +- 102 +- 166 +- 14 +- 102 +- 93 +- 138 +- 90 +- 58 +- 153 +- 178 +- 125 +- 38 +- 175 +- 101 +- 96 +- 74 +- 64 +- 190 +- 70 +- 198 +- 30 +- 65 +- 73 +- 133 +- 32 +- 113 +- 109 +- 43 +- 163 +- 94 +- 66 +- 0 +- 156 +- 132 +- 198 +- 101 +- 30 +- 0 +- 102 +- 110 +- 168 +- 53 +- 35 +- 63 +- 71 +- 134 +- 93 +- 120 +- 145 +- 35 +- 44 +- 188 +- 189 +- 159 +- 17 +- 64 +- 134 +- 146 +- 3 +- 186 +- 69 +- 172 +- 142 +- 136 +- 133 +- 138 +- 54 +- 91 +- 123 +- 44 +- 148 +- 156 +- 153 +- 69 +- 20 +- 48 +- 78 +- 97 +- 45 +- 164 +- 57 +- 187 +- 177 +- 171 +- 85 +- 78 +- 146 +- 91 +- 175 +- 24 +- 102 +- 113 +- 89 +- 144 +- 33 +- 84 +- 78 +- 132 +- 14 +- 145 +- 81 +- 57 +- 24 +- 132 +- 93 +- 38 +- 173 +- 113 +- 63 +- 186 +- 42 +- 156 +- 118 +- 158 +- 133 +- 169 +- 4 +- 198 +- 128 +- 52 +- 199 +- 81 +- 71 +- 7 +- 163 +- 49 +- 165 +- 58 +- 101 +- 101 +- 95 +- 9 +- 139 +- 138 +- 142 +- 178 +- 37 +- 22 +- 172 +- 138 +- 113 +- 194 +- 131 +- 72 +- 96 +- 139 +- 58 +- 82 +- 101 +- 99 +- 107 +- 11 +- 147 +- 1 +- 41 +- 160 +- 38 +- 98 +- 38 +- 125 +- 36 +- 148 +- 185 +- 163 +- 112 +- 0 +- 82 +- 150 +- 65 +- 118 +- 120 +- 100 +- 28 +- 88 +- 22 +- 80 +- 24 +- 143 +- 14 +- 112 +- 53 +- 0 +- 192 +- 99 +- 19 +- 4 +- 79 +- 2 +- 68 +- 137 +- 142 +- 113 +- 100 +- 96 +- 178 +- 180 +- 170 +- 93 +- 142 +- 176 +- 88 +- 36 +- 73 +- 150 +- 132 +- 73 +- 186 +- 144 +- 147 +- 64 +- 0 +- 78 +- 75 +- 43 +- 126 +- 137 +- 45 +- 44 +- 18 +- 53 +- 14 +- 152 +- 96 +- 173 +- 50 +- 130 +- 135 +- 114 +- 182 +- 158 +- 20 +- 158 +- 131 +- 77 +- 195 +- 27 +- 44 +- 141 +- 71 +- 198 +- 32 +- 6 +- 27 +- 69 +- 74 +- 133 +- 113 +- 88 +- 31 +- 98 +- 160 +- 31 +- 144 +- 194 +- 176 +- 91 +- 70 +- 63 +- 64 +- 73 +- 90 +- 98 +- 153 +- 36 +- 184 +- 77 +- 11 +- 132 +- 196 +- 128 +- 153 +- 14 +- 138 +- 79 +- 72 +- 11 +- 183 +- 177 +- 45 +- 159 +- 15 +- 45 +- 198 +- 152 +- 173 +- 116 +- 82 +- 182 +- 79 +- 30 +- 53 +- 179 +- 164 +- 82 +- 68 +- 154 +- 137 +- 91 +- 5 +- 132 +- 128 +- 73 +- 175 +- 129 +- 74 +- 43 +- 94 +- 23 +- 106 +- 198 +- 44 +- 173 +- 152 +- 98 +- 48 +- 174 +- 133 +- 14 +- 166 +- 105 +- 62 +- 171 +- 115 +- 51 +- 132 +- 170 +- 37 +- 163 +- 17 +- 140 +- 151 +- 73 +- 91 +- 18 +- 199 +- 48 +- 72 +- 102 +- 182 +- 161 +- 61 +- 77 +- 63 +- 87 +- 14 +- 13 +- 77 +- 58 +- 76 +- 78 +- 26 +- 113 +- 30 +- 25 +- 145 +- 127 +- 125 +- 59 +- 58 +- 51 +- 91 +- 24 +- 14 +- 99 +- 57 +- 154 +- 161 +- 138 +- 133 +- 25 +- 71 +- 158 +- 156 +- 7 +- 13 +- 3 +- 52 +- 68 +- 120 +- 177 +- 59 +- 117 +- 6 +- 116 +- 87 +- 12 +- 40 +- 186 +- 84 +- 78 +- 179 +- 34 +- 112 +- 56 +- 107 +- 91 +- 90 +- 62 +- 22 +- 15 +- 75 +- 39 +- 35 +- 174 +- 111 +- 64 +- 109 +- 116 +- 192 +- 132 +- 130 +- 144 +- 113 +- 43 +- 139 +- 110 +- 191 +- 69 +- 78 +- 19 +- 33 +- 115 +- 185 +- 57 +- 160 +- 1 +- 183 +- 86 +- 50 +- 168 +- 14 +- 11 +- 125 +- 192 +- 14 +- 16 +- 137 +- 33 +- 198 +- 102 +- 95 +- 172 +- 156 +- 140 +- 113 +- 48 +- 135 +- 53 +- 48 +- 35 +- 94 +- 149 +- 55 +- 3 +- 15 +- 171 +- 128 +- 100 +- 37 +- 154 +- 58 +- 26 +- 174 +- 125 +- 179 +- 163 +- 11 +- 20 +- 138 +- 194 +- 54 +- 11 +- 7 +- 11 +- 185 +- 65 +- 74 +- 93 +- 136 +- 163 +- 38 +- 61 +- 101 +- 115 +- 96 +- 113 +- 148 +- 143 +- 122 +- 116 +- 0 +- 160 +- 186 +- 139 +- 62 +- 111 +- 141 +- 30 +- 123 +- 46 +- 198 +- 137 +- 168 +- 14 +- 76 +- 159 +- 192 +- 32 +- 137 +- 94 +- 74 +- 98 +- 90 +- 46 +- 156 +- 138 +- 15 +- 132 +- 101 +- 168 +- 115 +- 145 +- 196 +- 186 +- 99 +- 15 +- 181 +- 194 +- 0 +- 124 +- 93 +- 142 +- 154 +- 113 +- 63 +- 54 +- 35 +- 12 +- 90 +- 189 +- 168 +- 184 +- 132 +- 96 +- 194 +- 130 +- 118 +- 182 +- 38 +- 69 +- 133 +- 89 +- 163 +- 164 +- 111 +- 0 +- 175 +- 35 +- 99 +- 177 +- 87 +- 144 +- 115 +- 102 +- 44 +- 103 +- 43 +- 93 +- 128 +- 142 +- 15 +- 0 +- 21 +- 63 +- 67 +- 41 +- 98 +- 153 +- 76 +- 22 +- 10 +- 122 +- 132 +- 49 +- 77 +- 97 +- 141 +- 186 +- 74 +- 147 +- 171 +- 130 +- 26 +- 194 +- 185 +- 64 +- 182 +- 159 +- 188 +- 139 +- 66 +- 63 +- 163 +- 32 +- 171 +- 198 +- 91 +- 84 +- 84 +- 51 +- 18 +- 171 +- 51 +- 96 +- 39 +- 194 +- 61 +- 44 +- 53 +- 102 +- 8 +- 118 +- 122 +- 119 +- 52 +- 106 +- 42 +- 163 +- 175 +- 79 +- 83 +- 186 +- 141 +- 48 +- 71 +- 20 +- 184 +- 117 +- 75 +- 105 +- 86 +- 58 +- 50 +- 90 +- 173 +- 154 +- 180 +- 36 +- 179 +- 1 +- 173 +- 114 +- 93 +- 92 +- 10 +- 194 +- 194 +- 185 +- 153 +- 194 +- 132 +- 41 +- 182 +- 30 +- 187 +- 62 +- 148 +- 158 +- 184 +- 13 +- 58 +- 44 +- 177 +- 61 +- 43 +- 7 +- 164 +- 152 +- 30 +- 87 +- 107 +- 133 +- 94 +- 48 +- 10 +- 140 +- 194 +- 141 +- 116 +- 198 +- 125 +- 68 +- 113 +- 94 +- 118 +- 134 +- 20 +- 32 +- 61 +- 61 +- 91 +- 73 +- 7 +- 116 +- 87 +- 39 +- 81 +- 33 +- 172 +- 159 +- 22 +- 17 +- 97 +- 149 +- 120 +- 25 +- 140 +- 90 +- 139 +- 187 +- 110 +- 156 +- 107 +- 186 +- 75 +- 164 +- 74 +- 55 +- 113 +- 176 +- 191 +- 72 +- 36 +- 35 +- 21 +- 26 +- 113 +- 180 +- 198 +- 15 +- 29 +- 79 +- 72 +- 198 +- 188 +- 61 +- 130 +- 96 +- 57 +- 78 +- 142 +- 120 +- 4 +- 50 +- 13 +- 12 +- 121 +- 112 +- 128 +- 65 +- 43 +- 92 +- 35 +- 163 +- 112 +- 9 +- 37 +- 93 +- 54 +- 75 +- 100 +- 175 +- 97 +- 24 +- 192 +- 197 +- 154 +- 189 +- 152 +- 177 +- 69 +- 14 +- 184 +- 50 +- 61 +- 70 +- 85 +- 116 +- 133 +- 48 +- 111 +- 153 +- 177 +- 113 +- 25 +- 133 +- 158 +- 167 +- 102 +- 95 +- 93 +- 14 +- 79 +- 57 +- 51 +- 107 +- 98 +- 144 +- 5 +- 171 +- 198 +- 75 +- 85 +- 110 +- 1 +- 139 +- 36 +- 9 +- 36 +- 138 +- 132 +- 171 +- 174 +- 3 +- 191 +- 65 +- 172 +- 188 +- 5 +- 2 +- 30 +- 53 +- 42 +- 158 +- 33 +- 58 +- 17 +- 173 +- 186 +- 102 +- 157 +- 172 +- 199 +- 91 +- 72 +- 36 +- 169 +- 116 +- 173 +- 33 +- 191 +- 20 +- 2 +- 125 +- 120 +- 140 +- 100 +- 58 +- 194 +- 80 +- 91 +- 198 +- 91 +- 90 +- 14 +- 35 +- 128 +- 5 +- 170 +- 173 +- 82 +- 1 +- 58 +- 58 +- 111 +- 27 +- 135 +- 36 +- 21 +- 145 +- 160 +- 184 +- 122 +- 15 +- 170 +- 77 +- 110 +- 60 +- 53 +- 179 +- 90 +- 47 +- 69 +- 153 +- 113 +- 192 +- 156 +- 22 +- 170 +- 64 +- 65 +- 168 +- 45 +- 69 +- 70 +- 80 +- 63 +- 60 +- 93 +- 108 +- 53 +- 65 +- 73 +- 53 +- 181 +- 113 +- 168 +- 14 +- 50 +- 112 +- 135 +- 159 +- 90 +- 125 +- 97 +- 142 +- 171 +- 122 +- 168 +- 162 +- 11 +- 164 +- 189 +- 102 +- 149 +- 35 +- 168 +- 170 +- 149 +- 114 +- 9 +- 114 +- 41 +- 171 +- 57 +- 90 +- 102 +- 142 +- 189 +- 35 +- 27 +- 50 +- 53 +- 194 +- 97 +- 140 +- 148 +- 187 +- 29 +- 50 +- 18 +- 102 +- 112 +- 110 +- 12 +- 44 +- 85 +- 57 +- 128 +- 101 +- 50 +- 176 +- 115 +- 35 +- 170 +- 183 +- 24 +- 22 +- 61 +- 89 +- 189 +- 125 +- 47 +- 7 +- 153 +- 120 +- 21 +- 133 +- 111 +- 133 +- 2 +- 183 +- 186 +- 181 +- 141 +- 143 +- 139 +- 154 +- 14 +- 11 +- 73 +- 10 +- 60 +- 182 +- 24 +- 81 +- 115 +- 168 +- 137 +- 72 +- 96 +- 65 +- 132 +- 87 +- 13 +- 195 +- 4 +- 114 +- 132 +- 120 +- 187 +- 91 +- 8 +- 76 +- 4 +- 68 +- 122 +- 63 +- 49 +- 155 +- 47 +- 95 +- 65 +- 0 +- 60 +- 118 +- 182 +- 73 +- 173 +- 51 +- 25 +- 189 +- 113 +- 125 +- 29 +- 36 +- 82 +- 58 +- 92 +- 74 +- 156 +- 119 +- 47 +- 128 +- 35 +- 142 +- 158 +- 41 +- 101 +- 57 +- 100 +- 138 +- 44 +- 96 +- 95 +- 23 +- 64 +- 37 +- 154 +- 21 +- 132 +- 48 +- 53 +- 91 +- 52 +- 114 +- 114 +- 199 +- 99 +- 13 +- 158 +- 9 +- 31 +- 53 +- 29 +- 49 +- 159 +- 33 +- 101 +- 82 +- 21 +- 14 +- 119 +- 65 +- 53 +- 21 +- 61 +- 132 +- 171 +- 72 +- 71 +- 22 +- 9 +- 22 +- 135 +- 92 +- 58 +- 24 +- 164 +- 118 +- 186 +- 118 +- 169 +- 122 +- 104 +- 51 +- 107 +- 55 +- 72 +- 134 +- 77 +- 132 +- 22 +- 107 +- 198 +- 90 +- 61 +- 110 +- 1 +- 44 +- 43 +- 186 +- 185 +- 48 +- 158 +- 140 +- 52 +- 60 +- 194 +- 23 +- 20 +- 72 +- 45 +- 89 +- 26 +- 137 +- 148 +- 119 +- 89 +- 45 +- 75 +- 134 +- 7 +- 154 +- 10 +- 32 +- 86 +- 184 +- 136 +- 70 +- 47 +- 41 +- 115 +- 132 +- 158 +- 25 +- 152 +- 113 +- 175 +- 125 +- 125 +- 160 +- 72 +- 78 +- 193 +- 77 +- 82 +- 28 +- 1 +- 9 +- 33 +- 175 +- 113 +- 54 +- 125 +- 20 +- 142 +- 168 +- 91 +- 27 +- 50 +- 123 +- 142 +- 69 +- 164 +- 129 +- 91 +- 73 +- 6 +- 14 +- 115 +- 115 +- 172 +- 57 +- 133 +- 111 +- 116 +- 181 +- 152 +- 72 +- 57 +- 90 +- 24 +- 158 +- 158 +- 61 +- 198 +- 40 +- 166 +- 62 +- 120 +- 55 +- 28 +- 192 +- 158 +- 35 +- 125 +- 121 +- 46 +- 73 +- 36 +- 29 +- 66 +- 46 +- 33 +- 35 +- 59 +- 66 +- 24 +- 185 +- 148 +- 63 +- 112 +- 44 +- 88 +- 9 +- 97 +- 103 +- 38 +- 148 +- 171 +- 98 +- 53 +- 126 +- 152 +- 84 +- 57 +- 104 +- 63 +- 198 +- 160 +- 73 +- 91 +- 140 +- 191 +- 127 +- 6 +- 30 +- 188 +- 99 +- 182 +- 76 +- 101 +- 174 +- 117 +- 82 +- 28 +- 43 +- 115 +- 121 +- 134 +- 173 +- 30 +- 82 +- 129 +- 48 +- 0 +- 50 +- 169 +- 132 +- 62 +- 3 +- 79 +- 45 +- 59 +- 31 +- 187 +- 159 +- 5 +- 118 +- 67 +- 48 +- 178 +- 74 +- 101 +- 68 +- 97 +- 3 +- 56 +- 28 +- 153 +- 50 +- 82 +- 120 +- 35 +- 95 +- 132 +- 106 +- 27 +- 163 +- 36 +- 37 +- 67 +- 198 +- 87 +- 86 +- 91 +- 127 +- 102 +- 101 +- 131 +- 86 +- 50 +- 130 +- 152 +- 0 +- 92 +- 160 +- 147 +- 132 +- 63 +- 82 +- 171 +- 21 +- 118 +- 175 +- 94 +- 6 +- 30 +- 77 +- 0 +- 53 +- 155 +- 123 +- 140 +- 91 +- 167 +- 97 +- 122 +- 196 +- 43 +- 45 +- 188 +- 33 +- 74 +- 141 +- 158 +- 79 +- 79 +- 19 +- 95 +- 72 +- 38 +- 57 +- 153 +- 69 +- 185 +- 76 +- 174 +- 83 +- 39 +- 95 +- 58 +- 99 +- 56 +- 76 +- 36 +- 132 +- 168 +- 132 +- 168 +- 178 +- 122 +- 122 +- 69 +- 25 +- 106 +- 30 +- 127 +- 39 +- 172 +- 47 +- 33 +- 55 +- 120 +- 76 +- 40 +- 88 +- 14 +- 77 +- 78 +- 146 +- 144 +- 120 +- 20 +- 73 +- 78 +- 78 +- 1 +- 124 +- 53 +- 3 +- 117 +- 73 +- 186 +- 192 +- 160 +- 82 +- 87 +- 40 +- 114 +- 33 +- 190 +- 177 +- 35 +- 122 +- 35 +- 113 +- 185 +- 3 +- 36 +- 117 +- 72 +- 126 +- 30 +- 22 +- 159 +- 14 +- 0 +- 160 +- 50 +- 60 +- 172 +- 73 +- 64 +- 173 +- 76 +- 159 +- 182 +- 58 +- 95 +- 158 +- 93 +- 102 +- 113 +- 158 +- 119 +- 53 +- 152 +- 33 +- 68 +- 113 +- 168 +- 53 +- 186 +- 26 +- 152 +- 44 +- 111 +- 164 +- 69 +- 81 +- 144 +- 169 +- 151 +- 111 +- 94 +- 53 +- 110 +- 11 +- 170 +- 158 +- 58 +- 72 +- 122 +- 101 +- 72 +- 15 +- 163 +- 122 +- 187 +- 111 +- 91 +- 186 +- 180 +- 14 +- 31 +- 24 +- 58 +- 14 +- 116 +- 85 +- 173 +- 23 +- 98 +- 37 +- 149 +- 47 +- 54 +- 97 +- 2 +- 191 +- 5 +- 70 +- 177 +- 126 +- 137 +- 160 +- 94 +- 80 +- 11 +- 135 +- 26 +- 51 +- 73 +- 53 +- 35 +- 94 +- 0 +- 102 +- 58 +- 148 +- 63 +- 131 +- 187 +- 37 +- 193 +- 184 +- 3 +- 74 +- 18 +- 69 +- 133 +- 132 +- 59 +- 69 +- 65 +- 106 +- 176 +- 11 +- 100 +- 62 +- 37 +- 73 +- 142 +- 179 +- 14 +- 177 +- 72 +- 76 +- 55 +- 183 +- 114 +- 37 +- 146 +- 20 +- 20 +- 100 +- 57 +- 99 +- 96 +- 114 +- 165 +- 152 +- 49 +- 146 +- 164 +- 185 +- 74 +- 183 +- 97 +- 82 +- 35 +- 20 +- 164 +- 173 +- 24 +- 63 +- 127 +- 128 +- 120 +- 3 +- 72 +- 66 +- 100 +- 95 +- 128 +- 86 +- 175 +- 180 +- 187 +- 109 +- 60 +- 52 +- 104 +- 3 +- 141 +- 109 +- 198 +- 98 +- 168 +- 3 +- 3 +- 0 +- 142 +- 143 +- 119 +- 177 +- 115 +- 189 +- 124 +- 71 +- 152 +- 24 +- 0 +- 171 +- 93 +- 153 +- 18 +- 147 +- 70 +- 67 +- 123 +- 162 +- 95 +- 96 +- 164 +- 108 +- 149 +- 56 +- 184 +- 120 +- 68 +- 27 +- 66 +- 141 +- 115 +- 58 +- 185 +- 53 +- 118 +- 119 +- 97 +- 12 +- 110 +- 125 +- 86 +- 142 +- 158 +- 181 +- 64 +- 129 +- 28 +- 46 +- 110 +- 150 +- 69 +- 133 +- 111 +- 192 +- 132 +- 198 +- 84 +- 95 +- 138 +- 162 +- 93 +- 131 +- 154 +- 124 +- 164 +- 190 +- 127 +- 10 +- 178 +- 171 +- 21 +- 51 +- 47 +- 29 +- 53 +- 12 +- 106 +- 170 +- 103 +- 178 +- 171 +- 68 +- 113 +- 139 +- 79 +- 118 +- 171 +- 56 +- 103 +- 158 +- 49 +- 142 +- 13 +- 78 +- 20 +- 12 +- 145 +- 164 +- 36 +- 0 +- 172 +- 1 +- 96 +- 171 +- 35 +- 47 +- 81 +- 133 +- 60 +- 170 +- 14 +- 171 +- 62 +- 190 +- 149 +- 133 +- 171 +- 69 +- 93 +- 142 +- 49 +- 168 +- 117 +- 53 +- 76 +- 139 +- 171 +- 63 +- 115 +- 139 +- 12 +- 28 +- 20 +- 32 +- 93 +- 4 +- 68 +- 27 +- 113 +- 4 +- 169 +- 86 +- 66 +- 113 +- 122 +- 133 +- 192 +- 3 +- 44 +- 79 diff --git a/datasets/imagenet_r_utils/label_to_class_name.pkl b/datasets/imagenet_r_utils/label_to_class_name.pkl new file mode 100644 index 00000000..7ba92a30 Binary files /dev/null and b/datasets/imagenet_r_utils/label_to_class_name.pkl differ diff --git a/datasets/mnist_360.py b/datasets/mnist_360.py index 1fa2d580..d97a2607 100644 --- a/datasets/mnist_360.py +++ b/datasets/mnist_360.py @@ -5,54 +5,68 @@ from argparse import Namespace from copy import deepcopy -from typing import Tuple +from typing import Callable, List, Tuple import numpy as np import torch import torch.nn.functional as F import torchvision.transforms as transforms -from backbone.MNISTMLP import MNISTMLP -from torch.utils.data import DataLoader from torchvision.datasets import MNIST +from backbone.MNISTMLP import MNISTMLP from datasets.perm_mnist import MyMNIST from datasets.transforms.rotation import IncrementalRotation from datasets.utils.gcl_dataset import GCLDataset from datasets.utils.validation import get_train_val -from utils.conf import base_path_dataset as base_path +from utils.conf import base_path, create_seeded_dataloader -class MNIST360(GCLDataset): +def custom_collate_unbatch(batch) -> List[torch.Tensor]: """ - MNIST-360 general continual dataset. + Custom collate function to unbatch a batch of data. + + Args: + batch (list): A list of tensors representing a batch of data. + + Returns: + list: A list of tensors, where each tensor is unbatched from the input batch. """ - NAME = 'mnist-360' - SETTING = 'general-continual' - N_CLASSES = 9 - LENGTH = 54051 + return [b.squeeze(0) for b in torch.utils.data._utils.collate.default_collate(batch)] - def __init__(self, args: Namespace) -> None: - self.num_rounds = 3 - self.args = args - self.train_over, self.test_over = False, False - self.train_loaders, self.test_loaders = [], [] - self.remaining_training_items = [] - self.val_dataset = None +class MNIST360(torch.utils.data.Dataset): + """A custom dataset class for MNIST360 that provides training and testing data + with incremental rotation for each class. - self.train_classes = [0, 1] - self.completed_rounds, self.test_class, self.test_iteration = 0, 0, 0 + Args: + args (object): An object containing the arguments for the dataset. + is_train (bool): A flag indicating whether the dataset is for training or testing. - self.init_train_loaders() - self.init_test_loaders() + Attributes: + N_CLASSES (int): The number of classes in the dataset. + dataset (list): A list of data loaders for each class. + remaining_training_items (list): A list of the remaining training items for each class. + num_rounds (int): The number of rounds for each class. + args (object): An object containing the arguments for the dataset. + is_train (bool): A flag indicating whether the dataset is for training or testing. + is_over (bool): A flag indicating whether the dataset is completed. + completed_rounds (int): The number of completed rounds. + test_class (int): The current test class index. + test_iteration (int): The current test iteration index. + train_classes (list): A list of the current training classes. + active_train_loaders (list): A list of the active training data loaders. + current_items (int): The current number of items in the dataset. + """ - self.active_train_loaders = [ - self.train_loaders[self.train_classes[0]].pop(), - self.train_loaders[self.train_classes[1]].pop()] + N_CLASSES = 9 - self.active_remaining_training_items = [ - self.remaining_training_items[self.train_classes[0]].pop(), - self.remaining_training_items[self.train_classes[1]].pop()] + def __init__(self, args: Namespace, is_train: bool = False) -> None: + super().__init__() + self.num_rounds = 3 + self.args = args + self.is_train = is_train + + self.reinit() def train_next_class(self) -> None: """ @@ -68,29 +82,32 @@ def train_next_class(self) -> None: if self.train_classes[0] == 0: self.completed_rounds += 1 if self.completed_rounds == 3: - self.train_over = True + self.is_over = True - if not self.train_over: + if not self.is_over: self.active_train_loaders = [ - self.train_loaders[self.train_classes[0]].pop(), - self.train_loaders[self.train_classes[1]].pop()] - self.active_remaining_training_items = [ + self.dataset[self.train_classes[0]].pop(), + self.dataset[self.train_classes[1]].pop()] + self.active_remaining_items = [ self.remaining_training_items[self.train_classes[0]].pop(), self.remaining_training_items[self.train_classes[1]].pop()] def init_train_loaders(self) -> None: """ - Initializes the test loader. + Initializes the train loader. """ + self.remaining_training_items = [] + self.dataset = [] + train_dataset = MyMNIST(base_path() + 'MNIST', train=True, download=True) if self.args.validation: test_transform = transforms.ToTensor() train_dataset, self.val_dataset = get_train_val( - train_dataset, test_transform, self.NAME) + train_dataset, test_transform, 'mnist-360', val_perc=self.args.validation / 100) for j in range(self.N_CLASSES): - self.train_loaders.append([]) + self.dataset.append([]) self.remaining_training_items.append([]) train_mask = np.isin(np.array(train_dataset.targets), [j]) train_rotation = IncrementalRotation(init_deg=(j - 1) * 60, @@ -104,8 +121,8 @@ def init_train_loaders(self) -> None: train_mask][k * numbers_per_batch:(k + 1) * numbers_per_batch] tmp_train_dataset.transform = transforms.Compose( [train_rotation, transforms.ToTensor()]) - self.train_loaders[-1].append(DataLoader( - tmp_train_dataset, batch_size=1, shuffle=True)) + self.dataset[-1].append(create_seeded_dataloader(self.args, + tmp_train_dataset, batch_size=1, shuffle=True, num_workers=0)) self.remaining_training_items[-1].append( tmp_train_dataset.data.shape[0]) @@ -113,8 +130,15 @@ def init_test_loaders(self) -> None: """ Initializes the test loader. """ + self.remaining_training_items = [] + self.dataset = [] + if self.args.validation: - test_dataset = self.val_dataset + test_transform = transforms.ToTensor() + train_dataset = MyMNIST(base_path() + 'MNIST', + train=True, download=True) + _, test_dataset = get_train_val( + train_dataset, test_transform, 'mnist-360', val_perc=self.args.validation / 100) else: test_dataset = MNIST(base_path() + 'MNIST', train=False, download=True) @@ -127,24 +151,27 @@ def init_test_loaders(self) -> None: increase_per_iteration=360.0 / test_mask.sum()) tmp_test_dataset.transform = transforms.Compose( [test_rotation, transforms.ToTensor()]) - self.test_loaders.append(DataLoader(tmp_test_dataset, - batch_size=self.args.batch_size, shuffle=True)) + self.dataset.append(create_seeded_dataloader(self.args, tmp_test_dataset, + batch_size=self.args.batch_size, shuffle=False, num_workers=0)) def get_train_data(self) -> Tuple[torch.Tensor, torch.Tensor, torch.Tensor]: + """Ensembles the next examples of the current classes in a single batch. + + Returns: + Tensor: The batch of examples. + + Tensor: The labels of the examples. + + Tensor: The batch of examples without augmentation. """ - Ensembles the next examples of the current classes in a single batch. - :return: the augmented and not aumented version of the examples of the - current batch, along with their labels. - """ - assert not self.train_over - batch_size_0 = min(int(round(self.active_remaining_training_items[0] / - (self.active_remaining_training_items[0] + - self.active_remaining_training_items[1]) * + batch_size_0 = min(int(round(self.active_remaining_items[0] / + (self.active_remaining_items[0] + + self.active_remaining_items[1]) * self.args.batch_size)), - self.active_remaining_training_items[0]) + self.active_remaining_items[0]) batch_size_1 = min(self.args.batch_size - batch_size_0, - self.active_remaining_training_items[1]) + self.active_remaining_items[1]) x_train, y_train, x_train_naug = [], [], [] for j in range(batch_size_0): @@ -159,26 +186,27 @@ def get_train_data(self) -> Tuple[torch.Tensor, torch.Tensor, torch.Tensor]: x_train.append(i_x_train) y_train.append(i_y_train) x_train_naug.append(i_x_train_naug) - x_train, y_train, x_train_naug = torch.cat(x_train),\ + x_train, y_train, x_train_naug = torch.cat(x_train), \ torch.cat(y_train), torch.cat(x_train_naug) - self.active_remaining_training_items[0] -= batch_size_0 - self.active_remaining_training_items[1] -= batch_size_1 + self.active_remaining_items[0] -= batch_size_0 + self.active_remaining_items[1] -= batch_size_1 - if self.active_remaining_training_items[0] <= 0 or \ - self.active_remaining_training_items[1] <= 0: + if self.active_remaining_items[0] <= 0 or \ + self.active_remaining_items[1] <= 0: self.train_next_class() return x_train, y_train, x_train_naug def get_test_data(self) -> Tuple[torch.Tensor, torch.Tensor]: + """Ensembles the next examples of the current class in a batch. + + Returns: + Tensor: The batch of examples. + Tensor: The labels of the examples. """ - Ensembles the next examples of the current class in a batch. - :return: the batch of examples along with its label. - """ - assert not self.test_over - x_test, y_test = next(iter(self.test_loaders[self.test_class])) - residual_items = len(self.test_loaders[self.test_class].dataset) - \ + x_test, y_test = next(iter(self.dataset[self.test_class])) + residual_items = len(self.dataset[self.test_class].dataset) - \ self.test_iteration * self.args.batch_size - len(x_test) self.test_iteration += 1 if residual_items <= 0: @@ -188,21 +216,102 @@ def get_test_data(self) -> Tuple[torch.Tensor, torch.Tensor]: self.test_iteration = 0 self.test_class += 1 if self.test_class == self.N_CLASSES: - self.test_over = True + self.is_over = True + return x_test, y_test + def reinit(self) -> None: + self.is_over = False + self.completed_rounds, self.test_class, self.test_iteration = 0, 0, 0 + + self.train_classes = [0, 1] + + if self.is_train: + self.init_train_loaders() + else: + self.init_test_loaders() + + if self.is_train: + self.active_train_loaders = [ + self.dataset[self.train_classes[0]].pop(), + self.dataset[self.train_classes[1]].pop()] + + self.active_remaining_items = [ + self.remaining_training_items[self.train_classes[0]].pop(), + self.remaining_training_items[self.train_classes[1]].pop()] + + def __iter__(self): + self.reinit() + + return self + + def __next__(self): + if self.is_over: + raise StopIteration + + if self.is_train: + return self.get_train_data() + else: + return self.get_test_data() + + +class SequentialMNIST360(GCLDataset): + """ + A dataset class for the MNIST-360 dataset in the context of general-continual learning. + + Attributes: + NAME (str): The name of the dataset. + SETTING (str): The setting of the dataset. + N_CLASSES (int): The number of classes in the dataset. + TRANSFORM (torch.nn.Module): The transformation to apply to the data. + SIZE (tuple): The size of the input images. + args (Namespace): An object containing the arguments for the dataset. + """ + NAME = 'mnist-360' + SETTING = 'general-continual' + N_CLASSES = 9 + TRANSFORM = torch.nn.Identity() + SIZE = (28, 28) + + def __init__(self, args: Namespace) -> None: + super().__init__(args) + self.args = args + assert args.label_perc == 1, "MNIST-360 does not support partial labels." + + def get_data_loaders(self) -> Tuple[torch.utils.data.DataLoader, torch.utils.data.DataLoader]: + """ + Get the data loaders for the MNIST360 dataset, add them to the current object and return them. + + Returns: + train_loader (torch.utils.data.DataLoader): DataLoader for the training dataset. + + test_loader (torch.utils.data.DataLoader): DataLoader for the test dataset. + """ + train_dataset = MNIST360(self.args, is_train=True) + test_dataset = MNIST360(self.args, is_train=False) + + # dataset is already shuffled and batched internally - no need for a dataloader + self.test_loaders.append(test_dataset) + self.train_loader = train_dataset + + return train_dataset, test_dataset + @staticmethod def get_backbone() -> torch.nn.Module: return MNISTMLP(28 * 28, 10) @staticmethod - def get_loss() -> F.cross_entropy: + def get_loss() -> Callable: return F.cross_entropy @staticmethod def get_transform(): return None + @staticmethod + def get_normalization_transform(): + return None + @staticmethod def get_denormalization_transform(): return None @@ -212,5 +321,24 @@ def get_batch_size() -> int: return 16 @staticmethod - def get_minibatch_size() -> int: - return 16 + def get_epochs(): + return 1 + + +if __name__ == "__main__": + ds = SequentialMNIST360(Namespace(validation=False, label_perc=1, n_epochs=1, batch_size=16, permute_classes=False, joint=False, num_workers=0, seed=None)) + train, test = ds.get_data_loaders() + + # load all data and save it in results/tmp + import os + import torchvision + from PIL import Image + from tqdm import tqdm + + os.makedirs('../data/results/mnist360images/tmp/train', exist_ok=True) + for i, (x, y, _) in tqdm(enumerate(train), total=len(train)): + torchvision.utils.save_image(x, f'../data/results/mnist360images/tmp/train/{i}.png') + + os.makedirs('../data/results/mnist360images/tmp/test', exist_ok=True) + for i, (x, y) in tqdm(enumerate(test), total=len(test)): + torchvision.utils.save_image(x, f'../data/results/mnist360images/tmp/test/{i}.png') diff --git a/datasets/perm_mnist.py b/datasets/perm_mnist.py index 85dd2418..28d98c11 100644 --- a/datasets/perm_mnist.py +++ b/datasets/perm_mnist.py @@ -3,39 +3,18 @@ # This source code is licensed under the license found in the # LICENSE file in the root directory of this source tree. -from typing import Tuple, Type +from typing import Tuple +import torch import torch.nn.functional as F import torchvision.transforms as transforms -from backbone.MNISTMLP import MNISTMLP from PIL import Image -from torch.utils.data import DataLoader from torchvision.datasets import MNIST +from backbone.MNISTMLP import MNISTMLP from datasets.transforms.permutation import Permutation -from datasets.utils.continual_dataset import ContinualDataset -from datasets.utils.validation import get_train_val -from utils.conf import base_path_dataset as base_path - - -def store_mnist_loaders(transform, setting): - train_dataset = MyMNIST(base_path() + 'MNIST', - train=True, download=True, transform=transform) - if setting.args.validation: - train_dataset, test_dataset = get_train_val(train_dataset, - transform, setting.NAME) - else: - test_dataset = MNIST(base_path() + 'MNIST', - train=False, download=True, transform=transform) - - train_loader = DataLoader(train_dataset, - batch_size=setting.args.batch_size, shuffle=True) - test_loader = DataLoader(test_dataset, - batch_size=setting.args.batch_size, shuffle=False) - setting.test_loaders.append(test_loader) - setting.train_loader = train_loader - - return train_loader, test_loader +from datasets.utils.continual_dataset import ContinualDataset, store_masked_loaders +from utils.conf import base_path class MyMNIST(MNIST): @@ -51,8 +30,12 @@ def __init__(self, root, train=True, transform=None, def __getitem__(self, index: int) -> Tuple[Image.Image, int, Image.Image]: """ Gets the requested element from the dataset. - :param index: index of the element to be returned - :returns: tuple: (image, target) where target is index of the target class. + + Args: + index: index of the element to be returned + + Returns: + tuple: (image, target) where target is index of the target class. """ img, target = self.data[index], int(self.targets[index]) @@ -70,15 +53,34 @@ def __getitem__(self, index: int) -> Tuple[Image.Image, int, Image.Image]: class PermutedMNIST(ContinualDataset): + """Permuted MNIST Dataset. + + Creates a dataset composed by a sequence of tasks, each containing a + different permutation of the pixels of the MNIST dataset. + + Args: + NAME (str): name of the dataset + SETTING (str): setting of the experiment + N_CLASSES_PER_TASK (int): number of classes in each task + N_TASKS (int): number of tasks + SIZE (tuple): size of the images + """ NAME = 'perm-mnist' SETTING = 'domain-il' N_CLASSES_PER_TASK = 10 N_TASKS = 20 + SIZE = (28, 28) - def get_data_loaders(self): + def get_data_loaders(self) -> Tuple[torch.utils.data.DataLoader, torch.utils.data.DataLoader]: transform = transforms.Compose((transforms.ToTensor(), Permutation())) - train, test = store_mnist_loaders(transform, self) + + train_dataset = MyMNIST(base_path() + 'MNIST', + train=True, download=True, transform=transform) + test_dataset = MNIST(base_path() + 'MNIST', + train=False, download=True, transform=transform) + + train, test = store_masked_loaders(train_dataset, test_dataset, self) return train, test @staticmethod @@ -101,14 +103,10 @@ def get_denormalization_transform(): def get_loss(): return F.cross_entropy - @staticmethod - def get_scheduler(model, args): - return None - @staticmethod def get_batch_size() -> int: return 128 @staticmethod - def get_minibatch_size() -> int: - return PermutedMNIST.get_batch_size() + def get_epochs(): + return 1 diff --git a/datasets/rot_mnist.py b/datasets/rot_mnist.py index 133a0ef6..3e00f4f1 100644 --- a/datasets/rot_mnist.py +++ b/datasets/rot_mnist.py @@ -5,22 +5,43 @@ import torch.nn.functional as F import torchvision.transforms as transforms -from backbone.MNISTMLP import MNISTMLP -from datasets.perm_mnist import store_mnist_loaders +from backbone.MNISTMLP import MNISTMLP +from datasets.perm_mnist import MyMNIST, MNIST from datasets.transforms.rotation import Rotation -from datasets.utils.continual_dataset import ContinualDataset +from datasets.utils.continual_dataset import ContinualDataset, store_masked_loaders +from utils.conf import base_path class RotatedMNIST(ContinualDataset): + """ + The Rotated MNIST dataset. + + Args: + NAME (str): name of the dataset. + SETTING (str): setting of the dataset. + N_CLASSES_PER_TASK (int): number of classes per task. + N_TASKS (int): number of tasks. + N_CLASSES (int): number of classes. + SIZE (tuple): size of the images. + """ + NAME = 'rot-mnist' SETTING = 'domain-il' N_CLASSES_PER_TASK = 10 N_TASKS = 20 + N_CLASSES = N_CLASSES_PER_TASK * N_TASKS + SIZE = (28, 28) def get_data_loaders(self): transform = transforms.Compose((Rotation(), transforms.ToTensor())) - train, test = store_mnist_loaders(transform, self) + + train_dataset = MyMNIST(base_path() + 'MNIST', + train=True, download=True, transform=transform) + test_dataset = MNIST(base_path() + 'MNIST', + train=False, download=True, transform=transform) + + train, test = store_masked_loaders(train_dataset, test_dataset, self) return train, test @staticmethod @@ -43,14 +64,10 @@ def get_loss(): def get_denormalization_transform(): return None - @staticmethod - def get_scheduler(model, args): - return None - @staticmethod def get_batch_size() -> int: return 128 @staticmethod - def get_minibatch_size() -> int: - return RotatedMNIST.get_batch_size() + def get_epochs(): + return 1 diff --git a/datasets/seq_cifar10.py b/datasets/seq_cifar10.py index 183a24d8..ce1c9d43 100644 --- a/datasets/seq_cifar10.py +++ b/datasets/seq_cifar10.py @@ -5,29 +5,33 @@ from typing import Tuple +import torch import torch.nn.functional as F import torchvision.transforms as transforms -from backbone.ResNet18 import resnet18 from PIL import Image from torchvision.datasets import CIFAR10 +from backbone.ResNet18 import resnet18 from datasets.seq_tinyimagenet import base_path from datasets.transforms.denormalization import DeNormalize from datasets.utils.continual_dataset import (ContinualDataset, store_masked_loaders) -from datasets.utils.validation import get_train_val + class TCIFAR10(CIFAR10): """Workaround to avoid printing the already downloaded messages.""" + def __init__(self, root, train=True, transform=None, target_transform=None, download=False) -> None: self.root = root super(TCIFAR10, self).__init__(root, train, transform, target_transform, download=not self._check_integrity()) + class MyCIFAR10(CIFAR10): """ Overrides the CIFAR10 dataset to change the getitem function. """ + def __init__(self, root, train=True, transform=None, target_transform=None, download=False) -> None: self.not_aug_transform = transforms.Compose([transforms.ToTensor()]) @@ -37,8 +41,12 @@ def __init__(self, root, train=True, transform=None, def __getitem__(self, index: int) -> Tuple[Image.Image, int, Image.Image]: """ Gets the requested element from the dataset. - :param index: index of the element to be returned - :returns: tuple: (image, target) where target is index of the target class. + + Args: + index: index of the element to be returned + + Returns: + tuple: (image, target) where target is index of the target class. """ img, target = self.data[index], self.targets[index] @@ -61,19 +69,35 @@ def __getitem__(self, index: int) -> Tuple[Image.Image, int, Image.Image]: class SequentialCIFAR10(ContinualDataset): + """Sequential CIFAR10 Dataset. + + Args: + NAME (str): name of the dataset. + SETTING (str): setting of the dataset. + N_CLASSES_PER_TASK (int): number of classes per task. + N_TASKS (int): number of tasks. + N_CLASSES (int): number of classes. + SIZE (tuple): size of the images. + MEAN (tuple): mean of the dataset. + STD (tuple): standard deviation of the dataset. + TRANSFORM (torchvision.transforms): transformations to apply to the dataset. + """ NAME = 'seq-cifar10' SETTING = 'class-il' N_CLASSES_PER_TASK = 2 N_TASKS = 5 + N_CLASSES = N_CLASSES_PER_TASK * N_TASKS + SIZE = (32, 32) + MEAN, STD = (0.4914, 0.4822, 0.4465), (0.2470, 0.2435, 0.2615) TRANSFORM = transforms.Compose( - [transforms.RandomCrop(32, padding=4), - transforms.RandomHorizontalFlip(), - transforms.ToTensor(), - transforms.Normalize((0.4914, 0.4822, 0.4465), - (0.2470, 0.2435, 0.2615))]) + [transforms.RandomCrop(32, padding=4), + transforms.RandomHorizontalFlip(), + transforms.ToTensor(), + transforms.Normalize(MEAN, STD)]) - def get_data_loaders(self): + def get_data_loaders(self) -> Tuple[torch.utils.data.DataLoader, torch.utils.data.DataLoader]: + """Class method that returns the train and test loaders.""" transform = self.TRANSFORM test_transform = transforms.Compose( @@ -81,12 +105,8 @@ def get_data_loaders(self): train_dataset = MyCIFAR10(base_path() + 'CIFAR10', train=True, download=True, transform=transform) - if self.args.validation: - train_dataset, test_dataset = get_train_val(train_dataset, - test_transform, self.NAME) - else: - test_dataset = TCIFAR10(base_path() + 'CIFAR10',train=False, - download=True, transform=test_transform) + test_dataset = TCIFAR10(base_path() + 'CIFAR10', train=False, + download=True, transform=test_transform) train, test = store_masked_loaders(train_dataset, test_dataset, self) return train, test @@ -108,20 +128,14 @@ def get_loss(): @staticmethod def get_normalization_transform(): - transform = transforms.Normalize((0.4914, 0.4822, 0.4465), - (0.2470, 0.2435, 0.2615)) + transform = transforms.Normalize(SequentialCIFAR10.MEAN, SequentialCIFAR10.STD) return transform @staticmethod def get_denormalization_transform(): - transform = DeNormalize((0.4914, 0.4822, 0.4465), - (0.2470, 0.2435, 0.2615)) + transform = DeNormalize(SequentialCIFAR10.MEAN, SequentialCIFAR10.STD) return transform - @staticmethod - def get_scheduler(model, args): - return None - @staticmethod def get_epochs(): return 50 @@ -129,7 +143,3 @@ def get_epochs(): @staticmethod def get_batch_size(): return 32 - - @staticmethod - def get_minibatch_size(): - return SequentialCIFAR10.get_batch_size() diff --git a/datasets/seq_cifar100.py b/datasets/seq_cifar100.py index c836a061..45d82a75 100644 --- a/datasets/seq_cifar100.py +++ b/datasets/seq_cifar100.py @@ -3,33 +3,37 @@ # This source code is licensed under the license found in the # LICENSE file in the root directory of this source tree. +from argparse import Namespace from typing import Tuple import torch.nn.functional as F import torch.optim import torchvision.transforms as transforms -from backbone.ResNet18 import resnet18 from PIL import Image from torchvision.datasets import CIFAR100 +from backbone.ResNet18 import resnet18 from datasets.transforms.denormalization import DeNormalize from datasets.utils.continual_dataset import (ContinualDataset, store_masked_loaders) -from datasets.utils.validation import get_train_val -from utils.conf import base_path_dataset as base_path +# from models.utils.continual_model import ContinualModel +from utils.conf import base_path class TCIFAR100(CIFAR100): """Workaround to avoid printing the already downloaded messages.""" + def __init__(self, root, train=True, transform=None, target_transform=None, download=False) -> None: self.root = root super(TCIFAR100, self).__init__(root, train, transform, target_transform, download=not self._check_integrity()) + class MyCIFAR100(CIFAR100): """ Overrides the CIFAR100 dataset to change the getitem function. """ + def __init__(self, root, train=True, transform=None, target_transform=None, download=False) -> None: self.not_aug_transform = transforms.Compose([transforms.ToTensor()]) @@ -39,8 +43,12 @@ def __init__(self, root, train=True, transform=None, def __getitem__(self, index: int) -> Tuple[Image.Image, int, Image.Image]: """ Gets the requested element from the dataset. - :param index: index of the element to be returned - :returns: tuple: (image, target) where target is index of the target class. + + Args: + index: index of the element to be returned + + Returns: + tuple: (image, target) where target is index of the target class. """ img, target = self.data[index], self.targets[index] @@ -63,37 +71,47 @@ def __getitem__(self, index: int) -> Tuple[Image.Image, int, Image.Image]: class SequentialCIFAR100(ContinualDataset): + """Sequential CIFAR100 Dataset. + + Args: + NAME (str): name of the dataset. + SETTING (str): setting of the dataset. + N_CLASSES_PER_TASK (int): number of classes per task. + N_TASKS (int): number of tasks. + N_CLASSES (int): number of classes. + SIZE (tuple): size of the images. + MEAN (tuple): mean of the dataset. + STD (tuple): standard deviation of the dataset. + TRANSFORM (torchvision.transforms): transformation to apply to the data.""" NAME = 'seq-cifar100' SETTING = 'class-il' N_CLASSES_PER_TASK = 10 N_TASKS = 10 + N_CLASSES = N_CLASSES_PER_TASK * N_TASKS + SIZE = (32, 32) + MEAN, STD = (0.5071, 0.4867, 0.4408), (0.2675, 0.2565, 0.2761) TRANSFORM = transforms.Compose( - [transforms.RandomCrop(32, padding=4), - transforms.RandomHorizontalFlip(), - transforms.ToTensor(), - transforms.Normalize((0.5071, 0.4867, 0.4408), - (0.2675, 0.2565, 0.2761))]) + [transforms.RandomCrop(32, padding=4), + transforms.RandomHorizontalFlip(), + transforms.ToTensor(), + transforms.Normalize(MEAN, STD)]) - def get_examples_number(self): + def get_examples_number(self) -> int: train_dataset = MyCIFAR100(base_path() + 'CIFAR10', train=True, - download=True) + download=True) return len(train_dataset.data) - def get_data_loaders(self): + def get_data_loaders(self) -> Tuple[torch.utils.data.DataLoader, torch.utils.data.DataLoader]: transform = self.TRANSFORM test_transform = transforms.Compose( [transforms.ToTensor(), self.get_normalization_transform()]) train_dataset = MyCIFAR100(base_path() + 'CIFAR100', train=True, - download=True, transform=transform) - if self.args.validation: - train_dataset, test_dataset = get_train_val(train_dataset, - test_transform, self.NAME) - else: - test_dataset = TCIFAR100(base_path() + 'CIFAR100',train=False, - download=True, transform=test_transform) + download=True, transform=transform) + test_dataset = TCIFAR100(base_path() + 'CIFAR100', train=False, + download=True, transform=test_transform) train, test = store_masked_loaders(train_dataset, test_dataset, self) @@ -116,14 +134,12 @@ def get_loss(): @staticmethod def get_normalization_transform(): - transform = transforms.Normalize((0.5071, 0.4867, 0.4408), - (0.2675, 0.2565, 0.2761)) + transform = transforms.Normalize(SequentialCIFAR100.MEAN, SequentialCIFAR100.STD) return transform @staticmethod def get_denormalization_transform(): - transform = DeNormalize((0.5071, 0.4867, 0.4408), - (0.2675, 0.2565, 0.2761)) + transform = DeNormalize(SequentialCIFAR100.MEAN, SequentialCIFAR100.STD) return transform @staticmethod @@ -135,12 +151,8 @@ def get_batch_size(): return 32 @staticmethod - def get_minibatch_size(): - return SequentialCIFAR100.get_batch_size() - - @staticmethod - def get_scheduler(model, args) -> torch.optim.lr_scheduler: - model.opt = torch.optim.SGD(model.net.parameters(), lr=args.lr, weight_decay=args.optim_wd, momentum=args.optim_mom) - scheduler = torch.optim.lr_scheduler.MultiStepLR(model.opt, [35, 45], gamma=0.1, verbose=False) + def get_scheduler(model, args: Namespace) -> torch.optim.lr_scheduler: + scheduler = ContinualDataset.get_scheduler(model, args) + if scheduler is None: + scheduler = torch.optim.lr_scheduler.MultiStepLR(model.opt, [35, 45], gamma=0.1, verbose=False) return scheduler - diff --git a/datasets/seq_cifar100_224.py b/datasets/seq_cifar100_224.py new file mode 100644 index 00000000..e7d7d53c --- /dev/null +++ b/datasets/seq_cifar100_224.py @@ -0,0 +1,100 @@ + + +from typing import Tuple + +import torch +import torch.nn.functional as F +import torchvision.transforms as transforms +from timm import create_model + +from datasets.seq_cifar100 import TCIFAR100, MyCIFAR100 +from datasets.transforms.denormalization import DeNormalize +from datasets.utils.continual_dataset import (ContinualDataset, + store_masked_loaders) +from utils.conf import base_path + + +class SequentialCIFAR100224(ContinualDataset): + """ + The Sequential CIFAR100 dataset with 224x224 resolution with ViT-B/16. + + Args: + NAME (str): name of the dataset. + SETTING (str): setting of the dataset. + N_CLASSES_PER_TASK (int): number of classes per task. + N_TASKS (int): number of tasks. + N_CLASSES (int): number of classes. + SIZE (tuple): size of the images. + MEAN (tuple): mean of the dataset. + STD (tuple): standard deviation of the dataset. + TRANSFORM (torchvision.transforms): transformation to apply to the data. + TEST_TRANSFORM (torchvision.transforms): transformation to apply to the test data. + """ + + NAME = 'seq-cifar100-224' + SETTING = 'class-il' + N_CLASSES_PER_TASK = 10 + N_TASKS = 10 + N_CLASSES = 100 + SIZE = (224, 224) + MEAN, STD = (0, 0, 0), (1, 1, 1) # Normalized in [0,1] as in L2P paper + TRANSFORM = transforms.Compose( + [transforms.Resize(224), + transforms.RandomCrop(224, padding=28), + transforms.RandomHorizontalFlip(), + transforms.ToTensor(), + transforms.Normalize(MEAN, STD)] + ) + TEST_TRANSFORM = transforms.Compose( + [transforms.Resize(224), transforms.ToTensor(), transforms.Normalize(MEAN, STD)]) + + def get_data_loaders(self) -> Tuple[torch.utils.data.DataLoader, torch.utils.data.DataLoader]: + transform = self.TRANSFORM + + test_transform = self.TEST_TRANSFORM + + train_dataset = MyCIFAR100(base_path() + 'CIFAR100', train=True, + download=True, transform=transform) + test_dataset = TCIFAR100(base_path() + 'CIFAR100', train=False, + download=True, transform=test_transform) + + train, test = store_masked_loaders(train_dataset, test_dataset, self) + + return train, test + + @staticmethod + def get_transform(): + transform = transforms.Compose( + [transforms.ToPILImage(), SequentialCIFAR100224.TRANSFORM]) + return transform + + @staticmethod + def get_backbone(hookme=False): + model_name = 'vit_base_patch16_224' + return create_model( + model_name, + pretrained=True, + num_classes=SequentialCIFAR100224.N_CLASSES + ) + + @staticmethod + def get_loss(): + return F.cross_entropy + + @staticmethod + def get_normalization_transform(): + transform = transforms.Normalize(SequentialCIFAR100224.MEAN, SequentialCIFAR100224.STD) + return transform + + @staticmethod + def get_denormalization_transform(): + transform = DeNormalize(SequentialCIFAR100224.MEAN, SequentialCIFAR100224.STD) + return transform + + @staticmethod + def get_epochs(): + return 5 + + @staticmethod + def get_batch_size(): + return 128 diff --git a/datasets/seq_cifar100_224_rs.py b/datasets/seq_cifar100_224_rs.py new file mode 100644 index 00000000..3dc78dc2 --- /dev/null +++ b/datasets/seq_cifar100_224_rs.py @@ -0,0 +1,94 @@ +from typing import Tuple + +import torch +import torch.nn.functional as F +import torchvision.transforms as transforms + +from backbone.ResNet50 import resnet50 +from datasets.seq_cifar100 import TCIFAR100, MyCIFAR100 +from datasets.transforms.denormalization import DeNormalize +from datasets.utils.continual_dataset import (ContinualDataset, + store_masked_loaders) +from utils.conf import base_path + + +class SequentialCIFAR100224RS(ContinualDataset): + """ + The Sequential CIFAR100 dataset with 224x224 resolution with ResNet50 backbone. + + Args: + NAME (str): name of the dataset. + SETTING (str): setting of the dataset. + N_CLASSES_PER_TASK (int): number of classes per task. + N_TASKS (int): number of tasks. + N_CLASSES (int): number of classes. + SIZE (tuple): size of the images. + MEAN (tuple): mean of the dataset. + STD (tuple): standard deviation of the dataset. + TRANSFORM (torchvision.transforms): transformation to apply to the data. + TEST_TRANSFORM (torchvision.transforms): transformation to apply to the test data. + """ + + NAME = 'seq-cifar100-224-rs' + SETTING = 'class-il' + N_CLASSES_PER_TASK = 10 + N_TASKS = 10 + N_CLASSES = 100 + SIZE = (224, 224) + MEAN, STD = (0.5071, 0.4867, 0.4408), (0.2675, 0.2565, 0.2761) + TRANSFORM = transforms.Compose( + [transforms.Resize(224), + transforms.RandomCrop(224, padding=28), + transforms.RandomHorizontalFlip(), + transforms.ToTensor(), + transforms.Normalize(MEAN, STD)] + ) + TEST_TRANSFORM = transforms.Compose( + [transforms.Resize(224), transforms.ToTensor(), transforms.Normalize(MEAN, STD)]) + + def get_data_loaders(self) -> Tuple[torch.utils.data.DataLoader, torch.utils.data.DataLoader]: + transform = self.TRANSFORM + + test_transform = self.TEST_TRANSFORM + + train_dataset = MyCIFAR100(base_path() + 'CIFAR100', train=True, + download=True, transform=transform) + test_dataset = TCIFAR100(base_path() + 'CIFAR100', train=False, + download=True, transform=test_transform) + + train, test = store_masked_loaders(train_dataset, test_dataset, self) + + return train, test + + @staticmethod + def get_transform(): + transform = transforms.Compose( + [transforms.ToPILImage(), SequentialCIFAR100224RS.TRANSFORM]) + return transform + + @staticmethod + def get_backbone(): + return resnet50(SequentialCIFAR100224RS.N_CLASSES_PER_TASK + * SequentialCIFAR100224RS.N_TASKS, ) + + @staticmethod + def get_loss(): + return F.cross_entropy + + @staticmethod + def get_normalization_transform(): + transform = transforms.Normalize(SequentialCIFAR100224RS.MEAN, SequentialCIFAR100224RS.STD) + return transform + + @staticmethod + def get_denormalization_transform(): + transform = DeNormalize(SequentialCIFAR100224RS.MEAN, SequentialCIFAR100224RS.STD) + return transform + + @staticmethod + def get_epochs(): + return 50 + + @staticmethod + def get_batch_size(): + return 32 diff --git a/datasets/seq_cub200.py b/datasets/seq_cub200.py new file mode 100644 index 00000000..57d6d29c --- /dev/null +++ b/datasets/seq_cub200.py @@ -0,0 +1,206 @@ +import os +from typing import Tuple + +import numpy as np +import torch +import torch.nn.functional as F +import torchvision.transforms as transforms +from PIL import Image +from torch.utils.data.dataset import Dataset + + +from backbone.ResNet50 import resnet50 +from datasets.transforms.denormalization import DeNormalize +from datasets.utils.continual_dataset import (ContinualDataset, + store_masked_loaders) +from utils import smart_joint +from utils.conf import base_path + + +class MyCUB200(Dataset): + """ + Overrides dataset to change the getitem function. + """ + IMG_SIZE = 224 + N_CLASSES = 200 + MEAN, STD = (0.4856, 0.4994, 0.4324), (0.2272, 0.2226, 0.2613) + TEST_TRANSFORM = transforms.Compose([transforms.Resize(IMG_SIZE), transforms.ToTensor(), transforms.Normalize(MEAN, STD)]) + + def __init__(self, root, train=True, transform=None, + target_transform=None, download=True) -> None: + self.not_aug_transform = transforms.Compose([transforms.ToTensor()]) + self.root = root + self.train = train + self.transform = transform + self.target_transform = target_transform + self.download = download + + if download: + if os.path.isdir(root) and len(os.listdir(root)) > 0: + print('Download not needed, files already on disk.') + else: + from onedrivedownloader import download + ln = '' + print('Downloading dataset') + download(ln, filename=smart_joint(root, 'cub_200_2011.zip'), unzip=True, unzip_path=root, clean=True) + + data_file = np.load(smart_joint(root, 'train_data.npz' if train else 'test_data.npz'), allow_pickle=True) + + self.data = data_file['data'] + self.targets = torch.from_numpy(data_file['targets']).long() + self.classes = data_file['classes'] + self.segs = data_file['segs'] + self._return_segmask = False + + def __getitem__(self, index: int) -> Tuple[type(Image), int, type(Image)]: + """ + Gets the requested element from the dataset. + + Args: + index: index of the element to be returned + + Returns: + tuple: (image, target) where target is index of the target class. + """ + img, target = self.data[index], self.targets[index] + + # to return a PIL Image + img = Image.fromarray(img, mode='RGB') + original_img = img.copy() + + not_aug_img = self.not_aug_transform(original_img) + + if self.transform is not None: + img = self.transform(img) + + if self.target_transform is not None: + target = self.target_transform(target) + + ret_tuple = [img, target, not_aug_img, self.logits[index]] if hasattr(self, 'logits') else [ + img, target, not_aug_img] + + if self._return_segmask: + raise "Unsupported segmentation output in training set!" + + return ret_tuple + + def __len__(self) -> int: + return len(self.data) + + +class CUB200(MyCUB200): + """Base CUB200 dataset.""" + + def __init__(self, root, train=True, transform=None, target_transform=None, download=False) -> None: + super().__init__(root, train=train, transform=transform, + target_transform=target_transform, download=download) + + def __getitem__(self, index: int, ret_segmask=False) -> Tuple[type(Image), int, type(Image)]: + """ + Gets the requested element from the dataset. + + Args: + index: index of the element to be returned + + Returns: + tuple: (image, target) where target is index of the target class. + """ + img, target = self.data[index], self.targets[index] + + # to return a PIL Image + img = Image.fromarray(img, mode='RGB') + + if self.transform is not None: + img = self.transform(img) + + if self.target_transform is not None: + target = self.target_transform(target) + + ret_tuple = [img, target, self.logits[index]] if hasattr(self, 'logits') else [img, target] + + if ret_segmask or self._return_segmask: + seg = self.segs[index] + seg = Image.fromarray(seg, mode='L') + seg = transforms.ToTensor()(transforms.CenterCrop((MyCUB200.IMG_SIZE, MyCUB200.IMG_SIZE))(seg))[0] + ret_tuple.append((seg > 0).int()) + + return ret_tuple + + +class SequentialCUB200(ContinualDataset): + """Sequential CUB200 Dataset. + + Args: + NAME (str): name of the dataset. + SETTING (str): setting of the dataset. + N_CLASSES_PER_TASK (int): number of classes per task. + N_TASKS (int): number of tasks. + SIZE (tuple): size of the images. + MEAN (tuple): mean of the dataset. + STD (tuple): standard deviation of the dataset. + TRANSFORM (torchvision.transforms): transformation to apply to the data. + TEST_TRANSFORM (torchvision.transforms): transformation to apply to the test data. + """ + NAME = 'seq-cub200' + SETTING = 'class-il' + N_CLASSES_PER_TASK = 20 + N_TASKS = 10 + SIZE = (MyCUB200.IMG_SIZE, MyCUB200.IMG_SIZE) + MEAN, STD = (0.4856, 0.4994, 0.4324), (0.2272, 0.2226, 0.2613) + TRANSFORM = transforms.Compose([ + transforms.Resize(MyCUB200.IMG_SIZE), + transforms.RandomCrop(MyCUB200.IMG_SIZE, padding=4), + transforms.RandomHorizontalFlip(), + transforms.ToTensor(), + transforms.Normalize(MEAN, STD)]) + TEST_TRANSFORM = MyCUB200.TEST_TRANSFORM + + def get_data_loaders(self) -> Tuple[torch.utils.data.DataLoader, torch.utils.data.DataLoader]: + transform = self.TRANSFORM + + test_transform = transforms.Compose( + [transforms.Resize((MyCUB200.IMG_SIZE, MyCUB200.IMG_SIZE)), transforms.ToTensor(), self.get_normalization_transform()]) + + train_dataset = MyCUB200(base_path() + 'CUB200', train=True, + download=True, transform=transform) + test_dataset = CUB200(base_path() + 'CUB200', train=False, + download=True, transform=test_transform) + + train, test = store_masked_loaders( + train_dataset, test_dataset, self) + + return train, test + + @staticmethod + def get_transform(): + transform = transforms.Compose( + [transforms.ToPILImage(), SequentialCUB200.TRANSFORM]) + return transform + + @staticmethod + def get_backbone(hookme=False): + num_classes = SequentialCUB200.N_CLASSES_PER_TASK * SequentialCUB200.N_TASKS + return resnet50(num_classes, pretrained=True) + + @staticmethod + def get_loss(): + return F.cross_entropy + + @staticmethod + def get_normalization_transform(): + transform = transforms.Normalize( + SequentialCUB200.MEAN, SequentialCUB200.STD) + return transform + + @staticmethod + def get_denormalization_transform(): + transform = DeNormalize(SequentialCUB200.MEAN, SequentialCUB200.STD) + return transform + + @staticmethod + def get_batch_size(): + return 16 + + @staticmethod + def get_epochs(): + return 30 diff --git a/datasets/seq_imagenet_r.py b/datasets/seq_imagenet_r.py new file mode 100644 index 00000000..f0772b89 --- /dev/null +++ b/datasets/seq_imagenet_r.py @@ -0,0 +1,206 @@ +import os +from requests import request +import torchvision.transforms as transforms +from torchvision.models import resnet18 +import torch.nn.functional as F +import numpy as np +from utils.conf import base_path +from PIL import Image +from datasets.utils.validation import get_train_val +from datasets.utils.continual_dataset import ContinualDataset, store_masked_loaders +from typing import Tuple +from datasets.transforms.denormalization import DeNormalize +from torch.utils.data import Dataset +import torch.nn as nn +import yaml +import pickle +from torchvision.transforms.functional import InterpolationMode +from utils.prompt_templates import templates + + +class MyImagenetR(Dataset): + N_CLASSES = 200 + + """ + Overrides the CIFAR100 dataset to change the getitem function. + """ + + def __init__(self, root, train=True, transform=None, + target_transform=None, download=False) -> None: + + self.root = root + self.train = train + self.transform = transform + self.target_transform = target_transform + + self.not_aug_transform = transforms.Compose([transforms.Resize((224, 224), interpolation=InterpolationMode.BICUBIC), transforms.ToTensor()]) + + if not os.path.exists(self.root): + if download: + # download from https://people.eecs.berkeley.edu/~hendrycks/imagenet-r.tar + print("Downloading imagenet-r dataset...") + url = 'https://people.eecs.berkeley.edu/~hendrycks/imagenet-r.tar' + r = request('GET', url, allow_redirects=True) + if not os.path.exists(self.root): + os.makedirs(self.root) + print("Saving tar...") + open(self.root + 'imagenet-r.tar', 'wb').write(r.content) + print("Extracting tar...") + os.system('tar -xf ' + self.root + 'imagenet-r.tar -C ' + self.root.rstrip('imagenet-r')) + + # move all files in imagenet-r to root with shutil + import shutil + print("Moving files...") + for d in os.listdir(self.root + 'imagenet-r'): + shutil.move(self.root + 'imagenet-r/' + d, self.root) + + print("Cleaning up...") + os.remove(self.root + 'imagenet-r.tar') + os.rmdir(self.root + 'imagenet-r') + + print("Done!") + else: + raise RuntimeError('Dataset not found.') + + pwd = os.path.dirname(os.path.abspath(__file__)) + if self.train: + data_config = yaml.load(open(pwd + '/imagenet_r_utils/imagenet-r_train.yaml'), Loader=yaml.Loader) + else: + data_config = yaml.load(open(pwd + '/imagenet_r_utils/imagenet-r_test.yaml'), Loader=yaml.Loader) + + self.data = np.array(data_config['data']) + self.targets = np.array(data_config['targets']) + + def __len__(self): + return len(self.targets) + + def __getitem__(self, index: int) -> Tuple[type(Image), int, type(Image)]: + """ + Gets the requested element from the dataset. + :param index: index of the element to be returned + :returns: tuple: (image, target) where target is index of the target class. + """ + img, target = self.data[index], self.targets[index] + + img = Image.open(img).convert('RGB') + + original_img = img.copy() + + not_aug_img = self.not_aug_transform(original_img) + + if self.transform is not None: + img = self.transform(img) + + if self.target_transform is not None: + target = self.target_transform(target) + + if not self.train: + return img, target + + if hasattr(self, 'logits'): + return img, target, not_aug_img, self.logits[index] + + return img, target, not_aug_img + + +class SequentialImagenetR(ContinualDataset): + + NAME = 'seq-imagenet-r' + SETTING = 'class-il' + N_TASKS = 10 + N_CLASSES = 200 + N_CLASSES_PER_TASK = N_CLASSES // N_TASKS + normalize = transforms.Normalize(mean=(0.0, 0.0, 0.0), std=(1.0, 1.0, 1.0)) + SIZE = (224, 224) + + TRANSFORM = transforms.Compose([ + transforms.RandomResizedCrop(224, interpolation=InterpolationMode.BICUBIC), + transforms.RandomHorizontalFlip(), + transforms.ToTensor(), + normalize, + ]) + TEST_TRANSFORM = transforms.Compose([ + transforms.Resize((224, 224), interpolation=InterpolationMode.BICUBIC), + transforms.ToTensor(), + normalize, + ]) + + def __init__(self, args): + super().__init__(args) + self.args = args + self.label_to_class_name = self.get_class_names() + + def get_data_loaders(self): + transform = self.TRANSFORM + + test_transform = transforms.Compose( + [transforms.Resize(size=(256, 256), interpolation=InterpolationMode.BICUBIC), transforms.CenterCrop(224), transforms.ToTensor(), self.normalize]) + + train_dataset = MyImagenetR(base_path() + 'imagenet-r/', train=True, + download=True, transform=transform) + if self.args.validation: + train_dataset, test_dataset = get_train_val(train_dataset, + test_transform, self.NAME) + else: + test_dataset = MyImagenetR(base_path() + 'imagenet-r/', train=False, + download=True, transform=test_transform) + + train, test = store_masked_loaders(train_dataset, test_dataset, self) + return train, test + + def get_class_names(self): + pwd = os.path.dirname(os.path.abspath(__file__)) + with open(pwd + '/imagenet_r_utils/label_to_class_name.pkl', 'rb') as f: + label_to_class_name = pickle.load(f) + class_names = label_to_class_name.values() + class_names = [x.replace('_', ' ') for x in class_names] + if hasattr(self.args, 'class_order'): + class_names = [class_names[i] for i in self.class_order] + return class_names + + @staticmethod + def get_prompt_templates(): + return templates['imagenet'] + + @staticmethod + def get_transform(): + transform = transforms.Compose( + [transforms.ToPILImage(), SequentialImagenetR.TRANSFORM]) + return transform + + @staticmethod + def get_backbone(hookme=False): + backbone = resnet18() + num_classes = SequentialImagenetR.N_CLASSES_PER_TASK * SequentialImagenetR.N_TASKS + backbone.fc = nn.Linear(in_features=512, out_features=num_classes, bias=True) + return backbone + + @staticmethod + def get_loss(): + return F.cross_entropy + + @staticmethod + def get_normalization_transform(): + return transforms.Normalize(mean=(0.0, 0.0, 0.0), std=(1.0, 1.0, 1.0)) + + @staticmethod + def get_denormalization_transform(): + transform = DeNormalize((0, 0, 0), + (1, 1, 1)) + return transform + + @staticmethod + def get_epochs(): + return 50 + + @staticmethod + def get_batch_size(): + return 32 + + @staticmethod + def get_virtual_bn_num(): + return 4 + + @staticmethod + def get_n_epochs_first_stage(): + return 50 diff --git a/datasets/seq_mnist.py b/datasets/seq_mnist.py index f4480298..4348f604 100644 --- a/datasets/seq_mnist.py +++ b/datasets/seq_mnist.py @@ -5,16 +5,16 @@ from typing import Tuple +import torch import torch.nn.functional as F import torchvision.transforms as transforms -from backbone.MNISTMLP import MNISTMLP from PIL import Image from torchvision.datasets import MNIST +from backbone.MNISTMLP import MNISTMLP from datasets.utils.continual_dataset import (ContinualDataset, store_masked_loaders) -from datasets.utils.validation import get_train_val -from utils.conf import base_path_dataset as base_path +from utils.conf import base_path class MyMNIST(MNIST): @@ -31,8 +31,12 @@ def __init__(self, root, train=True, transform=None, def __getitem__(self, index: int) -> Tuple[Image.Image, int, Image.Image]: """ Gets the requested element from the dataset. - :param index: index of the element to be returned - :returns: tuple: (image, target) where target is index of the target class. + + Args: + index: index of the element to be returned + + Returns: + tuple: (image, target) where target is index of the target class. """ img, target = self.data[index], self.targets[index] @@ -54,23 +58,31 @@ def __getitem__(self, index: int) -> Tuple[Image.Image, int, Image.Image]: class SequentialMNIST(ContinualDataset): + """The Sequential MNIST dataset. + + Args: + NAME (str): name of the dataset. + SETTING (str): setting of the dataset. + N_CLASSES_PER_TASK (int): number of classes per task. + N_TASKS (int): number of tasks. + N_CLASSES (int): number of classes. + SIZE (tuple): size of the images. + """ NAME = 'seq-mnist' SETTING = 'class-il' N_CLASSES_PER_TASK = 2 N_TASKS = 5 + N_CLASSES = N_CLASSES_PER_TASK * N_TASKS + SIZE = (28, 28) TRANSFORM = None - def get_data_loaders(self): + def get_data_loaders(self) -> Tuple[torch.utils.data.DataLoader, torch.utils.data.DataLoader]: transform = transforms.ToTensor() train_dataset = MyMNIST(base_path() + 'MNIST', train=True, download=True, transform=transform) - if self.args.validation: - train_dataset, test_dataset = get_train_val(train_dataset, - transform, self.NAME) - else: - test_dataset = MNIST(base_path() + 'MNIST', - train=False, download=True, transform=transform) + test_dataset = MNIST(base_path() + 'MNIST', + train=False, download=True, transform=transform) train, test = store_masked_loaders(train_dataset, test_dataset, self) return train, test @@ -96,14 +108,10 @@ def get_normalization_transform(): def get_denormalization_transform(): return None - @staticmethod - def get_scheduler(model, args): - return None - @staticmethod def get_batch_size(): return 64 @staticmethod - def get_minibatch_size(): - return SequentialMNIST.get_batch_size() + def get_epochs(): + return 1 diff --git a/datasets/seq_tinyimagenet.py b/datasets/seq_tinyimagenet.py index 22ff1060..9071b9f5 100644 --- a/datasets/seq_tinyimagenet.py +++ b/datasets/seq_tinyimagenet.py @@ -4,27 +4,26 @@ # LICENSE file in the root directory of this source tree. import os -from typing import Optional +from typing import Optional, Tuple import numpy as np +import torch import torch.nn as nn import torch.nn.functional as F import torchvision.transforms as transforms -from backbone.ResNet18 import resnet18 from PIL import Image from torch.utils.data import Dataset +from backbone.ResNet18 import resnet18 from datasets.transforms.denormalization import DeNormalize from datasets.utils.continual_dataset import (ContinualDataset, store_masked_loaders) -from datasets.utils.validation import get_train_val -from utils.conf import base_path_dataset as base_path +from utils import smart_joint +from utils.conf import base_path class TinyImagenet(Dataset): - """ - Defines Tiny Imagenet as for the others pytorch datasets. - """ + """Defines the Tiny Imagenet dataset.""" def __init__(self, root: str, train: bool = True, transform: Optional[nn.Module] = None, target_transform: Optional[nn.Module] = None, download: bool = False) -> None: @@ -43,18 +42,18 @@ def __init__(self, root: str, train: bool = True, transform: Optional[nn.Module] print('Downloading dataset') ln = "https://unimore365-my.sharepoint.com/:u:/g/personal/263133_unimore_it/EVKugslStrtNpyLGbgrhjaABqRHcE3PB_r2OEaV7Jy94oQ?e=9K29aD" - download(ln, filename=os.path.join(root, 'tiny-imagenet-processed.zip'), unzip=True, unzip_path=root, clean=True) + download(ln, filename=smart_joint(root, 'tiny-imagenet-processed.zip'), unzip=True, unzip_path=root, clean=True) self.data = [] for num in range(20): - self.data.append(np.load(os.path.join( + self.data.append(np.load(smart_joint( root, 'processed/x_%s_%02d.npy' % ('train' if self.train else 'val', num + 1)))) self.data = np.concatenate(np.array(self.data)) self.targets = [] for num in range(20): - self.targets.append(np.load(os.path.join( + self.targets.append(np.load(smart_joint( root, 'processed/y_%s_%02d.npy' % ('train' if self.train else 'val', num + 1)))) self.targets = np.concatenate(np.array(self.targets)) @@ -83,9 +82,7 @@ def __getitem__(self, index): class MyTinyImagenet(TinyImagenet): - """ - Defines Tiny Imagenet as for the others pytorch datasets. - """ + """Overrides the TinyImagenet dataset to change the getitem function.""" def __init__(self, root: str, train: bool = True, transform: Optional[nn.Module] = None, target_transform: Optional[nn.Module] = None, download: bool = False) -> None: @@ -115,19 +112,34 @@ def __getitem__(self, index): class SequentialTinyImagenet(ContinualDataset): + """The Sequential Tiny Imagenet dataset. + + Args: + NAME (str): name of the dataset. + SETTING (str): setting of the dataset. + N_CLASSES_PER_TASK (int): number of classes per task. + N_TASKS (int): number of tasks. + N_CLASSES (int): number of classes. + SIZE (tuple): size of the images. + MEAN (tuple): mean of the dataset. + STD (tuple): standard deviation of the dataset. + TRANSFORM (torchvision.transforms): transformations to apply to the dataset. + """ NAME = 'seq-tinyimg' SETTING = 'class-il' N_CLASSES_PER_TASK = 20 N_TASKS = 10 + N_CLASSES = N_CLASSES_PER_TASK * N_TASKS + MEAN, STD = (0.4802, 0.4480, 0.3975), (0.2770, 0.2691, 0.2821) + SIZE = (64, 64) TRANSFORM = transforms.Compose( [transforms.RandomCrop(64, padding=4), transforms.RandomHorizontalFlip(), transforms.ToTensor(), - transforms.Normalize((0.4802, 0.4480, 0.3975), - (0.2770, 0.2691, 0.2821))]) + transforms.Normalize(MEAN, STD)]) - def get_data_loaders(self): + def get_data_loaders(self) -> Tuple[torch.utils.data.DataLoader, torch.utils.data.DataLoader]: transform = self.TRANSFORM test_transform = transforms.Compose( @@ -135,12 +147,8 @@ def get_data_loaders(self): train_dataset = MyTinyImagenet(base_path() + 'TINYIMG', train=True, download=True, transform=transform) - if self.args.validation: - train_dataset, test_dataset = get_train_val(train_dataset, - test_transform, self.NAME) - else: - test_dataset = TinyImagenet(base_path() + 'TINYIMG', - train=False, download=True, transform=test_transform) + test_dataset = TinyImagenet(base_path() + 'TINYIMG', + train=False, download=True, transform=test_transform) train, test = store_masked_loaders(train_dataset, test_dataset, self) return train, test @@ -161,20 +169,14 @@ def get_transform(self): @staticmethod def get_normalization_transform(): - transform = transforms.Normalize((0.4802, 0.4480, 0.3975), - (0.2770, 0.2691, 0.2821)) + transform = transforms.Normalize(SequentialTinyImagenet.MEAN, SequentialTinyImagenet.STD) return transform @staticmethod def get_denormalization_transform(): - transform = DeNormalize((0.4802, 0.4480, 0.3975), - (0.2770, 0.2691, 0.2821)) + transform = DeNormalize(SequentialTinyImagenet.MEAN, SequentialTinyImagenet.STD) return transform - @staticmethod - def get_scheduler(model, args): - return None - @staticmethod def get_epochs(): return 50 @@ -182,7 +184,3 @@ def get_epochs(): @staticmethod def get_batch_size(): return 32 - - @staticmethod - def get_minibatch_size(): - return SequentialTinyImagenet.get_batch_size() diff --git a/datasets/seq_tinyimagenet_r.py b/datasets/seq_tinyimagenet_r.py new file mode 100644 index 00000000..dab1094a --- /dev/null +++ b/datasets/seq_tinyimagenet_r.py @@ -0,0 +1,34 @@ +# Copyright 2022-present, Lorenzo Bonicelli, Pietro Buzzega, Matteo Boschini, Angelo Porrello, Simone Calderara. +# All rights reserved. +# This source code is licensed under the license found in the +# LICENSE file in the root directory of this source tree. + +import torchvision.transforms as transforms +from datasets.seq_tinyimagenet import SequentialTinyImagenet + + +class SequentialTinyImagenet32R(SequentialTinyImagenet): + """The Sequential TinyImagenet dataset resized to 32x32. + + Args: + NAME (str): name of the dataset. + SETTING (str): setting of the dataset. + N_CLASSES_PER_TASK (int): number of classes per task. + N_TASKS (int): number of tasks. + N_CLASSES (int): number of classes. + SIZE (tuple): size of the images. + """ + NAME = 'seq-tinyimg-r' + MEAN, STD = [0.4807, 0.4485, 0.3980], [0.2541, 0.2456, 0.2604] + TRANSFORM = transforms.Compose( + [ + transforms.Resize(32), + transforms.RandomCrop(32, padding=4), + transforms.RandomHorizontalFlip(), + transforms.ToTensor(), + transforms.Normalize(MEAN, STD)]) + TEST_TRANSFORM = transforms.Compose( + [ + transforms.Resize(32), + transforms.ToTensor(), + transforms.Normalize(MEAN, STD)]) diff --git a/datasets/transforms/denormalization.py b/datasets/transforms/denormalization.py index 637df010..c5cea852 100644 --- a/datasets/transforms/denormalization.py +++ b/datasets/transforms/denormalization.py @@ -6,15 +6,25 @@ class DeNormalize(object): def __init__(self, mean, std): + """ + Initializes a DeNormalize object. + + Args: + mean (list): List of mean values for each channel. + std (list): List of standard deviation values for each channel. + """ self.mean = mean self.std = std def __call__(self, tensor): """ + Applies denormalization to the input tensor. + Args: - tensor (Tensor): Tensor image of size (C, H, W) to be normalized. + tensor (Tensor): Tensor image of size (C, H, W) to be denormalized. + Returns: - Tensor: Normalized image. + Tensor: Denormalized image. """ for t, m, s in zip(tensor, self.mean, self.std): t.mul_(s).add_(m) diff --git a/datasets/transforms/permutation.py b/datasets/transforms/permutation.py index 12411f8e..4d24592a 100644 --- a/datasets/transforms/permutation.py +++ b/datasets/transforms/permutation.py @@ -10,6 +10,7 @@ class Permutation(object): """ Defines a fixed permutation for a numpy array. """ + def __init__(self) -> None: """ Initializes the permutation. @@ -19,8 +20,12 @@ def __init__(self) -> None: def __call__(self, sample: np.ndarray) -> np.ndarray: """ Randomly defines the permutation and applies the transformation. - :param sample: image to be permuted - :return: permuted image + + Args: + sample: image to be permuted + + Returns: + permuted image """ old_shape = sample.shape if self.perm is None: @@ -33,10 +38,13 @@ class FixedPermutation(object): """ Defines a fixed permutation (given the seed) for a numpy array. """ + def __init__(self, seed: int) -> None: """ Defines the seed. - :param seed: seed of the permutation + + Args: + seed: seed of the permutation """ self.perm = None self.seed = seed @@ -44,8 +52,12 @@ def __init__(self, seed: int) -> None: def __call__(self, sample: np.ndarray) -> np.ndarray: """ Defines the permutation and applies the transformation. - :param sample: image to be permuted - :return: permuted image + + Args: + sample: image to be permuted + + Returns: + permuted image """ old_shape = sample.shape if self.perm is None: diff --git a/datasets/transforms/rotation.py b/datasets/transforms/rotation.py index f03b831b..4d213c38 100644 --- a/datasets/transforms/rotation.py +++ b/datasets/transforms/rotation.py @@ -15,8 +15,10 @@ class Rotation(object): def __init__(self, deg_min: int = 0, deg_max: int = 180) -> None: """ Initializes the rotation with a random angle. - :param deg_min: lower extreme of the possible random angle - :param deg_max: upper extreme of the possible random angle + + Args: + deg_min: lower extreme of the possible random angle + deg_max: upper extreme of the possible random angle """ self.deg_min = deg_min self.deg_max = deg_max @@ -25,8 +27,12 @@ def __init__(self, deg_min: int = 0, deg_max: int = 180) -> None: def __call__(self, x: np.ndarray) -> np.ndarray: """ Applies the rotation. - :param x: image to be rotated - :return: rotated image + + Args: + x: image to be rotated + + Returns: + rotated image """ return F.rotate(x, self.degrees) @@ -39,9 +45,11 @@ class FixedRotation(object): def __init__(self, seed: int, deg_min: int = 0, deg_max: int = 180) -> None: """ Initializes the rotation with a random angle. - :param seed: seed of the rotation - :param deg_min: lower extreme of the possible random angle - :param deg_max: upper extreme of the possible random angle + + Args: + seed: seed of the rotation + deg_min: lower extreme of the possible random angle + deg_max: upper extreme of the possible random angle """ self.seed = seed self.deg_min = deg_min @@ -53,8 +61,12 @@ def __init__(self, seed: int, deg_min: int = 0, deg_max: int = 180) -> None: def __call__(self, x: np.ndarray) -> np.ndarray: """ Applies the rotation. - :param x: image to be rotated - :return: rotated image + + Args: + x: image to be rotated + + Returns: + rotated image """ return F.rotate(x, self.degrees) @@ -67,8 +79,10 @@ class IncrementalRotation(object): def __init__(self, init_deg: int = 0, increase_per_iteration: float = 0.006) -> None: """ Defines the initial angle as well as the increase for each rotation - :param init_deg: - :param increase_per_iteration: + + Args: + init_deg: + increase_per_iteration: """ self.increase_per_iteration = increase_per_iteration self.iteration = 0 @@ -77,8 +91,12 @@ def __init__(self, init_deg: int = 0, increase_per_iteration: float = 0.006) -> def __call__(self, x: np.ndarray) -> np.ndarray: """ Applies the rotation. - :param x: image to be rotated - :return: rotated image + + Args: + x: image to be rotated + + Returns: + rotated image """ degs = (self.iteration * self.increase_per_iteration + self.degrees) % 360 self.iteration += 1 @@ -87,6 +105,8 @@ def __call__(self, x: np.ndarray) -> np.ndarray: def set_iteration(self, x: int) -> None: """ Set the iteration to a given integer - :param x: iteration index + + Args: + x: iteration index """ self.iteration = x diff --git a/datasets/utils/__init__.py b/datasets/utils/__init__.py index e69de29b..920aa905 100644 --- a/datasets/utils/__init__.py +++ b/datasets/utils/__init__.py @@ -0,0 +1,3 @@ +""" +This package contains utility functions used by all datasets, including the base dataset class (ContinualDataset). +""" diff --git a/datasets/utils/continual_dataset.py b/datasets/utils/continual_dataset.py index ee71174b..5849d796 100644 --- a/datasets/utils/continual_dataset.py +++ b/datasets/utils/continual_dataset.py @@ -6,37 +6,100 @@ from argparse import Namespace from typing import Tuple +import torch import numpy as np import torch.nn as nn -import torch.optim +import torch.optim.lr_scheduler as scheds from torch.utils.data import DataLoader, Dataset +from utils.conf import create_seeded_dataloader + class ContinualDataset: """ - Continual learning evaluation setting. + A base class for defining continual learning datasets. + + Attributes: + NAME (str): the name of the dataset + SETTING (str): the setting of the dataset + N_CLASSES_PER_TASK (int): the number of classes per task + N_TASKS (int): the number of tasks + N_CLASSES (int): the number of classes + SIZE (Tuple[int]): the size of the dataset + train_loader (DataLoader): the training loader + test_loaders (List[DataLoader]): the test loaders + i (int): the current task + c_task (int): the current task + args (Namespace): the arguments which contains the hyperparameters """ + NAME: str SETTING: str N_CLASSES_PER_TASK: int N_TASKS: int + N_CLASSES: int + SIZE: Tuple[int] + AVAIL_SCHEDS = ['multisteplr'] def __init__(self, args: Namespace) -> None: """ Initializes the train and test lists of dataloaders. - :param args: the arguments which contains the hyperparameters + + Args: + args: the arguments which contains the hyperparameters """ self.train_loader = None self.test_loaders = [] self.i = 0 + self.c_task = -1 self.args = args - - if not all((self.NAME, self.SETTING, self.N_CLASSES_PER_TASK, self.N_TASKS)): + if self.SETTING == 'class-il': + self.N_CLASSES = self.N_CLASSES if hasattr(self, 'N_CLASSES') else \ + (self.N_CLASSES_PER_TASK * self.N_TASKS) if isinstance(self.N_CLASSES_PER_TASK, int) else sum(self.N_CLASSES_PER_TASK) + else: + self.N_CLASSES = self.N_CLASSES_PER_TASK + + if self.args.permute_classes: + if not hasattr(self.args, 'class_order'): # set only once + if self.args.seed is not None: + np.random.seed(self.args.seed) + if isinstance(self.N_CLASSES_PER_TASK, int): + self.args.class_order = np.random.permutation(self.N_CLASSES_PER_TASK * self.N_TASKS) + else: + self.args.class_order = np.random.permutation(sum(self.N_CLASSES_PER_TASK)) + + if self.args.validation: + self._c_seed = self.args.seed if self.args.seed is not None else torch.initial_seed() + + if args.joint: + self.N_CLASSES_PER_TASK = self.N_CLASSES + self.N_TASKS = 1 + + if not all((self.NAME, self.SETTING, self.N_CLASSES_PER_TASK, self.N_TASKS, self.SIZE, self.N_CLASSES)): raise NotImplementedError('The dataset must be initialized with all the required fields.') - def get_data_loaders(self) -> Tuple[DataLoader, DataLoader]: + def get_offsets(self, task_idx: int = None): """ - Creates and returns the training and test loaders for the current task. + Compute the start and end class index for the current task. + + Args: + task_idx (int): the task index + + Returns: + tuple: the start and end class index for the current task + """ + if self.SETTING == 'class-il' or self.SETTING == 'task-il': + task_idx = task_idx if task_idx is not None else self.c_task + else: + task_idx = 0 + + start_c = self.N_CLASSES_PER_TASK * task_idx if isinstance(self.N_CLASSES_PER_TASK, int) else sum(self.N_CLASSES_PER_TASK[:task_idx]) + end_c = self.N_CLASSES_PER_TASK * (task_idx + 1) if isinstance(self.N_CLASSES_PER_TASK, int) else sum(self.N_CLASSES_PER_TASK[:task_idx + 1]) + + return start_c, end_c + + def get_data_loaders(self) -> Tuple[DataLoader, DataLoader]: + """Creates and returns the training and test loaders for the current task. The current training loader and all test loaders are stored in self. :return: the current training and test loaders """ @@ -44,104 +107,149 @@ def get_data_loaders(self) -> Tuple[DataLoader, DataLoader]: @staticmethod def get_backbone() -> nn.Module: - """ - Returns the backbone to be used for to the current dataset. - """ + """Returns the backbone to be used for the current dataset.""" raise NotImplementedError @staticmethod def get_transform() -> nn.Module: - """ - Returns the transform to be used for to the current dataset. - """ + """Returns the transform to be used for the current dataset.""" raise NotImplementedError @staticmethod def get_loss() -> nn.Module: - """ - Returns the loss to be used for to the current dataset. - """ + """Returns the loss to be used for the current dataset.""" raise NotImplementedError @staticmethod def get_normalization_transform() -> nn.Module: - """ - Returns the transform used for normalizing the current dataset. - """ + """Returns the transform used for normalizing the current dataset.""" raise NotImplementedError @staticmethod def get_denormalization_transform() -> nn.Module: - """ - Returns the transform used for denormalizing the current dataset. - """ + """Returns the transform used for denormalizing the current dataset.""" raise NotImplementedError @staticmethod def get_scheduler(model, args: Namespace) -> torch.optim.lr_scheduler._LRScheduler: - """ - Returns the scheduler to be used for to the current dataset. - """ - raise NotImplementedError - - @staticmethod - def get_epochs(): + """Returns the scheduler to be used for the current dataset.""" + if args.lr_scheduler is not None: + model.opt = model.get_optimizer() + # check if lr_scheduler is in torch.optim.lr_scheduler + supported_scheds = {sched_name.lower(): sched_name for sched_name in dir(scheds) if sched_name.lower() in ContinualDataset.AVAIL_SCHEDS} + sched = None + if args.lr_scheduler.lower() in supported_scheds: + if args.lr_scheduler.lower() == 'multisteplr': + assert args.lr_milestones is not None, 'MultiStepLR requires `--lr_milestones`' + sched = getattr(scheds, supported_scheds[args.lr_scheduler.lower()])(model.opt, + milestones=args.lr_milestones, + gamma=args.sched_multistep_lr_gamma) + + if sched is None: + raise ValueError('Unknown scheduler: {}'.format(args.lr_scheduler)) + return sched + return None + + def get_epochs(self): + """Returns the number of epochs to be used for the current dataset.""" raise NotImplementedError @staticmethod def get_batch_size(): + """Returns the batch size to be used for the current dataset.""" raise NotImplementedError - @staticmethod - def get_minibatch_size(): - raise NotImplementedError + @classmethod + def get_minibatch_size(cls): + """Returns the minibatch size to be used for the current dataset.""" + return cls.get_batch_size() + + +def _get_mask_unlabeled(train_dataset, setting: ContinualDataset): + if setting.args.label_perc == 1: + return np.zeros(train_dataset.targets.shape[0]).astype('bool') + else: + lpc = int(setting.args.label_perc * (train_dataset.targets.shape[0] // setting.N_CLASSES_PER_TASK)) + ind = np.indices(train_dataset.targets.shape)[0] + mask = [] + for i_label, _ in enumerate(np.unique(train_dataset.targets)): + partial_targets = train_dataset.targets[train_dataset.targets == i_label] + current_mask = np.random.choice(partial_targets.shape[0], max( + partial_targets.shape[0] - lpc, 0), replace=False) + + mask = np.append(mask, ind[train_dataset.targets == i_label][current_mask]) + + return mask.astype(np.int32) + + +def _prepare_data_loaders(train_dataset, test_dataset, setting: ContinualDataset): + if isinstance(train_dataset.targets, list) or not train_dataset.targets.dtype is torch.long: + train_dataset.targets = torch.tensor(train_dataset.targets, dtype=torch.long) + if isinstance(test_dataset.targets, list) or not test_dataset.targets.dtype is torch.long: + test_dataset.targets = torch.tensor(test_dataset.targets, dtype=torch.long) + + setting.unlabeled_mask = _get_mask_unlabeled(train_dataset, setting) + + if setting.unlabeled_mask.sum() != 0: + train_dataset.targets[setting.unlabeled_mask] = -1 # -1 is the unlabeled class + + return train_dataset, test_dataset def store_masked_loaders(train_dataset: Dataset, test_dataset: Dataset, setting: ContinualDataset) -> Tuple[DataLoader, DataLoader]: """ Divides the dataset into tasks. - :param train_dataset: train dataset - :param test_dataset: test dataset - :param setting: continual learning setting - :return: train and test loaders + + Attributes: + train_dataset (Dataset): the training dataset + test_dataset (Dataset): the test dataset + setting (ContinualDataset): the setting of the dataset + + Returns: + the training and test loaders """ - train_mask = np.logical_and(np.array(train_dataset.targets) >= setting.i, - np.array(train_dataset.targets) < setting.i + setting.N_CLASSES_PER_TASK) - test_mask = np.logical_and(np.array(test_dataset.targets) >= setting.i, - np.array(test_dataset.targets) < setting.i + setting.N_CLASSES_PER_TASK) + if not isinstance(train_dataset.targets, np.ndarray): + train_dataset.targets = np.array(train_dataset.targets) + if not isinstance(test_dataset.targets, np.ndarray): + test_dataset.targets = np.array(test_dataset.targets) - train_dataset.data = train_dataset.data[train_mask] - test_dataset.data = test_dataset.data[test_mask] + if setting.args.permute_classes: + train_dataset.targets = setting.args.class_order[train_dataset.targets] + test_dataset.targets = setting.args.class_order[test_dataset.targets] - train_dataset.targets = np.array(train_dataset.targets)[train_mask] - test_dataset.targets = np.array(test_dataset.targets)[test_mask] + if setting.args.validation: + n_samples = len(train_dataset) + n_samples_val = torch.div(n_samples, setting.args.validation, rounding_mode='floor').item() - train_loader = DataLoader(train_dataset, - batch_size=setting.args.batch_size, shuffle=True, num_workers=4) - test_loader = DataLoader(test_dataset, - batch_size=setting.args.batch_size, shuffle=False, num_workers=4) - setting.test_loaders.append(test_loader) - setting.train_loader = train_loader + train_idxs = torch.randperm(n_samples, generator=torch.Generator().manual_seed(setting._c_seed)).numpy() + val_idxs = train_idxs[:n_samples_val] + train_idxs = train_idxs[n_samples_val:] - setting.i += setting.N_CLASSES_PER_TASK - return train_loader, test_loader + train_dataset.data, test_dataset.data = train_dataset.data[train_idxs], train_dataset.data[val_idxs] + train_dataset.targets, test_dataset.targets = train_dataset.targets[train_idxs], train_dataset.targets[val_idxs] + if setting.SETTING == 'class-il' or setting.SETTING == 'task-il': + train_mask = np.logical_and(np.array(train_dataset.targets) >= setting.i, + np.array(train_dataset.targets) < setting.i + setting.N_CLASSES_PER_TASK) + test_mask = np.logical_and(np.array(test_dataset.targets) >= setting.i, + np.array(test_dataset.targets) < setting.i + setting.N_CLASSES_PER_TASK) -def get_previous_train_loader(train_dataset: Dataset, batch_size: int, - setting: ContinualDataset) -> DataLoader: - """ - Creates a dataloader for the previous task. - :param train_dataset: the entire training set - :param batch_size: the desired batch size - :param setting: the continual dataset at hand - :return: a dataloader - """ - train_mask = np.logical_and(np.array(train_dataset.targets) >= - setting.i - setting.N_CLASSES_PER_TASK, np.array(train_dataset.targets) - < setting.i - setting.N_CLASSES_PER_TASK + setting.N_CLASSES_PER_TASK) + train_dataset.data = train_dataset.data[train_mask] + test_dataset.data = test_dataset.data[test_mask] - train_dataset.data = train_dataset.data[train_mask] - train_dataset.targets = np.array(train_dataset.targets)[train_mask] + train_dataset.targets = train_dataset.targets[train_mask] + test_dataset.targets = test_dataset.targets[test_mask] - return DataLoader(train_dataset, batch_size=batch_size, shuffle=True) + train_dataset, test_dataset = _prepare_data_loaders(train_dataset, test_dataset, setting) + + train_loader = create_seeded_dataloader(setting.args, train_dataset, + batch_size=setting.args.batch_size, shuffle=True) + test_loader = create_seeded_dataloader(setting.args, test_dataset, + batch_size=setting.args.batch_size, shuffle=False) + setting.test_loaders.append(test_loader) + setting.train_loader = train_loader + + setting.i += setting.N_CLASSES_PER_TASK + setting.c_task += 1 + return train_loader, test_loader diff --git a/datasets/utils/gcl_dataset.py b/datasets/utils/gcl_dataset.py index fa23f7c7..5c64c113 100644 --- a/datasets/utils/gcl_dataset.py +++ b/datasets/utils/gcl_dataset.py @@ -3,12 +3,42 @@ # This source code is licensed under the license found in the # LICENSE file in the root directory of this source tree. -class GCLDataset: +from argparse import Namespace +from typing import Tuple + +from datasets.utils.continual_dataset import ContinualDataset + + +class GCLDataset(ContinualDataset): """ - Continual learning evaluation setting. + General Continual Learning evaluation setting. """ - NAME = None - SETTING = None - N_CLASSES = None - LENGTH = None - \ No newline at end of file + NAME: str + SETTING: str + N_CLASSES_PER_TASK: int + N_TASKS: int + N_CLASSES: int + SIZE: Tuple[int] + + def __init__(self, args: Namespace) -> None: + """ + Initializes the train and test lists of dataloaders. + + Args: + args: the arguments which contains the hyperparameters + """ + self.N_CLASSES_PER_TASK = self.N_CLASSES + self.N_TASKS = 1 + assert args.n_epochs == 1, 'GCLDataset is not compatible with multiple epochs' + super().__init__(args) + + if not all((self.NAME, self.SETTING, self.SIZE)): + raise NotImplementedError('The dataset must be initialized with all the required fields.') + + @staticmethod + def get_epochs(): + """ + A GCLDataset is not compatible with multiple epochs. + """ + + return 1 diff --git a/datasets/utils/validation.py b/datasets/utils/validation.py index 147db12a..be79192d 100644 --- a/datasets/utils/validation.py +++ b/datasets/utils/validation.py @@ -18,7 +18,7 @@ class ValidationDataset(Dataset): def __init__(self, data: torch.Tensor, targets: np.ndarray, transform: Optional[nn.Module] = None, - target_transform: Optional[nn.Module] = None) -> None: + target_transform: Optional[nn.Module] = None) -> None: self.data = data self.targets = targets self.transform = transform @@ -53,11 +53,15 @@ def get_train_val(train: Dataset, test_transform: nn.Module, dataset: str, val_perc: float = 0.1): """ Extract val_perc% of the training set as the validation set. - :param train: training dataset - :param test_transform: transformation of the test dataset - :param dataset: dataset name - :param val_perc: percentage of the training set to be extracted - :return: the training set and the validation set + + Args: + train: training dataset + test_transform: transformation of the test dataset + dataset: dataset name + val_perc: percentage of the training set to be extracted + + Returns: + the training set and the validation set """ dataset_length = train.data.shape[0] directory = 'datasets/val_permutations/' diff --git a/docs/Makefile b/docs/Makefile new file mode 100644 index 00000000..7a34cc2c --- /dev/null +++ b/docs/Makefile @@ -0,0 +1,26 @@ +# Minimal makefile for Sphinx documentation +# + +# You can set these variables from the command line, and also +# from the environment for the first two. +SPHINXOPTS ?= +SPHINXBUILD ?= sphinx-build +SOURCEDIR = . +BUILDDIR = _build + +# Put it first so that "make" without argument is like "make help". +help: + @$(SPHINXBUILD) -M help "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) + +.PHONY: help Makefile + +clean: + @$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) +# rm -rf generated +# rm -rf **/generated + +# Catch-all target: route all unknown targets to Sphinx using the new +# "make mode" option. $(O) is meant as a shortcut for $(SPHINXOPTS). +%: Makefile + python ../utils/args.py + @$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) diff --git a/docs/README-DOCS.md b/docs/README-DOCS.md new file mode 100644 index 00000000..ede44d91 --- /dev/null +++ b/docs/README-DOCS.md @@ -0,0 +1,15 @@ +Docs make use of [Sphinx](https://www.sphinx-doc.org/en/master/) and the [furo](https://pradyunsg.me/furo/quickstart/) template. + +Install the dependencies with: + +```bash +pip install -r docs/requirements.txt +``` + +To build the docs, run: + +```bash +cd docs; make html +``` + +**Note**: The building process produces a lot of warnings (_WARNING: duplicate label other useful arguments_). They are expected and can be ignored. diff --git a/docs/_templates/custom-base-template.rst b/docs/_templates/custom-base-template.rst new file mode 100644 index 00000000..1a196e01 --- /dev/null +++ b/docs/_templates/custom-base-template.rst @@ -0,0 +1,30 @@ +.. include:: ../{{ module }}/index.rst + +Module attributes and functions +------------------------------- + +.. automodule:: {{ fullname }} + :members: + :undoc-members: + +{% block modules %} +{% if modules %} + +.. autosummary:: + :recursive: + :toctree: + :hidden: + :template: custom-module-template.rst + {% for item in modules | reorder_modules %} + {{ item }} + {%- endfor %} + +.. toctree:: + :hidden: + {% for item in modules | reorder_modules %} + {{ item | parse_toctree_name }} <{{ item }}.rst> + {%- endfor %} + +{% endif %} +{% endblock %} + diff --git a/docs/_templates/custom-module-template.rst b/docs/_templates/custom-module-template.rst new file mode 100644 index 00000000..bdd36329 --- /dev/null +++ b/docs/_templates/custom-module-template.rst @@ -0,0 +1,77 @@ +{{ fullname | get_headling_module }} + +.. currentmodule:: {{ fullname }} + +.. automodule:: {{ fullname }} + + {% block attributes %} + {% if attributes %} + .. rubric:: {{ _('Module Attributes') }} + + {% for item in attributes %} + .. autoattribute:: {{ item }} + :annotation: + {%- endfor %} + {% endif %} + {% endblock %} + + {% block classes %} + {% if classes %} + .. rubric:: {{ _('Classes') }} + + {% for item in classes %} + .. autoclass:: {{ item }} + :members: + :undoc-members: + :show-inheritance: + {%- endfor %} + {% endif %} + {% endblock %} + + {% block functions %} + {% if functions %} + .. rubric:: {{ _('Functions') }} + + {% for item in functions %} + .. autofunction:: {{ item }} + :members: + :undoc-members: + :show-inheritance: + {%- endfor %} + + {% for item in functions %} + .. autofunction:: {{ item }} + {%- endfor %} + {% endif %} + {% endblock %} + + {% block exceptions %} + {% if exceptions %} + .. rubric:: {{ _('Exceptions') }} + + {% for item in exceptions %} + .. autoexception:: {{ item }} + {%- endfor %} + {% endif %} + {% endblock %} + +{% block modules %} +{% if modules %} + +.. autosummary:: + :recursive: + :toctree: + :hidden: + :template: custom-module-template.rst + {% for item in modules | reorder_modules %} + {{ item }} + {%- endfor %} + +.. toctree:: + :hidden: +{% for item in modules | reorder_modules %} + {{ item }} +{%- endfor %} + +{% endif %} +{% endblock %} \ No newline at end of file diff --git a/docs/backbone/index.rst b/docs/backbone/index.rst new file mode 100644 index 00000000..0b02396a --- /dev/null +++ b/docs/backbone/index.rst @@ -0,0 +1,47 @@ +.. _module-backbones: + +Backbones +========= + +Backbones constitute the underlying architecture of the network. They are responsible for extracting features from the input. +Once loaded by the model (:ref:`module-models`), the backbone is accessible as the ``self.net`` attribute. + +The specific choice of the backbone depends on the benchmark (i.e, the dataset - see :ref:`module-datasets`), which defines the backbone from the **get_backbone** method. + +Features and logits +------------------- + +Models may exploit the features extracted by the backbone at different levels. For example, **DER** uses the soft targets produced after the classification layer of the backbone (i.e., the logits), while **iCaRL** uses the features extracted by the backbone before the classification layer to compute the class means. In order to allow for this flexibility, all backbones **must** accept the ``returnt`` argument, which specifies the level at which the features are extracted. The possible values are: + +- ``returnt='out'``: the backbone returns the logits produced *after* the classification layer. + +- ``returnt='features'``: the backbone returns the features extracted immediately *before* the classification layer. + +- ``returnt='both'``: the backbone returns both the logits and the features (a tuple ``(logits, feature)``). + +In addition, some models require the output of *all* the layers of the backbone (e.g, **TwF**). In this case, the ``returnt`` argument can be set to: + +- ``returnt='full'``: the backbone returns the output of all the layers (a list of tensors). + +.. note:: + + Other values of ``returnt`` may be supported by the backbone, but they are not guaranteed to work with all the models. + + +Mammoth backbone base class +--------------------------- + +Backbones should inherit from the **MammothBackbone** class (below), which provides some useful methods. +This is not a strict requirement, but it is strongly recommended for compatibility with the existing models. + +The **MammothBackbone** class provides the following methods: + +- **features**: returns the features extracted by the backbone (before the classification layer). This is equivalent to calling ``self.net(x, returnt='features')``. + +- **get_grads**: returns the gradients of the backbone with respect to the loss, concatenated in a single tensor. + +- **set_grads**: sets the gradients of the backbone from a single (concatenated) tensor. + +- **get_params**: returns all the parameters of the backbone concatenated in a single tensor. + +- **set_params**: sets the parameters of the backbone from a single (concatenated) tensor. \ No newline at end of file diff --git a/docs/conf.py b/docs/conf.py new file mode 100644 index 00000000..9fb72e22 --- /dev/null +++ b/docs/conf.py @@ -0,0 +1,180 @@ +# Configuration file for the Sphinx documentation builder. +# +# For the full list of built-in configuration values, see the documentation: +# https://www.sphinx-doc.org/en/master/usage/configuration.html + +# -- Project information ----------------------------------------------------- +# https://www.sphinx-doc.org/en/master/usage/configuration.html#project-information + +import os +import sys +from typing import List +from importlib import import_module +from jinja2.filters import FILTERS +import torch + +mammoth_path = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) +sys.path.append(mammoth_path) +os.chdir(mammoth_path) + +from datetime import date + +project = 'Mammoth' +author = 'Pietro Buzzega, Matteo Boschini, Lorenzo Bonicelli, Aniello Panariello, Davide Abati, Angelo Porrello, Simone Calderara' +copyright = f'{date.today().year}, {author}' + +# -- General configuration --------------------------------------------------- +# https://www.sphinx-doc.org/en/master/usage/configuration.html#general-configuration + +extensions = ['sphinx.ext.autodoc', + 'sphinx.ext.intersphinx', + 'sphinx.ext.autosummary', + 'sphinx.ext.napoleon', + 'sphinx.ext.viewcode', + 'sphinx.ext.viewcode', + 'sphinx_tabs.tabs', + 'sphinx-prompt', + 'sphinx_toolbox', + 'sphinx.ext.autosectionlabel'] + +github_username = 'aimagelab' +github_repository = 'mammoth' + +intersphinx_mapping = { + 'python': ('https://docs.python.org/3', None), + 'torch': ('https://pytorch.org/docs/master/', None), + 'torchvision': ('https://pytorch.org/docs/master/', None), + 'numpy': ('https://numpy.org/doc/stable/', None), +} + +templates_path = ['_templates'] +exclude_patterns = ['_build', 'Thumbs.db', '.DS_Store'] + +# The suffix(es) of source filenames. +# You can specify multiple suffix as a list of string: +# +# source_suffix = ['.rst', '.md'] +source_suffix = '.rst' + +# The master toctree document. +master_doc = 'index' + +# The language for content autogenerated by Sphinx. Refer to documentation +# for a list of supported languages. +# +# This is also used if you do content translation via gettext catalogs. +# Usually you set "language" from the command line for these cases. +language = 'en' + +# List of patterns, relative to source directory, that match files and +# directories to ignore when looking for source files. +# This pattern also affects html_static_path and html_extra_path. +exclude_patterns: List[str] = [] + +# The name of the Pygments (syntax highlighting) style to use. +pygments_style = 'friendly' + +# https://www.sphinx-doc.org/en/master/usage/configuration.html#confval-nitpicky +# This generates a lot of warnings because of the broken internal links, which +# makes the docs build fail because of the "fail_on_warning: true" option in +# the .readthedocs.yml config file +# nitpicky = True + +# -- Options for HTML output ------------------------------------------------- +# https://www.sphinx-doc.org/en/master/usage/configuration.html#options-for-html-output + +# html_theme = 'alabaster' +html_theme = "furo" +html_title = "Mammoth" +html_static_path = ['_static'] +html_favicon = 'images/logo.png' + +autosummary_generate = True +numpydoc_show_class_members = False + +# Disable docstring inheritance +autodoc_inherit_docstrings = False + +# Show type hints in the description +autodoc_typehints = "description" + +# Add parameter types if the parameter is documented in the docstring +autodoc_typehints_description_target = "documented_params" + + +def get_attributes(item, obj, modulename): + module = import_module(modulename) + if hasattr(getattr(module, obj), item): + return f"{item}" + else: + return "" + + +def drop_torch_items(items, obj, module): + mod = import_module(module) + import_obj = getattr(mod, obj) + fn_to_keep = import_obj.__dict__.keys() + for item in items: + if item in fn_to_keep and item != "__init__": + yield item + + +def has_items(items, obj, module): + mod = import_module(module) + import_obj = getattr(mod, obj) + fn_to_keep = import_obj.__dict__.keys() + its = [item for item in items if item in fn_to_keep and item != "__init__"] + return len(its) > 0 + + +def get_headling_module(fullname): + paths = fullname.split('.') + name = paths[-1] + module = '/'.join(paths[:-1]) + if os.path.exists(f'./docs/{ module }/{ name }.rst'): + fs = open(f'./docs/{ module }/{ name }.rst', 'r').read() + return fs + else: + if os.path.isdir('./' + '/'.join(paths)): + name = name.capitalize() + else: + name = name + return f".. _module-{name}:\n{name}\n" + "=" * (len(name) + 1) + + +def reorder_modules(modules): + mods, others = [], [] + for module in modules: + if os.path.isdir(os.path.join(mammoth_path, module.replace('.', '/'))): # module + mods.append(module) + else: + others.append(module) + + mods = sorted(mods, key=lambda x: x.split('.')[-1]) + others = sorted(others, key=lambda x: x.split('.')[-1]) + return mods + others + + +def _is_dir(module): + return os.path.isdir(os.path.join(mammoth_path, module.replace('.', '/'))) + + +def parse_toctree_name(item): + name = item.split('.')[-1] + + if _is_dir(item): + # camel case name + name = name.split('_') + name = [n.capitalize() for n in name] + name = ' '.join(name) + return name + else: + return name + + +FILTERS["parse_toctree_name"] = parse_toctree_name +FILTERS["reorder_modules"] = reorder_modules +FILTERS["get_headling_module"] = get_headling_module +FILTERS["has_items"] = has_items +FILTERS["drop_torch_items"] = drop_torch_items +FILTERS["get_attributes"] = get_attributes diff --git a/docs/datasets/index.rst b/docs/datasets/index.rst new file mode 100644 index 00000000..ac1db709 --- /dev/null +++ b/docs/datasets/index.rst @@ -0,0 +1,112 @@ +.. _module-datasets: + +Datasets +======== + +Mammoth datasets **define a complete and separate** Continual Learning benchmark. This means that +each dataset **must statically define** all the necessary information to run a continual learning experiment, including: + +.. admonition:: Required properties + + - Name of the dataset: **NAME** attribute (``str``). + + - Incremental setting (`class-il`, `domain-il`, or `general-continual`): **SETTING** attribute (``str``). See more in section :ref:`settings`. + + - Size of the input data: **SIZE** attribute (``tuple[int]``). + +.. admonition:: Required properties for `class-il` and `domain-il` settings + + - Number of tasks: **TASKS** attribute (``int``). + + - Number of classes per task: **N_CLASSES_PER_TASK** attribute (``int|tuple[int]``). This can be a list of integers (one for each task and only for `class-il` setting), or a single integer. + +.. admonition:: Required methods for **all** settings + + - **get_epochs** static method (``int``): returns the number of epoch for each task. This method is optional **only** for datasets that follow the `general-continual` setting. + + - **get_batch_size** static method (``int``): returns the batch size for each task. + + - **get_data_loaders** static method (``[DataLoader, DataLoader]``): returns the train and test data loaders for each task. See more in :ref:`Utils`. + + - **get_backbone** static method (``nn.Module``): returns the backbone model for the experiment. Backbones are defined in `backbones` folder. See more in :ref:`backbones`. + + - **get_transform** static method (``callable``): returns the data-augmentation transform to apply to the data during train. + + - **get_loss** static method (``callable``): returns the loss function to use during train. + + - **get_normalization_transform** static method (``callable``): returns the normalization transform to apply *on torch tensors* (no `ToTensor()` required). + + - **get_denormalization_transform** static method (``callable``): returns the transform to apply on the tensors to revert the normalization. You can use the `DeNormalize` function defined in `datasets/transforms/denormalization.py`. + + +See :ref:`continual_dataset` for more details or **SequentialCIFAR10** in :ref:`seq_cifar10` for an example. + +.. note:: + Datasets are downloaded by default in the **data** folder. You can change this + default location by setting the **base_path** function in :ref:`conf`. + +.. _settings: + +Experimental settings +--------------------- + +Experimental settings follow and extend the notation of `Three Scenarios for Continual Learning `_, +and are defined in the **SETTING** attribute of each dataset. The following settings are available: + +- `class-il`: the total number of classes increases at each task, following the **N_CLASSES_PER_TASK** attribute. + .. admonition:: On *task-il* and *class-il* + :class: note + + Using this setting metrics will be computed both for `class-il` and `task-il`. Metrics for + `task-il` will be computed by masking the correct task for each sample during inference. This + allows to compute metrics for both settings without having to run the experiment twice. + +- `domain-il`: the total number of classes is fixed, but the distribution of the input data changes at each task. + +- `general-continual`: the distribution of the classes change gradually over time, without notion of task boundaries. In this setting, the **TASKS** and **N_CLASSES_PER_TASK** attributes are ignored as there is only a single long tasks that changes over time. + +- `cssl`: this setting is the same as `class-il`, but with some of the labels missing due to limited supervision. This setting is used to simulate the case where a percentage of the labels is not available for training. For example, if ``--label_perc`` is set to ``0.5``, only 50% of the labels will be available for training. The remaining 50% will be masked with a label of ``-1`` and ignored during training if the currently used method does not support partial labels (check out the **COMPATIBILITY** attribute in :ref:`module-models`). + +.. admonition:: Experiments on the **joint** setting + :class: hint + + Mammoth datasets support the **joint** setting, which is a special case of the `class-il` setting where all the classes are available at each task. This is useful to compare the performance of a method on what is usually considered the *upper bound* for the `class-il` setting. To run an experiment on the **joint** setting, simply set the ``--joint`` to ``1``. This will automatically set the **N_CLASSES_PER_TASK** attribute to the total number of classes in the dataset and the **TASKS** attribute to ``1``. + + +Steps to create a new dataset: +------------------------------ + +All datasets must inherit from the **ContinualDataset** class, which is defined in :ref:`continual_dataset`. The only +exception are datasets that follow the `general-continual` setting, which inherit from the **GCLDataset** class, (defined in :ref:`gcl_dataset`). +These classes provide some useful methods to create data loaders and store masked data loaders for continual learning experiments. See more in section :ref:`Utils`. + + 1. Create a new file in the `datasets` folder, e.g. ``my_dataset.py``. + + 2. Define a new class that inherits from `ContinualDataset` or `GCLDataset` and implements all the required methods and attributes. + + 3. Define the **get_data_loaders** method, which returns a list of train and test data loaders for each task (see more in section :ref:`Utils`). + + .. tip:: + For convenience, most datasets are initially created with all classes and then masked appropriately by the **store_masked_loaders** function. + For example, in :ref:`seq_cifar10` the **get_data_loaders** function of **SequentialCIFAR10** dataset first inizializes the **MyCIFAR10** and **TCIFAR10** + datasets with train and test data for all classes respectively, and then masks the data loaders to return only the data for the current task. + + .. important:: + The train data loader **must** return both augmented and non-augmented data. This is done to allow the storage of raw data for replay-based methods + (for more information, check out `Rethinking Experience Replay: a Bag of Tricks for Continual Learning `_). + The signature return for the train data loader is ``(augmented_data, labels, non_augmented_data)``, while the test data loader should return ``(data, labels)``. + + 4. If all goes well, your dataset should be picked up by the **get_dataset** function and you should be able to run an experiment with it. + +Utils +-------- + +- **get_data_loaders**: This function should take care of downloading the dataset if necessary, make sure that it contains samples and labels for +**only** the current task (you can use the **store_masked_loaders** function), and create the data loaders. + +- **store_masked_loaders**: This function is defined in :ref:`continual_dataset` and takes care of masking the data loaders to return only the data for the current task. +It is used by most datasets to create the data loaders for each task. + - If the ``--permute_classes`` flag is set to ``1``, it also applies the appropriate permutation to the classes before splitting the data. + + - If the ``--label_perc`` argument is set to a value between ``0`` and ``1``, it also randomly masks a percentage of the labels for each task. + diff --git a/docs/getting_started/checkpoints.rst b/docs/getting_started/checkpoints.rst new file mode 100644 index 00000000..7dfd6cb9 --- /dev/null +++ b/docs/getting_started/checkpoints.rst @@ -0,0 +1,42 @@ +Load and save checkpoints +========================= + +Loading and saving checkpoints is handeled automatically in :ref:`module-training` by supplying the ``--savecheck`` and ``--loadcheck`` arguments. + +.. rubric:: Checkpoint save format + +Mammoth saves checkpoints in the ``checkpoints`` folder, with a separate checkpoint file for each task. The checkpoint file follows the format: ``[]_____.pt``. + +- The ```` is an extra optional argument ``--ckpt_name`` that can be supplied to the training script. + +- ```` is the name of the model, supplied by ``--model``. + +- ```` is the name of the dataset, supplied by ``--dataset``. + +- ```` is the size of the buffer. If no buffer is used, this is set to 0. + +- ```` is the number of epochs trained, either set by the dataset or by ``--n_epochs``. + +- ```` is the timestamp of when the main script was initially run. Note that this allows all the checkpoints of different tasks to be saved under the same base name (except the ````). The timestamp follows the format ``%Y%m%d-%H%M%S``. + +- ```` is the task number, starting from 0. If ``--joint`` is supplied, this is set to ``joint``. + +Inside the checkpoint file, the following information is saved: + +- ``model``: the state dict of the model. This contains the weights of the backbone (in ``model.backbone``) and any other parameter that was set during the model initialization and training. + +- ``optimizer``: the state dict of the optimizer. + +- ``scheduler``: the state dict of the scheduler, if one was used. + +- ``args``: the arguments supplied to the main script. + +- ``results``: all the metrics mesured up to the current task and the state of the logger. This information is necessary in order to continue training from the last checkpoint. + +.. rubric:: Checkpoint loading + +Mammoth supports loading checkpoint both from the local machine and from a remote machine using the ``--loadcheck`` argument. To load a checkpoint from a remote machine, simply supply the ``--loadcheck`` with the URL of the checkpoint file. + +Checkpoints can be loaded either following the mammoth format (defined above) or from a simple ``.pt`` file. In the latter case, the checkpoint file should contain all the parameters of the *backbone* of the model. The other parameters (optimizer, scheduler, etc.) will be initialized from scratch. + +The loading functions are available in :ref:`module-checkpoints` and should take care of loading all the parameters regardless of the presence of module parallelism (see :ref:`module-distributed-training`). \ No newline at end of file diff --git a/docs/getting_started/distributed_training.rst b/docs/getting_started/distributed_training.rst new file mode 100644 index 00000000..4d749eda --- /dev/null +++ b/docs/getting_started/distributed_training.rst @@ -0,0 +1,11 @@ +.. _module-distributed-training: + +Distributed training +==================== + +Mammoth supports distributed training via `DataParallel `_. To use it, simply pass the `--distributed=dp` argument to ``utils/main.py``. This will automatically use all available GPUs on the machine using the **make_dp** function in :ref:`module-distributed`. + +DataParallel training **splits the batch** across GPUs and performs the forward and backward passes on each GPU. The gradients are then **averaged** across GPUs and the model parameters are updated. This is the simplest form of distributed training supported by PyTorch and is the only one supported by Mammoth as of now. + +.. important:: + As of now, Mammoth only supports DataParallel training. This is due to the difficulty of synchronizing the memory buffer across multiple GPUs after each batch. However, experimental support for `DistributedDataParallel `_ training in a `slurm `_ cluster is available in the :ref:`module-distributed` module via the **make_ddp** function. \ No newline at end of file diff --git a/docs/getting_started/index.rst b/docs/getting_started/index.rst new file mode 100644 index 00000000..2823af45 --- /dev/null +++ b/docs/getting_started/index.rst @@ -0,0 +1,37 @@ +First steps +=============== + +1. Install the requirements with ``pip install -r requirements.txt``. + +2. From the root directory, run ``python utils/main.py --help`` to see the available options. + +See :ref:`module-utils` for more information about the most useful arguments + +Results and logs - WandB +------------------------ + +Mammoth logs all the results and metrics under the ``data/results`` directory (by default). You can change this directory by changing the **base_path** function in :ref:`module-conf`. + +- The logs are organized in the following way: `///logs.pyd`. + +- Each line in the log file is a dictionary containing the arguments and results for a single run. + +WandB +~~~~~ + +For advanced logging, including loss values, metrics, and hyperparameters, you can use [WandB](https://wandb.ai/) by providing both ``--wandb_project`` and ``--wandb_entity`` arguments. If you don't want to use WandB, you can simply omit these arguments. + +.. tip:: + By default, all arguments, loss values, and metrics are logged. Thanks to the **autolog_wandb** (:ref:`module-models`), all the variables created in the **observe** that contain *loss* or start with *_wandb_* will be logged. Thus, in order to loss all the separate loss values, you can simply add ``loss = loss + loss1 + loss2`` to the **observe** function. + +Metrics are logged on WandB both in a raw form, separated for each task and class. This allows further analysis (e.g., with the Mammoth :ref:`Parseval `). To differentiate between raw metrics logged on WandB and other aggregated metrics that may have been logged, all the raw metrics are prefixed with **RESULTS_**. This behavior can be changed by changing the prefix in the **log_accs** function in :ref:`module-loggers`. + +Testing +------- + +Mammoth includes a few tests to ensure that the code is working as expected for all available models and datasets. The tests are run using `pytest` and can be run using the following command: + +.. code-block:: bash + + pytest --verbose tests + diff --git a/docs/getting_started/parseval.rst b/docs/getting_started/parseval.rst new file mode 100644 index 00000000..e4891d8a --- /dev/null +++ b/docs/getting_started/parseval.rst @@ -0,0 +1,8 @@ +.. _module-parseval: + +Mammoth parseval +================ + +.. todo:: + + To be written \ No newline at end of file diff --git a/docs/getting_started/scripts.rst b/docs/getting_started/scripts.rst new file mode 100644 index 00000000..294edde3 --- /dev/null +++ b/docs/getting_started/scripts.rst @@ -0,0 +1,40 @@ +Scripts +======= + +Mammoth includes a couple of scripts (under the ``scripts`` folder) to help you with your development. + +- ``scripts/prepare_grid.py``: this script contains a ``grid_combinations`` dictionary, which contains all the hyper-parameters you want to test and their possible values. It will generate a ``data/jobs/.txt`` file containing all the possible combinations of hyper-parameters. You can then use this file to launch your experiments on the grid (see below). + +- ``scripts/local_launcher.py``: this script will launch all the experiments in the ``data/jobs/.txt`` file in paralel on your local machine. Logs for each experiment will be stored in the ``logs`` folder. It accepts the following arguments: + - ``--file``: path to the file containing the experiments to run (default: ``data/jobs/.txt``) + + - ``--redundancy``: number of times each experiment should be repeated (default: 1) + + - ``--at_a_time``: number of experiments to run in parallel (default: 1) + + - ``--start_from``: index of the first experiment to run (default: 0) + + - ``--reverse``: if set, the experiments will be run in reverse order (default: False) + +- ``scripts/slurm_sbatcher.py``: this script will launch all the experiments in the ``data/jobs/.txt`` file on a SLURM cluster. By default, the standard output and standard error will be redirected to a ``out`` and ``err`` folder respectively. The main arguments it accepts are: + - ``--file``: path to the file containing the experiments to run (default: ``data/jobs/.txt``) + + - ``--at_a_time``: number of experiments to run in parallel for each slurm job (default: 1) + + - ``--cycles``: number of times each experiment should be repeated (default: 1) + + - ``--name``: name of the slurm job (default: ``mammoth``) + + - ``--partition``: name of the slurm partition (default: ``gpu``) + + - ``--account``: maximum time for each slurm job (default: ``1-00:00:00``) + + - ``--dry``: if set, the slurm jobs will not be submitted (default: False) + +- ``scripts/wandb_sync.py``: this script is used to facilitate syncing the logs produced by WandB (useful if WandB was set to `offline`). Instead of sequentially syncing the logs for each experiment, this script will sync the logs for all the experiments in parallel. It accepts the following arguments: + - ``--n_workers``: number of workers to use (default: 4*number of cores) + + - ``--limit``: maximum number of experiments to sync (default: None) + + - ``--reverse``: if set, the experiments will be synced in reverse order (default: False) + diff --git a/docs/images/logo.png b/docs/images/logo.png new file mode 100644 index 00000000..b42b4b24 Binary files /dev/null and b/docs/images/logo.png differ diff --git a/docs/images/mnist360.gif b/docs/images/mnist360.gif new file mode 100644 index 00000000..aee45bf4 Binary files /dev/null and b/docs/images/mnist360.gif differ diff --git a/docs/images/perm_mnist.gif b/docs/images/perm_mnist.gif new file mode 100644 index 00000000..f4fef1a2 Binary files /dev/null and b/docs/images/perm_mnist.gif differ diff --git a/docs/images/rot_mnist.gif b/docs/images/rot_mnist.gif new file mode 100644 index 00000000..202e45c1 Binary files /dev/null and b/docs/images/rot_mnist.gif differ diff --git a/docs/images/seq_cifar10.gif b/docs/images/seq_cifar10.gif new file mode 100644 index 00000000..494266bc Binary files /dev/null and b/docs/images/seq_cifar10.gif differ diff --git a/docs/images/seq_mnist.gif b/docs/images/seq_mnist.gif new file mode 100644 index 00000000..969f698a Binary files /dev/null and b/docs/images/seq_mnist.gif differ diff --git a/docs/images/seq_tinyimg.gif b/docs/images/seq_tinyimg.gif new file mode 100644 index 00000000..92306ccf Binary files /dev/null and b/docs/images/seq_tinyimg.gif differ diff --git a/docs/index.rst b/docs/index.rst new file mode 100644 index 00000000..4c2ff9a5 --- /dev/null +++ b/docs/index.rst @@ -0,0 +1,41 @@ +.. Mammoth documentation master file, created by + sphinx-quickstart on Tue Dec 5 23:41:27 2023. + You can adapt this file completely to your liking, but it should at least + contain the root `toctree` directive. + +.. autosummary:: + :toctree: generated + :hidden: + :template: custom-base-template.rst + :recursive: + + models + datasets + backbone + utils + + +.. toctree:: + :maxdepth: 1 + :glob: + :hidden: + :caption: Getting started: + + getting_started/index.rst + getting_started/checkpoints.rst + getting_started/distributed_training.rst + getting_started/scripts.rst + Parseval + +.. toctree:: + :glob: + :maxdepth: 1 + :hidden: + :caption: Contents: + + generated/models.rst + generated/datasets.rst + generated/backbone.rst + generated/utils.rst + +.. include:: readme.rst diff --git a/docs/make.bat b/docs/make.bat new file mode 100644 index 00000000..954237b9 --- /dev/null +++ b/docs/make.bat @@ -0,0 +1,35 @@ +@ECHO OFF + +pushd %~dp0 + +REM Command file for Sphinx documentation + +if "%SPHINXBUILD%" == "" ( + set SPHINXBUILD=sphinx-build +) +set SOURCEDIR=. +set BUILDDIR=_build + +%SPHINXBUILD% >NUL 2>NUL +if errorlevel 9009 ( + echo. + echo.The 'sphinx-build' command was not found. Make sure you have Sphinx + echo.installed, then set the SPHINXBUILD environment variable to point + echo.to the full path of the 'sphinx-build' executable. Alternatively you + echo.may add the Sphinx directory to PATH. + echo. + echo.If you don't have Sphinx installed, grab it from + echo.https://www.sphinx-doc.org/ + exit /b 1 +) + +if "%1" == "" goto help + +%SPHINXBUILD% -M %1 %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% %O% +goto end + +:help +%SPHINXBUILD% -M help %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% %O% + +:end +popd diff --git a/docs/models/index.rst b/docs/models/index.rst new file mode 100644 index 00000000..ac228cba --- /dev/null +++ b/docs/models/index.rst @@ -0,0 +1,155 @@ +.. _module-models: + +Models +======== + +A **model** is a class that contains a few requires methods and attributes to be used in the continual learning framework. +To be compatible with the auto-detection mechanism (the **get_model** function below), a model must: + +* extend the base class **ContinualModel** in :ref:`module-continual_model`, which implements most of the required methods, leaving to the user the definition of the **observe** method (see in :ref:`training and testing`). In addition, the model must define the **NAME** and **COMPATIBILITY** attributes (see below). + +* be defined in a file named **.py** and placed in the **models** folder. + +The model-specific hyper-parameters of the model can be set in the **get_parser** static method (see in :ref:`Model parameters`). + +.. note:: + The name of the file will be used to identify the model. For example, if the model is defined in a file named **my_model.py**, the name of the model will be **my_model** and will be called with the command line option **--model my_model**. + +.. important:: + Each file can contain **only one** model. If you want to define multiple models, you have to create multiple files. + +Training and testing +-------------------- + +The **observe** method is the only method that **must** be implemented by the user. It is called at each training iteration and it is used to update the model parameters according to the current training batch. The method must have the following signature: + +.. code-block:: python + + def observe(self, inputs: torch.Tensor, labels: torch.Tensor, + not_aug_inputs: torch.Tensor, epoch: int = None) -> float: + + # Update the model parameters according to the current batch + ... + + # Return the current loss value (as a float value) + return loss.item() + +The method receives as input the current training batch (i.e., **inputs** and **labels**), the original batch (i.e., **not_aug_inputs**) and (*optionally*) the current training epoch (i.e., **epoch**). The method must return the current loss value (as a float value). + +Evaluation +~~~~~~~~~~ + +The **forward** method is used to evaluate the model on the test set. By default, it is implemented in the base class **ContinualModel** and just calls the **forward** method of the backbone model. However, it can be overridden to implement a different evaluation method. The method must have the following signature: + +.. code-block:: python + + def forward(self, x: torch.Tensor) -> torch.Tensor: + + # Compute the output of the model + ... + + # Return the output of the model + return output + +Attributes and utility methods +------------------------------- + +The base class **ContinualModel** (:ref:`module-continual_model`) includes the **NAME** and **COMPATIBILITY** attributes, which are used to identify the model and to check its compatibility with the chosen **setting** (see :ref:`module-datasets` for more details). The **NAME** attribute is a string that identifies the model, while the **COMPATIBILITY** attribute is a list of strings that identify the compatible settings. For example, the **DER** model (:ref:`module-der`) includes compatibility with ``['class-il', 'domain-il', 'task-il', 'general-continual']`` settings, and thus is compatible with all the datasets included in the framework. However, as it includes no compatibility with the ``'cssl'`` setting, it cannot take advantage of unlabeled samples (available if ``--label_perc`` is set to a value between ``0`` and ``1``). + +Backbone model +~~~~~~~~~~~~~~ + +The **ContinualModel** loads the backbone model (i.e., the model used to compute the output of the model) during the initialization. By default, the backbone model is defined by the chosen **dataset** (see :ref:`module-datasets` for more details). Once loaded, the backbone model can be accessed through the **net** attribute. + +Begin and end task +~~~~~~~~~~~~~~~~~~ + +Besides the **observe** and **forward** methods, the **ContinualModel** provides the **begin_task** and **end_task** methods, which are called at the beginning and at the end of each task, respectively. These methods can be overridden to implement custom behavior. For example, the **end_task** method can be used to save the model parameters at the end of each task. + +Automatic attributes +~~~~~~~~~~~~~~~~~~~~ + +The base class **ContinualModel** provides a few properties that are automatically set during the incremental training (see :ref:`continual_model` for more details). The most important attributes are: + +.. admonition:: Task-related attributes: + + - **current_task**: the index of the current task (starting from 0). This attribute is automatically updated at the end of each task (*after* the **end_task**). + + - **n_classes_current_task**: the number of classes in the current task. + + - **n_past_classes**: the total number of classes seen so far (past). + + - **n_seen_classes**: the total number of classes seen so far (past and current). + + - **n_classes**: the total number of classes in the dataset (past, current, and remaining). + + - **n_tasks**: the total number of tasks. + + - **task_iteration**: the number of iterations performed during the current task. This attribute is automatically updated *after* each **observe** call and is reset at the beginning of each task (*before* the **begin_task**). Can be used to implement a virtual batch size (see :ref:`module-twf`). + + - **cpt**: the *raw* amount of classes for each task. This could be either an integer (i.e., the number of classes for each task is the same) or a list of integers (i.e., the number of classes for each task is different). + +.. admonition:: Transforms and dataset-related Attributes + + - **transform**: the transform applied to the input data. This attribute is automatically set during the initialization of the model and is defined by the chosen **dataset** (see :ref:`module-datasets` for more details). + + - **weak_transform**: this function is used to apply a new transform to a `torch.Tensor `_. In most cases, this is implemented as a `kornia `_ transform. However, if a transform is not supported by the **to_kornia_transform**, it is implemented as `PIL `_. + + - **normalization_transform**: the transform used to normalize the input data. As for the **weak_transform**, this is implemented as a `kornia `_ transform if possible, otherwise it is implemented as `PIL `_. + +.. admonition:: Other notable attributes + + - **device**: the device used (e.g, ``cpu`` or ``cuda:0``). + + - **net**: the backbone model (see above). + + - **opt**: the optimizer used to train the model. + + - **loss**: the loss function, defined by the chosen **dataset** (see :ref:`module-datasets` for more details). + + - **dataset**: a reference to the chosen **dataset**, to ease the access to its attributes. + + - **args**: the arguments passed to the framework. + +.. note:: + The automatic conversion between `PIL `_ and `kornia `_ is handeled by the **to_kornia_transform** function in :ref:`kornia_utils`, which converts (*most*) PIL transforms to kornia transforms. However, not all the transforms are supported, and thus this function *may not be always available*. If you want to use a custom transform, you have to extend the **to_kornia_transform** function. + +Model parameters +~~~~~~~~~~~~~~~~~ + +The **get_parser** method is used to define the model-specific hyper-parameters. It is defined as a static method (see :ref:`module-continual_model`) that returns a `argparse.ArgumentParser `_ object. This method is called during the initialization of the model and it is used to parse the command line arguments. The **get_parser** method must have the following signature: + +.. code-block:: python + + @staticmethod + def get_parser() -> argparse.ArgumentParser: + + # Create the parser + parser = argparse.ArgumentParser('MyModel parameters') + + # Add the model-specific hyper-parameters + parser.add_argument('--my_param', type=int, default=1, help='My parameter') + ... + + return parser + +Once the model is selected with the command line option **--model**, the hyper-parameters are loaded and can be viewed with ``--help``. + +Other utility methods +~~~~~~~~~~~~~~~~~~~~~ + +* **get_optimizer**: returns the optimizer used to train the model. + +* **get_debug_iters**: used if ``--debug_mode`` is set to ``1``, it returns the number of iterations to perform during each task. By default, it returns ``5``. + +* **autolog_wandb**: called after each observe, it relies on the :ref:`magic` module to log all the variables created in the **observe** that start with *loss* or *_wandb_*. This method can also be called manually to log custom variables by providing the ``extra`` parameter. + .. note:: + This method is called only if ``--debug_mode`` is set to ``0`` (i.e, it is not called during the debug mode). + +Advanced usage +--------------- + +The **ContinualModel** class relies on a few hooks to automatically update its internal attributes. These hooks are called before the **begin_task**, **end_task**, and **observe** methods (**meta_begin_task**, **meta_end_task**, and **meta_observe** respectively). If you want to implement a custom behavior, you can override these hooks. + +.. note:: + The **meta_observe** is responsible for removing the *unlabeled* samples (i.e., those with an associated label set to ``-1``) from the batch if the model does not support the ``--label_perc`` parameter. \ No newline at end of file diff --git a/docs/readme.rst b/docs/readme.rst new file mode 100644 index 00000000..e3cf2e20 --- /dev/null +++ b/docs/readme.rst @@ -0,0 +1,210 @@ +Welcome to Mammoth's documentation! +=================================== +.. image:: images/logo.png + :alt: logo + :align: center + :height: 230px + :width: 230px + +Mammoth - An Extendible (General) Continual Learning Framework for Pytorch +========================================================================== + +Official repository of `Class-Incremental Continual Learning into the eXtended DER-verse `_ and `Dark Experience for General Continual Learning: a Strong, Simple Baseline `_ + +Mammoth is a framework for continual learning research. It is designed to be modular, easy to extend, and - most importantly - *easy to debug*. +Idelly, all the code necessary to run the experiments is included *in the repository*, without needing to check out other repositories or install additional packages. + +With Mammoth, nothing is set in stone. You can easily add new models, datasets, training strategies, or functionalities. + +**NEW**: Join our Discord Server for all your Mammoth-related questions → ![Discord Shield](https://discordapp.com/api/guilds/1164956257392799860/widget.png?style=shield) + +.. list-table:: + :widths: 15 15 15 15 15 15 + :class: centered + :stub-columns: 0 + + * - .. image:: images/seq_mnist.gif + :alt: Sequential MNIST + :height: 112px + :width: 112px + + - .. image:: images/seq_cifar10.gif + :alt: Sequential CIFAR-10 + :height: 112px + :width: 112px + + - .. image:: images/seq_tinyimg.gif + :alt: Sequential TinyImagenet + :height: 112px + :width: 112px + + - .. image:: images/perm_mnist.gif + :alt: Permuted MNIST + :height: 112px + :width: 112px + + - .. image:: images/rot_mnist.gif + :alt: Rotated MNIST + :height: 112px + :width: 112px + + - .. image:: images/mnist360.gif + :alt: MNIST-360 + :height: 112px + :width: 112px + +Setup +----- + +- Use ``./utils/main.py`` to run experiments. +- Use argument ``--load_best_args`` to use the best hyperparameters from the paper. +- New models can be added to the ``models/`` folder. +- New datasets can be added to the ``datasets/`` folder. + +Models +------ + +- Efficient Lifelong Learning with A-GEM: (A-GEM), and A-GEM with Reservoir buffer (A-GEM-R) +- Bias Correction (BiC) +- Continual Contrastive Interpolation Consistency (CCIC) - *Requires* ``pip install kornia`` +- CODA-Prompt: COntinual Decomposed Attention-based Prompting for Rehearsal-Free Continual Learning (CODA-Prompt) - *Requires* ``pip install timm==0.9.8`` +- Dark Experience Replay (DER) +- Dark Experience Replay++ (DER++) +- DualPrompt: Complementary Prompting for Rehearsal-free Continual Learning (DualPrompt) - *Requires* ``pip install timm==0.9.8`` +- Experience Replay (ER) +- online Elastic Weight Consolidation (oEWC) +- Function Distance Regularization (FDR) +- Greedy Sampler and Dumb Learner (GDumb) +- Gradient Episodic Memory (GEM) - *Unavailable on windows* +- Greedy gradient-based Sample Selection (GSS) +- Hindsight Anchor Learning (HAL) +- Incremental Classifier and Representation Learning (iCaRL) +- Joint for `General Continual`` setting (JointGCL) +- Learning to Prompt (L2P) - *Requires* ``pip install timm==0.9.8`` +- LiDER (on DER++, iCaRL, GDumb, and ER-ACE) +- Learning a Unified Classifier Incrementally via Rebalancing (LUCIR) +- Learning without Forgetting (LwF) +- Meta-Experience Replay (MER) +- Progressive Neural Networks (PNN) +- Regular Polytope Classifier (RPC) +- Synaptic Intelligence (SI) +- SLCA: Slow Learner with Classifier Alignment for Continual Learning on a Pre-trained Model (SLCA) - *Requires* ``pip install timm==0.9.8`` +- Transfer without Forgetting (TwF) +- eXtended-DER (X-DER) + +Datasets +-------- + +**NOTE**: Datasets are automatically downloaded in the ``data/``. +- This can be changed by changing the ``base_path`` function in ``utils/conf.py``. +- The ``data/`` folder is not tracked by git and is created automatically if missing. + +- Sequential MNIST (*Class-Il / Task-IL*) +- Sequential CIFAR-10 (*Class-Il / Task-IL*) +- Sequential Tiny ImageNet (*Class-Il / Task-IL*) +- Sequential Tiny ImageNet resized 32x32 (*Class-Il / Task-IL*) +- Sequential CIFAR-100 (*Class-Il / Task-IL*) +- Sequential CIFAR-100 resized 224x224 (ViT version) (*Class-Il / Task-IL*) +- Sequential CIFAR-100 resized 224x224 (ResNet50 version) (*Class-Il / Task-IL*) +- Permuted MNIST (*Domain-IL*) +- Rotated MNIST (*Domain-IL*) +- MNIST-360 (*General Continual Learning*) +- Sequential CUB-200 (*Class-Il / Task-IL*) +- Sequential ImageNet-R (*Class-Il / Task-IL*) + +Pretrained backbones +-------------------- + +- `ResNet18 on cifar100 `_ +- `ResNet18 on TinyImagenet resized (seq-tinyimg-r) `_ +- `ResNet50 on ImageNet (pytorch version) `_ +- `ResNet18 on SVHN `_ + +Citing these works +------------------ + +.. code-block:: bibtex + + @article{boschini2022class, + title={Class-Incremental Continual Learning into the eXtended DER-verse}, + author={Boschini, Matteo and Bonicelli, Lorenzo and Buzzega, Pietro and Porrello, Angelo and Calderara, Simone}, + journal={IEEE Transactions on Pattern Analysis and Machine Intelligence}, + year={2022}, + publisher={IEEE} + } + + @inproceedings{buzzega2020dark, + author = {Buzzega, Pietro and Boschini, Matteo and Porrello, Angelo and Abati, Davide and Calderara, Simone}, + booktitle = {Advances in Neural Information Processing Systems}, + editor = {H. Larochelle and M. Ranzato and R. Hadsell and M. F. Balcan and H. Lin}, + pages = {15920--15930}, + publisher = {Curran Associates, Inc.}, + title = {Dark Experience for General Continual Learning: a Strong, Simple Baseline}, + volume = {33}, + year = {2020} + } + +Awesome Papers using Mammoth +---------------------------- + +Our Papers +~~~~~~~~~~~ + +- `Dark Experience for General Continual Learning: a Strong, Simple Baseline (NeurIPS 2020) `_ +- `Rethinking Experience Replay: a Bag of Tricks for Continual Learning (ICPR 2020) `_ (`code `_) +- `Class-Incremental Continual Learning into the eXtended DER-verse (TPAMI 2022) `_ +- `Effects of Auxiliary Knowledge on Continual Learning (ICPR 2022) `_ +- `Transfer without Forgetting (ECCV 2022) `_ (`code `_) +- `Continual semi-supervised learning through contrastive interpolation consistency (PRL 2022) `_ (`code `_) +- `On the Effectiveness of Lipschitz-Driven Rehearsal in Continual Learning (NeurIPS 2022) `_ (`code `_) + +Other Awesome CL works using Mammoth +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +.. admonition:: + + **Get in touch if we missed your awesome work!** + + +`- Decoupling Learning and Remembering: a Bilevel Memory Framework with Knowledge Projection for Task-Incremental Learning (CVPR2023) <(https://openaccess.thecvf.com/content/CVPR2023/papers/Sun_Decoupling_Learning_and_Remembering_A_Bilevel_Memory_Framework_With_Knowledge_CVPR_2023_paper.pdf)>`_ (`code <(https://github.com/SunWenJu123/BMKP)>`_) +`- Regularizing Second-Order Influences for Continual Learning (CVPR2023) <(https://openaccess.thecvf.com/content/CVPR2023/papers/Sun_Regularizing_Second-Order_Influences_for_Continual_Learning_CVPR_2023_paper.pdf)>`_ (`code <(https://github.com/feifeiobama/InfluenceCL)>`_) +`- Sparse Coding in a Dual Memory System for Lifelong Learning (CVPR2023) <(https://arxiv.org/pdf/2301.05058.pdf)>`_ (`code <(https://github.com/NeurAI-Lab/SCoMMER)>`_) +`- A Unified Approach to Domain Incremental Learning with Memory: Theory and Algorithm (CVPR2023) <(https://arxiv.org/pdf/2310.12244.pdf)>`_ (`code <(https://github.com/Wang-ML-Lab/unified-continual-learning)>`_) +`- A Multi-Head Model for Continual Learning via Out-of-Distribution Replay (CVPR2023) <(https://arxiv.org/pdf/2208.09734.pdf)>`_ (`code <(https://github.com/k-gyuhak/MORE)>`_) +`- Preserving Linear Separability in Continual Learning by Backward Feature Projection (CVPR2023) <(https://arxiv.org/pdf/2303.14595.pdf)>`_ (`code <(https://github.com/rvl-lab-utoronto/BFP)>`_) +`- Complementary Calibration: Boosting General Continual Learning With Collaborative Distillation and Self-Supervision (TIP2023) <(https://ieeexplore.ieee.org/document/10002397)>`_ (`code <(https://github.com/lijincm/CoCa)>`_) +`- Continual Learning by Modeling Intra-Class Variation (TMLR2023) <(https://arxiv.org/abs/2210.05398)>`_ (`code <(https://github.com/yulonghui/MOCA)>`_) +`- ConSlide: Asynchronous Hierarchical Interaction Transformer with Breakup-Reorganize Rehearsal for Continual Whole Slide Image Analysis (ICCV2023) <(https://openaccess.thecvf.com/content/ICCV2023/papers/Huang_ConSlide_Asynchronous_Hierarchical_Interaction_Transformer_with_Breakup-Reorganize_Rehearsal_for_Continual_ICCV_2023_paper.pdf)>`_ (`code <(https://github.com/HKU-MedAI/ConSlide)>`_) +`- CBA: Improving Online Continual Learning via Continual Bias Adaptor (ICCV2023) <(https://arxiv.org/pdf/2308.06925.pdf)>`_ (`code <(https://github.com/wqza/CBA-online-CL)>`_) +`- Neuro-Symbolic Continual Learning: Knowledge, Reasoning Shortcuts and Concept Rehearsal (ICML2023) <(https://arxiv.org/pdf/2302.01242.pdf)>`_ (`code <(https://github.com/ema-marconato/NeSy-CL)>`_) +`- Pretrained Language Model in Continual Learning: a Comparative Study (ICLR2022) <(https://openreview.net/pdf?id=figzpGMrdD)>`_ (`code <(https://github.com/wutong8023/PLM4CL)>`_) +`- Representational continuity for unsupervised continual learning (ICLR2022) <(https://openreview.net/pdf?id=9Hrka5PA7LW)>`_ (`code <(https://github.com/divyam3897/UCL)>`_) +`- Continual Normalization: Rethinking Batch Normalization for Online Continual Learning (ICLR2022) <(https://arxiv.org/abs/2203.16102)>`_ (`code <(https://github.com/phquang/Continual-Normalization)>`_) +`- Learning Fast, Learning Slow: A General Continual Learning Method based on Complementary Learning System (ICLR2022) <(https://arxiv.org/pdf/2201.12604.pdf)>`_ (`code <(https://github.com/NeurAI-Lab/CLS-ER)>`_) +`- New Insights on Reducing Abrupt Representation Change in Online Continual Learning (ICLR2022) <(https://openreview.net/pdf?id=N8MaByOzUfb)>`_ (`code <(https://github.com/pclucas14/AML)>`_) +`- Looking Back on Learned Experiences for Class/Task Incremental Learning (ICLR2022) <(https://openreview.net/pdf?id=RxplU3vmBx)>`_ (`code <(https://github.com/MozhganPourKeshavarz/Cost-Free-Incremental-Learning)>`_) +`- Task Agnostic Representation Consolidation: a Self-supervised based Continual Learning Approach (CoLLAs2022) <(https://arxiv.org/pdf/2207.06267.pdf)>`_ (`code <(https://github.com/NeurAI-Lab/TARC)>`_) +`- Consistency is the key to further Mitigating Catastrophic Forgetting in Continual Learning (CoLLAs2022) <(https://arxiv.org/pdf/2207.04998.pdf)>`_ (`code <(https://github.com/NeurAI-Lab/ConsistencyCL)>`_) +`- Self-supervised models are continual learners (CVPR2022) <(https://arxiv.org/abs/2112.04215)>`_ (`code <(https://github.com/DonkeyShot21/cassle)>`_) +`- Learning from Students: Online Contrastive Distillation Network for General Continual Learning (IJCAI2022) <(https://www.ijcai.org/proceedings/2022/0446.pdf)>`_ (`code <(https://github.com/lijincm/OCD-Net)>`_) + +Contributing +------------ + +Pull requests welcome! + +Please use `autopep8` with parameters: + +- `--aggressive` +- `--max-line-length=200` +- `--ignore=E402` + +Previous versions +----------------- + +If you're interested in a version of this repo that only includes the original code for `Dark Experience for General Continual Learning: a Strong, Simple Baseline `_ or `Class-Incremental Continual Learning into the eXtended DER-verse `_, please use the following tags: + +- `neurips2020 `_ for DER (NeurIPS 2020). + +- `tpami2023 `_ for X-DER (TPAMI 2023). + diff --git a/docs/requirements.txt b/docs/requirements.txt new file mode 100644 index 00000000..22d85e15 --- /dev/null +++ b/docs/requirements.txt @@ -0,0 +1,3 @@ +sphinx==7.2.6 +furo==2023.9.10 +sphinx-toolbox==3.5.0 \ No newline at end of file diff --git a/docs/utils/args.rst b/docs/utils/args.rst new file mode 100644 index 00000000..f8411906 --- /dev/null +++ b/docs/utils/args.rst @@ -0,0 +1,263 @@ +.. _module-args: + +Arguments +========= + +.. rubric:: EXPERIMENT-RELATED ARGS + +**\-\-dataset** : + *Help*: Which dataset to perform experiments on. + + - Default: None + + - Choices: seq-tinyimg, seq-tinyimg-r, perm-mnist, seq-cifar10, seq-cifar100-224, seq-cub200, rot-mnist, seq-cifar100, seq-cifar100-224-rs, seq-mnist, mnist-360 + +**\-\-model** : + *Help*: Model name. + + - Default: None + + - Choices: agem, agem-r, ewc-on, derpp-lider, gdumb-lider, slca, dualprompt, si, bic, er-ace, fdr, gdumb, gem, gss, joint-gcl, lwf, mer, rpc, twf, ccic, der, derpp, er, hal, icarl, l2p, lucir, lwf-mc, sgd, xder, xder-ce, xder-rpc, pnn, er-ace-lider, icarl-lider, coda-prompt + +**\-\-lr** : + *Help*: Learning rate. + + - Default: None + + - Choices: + +**\-\-optimizer** : + *Help*: Optimizer. + + - Default: sgd + + - Choices: sgd, adam, adamw + +**\-\-optim_wd** : + *Help*: optimizer weight decay. + + - Default: 0.0 + + - Choices: + +**\-\-optim_mom** : + *Help*: optimizer momentum. + + - Default: 0.0 + + - Choices: + +**\-\-optim_nesterov** : + *Help*: optimizer nesterov momentum. + + - Default: 0 + + - Choices: + +**\-\-lr_scheduler** : + *Help*: Learning rate scheduler. + + - Default: None + + - Choices: + +**\-\-lr_milestones** : + *Help*: Learning rate scheduler milestones (used if `lr_scheduler=multisteplr`). + + - Default: [] + + - Choices: + +**\-\-sched_multistep_lr_gamma** : + *Help*: Learning rate scheduler gamma (used if `lr_scheduler=multisteplr`). + + - Default: 0.1 + + - Choices: + +**\-\-n_epochs** : + *Help*: Number of epochs. + + - Default: None + + - Choices: + +**\-\-batch_size** : + *Help*: Batch size. + + - Default: None + + - Choices: + +**\-\-distributed** : + *Help*: Enable distributed training? + + - Default: no + + - Choices: no, dp, ddp + +**\-\-savecheck** : None + *Help*: Save checkpoint? + + - Default: False + + - Choices: + +**\-\-loadcheck** : + *Help*: Path of the checkpoint to load (.pt file for the specific task) + + - Default: None + + - Choices: + +**\-\-ckpt_name** : + *Help*: (optional) checkpoint save name. + + - Default: None + + - Choices: + +**\-\-start_from** : + *Help*: Task to start from + + - Default: None + + - Choices: + +**\-\-stop_after** : + *Help*: Task limit + + - Default: None + + - Choices: + +**\-\-joint** : + *Help*: Train model on Joint (single task)? + + - Default: 0 + + - Choices: 0, 1 + +**\-\-label_perc** : + *Help*: Percentage in (0-1] of labeled examples per task. + + - Default: 1 + + - Choices: + +.. rubric:: MANAGEMENT ARGS + +**\-\-seed** : + *Help*: The random seed. + + - Default: None + + - Choices: + +**\-\-permute_classes** : + *Help*: Permute classes before splitting tasks (applies seed before permute if seed is present)? + + - Default: 0 + + - Choices: 0, 1 + +**\-\-base_path** : + *Help*: The base path where to save datasets, logs, results. + + - Default: ./data/ + + - Choices: + +**\-\-notes** : + *Help*: Notes for this run. + + - Default: None + + - Choices: + +**\-\-non_verbose** : + *Help*: Make progress bars non verbose + + - Default: 0 + + - Choices: 0, 1 + +**\-\-disable_log** : + *Help*: Disable logging? + + - Default: 0 + + - Choices: 0, 1 + +**\-\-num_workers** : + *Help*: Number of workers for the dataloaders (default=infer from number of cpus). + + - Default: None + + - Choices: + +**\-\-validation** : + *Help*: Percentage of validation set drawn from the training set. + + - Default: None + + - Choices: + +**\-\-enable_other_metrics** : + *Help*: Enable computing additional metrics: forward and backward transfer. + + - Default: 0 + + - Choices: 0, 1 + +**\-\-debug_mode** : + *Help*: Run only a few forward steps per epoch + + - Default: 0 + + - Choices: 0, 1 + +**\-\-wandb_entity** : + *Help*: Wandb entity + + - Default: None + + - Choices: + +**\-\-wandb_project** : + *Help*: Wandb project name + + - Default: mammoth + + - Choices: + +**\-\-eval_epochs** : + *Help*: Perform inference intra-task at every `eval_epochs`. + + - Default: None + + - Choices: + +**\-\-inference_only** : None + *Help*: Perform inference only for each task (no training). + + - Default: False + + - Choices: + +.. rubric:: REEHARSAL-ONLY ARGS + +**\-\-buffer_size** : + *Help*: The size of the memory buffer. + + - Default: None + + - Choices: + +**\-\-minibatch_size** : + *Help*: The batch size of the memory buffer. + + - Default: None + + - Choices: + diff --git a/docs/utils/index.rst b/docs/utils/index.rst new file mode 100644 index 00000000..096fbfb6 --- /dev/null +++ b/docs/utils/index.rst @@ -0,0 +1,74 @@ +.. _module-utils: + +Utils +====== + +This module contains a collection of utility classes and functions that are used throughout the library. + +.. important:: + The most important module is `main.py`, which is the entry point for the library. + It contains the `main` function, which is called when the library is run as a script. + This function is responsible for parsing the command line arguments and calling the appropriate + functions to perform train and validation. + +Running Mammoth +--------------- + +To run the library, simply run the `utils/main.py` script. There are a few command line arguments that can be used to customize the execution of the library. To see the full list of arguments, run the following command: + +.. code-block:: bash + + python utils/main.py --help + + +The most important arguments are the following: + +- ``--dataset``: the name of the dataset to use. The list of available datasets can be found in the `datasets` folder (or with ``--help``). + +- ``--model``: the name of the model to run. The list of available models can be found in the `models` folder (or with ``--help``). Once the model is selected, its corresponding parser is loaded (see the `parse_args` function in :ref:`module-models`) and the model-specific arguments are available and shown with ``--help``. + +- ``--lr``: the learning rate to use for training. + +- ``--buffer_size`` (only required for rehearsal-based methods): the size of the replay buffer. + +Other arguments such as the size of the training batch and the number of epochs are automatically loaded by the selected dataset (see :ref:`module-datasets`). However, the default values can be overridden by specifying the corresponding command line arguments. For example, to run the `er` model on the `seq-cifar10` dataset with a batch size of `128` and `10` epochs (instead of the default of `32` and `50` respectively), run the following command: + +.. code-block:: bash + + python utils/main.py --dataset seq-cifar10 --model der --buffer_size 500 --lr 0.03 --batch_size 128 --epochs 10 + +.. note:: + To ease hyper-parameter tuning, all boolean arguments follow the convention: ``--=1`` for ``True`` and ``--=0`` for ``False``. The only exceptions are ``--savecheck`` and ``--inference_only``, as they should not be included in the hyper-parameter search. + +Other useful arguments +~~~~~~~~~~~~~~~~ + +* ``--debug_mode``: If set to ``1``, the model will run for only a few iterations per each epoch and will disable WandB logging. This is useful for debugging. + +* ``--num_workers**: The number of workers to use for the data loaders. If set to ``0``, the data loaders will run in the main process. This is useful for debugging. + +* ``--seed``: The seed to use for the random number generators. If this is not set, the seed will be randomly generated. + +* ``--permute_classes``: If set to ``1``, the classes will be randomly permuted before splitting them into tasks. + +* ``--joint``: If set to ``1``, the supplied dataset will be treated as a single task. This usually serves as a upper bound for the performance of the model. + +* ``--label_perc``: The percentage of labels to use for each task. If set to ``0``, the model will be trained in a fully unsupervised manner. + + +Other notable modules +--------------------- + +- :ref:`args `: contains all the **global** arguments. For **model-specific** arguments, see the `parse_args` function in the corresponding model file (under `models/`). + +- :ref:`module-buffer`: contains the `Buffer` class, which is used to store the data for the replay buffer. + +- :ref:`module-training`: contains the `train` function, which is responsible for training the model, and the `evaluate` function, which is responsible for evaluating the model. The `train` function iterates over all the tasks and supports `3` utility functions: `begin_task`, `end_task`, and `observe`: + + - `begin_task`: called at the beginning of each task. It is useful if the model needs to set its internal state before starting the task (e.g., calculating some preliminary statistics or adding new parameters for the new task). + + - `end_task`: called at the end of each task. This function can be used to save the model after each task or perform some last-minute operations before the task ends (for example, in the case of `gdumb` it can be used to train on the data currently stored in the buffer). + + - `observe`: called at each training step. It should contain *all the logic to train the model on the current batch*, including updating the replay buffer and the target network (if applicable). It should also return the loss value for the current batch. + +- :ref:`module-conf`: contains some utility functions such as the default path where to download the datasets (`base_path`) and the default device to use (`get_device`). \ No newline at end of file diff --git a/models/__init__.py b/models/__init__.py index a98801c7..0cdb90dc 100644 --- a/models/__init__.py +++ b/models/__init__.py @@ -4,17 +4,94 @@ # LICENSE file in the root directory of this source tree. import os +import sys +from argparse import Namespace +from typing import List +from torch import nn import importlib +import inspect +mammoth_path = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) +sys.path.append(mammoth_path) +os.chdir(mammoth_path) +from models.utils.continual_model import ContinualModel +from utils.conf import warn_once -def get_all_models(): - return [model.split('.')[0] for model in os.listdir('models') - if not model.find('__') > -1 and 'py' in model] -names = {} -for model in get_all_models(): - mod = importlib.import_module('models.' + model) - class_name = {x.lower():x for x in mod.__dir__()}[model.replace('_', '')] - names[model] = getattr(mod, class_name) +def get_all_models() -> List[dict]: + return {model.split('.')[0].replace('_', '-'): model.split('.')[0] for model in os.listdir('models') + if not model.find('__') > -1 and not os.path.isdir('models/' + model)} -def get_model(args, backbone, loss, transform): - return names[args.model](backbone, loss, args, transform) + +def get_model(args: Namespace, backbone: nn.Module, loss, transform) -> ContinualModel: + """ + Return the class of the selected continual model among those that are available. + If an error was detected while loading the available datasets, it raises the appropriate error message. + + Args: + args (Namespace): the arguments which contains the `--model` attribute + backbone (nn.Module): the backbone of the model + loss: the loss function + transform: the transform function + + Exceptions: + AssertError: if the model is not available + Exception: if an error is detected in the model + + Returns: + the continual model instance + """ + model_name = args.model.replace('_', '-') + names = get_model_names() + assert model_name in names + return get_model_class(args)(backbone, loss, args, transform) + + +def get_model_class(args: Namespace) -> ContinualModel: + """ + Return the class of the selected continual model among those that are available. + If an error was detected while loading the available datasets, it raises the appropriate error message. + + Args: + args (Namespace): the arguments which contains the `--model` attribute + + Exceptions: + AssertError: if the model is not available + Exception: if an error is detected in the model + + Returns: + the continual model class + """ + names = get_model_names() + model_name = args.model.replace('_', '-') + assert model_name in names + if isinstance(names[model_name], Exception): + raise names[model_name] + return names[model_name] + + +def get_model_names() -> List[str]: + """ + Return the list of the available continual model names. + + Returns: + the list of the available continual model names + """ + + def _get_names(): + names = {} + for model_name, model in get_all_models().items(): + try: + mod = importlib.import_module('models.' + model) + model_classe_name = [x for x in mod.__dir__() if 'type' in str(type(getattr(mod, x))) + and 'ContinualModel' in str(inspect.getmro(getattr(mod, x))[1:])][-1] + c = getattr(mod, model_classe_name) + names[c.NAME.replace('_', '-')] = c + except Exception as e: + warn_once("Error in model", model) + warn_once(e) + names[model.replace('_', '-')] = e + return names + + if not hasattr(get_model_names, 'names'): + setattr(get_model_names, 'names', _get_names()) + return getattr(get_model_names, 'names') diff --git a/models/agem.py b/models/agem.py index c340d903..7de38bbd 100644 --- a/models/agem.py +++ b/models/agem.py @@ -8,18 +8,10 @@ from models.gem import overwrite_grad, store_grad from models.utils.continual_model import ContinualModel -from utils.args import add_management_args, add_experiment_args, add_rehearsal_args, ArgumentParser +from utils.args import add_rehearsal_args, ArgumentParser from utils.buffer import Buffer -def get_parser() -> ArgumentParser: - parser = ArgumentParser(description='Continual learning via A-GEM.') - add_management_args(parser) - add_experiment_args(parser) - add_rehearsal_args(parser) - return parser - - def project(gxy: torch.Tensor, ger: torch.Tensor) -> torch.Tensor: corr = torch.dot(gxy, ger) / torch.dot(ger, ger) return gxy - corr * ger @@ -29,10 +21,16 @@ class AGem(ContinualModel): NAME = 'agem' COMPATIBILITY = ['class-il', 'domain-il', 'task-il'] + @staticmethod + def get_parser() -> ArgumentParser: + parser = ArgumentParser(description='Continual learning via A-GEM.') + add_rehearsal_args(parser) + return parser + def __init__(self, backbone, loss, args, transform): super(AGem, self).__init__(backbone, loss, args, transform) - self.buffer = Buffer(self.args.buffer_size, self.device) + self.buffer = Buffer(self.args.buffer_size) self.grad_dims = [] for param in self.parameters(): self.grad_dims.append(param.data.numel()) @@ -48,7 +46,7 @@ def end_task(self, dataset): labels=cur_y.to(self.device) ) - def observe(self, inputs, labels, not_aug_inputs): + def observe(self, inputs, labels, not_aug_inputs, epoch=None): self.zero_grad() p = self.net.forward(inputs) @@ -58,7 +56,7 @@ def observe(self, inputs, labels, not_aug_inputs): if not self.buffer.is_empty(): store_grad(self.parameters, self.grad_xy, self.grad_dims) - buf_inputs, buf_labels = self.buffer.get_data(self.args.minibatch_size, transform=self.transform) + buf_inputs, buf_labels = self.buffer.get_data(self.args.minibatch_size, transform=self.transform, device=self.device) self.net.zero_grad() buf_outputs = self.net.forward(buf_inputs) penalty = self.loss(buf_outputs, buf_labels) diff --git a/models/agem_r.py b/models/agem_r.py index 41e22024..16cb000c 100644 --- a/models/agem_r.py +++ b/models/agem_r.py @@ -1,3 +1,7 @@ +""" +A version of A-GEM, leveraging a memory buffer with reservoir sampling. +""" + # Copyright 2020-present, Pietro Buzzega, Matteo Boschini, Angelo Porrello, Davide Abati, Simone Calderara. # All rights reserved. # This source code is licensed under the license found in the @@ -9,35 +13,32 @@ from models.agem import project from models.gem import overwrite_grad, store_grad from models.utils.continual_model import ContinualModel -from utils.args import add_management_args, add_experiment_args, add_rehearsal_args, ArgumentParser +from utils.args import add_rehearsal_args, ArgumentParser from utils.buffer import Buffer -def get_parser() -> ArgumentParser: - parser = ArgumentParser(description='Continual learning via A-GEM, ' - 'leveraging a reservoir buffer.') - add_management_args(parser) - add_experiment_args(parser) - add_rehearsal_args(parser) - return parser - - class AGemr(ContinualModel): NAME = 'agem_r' COMPATIBILITY = ['class-il', 'domain-il', 'task-il', 'general-continual'] + @staticmethod + def get_parser() -> ArgumentParser: + parser = ArgumentParser(description='Continual learning via A-GEM, ' + 'leveraging a reservoir buffer.') + add_rehearsal_args(parser) + return parser + def __init__(self, backbone, loss, args, transform): super(AGemr, self).__init__(backbone, loss, args, transform) - self.buffer = Buffer(self.args.buffer_size, self.device) + self.buffer = Buffer(self.args.buffer_size) self.grad_dims = [] for param in self.parameters(): self.grad_dims.append(param.data.numel()) self.grad_xy = torch.Tensor(np.sum(self.grad_dims)).to(self.device) self.grad_er = torch.Tensor(np.sum(self.grad_dims)).to(self.device) - self.current_task = 0 - def observe(self, inputs, labels, not_aug_inputs): + def observe(self, inputs, labels, not_aug_inputs, epoch=None): self.zero_grad() p = self.net.forward(inputs) loss = self.loss(p, labels) @@ -46,7 +47,7 @@ def observe(self, inputs, labels, not_aug_inputs): if not self.buffer.is_empty(): store_grad(self.parameters, self.grad_xy, self.grad_dims) - buf_inputs, buf_labels = self.buffer.get_data(self.args.minibatch_size) + buf_inputs, buf_labels = self.buffer.get_data(self.args.minibatch_size, device=self.device) self.net.zero_grad() buf_outputs = self.net.forward(buf_inputs) penalty = self.loss(buf_outputs, buf_labels) diff --git a/models/bic.py b/models/bic.py index 2e3303fd..5ab64f38 100644 --- a/models/bic.py +++ b/models/bic.py @@ -12,58 +12,51 @@ from torch.optim import Adam from models.utils.continual_model import ContinualModel -from utils.args import add_management_args, add_experiment_args, add_rehearsal_args, ArgumentParser +from utils.args import add_rehearsal_args, ArgumentParser from utils.batch_norm import bn_track_stats from utils.buffer import Buffer, icarl_replay # based on https://github.com/sairin1202/BIC -def get_parser() -> ArgumentParser: - parser = ArgumentParser(description='A bag of tricks for ' - 'Continual learning.') - add_management_args(parser) - add_experiment_args(parser) - add_rehearsal_args(parser) - - parser.add_argument('--bic_epochs', type=int, default=250, - help='bias injector.') - parser.add_argument('--temp', type=float, default=2., - help='softmax temperature') - parser.add_argument('--valset_split', type=float, default=0.1, - help='bias injector.') - parser.add_argument('--multi_bic', type=int, default=0) - parser.add_argument('--wd_reg', type=float, default=None, - help='bias injector.') - parser.add_argument('--distill_after_bic', type=int, default=1) - - return parser - - class BiC(ContinualModel): NAME = 'bic' COMPATIBILITY = ['class-il', 'task-il'] + @staticmethod + def get_parser() -> ArgumentParser: + parser = ArgumentParser(description='Bias Correction.') + add_rehearsal_args(parser) + + parser.add_argument('--bic_epochs', type=int, default=250, + help='bias injector.') + parser.add_argument('--temp', type=float, default=2., + help='softmax temperature') + parser.add_argument('--valset_split', type=float, default=0.1, + help='bias injector.') + parser.add_argument('--wd_reg', type=float, default=None, + help='bias injector.') + parser.add_argument('--distill_after_bic', type=int, default=1, choices=[0, 1]) + + return parser + def __init__(self, backbone, loss, args, transform): super().__init__(backbone, loss, args, transform) dd = get_dataset(args) - self.n_tasks = dd.N_TASKS - self.cpt = dd.N_CLASSES_PER_TASK self.transform = transform - self.buffer = Buffer(self.args.buffer_size, self.device) + self.buffer = Buffer(self.args.buffer_size) - self.task = 0 self.lamda = 0 def begin_task(self, dataset): - if self.task > 0: + if self.current_task > 0: self.old_net = deepcopy(self.net.eval()) if hasattr(self, 'corr_factors'): self.old_corr = deepcopy(self.corr_factors) self.net.train() - self.lamda = 1 / (self.task + 1) + self.lamda = 1 / (self.current_task + 1) icarl_replay(self, dataset, val_set_split=self.args.valset_split) @@ -71,7 +64,7 @@ def begin_task(self, dataset): del self.corr_factors def evaluate_bias(self, fprefx): - resp = torch.zeros((self.task + 1) * self.cpt).to(self.device) + resp = torch.zeros((self.current_task + 1) * self.cpt).to(self.device) with torch.no_grad(): with bn_track_stats(self, False): for data in self.val_loader: @@ -79,14 +72,14 @@ def evaluate_bias(self, fprefx): inputs, labels, _ = data inputs, labels = inputs.to(self.device), labels.to(self.device) - resp += self.forward(inputs, anticipate=fprefx == 'post')[:, :(self.task + 1) * self.cpt].sum(0) + resp += self.forward(inputs, anticipate=fprefx == 'post')[:, :(self.current_task + 1) * self.cpt].sum(0) resp /= len(self.val_loader.dataset) if fprefx == 'pre': self.oldresp = resp.cpu() def end_task(self, dataset): - if self.task > 0: + if self.current_task > 0: self.net.eval() from utils.training import evaluate @@ -107,8 +100,8 @@ def end_task(self, dataset): with torch.no_grad(): out = self.forward(inputs) - start_last_task = (self.task) * self.cpt - end_last_task = (self.task + 1) * self.cpt + start_last_task = self.n_past_classes + end_last_task = self.n_seen_classes tout = out + 0 tout[:, start_last_task:end_last_task] *= corr_factors[1].repeat_interleave(end_last_task - start_last_task) tout[:, start_last_task:end_last_task] += corr_factors[0].repeat_interleave(end_last_task - start_last_task) @@ -124,41 +117,40 @@ def end_task(self, dataset): self.net.train() - self.task += 1 self.build_buffer(dataset) def forward(self, x, anticipate=False): ret = super().forward(x) if ret.shape[0] > 0: if hasattr(self, 'corr_factors'): - start_last_task = (self.task - 1 + (1 if anticipate else 0)) * self.cpt - end_last_task = (self.task + (1 if anticipate else 0)) * self.cpt + start_last_task = (self.current_task - 1 + (1 if anticipate else 0)) * self.cpt + end_last_task = (self.current_task + (1 if anticipate else 0)) * self.cpt ret[:, start_last_task:end_last_task] *= self.corr_factors[1].repeat_interleave(end_last_task - start_last_task) ret[:, start_last_task:end_last_task] += self.corr_factors[0].repeat_interleave(end_last_task - start_last_task) return ret - def observe(self, inputs, labels, not_aug_inputs): + def observe(self, inputs, labels, not_aug_inputs, epoch=None): self.opt.zero_grad() outputs = self.net(inputs) dist_loss = torch.tensor(0.) - if self.task > 0: + if self.current_task > 0: with torch.no_grad(): old_outputs = self.old_net(inputs) if self.args.distill_after_bic: if hasattr(self, 'old_corr'): - start_last_task = (self.task - 1) * self.cpt - end_last_task = (self.task) * self.cpt + start_last_task = (self.current_task - 1) * self.cpt + end_last_task = (self.current_task) * self.cpt old_outputs[:, start_last_task:end_last_task] *= self.old_corr[1].repeat_interleave(end_last_task - start_last_task) old_outputs[:, start_last_task:end_last_task] += self.old_corr[0].repeat_interleave(end_last_task - start_last_task) - pi_hat = F.log_softmax(outputs[:, :self.task * self.cpt] / self.args.temp, dim=1) - pi = F.softmax(old_outputs[:, :self.task * self.cpt] / self.args.temp, dim=1) + pi_hat = F.log_softmax(outputs[:, :self.current_task * self.cpt] / self.args.temp, dim=1) + pi = F.softmax(old_outputs[:, :self.current_task * self.cpt] / self.args.temp, dim=1) dist_loss = -(pi_hat * pi).sum(1).mean() - class_loss = self.loss(outputs[:, :(self.task + 1) * self.cpt], labels, reduction='none') + class_loss = self.loss(outputs[:, :(self.current_task + 1) * self.cpt], labels, reduction='none') loss = (1 - self.lamda) * class_loss.mean() + self.lamda * dist_loss.mean() * self.args.temp * self.args.temp if self.args.wd_reg: @@ -172,9 +164,9 @@ def observe(self, inputs, labels, not_aug_inputs): def build_buffer(self, dataset): - examples_per_task = self.buffer.buffer_size // self.task + examples_per_task = self.buffer.buffer_size // self.current_task if self.current_task > 0 else self.buffer.buffer_size - if self.task > 1: + if self.current_task > 1: # shrink buffer buf_x, buf_y, buf_tl = self.buffer.get_all_data() self.buffer.empty() @@ -198,5 +190,5 @@ def build_buffer(self, dataset): self.buffer.add_data(examples=not_aug_inputs[:(examples_per_task - counter)], labels=labels[:(examples_per_task - counter)], task_labels=(torch.ones(self.args.batch_size) * - (self.task - 1))[:(examples_per_task - counter)]) + (self.current_task - 1))[:(examples_per_task - counter)]) counter += len(not_aug_inputs) diff --git a/models/ccic.py b/models/ccic.py new file mode 100644 index 00000000..35ac7b61 --- /dev/null +++ b/models/ccic.py @@ -0,0 +1,244 @@ +# Copyright 2021-present, Lorenzo Bonicelli, Pietro Buzzega, Matteo Boschini, Angelo Porrello, Simone Calderara. +# All rights reserved. +# This source code is licensed under the license found in the +# LICENSE file in the root directory of this source tree. + +from utils.ring_buffer import RingBuffer + +from datasets import get_dataset +from utils.args import * +from models.utils.continual_model import ContinualModel +from utils.buffer import Buffer +from utils.mixup import mixup +from utils.triplet import batch_hard_triplet_loss, negative_only_triplet_loss +import torch +import torch.nn.functional as F + + +class Ccic(ContinualModel): + NAME = 'ccic' + COMPATIBILITY = ['class-il', 'domain-il', 'task-il', 'cssl'] + + @staticmethod + def get_parser() -> ArgumentParser: + parser = ArgumentParser(description='Continual Semi-Supervised Learning via' + ' Continual Contrastive Interpolation Consistency.') + add_rehearsal_args(parser) + parser.add_argument('--alpha', type=float, default=0.5, + help='Unsupervised loss weight.') + parser.add_argument('--knn_k', type=int, default=3, + help='k of kNN.') + parser.add_argument('--memory_penalty', type=float, + default=1.0, help='Unsupervised penalty weight.') + parser.add_argument('--k_aug', type=int, default=3, + help='Number of augumentation to compute label predictions.') + parser.add_argument('--mixmatch_alpha', type=float, default=0.5, + help='Regularization weight.') + parser.add_argument('--sharp_temp', default=0.5, + type=float, help='Temperature for sharpening.') + parser.add_argument('--mixup_alpha', default=0.75, type=float) + return parser + + def __init__(self, backbone, loss, args, transform): + super(Ccic, self).__init__(backbone, loss, args, transform) + self.buffer = Buffer(self.args.buffer_size, self.device) + self.epoch = 0 + self.n_tasks = get_dataset(args).N_TASKS + self.embeddings = None + + self.eye = torch.eye(self.N_CLASSES).to(self.device) + self.sup_virtual_batch = RingBuffer(self.args.batch_size) + self.unsup_virtual_batch = RingBuffer(self.args.batch_size) + + def get_debug_iters(self): + """ + Returns the number of iterations to wait before logging. + - CCIC needs a couple more iterations to initialize the KNN. + """ + return 1000 if len(self.buffer) < self.args.buffer_size else 5 + + def forward(self, x): + if self.embeddings is None: + with torch.no_grad(): + self.compute_embeddings() + + n_seen_classes = self.cpt * self.current_task if isinstance(self.cpt, int) else sum(self.cpt[:self.current_task]) + n_remaining_classes = self.N_CLASSES - n_seen_classes + buf_labels = self.buffer.labels[:self.buffer.num_seen_examples] + feats = self.net(x, returnt='features') + feats = F.normalize(feats, p=2, dim=1) + distances = (self.embeddings.unsqueeze(0) - feats.unsqueeze(1)).pow(2).sum(2) + + dist = torch.stack([distances[:, buf_labels == c].topk(1, largest=False)[0].mean(dim=1) + if (buf_labels == c).sum() > 0 else torch.zeros(x.shape[0]).to(self.device) + for c in range(n_seen_classes)] + + [torch.zeros(x.shape[0]).to(self.device)] * n_remaining_classes).T + topkappas = self.eye[buf_labels[distances.topk(self.args.knn_k, largest=False)[1]]].sum(1) + return topkappas - dist * 10e-6 + + def end_task(self, dataset): + self.embeddings = None + self.epoch = 0 + + def end_epoch(self, dataset): + self.epoch += 1 + + def discard_unsupervised_labels(self, inputs, labels, not_aug_inputs): + mask = labels != -1 + + return inputs[mask], labels[mask], not_aug_inputs[mask] + + def discard_supervised_labels(self, inputs, labels, not_aug_inputs): + mask = labels == -1 + + return inputs[mask], labels[mask], not_aug_inputs[mask] + + def observe(self, inputs, labels, not_aug_inputs, epoch=None): + self.opt.zero_grad() + real_batch_size = inputs.shape[0] + sup_inputs, sup_labels, sup_not_aug_inputs = self.discard_unsupervised_labels(inputs, labels, not_aug_inputs) + sup_inputs_for_buffer, sup_labels_for_buffer = sup_not_aug_inputs.clone(), sup_labels.clone() + unsup_inputs, unsup_labels, unsup_not_aug_inputs = self.discard_supervised_labels(inputs, labels, not_aug_inputs) + if len(sup_inputs) == 0 and self.buffer.is_empty(): # if there is no data to train on, just return 1. + return 1. + + self.sup_virtual_batch.add_data(sup_not_aug_inputs, sup_labels) + sup_inputs, sup_labels = self.sup_virtual_batch.get_data(self.args.batch_size, transform=self.transform, device=self.device) + + if self.current_task > 0 and unsup_not_aug_inputs.shape[0] > 0: + self.unsup_virtual_batch.add_data(unsup_not_aug_inputs) + unsup_inputs = self.unsup_virtual_batch.get_data(self.args.batch_size, transform=self.transform, device=self.device)[0] + + # BUFFER RETRIEVAL + if not self.buffer.is_empty(): + buf_inputs, buf_labels = self.buffer.get_data(self.args.minibatch_size, transform=self.transform, device=self.device) + sup_inputs = torch.cat((sup_inputs, buf_inputs)) + sup_labels = torch.cat((sup_labels, buf_labels)) + if self.current_task > 0: + masked_buf_inputs = self.buffer.get_data(self.args.minibatch_size, + mask_task_out=self.current_task, + transform=self.transform, + cpt=self.n_classes_current_task, + device=self.device)[0] + unsup_labels = torch.cat((torch.zeros(unsup_inputs.shape[0]).to(self.device), + torch.ones(masked_buf_inputs.shape[0]).to(self.device))).long() + unsup_inputs = torch.cat((unsup_inputs, masked_buf_inputs)) + + # ------------------ K AUG --------------------- + + mask = labels != -1 + real_mask = mask[:real_batch_size] + + if (~real_mask).sum() > 0: + unsup_aug_inputs = self.weak_transform(not_aug_inputs[~real_mask].repeat_interleave(self.args.k_aug, 0)) + else: + unsup_aug_inputs = torch.zeros((0,)).to(self.device) + + # ------------------ PSEUDO LABEL --------------------- + + self.net.eval() + if len(unsup_aug_inputs): + with torch.no_grad(): + unsup_aug_outputs = self.net(unsup_aug_inputs).reshape(self.args.k_aug, -1, self.eye.shape[0]).mean(0) + unsup_sharp_outputs = unsup_aug_outputs ** (1 / self.args.sharp_temp) + unsup_norm_outputs = unsup_sharp_outputs / unsup_sharp_outputs.sum(1).unsqueeze(1) + unsup_norm_outputs = unsup_norm_outputs.repeat(self.args.k_aug, 1) + else: + unsup_norm_outputs = torch.zeros((0, len(self.eye))).to(self.device) + self.net.train() + + # ------------------ MIXUP --------------------- + + self.opt.zero_grad() + + W_inputs = torch.cat((sup_inputs, unsup_aug_inputs)) + W_probs = torch.cat((self.eye[sup_labels], unsup_norm_outputs)) + perm = torch.randperm(W_inputs.shape[0]) + W_inputs, W_probs = W_inputs[perm], W_probs[perm] + sup_shape = sup_inputs.shape[0] + + sup_mix_inputs, _ = mixup([(sup_inputs, W_inputs[:sup_shape]), (self.eye[sup_labels], W_probs[:sup_shape])], self.args.mixup_alpha) + sup_mix_outputs = self.net(sup_mix_inputs) + if len(unsup_aug_inputs): + unsup_mix_inputs, _ = mixup( + [(unsup_aug_inputs, W_inputs[sup_shape:]), + (unsup_norm_outputs, W_probs[sup_shape:])], + self.args.mixup_alpha) + unsup_mix_outputs = self.net(unsup_mix_inputs) + + effective_mbs = min(self.args.minibatch_size, + self.buffer.num_seen_examples) + if effective_mbs == 0: + effective_mbs = -self.N_CLASSES + + # ------------------ CIC LOSS --------------------- + + loss_X = 0 + if real_mask.sum() > 0: + loss_X += self.loss(sup_mix_outputs[:-effective_mbs], + sup_labels[:-effective_mbs]) + if not self.buffer.is_empty(): + assert effective_mbs > 0 + loss_X += self.args.memory_penalty * self.loss(sup_mix_outputs[-effective_mbs:], + sup_labels[-effective_mbs:]) + + if len(unsup_aug_inputs): + loss_U = F.mse_loss(unsup_norm_outputs, unsup_mix_outputs) / self.eye.shape[0] + else: + loss_U = 0 + + # CIC LOSS + if self.current_task > 0 and self.epoch < self.args.n_epochs / 10 * 9: + W_inputs = sup_inputs + W_probs = self.eye[sup_labels] + perm = torch.randperm(W_inputs.shape[0]) + W_inputs, W_probs = W_inputs[perm], W_probs[perm] + + sup_mix_inputs, _ = mixup([(sup_inputs, W_inputs), (self.eye[sup_labels], W_probs)], 1) + else: + sup_mix_inputs = sup_inputs + + # STANDARD TRIPLET + sup_mix_embeddings = self.net.features(sup_mix_inputs) + loss = batch_hard_triplet_loss(sup_labels, sup_mix_embeddings, self.args.batch_size // 10, + margin=1, margin_type='hard') + + if loss is None: + loss = loss_X + self.args.mixmatch_alpha * loss_U + else: + loss += loss_X + self.args.mixmatch_alpha * loss_U + + self.buffer.add_data(examples=sup_inputs_for_buffer, + labels=sup_labels_for_buffer) + + # SELF-SUPERVISED PAST TASKS NEGATIVE ONLY + if self.current_task > 0 and self.epoch < self.args.n_epochs / 10 * 9: + unsup_embeddings = self.net.features(unsup_inputs) + loss_unsup = negative_only_triplet_loss(unsup_labels, unsup_embeddings, self.args.batch_size // 10, + margin=1, margin_type='hard') + if loss_unsup is not None: + loss += self.args.alpha * loss_unsup + + loss.backward() + self.opt.step() + + return loss.item() + + @torch.no_grad() + def compute_embeddings(self): + """ + Computes a vector representing mean features for each class. + """ + was_training = self.net.training + self.net.eval() + data = self.buffer.get_all_data(transform=self.normalization_transform)[0] + outputs = [] + while data.shape[0] > 0: + inputs = data[:self.args.batch_size] + data = data[self.args.batch_size:] + out = self.net(inputs, returnt='features') + out = F.normalize(out, p=2, dim=1) + outputs.append(out) + + self.embeddings = torch.cat(outputs) + self.net.train(was_training) diff --git a/models/coda_prompt.py b/models/coda_prompt.py new file mode 100644 index 00000000..d2429a9c --- /dev/null +++ b/models/coda_prompt.py @@ -0,0 +1,96 @@ +""" +CODA-Prompt: COntinual Decomposed Attention-based Prompting + +Note: + CODA-Prompt USES A CUSTOM BACKBONE: `vit_base_patch16_224`. + The backbone is a ViT-B/16 pretrained on Imagenet 21k and finetuned on ImageNet 1k. +""" + +import timm +from utils.args import * +from models.utils.continual_model import ContinualModel +import torch +from datasets import get_dataset +from models.coda_prompt_utils.model import Model +from utils.schedulers import CosineSchedule + + +class CodaPrompt(ContinualModel): + NAME = 'coda_prompt' + COMPATIBILITY = ['class-il', 'task-il'] + + @staticmethod + def get_parser() -> ArgumentParser: + parser = ArgumentParser(description='Continual Learning via' + ' CODA-Prompt: COntinual Decomposed Attention-based Prompting') + parser.add_argument('--mu', type=float, default=0.0, help='weight of prompt loss') + parser.add_argument('--pool_size', type=int, default=100, help='pool size') + parser.add_argument('--prompt_len', type=int, default=8, help='prompt length') + parser.add_argument('--virtual_bs_iterations', type=int, default=1, help="virtual batch size iterations") + return parser + + def __init__(self, backbone, loss, args, transform): + del backbone + print("-" * 20) + print(f"WARNING: CODA-Prompt USES A CUSTOM BACKBONE: `vit_base_patch16_224`.") + print("Pretrained on Imagenet 21k and finetuned on ImageNet 1k.") + print("-" * 20) + + self.dataset = get_dataset(args) + self.n_classes = self.dataset.N_CLASSES + self.n_tasks = self.dataset.N_TASKS + backbone = Model(num_classes=self.n_classes, pt=True, prompt_param=[self.n_tasks, [args.pool_size, args.prompt_len, 0]]) + super().__init__(backbone, loss, args, transform) + self.net.task_id = 0 + self.opt = self.get_optimizer() + + def get_optimizer(self): + params_to_opt = list(self.net.prompt.parameters()) + list(self.net.last.parameters()) + optimizer_arg = {'params': params_to_opt, + 'lr': self.args.lr, + 'weight_decay': self.args.optim_wd} + if self.args.optimizer == 'sgd': + opt = torch.optim.SGD(**optimizer_arg) + elif self.args.optimizer == 'adam': + opt = torch.optim.Adam(**optimizer_arg) + else: + raise ValueError('Optimizer not supported for this method') + return opt + + def begin_task(self, dataset): + self.offset_1, self.offset_2 = self.dataset.get_offsets(self.current_task) + + if self.current_task != 0: + self.net.task_id = self.current_task + self.net.prompt.process_task_count() + self.opt = self.get_optimizer() + + self.scheduler = CosineSchedule(self.opt, K=self.args.n_epochs) + self.old_epoch = 0 + + def observe(self, inputs, labels, not_aug_inputs, epoch=0): + if self.scheduler and self.old_epoch != epoch: + self.scheduler.step() + self.old_epoch = epoch + self.iteration = 0 + labels = labels.long() + self.opt.zero_grad() + logits, loss_prompt = self.net(inputs, train=True) + loss_prompt = loss_prompt.sum() + logits = logits[:, :self.offset_2] + logits[:, :self.offset_1] = -float('inf') + loss_ce = self.loss(logits, labels) + loss = loss_ce + self.args.mu * loss_prompt + if self.task_iteration == 0: + self.opt.zero_grad() + + torch.cuda.empty_cache() + loss.backward() + if self.task_iteration > 0 and self.task_iteration % self.args.virtual_bs_iterations == 0: + self.opt.step() + self.opt.zero_grad() + + return loss.item() + + def forward(self, x): + return self.net(x)[:, :self.offset_2] diff --git a/models/coda_prompt_utils/__init__.py b/models/coda_prompt_utils/__init__.py new file mode 100644 index 00000000..702830f6 --- /dev/null +++ b/models/coda_prompt_utils/__init__.py @@ -0,0 +1,3 @@ +""" +This package contains utility functions for the CoDA Prompt model. Implements a custom version of ViT to add prompt parameters. +""" diff --git a/models/coda_prompt_utils/model.py b/models/coda_prompt_utils/model.py new file mode 100644 index 00000000..f2d3696e --- /dev/null +++ b/models/coda_prompt_utils/model.py @@ -0,0 +1,254 @@ +import torch +import torch.nn as nn +from timm.models.vision_transformer import vit_base_patch16_224 +from models.coda_prompt_utils.vit import VisionTransformer +import copy + + +class CodaPrompt(nn.Module): + def __init__(self, emb_d, n_tasks, prompt_param, key_dim=768): + super().__init__() + self.task_count = 0 + self.emb_d = emb_d + self.key_d = key_dim + self.n_tasks = n_tasks + self._init_smart(emb_d, prompt_param) + + # e prompt init + for e in self.e_layers: + # for model saving/loading simplicity, we init the full paramaters here + # however, please note that we reinit the new components at each task + # in the "spirit of continual learning", as we don't know how many tasks + # we will encounter at the start of the task sequence + # + # in the original paper, we used ortho init at the start - this modification is more + # fair in the spirit of continual learning and has little affect on performance + e_l = self.e_p_length + p = tensor_prompt(self.e_pool_size, e_l, emb_d) + k = tensor_prompt(self.e_pool_size, self.key_d) + a = tensor_prompt(self.e_pool_size, self.key_d) + p = self.gram_schmidt(p) + k = self.gram_schmidt(k) + a = self.gram_schmidt(a) + setattr(self, f'e_p_{e}', p) + setattr(self, f'e_k_{e}', k) + setattr(self, f'e_a_{e}', a) + + def _init_smart(self, emb_d, prompt_param): + + # prompt basic param + self.e_pool_size = int(prompt_param[0]) + self.e_p_length = int(prompt_param[1]) + self.e_layers = [0, 1, 2, 3, 4] + + # strenth of ortho penalty + self.ortho_mu = prompt_param[2] + + def process_task_count(self): + self.task_count += 1 + + # in the spirit of continual learning, we will reinit the new components + # for the new task with Gram Schmidt + # + # in the original paper, we used ortho init at the start - this modification is more + # fair in the spirit of continual learning and has little affect on performance + # + # code for this function is modified from: + # https://github.com/legendongary/pytorch-gram-schmidt/blob/master/gram_schmidt.py + for e in self.e_layers: + K = getattr(self, f'e_k_{e}') + A = getattr(self, f'e_a_{e}') + P = getattr(self, f'e_p_{e}') + k = self.gram_schmidt(K) + a = self.gram_schmidt(A) + p = self.gram_schmidt(P) + setattr(self, f'e_p_{e}', p) + setattr(self, f'e_k_{e}', k) + setattr(self, f'e_a_{e}', a) + + # code for this function is modified from: + # https://github.com/legendongary/pytorch-gram-schmidt/blob/master/gram_schmidt.py + def gram_schmidt(self, vv): + + def projection(u, v): + denominator = (u * u).sum() + + if denominator < 1e-8: + return None + else: + return (v * u).sum() / denominator * u + + # check if the tensor is 3D and flatten the last two dimensions if necessary + is_3d = len(vv.shape) == 3 + if is_3d: + shape_2d = copy.deepcopy(vv.shape) + vv = vv.view(vv.shape[0], -1) + + # swap rows and columns + vv = vv.T + + # process matrix size + nk = vv.size(1) + uu = torch.zeros_like(vv, device=vv.device) + + # get starting point + pt = int(self.e_pool_size / (self.n_tasks)) + s = int(self.task_count * pt) + f = int((self.task_count + 1) * pt) + if s > 0: + uu[:, 0:s] = vv[:, 0:s].clone() + for k in range(s, f): + redo = True + while redo: + redo = False + vk = torch.randn_like(vv[:, k]).to(vv.device) + uk = 0 + for j in range(0, k): + if not redo: + uj = uu[:, j].clone() + proj = projection(uj, vk) + if proj is None: + redo = True + print('restarting!!!') + else: + uk = uk + proj + if not redo: + uu[:, k] = vk - uk + for k in range(s, f): + uk = uu[:, k].clone() + uu[:, k] = uk / (uk.norm()) + + # undo swapping of rows and columns + uu = uu.T + + # return from 2D + if is_3d: + uu = uu.view(shape_2d) + + return torch.nn.Parameter(uu) + + def forward(self, x_querry, l, x_block, train=False, task_id=None): + + # e prompts + e_valid = False + if l in self.e_layers: + e_valid = True + B, C = x_querry.shape + + K = getattr(self, f'e_k_{l}') + A = getattr(self, f'e_a_{l}') + p = getattr(self, f'e_p_{l}') + pt = int(self.e_pool_size / (self.n_tasks)) + s = int(self.task_count * pt) + f = int((self.task_count + 1) * pt) + + # freeze/control past tasks + if train: + if self.task_count > 0: + K = torch.cat((K[:s].detach().clone(), K[s:f]), dim=0) + A = torch.cat((A[:s].detach().clone(), A[s:f]), dim=0) + p = torch.cat((p[:s].detach().clone(), p[s:f]), dim=0) + else: + K = K[s:f] + A = A[s:f] + p = p[s:f] + else: + K = K[0:f] + A = A[0:f] + p = p[0:f] + + # with attention and cosine sim + # (b x 1 x d) * soft([1 x k x d]) = (b x k x d) -> attention = k x d + a_querry = torch.einsum('bd,kd->bkd', x_querry, A) + # # (b x k x d) - [1 x k x d] = (b x k) -> key = k x d + n_K = nn.functional.normalize(K, dim=1) + q = nn.functional.normalize(a_querry, dim=2) + aq_k = torch.einsum('bkd,kd->bk', q, n_K) + # (b x 1 x k x 1) * [1 x plen x k x d] = (b x plen x d) -> prompt = plen x k x d + P_ = torch.einsum('bk,kld->bld', aq_k, p) + + # select prompts + i = int(self.e_p_length / 2) + Ek = P_[:, :i, :] + Ev = P_[:, i:, :] + + # ortho penalty + if train and self.ortho_mu > 0: + loss = ortho_penalty(K) * self.ortho_mu + loss += ortho_penalty(A) * self.ortho_mu + loss += ortho_penalty(p.view(p.shape[0], -1)) * self.ortho_mu + else: + loss = 0 + else: + loss = 0 + + # combine prompts for prefix tuning + if e_valid: + p_return = [Ek, Ev] + else: + p_return = None + + # return + return p_return, loss, x_block + + +def ortho_penalty(t): + return ((t @ t.T - torch.eye(t.shape[0]).to(t.device))**2).mean() + + +def tensor_prompt(a, b, c=None, ortho=False): + if c is None: + p = torch.nn.Parameter(torch.FloatTensor(a, b), requires_grad=True) + else: + p = torch.nn.Parameter(torch.FloatTensor(a, b, c), requires_grad=True) + if ortho: + nn.init.orthogonal_(p) + else: + nn.init.uniform_(p) + return p + + +class Model(nn.Module): + def __init__(self, num_classes=10, pt=False, prompt_param=None): + super().__init__() + + self.task_id = None + + # get feature encoder + vit_model = VisionTransformer(img_size=224, patch_size=16, embed_dim=768, depth=12, + num_heads=12, ckpt_layer=0, + drop_path_rate=0) + + if pt: + load_dict = vit_base_patch16_224(pretrained=True).state_dict() + del load_dict['head.weight'] + del load_dict['head.bias'] + vit_model.load_state_dict(load_dict) + + # classifier + self.last = nn.Linear(768, num_classes) + + self.prompt = CodaPrompt(768, prompt_param[0], prompt_param[1]) + + # feature encoder changes if transformer vs resnet + self.feat = vit_model + + # pen: get penultimate features + def forward(self, x, pen=False, train=False): + + if self.prompt is not None: + with torch.no_grad(): + q, _ = self.feat(x) + q = q[:, 0, :] + out, prompt_loss = self.feat(x, prompt=self.prompt, q=q, train=train, task_id=self.task_id) + out = out[:, 0, :] + else: + out, _ = self.feat(x) + out = out[:, 0, :] + out = out.view(out.size(0), -1) + if not pen: + out = self.last(out) + if self.prompt is not None and train: + return out, prompt_loss + else: + return out diff --git a/models/coda_prompt_utils/vit.py b/models/coda_prompt_utils/vit.py new file mode 100644 index 00000000..c2fa3bbb --- /dev/null +++ b/models/coda_prompt_utils/vit.py @@ -0,0 +1,201 @@ +''' + * Based on vit from blip code base + * https://github.com/salesforce/BLIP +''' + +import torch +import torch.nn as nn +from functools import partial + +from timm.models.vision_transformer import PatchEmbed +from timm.models.layers import trunc_normal_, DropPath + + +class Mlp(nn.Module): + """ MLP as used in Vision Transformer, MLP-Mixer and related networks + """ + + def __init__(self, in_features, hidden_features=None, out_features=None, act_layer=nn.GELU, drop=0.): + super().__init__() + out_features = out_features or in_features + hidden_features = hidden_features or in_features + self.fc1 = nn.Linear(in_features, hidden_features) + self.act = act_layer() + self.fc2 = nn.Linear(hidden_features, out_features) + self.drop = nn.Dropout(drop) + + def forward(self, x): + x = self.fc1(x) + x = self.act(x) + x = self.drop(x) + x = self.fc2(x) + x = self.drop(x) + return x + + +class Attention(nn.Module): + def __init__(self, dim, num_heads=8, qkv_bias=False, qk_scale=None, attn_drop=0., proj_drop=0.): + super().__init__() + self.num_heads = num_heads + head_dim = dim // num_heads + # NOTE scale factor was wrong in my original version, can set manually to be compat with prev weights + self.scale = qk_scale or head_dim ** -0.5 + self.qkv = nn.Linear(dim, dim * 3, bias=qkv_bias) + self.attn_drop = nn.Dropout(attn_drop) + self.proj = nn.Linear(dim, dim) + self.proj_drop = nn.Dropout(proj_drop) + self.attn_gradients = None + self.attention_map = None + + def save_attn_gradients(self, attn_gradients): + self.attn_gradients = attn_gradients + + def get_attn_gradients(self): + return self.attn_gradients + + def save_attention_map(self, attention_map): + self.attention_map = attention_map + + def get_attention_map(self): + return self.attention_map + + def forward(self, x, register_hook=False, prompt=None): + B, N, C = x.shape + qkv = self.qkv(x).reshape(B, N, 3, self.num_heads, C // self.num_heads).permute(2, 0, 3, 1, 4) + q, k, v = qkv[0], qkv[1], qkv[2] # make torchscript happy (cannot use tensor as tuple) + + if prompt is not None: + pk, pv = prompt + pk = pk.reshape(B, -1, self.num_heads, C // self.num_heads).permute(0, 2, 1, 3) + pv = pv.reshape(B, -1, self.num_heads, C // self.num_heads).permute(0, 2, 1, 3) + k = torch.cat((pk, k), dim=2) + v = torch.cat((pv, v), dim=2) + + attn = (q @ k.transpose(-2, -1)) * self.scale + attn = attn.softmax(dim=-1) + attn = self.attn_drop(attn) + + if register_hook: + self.save_attention_map(attn) + attn.register_hook(self.save_attn_gradients) + + x = (attn @ v).transpose(1, 2).reshape(B, N, C) + x = self.proj(x) + x = self.proj_drop(x) + return x + + +class Block(nn.Module): + + def __init__(self, dim, num_heads, mlp_ratio=4., qkv_bias=False, qk_scale=None, drop=0., attn_drop=0., + drop_path=0., act_layer=nn.GELU, norm_layer=nn.LayerNorm): + super().__init__() + self.norm1 = norm_layer(dim) + self.attn = Attention( + dim, num_heads=num_heads, qkv_bias=qkv_bias, qk_scale=qk_scale, attn_drop=attn_drop, proj_drop=drop) + # NOTE: drop path for stochastic depth, we shall see if this is better than dropout here + self.drop_path = DropPath(drop_path) if drop_path > 0. else nn.Identity() + self.norm2 = norm_layer(dim) + mlp_hidden_dim = int(dim * mlp_ratio) + self.mlp = Mlp(in_features=dim, hidden_features=mlp_hidden_dim, act_layer=act_layer, drop=drop) + + def forward(self, x, register_hook=False, prompt=None): + x = x + self.drop_path(self.attn(self.norm1(x), register_hook=register_hook, prompt=prompt)) + x = x + self.drop_path(self.mlp(self.norm2(x))) + return x + + +class VisionTransformer(nn.Module): + """ Vision Transformer + A PyTorch impl of : `An Image is Worth 16x16 Words: Transformers for Image Recognition at Scale` - + https://arxiv.org/abs/2010.11929 + """ + + def __init__(self, img_size=224, patch_size=16, in_chans=3, num_classes=1000, embed_dim=768, depth=12, + num_heads=12, mlp_ratio=4., qkv_bias=True, qk_scale=None, representation_size=None, + drop_rate=0., attn_drop_rate=0., drop_path_rate=0., norm_layer=None, + ckpt_layer=0): + """ + Args: + img_size (int, tuple): input image size + patch_size (int, tuple): patch size + in_chans (int): number of input channels + num_classes (int): number of classes for classification head + embed_dim (int): embedding dimension + depth (int): depth of transformer + num_heads (int): number of attention heads + mlp_ratio (int): ratio of mlp hidden dim to embedding dim + qkv_bias (bool): enable bias for qkv if True + qk_scale (float): override default qk scale of head_dim ** -0.5 if set + representation_size (Optional[int]): enable and set representation layer (pre-logits) to this value if set + drop_rate (float): dropout rate + attn_drop_rate (float): attention dropout rate + drop_path_rate (float): stochastic depth rate + norm_layer: (nn.Module): normalization layer + """ + super().__init__() + self.num_features = self.embed_dim = embed_dim # num_features for consistency with other models + norm_layer = norm_layer or partial(nn.LayerNorm, eps=1e-6) + + self.patch_embed = PatchEmbed( + img_size=img_size, patch_size=patch_size, in_chans=in_chans, embed_dim=embed_dim) + + num_patches = self.patch_embed.num_patches + + self.cls_token = nn.Parameter(torch.zeros(1, 1, embed_dim)) + self.pos_embed = nn.Parameter(torch.zeros(1, num_patches + 1, embed_dim)) + self.pos_drop = nn.Dropout(p=drop_rate) + + dpr = [x.item() for x in torch.linspace(0, drop_path_rate, depth)] # stochastic depth decay rule + self.blocks = nn.ModuleList([ + Block( + dim=embed_dim, num_heads=num_heads, mlp_ratio=mlp_ratio, qkv_bias=qkv_bias, qk_scale=qk_scale, + drop=drop_rate, attn_drop=attn_drop_rate, drop_path=dpr[i], norm_layer=norm_layer, + ) + for i in range(depth)]) + self.norm = norm_layer(embed_dim) + + trunc_normal_(self.pos_embed, std=.02) + trunc_normal_(self.cls_token, std=.02) + self.apply(self._init_weights) + + def _init_weights(self, m): + if isinstance(m, nn.Linear): + trunc_normal_(m.weight, std=.02) + if isinstance(m, nn.Linear) and m.bias is not None: + nn.init.constant_(m.bias, 0) + elif isinstance(m, nn.LayerNorm): + nn.init.constant_(m.bias, 0) + nn.init.constant_(m.weight, 1.0) + + @torch.jit.ignore + def no_weight_decay(self): + return {'pos_embed', 'cls_token'} + + def forward(self, x, register_blk=-1, prompt=None, q=None, train=False, task_id=None): + B = x.shape[0] + x = self.patch_embed(x) + + cls_tokens = self.cls_token.expand(B, -1, -1) # stole cls_tokens impl from Phil Wang, thanks + x = torch.cat((cls_tokens, x), dim=1) + + x = x + self.pos_embed[:, :x.size(1), :] + x = self.pos_drop(x) + + prompt_loss = torch.zeros((1,), requires_grad=True).to(x.device) + for i, blk in enumerate(self.blocks): + + if prompt is not None: + if train: + p_list, loss, x = prompt.forward(q, i, x, train=True, task_id=task_id) + prompt_loss += loss + else: + p_list, _, x = prompt.forward(q, i, x, train=False, task_id=task_id) + else: + p_list = None + + x = blk(x, register_blk == i, prompt=p_list) + + x = self.norm(x) + + return x, prompt_loss diff --git a/models/deprecated/__init__.py b/models/deprecated/__init__.py new file mode 100644 index 00000000..51ed6212 --- /dev/null +++ b/models/deprecated/__init__.py @@ -0,0 +1 @@ +"""This module contains a collection of deprecated models.""" diff --git a/models/joint.py b/models/deprecated/joint.py similarity index 78% rename from models/joint.py rename to models/deprecated/joint.py index 880917fe..2abd4392 100644 --- a/models/joint.py +++ b/models/deprecated/joint.py @@ -1,22 +1,23 @@ -# Copyright 2022-present, Lorenzo Bonicelli, Pietro Buzzega, Matteo Boschini, Angelo Porrello, Simone Calderara. -# All rights reserved. -# This source code is licensed under the license found in the -# LICENSE file in the root directory of this source tree. +""" +This module contains the implementation of the Joint CL model. +""" import math - import numpy as np import torch from datasets.utils.validation import ValidationDataset from torch.optim import SGD from torchvision import transforms - from models.utils.continual_model import ContinualModel -from utils.args import add_management_args, add_experiment_args, ArgumentParser +from utils.args import ArgumentParser +from utils.conf import create_seeded_dataloader from utils.status import progress_bar def get_parser() -> ArgumentParser: + """ + Returns the ArgumentParser object for the joint model. + """ parser = ArgumentParser(description='Joint training: a strong, simple baseline.') add_management_args(parser) add_experiment_args(parser) @@ -24,16 +25,28 @@ def get_parser() -> ArgumentParser: class Joint(ContinualModel): + """ + The Joint CL model. The model is deprecated, use the option `--joint=1` instead combined with the SGD model. + + Attributes: + NAME (str): joint. + COMPATIBILITY (list): the joint model is compabible with class-il, domain-il and task-il scenarios. For a joint model for the general-continual scenario, see the joint_gcl model. + """ + NAME = 'joint' COMPATIBILITY = ['class-il', 'domain-il', 'task-il'] def __init__(self, backbone, loss, args, transform): + super(Joint, self).__init__(backbone, loss, args, transform) self.old_data = [] self.old_labels = [] self.current_task = 0 def end_task(self, dataset): + """ + This version of joint training simply saves all data from previous tasks and then trains on all data at the end of the last one. + """ if dataset.SETTING != 'domain-il': self.old_data.append(dataset.train_loader.dataset.data) self.old_labels.append(torch.tensor(dataset.train_loader.dataset.targets)) @@ -47,7 +60,7 @@ def end_task(self, dataset): self.net = dataset.get_backbone() self.net.to(self.device) self.net.train() - self.opt = SGD(self.net.parameters(), lr=self.args.lr) + self.opt = self.get_optimizer() # prepare dataloader all_data, all_labels = None, None @@ -61,7 +74,7 @@ def end_task(self, dataset): transform = dataset.TRANSFORM if dataset.TRANSFORM is not None else transforms.ToTensor() temp_dataset = ValidationDataset(all_data, all_labels, transform=transform) - loader = torch.utils.data.DataLoader(temp_dataset, batch_size=self.args.batch_size, shuffle=True) + loader = create_seeded_dataloader(self.args, temp_dataset, batch_size=self.args.batch_size, shuffle=True) # train for e in range(self.args.n_epochs): @@ -108,5 +121,8 @@ def end_task(self, dataset): if scheduler is not None: scheduler.step() - def observe(self, inputs, labels, not_aug_inputs): + def observe(self, inputs, labels, not_aug_inputs, epoch=None): + """ + This version of joint training does nothing during incremental CL training. + """ return 0 diff --git a/models/der.py b/models/der.py index acb16dd9..267b243e 100644 --- a/models/der.py +++ b/models/der.py @@ -10,40 +10,42 @@ from utils.buffer import Buffer -def get_parser() -> ArgumentParser: - parser = ArgumentParser(description='Continual learning via' - ' Dark Experience Replay.') - add_management_args(parser) - add_experiment_args(parser) - add_rehearsal_args(parser) - parser.add_argument('--alpha', type=float, required=True, - help='Penalty weight.') - return parser - - class Der(ContinualModel): NAME = 'der' COMPATIBILITY = ['class-il', 'domain-il', 'task-il', 'general-continual'] + @staticmethod + def get_parser() -> ArgumentParser: + parser = ArgumentParser(description='Continual learning via' + ' Dark Experience Replay.') + add_rehearsal_args(parser) + parser.add_argument('--alpha', type=float, required=True, + help='Penalty weight.') + return parser + def __init__(self, backbone, loss, args, transform): super(Der, self).__init__(backbone, loss, args, transform) - self.buffer = Buffer(self.args.buffer_size, self.device) + self.buffer = Buffer(self.args.buffer_size) - def observe(self, inputs, labels, not_aug_inputs): + def observe(self, inputs, labels, not_aug_inputs, epoch=None): self.opt.zero_grad() + tot_loss = 0 outputs = self.net(inputs) loss = self.loss(outputs, labels) + loss.backward() + tot_loss += loss.item() if not self.buffer.is_empty(): buf_inputs, buf_logits = self.buffer.get_data( - self.args.minibatch_size, transform=self.transform) + self.args.minibatch_size, transform=self.transform, device=self.device) buf_outputs = self.net(buf_inputs) - loss += self.args.alpha * F.mse_loss(buf_outputs, buf_logits) + loss_mse = self.args.alpha * F.mse_loss(buf_outputs, buf_logits) + loss_mse.backward() + tot_loss += loss_mse.item() - loss.backward() self.opt.step() self.buffer.add_data(examples=not_aug_inputs, logits=outputs.data) - return loss.item() + return tot_loss diff --git a/models/derpp.py b/models/derpp.py index c378cb5d..3e1f3ac6 100644 --- a/models/derpp.py +++ b/models/derpp.py @@ -6,54 +6,59 @@ from torch.nn import functional as F from models.utils.continual_model import ContinualModel -from utils.args import add_management_args, add_experiment_args, add_rehearsal_args, ArgumentParser +from utils.args import add_rehearsal_args, ArgumentParser from utils.buffer import Buffer -def get_parser() -> ArgumentParser: - parser = ArgumentParser(description='Continual learning via' - ' Dark Experience Replay++.') - add_management_args(parser) - add_experiment_args(parser) - add_rehearsal_args(parser) - parser.add_argument('--alpha', type=float, required=True, - help='Penalty weight.') - parser.add_argument('--beta', type=float, required=True, - help='Penalty weight.') - return parser - - class Derpp(ContinualModel): NAME = 'derpp' COMPATIBILITY = ['class-il', 'domain-il', 'task-il', 'general-continual'] + @staticmethod + def get_parser() -> ArgumentParser: + parser = ArgumentParser(description='Continual learning via' + ' Dark Experience Replay++.') + add_rehearsal_args(parser) + parser.add_argument('--alpha', type=float, required=True, + help='Penalty weight.') + parser.add_argument('--beta', type=float, required=True, + help='Penalty weight.') + return parser + def __init__(self, backbone, loss, args, transform): - super(Derpp, self).__init__(backbone, loss, args, transform) + super().__init__(backbone, loss, args, transform) - self.buffer = Buffer(self.args.buffer_size, self.device) + self.buffer = Buffer(self.args.buffer_size) - def observe(self, inputs, labels, not_aug_inputs): + def observe(self, inputs, labels, not_aug_inputs, epoch=None): self.opt.zero_grad() + outputs = self.net(inputs) + loss = self.loss(outputs, labels) + loss.backward() + tot_loss = loss.item() if not self.buffer.is_empty(): - buf_inputs, _, buf_logits = self.buffer.get_data( - self.args.minibatch_size, transform=self.transform) + buf_inputs, _, buf_logits = self.buffer.get_data(self.args.minibatch_size, transform=self.transform, device=self.device) + buf_outputs = self.net(buf_inputs) - loss += self.args.alpha * F.mse_loss(buf_outputs, buf_logits) + loss_mse = self.args.alpha * F.mse_loss(buf_outputs, buf_logits) + loss_mse.backward() + tot_loss += loss_mse.item() + + buf_inputs, buf_labels, _ = self.buffer.get_data(self.args.minibatch_size, transform=self.transform, device=self.device) - buf_inputs, buf_labels, _ = self.buffer.get_data( - self.args.minibatch_size, transform=self.transform) buf_outputs = self.net(buf_inputs) - loss += self.args.beta * self.loss(buf_outputs, buf_labels) + loss_ce = self.args.beta * self.loss(buf_outputs, buf_labels) + loss_ce.backward() + tot_loss += loss_ce.item() - loss.backward() self.opt.step() self.buffer.add_data(examples=not_aug_inputs, labels=labels, logits=outputs.data) - return loss.item() + return tot_loss diff --git a/models/derpp_lider.py b/models/derpp_lider.py new file mode 100644 index 00000000..8ae30f28 --- /dev/null +++ b/models/derpp_lider.py @@ -0,0 +1,88 @@ +from utils.buffer import Buffer +from torch.nn import functional as F +from utils.args import * +import torch +from models.utils.lider_model import LiderOptimizer, add_lipschitz_args + + +class DerppLider(LiderOptimizer): + NAME = 'derpp_lider' + COMPATIBILITY = ['class-il', 'domain-il', 'task-il', 'general-continual'] + + @staticmethod + def get_parser() -> ArgumentParser: + parser = ArgumentParser(description='Continual learning via' + ' Dark Experience Replay++.' + 'Treated with LiDER!') + add_rehearsal_args(parser) + add_lipschitz_args(parser) + + parser.add_argument('--alpha', type=float, required=True, + help='Penalty weight.') + parser.add_argument('--beta', type=float, required=True, + help='Penalty weight.') + return parser + + def __init__(self, backbone, loss, args, transform): + super().__init__(backbone, loss, args, transform) + + self.buffer = Buffer(self.args.buffer_size) + + def begin_task(self, dataset): + if self.current_task == 0: + self.net.set_return_prerelu(True) + + self.init_net(dataset) + + def observe(self, inputs: torch.Tensor, labels: torch.Tensor, not_aug_inputs: torch.Tensor, epoch=None): + + self.opt.zero_grad() + + outputs = self.net(inputs) + + loss = self.loss(outputs, labels) + tot_loss = loss.item() + loss.backward() + + if not self.buffer.is_empty(): + buf_inputs, _, buf_logits = self.buffer.get_data( + self.args.minibatch_size, transform=self.transform, device=self.device) + buf_outputs, buf_output_features = self.net(buf_inputs, returnt='full') + loss_mse = self.args.alpha * F.mse_loss(buf_outputs, buf_logits) + tot_loss += loss_mse.item() + loss_mse.backward() + + buf_inputs, buf_labels, _ = self.buffer.get_data( + self.args.minibatch_size, transform=self.transform, device=self.device) + buf_outputs = self.net(buf_inputs).float() + loss_ce = self.args.beta * self.loss(buf_outputs, buf_labels) + tot_loss += loss_ce.item() + loss_ce.backward() + + if self.args.alpha_lip_lambda > 0: + buf_inputs, _, _ = self.buffer.get_data(self.args.minibatch_size, transform=self.transform, device=self.device) + _, buf_output_features = self.net(buf_inputs, returnt='full') + + lip_inputs = [buf_inputs] + buf_output_features + + loss_lip_minimize = self.args.alpha_lip_lambda * self.minimization_lip_loss(lip_inputs) + tot_loss += loss_lip_minimize.item() + loss_lip_minimize.backward() + + if self.args.beta_lip_lambda > 0: + buf_inputs, _, _ = self.buffer.get_data(self.args.minibatch_size, transform=self.transform, device=self.device) + _, buf_output_features = self.net(buf_inputs, returnt='full') + + lip_inputs = [buf_inputs] + buf_output_features + + loss_lip_dyn_budget = self.args.beta_lip_lambda * self.dynamic_budget_lip_loss(lip_inputs) + tot_loss += loss_lip_dyn_budget.item() + loss_lip_dyn_budget.backward() + + self.opt.step() + + self.buffer.add_data(examples=not_aug_inputs, + labels=labels, + logits=outputs.data) + + return tot_loss diff --git a/models/dualprompt.py b/models/dualprompt.py new file mode 100644 index 00000000..7e711fb2 --- /dev/null +++ b/models/dualprompt.py @@ -0,0 +1,138 @@ +""" +DualPrompt: Complementary Prompting for Rehearsal-free Continual Learning + +Note: + WARNING: DualPrompt USES A CUSTOM BACKBONE: `vit_base_patch16_224`. + The backbone is a ViT-B/16 pretrained on Imagenet 21k and finetuned on ImageNet 1k. +""" + +import torch +from models.dualprompt_utils.model import Model + +from models.utils.continual_model import ContinualModel +from utils.args import ArgumentParser + +from datasets import get_dataset + + +class DualPrompt(ContinualModel): + NAME = 'dualprompt' + COMPATIBILITY = ['class-il', 'task-il'] + + @staticmethod + def get_parser() -> ArgumentParser: + parser = ArgumentParser(description='DualPrompt: Complementary Prompting for Rehearsal-free Continual Learning') + + parser.add_argument('--train_mask', default=True, type=bool, help='if using the class mask at training') + parser.add_argument('--pretrained', default=True, help='Load pretrained model or not') + parser.add_argument('--drop', type=float, default=0.0, metavar='PCT', help='Dropout rate (default: 0.)') + parser.add_argument('--drop-path', type=float, default=0.0, metavar='PCT', help='Drop path rate (default: 0.)') + + # Optimizer parameters + parser.add_argument('--clip_grad', type=float, default=1.0, metavar='NORM', help='Clip gradient norm (default: None, no clipping)') + + # G-Prompt parameters + parser.add_argument('--use_g_prompt', default=True, type=bool, help='if using G-Prompt') + parser.add_argument('--g_prompt_length', default=5, type=int, help='length of G-Prompt') + parser.add_argument('--g_prompt_layer_idx', default=[0, 1], type=int, nargs="+", help='the layer index of the G-Prompt') + parser.add_argument('--use_prefix_tune_for_g_prompt', default=True, type=bool, help='if using the prefix tune for G-Prompt') + + # E-Prompt parameters + parser.add_argument('--use_e_prompt', default=True, type=bool, help='if using the E-Prompt') + parser.add_argument('--e_prompt_layer_idx', default=[2, 3, 4], type=int, nargs="+", help='the layer index of the E-Prompt') + parser.add_argument('--use_prefix_tune_for_e_prompt', default=True, type=bool, help='if using the prefix tune for E-Prompt') + + # Use prompt pool in L2P to implement E-Prompt + parser.add_argument('--prompt_pool', default=True, type=bool,) + parser.add_argument('--size', default=10, type=int,) + parser.add_argument('--length', default=5, type=int, ) + parser.add_argument('--top_k', default=1, type=int, ) + parser.add_argument('--initializer', default='uniform', type=str,) + parser.add_argument('--prompt_key', default=True, type=bool,) + parser.add_argument('--prompt_key_init', default='uniform', type=str) + parser.add_argument('--use_prompt_mask', default=True, type=bool) + parser.add_argument('--mask_first_epoch', default=False, type=bool) + parser.add_argument('--shared_prompt_pool', default=True, type=bool) + parser.add_argument('--shared_prompt_key', default=False, type=bool) + parser.add_argument('--batchwise_prompt', default=True, type=bool) + parser.add_argument('--embedding_key', default='cls', type=str) + parser.add_argument('--predefined_key', default='', type=str) + parser.add_argument('--pull_constraint', default=True) + parser.add_argument('--pull_constraint_coeff', default=1.0, type=float) + parser.add_argument('--same_key_value', default=False, type=bool) + + # ViT parameters + parser.add_argument('--global_pool', default='token', choices=['token', 'avg'], type=str, help='type of global pooling for final sequence') + parser.add_argument('--head_type', default='token', choices=['token', 'gap', 'prompt', 'token+prompt'], type=str, help='input type of classification head') + parser.add_argument('--freeze', default=['blocks', 'patch_embed', 'cls_token', 'norm', 'pos_embed'], nargs='*', type=list, help='freeze part in backbone model') + return parser + + def __init__(self, backbone, loss, args, transform): + del backbone + print("-" * 20) + print(f"WARNING: DualPrompt USES A CUSTOM BACKBONE: `vit_base_patch16_224`.") + print("Pretrained on Imagenet 21k and finetuned on ImageNet 1k.") + print("-" * 20) + + args.lr = args.lr * args.batch_size / 256.0 + backbone = Model(args, get_dataset(args).N_CLASSES) + + super().__init__(backbone, loss, args, transform) + + def begin_task(self, dataset): + self.offset_1, self.offset_2 = self.dataset.get_offsets(self.current_task) + + if self.current_task > 0: + prev_start = (self.current_task - 1) * self.args.top_k + prev_end = self.current_task * self.args.top_k + + cur_start = prev_end + cur_end = (self.current_task + 1) * self.args.top_k + + if (prev_end > self.args.size) or (cur_end > self.args.size): + pass + else: + cur_idx = (slice(None), slice(None), slice(cur_start, cur_end)) if self.args.use_prefix_tune_for_e_prompt else (slice(None), slice(cur_start, cur_end)) + prev_idx = (slice(None), slice(None), slice(prev_start, prev_end)) if self.args.use_prefix_tune_for_e_prompt else (slice(None), slice(prev_start, prev_end)) + + with torch.no_grad(): + self.net.model.e_prompt.prompt.grad.zero_() + self.net.model.e_prompt.prompt[cur_idx] = self.net.model.e_prompt.prompt[prev_idx] + self.opt.param_groups[0]['params'] = self.net.model.parameters() + + self.opt = self.get_optimizer() + self.net.original_model.eval() + + def get_parameters(self): + return [p for p in self.net.model.parameters() if p.requires_grad] + + def observe(self, inputs, labels, not_aug_inputs, epoch=None): + + log_dict = {} + cur_lr = self.opt.param_groups[0]['lr'] + log_dict['lr'] = cur_lr + + outputs = self.net(inputs, task_id=self.current_task, train=True, return_outputs=True) + logits = outputs['logits'] + + # here is the trick to mask out classes of non-current tasks + if self.args.train_mask: + logits[:, :self.offset_1] = -float('inf') + + loss_clf = self.loss(logits[:, :self.offset_2], labels) + loss = loss_clf + if self.args.pull_constraint and 'reduce_sim' in outputs: + loss_pull_constraint = outputs['reduce_sim'] + loss = loss - self.args.pull_constraint_coeff * loss_pull_constraint + + self.opt.zero_grad() + loss.backward() + torch.nn.utils.clip_grad_norm_(self.net.model.parameters(), self.args.clip_grad) + self.opt.step() + + return loss.item() + + def forward(self, x): + res = self.net(x, task_id=-1, train=False, return_outputs=True) + logits = res['logits'] + return logits[:, :self.offset_2] diff --git a/models/dualprompt_utils/__init__.py b/models/dualprompt_utils/__init__.py new file mode 100644 index 00000000..f0b4737c --- /dev/null +++ b/models/dualprompt_utils/__init__.py @@ -0,0 +1,3 @@ +""" +This package contains utility functions for the DualPrompt model. Implements a custom version of ViT to add prompt parameters. +""" diff --git a/models/dualprompt_utils/attention.py b/models/dualprompt_utils/attention.py new file mode 100644 index 00000000..b5291ff7 --- /dev/null +++ b/models/dualprompt_utils/attention.py @@ -0,0 +1,53 @@ +# ------------------------------------------ +# Copyright (c) 2015-present, Facebook, Inc. +# All rights reserved. +# ------------------------------------------ +# Modification: +# Added code for dualprompt implementation +# -- Jaeho Lee, dlwogh9344@khu.ac.kr +# ------------------------------------------ +import torch +import torch.nn as nn +import torch.nn.functional as F + + +class PreT_Attention(nn.Module): + def __init__(self, dim, num_heads=8, qkv_bias=False, attn_drop=0., proj_drop=0.): + super().__init__() + assert dim % num_heads == 0, 'dim should be divisible by num_heads' + self.num_heads = num_heads + head_dim = dim // num_heads + self.scale = head_dim ** -0.5 + + self.qkv = nn.Linear(dim, dim * 3, bias=qkv_bias) + self.attn_drop = nn.Dropout(attn_drop) + self.proj = nn.Linear(dim, dim) + self.proj_drop = nn.Dropout(proj_drop) + + def forward(self, x, prompt): + B, N, C = x.shape + qkv = self.qkv(x).reshape(B, N, 3, self.num_heads, C // self.num_heads).permute(2, 0, 3, 1, 4) + q, k, v = qkv.unbind(0) # make torchscript happy (cannot use tensor as tuple) + + if prompt is not None: + # prefix key, value + prompt = prompt.permute(1, 0, 3, 2, 4).contiguous() # 2, B, num_heads, prompt_length, C // num_heads + key_prefix = prompt[0] # B, num_heads, prompt_length, embed_dim // num_heads + value_prefix = prompt[1] # B, num_heads, prompt_length, embed_dim // num_heads + + expected_shape = (B, self.num_heads, C // self.num_heads) + + assert (key_prefix.shape[0], key_prefix.shape[1], key_prefix.shape[3]) == expected_shape, f'key_prefix.shape: {key_prefix.shape} not match k.shape: {k.shape}' + assert (value_prefix.shape[0], value_prefix.shape[1], value_prefix.shape[3]) == expected_shape, f'value_prefix.shape: {value_prefix.shape} not match v.shape: {v.shape}' + + k = torch.cat([key_prefix, k], dim=2) + v = torch.cat([value_prefix, v], dim=2) + + attn = (q @ k.transpose(-2, -1)) * self.scale + attn = attn.softmax(dim=-1) + attn = self.attn_drop(attn) + + x = (attn @ v).transpose(1, 2).reshape(B, N, C) + x = self.proj(x) + x = self.proj_drop(x) + return x diff --git a/models/dualprompt_utils/model.py b/models/dualprompt_utils/model.py new file mode 100644 index 00000000..b92c5699 --- /dev/null +++ b/models/dualprompt_utils/model.py @@ -0,0 +1,68 @@ +from argparse import Namespace +import torch +from torch import nn +from models.dualprompt_utils.vision_transformer import vit_base_patch16_224_dualprompt + + +class Model(nn.Module): + def __init__(self, args: Namespace, n_classes: int): + super().__init__() + self.n_classes = n_classes + + self.original_model = vit_base_patch16_224_dualprompt( + pretrained=args.pretrained, + num_classes=n_classes, + drop_rate=args.drop, + drop_path_rate=args.drop_path, + ) + self.original_model.eval() + + self.model = vit_base_patch16_224_dualprompt( + pretrained=args.pretrained, + num_classes=n_classes, + drop_rate=args.drop, + drop_path_rate=args.drop_path, + prompt_length=args.length, + embedding_key=args.embedding_key, + prompt_init=args.prompt_key_init, + prompt_pool=args.prompt_pool, + prompt_key=args.prompt_key, + pool_size=args.size, + top_k=args.top_k, + batchwise_prompt=args.batchwise_prompt, + prompt_key_init=args.prompt_key_init, + head_type=args.head_type, + use_prompt_mask=args.use_prompt_mask, + use_g_prompt=args.use_g_prompt, + g_prompt_length=args.g_prompt_length, + g_prompt_layer_idx=args.g_prompt_layer_idx, + use_prefix_tune_for_g_prompt=args.use_prefix_tune_for_g_prompt, + use_e_prompt=args.use_e_prompt, + e_prompt_layer_idx=args.e_prompt_layer_idx, + use_prefix_tune_for_e_prompt=args.use_prefix_tune_for_e_prompt, + same_key_value=args.same_key_value, + ) + + if args.freeze: + for p in self.original_model.parameters(): + p.requires_grad = False + + for n, p in self.model.named_parameters(): + if n.startswith(tuple(args.freeze)): + p.requires_grad = False + + def forward(self, x, task_id, train=False, return_outputs=False): + + with torch.no_grad(): + if self.original_model is not None: + original_model_output = self.original_model(x) + cls_features = original_model_output['pre_logits'] + else: + cls_features = None + + outputs = self.model(x, task_id=task_id, cls_features=cls_features, train=train) + + if return_outputs: + return outputs + else: + return outputs['logits'] diff --git a/models/dualprompt_utils/prompt.py b/models/dualprompt_utils/prompt.py new file mode 100644 index 00000000..040f4405 --- /dev/null +++ b/models/dualprompt_utils/prompt.py @@ -0,0 +1,175 @@ +import torch +import torch.nn as nn + + +class EPrompt(nn.Module): + def __init__(self, length=5, embed_dim=768, embedding_key='mean', prompt_init='uniform', prompt_pool=False, + prompt_key=False, pool_size=None, top_k=None, batchwise_prompt=False, prompt_key_init='uniform', + num_layers=1, use_prefix_tune_for_e_prompt=False, num_heads=-1, same_key_value=False,): + super().__init__() + + self.length = length + self.prompt_pool = prompt_pool + self.embedding_key = embedding_key + self.prompt_init = prompt_init + self.prompt_key = prompt_key + self.pool_size = pool_size + self.top_k = top_k + self.batchwise_prompt = batchwise_prompt + self.num_layers = num_layers + self.use_prefix_tune_for_e_prompt = use_prefix_tune_for_e_prompt + self.num_heads = num_heads + self.same_key_value = same_key_value + + if self.prompt_pool: + # user prefix style + if self.use_prefix_tune_for_e_prompt: + assert embed_dim % self.num_heads == 0 + if self.same_key_value: + prompt_pool_shape = (self.num_layers, 1, self.pool_size, self.length, + self.num_heads, embed_dim // self.num_heads) + + if prompt_init == 'zero': + self.prompt = nn.Parameter(torch.zeros(prompt_pool_shape)) + elif prompt_init == 'uniform': + self.prompt = nn.Parameter(torch.randn(prompt_pool_shape)) + nn.init.uniform_(self.prompt, -1, 1) + self.prompt = self.prompt.repeat(1, 2, 1, 1, 1, 1) + else: + prompt_pool_shape = (self.num_layers, 2, self.pool_size, self.length, + self.num_heads, embed_dim // self.num_heads) + if prompt_init == 'zero': + self.prompt = nn.Parameter(torch.zeros(prompt_pool_shape)) + elif prompt_init == 'uniform': + self.prompt = nn.Parameter(torch.randn(prompt_pool_shape)) # num_layers, 2, pool_size, length, num_heads, embed_dim // num_heads + nn.init.uniform_(self.prompt, -1, 1) + else: + prompt_pool_shape = (self.num_layers, self.pool_size, self.length, embed_dim) + if prompt_init == 'zero': + self.prompt = nn.Parameter(torch.zeros(prompt_pool_shape)) + elif prompt_init == 'uniform': + self.prompt = nn.Parameter(torch.randn(prompt_pool_shape)) + nn.init.uniform_(self.prompt, -1, 1) + + # if using learnable prompt keys + if prompt_key: + key_shape = (pool_size, embed_dim) + if prompt_key_init == 'zero': + self.prompt_key = nn.Parameter(torch.zeros(key_shape)) + elif prompt_key_init == 'uniform': + self.prompt_key = nn.Parameter(torch.randn(key_shape)) + nn.init.uniform_(self.prompt_key, -1, 1) + else: + # else use mean of prompt as key + # only compatible with prompt, not prefix + prompt_mean = torch.mean(self.prompt, dim=[0, 2]) + self.prompt_key = prompt_mean + + def l2_normalize(self, x, dim=None, epsilon=1e-12): + """Normalizes a given vector or matrix.""" + square_sum = torch.sum(x ** 2, dim=dim, keepdim=True) + x_inv_norm = torch.rsqrt(torch.maximum(square_sum, torch.tensor(epsilon, device=x.device))) + return x * x_inv_norm + + def forward(self, x_embed, prompt_mask=None, cls_features=None): + out = dict() + if self.prompt_pool: + if self.embedding_key == 'mean': + x_embed_mean = torch.mean(x_embed, dim=1) + elif self.embedding_key == 'max': + x_embed_mean = torch.max(x_embed, dim=1)[0] + elif self.embedding_key == 'mean_max': + x_embed_mean = torch.max(x_embed, dim=1)[0] + 2 * torch.mean(x_embed, dim=1) + elif self.embedding_key == 'cls': + if cls_features is None: + x_embed_mean = torch.max(x_embed, dim=1)[0] # B, C + else: + x_embed_mean = cls_features + else: + raise NotImplementedError("Not supported way of calculating embedding keys!") + + prompt_key_norm = self.l2_normalize(self.prompt_key, dim=-1) # Pool_size, C + x_embed_norm = self.l2_normalize(x_embed_mean, dim=-1) # B, C + + similarity = torch.matmul(prompt_key_norm, x_embed_norm.t()) # pool_size, B or Pool_size, #class, B + similarity = similarity.t() # B, pool_size + + (similarity_top_k, idx) = torch.topk(similarity, k=self.top_k, dim=1) # B, top_k + out['similarity'] = similarity + + if self.batchwise_prompt: + prompt_id, id_counts = torch.unique(idx, return_counts=True, sorted=True) + # In jnp.unique, when the 'size' is specified and there are fewer than the indicated number of elements, + # the remaining elements will be filled with 'fill_value', the default is the minimum value along the specified dimension. + # Unless dimension is specified, this will be flattend if it is not already 1D. + if prompt_id.shape[0] < self.pool_size: + prompt_id = torch.cat([prompt_id, torch.full((self.pool_size - prompt_id.shape[0],), torch.min(idx.flatten()), device=prompt_id.device)]) + id_counts = torch.cat([id_counts, torch.full((self.pool_size - id_counts.shape[0],), 0, device=id_counts.device)]) + _, major_idx = torch.topk(id_counts, k=self.top_k) # top_k + major_prompt_id = prompt_id[major_idx] # top_k + # expand to batch + idx = major_prompt_id.expand(x_embed.shape[0], -1).contiguous() # B, top_k + + if prompt_mask is not None: + idx = prompt_mask # B, top_k + + out['prompt_idx'] = idx + if self.use_prefix_tune_for_e_prompt: + batched_prompt_raw = self.prompt[:, :, idx] # num_layers, B, top_k, length, C + num_layers, dual, batch_size, top_k, length, num_heads, heads_embed_dim = batched_prompt_raw.shape + batched_prompt = batched_prompt_raw.reshape( + num_layers, batch_size, dual, top_k * length, num_heads, heads_embed_dim + ) + else: + batched_prompt_raw = self.prompt[:, idx] + num_layers, batch_size, top_k, length, embed_dim = batched_prompt_raw.shape + batched_prompt = batched_prompt_raw.reshape( + num_layers, batch_size, top_k * length, embed_dim + ) + + batched_key_norm = prompt_key_norm[idx] # B, top_k, C + + out['selected_key'] = batched_key_norm + out['prompt_key_norm'] = prompt_key_norm + out['x_embed_norm'] = x_embed_norm + + # Put pull_constraint loss calculation inside + x_embed_norm = x_embed_norm.unsqueeze(1) # B, 1, C + sim = batched_key_norm * x_embed_norm # B, top_k, C + reduce_sim = torch.sum(sim) / x_embed.shape[0] # Scalar + + out['reduce_sim'] = reduce_sim + else: + # user prefix style + if self.use_prefix_tune_for_e_prompt: + assert embed_dim % self.num_heads == 0 + if self.same_key_value: + prompt_pool_shape = (self.num_layers, 1, self.length, + self.num_heads, embed_dim // self.num_heads) + if self.prompt_init == 'zero': + self.prompt = nn.Parameter(torch.zeros(prompt_pool_shape)) + elif self.prompt_init == 'uniform': + self.prompt = nn.Parameter(torch.randn(prompt_pool_shape)) + nn.init.uniform_(self.prompt, -1, 1) + self.prompt = self.prompt.repeat(1, 2, 1, 1, 1) + else: + prompt_pool_shape = (self.num_layers, 2, self.length, + self.num_heads, embed_dim // self.num_heads) + if self.prompt_init == 'zero': + self.prompt = nn.Parameter(torch.zeros(prompt_pool_shape)) + elif self.prompt_init == 'uniform': + self.prompt = nn.Parameter(torch.randn(prompt_pool_shape)) # num_layers, 2, length, num_heads, embed_dim // num_heads + nn.init.uniform_(self.prompt, -1, 1) + batched_prompt = self.prompt.unsqueeze(0).expand(-1, x_embed.shape[0], -1, -1, -1) + else: + prompt_pool_shape = (self.num_layers, self.length, embed_dim) + if self.prompt_init == 'zero': + self.prompt = nn.Parameter(torch.zeros(prompt_pool_shape)) + elif self.prompt_init == 'uniform': + self.prompt = nn.Parameter(torch.randn(prompt_pool_shape)) + nn.init.uniform_(self.prompt, -1, 1) + batched_prompt = self.prompt.unsqueeze(0).expand(-1, x_embed.shape[0], -1, -1) + + out['batched_prompt'] = batched_prompt + + return out diff --git a/models/dualprompt_utils/vision_transformer.py b/models/dualprompt_utils/vision_transformer.py new file mode 100644 index 00000000..ea73bcf8 --- /dev/null +++ b/models/dualprompt_utils/vision_transformer.py @@ -0,0 +1,678 @@ +""" Vision Transformer (ViT) in PyTorch + +A clone of ViT from timm's implementation, with dualprompt implementation. + +Copyright 2020, Ross Wightman +# ------------------------------------------ +# Modification: +# Added code for dualprompt implementation +# -- Jaeho Lee, dlwogh9344@khu.ac.kr +# ------------------------------------------ +""" +import math +import logging +from functools import partial +from collections import OrderedDict + +import torch +import torch.nn as nn +import torch.nn.functional as F +import torch.utils.checkpoint + +from timm.models.helpers import build_model_with_cfg, resolve_pretrained_cfg, named_apply, adapt_input_conv, checkpoint_seq +from timm.models.layers import PatchEmbed, Mlp, DropPath, trunc_normal_, lecun_normal_ + +from models.dualprompt_utils.prompt import EPrompt +from models.dualprompt_utils.attention import PreT_Attention + +_logger = logging.getLogger(__name__) + + +class Attention(nn.Module): + def __init__(self, dim, num_heads=8, qkv_bias=False, attn_drop=0., proj_drop=0.): + super().__init__() + assert dim % num_heads == 0, 'dim should be divisible by num_heads' + self.num_heads = num_heads + head_dim = dim // num_heads + self.scale = head_dim ** -0.5 + + self.qkv = nn.Linear(dim, dim * 3, bias=qkv_bias) + self.attn_drop = nn.Dropout(attn_drop) + self.proj = nn.Linear(dim, dim) + self.proj_drop = nn.Dropout(proj_drop) + + def forward(self, x, *args): + B, N, C = x.shape + qkv = self.qkv(x).reshape(B, N, 3, self.num_heads, C // self.num_heads).permute(2, 0, 3, 1, 4) + q, k, v = qkv.unbind(0) # make torchscript happy (cannot use tensor as tuple) + + attn = (q @ k.transpose(-2, -1)) * self.scale + attn = attn.softmax(dim=-1) + attn = self.attn_drop(attn) + + x = (attn @ v).transpose(1, 2).reshape(B, N, C) + x = self.proj(x) + x = self.proj_drop(x) + return x + + +class LayerScale(nn.Module): + def __init__(self, dim, init_values=1e-5, inplace=False): + super().__init__() + self.inplace = inplace + self.gamma = nn.Parameter(init_values * torch.ones(dim)) + + def forward(self, x): + return x.mul_(self.gamma) if self.inplace else x * self.gamma + + +class Block(nn.Module): + + def __init__( + self, dim, num_heads, mlp_ratio=4., qkv_bias=False, drop=0., attn_drop=0., init_values=None, + drop_path=0., act_layer=nn.GELU, norm_layer=nn.LayerNorm, attn_layer=Attention): + super().__init__() + self.norm1 = norm_layer(dim) + self.attn = attn_layer(dim, num_heads=num_heads, qkv_bias=qkv_bias, attn_drop=attn_drop, proj_drop=drop) + self.ls1 = LayerScale(dim, init_values=init_values) if init_values else nn.Identity() + # NOTE: drop path for stochastic depth, we shall see if this is better than dropout here + self.drop_path1 = DropPath(drop_path) if drop_path > 0. else nn.Identity() + + self.norm2 = norm_layer(dim) + self.mlp = Mlp(in_features=dim, hidden_features=int(dim * mlp_ratio), act_layer=act_layer, drop=drop) + self.ls2 = LayerScale(dim, init_values=init_values) if init_values else nn.Identity() + self.drop_path2 = DropPath(drop_path) if drop_path > 0. else nn.Identity() + + def forward(self, x, prompt=None): + x = x + self.drop_path1(self.ls1(self.attn(self.norm1(x), prompt))) + x = x + self.drop_path2(self.ls2(self.mlp(self.norm2(x)))) + return x + + +class ResPostBlock(nn.Module): + + def __init__( + self, dim, num_heads, mlp_ratio=4., qkv_bias=False, drop=0., attn_drop=0., init_values=None, + drop_path=0., act_layer=nn.GELU, norm_layer=nn.LayerNorm): + super().__init__() + self.init_values = init_values + + self.attn = Attention(dim, num_heads=num_heads, qkv_bias=qkv_bias, attn_drop=attn_drop, proj_drop=drop) + self.norm1 = norm_layer(dim) + self.drop_path1 = DropPath(drop_path) if drop_path > 0. else nn.Identity() + + self.mlp = Mlp(in_features=dim, hidden_features=int(dim * mlp_ratio), act_layer=act_layer, drop=drop) + self.norm2 = norm_layer(dim) + self.drop_path2 = DropPath(drop_path) if drop_path > 0. else nn.Identity() + + self.init_weights() + + def init_weights(self): + # NOTE this init overrides that base model init with specific changes for the block type + if self.init_values is not None: + nn.init.constant_(self.norm1.weight, self.init_values) + nn.init.constant_(self.norm2.weight, self.init_values) + + def forward(self, x): + x = x + self.drop_path1(self.norm1(self.attn(x))) + x = x + self.drop_path2(self.norm2(self.mlp(x))) + return x + + +class ParallelBlock(nn.Module): + + def __init__( + self, dim, num_heads, num_parallel=2, mlp_ratio=4., qkv_bias=False, init_values=None, + drop=0., attn_drop=0., drop_path=0., act_layer=nn.GELU, norm_layer=nn.LayerNorm): + super().__init__() + self.num_parallel = num_parallel + self.attns = nn.ModuleList() + self.ffns = nn.ModuleList() + for _ in range(num_parallel): + self.attns.append(nn.Sequential(OrderedDict([ + ('norm', norm_layer(dim)), + ('attn', Attention(dim, num_heads=num_heads, qkv_bias=qkv_bias, attn_drop=attn_drop, proj_drop=drop)), + ('ls', LayerScale(dim, init_values=init_values) if init_values else nn.Identity()), + ('drop_path', DropPath(drop_path) if drop_path > 0. else nn.Identity()) + ]))) + self.ffns.append(nn.Sequential(OrderedDict([ + ('norm', norm_layer(dim)), + ('mlp', Mlp(dim, hidden_features=int(dim * mlp_ratio), act_layer=act_layer, drop=drop)), + ('ls', LayerScale(dim, init_values=init_values) if init_values else nn.Identity()), + ('drop_path', DropPath(drop_path) if drop_path > 0. else nn.Identity()) + ]))) + + def _forward_jit(self, x): + x = x + torch.stack([attn(x) for attn in self.attns]).sum(dim=0) + x = x + torch.stack([ffn(x) for ffn in self.ffns]).sum(dim=0) + return x + + @torch.jit.ignore + def _forward(self, x): + x = x + sum(attn(x) for attn in self.attns) + x = x + sum(ffn(x) for ffn in self.ffns) + return x + + def forward(self, x): + if torch.jit.is_scripting() or torch.jit.is_tracing(): + return self._forward_jit(x) + else: + return self._forward(x) + + +class VisionTransformer(nn.Module): + """ Vision Transformer + A PyTorch impl of : `An Image is Worth 16x16 Words: Transformers for Image Recognition at Scale` + - https://arxiv.org/abs/2010.11929 + """ + + def __init__( + self, img_size=224, patch_size=16, in_chans=3, num_classes=1000, global_pool='token', + embed_dim=768, depth=12, num_heads=12, mlp_ratio=4., qkv_bias=True, init_values=None, + class_token=True, no_embed_class=False, fc_norm=None, drop_rate=0., attn_drop_rate=0., drop_path_rate=0., + weight_init='', embed_layer=PatchEmbed, norm_layer=None, act_layer=None, block_fn=Block, + prompt_length=None, embedding_key='cls', prompt_init='uniform', prompt_pool=False, prompt_key=False, pool_size=None, + top_k=None, batchwise_prompt=False, prompt_key_init='uniform', head_type='token', use_prompt_mask=False, + use_g_prompt=False, g_prompt_length=None, g_prompt_layer_idx=None, use_prefix_tune_for_g_prompt=False, + use_e_prompt=False, e_prompt_layer_idx=None, use_prefix_tune_for_e_prompt=False, same_key_value=False,): + """ + Args: + img_size (int, tuple): input image size + patch_size (int, tuple): patch size + in_chans (int): number of input channels + num_classes (int): number of classes for classification head + global_pool (str): type of global pooling for final sequence (default: 'token') + embed_dim (int): embedding dimension + depth (int): depth of transformer + num_heads (int): number of attention heads + mlp_ratio (int): ratio of mlp hidden dim to embedding dim + qkv_bias (bool): enable bias for qkv if True + init_values: (float): layer-scale init values + class_token (bool): use class token + fc_norm (Optional[bool]): pre-fc norm after pool, set if global_pool == 'avg' if None (default: None) + drop_rate (float): dropout rate + attn_drop_rate (float): attention dropout rate + drop_path_rate (float): stochastic depth rate + weight_init (str): weight init scheme + embed_layer (nn.Module): patch embedding layer + norm_layer: (nn.Module): normalization layer + act_layer: (nn.Module): MLP activation layer + block_fn: (nn.Module): transformer block + prompt_pool (bool): use prompt pool or not + """ + super().__init__() + assert global_pool in ('', 'avg', 'token') + assert class_token or global_pool != 'token' + use_fc_norm = global_pool == 'avg' if fc_norm is None else fc_norm + norm_layer = norm_layer or partial(nn.LayerNorm, eps=1e-6) + act_layer = act_layer or nn.GELU + + self.img_size = img_size + self.num_classes = num_classes + self.global_pool = global_pool + self.num_features = self.embed_dim = embed_dim # num_features for consistency with other models + self.class_token = class_token + self.num_prefix_tokens = 1 if class_token else 0 + self.no_embed_class = no_embed_class + self.grad_checkpointing = False + + self.patch_embed = embed_layer( + img_size=img_size, patch_size=patch_size, in_chans=in_chans, embed_dim=embed_dim) + num_patches = self.patch_embed.num_patches + + self.cls_token = nn.Parameter(torch.zeros(1, 1, embed_dim)) if class_token else None + embed_len = num_patches if no_embed_class else num_patches + self.num_prefix_tokens + self.pos_embed = nn.Parameter(torch.randn(1, embed_len, embed_dim) * .02) + self.pos_drop = nn.Dropout(p=drop_rate) + + self.prompt_pool = prompt_pool + self.head_type = head_type + self.use_prompt_mask = use_prompt_mask + + self.use_g_prompt = use_g_prompt + self.g_prompt_layer_idx = g_prompt_layer_idx + # num_g_prompt : The actual number of layers to which g-prompt is attached. + # In official code, create as many layers as the total number of layers and select them based on the index + num_g_prompt = len(self.g_prompt_layer_idx) if self.g_prompt_layer_idx is not None else 0 + self.use_prefix_tune_for_g_prompt = use_prefix_tune_for_g_prompt + + self.use_e_prompt = use_e_prompt + self.e_prompt_layer_idx = e_prompt_layer_idx + num_e_prompt = len(self.e_prompt_layer_idx) if self.e_prompt_layer_idx is not None else 0 + self.use_prefix_tune_for_e_prompt = use_prefix_tune_for_e_prompt + + if not self.use_prefix_tune_for_g_prompt and not self.use_prefix_tune_for_g_prompt: + self.use_g_prompt = False + self.g_prompt_layer_idx = [] + + if use_g_prompt and g_prompt_length is not None and len(g_prompt_layer_idx) != 0: + if not use_prefix_tune_for_g_prompt: + g_prompt_shape = (num_g_prompt, g_prompt_length, embed_dim) + if prompt_init == 'zero': + self.g_prompt = nn.Parameter(torch.zeros(g_prompt_shape)) + elif prompt_init == 'uniform': + self.g_prompt = nn.Parameter(torch.randn(g_prompt_shape)) + nn.init.uniform_(self.g_prompt, -1, 1) + else: + if same_key_value: + g_prompt_shape = (num_g_prompt, 1, g_prompt_length, num_heads, embed_dim // num_heads) + if prompt_init == 'zero': + self.g_prompt = nn.Parameter(torch.zeros(g_prompt_shape)) + elif prompt_init == 'uniform': + self.g_prompt = nn.Parameter(torch.randn(g_prompt_shape)) + nn.init.uniform_(self.g_prompt, -1, 1) + self.g_prompt = self.g_prompt.repeat(1, 2, 1, 1, 1) + else: + g_prompt_shape = (num_g_prompt, 2, g_prompt_length, num_heads, embed_dim // num_heads) + if prompt_init == 'zero': + self.g_prompt = nn.Parameter(torch.zeros(g_prompt_shape)) + elif prompt_init == 'uniform': + self.g_prompt = nn.Parameter(torch.randn(g_prompt_shape)) + nn.init.uniform_(self.g_prompt, -1, 1) + else: + self.g_prompt = None + + if use_e_prompt and e_prompt_layer_idx is not None: + self.e_prompt = EPrompt(length=prompt_length, embed_dim=embed_dim, embedding_key=embedding_key, prompt_init=prompt_init, + prompt_pool=prompt_pool, prompt_key=prompt_key, pool_size=pool_size, top_k=top_k, batchwise_prompt=batchwise_prompt, + prompt_key_init=prompt_key_init, num_layers=num_e_prompt, use_prefix_tune_for_e_prompt=use_prefix_tune_for_e_prompt, + num_heads=num_heads, same_key_value=same_key_value) + + if not (use_g_prompt or use_e_prompt): + attn_layer = Attention + elif not (use_prefix_tune_for_g_prompt or use_prefix_tune_for_e_prompt): + # Prompt tunning + attn_layer = Attention + else: + # Prefix tunning + attn_layer = PreT_Attention + + self.total_prompt_len = 0 + if self.prompt_pool: + if not self.use_prefix_tune_for_g_prompt: + self.total_prompt_len += g_prompt_length * len(self.g_prompt_layer_idx) + if not self.use_prefix_tune_for_e_prompt: + self.total_prompt_len += prompt_length * top_k * len(self.e_prompt_layer_idx) + + dpr = [x.item() for x in torch.linspace(0, drop_path_rate, depth)] # stochastic depth decay rule + self.blocks = nn.Sequential(*[ + block_fn( + dim=embed_dim, num_heads=num_heads, mlp_ratio=mlp_ratio, qkv_bias=qkv_bias, init_values=init_values, + drop=drop_rate, attn_drop=attn_drop_rate, drop_path=dpr[i], norm_layer=norm_layer, act_layer=act_layer, attn_layer=attn_layer) + for i in range(depth)]) + self.norm = norm_layer(embed_dim) if not use_fc_norm else nn.Identity() + + # Classifier Head + self.fc_norm = norm_layer(embed_dim) if use_fc_norm else nn.Identity() + self.head = nn.Linear(self.embed_dim, num_classes) if num_classes > 0 else nn.Identity() + + if weight_init != 'skip': + self.init_weights(weight_init) + + def init_weights(self, mode=''): + assert mode in ('jax', 'jax_nlhb', 'moco', '') + head_bias = -math.log(self.num_classes) if 'nlhb' in mode else 0. + trunc_normal_(self.pos_embed, std=.02) + if self.cls_token is not None: + nn.init.normal_(self.cls_token, std=1e-6) + named_apply(get_init_weights_vit(mode, head_bias), self) + + def _init_weights(self, m): + # this fn left here for compat with downstream users + init_weights_vit_timm(m) + + @torch.jit.ignore() + def load_pretrained(self, checkpoint_path, prefix=''): + _load_weights(self, checkpoint_path, prefix) + + @torch.jit.ignore + def no_weight_decay(self): + return {'pos_embed', 'cls_token', 'dist_token'} + + @torch.jit.ignore + def group_matcher(self, coarse=False): + return dict( + stem=r'^cls_token|pos_embed|patch_embed', # stem and embed + blocks=[(r'^blocks\.(\d+)', None), (r'^norm', (99999,))] + ) + + @torch.jit.ignore + def set_grad_checkpointing(self, enable=True): + self.grad_checkpointing = enable + + @torch.jit.ignore + def get_classifier(self): + return self.head + + def reset_classifier(self, num_classes: int, global_pool=None): + self.num_classes = num_classes + if global_pool is not None: + assert global_pool in ('', 'avg', 'token') + self.global_pool = global_pool + self.head = nn.Linear(self.embed_dim, num_classes) if num_classes > 0 else nn.Identity() + + def forward_features(self, x, task_id=-1, cls_features=None, train=False): + x = self.patch_embed(x) + + if self.cls_token is not None: + x = torch.cat((self.cls_token.expand(x.shape[0], -1, -1), x), dim=1) + + x = self.pos_drop(x + self.pos_embed) + + if self.grad_checkpointing and not torch.jit.is_scripting(): + x = checkpoint_seq(self.blocks, x) + else: + if self.use_g_prompt or self.use_e_prompt: + if self.use_prompt_mask and train: + start = task_id * self.e_prompt.top_k + end = (task_id + 1) * self.e_prompt.top_k + single_prompt_mask = torch.arange(start, end).to(x.device) + prompt_mask = single_prompt_mask.unsqueeze(0).expand(x.shape[0], -1) + if end > self.e_prompt.pool_size: + prompt_mask = None + else: + prompt_mask = None + + g_prompt_counter = -1 + e_prompt_counter = -1 + + res = self.e_prompt(x, prompt_mask=prompt_mask, cls_features=cls_features) + e_prompt = res['batched_prompt'] + + for i, block in enumerate(self.blocks): + if i in self.g_prompt_layer_idx: + if self.use_prefix_tune_for_g_prompt: + g_prompt_counter += 1 + # Prefix tunning, [B, 2, g_prompt_length, num_heads, embed_dim // num_heads] + idx = torch.tensor([g_prompt_counter] * x.shape[0]).to(x.device) + g_prompt = self.g_prompt[idx] + else: + g_prompt = None + x = block(x, prompt=g_prompt) + + elif i in self.e_prompt_layer_idx: + e_prompt_counter += 1 + if self.use_prefix_tune_for_e_prompt: + # Prefix tunning, [B, 2, top_k * e_prompt_length, num_heads, embed_dim // num_heads] + x = block(x, prompt=e_prompt[e_prompt_counter]) + else: + # Pommpt tunning, [B, top_k * e_prompt_length, embed_dim] + prompt = e_prompt[e_prompt_counter] + x = torch.cat([prompt, x], dim=1) + x = block(x) + else: + x = block(x) + else: + x = self.blocks(x) + + res = dict() + + x = self.norm(x) + res['x'] = x + + return res + + def forward_head(self, res, pre_logits: bool = False): + x = res['x'] + if self.class_token and self.head_type == 'token': + if self.prompt_pool: + x = x[:, self.total_prompt_len] + else: + x = x[:, 0] + elif self.head_type == 'gap' and self.global_pool == 'avg': + x = x.mean(dim=1) + elif self.head_type == 'prompt' and self.prompt_pool: + x = x[:, 1:(1 + self.total_prompt_len)] if self.class_token else x[:, 0:self.total_prompt_len] + x = x.mean(dim=1) + elif self.head_type == 'token+prompt' and self.prompt_pool and self.class_token: + x = x[:, 0:self.total_prompt_len + 1] + x = x.mean(dim=1) + else: + raise ValueError(f'Invalid classifier={self.classifier}') + + res['pre_logits'] = x + + x = self.fc_norm(x) + + res['logits'] = self.head(x) + + return res + + def forward(self, x, task_id=-1, cls_features=None, train=False): + res = self.forward_features(x, task_id=task_id, cls_features=cls_features, train=train) + res = self.forward_head(res) + return res + + +def init_weights_vit_timm(module: nn.Module, name: str = ''): + """ ViT weight initialization, original timm impl (for reproducibility) """ + if isinstance(module, nn.Linear): + trunc_normal_(module.weight, std=.02) + if module.bias is not None: + nn.init.zeros_(module.bias) + elif hasattr(module, 'init_weights'): + module.init_weights() + + +def init_weights_vit_jax(module: nn.Module, name: str = '', head_bias: float = 0.): + """ ViT weight initialization, matching JAX (Flax) impl """ + if isinstance(module, nn.Linear): + if name.startswith('head'): + nn.init.zeros_(module.weight) + nn.init.constant_(module.bias, head_bias) + else: + nn.init.xavier_uniform_(module.weight) + if module.bias is not None: + nn.init.normal_(module.bias, std=1e-6) if 'mlp' in name else nn.init.zeros_(module.bias) + elif isinstance(module, nn.Conv2d): + lecun_normal_(module.weight) + if module.bias is not None: + nn.init.zeros_(module.bias) + elif hasattr(module, 'init_weights'): + module.init_weights() + + +def init_weights_vit_moco(module: nn.Module, name: str = ''): + """ ViT weight initialization, matching moco-v3 impl minus fixed PatchEmbed """ + if isinstance(module, nn.Linear): + if 'qkv' in name: + # treat the weights of Q, K, V separately + val = math.sqrt(6. / float(module.weight.shape[0] // 3 + module.weight.shape[1])) + nn.init.uniform_(module.weight, -val, val) + else: + nn.init.xavier_uniform_(module.weight) + if module.bias is not None: + nn.init.zeros_(module.bias) + elif hasattr(module, 'init_weights'): + module.init_weights() + + +def get_init_weights_vit(mode='jax', head_bias: float = 0.): + if 'jax' in mode: + return partial(init_weights_vit_jax, head_bias=head_bias) + elif 'moco' in mode: + return init_weights_vit_moco + else: + return init_weights_vit_timm + + +@torch.no_grad() +def _load_weights(model: VisionTransformer, checkpoint_path: str, prefix: str = ''): + """ Load weights from .npz checkpoints for official Google Brain Flax implementation + """ + import numpy as np + + def _n2p(w, t=True): + if w.ndim == 4 and w.shape[0] == w.shape[1] == w.shape[2] == 1: + w = w.flatten() + if t: + if w.ndim == 4: + w = w.transpose([3, 2, 0, 1]) + elif w.ndim == 3: + w = w.transpose([2, 0, 1]) + elif w.ndim == 2: + w = w.transpose([1, 0]) + return torch.from_numpy(w) + + w = np.load(checkpoint_path) + if not prefix and 'opt/target/embedding/kernel' in w: + prefix = 'opt/target/' + + if hasattr(model.patch_embed, 'backbone'): + # hybrid + backbone = model.patch_embed.backbone + stem_only = not hasattr(backbone, 'stem') + stem = backbone if stem_only else backbone.stem + stem.conv.weight.copy_(adapt_input_conv(stem.conv.weight.shape[1], _n2p(w[f'{prefix}conv_root/kernel']))) + stem.norm.weight.copy_(_n2p(w[f'{prefix}gn_root/scale'])) + stem.norm.bias.copy_(_n2p(w[f'{prefix}gn_root/bias'])) + if not stem_only: + for i, stage in enumerate(backbone.stages): + for j, block in enumerate(stage.blocks): + bp = f'{prefix}block{i + 1}/unit{j + 1}/' + for r in range(3): + getattr(block, f'conv{r + 1}').weight.copy_(_n2p(w[f'{bp}conv{r + 1}/kernel'])) + getattr(block, f'norm{r + 1}').weight.copy_(_n2p(w[f'{bp}gn{r + 1}/scale'])) + getattr(block, f'norm{r + 1}').bias.copy_(_n2p(w[f'{bp}gn{r + 1}/bias'])) + if block.downsample is not None: + block.downsample.conv.weight.copy_(_n2p(w[f'{bp}conv_proj/kernel'])) + block.downsample.norm.weight.copy_(_n2p(w[f'{bp}gn_proj/scale'])) + block.downsample.norm.bias.copy_(_n2p(w[f'{bp}gn_proj/bias'])) + embed_conv_w = _n2p(w[f'{prefix}embedding/kernel']) + else: + embed_conv_w = adapt_input_conv( + model.patch_embed.proj.weight.shape[1], _n2p(w[f'{prefix}embedding/kernel'])) + model.patch_embed.proj.weight.copy_(embed_conv_w) + model.patch_embed.proj.bias.copy_(_n2p(w[f'{prefix}embedding/bias'])) + model.cls_token.copy_(_n2p(w[f'{prefix}cls'], t=False)) + pos_embed_w = _n2p(w[f'{prefix}Transformer/posembed_input/pos_embedding'], t=False) + if pos_embed_w.shape != model.pos_embed.shape: + pos_embed_w = resize_pos_embed( # resize pos embedding when different size from pretrained weights + pos_embed_w, + model.pos_embed, + getattr(model, 'num_prefix_tokens', 1), + model.patch_embed.grid_size + ) + model.pos_embed.copy_(pos_embed_w) + model.norm.weight.copy_(_n2p(w[f'{prefix}Transformer/encoder_norm/scale'])) + model.norm.bias.copy_(_n2p(w[f'{prefix}Transformer/encoder_norm/bias'])) + if isinstance(model.head, nn.Linear) and model.head.bias.shape[0] == w[f'{prefix}head/bias'].shape[-1]: + model.head.weight.copy_(_n2p(w[f'{prefix}head/kernel'])) + model.head.bias.copy_(_n2p(w[f'{prefix}head/bias'])) + # NOTE representation layer has been removed, not used in latest 21k/1k pretrained weights + # if isinstance(getattr(model.pre_logits, 'fc', None), nn.Linear) and f'{prefix}pre_logits/bias' in w: + # model.pre_logits.fc.weight.copy_(_n2p(w[f'{prefix}pre_logits/kernel'])) + # model.pre_logits.fc.bias.copy_(_n2p(w[f'{prefix}pre_logits/bias'])) + for i, block in enumerate(model.blocks.children()): + block_prefix = f'{prefix}Transformer/encoderblock_{i}/' + mha_prefix = block_prefix + 'MultiHeadDotProductAttention_1/' + block.norm1.weight.copy_(_n2p(w[f'{block_prefix}LayerNorm_0/scale'])) + block.norm1.bias.copy_(_n2p(w[f'{block_prefix}LayerNorm_0/bias'])) + block.attn.qkv.weight.copy_(torch.cat([ + _n2p(w[f'{mha_prefix}{n}/kernel'], t=False).flatten(1).T for n in ('query', 'key', 'value')])) + block.attn.qkv.bias.copy_(torch.cat([ + _n2p(w[f'{mha_prefix}{n}/bias'], t=False).reshape(-1) for n in ('query', 'key', 'value')])) + block.attn.proj.weight.copy_(_n2p(w[f'{mha_prefix}out/kernel']).flatten(1)) + block.attn.proj.bias.copy_(_n2p(w[f'{mha_prefix}out/bias'])) + for r in range(2): + getattr(block.mlp, f'fc{r + 1}').weight.copy_(_n2p(w[f'{block_prefix}MlpBlock_3/Dense_{r}/kernel'])) + getattr(block.mlp, f'fc{r + 1}').bias.copy_(_n2p(w[f'{block_prefix}MlpBlock_3/Dense_{r}/bias'])) + block.norm2.weight.copy_(_n2p(w[f'{block_prefix}LayerNorm_2/scale'])) + block.norm2.bias.copy_(_n2p(w[f'{block_prefix}LayerNorm_2/bias'])) + + +def resize_pos_embed(posemb, posemb_new, num_prefix_tokens=1, gs_new=()): + # Rescale the grid of position embeddings when loading from state_dict. Adapted from + # https://github.com/google-research/vision_transformer/blob/00883dd691c63a6830751563748663526e811cee/vit_jax/checkpoint.py#L224 + # modify + _logger.info('Resized position embedding: %s to %s', posemb.shape, posemb_new.shape) + ntok_new = posemb_new.shape[1] + if num_prefix_tokens: + posemb_prefix, posemb_grid = posemb[:, :num_prefix_tokens], posemb[0, num_prefix_tokens:] + # ntok_new -= num_prefix_tokens + else: + posemb_prefix, posemb_grid = posemb[:, :0], posemb[0] + gs_old = int(math.sqrt(len(posemb_grid))) + if ntok_new > gs_old ** 2: + ntok_new -= gs_old ** 2 + # expand cls's pos embedding for prompt tokens + posemb_prefix = posemb_prefix.expand(-1, ntok_new, -1) + if not len(gs_new): # backwards compatibility + gs_new = [int(math.sqrt(ntok_new))] * 2 + assert len(gs_new) >= 2 + _logger.info('Position embedding grid-size from %s to %s', [gs_old, gs_old], gs_new) + posemb_grid = posemb_grid.reshape(1, gs_old, gs_old, -1).permute(0, 3, 1, 2) + posemb_grid = F.interpolate(posemb_grid, size=gs_new, mode='bicubic', align_corners=False) + posemb_grid = posemb_grid.permute(0, 2, 3, 1).reshape(1, gs_new[0] * gs_new[1], -1) + posemb = torch.cat([posemb_prefix, posemb_grid], dim=1) + return posemb + + +def checkpoint_filter_fn(state_dict, model, adapt_layer_scale=False): + """ convert patch embedding weight from manual patchify + linear proj to conv""" + import re + out_dict = {} + if 'model' in state_dict: + # For deit models + state_dict = state_dict['model'] + + for k, v in state_dict.items(): + if 'patch_embed.proj.weight' in k and len(v.shape) < 4: + # For old models that I trained prior to conv based patchification + O, I, H, W = model.patch_embed.proj.weight.shape + v = v.reshape(O, -1, H, W) + elif k == 'pos_embed' and v.shape[1] != model.pos_embed.shape[1]: + # To resize pos embedding when using model at different size from pretrained weights + v = resize_pos_embed( + v, + model.pos_embed, + 0 if getattr(model, 'no_embed_class') else getattr(model, 'num_prefix_tokens', 1), + model.patch_embed.grid_size + ) + elif adapt_layer_scale and 'gamma_' in k: + # remap layer-scale gamma into sub-module (deit3 models) + k = re.sub(r'gamma_([0-9])', r'ls\1.gamma', k) + elif 'pre_logits' in k: + # NOTE representation layer removed as not used in latest 21k/1k pretrained weights + continue + out_dict[k] = v + return out_dict + + +def _create_vision_transformer(variant, pretrained=False, **kwargs): + if kwargs.get('features_only', None): + raise RuntimeError('features_only not implemented for Vision Transformer models.') + + if 'flexi' in variant: + # FIXME Google FlexiViT pretrained models have a strong preference for bilinear patch / embed + # interpolation, other pretrained models resize better w/ anti-aliased bicubic interpolation. + _filter_fn = partial(checkpoint_filter_fn, interpolation='bilinear', antialias=False) + else: + _filter_fn = checkpoint_filter_fn + + # FIXME attn pool (currently only in siglip) params removed if pool disabled, is there a better soln? + strict = True + if 'siglip' in variant and kwargs.get('global_pool', None) != 'map': + strict = False + + pretrained_cfg = resolve_pretrained_cfg(variant, pretrained_cfg=kwargs.pop('pretrained_cfg', None)) + pretrained_cfg.custom_load = True + + return build_model_with_cfg( + VisionTransformer, + variant, + pretrained, + pretrained_cfg=pretrained_cfg, + pretrained_filter_fn=_filter_fn, + pretrained_strict=strict, + **kwargs, + ) + + +def vit_base_patch16_224_dualprompt(pretrained=False, **kwargs): + """ ViT-Base (ViT-B/16) from original paper (https://arxiv.org/abs/2010.11929). + ImageNet-1k weights fine-tuned from in21k @ 224x224, source https://github.com/google-research/vision_transformer. + """ + model_kwargs = dict(patch_size=16, embed_dim=768, depth=12, num_heads=12, **kwargs) + model = _create_vision_transformer('vit_base_patch16_224', pretrained=pretrained, **model_kwargs) + return model diff --git a/models/er.py b/models/er.py index b54f3349..30f85ac3 100644 --- a/models/er.py +++ b/models/er.py @@ -1,3 +1,13 @@ +""" +This module implements the simplest form of rehearsal training: Experience Replay. It maintains a buffer +of previously seen examples and uses them to augment the current batch during training. + +Example usage: + model = Er(backbone, loss, args, transform) + loss = model.observe(inputs, labels, not_aug_inputs, epoch) + +""" + # Copyright 2020-present, Pietro Buzzega, Matteo Boschini, Angelo Porrello, Davide Abati, Simone Calderara. # All rights reserved. # This source code is licensed under the license found in the @@ -6,35 +16,43 @@ import torch from models.utils.continual_model import ContinualModel -from utils.args import add_management_args, add_experiment_args, add_rehearsal_args, ArgumentParser +from utils.args import add_rehearsal_args, ArgumentParser from utils.buffer import Buffer -def get_parser() -> ArgumentParser: - parser = ArgumentParser(description='Continual learning via' - ' Experience Replay.') - add_management_args(parser) - add_experiment_args(parser) - add_rehearsal_args(parser) - return parser - - class Er(ContinualModel): NAME = 'er' COMPATIBILITY = ['class-il', 'domain-il', 'task-il', 'general-continual'] + @staticmethod + def get_parser() -> ArgumentParser: + """ + Returns an ArgumentParser object with predefined arguments for the Er model. + + Besides the required `add_management_args` and `add_experiment_args`, this model requires the `add_rehearsal_args` to include the buffer-related arguments. + """ + parser = ArgumentParser(description='Continual learning via Experience Replay.') + add_rehearsal_args(parser) + return parser + def __init__(self, backbone, loss, args, transform): + """ + The ER model maintains a buffer of previously seen examples and uses them to augment the current batch during training. + """ super(Er, self).__init__(backbone, loss, args, transform) - self.buffer = Buffer(self.args.buffer_size, self.device) + self.buffer = Buffer(self.args.buffer_size) - def observe(self, inputs, labels, not_aug_inputs): + def observe(self, inputs, labels, not_aug_inputs, epoch=None): + """ + ER trains on the current task using the data provided, but also augments the batch with data from the buffer. + """ real_batch_size = inputs.shape[0] self.opt.zero_grad() if not self.buffer.is_empty(): buf_inputs, buf_labels = self.buffer.get_data( - self.args.minibatch_size, transform=self.transform) + self.args.minibatch_size, transform=self.transform, device=self.device) inputs = torch.cat((inputs, buf_inputs)) labels = torch.cat((labels, buf_labels)) diff --git a/models/er_ace.py b/models/er_ace.py index 7e17affa..28673296 100644 --- a/models/er_ace.py +++ b/models/er_ace.py @@ -4,37 +4,29 @@ # LICENSE file in the root directory of this source tree. import torch -from datasets import get_dataset from models.utils.continual_model import ContinualModel -from utils.args import add_management_args, add_experiment_args, add_rehearsal_args, ArgumentParser +from utils.args import add_rehearsal_args, ArgumentParser from utils.buffer import Buffer -def get_parser() -> ArgumentParser: - parser = ArgumentParser(description='Continual learning via' - ' Experience Replay.') - add_management_args(parser) - add_experiment_args(parser) - add_rehearsal_args(parser) - return parser - - class ErACE(ContinualModel): NAME = 'er_ace' COMPATIBILITY = ['class-il', 'task-il'] + @staticmethod + def get_parser() -> ArgumentParser: + parser = ArgumentParser(description='Continual learning via' + ' Experience Replay with asymmetric cross-entropy.') + add_rehearsal_args(parser) + return parser + def __init__(self, backbone, loss, args, transform): - super(ErACE, self).__init__(backbone, loss, args, transform) - self.buffer = Buffer(self.args.buffer_size, self.device) + super().__init__(backbone, loss, args, transform) + self.buffer = Buffer(self.args.buffer_size) self.seen_so_far = torch.tensor([]).long().to(self.device) - self.num_classes = get_dataset(args).N_TASKS * get_dataset(args).N_CLASSES_PER_TASK - self.task = 0 - - def end_task(self, dataset): - self.task += 1 - def observe(self, inputs, labels, not_aug_inputs): + def observe(self, inputs, labels, not_aug_inputs, epoch=None): present = labels.unique() self.seen_so_far = torch.cat([self.seen_so_far, present]).unique() @@ -47,16 +39,16 @@ def observe(self, inputs, labels, not_aug_inputs): if self.seen_so_far.max() < (self.num_classes - 1): mask[:, self.seen_so_far.max():] = 1 - if self.task > 0: + if self.current_task > 0: logits = logits.masked_fill(mask == 0, torch.finfo(logits.dtype).min) loss = self.loss(logits, labels) loss_re = torch.tensor(0.) - if self.task > 0: + if self.current_task > 0: # sample from buffer buf_inputs, buf_labels = self.buffer.get_data( - self.args.minibatch_size, transform=self.transform) + self.args.minibatch_size, transform=self.transform, device=self.device) loss_re = self.loss(self.net(buf_inputs), buf_labels) loss += loss_re diff --git a/models/er_ace_lider.py b/models/er_ace_lider.py new file mode 100644 index 00000000..e4bd9fa2 --- /dev/null +++ b/models/er_ace_lider.py @@ -0,0 +1,88 @@ +import torch +from utils.buffer import Buffer +from utils.args import * +from models.utils.lider_model import LiderOptimizer, add_lipschitz_args + + +class ErACELider(LiderOptimizer): + NAME = 'er_ace_lider' + COMPATIBILITY = ['class-il', 'task-il'] + + @staticmethod + def get_parser() -> ArgumentParser: + parser = ArgumentParser(description='ER-ACE with future not fixed (as made by authors)' + 'Treated with LiDER!') + add_rehearsal_args(parser) + add_lipschitz_args(parser) + return parser + + def __init__(self, backbone, loss, args, transform): + super().__init__(backbone, loss, args, transform) + self.buffer = Buffer(self.args.buffer_size) + self.seen_so_far = torch.tensor([]).long().to(self.device) + + def begin_task(self, dataset): + if self.current_task == 0: + self.net.set_return_prerelu(True) + + self.init_net(dataset) + + def to(self, device): + super().to(device) + self.seen_so_far = self.seen_so_far.to(device) + + def observe(self, inputs: torch.Tensor, labels: torch.Tensor, not_aug_inputs: torch.Tensor, epoch=None): + + present = labels.unique() + self.seen_so_far = torch.cat([self.seen_so_far, present]).unique() + + logits = self.net(inputs) + mask = torch.zeros_like(logits) + mask[:, present] = 1 + + self.opt.zero_grad() + if self.seen_so_far.max() < (self.num_classes - 1): + mask[:, self.seen_so_far.max():] = 1 + + if self.current_task > 0: + logits = logits.masked_fill(mask == 0, torch.finfo(logits.dtype).min) + + loss = self.loss(logits, labels) + tot_loss = loss.item() + loss.backward() + + if self.current_task > 0: + # sample from buffer + buf_inputs, buf_labels = self.buffer.get_data( + self.args.minibatch_size, transform=self.transform, device=self.device) + loss_re = self.loss(self.net(buf_inputs), buf_labels) + tot_loss += loss_re.item() + loss_re.backward() + + if not self.buffer.is_empty(): + if self.args.alpha_lip_lambda > 0: + buf_inputs, _ = self.buffer.get_data(self.args.minibatch_size, transform=self.transform, device=self.device) + _, buf_output_features = self.net(buf_inputs, returnt='full') + + lip_inputs = [buf_inputs] + buf_output_features + + loss_lip_minimize = self.args.alpha_lip_lambda * self.minimization_lip_loss(lip_inputs) + tot_loss += loss_lip_minimize.item() + loss_lip_minimize.backward() + + if self.args.beta_lip_lambda > 0: + buf_inputs, _ = self.buffer.get_data(self.args.minibatch_size, transform=self.transform, device=self.device) + _, buf_output_features = self.net(buf_inputs, returnt='full') + + lip_inputs = [buf_inputs] + buf_output_features + + loss_lip_dyn_budget = self.args.beta_lip_lambda * self.dynamic_budget_lip_loss(lip_inputs) + tot_loss += loss_lip_dyn_budget.item() + loss_lip_dyn_budget.backward() + + self.opt.step() + + self.buffer.add_data(examples=not_aug_inputs, + labels=labels) + + return tot_loss diff --git a/models/ewc_on.py b/models/ewc_on.py index 234b6feb..9fd63903 100644 --- a/models/ewc_on.py +++ b/models/ewc_on.py @@ -8,26 +8,22 @@ import torch.nn.functional as F from models.utils.continual_model import ContinualModel -from utils.args import add_management_args, add_experiment_args, ArgumentParser - - -def get_parser() -> ArgumentParser: - parser = ArgumentParser(description='Continual learning via' - ' online EWC.') - add_management_args(parser) - add_experiment_args(parser) - parser.add_argument('--e_lambda', type=float, required=True, - help='lambda weight for EWC') - parser.add_argument('--gamma', type=float, required=True, - help='gamma parameter for EWC online') - - return parser +from utils.args import ArgumentParser class EwcOn(ContinualModel): NAME = 'ewc_on' COMPATIBILITY = ['class-il', 'domain-il', 'task-il'] + @staticmethod + def get_parser() -> ArgumentParser: + parser = ArgumentParser(description='Continual learning via online EWC.') + parser.add_argument('--e_lambda', type=float, required=True, + help='lambda weight for EWC') + parser.add_argument('--gamma', type=float, required=True, + help='gamma parameter for EWC online') + return parser + def __init__(self, backbone, loss, args, transform): super(EwcOn, self).__init__(backbone, loss, args, transform) @@ -68,7 +64,7 @@ def end_task(self, dataset): self.checkpoint = self.net.get_params().data.clone() - def observe(self, inputs, labels, not_aug_inputs): + def observe(self, inputs, labels, not_aug_inputs, epoch=None): self.opt.zero_grad() outputs = self.net(inputs) diff --git a/models/fdr.py b/models/fdr.py index 32e4b989..c2632436 100644 --- a/models/fdr.py +++ b/models/fdr.py @@ -6,38 +6,34 @@ import torch from models.utils.continual_model import ContinualModel -from utils.args import add_management_args, add_experiment_args, add_rehearsal_args, ArgumentParser +from utils.args import add_rehearsal_args, ArgumentParser from utils.buffer import Buffer -def get_parser() -> ArgumentParser: - parser = ArgumentParser(description='Continual learning via' - ' Dark Experience Replay.') - add_management_args(parser) - add_experiment_args(parser) - add_rehearsal_args(parser) - parser.add_argument('--alpha', type=float, required=True, - help='Penalty weight.') - return parser - - class Fdr(ContinualModel): NAME = 'fdr' COMPATIBILITY = ['class-il', 'domain-il', 'task-il', 'general-continual'] + @staticmethod + def get_parser() -> ArgumentParser: + parser = ArgumentParser(description='Continual learning via' + ' Function Distance Regularization.') + add_rehearsal_args(parser) + parser.add_argument('--alpha', type=float, required=True, + help='Penalty weight.') + return parser + def __init__(self, backbone, loss, args, transform): super(Fdr, self).__init__(backbone, loss, args, transform) - self.buffer = Buffer(self.args.buffer_size, self.device) - self.current_task = 0 + self.buffer = Buffer(self.args.buffer_size) self.i = 0 self.soft = torch.nn.Softmax(dim=1) self.logsoft = torch.nn.LogSoftmax(dim=1) def end_task(self, dataset): - self.current_task += 1 - examples_per_task = self.args.buffer_size // self.current_task + examples_per_task = self.args.buffer_size // self.current_task if self.current_task > 0 else self.args.buffer_size - if self.current_task > 1: + if self.current_task > 0: buf_x, buf_log, buf_tl = self.buffer.get_all_data() self.buffer.empty() @@ -62,10 +58,10 @@ def end_task(self, dataset): self.buffer.add_data(examples=not_aug_inputs[:(examples_per_task - counter)], logits=outputs.data[:(examples_per_task - counter)], task_labels=(torch.ones(self.args.batch_size) * - (self.current_task - 1))[:(examples_per_task - counter)]) + self.current_task)[:(examples_per_task - counter)]) counter += self.args.batch_size - def observe(self, inputs, labels, not_aug_inputs): + def observe(self, inputs, labels, not_aug_inputs, epoch=None): self.i += 1 self.opt.zero_grad() @@ -75,7 +71,8 @@ def observe(self, inputs, labels, not_aug_inputs): self.opt.step() if not self.buffer.is_empty(): self.opt.zero_grad() - buf_inputs, buf_logits, _ = self.buffer.get_data(self.args.minibatch_size, transform=self.transform) + buf_inputs, buf_logits, _ = self.buffer.get_data(self.args.minibatch_size, + transform=self.transform, device=self.device) buf_outputs = self.net(buf_inputs) loss = torch.norm(self.soft(buf_outputs) - self.soft(buf_logits), 2, 1).mean() assert not torch.isnan(loss) diff --git a/models/gdumb.py b/models/gdumb.py index 8471e36b..905f0ab7 100644 --- a/models/gdumb.py +++ b/models/gdumb.py @@ -6,33 +6,16 @@ from torch.optim import SGD, lr_scheduler from models.utils.continual_model import ContinualModel -from utils.args import add_management_args, add_experiment_args, add_rehearsal_args, ArgumentParser +from utils.args import add_rehearsal_args, ArgumentParser from utils.augmentations import cutmix_data from utils.buffer import Buffer from utils.status import progress_bar -def get_parser() -> ArgumentParser: - parser = ArgumentParser(description='Continual Learning via' - ' Progressive Neural Networks.') - add_management_args(parser) - add_rehearsal_args(parser) - parser.add_argument('--maxlr', type=float, default=5e-2, - help='Penalty weight.') - parser.add_argument('--minlr', type=float, default=5e-4, - help='Penalty weight.') - parser.add_argument('--fitting_epochs', type=int, default=256, - help='Penalty weight.') - parser.add_argument('--cutmix_alpha', type=float, default=None, - help='Penalty weight.') - add_experiment_args(parser) - return parser - - -def fit_buffer(self, epochs): - optimizer = SGD(self.net.parameters(), lr=self.args.maxlr, momentum=self.args.optim_mom, weight_decay=self.args.optim_wd, nesterov=self.args.optim_nesterov) +def fit_buffer(self: ContinualModel, epochs): + optimizer = SGD(self.get_parameters(), lr=self.args.maxlr, momentum=self.args.optim_mom, weight_decay=self.args.optim_wd, nesterov=self.args.optim_nesterov) scheduler = lr_scheduler.CosineAnnealingWarmRestarts(optimizer, T_0=1, T_mult=2, eta_min=self.args.minlr) - + for epoch in range(epochs): if epoch <= 0: # Warm start of 1 epoch for param_group in optimizer.param_groups: @@ -44,9 +27,13 @@ def fit_buffer(self, epochs): scheduler.step() all_inputs, all_labels = self.buffer.get_data( - len(self.buffer.examples), transform=self.transform) + len(self.buffer.examples), transform=self.transform, device=self.device) + it = 0 while len(all_inputs): + if it > self.get_debug_iters() and self.args.debug_mode: + break + it += 1 optimizer.zero_grad() buf_inputs, buf_labels = all_inputs[:self.args.batch_size], all_labels[:self.args.batch_size] all_inputs, all_labels = all_inputs[self.args.batch_size:], all_labels[self.args.batch_size:] @@ -71,20 +58,32 @@ class GDumb(ContinualModel): NAME = 'gdumb' COMPATIBILITY = ['class-il', 'task-il'] + @staticmethod + def get_parser() -> ArgumentParser: + parser = ArgumentParser(description='Greedy sampler and Dumb Learner.') + add_rehearsal_args(parser) + parser.add_argument('--maxlr', type=float, default=5e-2, + help='Max learning rate.') + parser.add_argument('--minlr', type=float, default=5e-4, + help='Min learning rate.') + parser.add_argument('--fitting_epochs', type=int, default=256, + help='Number of epochs to fit the buffer.') + parser.add_argument('--cutmix_alpha', type=float, default=1.0, + help='Alpha parameter for cutmix') + return parser + def __init__(self, backbone, loss, args, transform): super(GDumb, self).__init__(backbone, loss, args, transform) - self.buffer = Buffer(self.args.buffer_size, self.device) - self.task = 0 + self.buffer = Buffer(self.args.buffer_size) - def observe(self, inputs, labels, not_aug_inputs): + def observe(self, inputs, labels, not_aug_inputs, epoch=None): self.buffer.add_data(examples=not_aug_inputs, labels=labels) return 0 def end_task(self, dataset): # new model - self.task += 1 - if not (self.task == dataset.N_TASKS): + if not (self.current_task == dataset.N_TASKS - 1): return self.net = dataset.get_backbone().to(self.device) fit_buffer(self, self.args.fitting_epochs) diff --git a/models/gdumb_lider.py b/models/gdumb_lider.py new file mode 100644 index 00000000..9f271847 --- /dev/null +++ b/models/gdumb_lider.py @@ -0,0 +1,110 @@ +from utils.args import * +from torch.optim import SGD, lr_scheduler +from utils.buffer import Buffer +import torch +from models.utils.lider_model import LiderOptimizer, add_lipschitz_args +from utils.augmentations import cutmix_data +from utils.status import progress_bar + + + +def fit_buffer(self: LiderOptimizer, epochs): + optimizer = SGD(self.get_parameters(), lr=self.args.maxlr, momentum=self.args.optim_mom, weight_decay=self.args.optim_wd, nesterov=self.args.optim_nesterov) + scheduler = lr_scheduler.CosineAnnealingWarmRestarts(optimizer, T_0=1, T_mult=2, eta_min=self.args.minlr) + + for epoch in range(epochs): + if epoch <= 0: # Warm start of 1 epoch + for param_group in optimizer.param_groups: + param_group['lr'] = self.args.maxlr * 0.1 + elif epoch == 1: # Then set to maxlr + for param_group in optimizer.param_groups: + param_group['lr'] = self.args.maxlr + else: + scheduler.step() + + all_inputs, all_labels = self.buffer.get_data( + len(self.buffer.examples), transform=self.transform, device=self.device) + + it = 0 + while len(all_inputs): + if it > self.get_debug_iters() and self.args.debug_mode: + break + it += 1 + optimizer.zero_grad() + buf_inputs, buf_labels = all_inputs[:self.args.batch_size], all_labels[:self.args.batch_size] + all_inputs, all_labels = all_inputs[self.args.batch_size:], all_labels[self.args.batch_size:] + + if self.args.cutmix_alpha is not None: + inputs, labels_a, labels_b, lam = cutmix_data(x=buf_inputs.cpu(), y=buf_labels.cpu(), alpha=self.args.cutmix_alpha) + buf_inputs = inputs.to(self.device) + buf_labels_a = labels_a.to(self.device) + buf_labels_b = labels_b.to(self.device) + buf_outputs = self.net(buf_inputs) + loss = lam * self.loss(buf_outputs, buf_labels_a) + (1 - lam) * self.loss(buf_outputs, buf_labels_b) + else: + buf_outputs = self.net(buf_inputs) + loss = self.loss(buf_outputs, buf_labels) + + if not self.buffer.is_empty(): + if self.args.alpha_lip_lambda > 0: + buf_inputs, _ = self.buffer.get_data(self.args.minibatch_size, transform=self.transform, device=self.device) + _, buf_output_features = self.net(buf_inputs, returnt='full') + + lip_inputs = [buf_inputs] + buf_output_features + + loss_lip_buffer = self.minimization_lip_loss(lip_inputs) + loss += self.args.alpha_lip_lambda * loss_lip_buffer + + if self.args.beta_lip_lambda > 0: + buf_inputs, _ = self.buffer.get_data(self.args.minibatch_size, transform=self.transform, device=self.device) + _, buf_output_features = self.net(buf_inputs, returnt='full') + + lip_inputs = [buf_inputs] + buf_output_features + + loss_lip_budget = self.dynamic_budget_lip_loss(lip_inputs) + loss += self.args.beta_lip_lambda * loss_lip_budget + + loss.backward() + optimizer.step() + progress_bar(epoch, epochs, 1, 'G', loss.item()) + + +class GDumbLider(LiderOptimizer): + NAME = 'gdumb_lider' + COMPATIBILITY = ['class-il', 'task-il'] + + @staticmethod + def get_parser() -> ArgumentParser: + parser = ArgumentParser(description='GDumb learns an empty model only on the buffer.' + 'Treated with LiDER!') + add_rehearsal_args(parser) + add_lipschitz_args(parser) + parser.add_argument('--maxlr', type=float, default=5e-2, + help='Max learning rate.') + parser.add_argument('--minlr', type=float, default=5e-4, + help='Min learning rate.') + parser.add_argument('--fitting_epochs', type=int, default=256, + help='Number of epochs to fit the buffer.') + parser.add_argument('--cutmix_alpha', type=float, default=1.0, + help='Alpha parameter for cutmix') + return parser + + def __init__(self, backbone, loss, args, transform): + super().__init__(backbone, loss, args, transform) + self.buffer = Buffer(self.args.buffer_size) + + def observe(self, inputs: torch.Tensor, labels: torch.Tensor, not_aug_inputs: torch.Tensor, epoch=None): + self.buffer.add_data(examples=not_aug_inputs, + labels=labels) + return 0 + + def end_task(self, dataset): + # new model + if not (self.current_task == dataset.N_TASKS - 1): + return + self.net = dataset.get_backbone().to(self.device) + + self.net.set_return_prerelu(True) + self.init_net(dataset) + + fit_buffer(self, self.args.fitting_epochs) diff --git a/models/gem.py b/models/gem.py index a2cc1162..06f983f3 100644 --- a/models/gem.py +++ b/models/gem.py @@ -6,31 +6,23 @@ import numpy as np import torch +import os +from utils.conf import warn_once + try: import quadprog except BaseException: - print('Warning: GEM and A-GEM cannot be used on Windows (quadprog required)') + quadprog = None + if os.name == 'nt': + # check if os is windows + warn_once('Warning: GEM and A-GEM cannot be used on Windows (quadprog required)') + else: + warn_once('Warning: quadprog not found (GEM and A-GEM will not work)') + raise ImportError from models.utils.continual_model import ContinualModel -from utils.args import add_management_args, add_experiment_args, add_rehearsal_args, ArgumentParser -from utils.buffer import Buffer - - -def get_parser() -> ArgumentParser: - parser = ArgumentParser(description='Continual learning via' - ' Gradient Episodic Memory.') - add_management_args(parser) - add_experiment_args(parser) - add_rehearsal_args(parser) - # remove minibatch_size from parser - for i in range(len(parser._actions)): - if parser._actions[i].dest == 'minibatch_size': - del parser._actions[i] - break - - parser.add_argument('--gamma', type=float, default=None, - help='Margin parameter for GEM.') - return parser +from utils.args import add_rehearsal_args, ArgumentParser +from utils.buffer import Buffer, fill_buffer def store_grad(params, grads, grad_dims): @@ -97,10 +89,19 @@ class Gem(ContinualModel): NAME = 'gem' COMPATIBILITY = ['class-il', 'domain-il', 'task-il'] + @staticmethod + def get_parser() -> ArgumentParser: + parser = ArgumentParser(description='Continual learning via Gradient Episodic Memory.') + add_rehearsal_args(parser) + + parser.add_argument('--gamma', type=float, default=0.5, + help='Margin parameter for GEM.') + return parser + def __init__(self, backbone, loss, args, transform): + assert quadprog is not None, 'GEM requires quadprog (linux only)' super(Gem, self).__init__(backbone, loss, args, transform) - self.current_task = 0 - self.buffer = Buffer(self.args.buffer_size, self.device) + self.buffer = Buffer(self.args.buffer_size) # Allocate temporary synaptic memory self.grad_dims = [] @@ -111,27 +112,16 @@ def __init__(self, backbone, loss, args, transform): self.grads_da = torch.zeros(np.sum(self.grad_dims)).to(self.device) def end_task(self, dataset): - self.current_task += 1 self.grads_cs.append(torch.zeros( np.sum(self.grad_dims)).to(self.device)) - # add data to the buffer - samples_per_task = self.args.buffer_size // dataset.N_TASKS - - loader = dataset.train_loader - cur_y, cur_x = next(iter(loader))[1:] - self.buffer.add_data( - examples=cur_x.to(self.device), - labels=cur_y.to(self.device), - task_labels=torch.ones(samples_per_task, - dtype=torch.long).to(self.device) * (self.current_task - 1) - ) + fill_buffer(self.buffer, dataset, self.current_task, required_attributes=['examples', 'labels', 'task_labels']) - def observe(self, inputs, labels, not_aug_inputs): + def observe(self, inputs, labels, not_aug_inputs, epoch=None): if not self.buffer.is_empty(): buf_inputs, buf_labels, buf_task_labels = self.buffer.get_data( - self.args.buffer_size, transform=self.transform) + self.args.buffer_size, transform=self.transform, device=self.device) for tt in buf_task_labels.unique(): # compute gradient on the memory buffer diff --git a/models/gss.py b/models/gss.py index d65457bc..75ed873d 100644 --- a/models/gss.py +++ b/models/gss.py @@ -6,27 +6,24 @@ import torch from models.utils.continual_model import ContinualModel -from utils.args import add_management_args, add_experiment_args, add_rehearsal_args, ArgumentParser +from utils.args import add_rehearsal_args, ArgumentParser from utils.gss_buffer import Buffer as Buffer -def get_parser() -> ArgumentParser: - parser = ArgumentParser(description='Gradient based sample selection' - 'for online continual learning') - add_management_args(parser) - add_experiment_args(parser) - add_rehearsal_args(parser) - parser.add_argument('--batch_num', type=int, required=True, - help='Number of batches extracted from the buffer.') - parser.add_argument('--gss_minibatch_size', type=int, default=None, - help='The batch size of the gradient comparison.') - return parser - - class Gss(ContinualModel): NAME = 'gss' COMPATIBILITY = ['class-il', 'domain-il', 'task-il', 'general-continual'] + @staticmethod + def get_parser() -> ArgumentParser: + parser = ArgumentParser(description='Gradient based sample selection for online continual learning') + add_rehearsal_args(parser) + parser.add_argument('--batch_num', type=int, default=1, + help='Number of batches extracted from the buffer.') + parser.add_argument('--gss_minibatch_size', type=int, default=None, + help='The batch size of the gradient comparison.') + return parser + def __init__(self, backbone, loss, args, transform): super(Gss, self).__init__(backbone, loss, args, transform) self.buffer = Buffer(self.args.buffer_size, self.device, @@ -48,7 +45,7 @@ def get_grads(self, inputs, labels): grads = grads.unsqueeze(0) return grads - def observe(self, inputs, labels, not_aug_inputs): + def observe(self, inputs, labels, not_aug_inputs, epoch=None): real_batch_size = inputs.shape[0] self.buffer.drop_cache() diff --git a/models/hal.py b/models/hal.py index 0545b753..78cb3dad 100644 --- a/models/hal.py +++ b/models/hal.py @@ -11,32 +11,28 @@ from torch.optim import SGD from models.utils.continual_model import ContinualModel -from utils.args import add_management_args, add_experiment_args, add_rehearsal_args, ArgumentParser -from utils.buffer import Buffer - - -def get_parser() -> ArgumentParser: - parser = ArgumentParser(description='Continual learning via' - ' Experience Replay.') - add_management_args(parser) - add_experiment_args(parser) - add_rehearsal_args(parser) - - parser.add_argument('--hal_lambda', type=float, default=0.1) - parser.add_argument('--beta', type=float, default=0.5) - parser.add_argument('--gamma', type=float, default=0.1) - - return parser +from utils.args import add_rehearsal_args, ArgumentParser +from utils.ring_buffer import RingBuffer as Buffer class HAL(ContinualModel): NAME = 'hal' COMPATIBILITY = ['class-il', 'domain-il', 'task-il'] + @staticmethod + def get_parser() -> ArgumentParser: + parser = ArgumentParser(description='Hindsight Anchor Learning.') + add_rehearsal_args(parser) + + parser.add_argument('--hal_lambda', type=float, default=0.1) + parser.add_argument('--beta', type=float, default=0.5) + parser.add_argument('--gamma', type=float, default=0.1) + return parser + def __init__(self, backbone, loss, args, transform): - super(HAL, self).__init__(backbone, loss, args, transform) + super().__init__(backbone, loss, args, transform) self.task_number = 0 - self.buffer = Buffer(self.args.buffer_size, self.device, get_dataset(args).N_TASKS, mode='ring') + self.buffer = Buffer(self.args.buffer_size, n_tasks=get_dataset(args).N_TASKS) self.hal_lambda = args.hal_lambda self.beta = args.beta self.gamma = args.gamma @@ -64,7 +60,8 @@ def get_anchors(self, dataset): # fine tune on memory buffer for _ in range(self.finetuning_epochs): - inputs, labels = self.buffer.get_data(self.args.batch_size, transform=self.transform) + inputs, labels = self.buffer.get_data(self.args.batch_size, + transform=self.transform, device=self.device) self.spare_opt.zero_grad() out = self.spare_model(inputs) loss = self.loss(out, labels) @@ -111,7 +108,7 @@ def get_anchors(self, dataset): self.spare_model.zero_grad() - def observe(self, inputs, labels, not_aug_inputs): + def observe(self, inputs, labels, not_aug_inputs, epoch=None): real_batch_size = inputs.shape[0] if not hasattr(self, 'input_shape'): self.input_shape = inputs.shape[1:] @@ -125,7 +122,7 @@ def observe(self, inputs, labels, not_aug_inputs): if not self.buffer.is_empty(): buf_inputs, buf_labels = self.buffer.get_data( - self.args.minibatch_size, transform=self.transform) + self.args.minibatch_size, transform=self.transform, device=self.device) inputs = torch.cat((inputs, buf_inputs)) labels = torch.cat((labels, buf_labels)) diff --git a/models/icarl.py b/models/icarl.py index b0838466..2e29a05e 100644 --- a/models/icarl.py +++ b/models/icarl.py @@ -10,117 +10,31 @@ from datasets import get_dataset from models.utils.continual_model import ContinualModel -from utils.args import add_management_args, add_experiment_args, add_rehearsal_args, ArgumentParser +from utils.args import add_rehearsal_args, ArgumentParser from utils.batch_norm import bn_track_stats -from utils.buffer import Buffer, icarl_replay - - -def get_parser() -> ArgumentParser: - parser = ArgumentParser(description='Continual Learning via iCaRL.') - - add_management_args(parser) - add_experiment_args(parser) - add_rehearsal_args(parser) - - return parser - - -def fill_buffer(self, mem_buffer: Buffer, dataset, t_idx: int) -> None: - """ - Adds examples from the current task to the memory buffer - by means of the herding strategy. - :param mem_buffer: the memory buffer - :param dataset: the dataset from which take the examples - :param t_idx: the task index - """ - - mode = self.net.training - self.net.eval() - samples_per_class = mem_buffer.buffer_size // len(self.classes_so_far) - - if t_idx > 0: - # 1) First, subsample prior classes - buf_x, buf_y, buf_l = self.buffer.get_all_data() - - mem_buffer.empty() - for _y in buf_y.unique(): - idx = (buf_y == _y) - _y_x, _y_y, _y_l = buf_x[idx], buf_y[idx], buf_l[idx] - mem_buffer.add_data( - examples=_y_x[:samples_per_class], - labels=_y_y[:samples_per_class], - logits=_y_l[:samples_per_class] - ) - - # 2) Then, fill with current tasks - loader = dataset.train_loader - norm_trans = dataset.get_normalization_transform() - if norm_trans is None: - def norm_trans(x): return x - classes_start, classes_end = t_idx * dataset.N_CLASSES_PER_TASK, (t_idx + 1) * dataset.N_CLASSES_PER_TASK - - # 2.1 Extract all features - a_x, a_y, a_f, a_l = [], [], [], [] - for x, y, not_norm_x in loader: - mask = (y >= classes_start) & (y < classes_end) - x, y, not_norm_x = x[mask], y[mask], not_norm_x[mask] - if not x.size(0): - continue - x, y, not_norm_x = (a.to(self.device) for a in (x, y, not_norm_x)) - a_x.append(not_norm_x.to('cpu')) - a_y.append(y.to('cpu')) - feats = self.net(norm_trans(not_norm_x), returnt='features') - outs = self.net.classifier(feats) - a_f.append(feats.cpu()) - a_l.append(torch.sigmoid(outs).cpu()) - a_x, a_y, a_f, a_l = torch.cat(a_x), torch.cat(a_y), torch.cat(a_f), torch.cat(a_l) - - # 2.2 Compute class means - for _y in a_y.unique(): - idx = (a_y == _y) - _x, _y, _l = a_x[idx], a_y[idx], a_l[idx] - feats = a_f[idx] - mean_feat = feats.mean(0, keepdim=True) - - running_sum = torch.zeros_like(mean_feat) - i = 0 - while i < samples_per_class and i < feats.shape[0]: - cost = (mean_feat - (feats + running_sum) / (i + 1)).norm(2, 1) - - idx_min = cost.argmin().item() - - mem_buffer.add_data( - examples=_x[idx_min:idx_min + 1].to(self.device), - labels=_y[idx_min:idx_min + 1].to(self.device), - logits=_l[idx_min:idx_min + 1].to(self.device) - ) - - running_sum += feats[idx_min:idx_min + 1] - feats[idx_min] = feats[idx_min] + 1e6 - i += 1 - - assert len(mem_buffer.examples) <= mem_buffer.buffer_size - assert mem_buffer.num_seen_examples <= mem_buffer.buffer_size - - self.net.train(mode) +from utils.buffer import Buffer, fill_buffer, icarl_replay class ICarl(ContinualModel): NAME = 'icarl' COMPATIBILITY = ['class-il', 'task-il'] + @staticmethod + def get_parser() -> ArgumentParser: + parser = ArgumentParser(description='Continual Learning via iCaRL.') + add_rehearsal_args(parser) + return parser + def __init__(self, backbone, loss, args, transform): - super(ICarl, self).__init__(backbone, loss, args, transform) + super().__init__(backbone, loss, args, transform) self.dataset = get_dataset(args) # Instantiate buffers - self.buffer = Buffer(self.args.buffer_size, self.device) - self.eye = torch.eye(self.dataset.N_CLASSES_PER_TASK * - self.dataset.N_TASKS).to(self.device) + self.buffer = Buffer(self.args.buffer_size) + self.eye = torch.eye(self.num_classes).to(self.device) self.class_means = None self.old_net = None - self.task = 0 def forward(self, x): if self.class_means is None: @@ -135,7 +49,7 @@ def forward(self, x): pred = (self.class_means.unsqueeze(0) - feats).pow(2).sum(2) return -pred - def observe(self, inputs, labels, not_aug_inputs, logits=None): + def observe(self, inputs, labels, not_aug_inputs, logits=None, epoch=None): if not hasattr(self, 'classes_so_far'): self.register_buffer('classes_so_far', labels.unique().to('cpu')) @@ -144,11 +58,11 @@ def observe(self, inputs, labels, not_aug_inputs, logits=None): self.classes_so_far, labels.to('cpu'))).unique()) self.class_means = None - if self.task > 0: + if self.current_task > 0: with torch.no_grad(): logits = torch.sigmoid(self.old_net(inputs)) self.opt.zero_grad() - loss = self.get_loss(inputs, labels, self.task, logits) + loss = self.get_loss(inputs, labels, self.current_task, logits) loss.backward() self.opt.step() @@ -163,24 +77,26 @@ def get_loss(self, inputs: torch.Tensor, labels: torch.Tensor, task_idx: int, logits: torch.Tensor) -> torch.Tensor: """ Computes the loss tensor. - :param inputs: the images to be fed to the network - :param labels: the ground-truth labels - :param task_idx: the task index - :return: the differentiable loss value - """ - pc = task_idx * self.dataset.N_CLASSES_PER_TASK - ac = (task_idx + 1) * self.dataset.N_CLASSES_PER_TASK + Args: + inputs: the images to be fed to the network + labels: the ground-truth labels + task_idx: the task index + logits: the logits of the old network + + Returns: + the differentiable loss value + """ - outputs = self.net(inputs)[:, :ac] + outputs = self.net(inputs)[:, :self.n_seen_classes] if task_idx == 0: # Compute loss on the current task - targets = self.eye[labels][:, :ac] + targets = self.eye[labels][:, :self.n_seen_classes] loss = F.binary_cross_entropy_with_logits(outputs, targets) assert loss >= 0 else: - targets = self.eye[labels][:, pc:ac] - comb_targets = torch.cat((logits[:, :pc], targets), dim=1) + targets = self.eye[labels][:, self.n_past_classes:self.n_seen_classes] + comb_targets = torch.cat((logits[:, :self.n_past_classes], targets), dim=1) loss = F.binary_cross_entropy_with_logits(outputs, comb_targets) assert loss >= 0 @@ -193,10 +109,10 @@ def end_task(self, dataset) -> None: self.old_net = deepcopy(self.net.eval()) self.net.train() with torch.no_grad(): - fill_buffer(self, self.buffer, dataset, self.task) - self.task += 1 + fill_buffer(self.buffer, dataset, self.current_task, net=self.net, use_herding=True) self.class_means = None + @torch.no_grad() def compute_class_means(self) -> None: """ Computes a vector representing mean features for each class. @@ -204,7 +120,8 @@ def compute_class_means(self) -> None: # This function caches class means transform = self.dataset.get_normalization_transform() class_means = [] - examples, labels, _ = self.buffer.get_all_data(transform) + buf_data = self.buffer.get_all_data(transform, device=self.device) + examples, labels = buf_data[0], buf_data[1] for _y in self.classes_so_far: x_buf = torch.stack( [examples[i] diff --git a/models/icarl_lider.py b/models/icarl_lider.py new file mode 100644 index 00000000..b931e6cb --- /dev/null +++ b/models/icarl_lider.py @@ -0,0 +1,171 @@ +import torch +import torch.nn.functional as F +from copy import deepcopy +from typing import List, Tuple +from datasets import get_dataset +from utils.buffer import Buffer, fill_buffer, icarl_replay +from utils.args import * +from utils.distributed import make_dp +from models.utils.lider_model import LiderOptimizer, add_lipschitz_args +from utils.batch_norm import bn_track_stats + + +class ICarlLider(LiderOptimizer): + NAME = 'icarl_lider' + COMPATIBILITY = ['class-il', 'task-il'] + + @staticmethod + def get_parser() -> ArgumentParser: + parser = ArgumentParser(description='Continual Learning via iCaRL.' + 'Treated with LiDER!') + add_rehearsal_args(parser) + add_lipschitz_args(parser) + return parser + + def __init__(self, backbone, loss, args, transform): + super().__init__(backbone, loss, args, transform) + self.dataset = get_dataset(args) + + # Instantiate buffers + self.buffer = Buffer(self.args.buffer_size) + self.eye = torch.eye(self.num_classes).to(self.device) + + self.class_means = None + self.old_net = None + + def to(self, device): + self.eye = self.eye.to(device) + return super().to(device) + + def forward(self, x): + if self.class_means is None: + with torch.no_grad(): + self.compute_class_means() + self.class_means = self.class_means.squeeze() + + feats = self.net(x, returnt='features') + feats = feats.view(feats.size(0), -1) + feats = feats.unsqueeze(1) + + pred = (self.class_means.unsqueeze(0) - feats).pow(2).sum(2) + return -pred + + def observe(self, inputs: torch.Tensor, labels: torch.Tensor, not_aug_inputs: torch.Tensor, logits=None, epoch=None): + + if not hasattr(self, 'classes_so_far'): + self.register_buffer('classes_so_far', labels.unique().to('cpu')) + else: + self.register_buffer('classes_so_far', torch.cat(( + self.classes_so_far, labels.to('cpu'))).unique()) + + self.class_means = None + if self.current_task > 0: + with torch.no_grad(): + logits = torch.sigmoid(self.old_net(inputs)) + self.opt.zero_grad() + loss, output_features = self.get_loss(inputs, labels, self.current_task, logits) + + # Lipschitz losses + if not self.buffer.is_empty(): + lip_inputs = [inputs] + output_features + + if self.args.alpha_lip_lambda > 0: + loss_lip_minimize = self.args.alpha_lip_lambda * self.minimization_lip_loss(lip_inputs) + loss += loss_lip_minimize + + if self.args.beta_lip_lambda > 0: + loss_lip_budget = self.args.beta_lip_lambda * self.dynamic_budget_lip_loss(lip_inputs) + loss += loss_lip_budget + + loss.backward() + + self.opt.step() + + return loss.item() + + @staticmethod + def binary_cross_entropy(pred, y): + return -(pred.log() * y + (1 - y) * (1 - pred).log()).mean() + + def get_loss(self, inputs: torch.Tensor, labels: torch.Tensor, + task_idx: int, logits: torch.Tensor) -> Tuple[torch.Tensor, List[torch.Tensor]]: + """ + Computes the loss tensor. + + Args: + inputs: the images to be fed to the network + labels: the ground-truth labels + task_idx: the task index + logits: the logits of the old network + + Returns: + torch.Tensor: the loss tensor + List[torch.Tensor]: the output features + """ + + outputs, output_features = self.net(inputs, returnt='full') + outputs = outputs[:, :self.n_seen_classes] + + if task_idx == 0: + # Compute loss on the current task + targets = self.eye[labels][:, :self.n_seen_classes] + loss = F.binary_cross_entropy_with_logits(outputs, targets) + assert loss >= 0 + else: + targets = self.eye[labels][:, self.n_past_classes:self.n_seen_classes] + comb_targets = torch.cat((logits[:, :self.n_past_classes], targets), dim=1) + loss = F.binary_cross_entropy_with_logits(outputs, comb_targets) + assert loss >= 0 + + return loss, output_features + + def begin_task(self, dataset): + icarl_replay(self, dataset) + if self.current_task == 0: + self.net.set_return_prerelu(True) + + self.init_net(dataset) + + def end_task(self, dataset) -> None: + self.old_net = get_dataset(self.args).get_backbone().to(self.device) + if self.args.distributed == 'dp': + self.old_net = make_dp(self.old_net) + _, unexpected = self.old_net.load_state_dict(deepcopy(self.net.state_dict()), strict=False) + assert len([k for k in unexpected if 'lip_coeffs' not in k]) == 0, f"Unexpected keys in pretrained model: {unexpected}" + self.old_net.eval() + self.old_net.set_return_prerelu(True) + + self.net.train() + with torch.no_grad(): + fill_buffer(self.buffer, dataset, self.current_task, net=self.net, use_herding=True) + self.class_means = None + + @torch.no_grad() + def compute_class_means(self) -> None: + """ + Computes a vector representing mean features for each class. + """ + # This function caches class means + transform = self.dataset.get_normalization_transform() + class_means = [] + buf_data = self.buffer.get_all_data(transform, device=self.device) + examples, labels = buf_data[0], buf_data[1] + for _y in self.classes_so_far: + x_buf = torch.stack( + [examples[i] + for i in range(0, len(examples)) + if labels[i].cpu() == _y] + ).to(self.device) + with bn_track_stats(self, False): + allt = None + while len(x_buf): + batch = x_buf[:self.args.batch_size] + x_buf = x_buf[self.args.batch_size:] + feats = self.net(batch, returnt='features').mean(0) + if allt is None: + allt = feats + else: + allt += feats + allt /= 2 + class_means.append(allt.flatten()) + self.class_means = torch.stack(class_means) diff --git a/models/joint_gcl.py b/models/joint_gcl.py index 41f81766..50a3d6c3 100644 --- a/models/joint_gcl.py +++ b/models/joint_gcl.py @@ -9,33 +9,30 @@ from torch.optim import SGD from models.utils.continual_model import ContinualModel -from utils.args import add_management_args, add_experiment_args, ArgumentParser +from utils.args import ArgumentParser from utils.status import progress_bar -def get_parser() -> ArgumentParser: - parser = ArgumentParser(description='Joint training: a strong, simple baseline.') - add_management_args(parser) - add_experiment_args(parser) - return parser - - class JointGCL(ContinualModel): NAME = 'joint_gcl' COMPATIBILITY = ['general-continual'] + @staticmethod + def get_parser() -> ArgumentParser: + parser = ArgumentParser(description='Joint training: a strong, simple baseline.') + return parser + def __init__(self, backbone, loss, args, transform): super(JointGCL, self).__init__(backbone, loss, args, transform) self.old_data = [] self.old_labels = [] - self.current_task = 0 def end_task(self, dataset): # reinit network self.net = dataset.get_backbone() self.net.to(self.device) self.net.train() - self.opt = SGD(self.net.parameters(), lr=self.args.lr) + self.opt = self.get_optimizer() # gather data all_data = torch.cat(self.old_data) @@ -56,7 +53,7 @@ def end_task(self, dataset): self.opt.step() progress_bar(i, math.ceil(len(all_data) / self.args.batch_size), e, 'J', loss.item()) - def observe(self, inputs, labels, not_aug_inputs): + def observe(self, inputs, labels, not_aug_inputs, epoch=None): self.old_data.append(inputs.data) self.old_labels.append(labels.data) return 0 diff --git a/models/l2p.py b/models/l2p.py new file mode 100644 index 00000000..026976b2 --- /dev/null +++ b/models/l2p.py @@ -0,0 +1,109 @@ +""" +L2P: Learning to Prompt for Continual Learning + +Note: + L2P USES A CUSTOM BACKBONE: `vit_base_patch16_224`. + The backbone is a ViT-B/16 pretrained on Imagenet 21k and finetuned on ImageNet 1k. +""" + +import torch + +from models.utils.continual_model import ContinualModel +from utils.args import ArgumentParser +from timm import create_model # noqa +from models.l2p_utils.l2p_model import L2PModel + + +class L2P(ContinualModel): + NAME = 'l2p' + COMPATIBILITY = ['class-il', 'domain-il', 'task-il', 'general-continual'] + + @staticmethod + def get_parser() -> ArgumentParser: + parser = ArgumentParser(description='Learning to Prompt (L2P)') + # Prompt parameters + parser.add_argument('--prompt_pool', default=True, type=bool,) + parser.add_argument('--pool_size_l2p', default=10, type=int, help='number of prompts (M in paper)') + parser.add_argument('--length', default=5, type=int, help='length of prompt (L_p in paper)') + parser.add_argument('--top_k', default=5, type=int, help='top k prompts to use (N in paper)') + parser.add_argument('--prompt_key', default=True, type=bool, help='Use learnable prompt key') + parser.add_argument('--prompt_key_init', default='uniform', type=str, help='initialization type for key\'s prompts') + parser.add_argument('--use_prompt_mask', default=False, type=bool) + parser.add_argument('--batchwise_prompt', default=True, type=bool) + parser.add_argument('--embedding_key', default='cls', type=str) + parser.add_argument('--predefined_key', default='', type=str) + parser.add_argument('--pull_constraint', default=True) + parser.add_argument('--pull_constraint_coeff', default=0.1, type=float) + + parser.add_argument('--global_pool', default='token', choices=['token', 'avg'], type=str, help='type of global pooling for final sequence') + parser.add_argument('--head_type', default='prompt', choices=['token', 'gap', 'prompt', 'token+prompt'], type=str, help='input type of classification head') + parser.add_argument('--freeze', default=['blocks', 'patch_embed', 'cls_token', 'norm', 'pos_embed'], nargs='*', type=list, help='freeze part in backbone model') + + # Learning rate schedule parameters + parser.add_argument('--sched', default='constant', type=str, metavar='SCHEDULER', help='LR scheduler (default: "constant"') + parser.add_argument('--lr-noise', type=float, nargs='+', default=None, metavar='pct, pct', help='learning rate noise on/off epoch percentages') + parser.add_argument('--lr-noise-pct', type=float, default=0.67, metavar='PERCENT', help='learning rate noise limit percent (default: 0.67)') + parser.add_argument('--lr-noise-std', type=float, default=1.0, metavar='STDDEV', help='learning rate noise std-dev (default: 1.0)') + parser.add_argument('--warmup-lr', type=float, default=1e-6, metavar='LR', help='warmup learning rate (default: 1e-6)') + parser.add_argument('--min-lr', type=float, default=1e-5, metavar='LR', help='lower lr bound for cyclic schedulers that hit 0 (1e-5)') + parser.add_argument('--decay-epochs', type=float, default=30, metavar='N', help='epoch interval to decay LR') + parser.add_argument('--warmup-epochs', type=int, default=5, metavar='N', help='epochs to warmup LR, if scheduler supports') + parser.add_argument('--cooldown-epochs', type=int, default=10, metavar='N', help='epochs to cooldown LR at min_lr, after cyclic schedule ends') + parser.add_argument('--patience-epochs', type=int, default=10, metavar='N', help='patience epochs for Plateau LR scheduler (default: 10') + parser.add_argument('--decay-rate', '--dr', type=float, default=0.1, metavar='RATE', help='LR decay rate (default: 0.1)') + parser.add_argument('--unscale_lr', type=bool, default=True, help='scaling lr by batch size (default: True)') + + parser.add_argument('--clip_grad', type=float, default=1, help='Clip gradient norm') + return parser + + def __init__(self, backbone, loss, args, transform): + """ + L2P re-defines the backbone model to include the prompt parameters. This is done *before* calling the super constructor, so that the backbone is already initialized when the super constructor is called. + """ + del backbone + print("-" * 20) + print(f"WARNING: L2P USES A CUSTOM BACKBONE: `vit_base_patch16_224`.") + print("Pretrained on Imagenet 21k and finetuned on ImageNet 1k.") + print("-" * 20) + + args.lr = args.lr * args.batch_size / 256.0 + backbone = L2PModel(args) + + super().__init__(backbone, loss, args, transform) + + def begin_task(self, dataset): + self.net.original_model.eval() + + if hasattr(self, 'opt'): + self.opt.zero_grad(set_to_none=True) + del self.opt + self.opt = self.get_optimizer() + + def observe(self, inputs, labels, not_aug_inputs, epoch=None): + outputs = self.net(inputs, return_outputs=True) + logits = outputs['logits'] + + # here is the trick to mask out classes of non-current tasks + offset_1, offset_2 = self._compute_offsets(self.current_task) + logits[:, :offset_1] = -float('inf') + + loss = self.loss(logits[:, :offset_2], labels) + if self.args.pull_constraint and 'reduce_sim' in outputs: + loss = loss - self.args.pull_constraint_coeff * outputs['reduce_sim'] + + self.opt.zero_grad() + loss.backward() + torch.nn.utils.clip_grad_norm_(self.get_parameters(), self.args.clip_grad) + self.opt.step() + + return loss.item() + + def get_parameters(self): + return [p for n, p in self.net.model.named_parameters() if 'prompt' in n or 'head' in n] + + def forward(self, x): + if self.current_task > 0: + _, offset_2 = self._compute_offsets(self.current_task - 1) + else: + offset_2 = self.N_CLASSES + return self.net(x)[:, :offset_2] diff --git a/models/l2p_utils/__init__.py b/models/l2p_utils/__init__.py new file mode 100644 index 00000000..19adc462 --- /dev/null +++ b/models/l2p_utils/__init__.py @@ -0,0 +1,3 @@ +""" +This package contains utility functions for the L2P model. Implements a custom version of ViT to add prompt parameters. +""" diff --git a/models/l2p_utils/l2p_model.py b/models/l2p_utils/l2p_model.py new file mode 100644 index 00000000..ec50f41a --- /dev/null +++ b/models/l2p_utils/l2p_model.py @@ -0,0 +1,62 @@ +import torch +import torch.nn as nn +from datasets import get_dataset +from models.l2p_utils.vit_prompt import vit_base_patch16_224_l2p + + +class L2PModel(nn.Module): + def __init__(self, args): + super().__init__() + dataset = get_dataset(args) + n_classes = dataset.N_CLASSES + + self.original_model = vit_base_patch16_224_l2p( + pretrained=True, + num_classes=n_classes, + drop_rate=0.0, + drop_path_rate=0.0, + ) + self.original_model.eval() + + self.model = vit_base_patch16_224_l2p( + pretrained=True, + num_classes=n_classes, + prompt_length=args.length, + embedding_key=args.embedding_key, + prompt_init=args.prompt_key_init, + prompt_pool=args.prompt_pool, + prompt_key=args.prompt_key, + pool_size=args.pool_size_l2p, + top_k=args.top_k, + batchwise_prompt=args.batchwise_prompt, + prompt_key_init=args.prompt_key_init, + head_type=args.head_type, + use_prompt_mask=args.use_prompt_mask, + ) + + if args.freeze: + # all parameters are frozen for original vit model + for p in self.original_model.parameters(): + p.requires_grad = False + + # freeze args.freeze[blocks, patch_embed, cls_token] parameters + for n, p in self.model.named_parameters(): + if n.startswith(tuple(args.freeze)): + p.requires_grad = False + + def forward(self, x, return_outputs=False): + with torch.no_grad(): + if self.original_model is not None: + original_model_output = self.original_model(x) + cls_features = original_model_output['pre_logits'] + else: + cls_features = None + + outputs = self.model(x, task_id=-1, cls_features=cls_features, train=self.training) + # self.prompt_idx = outputs['prompt_idx'] + # print(self.prompt_idx) + logits = outputs['logits'] + if return_outputs: + return outputs + else: + return logits diff --git a/models/l2p_utils/prompt.py b/models/l2p_utils/prompt.py new file mode 100644 index 00000000..6d2cbfa0 --- /dev/null +++ b/models/l2p_utils/prompt.py @@ -0,0 +1,123 @@ +import torch +import torch.nn as nn + + +class Prompt(nn.Module): + def __init__(self, length=5, embed_dim=768, embedding_key='mean', prompt_init='uniform', prompt_pool=False, + prompt_key=False, pool_size=None, top_k=None, batchwise_prompt=False, prompt_key_init='uniform', + prompt_shuffle=False): + super().__init__() + + self.length = length + self.embed_dim = embed_dim + self.prompt_pool = prompt_pool + self.embedding_key = embedding_key + self.prompt_init = prompt_init + self.prompt_key = prompt_key + self.pool_size = pool_size + self.top_k = top_k + self.batchwise_prompt = batchwise_prompt + self.prompt_shuffle = prompt_shuffle + + if self.prompt_pool: + prompt_pool_shape = (pool_size, length, embed_dim) + if prompt_init == 'zero': + self.prompt = nn.Parameter(torch.zeros(prompt_pool_shape)) + elif prompt_init == 'uniform': + self.prompt = nn.Parameter(torch.randn(prompt_pool_shape)) + nn.init.uniform_(self.prompt, -1, 1) + + # if using learnable prompt keys + if prompt_key: + key_shape = (pool_size, embed_dim) + if prompt_key_init == 'zero': + self.prompt_key = nn.Parameter(torch.zeros(key_shape)) + elif prompt_key_init == 'uniform': + self.prompt_key = nn.Parameter(torch.randn(key_shape)) + nn.init.uniform_(self.prompt_key, -1, 1) + else: + # else use mean of prompt as key + # only compatible with prompt, not prefix + prompt_mean = torch.mean(self.prompt, dim=1) + self.prompt_key = prompt_mean + + def l2_normalize(self, x, dim=None, epsilon=1e-12): + """Normalizes a given vector or matrix.""" + square_sum = torch.sum(x ** 2, dim=dim, keepdim=True) + x_inv_norm = torch.rsqrt(torch.maximum(square_sum, torch.tensor(epsilon, device=x.device))) + return x * x_inv_norm + + def forward(self, x_embed, prompt_mask=None, cls_features=None): + out = dict() + if self.prompt_pool: + if self.embedding_key == 'mean': + x_embed_mean = torch.mean(x_embed, dim=1) + elif self.embedding_key == 'max': + x_embed_mean = torch.max(x_embed, dim=1)[0] + elif self.embedding_key == 'mean_max': + x_embed_mean = torch.max(x_embed, dim=1)[0] + 2 * torch.mean(x_embed, dim=1) + elif self.embedding_key == 'cls': + if cls_features is None: + x_embed_mean = torch.max(x_embed, dim=1)[0] # B, C + else: + x_embed_mean = cls_features + else: + raise NotImplementedError("Not supported way of calculating embedding keys!") + + prompt_norm = self.l2_normalize(self.prompt_key, dim=1) # Pool_size, C + x_embed_norm = self.l2_normalize(x_embed_mean, dim=1) # B, C + + similarity = torch.matmul(x_embed_norm, prompt_norm.t()) # B, Pool_size + + if prompt_mask is None: + _, idx = torch.topk(similarity, k=self.top_k, dim=1) # B, top_k + if self.batchwise_prompt: + prompt_id, id_counts = torch.unique(idx, return_counts=True, sorted=True) + # In jnp.unique, when the 'size' is specified and there are fewer than the indicated number of elements, + # the remaining elements will be filled with 'fill_value', the default is the minimum value along the specified dimension. + # Unless dimension is specified, this will be flattend if it is not already 1D. + if prompt_id.shape[0] < self.pool_size: + prompt_id = torch.cat([prompt_id, torch.full((self.pool_size - prompt_id.shape[0],), torch.min(idx.flatten()), device=prompt_id.device)]) + id_counts = torch.cat([id_counts, torch.full((self.pool_size - id_counts.shape[0],), 0, device=id_counts.device)]) + _, major_idx = torch.topk(id_counts, k=self.top_k) # top_k + major_prompt_id = prompt_id[major_idx] # top_k + # expand to batch + idx = major_prompt_id.expand(x_embed.shape[0], -1) # B, top_k + else: + idx = prompt_mask # B, top_k + + if self.prompt_shuffle: + idx = idx[:, torch.randperm(idx.shape[1])] + + batched_prompt_raw = self.prompt[idx] # B, top_k, length, C + batch_size, top_k, length, c = batched_prompt_raw.shape + batched_prompt = batched_prompt_raw.reshape(batch_size, top_k * length, c) # B, top_k * length, C + + out['prompt_idx'] = idx + + # Debugging, return sim as well + out['prompt_norm'] = prompt_norm + out['x_embed_norm'] = x_embed_norm + out['similarity'] = similarity + + # Put pull_constraint loss calculation inside + batched_key_norm = prompt_norm[idx] # B, top_k, C + out['selected_key'] = batched_key_norm + x_embed_norm = x_embed_norm.unsqueeze(1) # B, 1, C + sim = batched_key_norm * x_embed_norm # B, top_k, C + reduce_sim = torch.sum(sim) / x_embed.shape[0] # Scalar + + out['reduce_sim'] = reduce_sim + else: + if self.prompt_init == 'zero': + self.prompt = nn.Parameter(torch.zeros(self.length, self.embed_dim)) + elif self.prompt_init == 'uniform': + self.prompt = nn.Parameter(torch.randn(self.length, self.embed_dim)) + nn.init.uniform_(self.prompt) + batched_prompt = self.prompt.unsqueeze(0).expand(x_embed.shape[0], -1, -1) + + # The input with the prompt concatenated to the front. [B, prompt+token, C] + out['total_prompt_len'] = batched_prompt.shape[1] + out['prompted_embedding'] = torch.cat([batched_prompt, x_embed], dim=1) + + return out diff --git a/models/l2p_utils/vit_prompt.py b/models/l2p_utils/vit_prompt.py new file mode 100644 index 00000000..19328def --- /dev/null +++ b/models/l2p_utils/vit_prompt.py @@ -0,0 +1,608 @@ +""" Vision Transformer (ViT) in PyTorch + +A PyTorch implement of Vision Transformers as described in: + +'An Image Is Worth 16 x 16 Words: Transformers for Image Recognition at Scale' + - https://arxiv.org/abs/2010.11929 + +`How to train your ViT? Data, Augmentation, and Regularization in Vision Transformers` + - https://arxiv.org/abs/2106.10270 + +The official jax code is released and available at https://github.com/google-research/vision_transformer + +Acknowledgments: +* The paper authors for releasing code and weights, thanks! +* I fixed my class token impl based on Phil Wang's https://github.com/lucidrains/vit-pytorch ... check it out +for some einops/einsum fun +* Simple transformer style inspired by Andrej Karpathy's https://github.com/karpathy/minGPT +* Bert reference code checks against Huggingface Transformers and Tensorflow Bert + +Hacked together by / Copyright 2020, Ross Wightman +# ------------------------------------------ +# Modification: +# Added code for l2p implementation +# -- Jaeho Lee, dlwogh9344@khu.ac.kr +# ------------------------------------------ +""" +import math +import logging +from functools import partial +from collections import OrderedDict + +import torch +import torch.nn as nn +import torch.nn.functional as F +import torch.utils.checkpoint + +from timm.data import IMAGENET_INCEPTION_MEAN, IMAGENET_INCEPTION_STD +from timm.models.helpers import build_model_with_cfg, resolve_pretrained_cfg, named_apply, adapt_input_conv, checkpoint_seq +from timm.models.layers import PatchEmbed, Mlp, DropPath, trunc_normal_, lecun_normal_ + +from models.l2p_utils.prompt import Prompt + +_logger = logging.getLogger(__name__) + + +def _cfg(url='', **kwargs): + return { + 'url': url, + 'num_classes': 1000, 'input_size': (3, 224, 224), 'pool_size': None, + 'crop_pct': .9, 'interpolation': 'bicubic', 'fixed_input_size': True, + 'mean': IMAGENET_INCEPTION_MEAN, 'std': IMAGENET_INCEPTION_STD, + 'first_conv': 'patch_embed.proj', 'classifier': 'head', + **kwargs + } + + +class Attention(nn.Module): + def __init__(self, dim, num_heads=8, qkv_bias=False, attn_drop=0., proj_drop=0.): + super().__init__() + assert dim % num_heads == 0, 'dim should be divisible by num_heads' + self.num_heads = num_heads + head_dim = dim // num_heads + self.scale = head_dim ** -0.5 + + self.qkv = nn.Linear(dim, dim * 3, bias=qkv_bias) + self.attn_drop = nn.Dropout(attn_drop) + self.proj = nn.Linear(dim, dim) + self.proj_drop = nn.Dropout(proj_drop) + + def forward(self, x): + B, N, C = x.shape + qkv = self.qkv(x).reshape(B, N, 3, self.num_heads, C // self.num_heads).permute(2, 0, 3, 1, 4) + q, k, v = qkv.unbind(0) # make torchscript happy (cannot use tensor as tuple) + + attn = (q @ k.transpose(-2, -1)) * self.scale + attn = attn.softmax(dim=-1) + attn = self.attn_drop(attn) + + x = (attn @ v).transpose(1, 2).reshape(B, N, C) + x = self.proj(x) + x = self.proj_drop(x) + return x + + +class LayerScale(nn.Module): + def __init__(self, dim, init_values=1e-5, inplace=False): + super().__init__() + self.inplace = inplace + self.gamma = nn.Parameter(init_values * torch.ones(dim)) + + def forward(self, x): + return x.mul_(self.gamma) if self.inplace else x * self.gamma + + +class Block(nn.Module): + + def __init__( + self, dim, num_heads, mlp_ratio=4., qkv_bias=False, drop=0., attn_drop=0., init_values=None, + drop_path=0., act_layer=nn.GELU, norm_layer=nn.LayerNorm): + super().__init__() + self.norm1 = norm_layer(dim) + self.attn = Attention(dim, num_heads=num_heads, qkv_bias=qkv_bias, attn_drop=attn_drop, proj_drop=drop) + self.ls1 = LayerScale(dim, init_values=init_values) if init_values else nn.Identity() + # NOTE: drop path for stochastic depth, we shall see if this is better than dropout here + self.drop_path1 = DropPath(drop_path) if drop_path > 0. else nn.Identity() + + self.norm2 = norm_layer(dim) + self.mlp = Mlp(in_features=dim, hidden_features=int(dim * mlp_ratio), act_layer=act_layer, drop=drop) + self.ls2 = LayerScale(dim, init_values=init_values) if init_values else nn.Identity() + self.drop_path2 = DropPath(drop_path) if drop_path > 0. else nn.Identity() + + def forward(self, x): + x = x + self.drop_path1(self.ls1(self.attn(self.norm1(x)))) + x = x + self.drop_path2(self.ls2(self.mlp(self.norm2(x)))) + return x + + +class ResPostBlock(nn.Module): + + def __init__( + self, dim, num_heads, mlp_ratio=4., qkv_bias=False, drop=0., attn_drop=0., init_values=None, + drop_path=0., act_layer=nn.GELU, norm_layer=nn.LayerNorm): + super().__init__() + self.init_values = init_values + + self.attn = Attention(dim, num_heads=num_heads, qkv_bias=qkv_bias, attn_drop=attn_drop, proj_drop=drop) + self.norm1 = norm_layer(dim) + self.drop_path1 = DropPath(drop_path) if drop_path > 0. else nn.Identity() + + self.mlp = Mlp(in_features=dim, hidden_features=int(dim * mlp_ratio), act_layer=act_layer, drop=drop) + self.norm2 = norm_layer(dim) + self.drop_path2 = DropPath(drop_path) if drop_path > 0. else nn.Identity() + + self.init_weights() + + def init_weights(self): + # NOTE this init overrides that base model init with specific changes for the block type + if self.init_values is not None: + nn.init.constant_(self.norm1.weight, self.init_values) + nn.init.constant_(self.norm2.weight, self.init_values) + + def forward(self, x): + x = x + self.drop_path1(self.norm1(self.attn(x))) + x = x + self.drop_path2(self.norm2(self.mlp(x))) + return x + + +class ParallelBlock(nn.Module): + + def __init__( + self, dim, num_heads, num_parallel=2, mlp_ratio=4., qkv_bias=False, init_values=None, + drop=0., attn_drop=0., drop_path=0., act_layer=nn.GELU, norm_layer=nn.LayerNorm): + super().__init__() + self.num_parallel = num_parallel + self.attns = nn.ModuleList() + self.ffns = nn.ModuleList() + for _ in range(num_parallel): + self.attns.append(nn.Sequential(OrderedDict([ + ('norm', norm_layer(dim)), + ('attn', Attention(dim, num_heads=num_heads, qkv_bias=qkv_bias, attn_drop=attn_drop, proj_drop=drop)), + ('ls', LayerScale(dim, init_values=init_values) if init_values else nn.Identity()), + ('drop_path', DropPath(drop_path) if drop_path > 0. else nn.Identity()) + ]))) + self.ffns.append(nn.Sequential(OrderedDict([ + ('norm', norm_layer(dim)), + ('mlp', Mlp(dim, hidden_features=int(dim * mlp_ratio), act_layer=act_layer, drop=drop)), + ('ls', LayerScale(dim, init_values=init_values) if init_values else nn.Identity()), + ('drop_path', DropPath(drop_path) if drop_path > 0. else nn.Identity()) + ]))) + + def _forward_jit(self, x): + x = x + torch.stack([attn(x) for attn in self.attns]).sum(dim=0) + x = x + torch.stack([ffn(x) for ffn in self.ffns]).sum(dim=0) + return x + + @torch.jit.ignore + def _forward(self, x): + x = x + sum(attn(x) for attn in self.attns) + x = x + sum(ffn(x) for ffn in self.ffns) + return x + + def forward(self, x): + if torch.jit.is_scripting() or torch.jit.is_tracing(): + return self._forward_jit(x) + else: + return self._forward(x) + + +class VisionTransformer(nn.Module): + """ Vision Transformer + A PyTorch impl of : `An Image is Worth 16x16 Words: Transformers for Image Recognition at Scale` + - https://arxiv.org/abs/2010.11929 + """ + + def __init__( + self, img_size=224, patch_size=16, in_chans=3, num_classes=1000, global_pool='token', + embed_dim=768, depth=12, num_heads=12, mlp_ratio=4., qkv_bias=True, init_values=None, + class_token=True, no_embed_class=False, fc_norm=None, drop_rate=0., attn_drop_rate=0., drop_path_rate=0., + weight_init='', embed_layer=PatchEmbed, norm_layer=None, act_layer=None, block_fn=Block, + prompt_length=None, embedding_key='cls', prompt_init='uniform', prompt_pool=False, prompt_key=False, pool_size=None, + top_k=None, batchwise_prompt=False, prompt_key_init='uniform', head_type='token', use_prompt_mask=False, prompt_shuffle=False): + """ + Args: + img_size (int, tuple): input image size + patch_size (int, tuple): patch size + in_chans (int): number of input channels + num_classes (int): number of classes for classification head + global_pool (str): type of global pooling for final sequence (default: 'token') + embed_dim (int): embedding dimension + depth (int): depth of transformer + num_heads (int): number of attention heads + mlp_ratio (int): ratio of mlp hidden dim to embedding dim + qkv_bias (bool): enable bias for qkv if True + init_values: (float): layer-scale init values + class_token (bool): use class token + fc_norm (Optional[bool]): pre-fc norm after pool, set if global_pool == 'avg' if None (default: None) + drop_rate (float): dropout rate + attn_drop_rate (float): attention dropout rate + drop_path_rate (float): stochastic depth rate + weight_init (str): weight init scheme + embed_layer (nn.Module): patch embedding layer + norm_layer: (nn.Module): normalization layer + act_layer: (nn.Module): MLP activation layer + block_fn: (nn.Module): transformer block + prompt_pool (bool): use prompt pool or not + """ + super().__init__() + assert global_pool in ('', 'avg', 'token') + assert class_token or global_pool != 'token' + use_fc_norm = global_pool == 'avg' if fc_norm is None else fc_norm + norm_layer = norm_layer or partial(nn.LayerNorm, eps=1e-6) + act_layer = act_layer or nn.GELU + + self.img_size = img_size + self.num_classes = num_classes + self.global_pool = global_pool + self.num_features = self.embed_dim = embed_dim # num_features for consistency with other models + self.class_token = class_token + self.num_prefix_tokens = 1 if class_token else 0 + self.no_embed_class = no_embed_class + self.grad_checkpointing = False + + self.patch_embed = embed_layer( + img_size=img_size, patch_size=patch_size, in_chans=in_chans, embed_dim=embed_dim) + num_patches = self.patch_embed.num_patches + + self.cls_token = nn.Parameter(torch.zeros(1, 1, embed_dim)) if class_token else None + embed_len = num_patches if no_embed_class else num_patches + self.num_prefix_tokens + if prompt_length is not None and pool_size is not None and prompt_pool: + embed_len += prompt_length * top_k + self.pos_embed = nn.Parameter(torch.randn(1, embed_len, embed_dim) * .02) + self.pos_drop = nn.Dropout(p=drop_rate) + + self.prompt_pool = prompt_pool + self.head_type = head_type + self.use_prompt_mask = use_prompt_mask + self.prompt_shuffle = prompt_shuffle + + if prompt_length is not None and pool_size is not None and prompt_pool: + self.prompt = Prompt(length=prompt_length, embed_dim=embed_dim, embedding_key=embedding_key, prompt_init=prompt_init, + prompt_pool=prompt_pool, prompt_key=prompt_key, pool_size=pool_size, top_k=top_k, batchwise_prompt=batchwise_prompt, + prompt_key_init=prompt_key_init, prompt_shuffle=self.prompt_shuffle) + + dpr = [x.item() for x in torch.linspace(0, drop_path_rate, depth)] # stochastic depth decay rule + self.blocks = nn.Sequential(*[ + block_fn( + dim=embed_dim, num_heads=num_heads, mlp_ratio=mlp_ratio, qkv_bias=qkv_bias, init_values=init_values, + drop=drop_rate, attn_drop=attn_drop_rate, drop_path=dpr[i], norm_layer=norm_layer, act_layer=act_layer) + for i in range(depth)]) + self.norm = norm_layer(embed_dim) if not use_fc_norm else nn.Identity() + + # Classifier Head + self.fc_norm = norm_layer(embed_dim) if use_fc_norm else nn.Identity() + self.head = nn.Linear(self.embed_dim, num_classes) if num_classes > 0 else nn.Identity() + + if weight_init != 'skip': + self.init_weights(weight_init) + + def init_weights(self, mode=''): + assert mode in ('jax', 'jax_nlhb', 'moco', '') + head_bias = -math.log(self.num_classes) if 'nlhb' in mode else 0. + trunc_normal_(self.pos_embed, std=.02) + if self.cls_token is not None: + nn.init.normal_(self.cls_token, std=1e-6) + named_apply(get_init_weights_vit(mode, head_bias), self) + + def _init_weights(self, m): + # this fn left here for compat with downstream users + init_weights_vit_timm(m) + + @torch.jit.ignore() + def load_pretrained(self, checkpoint_path, prefix=''): + _load_weights(self, checkpoint_path, prefix) + + @torch.jit.ignore + def no_weight_decay(self): + return {'pos_embed', 'cls_token', 'dist_token'} + + @torch.jit.ignore + def group_matcher(self, coarse=False): + return dict( + stem=r'^cls_token|pos_embed|patch_embed', # stem and embed + blocks=[(r'^blocks\.(\d+)', None), (r'^norm', (99999,))] + ) + + @torch.jit.ignore + def set_grad_checkpointing(self, enable=True): + self.grad_checkpointing = enable + + @torch.jit.ignore + def get_classifier(self): + return self.head + + def reset_classifier(self, num_classes: int, global_pool=None): + self.num_classes = num_classes + if global_pool is not None: + assert global_pool in ('', 'avg', 'token') + self.global_pool = global_pool + self.head = nn.Linear(self.embed_dim, num_classes) if num_classes > 0 else nn.Identity() + + def forward_features(self, x, task_id=-1, cls_features=None, train=False): + x = self.patch_embed(x) + + if hasattr(self, 'prompt'): + if self.use_prompt_mask and train: + start = task_id * self.prompt.top_k + end = (task_id + 1) * self.prompt.top_k + single_prompt_mask = torch.arange(start, end).to(x.device) + prompt_mask = single_prompt_mask.unsqueeze(0).expand(x.shape[0], -1) + if end > self.prompt.pool_size: + prompt_mask = None + else: + prompt_mask = None + res = self.prompt(x, prompt_mask=prompt_mask, cls_features=cls_features) + self.total_prompt_len = res['total_prompt_len'] + x = res['prompted_embedding'] + else: + res = dict() + if self.cls_token is not None: + x = torch.cat((self.cls_token.expand(x.shape[0], -1, -1), x), dim=1) + + x = self.pos_drop(x + self.pos_embed) + + if self.grad_checkpointing and not torch.jit.is_scripting(): + x = checkpoint_seq(self.blocks, x) + else: + x = self.blocks(x) + + x = self.norm(x) + res['x'] = x + + return res + + def forward_head(self, res, pre_logits: bool = False): + x = res['x'] + if self.class_token and self.head_type == 'token': + x = x[:, 0] + elif self.head_type == 'gap' and self.global_pool == 'avg': + x = x.mean(dim=1) + elif self.head_type == 'prompt' and self.prompt_pool: + x = x[:, 1:(1 + self.total_prompt_len)] if self.class_token else x[:, 0:self.total_prompt_len] + x = x.mean(dim=1) + elif self.head_type == 'token+prompt' and self.prompt_pool and self.class_token: + x = x[:, 0:self.total_prompt_len + 1] + x = x.mean(dim=1) + else: + raise ValueError(f'Invalid classifier={self.classifier}') + + res['pre_logits'] = x + + x = self.fc_norm(x) + + res['logits'] = self.head(x) + + return res + + def forward(self, x, task_id=-1, cls_features=None, train=False): + res = self.forward_features(x, task_id=task_id, cls_features=cls_features, train=train) + res = self.forward_head(res) + return res + + +def init_weights_vit_timm(module: nn.Module, name: str = ''): + """ ViT weight initialization, original timm impl (for reproducibility) """ + if isinstance(module, nn.Linear): + trunc_normal_(module.weight, std=.02) + if module.bias is not None: + nn.init.zeros_(module.bias) + elif hasattr(module, 'init_weights'): + module.init_weights() + + +def init_weights_vit_jax(module: nn.Module, name: str = '', head_bias: float = 0.): + """ ViT weight initialization, matching JAX (Flax) impl """ + if isinstance(module, nn.Linear): + if name.startswith('head'): + nn.init.zeros_(module.weight) + nn.init.constant_(module.bias, head_bias) + else: + nn.init.xavier_uniform_(module.weight) + if module.bias is not None: + nn.init.normal_(module.bias, std=1e-6) if 'mlp' in name else nn.init.zeros_(module.bias) + elif isinstance(module, nn.Conv2d): + lecun_normal_(module.weight) + if module.bias is not None: + nn.init.zeros_(module.bias) + elif hasattr(module, 'init_weights'): + module.init_weights() + + +def init_weights_vit_moco(module: nn.Module, name: str = ''): + """ ViT weight initialization, matching moco-v3 impl minus fixed PatchEmbed """ + if isinstance(module, nn.Linear): + if 'qkv' in name: + # treat the weights of Q, K, V separately + val = math.sqrt(6. / float(module.weight.shape[0] // 3 + module.weight.shape[1])) + nn.init.uniform_(module.weight, -val, val) + else: + nn.init.xavier_uniform_(module.weight) + if module.bias is not None: + nn.init.zeros_(module.bias) + elif hasattr(module, 'init_weights'): + module.init_weights() + + +def get_init_weights_vit(mode='jax', head_bias: float = 0.): + if 'jax' in mode: + return partial(init_weights_vit_jax, head_bias=head_bias) + elif 'moco' in mode: + return init_weights_vit_moco + else: + return init_weights_vit_timm + + +@torch.no_grad() +def _load_weights(model: VisionTransformer, checkpoint_path: str, prefix: str = ''): + """ Load weights from .npz checkpoints for official Google Brain Flax implementation + """ + import numpy as np + + def _n2p(w, t=True): + if w.ndim == 4 and w.shape[0] == w.shape[1] == w.shape[2] == 1: + w = w.flatten() + if t: + if w.ndim == 4: + w = w.transpose([3, 2, 0, 1]) + elif w.ndim == 3: + w = w.transpose([2, 0, 1]) + elif w.ndim == 2: + w = w.transpose([1, 0]) + return torch.from_numpy(w) + + w = np.load(checkpoint_path) + if not prefix and 'opt/target/embedding/kernel' in w: + prefix = 'opt/target/' + + if hasattr(model.patch_embed, 'backbone'): + # hybrid + backbone = model.patch_embed.backbone + stem_only = not hasattr(backbone, 'stem') + stem = backbone if stem_only else backbone.stem + stem.conv.weight.copy_(adapt_input_conv(stem.conv.weight.shape[1], _n2p(w[f'{prefix}conv_root/kernel']))) + stem.norm.weight.copy_(_n2p(w[f'{prefix}gn_root/scale'])) + stem.norm.bias.copy_(_n2p(w[f'{prefix}gn_root/bias'])) + if not stem_only: + for i, stage in enumerate(backbone.stages): + for j, block in enumerate(stage.blocks): + bp = f'{prefix}block{i + 1}/unit{j + 1}/' + for r in range(3): + getattr(block, f'conv{r + 1}').weight.copy_(_n2p(w[f'{bp}conv{r + 1}/kernel'])) + getattr(block, f'norm{r + 1}').weight.copy_(_n2p(w[f'{bp}gn{r + 1}/scale'])) + getattr(block, f'norm{r + 1}').bias.copy_(_n2p(w[f'{bp}gn{r + 1}/bias'])) + if block.downsample is not None: + block.downsample.conv.weight.copy_(_n2p(w[f'{bp}conv_proj/kernel'])) + block.downsample.norm.weight.copy_(_n2p(w[f'{bp}gn_proj/scale'])) + block.downsample.norm.bias.copy_(_n2p(w[f'{bp}gn_proj/bias'])) + embed_conv_w = _n2p(w[f'{prefix}embedding/kernel']) + else: + embed_conv_w = adapt_input_conv( + model.patch_embed.proj.weight.shape[1], _n2p(w[f'{prefix}embedding/kernel'])) + model.patch_embed.proj.weight.copy_(embed_conv_w) + model.patch_embed.proj.bias.copy_(_n2p(w[f'{prefix}embedding/bias'])) + model.cls_token.copy_(_n2p(w[f'{prefix}cls'], t=False)) + pos_embed_w = _n2p(w[f'{prefix}Transformer/posembed_input/pos_embedding'], t=False) + if pos_embed_w.shape != model.pos_embed.shape: + pos_embed_w = resize_pos_embed( # resize pos embedding when different size from pretrained weights + pos_embed_w, + model.pos_embed, + getattr(model, 'num_prefix_tokens', 1), + model.patch_embed.grid_size + ) + model.pos_embed.copy_(pos_embed_w) + model.norm.weight.copy_(_n2p(w[f'{prefix}Transformer/encoder_norm/scale'])) + model.norm.bias.copy_(_n2p(w[f'{prefix}Transformer/encoder_norm/bias'])) + if isinstance(model.head, nn.Linear) and model.head.bias.shape[0] == w[f'{prefix}head/bias'].shape[-1]: + model.head.weight.copy_(_n2p(w[f'{prefix}head/kernel'])) + model.head.bias.copy_(_n2p(w[f'{prefix}head/bias'])) + # NOTE representation layer has been removed, not used in latest 21k/1k pretrained weights + # if isinstance(getattr(model.pre_logits, 'fc', None), nn.Linear) and f'{prefix}pre_logits/bias' in w: + # model.pre_logits.fc.weight.copy_(_n2p(w[f'{prefix}pre_logits/kernel'])) + # model.pre_logits.fc.bias.copy_(_n2p(w[f'{prefix}pre_logits/bias'])) + for i, block in enumerate(model.blocks.children()): + block_prefix = f'{prefix}Transformer/encoderblock_{i}/' + mha_prefix = block_prefix + 'MultiHeadDotProductAttention_1/' + block.norm1.weight.copy_(_n2p(w[f'{block_prefix}LayerNorm_0/scale'])) + block.norm1.bias.copy_(_n2p(w[f'{block_prefix}LayerNorm_0/bias'])) + block.attn.qkv.weight.copy_(torch.cat([ + _n2p(w[f'{mha_prefix}{n}/kernel'], t=False).flatten(1).T for n in ('query', 'key', 'value')])) + block.attn.qkv.bias.copy_(torch.cat([ + _n2p(w[f'{mha_prefix}{n}/bias'], t=False).reshape(-1) for n in ('query', 'key', 'value')])) + block.attn.proj.weight.copy_(_n2p(w[f'{mha_prefix}out/kernel']).flatten(1)) + block.attn.proj.bias.copy_(_n2p(w[f'{mha_prefix}out/bias'])) + for r in range(2): + getattr(block.mlp, f'fc{r + 1}').weight.copy_(_n2p(w[f'{block_prefix}MlpBlock_3/Dense_{r}/kernel'])) + getattr(block.mlp, f'fc{r + 1}').bias.copy_(_n2p(w[f'{block_prefix}MlpBlock_3/Dense_{r}/bias'])) + block.norm2.weight.copy_(_n2p(w[f'{block_prefix}LayerNorm_2/scale'])) + block.norm2.bias.copy_(_n2p(w[f'{block_prefix}LayerNorm_2/bias'])) + + +def resize_pos_embed(posemb, posemb_new, num_prefix_tokens=1, gs_new=()): + # Rescale the grid of position embeddings when loading from state_dict. Adapted from + # https://github.com/google-research/vision_transformer/blob/00883dd691c63a6830751563748663526e811cee/vit_jax/checkpoint.py#L224 + # modify + _logger.info('Resized position embedding: %s to %s', posemb.shape, posemb_new.shape) + ntok_new = posemb_new.shape[1] + if num_prefix_tokens: + posemb_prefix, posemb_grid = posemb[:, :num_prefix_tokens], posemb[0, num_prefix_tokens:] + # ntok_new -= num_prefix_tokens + else: + posemb_prefix, posemb_grid = posemb[:, :0], posemb[0] + gs_old = int(math.sqrt(len(posemb_grid))) + if ntok_new > gs_old ** 2: + ntok_new -= gs_old ** 2 + # expand cls's pos embedding for prompt tokens + posemb_prefix = posemb_prefix.expand(-1, ntok_new, -1) + if not len(gs_new): # backwards compatibility + gs_new = [int(math.sqrt(ntok_new))] * 2 + assert len(gs_new) >= 2 + _logger.info('Position embedding grid-size from %s to %s', [gs_old, gs_old], gs_new) + posemb_grid = posemb_grid.reshape(1, gs_old, gs_old, -1).permute(0, 3, 1, 2) + posemb_grid = F.interpolate(posemb_grid, size=gs_new, mode='bicubic', align_corners=False) + posemb_grid = posemb_grid.permute(0, 2, 3, 1).reshape(1, gs_new[0] * gs_new[1], -1) + posemb = torch.cat([posemb_prefix, posemb_grid], dim=1) + return posemb + + +def checkpoint_filter_fn(state_dict, model, adapt_layer_scale=False): + """ convert patch embedding weight from manual patchify + linear proj to conv""" + import re + out_dict = {} + if 'model' in state_dict: + # For deit models + state_dict = state_dict['model'] + + for k, v in state_dict.items(): + if 'patch_embed.proj.weight' in k and len(v.shape) < 4: + # For old models that I trained prior to conv based patchification + O, I, H, W = model.patch_embed.proj.weight.shape + v = v.reshape(O, -1, H, W) + elif k == 'pos_embed' and v.shape[1] != model.pos_embed.shape[1]: + # To resize pos embedding when using model at different size from pretrained weights + v = resize_pos_embed( + v, + model.pos_embed, + 0 if getattr(model, 'no_embed_class') else getattr(model, 'num_prefix_tokens', 1), + model.patch_embed.grid_size + ) + elif adapt_layer_scale and 'gamma_' in k: + # remap layer-scale gamma into sub-module (deit3 models) + k = re.sub(r'gamma_([0-9])', r'ls\1.gamma', k) + elif 'pre_logits' in k: + # NOTE representation layer removed as not used in latest 21k/1k pretrained weights + continue + out_dict[k] = v + return out_dict + + +def _create_vision_transformer(variant, pretrained=False, **kwargs): + if kwargs.get('features_only', None): + raise RuntimeError('features_only not implemented for Vision Transformer models.') + + if 'flexi' in variant: + # FIXME Google FlexiViT pretrained models have a strong preference for bilinear patch / embed + # interpolation, other pretrained models resize better w/ anti-aliased bicubic interpolation. + _filter_fn = partial(checkpoint_filter_fn, interpolation='bilinear', antialias=False) + else: + _filter_fn = checkpoint_filter_fn + + pretrained_cfg = resolve_pretrained_cfg(variant, pretrained_cfg=kwargs.pop('pretrained_cfg', None)) + pretrained_cfg.custom_load = True + + return build_model_with_cfg( + VisionTransformer, + variant, + pretrained, + pretrained_cfg=pretrained_cfg, + pretrained_filter_fn=_filter_fn, + **kwargs, + ) + + +def vit_base_patch16_224_l2p(pretrained=False, **kwargs): + """ ViT-Base (ViT-B/16) from original paper (https://arxiv.org/abs/2010.11929). + ImageNet-1k weights fine-tuned from in21k @ 224x224, source https://github.com/google-research/vision_transformer. + """ + model_kwargs = dict(patch_size=16, embed_dim=768, depth=12, num_heads=12, **kwargs) + model = _create_vision_transformer('vit_base_patch16_224', pretrained=pretrained, **model_kwargs) + return model diff --git a/models/lucir.py b/models/lucir.py index b05f177c..0a33f279 100644 --- a/models/lucir.py +++ b/models/lucir.py @@ -11,13 +11,12 @@ import torch.nn.functional as F from datasets import get_dataset from torch import nn -from torch.utils.data.dataloader import DataLoader -from models.icarl import fill_buffer from models.utils.continual_model import ContinualModel -from utils.args import add_management_args, add_experiment_args, add_rehearsal_args, ArgumentParser +from utils.args import add_rehearsal_args, ArgumentParser from utils.batch_norm import bn_track_stats -from utils.buffer import Buffer, icarl_replay +from utils.buffer import Buffer, fill_buffer, icarl_replay +from utils.conf import create_seeded_dataloader def lucir_batch_hard_triplet_loss(labels, embeddings, k, margin, num_old_classes): @@ -37,38 +36,15 @@ def lucir_batch_hard_triplet_loss(labels, embeddings, k, margin, num_old_classes max_novel_scores = max_novel_scores[hard_index] assert (gt_scores.size() == max_novel_scores.size()) assert (gt_scores.size(0) == hard_num) + target = torch.ones(hard_num * k, 1).to(embeddings.device) loss = nn.MarginRankingLoss(margin=margin)(gt_scores.view(-1, 1), - max_novel_scores.view(-1, 1), torch.ones(hard_num * k).to(embeddings.device)) + max_novel_scores.view(-1, 1), target) else: loss = torch.zeros(1).to(embeddings.device) return loss -def get_parser() -> ArgumentParser: - parser = ArgumentParser(description='Continual Learning via Lucir.') - - add_management_args(parser) - add_experiment_args(parser) - add_rehearsal_args(parser) - - parser.add_argument('--lamda_base', type=float, required=False, default=5., - help='Regularization weight for embedding cosine similarity.') - parser.add_argument('--lamda_mr', type=float, required=False, default=1., - help='Regularization weight for embedding cosine similarity.') - parser.add_argument('--k_mr', type=int, required=False, default=2, - help='K for margin-ranking loss.') - parser.add_argument('--mr_margin', type=float, default=0.5, - required=False, help='Margin for margin-ranking loss.') - parser.add_argument('--fitting_epochs', type=int, required=False, default=20, - help='Number of epochs to finetune on coreset after each task.') - parser.add_argument('--lr_finetune', type=float, required=False, default=0.01, - help='Learning Rate for finetuning.') - parser.add_argument('--imprint_weights', type=int, choices=[0, 1], required=False, default=1, - help='Apply weight imprinting?') - return parser - - class CustomClassifier(nn.Module): def __init__(self, in_features, cpt, n_tasks): super().__init__() @@ -80,7 +56,6 @@ def __init__(self, in_features, cpt, n_tasks): self.sigma = nn.parameter.Parameter(torch.Tensor(1)) self.in_features = in_features - self.task = 0 self.cpt = cpt self.n_tasks = n_tasks self.reset_parameters() @@ -122,17 +97,37 @@ class Lucir(ContinualModel): NAME = 'lucir' COMPATIBILITY = ['class-il', 'task-il'] + @staticmethod + def get_parser() -> ArgumentParser: + parser = ArgumentParser(description='Continual Learning via Lucir.') + add_rehearsal_args(parser) + + parser.add_argument('--lamda_base', type=float, required=False, default=5., + help='Regularization weight for embedding cosine similarity.') + parser.add_argument('--lamda_mr', type=float, required=False, default=1., + help='Regularization weight for embedding cosine similarity.') + parser.add_argument('--k_mr', type=int, required=False, default=2, + help='K for margin-ranking loss.') + parser.add_argument('--mr_margin', type=float, default=0.5, + required=False, help='Margin for margin-ranking loss.') + parser.add_argument('--fitting_epochs', type=int, required=False, default=20, + help='Number of epochs to finetune on coreset after each task.') + parser.add_argument('--lr_finetune', type=float, required=False, default=0.01, + help='Learning Rate for finetuning.') + parser.add_argument('--imprint_weights', type=int, choices=[0, 1], required=False, default=1, + help='Apply weight imprinting?') + return parser + def __init__(self, backbone, loss, args, transform): super(Lucir, self).__init__(backbone, loss, args, transform) self.dataset = get_dataset(args) # Instantiate buffers - self.buffer = Buffer(self.args.buffer_size, self.device) + self.buffer = Buffer(self.args.buffer_size) self.eye = torch.eye(self.dataset.N_CLASSES_PER_TASK * self.dataset.N_TASKS).to(self.device) self.old_net = None - self.task = 0 self.epochs = int(args.n_epochs) self.lamda_cos_sim = args.lamda_base @@ -151,8 +146,7 @@ def __init__(self, backbone, loss, args, transform): self.c_epoch = -1 def update_classifier(self): - self.net.classifier.task += 1 - self.net.classifier.reset_weight(self.task) + self.net.classifier.reset_weight(self.current_task) def forward(self, x): with torch.no_grad(): @@ -169,7 +163,7 @@ def observe(self, inputs, labels, not_aug_inputs, logits=None, epoch=None, fitti self.opt.zero_grad() loss = self.get_loss( - inputs, labels.long(), self.task) + inputs, labels.long(), self.current_task) loss.backward() self.opt.step() @@ -180,10 +174,14 @@ def get_loss(self, inputs: torch.Tensor, labels: torch.Tensor, task_idx: int) -> torch.Tensor: """ Computes the loss tensor. - :param inputs: the images to be fed to the network - :param labels: the ground-truth labels - :param task_idx: the task index - :return: the differentiable loss value + + Args: + inputs: the images to be fed to the network + labels: the ground-truth labels + task_idx: the task index + + Returns: + the differentiable loss value """ pc = task_idx * self.dataset.N_CLASSES_PER_TASK @@ -214,7 +212,7 @@ def get_loss(self, inputs: torch.Tensor, labels: torch.Tensor, def begin_task(self, dataset): - if self.task > 0: + if self.current_task > 0: icarl_replay(self, dataset) with torch.no_grad(): @@ -226,13 +224,13 @@ def begin_task(self, dataset): # Restore optimizer LR upd_weights = [p for n, p in self.net.named_parameters() - if 'classifier' not in n] + [self.net.classifier.weights[self.task], self.net.classifier.sigma] + if 'classifier' not in n] + [self.net.classifier.weights[self.current_task], self.net.classifier.sigma] fix_weights = list( - self.net.classifier.weights[:self.task]) + self.net.classifier.weights[:self.current_task]) - if self.task < self.dataset.N_TASKS - 1: + if self.current_task < self.dataset.N_TASKS - 1: fix_weights += list( - self.net.classifier.weights[self.task + 1:]) + self.net.classifier.weights[self.current_task + 1:]) self.opt = torch.optim.SGD([{'params': upd_weights, 'lr': self.args.lr, 'weight_decay': self.args.optim_wd}, { 'params': fix_weights, 'lr': 0, 'weight_decay': 0}], lr=self.args.lr, momentum=self.args.optim_mom, weight_decay=self.args.optim_wd) @@ -242,20 +240,17 @@ def end_task(self, dataset) -> None: self.net.train() with torch.no_grad(): - fill_buffer(self, self.buffer, dataset, self.task) + fill_buffer(self.buffer, dataset, self.current_task, net=self.net, use_herding=True) if self.args.fitting_epochs is not None and self.args.fitting_epochs > 0: self.fit_buffer(self.args.fitting_epochs) - self.task += 1 - # Adapt lambda - self.lamda_cos_sim = math.sqrt( - self.task) * float(self.args.lamda_base) + self.lamda_cos_sim = math.sqrt(self.current_task) * float(self.args.lamda_base) def imprint_weights(self, dataset): self.net.eval() - old_embedding_norm = torch.cat([self.net.classifier.weights[i] for i in range(self.task)]).norm( + old_embedding_norm = torch.cat([self.net.classifier.weights[i] for i in range(self.current_task)]).norm( dim=1, keepdim=True) average_old_embedding_norm = torch.mean( old_embedding_norm, dim=0).cpu().type(torch.DoubleTensor) @@ -266,14 +261,14 @@ def imprint_weights(self, dataset): cur_dataset = deepcopy(loader.dataset) - for cls_idx in range(self.task * self.dataset.N_CLASSES_PER_TASK, (self.task + 1) * self.dataset.N_CLASSES_PER_TASK): + for cls_idx in range(self.current_task * self.dataset.N_CLASSES_PER_TASK, (self.current_task + 1) * self.dataset.N_CLASSES_PER_TASK): cls_indices = np.asarray( loader.dataset.targets) == cls_idx cur_dataset.data = loader.dataset.data[cls_indices] cur_dataset.targets = np.zeros((cur_dataset.data.shape[0])) - dt = DataLoader( - cur_dataset, batch_size=self.args.batch_size, num_workers=0) + dt = create_seeded_dataloader(self.args, + cur_dataset, batch_size=self.args.batch_size, num_workers=0) num_samples = cur_dataset.data.shape[0] cls_features = torch.empty((num_samples, num_features)) @@ -287,10 +282,10 @@ def imprint_weights(self, dataset): norm_features = F.normalize(cls_features, p=2, dim=1) cls_embedding = torch.mean(norm_features, dim=0) - novel_embedding[cls_idx - self.task * self.dataset.N_CLASSES_PER_TASK] = F.normalize( + novel_embedding[cls_idx - self.current_task * self.dataset.N_CLASSES_PER_TASK] = F.normalize( cls_embedding, p=2, dim=0) * average_old_embedding_norm - self.net.classifier.weights[self.task].data = novel_embedding.to( + self.net.classifier.weights[self.current_task].data = novel_embedding.to( self.device) self.net.train() @@ -305,9 +300,9 @@ def fit_buffer(self, opt_steps): with bn_track_stats(self, False): for _ in range(opt_steps): - examples, labels, _ = self.buffer.get_all_data(self.transform) - dt = DataLoader([(e, l) for e, l in zip(examples, labels)], - shuffle=True, batch_size=self.args.batch_size) + examples, labels = self.buffer.get_all_data(self.transform, device=self.device) + dt = create_seeded_dataloader(self.args, [(e, l) for e, l in zip(examples, labels)], + shuffle=True, batch_size=self.args.batch_size) for inputs, labels in dt: self.observe(inputs, labels, None, fitting=True) lr_scheduler.step() diff --git a/models/lwf.py b/models/lwf.py index 3e7d8fcb..e3dc3020 100644 --- a/models/lwf.py +++ b/models/lwf.py @@ -4,23 +4,10 @@ # LICENSE file in the root directory of this source tree. import torch -from datasets import get_dataset from torch.optim import SGD from models.utils.continual_model import ContinualModel -from utils.args import add_management_args, add_experiment_args, add_rehearsal_args, ArgumentParser - - -def get_parser() -> ArgumentParser: - parser = ArgumentParser(description='Continual learning via' - ' Learning without Forgetting.') - add_management_args(parser) - add_experiment_args(parser) - parser.add_argument('--alpha', type=float, default=0.5, - help='Penalty weight.') - parser.add_argument('--softmax_temp', type=float, default=2, - help='Temperature of the softmax function.') - return parser +from utils.args import ArgumentParser def smooth(logits, temp, dim): @@ -36,16 +23,21 @@ class Lwf(ContinualModel): NAME = 'lwf' COMPATIBILITY = ['class-il', 'task-il'] + @staticmethod + def get_parser() -> ArgumentParser: + parser = ArgumentParser(description='Continual learning via' + ' Learning without Forgetting.') + parser.add_argument('--alpha', type=float, default=0.5, + help='Penalty weight.') + parser.add_argument('--softmax_temp', type=float, default=2, + help='Temperature of the softmax function.') + return parser + def __init__(self, backbone, loss, args, transform): super(Lwf, self).__init__(backbone, loss, args, transform) self.old_net = None self.soft = torch.nn.Softmax(dim=1) self.logsoft = torch.nn.LogSoftmax(dim=1) - self.dataset = get_dataset(args) - self.current_task = 0 - self.cpt = get_dataset(args).N_CLASSES_PER_TASK - nc = get_dataset(args).N_TASKS * self.cpt - self.eye = torch.tril(torch.ones((nc, nc))).bool().to(self.device) def begin_task(self, dataset): self.net.eval() @@ -54,14 +46,13 @@ def begin_task(self, dataset): opt = SGD(self.net.classifier.parameters(), lr=self.args.lr) for epoch in range(self.args.n_epochs): for i, data in enumerate(dataset.train_loader): - inputs, labels, not_aug_inputs = data + inputs, labels = data[0], data[1] inputs, labels = inputs.to(self.device), labels.to(self.device) opt.zero_grad() with torch.no_grad(): feats = self.net(inputs, returnt='features') - mask = self.eye[(self.current_task + 1) * self.cpt - 1] ^ self.eye[self.current_task * self.cpt - 1] - outputs = self.net.classifier(feats)[:, mask] - loss = self.loss(outputs, labels - self.current_task * self.cpt) + outputs = self.net.classifier(feats)[:, self.n_past_classes: self.n_seen_classes] + loss = self.loss(outputs, labels - self.n_past_classes) loss.backward() opt.step() @@ -76,18 +67,14 @@ def begin_task(self, dataset): setattr(dataset.train_loader.dataset, 'logits', torch.cat(logits)) self.net.train() - self.current_task += 1 - - def observe(self, inputs, labels, not_aug_inputs, logits=None): + def observe(self, inputs, labels, not_aug_inputs, logits=None, epoch=None): self.opt.zero_grad() outputs = self.net(inputs) - mask = self.eye[self.current_task * self.cpt - 1] - loss = self.loss(outputs[:, mask], labels) + loss = self.loss(outputs[:, :self.n_seen_classes], labels) if logits is not None: - mask = self.eye[(self.current_task - 1) * self.cpt - 1] - loss += self.args.alpha * modified_kl_div(smooth(self.soft(logits[:, mask]).to(self.device), 2, 1), - smooth(self.soft(outputs[:, mask]), 2, 1)) + loss += self.args.alpha * modified_kl_div(smooth(self.soft(logits[:, :self.n_past_classes]).to(self.device), 2, 1), + smooth(self.soft(outputs[:, :self.n_past_classes]), 2, 1)) loss.backward() self.opt.step() diff --git a/models/lwf_mc.py b/models/lwf_mc.py index bfd528ed..71caa093 100644 --- a/models/lwf_mc.py +++ b/models/lwf_mc.py @@ -9,24 +9,19 @@ from datasets import get_dataset from utils.args import * from models.utils.continual_model import ContinualModel -import numpy as np - - -def get_parser() -> ArgumentParser: - parser = ArgumentParser(description='Continual Learning via iCaRL.') - - add_management_args(parser) - add_experiment_args(parser) - - parser.add_argument('--wd_reg', type=float, required=True, - help='L2 regularization applied to the parameters.') - return parser class LwFMC(ContinualModel): NAME = 'lwf_mc' COMPATIBILITY = ['class-il', 'task-il'] + @staticmethod + def get_parser() -> ArgumentParser: + parser = ArgumentParser(description='Learning without Forgetting - Multi-Class.') + parser.add_argument('--wd_reg', type=float, default=0.0, + help='L2 regularization applied to the parameters.') + return parser + def __init__(self, backbone, loss, args, transform): super(LwFMC, self).__init__(backbone, loss, args, transform) self.dataset = get_dataset(args) @@ -37,7 +32,6 @@ def __init__(self, backbone, loss, args, transform): self.class_means = None self.old_net = None - self.current_task = 0 def observe(self, inputs, labels, not_aug_inputs, logits=None, epoch=None): if self.current_task > 0: @@ -55,10 +49,14 @@ def get_loss(self, inputs: torch.Tensor, labels: torch.Tensor, task_idx: int, logits: torch.Tensor) -> torch.Tensor: """ Computes the loss tensor. - :param inputs: the images to be fed to the network - :param labels: the ground-truth labels - :param task_idx: the task index - :return: the differentiable loss value + + Args: + inputs: the images to be fed to the network + labels: the ground-truth labels + task_idx: the task index + + Returns: + the differentiable loss value """ pc = task_idx * self.dataset.N_CLASSES_PER_TASK @@ -84,5 +82,3 @@ def get_loss(self, inputs: torch.Tensor, labels: torch.Tensor, def end_task(self, dataset) -> None: self.old_net = deepcopy(self.net.eval()) self.net.train() - self.current_task += 1 - \ No newline at end of file diff --git a/models/mer.py b/models/mer.py index 39856592..b3eebdf0 100644 --- a/models/mer.py +++ b/models/mer.py @@ -6,54 +6,47 @@ import torch from models.utils.continual_model import ContinualModel -from utils.args import add_management_args, add_experiment_args, add_rehearsal_args, ArgumentParser +from utils.args import add_rehearsal_args, ArgumentParser from utils.buffer import Buffer -def get_parser() -> ArgumentParser: - parser = ArgumentParser(description='Continual Learning via' - ' Meta-Experience Replay.') - add_management_args(parser) - add_experiment_args(parser) - add_rehearsal_args(parser) - # remove batch_size from parser - for i in range(len(parser._actions)): - if parser._actions[i].dest == 'batch_size': - del parser._actions[i] - break - - parser.add_argument('--beta', type=float, required=True, - help='Within-batch update beta parameter.') - parser.add_argument('--gamma', type=float, required=True, - help='Across-batch update gamma parameter.') - parser.add_argument('--batch_num', type=int, required=True, - help='Number of batches extracted from the buffer.') - - return parser - - class Mer(ContinualModel): NAME = 'mer' COMPATIBILITY = ['class-il', 'domain-il', 'task-il', 'general-continual'] + @staticmethod + def get_parser() -> ArgumentParser: + parser = ArgumentParser(description='Continual Learning via' + ' Meta-Experience Replay.') + add_rehearsal_args(parser) + + parser.add_argument('--beta', type=float, required=True, + help='Within-batch update beta parameter.') + parser.add_argument('--gamma', type=float, required=True, + help='Across-batch update gamma parameter.') + parser.add_argument('--batch_num', type=int, required=True, + help='Number of batches extracted from the buffer.') + return parser + def __init__(self, backbone, loss, args, transform): + args.batch_size = 1 super(Mer, self).__init__(backbone, loss, args, transform) - self.buffer = Buffer(self.args.buffer_size, self.device) - assert args.batch_size == 1, 'Mer only works with batch_size=1' + self.buffer = Buffer(self.args.buffer_size) def draw_batches(self, inp, lab): batches = [] for i in range(self.args.batch_num): if not self.buffer.is_empty(): - buf_inputs, buf_labels = self.buffer.get_data(self.args.minibatch_size, transform=self.transform) - inputs = torch.cat((buf_inputs, inp.unsqueeze(0))) + buf_inputs, buf_labels = self.buffer.get_data(self.args.minibatch_size, + transform=self.transform, device=self.device) + inputs = torch.cat((buf_inputs, inp)) labels = torch.cat((buf_labels, torch.tensor([lab]).to(self.device))) batches.append((inputs, labels)) else: - batches.append((inp.unsqueeze(0), torch.tensor([lab]).unsqueeze(0).to(self.device))) + batches.append((inp, torch.tensor([lab]).to(self.device))) return batches - def observe(self, inputs, labels, not_aug_inputs): + def observe(self, inputs, labels, not_aug_inputs, epoch=None): batches = self.draw_batches(inputs, labels) theta_A0 = self.net.get_params().data.clone() @@ -66,7 +59,7 @@ def observe(self, inputs, labels, not_aug_inputs): # within-batch step self.opt.zero_grad() outputs = self.net(batch_inputs) - loss = self.loss(outputs, batch_labels.squeeze(-1)) + loss = self.loss(outputs, batch_labels) loss.backward() self.opt.step() @@ -74,7 +67,7 @@ def observe(self, inputs, labels, not_aug_inputs): new_params = theta_Wi0 + self.args.beta * (self.net.get_params() - theta_Wi0) self.net.set_params(new_params) - self.buffer.add_data(examples=not_aug_inputs.unsqueeze(0), labels=labels) + self.buffer.add_data(examples=not_aug_inputs, labels=labels) # across batch reptile meta-update new_new_params = theta_A0 + self.args.gamma * (self.net.get_params() - theta_A0) diff --git a/models/pnn.py b/models/pnn.py index 35937f2d..0168e15d 100644 --- a/models/pnn.py +++ b/models/pnn.py @@ -9,16 +9,9 @@ from datasets import get_dataset from torch.optim import SGD -from utils.args import add_management_args, add_experiment_args, ArgumentParser +from utils.args import ArgumentParser from utils.conf import get_device - - -def get_parser() -> ArgumentParser: - parser = ArgumentParser(description='Continual Learning via' - ' Progressive Neural Networks.') - add_management_args(parser) - add_experiment_args(parser) - return parser +from models.utils.continual_model import ContinualModel def get_backbone(bone, old_cols=None, x_shape=None): @@ -35,30 +28,29 @@ def get_backbone(bone, old_cols=None, x_shape=None): raise NotImplementedError('Progressive Neural Networks is not implemented for this backbone') -class Pnn(nn.Module): +class Pnn(ContinualModel): NAME = 'pnn' COMPATIBILITY = ['task-il'] + @staticmethod + def get_parser() -> ArgumentParser: + parser = ArgumentParser(description='Progressive Neural Networks') + return parser + def __init__(self, backbone, loss, args, transform): - super(Pnn, self).__init__() - self.loss = loss - self.args = args - self.transform = transform - self.device = get_device() + self.nets = [get_backbone(backbone).to(get_device())] + backbone = self.nets[-1] + super(Pnn, self).__init__(backbone, loss, args, transform) self.x_shape = None - self.nets = [get_backbone(backbone).to(self.device)] - self.net = self.nets[-1] - self.opt = SGD(self.net.parameters(), lr=self.args.lr) - self.soft = torch.nn.Softmax(dim=0) self.logsoft = torch.nn.LogSoftmax(dim=0) - self.dataset = get_dataset(args) self.task_idx = 0 def forward(self, x, task_label): if self.x_shape is None: self.x_shape = x.shape + start_idx, end_idx = self.dataset.get_offsets(task_label) if self.task_idx == 0: out = self.net(x) else: @@ -66,22 +58,27 @@ def forward(self, x, task_label): out = self.nets[task_label](x) if self.task_idx != task_label: self.nets[task_label].cpu() + + # mask out previous tasks - Task-IL forward + if start_idx > 0: + out[:, :start_idx] = -torch.inf + out[:, end_idx:] = -torch.inf return out def end_task(self, dataset): # instantiate new column - if self.task_idx == 4: - return self.task_idx += 1 self.nets[-1].cpu() self.nets.append(get_backbone(dataset.get_backbone(), self.nets, self.x_shape).to(self.device)) self.net = self.nets[-1] - self.opt = optim.SGD(self.net.parameters(), lr=self.args.lr) + self.opt = self.get_optimizer() - def observe(self, inputs, labels, not_aug_inputs): + def observe(self, inputs, labels, not_aug_inputs, epoch=None): if self.x_shape is None: self.x_shape = inputs.shape + self.net.to(self.device) + self.opt.zero_grad() outputs = self.net(inputs) loss = self.loss(outputs, labels) diff --git a/models/rpc.py b/models/rpc.py index 7487a183..6ae6fa4e 100644 --- a/models/rpc.py +++ b/models/rpc.py @@ -7,7 +7,7 @@ from datasets import get_dataset from models.utils.continual_model import ContinualModel -from utils.args import add_management_args, add_experiment_args, add_rehearsal_args, ArgumentParser +from utils.args import add_rehearsal_args, ArgumentParser from utils.buffer import Buffer @@ -54,26 +54,20 @@ def simplex_coordinates2(m): return ds -def get_parser() -> ArgumentParser: - parser = ArgumentParser(description='Continual learning via' - ' Experience Replay.') - add_management_args(parser) - add_experiment_args(parser) - add_rehearsal_args(parser) - return parser - - class RPC(ContinualModel): NAME = 'rpc' COMPATIBILITY = ['class-il', 'task-il'] + @staticmethod + def get_parser() -> ArgumentParser: + parser = ArgumentParser(description='Regular Polytope Classifier.') + add_rehearsal_args(parser) + return parser + def __init__(self, backbone, loss, args, transform): super(RPC, self).__init__(backbone, loss, args, transform) - self.buffer = Buffer(self.args.buffer_size, self.device) - self.cpt = get_dataset(args).N_CLASSES_PER_TASK - self.tasks = get_dataset(args).N_TASKS - self.task = 0 - self.rpchead = torch.from_numpy(dsimplex(self.cpt * self.tasks)).float().to(self.device) + self.buffer = Buffer(self.args.buffer_size) + self.rpchead = torch.from_numpy(dsimplex(self.cpt * self.n_tasks)).float().to(self.device) def forward(self, x): x = self.net(x)[:, :-1] @@ -82,8 +76,8 @@ def forward(self, x): def end_task(self, dataset): # reduce coreset - if self.task > 0: - examples_per_class = self.args.buffer_size // ((self.task + 1) * self.cpt) + if self.current_task > 0: + examples_per_class = self.args.buffer_size // (self.current_task * self.cpt) buf_x, buf_lab = self.buffer.get_all_data() self.buffer.empty() for tl in buf_lab.unique(): @@ -116,13 +110,12 @@ def end_task(self, dataset): self.buffer.add_data(examples=not_aug_inputs[flags], labels=labels[flags]) - self.task += 1 - def observe(self, inputs, labels, not_aug_inputs): + def observe(self, inputs, labels, not_aug_inputs, epoch=None): self.opt.zero_grad() if not self.buffer.is_empty(): buf_inputs, buf_labels = self.buffer.get_data( - self.args.minibatch_size, transform=self.transform) + self.args.minibatch_size, transform=self.transform, device=self.device) inputs = torch.cat((inputs, buf_inputs)) labels = torch.cat((labels, buf_labels)) diff --git a/models/sgd.py b/models/sgd.py index 9eee2921..17db3e81 100644 --- a/models/sgd.py +++ b/models/sgd.py @@ -1,28 +1,36 @@ +""" +This module implements the simplest form of incremental training, i.e., finetuning. +""" + # Copyright 2020-present, Pietro Buzzega, Matteo Boschini, Angelo Porrello, Davide Abati, Simone Calderara. # All rights reserved. # This source code is licensed under the license found in the # LICENSE file in the root directory of this source tree. from models.utils.continual_model import ContinualModel -from utils.args import add_management_args, add_experiment_args, ArgumentParser - - -def get_parser() -> ArgumentParser: - parser = ArgumentParser(description='Continual Learning via' - ' Progressive Neural Networks.') - add_management_args(parser) - add_experiment_args(parser) - return parser +from utils.args import ArgumentParser class Sgd(ContinualModel): + """ + Implementation of the Sgd model for continual learning. + """ + NAME = 'sgd' COMPATIBILITY = ['class-il', 'domain-il', 'task-il', 'general-continual'] + @staticmethod + def get_parser() -> ArgumentParser: + parser = ArgumentParser(description='Finetuning baseline - simple incremental training.') + return parser + def __init__(self, backbone, loss, args, transform): super(Sgd, self).__init__(backbone, loss, args, transform) - def observe(self, inputs, labels, not_aug_inputs): + def observe(self, inputs, labels, not_aug_inputs, epoch=None): + """ + SGD trains on the current task using the data provided, with no countermeasures to avoid forgetting. + """ self.opt.zero_grad() outputs = self.net(inputs) loss = self.loss(outputs, labels) diff --git a/models/si.py b/models/si.py index cebce635..dcb5baa6 100644 --- a/models/si.py +++ b/models/si.py @@ -7,26 +7,23 @@ import torch.nn as nn from models.utils.continual_model import ContinualModel -from utils.args import add_management_args, add_experiment_args, ArgumentParser - - -def get_parser() -> ArgumentParser: - parser = ArgumentParser(description='Continual Learning Through' - ' Synaptic Intelligence.') - add_management_args(parser) - add_experiment_args(parser) - parser.add_argument('--c', type=float, required=True, - help='surrogate loss weight parameter c') - parser.add_argument('--xi', type=float, required=True, - help='xi parameter for EWC online') - - return parser +from utils.args import ArgumentParser class SI(ContinualModel): NAME = 'si' COMPATIBILITY = ['class-il', 'domain-il', 'task-il'] + @staticmethod + def get_parser() -> ArgumentParser: + parser = ArgumentParser(description='Continual Learning Through' + ' Synaptic Intelligence.') + parser.add_argument('--c', type=float, required=True, + help='surrogate loss weight parameter c') + parser.add_argument('--xi', type=float, required=True, + help='xi parameter for EWC online') + return parser + def __init__(self, backbone, loss, args, transform): super(SI, self).__init__(backbone, loss, args, transform) @@ -52,13 +49,13 @@ def end_task(self, dataset): self.checkpoint = self.net.get_params().data.clone().to(self.device) self.small_omega = 0 - def observe(self, inputs, labels, not_aug_inputs): + def observe(self, inputs, labels, not_aug_inputs, epoch=None): self.opt.zero_grad() outputs = self.net(inputs) penalty = self.penalty() loss = self.loss(outputs, labels) + self.args.c * penalty loss.backward() - nn.utils.clip_grad.clip_grad_value_(self.net.parameters(), 1) + nn.utils.clip_grad.clip_grad_value_(self.get_parameters(), 1) self.opt.step() self.small_omega += self.args.lr * self.net.get_grads().data ** 2 diff --git a/models/slca.py b/models/slca.py new file mode 100644 index 00000000..b04669aa --- /dev/null +++ b/models/slca.py @@ -0,0 +1,110 @@ +""" +Slow Learner with Classifier Alignment. + +Note: + SLCA USES A CUSTOM BACKBONE (see `feature_extractor_type` argument) + +Arguments: + --feature_extractor_type: the type of convnet to use. `vit-b-p16` is the default: ViT-B/16 pretrained on Imagenet 21k (**NO** finetuning on ImageNet 1k) +""" + +from utils.args import * +from models.utils.continual_model import ContinualModel + +import timm +import torch +from utils.conf import get_device +from models.slca_utils.slca import SLCA_Model + + +class SLCA(ContinualModel): + NAME = 'slca' + COMPATIBILITY = ['class-il', 'domain-il', 'task-il'] + + @staticmethod + def get_parser() -> ArgumentParser: + parser = ArgumentParser(description='Continual Learning via Slow Learner with Classifier Alignment') + parser.add_argument('--prefix', type=str, default='reproduce') + parser.add_argument('--memory_size', type=int, default=0) + parser.add_argument('--memory_per_class', type=int, default=0) + parser.add_argument('--fixed_memory', type=int, choices=[0, 1], default=0) + parser.add_argument('--shuffle', type=int, choices=[0, 1], default=1) + parser.add_argument( + '--feature_extractor_type', + type=str, + default='vit-b-p16', + help='the type of feature extractor to use. `vit-b-p16` is the default: ' + 'ViT-B/16 pretrained on Imagenet 21k (**NO** finetuning on ImageNet 1k)') + parser.add_argument('--ca_epochs', type=int, default=5, help='number of epochs for classifier alignment') + parser.add_argument('--ca_with_logit_norm', type=float, default=0.1) + parser.add_argument('--milestones', type=str, default='40') + parser.add_argument('--lr_decay', type=float, default=0.1) + parser.add_argument('--virtual_bs_iterations', type=int, default=1, help="virtual batch size iterations") + return parser + + def __init__(self, backbone, loss, args, transform): + self.device = get_device() + del backbone + print("-" * 20) + print(f"WARNING: SLCA USES A CUSTOM BACKBONE: {args.feature_extractor_type}") + backbone = SLCA_Model(self.device, args) + print("-" * 20) + + args.milestones = args.milestones.split(',') + n_features = backbone._network.feature_dim + super().__init__(backbone, loss, args, transform) + self.class_means = torch.zeros(self.num_classes, n_features).to(self.device) + self.class_covs = torch.zeros(self.num_classes, n_features, n_features).to(self.device) + + def get_parameters(self): + return self.net._network.parameters() + + def end_task(self, dataset): + + self.net._network.fc.backup() + + dataset.train_loader.dataset.transform = self.dataset.TEST_TRANSFORM + class_means, class_covs = self.net.my_compute_class_means(dataset.train_loader, self.offset_1, self.offset_2) + for k in class_means: + self.class_means[k] = class_means[k] + self.class_covs[k] = class_covs[k] + + if self.current_task > 0: + self.net._stage2_compact_classifier(self.class_means, self.class_covs, self.offset_1, self.offset_2) + + def begin_task(self, dataset): + if self.current_task > 0: + self.net._network.fc.recall() + self.offset_1, self.offset_2 = self.dataset.get_offsets(self.current_task) + self.net._cur_task += 1 + self.net._network.update_fc(self.offset_2 - self.offset_1) + self.net._network.to(self.device) + self.opt, self.scheduler = self.net.get_optimizer() + self.net._network.train() + + self.old_epoch = 0 + self.opt.zero_grad() + + def observe(self, inputs, labels, not_aug_inputs, epoch=0): + if self.old_epoch != epoch: + self.old_epoch = epoch + self.scheduler.step() + + labels = labels.long() + logits = self.net._network(inputs, bcb_no_grad=self.net.fix_bcb)['logits'] + loss = self.loss(logits[:, self.offset_1:self.offset_2], labels - self.offset_1) + + if self.task_iteration == 0: + self.opt.zero_grad() + + torch.cuda.empty_cache() + loss.backward() + if self.task_iteration > 0 and self.task_iteration % self.args.virtual_bs_iterations == 0: + self.opt.step() + self.opt.zero_grad() + + return loss.item() + + def forward(self, x): + logits = self.net._network(x)['logits'] + return logits[:, :self.offset_2] diff --git a/models/slca_utils/__init__.py b/models/slca_utils/__init__.py new file mode 100644 index 00000000..5877f781 --- /dev/null +++ b/models/slca_utils/__init__.py @@ -0,0 +1,3 @@ +""" +Utility functions for SLCA model. Implements custom backbones, including ViT and ResNet. +""" diff --git a/models/slca_utils/base.py b/models/slca_utils/base.py new file mode 100644 index 00000000..f7d27bc5 --- /dev/null +++ b/models/slca_utils/base.py @@ -0,0 +1,344 @@ +import copy +import logging +import numpy as np +import torch +from torch import nn +from torch.utils.data import DataLoader +from models.slca_utils.toolkit import tensor2numpy, accuracy +from scipy.spatial.distance import cdist + +EPSILON = 1e-8 +batch_size = 64 + + +class BaseLearner(object): + def __init__(self, device, args): + self._cur_task = -1 + self._known_classes = 0 + self._total_classes = 0 + self._network = None + self._old_network = None + self._data_memory, self._targets_memory = np.array([]), np.array([]) + self.topk = 5 + + self._memory_size = args.memory_size + self._memory_per_class = args.memory_per_class + self._fixed_memory = args.fixed_memory + self._device = device + self.args = args + + @property + def exemplar_size(self): + assert len(self._data_memory) == len(self._targets_memory), 'Exemplar size error.' + return len(self._targets_memory) + + @property + def samples_per_class(self): + if self._fixed_memory: + return self._memory_per_class + else: + assert self._total_classes != 0, 'Total classes is 0' + return (self._memory_size // self._total_classes) + + @property + def feature_dim(self): + if isinstance(self._network, nn.DataParallel): + return self._network.module.feature_dim + else: + return self._network.feature_dim + + def build_rehearsal_memory(self, data_manager, per_class, mode='icarl'): + if self._fixed_memory: + self._construct_exemplar_unified(data_manager, per_class) + else: + self._reduce_exemplar(data_manager, per_class) + self._construct_exemplar(data_manager, per_class, mode=mode) + + def save_checkpoint(self, filename, head_only=False): + if hasattr(self._network, 'module'): + to_save = self._network.module + else: + to_save = self._network + + if head_only: + to_save = to_save.fc + + save_dict = { + 'tasks': self._cur_task, + 'model_state_dict': to_save.state_dict(), + } + torch.save(save_dict, '{}_{}.pth'.format(filename, self._cur_task)) + + def after_task(self): + pass + + def _evaluate(self, y_pred, y_true): + ret = {} + grouped = accuracy(y_pred.T[0], y_true, self._known_classes) + ret['grouped'] = grouped + ret['top1'] = grouped['total'] + ret['top{}'.format(5)] = np.around((y_pred.T == np.tile(y_true, (self.topk, 1))).sum() * 100 / len(y_true), + decimals=2) + + return ret + + def eval_task(self): + y_pred, y_true = self._eval_cnn(self.test_loader) + cnn_accy = self._evaluate(y_pred, y_true) + + if hasattr(self, '_class_means') and False: # TODO + y_pred, y_true = self._eval_nme(self.test_loader, self._class_means) + nme_accy = self._evaluate(y_pred, y_true) + else: + nme_accy = None + + return cnn_accy, nme_accy + + def incremental_train(self): + pass + + def _train(self): + pass + + def _get_memory(self): + if len(self._data_memory) == 0: + return None + else: + return (self._data_memory, self._targets_memory) + + def _inner_eval(self, model, loader): + model.eval() + y_pred, y_true = [], [] + for _, (_, inputs, targets) in enumerate(loader): + inputs = inputs.to(self._device) + with torch.no_grad(): + outputs = model(inputs)['logits'] + predicts = torch.topk(outputs, k=self.topk, dim=1, largest=True, sorted=True)[1] # [bs, topk] + y_pred.append(predicts.cpu().numpy()) + y_true.append(targets.cpu().numpy()) + + y_pred, y_true = np.concatenate(y_pred), np.concatenate(y_true) # [N, topk] + + cnn_accy = self._evaluate(y_pred, y_true) + return cnn_accy + + def _compute_accuracy(self, model, loader): + model.eval() + correct, total = 0, 0 + for i, (_, inputs, targets) in enumerate(loader): + inputs = inputs.to(self._device) + with torch.no_grad(): + outputs = model(inputs)['logits'] + predicts = torch.max(outputs, dim=1)[1] + correct += (predicts.cpu() == targets).sum() + total += len(targets) + + return np.around(tensor2numpy(correct) * 100 / total, decimals=2) + + def _eval_cnn(self, loader): + self._network.eval() + y_pred, y_true = [], [] + for _, (_, inputs, targets) in enumerate(loader): + inputs = inputs.to(self._device) + with torch.no_grad(): + outputs = self._network(inputs)['logits'] + predicts = torch.topk(outputs, k=self.topk, dim=1, largest=True, sorted=True)[1] # [bs, topk] + y_pred.append(predicts.cpu().numpy()) + y_true.append(targets.cpu().numpy()) + + return np.concatenate(y_pred), np.concatenate(y_true) # [N, topk] + + def _eval_nme(self, loader, class_means): + self._network.eval() + vectors, y_true = self._extract_vectors(loader) + vectors = (vectors.T / (np.linalg.norm(vectors.T, axis=0) + EPSILON)).T + + norm_means = class_means / np.linalg.norm(class_means) + dists = cdist(norm_means, vectors, 'sqeuclidean') # [nb_classes, N] + scores = dists.T # [N, nb_classes], choose the one with the smallest distance + + return np.argsort(scores, axis=1)[:, :self.topk], y_true # [N, topk] + + def _extract_vectors(self, loader): + self._network.eval() + vectors, targets = [], [] + for _, _inputs, _targets in loader: + _targets = _targets.numpy() + if isinstance(self._network, nn.DataParallel): + _vectors = tensor2numpy(self._network.module.extract_vector(_inputs.to(self._device))) + else: + _vectors = tensor2numpy(self._network.extract_vector(_inputs.to(self._device))) + + vectors.append(_vectors) + targets.append(_targets) + + return np.concatenate(vectors), np.concatenate(targets) + + def _extract_vectors_aug(self, loader, repeat=2): + self._network.eval() + vectors, targets = [], [] + for _ in range(repeat): + for _, _inputs, _targets in loader: + _targets = _targets.numpy() + with torch.no_grad(): + if isinstance(self._network, nn.DataParallel): + _vectors = tensor2numpy(self._network.module.extract_vector(_inputs.to(self._device))) + else: + _vectors = tensor2numpy(self._network.extract_vector(_inputs.to(self._device))) + + vectors.append(_vectors) + targets.append(_targets) + + return np.concatenate(vectors), np.concatenate(targets) + + def _reduce_exemplar(self, data_manager, m): + logging.info('Reducing exemplars...({} per classes)'.format(m)) + dummy_data, dummy_targets = copy.deepcopy(self._data_memory), copy.deepcopy(self._targets_memory) + self._class_means = np.zeros((self._total_classes, self.feature_dim)) + self._data_memory, self._targets_memory = np.array([]), np.array([]) + + for class_idx in range(self._known_classes): + mask = np.where(dummy_targets == class_idx)[0] + dd, dt = dummy_data[mask][:m], dummy_targets[mask][:m] + self._data_memory = np.concatenate((self._data_memory, dd)) if len(self._data_memory) != 0 else dd + self._targets_memory = np.concatenate((self._targets_memory, dt)) if len(self._targets_memory) != 0 else dt + + # Exemplar mean + idx_dataset = data_manager.get_dataset([], source='train', mode='test', appendent=(dd, dt)) + idx_loader = DataLoader(idx_dataset, batch_size=batch_size, shuffle=False, num_workers=4) + vectors, _ = self._extract_vectors(idx_loader) + vectors = (vectors.T / (np.linalg.norm(vectors.T, axis=0) + EPSILON)).T + mean = np.mean(vectors, axis=0) + mean = mean / np.linalg.norm(mean) + + self._class_means[class_idx, :] = mean + + def _compute_class_mean(self, data_manager, check_diff=False, oracle=False): + self._class_means = np.zeros((self._total_classes, self.feature_dim)) + # self._class_covs = np.zeros((self._total_classes, self.feature_dim, self.feature_dim)) + self._class_covs = torch.zeros((self._total_classes, self.feature_dim, self.feature_dim)) + + for class_idx in range(self._known_classes, self._total_classes): + _, _, idx_dataset = data_manager.get_dataset(np.arange(class_idx, class_idx + 1), source='train', + mode='test', ret_data=True) + idx_loader = DataLoader(idx_dataset, batch_size=batch_size, shuffle=False, num_workers=4) + vectors, _ = self._extract_vectors(idx_loader) + + class_mean = np.mean(vectors, axis=0) + # class_cov = np.cov(vectors.T) + class_cov = torch.cov(torch.tensor(vectors, dtype=torch.float64).T) + torch.eye(class_mean.shape[-1]) * 1e-4 + if check_diff: + log_info = "cls {} sim: {}".format(class_idx, torch.cosine_similarity(torch.tensor(self._class_means[class_idx, :]).unsqueeze(0), torch.tensor(class_mean).unsqueeze(0)).item()) + logging.info(log_info) + np.save('task_{}_cls_{}_mean.npy'.format(self._cur_task, class_idx), class_mean) + np.save('task_{}_cls_{}_mean_beforetrain.npy'.format(self._cur_task, class_idx), self._class_means[class_idx, :]) + self._class_means[class_idx, :] = class_mean + self._class_covs[class_idx, ...] = class_cov + + def _construct_exemplar(self, data_manager, m, mode='icarl'): + logging.info('Constructing exemplars...({} per classes)'.format(m)) + for class_idx in range(self._known_classes, self._total_classes): + data, targets, idx_dataset = data_manager.get_dataset(np.arange(class_idx, class_idx + 1), source='train', + mode='test', ret_data=True) + idx_loader = DataLoader(idx_dataset, batch_size=batch_size, shuffle=False, num_workers=4) + if mode == 'icarl': + vectors, _ = self._extract_vectors(idx_loader) + vectors = (vectors.T / (np.linalg.norm(vectors.T, axis=0) + EPSILON)).T + class_mean = np.mean(vectors, axis=0) + m = min(m, vectors.shape[0]) + # Select + selected_exemplars = [] + exemplar_vectors = [] # [n, feature_dim] + for k in range(1, m + 1): + S = np.sum(exemplar_vectors, axis=0) # [feature_dim] sum of selected exemplars vectors + mu_p = (vectors + S) / k # [n, feature_dim] sum to all vectors + i = np.argmin(np.sqrt(np.sum((class_mean - mu_p) ** 2, axis=1))) + selected_exemplars.append(np.array(data[i])) # New object to avoid passing by inference + exemplar_vectors.append(np.array(vectors[i])) # New object to avoid passing by inference + + vectors = np.delete(vectors, i, axis=0) # Remove it to avoid duplicative selection + data = np.delete(data, i, axis=0) # Remove it to avoid duplicative selection + selected_exemplars = np.array(selected_exemplars) + exemplar_targets = np.full(m, class_idx) + else: + selected_index = np.random.choice(len(data), (min(m, len(data)),), replace=False) + selected_exemplars = data[selected_index] + exemplar_targets = np.full(min(m, len(data)), class_idx) + self._data_memory = np.concatenate((self._data_memory, selected_exemplars)) if len(self._data_memory) != 0 \ + else selected_exemplars + self._targets_memory = np.concatenate((self._targets_memory, exemplar_targets)) if \ + len(self._targets_memory) != 0 else exemplar_targets + + # Exemplar mean + idx_dataset = data_manager.get_dataset([], source='train', mode='test', + appendent=(selected_exemplars, exemplar_targets)) + idx_loader = DataLoader(idx_dataset, batch_size=batch_size, shuffle=False, num_workers=4) + vectors, _ = self._extract_vectors(idx_loader) + vectors = (vectors.T / (np.linalg.norm(vectors.T, axis=0) + EPSILON)).T + mean = np.mean(vectors, axis=0) + mean = mean / np.linalg.norm(mean) + + self._class_means[class_idx, :] = mean + + def _construct_exemplar_unified(self, data_manager, m): + logging.info('Constructing exemplars for new classes...({} per classes)'.format(m)) + _class_means = np.zeros((self._total_classes, self.feature_dim)) + + # Calculate the means of old classes with newly trained network + for class_idx in range(self._known_classes): + mask = np.where(self._targets_memory == class_idx)[0] + class_data, class_targets = self._data_memory[mask], self._targets_memory[mask] + + class_dset = data_manager.get_dataset([], source='train', mode='test', + appendent=(class_data, class_targets)) + class_loader = DataLoader(class_dset, batch_size=batch_size, shuffle=False, num_workers=4) + vectors, _ = self._extract_vectors(class_loader) + vectors = (vectors.T / (np.linalg.norm(vectors.T, axis=0) + EPSILON)).T + mean = np.mean(vectors, axis=0) + mean = mean / np.linalg.norm(mean) + + _class_means[class_idx, :] = mean + + # Construct exemplars for new classes and calculate the means + for class_idx in range(self._known_classes, self._total_classes): + data, targets, class_dset = data_manager.get_dataset(np.arange(class_idx, class_idx + 1), source='train', + mode='test', ret_data=True) + class_loader = DataLoader(class_dset, batch_size=batch_size, shuffle=False, num_workers=4) + + vectors, _ = self._extract_vectors(class_loader) + vectors = (vectors.T / (np.linalg.norm(vectors.T, axis=0) + EPSILON)).T + class_mean = np.mean(vectors, axis=0) + + # Select + selected_exemplars = [] + exemplar_vectors = [] + for k in range(1, m + 1): + S = np.sum(exemplar_vectors, axis=0) # [feature_dim] sum of selected exemplars vectors + mu_p = (vectors + S) / k # [n, feature_dim] sum to all vectors + i = np.argmin(np.sqrt(np.sum((class_mean - mu_p) ** 2, axis=1))) + + selected_exemplars.append(np.array(data[i])) # New object to avoid passing by inference + exemplar_vectors.append(np.array(vectors[i])) # New object to avoid passing by inference + + vectors = np.delete(vectors, i, axis=0) # Remove it to avoid duplicative selection + data = np.delete(data, i, axis=0) # Remove it to avoid duplicative selection + + selected_exemplars = np.array(selected_exemplars) + exemplar_targets = np.full(m, class_idx) + self._data_memory = np.concatenate((self._data_memory, selected_exemplars)) if len(self._data_memory) != 0 \ + else selected_exemplars + self._targets_memory = np.concatenate((self._targets_memory, exemplar_targets)) if \ + len(self._targets_memory) != 0 else exemplar_targets + + # Exemplar mean + exemplar_dset = data_manager.get_dataset([], source='train', mode='test', + appendent=(selected_exemplars, exemplar_targets)) + exemplar_loader = DataLoader(exemplar_dset, batch_size=batch_size, shuffle=False, num_workers=4) + vectors, _ = self._extract_vectors(exemplar_loader) + vectors = (vectors.T / (np.linalg.norm(vectors.T, axis=0) + EPSILON)).T + mean = np.mean(vectors, axis=0) + mean = mean / np.linalg.norm(mean) + + _class_means[class_idx, :] = mean + + self._class_means = _class_means diff --git a/models/slca_utils/convs/__init__.py b/models/slca_utils/convs/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/models/slca_utils/convs/cifar_resnet.py b/models/slca_utils/convs/cifar_resnet.py new file mode 100644 index 00000000..9ba7c4a9 --- /dev/null +++ b/models/slca_utils/convs/cifar_resnet.py @@ -0,0 +1,198 @@ +''' +Reference: +https://github.com/khurramjaved96/incremental-learning/blob/autoencoders/model/resnet32.py +''' +import math + +import torch +import torch.nn as nn +import torch.nn.functional as F + + +class DownsampleA(nn.Module): + def __init__(self, nIn, nOut, stride): + super(DownsampleA, self).__init__() + assert stride == 2 + self.avg = nn.AvgPool2d(kernel_size=1, stride=stride) + + def forward(self, x): + x = self.avg(x) + return torch.cat((x, x.mul(0)), 1) + + +class DownsampleB(nn.Module): + def __init__(self, nIn, nOut, stride): + super(DownsampleB, self).__init__() + self.conv = nn.Conv2d(nIn, nOut, kernel_size=1, stride=stride, padding=0, bias=False) + self.bn = nn.BatchNorm2d(nOut) + + def forward(self, x): + x = self.conv(x) + x = self.bn(x) + return x + + +class DownsampleC(nn.Module): + def __init__(self, nIn, nOut, stride): + super(DownsampleC, self).__init__() + assert stride != 1 or nIn != nOut + self.conv = nn.Conv2d(nIn, nOut, kernel_size=1, stride=stride, padding=0, bias=False) + + def forward(self, x): + x = self.conv(x) + return x + + +class DownsampleD(nn.Module): + def __init__(self, nIn, nOut, stride): + super(DownsampleD, self).__init__() + assert stride == 2 + self.conv = nn.Conv2d(nIn, nOut, kernel_size=2, stride=stride, padding=0, bias=False) + self.bn = nn.BatchNorm2d(nOut) + + def forward(self, x): + x = self.conv(x) + x = self.bn(x) + return x + + +class ResNetBasicblock(nn.Module): + expansion = 1 + + def __init__(self, inplanes, planes, stride=1, downsample=None): + super(ResNetBasicblock, self).__init__() + + self.conv_a = nn.Conv2d(inplanes, planes, kernel_size=3, stride=stride, padding=1, bias=False) + self.bn_a = nn.BatchNorm2d(planes) + + self.conv_b = nn.Conv2d(planes, planes, kernel_size=3, stride=1, padding=1, bias=False) + self.bn_b = nn.BatchNorm2d(planes) + + self.downsample = downsample + + def forward(self, x): + residual = x + + basicblock = self.conv_a(x) + basicblock = self.bn_a(basicblock) + basicblock = F.relu(basicblock, inplace=True) + + basicblock = self.conv_b(basicblock) + basicblock = self.bn_b(basicblock) + + if self.downsample is not None: + residual = self.downsample(x) + + return F.relu(residual + basicblock, inplace=True) + + +class CifarResNet(nn.Module): + """ + ResNet optimized for the Cifar Dataset, as specified in + https://arxiv.org/abs/1512.03385.pdf + """ + + def __init__(self, block, depth, channels=3): + super(CifarResNet, self).__init__() + + # Model type specifies number of layers for CIFAR-10 and CIFAR-100 model + assert (depth - 2) % 6 == 0, 'depth should be one of 20, 32, 44, 56, 110' + layer_blocks = (depth - 2) // 6 + + self.conv_1_3x3 = nn.Conv2d(channels, 16, kernel_size=3, stride=1, padding=1, bias=False) + self.bn_1 = nn.BatchNorm2d(16) + + self.inplanes = 16 + self.stage_1 = self._make_layer(block, 16, layer_blocks, 1) + self.stage_2 = self._make_layer(block, 32, layer_blocks, 2) + self.stage_3 = self._make_layer(block, 64, layer_blocks, 2) + self.avgpool = nn.AvgPool2d(8) + self.out_dim = 64 * block.expansion + self.fc = nn.Linear(64 * block.expansion, 10) + + for m in self.modules(): + if isinstance(m, nn.Conv2d): + n = m.kernel_size[0] * m.kernel_size[1] * m.out_channels + m.weight.data.normal_(0, math.sqrt(2. / n)) + # m.bias.data.zero_() + elif isinstance(m, nn.BatchNorm2d): + m.weight.data.fill_(1) + m.bias.data.zero_() + elif isinstance(m, nn.Linear): + nn.init.kaiming_normal_(m.weight) + m.bias.data.zero_() + + def _make_layer(self, block, planes, blocks, stride=1): + downsample = None + if stride != 1 or self.inplanes != planes * block.expansion: + downsample = DownsampleA(self.inplanes, planes * block.expansion, stride) + + layers = [] + layers.append(block(self.inplanes, planes, stride, downsample)) + self.inplanes = planes * block.expansion + for i in range(1, blocks): + layers.append(block(self.inplanes, planes)) + + return nn.Sequential(*layers) + + def forward(self, x): + x = self.conv_1_3x3(x) # [bs, 16, 32, 32] + x = F.relu(self.bn_1(x), inplace=True) + + x_1 = self.stage_1(x) # [bs, 16, 32, 32] + x_2 = self.stage_2(x_1) # [bs, 32, 16, 16] + x_3 = self.stage_3(x_2) # [bs, 64, 8, 8] + + pooled = self.avgpool(x_3) # [bs, 64, 1, 1] + features = pooled.view(pooled.size(0), -1) # [bs, 64] + + return { + 'fmaps': [x_1, x_2, x_3], + 'features': features + } + + @property + def last_conv(self): + return self.stage_3[-1].conv_b + + +def resnet20mnist(): + """Constructs a ResNet-20 model for MNIST.""" + model = CifarResNet(ResNetBasicblock, 20, 1) + return model + + +def resnet32mnist(): + """Constructs a ResNet-32 model for MNIST.""" + model = CifarResNet(ResNetBasicblock, 32, 1) + return model + + +def resnet20(): + """Constructs a ResNet-20 model for CIFAR-10.""" + model = CifarResNet(ResNetBasicblock, 20) + return model + + +def resnet32(): + """Constructs a ResNet-32 model for CIFAR-10.""" + model = CifarResNet(ResNetBasicblock, 32) + return model + + +def resnet44(): + """Constructs a ResNet-44 model for CIFAR-10.""" + model = CifarResNet(ResNetBasicblock, 44) + return model + + +def resnet56(): + """Constructs a ResNet-56 model for CIFAR-10.""" + model = CifarResNet(ResNetBasicblock, 56) + return model + + +def resnet110(): + """Constructs a ResNet-110 model for CIFAR-10.""" + model = CifarResNet(ResNetBasicblock, 110) + return model diff --git a/models/slca_utils/convs/linears.py b/models/slca_utils/convs/linears.py new file mode 100644 index 00000000..0fe3c66a --- /dev/null +++ b/models/slca_utils/convs/linears.py @@ -0,0 +1,63 @@ +''' +Reference: +https://github.com/hshustc/CVPR19_Incremental_Learning/blob/master/cifar100-class-incremental/modified_linear.py +''' +import torch +from torch import nn +from timm.models.layers import trunc_normal_ +from copy import deepcopy + + +class SimpleContinualLinear(nn.Module): + def __init__(self, embed_dim, nb_classes, feat_expand=False, with_norm=False): + super().__init__() + + self.embed_dim = embed_dim + self.feat_expand = feat_expand + self.with_norm = with_norm + heads = [] + single_head = [] + if with_norm: + single_head.append(nn.LayerNorm(embed_dim)) + + single_head.append(nn.Linear(embed_dim, nb_classes, bias=True)) + head = nn.Sequential(*single_head) + + heads.append(head) + self.heads = nn.ModuleList(heads) + for m in self.modules(): + if isinstance(m, nn.Linear): + trunc_normal_(m.weight, std=.02) + if m.bias is not None: + nn.init.constant_(m.bias, 0) + + def backup(self): + self.old_state_dict = deepcopy(self.state_dict()) + + def recall(self): + self.load_state_dict(self.old_state_dict) + + def update(self, nb_classes, freeze_old=True): + single_head = [] + if self.with_norm: + single_head.append(nn.LayerNorm(self.embed_dim)) + + _fc = nn.Linear(self.embed_dim, nb_classes, bias=True) + trunc_normal_(_fc.weight, std=.02) + nn.init.constant_(_fc.bias, 0) + single_head.append(_fc) + new_head = nn.Sequential(*single_head) + + if freeze_old: + for p in self.heads.parameters(): + p.requires_grad = False + + self.heads.append(new_head) + + def forward(self, x): + out = [] + for ti in range(len(self.heads)): + fc_inp = x[ti] if self.feat_expand else x + out.append(self.heads[ti](fc_inp)) + out = {'logits': torch.cat(out, dim=1)} + return out diff --git a/models/slca_utils/convs/resnet.py b/models/slca_utils/convs/resnet.py new file mode 100644 index 00000000..4abd04f6 --- /dev/null +++ b/models/slca_utils/convs/resnet.py @@ -0,0 +1,362 @@ +''' +Reference: +https://github.com/pytorch/vision/blob/master/torchvision/models/resnet.py +''' +import torch +import torch.nn as nn +# from torchvision.models.utils import load_state_dict_from_url + + +__all__ = ['ResNet', 'resnet18', 'resnet34', 'resnet50', 'resnet101', + 'resnet152', 'resnext50_32x4d', 'resnext101_32x8d', + 'wide_resnet50_2', 'wide_resnet101_2'] + + +model_urls = { + 'resnet18': 'https://download.pytorch.org/models/resnet18-5c106cde.pth', + 'resnet34': 'https://download.pytorch.org/models/resnet34-333f7ec4.pth', + 'resnet50': 'https://download.pytorch.org/models/resnet50-19c8e357.pth', + 'resnet101': 'https://download.pytorch.org/models/resnet101-5d3b4d8f.pth', + 'resnet152': 'https://download.pytorch.org/models/resnet152-b121ed2d.pth', + 'resnext50_32x4d': 'https://download.pytorch.org/models/resnext50_32x4d-7cdf4587.pth', + 'resnext101_32x8d': 'https://download.pytorch.org/models/resnext101_32x8d-8ba56ff5.pth', + 'wide_resnet50_2': 'https://download.pytorch.org/models/wide_resnet50_2-95faca4d.pth', + 'wide_resnet101_2': 'https://download.pytorch.org/models/wide_resnet101_2-32ee1156.pth', +} + + +def conv3x3(in_planes, out_planes, stride=1, groups=1, dilation=1): + """3x3 convolution with padding""" + return nn.Conv2d(in_planes, out_planes, kernel_size=3, stride=stride, + padding=dilation, groups=groups, bias=False, dilation=dilation) + + +def conv1x1(in_planes, out_planes, stride=1): + """1x1 convolution""" + return nn.Conv2d(in_planes, out_planes, kernel_size=1, stride=stride, bias=False) + + +class BasicBlock(nn.Module): + expansion = 1 + __constants__ = ['downsample'] + + def __init__(self, inplanes, planes, stride=1, downsample=None, groups=1, + base_width=64, dilation=1, norm_layer=None, no_last_relu=False): + super(BasicBlock, self).__init__() + if norm_layer is None: + norm_layer = nn.BatchNorm2d + if groups != 1 or base_width != 64: + raise ValueError('BasicBlock only supports groups=1 and base_width=64') + if dilation > 1: + raise NotImplementedError("Dilation > 1 not supported in BasicBlock") + # Both self.conv1 and self.downsample layers downsample the input when stride != 1 + self.conv1 = conv3x3(inplanes, planes, stride) + self.bn1 = norm_layer(planes) + self.relu = nn.ReLU(inplace=True) + self.conv2 = conv3x3(planes, planes) + self.bn2 = norm_layer(planes) + self.downsample = downsample + self.stride = stride + self.no_last_relu = no_last_relu + + def forward(self, x): + identity = x + + out = self.conv1(x) + out = self.bn1(out) + out = self.relu(out) + + out = self.conv2(out) + out = self.bn2(out) + + if self.downsample is not None: + identity = self.downsample(x) + + out += identity + if not self.no_last_relu: + out = self.relu(out) + + return out + + +class Bottleneck(nn.Module): + expansion = 4 + __constants__ = ['downsample'] + + def __init__(self, inplanes, planes, stride=1, downsample=None, groups=1, + base_width=64, dilation=1, norm_layer=None, no_last_relu=False): + super(Bottleneck, self).__init__() + if norm_layer is None: + norm_layer = nn.BatchNorm2d + width = int(planes * (base_width / 64.)) * groups + # Both self.conv2 and self.downsample layers downsample the input when stride != 1 + self.conv1 = conv1x1(inplanes, width) + self.bn1 = norm_layer(width) + self.conv2 = conv3x3(width, width, stride, groups, dilation) + self.bn2 = norm_layer(width) + self.conv3 = conv1x1(width, planes * self.expansion) + self.bn3 = norm_layer(planes * self.expansion) + self.relu = nn.ReLU(inplace=True) + self.downsample = downsample + self.stride = stride + self.no_last_relu = no_last_relu + + def forward(self, x): + identity = x + + out = self.conv1(x) + out = self.bn1(out) + out = self.relu(out) + + out = self.conv2(out) + out = self.bn2(out) + out = self.relu(out) + + out = self.conv3(out) + out = self.bn3(out) + + if self.downsample is not None: + identity = self.downsample(x) + + out += identity + if not self.no_last_relu: + out = self.relu(out) + + return out + + +# 修改Resnet的实现。 +class ResNet(nn.Module): + + def __init__(self, block, layers, num_classes=1000, zero_init_residual=False, + groups=1, width_per_group=64, replace_stride_with_dilation=None, + norm_layer=None, cifar=False, no_last_relu=False): + super(ResNet, self).__init__() + if norm_layer is None: + norm_layer = nn.BatchNorm2d + self._norm_layer = norm_layer + self.cifar = cifar + + self.inplanes = 64 + self.dilation = 1 + if replace_stride_with_dilation is None: + # each element in the tuple indicates if we should replace + # the 2x2 stride with a dilated convolution instead + replace_stride_with_dilation = [False, False, False] + if len(replace_stride_with_dilation) != 3: + raise ValueError("replace_stride_with_dilation should be None " + "or a 3-element tuple, got {}".format(replace_stride_with_dilation)) + self.groups = groups + self.base_width = width_per_group + if self.cifar: + self.conv1 = nn.Conv2d(3, self.inplanes, kernel_size=3, stride=1, padding=1, bias=False) + else: + self.conv1 = nn.Conv2d(3, self.inplanes, kernel_size=7, stride=2, padding=3, bias=False) + self.bn1 = norm_layer(self.inplanes) + self.relu = nn.ReLU(inplace=True) + self.maxpool = nn.MaxPool2d(kernel_size=3, stride=2, padding=1) # Removed in _forward_impl for cifar + self.layer1 = self._make_layer(block, 64, layers[0]) + self.layer2 = self._make_layer(block, 128, layers[1], stride=2, + dilate=replace_stride_with_dilation[0]) + self.layer3 = self._make_layer(block, 256, layers[2], stride=2, + dilate=replace_stride_with_dilation[1]) + self.layer4 = self._make_layer(block, 512, layers[3], stride=2, + dilate=replace_stride_with_dilation[2], no_last_relu=no_last_relu) + self.avgpool = nn.AdaptiveAvgPool2d((1, 1)) + self.out_dim = 512 * block.expansion + # self.fc = nn.Linear(512 * block.expansion, num_classes) # Removed in _forward_impl + + for m in self.modules(): + if isinstance(m, nn.Conv2d): + nn.init.kaiming_normal_(m.weight, mode='fan_out', nonlinearity='relu') + elif isinstance(m, (nn.BatchNorm2d, nn.GroupNorm)): + nn.init.constant_(m.weight, 1) + nn.init.constant_(m.bias, 0) + + # Zero-initialize the last BN in each residual branch, + # so that the residual branch starts with zeros, and each residual block behaves like an identity. + # This improves the model by 0.2~0.3% according to https://arxiv.org/abs/1706.02677 + if zero_init_residual: + for m in self.modules(): + if isinstance(m, Bottleneck): + nn.init.constant_(m.bn3.weight, 0) + elif isinstance(m, BasicBlock): + nn.init.constant_(m.bn2.weight, 0) + + def _make_layer(self, block, planes, blocks, stride=1, dilate=False, no_last_relu=False): + norm_layer = self._norm_layer + downsample = None + previous_dilation = self.dilation + if dilate: + self.dilation *= stride + stride = 1 + if stride != 1 or self.inplanes != planes * block.expansion: + downsample = nn.Sequential( + conv1x1(self.inplanes, planes * block.expansion, stride), + norm_layer(planes * block.expansion), + ) + + layers = [] + layers.append(block(self.inplanes, planes, stride, downsample, self.groups, + self.base_width, previous_dilation, norm_layer)) + self.inplanes = planes * block.expansion + for bid in range(1, blocks): + layers.append(block(self.inplanes, planes, groups=self.groups, + base_width=self.base_width, dilation=self.dilation, + norm_layer=norm_layer, no_last_relu=no_last_relu if bid == blocks - 1 else False)) + + return nn.Sequential(*layers) + + def _forward_impl(self, x): + # See note [TorchScript super()] + x = self.conv1(x) # [bs, 64, 32, 32] + x = self.bn1(x) + x = self.relu(x) + if not self.cifar: + x = self.maxpool(x) + + x_1 = self.layer1(x) # [bs, 128, 32, 32] + x_2 = self.layer2(x_1) # [bs, 256, 16, 16] + x_3 = self.layer3(x_2) # [bs, 512, 8, 8] + x_4 = self.layer4(x_3) # [bs, 512, 4, 4] + + pooled = self.avgpool(x_4) # [bs, 512, 1, 1] + features = torch.flatten(pooled, 1) # [bs, 512] + # x = self.fc(x) + + return { + 'fmaps': [x_1, x_2, x_3, x_4], + 'features': features + } + + def forward(self, x): + return self._forward_impl(x) + + @property + def last_conv(self): + if hasattr(self.layer4[-1], 'conv3'): + return self.layer4[-1].conv3 + else: + return self.layer4[-1].conv2 + + +def _resnet(arch, block, layers, pretrained, progress, **kwargs): + model = ResNet(block, layers, **kwargs) + if pretrained: + state_dict = load_state_dict_from_url(model_urls[arch], + progress=progress) + model.load_state_dict(state_dict) + return model + + +def resnet18(pretrained=False, progress=True, **kwargs): + r"""ResNet-18 model from + `"Deep Residual Learning for Image Recognition" `_ + Args: + pretrained (bool): If True, returns a model pre-trained on ImageNet + progress (bool): If True, displays a progress bar of the download to stderr + """ + return _resnet('resnet18', BasicBlock, [2, 2, 2, 2], pretrained, progress, + **kwargs) + + +def resnet34(pretrained=False, progress=True, **kwargs): + r"""ResNet-34 model from + `"Deep Residual Learning for Image Recognition" `_ + Args: + pretrained (bool): If True, returns a model pre-trained on ImageNet + progress (bool): If True, displays a progress bar of the download to stderr + """ + return _resnet('resnet34', BasicBlock, [3, 4, 6, 3], pretrained, progress, + **kwargs) + + +def resnet50(pretrained=False, progress=True, **kwargs): + r"""ResNet-50 model from + `"Deep Residual Learning for Image Recognition" `_ + Args: + pretrained (bool): If True, returns a model pre-trained on ImageNet + progress (bool): If True, displays a progress bar of the download to stderr + """ + return _resnet('resnet50', Bottleneck, [3, 4, 6, 3], pretrained, progress, + **kwargs) + + +def resnet101(pretrained=False, progress=True, **kwargs): + r"""ResNet-101 model from + `"Deep Residual Learning for Image Recognition" `_ + Args: + pretrained (bool): If True, returns a model pre-trained on ImageNet + progress (bool): If True, displays a progress bar of the download to stderr + """ + return _resnet('resnet101', Bottleneck, [3, 4, 23, 3], pretrained, progress, + **kwargs) + + +def resnet152(pretrained=False, progress=True, **kwargs): + r"""ResNet-152 model from + `"Deep Residual Learning for Image Recognition" `_ + Args: + pretrained (bool): If True, returns a model pre-trained on ImageNet + progress (bool): If True, displays a progress bar of the download to stderr + """ + return _resnet('resnet152', Bottleneck, [3, 8, 36, 3], pretrained, progress, + **kwargs) + + +def resnext50_32x4d(pretrained=False, progress=True, **kwargs): + r"""ResNeXt-50 32x4d model from + `"Aggregated Residual Transformation for Deep Neural Networks" `_ + Args: + pretrained (bool): If True, returns a model pre-trained on ImageNet + progress (bool): If True, displays a progress bar of the download to stderr + """ + kwargs['groups'] = 32 + kwargs['width_per_group'] = 4 + return _resnet('resnext50_32x4d', Bottleneck, [3, 4, 6, 3], + pretrained, progress, **kwargs) + + +def resnext101_32x8d(pretrained=False, progress=True, **kwargs): + r"""ResNeXt-101 32x8d model from + `"Aggregated Residual Transformation for Deep Neural Networks" `_ + Args: + pretrained (bool): If True, returns a model pre-trained on ImageNet + progress (bool): If True, displays a progress bar of the download to stderr + """ + kwargs['groups'] = 32 + kwargs['width_per_group'] = 8 + return _resnet('resnext101_32x8d', Bottleneck, [3, 4, 23, 3], + pretrained, progress, **kwargs) + + +def wide_resnet50_2(pretrained=False, progress=True, **kwargs): + r"""Wide ResNet-50-2 model from + `"Wide Residual Networks" `_ + The model is the same as ResNet except for the bottleneck number of channels + which is twice larger in every block. The number of channels in outer 1x1 + convolutions is the same, e.g. last block in ResNet-50 has 2048-512-2048 + channels, and in Wide ResNet-50-2 has 2048-1024-2048. + Args: + pretrained (bool): If True, returns a model pre-trained on ImageNet + progress (bool): If True, displays a progress bar of the download to stderr + """ + kwargs['width_per_group'] = 64 * 2 + return _resnet('wide_resnet50_2', Bottleneck, [3, 4, 6, 3], + pretrained, progress, **kwargs) + + +def wide_resnet101_2(pretrained=False, progress=True, **kwargs): + r"""Wide ResNet-101-2 model from + `"Wide Residual Networks" `_ + The model is the same as ResNet except for the bottleneck number of channels + which is twice larger in every block. The number of channels in outer 1x1 + convolutions is the same, e.g. last block in ResNet-50 has 2048-512-2048 + channels, and in Wide ResNet-50-2 has 2048-1024-2048. + Args: + pretrained (bool): If True, returns a model pre-trained on ImageNet + progress (bool): If True, displays a progress bar of the download to stderr + """ + kwargs['width_per_group'] = 64 * 2 + return _resnet('wide_resnet101_2', Bottleneck, [3, 4, 23, 3], + pretrained, progress, **kwargs) diff --git a/models/slca_utils/convs/vits.py b/models/slca_utils/convs/vits.py new file mode 100644 index 00000000..370655b9 --- /dev/null +++ b/models/slca_utils/convs/vits.py @@ -0,0 +1,689 @@ +""" Vision Transformer (ViT) in PyTorch + +A PyTorch implement of Vision Transformers as described in: + +'An Image Is Worth 16 x 16 Words: Transformers for Image Recognition at Scale' + - https://arxiv.org/abs/2010.11929 + +`How to train your ViT? Data, Augmentation, and Regularization in Vision Transformers` + - https://arxiv.org/abs/2106.10270 + +The official jax code is released and available at https://github.com/google-research/vision_transformer + +DeiT model defs and weights from https://github.com/facebookresearch/deit, +paper `DeiT: Data-efficient Image Transformers` - https://arxiv.org/abs/2012.12877 + +Acknowledgments: +* The paper authors for releasing code and weights, thanks! +* I fixed my class token impl based on Phil Wang's https://github.com/lucidrains/vit-pytorch ... check it out +for some einops/einsum fun +* Simple transformer style inspired by Andrej Karpathy's https://github.com/karpathy/minGPT +* Bert reference code checks against Huggingface Transformers and Tensorflow Bert + +Hacked together by / Copyright 2020, Ross Wightman +""" +import math +import logging +from functools import partial +from collections import OrderedDict + +import torch +import torch.nn as nn +import torch.nn.functional as F + +from timm.data import IMAGENET_DEFAULT_MEAN, IMAGENET_DEFAULT_STD, IMAGENET_INCEPTION_MEAN, IMAGENET_INCEPTION_STD +from timm.models.helpers import build_model_with_cfg, named_apply, adapt_input_conv, resolve_pretrained_cfg +from timm.models.layers import PatchEmbed, Mlp, DropPath, trunc_normal_, lecun_normal_ + +_logger = logging.getLogger(__name__) + + +def _cfg(url='', **kwargs): + return { + 'url': url, + 'num_classes': 1000, 'input_size': (3, 224, 224), 'pool_size': None, + 'crop_pct': .9, 'interpolation': 'bicubic', 'fixed_input_size': True, + 'mean': IMAGENET_INCEPTION_MEAN, 'std': IMAGENET_INCEPTION_STD, + 'first_conv': 'patch_embed.proj', 'classifier': 'head', + **kwargs + } + + +default_cfgs = { + # patch models (weights from official Google JAX impl) + 'vit_tiny_patch16_224': _cfg( + url='https://storage.googleapis.com/vit_models/augreg/' + 'Ti_16-i21k-300ep-lr_0.001-aug_none-wd_0.03-do_0.0-sd_0.0--imagenet2012-steps_20k-lr_0.03-res_224.npz'), + 'vit_tiny_patch16_384': _cfg( + url='https://storage.googleapis.com/vit_models/augreg/' + 'Ti_16-i21k-300ep-lr_0.001-aug_none-wd_0.03-do_0.0-sd_0.0--imagenet2012-steps_20k-lr_0.03-res_384.npz', + input_size=(3, 384, 384), crop_pct=1.0), + 'vit_small_patch32_224': _cfg( + url='https://storage.googleapis.com/vit_models/augreg/' + 'S_32-i21k-300ep-lr_0.001-aug_light1-wd_0.03-do_0.0-sd_0.0--imagenet2012-steps_20k-lr_0.03-res_224.npz'), + 'vit_small_patch32_384': _cfg( + url='https://storage.googleapis.com/vit_models/augreg/' + 'S_32-i21k-300ep-lr_0.001-aug_light1-wd_0.03-do_0.0-sd_0.0--imagenet2012-steps_20k-lr_0.03-res_384.npz', + input_size=(3, 384, 384), crop_pct=1.0), + 'vit_small_patch16_224': _cfg( + url='https://storage.googleapis.com/vit_models/augreg/' + 'S_16-i21k-300ep-lr_0.001-aug_light1-wd_0.03-do_0.0-sd_0.0--imagenet2012-steps_20k-lr_0.03-res_224.npz'), + 'vit_small_patch16_384': _cfg( + url='https://storage.googleapis.com/vit_models/augreg/' + 'S_16-i21k-300ep-lr_0.001-aug_light1-wd_0.03-do_0.0-sd_0.0--imagenet2012-steps_20k-lr_0.03-res_384.npz', + input_size=(3, 384, 384), crop_pct=1.0), + 'vit_base_patch32_224': _cfg( + url='https://storage.googleapis.com/vit_models/augreg/' + 'B_32-i21k-300ep-lr_0.001-aug_medium1-wd_0.03-do_0.0-sd_0.0--imagenet2012-steps_20k-lr_0.03-res_224.npz'), + 'vit_base_patch32_384': _cfg( + url='https://storage.googleapis.com/vit_models/augreg/' + 'B_32-i21k-300ep-lr_0.001-aug_light1-wd_0.1-do_0.0-sd_0.0--imagenet2012-steps_20k-lr_0.03-res_384.npz', + input_size=(3, 384, 384), crop_pct=1.0), + 'vit_base_patch16_224': _cfg( + url='https://storage.googleapis.com/vit_models/augreg/' + 'B_16-i21k-300ep-lr_0.001-aug_medium1-wd_0.1-do_0.0-sd_0.0--imagenet2012-steps_20k-lr_0.01-res_224.npz'), + 'vit_base_patch16_384': _cfg( + url='https://storage.googleapis.com/vit_models/augreg/' + 'B_16-i21k-300ep-lr_0.001-aug_medium1-wd_0.1-do_0.0-sd_0.0--imagenet2012-steps_20k-lr_0.01-res_384.npz', + input_size=(3, 384, 384), crop_pct=1.0), + 'vit_base_patch8_224': _cfg( + url='https://storage.googleapis.com/vit_models/augreg/' + 'B_8-i21k-300ep-lr_0.001-aug_medium1-wd_0.1-do_0.0-sd_0.0--imagenet2012-steps_20k-lr_0.01-res_224.npz'), + 'vit_large_patch32_224': _cfg( + url='', # no official model weights for this combo, only for in21k + ), + 'vit_large_patch32_384': _cfg( + url='https://github.com/rwightman/pytorch-image-models/releases/download/v0.1-vitjx/jx_vit_large_p32_384-9b920ba8.pth', + input_size=(3, 384, 384), crop_pct=1.0), + 'vit_large_patch16_224': _cfg( + url='https://storage.googleapis.com/vit_models/augreg/' + 'L_16-i21k-300ep-lr_0.001-aug_medium1-wd_0.1-do_0.1-sd_0.1--imagenet2012-steps_20k-lr_0.01-res_224.npz'), + 'vit_large_patch16_384': _cfg( + url='https://storage.googleapis.com/vit_models/augreg/' + 'L_16-i21k-300ep-lr_0.001-aug_medium1-wd_0.1-do_0.1-sd_0.1--imagenet2012-steps_20k-lr_0.01-res_384.npz', + input_size=(3, 384, 384), crop_pct=1.0), + + 'vit_huge_patch14_224': _cfg(url=''), + 'vit_giant_patch14_224': _cfg(url=''), + 'vit_gigantic_patch14_224': _cfg(url=''), + + # patch models, imagenet21k (weights from official Google JAX impl) + 'vit_tiny_patch16_224_in21k': _cfg( + url='https://storage.googleapis.com/vit_models/augreg/Ti_16-i21k-300ep-lr_0.001-aug_none-wd_0.03-do_0.0-sd_0.0.npz', + num_classes=21843), + 'vit_small_patch32_224_in21k': _cfg( + url='https://storage.googleapis.com/vit_models/augreg/S_32-i21k-300ep-lr_0.001-aug_light1-wd_0.03-do_0.0-sd_0.0.npz', + num_classes=21843), + 'vit_small_patch16_224_in21k': _cfg( + url='https://storage.googleapis.com/vit_models/augreg/S_16-i21k-300ep-lr_0.001-aug_light1-wd_0.03-do_0.0-sd_0.0.npz', + num_classes=21843), + 'vit_base_patch32_224_in21k': _cfg( + url='https://storage.googleapis.com/vit_models/augreg/B_32-i21k-300ep-lr_0.001-aug_medium1-wd_0.03-do_0.0-sd_0.0.npz', + num_classes=21843), + 'vit_base_patch16_224_in21k': _cfg( + url='https://storage.googleapis.com/vit_models/augreg/B_16-i21k-300ep-lr_0.001-aug_medium1-wd_0.1-do_0.0-sd_0.0.npz', + # url='./B_16-i21k-300ep-lr_0.001-aug_medium1-wd_0.1-do_0.0-sd_0.0.npz', + num_classes=21843), + 'vit_base_patch8_224_in21k': _cfg( + url='https://storage.googleapis.com/vit_models/augreg/B_8-i21k-300ep-lr_0.001-aug_medium1-wd_0.1-do_0.0-sd_0.0.npz', + num_classes=21843), + 'vit_large_patch32_224_in21k': _cfg( + url='https://github.com/rwightman/pytorch-image-models/releases/download/v0.1-vitjx/jx_vit_large_patch32_224_in21k-9046d2e7.pth', + num_classes=21843), + 'vit_large_patch16_224_in21k': _cfg( + url='https://storage.googleapis.com/vit_models/augreg/L_16-i21k-300ep-lr_0.001-aug_medium1-wd_0.1-do_0.1-sd_0.1.npz', + num_classes=21843), + 'vit_huge_patch14_224_in21k': _cfg( + url='https://storage.googleapis.com/vit_models/imagenet21k/ViT-H_14.npz', + hf_hub='timm/vit_huge_patch14_224_in21k', + num_classes=21843), + + # SAM trained models (https://arxiv.org/abs/2106.01548) + 'vit_base_patch32_sam_224': _cfg( + url='https://storage.googleapis.com/vit_models/sam/ViT-B_32.npz'), + 'vit_base_patch16_sam_224': _cfg( + url='https://storage.googleapis.com/vit_models/sam/ViT-B_16.npz'), + + # deit models (FB weights) + 'deit_tiny_patch16_224': _cfg( + url='https://dl.fbaipublicfiles.com/deit/deit_tiny_patch16_224-a1311bcf.pth', + mean=IMAGENET_DEFAULT_MEAN, std=IMAGENET_DEFAULT_STD), + 'deit_small_patch16_224': _cfg( + url='https://dl.fbaipublicfiles.com/deit/deit_small_patch16_224-cd65a155.pth', + mean=IMAGENET_DEFAULT_MEAN, std=IMAGENET_DEFAULT_STD), + 'deit_base_patch16_224': _cfg( + url='https://dl.fbaipublicfiles.com/deit/deit_base_patch16_224-b5f2ef4d.pth', + mean=IMAGENET_DEFAULT_MEAN, std=IMAGENET_DEFAULT_STD), + 'deit_base_patch16_384': _cfg( + url='https://dl.fbaipublicfiles.com/deit/deit_base_patch16_384-8de9b5d1.pth', + mean=IMAGENET_DEFAULT_MEAN, std=IMAGENET_DEFAULT_STD, input_size=(3, 384, 384), crop_pct=1.0), + 'deit_tiny_distilled_patch16_224': _cfg( + url='https://dl.fbaipublicfiles.com/deit/deit_tiny_distilled_patch16_224-b40b3cf7.pth', + mean=IMAGENET_DEFAULT_MEAN, std=IMAGENET_DEFAULT_STD, classifier=('head', 'head_dist')), + 'deit_small_distilled_patch16_224': _cfg( + url='https://dl.fbaipublicfiles.com/deit/deit_small_distilled_patch16_224-649709d9.pth', + mean=IMAGENET_DEFAULT_MEAN, std=IMAGENET_DEFAULT_STD, classifier=('head', 'head_dist')), + 'deit_base_distilled_patch16_224': _cfg( + url='https://dl.fbaipublicfiles.com/deit/deit_base_distilled_patch16_224-df68dfff.pth', + mean=IMAGENET_DEFAULT_MEAN, std=IMAGENET_DEFAULT_STD, classifier=('head', 'head_dist')), + 'deit_base_distilled_patch16_384': _cfg( + url='https://dl.fbaipublicfiles.com/deit/deit_base_distilled_patch16_384-d0272ac0.pth', + mean=IMAGENET_DEFAULT_MEAN, std=IMAGENET_DEFAULT_STD, input_size=(3, 384, 384), crop_pct=1.0, + classifier=('head', 'head_dist')), + + # ViT ImageNet-21K-P pretraining by MILL + 'vit_base_patch16_224_miil_in21k': _cfg( + url='https://miil-public-eu.oss-eu-central-1.aliyuncs.com/model-zoo/ImageNet_21K_P/models/timm/vit_base_patch16_224_in21k_miil.pth', + mean=(0, 0, 0), std=(1, 1, 1), crop_pct=0.875, interpolation='bilinear', num_classes=11221, + ), + 'vit_base_patch16_224_miil': _cfg( + url='https://miil-public-eu.oss-eu-central-1.aliyuncs.com/model-zoo/ImageNet_21K_P/models/timm' + '/vit_base_patch16_224_1k_miil_84_4.pth', + mean=(0, 0, 0), std=(1, 1, 1), crop_pct=0.875, interpolation='bilinear', + ), +} + + +class Attention(nn.Module): + def __init__(self, dim, num_heads=8, qkv_bias=False, attn_drop=0., proj_drop=0.): + super().__init__() + self.num_heads = num_heads + head_dim = dim // num_heads + self.scale = head_dim ** -0.5 + + self.qkv = nn.Linear(dim, dim * 3, bias=qkv_bias) + self.attn_drop = nn.Dropout(attn_drop) + self.proj = nn.Linear(dim, dim) + self.proj_drop = nn.Dropout(proj_drop) + + def forward(self, x): + B, N, C = x.shape + qkv = self.qkv(x).reshape(B, N, 3, self.num_heads, C // self.num_heads).permute(2, 0, 3, 1, 4) + q, k, v = qkv.unbind(0) # make torchscript happy (cannot use tensor as tuple) + + attn = (q @ k.transpose(-2, -1)) * self.scale + attn = attn.softmax(dim=-1) + attn = self.attn_drop(attn) + + x = (attn @ v).transpose(1, 2).reshape(B, N, C) + x = self.proj(x) + x = self.proj_drop(x) + return x + + +class Block(nn.Module): + + def __init__(self, dim, num_heads, mlp_ratio=4., qkv_bias=False, drop=0., attn_drop=0., + drop_path=0., act_layer=nn.GELU, norm_layer=nn.LayerNorm): + super().__init__() + self.norm1 = norm_layer(dim) + self.attn = Attention(dim, num_heads=num_heads, qkv_bias=qkv_bias, attn_drop=attn_drop, proj_drop=drop) + # NOTE: drop path for stochastic depth, we shall see if this is better than dropout here + self.drop_path = DropPath(drop_path) if drop_path > 0. else nn.Identity() + self.norm2 = norm_layer(dim) + mlp_hidden_dim = int(dim * mlp_ratio) + self.mlp = Mlp(in_features=dim, hidden_features=mlp_hidden_dim, act_layer=act_layer, drop=drop) + + def forward(self, x): + x = x + self.drop_path(self.attn(self.norm1(x))) + x = x + self.drop_path(self.mlp(self.norm2(x))) + return x + + +class VisionTransformer(nn.Module): + """ Vision Transformer + + A PyTorch impl of : `An Image is Worth 16x16 Words: Transformers for Image Recognition at Scale` + - https://arxiv.org/abs/2010.11929 + + Includes distillation token & head support for `DeiT: Data-efficient Image Transformers` + - https://arxiv.org/abs/2012.12877 + """ + + def __init__(self, img_size=224, patch_size=16, in_chans=3, num_classes=1000, embed_dim=768, depth=12, + num_heads=12, mlp_ratio=4., qkv_bias=True, representation_size=None, distilled=False, + drop_rate=0., attn_drop_rate=0., drop_path_rate=0., embed_layer=PatchEmbed, norm_layer=None, + act_layer=None, weight_init='', with_adapter=False, global_pool=False): + """ + Args: + img_size (int, tuple): input image size + patch_size (int, tuple): patch size + in_chans (int): number of input channels + num_classes (int): number of classes for classification head + embed_dim (int): embedding dimension + depth (int): depth of transformer + num_heads (int): number of attention heads + mlp_ratio (int): ratio of mlp hidden dim to embedding dim + qkv_bias (bool): enable bias for qkv if True + representation_size (Optional[int]): enable and set representation layer (pre-logits) to this value if set + distilled (bool): model includes a distillation token and head as in DeiT models + drop_rate (float): dropout rate + attn_drop_rate (float): attention dropout rate + drop_path_rate (float): stochastic depth rate + embed_layer (nn.Module): patch embedding layer + norm_layer: (nn.Module): normalization layer + weight_init: (str): weight init scheme + """ + super().__init__() + self.num_classes = num_classes + self.num_features = self.embed_dim = embed_dim # num_features for consistency with other models + self.out_dim = embed_dim + self.num_tokens = 2 if distilled else 1 + norm_layer = norm_layer or partial(nn.LayerNorm, eps=1e-6) + act_layer = act_layer or nn.GELU + + self.with_adapter = with_adapter + self.global_pool = global_pool + + self.patch_embed = embed_layer( + img_size=img_size, patch_size=patch_size, in_chans=in_chans, embed_dim=embed_dim) + num_patches = self.patch_embed.num_patches + + self.cls_token = nn.Parameter(torch.zeros(1, 1, embed_dim)) + self.dist_token = nn.Parameter(torch.zeros(1, 1, embed_dim)) if distilled else None + self.pos_embed = nn.Parameter(torch.zeros(1, num_patches + self.num_tokens, embed_dim)) + self.pos_drop = nn.Dropout(p=drop_rate) + + dpr = [x.item() for x in torch.linspace(0, drop_path_rate, depth)] # stochastic depth decay rule + self.blocks = nn.ModuleList([ + Block( + dim=embed_dim, num_heads=num_heads, mlp_ratio=mlp_ratio, qkv_bias=qkv_bias, drop=drop_rate, + attn_drop=attn_drop_rate, drop_path=dpr[i], norm_layer=norm_layer, act_layer=act_layer) + for i in range(depth)]) + self.norm = norm_layer(embed_dim) + + # Representation layer + if representation_size and not distilled: + self.num_features = representation_size + self.pre_logits = nn.Sequential(OrderedDict([ + ('fc', nn.Linear(embed_dim, representation_size)), + ('act', nn.Tanh()) + ])) + else: + self.pre_logits = nn.Identity() + + # Classifier head(s) + self.head = nn.Linear(self.num_features, num_classes) if num_classes > 0 else nn.Identity() + self.head_dist = None + if distilled: + self.head_dist = nn.Linear(self.embed_dim, self.num_classes) if num_classes > 0 else nn.Identity() + + if self.with_adapter: + self.adp_layers = [] + for adp_i in range(4): + self.adp_layers.append(self.get_adapter(embed_dim)) + self.adp_layers = nn.ModuleList(self.adp_layers) + self.adp_norm = nn.LayerNorm(embed_dim) + self.extra_blocks = nn.ModuleList([]) + self.init_weights(weight_init) + if self.with_adapter: + for adp_i in range(4): + nn.init.constant_(self.adp_layers[adp_i][-2].bias, -2.19) + + def get_adapter(self, embed_dim): + return nn.Sequential( + nn.Linear(embed_dim, embed_dim * 3, bias=False), + nn.LayerNorm(embed_dim * 3), + nn.GELU(), + nn.Linear(embed_dim * 3, embed_dim, bias=False), + nn.LayerNorm(embed_dim), + nn.GELU(), + nn.Linear(embed_dim, embed_dim, bias=True), + nn.Sigmoid() + ) + + def init_weights(self, mode=''): + assert mode in ('jax', 'jax_nlhb', 'nlhb', '') + head_bias = -math.log(self.num_classes) if 'nlhb' in mode else 0. + trunc_normal_(self.pos_embed, std=.02) + if self.dist_token is not None: + trunc_normal_(self.dist_token, std=.02) + if mode.startswith('jax'): + # leave cls token as zeros to match jax impl + named_apply(partial(_init_vit_weights, head_bias=head_bias, jax_impl=True), self) + else: + trunc_normal_(self.cls_token, std=.02) + self.apply(_init_vit_weights) + + def _init_weights(self, m): + # this fn left here for compat with downstream users + _init_vit_weights(m) + + @torch.jit.ignore() + def load_pretrained(self, checkpoint_path, prefix=''): + _load_weights(self, checkpoint_path, prefix) + + @torch.jit.ignore + def no_weight_decay(self): + return {'pos_embed', 'cls_token', 'dist_token'} + + def get_classifier(self): + if self.dist_token is None: + return self.head + else: + return self.head, self.head_dist + + def reset_classifier(self, num_classes, global_pool=''): + self.num_classes = num_classes + self.head = nn.Linear(self.embed_dim, num_classes) if num_classes > 0 else nn.Identity() + if self.num_tokens == 2: + self.head_dist = nn.Linear(self.embed_dim, self.num_classes) if num_classes > 0 else nn.Identity() + + def forward_features(self, x, prompt=None, layer_feat=False): + img = x + x = self.patch_embed(x) + cls_token = self.cls_token.expand(x.shape[0], -1, -1) # stole cls_tokens impl from Phil Wang, thanks + prompt_length = 0 + if self.dist_token is None and prompt is None: + x = torch.cat((cls_token, x), dim=1) + elif prompt is not None: + x = torch.cat((prompt, cls_token, x), dim=1) + prompt_length = prompt.size(1) + else: + x = torch.cat((cls_token, self.dist_token.expand(x.shape[0], -1, -1), x), dim=1) + x[:, prompt_length:] = self.pos_drop(x[:, prompt_length:] + self.pos_embed) + # x = self.blocks(x) + feats = [] + feats_l = [] + for b_id, block in enumerate(self.blocks): + x = block(x) + if self.with_adapter and (b_id + 1) % (len(self.blocks) // 4) == 0: + feats.append(x) + if layer_feat: + feats_l.append(x) + if b_id == len(self.blocks) - 2: + penultimate_feat = x.clone() + + if layer_feat: + return feats_l + + if len(self.extra_blocks) > 0: + assert not self.with_adapter + outs = [self.norm(x)[:, 0]] + for extra_block in self.extra_blocks: + outs.append(extra_block(penultimate_feat)[:, 0]) + return outs + + if self.with_adapter and self.training: + adp_inp = feats[-1][:, 0].detach() + masks = [] + for adp_i, adp_layer in enumerate(self.adp_layers): + m_ = adp_layer(adp_inp) + # if adp_i==0: + # m_ = m_.mean(1) + # m_ = torch.sigmoid(m_) + adp_inp = m_ * feats[adp_i][:, 0] + feats[adp_i][:, 0].detach() + masks.append(m_) + return adp_inp, torch.cat(masks, dim=1) + # return self.adp_norm(adp_inp.unsqueeze(1)).squeeze(1) + + if self.global_pool: + x = x[:, 1:, :].mean(dim=1) # global pool without cls token + return self.norm(x) + + x = self.norm(x) + if self.dist_token is None: + if prompt is not None: + return x[:, :prompt_length].mean(dim=1) + return self.pre_logits(x[:, 0]) + else: + return x[:, 0] # , x[:, 1] + + def forward(self, x, prompt=None, layer_feat=False): + x = self.forward_features(x, prompt, layer_feat) + if self.with_adapter and self.training: + x = {'masks': x[1], 'features': x[0]} + else: + x = {'features': x} + # if self.head_dist is not None: + # x, x_dist = self.head(x[0]), self.head_dist(x[1]) # x must be a tuple + # if self.training and not torch.jit.is_scripting(): + # # during inference, return the average of both classifier predictions + # return x, x_dist + # else: + # return (x + x_dist) / 2 + # else: + # x = self.head(x) + return x + + +def _init_vit_weights(module: nn.Module, name: str = '', head_bias: float = 0., jax_impl: bool = False): + """ ViT weight initialization + * When called without n, head_bias, jax_impl args it will behave exactly the same + as my original init for compatibility with prev hparam / downstream use cases (ie DeiT). + * When called w/ valid n (module name) and jax_impl=True, will (hopefully) match JAX impl + """ + if isinstance(module, nn.Linear): + if name.startswith('head'): + nn.init.zeros_(module.weight) + nn.init.constant_(module.bias, head_bias) + elif name.startswith('pre_logits'): + lecun_normal_(module.weight) + nn.init.zeros_(module.bias) + else: + if jax_impl: + nn.init.xavier_uniform_(module.weight) + if module.bias is not None: + if 'mlp' in name: + nn.init.normal_(module.bias, std=1e-6) + else: + nn.init.zeros_(module.bias) + else: + trunc_normal_(module.weight, std=.02) + if module.bias is not None: + nn.init.zeros_(module.bias) + elif jax_impl and isinstance(module, nn.Conv2d): + # NOTE conv was left to pytorch default in my original init + lecun_normal_(module.weight) + if module.bias is not None: + nn.init.zeros_(module.bias) + elif isinstance(module, (nn.LayerNorm, nn.GroupNorm, nn.BatchNorm2d)): + nn.init.zeros_(module.bias) + nn.init.ones_(module.weight) + + +@torch.no_grad() +def _load_weights(model: VisionTransformer, checkpoint_path: str, prefix: str = ''): + """ Load weights from .npz checkpoints for official Google Brain Flax implementation + """ + import numpy as np + + def _n2p(w, t=True): + if w.ndim == 4 and w.shape[0] == w.shape[1] == w.shape[2] == 1: + w = w.flatten() + if t: + if w.ndim == 4: + w = w.transpose([3, 2, 0, 1]) + elif w.ndim == 3: + w = w.transpose([2, 0, 1]) + elif w.ndim == 2: + w = w.transpose([1, 0]) + return torch.from_numpy(w) + + w = np.load(checkpoint_path) + if not prefix and 'opt/target/embedding/kernel' in w: + prefix = 'opt/target/' + + if hasattr(model.patch_embed, 'backbone'): + # hybrid + backbone = model.patch_embed.backbone + stem_only = not hasattr(backbone, 'stem') + stem = backbone if stem_only else backbone.stem + stem.conv.weight.copy_(adapt_input_conv(stem.conv.weight.shape[1], _n2p(w[f'{prefix}conv_root/kernel']))) + stem.norm.weight.copy_(_n2p(w[f'{prefix}gn_root/scale'])) + stem.norm.bias.copy_(_n2p(w[f'{prefix}gn_root/bias'])) + if not stem_only: + for i, stage in enumerate(backbone.stages): + for j, block in enumerate(stage.blocks): + bp = f'{prefix}block{i + 1}/unit{j + 1}/' + for r in range(3): + getattr(block, f'conv{r + 1}').weight.copy_(_n2p(w[f'{bp}conv{r + 1}/kernel'])) + getattr(block, f'norm{r + 1}').weight.copy_(_n2p(w[f'{bp}gn{r + 1}/scale'])) + getattr(block, f'norm{r + 1}').bias.copy_(_n2p(w[f'{bp}gn{r + 1}/bias'])) + if block.downsample is not None: + block.downsample.conv.weight.copy_(_n2p(w[f'{bp}conv_proj/kernel'])) + block.downsample.norm.weight.copy_(_n2p(w[f'{bp}gn_proj/scale'])) + block.downsample.norm.bias.copy_(_n2p(w[f'{bp}gn_proj/bias'])) + embed_conv_w = _n2p(w[f'{prefix}embedding/kernel']) + else: + embed_conv_w = adapt_input_conv( + model.patch_embed.proj.weight.shape[1], _n2p(w[f'{prefix}embedding/kernel'])) + model.patch_embed.proj.weight.copy_(embed_conv_w) + model.patch_embed.proj.bias.copy_(_n2p(w[f'{prefix}embedding/bias'])) + model.cls_token.copy_(_n2p(w[f'{prefix}cls'], t=False)) + pos_embed_w = _n2p(w[f'{prefix}Transformer/posembed_input/pos_embedding'], t=False) + if pos_embed_w.shape != model.pos_embed.shape: + pos_embed_w = resize_pos_embed( # resize pos embedding when different size from pretrained weights + pos_embed_w, model.pos_embed, getattr(model, 'num_tokens', 1), model.patch_embed.grid_size) + model.pos_embed.copy_(pos_embed_w) + model.norm.weight.copy_(_n2p(w[f'{prefix}Transformer/encoder_norm/scale'])) + model.norm.bias.copy_(_n2p(w[f'{prefix}Transformer/encoder_norm/bias'])) + if isinstance(model.head, nn.Linear) and model.head.bias.shape[0] == w[f'{prefix}head/bias'].shape[-1]: + model.head.weight.copy_(_n2p(w[f'{prefix}head/kernel'])) + model.head.bias.copy_(_n2p(w[f'{prefix}head/bias'])) + if isinstance(getattr(model.pre_logits, 'fc', None), nn.Linear) and f'{prefix}pre_logits/bias' in w: + model.pre_logits.fc.weight.copy_(_n2p(w[f'{prefix}pre_logits/kernel'])) + model.pre_logits.fc.bias.copy_(_n2p(w[f'{prefix}pre_logits/bias'])) + for i, block in enumerate(model.blocks.children()): + block_prefix = f'{prefix}Transformer/encoderblock_{i}/' + mha_prefix = block_prefix + 'MultiHeadDotProductAttention_1/' + block.norm1.weight.copy_(_n2p(w[f'{block_prefix}LayerNorm_0/scale'])) + block.norm1.bias.copy_(_n2p(w[f'{block_prefix}LayerNorm_0/bias'])) + block.attn.qkv.weight.copy_(torch.cat([ + _n2p(w[f'{mha_prefix}{n}/kernel'], t=False).flatten(1).T for n in ('query', 'key', 'value')])) + block.attn.qkv.bias.copy_(torch.cat([ + _n2p(w[f'{mha_prefix}{n}/bias'], t=False).reshape(-1) for n in ('query', 'key', 'value')])) + block.attn.proj.weight.copy_(_n2p(w[f'{mha_prefix}out/kernel']).flatten(1)) + block.attn.proj.bias.copy_(_n2p(w[f'{mha_prefix}out/bias'])) + for r in range(2): + getattr(block.mlp, f'fc{r + 1}').weight.copy_(_n2p(w[f'{block_prefix}MlpBlock_3/Dense_{r}/kernel'])) + getattr(block.mlp, f'fc{r + 1}').bias.copy_(_n2p(w[f'{block_prefix}MlpBlock_3/Dense_{r}/bias'])) + block.norm2.weight.copy_(_n2p(w[f'{block_prefix}LayerNorm_2/scale'])) + block.norm2.bias.copy_(_n2p(w[f'{block_prefix}LayerNorm_2/bias'])) + + +def resize_pos_embed(posemb, posemb_new, num_tokens=1, gs_new=()): + # Rescale the grid of position embeddings when loading from state_dict. Adapted from + # https://github.com/google-research/vision_transformer/blob/00883dd691c63a6830751563748663526e811cee/vit_jax/checkpoint.py#L224 + _logger.info('Resized position embedding: %s to %s', posemb.shape, posemb_new.shape) + ntok_new = posemb_new.shape[1] + if num_tokens: + posemb_tok, posemb_grid = posemb[:, :num_tokens], posemb[0, num_tokens:] + ntok_new -= num_tokens + else: + posemb_tok, posemb_grid = posemb[:, :0], posemb[0] + gs_old = int(math.sqrt(len(posemb_grid))) + if not len(gs_new): # backwards compatibility + gs_new = [int(math.sqrt(ntok_new))] * 2 + assert len(gs_new) >= 2 + _logger.info('Position embedding grid-size from %s to %s', [gs_old, gs_old], gs_new) + posemb_grid = posemb_grid.reshape(1, gs_old, gs_old, -1).permute(0, 3, 1, 2) + posemb_grid = F.interpolate(posemb_grid, size=gs_new, mode='bicubic', align_corners=False) + posemb_grid = posemb_grid.permute(0, 2, 3, 1).reshape(1, gs_new[0] * gs_new[1], -1) + posemb = torch.cat([posemb_tok, posemb_grid], dim=1) + return posemb + + +def checkpoint_filter_fn(state_dict, model): + """ convert patch embedding weight from manual patchify + linear proj to conv""" + out_dict = {} + if 'model' in state_dict: + # For deit models + state_dict = state_dict['model'] + for k, v in state_dict.items(): + if 'patch_embed.proj.weight' in k and len(v.shape) < 4: + # For old models that I trained prior to conv based patchification + O, I, H, W = model.patch_embed.proj.weight.shape + v = v.reshape(O, -1, H, W) + elif k == 'pos_embed' and v.shape != model.pos_embed.shape: + # To resize pos embedding when using model at different size from pretrained weights + v = resize_pos_embed( + v, model.pos_embed, getattr(model, 'num_tokens', 1), model.patch_embed.grid_size) + out_dict[k] = v + return out_dict + + +# def _create_vision_transformer(variant, pretrained=False, default_cfg=None, **kwargs): +# default_cfg = default_cfg or default_cfgs[variant] +# if kwargs.get('features_only', None): +# raise RuntimeError('features_only not implemented for Vision Transformer models.') + +# # NOTE this extra code to support handling of repr size for in21k pretrained models +# default_num_classes = default_cfg['num_classes'] +# num_classes = kwargs.get('num_classes', default_num_classes) +# repr_size = kwargs.pop('representation_size', None) +# if repr_size is not None and num_classes != default_num_classes: +# # Remove representation layer if fine-tuning. This may not always be the desired action, +# # but I feel better than doing nothing by default for fine-tuning. Perhaps a better interface? +# _logger.warning("Removing representation layer for fine-tuning.") +# repr_size = None + +# model = build_model_with_cfg( +# VisionTransformer, variant, pretrained, +# default_cfg=default_cfg, +# representation_size=repr_size, +# pretrained_filter_fn=checkpoint_filter_fn, +# pretrained_custom_load='npz' in default_cfg['url'], +# **kwargs) +# return model + +def _create_vision_transformer(variant, pretrained=False, **kwargs): + if kwargs.get('features_only', None): + raise RuntimeError('features_only not implemented for Vision Transformer models.') + + if 'flexi' in variant: + # FIXME Google FlexiViT pretrained models have a strong preference for bilinear patch / embed + # interpolation, other pretrained models resize better w/ anti-aliased bicubic interpolation. + _filter_fn = partial(checkpoint_filter_fn, interpolation='bilinear', antialias=False) + else: + _filter_fn = checkpoint_filter_fn + + # FIXME attn pool (currently only in siglip) params removed if pool disabled, is there a better soln? + strict = True + if 'siglip' in variant and kwargs.get('global_pool', None) != 'map': + strict = False + + pretrained_cfg = resolve_pretrained_cfg(variant, pretrained_cfg=kwargs.pop('pretrained_cfg', None)) + pretrained_cfg.custom_load = True + + return build_model_with_cfg( + VisionTransformer, + variant, + pretrained, + pretrained_cfg=pretrained_cfg, + pretrained_filter_fn=_filter_fn, + pretrained_strict=strict, + **kwargs, + ) + + +def vit_base_patch16_224_in21k(pretrained=False, adapter=False, **kwargs): + """ ViT-Base model (ViT-B/16) from original paper (https://arxiv.org/abs/2010.11929). + ImageNet-21k weights @ 224x224, source https://github.com/google-research/vision_transformer. + NOTE: this model has valid 21k classifier head and no representation (pre-logits) layer + """ + model_kwargs = dict( + patch_size=16, embed_dim=768, depth=12, num_heads=12, with_adapter=adapter, **kwargs) + model = _create_vision_transformer('vit_base_patch16_224_in21k', pretrained=pretrained, **model_kwargs) + del model.head + del model.norm + model.norm = nn.LayerNorm(768) + return model + + +def vit_base_patch16_224_mocov3(pretrained=False, adapter=False, **kwargs): + """ ViT-Base model (ViT-B/16) from original paper (https://arxiv.org/abs/2010.11929). + ImageNet-21k weights @ 224x224, source https://github.com/google-research/vision_transformer. + NOTE: this model has valid 21k classifier head and no representation (pre-logits) layer + """ + model_kwargs = dict( + patch_size=16, embed_dim=768, depth=12, num_heads=12, with_adapter=adapter, **kwargs) + model = _create_vision_transformer('vit_base_patch16_224_in21k', pretrained=False, **model_kwargs) + del model.head + ckpt = torch.load('mocov3-vit-base-300ep.pth', map_location='cpu')['model'] + state_dict = model.state_dict() + state_dict.update(ckpt) + model.load_state_dict(state_dict) + del model.norm + model.norm = nn.LayerNorm(768) + return model diff --git a/models/slca_utils/inc_net.py b/models/slca_utils/inc_net.py new file mode 100644 index 00000000..ce5c49ef --- /dev/null +++ b/models/slca_utils/inc_net.py @@ -0,0 +1,129 @@ +import copy +import torch +from torch import nn +from models.slca_utils.convs.cifar_resnet import resnet32 +from models.slca_utils.convs.resnet import resnet18, resnet34, resnet50 +from models.slca_utils.convs.linears import SimpleContinualLinear +from models.slca_utils.convs.vits import vit_base_patch16_224_in21k, vit_base_patch16_224_mocov3 +import torch.nn.functional as F + + +def get_convnet(feature_extractor_type, pretrained=False): + name = feature_extractor_type.lower() + if name == 'resnet32': + return resnet32() + elif name == 'resnet18': + return resnet18(pretrained=pretrained) + elif name == 'resnet18_cifar': + return resnet18(pretrained=pretrained, cifar=True) + elif name == 'resnet18_cifar_cos': + return resnet18(pretrained=pretrained, cifar=True, no_last_relu=True) + elif name == 'resnet34': + return resnet34(pretrained=pretrained) + elif name == 'resnet50': + return resnet50(pretrained=pretrained) + elif name == 'vit-b-p16': + print("Using ViT-B/16 pretrained on ImageNet21k (NO FINETUNE ON IN1K)") + return vit_base_patch16_224_in21k(pretrained=pretrained) + elif name == 'vit-b-p16-mocov3': + return vit_base_patch16_224_mocov3(pretrained=True) + else: + raise NotImplementedError('Unknown type {}'.format(feature_extractor_type)) + + +class BaseNet(nn.Module): + + def __init__(self, feature_extractor_type, pretrained): + super(BaseNet, self).__init__() + + self.convnet = get_convnet(feature_extractor_type, pretrained) + self.fc = None + + @property + def feature_dim(self): + return self.convnet.out_dim + + def extract_vector(self, x): + return self.convnet(x)['features'] + + def forward(self, x): + x = self.convnet(x) + out = self.fc(x['features']) + ''' + { + 'fmaps': [x_1, x_2, ..., x_n], + 'features': features + 'logits': logits + } + ''' + out.update(x) + + return out + + def update_fc(self, nb_classes): + pass + + def generate_fc(self, in_dim, out_dim): + pass + + def copy(self): + return copy.deepcopy(self) + + def freeze(self): + for param in self.parameters(): + param.requires_grad = False + self.eval() + + return self + + +class FinetuneIncrementalNet(BaseNet): + + def __init__(self, feature_extractor_type, pretrained, fc_with_ln=False): + super().__init__(feature_extractor_type, pretrained) + self.old_fc = None + self.fc_with_ln = fc_with_ln + + def extract_layerwise_vector(self, x, pool=True): + with torch.no_grad(): + features = self.convnet(x, layer_feat=True)['features'] + for f_i in range(len(features)): + if pool: + features[f_i] = features[f_i].mean(1).cpu().numpy() + else: + features[f_i] = features[f_i][:, 0].cpu().numpy() + return features + + def update_fc(self, nb_classes, freeze_old=True): + if self.fc is None: + self.fc = self.generate_fc(self.feature_dim, nb_classes) + else: + self.fc.update(nb_classes, freeze_old=freeze_old) + + def save_old_fc(self): + if self.old_fc is None: + self.old_fc = copy.deepcopy(self.fc) + else: + self.old_fc.heads.append(copy.deepcopy(self.fc.heads[-1])) + + def generate_fc(self, in_dim, out_dim): + fc = SimpleContinualLinear(in_dim, out_dim) + + return fc + + def forward(self, x, bcb_no_grad=False, fc_only=False): + if fc_only: + fc_out = self.fc(x) + if self.old_fc is not None: + old_fc_logits = self.old_fc(x)['logits'] + fc_out['old_logits'] = old_fc_logits + return fc_out + if bcb_no_grad: + with torch.no_grad(): + x = self.convnet(x) + else: + x = self.convnet(x) + out = self.fc(x['features']) + out.update(x) + + return out diff --git a/models/slca_utils/slca.py b/models/slca_utils/slca.py new file mode 100644 index 00000000..f7699cfa --- /dev/null +++ b/models/slca_utils/slca.py @@ -0,0 +1,170 @@ +import logging +import numpy as np +import torch +from torch import optim +from torch.nn import functional as F +from models.slca_utils.base import BaseLearner +from models.slca_utils.inc_net import FinetuneIncrementalNet +from torch.distributions.multivariate_normal import MultivariateNormal +from tqdm import tqdm +from datasets import get_dataset +import sys + + +class SLCA_Model(BaseLearner): + def __init__(self, device, args): + super().__init__(device, args) + self.device = device + self.args = args + self._network = FinetuneIncrementalNet(args.feature_extractor_type, pretrained=True) + self.bcb_lrscale = 1.0 / 100 + self.fix_bcb = False + self.save_before_ca = False + + if self.args.ca_with_logit_norm > 0: + self.logit_norm = self.args.ca_with_logit_norm + else: + self.logit_norm = None + self.topk = 5 + + @property + def training(self): + return self._network.training + + def to(self, device): + self._network.to(device) + + def train(self, *args): + self._network.train(*args) + + def eval(self): + self._network.eval() + + def get_optimizer(self): + lrate = self.args.lr + base_params = self._network.convnet.parameters() + base_fc_params = [p for p in self._network.fc.parameters() if p.requires_grad == True] + head_scale = 1 + if not self.fix_bcb: + base_params = {'params': base_params, 'lr': lrate * self.bcb_lrscale, 'weight_decay': self.args.optim_wd} + base_fc_params = {'params': base_fc_params, 'lr': lrate * head_scale, 'weight_decay': self.args.optim_wd} + network_params = [base_params, base_fc_params] + else: + for p in base_params: + p.requires_grad = False + network_params = [{'params': base_fc_params, 'lr': lrate * head_scale, 'weight_decay': self.args.optim_wd}] + optimizer = optim.SGD(network_params, lr=lrate, momentum=0.9, weight_decay=self.args.optim_wd) + scheduler = optim.lr_scheduler.MultiStepLR(optimizer=optimizer, milestones=self.args.milestones, gamma=self.args.lr_decay) + return optimizer, scheduler + + def after_task(self): + self._known_classes = self._total_classes + logging.info('Exemplar size: {}'.format(self.exemplar_size)) + self.save_checkpoint(self.log_path + '/' + self.model_prefix + '_seed{}'.format(self.seed), head_only=self.fix_bcb) + self._network.fc.recall() + + def my_compute_class_means(self, loader, offset_1, offset_2): + print('Computing class means...', file=sys.stderr) + class_vectors = {idx: [] for idx in range(offset_1, offset_2)} + class_means, class_covs = {}, {} + status = self._network.training + self._network.eval() + for imgs, labels, _ in tqdm(loader): + if self.args.debug_mode and all(len(class_vectors[idx]) >= 5 for idx in range(offset_1, offset_2)): + break + imgs, labels = imgs.to(self.device), labels.to(self.device) + vectors = self._network.extract_vector(imgs) + for c_idx in labels.unique(): + class_vectors[c_idx.item()].append(vectors[labels == c_idx].cpu().detach()) + class_vectors = {k: torch.cat(v, dim=0) for k, v in class_vectors.items()} + for k in class_vectors.keys(): + class_means[k] = class_vectors[k].mean(dim=0) + class_covs[k] = torch.cov(class_vectors[k].T) + torch.eye(class_means[k].shape[-1]) * 1e-4 + print('Done.', file=sys.stderr) + self._network.train(status) + return class_means, class_covs + + def _stage2_compact_classifier(self, class_means, class_covs, offset_1, offset_2): + seq_dataset = get_dataset(self.args) + cpt = seq_dataset.N_CLASSES_PER_TASK + + for p in self._network.fc.parameters(): + p.requires_grad = True + + run_epochs = self.args.ca_epochs + crct_num = offset_2 + param_list = [p for p in self._network.fc.parameters() if p.requires_grad] + network_params = [{'params': param_list, 'lr': self.args.lr, + 'weight_decay': self.args.optim_wd}] + optimizer = optim.SGD(network_params, lr=self.args.lr, momentum=0.9, weight_decay=self.args.optim_wd) + scheduler = optim.lr_scheduler.CosineAnnealingLR(optimizer=optimizer, T_max=run_epochs) + + status = self._network.training + self._network.eval() + for epoch in range(run_epochs): + losses = 0. + + sampled_data = [] + sampled_label = [] + num_sampled_pcls = 256 + + for c_id in range(crct_num): + + if not isinstance(cpt, list): + cpt = [cpt] * seq_dataset.N_TASKS + cumsum = np.cumsum(cpt) + t_id = np.argmax(cumsum > c_id) + decay = (t_id + 1) / (self._cur_task + 1) * 0.1 + cls_mean = class_means[c_id].to(self._device) * (0.9 + decay) + cls_cov = class_covs[c_id].to(self._device) + + m = MultivariateNormal(cls_mean.float(), cls_cov.float()) + + sampled_data_single = m.sample(sample_shape=(num_sampled_pcls,)) + sampled_data.append(sampled_data_single) + sampled_label.extend([c_id] * num_sampled_pcls) + + sampled_data = torch.cat(sampled_data, dim=0).float().to(self._device) + sampled_label = torch.tensor(sampled_label).long().to(self._device) + + inputs = sampled_data + targets = sampled_label + + sf_indexes = torch.randperm(inputs.size(0)) + inputs = inputs[sf_indexes] + targets = targets[sf_indexes] + + for _iter in tqdm(range(crct_num)): + if self.args.debug_mode and _iter >= 5: + break + inp = inputs[_iter * num_sampled_pcls:(_iter + 1) * num_sampled_pcls] + tgt = targets[_iter * num_sampled_pcls:(_iter + 1) * num_sampled_pcls] + outputs = self._network(inp, bcb_no_grad=True, fc_only=True) + logits = outputs['logits'] + + if self.logit_norm is not None: + per_task_norm = [] + prev_t_size = 0 + cur_t_size = 0 + for _ti in range(self._cur_task + 1): + cur_t_size += cpt[_ti] + temp_norm = torch.norm(logits[:, prev_t_size:cur_t_size], p=2, dim=-1, keepdim=True) + 1e-7 + per_task_norm.append(temp_norm) + prev_t_size += cpt[_ti] + per_task_norm = torch.cat(per_task_norm, dim=-1) + norms = per_task_norm.mean(dim=-1, keepdim=True) + + norms_all = torch.norm(logits[:, :crct_num], p=2, dim=-1, keepdim=True) + 1e-7 + decoupled_logits = torch.div(logits[:, :crct_num], norms) / self.logit_norm + loss = F.cross_entropy(decoupled_logits, tgt) + + else: + loss = F.cross_entropy(logits[:, :crct_num], tgt) + + optimizer.zero_grad() + loss.backward() + optimizer.step() + losses += loss.item() + + scheduler.step() + self._network.train(status) diff --git a/models/slca_utils/toolkit.py b/models/slca_utils/toolkit.py new file mode 100644 index 00000000..9b2f3503 --- /dev/null +++ b/models/slca_utils/toolkit.py @@ -0,0 +1,58 @@ +import os +import numpy as np +import torch + + +def count_parameters(model, trainable=False): + if trainable: + return sum(p.numel() for p in model.parameters() if p.requires_grad) + return sum(p.numel() for p in model.parameters()) + + +def tensor2numpy(x): + return x.cpu().data.numpy() if x.is_cuda else x.data.numpy() + + +def target2onehot(targets, n_classes): + onehot = torch.zeros(targets.shape[0], n_classes).to(targets.device) + onehot.scatter_(dim=1, index=targets.long().view(-1, 1), value=1.) + return onehot + + +def makedirs(path): + if not os.path.exists(path): + os.makedirs(path) + + +def accuracy(y_pred, y_true, nb_old, increment=10): + assert len(y_pred) == len(y_true), 'Data length error.' + all_acc = {} + all_acc['total'] = np.around((y_pred == y_true).sum() * 100 / len(y_true), decimals=2) + + # Grouped accuracy + for class_id in range(0, np.max(y_true), increment): + idxes = np.where(np.logical_and(y_true >= class_id, y_true < class_id + increment))[0] + label = '{}-{}'.format(str(class_id).rjust(2, '0'), str(class_id + increment - 1).rjust(2, '0')) + all_acc[label] = np.around((y_pred[idxes] == y_true[idxes]).sum() * 100 / len(idxes), decimals=2) + + # Old accuracy + idxes = np.where(y_true < nb_old)[0] + all_acc['old'] = 0 if len(idxes) == 0 else np.around((y_pred[idxes] == y_true[idxes]).sum() * 100 / len(idxes), + decimals=2) + + # New accuracy + idxes = np.where(y_true >= nb_old)[0] + all_acc['new'] = np.around((y_pred[idxes] == y_true[idxes]).sum() * 100 / len(idxes), decimals=2) + + return all_acc + + +def split_images_labels(imgs): + # split trainset.imgs in ImageFolder + images = [] + labels = [] + for item in imgs: + images.append(item[0]) + labels.append(item[1]) + + return np.array(images), np.array(labels) diff --git a/models/twf.py b/models/twf.py new file mode 100644 index 00000000..29d49068 --- /dev/null +++ b/models/twf.py @@ -0,0 +1,250 @@ +import torch +from models.twf_utils.utils import init_twf +from utils.augmentations import CustomRandomCrop, CustomRandomHorizontalFlip, DoubleCompose, DoubleTransform, apply_transform +from utils.buffer import Buffer +from utils.args import * +from models.utils.continual_model import ContinualModel +from datasets import get_dataset + +from torchvision import transforms +import torch.nn.functional as F + + +def batch_iterate(size: int, batch_size: int): + n_chunks = size // batch_size + for i in range(n_chunks): + yield torch.LongTensor(list(range(i * batch_size, (i + 1) * batch_size))) + + +class TwF(ContinualModel): + + NAME = 'twf' + COMPATIBILITY = ['class-il', 'task-il'] + + @staticmethod + def get_parser() -> ArgumentParser: + parser = ArgumentParser(description='Transfer without Forgetting: double-branch distillation + inter-branch skip attention') + + add_rehearsal_args(parser) + # Griddable parameters + parser.add_argument('--der_alpha', type=float, required=True, + help='Distillation alpha hyperparameter for student stream (`alpha` in the paper).') + parser.add_argument('--der_beta', type=float, required=True, + help='Distillation beta hyperparameter (`beta` in the paper).') + parser.add_argument('--lambda_fp', type=float, required=True, + help='weight of feature propagation loss replay') + parser.add_argument('--lambda_diverse_loss', type=float, required=False, default=0, + help='Diverse loss hyperparameter.') + parser.add_argument('--lambda_fp_replay', type=float, required=False, default=0, + help='weight of feature propagation loss replay') + parser.add_argument('--resize_maps', type=int, required=False, choices=[0, 1], default=0, + help='Apply downscale and upscale to feature maps before save in buffer?') + parser.add_argument('--min_resize_threshold', type=int, required=False, default=16, + help='Min size of feature maps to be resized?') + parser.add_argument('--virtual_bs_iterations', type=int, default=1, help="virtual batch size iterations") + return parser + + def __init__(self, backbone, loss, args, transform): + assert "resnet" in str(type(backbone)).lower(), "Only resnet is supported for TwF" + + super().__init__( + backbone, loss, args, transform) + + self.buffer = Buffer(self.args.buffer_size) + self.buf_transform = self.get_custom_double_transform(self.transform.transforms) + + if self.args.loadcheck is None: + print("Warning: no checkpoint loaded!") + + if self.args.lambda_fp_replay == 0: + print('Warning: lambda_fp_replay is 0, so no replay of attention masks will be used') + + if self.args.lambda_diverse_loss == 0: + print('Warning: lambda_diverse_loss is 0, so no diverse loss will be used') + + def get_custom_double_transform(self, transform): + tfs = [] + for tf in transform: + if isinstance(tf, transforms.RandomCrop): + tfs.append(CustomRandomCrop(tf.size, tf.padding, resize=self.args.resize_maps == 1, min_resize_index=2)) + elif isinstance(tf, transforms.RandomHorizontalFlip): + tfs.append(CustomRandomHorizontalFlip(tf.p)) + elif isinstance(tf, transforms.Compose): + tfs.append(DoubleCompose( + self.get_custom_double_transform(tf.transforms))) + else: + tfs.append(DoubleTransform(tf)) + + return DoubleCompose(tfs) + + def end_task(self, dataset): + self.opt.zero_grad(set_to_none=True) + delattr(self, 'opt') + + self.net.eval() + + torch.cuda.empty_cache() + + with torch.no_grad(): + # loop over buffer, recompute attention maps and save them + for buf_idxs in batch_iterate(len(self.buffer), self.args.batch_size): + + buf_labels = self.buffer.labels[buf_idxs].to(self.device) + + buf_mask = torch.div(buf_labels, self.n_classes_current_task, + rounding_mode='floor') == self.current_task + + if not buf_mask.any(): + continue + + buf_inputs = self.buffer.examples[buf_idxs].to(self.device)[buf_mask] + buf_labels = buf_labels[buf_mask] + buf_inputs = apply_transform(buf_inputs, self.normalization_transform).to(self.device) + + if len(buf_inputs) < torch.cuda.device_count(): + continue + + _, buf_partial_features = self.net(buf_inputs, returnt='full') + pret_buf_partial_features = self.teacher(buf_inputs) + + _, attention_masks = self.partial_distill_loss(buf_partial_features[-len( + pret_buf_partial_features):], pret_buf_partial_features, buf_labels) + + for idx in buf_idxs: + self.buffer.attention_maps[idx] = [ + at[idx % len(at)].to(self.device) for at in attention_masks] + + self.net.train() + self.opt = self.get_optimizer() + + def begin_task(self, dataset): + + if self.current_task == 0 or ("start_from" in self.args and self.args.start_from is not None and self.current_task == self.args.start_from): + init_twf(self, dataset) + + self.opt = self.get_optimizer() + self.net.train() + + def partial_distill_loss(self, net_partial_features: list, pret_partial_features: list, + targets, teacher_forcing: list = None, extern_attention_maps: list = None): + + assert len(net_partial_features) == len( + pret_partial_features), f"{len(net_partial_features)} - {len(pret_partial_features)}" + + if teacher_forcing is None or extern_attention_maps is None: + assert teacher_forcing is None + assert extern_attention_maps is None + + loss = 0 + attention_maps = [] + + torch.cuda.empty_cache() + + for i, (net_feat, pret_feat) in enumerate(zip(net_partial_features, pret_partial_features)): + assert net_feat.shape == pret_feat.shape, f"{net_feat.shape} - {pret_feat.shape}" + + adapter = getattr( + self.net, f"adapter_{i+1}") + + pret_feat = pret_feat.detach() + + if teacher_forcing is None: + curr_teacher_forcing = torch.zeros( + len(net_feat,)).bool().to(self.device) + curr_ext_attention_map = torch.ones( + (len(net_feat), adapter.c)).to(self.device) + else: + curr_teacher_forcing = teacher_forcing + curr_ext_attention_map = torch.stack( + [b[i] for b in extern_attention_maps], dim=0).float() + + adapt_loss, adapt_attention = adapter(net_feat, pret_feat, targets, + teacher_forcing=curr_teacher_forcing, attention_map=curr_ext_attention_map) + + loss += adapt_loss + attention_maps.append(adapt_attention.detach().cpu().clone().data) + + return loss / (i + 1), attention_maps + + def observe(self, inputs, labels, not_aug_inputs, epoch=None): + B = len(inputs) + if len(inputs) < torch.cuda.device_count(): + return 0 + + labels = labels.long() + + B = len(inputs) + all_labels = labels + + with torch.no_grad(): + if len(self.buffer) > 0: + # sample from buffer + buf_choices, buf_inputs, buf_labels, buf_logits = self.buffer.get_data( + self.args.minibatch_size, transform=None, return_index=True) + buf_attention_maps = [self.buffer.attention_maps[c] + for c in buf_choices] + d = [self.buf_transform(ee, attn_map) for ee, attn_map in zip(buf_inputs, buf_attention_maps)] + buf_inputs, buf_attention_maps = torch.stack( + [v[0] for v in d]).to(self.device), [[o.to(self.device) for o in v[1]] for v in d] + buf_logits = buf_logits.to(self.device) + buf_labels = buf_labels.to(self.device) + + inputs = torch.cat([inputs, buf_inputs]) + all_labels = torch.cat([labels, buf_labels]) + + all_logits, all_partial_features = self.net(inputs, returnt='full') + with torch.no_grad(): + all_pret_partial_features = self.teacher(inputs) + + stream_logits, buf_outputs = all_logits[:B], all_logits[B:] + stream_partial_features = [p[:B] for p in all_partial_features] + stream_pret_partial_features = [p[:B] for p in all_pret_partial_features] + + loss = self.loss( + stream_logits[:, self.n_past_classes:self.n_seen_classes], labels % self.n_classes_current_task) + + loss_er = torch.tensor(0.) + loss_der = torch.tensor(0.) + loss_afd = torch.tensor(0.) + + torch.cuda.empty_cache() + if len(self.buffer) == 0: + loss_afd, stream_attention_maps = self.partial_distill_loss( + stream_partial_features[-len(stream_pret_partial_features):], stream_pret_partial_features, labels) + else: + buffer_teacher_forcing = torch.div( + buf_labels, self.n_classes_current_task, rounding_mode='floor') != self.current_task + teacher_forcing = torch.cat( + (torch.zeros((B)).bool().to(self.device), buffer_teacher_forcing)) + attention_maps = [ + [torch.ones_like(map) for map in buf_attention_maps[0]]] * B + buf_attention_maps + + loss_afd, all_attention_maps = self.partial_distill_loss(all_partial_features[-len( + all_pret_partial_features):], all_pret_partial_features, all_labels, + teacher_forcing, attention_maps) + + stream_attention_maps = [ap[:B] for ap in all_attention_maps] + + loss_er = self.loss(buf_outputs[:, :self.n_seen_classes], buf_labels) + + loss_der = F.mse_loss(buf_outputs, buf_logits) + + loss += self.args.der_beta * loss_er + loss += self.args.der_alpha * loss_der + loss += self.args.lambda_fp * loss_afd + + if self.task_iteration == 0: + self.opt.zero_grad() + + torch.cuda.empty_cache() + loss.backward() + if self.task_iteration > 0 and self.task_iteration % self.args.virtual_bs_iterations == 0: + self.opt.step() + self.opt.zero_grad() + + self.buffer.add_data(examples=not_aug_inputs, + labels=labels, + logits=stream_logits.data, + attention_maps=stream_attention_maps) + + return loss.item() diff --git a/models/twf_utils/__init__.py b/models/twf_utils/__init__.py new file mode 100644 index 00000000..6221ca12 --- /dev/null +++ b/models/twf_utils/__init__.py @@ -0,0 +1,3 @@ +""" +Utility functions for the TwF model. +""" diff --git a/models/twf_utils/afd.py b/models/twf_utils/afd.py new file mode 100644 index 00000000..4112d4f1 --- /dev/null +++ b/models/twf_utils/afd.py @@ -0,0 +1,500 @@ +import math +import os +from typing import Tuple +import torch +from torch import nn +import torch.nn.functional as F + +from utils.conditional_bn import ConditionalBatchNorm1d +from utils.conditional_bn import ConditionalBatchNorm2d + + +def get_rnd_weight(num_tasks, fin, fout=None, nonlinearity='relu'): + results = [] + if fout is None: + fin = fout + for i in range(num_tasks): + mat = torch.zeros((fout, fin)) + nn.init.kaiming_normal_(mat, mode='fan_out', + nonlinearity=nonlinearity) + results.append(mat.view(-1)) + return torch.stack(results) + + +class ConditionalLinear(nn.Module): + + def __init__(self, fin: int, fout: int, n_tasks: int, + use_bn: bool = False, act_init: str = 'relu'): + + super(ConditionalLinear, self).__init__() + self.fin, self.fout = fin, fout + self.n_tasks = n_tasks + self.weight = nn.Embedding(self.n_tasks, self.fin * self.fout) # C + + self.condbn = None + if use_bn: + self.condbn = ConditionalBatchNorm1d(self.fout, self.n_tasks) + + self.init_parameters(act_init) + + def init_parameters(self, act_init: str): + self.weight.weight.data.copy_( + get_rnd_weight(self.n_tasks, fin=self.fin, + fout=self.fout, nonlinearity=act_init)) + + def forward(self, x, task_id): + weight = self.weight(task_id).view(-1, self.fout, self.fin) + x = x.unsqueeze(2) # B, fin, 1 + x = torch.bmm(weight, x) + x = x.squeeze(2) # B, C + if self.condbn is not None: + x = self.condbn(x, task_id) + return x + + +class DiverseLoss(nn.Module): + + def __init__(self, lambda_loss: float, temp: float = 2.0): + super(DiverseLoss, self).__init__() + self.lambda_loss = lambda_loss + self.temp = temp + + def forward(self, logits: torch.Tensor): + + c = logits.shape[1] + + if len(logits.shape) > 2: + logits = F.adaptive_avg_pool2d(logits, 1).view(-1, c) + + mean = torch.mean(logits, dim=1, keepdim=True) + std = torch.std(logits, dim=1, keepdim=True) + + normalized_logits = (logits - mean) / std + + dotlogits = torch.matmul(logits, logits.t()) / self.temp + batch_size = normalized_logits.shape[0] + + loss = torch.logsumexp(dotlogits, dim=1).mean(0) + loss -= 1 / self.temp + loss -= math.log(batch_size) + + return self.lambda_loss * loss + + +class SoftAttentionSoftmax(nn.Module): + + def __init__(self, fin: int, fout: int, n_tasks: int): + + super(SoftAttentionSoftmax, self).__init__() + + self.fin, self.fout = fin, fout + self.n_tasks = n_tasks + + self.l = ConditionalLinear(fin, fout, n_tasks) + self.init_parameters() + + def forward(self, x, task_id): + logits = self.l(x, task_id) + rho = torch.softmax(logits, dim=-1) + return rho, logits + + +class BinaryGumbelSoftmax(nn.Module): + + def __init__(self, tau: float = (2. / 3.)): + + super(BinaryGumbelSoftmax, self).__init__() + self.tau = tau + + def forward(self, logits): + + if self.training: + if str(logits.device) == 'cpu': + if not hasattr(self, 'warned') or not self.warned: + print('Warning: GumbelSoftmax may be unstable in CPU (see https://github.com/pytorch/pytorch/issues/101620)') + self.warned = True + h = nn.functional.gumbel_softmax(logits, tau=self.tau, hard=True) + h = h[..., 0] + return h + + h = torch.softmax(logits, -1) + h = 1. - torch.argmax(h, -1) + return h + + +class HardAttentionSoftmax(nn.Module): + + def __init__(self, fin: int, fout: int, n_tasks: int, + tau: float = (2. / 3.)): + + super(HardAttentionSoftmax, self).__init__() + + self.fin, self.fout = fin, fout + self.n_tasks = n_tasks + self.gumbel = BinaryGumbelSoftmax(tau) + + self.l = ConditionalLinear(self.fin, 2 * self.fout, n_tasks) + + def forward(self, x, task_id, flag_stop_grad=None): + assert len(task_id) == len(x) + logits = self.l(x, task_id).view(-1, self.fout, 2) + h = self.gumbel(logits) + return h, logits + + +class SpatialAttn(nn.Module): + + def __init__(self, c: int, n_tasks: int, reduction_rate: int = 4): + + super(SpatialAttn, self).__init__() + + self.c_in = c + self.c_out = self.c_in // reduction_rate + self.n_tasks = n_tasks + self.eps = 1e-6 + + self.act = nn.ReLU() + + self.conv1 = nn.Conv2d(self.c_in, self.c_out, kernel_size=1, stride=1) + self.condbn_1 = ConditionalBatchNorm2d(self.c_out, self.n_tasks) + + self.conv2 = nn.Conv2d(self.c_out, self.c_out, kernel_size=3, stride=1, + dilation=2, padding=2) + self.condbn_2 = ConditionalBatchNorm2d(self.c_out, self.n_tasks) + + self.conv3 = nn.Conv2d(self.c_out, self.c_out, kernel_size=3, stride=1, + dilation=2, padding=2) + self.condbn_3 = ConditionalBatchNorm2d(self.c_out, self.n_tasks) + + self.conv4 = nn.Conv2d(self.c_out, 1, kernel_size=1, stride=1) + self.condbn_4 = ConditionalBatchNorm2d(1, self.n_tasks) + + def forward(self, fm_t: torch.Tensor, tasks_id: torch.Tensor): + + x = fm_t + + x = self.conv1(x) + x = self.condbn_1(x, tasks_id) + x = self.act(x) + + x = self.conv2(x) + x = self.condbn_2(x, tasks_id) + x = self.act(x) + + x = self.conv3(x) + x = self.condbn_3(x, tasks_id) + x = self.act(x) + + x = self.conv4(x) + x = self.condbn_4(x, tasks_id) + + return x + + +class ChannelAttn(nn.Module): + + def __init__(self, c: int, n_tasks: int, reduction_rate: int = 1, + activated_with_softmax: bool = False): + + super(ChannelAttn, self).__init__() + + self.c_in = c + self.c_out = self.c_in // reduction_rate + self.n_tasks = n_tasks + self.eps = 1e-6 + self.activated_with_softmax = activated_with_softmax + + self.l1 = ConditionalLinear(self.c_in, self.c_out, n_tasks, + use_bn=True, act_init='tanh') + self.l2 = ConditionalLinear(self.c_in, self.c_out, n_tasks, + use_bn=True, act_init='sigmoid') + self.lres = ConditionalLinear(self.c_in, self.c_out, n_tasks) # C + + self.attn_act = None + + if activated_with_softmax: + self.attn_act = HardAttentionSoftmax(self.c_out, self.c_in, n_tasks) + + def upsample(self, x, desired_shape): + return x + + def downsample(self, x, *args, **kwargs): + return x + + def compute_distance(self, fm_s, fm_t, rho, + use_overhaul_fd): + + dist = (fm_s - fm_t) ** 2 + + if use_overhaul_fd: + mask = 1.0 - ((fm_s <= fm_t) & (fm_t <= 0.0)).float() + dist = dist * mask + + dist = dist.mean(dim=(2, 3)) + dist = rho * dist + dist = dist.sum(1).mean(0) + + return dist + + def forward(self, fm_t: torch.Tensor, tasks_id: torch.Tensor): + + c = fm_t.shape[1] # b, c, h, w + + x = F.adaptive_avg_pool2d(fm_t, 1).view(-1, c) + + rho_a = self.l1(x, tasks_id) + rho_a = torch.tanh(rho_a) + + rho_b = self.l2(x, tasks_id) + rho_b = torch.sigmoid(rho_b) + + res = self.lres(x, tasks_id) + rho = rho_a * rho_b + res + + if self.activated_with_softmax: + rho, logits = self.attn_act(rho, tasks_id) + return rho, logits + + return rho + + +class DoubleAttn(nn.Module): + + def __init__(self, c: int, n_tasks: int, reduction_rate: int = 4): + + super(DoubleAttn, self).__init__() + + self.c = c + self.n_tasks = n_tasks + + self.channel_attn = ChannelAttn(c, n_tasks, reduction_rate=1, + activated_with_softmax=False) + self.spatial_attn = SpatialAttn(c, n_tasks, reduction_rate=reduction_rate) + + self.weight = nn.Embedding(self.n_tasks, self.c * (self.c * 2)) + self.gumbel = BinaryGumbelSoftmax() + + def init_parameters(self): + self.weight.weight.data.copy_( + get_rnd_weight(self.n_tasks, self.c, self.c * 2)) + + def compute_distance(self, fm_s, fm_t, rho, + use_overhaul_fd): + + dist = (fm_s - fm_t) ** 2 + + if use_overhaul_fd: + mask = 1.0 - ((fm_s <= fm_t) & (fm_t <= 0.0)).float() + dist = dist * mask + + dist = rho * dist + dist = dist.mean(dim=(2, 3)) + dist = dist.sum(1).mean(0) + + return dist + + def upsample(self, x, desired_shape): + _, c, h, w = x.shape + cd, hd, wd = desired_shape + assert cd == c and h <= hd and w <= wd + if h == hd and w == wd: + return x + return F.interpolate(x, (hd, wd)) + + def downsample(self, x, min_resize_threshold=16): + _, c, h, w = x.shape + if h < min_resize_threshold: + return x + return F.interpolate(x, (h // 2, w // 2)) + + def forward(self, fm_t: torch.Tensor, tasks_id: torch.Tensor): + + ch_attn = self.channel_attn(fm_t, tasks_id) + sp_attn = self.spatial_attn(fm_t, tasks_id) + if 'ablation_type' in os.environ: + if os.environ['ablation_type'] == 'chan_only': + sp_attn = torch.ones_like(sp_attn) + elif os.environ['ablation_type'] == 'space_only': + ch_attn = torch.ones_like(ch_attn) + + ch_attn = ch_attn.unsqueeze(2).unsqueeze(3) + x = ch_attn + sp_attn + + weight = self.weight(tasks_id).view(-1, self.c * 2, self.c) + logits = torch.einsum('bji,bixy->bjxy', weight, x) + + _, _, h, w = x.shape + + x = logits.permute((0, 2, 3, 1)) + x = x.view(-1, w, h, self.c, 2) + rho = self.gumbel(x) + + logits = logits.view(-1, self.c, 2, w, h) + rho = rho.permute((0, 3, 1, 2)) + + return rho, logits + + +class StudentTransform(nn.Module): + + def __init__(self, chw: Tuple[int], n_tasks: int, cpt: int): + + super(StudentTransform, self).__init__() + + self.c, self.h, self.w = chw + self.n_tasks = n_tasks + self.cpt = cpt + + self.weight_ofd = nn.Embedding(self.n_tasks, self.c ** 2) + self.condbn_ofd = ConditionalBatchNorm2d(self.c, self.n_tasks) + + self.init_parameters() + + def init_parameters(self): + self.weight_ofd.weight.data.copy_( + get_rnd_weight(self.n_tasks, self.c, self.c, 'relu')) + + def forward(self, fm_s, tasks_id): + weight = self.weight_ofd(tasks_id).view(-1, self.c, self.c) + x = torch.einsum('bji,bixy->bjxy', weight, fm_s) + x = self.condbn_ofd(x, tasks_id) + return x + + +class TeacherTransform(nn.Module): + + def __init__(self): + super(TeacherTransform, self).__init__() + + def forward(self, fm_t, targets): + return torch.max(fm_t, self.get_margin(fm_t)) + + def get_margin(self, fm, eps=1e-6): + mask = (fm < 0.0).float() + masked_fm = fm * mask + margin = masked_fm.sum(dim=(0, 2, 3), keepdim=True) / \ + (mask.sum(dim=(0, 2, 3), keepdim=True) + eps) + return margin + + +class Normalize(nn.Module): + + def __init__(self, eps: float = 1e-6): + super(Normalize, self).__init__() + self.eps = eps + + def forward(self, x): + norm = torch.norm(x, dim=(2, 3), keepdim=True) + return torch.div(x, norm + self.eps) + + +class TeacherForcingLoss(nn.Module): + + def __init__(self, teacher_forcing_or: bool, lambda_forcing_loss: float): + super(TeacherForcingLoss, self).__init__() + self.teacher_forcing_or = teacher_forcing_or + self.lambda_forcing_loss = lambda_forcing_loss + + self.register_buffer('index', torch.LongTensor([0])) + + def forward(self, logits, pred, target, teacher_forcing): + + logits, pred, target = logits[teacher_forcing], pred[teacher_forcing], target[teacher_forcing] + logits = torch.index_select(logits, dim=2, index=self.index).squeeze(2) + teacher_loss = F.binary_cross_entropy_with_logits(logits, target, reduction='none') + + if self.teacher_forcing_or: + mask = (1. - pred) * target + teacher_loss = mask * teacher_loss + + teacher_loss = teacher_loss.mean() if len(teacher_loss) > 0 else .0 + teacher_loss *= self.lambda_forcing_loss + return teacher_loss + + +class MultiTaskAFDAlternative(nn.Module): + + def __init__(self, chw: Tuple[int], n_tasks: int, + cpt: int, clear_grad: bool = False, + use_overhaul_fd: bool = False, + lambda_diverse_loss: float = 0.0, + use_hard_softmax: bool = True, + teacher_forcing_or: bool = False, + lambda_forcing_loss: float = 0.0, + attn_mode: str = 'ch', + resize_maps: bool = False, + min_resize_threshold: int = 16): + + super(MultiTaskAFDAlternative, self).__init__() + assert use_hard_softmax, 'use_hard_softmax must be True' + assert attn_mode in ['ch', 'chsp'], 'wrong value of attn_mode' + + self.c, self.h, self.w = chw + self.n_tasks = n_tasks + self.cpt = cpt + self.clear_grad = clear_grad + self.use_overhaul_fd = use_overhaul_fd + self.teacher_forcing_or = teacher_forcing_or + self.lambda_forcing_loss = lambda_forcing_loss + self.resize_maps = resize_maps + self.min_resize_threshold = min_resize_threshold + + self.attn_fn = None + + if attn_mode == 'ch': + self.attn_fn = ChannelAttn(self.c, n_tasks, activated_with_softmax=True) + elif attn_mode == 'chsp': + self.attn_fn = DoubleAttn(self.c, self.n_tasks) + else: + raise ValueError + + self.teacher_forcing_loss = TeacherForcingLoss(self.teacher_forcing_or, self.lambda_forcing_loss) + self.teacher_transform = TeacherTransform() + self.norm = Normalize() + self.diverse_loss = DiverseLoss(lambda_diverse_loss) + + def get_tasks_id(self, targets): + if 'ablation_type' in os.environ and os.environ['ablation_type'] == 'non_cond': + return torch.zeros_like(targets) + return torch.div(targets, self.cpt, rounding_mode='floor') + + def extend_like(self, teacher_forcing, y): + dest_shape = (-1,) + (1,) * (len(y.shape) - 1) + return teacher_forcing.view(dest_shape).expand(y.shape) + + def forward(self, fm_s, fm_t, targets, teacher_forcing, attention_map): + + assert len(targets) == len(fm_s) == len(fm_t) == len(teacher_forcing) == len(attention_map) + + output_rho, logits = self.attn_fn(fm_t, self.get_tasks_id(targets)) + + rho = output_rho + loss = .0 + + if not self.lambda_forcing_loss > 0.0: + if teacher_forcing.any(): + if self.resize_maps: + attention_map = self.attn_fn.upsample(attention_map, fm_t.shape[1:]) + p1 = torch.max(attention_map, output_rho) if self.teacher_forcing_or else attention_map + rho = torch.where(self.extend_like(teacher_forcing, attention_map), p1, output_rho) + else: + rho = output_rho + elif teacher_forcing.any(): + if 'ablation_type' not in os.environ or os.environ['ablation_type'] != 'no_mask_replay': + if self.resize_maps: + attention_map = self.attn_fn.upsample(attention_map, fm_t.shape[1:]) + loss += self.teacher_forcing_loss(logits, output_rho, + attention_map, teacher_forcing) + if self.use_overhaul_fd: + fm_t = self.teacher_transform(fm_t, targets) + + fm_t, fm_s = self.norm(fm_t), self.norm(fm_s) + + loss += self.attn_fn.compute_distance(fm_s, fm_t, rho, self.use_overhaul_fd) + if 'ablation_type' not in os.environ or os.environ['ablation_type'] != 'no_diverse': + loss += self.diverse_loss(rho[~teacher_forcing]) + + if self.resize_maps: + output_rho = self.attn_fn.downsample(output_rho, min_resize_threshold=self.min_resize_threshold) + + return loss, output_rho diff --git a/models/twf_utils/utils.py b/models/twf_utils/utils.py new file mode 100644 index 00000000..65d2ccd9 --- /dev/null +++ b/models/twf_utils/utils.py @@ -0,0 +1,91 @@ +import torch +import torch.nn.functional as F +from copy import deepcopy +import types + +from models.twf_utils.afd import MultiTaskAFDAlternative + + +@torch.no_grad() +def init_twf(model, dataset): + model.teacher = dataset.get_backbone() + if isinstance(model.net, torch.nn.DataParallel): + st = deepcopy(model.net.module.state_dict()) + else: + st = deepcopy(model.net.state_dict()) + + for k in list(st.keys()): + if 'classifier' in k: + st.pop(k) + unknown, missing = model.teacher.load_state_dict(st, strict=False) + assert len(missing) == 0 + assert len([x for x in unknown if 'classifier' not in x]) == 0 + model.teacher.to(model.device) + + model.net.set_return_prerelu(True) + model.teacher.set_return_prerelu(True) + + # Set new forward for teacher + @torch.no_grad() + def _teacher_forward(self, x): + ret = [] + x = x.to(self.device) + x = self.bn1(self.conv1(x)) + + ret.append(x.clone().detach()) + x = F.relu(x) + if hasattr(self, 'maxpool'): + x = self.maxpool(x) + x = self.layer1(x) + ret.append(self.layer1[-1].prerelu.clone().detach()) + x = self.layer2(x) + ret.append(self.layer2[-1].prerelu.clone().detach()) + x = self.layer3(x) + ret.append(self.layer3[-1].prerelu.clone().detach()) + + x = self.layer4(x) + ret.append(self.layer4[-1].prerelu.clone().detach()) + + return ret + + if isinstance(model.teacher, torch.nn.DataParallel): + model.teacher.module.forward = types.MethodType( + _teacher_forward, model.teacher.module) + else: + model.teacher.forward = types.MethodType( + _teacher_forward, model.teacher) + + # # Initialize classifier + # model.net.classifier = torch.nn.Linear( + # model.net.classifier.in_features, model.num_classes).to(model.device) + + # --- Create adapters --- + # Retrieve features to get shapes + x = next(iter(dataset.train_loader))[0].to(model.device) + _, feats_t = model.net(x, returnt='full') + teacher_input = x + pret_feats_t = model.teacher(teacher_input) + + # Initialize adapters + for i, (x, pret_x) in enumerate(zip(feats_t, pret_feats_t)): + # clear_grad=self.args.detach_skip_grad == 1 + adapt_shape = x.shape[1:] + pret_shape = pret_x.shape[1:] + if len(adapt_shape) == 1: + adapt_shape = (adapt_shape[0], 1, 1) # linear is a cx1x1 + pret_shape = (pret_shape[0], 1, 1) + + setattr(model.net, f"adapter_{i+1}", MultiTaskAFDAlternative( + adapt_shape, model.N_TASKS, model.cpt, clear_grad=False, + teacher_forcing_or=False, + lambda_forcing_loss=model.args.lambda_fp_replay, + use_overhaul_fd=True, use_hard_softmax=True, + lambda_diverse_loss=model.args.lambda_diverse_loss, + attn_mode="chsp", + min_resize_threshold=model.args.min_resize_threshold, + resize_maps=model.args.resize_maps == 1, + ).to(model.device)) + + # Freeze teacher + for p in model.teacher.parameters(): + p.requires_grad = False diff --git a/models/utils/__init__.py b/models/utils/__init__.py index e69de29b..1efe5d6b 100644 --- a/models/utils/__init__.py +++ b/models/utils/__init__.py @@ -0,0 +1,3 @@ +""" +Utility functions for models. +""" diff --git a/models/utils/continual_model.py b/models/utils/continual_model.py index a989dc65..c8a897fc 100644 --- a/models/utils/continual_model.py +++ b/models/utils/continual_model.py @@ -1,19 +1,44 @@ +""" +This is the base class for all models. It provides some useful methods and defines the interface of the models. + +The `observe` method is the most important one: it is called at each training iteration and it is responsible for computing the loss and updating the model's parameters. + +The `begin_task` and `end_task` methods are called before and after each task, respectively. + +The `get_parser` method returns the parser of the model. Additional model-specific hyper-parameters can be added by overriding this method. + +The `get_debug_iters` method returns the number of iterations to be used for debugging. Default: 3. + +The `get_optimizer` method returns the optimizer to be used for training. Default: SGD. + +The `load_buffer` method is called when a buffer is loaded. Default: do nothing. + +The `meta_observe`, `meta_begin_task` and `meta_end_task` methods are wrappers for `observe`, `begin_task` and `end_task` methods, respectively. They take care of updating the internal counters and of logging to wandb if installed. + +The `autolog_wandb` method is used to automatically log to wandb all variables starting with "_wandb_" or "loss" in the observe function. It is called by `meta_observe` if wandb is installed. It can be overridden to add custom logging. +""" + # Copyright 2020-present, Pietro Buzzega, Matteo Boschini, Angelo Porrello, Davide Abati, Simone Calderara. # All rights reserved. # This source code is licensed under the license found in the # LICENSE file in the root directory of this source tree. +from abc import abstractmethod import sys -from argparse import Namespace +from argparse import ArgumentParser, Namespace from contextlib import suppress from typing import List import torch import torch.nn as nn -from torch.optim import SGD +import torch.optim as optim +from datasets import get_dataset +from datasets.utils.continual_dataset import ContinualDataset from utils.conf import get_device +from utils.kornia_utils import to_kornia_transform from utils.magic import persistent_locals +from torchvision import transforms with suppress(ImportError): import wandb @@ -25,55 +50,289 @@ class ContinualModel(nn.Module): """ NAME: str COMPATIBILITY: List[str] + AVAIL_OPTIMS = ['sgd', 'adam', 'adamw'] + + @staticmethod + def get_parser() -> Namespace: + """ + Returns the parser of the model. + + Additional model-specific hyper-parameters can be added by overriding this method. + + Returns: + the parser of the model + """ + parser = ArgumentParser(description='Base CL model') + return parser + + @property + def current_task(self): + """ + Returns the index of current task. + """ + return self._current_task + + @property + def n_classes_current_task(self): + """ + Returns the number of classes in the current task. + Returns -1 if task has not been initialized yet. + """ + if hasattr(self, '_n_classes_current_task'): + return self._n_classes_current_task + else: + return -1 + + @property + def n_seen_classes(self): + """ + Returns the number of classes seen so far. + Returns -1 if task has not been initialized yet. + """ + if hasattr(self, '_n_seen_classes'): + return self._n_seen_classes + else: + return -1 + + @property + def n_remaining_classes(self): + """ + Returns the number of classes remaining to be seen. + Returns -1 if task has not been initialized yet. + """ + if hasattr(self, '_n_remaining_classes'): + return self._n_remaining_classes + else: + return -1 + + @property + def n_past_classes(self): + """ + Returns the number of classes seen up to the PAST task. + Returns -1 if task has not been initialized yet. + """ + if hasattr(self, '_n_past_classes'): + return self._n_past_classes + else: + return -1 + + @property + def cpt(self): + """ + Returns the raw number of classes per task. + Warning: return value might be either an integer or a list of integers. + """ + return self._cpt + + @cpt.setter + def cpt(self, value): + """ + Sets the number of classes per task. + """ + self._cpt = value def __init__(self, backbone: nn.Module, loss: nn.Module, args: Namespace, transform: nn.Module) -> None: super(ContinualModel, self).__init__() - + print("Using {} as backbone".format(backbone.__class__.__name__)) self.net = backbone self.loss = loss self.args = args self.transform = transform - self.opt = SGD(self.net.parameters(), lr=self.args.lr) + self.dataset = get_dataset(self.args) + self.N_CLASSES = self.dataset.N_CLASSES + self.num_classes = self.N_CLASSES + self.N_TASKS = self.dataset.N_TASKS + self.n_tasks = self.N_TASKS + self.SETTING = self.dataset.SETTING + self._cpt = self.dataset.N_CLASSES_PER_TASK + self._current_task = 0 + + try: + self.weak_transform = to_kornia_transform(transform.transforms[-1].transforms) + self.normalization_transform = to_kornia_transform(self.dataset.get_normalization_transform()) + except BaseException: + print("Warning: could not initialize kornia transforms.") + self.weak_transform = transforms.Compose([transforms.ToPILImage(), self.transform]) + self.normalization_transform = transforms.Compose([transforms.ToPILImage(), self.dataset.TEST_TRANSFORM]) if hasattr( + self.dataset, 'TEST_TRANSFORM') else transforms.Compose([transforms.ToPILImage(), transforms.ToTensor(), self.dataset.get_normalization_transform()]) + + if self.net is not None: + self.opt = self.get_optimizer() + else: + print("Warning: no default model for this dataset. You will have to specify the optimizer yourself.") + self.opt = None self.device = get_device() if not self.NAME or not self.COMPATIBILITY: raise NotImplementedError('Please specify the name and the compatibility of the model.') + if self.args.label_perc != 1 and 'cssl' not in self.COMPATIBILITY: + print('WARNING: label_perc is not explicitly supported by this model -> training may break') + + def to(self, device): + """ + Captures the device to be used for training. + """ + self.device = device + return super().to(device) + + def load_buffer(self, buffer): + """ + Default way to handle load buffer. + """ + assert buffer.examples.shape[0] == self.args.buffer_size, "Buffer size mismatch. Expected {} got {}".format( + self.args.buffer_size, buffer.examples.shape[0]) + self.buffer = buffer + + def get_parameters(self): + """ + Returns the parameters of the model. + """ + return self.net.parameters() + + def get_optimizer(self): + # check if optimizer is in torch.optim + supported_optims = {optim_name.lower(): optim_name for optim_name in dir(optim) if optim_name.lower() in self.AVAIL_OPTIMS} + opt = None + if self.args.optimizer.lower() in supported_optims: + if self.args.optimizer.lower() == 'sgd': + opt = getattr(optim, supported_optims[self.args.optimizer.lower()])(self.get_parameters(), lr=self.args.lr, + weight_decay=self.args.optim_wd, + momentum=self.args.optim_mom, + nesterov=self.args.optim_nesterov == 1) + elif self.args.optimizer.lower() == 'adam' or self.args.optimizer.lower() == 'adamw': + opt = getattr(optim, supported_optims[self.args.optimizer.lower()])(self.get_parameters(), lr=self.args.lr, + weight_decay=self.args.optim_wd) + + if opt is None: + raise ValueError('Unknown optimizer: {}'.format(self.args.optimizer)) + return opt + + def _compute_offsets(self, task): + cpt = self.N_CLASSES // self.N_TASKS + offset1 = task * cpt + offset2 = (task + 1) * cpt + return offset1, offset2 + + def get_debug_iters(self): + """ + Returns the number of iterations to be used for debugging. + Default: 3 + """ + return 5 + + def begin_task(self, dataset: ContinualDataset) -> None: + """ + Prepares the model for the current task. + Executed before each task. + """ + pass + + def end_task(self, dataset: ContinualDataset) -> None: + """ + Prepares the model for the next task. + Executed after each task. + """ + pass + def forward(self, x: torch.Tensor) -> torch.Tensor: """ Computes a forward pass. - :param x: batch of inputs - :param task_label: some models require the task label - :return: the result of the computation + + Args: + x: batch of inputs + task_label: some models require the task label + + Returns: + the result of the computation """ return self.net(x) def meta_observe(self, *args, **kwargs): + """ + Wrapper for `observe` method. + + Takes care of dropping unlabeled data if not supported by the model and of logging to wandb if installed. + + Args: + inputs: batch of inputs + labels: batch of labels + not_aug_inputs: batch of inputs without augmentation + kwargs: some methods could require additional parameters + + Returns: + the value of the loss function + """ + + if 'cssl' not in self.COMPATIBILITY: # drop unlabeled data if not supported + labeled_mask = args[1] != -1 + if labeled_mask.sum() == 0: + return 0 + args = [arg[labeled_mask] if isinstance(arg, torch.Tensor) and arg.shape[0] == args[0].shape[0] else arg for arg in args] if 'wandb' in sys.modules and not self.args.nowand: pl = persistent_locals(self.observe) ret = pl(*args, **kwargs) self.autolog_wandb(pl.locals) else: ret = self.observe(*args, **kwargs) + self.task_iteration += 1 return ret + def meta_begin_task(self, dataset): + """ + Wrapper for `begin_task` method. + + Takes care of updating the internal counters. + + Args: + dataset: the current task's dataset + """ + self.task_iteration = 0 + self._n_classes_current_task = self._cpt if isinstance(self._cpt, int) else self._cpt[self._current_task] + self._n_seen_classes = self._cpt * (self._current_task + 1) if isinstance(self._cpt, int) else sum(self._cpt[:self._current_task + 1]) + self._n_remaining_classes = self.N_CLASSES - self._n_seen_classes + self._n_past_classes = self._cpt * self._current_task if isinstance(self._cpt, int) else sum(self._cpt[:self._current_task]) + self.begin_task(dataset) + + def meta_end_task(self, dataset): + """ + Wrapper for `end_task` method. + + Takes care of updating the internal counters. + + Args: + dataset: the current task's dataset + """ + + self.end_task(dataset) + self._current_task += 1 + + @abstractmethod def observe(self, inputs: torch.Tensor, labels: torch.Tensor, - not_aug_inputs: torch.Tensor) -> float: + not_aug_inputs: torch.Tensor, epoch: int = None) -> float: """ Compute a training step over a given batch of examples. - :param inputs: batch of examples - :param labels: ground-truth labels - :param kwargs: some methods could require additional parameters - :return: the value of the loss function + + Args: + inputs: batch of examples + labels: ground-truth labels + kwargs: some methods could require additional parameters + + Returns: + the value of the loss function """ raise NotImplementedError - def autolog_wandb(self, locals): + def autolog_wandb(self, locals, extra=None): """ All variables starting with "_wandb_" or "loss" in the observe function are automatically logged to wandb upon return if wandb is installed. """ if not self.args.nowand and not self.args.debug_mode: - wandb.log({k: (v.item() if isinstance(v, torch.Tensor) and v.dim() == 0 else v) - for k, v in locals.items() if k.startswith('_wandb_') or k.startswith('loss')}) + tmp = {k: (v.item() if isinstance(v, torch.Tensor) and v.dim() == 0 else v) + for k, v in locals.items() if k.startswith('_wandb_') or 'loss' in k.lower()} + tmp.update(extra or {}) + if hasattr(self, 'opt'): + tmp['lr'] = self.opt.param_groups[0]['lr'] + wandb.log(tmp) diff --git a/models/utils/lider_model.py b/models/utils/lider_model.py new file mode 100644 index 00000000..bcfe9179 --- /dev/null +++ b/models/utils/lider_model.py @@ -0,0 +1,223 @@ +""" +Base class for all models that use the Lipschitz regularization in LiDER (https://arxiv.org/pdf/2210.06443.pdf). +""" + +import torch +import torch.nn.functional as F +from tqdm import tqdm +from typing import List +from models.utils.continual_model import ContinualModel + + +def add_lipschitz_args(parser): + # BUFFER LIP LOSS + parser.add_argument('--alpha_lip_lambda', type=float, required=False, default=0, + help='Lambda parameter for lipschitz minimization loss on buffer samples') + + # BUDGET LIP LOSS + parser.add_argument('--beta_lip_lambda', type=float, required=False, default=0, + help='Lambda parameter for lipschitz budget distribution loss') + + # Extra + parser.add_argument('--headless_init_act', type=str, choices=["relu", "lrelu"], default="relu") + parser.add_argument('--grad_iter_step', type=int, required=False, default=-2, + help='Step from which to enable gradient computation.') + + +class LiderOptimizer(ContinualModel): + """ + Superclass for all models that use the Lipschitz regularization in LiDER (https://arxiv.org/pdf/2210.06443.pdf). + """ + + def __init__(self, backbone, loss, args, transform): + super().__init__(backbone, loss, args, transform) + + if self.args.alpha_lip_lambda == 0 and self.args.beta_lip_lambda == 0: + print("WARNING: LiDER is enabled but both `alpha_lip_lambda` and `beta_lip_lambda` are 0. LiDER will not be used.") + + def transmitting_matrix(self, fm1: torch.Tensor, fm2: torch.Tensor): + if fm1.size(2) > fm2.size(2): + fm1 = F.adaptive_avg_pool2d(fm1, (fm2.size(-2), fm2.size(-1))) + + fm1 = fm1.view(fm1.size(0), fm1.size(1), -1) + fm2 = fm2.view(fm2.size(0), fm2.size(1), -1).transpose(1, 2) + + fsp = torch.bmm(fm1, fm2) / fm1.size(2) + return fsp + + def compute_transition_matrix(self, front: torch.Tensor, latter: torch.Tensor): + return torch.bmm(self.transmitting_matrix(front, latter), self.transmitting_matrix(front, latter).transpose(2, 1)) + + def top_eigenvalue(self, K: torch.Tensor, n_power_iterations=10): + """ + Compute the top eigenvalue of a matrix K using the power iteration method. + Stop gradient propagation after `n_power_iterations`. + + Args: + K (torch.Tensor): The matrix to compute the top eigenvalue of. + n_power_iterations (int): The number of power iterations to run. If positive, compute gradient only for the first `n_power_iterations` iterations. If negative, compute gradient only for the last `n_power_iterations` iterations. + + Returns: + torch.Tensor: The top eigenvalue of K. + """ + if self.args.grad_iter_step < 0: + start_grad_it = n_power_iterations + self.args.grad_iter_step + 1 + else: + start_grad_it = self.args.grad_iter_step + assert start_grad_it >= 0 and start_grad_it <= n_power_iterations + + v = torch.rand(K.shape[0], K.shape[1], 1).to(K.device, dtype=K.dtype) + for itt in range(n_power_iterations): + with torch.set_grad_enabled(itt >= start_grad_it): + m = torch.bmm(K, v) + n = (torch.norm(m, dim=1).unsqueeze(1) + torch.finfo(torch.float32).eps) + v = m / n + + top_eigenvalue = torch.sqrt(n / (torch.norm(v, dim=1).unsqueeze(1) + torch.finfo(torch.float32).eps)) + return top_eigenvalue + + def get_layer_lip_coeffs(self, features_a: torch.Tensor, features_b: torch.Tensor) -> torch.Tensor: + """ + Compute the Lipschitz coefficient of a layer given its batches of input and output features. + Estimates the Lipschitz coefficient with https://arxiv.org/pdf/2108.12905.pdf. + + Args: + features_a (torch.Tensor): The batch of input features. + features_b (torch.Tensor): The batch of output features. + + Returns: + torch.Tensor: The Lipschitz coefficient of the layer. + """ + features_a, features_b = features_a.double(), features_b.double() + features_a, features_b = features_a / self.get_norm(features_a), features_b / self.get_norm(features_b) + + TM_s = self.compute_transition_matrix(features_a, features_b) + L = self.top_eigenvalue(K=TM_s) + return L + + def get_feature_lip_coeffs(self, features: List[torch.Tensor]) -> List[torch.Tensor]: + """ + Compute the Lipschitz coefficient for all the layers of a network given a list of batches of features. + The features are assumed to be ordered from the input to the output of the network. + + Args: + features (List[torch.Tensor]): The list features of each layer. + + Returns: + List[torch.Tensor]: The list of Lipschitz coefficients for each layer. + """ + N = len(features) - 1 + B = len(features[0]) + + lip_values = [torch.zeros(B, device=self.device, dtype=features[0].dtype)] * N + + for i in range(N): + fma, fmb = features[i], features[i + 1] + fmb = F.adaptive_avg_pool1d(fmb.reshape(*fmb.shape[:2], -1).permute(0, 2, 1), fma.shape[1]).permute(0, 2, 1).reshape(fmb.shape[0], -1, *fmb.shape[2:]) + L = self.get_layer_lip_coeffs(fma, fmb) + + L = L.reshape(B) + + lip_values[i] = L + return lip_values + + @torch.no_grad() + def init_net(self, dataset): + """ + Compute the target Lipschitz coefficients for the network and initialize the network's Lipschitz coefficients to match them. + + Args: + dataset (ContinualDataset): The dataset to use for the computation. + """ + was_training = self.net.training + self.net.eval() + + all_lips = [] + for i, (inputs, labels, _) in enumerate(tqdm(dataset.train_loader, desc="Computing target L budget")): + if self.args.debug_mode and i > self.get_debug_iters(): + continue + + inputs, labels = inputs.to(self.device), labels.to(self.device) + + if len(inputs.shape) == 5: + B, n, C, H, W = inputs.shape + inputs = inputs.view(B * n, C, H, W) + + _, partial_features = self.net(inputs, returnt='full') + + lip_inputs = [inputs] + partial_features + + lip_values = self.get_feature_lip_coeffs(lip_inputs) + # (B, F) + lip_values = torch.stack(lip_values, dim=1) + + all_lips.append(lip_values) + + budget_lip = torch.cat(all_lips, dim=0).mean(0).detach().clone() + + inp = next(iter(dataset.train_loader))[0] + _, teacher_feats = self.net(inp.to(self.device), returnt='full') + + self.net.lip_coeffs = torch.autograd.Variable(torch.randn(len(teacher_feats), dtype=torch.float), requires_grad=True).to(self.device) + self.net.lip_coeffs.data = budget_lip + self.opt = self.get_optimizer() + if hasattr(self, 'scheduler'): + self.scheduler = self.dataset.get_scheduler() + + self.net.train(was_training) + + def get_norm(self, t: torch.Tensor): + """ + Compute the norm of a tensor. + + Args: + t (torch.Tensor): The tensor. + + Returns: + torch.Tensor: The norm of the tensor. + """ + return torch.norm(t, dim=1, keepdim=True) + torch.finfo(torch.float32).eps + + def minimization_lip_loss(self, features: List[torch.Tensor]) -> torch.Tensor: + """ + Compute the Lipschitz minimization loss for a batch of features (eq. 8). + + Args: + features (List[torch.Tensor]): The list features of each layer. The features are assumed to be ordered from the input to the output of the network. + + Returns: + torch.Tensor: The Lipschitz minimization loss. + """ + lip_values = self.get_feature_lip_coeffs(features) + # (B, F) + lip_values = torch.stack(lip_values, dim=1) + + return lip_values.mean() + + def dynamic_budget_lip_loss(self, features: List[torch.Tensor]) -> torch.Tensor: + """ + Compute the dynamic budget Lipschitz loss for a batch of features (eq. 7). + + Args: + features (List[torch.Tensor]): The list features of each layer. The features are assumed to be ordered from the input to the output of the network. + + Returns: + torch.Tensor: The dynamic budget Lipschitz loss. + """ + loss = 0 + lip_values = self.get_feature_lip_coeffs(features) + # (B, F) + lip_values = torch.stack(lip_values, dim=1) + + if self.args.headless_init_act == "relu": + tgt = F.relu(self.net.lip_coeffs[:len(lip_values[0])]) + elif self.args.headless_init_act == "lrelu": + tgt = F.leaky_relu(self.net.lip_coeffs[:len(lip_values[0])]) + else: + raise NotImplementedError + + tgt = tgt.unsqueeze(0).expand(lip_values.shape) + + loss += F.l1_loss(lip_values, tgt) + + return loss diff --git a/models/xder.py b/models/xder.py index 3d0531e9..76323553 100644 --- a/models/xder.py +++ b/models/xder.py @@ -1,137 +1,131 @@ -# Copyright 2022-present, Lorenzo Bonicelli, Pietro Buzzega, Matteo Boschini, Angelo Porrello, Simone Calderara. +# Copyright 2020-present, Pietro Buzzega, Matteo Boschini, Angelo Porrello, Davide Abati, Simone Calderara. # All rights reserved. # This source code is licensed under the license found in the # LICENSE file in the root directory of this source tree. -import torch -# from utils.spkdloss import SPKDLoss +from utils.spkdloss import SPKDLoss from datasets import get_dataset from torch.nn import functional as F - +from utils.args import * +import torch from models.utils.continual_model import ContinualModel -from utils.args import add_management_args, add_experiment_args, add_rehearsal_args, ArgumentParser -from utils.augmentations import strong_aug +from utils.augmentations import * from utils.batch_norm import bn_track_stats -from utils.buffer import Buffer from utils.simclrloss import SupConLoss -def get_parser() -> ArgumentParser: - parser = ArgumentParser(description='Continual learning via' - ' Dark Experience Replay.') - add_management_args(parser) - add_experiment_args(parser) - add_rehearsal_args(parser) - parser.add_argument('--alpha', type=float, required=True, help='Penalty weight.') - parser.add_argument('--beta', type=float, required=True, help='Penalty weight.') +class XDerV2(ContinualModel): + NAME = 'xder' + COMPATIBILITY = ['class-il', 'domain-il', 'task-il', 'general-continual'] - parser.add_argument('--gamma', type=float, default=0.85) - parser.add_argument('--lambd', type=float, default=0.1) - parser.add_argument('--eta', type=float, default=0.1) - parser.add_argument('--m', type=float, default=0.3) + @staticmethod + def get_parser() -> ArgumentParser: + parser = ArgumentParser(description='Continual learning via' + ' eXtended Dark Experience Replay.') + add_rehearsal_args(parser) + parser.add_argument('--alpha', type=float, required=True, help='Penalty weight.') + parser.add_argument('--beta', type=float, required=True, help='Penalty weight.') - parser.add_argument('--simclr_temp', type=float, default=5) - parser.add_argument('--simclr_batch_size', type=int, default=64) - parser.add_argument('--simclr_num_aug', type=int, default=2) + parser.add_argument('--simclr_temp', type=float, default=5, help='Temperature for SimCLR loss') + parser.add_argument('--gamma', type=float, default=0.85, help='Weight for logit update') + parser.add_argument('--simclr_batch_size', type=int, default=64, help='Batch size for SimCLR loss') + parser.add_argument('--simclr_num_aug', type=int, default=4, help='Number of augmentations for SimCLR loss') + parser.add_argument('--lambd', type=float, default=0.05, help='Weight for consistency loss') + parser.add_argument('--constr_eta', type=float, default=0.1, help='Regularization weight for past/future constraints') + parser.add_argument('--constr_margin', type=float, default=0.3, help='Margin for past/future constraints') - return parser + parser.add_argument('--dp_weight', type=float, default=0, help='Weight for distance preserving loss') + parser.add_argument('--past_constraint', type=int, default=1, choices=[0, 1], help='Enable past constraint') + parser.add_argument('--future_constraint', type=int, default=1, choices=[0, 1], help='Enable future constraint') + parser.add_argument('--align_bn', type=int, default=0, choices=[0, 1], help='Use BatchNorm alignment') -class XDer(ContinualModel): - NAME = 'xder' - COMPATIBILITY = ['class-il', 'task-il'] + return parser def __init__(self, backbone, loss, args, transform): - super(XDer, self).__init__(backbone, loss, args, transform) - self.buffer = Buffer(self.args.buffer_size, self.device) - self.cpt = get_dataset(args).N_CLASSES_PER_TASK - self.tasks = get_dataset(args).N_TASKS - self.task = 0 - self.update_counter = torch.zeros(self.args.buffer_size).to(self.device) - - denorm = get_dataset(args).get_denormalization_transform() + super().__init__(backbone, loss, args, transform) + from utils.buffer import Buffer + self.buffer = Buffer(self.args.buffer_size) + self.update_counter = torch.zeros(self.args.buffer_size) + + denorm = self.dataset.get_denormalization_transform() self.dataset_mean, self.dataset_std = denorm.mean, denorm.std - self.dataset_shape = get_dataset(args).get_data_loaders()[0].dataset.data.shape[2] + self.dataset_shape = self.dataset.SIZE self.gpu_augmentation = strong_aug(self.dataset_shape, self.dataset_mean, self.dataset_std) self.simclr_lss = SupConLoss(temperature=self.args.simclr_temp, base_temperature=self.args.simclr_temp, reduction='sum') - if not hasattr(self.args, 'start_from'): - self.args.start_from = 0 + self.spkdloss = SPKDLoss('batchmean') def end_task(self, dataset): tng = self.training self.train() - if self.args.start_from is None or self.task >= self.args.start_from: - # Reduce Memory Buffer - if self.task > 0: - examples_per_class = self.args.buffer_size // ((self.task + 1) * self.cpt) - buf_x, buf_lab, buf_log, buf_tl = self.buffer.get_all_data() - self.buffer.empty() - for tl in buf_lab.unique(): - idx = tl == buf_lab - ex, lab, log, tasklab = buf_x[idx], buf_lab[idx], buf_log[idx], buf_tl[idx] - first = min(ex.shape[0], examples_per_class) - self.buffer.add_data( - examples=ex[:first], - labels=lab[:first], - logits=log[:first], - task_labels=tasklab[:first] - ) - - # Add new task data - examples_last_task = self.buffer.buffer_size - self.buffer.num_seen_examples - examples_per_class = examples_last_task // self.cpt - ce = torch.tensor([examples_per_class] * self.cpt).int() - ce[torch.randperm(self.cpt)[:examples_last_task - (examples_per_class * self.cpt)]] += 1 + # fdr reduce coreset + if self.current_task > 0: + examples_per_class = self.args.buffer_size // ((self.current_task + 1) * self.cpt) + buf_x, buf_lab, buf_log, buf_tl = self.buffer.get_all_data() + self.buffer.empty() + for tl in buf_lab.unique(): + idx = tl == buf_lab + ex, lab, log, tasklab = buf_x[idx], buf_lab[idx], buf_log[idx], buf_tl[idx] + first = min(ex.shape[0], examples_per_class) + self.buffer.add_data( + examples=ex[:first], + labels=lab[:first], + logits=log[:first], + task_labels=tasklab[:first] + ) + + # fdr add new task + examples_last_task = self.buffer.buffer_size - self.buffer.num_seen_examples + examples_per_class = examples_last_task // self.cpt + ce = torch.tensor([examples_per_class] * self.cpt).int() + ce[torch.randperm(self.cpt)[:examples_last_task - (examples_per_class * self.cpt)]] += 1 + + with torch.no_grad(): + with bn_track_stats(self, False): + for data in dataset.train_loader: + inputs, labels, not_aug_inputs = data + inputs = inputs.to(self.device) + not_aug_inputs = not_aug_inputs.to(self.device) + outputs = self.net(inputs) + if all(ce == 0): + break + + # update past + if self.current_task > 0: + outputs = self.update_logits(outputs, outputs, labels, 0, self.current_task) + + flags = torch.zeros(len(inputs)).bool() + for j in range(len(flags)): + if ce[labels[j] % self.cpt] > 0: + flags[j] = True + ce[labels[j] % self.cpt] -= 1 + + self.buffer.add_data(examples=not_aug_inputs[flags], + labels=labels[flags], + logits=outputs.data[flags], + task_labels=(torch.ones(self.args.batch_size) * self.current_task)[flags]) + + # update future past + buf_idx, buf_inputs, buf_labels, buf_logits, _ = self.buffer.get_data(self.buffer.buffer_size, + transform=self.transform, return_index=True, device=self.device) + + buf_outputs = [] + while len(buf_inputs): + buf_outputs.append(self.net(buf_inputs[:self.args.batch_size])) + buf_inputs = buf_inputs[self.args.batch_size:] + buf_outputs = torch.cat(buf_outputs) + + chosen = ((buf_labels // self.cpt) < self.current_task).to(self.buffer.device) - with torch.no_grad(): - with bn_track_stats(self, False): - if self.args.start_from is None or self.args.start_from <= self.task: - for data in dataset.train_loader: - inputs, labels, not_aug_inputs = data - inputs = inputs.to(self.device) - not_aug_inputs = not_aug_inputs.to(self.device) - outputs = self.net(inputs) - if all(ce == 0): - break - - # Update past logits - if self.task > 0: - outputs = self.update_logits(outputs, outputs, labels, 0, self.task) - - flags = torch.zeros(len(inputs)).bool() - for j in range(len(flags)): - if ce[labels[j] % self.cpt] > 0: - flags[j] = True - ce[labels[j] % self.cpt] -= 1 - - self.buffer.add_data(examples=not_aug_inputs[flags], - labels=labels[flags], - logits=outputs.data[flags], - task_labels=(torch.ones(len(not_aug_inputs)) * - (self.task))[flags]) - - # Update future past logits - buf_idx, buf_inputs, buf_labels, buf_logits, _ = self.buffer.get_data(self.buffer.buffer_size, - transform=self.transform, return_index=True) - - buf_outputs = [] - while len(buf_inputs): - buf_outputs.append(self.net(buf_inputs[:self.args.batch_size])) - buf_inputs = buf_inputs[self.args.batch_size:] - buf_outputs = torch.cat(buf_outputs) - - chosen = (buf_labels // self.cpt) < self.task - - if chosen.any(): - to_transplant = self.update_logits(buf_logits[chosen], buf_outputs[chosen], buf_labels[chosen], self.task, self.tasks - self.task) - self.buffer.logits[buf_idx[chosen], :] = to_transplant.to(self.buffer.device) - self.buffer.task_labels[buf_idx[chosen]] = self.task - - self.task += 1 - self.update_counter = torch.zeros(self.args.buffer_size).to(self.device) + if chosen.any(): + to_transplant = self.update_logits(buf_logits[chosen], buf_outputs[chosen], buf_labels[chosen], self.current_task, self.n_tasks - self.current_task) + self.buffer.logits[buf_idx[chosen], :] = to_transplant.to(self.buffer.device) + self.buffer.task_labels[buf_idx[chosen]] = self.current_task + + self.update_counter = torch.zeros(self.args.buffer_size) self.train(tng) @@ -149,32 +143,41 @@ def update_logits(self, old, new, gt, task_start, n_tasks=1): return old - def observe(self, inputs, labels, not_aug_inputs): + def observe(self, inputs, labels, not_aug_inputs, epoch=None): self.opt.zero_grad() - outputs = self.net(inputs).float() + with bn_track_stats(self, self.args.align_bn == 0 or self.current_task == 0): + outputs = self.net(inputs) # Present head - loss_stream = self.loss(outputs[:, self.task * self.cpt:(self.task + 1) * self.cpt], labels % self.cpt) + loss_stream = self.loss(outputs[:, self.n_past_classes:self.n_seen_classes], labels - self.n_past_classes) loss_der, loss_derpp = torch.tensor(0.), torch.tensor(0.) if not self.buffer.is_empty(): # Distillation Replay Loss (all heads) buf_idx1, buf_inputs1, buf_labels1, buf_logits1, buf_tl1 = self.buffer.get_data( - self.args.minibatch_size, transform=self.transform, return_index=True) - buf_outputs1 = self.net(buf_inputs1).float() + self.args.minibatch_size, transform=self.transform, return_index=True, device=self.device) + + if self.args.align_bn: + buf_inputs1 = torch.cat([buf_inputs1, inputs[:self.args.minibatch_size // self.current_task]]) + + buf_outputs1 = self.net(buf_inputs1) + + if self.args.align_bn: + buf_inputs1 = buf_inputs1[:self.args.minibatch_size] + buf_outputs1 = buf_outputs1[:self.args.minibatch_size] - buf_logits1 = buf_logits1.type(buf_outputs1.dtype) mse = F.mse_loss(buf_outputs1, buf_logits1, reduction='none') loss_der = self.args.alpha * mse.mean() # Label Replay Loss (past heads) buf_idx2, buf_inputs2, buf_labels2, buf_logits2, buf_tl2 = self.buffer.get_data( - self.args.minibatch_size, transform=self.transform, return_index=True) - buf_outputs2 = self.net(buf_inputs2).float() + self.args.minibatch_size, transform=self.transform, return_index=True, device=self.device) + with bn_track_stats(self, self.args.align_bn == 0): + buf_outputs2 = self.net(buf_inputs2) - buf_ce = self.loss(buf_outputs2[:, :(self.task) * self.cpt], buf_labels2) + buf_ce = self.loss(buf_outputs2[:, :self.n_past_classes], buf_labels2) loss_derpp = self.args.beta * buf_ce # Merge Batches & Remove Duplicates @@ -184,10 +187,12 @@ def observe(self, inputs, labels, not_aug_inputs): buf_logits = torch.cat([buf_logits1, buf_logits2]) buf_outputs = torch.cat([buf_outputs1, buf_outputs2]) buf_tl = torch.cat([buf_tl1, buf_tl2]) - eyey = torch.eye(self.buffer.buffer_size).to(self.device)[buf_idx] + + # remove dupulicates + eyey = torch.eye(self.buffer.buffer_size).to(buf_idx.device)[buf_idx] umask = (eyey * eyey.cumsum(0)).sum(1) < 2 - buf_idx = buf_idx[umask] + buf_idx = buf_idx[umask].to(self.buffer.device) buf_inputs = buf_inputs[umask] buf_labels = buf_labels[umask] buf_logits = buf_logits[umask] @@ -196,79 +201,91 @@ def observe(self, inputs, labels, not_aug_inputs): # Update Future Past Logits with torch.no_grad(): - chosen = (buf_labels // self.cpt) < self.task - self.update_counter[buf_idx[chosen]] += 1 + chosen = ((buf_labels // self.cpt) < self.current_task).to(self.buffer.device) c = chosen.clone() + self.update_counter[buf_idx[chosen]] += 1 chosen[c] = torch.rand_like(chosen[c].float()) * self.update_counter[buf_idx[c]] < 1 if chosen.any(): - assert self.task > 0 - to_transplant = self.update_logits(buf_logits[chosen], buf_outputs[chosen], buf_labels[chosen], self.task, self.tasks - self.task) + assert self.current_task > 0 + to_transplant = self.update_logits(buf_logits[chosen], buf_outputs[chosen], buf_labels[chosen], self.current_task, self.n_tasks - self.current_task) self.buffer.logits[buf_idx[chosen], :] = to_transplant.to(self.buffer.device) - self.buffer.task_labels[buf_idx[chosen]] = self.task + self.buffer.task_labels[buf_idx[chosen]] = self.current_task # Consistency Loss (future heads) - loss_cons = torch.tensor(0.) - loss_cons = loss_cons.type(loss_stream.dtype) - if self.task < self.tasks - 1: + loss_cons, loss_dp = torch.tensor(0.), torch.tensor(0.) + loss_constr_futu = torch.tensor(0.) + if self.current_task < self.n_tasks - 1: - scl_labels = labels[:self.args.simclr_batch_size] - scl_na_inputs = not_aug_inputs[:self.args.simclr_batch_size] + scl_labels = labels # [:self.args.simclr_batch_size] + scl_na_inputs = not_aug_inputs # [:self.args.simclr_batch_size] if not self.buffer.is_empty(): - buf_idxscl, buf_na_inputsscl, buf_labelsscl, buf_logitsscl, _ = self.buffer.get_data(self.args.simclr_batch_size, transform=None, return_index=True) + buf_idxscl, buf_na_inputsscl, buf_labelsscl, buf_logitsscl, _ = self.buffer.get_data(self.args.simclr_batch_size, + transform=None, return_index=True, device=self.device) scl_na_inputs = torch.cat([buf_na_inputsscl, scl_na_inputs]) scl_labels = torch.cat([buf_labelsscl, scl_labels]) with torch.no_grad(): scl_inputs = self.gpu_augmentation(scl_na_inputs.repeat_interleave(self.args.simclr_num_aug, 0)).to(self.device) - with bn_track_stats(self, False): - scl_outputs = self.net(scl_inputs).float() + with bn_track_stats(self, self.args.align_bn == 0): + scl_outputs = self.net(scl_inputs) - scl_featuresFull = scl_outputs.reshape(-1, self.args.simclr_num_aug, scl_outputs.shape[-1]) # [N, n_aug, 100] + scl_featuresFull = scl_outputs.reshape(-1, self.args.simclr_num_aug, scl_outputs.shape[-1]) - scl_features = scl_featuresFull[:, :, (self.task + 1) * self.cpt:] # [N, n_aug, 70] - scl_n_heads = self.tasks - self.task - 1 + scl_features = scl_featuresFull[:, :, (self.current_task + 1) * self.cpt:] + scl_n_heads = self.n_tasks - self.current_task - 1 - scl_features = torch.stack(scl_features.split(self.cpt, 2), 1) # [N, 7, n_aug, 10] + scl_features = torch.stack(scl_features.split(self.cpt, 2), 1) loss_cons = torch.stack([self.simclr_lss(features=F.normalize(scl_features[:, h], dim=2), labels=scl_labels) for h in range(scl_n_heads)]).sum() - loss_cons /= scl_n_heads * scl_features.shape[0] loss_cons *= self.args.lambd - # Past Logits Constraint - loss_constr_past = torch.tensor(0.).type(loss_stream.dtype) - if self.task > 0: - chead = F.softmax(outputs[:, :(self.task + 1) * self.cpt], 1) + # DP loss + if self.args.dp_weight > 0 and not self.buffer.is_empty(): + dp_features = scl_featuresFull[:len(buf_logitsscl), :, (self.current_task + 1) * self.cpt:] + dp_logits = buf_logitsscl[:, (self.current_task + 1) * self.cpt:] - good_head = chead[:, self.task * self.cpt:(self.task + 1) * self.cpt] - bad_head = chead[:, :self.cpt * self.task] + dp_features = torch.stack(dp_features.split(self.cpt, 2), 1) - loss_constr = bad_head.max(1)[0].detach() + self.args.m - good_head.max(1)[0] + dp_logits = torch.stack(dp_logits.split(self.cpt, 1), 1) - mask = loss_constr > 0 + loss_dp = self.args.dp_weight * torch.mean(torch.stack( + [self.spkdloss(dp_features[:, i, k, :], dp_logits[:, i, :]) for i in range(self.n_tasks - self.current_task - 1) for k in range(self.args.simclr_num_aug)] + )) - if (mask).any(): - loss_constr_past = self.args.eta * loss_constr[mask].mean() + # Future Logits Constraint + if self.args.future_constraint: + bad_head = outputs[:, (self.current_task + 1) * self.cpt:] + good_head = outputs[:, self.current_task * self.cpt:(self.current_task + 1) * self.cpt] - # Future Logits Constraint - loss_constr_futu = torch.tensor(0.) - if self.task < self.tasks - 1: - bad_head = outputs[:, (self.task + 1) * self.cpt:] - good_head = outputs[:, self.task * self.cpt:(self.task + 1) * self.cpt] + if not self.buffer.is_empty(): + buf_tlgt = buf_labels // self.cpt + bad_head = torch.cat([bad_head, buf_outputs[:, (self.current_task + 1) * self.cpt:]]) + good_head = torch.cat([good_head, torch.stack(buf_outputs.split(self.cpt, 1), 1)[torch.arange(len(buf_tlgt)), buf_tlgt]]) - if not self.buffer.is_empty(): - buf_tlgt = buf_labels // self.cpt - bad_head = torch.cat([bad_head, buf_outputs[:, (self.task + 1) * self.cpt:]]) - good_head = torch.cat([good_head, torch.stack(buf_outputs.split(self.cpt, 1), 1)[torch.arange(len(buf_tlgt)), buf_tlgt]]) + loss_constr = bad_head.max(1)[0] + self.args.constr_margin - good_head.max(1)[0] + + mask = loss_constr > 0 + if (mask).any(): + loss_constr_futu = self.args.constr_eta * loss_constr[mask].mean() + + # Past Logits Constraint + loss_constr_past = torch.tensor(0.).type(loss_stream.dtype) + if self.args.past_constraint and self.current_task > 0: + chead = F.softmax(outputs[:, :(self.current_task + 1) * self.cpt], 1) - loss_constr = bad_head.max(1)[0] + self.args.m - good_head.max(1)[0] + good_head = chead[:, self.current_task * self.cpt:(self.current_task + 1) * self.cpt] + bad_head = chead[:, :self.cpt * self.current_task] + + loss_constr = bad_head.max(1)[0].detach() + self.args.constr_margin - good_head.max(1)[0] mask = loss_constr > 0 + if (mask).any(): - loss_constr_futu = self.args.eta * loss_constr[mask].mean() + loss_constr_past = self.args.constr_eta * loss_constr[mask].mean() - loss = loss_stream + loss_der + loss_derpp + loss_cons + loss_constr_futu + loss_constr_past + loss = loss_stream + loss_der + loss_derpp + loss_cons + loss_dp + loss_constr_futu + loss_constr_past loss.backward() self.opt.step() diff --git a/models/xder_ce.py b/models/xder_ce.py index d751bfc7..e40b2a8e 100644 --- a/models/xder_ce.py +++ b/models/xder_ce.py @@ -4,43 +4,41 @@ # LICENSE file in the root directory of this source tree. import torch -# from utils.spkdloss import SPKDLoss -from datasets import get_dataset from torch.nn import functional as F from models.utils.continual_model import ContinualModel -from utils.args import add_management_args, add_experiment_args, add_rehearsal_args, ArgumentParser +from utils.args import add_rehearsal_args, ArgumentParser from utils.batch_norm import bn_track_stats from utils.buffer import Buffer -def get_parser() -> ArgumentParser: - parser = ArgumentParser(description='Continual learning via' - ' Dark Experience Replay.') - add_management_args(parser) - add_experiment_args(parser) - add_rehearsal_args(parser) - parser.add_argument('--alpha', type=float, required=True, help='Penalty weight.') - parser.add_argument('--beta', type=float, required=True, help='Penalty weight.') +class XDerCE(ContinualModel): + NAME = 'xder_ce' + COMPATIBILITY = ['class-il', 'task-il'] - parser.add_argument('--gamma', type=float, default=0.85) - parser.add_argument('--eta', type=float, default=0.1) - parser.add_argument('--m', type=float, default=0.3) + @staticmethod + def get_parser() -> ArgumentParser: + parser = ArgumentParser(description='Continual learning via' + ' eXtended Dark Experience Replay with cross-entropy on future heads.') - return parser + add_rehearsal_args(parser) + parser.add_argument('--alpha', type=float, required=True, help='Penalty weight.') + parser.add_argument('--beta', type=float, required=True, help='Penalty weight.') + parser.add_argument('--gamma', type=float, default=0.85) + parser.add_argument('--eta', type=float, default=0.1) + parser.add_argument('--m', type=float, default=0.3) -class XDerCE(ContinualModel): - NAME = 'xder_ce' - COMPATIBILITY = ['class-il', 'task-il'] + parser.add_argument('--past_constraint', type=int, default=1, choices=[0,1], help='Enable past constraint') + parser.add_argument('--future_constraint', type=int, default=1, choices=[0,1], help='Enable future constraint') + parser.add_argument('--align_bn', type=int, default=0, choices=[0,1], help='Use BatchNorm alignment') + + return parser def __init__(self, backbone, loss, args, transform): super(XDerCE, self).__init__(backbone, loss, args, transform) - self.buffer = Buffer(self.args.buffer_size, self.device) - self.cpt = get_dataset(args).N_CLASSES_PER_TASK - self.tasks = get_dataset(args).N_TASKS - self.task = 0 - self.update_counter = torch.zeros(self.args.buffer_size).to(self.device) + self.buffer = Buffer(self.args.buffer_size) + self.update_counter = torch.zeros(self.args.buffer_size) if not hasattr(self.args, 'start_from'): self.args.start_from = 0 @@ -50,10 +48,10 @@ def end_task(self, dataset): tng = self.training self.train() - if self.args.start_from is None or self.task >= self.args.start_from: + if self.args.start_from is None or self.current_task >= self.args.start_from: # Reduce Memory Buffer - if self.task > 0: - examples_per_class = self.args.buffer_size // ((self.task + 1) * self.cpt) + if self.current_task > 0: + examples_per_class = self.args.buffer_size // self.n_seen_classes buf_x, buf_lab, buf_log, buf_tl = self.buffer.get_all_data() self.buffer.empty() for tl in buf_lab.unique(): @@ -70,18 +68,18 @@ def end_task(self, dataset): # To make this baseline as strong as can be, # this model uses reservoir at task 0 (just like DER++) # and then switches to task-stratified later (like X-DER) - if self.task == 0: + if self.current_task == 0: self.buffer.empty() # Add new task data examples_last_task = self.buffer.buffer_size - self.buffer.num_seen_examples - examples_per_class = examples_last_task // self.cpt - ce = torch.tensor([examples_per_class] * self.cpt).int() - ce[torch.randperm(self.cpt)[:examples_last_task - (examples_per_class * self.cpt)]] += 1 + examples_per_class = examples_last_task // self.n_classes_current_task + ce = torch.tensor([examples_per_class] * self.n_classes_current_task).int() + ce[torch.randperm(self.n_classes_current_task)[:examples_last_task - (examples_per_class * self.n_classes_current_task)]] += 1 with torch.no_grad(): with bn_track_stats(self, False): - if self.args.start_from is None or self.args.start_from <= self.task: + if self.args.start_from is None or self.args.start_from <= self.current_task: for data in dataset.train_loader: inputs, labels, not_aug_inputs = data inputs = inputs.to(self.device) @@ -91,24 +89,23 @@ def end_task(self, dataset): break # Update past logits - if self.task > 0: - outputs = self.update_logits(outputs, outputs, labels, 0, self.task) + if self.current_task > 0: + outputs = self.update_logits(outputs, outputs, labels, 0, self.current_task) flags = torch.zeros(len(inputs)).bool() for j in range(len(flags)): - if ce[labels[j] % self.cpt] > 0: + if ce[labels[j] % self.n_classes_current_task] > 0: flags[j] = True - ce[labels[j] % self.cpt] -= 1 + ce[labels[j] % self.n_classes_current_task] -= 1 self.buffer.add_data(examples=not_aug_inputs[flags], labels=labels[flags], logits=outputs.data[flags], - task_labels=(torch.ones(len(not_aug_inputs)) * - (self.task))[flags]) + task_labels=(torch.ones(len(not_aug_inputs)) * self.current_task)[flags]) # Update future past logits buf_idx, buf_inputs, buf_labels, buf_logits, _ = self.buffer.get_data(self.buffer.buffer_size, - transform=self.transform, return_index=True) + transform=self.transform, return_index=True, device=self.device) buf_outputs = [] while len(buf_inputs): @@ -116,47 +113,56 @@ def end_task(self, dataset): buf_inputs = buf_inputs[self.args.batch_size:] buf_outputs = torch.cat(buf_outputs) - chosen = (buf_labels // self.cpt) < self.task + chosen = ((buf_labels // self.n_classes_current_task) < self.current_task).to(self.buffer.device) if chosen.any(): - to_transplant = self.update_logits(buf_logits[chosen], buf_outputs[chosen], buf_labels[chosen], self.task) + to_transplant = self.update_logits(buf_logits[chosen], buf_outputs[chosen], buf_labels[chosen], self.current_task) self.buffer.logits[buf_idx[chosen], :] = to_transplant.to(self.buffer.device) - self.buffer.task_labels[buf_idx[chosen]] = self.task + self.buffer.task_labels[buf_idx[chosen]] = self.current_task - self.task += 1 - self.update_counter = torch.zeros(self.args.buffer_size).to(self.device) + self.update_counter = torch.zeros(self.args.buffer_size) self.train(tng) def update_logits(self, old, new, gt, task_start, n_tasks=1): + offset_1, _ = self.dataset.get_offsets(task_start) + offset_2, _ = self.dataset.get_offsets(task_start + n_tasks) - transplant = new[:, task_start * self.cpt:(task_start + n_tasks) * self.cpt] + transplant = new[:, offset_1:offset_2] gt_values = old[torch.arange(len(gt)), gt] max_values = transplant.max(1).values coeff = self.args.gamma * gt_values / max_values - coeff = coeff.unsqueeze(1).repeat(1, self.cpt * n_tasks) - mask = (max_values > gt_values).unsqueeze(1).repeat(1, self.cpt * n_tasks) + coeff = coeff.unsqueeze(1).repeat(1, offset_2 - offset_1) + mask = (max_values > gt_values).unsqueeze(1).repeat(1, offset_2 - offset_1) transplant[mask] *= coeff[mask] - old[:, task_start * self.cpt:(task_start + n_tasks) * self.cpt] = transplant + old[:, offset_1:offset_2] = transplant return old - def observe(self, inputs, labels, not_aug_inputs): + def observe(self, inputs, labels, not_aug_inputs, epoch=None): self.opt.zero_grad() - outputs = self.net(inputs).float() + with bn_track_stats(self, self.args.align_bn==0 or self.current_task == 0): + outputs = self.net(inputs) # Present head - loss_stream = self.loss(outputs[:, self.task * self.cpt:], labels % self.cpt) + loss_stream = self.loss(outputs[:, self.n_past_classes:], labels % self.n_classes_current_task) loss_der, loss_derpp = torch.tensor(0.), torch.tensor(0.) if not self.buffer.is_empty(): # Distillation Replay Loss (all heads) buf_idx1, buf_inputs1, buf_labels1, buf_logits1, buf_tl1 = self.buffer.get_data( - self.args.minibatch_size, transform=self.transform, return_index=True) - buf_outputs1 = self.net(buf_inputs1).float() + self.args.minibatch_size, transform=self.transform, return_index=True, device=self.device) + if self.args.align_bn: + buf_inputs1 = torch.cat([buf_inputs1, inputs[:self.args.minibatch_size // self.current_task]]) + + buf_outputs1 = self.net(buf_inputs1) + + if self.args.align_bn: + buf_inputs1 = buf_inputs1[:self.args.minibatch_size] + buf_outputs1 = buf_outputs1[:self.args.minibatch_size] buf_logits1 = buf_logits1.type(buf_outputs1.dtype) mse = F.mse_loss(buf_outputs1, buf_logits1, reduction='none') @@ -164,10 +170,12 @@ def observe(self, inputs, labels, not_aug_inputs): # Label Replay Loss (past heads) buf_idx2, buf_inputs2, buf_labels2, buf_logits2, buf_tl2 = self.buffer.get_data( - self.args.minibatch_size, transform=self.transform, return_index=True) - buf_outputs2 = self.net(buf_inputs2).float() + self.args.minibatch_size, transform=self.transform, return_index=True, device=self.device) + with bn_track_stats(self, self.args.align_bn==0): + buf_outputs2 = self.net(buf_inputs2) - buf_ce = self.loss(buf_outputs2[:, :(self.task + (1 if self.task == 0 else 0)) * self.cpt], buf_labels2) + _, offset = self.dataset.get_offsets(self.current_task + (1 if self.current_task == 0 else 0)) + buf_ce = self.loss(buf_outputs2[:, :offset], buf_labels2) loss_derpp = self.args.beta * buf_ce # Merge Batches & Remove Duplicates @@ -177,10 +185,10 @@ def observe(self, inputs, labels, not_aug_inputs): buf_logits = torch.cat([buf_logits1, buf_logits2]) buf_outputs = torch.cat([buf_outputs1, buf_outputs2]) buf_tl = torch.cat([buf_tl1, buf_tl2]) - eyey = torch.eye(self.buffer.buffer_size).to(self.device)[buf_idx] + eyey = torch.eye(self.buffer.buffer_size).to(buf_idx.device)[buf_idx] umask = (eyey * eyey.cumsum(0)).sum(1) < 2 - buf_idx = buf_idx[umask] + buf_idx = buf_idx[umask].to(self.buffer.device) buf_inputs = buf_inputs[umask] buf_labels = buf_labels[umask] buf_logits = buf_logits[umask] @@ -189,24 +197,24 @@ def observe(self, inputs, labels, not_aug_inputs): # Update Future Past Logits with torch.no_grad(): - chosen = (buf_labels // self.cpt) < self.task + chosen = ((buf_labels // self.n_classes_current_task) < self.current_task).to(self.buffer.device) self.update_counter[buf_idx[chosen]] += 1 c = chosen.clone() chosen[c] = torch.rand_like(chosen[c].float()) * self.update_counter[buf_idx[c]] < 1 if chosen.any(): - assert self.task > 0 - to_transplant = self.update_logits(buf_logits[chosen], buf_outputs[chosen], buf_labels[chosen], self.task, self.tasks - self.task) + assert self.current_task > 0 + to_transplant = self.update_logits(buf_logits[chosen], buf_outputs[chosen], buf_labels[chosen], self.current_task, self.n_tasks - self.current_task).to(self.buffer.device) self.buffer.logits[buf_idx[chosen], :] = to_transplant.to(self.buffer.device) - self.buffer.task_labels[buf_idx[chosen]] = self.task + self.buffer.task_labels[buf_idx[chosen]] = self.current_task # Past Logits Constraint loss_constr_past = torch.tensor(0.).type(loss_stream.dtype) - if self.task > 0: - chead = F.softmax(outputs[:, :(self.task + 1) * self.cpt], 1) + if self.args.past_constraint and self.current_task > 0: + chead = F.softmax(outputs[:, :self.n_seen_classes], 1) - good_head = chead[:, self.task * self.cpt:(self.task + 1) * self.cpt] - bad_head = chead[:, :self.cpt * self.task] + good_head = chead[:, self.n_past_classes:self.n_seen_classes] + bad_head = chead[:, :self.n_past_classes] loss_constr = bad_head.max(1)[0].detach() + self.args.m - good_head.max(1)[0] @@ -217,14 +225,14 @@ def observe(self, inputs, labels, not_aug_inputs): # Future Logits Constraint loss_constr_futu = torch.tensor(0.) - if self.task < self.tasks - 1: - bad_head = outputs[:, (self.task + 1) * self.cpt:] - good_head = outputs[:, self.task * self.cpt:(self.task + 1) * self.cpt] + if self.args.future_constraint and self.current_task < self.n_tasks - 1: + bad_head = outputs[:, self.n_seen_classes:] + good_head = outputs[:, self.n_past_classes:self.n_seen_classes] if not self.buffer.is_empty(): - buf_tlgt = buf_labels // self.cpt - bad_head = torch.cat([bad_head, buf_outputs[:, (self.task + 1) * self.cpt:]]) - good_head = torch.cat([good_head, torch.stack(buf_outputs.split(self.cpt, 1), 1)[torch.arange(len(buf_tlgt)), buf_tlgt]]) + buf_tlgt = buf_labels // self.n_classes_current_task + bad_head = torch.cat([bad_head, buf_outputs[:, self.n_seen_classes:]]) + good_head = torch.cat([good_head, torch.stack(buf_outputs.split(self.n_classes_current_task, 1), 1)[torch.arange(len(buf_tlgt)), buf_tlgt]]) loss_constr = bad_head.max(1)[0] + self.args.m - good_head.max(1)[0] @@ -237,7 +245,7 @@ def observe(self, inputs, labels, not_aug_inputs): loss.backward() self.opt.step() - if self.task == 0: + if self.current_task == 0: self.buffer.add_data( examples=inputs, labels=labels, diff --git a/models/xder_rpc.py b/models/xder_rpc.py index bd5a3374..6f09f15e 100644 --- a/models/xder_rpc.py +++ b/models/xder_rpc.py @@ -5,29 +5,13 @@ import numpy as np import torch -from datasets import get_dataset from torch.nn import functional as F from models.utils.continual_model import ContinualModel -from utils.args import add_management_args, add_experiment_args, add_rehearsal_args, ArgumentParser +from utils.args import add_rehearsal_args, ArgumentParser from utils.batch_norm import bn_track_stats from utils.buffer import Buffer - - -def get_parser() -> ArgumentParser: - parser = ArgumentParser(description='Continual learning via' - ' Dark Experience Replay.') - add_management_args(parser) - add_experiment_args(parser) - add_rehearsal_args(parser) - parser.add_argument('--alpha', type=float, required=True, help='Penalty weight.') - parser.add_argument('--beta', type=float, required=True, help='Penalty weight.') - - parser.add_argument('--gamma', type=float, default=0.85) - parser.add_argument('--eta', type=float, default=0.1) - parser.add_argument('--m', type=float, default=0.3) - - return parser +from utils import none_or_float def dsimplex(num_classes=10): @@ -75,35 +59,52 @@ class XDerRPC(ContinualModel): NAME = 'xder_rpc' COMPATIBILITY = ['class-il', 'task-il'] + @staticmethod + def get_parser() -> ArgumentParser: + parser = ArgumentParser(description='Continual learning via' + ' eXtended Dark Experience Replay with RPC.') + + add_rehearsal_args(parser) + parser.add_argument('--alpha', type=float, required=True, help='Penalty weight.') + parser.add_argument('--beta', type=float, required=True, help='Penalty weight.') + + parser.add_argument('--gamma', type=float, default=0.85) + parser.add_argument('--eta', type=float, default=0.1) + parser.add_argument('--m', type=float, default=0.3) + + parser.add_argument('--clip_grad', type=none_or_float, default=None, metavar='NORM', help='Clip gradient norm (default: None, no clipping)') + parser.add_argument('--align_bn', type=int, default=0, choices=[0,1], help='Use BatchNorm alignment') + + parser.add_argument('--n_rpc_heads', type=int, help='N Heads for RPC') + return parser + def __init__(self, backbone, loss, args, transform): - super(XDerRPC, self).__init__(backbone, loss, args, transform) - self.buffer = Buffer(self.args.buffer_size, self.device) - self.cpt = get_dataset(args).N_CLASSES_PER_TASK - self.tasks = get_dataset(args).N_TASKS - self.task = 0 + super().__init__(backbone, loss, args, transform) + self.buffer = Buffer(self.args.buffer_size) self.update_counter = torch.zeros(self.args.buffer_size).to(self.device) - self.pernicehead = torch.from_numpy(dsimplex(self.cpt * self.tasks)).float().to(self.device) + n_rpc_heads = self.args.n_rpc_heads if self.args.n_rpc_heads is not None else self.num_classes + self.rpc_head = torch.from_numpy(dsimplex(n_rpc_heads)).float().to(self.device) if not hasattr(self.args, 'start_from'): self.args.start_from = 0 def forward(self, x): x = self.net(x)[:, :-1] - if x.dtype != self.pernicehead.dtype: - self.pernicehead = self.pernicehead.type(x.dtype) - x = x @ self.pernicehead + if x.dtype != self.rpc_head.dtype: + self.rpc_head = self.rpc_head.type(x.dtype) + x = x @ self.rpc_head[:x.shape[1]] return x def end_task(self, dataset): - tng = self.training + was_training = self.training self.train() - if self.args.start_from is None or self.task >= self.args.start_from: + if self.args.start_from is None or self.current_task >= self.args.start_from: # Reduce Memory Buffer - if self.task > 0: - examples_per_class = self.args.buffer_size // ((self.task + 1) * self.cpt) - buf_x, buf_lab, buf_log, buf_tl = self.buffer.get_all_data() + if self.current_task > 0: + examples_per_class = self.args.buffer_size // self.n_seen_classes + buf_x, buf_lab, buf_log, buf_tl = self.buffer.get_all_data(device=self.device) self.buffer.empty() for tl in buf_lab.unique(): idx = tl == buf_lab @@ -118,13 +119,13 @@ def end_task(self, dataset): # Add new task data examples_last_task = self.buffer.buffer_size - self.buffer.num_seen_examples - examples_per_class = examples_last_task // self.cpt - ce = torch.tensor([examples_per_class] * self.cpt).int() - ce[torch.randperm(self.cpt)[:examples_last_task - (examples_per_class * self.cpt)]] += 1 + examples_per_class = examples_last_task // self.n_classes_current_task + ce = torch.tensor([examples_per_class] * self.n_classes_current_task).int() + ce[torch.randperm(self.n_classes_current_task)[:examples_last_task - (examples_per_class * self.n_classes_current_task)]] += 1 with torch.no_grad(): with bn_track_stats(self, False): - if self.args.start_from is None or self.args.start_from <= self.task: + if self.args.start_from is None or self.args.start_from <= self.current_task: for data in dataset.train_loader: inputs, labels, not_aug_inputs = data inputs = inputs.to(self.device) @@ -134,24 +135,23 @@ def end_task(self, dataset): break # Update past logits - if self.task > 0: - outputs = self.update_logits(outputs, outputs, labels, 0, self.task) + if self.current_task > 0: + outputs = self.update_logits(outputs, outputs, labels, 0, self.current_task) flags = torch.zeros(len(inputs)).bool() for j in range(len(flags)): - if ce[labels[j] % self.cpt] > 0: + if ce[labels[j] % self.n_classes_current_task] > 0: flags[j] = True - ce[labels[j] % self.cpt] -= 1 + ce[labels[j] % self.n_classes_current_task] -= 1 self.buffer.add_data(examples=not_aug_inputs[flags], labels=labels[flags], logits=outputs.data[flags], - task_labels=(torch.ones(len(not_aug_inputs)) * - (self.task))[flags]) + task_labels=(torch.ones(len(not_aug_inputs)) * self.current_task)[flags]) # Update future past logits buf_idx, buf_inputs, buf_labels, buf_logits, _ = self.buffer.get_data(self.buffer.buffer_size, - transform=self.transform, return_index=True) + transform=self.transform, return_index=True, device=self.device) buf_outputs = [] while len(buf_inputs): @@ -159,47 +159,56 @@ def end_task(self, dataset): buf_inputs = buf_inputs[self.args.batch_size:] buf_outputs = torch.cat(buf_outputs) - chosen = (buf_labels // self.cpt) < self.task + chosen = ((buf_labels // self.n_classes_current_task) < self.current_task).to(self.buffer.device) if chosen.any(): - to_transplant = self.update_logits(buf_logits[chosen], buf_outputs[chosen], buf_labels[chosen], self.task, self.tasks - self.task) + to_transplant = self.update_logits(buf_logits[chosen], buf_outputs[chosen], buf_labels[chosen], self.current_task, self.n_tasks - self.current_task) self.buffer.logits[buf_idx[chosen], :] = to_transplant.to(self.buffer.device) - self.buffer.task_labels[buf_idx[chosen]] = self.task + self.buffer.task_labels[buf_idx[chosen]] = self.current_task - self.task += 1 - self.update_counter = torch.zeros(self.args.buffer_size).to(self.device) + self.update_counter = torch.zeros(self.args.buffer_size) - self.train(tng) + self.train(was_training) def update_logits(self, old, new, gt, task_start, n_tasks=1): + offset_1, _ = self.dataset.get_offsets(task_start) + offset_2, _ = self.dataset.get_offsets(task_start + n_tasks) - transplant = new[:, task_start * self.cpt:(task_start + n_tasks) * self.cpt] + transplant = new[:, offset_1:offset_2] gt_values = old[torch.arange(len(gt)), gt] max_values = transplant.max(1).values coeff = self.args.gamma * gt_values / max_values - coeff = coeff.unsqueeze(1).repeat(1, self.cpt * n_tasks) - mask = (max_values > gt_values).unsqueeze(1).repeat(1, self.cpt * n_tasks) + coeff = coeff.unsqueeze(1).repeat(1, offset_2 - offset_1) + mask = (max_values > gt_values).unsqueeze(1).repeat(1, offset_2 - offset_1) transplant[mask] *= coeff[mask] - old[:, task_start * self.cpt:(task_start + n_tasks) * self.cpt] = transplant + old[:, offset_1:offset_2] = transplant return old - def observe(self, inputs, labels, not_aug_inputs): + def observe(self, inputs, labels, not_aug_inputs, epoch=None): self.opt.zero_grad() - outputs = self(inputs).float() + with bn_track_stats(self, self.args.align_bn==0 or self.current_task == 0): + outputs = self(inputs) # Present head - loss_stream = self.loss(outputs[:, self.task * self.cpt:(self.task + 1) * self.cpt], labels % self.cpt) + loss_stream = self.loss(outputs[:, self.n_past_classes:self.n_seen_classes], labels % self.n_classes_current_task) loss_der, loss_derpp = torch.tensor(0.), torch.tensor(0.) if not self.buffer.is_empty(): # Distillation Replay Loss (all heads) buf_idx1, buf_inputs1, buf_labels1, buf_logits1, buf_tl1 = self.buffer.get_data( - self.args.minibatch_size, transform=self.transform, return_index=True) - buf_outputs1 = self(buf_inputs1).float() + self.args.minibatch_size, transform=self.transform, return_index=True, device=self.device) + if self.args.align_bn: + buf_inputs1 = torch.cat([buf_inputs1, inputs[:self.args.minibatch_size // self.current_task]]) + + buf_outputs1 = self(buf_inputs1) + + if self.args.align_bn: + buf_inputs1 = buf_inputs1[:self.args.minibatch_size] + buf_outputs1 = buf_outputs1[:self.args.minibatch_size] buf_logits1 = buf_logits1.type(buf_outputs1.dtype) mse = F.mse_loss(buf_outputs1, buf_logits1, reduction='none') @@ -207,10 +216,11 @@ def observe(self, inputs, labels, not_aug_inputs): # Label Replay Loss (past heads) buf_idx2, buf_inputs2, buf_labels2, buf_logits2, buf_tl2 = self.buffer.get_data( - self.args.minibatch_size, transform=self.transform, return_index=True) - buf_outputs2 = self(buf_inputs2).float() + self.args.minibatch_size, transform=self.transform, return_index=True, device=self.device) + with bn_track_stats(self, self.args.align_bn==0): + buf_outputs2 = self(buf_inputs2).float() - buf_ce = self.loss(buf_outputs2[:, :(self.task) * self.cpt], buf_labels2) + buf_ce = self.loss(buf_outputs2[:, :self.n_past_classes], buf_labels2) loss_derpp = self.args.beta * buf_ce # Merge Batches & Remove Duplicates @@ -220,10 +230,10 @@ def observe(self, inputs, labels, not_aug_inputs): buf_logits = torch.cat([buf_logits1, buf_logits2]) buf_outputs = torch.cat([buf_outputs1, buf_outputs2]) buf_tl = torch.cat([buf_tl1, buf_tl2]) - eyey = torch.eye(self.buffer.buffer_size).to(self.device)[buf_idx] + eyey = torch.eye(self.buffer.buffer_size).to(buf_idx.device)[buf_idx] umask = (eyey * eyey.cumsum(0)).sum(1) < 2 - buf_idx = buf_idx[umask] + buf_idx = buf_idx[umask].to(self.buffer.device) buf_inputs = buf_inputs[umask] buf_labels = buf_labels[umask] buf_logits = buf_logits[umask] @@ -232,24 +242,24 @@ def observe(self, inputs, labels, not_aug_inputs): # Update Future Past Logits with torch.no_grad(): - chosen = (buf_labels // self.cpt) < self.task + chosen = ((buf_labels // self.n_classes_current_task) < self.current_task).to(self.buffer.device) self.update_counter[buf_idx[chosen]] += 1 c = chosen.clone() chosen[c] = torch.rand_like(chosen[c].float()) * self.update_counter[buf_idx[c]] < 1 if chosen.any(): - assert self.task > 0 - to_transplant = self.update_logits(buf_logits[chosen], buf_outputs[chosen], buf_labels[chosen], self.task, self.tasks - self.task) + assert self.current_task > 0 + to_transplant = self.update_logits(buf_logits[chosen], buf_outputs[chosen], buf_labels[chosen], self.current_task, self.n_tasks - self.current_task).to(self.buffer.device) self.buffer.logits[buf_idx[chosen], :] = to_transplant.to(self.buffer.device) - self.buffer.task_labels[buf_idx[chosen]] = self.task + self.buffer.task_labels[buf_idx[chosen]] = self.current_task # Past Logits Constraint loss_constr_past = torch.tensor(0.).type(loss_stream.dtype) - if self.task > 0: - chead = F.softmax(outputs[:, :(self.task + 1) * self.cpt], 1) + if self.current_task > 0: + chead = F.softmax(outputs[:, :self.n_seen_classes], 1) - good_head = chead[:, self.task * self.cpt:(self.task + 1) * self.cpt] - bad_head = chead[:, :self.cpt * self.task] + good_head = chead[:, self.n_past_classes:self.n_seen_classes] + bad_head = chead[:, :self.n_past_classes] loss_constr = bad_head.max(1)[0].detach() + self.args.m - good_head.max(1)[0] @@ -260,14 +270,14 @@ def observe(self, inputs, labels, not_aug_inputs): # Future Logits Constraint loss_constr_futu = torch.tensor(0.) - if self.task < self.tasks - 1: - bad_head = outputs[:, (self.task + 1) * self.cpt:] - good_head = outputs[:, self.task * self.cpt:(self.task + 1) * self.cpt] + if self.current_task < self.n_tasks - 1: + bad_head = outputs[:, self.n_seen_classes:] + good_head = outputs[:, self.n_past_classes:self.n_seen_classes] if not self.buffer.is_empty(): - buf_tlgt = buf_labels // self.cpt - bad_head = torch.cat([bad_head, buf_outputs[:, (self.task + 1) * self.cpt:]]) - good_head = torch.cat([good_head, torch.stack(buf_outputs.split(self.cpt, 1), 1)[torch.arange(len(buf_tlgt)), buf_tlgt]]) + buf_tlgt = buf_labels // self.n_classes_current_task + bad_head = torch.cat([bad_head, buf_outputs[:, self.n_seen_classes:]]) + good_head = torch.cat([good_head, torch.stack(buf_outputs.split(self.n_classes_current_task, 1), 1)[torch.arange(len(buf_tlgt)), buf_tlgt]]) loss_constr = bad_head.max(1)[0] + self.args.m - good_head.max(1)[0] @@ -278,6 +288,8 @@ def observe(self, inputs, labels, not_aug_inputs): loss = loss_stream + loss_der + loss_derpp + loss_constr_futu + loss_constr_past loss.backward() + if self.args.clip_grad is not None: + torch.nn.utils.clip_grad_norm_(self.net.parameters(), self.args.clip_grad) self.opt.step() return loss.item() diff --git a/optional-requirements.txt b/optional-requirements.txt new file mode 100644 index 00000000..fafa0b15 --- /dev/null +++ b/optional-requirements.txt @@ -0,0 +1 @@ +setproctitle \ No newline at end of file diff --git a/requirements.txt b/requirements.txt index fbf0e73f..5b4f4683 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,9 +1,8 @@ -torch==1.12.1 -numpy==1.23.3 -torchvision==0.13.1 -setproctitle==1.3.2 -six==1.16.0 -wandb -onedrivedownloader -av +torch +numpy +torchvision +kornia>=0.7.0 +Pillow +timm==0.9.8 tqdm +onedrivedownloader \ No newline at end of file diff --git a/scripts/local_launcher.py b/scripts/local_launcher.py new file mode 100644 index 00000000..a858a9cd --- /dev/null +++ b/scripts/local_launcher.py @@ -0,0 +1,126 @@ +import functools +import os +import random +import subprocess +import sys +import time +from multiprocessing.pool import ThreadPool +import argparse +import signal + +from utils import smart_joint + +global active_jobs +global completed_jobs +global failed_jobs +active_jobs = {} +completed_jobs = {} +failed_jobs = {} + + +def parse_args(): + parser = argparse.ArgumentParser() + parser.add_argument("--file", type=str, help="file containing jobs") + parser.add_argument("--redundancy", type=int, default=1, help="number of times to run each job") + parser.add_argument("--at_a_time", type=int, default=1, help="number of jobs to run at a time") + parser.add_argument("--start_from", type=int, default=0, help="start from job number") + parser.add_argument("--reverse", action="store_true", help="reverse job order") + args = parser.parse_args() + + assert args.at_a_time >= 1, "at_a_time must be at least 1" + assert args.redundancy >= 1, "redundancy must be at least 1" + assert args.start_from >= 0, "start_from must be at least 0" + + jobs_list = [l for l in open(args.file, "r").read().splitlines() if l.strip() != "" and not l.startswith("#")][args.start_from:] * args.redundancy + if args.reverse: + jobs_list = list(reversed(jobs_list)) + jobname = args.file.strip().split("/")[-1].split("\\")[-1].split(".")[0] + return args, jobs_list, jobname + + +def print_progress(basepath): + global active_jobs + global completed_jobs + global failed_jobs + # clean terminal + print("\033c", end="") + + for job_index, (jobname, pid) in active_jobs.items(): + filename = smart_joint(basepath, f'{job_index + 1}.err') + if not os.path.exists(filename): + return + + print(f"Job {job_index + 1} ({jobname}) is running with pid {pid}:") + + # show last line of error, wait for job to end + with open(filename, "r") as err: + try: + last_line = err.readlines()[-1] + except BaseException: + last_line = "" + print(last_line.strip()) + + print("Completed jobs:" + str(len(completed_jobs))) + print("[" + " ".join([str(job_index + 1) for job_index, _ in completed_jobs.items()]) + "]") + + print("Failed jobs:" + str(len(failed_jobs))) + print("[" + " ".join([str(job_index + 1) for job_index, _ in failed_jobs.items()]) + "]") + + +def run_job(jobdata, basedir, jobname, log=False): + job, index = jobdata + global active_jobs + global completed_jobs + global failed_jobs + with open(smart_joint(basedir, f'{index + 1}.out'), "w") as out, open(smart_joint(basedir, f'{index + 1}.err'), "w") as err: + p = subprocess.Popen("python utils/main.py " + job, shell=True, stdout=out, stderr=err) + active_jobs[index] = (jobname, p.pid) + p.wait() + + # check if job failed + if p.returncode != 0: + failed_jobs[index] = (jobname, p.pid) + else: + completed_jobs[index] = (jobname, p.pid) + del active_jobs[index] + + +def main(): + args, jobs_list, jobname = parse_args() + + print("Running {} jobs".format(len(jobs_list))) + time.sleep(2) + + # register signal handler to kill all processes on ctrl+c + def signal_handler(sig, frame): + print('Killing all processes') + if os.name == 'nt': + os.system("taskkill /F /T /PID {}".format(os.getpid())) + else: + os.system("kill -9 -1") + sys.exit(0) + signal.signal(signal.SIGINT, signal_handler) + + # create logs directory if it doesn't exist + if not os.path.exists("logs"): + os.makedirs("logs") + basedir = smart_joint("logs", jobname) + time.strftime("_%Y-%m-%d_%H-%M-%S", time.localtime(time.time())) + if not os.path.exists(basedir): + os.makedirs(basedir) + + print("Jobname: {}".format(jobname)) + print("Logging to {}".format(basedir)) + + # create thread pool + pool = ThreadPool(processes=args.at_a_time) + run_fn = functools.partial(run_job, basedir=basedir, jobname=jobname) + result = pool.map_async(run_fn, [(job, i) for i, job in enumerate(jobs_list)]) + + # wait for all jobs to finish and print progress + while not result._number_left == 0: + print_progress(basedir) + time.sleep(2) + + +if __name__ == '__main__': + main() diff --git a/scripts/prepare_grid.py b/scripts/prepare_grid.py new file mode 100644 index 00000000..287a6d17 --- /dev/null +++ b/scripts/prepare_grid.py @@ -0,0 +1,64 @@ +import os +import itertools +import numpy as np +import argparse + +parser = argparse.ArgumentParser(description='Prepare grid') +parser.add_argument('--begin_string', type=str, default="", help='Initial string common for all experiments') +parser.add_argument('--job_folder', type=str, default="data/jobs/", help='Folder to save the job list') +args = parser.parse_args() + +grid_combinations = [ + { + 'name':'experiment_name', + 'combos': { + 'lr': [0.01,0.3,0.05], + 'buffer_size':[500], + 'model': ['er'], + 'dataset': ['seq-cifar10'] + }, + }, +] + +configs = [] +all_configs = [] + +for experiment in grid_combinations: + filenam, combos = experiment['name'], experiment['combos'] + configs = list(itertools.product(*combos.values())) + + print(filenam, len(configs), 'items') + + begin = args.begin_string + folder = args.job_folder + os.makedirs(folder, exist_ok=True, mode=0o777) + + clines = 0 + print(f'{folder}list_{filenam}.txt') + with open(f'{folder}list_{filenam}.txt', 'w') as f: + for c in configs: + ll = begin + for k, v in zip(combos.keys(), c): + if v is None: + continue + if type(k) == tuple: + for i in range(len(k)): + ll += f" --{k[i]}={v[i]}" + else: + ll += f" --{k}={v}" + f.write(ll+'\n') + all_configs.append(ll) + + clines += 1 + + print(f"Total ({filenam}):",clines) + +print(f'{folder}list_all_grid.txt') +clines = 0 +with open(f'{folder}list_all_grid.txt', 'w') as f: + for ll in all_configs: + f.write(ll + '\n') + clines += 1 + +print("Total (all):",clines) +print('') diff --git a/scripts/slurm_sbatcher.py b/scripts/slurm_sbatcher.py new file mode 100644 index 00000000..7d7c9a57 --- /dev/null +++ b/scripts/slurm_sbatcher.py @@ -0,0 +1,122 @@ +import argparse +import os +import socket +import time +import math + +if __name__ == '__main__': + parser = argparse.ArgumentParser(description='Slurm sbatcher', allow_abbrev=False) + parser.add_argument('--file', type=str, required=True, help='File with arguments to run. Should be a list of strings, one per line') + parser.add_argument('--at_a_time', type=int, default=-1, help='How many jobs to run at a time. If <=0, run all at once') + parser.add_argument('--cycles', type=int, default=1, help='How many times to repeat the jobs') + parser.add_argument('--skip_first', type=int, default=0, help='How many jobs to skip at the beginning from the \'file\'') + parser.add_argument('--reverse', action='store_true', help='Reverse the order of the jobs') + parser.add_argument('--name', type=str, default="mammoth", help='Name of the jobs in slurm') + parser.add_argument('--mem', type=int, default=32, help='Memory in GB') + parser.add_argument('--dry', action='store_true', help='Do not submit the job. Only creates the sbatch file') + parser.add_argument('--gpus', type=int, default=1, help='How many gpus to use') + parser.add_argument('--ddp', type=int, default=0, help='Use DistributedDataParallel. If 1, use torch.distributed.run', choices=[0, 1]) + parser.add_argument('--nodes', type=int, default=1, help='How many nodes to use. Only used if ddp=1') + parser.add_argument('--debug', action="store_true", help='Run all jobs in debug_mode for 1 epoch') + parser.add_argument('--timelimit', '--time', type=str, default="1-0", help='Time limit in slurm format') + parser.add_argument('--per_job', type=int, default=1, help='How many jobs to run per slurm job') + parser.add_argument('--excludelist', type=str, default=None, help='Nodes to exclude from the job') + parser.add_argument('--account', '-A', type=str, default=None, help='Slurm account') + parser.add_argument('--partition', '-p', type=str, default=None, help='Slurm partition') + parser.add_argument('--cpus', type=int, default=8, help='How many cpus to use') + parser.add_argument('--out', type=str, default='out', help='Output folder path') + parser.add_argument('--err', type=str, default='err', help='Error folder path') + parser.add_argument('--bashrc', type=str, default=None, help='Bashrc to source') + parser.add_argument('--num_workers', type=int, default=None, help='Number of workers for dataloaders') + + args = parser.parse_args() + + if args.ddp: + print("Warning: distributed stuff not yet supported in mammoth (problems with buffer synchronization). Use at your own risk!") + + with open(args.file, 'r') as f: + all_com = f.read().splitlines() + all_com = [x for x in all_com if not x.startswith('#') and len(x.strip())] + all_com = all_com * args.cycles + + if args.reverse: + all_com = all_com[::-1] + all_com = all_com[args.skip_first:] + if args.debug: + sss = [] + for s in all_com: + vv = " ".join(["--n_epochs=1" if "n_epochs=" in c else c for c in s.split()] + [" --debug_mode=1"]) + sss.append(vv) + all_com = sss + args.name = "debug_" + args.name + + def bbasename(path): + return [x for x in path.split('/') if len(x)][-1] + conf_path = os.getcwd() + + assert args.nodes == 1 or args.ddp == 1, "You can't use multiple nodes without ddp" + assert args.ddp == 0 or args.gpus > 1, "You can't use ddp with single gpu" + + errbase, outbase = args.err, args.out + + if not os.path.exists(errbase): + os.makedirs(errbase) + if not os.path.exists(outbase): + os.makedirs(outbase) + + tdir = os.getcwd() + # os.environ['PYTHONPATH'] = f'{conf_path}' + # os.environ['PATH'] += f':{conf_path}' + # os.chdir(conf_path) + len_com = math.ceil(len(all_com) / args.per_job) + basejob_str = 'python utils/main.py' if args.ddp == 0 else f'srun python -m torch.distributed.run --rdzv_backend=c10d --rdzv_endpoint=$MASTER_ADDR:$MASTER_PORT --nnodes=$SLURM_JOB_NUM_NODES --rdzv_id=$SLURM_JOB_ID --nproc_per_node={args.gpus} utils/main.py' + + basejob_str += (' --distributed=ddp' if args.ddp == 1 else ' --distrubuted=post_bt' if args.gpus > 1 else '') + + if args.num_workers is not None: + basejob_str += f' --num_workers={args.num_workers}' + + if args.per_job == 1: + jobstring = f'{basejob_str} ${{args[$SLURM_ARRAY_TASK_ID]}}' + else: + jobstring = basejob_str + f' &\nsleep 60s; {basejob_str}'.join([f' ${{args[$(($SLURM_ARRAY_TASK_ID * {args.per_job} + {i}))]}}' for i in range(args.per_job)]) + exclusion = '' if args.excludelist is None else '#SBATCH --exclude=' + args.excludelist + all_com_str = "".join([f"' {s} '\n" for s in all_com]).strip() + filec = f"""#!/bin/bash +{f"#SBATCH -p {args.partition}" if args.partition is not None else ""} +#SBATCH --job-name={args.name} +{f"#SBATCH --nodes={args.nodes}"} +#SBATCH --time={args.timelimit} +{f"#SBATCH --mem={args.mem}G" if args.mem else ""} +#SBATCH --output="{os.path.join(outbase, args.name + r'_%A_%a.out')}" +#SBATCH --error="{os.path.join(errbase, args.name + r'_%A_%a.out')}" +{f"#SBATCH -A {args.account}" if args.account is not None else ""} +#SBATCH --gres=gpu:{args.gpus} +{f"#SBATCH --cpus-per-task={args.cpus}" if args.cpus is not None else ""} +#SBATCH --array=0-{len_com-1}%{(len_com if args.at_a_time <= 0 else args.at_a_time)} +{exclusion} + +{f"source {args.bashrc}" if args.bashrc is not None else ""} +export WANDB__SERVICE_WAIT=300 +export OMP_NUM_THREADS=1 +# get random port +export MASTER_PORT=$(( ((RANDOM<<15)|RANDOM) % 63001 + 2000 )) +# get first node in slurm +export MASTER_ADDR=$(scontrol show hostnames $SLURM_NODELIST | head -n1) + +args=( +{all_com_str} +) +export PYTHONPATH={os.getcwd()} +cd {os.getcwd()} + +""" + jobstring + '\nwait' + + outpath = 'mini_sbatch.sh' + with open(outpath, "w") as f: + f.write(filec) + if args.dry: + print(f'check {outpath}') + exit(0) + jobid = os.popen(f'sbatch {outpath}').read().splitlines()[-1].split()[-1].strip() + print(jobid) diff --git a/scripts/wandb_sync.py b/scripts/wandb_sync.py new file mode 100644 index 00000000..e443416f --- /dev/null +++ b/scripts/wandb_sync.py @@ -0,0 +1,80 @@ +import argparse +import os +from pathlib import Path + +from tqdm import tqdm +from multiprocessing.pool import ThreadPool + +if 'scripts' in os.path.dirname(os.path.abspath(__file__)): + mammoth_path = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) +else: + mammoth_path = os.getcwd() + + +def parse_args(): + parser = argparse.ArgumentParser() + parser.add_argument("--n_workers", type=int, help="Number of workers to use. If not specified, will use all available cores. (Recommended: n_cpus*3)") + parser.add_argument("--limit", type=int, help="Limit the number of runs to sync") + parser.add_argument("--reverse", action="store_true", help="Reverse the order of runs to sync") + args = parser.parse_args() + + if args.n_workers is None: + args.n_workers = 4 if not hasattr(os, "sched_getaffinity") else len(os.sched_getaffinity(0)) + print("'n_workers' not specified, using", args.n_workers, "workers") + else: + print("Using", args.n_workers, "workers") + + return args + + +def check_offline(): + """Checks if exists file with "offline" in name""" + return len([f for f in os.listdir() if 'offline' in f]) > 0 + + +def sync_run(run): + """Syncs a single run""" + os.system(f"wandb sync {run} >>synced.log 2>>err.log") + + +if __name__ == "__main__": + args = parse_args() + os.chdir(mammoth_path) + + if check_offline(): + runlist = [f for f in os.listdir() if "offline" in f.lower()] + else: + runlist = [os.path.join("wandb", f) for f in os.listdir('wandb') if "offline" in f.lower()] + + if args.reverse: + runlist = runlist[::-1] + + if args.limit is not None: + runlist = runlist[:args.limit] + print("Limiting to", args.limit, "runs") + + print(len(runlist), "runs to sync") + + # delete file synced.log if exists + if Path("synced.log").exists(): + Path("synced.log").unlink() + + # delete file err.log if exists + if Path("err.log").exists(): + Path("err.log").unlink() + + # sync all runs in multiple threads and log tqdm + with ThreadPool(args.n_workers) as p: + r = list(tqdm(p.imap(sync_run, runlist), total=len(runlist))) + + # check if there are any errors in err.log + if Path("err.log").exists(): + with open("err.log", "r") as f: + if f.read(): + print("Error in syncing, check err.log") + exit(1) + else: + print("No error in syncing") + exit(0) + + exit(0) diff --git a/tests/test_bic.py b/tests/test_bic.py new file mode 100644 index 00000000..8a20cd00 --- /dev/null +++ b/tests/test_bic.py @@ -0,0 +1,41 @@ +import os +import sys +sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) +from utils.main import main +import pytest + + +@pytest.mark.parametrize('distill_after_bic', [0, 1]) +def test_bic(distill_after_bic): + sys.argv = ['mammoth', + '--model', + 'bic', + '--dataset', + 'seq-cifar10', + '--bic_epochs', + '5', + '--distill_after_bic', + str(distill_after_bic), + '--buffer_size', + '50', + '--lr', + '1e-4', + '--n_epochs', + '1', + '--batch_size', + '4', + '--non_verbose', + '1', + '--num_workers', + '0', + '--seed', + '0', + '--debug_mode', + '1'] + + # log all outputs to file + if not os.path.exists(os.path.join(os.path.dirname(os.path.abspath(__file__)), 'logs')): + os.mkdir(os.path.join(os.path.dirname(os.path.abspath(__file__)), 'logs')) + sys.stdout = open(os.path.join(os.path.dirname(os.path.abspath(__file__)), 'logs', f'test_bic.{distill_after_bic}.log'), 'w', encoding='utf-8') + sys.stderr = sys.stdout + main() diff --git a/tests/test_ccic.py b/tests/test_ccic.py new file mode 100644 index 00000000..9553575c --- /dev/null +++ b/tests/test_ccic.py @@ -0,0 +1,41 @@ +import os +import sys +sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) +from utils.main import main, parse_args +import pytest + + +@pytest.mark.parametrize('dataset', ['seq-cifar10']) +@pytest.mark.parametrize('label_perc', ['0.1', '0.08']) +def test_ccic(dataset, label_perc): + sys.argv = ['mammoth', + '--model', + 'ccic', + '--dataset', + dataset, + '--buffer_size', + '500', + '--label_perc', + label_perc, + '--lr', + '1e-4', + '--n_epochs', + '1', + '--batch_size', + '32', + '--non_verbose', + '1', + '--num_workers', + '0', + '--seed', + '0', + '--debug_mode', + '1'] + + # log all outputs to file + if not os.path.exists(os.path.join(os.path.dirname(os.path.abspath(__file__)), 'logs')): + os.mkdir(os.path.join(os.path.dirname(os.path.abspath(__file__)), 'logs')) + sys.stdout = open(os.path.join(os.path.dirname(os.path.abspath(__file__)), 'logs', f'test_ccic.{dataset}.log'), 'w', encoding='utf-8') + sys.stderr = sys.stdout + + main() diff --git a/tests/test_coda.py b/tests/test_coda.py new file mode 100644 index 00000000..1066e869 --- /dev/null +++ b/tests/test_coda.py @@ -0,0 +1,36 @@ +import os +import sys +sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) +from utils.main import main, parse_args +import pytest + + +@pytest.mark.parametrize('dataset', ['seq-cifar100-224', 'seq-imagenet-r']) +def test_coda(dataset): + sys.argv = ['mammoth', + '--model', + 'coda-prompt', + '--dataset', + dataset, + '--lr', + '1e-4', + '--n_epochs', + '1', + '--batch_size', + '2', + '--non_verbose', + '1', + '--num_workers', + '0', + '--seed', + '0', + '--debug_mode', + '1'] + + # log all outputs to file + if not os.path.exists(os.path.join(os.path.dirname(os.path.abspath(__file__)), 'logs')): + os.mkdir(os.path.join(os.path.dirname(os.path.abspath(__file__)), 'logs')) + sys.stdout = open(os.path.join(os.path.dirname(os.path.abspath(__file__)), 'logs', f'test_coda.{dataset}.log'), 'w', encoding='utf-8') + sys.stderr = sys.stdout + + main() diff --git a/tests/test_cssl_support.py b/tests/test_cssl_support.py new file mode 100644 index 00000000..47ea91b6 --- /dev/null +++ b/tests/test_cssl_support.py @@ -0,0 +1,41 @@ +import os +import sys +sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) +from utils.main import main, parse_args +import pytest + + +@pytest.mark.parametrize('dataset', ['seq-cifar10', 'seq-tinyimg']) +@pytest.mark.parametrize('label_perc', ['0.1', '0.08', '0.5', '1']) +def test_cssl_support(dataset, label_perc): + sys.argv = ['mammoth', + '--model', + 'er', + '--dataset', + dataset, + '--buffer_size', + '10', + '--label_perc', + label_perc, + '--lr', + '1e-4', + '--n_epochs', + '1', + '--batch_size', + '2', + '--non_verbose', + '1', + '--num_workers', + '0', + '--seed', + '0', + '--debug_mode', + '1'] + + # log all outputs to file + if not os.path.exists(os.path.join(os.path.dirname(os.path.abspath(__file__)), 'logs')): + os.mkdir(os.path.join(os.path.dirname(os.path.abspath(__file__)), 'logs')) + sys.stdout = open(os.path.join(os.path.dirname(os.path.abspath(__file__)), 'logs', f'test_cssl_support.{dataset}.{label_perc}.log'), 'w', encoding='utf-8') + sys.stderr = sys.stdout + + main() diff --git a/tests/test_datasets.py b/tests/test_datasets.py new file mode 100644 index 00000000..bf0bbc62 --- /dev/null +++ b/tests/test_datasets.py @@ -0,0 +1,66 @@ +import os +import sys +sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) +from utils.main import main, parse_args +import pytest + + +@pytest.mark.parametrize('dataset', ['seq-mnist', 'seq-cifar10', 'seq-cifar100', 'seq-tinyimg', + 'rot-mnist', 'perm-mnist', 'mnist-360', 'seq-cifar100-224', + 'seq-cifar100-224-rs', 'seq-tinyimg-r', 'seq-cub200', 'seq-imagenet-r']) +def test_datasets(dataset): + sys.argv = ['mammoth', + '--model', + 'sgd', + '--dataset', + dataset, + '--lr', + '1e-4', + '--n_epochs', + '1', + '--batch_size', + '2', + '--non_verbose', + '1', + '--seed', + '0', + '--num_workers', + '0', + '--debug_mode', + '1'] + + # log all outputs to file + if not os.path.exists(os.path.join(os.path.dirname(os.path.abspath(__file__)), 'logs')): + os.mkdir(os.path.join(os.path.dirname(os.path.abspath(__file__)), 'logs')) + sys.stdout = open(os.path.join(os.path.dirname(os.path.abspath(__file__)), 'logs', f'test_datasets.{dataset}.log'), 'w', encoding='utf-8') + sys.stderr = sys.stdout + + main() + + +def test_dataset_workers(): + sys.argv = ['mammoth', + '--model', + 'sgd', + '--dataset', + 'seq-cifar10', + '--lr', + '1e-4', + '--n_epochs', + '1', + '--batch_size', + '2', + '--non_verbose', + '1', + '--seed', + '0', + '--debug_mode', + '1'] + + # log all outputs to file + if not os.path.exists(os.path.join(os.path.dirname(os.path.abspath(__file__)), 'logs')): + os.mkdir(os.path.join(os.path.dirname(os.path.abspath(__file__)), 'logs')) + sys.stdout = open(os.path.join(os.path.dirname(os.path.abspath(__file__)), 'logs', f'test_datasets.workers.log'), 'w', encoding='utf-8') + sys.stderr = sys.stdout + + main() diff --git a/tests/test_der_example.py b/tests/test_der_example.py index a712d048..048b3f0c 100644 --- a/tests/test_der_example.py +++ b/tests/test_der_example.py @@ -5,7 +5,7 @@ import pytest -@pytest.mark.parametrize('dataset', ['seq-mnist', 'seq-cifar10', 'seq-cifar100', 'seq-tinyimg', 'rot-mnist', 'perm-mnist', 'mnist-360']) +@pytest.mark.parametrize('dataset', ['seq-mnist', 'seq-cifar10', 'rot-mnist', 'perm-mnist', 'mnist-360', 'seq-cifar100-224']) def test_der(dataset): sys.argv = ['mammoth', '--model', @@ -20,8 +20,55 @@ def test_der(dataset): '.5', '--n_epochs', '1', + '--batch_size', + '2', + '--non_verbose', + '1', + '--num_workers', + '0', + '--seed', + '0', + '--debug_mode', + '1'] + # log all outputs to file + if not os.path.exists(os.path.join(os.path.dirname(os.path.abspath(__file__)), 'logs')): + os.mkdir(os.path.join(os.path.dirname(os.path.abspath(__file__)), 'logs')) + sys.stdout = open(os.path.join(os.path.dirname(os.path.abspath(__file__)), 'logs', f'test_der_example.{dataset}.log'), 'w', encoding='utf-8') + sys.stderr = sys.stdout + main() + + +@pytest.mark.parametrize('dataset', ['seq-mnist', 'seq-cifar10', 'rot-mnist', 'perm-mnist', 'mnist-360', 'seq-cifar100-224']) +def test_derpp(dataset): + sys.argv = ['mammoth', + '--model', + 'derpp', + '--dataset', + dataset, + '--buffer_size', + '10', + '--lr', + '1e-4', + '--alpha', + '.5', + '--beta', + '.5', + '--n_epochs', + '1', + '--batch_size', + '2', + '--non_verbose', + '1', + '--num_workers', + '0', + '--seed', + '0', '--debug_mode', '1'] - a = parse_args() - main(a) + # log all outputs to file + if not os.path.exists(os.path.join(os.path.dirname(os.path.abspath(__file__)), 'logs')): + os.mkdir(os.path.join(os.path.dirname(os.path.abspath(__file__)), 'logs')) + sys.stdout = open(os.path.join(os.path.dirname(os.path.abspath(__file__)), 'logs', f'test_der_example.{dataset}.log'), 'w', encoding='utf-8') + sys.stderr = sys.stdout + main() diff --git a/tests/test_dualprompt.py b/tests/test_dualprompt.py new file mode 100644 index 00000000..3a7a5757 --- /dev/null +++ b/tests/test_dualprompt.py @@ -0,0 +1,35 @@ +import os +import sys +sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) +from utils.main import main, parse_args +import pytest + + +def test_l2p(): + sys.argv = ['mammoth', + '--model', + 'dualprompt', + '--dataset', + 'seq-cifar100-224', + '--lr', + '1e-4', + '--n_epochs', + '1', + '--batch_size', + '2', + '--non_verbose', + '1', + '--num_workers', + '0', + '--seed', + '0', + '--debug_mode', + '1'] + + # log all outputs to file + if not os.path.exists(os.path.join(os.path.dirname(os.path.abspath(__file__)), 'logs')): + os.mkdir(os.path.join(os.path.dirname(os.path.abspath(__file__)), 'logs')) + sys.stdout = open(os.path.join(os.path.dirname(os.path.abspath(__file__)), 'logs', f'test_dualprompt.log'), 'w', encoding='utf-8') + sys.stderr = sys.stdout + + main() diff --git a/tests/test_er_example.py b/tests/test_er_example.py index 408d3d4f..c09a8ab1 100644 --- a/tests/test_er_example.py +++ b/tests/test_er_example.py @@ -5,7 +5,7 @@ import pytest -@pytest.mark.parametrize('dataset', ['seq-mnist', 'seq-cifar10', 'seq-cifar100', 'seq-tinyimg', 'rot-mnist', 'perm-mnist', 'mnist-360']) +@pytest.mark.parametrize('dataset', ['seq-mnist', 'seq-cifar10', 'rot-mnist', 'perm-mnist', 'mnist-360']) def test_er(dataset): sys.argv = ['mammoth', '--model', @@ -18,8 +18,21 @@ def test_er(dataset): '1e-4', '--n_epochs', '1', + '--batch_size', + '2', + '--non_verbose', + '1', + '--num_workers', + '0', + '--seed', + '0', '--debug_mode', '1'] - a = parse_args() - main(a) + # log all outputs to file + if not os.path.exists(os.path.join(os.path.dirname(os.path.abspath(__file__)), 'logs')): + os.mkdir(os.path.join(os.path.dirname(os.path.abspath(__file__)), 'logs')) + sys.stdout = open(os.path.join(os.path.dirname(os.path.abspath(__file__)), 'logs', f'test_er_example.{dataset}.log'), 'w', encoding='utf-8') + sys.stderr = sys.stdout + + main() diff --git a/tests/test_fdr.py b/tests/test_fdr.py new file mode 100644 index 00000000..5950d36f --- /dev/null +++ b/tests/test_fdr.py @@ -0,0 +1,38 @@ +import os +import sys +sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) +from utils.main import main +import pytest + + +def test_fdr(): + sys.argv = ['mammoth', + '--model', + 'fdr', + '--dataset', + 'seq-cifar10', + '--buffer_size', + '50', + '--alpha', + '0.5', + '--lr', + '1e-4', + '--n_epochs', + '1', + '--batch_size', + '4', + '--non_verbose', + '1', + '--num_workers', + '0', + '--seed', + '0', + '--debug_mode', + '1'] + + # log all outputs to file + if not os.path.exists(os.path.join(os.path.dirname(os.path.abspath(__file__)), 'logs')): + os.mkdir(os.path.join(os.path.dirname(os.path.abspath(__file__)), 'logs')) + sys.stdout = open(os.path.join(os.path.dirname(os.path.abspath(__file__)), 'logs', f'test_fdr.log'), 'w', encoding='utf-8') + sys.stderr = sys.stdout + main() diff --git a/tests/test_gdumb.py b/tests/test_gdumb.py new file mode 100644 index 00000000..fabbf495 --- /dev/null +++ b/tests/test_gdumb.py @@ -0,0 +1,73 @@ +import os +import sys +sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) +from utils.main import main +import pytest + + +def test_gdumb_cutmix(): + sys.argv = ['mammoth', + '--model', + 'gdumb', + '--dataset', + 'seq-cifar10', + '--fitting_epochs', + '2', + '--cutmix_alpha', + '0.3', + '--buffer_size', + '50', + '--lr', + '1e-4', + '--n_epochs', + '1', + '--batch_size', + '4', + '--non_verbose', + '1', + '--num_workers', + '0', + '--seed', + '0', + '--debug_mode', + '1'] + + # log all outputs to file + if not os.path.exists(os.path.join(os.path.dirname(os.path.abspath(__file__)), 'logs')): + os.mkdir(os.path.join(os.path.dirname(os.path.abspath(__file__)), 'logs')) + sys.stdout = open(os.path.join(os.path.dirname(os.path.abspath(__file__)), 'logs', f'test_gdumb_cutmix.log'), 'w', encoding='utf-8') + sys.stderr = sys.stdout + main() + + +def test_gdumb(): + sys.argv = ['mammoth', + '--model', + 'gdumb', + '--dataset', + 'seq-cifar10', + '--fitting_epochs', + '2', + '--buffer_size', + '50', + '--lr', + '1e-4', + '--n_epochs', + '1', + '--batch_size', + '4', + '--non_verbose', + '1', + '--num_workers', + '0', + '--seed', + '0', + '--debug_mode', + '1'] + + # log all outputs to file + if not os.path.exists(os.path.join(os.path.dirname(os.path.abspath(__file__)), 'logs')): + os.mkdir(os.path.join(os.path.dirname(os.path.abspath(__file__)), 'logs')) + sys.stdout = open(os.path.join(os.path.dirname(os.path.abspath(__file__)), 'logs', f'test_gdumb.log'), 'w', encoding='utf-8') + sys.stderr = sys.stdout + main() diff --git a/tests/test_gem.py b/tests/test_gem.py new file mode 100644 index 00000000..78a7d076 --- /dev/null +++ b/tests/test_gem.py @@ -0,0 +1,43 @@ +import os +import sys +sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) +from utils.main import main +import pytest + + +def unsupport_quadprog(): + return os.name == 'nt' + + +@pytest.mark.skipif(unsupport_quadprog(), reason='`quadprog` not supported on Windows. Good luck.') +@pytest.mark.parametrize('dataset', ['seq-cifar10', 'seq-mnist']) +@pytest.mark.parametrize('model', ['gem', 'agem', 'agem_r']) +def test_gem(dataset, model): + sys.argv = ['mammoth', + '--model', + model, + '--dataset', + dataset, + '--lr', + '1e-4', + '--n_epochs', + '1', + '--buffer_size', + '50', + '--batch_size', + '4', + '--non_verbose', + '1', + '--num_workers', + '0', + '--seed', + '0', + '--debug_mode', + '1'] + + # log all outputs to file + if not os.path.exists(os.path.join(os.path.dirname(os.path.abspath(__file__)), 'logs')): + os.mkdir(os.path.join(os.path.dirname(os.path.abspath(__file__)), 'logs')) + sys.stdout = open(os.path.join(os.path.dirname(os.path.abspath(__file__)), 'logs', f'test_{model}.{dataset}.log'), 'w', encoding='utf-8') + sys.stderr = sys.stdout + main() diff --git a/tests/test_hal.py b/tests/test_hal.py new file mode 100644 index 00000000..c94185cc --- /dev/null +++ b/tests/test_hal.py @@ -0,0 +1,37 @@ +import os +import sys +sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) +from utils.main import main +import pytest + + +@pytest.mark.parametrize('dataset', ['seq-cifar10', 'seq-mnist']) +def test_hal(dataset): + sys.argv = ['mammoth', + '--model', + 'hal', + '--dataset', + dataset, + '--lr', + '1e-4', + '--n_epochs', + '1', + '--buffer_size', + '50', + '--batch_size', + '4', + '--non_verbose', + '1', + '--num_workers', + '0', + '--seed', + '0', + '--debug_mode', + '1'] + + # log all outputs to file + if not os.path.exists(os.path.join(os.path.dirname(os.path.abspath(__file__)), 'logs')): + os.mkdir(os.path.join(os.path.dirname(os.path.abspath(__file__)), 'logs')) + sys.stdout = open(os.path.join(os.path.dirname(os.path.abspath(__file__)), 'logs', f'test_hal.{dataset}.log'), 'w', encoding='utf-8') + sys.stderr = sys.stdout + main() diff --git a/tests/test_icarl.py b/tests/test_icarl.py new file mode 100644 index 00000000..051f3528 --- /dev/null +++ b/tests/test_icarl.py @@ -0,0 +1,37 @@ +import os +import sys +sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) +from utils.main import main +import pytest + + +@pytest.mark.parametrize('dataset', ['seq-cifar10', 'seq-mnist']) +def test_icarl(dataset): + sys.argv = ['mammoth', + '--model', + 'icarl', + '--dataset', + dataset, + '--buffer_size', + '50', + '--lr', + '1e-4', + '--n_epochs', + '1', + '--batch_size', + '4', + '--non_verbose', + '1', + '--num_workers', + '0', + '--seed', + '0', + '--debug_mode', + '1'] + + # log all outputs to file + if not os.path.exists(os.path.join(os.path.dirname(os.path.abspath(__file__)), 'logs')): + os.mkdir(os.path.join(os.path.dirname(os.path.abspath(__file__)), 'logs')) + sys.stdout = open(os.path.join(os.path.dirname(os.path.abspath(__file__)), 'logs', f'test_icarl.{dataset}.log'), 'w', encoding='utf-8') + sys.stderr = sys.stdout + main() diff --git a/tests/test_l2p.py b/tests/test_l2p.py new file mode 100644 index 00000000..706081aa --- /dev/null +++ b/tests/test_l2p.py @@ -0,0 +1,36 @@ +import os +import sys +sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) +from utils.main import main, parse_args +import pytest + + +@pytest.mark.parametrize('dataset', ['seq-cifar100-224', 'seq-imagenet-r']) +def test_l2p(dataset): + sys.argv = ['mammoth', + '--model', + 'l2p', + '--dataset', + dataset, + '--lr', + '1e-4', + '--n_epochs', + '1', + '--batch_size', + '2', + '--non_verbose', + '1', + '--num_workers', + '0', + '--seed', + '0', + '--debug_mode', + '1'] + + # log all outputs to file + if not os.path.exists(os.path.join(os.path.dirname(os.path.abspath(__file__)), 'logs')): + os.mkdir(os.path.join(os.path.dirname(os.path.abspath(__file__)), 'logs')) + sys.stdout = open(os.path.join(os.path.dirname(os.path.abspath(__file__)), 'logs', f'test_l2p.{dataset}.log'), 'w', encoding='utf-8') + sys.stderr = sys.stdout + + main() diff --git a/tests/test_lider.py b/tests/test_lider.py new file mode 100644 index 00000000..2e590d97 --- /dev/null +++ b/tests/test_lider.py @@ -0,0 +1,149 @@ +import os +import sys +sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) +from utils.main import main +import pytest + + +def test_gdumb_lider(): + sys.argv = ['mammoth', + '--model', + 'gdumb-lider', + '--dataset', + 'seq-cifar10', + '--buffer_size', + '50', + '--lr', + '1e-4', + '--n_epochs', + '1', + '--batch_size', + '4', + '--alpha_lip_lambda', + '0.5', + '--beta_lip_lambda', + '0.5', + '--non_verbose', + '1', + '--num_workers', + '0', + '--seed', + '0', + '--debug_mode', + '1'] + + # log all outputs to file + if not os.path.exists(os.path.join(os.path.dirname(os.path.abspath(__file__)), 'logs')): + os.mkdir(os.path.join(os.path.dirname(os.path.abspath(__file__)), 'logs')) + sys.stdout = open(os.path.join(os.path.dirname(os.path.abspath(__file__)), 'logs', f'test_gdumb-lider.log'), 'w', encoding='utf-8') + sys.stderr = sys.stdout + main() + + +def test_icarl_lider(): + sys.argv = ['mammoth', + '--model', + 'icarl-lider', + '--dataset', + 'seq-cifar10', + '--buffer_size', + '50', + '--lr', + '1e-4', + '--n_epochs', + '1', + '--batch_size', + '4', + '--alpha_lip_lambda', + '0.5', + '--beta_lip_lambda', + '0.5', + '--non_verbose', + '1', + '--num_workers', + '0', + '--seed', + '0', + '--debug_mode', + '1'] + + # log all outputs to file + if not os.path.exists(os.path.join(os.path.dirname(os.path.abspath(__file__)), 'logs')): + os.mkdir(os.path.join(os.path.dirname(os.path.abspath(__file__)), 'logs')) + sys.stdout = open(os.path.join(os.path.dirname(os.path.abspath(__file__)), 'logs', f'test_icarl-lider.log'), 'w', encoding='utf-8') + sys.stderr = sys.stdout + main() + + +def test_erace_lider(): + sys.argv = ['mammoth', + '--model', + 'er-ace-lider', + '--dataset', + 'seq-cifar10', + '--buffer_size', + '50', + '--lr', + '1e-4', + '--n_epochs', + '1', + '--batch_size', + '4', + '--alpha_lip_lambda', + '0.5', + '--beta_lip_lambda', + '0.5', + '--non_verbose', + '1', + '--num_workers', + '0', + '--seed', + '0', + '--debug_mode', + '1'] + + # log all outputs to file + if not os.path.exists(os.path.join(os.path.dirname(os.path.abspath(__file__)), 'logs')): + os.mkdir(os.path.join(os.path.dirname(os.path.abspath(__file__)), 'logs')) + sys.stdout = open(os.path.join(os.path.dirname(os.path.abspath(__file__)), 'logs', f'test_er-ace-lider.log'), 'w', encoding='utf-8') + sys.stderr = sys.stdout + main() + + +def test_derpp_lider(): + sys.argv = ['mammoth', + '--model', + 'derpp-lider', + '--dataset', + 'seq-cifar10', + '--buffer_size', + '50', + '--lr', + '1e-4', + '--n_epochs', + '1', + '--alpha', + '0.5', + '--beta', + '0.5', + '--batch_size', + '4', + '--alpha_lip_lambda', + '0.5', + '--beta_lip_lambda', + '0.5', + '--non_verbose', + '1', + '--num_workers', + '0', + '--seed', + '0', + '--debug_mode', + '1'] + + # log all outputs to file + if not os.path.exists(os.path.join(os.path.dirname(os.path.abspath(__file__)), 'logs')): + os.mkdir(os.path.join(os.path.dirname(os.path.abspath(__file__)), 'logs')) + sys.stdout = open(os.path.join(os.path.dirname(os.path.abspath(__file__)), 'logs', f'test_derpp-lider.log'), 'w', encoding='utf-8') + sys.stderr = sys.stdout + main() diff --git a/tests/test_lucir.py b/tests/test_lucir.py new file mode 100644 index 00000000..d524ec49 --- /dev/null +++ b/tests/test_lucir.py @@ -0,0 +1,42 @@ +import os +import sys +sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) +from utils.main import main +import pytest + + +@pytest.mark.parametrize('dataset', ['seq-cifar10', 'seq-mnist']) +@pytest.mark.parametrize('imprint_weights', [0, 1]) +def test_lucir(dataset, imprint_weights): + sys.argv = ['mammoth', + '--model', + 'lucir', + '--dataset', + dataset, + '--buffer_size', + '50', + '--lr', + '1e-4', + '--n_epochs', + '1', + '--imprint_weights', + str(imprint_weights), + '--batch_size', + '4', + '--non_verbose', + '1', + '--num_workers', + '0', + '--seed', + '0', + '--debug_mode', + '1', + '--fitting_epochs', + '2'] + + # log all outputs to file + if not os.path.exists(os.path.join(os.path.dirname(os.path.abspath(__file__)), 'logs')): + os.mkdir(os.path.join(os.path.dirname(os.path.abspath(__file__)), 'logs')) + sys.stdout = open(os.path.join(os.path.dirname(os.path.abspath(__file__)), 'logs', f'test_lucir.{dataset}.{imprint_weights}.log'), 'w', encoding='utf-8') + sys.stderr = sys.stdout + main() diff --git a/tests/test_pnn.py b/tests/test_pnn.py new file mode 100644 index 00000000..e8d050b3 --- /dev/null +++ b/tests/test_pnn.py @@ -0,0 +1,35 @@ +import os +import sys +sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) +from utils.main import main +import pytest + + +@pytest.mark.parametrize('dataset', ['seq-cifar10', 'seq-mnist']) +def test_pnn(dataset): + sys.argv = ['mammoth', + '--model', + 'pnn', + '--dataset', + dataset, + '--lr', + '1e-4', + '--n_epochs', + '1', + '--batch_size', + '4', + '--non_verbose', + '1', + '--num_workers', + '0', + '--seed', + '0', + '--debug_mode', + '1'] + + # log all outputs to file + if not os.path.exists(os.path.join(os.path.dirname(os.path.abspath(__file__)), 'logs')): + os.mkdir(os.path.join(os.path.dirname(os.path.abspath(__file__)), 'logs')) + sys.stdout = open(os.path.join(os.path.dirname(os.path.abspath(__file__)), 'logs', f'test_pnn.{dataset}.log'), 'w', encoding='utf-8') + sys.stderr = sys.stdout + main() diff --git a/tests/test_regularization.py b/tests/test_regularization.py new file mode 100644 index 00000000..df2b5edd --- /dev/null +++ b/tests/test_regularization.py @@ -0,0 +1,106 @@ +import os +import sys +sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) +from utils.main import main +import pytest + + +@pytest.mark.parametrize('dataset', ['seq-cifar10', 'seq-mnist']) +@pytest.mark.parametrize('model', ['ewc_on']) +def test_ewc(dataset, model): + sys.argv = ['mammoth', + '--model', + model, + '--dataset', + dataset, + '--lr', + '1e-4', + '--e_lambda', + '0.5', + '--gamma', + '1', + '--n_epochs', + '1', + '--batch_size', + '4', + '--non_verbose', + '1', + '--num_workers', + '0', + '--seed', + '0', + '--debug_mode', + '1'] + + # log all outputs to file + if not os.path.exists(os.path.join(os.path.dirname(os.path.abspath(__file__)), 'logs')): + os.mkdir(os.path.join(os.path.dirname(os.path.abspath(__file__)), 'logs')) + sys.stdout = open(os.path.join(os.path.dirname(os.path.abspath(__file__)), 'logs', f'test_{model}.{dataset}.log'), 'w', encoding='utf-8') + sys.stderr = sys.stdout + main() + + +@pytest.mark.parametrize('dataset', ['seq-cifar10', 'seq-mnist']) +@pytest.mark.parametrize('model', ['si']) +def test_si(dataset, model): + sys.argv = ['mammoth', + '--model', + model, + '--dataset', + dataset, + '--lr', + '1e-4', + '--c', + '0.5', + '--xi', + '1', + '--n_epochs', + '1', + '--batch_size', + '4', + '--non_verbose', + '1', + '--num_workers', + '0', + '--seed', + '0', + '--debug_mode', + '1'] + + # log all outputs to file + if not os.path.exists(os.path.join(os.path.dirname(os.path.abspath(__file__)), 'logs')): + os.mkdir(os.path.join(os.path.dirname(os.path.abspath(__file__)), 'logs')) + sys.stdout = open(os.path.join(os.path.dirname(os.path.abspath(__file__)), 'logs', f'test_{model}.{dataset}.log'), 'w', encoding='utf-8') + sys.stderr = sys.stdout + main() + + +@pytest.mark.parametrize('dataset', ['seq-cifar10', 'seq-mnist']) +@pytest.mark.parametrize('model', ['lwf_mc', 'lwf']) +def test_lwf(dataset, model): + sys.argv = ['mammoth', + '--model', + model, + '--dataset', + dataset, + '--lr', + '1e-4', + '--n_epochs', + '1', + '--batch_size', + '4', + '--non_verbose', + '1', + '--num_workers', + '0', + '--seed', + '0', + '--debug_mode', + '1'] + + # log all outputs to file + if not os.path.exists(os.path.join(os.path.dirname(os.path.abspath(__file__)), 'logs')): + os.mkdir(os.path.join(os.path.dirname(os.path.abspath(__file__)), 'logs')) + sys.stdout = open(os.path.join(os.path.dirname(os.path.abspath(__file__)), 'logs', f'test_{model}.{dataset}.log'), 'w', encoding='utf-8') + sys.stderr = sys.stdout + main() diff --git a/tests/test_slca.py b/tests/test_slca.py new file mode 100644 index 00000000..456985dc --- /dev/null +++ b/tests/test_slca.py @@ -0,0 +1,35 @@ +import os +import sys +sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) +from utils.main import main +import pytest + + +def test_slca(): + sys.argv = ['mammoth', + '--model', + 'slca', + '--dataset', + 'seq-cifar100-224', + '--lr', + '1e-4', + '--n_epochs', + '1', + '--batch_size', + '2', + '--non_verbose', + '1', + '--num_workers', + '0', + '--seed', + '0', + '--debug_mode', + '1'] + + # log all outputs to file + if not os.path.exists(os.path.join(os.path.dirname(os.path.abspath(__file__)), 'logs')): + os.mkdir(os.path.join(os.path.dirname(os.path.abspath(__file__)), 'logs')) + sys.stdout = open(os.path.join(os.path.dirname(os.path.abspath(__file__)), 'logs', f'test_slca.log'), 'w', encoding='utf-8') + sys.stderr = sys.stdout + + main() diff --git a/tests/test_twf.py b/tests/test_twf.py new file mode 100644 index 00000000..a80c517c --- /dev/null +++ b/tests/test_twf.py @@ -0,0 +1,106 @@ +import os +import sys +sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) +from utils.main import main +import pytest + + +@pytest.mark.parametrize('dataset', ['seq-cifar100', 'seq-tinyimg']) # , 'seq-cub200' +@pytest.mark.parametrize('resize_maps', ['0', '1']) +def test_twf_random_init(dataset, resize_maps): + sys.argv = ['mammoth', + '--model', + 'twf', + '--dataset', + dataset, + "--buffer_size", + "50", + '--der_alpha', + '0.5', + '--der_beta', + '0.5', + '--lambda_fp', + '0.01', + '--lambda_diverse_loss', + '0.1', + '--lambda_fp_replay', + '0.1', + '--resize_maps', + resize_maps, + '--lr', + '1e-4', + '--n_epochs', + '1', + '--batch_size', + '2', + '--virtual_bs_iterations', + '2', + '--non_verbose', + '1', + '--num_workers', + '0', + '--seed', + '0', + '--debug_mode', + '1'] + + # log all outputs to file + if not os.path.exists(os.path.join(os.path.dirname(os.path.abspath(__file__)), 'logs')): + os.mkdir(os.path.join(os.path.dirname(os.path.abspath(__file__)), 'logs')) + sys.stdout = open(os.path.join(os.path.dirname(os.path.abspath(__file__)), 'logs', f'test_twf_random_init.{dataset}.resize_maps_{resize_maps}.log'), 'w', encoding='utf-8') + sys.stderr = sys.stdout + + main() + + +@pytest.mark.parametrize(('dataset', 'loadcheck'), + [('seq-cifar100', 'https://unimore365-my.sharepoint.com/:u:/g/personal/215580_unimore_it/EeWEOSls505AsMCTXAxWoLUBmeIjCiplFl40zDOCmB_lEw?e=Izv0jh'), + ('seq-cub200', 'https://unimore365-my.sharepoint.com/:u:/g/personal/215580_unimore_it/EV7I5BpJvURIhMMk95r3x5YBAZKch-NPFEJ9hhPQghcWCw?e=dt8wp3'), + ('seq-cifar10', 'https://unimore365-my.sharepoint.com/:u:/g/personal/215580_unimore_it/EWttSkmKfkNEpEWNiPoS3zUB6uzZydc0irOW0Xbu3jtr3Q?e=JQ6Fay')]) +@pytest.mark.parametrize('resize_maps', ['0', '1']) +def test_twf_with_checkpoint(dataset, loadcheck, resize_maps): + sys.argv = ['mammoth', + '--model', + 'twf', + '--dataset', + dataset, + "--buffer_size", + "50", + '--der_alpha', + '0.5', + '--der_beta', + '0.5', + '--lambda_fp', + '0.01', + '--lambda_diverse_loss', + '0.3', + '--lambda_fp_replay', + '0.5', + '--resize_maps', + resize_maps, + '--loadcheck', + loadcheck, + '--lr', + '1e-4', + '--n_epochs', + '1', + '--batch_size', + '2', + '--virtual_bs_iterations', + '2', + '--non_verbose', + '1', + '--num_workers', + '0', + '--seed', + '0', + '--debug_mode', + '1'] + + # log all outputs to file + if not os.path.exists(os.path.join(os.path.dirname(os.path.abspath(__file__)), 'logs')): + os.mkdir(os.path.join(os.path.dirname(os.path.abspath(__file__)), 'logs')) + sys.stdout = open(os.path.join(os.path.dirname(os.path.abspath(__file__)), 'logs', f'test_twf_with_checkpoint.{dataset}.resize_maps_{resize_maps}.log'), 'w', encoding='utf-8') + sys.stderr = sys.stdout + + main() diff --git a/tests/test_xder.py b/tests/test_xder.py new file mode 100644 index 00000000..f01d06bb --- /dev/null +++ b/tests/test_xder.py @@ -0,0 +1,41 @@ +import os +import sys +sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) +from utils.main import main +import pytest + + +@pytest.mark.parametrize('model', ['xder', 'xder_rpc', 'xder_ce']) +def test_xder(model): + sys.argv = ['mammoth', + '--model', + model, + '--dataset', + 'seq-cifar10', + '--buffer_size', + '50', + '--lr', + '1e-4', + '--alpha', + '0.8', + '--beta', + '0.8', + '--n_epochs', + '1', + '--batch_size', + '4', + '--non_verbose', + '1', + '--num_workers', + '0', + '--seed', + '0', + '--debug_mode', + '1'] + + # log all outputs to file + if not os.path.exists(os.path.join(os.path.dirname(os.path.abspath(__file__)), 'logs')): + os.mkdir(os.path.join(os.path.dirname(os.path.abspath(__file__)), 'logs')) + sys.stdout = open(os.path.join(os.path.dirname(os.path.abspath(__file__)), 'logs', f'test_xder.{model}.log'), 'w', encoding='utf-8') + sys.stderr = sys.stdout + main() diff --git a/utils/__init__.py b/utils/__init__.py index c00e6beb..a06865ee 100644 --- a/utils/__init__.py +++ b/utils/__init__.py @@ -4,12 +4,44 @@ # LICENSE file in the root directory of this source tree. import os +import string +import random + + +def custom_str_underscore(value): + return str(value).replace("_", '-').strip() + + +def smart_joint(*paths): + return os.path.join(*paths).replace("\\", "/") def create_if_not_exists(path: str) -> None: """ Creates the specified folder if it does not exist. - :param path: the complete path of the folder to be created + + Args: + path: the complete path of the folder to be created """ if not os.path.exists(path): os.makedirs(path) + + +def none_or_float(value): + if value == 'None': + return None + return float(value) + + +def random_id(length=8, alphabet=string.ascii_letters + string.digits): + """ + Returns a random string of the specified length. + + Args: + length: the length of the string + alphabet: the alphabet to be used + + Returns: + the random string + """ + return ''.join(random.choices(alphabet, k=length)) diff --git a/utils/args.py b/utils/args.py index 42637add..2ea10be1 100644 --- a/utils/args.py +++ b/utils/args.py @@ -3,25 +3,41 @@ # This source code is licensed under the license found in the # LICENSE file in the root directory of this source tree. +if __name__ == '__main__': + import os + import sys + mammoth_path = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) + sys.path.append(mammoth_path) + from argparse import ArgumentParser -from datasets import NAMES as DATASET_NAMES +from datasets import get_dataset_names from models import get_all_models +from models.utils.continual_model import ContinualModel +from utils import custom_str_underscore def add_experiment_args(parser: ArgumentParser) -> None: """ Adds the arguments used by all the models. - :param parser: the parser instance + + Args: + parser: the parser instance + + Returns: + None """ parser.add_argument('--dataset', type=str, required=True, - choices=DATASET_NAMES, + choices=get_dataset_names(), help='Which dataset to perform experiments on.') - parser.add_argument('--model', type=str, required=True, - help='Model name.', choices=get_all_models()) + parser.add_argument('--model', type=custom_str_underscore, required=True, + help='Model name.', choices=list(get_all_models().keys())) parser.add_argument('--lr', type=float, required=True, help='Learning rate.') + parser.add_argument('--optimizer', type=str, default='sgd', + choices=ContinualModel.AVAIL_OPTIMS, + help='Optimizer.') parser.add_argument('--optim_wd', type=float, default=0., help='optimizer weight decay.') parser.add_argument('--optim_mom', type=float, default=0., @@ -29,39 +45,155 @@ def add_experiment_args(parser: ArgumentParser) -> None: parser.add_argument('--optim_nesterov', type=int, default=0, help='optimizer nesterov momentum.') + parser.add_argument('--lr_scheduler', type=str, help='Learning rate scheduler.') + parser.add_argument('--lr_milestones', type=int, nargs='+', default=[], + help='Learning rate scheduler milestones (used if `lr_scheduler=multisteplr`).') + parser.add_argument('--sched_multistep_lr_gamma', type=float, default=0.1, + help='Learning rate scheduler gamma (used if `lr_scheduler=multisteplr`).') + parser.add_argument('--n_epochs', type=int, - help='Batch size.') + help='Number of epochs.') parser.add_argument('--batch_size', type=int, help='Batch size.') - parser.add_argument('--distributed', type=str, default='no', choices=['no', 'dp', 'ddp']) + parser.add_argument('--distributed', type=str, default='no', choices=['no', 'dp', 'ddp'], + help='Enable distributed training?') + parser.add_argument('--savecheck', action='store_true', help='Save checkpoint?') + parser.add_argument('--loadcheck', type=str, default=None, help='Path of the checkpoint to load (.pt file for the specific task)') + parser.add_argument('--ckpt_name', type=str, required=False, help='(optional) checkpoint save name.') + parser.add_argument('--start_from', type=int, default=None, help="Task to start from") + parser.add_argument('--stop_after', type=int, default=None, help="Task limit") + + parser.add_argument('--joint', type=int, choices=[0, 1], default=0, + help='Train model on Joint (single task)?') + parser.add_argument('--label_perc', type=float, default=1, + help='Percentage in (0-1] of labeled examples per task.') def add_management_args(parser: ArgumentParser) -> None: + """ + Adds the management arguments. + + Args: + parser: the parser instance + + Returns: + None + """ parser.add_argument('--seed', type=int, default=None, help='The random seed.') + parser.add_argument('--permute_classes', type=int, choices=[0, 1], default=0, + help='Permute classes before splitting tasks (applies seed before permute if seed is present)?') + parser.add_argument('--base_path', type=str, default="./data/", + help='The base path where to save datasets, logs, results.') parser.add_argument('--notes', type=str, default=None, help='Notes for this run.') + parser.add_argument('--wandb_name', type=str, default=None, + help='Wandb name for this run. Overrides the default name (`args.model`).') parser.add_argument('--non_verbose', default=0, choices=[0, 1], type=int, help='Make progress bars non verbose') - parser.add_argument('--disable_log', default=0, choices=[0, 1], type=int, help='Enable csv logging') - - parser.add_argument('--validation', default=0, choices=[0, 1], type=int, - help='Test on the validation set') - parser.add_argument('--ignore_other_metrics', default=0, choices=[0, 1], type=int, - help='disable additional metrics') - parser.add_argument('--debug_mode', type=int, default=0, help='Run only a few forward steps per epoch') - parser.add_argument('--nowand', default=0, choices=[0, 1], type=int, help='Inhibit wandb logging') - parser.add_argument('--wandb_entity', type=str, default='regaz', help='Wandb entity') + parser.add_argument('--disable_log', default=0, choices=[0, 1], type=int, help='Disable logging?') + parser.add_argument('--num_workers', type=int, default=None, help='Number of workers for the dataloaders (default=infer from number of cpus).') + + parser.add_argument('--validation', type=int, help='Percentage of validation set drawn from the training set.') + parser.add_argument('--enable_other_metrics', default=0, choices=[0, 1], type=int, + help='Enable computing additional metrics: forward and backward transfer.') + parser.add_argument('--debug_mode', type=int, default=0, choices=[0, 1], help='Run only a few forward steps per epoch') + parser.add_argument('--wandb_entity', type=str, help='Wandb entity') parser.add_argument('--wandb_project', type=str, default='mammoth', help='Wandb project name') + parser.add_argument('--eval_epochs', type=int, default=None, + help='Perform inference intra-task at every `eval_epochs`.') + parser.add_argument('--inference_only', action="store_true", + help='Perform inference only for each task (no training).') + def add_rehearsal_args(parser: ArgumentParser) -> None: """ Adds the arguments used by all the rehearsal-based methods - :param parser: the parser instance + + Args: + parser: the parser instance + + Returns: + None """ parser.add_argument('--buffer_size', type=int, required=True, help='The size of the memory buffer.') parser.add_argument('--minibatch_size', type=int, help='The batch size of the memory buffer.') + + +class _DocsArgs: + """ + This class is used to generate the documentation of the arguments. + """ + + def __init__(self, name: str, type_: str, choices: str, default: str, help_: str): + self.name = name + self.type = type_ + self.choices = choices + self.default = default + self.help = help_ + + def parse_choices(self) -> str: + if self.choices is None: + return '' + return ', '.join([c.keys() if isinstance(c, dict) else str(c) for c in self.choices]) + + def __str__(self): + tb = '\t' + return f"""**\\-\\-{self.name}** : {self.type} + *Help*: {self.help}\n + - Default: {self.default}\n + - Choices: {self.parse_choices() if self.choices is not None else ''}""" + + +if __name__ == '__main__': + print("Generating documentation for the arguments...") + os.chdir(mammoth_path) + parser = ArgumentParser() + add_experiment_args(parser) + + docs_args = [] + for action in parser._actions: + if action.dest == 'help': + continue + docs_args.append(_DocsArgs(action.dest, action.type, action.choices, action.default, action.help)) + + with open('docs/utils/args.rst', 'w') as f: + f.write('.. _module-args:\n\n') + f.write('Arguments\n') + f.write('=========\n\n') + f.write('.. rubric:: EXPERIMENT-RELATED ARGS\n\n') + for arg in docs_args: + f.write(str(arg) + '\n\n') + + parser = ArgumentParser() + add_management_args(parser) + docs_args = [] + for action in parser._actions: + if action.dest == 'help': + continue + docs_args.append(_DocsArgs(action.dest, action.type, action.choices, action.default, action.help)) + + with open('docs/utils/args.rst', 'a') as f: + f.write('.. rubric:: MANAGEMENT ARGS\n\n') + for arg in docs_args: + f.write(str(arg) + '\n\n') + + parser = ArgumentParser() + add_rehearsal_args(parser) + docs_args = [] + for action in parser._actions: + if action.dest == 'help': + continue + docs_args.append(_DocsArgs(action.dest, action.type, action.choices, action.default, action.help)) + + with open('docs/utils/args.rst', 'a') as f: + f.write('.. rubric:: REEHARSAL-ONLY ARGS\n\n') + for arg in docs_args: + f.write(str(arg) + '\n\n') + + print("Saving documentation in docs/utils/args.rst") + print("Done!") diff --git a/utils/augmentations.py b/utils/augmentations.py index b9fc176c..e7562335 100644 --- a/utils/augmentations.py +++ b/utils/augmentations.py @@ -1,3 +1,7 @@ +""" +This module contains various image augmentation functions and classes. +""" + # Copyright 2022-present, Lorenzo Bonicelli, Pietro Buzzega, Matteo Boschini, Angelo Porrello, Simone Calderara. # All rights reserved. # This source code is licensed under the license found in the @@ -6,14 +10,50 @@ import numpy as np import torch import torch.nn.functional as F +from torchvision.transforms import functional as TF +from torchvision import transforms +from utils.kornia_utils import KorniaAugNoGrad + + +def apply_transform(x: torch.Tensor, transform) -> torch.Tensor: + """Applies a transform to a batch of images. + + If the transforms is a KorniaAugNoGrad, it is applied directly to the batch. + Otherwise, it is applied to each image in the batch. + + Args: + x: a batch of images. + transform: the transform to apply. + + Returns: + The transformed batch of images. + """ + + if isinstance(transform, KorniaAugNoGrad): + return transform(x) + else: + return torch.stack([transform(xi) for xi in x.cpu()], dim=0).to(x.device) def rand_bbox(size, lam): + """ + Generate a random bounding box given the size of the image and a lambda value. + + Args: + size (tuple): The size of the image in the format (batch_size, channels, height, width). + lam (float): The lambda value used to calculate the size of the bounding box. + + Returns: + bbx1 (int): The x-coordinate of the top-left corner of the bounding box. + bby1 (int): The y-coordinate of the top-left corner of the bounding box. + bbx2 (int): The x-coordinate of the bottom-right corner of the bounding box. + bby2 (int): The y-coordinate of the bottom-right corner of the bounding box. + """ W = size[2] H = size[3] cut_rat = np.sqrt(1. - lam) - cut_w = np.int(W * cut_rat) - cut_h = np.int(H * cut_rat) + cut_w = int(W * cut_rat) + cut_h = int(H * cut_rat) # uniform cx = np.random.randint(W) @@ -28,6 +68,28 @@ def rand_bbox(size, lam): def cutmix_data(x, y, alpha=1.0, cutmix_prob=0.5): + """ + Generate a cutmix sample given a batch of images and labels. + + Args: + x (torch.Tensor): The batch of images. + y (torch.Tensor): The batch of labels. + alpha (float): The alpha value used to calculate the size of the bounding box. + cutmix_prob (float): The probability of applying cutmix. + + Returns: + x (torch.Tensor): The mixed batch of images. + y_a (torch.Tensor): The batch of labels for the first image. + y_b (torch.Tensor): The batch of labels for the second image. + lam (float): The lambda value used to calculate the size of the bounding box. + + Raises: + AssertionError: If the input tensor `x` does not have 4 dimensions. + """ + + if np.random.rand() > cutmix_prob: + return x, y, y, 1. + assert (alpha > 0) # generate mixed sample lam = np.random.beta(alpha, alpha) @@ -36,7 +98,7 @@ def cutmix_data(x, y, alpha=1.0, cutmix_prob=0.5): index = torch.randperm(batch_size) if torch.cuda.is_available(): - index = index.cuda() + index = index.to(x.device) y_a, y_b = y, y[index] bbx1, bby1, bbx2, bby2 = rand_bbox(x.size(), lam) @@ -48,12 +110,35 @@ def cutmix_data(x, y, alpha=1.0, cutmix_prob=0.5): def normalize(x, mean, std): + """ + Normalize the input tensor `x` of images using the provided mean and standard deviation. + + Args: + x (torch.Tensor): Input tensor to be normalized. + mean (list or tuple): Mean values for each channel. + std (list or tuple): Standard deviation values for each channel. + + Returns: + torch.Tensor: Normalized tensor. + + Raises: + AssertionError: If the input tensor `x` does not have 4 dimensions. + """ assert len(x.shape) == 4 return (x - torch.tensor(mean).unsqueeze(0).unsqueeze(2).unsqueeze(3).to(x.device)) \ / torch.tensor(std).unsqueeze(0).unsqueeze(2).unsqueeze(3).to(x.device) def random_flip(x): + """ + Randomly flips the input tensor along the last dimension. + + Args: + x (torch.Tensor): Input tensor of shape (batch_size, channels, height, width). + + Returns: + torch.Tensor: Flipped tensor with the same shape as the input tensor. + """ assert len(x.shape) == 4 mask = torch.rand(x.shape[0]) < 0.5 x[mask] = x[mask].flip(3) @@ -61,6 +146,16 @@ def random_flip(x): def random_grayscale(x, prob=0.2): + """ + Apply random grayscale transformation to the input tensor. + + Args: + x (torch.Tensor): Input tensor of shape (batch_size, channels, height, width). + prob (float): Probability of applying the grayscale transformation. + + Returns: + torch.Tensor: Transformed tensor with random grayscale applied. + """ assert len(x.shape) == 4 mask = torch.rand(x.shape[0]) < prob x[mask] = (x[mask] * torch.tensor([[0.299, 0.587, 0.114]]).unsqueeze(2).unsqueeze(2).to(x.device)).sum(1, keepdim=True).repeat_interleave(3, 1) @@ -68,6 +163,16 @@ def random_grayscale(x, prob=0.2): def random_crop(x, padding): + """ + Randomly crops the input tensor. + + Args: + x (torch.Tensor): The input tensor with shape (batch_size, channels, height, width). + padding (int): The padding size for the crop. + + Returns: + torch.Tensor: The cropped tensor with shape (batch_size, channels, height, width). + """ assert len(x.shape) == 4 crop_x = torch.randint(-padding, padding, size=(x.shape[0],)) crop_y = torch.randint(-padding, padding, size=(x.shape[0],)) @@ -98,6 +203,14 @@ def __call__(self, x): class strong_aug(): + """ + A class representing a strong data augmentation pipeline (used in X-DER). + + Args: + size (int): The size of the output image. + mean (float): The mean value for normalization. + std (float): The standard deviation value for normalization. + """ def __init__(self, size, mean, std): from torchvision import transforms @@ -118,3 +231,157 @@ def __call__(self, x): torch.stack( [self.transform(a) for a in flip] )), self.mean, self.std) + + +class DoubleTransform(object): + """ + This class applies a given transformation to the first image and leaves the second input unchanged. + + Args: + tf: The transformation to be applied. + """ + + def __init__(self, tf): + self.transform = tf + + @torch.no_grad() + def __call__(self, img, other_img): + """ + Applies the transformation to the first image and leaves the second unchanged. + + Args: + img: The first image. + other_img: The second image. + + Returns: + The transformed first image and the unchanged second image. + + """ + return self.transform(img), other_img + + +class CustomRandomHorizontalFlip(object): + """ + Custom augmentation class for performing random horizontal flips on a pair of stackable images and other associated tensors (e.g. attention maps). + + Args: + p (float): Probability of applying the horizontal flip. Defaults to 0.5. + """ + + def __init__(self, p=0.5): + self.p = p + + @torch.no_grad() + def __call__(self, img, other_img=None): + """ + Apply random horizontal flip to the input image and to the other associated inputs. + + This transform applies the same random horizontal flip to the input image and to the other associated inputs. + + Args: + img (PIL.Image.Image): The input image. + other_img (list[PIL.Image.Image]): List of other images to be flipped. + + Returns: + PIL.Image.Image: The flipped input image. + list[PIL.Image.Image]: List of flipped other images. + """ + if np.random.rand() < self.p: + return TF.hflip(img), [TF.hflip(x.unsqueeze(0)).squeeze(0) for x in other_img] + return img, other_img + + +class CustomRandomCrop(object): + """ + Custom augmentation class for performing random crop on a pair of stackable images and other associated tensors (e.g. attention maps). + + Args: + size (int or tuple): Desired output size for the crop. If size is an int, a square crop of size (size, size) is returned. + padding (int or tuple, optional): Optional padding on each border of the image. Default is 0. + resize (bool, optional): Whether to resize the other_img maps. Default is False. + min_resize_index (int, optional): The minimum index of other_img maps to resize. Default is None. + + Returns: + tuple: A tuple containing the cropped image and a list of cropped other_img maps. + """ + + def __init__(self, size, padding=0, resize=False, min_resize_index=None): + self.size = size + self.padding = padding + self.resize = resize + self.min_resize_index = min_resize_index + self.transform = transforms.RandomCrop(size, padding) + + @torch.no_grad() + def __call__(self, img, other_img=None): + """ + Apply random crop to the input image and to the other associated inputs. + + This transform applies the same transform to the input image and to the other associated inputs. + + Args: + img (PIL.Image.Image): The input image. + other_img (list[PIL.Image.Image]): List of other images to be cropped. + + Returns: + PIL.Image.Image: The cropped input image. + list[PIL.Image.Image]: List of cropped other images. + """ + img = TF.pad(img, self.padding) + i, j, h, w = self.transform.get_params(img, self.size) + + maps = [] + for idx, map in enumerate(other_img): + m = map.unsqueeze(0) + orig_size = m.shape[-2:] + if self.resize: + if self.min_resize_index is None or idx <= self.min_resize_index: + m = TF.resize(m, (int(orig_size[0] * 2), int(orig_size[1] * 2)), interpolation=transforms.InterpolationMode.NEAREST) + + rate = (self.size[0] // m.shape[-1]) + _i, _j, _h, _w = i // rate, j // rate, h // rate, w // rate + m = TF.pad(m, self.padding // rate) + m = TF.crop(m, _i, _j, _h, _w) + + if self.resize: + if self.min_resize_index is None or idx <= self.min_resize_index: + m = TF.resize(m, orig_size, interpolation=transforms.InterpolationMode.NEAREST) + + maps.append(m.squeeze(0)) + return TF.crop(img, i, j, h, w), maps + + +class DoubleCompose(object): + """ + Composes multiple transformations to be applied on a pair of stackable images and other associated tensors (e.g. attention maps). + + Args: + transforms (list): List of transformations to be applied. The transformations should accept two inputs (img, other_img) and return two outputs (img, other_img). For example, :class:`CustomRandomCrop` and :class:`CustomRandomHorizontalFlip`. + + Methods: + __iter__(): Returns an iterator for the transformations. + __getitem__(i): Returns the transformation at index i. + __len__(): Returns the number of transformations. + __call__(img, other_img): Applies the composed transformations on the input images. + + """ + + def __init__(self, transforms): + self.transforms = transforms + + def __iter__(self): + return iter(self.transforms) + + def __getitem__(self, i): + return self.transforms[i] + + def __len__(self): + return len(self.transforms) + + @torch.no_grad() + def __call__(self, img, other_img): + other_img = [o.clone() for o in other_img] + img = img.clone() if isinstance(img, torch.Tensor) else img.copy() + for t in self.transforms: + img, other_img = t(img, other_img) + return img, other_img diff --git a/utils/batch_norm.py b/utils/batch_norm.py index 10e0dcbe..4ffc17e9 100644 --- a/utils/batch_norm.py +++ b/utils/batch_norm.py @@ -6,19 +6,33 @@ import torch import torch.nn as nn + class bn_track_stats: def __init__(self, module: nn.Module, condition=True): + """ + Context manager for temporarily disabling batch normalization tracking statistics. + + Args: + module (nn.Module): The module containing batch normalization layers. + condition (bool, optional): Whether to enable or disable tracking statistics. Defaults to True. + """ self.module = module self.enable = condition def __enter__(self): + """ + Disable batch normalization tracking statistics if the condition is False. + """ if not self.enable: for m in self.module.modules(): if isinstance(m, (torch.nn.BatchNorm2d, torch.nn.BatchNorm1d)): m.track_running_stats = False - def __exit__(self ,type, value, traceback): + def __exit__(self, type, value, traceback): + """ + Enable batch normalization tracking statistics if the condition is False. + """ if not self.enable: for m in self.module.modules(): if isinstance(m, (torch.nn.BatchNorm2d, torch.nn.BatchNorm1d)): - m.track_running_stats = True \ No newline at end of file + m.track_running_stats = True diff --git a/utils/best_args.py b/utils/best_args.py index e4e6b706..cbfcb390 100644 --- a/utils/best_args.py +++ b/utils/best_args.py @@ -3,150 +3,170 @@ # This source code is licensed under the license found in the # LICENSE file in the root directory of this source tree. +""" +This module contains the best hyperparameters on a small selection of datasets and models. + +The hyperparameters are organized in a dictionary with the following structure: + { + 'dataset_name': { + 'model_name': { + 'buffer_size': { + 'hyperparameter_name': hyperparameter_value + } + } + } + } + +Todolist: + * Add more hyperparameters + * Add more datasets + * Add more models +""" + best_args = { 'perm-mnist': { - 'sgd': {-1: {'lr': 0.2, 'batch_size': 128, 'n_epochs': 1}}, - 'ewc_on': {-1: {'lr': 0.1, - 'e_lambda': 0.7, - 'gamma': 1.0, - 'batch_size': 128, - 'n_epochs': 1}}, - 'si': {-1: {'lr': 0.1, - 'c': 0.5, - 'xi': 1.0, - 'batch_size': 128, - 'n_epochs': 1}}, - 'er': {200: {'lr': 0.2, - 'minibatch_size': 128, - 'batch_size': 128, - 'n_epochs': 1}, - 500: {'lr': 0.2, - 'minibatch_size': 128, - 'batch_size': 128, - 'n_epochs': 1}, - 5120: {'lr': 0.2, - 'minibatch_size': 128, - 'batch_size': 128, - 'n_epochs': 1}}, - 'gem': {200: {'lr': 0.1, - 'gamma': 0.5, - 'batch_size': 128, - 'n_epochs': 1}, - 500: {'lr': 0.1, 'gamma': 0.5, 'batch_size': 128, - 'n_epochs': 1}, - 5120: {'lr': 0.1, 'gamma': 0.5, 'batch_size': 128, - 'n_epochs': 1}}, - 'agem': {200: {'lr': 0.1, - 'minibatch_size': 128, - 'batch_size': 128, - 'n_epochs': 1}, - 500: {'lr': 0.1, - 'minibatch_size': 128, - 'batch_size': 128, - 'n_epochs': 1}, - 5120: {'lr': 0.1, - 'minibatch_size': 128, + 'sgd': {-1: {'lr': 0.2, 'batch_size': 128, 'n_epochs': 1}}, + 'ewc_on': {-1: {'lr': 0.1, + 'e_lambda': 0.7, + 'gamma': 1.0, + 'batch_size': 128, + 'n_epochs': 1}}, + 'si': {-1: {'lr': 0.1, + 'c': 0.5, + 'xi': 1.0, 'batch_size': 128, 'n_epochs': 1}}, - 'hal': {200: {'lr': 0.1, - 'minibatch_size': 128, - 'batch_size': 128, - 'hal_lambda': 0.1, - 'beta': 0.5, - 'gamma': 0.1, - 'n_epochs': 1}, - 500: {'lr': 0.1, - 'minibatch_size': 128, - 'batch_size': 128, - 'hal_lambda': 0.1, - 'beta': 0.3, - 'gamma': 0.1, - 'n_epochs': 1}, - 5120: {'lr': 0.1, - 'minibatch_size': 128, - 'batch_size': 128, - 'hal_lambda': 0.1, - 'beta': 0.5, - 'gamma': 0.1, - 'n_epochs': 1}}, - 'gss': {200: {'lr': 0.2, - 'minibatch_size': 10, - 'gss_minibatch_size': 128, - 'batch_size': 128, - 'batch_num': 1, - 'n_epochs': 1}, - 500: {'lr': 0.1, - 'minibatch_size': 128, - 'gss_minibatch_size': 10, - 'batch_size': 128, - 'batch_num': 1, - 'n_epochs': 1}, - 5120: {'lr': 0.03, - 'minibatch_size': 128, - 'gss_minibatch_size': 10, - 'batch_size': 128, - 'batch_num': 1, - 'n_epochs': 1}}, - 'agem_r': {200: {'lr': 0.1, + 'er': {200: {'lr': 0.2, 'minibatch_size': 128, 'batch_size': 128, 'n_epochs': 1}, - 500: {'lr': 0.1, + 500: {'lr': 0.2, 'minibatch_size': 128, 'batch_size': 128, 'n_epochs': 1}, - 5120: {'lr': 0.1, + 5120: {'lr': 0.2, 'minibatch_size': 128, 'batch_size': 128, 'n_epochs': 1}}, - 'fdr': {200: {'lr': 0.1, - 'minibatch_size': 128, - 'alpha': 1.0, - 'batch_size': 128, - 'n_epochs': 1}, - 500: {'lr': 0.1, - 'minibatch_size': 128, - 'alpha': 0.3, - 'batch_size': 128, - 'n_epochs': 1}, - 5120: {'lr': 0.1, - 'minibatch_size': 128, - 'alpha': 1, - 'batch_size': 128, - 'n_epochs': 1}}, - 'der': {200: {'lr': 0.2, - 'minibatch_size': 128, - 'alpha': 1.0, - 'batch_size': 128, - 'n_epochs': 1}, - 500: {'lr': 0.2, - 'minibatch_size': 128, - 'alpha': 1.0, - 'batch_size': 128, - 'n_epochs': 1}, - 5120: {'lr': 0.2, - 'minibatch_size': 128, - 'alpha': 0.5, - 'batch_size': 128, - 'n_epochs': 1}}, - 'derpp': {200: {'lr': 0.1, - 'minibatch_size': 128, - 'alpha': 1.0, - 'beta': 1.0, - 'batch_size': 128, - 'n_epochs': 1}, - 500: {'lr': 0.2, - 'minibatch_size': 128, - 'alpha': 1.0, - 'beta': 0.5, - 'batch_size': 128, - 'n_epochs': 1}, - 5120: {'lr': 0.2, - 'minibatch_size': 128, - 'alpha': 0.5, - 'beta': 1.0, - 'batch_size': 128, - 'n_epochs': 1}}}, + 'gem': {200: {'lr': 0.1, + 'gamma': 0.5, + 'batch_size': 128, + 'n_epochs': 1}, + 500: {'lr': 0.1, 'gamma': 0.5, 'batch_size': 128, + 'n_epochs': 1}, + 5120: {'lr': 0.1, 'gamma': 0.5, 'batch_size': 128, + 'n_epochs': 1}}, + 'agem': {200: {'lr': 0.1, + 'minibatch_size': 128, + 'batch_size': 128, + 'n_epochs': 1}, + 500: {'lr': 0.1, + 'minibatch_size': 128, + 'batch_size': 128, + 'n_epochs': 1}, + 5120: {'lr': 0.1, + 'minibatch_size': 128, + 'batch_size': 128, + 'n_epochs': 1}}, + 'hal': {200: {'lr': 0.1, + 'minibatch_size': 128, + 'batch_size': 128, + 'hal_lambda': 0.1, + 'beta': 0.5, + 'gamma': 0.1, + 'n_epochs': 1}, + 500: {'lr': 0.1, + 'minibatch_size': 128, + 'batch_size': 128, + 'hal_lambda': 0.1, + 'beta': 0.3, + 'gamma': 0.1, + 'n_epochs': 1}, + 5120: {'lr': 0.1, + 'minibatch_size': 128, + 'batch_size': 128, + 'hal_lambda': 0.1, + 'beta': 0.5, + 'gamma': 0.1, + 'n_epochs': 1}}, + 'gss': {200: {'lr': 0.2, + 'minibatch_size': 10, + 'gss_minibatch_size': 128, + 'batch_size': 128, + 'batch_num': 1, + 'n_epochs': 1}, + 500: {'lr': 0.1, + 'minibatch_size': 128, + 'gss_minibatch_size': 10, + 'batch_size': 128, + 'batch_num': 1, + 'n_epochs': 1}, + 5120: {'lr': 0.03, + 'minibatch_size': 128, + 'gss_minibatch_size': 10, + 'batch_size': 128, + 'batch_num': 1, + 'n_epochs': 1}}, + 'agem_r': {200: {'lr': 0.1, + 'minibatch_size': 128, + 'batch_size': 128, + 'n_epochs': 1}, + 500: {'lr': 0.1, + 'minibatch_size': 128, + 'batch_size': 128, + 'n_epochs': 1}, + 5120: {'lr': 0.1, + 'minibatch_size': 128, + 'batch_size': 128, + 'n_epochs': 1}}, + 'fdr': {200: {'lr': 0.1, + 'minibatch_size': 128, + 'alpha': 1.0, + 'batch_size': 128, + 'n_epochs': 1}, + 500: {'lr': 0.1, + 'minibatch_size': 128, + 'alpha': 0.3, + 'batch_size': 128, + 'n_epochs': 1}, + 5120: {'lr': 0.1, + 'minibatch_size': 128, + 'alpha': 1, + 'batch_size': 128, + 'n_epochs': 1}}, + 'der': {200: {'lr': 0.2, + 'minibatch_size': 128, + 'alpha': 1.0, + 'batch_size': 128, + 'n_epochs': 1}, + 500: {'lr': 0.2, + 'minibatch_size': 128, + 'alpha': 1.0, + 'batch_size': 128, + 'n_epochs': 1}, + 5120: {'lr': 0.2, + 'minibatch_size': 128, + 'alpha': 0.5, + 'batch_size': 128, + 'n_epochs': 1}}, + 'derpp': {200: {'lr': 0.1, + 'minibatch_size': 128, + 'alpha': 1.0, + 'beta': 1.0, + 'batch_size': 128, + 'n_epochs': 1}, + 500: {'lr': 0.2, + 'minibatch_size': 128, + 'alpha': 1.0, + 'beta': 0.5, + 'batch_size': 128, + 'n_epochs': 1}, + 5120: {'lr': 0.2, + 'minibatch_size': 128, + 'alpha': 0.5, + 'beta': 1.0, + 'batch_size': 128, + 'n_epochs': 1}}}, 'rot-mnist': { 'sgd': {-1: {'lr': 0.2, 'batch_size': 128, 'n_epochs': 1}}, 'ewc_on': {-1: {'lr': 0.1, @@ -571,11 +591,11 @@ 'n_epochs': 50, 'batch_num': 1}, 5120: {'lr': 0.03, - 'minibatch_size': 32, - 'gss_minibatch_size': 32, - 'batch_size': 32, - 'n_epochs': 1, - 'batch_num': 1}}, + 'minibatch_size': 32, + 'gss_minibatch_size': 32, + 'batch_size': 32, + 'n_epochs': 1, + 'batch_num': 1}}, 'agem_r': {200: {'lr': 0.03, 'minibatch_size': 32, 'batch_size': 32, @@ -846,15 +866,15 @@ 2000: {'lr': 0.1, 'optim_mom': 0, 'optim_wd': 0} }, 'gdumb': { - 500: {'lr': 0.1, 'maxlr': 0.05, 'minlr': 5e-4, 'cutmix_alpha': 1, 'fitting_epochs': 250, 'optim_mom': 0.9, 'optim_wd': 1e-6}, + 500: {'lr': 0.1, 'maxlr': 0.05, 'minlr': 5e-4, 'cutmix_alpha': 1, 'fitting_epochs': 250, 'optim_mom': 0.9, 'optim_wd': 1e-6}, 2000: {'lr': 0.1, 'maxlr': 0.05, 'minlr': 5e-4, 'cutmix_alpha': 1, 'fitting_epochs': 250, 'optim_mom': 0, 'optim_wd': 1e-6}, }, 'lucir': { - 500: {'lr': 0.03, 'lr_finetune':0.01, 'optim_mom': 0.9, 'optim_wd': 0, 'lamda_base': 5, 'k_mr': 2, 'fitting_epochs': 20, 'mr_margin': 0.5, 'lamda_mr': 1.}, - 2000: {'lr': 0.03, 'lr_finetune':0.01, 'optim_mom': 0.9, 'optim_wd': 0, 'lamda_base': 5, 'k_mr': 2, 'fitting_epochs': 20, 'mr_margin': 0.5, 'lamda_mr': 1.}, + 500: {'lr': 0.03, 'lr_finetune': 0.01, 'optim_mom': 0.9, 'optim_wd': 0, 'lamda_base': 5, 'k_mr': 2, 'fitting_epochs': 20, 'mr_margin': 0.5, 'lamda_mr': 1.}, + 2000: {'lr': 0.03, 'lr_finetune': 0.01, 'optim_mom': 0.9, 'optim_wd': 0, 'lamda_base': 5, 'k_mr': 2, 'fitting_epochs': 20, 'mr_margin': 0.5, 'lamda_mr': 1.}, }, - - + + 'icarl': { 500: {'lr': 0.3, 'optim_mom': 0, 'optim_wd': 1e-05}, 2000: {'lr': 0.3, 'optim_mom': 0, 'optim_wd': 1e-05} @@ -885,8 +905,8 @@ 2000: {'lr': 0.03, 'optim_mom': 0, 'optim_wd': 0, 'alpha': 0.1, 'beta': 0.5} }, 'xder': { - 500: {'m': 0.7, 'alpha':0.3, 'beta': 0.8, 'gamma': 0.85, 'optim_wd': 0, 'lambd': 0.05, 'eta': 0.001, 'lr': 0.03, 'simclr_temp': 5, 'optim_mom': 0, 'simclr_batch_size':64, 'simclr_num_aug': 2}, - 2000: {'m': 0.2, 'alpha':0.6, 'beta': 0.9, 'gamma': 0.85, 'optim_wd': 0, 'lambd': 0.05, 'eta': 0.01, 'lr': 0.03, 'simclr_temp': 5, 'optim_mom': 0, 'simclr_batch_size':64, 'simclr_num_aug': 2} + 500: {'m': 0.7, 'alpha': 0.3, 'beta': 0.8, 'gamma': 0.85, 'optim_wd': 0, 'lambd': 0.05, 'eta': 0.001, 'lr': 0.03, 'simclr_temp': 5, 'optim_mom': 0, 'simclr_batch_size': 64, 'simclr_num_aug': 2}, + 2000: {'m': 0.2, 'alpha': 0.6, 'beta': 0.9, 'gamma': 0.85, 'optim_wd': 0, 'lambd': 0.05, 'eta': 0.01, 'lr': 0.03, 'simclr_temp': 5, 'optim_mom': 0, 'simclr_batch_size': 64, 'simclr_num_aug': 2} } } diff --git a/utils/buffer.py b/utils/buffer.py index 0147a363..5e4bfe7f 100644 --- a/utils/buffer.py +++ b/utils/buffer.py @@ -4,30 +4,36 @@ # LICENSE file in the root directory of this source tree. from copy import deepcopy -from typing import Tuple +from typing import List, Tuple import numpy as np import torch import torch.nn as nn +from datasets.utils.continual_dataset import ContinualDataset +from models.utils.continual_model import ContinualModel +from utils.augmentations import apply_transform +from utils.conf import get_device -def icarl_replay(self, dataset, val_set_split=0): + +def icarl_replay(self: ContinualModel, dataset, val_set_split=0): """ Merge the replay buffer with the current task data. Optionally split the replay buffer into a validation set. - :param self: the model instance - :param dataset: the dataset - :param val_set_split: the fraction of the replay buffer to be used as validation set + Args: + self: the model instance + dataset: the dataset + val_set_split: the fraction of the replay buffer to be used as validation set """ - if self.task > 0: + if self.current_task > 0: buff_val_mask = torch.rand(len(self.buffer)) < val_set_split val_train_mask = torch.zeros(len(dataset.train_loader.dataset.data)).bool() val_train_mask[torch.randperm(len(dataset.train_loader.dataset.data))[:buff_val_mask.sum()]] = True if val_set_split > 0: - self.val_loader = deepcopy(dataset.train_loader) + self.val_dataset = deepcopy(dataset.train_loader.dataset) data_concatenate = torch.cat if isinstance(dataset.train_loader.dataset.data, torch.Tensor) else np.concatenate need_aug = hasattr(dataset.train_loader.dataset, 'not_aug_transform') @@ -52,22 +58,29 @@ def refold_transform(x): return (x.cpu() * 255).squeeze(1).type(torch.uint8) if val_set_split > 0: # REDUCE AND MERGE VALIDATION SET - self.val_loader.dataset.targets = np.concatenate([ - self.val_loader.dataset.targets[val_train_mask], + self.val_dataset.targets = np.concatenate([ + self.val_dataset.targets[val_train_mask], self.buffer.labels.cpu().numpy()[:len(self.buffer)][buff_val_mask] ]) - self.val_loader.dataset.data = data_concatenate([ - self.val_loader.dataset.data[val_train_mask], + self.val_dataset.data = data_concatenate([ + self.val_dataset.data[val_train_mask], refold_transform((self.buffer.examples)[:len(self.buffer)][buff_val_mask]) ]) + self.val_loader = torch.utils.data.DataLoader(self.val_dataset, batch_size=self.args.batch_size, shuffle=True, + num_workers=self.args.num_workers) + def reservoir(num_seen_examples: int, buffer_size: int) -> int: """ Reservoir sampling algorithm. - :param num_seen_examples: the number of seen examples - :param buffer_size: the maximum buffer size - :return: the target index if the current image is sampled, else -1 + + Args: + num_seen_examples: the number of seen examples + buffer_size: the maximum buffer size + + Returns: + the target index if the current image is sampled, else -1 """ if num_seen_examples < buffer_size: return num_seen_examples @@ -79,28 +92,38 @@ def reservoir(num_seen_examples: int, buffer_size: int) -> int: return -1 -def ring(num_seen_examples: int, buffer_portion_size: int, task: int) -> int: - return num_seen_examples % buffer_portion_size + task * buffer_portion_size - - class Buffer: """ The memory buffer of rehearsal method. """ - def __init__(self, buffer_size, device, n_tasks=None, mode='reservoir'): - assert mode in ('ring', 'reservoir') + def __init__(self, buffer_size, device="cpu"): + """ + Initialize a reservoir-based Buffer object. + + Args: + buffer_size (int): The maximum size of the buffer. + device (str, optional): The device to store the buffer on. Defaults to "cpu". + + Note: + If during the `get_data` the transform is PIL, data will be moved to cpu and then back to the device. This is why the device is set to cpu by default. + """ self.buffer_size = buffer_size self.device = device self.num_seen_examples = 0 - self.functional_index = eval(mode) - if mode == 'ring': - assert n_tasks is not None - self.task_number = n_tasks - self.buffer_portion_size = buffer_size // n_tasks self.attributes = ['examples', 'labels', 'logits', 'task_labels'] + self.attention_maps = [None] * buffer_size def to(self, device): + """ + Move the buffer and its attributes to the specified device. + + Args: + device: The device to move the buffer and its attributes to. + + Returns: + The buffer instance with the updated device and attributes. + """ self.device = device for attr_str in self.attributes: if hasattr(self, attr_str): @@ -108,16 +131,21 @@ def to(self, device): return self def __len__(self): + """ + Returns the number items in the buffer. + """ return min(self.num_seen_examples, self.buffer_size) def init_tensors(self, examples: torch.Tensor, labels: torch.Tensor, logits: torch.Tensor, task_labels: torch.Tensor) -> None: """ Initializes just the required tensors. - :param examples: tensor containing the images - :param labels: tensor containing the labels - :param logits: tensor containing the outputs of the network - :param task_labels: tensor containing the task labels + + Args: + examples: tensor containing the images + labels: tensor containing the labels + logits: tensor containing the outputs of the network + task_labels: tensor containing the task labels """ for attr_str in self.attributes: attr = eval(attr_str) @@ -126,14 +154,25 @@ def init_tensors(self, examples: torch.Tensor, labels: torch.Tensor, setattr(self, attr_str, torch.zeros((self.buffer_size, *attr.shape[1:]), dtype=typ, device=self.device)) - def add_data(self, examples, labels=None, logits=None, task_labels=None): + @property + def used_attributes(self): + """ + Returns a list of attributes that are currently being used by the object. + """ + return [attr_str for attr_str in self.attributes if hasattr(self, attr_str)] + + def add_data(self, examples, labels=None, logits=None, task_labels=None, attention_maps=None): """ Adds the data to the memory buffer according to the reservoir strategy. - :param examples: tensor containing the images - :param labels: tensor containing the labels - :param logits: tensor containing the outputs of the network - :param task_labels: tensor containing the task labels - :return: + + Args: + examples: tensor containing the images + labels: tensor containing the labels + logits: tensor containing the outputs of the network + task_labels: tensor containing the task labels + + Note: + Only the examples are required. The other tensors are initialized only if they are provided. """ if not hasattr(self, 'examples'): self.init_tensors(examples, labels, logits, task_labels) @@ -149,46 +188,72 @@ def add_data(self, examples, labels=None, logits=None, task_labels=None): self.logits[index] = logits[i].to(self.device) if task_labels is not None: self.task_labels[index] = task_labels[i].to(self.device) + if attention_maps is not None: + self.attention_maps[index] = [at[i].byte().to(self.device) for at in attention_maps] - def get_data(self, size: int, transform: nn.Module = None, return_index=False) -> Tuple: + def get_data(self, size: int, transform: nn.Module = None, return_index=False, device=None, mask_task_out=None, cpt=None) -> Tuple: """ Random samples a batch of size items. - :param size: the number of requested items - :param transform: the transformation to be applied (data augmentation) - :return: + + Args: + size: the number of requested items + transform: the transformation to be applied (data augmentation) + return_index: if True, returns the indexes of the sampled items + mask_task: if not None, masks OUT the examples from the given task + cpt: the number of classes per task (required if mask_task is not None and task_labels are not present) + + Returns: + a tuple containing the requested items. If return_index is True, the tuple contains the indexes as first element. """ - if size > min(self.num_seen_examples, self.examples.shape[0]): - size = min(self.num_seen_examples, self.examples.shape[0]) + target_device = self.device if device is None else device - choice = np.random.choice(min(self.num_seen_examples, self.examples.shape[0]), - size=size, replace=False) + if mask_task_out is not None: + assert hasattr(self, 'task_labels') or cpt is not None + assert hasattr(self, 'task_labels') or hasattr(self, 'labels') + samples_mask = (self.task_labels != mask_task_out) if hasattr(self, 'task_labels') else self.labels // cpt != mask_task_out + + num_avail_samples = self.examples.shape[0] if mask_task_out is None else samples_mask.sum().item() + num_avail_samples = min(self.num_seen_examples, num_avail_samples) + + if size > min(num_avail_samples, self.examples.shape[0]): + size = min(num_avail_samples, self.examples.shape[0]) + + choice = np.random.choice(num_avail_samples, size=size, replace=False) if transform is None: def transform(x): return x - ret_tuple = (torch.stack([transform(ee.cpu()) for ee in self.examples[choice]]).to(self.device),) + + selected_samples = self.examples[choice] if mask_task_out is None else self.examples[samples_mask][choice] + ret_tuple = (torch.stack([transform(ee) for ee in selected_samples.cpu()]).to(target_device),) for attr_str in self.attributes[1:]: if hasattr(self, attr_str): attr = getattr(self, attr_str) - ret_tuple += (attr[choice],) + selected_attr = attr[choice] if mask_task_out is None else attr[samples_mask][choice] + ret_tuple += (selected_attr.to(target_device),) if not return_index: return ret_tuple else: - return (torch.tensor(choice).to(self.device), ) + ret_tuple + return (torch.tensor(choice).to(target_device), ) + ret_tuple - def get_data_by_index(self, indexes, transform: nn.Module = None) -> Tuple: + def get_data_by_index(self, indexes, transform: nn.Module = None, device=None) -> Tuple: """ Returns the data by the given index. - :param index: the index of the item - :param transform: the transformation to be applied (data augmentation) - :return: + + Args: + index: the index of the item + transform: the transformation to be applied (data augmentation) + + Returns: + a tuple containing the requested items. The returned items depend on the attributes stored in the buffer from previous calls to `add_data`. """ + target_device = self.device if device is None else device + if transform is None: def transform(x): return x - ret_tuple = (torch.stack([transform(ee.cpu()) - for ee in self.examples[indexes]]).to(self.device),) + ret_tuple = (apply_transform(self.examples[:len(self)], transform=transform).to(target_device),) for attr_str in self.attributes[1:]: if hasattr(self, attr_str): - attr = getattr(self, attr_str).to(self.device) + attr = getattr(self, attr_str).to(target_device) ret_tuple += (attr[indexes],) return ret_tuple @@ -201,19 +266,24 @@ def is_empty(self) -> bool: else: return False - def get_all_data(self, transform: nn.Module = None) -> Tuple: + def get_all_data(self, transform: nn.Module = None, device=None) -> Tuple: """ Return all the items in the memory buffer. - :param transform: the transformation to be applied (data augmentation) - :return: a tuple with all the items in the memory buffer + + Args: + transform: the transformation to be applied (data augmentation) + + Returns: + a tuple with all the items in the memory buffer """ + target_device = self.device if device is None else device if transform is None: def transform(x): return x - ret_tuple = (torch.stack([transform(ee.cpu()) - for ee in self.examples]).to(self.device),) + + ret_tuple = (apply_transform(self.examples[:len(self)], transform=transform).to(target_device),) for attr_str in self.attributes[1:]: if hasattr(self, attr_str): - attr = getattr(self, attr_str) + attr = getattr(self, attr_str)[:len(self)].to(target_device) ret_tuple += (attr,) return ret_tuple @@ -225,3 +295,120 @@ def empty(self) -> None: if hasattr(self, attr_str): delattr(self, attr_str) self.num_seen_examples = 0 + + +@torch.no_grad() +def fill_buffer(buffer: Buffer, dataset: ContinualDataset, t_idx: int, net: ContinualModel = None, use_herding=False, required_attributes: List[str] = None) -> None: + """ + Adds examples from the current task to the memory buffer. + Supports images, labels, task_labels, and logits. + + Args: + buffer: the memory buffer + dataset: the dataset from which take the examples + t_idx: the task index + net: (optional) the model instance. Used if logits are in buffer. If provided, adds logits. + use_herding: (optional) if True, uses herding strategy. Otherwise, random sampling. + required_attributes: (optional) the attributes to be added to the buffer. If None and buffer is empty, adds only examples and labels. + """ + if net is not None: + mode = net.training + net.eval() + else: + assert not use_herding, "Herding strategy requires a model instance" + + device = net.device if net is not None else get_device() + + n_seen_classes = dataset.N_CLASSES_PER_TASK * (t_idx + 1) if isinstance(dataset.N_CLASSES_PER_TASK, int) else \ + sum(dataset.N_CLASSES_PER_TASK[:t_idx + 1]) + n_past_classes = dataset.N_CLASSES_PER_TASK * t_idx if isinstance(dataset.N_CLASSES_PER_TASK, int) else \ + sum(dataset.N_CLASSES_PER_TASK[:t_idx]) + samples_per_class = buffer.buffer_size // n_seen_classes + + # Check for requirs attributes + required_attributes = required_attributes or ['examples', 'labels'] + assert all([attr in buffer.used_attributes for attr in required_attributes]) or len(buffer) == 0, \ + "Required attributes not in buffer: {}".format([attr for attr in required_attributes if attr not in buffer.used_attributes]) + + if t_idx > 0: + # 1) First, subsample prior classes + buf_data = buffer.get_all_data() + buf_y = buf_data[1] + + buffer.empty() + for _y in buf_y.unique(): + idx = (buf_y == _y) + _buf_data_idx = {attr_name: _d[idx][:samples_per_class] for attr_name, _d in zip(required_attributes, buf_data)} + buffer.add_data(**_buf_data_idx) + + # 2) Then, fill with current tasks + loader = dataset.train_loader + norm_trans = dataset.get_normalization_transform() + if norm_trans is None: + def norm_trans(x): return x + + if 'logits' in buffer.used_attributes: + assert net is not None, "Logits in buffer require a model instance" + + # 2.1 Extract all features + a_x, a_y, a_f, a_l = [], [], [], [] + for x, y, not_norm_x in loader: + mask = (y >= n_past_classes) & (y < n_seen_classes) + x, y, not_norm_x = x[mask], y[mask], not_norm_x[mask] + if not x.size(0): + continue + a_x.append(not_norm_x.cpu()) + a_y.append(y.cpu()) + + if net is not None: + feats = net(norm_trans(not_norm_x.to(device)), returnt='features') + outs = net.classifier(feats) + a_f.append(feats.cpu()) + a_l.append(torch.sigmoid(outs).cpu()) + a_x, a_y = torch.cat(a_x), torch.cat(a_y) + if net is not None: + a_f, a_l = torch.cat(a_f), torch.cat(a_l) + + # 2.2 Compute class means + for _y in a_y.unique(): + idx = (a_y == _y) + _x, _y = a_x[idx], a_y[idx] + + if use_herding: + _l = a_l[idx] + feats = a_f[idx] + mean_feat = feats.mean(0, keepdim=True) + + running_sum = torch.zeros_like(mean_feat) + i = 0 + while i < samples_per_class and i < feats.shape[0]: + cost = (mean_feat - (feats + running_sum) / (i + 1)).norm(2, 1) + + idx_min = cost.argmin().item() + + buffer.add_data( + examples=_x[idx_min:idx_min + 1].to(device), + labels=_y[idx_min:idx_min + 1].to(device), + logits=_l[idx_min:idx_min + 1].to(device) if 'logits' in required_attributes else None, + task_labels=torch.ones(len(_x[idx_min:idx_min + 1])).to(device) * t_idx if 'task_labels' in required_attributes else None + + ) + + running_sum += feats[idx_min:idx_min + 1] + feats[idx_min] = feats[idx_min] + 1e6 + i += 1 + else: + idx = torch.randperm(len(_x))[:samples_per_class] + + buffer.add_data( + examples=_x[idx].to(device), + labels=_y[idx].to(device), + logits=_l[idx].to(device) if 'logits' in required_attributes else None, + task_labels=torch.ones(len(_x[idx])).to(device) * t_idx if 'task_labels' in required_attributes else None + ) + + assert len(buffer.examples) <= buffer.buffer_size + assert buffer.num_seen_examples <= buffer.buffer_size + + if net is not None: + net.train(mode) diff --git a/utils/checkpoints.py b/utils/checkpoints.py new file mode 100644 index 00000000..c4b8ce07 --- /dev/null +++ b/utils/checkpoints.py @@ -0,0 +1,185 @@ + +import random +import string +import torch +from torch import distributed as dist +import os + +from tqdm import tqdm +import urllib.request as request + +from utils import smart_joint + + +def _load_mammoth_model(dict_keys, model: torch.nn.Module, args): + for k in list(dict_keys): + if args.distributed != 'dp': + dict_keys[k.replace('module.', '')] = dict_keys.pop(k) + elif 'module' not in k: + dict_keys[k.replace('net.', 'net.module.')] = dict_keys.pop(k) + + for k in list(dict_keys): + if '_features' in dict_keys: + dict_keys.pop(k) + + if 'lucir' in args.model.lower(): + model.register_buffer('classes_so_far', torch.zeros_like( + dict_keys['classes_so_far']).to('cpu')) + + model.load_state_dict(dict_keys) + model.net.to(model.device) + return model + + +def _load_net(dict_keys, model: torch.nn.Module, args, ignore_classifier=True): + for k in list(dict_keys): + if args.distributed != 'dp': + dict_keys[k.replace('module.', '')] = dict_keys.pop(k) + elif 'module' not in k: + if 'net' in k: + dict_keys[k.replace('net.', 'net.module.')] = dict_keys.pop(k) + else: + dict_keys[f'module.{k}'] = dict_keys.pop(k) + + if not ignore_classifier: + cl_weights = [dict_keys[k] for k in list(dict_keys.keys()) if 'classifier' in k] + if len(cl_weights) > 0: + cl_size = cl_weights[-1].shape[0] + model.net.classifier = torch.nn.Linear( + model.net.classifier.in_features, cl_size).to(model.device) + else: + for k in list(dict_keys): + if 'classifier' in k: + dict_keys.pop(k) + + for k in list(dict_keys): + if '_features' in dict_keys: + dict_keys.pop(k) + for k in list(dict_keys): + if 'net' in k: + dict_keys[k[4:]] = dict_keys.pop(k) + for k in list(dict_keys): + if 'wrappee.' in k: + dict_keys[k.replace('wrappee.', '')] = dict_keys.pop(k) + + try: + model.net.load_state_dict(dict_keys) + except BaseException: + _, unm = model.net.load_state_dict(dict_keys, strict=False) + unm = [k for k in unm if '_features' not in k and 'linear' not in k] + if ignore_classifier: + assert all(['classifier' in k for k in unm] + ), f"Some of the keys not loaded where not classifier keys: {unm}" + else: + assert unm is None or len(unm) == 0, f"Missing keys: {unm}" + + model.net.to(model.device) + return model + + +def _get_random_filename(length=10): + return ''.join(random.choices(string.ascii_uppercase + string.digits, k=length)) + + +def _download_from_raw_url(url: str, root: str): + os.makedirs(root, exist_ok=True) + filename = _get_random_filename() + + download_target = smart_joint(root, filename) + + if os.path.exists(download_target) and not os.path.isfile(download_target): + raise RuntimeError(f"{download_target} exists and is not a regular file") + + with request.urlopen(url) as source, open(download_target, "wb") as output: + with tqdm(total=int(source.info().get("Content-Length")), unit='iB', unit_scale=True, unit_divisor=1024) as loop: + while True: + buffer = source.read(8192) + if not buffer: + break + + output.write(buffer) + loop.update(len(buffer)) + + return download_target + + +def mammoth_load_checkpoint(args, model: torch.nn.Module, ignore_classifier=False) -> torch.nn.Module: + """ + Loads the keys from the given checkpoint. + - Handles DataParallel and DistributedDataParallel checkpoints. + - Handles checkpoints from previous versions of the code. + - Handles head initialization for LUCIR. + + Args: + args: the model with the checkpoint loaded. + model: the model to be loaded. + ignore_classifier: whether to ignore the classifier weights. + + Returns: + the model with the checkpoint loaded. + """ + # check if checkpoint is a URL + if args.loadcheck.startswith('http'): + if 'sharepoint' in args.loadcheck: + try: + from onedrivedownloader import download + except ImportError: + raise ImportError('OneDriveDownloader is required to download from Sharepoint. Please install it with "pip install onedrivedownloader"') + + print('Downloading checkpoint using OneDriveDownloader...') + args.loadcheck = download(args.loadcheck, filename='checkpoints/', unzip=True, unzip_path='checkpoints/', clean=True) + elif 'drive.google.com' in args.loadcheck: + try: + from google_drive_downloader import GoogleDriveDownloader as gdd + except ImportError: + raise ImportError('GoogleDriveDownloader is required to download from Google Drive. Please install it with "pip install googledrivedownloader"') + + print('Downloading checkpoint using GoogleDriveDownloader...') + # get random filename + filename = _get_random_filename() + gdd.download_file_from_google_drive(file_id=args.loadcheck.split('/')[-2], + dest_path=f'checkpoints/{filename}', unzip=True) + args.loadcheck = f'checkpoints/{filename}' + else: + print('Attempting to download raw checkpoint...') + args.loadcheck = _download_from_raw_url(args.loadcheck, 'checkpoints/') + + print(f'Checkpoint downloaded to {args.loadcheck}') + else: + if not os.path.exists(args.loadcheck): + raise ValueError('The given checkpoint does not exist.') + + saved_obj = torch.load(args.loadcheck, map_location=torch.device("cpu")) + + if 'args' in saved_obj and 'model' in saved_obj: + _check_loaded_args(args, saved_obj['args']) + # Mammoth checkpoint + model = _load_mammoth_model(saved_obj['model'], model, args) + if 'buffer' in saved_obj: + loading_model = saved_obj['args'].model + if args.model != loading_model: + print(f'WARNING: The loaded model was trained with a different model: {loading_model}') + model.load_buffer(saved_obj['buffer']) + + return model, saved_obj['results'] + else: + # Model only checkpoint + model = _load_net(saved_obj, model, args, ignore_classifier=ignore_classifier) + + return model, None + + +def _check_loaded_args(args, loaded_args): + ignored_args = ['loadcheck', 'start_from', 'stop_after', 'conf_jobnum', 'conf_host', 'conf_timestamp', 'distributed', 'examples_log', 'examples_full_log', + 'intensive_savecheck', 'job_number', 'conf_git_commit', 'loss_log', 'tensorboard', 'seed', 'savecheck', 'notes', 'non_verbose', 'autorelaunch', 'force_compat', 'conf_external_path'] + mismatched_args = [x for x in vars(args) if x not in ignored_args and ( + x not in vars(loaded_args) or getattr(args, x) != getattr(loaded_args, x))] + + if len(mismatched_args): + if 'force_compat' not in vars(args) or args.force_compat: + print( + "WARNING: The following arguments do not match between loaded and current model:") + print(mismatched_args) + else: + raise ValueError( + 'The loaded model was trained with different arguments: {}'.format(mismatched_args)) diff --git a/utils/conditional_bn.py b/utils/conditional_bn.py new file mode 100644 index 00000000..edd816ba --- /dev/null +++ b/utils/conditional_bn.py @@ -0,0 +1,123 @@ +from torch import nn +from torch.autograd import Function + + +class SelectClearGrad(Function): + """ + A custom autograd function that clears gradients for selected indices. + """ + + @staticmethod + def forward(ctx, x, indices): + """ + Forward pass of the SelectClearGrad function. + + Args: + x (torch.Tensor): The input tensor. + indices (torch.Tensor): The indices to clear gradients for. + + Returns: + torch.Tensor: The input tensor, reshaped to match the shape of x. + """ + ctx.indices = indices + return x.view_as(x) + + @staticmethod + def backward(ctx, grad_output): + """ + Backward pass of the SelectClearGrad function. + + Args: + grad_output (torch.Tensor): The gradient of the output. + + Returns: + Tuple[torch.Tensor, None]: The gradient of the input tensor and None. + """ + grad_output[ctx.indices] = 0 + return grad_output, None + + +class ConditionalBatchNorm1d(nn.Module): + """ + Conditional Batch Normalization for 1D inputs. + """ + + def __init__(self, num_features, num_conditions): + """ + Initializes the ConditionalBatchNorm1d module. + + Args: + num_features (int): The number of input features. + num_conditions (int): The number of conditioning variables. + """ + super(ConditionalBatchNorm1d, self).__init__() + self.num_features = num_features + self.bn = nn.BatchNorm1d(num_features, affine=False) + self.embed = nn.Embedding(num_conditions, num_features * 2) + self.embed.weight.data[:, :num_features].normal_(1, 0.02) + self.embed.weight.data[:, num_features:].zero_() + + def forward(self, x, cond_id, flag_stop_grad=None): + """ + Compute Conditional Batch Normalization for 1D inputs. + + The input tensor `x` is applied with a specific 1D batch normalization layer, specified by the `cond_id`. + + Args: + x (torch.Tensor): The input tensor. + cond_id (torch.Tensor): The index of the conditioning. + flag_stop_grad (torch.Tensor, optional): The flag to stop gradients for gamma and beta. + + Returns: + torch.Tensor: The output tensor. + """ + out = self.bn(x) + gamma, beta = self.embed(cond_id).chunk(2, 1) + if flag_stop_grad is not None: + gamma = SelectClearGrad.apply(gamma, flag_stop_grad) + beta = SelectClearGrad.apply(beta, flag_stop_grad) + out = gamma.view(-1, self.num_features) * out + beta.view(-1, self.num_features) + return out + + +class ConditionalBatchNorm2d(nn.Module): + """ + Conditional Batch Normalization for 2D inputs. + """ + + def __init__(self, num_features, num_conditions): + """ + Initializes the ConditionalBatchNorm2d module. + + Args: + num_features (int): The number of input features. + num_conditions (int): The number of conditioning variables. + """ + super(ConditionalBatchNorm2d, self).__init__() + self.num_features = num_features + self.bn = nn.BatchNorm2d(num_features, affine=False) + self.embed = nn.Embedding(num_conditions, num_features * 2) + self.embed.weight.data[:, :num_features].normal_(1, 0.02) + self.embed.weight.data[:, num_features:].zero_() + + def forward(self, x, cond_id, flag_stop_grad=None): + """ + Compute Conditional Batch Normalization for 2D inputs. + + The input tensor `x` is applied with a specific 2D batch normalization layer, specified by the `cond_id`. + + Args: + x (torch.Tensor): The input tensor. + cond_id (torch.Tensor): The index of the conditioning. + flag_stop_grad (torch.Tensor, optional): The flag to stop gradients for gamma and beta. + + Returns: + torch.Tensor: The output tensor. + """ + out = self.bn(x) + gamma, beta = self.embed(cond_id).chunk(2, 1) + if flag_stop_grad is not None: + gamma = SelectClearGrad.apply(gamma, flag_stop_grad) + beta = SelectClearGrad.apply(beta, flag_stop_grad) + out = gamma.view(-1, self.num_features, 1, 1) * out + beta.view(-1, self.num_features, 1, 1) + return out diff --git a/utils/conf.py b/utils/conf.py index 1ea184f5..ac2e102b 100644 --- a/utils/conf.py +++ b/utils/conf.py @@ -1,49 +1,132 @@ +""" +This module contains utility functions for configuration settings. +""" + # Copyright 2020-present, Pietro Buzzega, Matteo Boschini, Angelo Porrello, Davide Abati, Simone Calderara. # All rights reserved. # This source code is licensed under the license found in the # LICENSE file in the root directory of this source tree. +import os +import sys import random import torch import numpy as np -def get_device() -> torch.device: + +def warn_once(*msg): """ - Returns the GPU device if available else CPU. + Prints a warning message only once. + + Args: + msg: the message to be printed """ - if torch.cuda.is_available(): - return torch.device("cuda:0") - try: - if torch.backends.mps.is_available() and torch.backends.mps.is_built(): - return torch.device("mps") - except: - pass - return torch.device("cpu") + msg = ' '.join([str(m) for m in msg]) + if not hasattr(warn_once, 'warned'): + warn_once.warned = set() + if msg not in warn_once.warned: + warn_once.warned.add(msg) + print(msg, file=sys.stderr) -def base_path() -> str: +def get_device() -> torch.device: """ - Returns the base bath where to log accuracies and tensorboard data. + Returns the least used GPU device if available else MPS or CPU. """ - return './data/' + def _get_device(): + # get least used gpu by used memory + if torch.cuda.is_available() and torch.cuda.device_count() > 0: + gpu_memory = [] + for i in range(torch.cuda.device_count()): + gpu_memory.append(torch.cuda.memory_allocated(i)) + device = torch.device(f'cuda:{np.argmin(gpu_memory)}') + print(f'Using device {device}') + return device + try: + if torch.backends.mps.is_available() and torch.backends.mps.is_built(): + print("WARNING: MSP support is still experimental. Use at your own risk!") + return torch.device("mps") + except BaseException: + print("WARNING: Something went wrong with MPS. Using CPU.") -def base_path_dataset() -> str: + return torch.device("cpu") + + # Permanently store the chosen device + if not hasattr(get_device, 'device'): + get_device.device = _get_device() + print(f'Using device {get_device.device}') + + return get_device.device + + +def base_path(override=None) -> str: """ Returns the base bath where to log accuracies and tensorboard data. + + Args: + override: the path to override the default one. Once set, it is stored and used for all the next calls. + + Returns: + the base path (default: `./data/`) """ - return '/tmp/mammoth_datasets/' + if override is not None: + if not os.path.exists(override): + os.makedirs(override) + if not override.endswith('/'): + override += '/' + setattr(base_path, 'path', override) + + if not hasattr(base_path, 'path'): + setattr(base_path, 'path', './data/') + return getattr(base_path, 'path') def set_random_seed(seed: int) -> None: """ Sets the seeds at a certain value. - :param seed: the value to be set + + Args: + seed: the value to be set """ random.seed(seed) np.random.seed(seed) torch.manual_seed(seed) try: torch.cuda.manual_seed_all(seed) - except: + except BaseException: print('Could not set cuda seed.') - pass + + +def set_random_seed_worker(worker_id) -> None: + """ + Sets the seeds for a worker of a dataloader. + """ + worker_seed = torch.initial_seed() % 2**32 + np.random.seed(worker_seed) + random.seed(worker_seed) + + +def create_seeded_dataloader(args, dataset, **dataloader_args) -> torch.utils.data.DataLoader: + """ + Creates a dataloader object from a dataset, setting the seeds for the workers (if `--seed` is set). + + Args: + args: the arguments of the program + dataset: the dataset to be loaded + dataloader_args: external arguments of the dataloader + + Returns: + the dataloader object + """ + + n_cpus = 4 if not hasattr(os, 'sched_getaffinity') else len(os.sched_getaffinity(0)) + num_workers = n_cpus if args.num_workers is None else args.num_workers + dataloader_args['num_workers'] = num_workers if 'num_workers' not in dataloader_args else dataloader_args['num_workers'] + if args.seed is not None: + worker_generator = torch.Generator() + worker_generator.manual_seed(args.seed) + else: + worker_generator = None + dataloader_args['generator'] = worker_generator if 'generator' not in dataloader_args else dataloader_args['generator'] + dataloader_args['worker_init_fn'] = set_random_seed_worker if 'worker_init_fn' not in dataloader_args else dataloader_args['worker_init_fn'] + return torch.utils.data.DataLoader(dataset, **dataloader_args) diff --git a/utils/continual_training.py b/utils/deprecated/continual_training.py similarity index 89% rename from utils/continual_training.py rename to utils/deprecated/continual_training.py index 9be8c4c6..d8e8d88b 100644 --- a/utils/continual_training.py +++ b/utils/deprecated/continual_training.py @@ -23,9 +23,13 @@ def evaluate(model: ContinualModel, dataset) -> float: """ Evaluates the final accuracy of the model. - :param model: the model to be evaluated - :param dataset: the GCL dataset at hand - :return: a float value that indicates the accuracy + + Args: + model: the model to be evaluated + dataset: the GCL dataset at hand + + Returns: + a float value that indicates the accuracy """ model.net.eval() correct, total = 0, 0 @@ -44,9 +48,9 @@ def evaluate(model: ContinualModel, dataset) -> float: def train(args: Namespace): """ The training process, including evaluations and loggers. - :param model: the module to be trained - :param dataset: the continual dataset at hand - :param args: the arguments of the current execution + + Args: + args: the arguments loaded from the command line """ dataset = get_dataset(args) diff --git a/utils/distributed.py b/utils/distributed.py index fae03c23..caacb9ac 100644 --- a/utils/distributed.py +++ b/utils/distributed.py @@ -1,3 +1,17 @@ + +"""Distributed utilities for parallel processing. + +Supports both Distributed Data Parallel (DDP) and Data Parallel (DP) models. + +Examples: + >>> from utils.distributed import make_ddp, make_dp + >>> model = make_ddp(model) # for DDP >>> model = make_dp(model) # for DP + +**Note**: +- DDP is not applicable to rehearsal methods (see `make_ddp` for more details). +- When using DDP, you might need the `wait_for_master` function. + - Synchronization before and after training is handled automatically. +""" import os import sys @@ -7,7 +21,17 @@ from torch.nn.parallel import DistributedDataParallel as DDP -def setup(rank, world_size): +def setup(rank: int, world_size: int) -> None: + """ + Set up the distributed environment for parallel processing using Distributed Data Parallel (DDP). + + Args: + rank (int): The rank of the current process. + world_size (int): The total number of processes. + + Returns: + None + """ host = os.environ['SLURM_NODELIST'].split(',')[0] ephemeral_port_range = 65535 - 32768 port = 32768 + int(os.environ['SLURM_JOBID']) % ephemeral_port_range @@ -23,12 +47,38 @@ def setup(rank, world_size): sys.stdout.flush() -def wait_for_master(): - if 'MAMMOTH_RANK' in os.environ: +def wait_for_master() -> None: + """ + Wait for the master process to arrive at the barrier. + + - This is a blocking call. + - The function is a *no-op* if the current process is the master (or DDP is not used). + + Returns: + None + """ + if dist.is_initialized(): dist.barrier() -def make_ddp(model): +def make_ddp(model: torch.nn.Module) -> None: + """ + Create a DistributedDataParallel (DDP) model. + + + *Note*: *DDP is not applicable to rehearsal methods* (e.g., GEM, A-GEM, ER, etc.). + This is because DDP breaks the buffer, which has to be synchronized. + Ad-hoc solutions are possible, but they are not implemented here. + + Args: + model: The model to be wrapped with DDP. + + Returns: + The DDP-wrapped model. + """ + if not torch.distributed.is_available() or not torch.cuda.is_available(): + raise ValueError("DDP not available!") + rank_command = f"scontrol show jobid -d {os.environ['SLURM_JOBID']} | grep ' Nodes='" rank_data = os.popen(rank_command).read().splitlines() world = {x.split("Nodes=")[1].split(" ")[0]: int(x.split('gpu:')[1].split('(')[0]) for x in rank_data} @@ -61,16 +111,41 @@ def make_ddp(model): class CustomDP(DataParallel): + """ + Custom DataParallel class to avoid using `.module` when accessing `intercept_names` attributes. + + Attributes: + intercept_names (list): List of attribute names to intercept. + """ intercept_names = ['classifier', 'num_classes', 'set_return_prerelu'] def __getattr__(self, name: str): + """ + Get attribute value. + + Args: + name (str): The name of the attribute. + + Returns: + The value of the attribute. + """ if name in self.intercept_names: return getattr(self.module, name) else: return super().__getattr__(name) def __setattr__(self, name: str, value) -> None: + """ + Set attribute value. + + Args: + name (str): The name of the attribute. + value: The value to be assigned to the attribute. + + Returns: + None + """ if name in self.intercept_names: setattr(self.module, name, value) else: @@ -78,4 +153,13 @@ def __setattr__(self, name: str, value) -> None: def make_dp(model): + """ + Create a DataParallel (DP) model. + + Args: + model: The model to be wrapped with DP. + + Returns: + The DP-wrapped model. + """ return CustomDP(model, device_ids=range(torch.cuda.device_count())).to('cuda:0') diff --git a/utils/gss_buffer.py b/utils/gss_buffer.py index ed9fe6bd..acb9d167 100644 --- a/utils/gss_buffer.py +++ b/utils/gss_buffer.py @@ -1,3 +1,7 @@ +""" +This module contains a version of the reservoir buffer that is specifically designed for the GSS model. +""" + # Copyright 2020-present, Pietro Buzzega, Matteo Boschini, Angelo Porrello, Davide Abati, Simone Calderara. # All rights reserved. # This source code is licensed under the license found in the @@ -15,6 +19,7 @@ class Buffer: """ The memory buffer of rehearsal method. """ + def __init__(self, buffer_size, device, minibatch_size, model=None): self.buffer_size = buffer_size self.device = device @@ -33,8 +38,8 @@ def reset_fathom(self): self.fathom = 0 self.fathom_mask = torch.randperm(min(self.num_seen_examples, self.examples.shape[0] if hasattr(self, 'examples') else self.num_seen_examples)) - def get_grad_score(self, x, y, X, Y, indices): - g = self.model.get_grads(x, y) + def get_grad_score(self, batch_x, batch_y, X, Y, indices): + g = self.model.get_grads(batch_x, batch_y) G = [] for x, y, idx in zip(X, Y, indices): if idx in self.cache: @@ -48,7 +53,7 @@ def get_grad_score(self, x, y, X, Y, indices): grads_at_a_time = 5 # let's split this so your gpu does not melt. You're welcome. for it in range(int(np.ceil(G.shape[0] / grads_at_a_time))): - tmp = F.cosine_similarity(g, G[it*grads_at_a_time: (it+1)*grads_at_a_time], dim=1).max().item() + 1 + tmp = F.cosine_similarity(g, G[it * grads_at_a_time: (it + 1) * grads_at_a_time], dim=1).max().item() + 1 c_score = max(c_score, tmp) return c_score @@ -70,10 +75,12 @@ def functional_reservoir(self, x, y, batch_c, bigX=None, bigY=None, indices=None def init_tensors(self, examples: torch.Tensor, labels: torch.Tensor) -> None: """ Initializes just the required tensors. - :param examples: tensor containing the images - :param labels: tensor containing the labels - :param logits: tensor containing the outputs of the network - :param task_labels: tensor containing the task labels + + Args: + examples: tensor containing the images + labels: tensor containing the labels + logits: tensor containing the outputs of the network + task_labels: tensor containing the task labels """ for attr_str in self.attributes: attr = eval(attr_str) @@ -81,17 +88,18 @@ def init_tensors(self, examples: torch.Tensor, labels: torch.Tensor) -> None: typ = torch.int64 if attr_str.endswith('els') else torch.float32 setattr(self, attr_str, torch.zeros((self.buffer_size, *attr.shape[1:]), dtype=typ, device=self.device)) - self.scores = torch.zeros((self.buffer_size,*attr.shape[1:]), + self.scores = torch.zeros((self.buffer_size, *attr.shape[1:]), dtype=torch.float32, device=self.device) def add_data(self, examples, labels=None): """ Adds the data to the memory buffer according to the reservoir strategy. - :param examples: tensor containing the images - :param labels: tensor containing the labels - :param logits: tensor containing the outputs of the network - :param task_labels: tensor containing the task labels - :return: + + Args: + examples: tensor containing the images + labels: tensor containing the labels + logits: tensor containing the outputs of the network + task_labels: tensor containing the task labels """ if not hasattr(self, 'examples'): self.init_tensors(examples, labels) @@ -119,12 +127,16 @@ def add_data(self, examples, labels=None): def drop_cache(self): self.cache = {} - def get_data(self, size: int, transform: transforms=None, give_index=False, random=False) -> Tuple: + def get_data(self, size: int, transform: transforms = None, give_index=False, random=False) -> Tuple: """ Random samples a batch of size items. - :param size: the number of requested items - :param transform: the transformation to be applied (data augmentation) - :return: + + Args: + size: the number of requested items + transform: the transformation to be applied (data augmentation) + + Returns: + a tuple with the requested items """ if size > self.examples.shape[0]: @@ -132,17 +144,18 @@ def get_data(self, size: int, transform: transforms=None, give_index=False, rand if random: choice = np.random.choice(min(self.num_seen_examples, self.examples.shape[0]), - size=min(size, self.num_seen_examples), - replace=False) + size=min(size, self.num_seen_examples), + replace=False) else: choice = np.arange(self.fathom, min(self.fathom + size, self.examples.shape[0], self.num_seen_examples)) choice = self.fathom_mask[choice] self.fathom += len(choice) if self.fathom >= self.examples.shape[0] or self.fathom >= self.num_seen_examples: self.fathom = 0 - if transform is None: transform = lambda x: x + if transform is None: + def transform(x): return x ret_tuple = (torch.stack([transform(ee.cpu()) - for ee in self.examples[choice]]).to(self.device),) + for ee in self.examples[choice]]).to(self.device),) for attr_str in self.attributes[1:]: if hasattr(self, attr_str): attr = getattr(self, attr_str) @@ -161,15 +174,20 @@ def is_empty(self) -> bool: else: return False - def get_all_data(self, transform: transforms=None) -> Tuple: + def get_all_data(self, transform: transforms = None) -> Tuple: """ Return all the items in the memory buffer. - :param transform: the transformation to be applied (data augmentation) - :return: a tuple with all the items in the memory buffer + + Args: + transform: the transformation to be applied (data augmentation) + + Returns: + a tuple with all the items in the memory buffer """ - if transform is None: transform = lambda x: x + if transform is None: + def transform(x): return x ret_tuple = (torch.stack([transform(ee.cpu()) - for ee in self.examples]).to(self.device),) + for ee in self.examples]).to(self.device),) for attr_str in self.attributes[1:]: if hasattr(self, attr_str): attr = getattr(self, attr_str) diff --git a/utils/kornia_utils.py b/utils/kornia_utils.py new file mode 100644 index 00000000..040ecd13 --- /dev/null +++ b/utils/kornia_utils.py @@ -0,0 +1,215 @@ +from typing import List, Union +import kornia +from torch import nn +import torch +from torchvision import transforms +from kornia.augmentation.container.params import ParamItem + + +class KorniaAugNoGrad(kornia.augmentation.AugmentationSequential): + """ + A custom augmentation class that applies Kornia augmentations without gradient computation. + + Inherits from `kornia.augmentation.AugmentationSequential`. + + Args: + *args: Variable length argument list. + **kwargs: Arbitrary keyword arguments. + + + Methods: + _do_transform: Performs the transformation without gradient computation. + forward: Overrides the forward method to apply the transformation without gradient computation. + """ + + def __init__(self, *args, **kwargs): + super().__init__(*args, **kwargs) + + def _do_transform(self, *args, **kwargs) -> torch.Tensor: + """ + Performs the transformation without gradient computation. + + Args: + *args: Variable length argument list. + **kwargs: Arbitrary keyword arguments. + + Returns: + torch.Tensor: The transformed tensor. + """ + x = super().forward(*args, **kwargs) + return x + + @torch.no_grad() + def forward(self, *args, **kwargs) -> torch.Tensor: + """ + Overrides the forward method to apply the transformation without gradient computation. + + Args: + *args: Variable length argument list. + **kwargs: Arbitrary keyword arguments. + + Returns: + torch.Tensor: The transformed tensor. + """ + return self._do_transform(*args, **kwargs) + + +def to_kornia_transform(transform: transforms.Compose, apply: bool = True) -> Union[List[kornia.augmentation.AugmentationBase2D], KorniaAugNoGrad]: + """ + Converts PIL transforms to Kornia transforms. + + Args: + transform (transforms.Compose): The torchvision transform to be converted. + apply (bool, optional): Whether to convert the processed kornia transforms list into a KorniaAugNoGrad object. Defaults to True. + + Returns: + Union[List[kornia.augmentation.AugmentationBase2D], KorniaAugNoGrad]: The converted Kornia transforms. + """ + if isinstance(transform, kornia.augmentation.AugmentationSequential) or \ + (isinstance(transform, nn.Sequential) and isinstance(transform[0], kornia.augmentation.AugmentationBase2D)): + return transform + if not isinstance(transform, list): + if hasattr(transform, "transforms"): + transform = list(transform.transforms) + else: + transform = [transform] + + ts = [] + + for t in transform: + if isinstance(t, transforms.RandomResizedCrop): + ts.append(kornia.augmentation.RandomResizedCrop(size=t.size, scale=t.scale, ratio=t.ratio, interpolation=t.interpolation)) + elif isinstance(t, transforms.RandomHorizontalFlip): + ts.append(kornia.augmentation.RandomHorizontalFlip(p=t.p)) + elif isinstance(t, transforms.RandomVerticalFlip): + ts.append(kornia.augmentation.RandomVerticalFlip(p=t.p)) + elif isinstance(t, transforms.RandomRotation): + ts.append(kornia.augmentation.RandomRotation(degrees=t.degrees, interpolation=t.interpolation)) + elif isinstance(t, transforms.RandomGrayscale): + ts.append(kornia.augmentation.RandomGrayscale(p=t.p)) + elif isinstance(t, transforms.RandomAffine): + ts.append(kornia.augmentation.RandomAffine(degrees=t.degrees, translate=t.translate, scale=t.scale, shear=t.shear, interpolation=t.interpolation, fill=t.fill)) + elif isinstance(t, transforms.RandomPerspective): + ts.append(kornia.augmentation.RandomPerspective(distortion_scale=t.distortion_scale, p=t.p, interpolation=t.interpolation, fill=t.fill)) + elif isinstance(t, transforms.RandomCrop): + ts.append(kornia.augmentation.RandomCrop(size=t.size, padding=t.padding, pad_if_needed=t.pad_if_needed, fill=t.fill, padding_mode=t.padding_mode)) + elif isinstance(t, transforms.RandomErasing): + ts.append(kornia.augmentation.RandomErasing(p=t.p, scale=t.scale, ratio=t.ratio, value=t.value, inplace=t.inplace)) + elif isinstance(t, transforms.ColorJitter): + ts.append(kornia.augmentation.ColorJitter(brightness=t.brightness, contrast=t.contrast, saturation=t.saturation, hue=t.hue)) + elif isinstance(t, transforms.RandomApply): + ts.append(kornia.augmentation.RandomApply(t.transforms, p=t.p)) + elif isinstance(t, transforms.RandomChoice): + ts.append(kornia.augmentation.RandomChoice(t.transforms)) + elif isinstance(t, transforms.RandomOrder): + ts.append(kornia.augmentation.RandomOrder(t.transforms)) + elif isinstance(t, transforms.RandomResizedCrop): + ts.append(kornia.augmentation.RandomResizedCrop(size=t.size, scale=t.scale, ratio=t.ratio, interpolation=t.interpolation)) + elif isinstance(t, transforms.Compose): + ts.extend(to_kornia_transform(t, apply=False)) + elif isinstance(t, transforms.ToTensor) or isinstance(t, transforms.ToPILImage): + pass + elif isinstance(t, transforms.Normalize): + ts.append(kornia.augmentation.Normalize(mean=t.mean, std=t.std, p=1)) + else: + raise NotImplementedError + + if not apply: + return ts + + return KorniaAugNoGrad(*ts, same_on_batch=True) + + +class CustomKorniaRandAugment(kornia.augmentation.auto.PolicyAugmentBase): + """ + A custom augmentation class that applies randaug as a Kornia augmentation. + + Inherits from `kornia.augmentation.auto.PolicyAugmentBase`. + + Args: + n (int): The number of augmentations to apply. + policy: The policy of augmentations to apply. + + Attributes: + rand_selector (torch.distributions.Categorical): A categorical distribution for selecting augmentations randomly. + n (int): The number of augmentations to apply. + + Methods: + _getpolicy: Returns the Kornia augmentation operation based on the name, probability, and magnitude. + compose_subpolicy_sequential: Composes a subpolicy of augmentations sequentially. + get_forward_sequence: Returns the forward sequence of augmentations based on the selected indices or parameters. + forward_parameters: Computes the forward parameters for the augmentations. + """ + + def __init__(self, n: int, policy) -> None: + super().__init__(policy) + selection_weights = torch.tensor([1.0 / len(self)] * len(self)) + self.rand_selector = torch.distributions.Categorical(selection_weights) + self.n = n + + def _getpolicy(self, name, p, m): + """ + Returns the Kornia augmentation operation based on the name, probability, and magnitude. + + Args: + name (str): The name of the augmentation operation. + p (float): The probability of applying the augmentation. + m (float): The magnitude of the augmentation. + + Returns: + kornia.augmentation.auto.operations.ops: The Kornia augmentation operation. + """ + if 'shear' in name.lower() or 'solarize' in name.lower() or 'rotate' in name.lower() or 'translate' in name.lower() or name.lower().startswith('contrast'): + # for some reason, some kornia ops have the probability and magnitude in the opposite order + return getattr(kornia.augmentation.auto.operations.ops, name)(m, p) + else: + return getattr(kornia.augmentation.auto.operations.ops, name)(p, m) + + def compose_subpolicy_sequential(self, subpolicy): + """ + Composes a subpolicy of augmentations sequentially. + + Args: + subpolicy (List[Tuple[str, float, float]]): The subpolicy of augmentations. + + Returns: + kornia.augmentation.auto.PolicySequential: The composed subpolicy of augmentations. + """ + return kornia.augmentation.auto.PolicySequential(*[self._getpolicy(name, p, m) for (name, p, m) in subpolicy]) + + def get_forward_sequence(self, params=None): + """ + Returns the forward sequence of augmentations based on the selected indices or parameters. + + Args: + params (List[ParamItem], optional): The parameters of the augmentations. Defaults to None. + + Returns: + List[Tuple[str, kornia.augmentation.auto.operations.ops]]: The forward sequence of augmentations. + """ + if params is None: + idx = self.rand_selector.sample((self.n,)) + return self.get_children_by_indices(idx) + + return self.get_children_by_params(params) + + def forward_parameters(self, batch_shape: torch.Size): + """ + Computes the forward parameters for the augmentations. + + Args: + batch_shape (torch.Size): The shape of the input batch. + + Returns: + List[ParamItem]: The forward parameters for the augmentations. + """ + named_modules = self.get_forward_sequence() + + params = [] + + for name, module in named_modules: + mod_param = module.forward_parameters(batch_shape) + param = ParamItem(name, [ParamItem(mname, mp)[1] for (mname, _), mp in zip(module.named_children(), mod_param)]) + params.append(param) + + return params diff --git a/utils/loggers.py b/utils/loggers.py index 752ad2b4..7f0f70a8 100644 --- a/utils/loggers.py +++ b/utils/loggers.py @@ -3,43 +3,109 @@ # This source code is licensed under the license found in the # LICENSE file in the root directory of this source tree. +""" +This module contains the Logger class and related functions for logging accuracy values and other metrics. +""" + from contextlib import suppress -import os import sys from typing import Any, Dict import numpy as np -from utils import create_if_not_exists +from utils import create_if_not_exists, smart_joint from utils.conf import base_path from utils.metrics import backward_transfer, forward_transfer, forgetting +with suppress(ImportError): + import wandb + + +def log_accs(args, logger, accs, t, setting, epoch=None, prefix="RESULT"): + """ + Logs the accuracy values and other metrics. + + All metrics are prefixed with `RESULT_` to be logged on wandb. + + Args: + args: The arguments for logging. + logger: The Logger object. + accs: The accuracy values. + t: The task index. + setting: The setting of the benchmark (e.g., `class-il`). + epoch: The epoch number (optional). + prefix: The prefix for the metrics (default="RESULT"). + """ + mean_acc = print_mean_accuracy(accs, t + 1, setting, joint=args.joint, epoch=epoch) + + if not args.disable_log: + logger.log(mean_acc) + logger.log_fullacc(accs) + + if not args.nowand: + postfix = "" if epoch is None else f"_epoch_{epoch}" + d2 = {f'{prefix}_class_mean_accs{postfix}': mean_acc[0], f'{prefix}_task_mean_accs{postfix}': mean_acc[1], + **{f'{prefix}_class_acc_{i}{postfix}': a for i, a in enumerate(accs[0])}, + **{f'{prefix}_task_acc_{i}{postfix}': a for i, a in enumerate(accs[1])}, + 'Task': t} -useless_args = ['dataset', 'tensorboard', 'validation', 'model', - 'csv_log', 'notes', 'load_best_args'] + wandb.log(d2) -def print_mean_accuracy(mean_acc: np.ndarray, task_number: int, - setting: str) -> None: +def print_mean_accuracy(accs: np.ndarray, task_number: int, + setting: str, joint=False, epoch=None) -> None: """ Prints the mean accuracy on stderr. - :param mean_acc: mean accuracy value - :param task_number: task index - :param setting: the setting of the benchmark + + Args: + accs: accuracy values per task + task_number: task index + setting: the setting of the benchmark + joint: whether it's joint accuracy or not + epoch: the epoch number (optional) + + Returns: + The mean accuracy value. """ - if setting == 'domain-il': - mean_acc, _ = mean_acc - print('\nAccuracy for {} task(s): {} %'.format( - task_number, round(mean_acc, 2)), file=sys.stderr) + mean_acc = np.mean(accs, axis=1) + + if joint: + prefix = "Joint Accuracy" if epoch is None else f"Joint Accuracy (epoch {epoch})" + if setting == 'domain-il' or setting == 'general-continual': + mean_acc, _ = mean_acc + print('\n{}: \t [Domain-IL]: {} %'.format(prefix, round(mean_acc, 2), file=sys.stderr)) + print('\tRaw accuracy values: Domain-IL {}'.format(accs[0]), file=sys.stderr) + else: + mean_acc_class_il, mean_acc_task_il = mean_acc + print('\n{}: \t [Class-IL]: {} % \t [Task-IL]: {} %'.format(prefix, round( + mean_acc_class_il, 2), round(mean_acc_task_il, 2)), file=sys.stderr) + print('\tRaw accuracy values: Class-IL {} | Task-IL {}'.format(accs[0], accs[1]), file=sys.stderr) else: - mean_acc_class_il, mean_acc_task_il = mean_acc - print('\nAccuracy for {} task(s): \t [Class-IL]: {} %' - ' \t [Task-IL]: {} %\n'.format(task_number, round( - mean_acc_class_il, 2), round(mean_acc_task_il, 2)), file=sys.stderr) + prefix = "Accuracy" if epoch is None else f"Accuracy (epoch {epoch})" + if setting == 'domain-il' or setting == 'general-continual': + mean_acc, _ = mean_acc + print('\n{} for {} task(s): [Domain-IL]: {} %'.format(prefix, + task_number, round(mean_acc, 2)), file=sys.stderr) + print('\tRaw accuracy values: Domain-IL {}'.format(accs[0]), file=sys.stderr) + else: + mean_acc_class_il, mean_acc_task_il = mean_acc + print('\n{} for {} task(s): \t [Class-IL]: {} % \t [Task-IL]: {} %'.format(prefix, task_number, round( + mean_acc_class_il, 2), round(mean_acc_task_il, 2)), file=sys.stderr) + print('\tRaw accuracy values: Class-IL {} | Task-IL {}'.format(accs[0], accs[1]), file=sys.stderr) + + return mean_acc class Logger: def __init__(self, setting_str: str, dataset_str: str, model_str: str) -> None: + """ + Initializes a Logger object. This will take track and log the accuracy values and other metrics in the default path (`data/results`). + + Args: + setting_str: The setting of the benchmark. + dataset_str: The dataset used. + model_str: The model used. + """ self.accs = [] self.fullaccs = [] if setting_str == 'class-il': @@ -56,6 +122,12 @@ def __init__(self, setting_str: str, dataset_str: str, self.forgetting_mask_classes = None def dump(self): + """ + Dumps the state of the logger in a dictionary. + + Returns: + A dictionary containing the logged values. + """ dic = { 'accs': self.accs, 'fullaccs': self.fullaccs, @@ -73,6 +145,12 @@ def dump(self): return dic def load(self, dic): + """ + Loads the state of the logger from a dictionary. + + Args: + dic: The dictionary containing the logged values. + """ self.accs = dic['accs'] self.fullaccs = dic['fullaccs'] self.fwt = dic['fwt'] @@ -86,6 +164,12 @@ def load(self, dic): self.fullaccs_mask_classes = dic['fullaccs_mask_classes'] def rewind(self, num): + """ + Rewinds the logger by a given number of values. + + Args: + num: The number of values to rewind. + """ self.accs = self.accs[:-num] self.fullaccs = self.fullaccs[:-num] with suppress(BaseException): @@ -101,27 +185,51 @@ def rewind(self, num): self.fullaccs_mask_classes = self.fullaccs_mask_classes[:-num] def add_fwt(self, results, accs, results_mask_classes, accs_mask_classes): + """ + Adds forward transfer values. + + Args: + results: The results. + accs: The accuracy values. + results_mask_classes: The results for masked classes. + accs_mask_classes: The accuracy values for masked classes. + """ self.fwt = forward_transfer(results, accs) if self.setting == 'class-il': self.fwt_mask_classes = forward_transfer(results_mask_classes, accs_mask_classes) def add_bwt(self, results, results_mask_classes): + """ + Adds backward transfer values. + + Args: + results: The results. + results_mask_classes: The results for masked classes. + """ self.bwt = backward_transfer(results) self.bwt_mask_classes = backward_transfer(results_mask_classes) def add_forgetting(self, results, results_mask_classes): + """ + Adds forgetting values. + + Args: + results: The results. + results_mask_classes: The results for masked classes. + """ self.forgetting = forgetting(results) self.forgetting_mask_classes = forgetting(results_mask_classes) def log(self, mean_acc: np.ndarray) -> None: """ Logs a mean accuracy value. - :param mean_acc: mean accuracy value + + Args: + mean_acc: mean accuracy value """ if self.setting == 'general-continual': self.accs.append(mean_acc) elif self.setting == 'domain-il': - mean_acc, _ = mean_acc self.accs.append(mean_acc) else: mean_acc_class_il, mean_acc_task_il = mean_acc @@ -129,6 +237,12 @@ def log(self, mean_acc: np.ndarray) -> None: self.accs_mask_classes.append(mean_acc_task_il) def log_fullacc(self, accs): + """ + Logs all the accuracy of the classes from the current and past tasks. + + Args: + accs: the accuracy values + """ if self.setting == 'class-il': acc_class_il, acc_task_il = accs self.fullaccs.append(acc_class_il) @@ -136,8 +250,10 @@ def log_fullacc(self, accs): def write(self, args: Dict[str, Any]) -> None: """ - writes out the logged value along with its arguments. - :param args: the namespace of the current experiment + Writes out the logged value along with its arguments in the default path (`data/results`). + + Args: + args: the namespace of the current experiment """ wrargs = args.copy() @@ -162,11 +278,12 @@ def write(self, args: Dict[str, Any]) -> None: path = target_folder + self.setting + "/" + self.dataset\ + "/" + self.model + "/logs.pyd" + print("Logging results and arguments in " + path) with open(path, 'a') as f: f.write(str(wrargs) + '\n') if self.setting == 'class-il': - create_if_not_exists(os.path.join(*[target_folder, "task-il/", self.dataset])) + create_if_not_exists(smart_joint(*[target_folder, "task-il/", self.dataset])) create_if_not_exists(target_folder + "task-il/" + self.dataset + "/" + self.model) diff --git a/utils/magic.py b/utils/magic.py index 3fc15a6b..33fe01df 100644 --- a/utils/magic.py +++ b/utils/magic.py @@ -5,6 +5,19 @@ class persistent_locals: + """ + A decorator class that allows access to the local variables of a function + after it has been called. + + Usage: + @persistent_locals + def my_function(): + ... + + my_function() + print(my_function.locals) # Access the local variables of my_function + """ + def __init__(self, func: Callable): self._locals = {} self.func = func @@ -25,8 +38,14 @@ def tracer(frame, event, arg): return res def clear_locals(self): + """ + Clears the stored local variables. + """ self._locals = {} @property def locals(self): + """ + Returns the stored local variables. + """ return self._locals diff --git a/utils/main.py b/utils/main.py index 9554bfab..5d32469a 100644 --- a/utils/main.py +++ b/utils/main.py @@ -1,14 +1,31 @@ +""" +This script is the main entry point for the Mammoth project. It contains the main function `main()` that orchestrates the training process. + +The script performs the following tasks: +- Imports necessary modules and libraries. +- Sets up the necessary paths and configurations. +- Parses command-line arguments. +- Initializes the dataset, model, and other components. +- Trains the model using the `train()` function. + +To run the script, execute it directly or import it as a module and call the `main()` function. +""" # Copyright 2022-present, Lorenzo Bonicelli, Pietro Buzzega, Matteo Boschini, Angelo Porrello, Simone Calderara. # All rights reserved. # This source code is licensed under the license found in the # LICENSE file in the root directory of this source tree. -import numpy # needed (don't change it) +# needed (don't change it) +import numpy # noqa +import time import importlib import os import socket import sys - +import datetime +import uuid +from argparse import ArgumentParser +import torch mammoth_path = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) sys.path.append(mammoth_path) @@ -16,22 +33,12 @@ sys.path.append(mammoth_path + '/backbone') sys.path.append(mammoth_path + '/models') -import datetime -import uuid -from argparse import ArgumentParser - -import setproctitle -import torch -from datasets import NAMES as DATASET_NAMES -from datasets import ContinualDataset, get_dataset -from models import get_all_models, get_model - -from utils.args import add_management_args +from utils import create_if_not_exists, custom_str_underscore +from utils.args import add_management_args, add_experiment_args +from utils.conf import base_path +from utils.distributed import make_dp from utils.best_args import best_args from utils.conf import set_random_seed -from utils.continual_training import train as ctrain -from utils.distributed import make_dp -from utils.training import train def lecun_fix(): @@ -43,20 +50,33 @@ def lecun_fix(): def parse_args(): - parser = ArgumentParser(description='mammoth', allow_abbrev=False) - parser.add_argument('--model', type=str, required=True, - help='Model name.', choices=get_all_models()) + """ + Parse command line arguments for the mammoth program and sets up the `args` object. + + Returns: + args (argparse.Namespace): Parsed command line arguments. + """ + from models import get_all_models, get_model_class + from datasets import get_dataset_names, get_dataset_class + + parser = ArgumentParser(description='mammoth', allow_abbrev=False, add_help=False) + parser.add_argument('--model', type=custom_str_underscore, help='Model name.', choices=list(get_all_models().keys())) parser.add_argument('--load_best_args', action='store_true', help='Loads the best arguments for each method, ' 'dataset and memory buffer.') - torch.set_num_threads(4) - add_management_args(parser) + args = parser.parse_known_args()[0] - mod = importlib.import_module('models.' + args.model) + models_dict = get_all_models() + if args.model is None: + print('No model specified. Please specify a model with --model to see all other options.') + print('Available models are: {}'.format(list(models_dict.keys()))) + sys.exit(1) + + mod = importlib.import_module('models.' + models_dict[args.model]) if args.load_best_args: parser.add_argument('--dataset', type=str, required=True, - choices=DATASET_NAMES, + choices=get_dataset_names(), help='Which dataset to perform experiments on.') if hasattr(mod, 'Buffer'): parser.add_argument('--buffer_size', type=int, required=True, @@ -70,29 +90,69 @@ def parse_args(): best = best[args.buffer_size] else: best = best[-1] - get_parser = getattr(mod, 'get_parser') - parser = get_parser() + + parser = get_model_class(args).get_parser() + add_management_args(parser) + add_experiment_args(parser) to_parse = sys.argv[1:] + ['--' + k + '=' + str(v) for k, v in best.items()] to_parse.remove('--load_best_args') args = parser.parse_args(to_parse) if args.model == 'joint' and args.dataset == 'mnist-360': args.model = 'joint_gcl' else: - get_parser = getattr(mod, 'get_parser') - parser = get_parser() + parser = get_model_class(args).get_parser() + add_management_args(parser) + add_experiment_args(parser) args = parser.parse_args() + tmp_dset_class = get_dataset_class(args) + n_epochs = tmp_dset_class.get_epochs() + if args.n_epochs is None: + args.n_epochs = n_epochs + else: + if args.n_epochs != n_epochs: + print('Warning: n_epochs set to {} instead of {}.'.format(args.n_epochs, n_epochs), file=sys.stderr) + + args.model = models_dict[args.model] + + if args.lr_scheduler is not None: + print('Warning: lr_scheduler set to {}, overrides default from dataset.'.format(args.lr_scheduler), file=sys.stderr) + if args.seed is not None: set_random_seed(args.seed) + if args.savecheck: + assert args.inference_only == 0, "Should not save checkpoint in inference only mode" + if not os.path.isdir('checkpoints'): + create_if_not_exists("checkpoints") + + now = time.strftime("%Y%m%d-%H%M%S") + extra_ckpt_name = "" if args.ckpt_name is None else f"{args.ckpt_name}_" + args.ckpt_name = f"{extra_ckpt_name}{args.model}_{args.dataset}_{args.buffer_size if hasattr(args, 'buffer_size') else 0}_{args.n_epochs}_{str(now)}" + args.ckpt_name_replace = f"{extra_ckpt_name}{args.model}_{args.dataset}_{'{}'}_{args.buffer_size if hasattr(args, 'buffer_size') else 0}__{args.n_epochs}_{str(now)}" + print("Saving checkpoint into", args.ckpt_name, file=sys.stderr) + + if args.joint: + assert args.start_from is None and args.stop_after is None, "Joint training does not support start_from and stop_after" + assert args.enable_other_metrics == 0, "Joint training does not support other metrics" + + assert 0 < args.label_perc <= 1, "label_perc must be in (0, 1]" + return args def main(args=None): + from models import get_model + from datasets import ContinualDataset, get_dataset + from utils.training import train + lecun_fix() if args is None: args = parse_args() + # set base path + base_path(args.base_path) + os.putenv("MKL_SERVICE_FORCE_INTEL", "1") os.putenv("NPY_MKL_FORCE_INTEL", "1") @@ -106,14 +166,19 @@ def main(args=None): args.n_epochs = dataset.get_epochs() if args.batch_size is None: args.batch_size = dataset.get_batch_size() - if hasattr(importlib.import_module('models.' + args.model), 'Buffer') and args.minibatch_size is None: - args.minibatch_size = dataset.get_minibatch_size() + if hasattr(importlib.import_module('models.' + args.model), 'Buffer') and (not hasattr(args, 'minibatch_size') or args.minibatch_size is None): + args.minibatch_size = dataset.get_minibatch_size() + else: + args.minibatch_size = args.batch_size backbone = dataset.get_backbone() loss = dataset.get_loss() model = get_model(args, backbone, loss, dataset.get_transform()) if args.distributed == 'dp': + if args.batch_size < torch.cuda.device_count(): + raise Exception(f"Batch too small for DataParallel (Need at least {torch.cuda.device_count()}).") + model.net = make_dp(model.net) model.to('cuda:0') args.conf_ngpus = torch.cuda.device_count() @@ -122,16 +187,24 @@ def main(args=None): raise NotImplementedError('Distributed Data Parallel not supported yet.') if args.debug_mode: + print('Debug mode enabled: running only a few forward steps per epoch with W&B disabled.') args.nowand = 1 - # set job name - setproctitle.setproctitle('{}_{}_{}'.format(args.model, args.buffer_size if 'buffer_size' in args else 0, args.dataset)) - - if isinstance(dataset, ContinualDataset): - train(model, dataset, args) + if args.wandb_entity is None or args.wandb_project is None: + print('Warning: wandb_entity and wandb_project not set. Disabling wandb.') + args.nowand = 1 else: - assert not hasattr(model, 'end_task') or model.NAME == 'joint_gcl' - ctrain(args) + print('Logging to wandb: {}/{}'.format(args.wandb_entity, args.wandb_project)) + args.nowand = 0 + + try: + import setproctitle + # set job name + setproctitle.setproctitle('{}_{}_{}'.format(args.model, args.buffer_size if 'buffer_size' in args else 0, args.dataset)) + except Exception: + pass + + train(model, dataset, args) if __name__ == '__main__': diff --git a/utils/metrics.py b/utils/metrics.py index b0b6db54..bbf27266 100644 --- a/utils/metrics.py +++ b/utils/metrics.py @@ -7,6 +7,15 @@ def backward_transfer(results): + """ + Calculates the backward transfer metric. + + Args: + results (list): A list of lists representing the results of all classes of all task. + + Returns: + float: The mean backward transfer value. + """ n_tasks = len(results) li = [] for i in range(n_tasks - 1): @@ -16,6 +25,16 @@ def backward_transfer(results): def forward_transfer(results, random_results): + """ + Calculates the forward transfer metric. + + Args: + results (list): A list of lists representing the results of all classes of all task. + random_results (list): A list of results from a random baseline. + + Returns: + float: The mean forward transfer value. + """ n_tasks = len(results) li = [] for i in range(1, n_tasks): @@ -25,6 +44,15 @@ def forward_transfer(results, random_results): def forgetting(results): + """ + Calculates the forgetting metric. + + Args: + results (list): A list of lists representing the results of all classes of all task. + + Returns: + float: The mean forgetting value. + """ n_tasks = len(results) li = [] for i in range(n_tasks - 1): diff --git a/utils/mixup.py b/utils/mixup.py new file mode 100644 index 00000000..4fb4460e --- /dev/null +++ b/utils/mixup.py @@ -0,0 +1,36 @@ +# Copyright 2021-present, Lorenzo Bonicelli, Pietro Buzzega, Matteo Boschini, Angelo Porrello, Simone Calderara. +# All rights reserved. +# This source code is licensed under the license found in the +# LICENSE file in the root directory of this source tree. + +import torch +from torch.distributions.beta import Beta + + +def mixup(couples, alpha, force_lambda=None): + """ + Applies mixup augmentation to the given couples of inputs. + + Args: + couples (list): A list of tuples, where each tuple contains two inputs to be mixed. + alpha (float): The alpha parameter for the Beta distribution used to sample the mixing coefficients. + force_lambda (float or None, optional): If not None, forces the use of a specific mixing coefficient for all inputs. + + Returns: + tuple or torch.Tensor: If more than one mixed input is generated, a tuple of mixed inputs is returned. Otherwise, a single mixed input is returned. + """ + lamda = Beta(alpha, alpha).rsample((len(couples[0][0]),)).to(couples[0][0].device) + lamda = torch.max(lamda, 1 - lamda) + + if force_lambda is not None: + lamda = torch.tensor(force_lambda).repeat((len(couples[0][0]),)).to(couples[0][0].device) + + returns = [] + + for (i1, i2) in couples: + lamda = lamda.view([lamda.shape[0]] + [1] * (len(i1.shape) - 1)) + assert i1.shape == i2.shape + x_out = lamda * i1 + (1 - lamda) * i2 + returns.append(x_out) + + return tuple(returns) if len(returns) > 1 else returns[0] diff --git a/utils/prompt_templates.py b/utils/prompt_templates.py new file mode 100644 index 00000000..6a1017e8 --- /dev/null +++ b/utils/prompt_templates.py @@ -0,0 +1,139 @@ +templates = { + 'cars196': [ + 'a photo of a {}.', + 'a photo of the {}.', + 'a photo of my {}.', + 'i love my {}!', + 'a photo of my dirty {}.', + 'a photo of my clean {}.', + 'a photo of my new {}.', + 'a photo of my old {}.', + ], + + 'cifar100': [ + 'a photo of a {}.', + 'a blurry photo of a {}.', + 'a black and white photo of a {}.', + 'a low contrast photo of a {}.', + 'a high contrast photo of a {}.', + 'a bad photo of a {}.', + 'a good photo of a {}.', + 'a photo of a small {}.', + 'a photo of a big {}.', + 'a photo of the {}.', + 'a blurry photo of the {}.', + 'a black and white photo of the {}.', + 'a low contrast photo of the {}.', + 'a high contrast photo of the {}.', + 'a bad photo of the {}.', + 'a good photo of the {}.', + 'a photo of the small {}.', + 'a photo of the big {}.', + ], + + 'imagenet': [ + 'a bad photo of a {}.', + 'a photo of many {}.', + 'a sculpture of a {}.', + 'a photo of the hard to see {}.', + 'a low resolution photo of the {}.', + 'a rendering of a {}.', + 'graffiti of a {}.', + 'a bad photo of the {}.', + 'a cropped photo of the {}.', + 'a tattoo of a {}.', + 'the embroidered {}.', + 'a photo of a hard to see {}.', + 'a bright photo of a {}.', + 'a photo of a clean {}.', + 'a photo of a dirty {}.', + 'a dark photo of the {}.', + 'a drawing of a {}.', + 'a photo of my {}.', + 'the plastic {}.', + 'a photo of the cool {}.', + 'a close-up photo of a {}.', + 'a black and white photo of the {}.', + 'a painting of the {}.', + 'a painting of a {}.', + 'a pixelated photo of the {}.', + 'a sculpture of the {}.', + 'a bright photo of the {}.', + 'a cropped photo of a {}.', + 'a plastic {}.', + 'a photo of the dirty {}.', + 'a jpeg corrupted photo of a {}.', + 'a blurry photo of the {}.', + 'a photo of the {}.', + 'a good photo of the {}.', + 'a rendering of the {}.', + 'a {} in a video game.', + 'a photo of one {}.', + 'a doodle of a {}.', + 'a close-up photo of the {}.', + 'a photo of a {}.', + 'the origami {}.', + 'the {} in a video game.', + 'a sketch of a {}.', + 'a doodle of the {}.', + 'a origami {}.', + 'a low resolution photo of a {}.', + 'the toy {}.', + 'a rendition of the {}.', + 'a photo of the clean {}.', + 'a photo of a large {}.', + 'a rendition of a {}.', + 'a photo of a nice {}.', + 'a photo of a weird {}.', + 'a blurry photo of a {}.', + 'a cartoon {}.', + 'art of a {}.', + 'a sketch of the {}.', + 'a embroidered {}.', + 'a pixelated photo of a {}.', + 'itap of the {}.', + 'a jpeg corrupted photo of the {}.', + 'a good photo of a {}.', + 'a plushie {}.', + 'a photo of the nice {}.', + 'a photo of the small {}.', + 'a photo of the weird {}.', + 'the cartoon {}.', + 'art of the {}.', + 'a drawing of the {}.', + 'a photo of the large {}.', + 'a black and white photo of a {}.', + 'the plushie {}.', + 'a dark photo of a {}.', + 'itap of a {}.', + 'graffiti of the {}.', + 'a toy {}.', + 'itap of my {}.', + 'a photo of a cool {}.', + 'a photo of a small {}.', + 'a tattoo of the {}.', + ], + 'eurosat': [ + 'a photo of a {}.', + 'a blurry photo of a {}.', + 'a black and white photo of a {}.', + 'a low contrast photo of a {}.', + 'a high contrast photo of a {}.', + 'a bad photo of a {}.', + 'a good photo of a {}.', + 'a photo of a small {}.', + 'a photo of a big {}.', + 'a photo of the {}.', + 'a blurry photo of the {}.', + 'a black and white photo of the {}.', + 'a low contrast photo of the {}.', + 'a high contrast photo of the {}.', + 'a bad photo of the {}.', + 'a good photo of the {}.', + 'a photo of the small {}.', + 'a photo of the big {}.', + 'a centered satellite photo of {}.', + 'a centered satellite photo of a {}.', + 'a centered satellite photo of the {}.', + ] +} diff --git a/utils/ring_buffer.py b/utils/ring_buffer.py index 701b40b1..310dc267 100644 --- a/utils/ring_buffer.py +++ b/utils/ring_buffer.py @@ -1,3 +1,7 @@ +""" +This module contains a version of the reservoir buffer that uses a ring buffer strategy instead of reservoir. +""" + # Copyright 2020-present, Pietro Buzzega, Matteo Boschini, Angelo Porrello, Davide Abati, Simone Calderara. # All rights reserved. # This source code is licensed under the license found in the @@ -19,7 +23,7 @@ class RingBuffer: The memory buffer of rehearsal method. """ - def __init__(self, buffer_size, device, n_tasks): + def __init__(self, buffer_size, n_tasks=1, device="cpu"): self.buffer_size = buffer_size self.buffer_portion_size = buffer_size // n_tasks self.device = device @@ -31,10 +35,12 @@ def init_tensors(self, examples: torch.Tensor, labels: torch.Tensor, logits: torch.Tensor, task_labels: torch.Tensor) -> None: """ Initializes just the required tensors. - :param examples: tensor containing the images - :param labels: tensor containing the labels - :param logits: tensor containing the outputs of the network - :param task_labels: tensor containing the task labels + + Args: + examples: tensor containing the images + labels: tensor containing the labels + logits: tensor containing the outputs of the network + task_labels: tensor containing the task labels """ for attr_str in self.attributes: attr = eval(attr_str) @@ -43,16 +49,17 @@ def init_tensors(self, examples: torch.Tensor, labels: torch.Tensor, setattr(self, attr_str, torch.zeros((self.buffer_size, *attr.shape[1:]), dtype=typ, device=self.device)) - self.labels -= 1 + self.filled_space = torch.zeros((self.buffer_size), dtype=torch.bool, device=self.device) # initialize filled space def add_data(self, examples, labels=None, logits=None, task_labels=None): """ Adds the data to the memory buffer according to the reservoir strategy. - :param examples: tensor containing the images - :param labels: tensor containing the labels - :param logits: tensor containing the outputs of the network - :param task_labels: tensor containing the task labels - :return: + + Args: + examples: tensor containing the images + labels: tensor containing the labels + logits: tensor containing the outputs of the network + task_labels: tensor containing the task labels """ if not hasattr(self, 'examples'): self.init_tensors(examples, labels, logits, task_labels) @@ -62,6 +69,7 @@ def add_data(self, examples, labels=None, logits=None, task_labels=None): self.num_seen_examples += 1 if index >= 0: self.examples[index] = examples[i].to(self.device) + self.filled_space[index] = True if labels is not None: self.labels[index] = labels[i].to(self.device) if logits is not None: @@ -69,27 +77,32 @@ def add_data(self, examples, labels=None, logits=None, task_labels=None): if task_labels is not None: self.task_labels[index] = task_labels[i].to(self.device) - def get_data(self, size: int, transform: transforms = None) -> Tuple: + def get_data(self, size: int, transform: transforms = None, device=None) -> Tuple: """ Random samples a batch of size items. - :param size: the number of requested items - :param transform: the transformation to be applied (data augmentation) - :return: + + Args: + size: the number of requested items + transform: the transformation to be applied (data augmentation) + + Returns: + a tuple with the requested items """ - populated_portion_length = (self.labels != -1).sum().item() + target_device = self.device if device is None else device + populated_portion_length = self.filled_space.sum().item() if size > populated_portion_length: size = populated_portion_length - choice = np.random.choice(populated_portion_length, size=size, replace=False) + choice = torch.from_numpy(np.random.choice(populated_portion_length, size=size, replace=False)).to(self.device, dtype=torch.long) if transform is None: def transform(x): return x - ret_tuple = (torch.stack([transform(ee.cpu()) - for ee in self.examples[choice]]).to(self.device),) + ret_tuple = (torch.stack([transform(ee) + for ee in self.examples[choice].cpu()]).to(target_device),) for attr_str in self.attributes[1:]: if hasattr(self, attr_str): attr = getattr(self, attr_str) - ret_tuple += (attr[choice],) + ret_tuple += (attr[choice].to(target_device),) return ret_tuple @@ -102,20 +115,26 @@ def is_empty(self) -> bool: else: return False - def get_all_data(self, transform: transforms = None) -> Tuple: + def get_all_data(self, transform: transforms = None, device=None) -> Tuple: """ Return all the items in the memory buffer. - :param transform: the transformation to be applied (data augmentation) - :return: a tuple with all the items in the memory buffer + + Args: + transform: the transformation to be applied (data augmentation) + device: the device to be used + + Returns: + a tuple with all the items in the memory buffer """ + target_device = self.device if device is None else device if transform is None: def transform(x): return x - ret_tuple = (torch.stack([transform(ee.cpu()) - for ee in self.examples]).to(self.device),) + ret_tuple = (torch.stack([transform(ee) + for ee in self.examples.cpu()]).to(target_device),) for attr_str in self.attributes[1:]: if hasattr(self, attr_str): attr = getattr(self, attr_str) - ret_tuple += (attr,) + ret_tuple += (attr.to(target_device),) return ret_tuple def empty(self) -> None: @@ -126,3 +145,4 @@ def empty(self) -> None: if hasattr(self, attr_str): delattr(self, attr_str) self.num_seen_examples = 0 + self.filled_space[:] = False diff --git a/utils/schedulers.py b/utils/schedulers.py new file mode 100644 index 00000000..c4ba6032 --- /dev/null +++ b/utils/schedulers.py @@ -0,0 +1,61 @@ +from torch.optim import Optimizer +import math + + +class _LRScheduler(object): + def __init__(self, optimizer, last_epoch=-1): + if not isinstance(optimizer, Optimizer): + raise TypeError('{} is not an Optimizer'.format( + type(optimizer).__name__)) + self.optimizer = optimizer + if last_epoch == -1: + for group in optimizer.param_groups: + group.setdefault('initial_lr', group['lr']) + else: + for i, group in enumerate(optimizer.param_groups): + if 'initial_lr' not in group: + raise KeyError("param 'initial_lr' is not specified " + "in param_groups[{}] when resuming an optimizer".format(i)) + self.base_lrs = list(map(lambda group: group['initial_lr'], optimizer.param_groups)) + self.step(last_epoch + 1) + self.last_epoch = last_epoch + + def state_dict(self): + """Returns the state of the scheduler as a :class:`dict`. + It contains an entry for every variable in self.__dict__ which + is not the optimizer. + """ + return {key: value for key, value in self.__dict__.items() if key != 'optimizer'} + + def load_state_dict(self, state_dict): + """Loads the schedulers state. + Arguments: + state_dict (dict): scheduler state. Should be an object returned + from a call to :meth:`state_dict`. + """ + self.__dict__.update(state_dict) + + def get_lr(self): + raise NotImplementedError + + def step(self, epoch=None): + if epoch is None: + epoch = self.last_epoch + 1 + self.last_epoch = epoch + for param_group, lr in zip(self.optimizer.param_groups, self.get_lr()): + param_group['lr'] = lr + + +class CosineSchedule(_LRScheduler): + + def __init__(self, optimizer, K): + self.K = K + super().__init__(optimizer, -1) + + def cosine(self, base_lr): + if self.last_epoch == 0: + return base_lr + return base_lr * math.cos((99 * math.pi * (self.last_epoch)) / (200 * (self.K - 1))) + + def get_lr(self): + return [self.cosine(base_lr) for base_lr in self.base_lrs] diff --git a/utils/simclrloss.py b/utils/simclrloss.py index 3601f940..5d74e178 100644 --- a/utils/simclrloss.py +++ b/utils/simclrloss.py @@ -11,6 +11,7 @@ class SupConLoss(nn.Module): """Supervised Contrastive Learning: https://arxiv.org/pdf/2004.11362.pdf. It also supports the unsupervised contrastive loss in SimCLR""" + def __init__(self, temperature=0.07, contrast_mode='all', base_temperature=0.07, reduction='mean'): super(SupConLoss, self).__init__() diff --git a/utils/spkdloss.py b/utils/spkdloss.py new file mode 100644 index 00000000..53451503 --- /dev/null +++ b/utils/spkdloss.py @@ -0,0 +1,28 @@ +import torch +from torch import nn +from torch.nn import functional as F + + +class SPKDLoss(nn.Module): + """ + "Similarity-Preserving Knowledge Distillation" + """ + + def __init__(self, reduction): + super().__init__() + self.reduction = reduction + + def matmul_and_normalize(self, z): + z = torch.flatten(z, 1) + return F.normalize(torch.matmul(z, torch.t(z)), 1) + + def compute_spkd_loss(self, teacher_outputs, student_outputs): + g_t = self.matmul_and_normalize(teacher_outputs) + g_s = self.matmul_and_normalize(student_outputs) + return torch.norm(g_t - g_s) ** 2 + + def forward(self, teacher_outputs, student_outputs): + batch_size = teacher_outputs.shape[0] + spkd_losses = self.compute_spkd_loss(teacher_outputs, student_outputs) + spkd_loss = spkd_losses.sum() + return spkd_loss / (batch_size ** 2) if self.reduction == 'batchmean' else spkd_loss diff --git a/utils/status.py b/utils/status.py index f2d352d3..4c24c15c 100644 --- a/utils/status.py +++ b/utils/status.py @@ -10,57 +10,85 @@ class ProgressBar: - def __init__(self, verbose=True): + def __init__(self, joint=False, verbose=True): + """ + Initializes a ProgressBar object. + + Args: + joint: a boolean indicating whether the progress bar is for a joint task + verbose: a boolean indicating whether to display the progress bar + """ + self.joint = joint self.old_time = 0 self.running_sum = 0 self.verbose = verbose def prog(self, i: int, max_iter: int, epoch: Union[int, str], - task_number: int, loss: float) -> None: + task_number: int, loss: float) -> None: """ Prints out the progress bar on the stderr file. - :param i: the current iteration - :param max_iter: the maximum number of iteration - :param epoch: the epoch - :param task_number: the task index - :param loss: the current value of the loss function + + Args: + i: the current iteration + max_iter: the maximum number of iteration. If None, the progress bar is not printed. + epoch: the epoch + task_number: the task index + loss: the current value of the loss function """ if not self.verbose: if i == 0: - print('[ {} ] Task {} | epoch {}\n'.format( - datetime.now().strftime("%m-%d | %H:%M"), - task_number + 1 if isinstance(task_number, int) else task_number, - epoch - ), file=sys.stderr, end='', flush=True) + if self.joint: + print('[ {} ] Joint | epoch {}\n'.format( + datetime.now().strftime("%m-%d | %H:%M"), + epoch + ), file=sys.stderr, end='', flush=True) + else: + print('[ {} ] Task {} | epoch {}\n'.format( + datetime.now().strftime("%m-%d | %H:%M"), + task_number + 1 if isinstance(task_number, int) else task_number, + epoch + ), file=sys.stderr, end='', flush=True) else: return if i == 0: self.old_time = time() self.running_sum = 0 else: - self.running_sum = self.running_sum + (time() - self.old_time) + self.running_sum = self.running_sum + (time() - self.old_time) + 1e-8 self.old_time = time() if i: # not (i + 1) % 10 or (i + 1) == max_iter: - progress = min(float((i + 1) / max_iter), 1) - progress_bar = ('█' * int(50 * progress)) + ('┈' * (50 - int(50 * progress))) - print('\r[ {} ] Task {} | epoch {}: |{}| {} ep/h | loss: {} |'.format( - datetime.now().strftime("%m-%d | %H:%M"), - task_number + 1 if isinstance(task_number, int) else task_number, - epoch, - progress_bar, - round(3600 / (self.running_sum / i * max_iter), 2), - round(loss, 8) - ), file=sys.stderr, end='', flush=True) + progress = min(float((i + 1) / max_iter), 1) if max_iter else 0 + progress_bar = ('█' * int(50 * progress)) + ('┈' * (50 - int(50 * progress))) if max_iter else '~N/A~' + if self.joint: + print('\r[ {} ] Joint | epoch {}: |{}| {} ep/h | loss: {} |'.format( + datetime.now().strftime("%m-%d | %H:%M"), + epoch, + progress_bar, + round(3600 / (self.running_sum / i * max_iter), 2) if max_iter else 'N/A', + round(loss, 8) + ), file=sys.stderr, end='', flush=True) + else: + print('\r[ {} ] Task {} | epoch {}: |{}| {} ep/h | loss: {} |'.format( + datetime.now().strftime("%m-%d | %H:%M"), + task_number + 1 if isinstance(task_number, int) else task_number, + epoch, + progress_bar, + round(3600 / (self.running_sum / i * max_iter), 2) if max_iter else 'N/A', + round(loss, 8) + ), file=sys.stderr, end='', flush=True) + def progress_bar(i: int, max_iter: int, epoch: Union[int, str], task_number: int, loss: float) -> None: """ Prints out the progress bar on the stderr file. - :param i: the current iteration - :param max_iter: the maximum number of iteration - :param epoch: the epoch - :param task_number: the task index - :param loss: the current value of the loss function + + Args: + i: the current iteration + max_iter: the maximum number of iteration + epoch: the epoch + task_number: the task index + loss: the current value of the loss function """ global static_bar diff --git a/utils/training.py b/utils/training.py index e97b4bb9..219c8d96 100644 --- a/utils/training.py +++ b/utils/training.py @@ -3,6 +3,7 @@ # This source code is licensed under the license found in the # LICENSE file in the root directory of this source tree. +from copy import deepcopy import math import sys from argparse import Namespace @@ -11,8 +12,11 @@ import torch from datasets import get_dataset from datasets.utils.continual_dataset import ContinualDataset +from datasets.utils.gcl_dataset import GCLDataset from models.utils.continual_model import ContinualModel +from utils import random_id +from utils.checkpoints import mammoth_load_checkpoint from utils.loggers import * from utils.status import ProgressBar @@ -21,75 +25,109 @@ except ImportError: wandb = None + def mask_classes(outputs: torch.Tensor, dataset: ContinualDataset, k: int) -> None: """ Given the output tensor, the dataset at hand and the current task, masks the former by setting the responses for the other tasks at -inf. It is used to obtain the results for the task-il setting. - :param outputs: the output tensor - :param dataset: the continual dataset - :param k: the task index + + Args: + outputs: the output tensor + dataset: the continual dataset + k: the task index """ outputs[:, 0:k * dataset.N_CLASSES_PER_TASK] = -float('inf') outputs[:, (k + 1) * dataset.N_CLASSES_PER_TASK: - dataset.N_TASKS * dataset.N_CLASSES_PER_TASK] = -float('inf') + dataset.N_TASKS * dataset.N_CLASSES_PER_TASK] = -float('inf') +@torch.no_grad() def evaluate(model: ContinualModel, dataset: ContinualDataset, last=False) -> Tuple[list, list]: """ Evaluates the accuracy of the model for each past task. - :param model: the model to be evaluated - :param dataset: the continual dataset at hand - :return: a tuple of lists, containing the class-il - and task-il accuracy for each task + + The accuracy is evaluated for all the tasks up to the current one, only for the total number of classes seen so far. + + Args: + model: the model to be evaluated + dataset: the continual dataset at hand + + Returns: + a tuple of lists, containing the class-il and task-il accuracy for each task """ status = model.net.training model.net.eval() accs, accs_mask_classes = [], [] + n_classes = dataset.get_offsets()[1] for k, test_loader in enumerate(dataset.test_loaders): if last and k < len(dataset.test_loaders) - 1: continue correct, correct_mask_classes, total = 0.0, 0.0, 0.0 - for data in test_loader: - with torch.no_grad(): - inputs, labels = data - inputs, labels = inputs.to(model.device), labels.to(model.device) - if 'class-il' not in model.COMPATIBILITY: - outputs = model(inputs, k) - else: - outputs = model(inputs) + test_iter = iter(test_loader) + i = 0 + while True: + try: + data = next(test_iter) + except StopIteration: + break + if model.args.debug_mode and i > model.get_debug_iters(): + break + inputs, labels = data + inputs, labels = inputs.to(model.device), labels.to(model.device) + if 'class-il' not in model.COMPATIBILITY and 'general-continual' not in model.COMPATIBILITY: + outputs = model(inputs, k) + else: + outputs = model(inputs) + + _, pred = torch.max(outputs[:, :n_classes].data, 1) + correct += torch.sum(pred == labels).item() + total += labels.shape[0] + i += 1 + if dataset.SETTING == 'class-il': + mask_classes(outputs, dataset, k) _, pred = torch.max(outputs.data, 1) - correct += torch.sum(pred == labels).item() - total += labels.shape[0] - - if dataset.SETTING == 'class-il': - mask_classes(outputs, dataset, k) - _, pred = torch.max(outputs.data, 1) - correct_mask_classes += torch.sum(pred == labels).item() + correct_mask_classes += torch.sum(pred == labels).item() accs.append(correct / total * 100 - if 'class-il' in model.COMPATIBILITY else 0) + if 'class-il' in model.COMPATIBILITY or 'general-continual' in model.COMPATIBILITY else 0) accs_mask_classes.append(correct_mask_classes / total * 100) model.net.train(status) return accs, accs_mask_classes +def initialize_wandb(args: Namespace) -> None: + """ + Initializes wandb, if installed. + + Args: + args: the arguments of the current execution + """ + assert wandb is not None, "Wandb not installed, please install it or run without wandb" + run_name = args.wandb_name if args.wandb_name is not None else args.model + + run_id = random_id(5) + name = f'{run_name}_{run_id}' + wandb.init(project=args.wandb_project, entity=args.wandb_entity, config=vars(args), name=name) + args.wandb_url = wandb.run.get_url() + + def train(model: ContinualModel, dataset: ContinualDataset, args: Namespace) -> None: """ The training process, including evaluations and loggers. - :param model: the module to be trained - :param dataset: the continual dataset at hand - :param args: the arguments of the current execution + + Args: + model: the module to be trained + dataset: the continual dataset at hand + args: the arguments of the current execution """ print(args) if not args.nowand: - assert wandb is not None, "Wandb not installed, please install it or run without wandb" - wandb.init(project=args.wandb_project, entity=args.wandb_entity, config=vars(args)) - args.wandb_url = wandb.run.get_url() + initialize_wandb(args) model.net.to(model.device) results, results_mask_classes = [], [] @@ -97,9 +135,24 @@ def train(model: ContinualModel, dataset: ContinualDataset, if not args.disable_log: logger = Logger(dataset.SETTING, dataset.NAME, model.NAME) - progress_bar = ProgressBar(verbose=not args.non_verbose) + if args.start_from is not None: + for i in range(args.start_from): + train_loader, _ = dataset.get_data_loaders() + model.meta_begin_task(dataset) + model.meta_end_task(dataset) - if not args.ignore_other_metrics: + if args.loadcheck is not None: + model, past_res = mammoth_load_checkpoint(args, model) + + if not args.disable_log and past_res is not None: + (results, results_mask_classes, csvdump) = past_res + logger.load(csvdump) + + print('Checkpoint Loaded!') + + progress_bar = ProgressBar(joint=args.joint, verbose=not args.non_verbose) + + if args.enable_other_metrics: dataset_copy = get_dataset(args) for t in range(dataset.N_TASKS): model.net.train() @@ -108,72 +161,99 @@ def train(model: ContinualModel, dataset: ContinualDataset, random_results_class, random_results_task = evaluate(model, dataset_copy) print(file=sys.stderr) - for t in range(dataset.N_TASKS): + start_task = 0 if args.start_from is None else args.start_from + end_task = dataset.N_TASKS if args.stop_after is None else args.stop_after + + torch.cuda.empty_cache() + for t in range(start_task, end_task): model.net.train() train_loader, test_loader = dataset.get_data_loaders() - if hasattr(model, 'begin_task'): - model.begin_task(dataset) - if t and not args.ignore_other_metrics: - accs = evaluate(model, dataset, last=True) - results[t-1] = results[t-1] + accs[0] - if dataset.SETTING == 'class-il': - results_mask_classes[t-1] = results_mask_classes[t-1] + accs[1] - - scheduler = dataset.get_scheduler(model, args) - for epoch in range(model.args.n_epochs): - if args.model == 'joint': - continue - for i, data in enumerate(train_loader): - if args.debug_mode and i > 3: - break - if hasattr(dataset.train_loader.dataset, 'logits'): - inputs, labels, not_aug_inputs, logits = data - inputs = inputs.to(model.device) - labels = labels.to(model.device) - not_aug_inputs = not_aug_inputs.to(model.device) - logits = logits.to(model.device) - loss = model.meta_observe(inputs, labels, not_aug_inputs, logits) - else: - inputs, labels, not_aug_inputs = data - inputs, labels = inputs.to(model.device), labels.to( - model.device) - not_aug_inputs = not_aug_inputs.to(model.device) - loss = model.meta_observe(inputs, labels, not_aug_inputs) - assert not math.isnan(loss) - progress_bar.prog(i, len(train_loader), epoch, t, loss) - - if scheduler is not None: - scheduler.step() - - if hasattr(model, 'end_task'): - model.end_task(dataset) + model.meta_begin_task(dataset) + + if not args.inference_only: + if t and args.enable_other_metrics: + accs = evaluate(model, dataset, last=True) + results[t - 1] = results[t - 1] + accs[0] + if dataset.SETTING == 'class-il': + results_mask_classes[t - 1] = results_mask_classes[t - 1] + accs[1] + + scheduler = dataset.get_scheduler(model, args) if not hasattr(model, 'scheduler') else model.scheduler + for epoch in range(model.args.n_epochs): + train_iter = iter(train_loader) + data_len = None + if not isinstance(dataset, GCLDataset): + data_len = len(train_loader) + i = 0 + while True: + try: + data = next(train_iter) + except StopIteration: + break + if args.debug_mode and i > model.get_debug_iters(): + break + if hasattr(dataset.train_loader.dataset, 'logits'): + inputs, labels, not_aug_inputs, logits = data + inputs = inputs.to(model.device) + labels = labels.to(model.device, dtype=torch.long) + not_aug_inputs = not_aug_inputs.to(model.device) + logits = logits.to(model.device) + loss = model.meta_observe(inputs, labels, not_aug_inputs, logits, epoch=epoch) + else: + inputs, labels, not_aug_inputs = data + inputs, labels = inputs.to(model.device), labels.to(model.device, dtype=torch.long) + not_aug_inputs = not_aug_inputs.to(model.device) + loss = model.meta_observe(inputs, labels, not_aug_inputs, epoch=epoch) + assert not math.isnan(loss) + progress_bar.prog(i, data_len, epoch, t, loss) + i += 1 + + if scheduler is not None: + scheduler.step() + + if args.eval_epochs is not None and epoch % args.eval_epochs == 0 and epoch < model.args.n_epochs - 1: + epoch_accs = evaluate(model, dataset) + + log_accs(args, logger, epoch_accs, t, dataset.SETTING, epoch=epoch) + + model.meta_end_task(dataset) accs = evaluate(model, dataset) results.append(accs[0]) results_mask_classes.append(accs[1]) - mean_acc = np.mean(accs, axis=1) - print_mean_accuracy(mean_acc, t + 1, dataset.SETTING) - - if not args.disable_log: - logger.log(mean_acc) - logger.log_fullacc(accs) - - if not args.nowand: - d2={'RESULT_class_mean_accs': mean_acc[0], 'RESULT_task_mean_accs': mean_acc[1], - **{f'RESULT_class_acc_{i}': a for i, a in enumerate(accs[0])}, - **{f'RESULT_task_acc_{i}': a for i, a in enumerate(accs[1])}} - - wandb.log(d2) - - - - if not args.disable_log and not args.ignore_other_metrics: + log_accs(args, logger, accs, t, dataset.SETTING) + + if args.savecheck: + save_obj = { + 'model': model.state_dict(), + 'args': args, + 'results': [results, results_mask_classes, logger.dump()], + 'optimizer': model.opt.state_dict() if hasattr(model, 'opt') else None, + 'scheduler': scheduler.state_dict() if scheduler is not None else None, + } + if 'buffer_size' in model.args: + save_obj['buffer'] = deepcopy(model.buffer).to('cpu') + + # Saving model checkpoint + checkpoint_name = f'checkpoints/{args.ckpt_name}_joint.pt' if args.joint else f'checkpoints/{args.ckpt_name}_{t}.pt' + torch.save(save_obj, checkpoint_name) + + if args.validation: + del dataset + args.validation = None + + final_dataset = get_dataset(args) + for _ in range(final_dataset.N_TASKS): + final_dataset.get_data_loaders() + accs = evaluate(model, final_dataset) + log_accs(args, logger, accs, t, final_dataset.SETTING, prefix="FINAL") + + if not args.disable_log and args.enable_other_metrics: logger.add_bwt(results, results_mask_classes) logger.add_forgetting(results, results_mask_classes) if model.NAME != 'icarl' and model.NAME != 'pnn': logger.add_fwt(results, random_results_class, - results_mask_classes, random_results_task) + results_mask_classes, random_results_task) if not args.disable_log: logger.write(vars(args)) diff --git a/utils/triplet.py b/utils/triplet.py new file mode 100644 index 00000000..4f292ca0 --- /dev/null +++ b/utils/triplet.py @@ -0,0 +1,108 @@ +import torch + + +def negative_only_triplet_loss(labels, embeddings, k, margin=0, margin_type='soft'): + """Variant of the triplet loss, computed only to separate the hardest negatives. + + See `batch_hard_triplet_loss` for details. + + Args: + labels: labels of the batch, of shape (batch_size,) + embeddings: tensor of shape (batch_size, embed_dim) + k: number of negatives to consider + margin: margin for triplet loss + margin_type: 'soft' or 'hard'. If 'soft', the loss is `log(1 + exp(positives - negatives + margin))`. + If 'hard', the loss is `max(0, positives - negatives + margin)`. + + Returns: + torch.Tensor: scalar tensor containing the triplet loss + """ + k = min(k, labels.shape[0]) + + # Get the pairwise distance matrix + pairwise_dist = (embeddings.unsqueeze(0) - embeddings.unsqueeze(1)).pow(2).sum(2) + + # For each anchor, get the hardest positive + # First, we need to get a mask for every valid positive (they should have same label) + mask_anchor_positive = torch.eq(torch.unsqueeze(labels, 0), torch.unsqueeze(labels, 1)).float() + + # We add inf in each row to the positives + anchor_negative_dist = pairwise_dist + anchor_negative_dist[mask_anchor_positive.bool()] = float('inf') + + # shape (batch_size,) + hardest_negative_dist = torch.topk(anchor_negative_dist, k=k, dim=1, largest=False)[0] + mask = hardest_negative_dist != float('inf') + + dneg = hardest_negative_dist[mask] + + if dneg.shape[0] == 0: + return None + + # Combine biggest d(a, p) and smallest d(a, n) into final triplet loss + if margin_type == 'soft': + loss = torch.log1p(torch.exp(- dneg + float(margin))) + else: + loss = torch.clamp(- dneg + float(margin), min=0.0) + + # Get thanchor_negative_diste true loss value + loss = torch.mean(loss) + + return loss + + +def batch_hard_triplet_loss(labels, embeddings, k, margin=0, margin_type='soft'): + """Build the triplet loss over a batch of embeddings. + + For each anchor, get the hardest positive and hardest negative to compute the triplet loss. + + Args: + labels: labels of the batch, of shape (batch_size,) + embeddings: tensor of shape (batch_size, embed_dim) + k: number of negatives to consider + margin: margin for triplet loss + margin_type: 'soft' or 'hard'. If 'soft', the loss is `log(1 + exp(positives - negatives + margin))`. + If 'hard', the loss is `max(0, positives - negatives + margin)`. + + Returns: + torch.Tensor: scalar tensor containing the triplet loss + """ + k = min(k, labels.shape[0]) + + # Get the pairwise distance matrix + pairwise_dist = (embeddings.unsqueeze(0) - embeddings.unsqueeze(1)).pow(2).sum(2) + + # For each anchor, get the hardest positive + # First, we need to get a mask for every valid positive (they should have same label) + mask_anchor_positive = torch.eq(torch.unsqueeze(labels, 0), torch.unsqueeze(labels, 1)).float() + + # We put to 0 any element where (a, p) is not valid (valid if a != p and label(a) == label(p)) + anchor_positive_dist = mask_anchor_positive * pairwise_dist + + # shape (batch_size, 1) + hardest_positive_dist = torch.topk(anchor_positive_dist, k=k, dim=1, largest=True)[0] + + # We add inf in each row to the positives + anchor_negative_dist = pairwise_dist + anchor_negative_dist[mask_anchor_positive.bool()] = float('inf') + + # shape (batch_size,) + hardest_negative_dist = torch.topk(anchor_negative_dist, k=k, dim=1, largest=False)[0] + mask = hardest_negative_dist != float('inf') + + dpos = hardest_positive_dist[mask] + dneg = hardest_negative_dist[mask] + + if dpos.shape[0] == 0 or dneg.shape[0] == 0: + return None + + # Combine biggest d(a, p) and smallest d(a, n) into final triplet loss + if margin_type == 'soft': + loss = torch.log1p(torch.exp(dpos - dneg + float(margin))) + else: + loss = torch.clamp(dpos - dneg + float(margin), min=0.0) + + # Get thanchor_negative_diste true loss value + loss = torch.mean(loss) + + return loss