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.
@@ -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