Repository: chrischoy/DeepGlobalRegistration
Branch: master
Commit: 1f4871d4c616
Files: 51
Total size: 550.5 KB
Directory structure:
gitextract_yw16jmpj/
├── .gitignore
├── LICENSE
├── README.md
├── assets/
│ └── results.npz
├── config.py
├── core/
│ ├── __init__.py
│ ├── correspondence.py
│ ├── deep_global_registration.py
│ ├── knn.py
│ ├── loss.py
│ ├── metrics.py
│ ├── registration.py
│ └── trainer.py
├── dataloader/
│ ├── base_loader.py
│ ├── data_loaders.py
│ ├── inf_sampler.py
│ ├── kitti_loader.py
│ ├── split/
│ │ ├── test_3dmatch.txt
│ │ ├── test_kitti.txt
│ │ ├── test_modelnet40.txt
│ │ ├── test_scan2cad.txt
│ │ ├── train_3dmatch.txt
│ │ ├── train_kitti.txt
│ │ ├── train_modelnet40.txt
│ │ ├── train_scan2cad.txt
│ │ ├── val_3dmatch.txt
│ │ ├── val_kitti.txt
│ │ ├── val_modelnet40.txt
│ │ └── val_scan2cad.txt
│ ├── threedmatch_loader.py
│ └── transforms.py
├── demo.py
├── model/
│ ├── __init__.py
│ ├── common.py
│ ├── pyramidnet.py
│ ├── residual_block.py
│ ├── resunet.py
│ └── simpleunet.py
├── requirements.txt
├── scripts/
│ ├── analyze_stats.py
│ ├── download_3dmatch.sh
│ ├── test_3dmatch.py
│ ├── test_kitti.py
│ ├── train_3dmatch.sh
│ └── train_kitti.sh
├── train.py
└── util/
├── __init__.py
├── file.py
├── integration.py
├── pointcloud.py
└── timer.py
================================================
FILE CONTENTS
================================================
================================================
FILE: .gitignore
================================================
# Temp files
.DS_Store
__pycache__
*.swp
*.swo
*.orig
.idea
outputs/
*.pyc
*.npy
*.pdf
util/*.sh
checkpoints
# *.npz
3dmatch/
tmp.txt
output.ply
bunny.ply
test.sh
================================================
FILE: LICENSE
================================================
MIT License
Copyright (c) 2020 Chris Choy (chrischoy@ai.stanford.edu), Wei Dong (weidong@andrew.cmu.edu)
Permission is hereby granted, free of charge, to any person obtaining a copy of
this software and associated documentation files (the "Software"), to deal in
the Software without restriction, including without limitation the rights to
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
of the Software, and to permit persons to whom the Software is furnished to do
so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
Please cite the following papers if you use any part of the code.
```
@inproceedings{choy2020deep,
title={Deep Global Registration},
author={Choy, Christopher and Dong, Wei and Koltun, Vladlen},
booktitle={Proceedings of the IEEE Conference on Computer Vision and Pattern Recognition},
year={2020}
}
@inproceedings{choy2019fully,
author = {Choy, Christopher and Park, Jaesik and Koltun, Vladlen},
title = {Fully Convolutional Geometric Features},
booktitle = {ICCV},
year = {2019},
}
@inproceedings{choy20194d,
title={4D Spatio-Temporal ConvNets: Minkowski Convolutional Neural Networks},
author={Choy, Christopher and Gwak, JunYoung and Savarese, Silvio},
booktitle={Proceedings of the IEEE Conference on Computer Vision and Pattern Recognition},
year={2019}
}
```
================================================
FILE: README.md
================================================
# Deep Global Registration
## Introduction
This repository contains python scripts for training and testing [Deep Global Registration, CVPR 2020 Oral](https://node1.chrischoy.org/data/publications/dgr/DGR.pdf).
Deep Global Registration (DGR) proposes a differentiable framework for pairwise registration of real-world 3D scans. DGR consists of the following three modules:
- a 6-dimensional convolutional network for correspondence confidence prediction
- a differentiable Weighted Procrustes algorithm for closed-form pose estimation
- a robust gradient-based SE(3) optimizer for pose refinement.
For more details, please check out
- [CVPR 2020 oral paper](https://node1.chrischoy.org/data/publications/dgr/DGR.pdf)
- [1min oral video](https://youtu.be/stzgn6DkozA)
- [Full CVPR oral presentation](https://youtu.be/Iy17wvo07BU)
[](https://youtu.be/stzgn6DkozA)
## Quick Pipleine Visualization
| Indoor 3DMatch Registration | Outdoor KITTI Lidar Registration |
|:---------------------------:|:---------------------------:|
|  |  |
## Related Works
Recent end-to-end frameworks combine feature learning and pose optimization. PointNetLK combines PointNet global features with an iterative pose optimization method. Wang et al. in Deep Closest Point train graph neural network features by backpropagating through pose optimization.
We further advance this line of work. In particular, our Weighted Procrustes method reduces the complexity of optimization from quadratic to linear and enables the use of dense correspondences for highly accurate registration of real-world scans.
## Deep Global Registration
The first component is a 6-dimensional convolutional network that analyzes the geometry of 3D correspondences and estimates their accuracy. Please refer to [High-dim ConvNets, CVPR'20](https://github.com/chrischoy/HighDimConvNets) for more details.
The second component we develop is a differentiable Weighted Procrustes solver. The Procrustes method provides a closed-form solution for rigid registration in SE(3). A differentiable version of the Procrustes method used for end-to-end registration passes gradients through coordinates, which requires O(N^2) time and memory for N keypoints. Instead, the Weighted Procrustes method passes gradients through the weights associated with correspondences rather than correspondence coordinates.
The computational complexity of the Weighted Procrustes method is linear to the number of correspondences, allowing the registration pipeline to use dense correspondence sets rather than sparse keypoints. This substantially increases registration accuracy.
Our third component is a robust optimization module that fine-tunes the alignment produced by the Weighted Procrustes solver and the failure detection module.
This optimization module minimizes a differentiable loss via gradient descent on the continuous SE(3) representation space. The optimization is fast since it does not require neighbor search in the inner loop such as ICP.
## Configuration
Our network is built on the [MinkowskiEngine](https://github.com/StanfordVL/MinkowskiEngine) and the system requirements are:
- Ubuntu 14.04 or higher
- CUDA 10.1.243 or higher
- pytorch 1.5 or higher
- python 3.6 or higher
- GCC 7
You can install the MinkowskiEngine and the python requirements on your system with:
```shell
# Install MinkowskiEngine
sudo apt install libopenblas-dev g++-7
pip install torch
export CXX=g++-7; pip install -U MinkowskiEngine --install-option="--blas=openblas" -v
# Download and setup DeepGlobalRegistration
git clone https://github.com/chrischoy/DeepGlobalRegistration.git
cd DeepGlobalRegistration
pip install -r requirements.txt
```
## Demo
You may register your own data with relevant pretrained DGR models. 3DMatch is suitable for indoor RGB-D scans; KITTI is for outdoor LiDAR scans.
| Inlier Model | FCGF model | Dataset | Voxel Size | Feature Dimension | Performance | Link |
|:------------:|:-----------:|:-------:|:-------------:|:-----------------:|:--------------------------:|:------:|
| ResUNetBN2C | ResUNetBN2C | 3DMatch | 5cm (0.05) | 32 | TE: 7.34cm, RE: 2.43deg | [weights](http://node2.chrischoy.org/data/projects/DGR/ResUNetBN2C-feat32-3dmatch-v0.05.pth) |
| ResUNetBN2C | ResUNetBN2C | KITTI | 30cm (0.3) | 32 | TE: 3.14cm, RE: 0.14deg | [weights](http://node2.chrischoy.org/data/projects/DGR/ResUNetBN2C-feat32-kitti-v0.3.pth) |
```shell
python demo.py
```
| Input PointClouds | Output Prediction |
|:---------------------------:|:---------------------------:|
|  |  |
## Experiments
| Comparison | Speed vs. Recall Pareto Frontier |
| ------- | --------------- |
|  |  |
## Training
The entire network depends on pretrained [FCGF models](https://github.com/chrischoy/FCGF#model-zoo). Please download corresponding models before training.
| Model | Normalized Feature | Dataset | Voxel Size | Feature Dimension | Link |
|:-----------:|:-------------------:|:-------:|:-------------:|:-----------------:|:------:|
| ResUNetBN2C | True | 3DMatch | 5cm (0.05) | 32 | [download](https://node1.chrischoy.org/data/publications/fcgf/2019-08-16_19-21-47.pth) |
| ResUNetBN2C | True | KITTI | 30cm (0.3) | 32 | [download](https://node1.chrischoy.org/data/publications/fcgf/KITTI-v0.3-ResUNetBN2C-conv1-5-nout32.pth) |
### 3DMatch
You may download preprocessed data and train via these commands:
```shell
./scripts/download_3dmatch.sh /path/to/3dmatch
export THREED_MATCH_DIR=/path/to/3dmatch; FCGF_WEIGHTS=/path/to/fcgf_3dmatch.pth ./scripts/train_3dmatch.sh
```
### KITTI
Follow the instruction on [KITTI Odometry website](http://www.cvlibs.net/datasets/kitti/eval_odometry.php) to download the KITTI odometry train set. Then train with
```shell
export KITTI_PATH=/path/to/kitti; FCGF_WEIGHTS=/path/to/fcgf_kitti.pth ./scripts/train_kitti.sh
```
## Testing
3DMatch test set is different from train set and is available at the [download section](http://3dmatch.cs.princeton.edu/) of the official website. You may download and decompress these scenes to a new folder.
To evaluate trained model on 3DMatch or KITTI, you may use
```shell
python -m scripts.test_3dmatch --threed_match_dir /path/to/3dmatch_test/ --weights /path/to/dgr_3dmatch.pth
```
and
```shell
python -m scripts.test_kitti --kitti_dir /path/to/kitti/ --weights /path/to/dgr_kitti.pth
```
## Generate figures
We also provide experimental results of 3DMatch comparisons in `results.npz`. To reproduce figures we presented in the paper, you may use
```shell
python scripts/analyze_stats.py assets/results.npz
```
## Citing our work
Please cite the following papers if you use our code:
```latex
@inproceedings{choy2020deep,
title={Deep Global Registration},
author={Choy, Christopher and Dong, Wei and Koltun, Vladlen},
booktitle={CVPR},
year={2020}
}
@inproceedings{choy2019fully,
title = {Fully Convolutional Geometric Features},
author = {Choy, Christopher and Park, Jaesik and Koltun, Vladlen},
booktitle = {ICCV},
year = {2019}
}
@inproceedings{choy20194d,
title={4D Spatio-Temporal ConvNets: Minkowski Convolutional Neural Networks},
author={Choy, Christopher and Gwak, JunYoung and Savarese, Silvio},
booktitle={CVPR},
year={2019}
}
```
## Concurrent Works
There have a number of 3D registration works published concurrently.
- Gojcic et al., [Learning Multiview 3D Point Cloud Registration, CVPR'20](https://github.com/zgojcic/3D_multiview_reg)
- Wang et al., [PRNet: Self-Supervised Learning for Partial-to-Partial Registration, NeurIPS'19](https://github.com/WangYueFt/prnet)
- Yang et al., [TEASER: Fast and Certifiable Point Cloud Registration, arXiv'20](https://github.com/MIT-SPARK/TEASER-plusplus)
================================================
FILE: config.py
================================================
# Copyright (c) Chris Choy (chrischoy@ai.stanford.edu) and Wei Dong (weidong@andrew.cmu.edu)
#
# Please cite the following papers if you use any part of the code.
# - Christopher Choy, Wei Dong, Vladlen Koltun, Deep Global Registration, CVPR 2020
# - Christopher Choy, Jaesik Park, Vladlen Koltun, Fully Convolutional Geometric Features, ICCV 2019
# - Christopher Choy, JunYoung Gwak, Silvio Savarese, 4D Spatio-Temporal ConvNets: Minkowski Convolutional Neural Networks, CVPR 2019
import argparse
arg_lists = []
parser = argparse.ArgumentParser()
def add_argument_group(name):
arg = parser.add_argument_group(name)
arg_lists.append(arg)
return arg
def str2bool(v):
return v.lower() in ('true', '1')
# yapf: disable
logging_arg = add_argument_group('Logging')
logging_arg.add_argument('--out_dir', type=str, default='outputs')
trainer_arg = add_argument_group('Trainer')
trainer_arg.add_argument('--trainer', type=str, default='WeightedProcrustesTrainer')
# Batch setting
trainer_arg.add_argument('--batch_size', type=int, default=4)
trainer_arg.add_argument('--val_batch_size', type=int, default=1)
# Data loader configs
trainer_arg.add_argument('--train_phase', type=str, default="train")
trainer_arg.add_argument('--val_phase', type=str, default="val")
trainer_arg.add_argument('--test_phase', type=str, default="test")
# Data augmentation
trainer_arg.add_argument('--use_random_scale', type=str2bool, default=False)
trainer_arg.add_argument('--min_scale', type=float, default=0.8)
trainer_arg.add_argument('--max_scale', type=float, default=1.2)
trainer_arg.add_argument('--use_random_rotation', type=str2bool, default=True)
trainer_arg.add_argument('--rotation_range', type=float, default=360)
trainer_arg.add_argument(
'--positive_pair_search_voxel_size_multiplier', type=float, default=1.5)
trainer_arg.add_argument('--save_epoch_freq', type=int, default=1)
trainer_arg.add_argument('--val_epoch_freq', type=int, default=1)
trainer_arg.add_argument('--stat_freq', type=int, default=40, help='Frequency for writing stats to log')
trainer_arg.add_argument('--test_valid', type=str2bool, default=True)
trainer_arg.add_argument('--val_max_iter', type=int, default=400)
trainer_arg.add_argument('--use_balanced_loss', type=str2bool, default=False)
trainer_arg.add_argument('--inlier_direct_loss_weight', type=float, default=1.)
trainer_arg.add_argument('--procrustes_loss_weight', type=float, default=1.)
trainer_arg.add_argument('--trans_weight', type=float, default=1)
trainer_arg.add_argument('--eval_registration', type=str2bool, default=True)
trainer_arg.add_argument('--clip_weight_thresh', type=float, default=0.05, help='Weight threshold for detecting inliers')
trainer_arg.add_argument('--best_val_metric', type=str, default='succ_rate')
# Inlier detection trainer
inlier_arg = add_argument_group('Inlier')
inlier_arg.add_argument('--inlier_model', type=str, default='ResUNetBN2C')
inlier_arg.add_argument('--inlier_feature_type', type=str, default='ones')
inlier_arg.add_argument('--inlier_conv1_kernel_size', type=int, default=3)
inlier_arg.add_argument('--inlier_knn', type=int, default=1)
inlier_arg.add_argument('--knn_search_method', type=str, default='gpu')
inlier_arg.add_argument('--inlier_use_direct_loss', type=str2bool, default=True)
# Feature specific configurations
feat_arg = add_argument_group('feat')
feat_arg.add_argument('--feat_model', type=str, default='SimpleNetBN2C')
feat_arg.add_argument('--feat_model_n_out', type=int, default=16, help='Feature dimension')
feat_arg.add_argument('--feat_conv1_kernel_size', type=int, default=3)
feat_arg.add_argument('--normalize_feature', type=str2bool, default=True)
feat_arg.add_argument('--use_xyz_feature', type=str2bool, default=False)
feat_arg.add_argument('--dist_type', type=str, default='L2')
# Optimizer arguments
opt_arg = add_argument_group('Optimizer')
opt_arg.add_argument('--optimizer', type=str, default='SGD')
opt_arg.add_argument('--max_epoch', type=int, default=100)
opt_arg.add_argument('--lr', type=float, default=1e-1)
opt_arg.add_argument('--momentum', type=float, default=0.8)
opt_arg.add_argument('--sgd_momentum', type=float, default=0.9)
opt_arg.add_argument('--sgd_dampening', type=float, default=0.1)
opt_arg.add_argument('--adam_beta1', type=float, default=0.9)
opt_arg.add_argument('--adam_beta2', type=float, default=0.999)
opt_arg.add_argument('--weight_decay', type=float, default=1e-4)
opt_arg.add_argument('--iter_size', type=int, default=1, help='accumulate gradient')
opt_arg.add_argument('--bn_momentum', type=float, default=0.05)
opt_arg.add_argument('--exp_gamma', type=float, default=0.99)
opt_arg.add_argument('--scheduler', type=str, default='ExpLR')
opt_arg.add_argument('--num_train_iter', type=int, default=-1, help='train N iter if positive')
opt_arg.add_argument('--icp_cache_path', type=str, default="icp")
# Misc
misc_arg = add_argument_group('Misc')
misc_arg.add_argument('--use_gpu', type=str2bool, default=True)
misc_arg.add_argument('--weights', type=str, default=None)
misc_arg.add_argument('--weights_dir', type=str, default=None)
misc_arg.add_argument('--resume', type=str, default=None)
misc_arg.add_argument('--resume_dir', type=str, default=None)
misc_arg.add_argument('--train_num_workers', type=int, default=2)
misc_arg.add_argument('--val_num_workers', type=int, default=1)
misc_arg.add_argument('--test_num_workers', type=int, default=2)
misc_arg.add_argument('--fast_validation', type=str2bool, default=False)
misc_arg.add_argument('--nn_max_n', type=int, default=250, help='The maximum number of features to find nearest neighbors in batch')
# Dataset specific configurations
data_arg = add_argument_group('Data')
data_arg.add_argument('--dataset', type=str, default='ThreeDMatchPairDataset03')
data_arg.add_argument('--voxel_size', type=float, default=0.025)
data_arg.add_argument('--threed_match_dir', type=str, default='.')
data_arg.add_argument('--kitti_dir', type=str, default=None, help="Path to the KITTI odometry dataset. This path should contain /dataset/sequences.")
data_arg.add_argument('--kitti_max_time_diff', type=int, default=3, help='max time difference between pairs (non inclusive)')
data_arg.add_argument('--kitti_date', type=str, default='2011_09_26')
# Evaluation
eval_arg = add_argument_group('Data')
eval_arg.add_argument('--hit_ratio_thresh', type=float, default=0.1)
eval_arg.add_argument('--success_rte_thresh', type=float, default=0.3, help='Success if the RTE below this (m)')
eval_arg.add_argument('--success_rre_thresh', type=float, default=15, help='Success if the RTE below this (degree)')
eval_arg.add_argument('--test_random_crop', action='store_true')
eval_arg.add_argument('--test_random_rotation', type=str2bool, default=False)
# Demo
demo_arg = add_argument_group('demo')
demo_arg.add_argument('--pcd0', default="redkitchen_000.ply", type=str)
demo_arg.add_argument('--pcd1', default="redkitchen_010.ply", type=str)
# yapf: enable
def get_config():
args = parser.parse_args()
return args
================================================
FILE: core/__init__.py
================================================
# Copyright (c) Chris Choy (chrischoy@ai.stanford.edu) and Wei Dong (weidong@andrew.cmu.edu)
#
# Please cite the following papers if you use any part of the code.
# - Christopher Choy, Wei Dong, Vladlen Koltun, Deep Global Registration, CVPR 2020
# - Christopher Choy, Jaesik Park, Vladlen Koltun, Fully Convolutional Geometric Features, ICCV 2019
# - Christopher Choy, JunYoung Gwak, Silvio Savarese, 4D Spatio-Temporal ConvNets: Minkowski Convolutional Neural Networks, CVPR 2019
================================================
FILE: core/correspondence.py
================================================
# Copyright (c) Chris Choy (chrischoy@ai.stanford.edu) and Wei Dong (weidong@andrew.cmu.edu)
#
# Please cite the following papers if you use any part of the code.
# - Christopher Choy, Wei Dong, Vladlen Koltun, Deep Global Registration, CVPR 2020
# - Christopher Choy, Jaesik Park, Vladlen Koltun, Fully Convolutional Geometric Features, ICCV 2019
# - Christopher Choy, JunYoung Gwak, Silvio Savarese, 4D Spatio-Temporal ConvNets: Minkowski Convolutional Neural Networks, CVPR 2019
import copy
import numpy as np
import open3d as o3d
import torch
def _hash(arr, M=None):
if isinstance(arr, np.ndarray):
N, D = arr.shape
else:
N, D = len(arr[0]), len(arr)
hash_vec = np.zeros(N, dtype=np.int64)
for d in range(D):
if isinstance(arr, np.ndarray):
hash_vec += arr[:, d] * M**d
else:
hash_vec += arr[d] * M**d
return hash_vec
def find_correct_correspondence(pos_pairs, pred_pairs, hash_seed=None, len_batch=None):
assert len(pos_pairs) == len(pred_pairs)
if hash_seed is None:
assert len(len_batch) == len(pos_pairs)
corrects = []
for i, pos_pred in enumerate(zip(pos_pairs, pred_pairs)):
pos_pair, pred_pair = pos_pred
if isinstance(pos_pair, torch.Tensor):
pos_pair = pos_pair.numpy()
if isinstance(pred_pair, torch.Tensor):
pred_pair = pred_pair.numpy()
if hash_seed is None:
N0, N1 = len_batch[i]
_hash_seed = max(N0, N1)
else:
_hash_seed = hash_seed
pos_keys = _hash(pos_pair, _hash_seed)
pred_keys = _hash(pred_pair, _hash_seed)
corrects.append(np.isin(pred_keys, pos_keys, assume_unique=False))
return np.hstack(corrects)
================================================
FILE: core/deep_global_registration.py
================================================
# Copyright (c) Chris Choy (chrischoy@ai.stanford.edu) and Wei Dong (weidong@andrew.cmu.edu)
#
# Please cite the following papers if you use any part of the code.
# - Christopher Choy, Wei Dong, Vladlen Koltun, Deep Global Registration, CVPR 2020
# - Christopher Choy, Jaesik Park, Vladlen Koltun, Fully Convolutional Geometric Features, ICCV 2019
# - Christopher Choy, JunYoung Gwak, Silvio Savarese, 4D Spatio-Temporal ConvNets: Minkowski Convolutional Neural Networks, CVPR 2019
import os
import sys
import math
import logging
import open3d as o3d
import numpy as np
import time
import torch
import copy
import MinkowskiEngine as ME
sys.path.append('.')
from model import load_model
from core.registration import GlobalRegistration
from core.knn import find_knn_gpu
from util.timer import Timer
from util.pointcloud import make_open3d_point_cloud
# Feature-based registrations in Open3D
def registration_ransac_based_on_feature_matching(pcd0, pcd1, feats0, feats1,
distance_threshold, num_iterations):
assert feats0.shape[1] == feats1.shape[1]
source_feat = o3d.registration.Feature()
source_feat.resize(feats0.shape[1], len(feats0))
source_feat.data = feats0.astype('d').transpose()
target_feat = o3d.registration.Feature()
target_feat.resize(feats1.shape[1], len(feats1))
target_feat.data = feats1.astype('d').transpose()
result = o3d.registration.registration_ransac_based_on_feature_matching(
pcd0, pcd1, source_feat, target_feat, distance_threshold,
o3d.registration.TransformationEstimationPointToPoint(False), 4,
[o3d.registration.CorrespondenceCheckerBasedOnDistance(distance_threshold)],
o3d.registration.RANSACConvergenceCriteria(num_iterations, 1000))
return result.transformation
def registration_ransac_based_on_correspondence(pcd0, pcd1, idx0, idx1,
distance_threshold, num_iterations):
corres = np.stack((idx0, idx1), axis=1)
corres = o3d.utility.Vector2iVector(corres)
result = o3d.pipelines.registration.registration_ransac_based_on_correspondence(
source = pcd0,
target = pcd1,
corres = corres,
max_correspondence_distance = distance_threshold,
estimation_method = o3d.pipelines.registration.TransformationEstimationPointToPoint(False),
ransac_n = 4,
criteria = o3d.pipelines.registration.RANSACConvergenceCriteria(4000000, num_iterations))
return result.transformation
class DeepGlobalRegistration:
def __init__(self, config, device=torch.device('cuda')):
# Basic config
self.config = config
self.clip_weight_thresh = self.config.clip_weight_thresh
self.device = device
# Safeguard
self.safeguard_method = 'correspondence' # correspondence, feature_matching
# Final tuning
self.use_icp = True
# Misc
self.feat_timer = Timer()
self.reg_timer = Timer()
# Model config loading
print("=> loading checkpoint '{}'".format(config.weights))
assert os.path.exists(config.weights)
state = torch.load(config.weights)
network_config = state['config']
self.network_config = network_config
self.config.inlier_feature_type = network_config.inlier_feature_type
self.voxel_size = network_config.voxel_size
print(f'=> Setting voxel size to {self.voxel_size}')
# FCGF network initialization
num_feats = 1
try:
FCGFModel = load_model(network_config['feat_model'])
self.fcgf_model = FCGFModel(
num_feats,
network_config['feat_model_n_out'],
bn_momentum=network_config['bn_momentum'],
conv1_kernel_size=network_config['feat_conv1_kernel_size'],
normalize_feature=network_config['normalize_feature'])
except KeyError: # legacy pretrained models
FCGFModel = load_model(network_config['model'])
self.fcgf_model = FCGFModel(num_feats,
network_config['model_n_out'],
bn_momentum=network_config['bn_momentum'],
conv1_kernel_size=network_config['conv1_kernel_size'],
normalize_feature=network_config['normalize_feature'])
self.fcgf_model.load_state_dict(state['state_dict'])
self.fcgf_model = self.fcgf_model.to(device)
self.fcgf_model.eval()
# Inlier network initialization
num_feats = 6 if network_config.inlier_feature_type == 'coords' else 1
InlierModel = load_model(network_config['inlier_model'])
self.inlier_model = InlierModel(
num_feats,
1,
bn_momentum=network_config['bn_momentum'],
conv1_kernel_size=network_config['inlier_conv1_kernel_size'],
normalize_feature=False,
D=6)
self.inlier_model.load_state_dict(state['state_dict_inlier'])
self.inlier_model = self.inlier_model.to(self.device)
self.inlier_model.eval()
print("=> loading finished")
def preprocess(self, pcd):
'''
Stage 0: preprocess raw input point cloud
Input: raw point cloud
Output: voxelized point cloud with
- xyz: unique point cloud with one point per voxel
- coords: coords after voxelization
- feats: dummy feature placeholder for general sparse convolution
'''
if isinstance(pcd, o3d.geometry.PointCloud):
xyz = np.array(pcd.points)
elif isinstance(pcd, np.ndarray):
xyz = pcd
else:
raise Exception('Unrecognized pcd type')
# Voxelization:
# Maintain double type for xyz to improve numerical accuracy in quantization
_, sel = ME.utils.sparse_quantize(xyz / self.voxel_size, return_index=True)
npts = len(sel)
xyz = torch.from_numpy(xyz[sel]).to(self.device)
# ME standard batch coordinates
coords = ME.utils.batched_coordinates([torch.floor(xyz / self.voxel_size).int()], device=self.device)
feats = torch.ones(npts, 1)
return xyz.float(), coords, feats
def fcgf_feature_extraction(self, feats, coords):
'''
Step 1: extract fast and accurate FCGF feature per point
'''
sinput = ME.SparseTensor(feats, coordinates=coords, device=self.device)
return self.fcgf_model(sinput).F
def fcgf_feature_matching(self, feats0, feats1):
'''
Step 2: coarsely match FCGF features to generate initial correspondences
'''
nns = find_knn_gpu(feats0,
feats1,
nn_max_n=self.network_config.nn_max_n,
knn=1,
return_distance=False)
corres_idx0 = torch.arange(len(nns)).long().squeeze().to(self.device)
corres_idx1 = nns.long().squeeze()
return corres_idx0, corres_idx1
def inlier_feature_generation(self, xyz0, xyz1, coords0, coords1, fcgf_feats0,
fcgf_feats1, corres_idx0, corres_idx1):
'''
Step 3: generate features for inlier prediction
'''
assert len(corres_idx0) == len(corres_idx1)
feat_type = self.config.inlier_feature_type
assert feat_type in ['ones', 'feats', 'coords']
corres_idx0 = corres_idx0.to(self.device)
corres_idx1 = corres_idx1.to(self.device)
if feat_type == 'ones':
feat = torch.ones((len(corres_idx0), 1)).float()
elif feat_type == 'feats':
feat = torch.cat((fcgf_feats0[corres_idx0], fcgf_feats1[corres_idx1]), dim=1)
elif feat_type == 'coords':
feat = torch.cat((torch.cos(xyz0[corres_idx0]), torch.cos(xyz1[corres_idx1])),
dim=1)
else: # should never reach here
raise TypeError('Undefined feature type')
return feat
def inlier_prediction(self, inlier_feats, coords):
'''
Step 4: predict inlier likelihood
'''
sinput = ME.SparseTensor(inlier_feats, coordinates=coords, device=self.device)
soutput = self.inlier_model(sinput)
return soutput.F
def safeguard_registration(self, pcd0, pcd1, idx0, idx1, feats0, feats1,
distance_threshold, num_iterations):
if self.safeguard_method == 'correspondence':
T = registration_ransac_based_on_correspondence(pcd0,
pcd1,
idx0.cpu().numpy(),
idx1.cpu().numpy(),
distance_threshold,
num_iterations=num_iterations)
elif self.safeguard_method == 'fcgf_feature_matching':
T = registration_ransac_based_on_fcgf_feature_matching(pcd0, pcd1,
feats0.cpu().numpy(),
feats1.cpu().numpy(),
distance_threshold,
num_iterations)
else:
raise ValueError('Undefined')
return T
def register(self, xyz0, xyz1, inlier_thr=0.00):
'''
Main algorithm of DeepGlobalRegistration
'''
self.reg_timer.tic()
with torch.no_grad():
# Step 0: voxelize and generate sparse input
xyz0, coords0, feats0 = self.preprocess(xyz0)
xyz1, coords1, feats1 = self.preprocess(xyz1)
# Step 1: Feature extraction
self.feat_timer.tic()
fcgf_feats0 = self.fcgf_feature_extraction(feats0, coords0)
fcgf_feats1 = self.fcgf_feature_extraction(feats1, coords1)
self.feat_timer.toc()
# Step 2: Coarse correspondences
corres_idx0, corres_idx1 = self.fcgf_feature_matching(fcgf_feats0, fcgf_feats1)
# Step 3: Inlier feature generation
# coords[corres_idx0]: 1D temporal + 3D spatial coord
# coords[corres_idx1, 1:]: 3D spatial coord
# => 1D temporal + 6D spatial coord
inlier_coords = torch.cat((coords0[corres_idx0], coords1[corres_idx1, 1:]),
dim=1).int()
inlier_feats = self.inlier_feature_generation(xyz0, xyz1, coords0, coords1,
fcgf_feats0, fcgf_feats1,
corres_idx0, corres_idx1)
# Step 4: Inlier likelihood estimation and truncation
logit = self.inlier_prediction(inlier_feats.contiguous(), coords=inlier_coords)
weights = logit.sigmoid()
if self.clip_weight_thresh > 0:
weights[weights < self.clip_weight_thresh] = 0
wsum = weights.sum().item()
# Step 5: Registration. Note: torch's gradient may be required at this stage
# > Case 0: Weighted Procrustes + Robust Refinement
wsum_threshold = max(200, len(weights) * 0.05)
sign = '>=' if wsum >= wsum_threshold else '<'
print(f'=> Weighted sum {wsum:.2f} {sign} threshold {wsum_threshold}')
T = np.identity(4)
if wsum >= wsum_threshold:
try:
rot, trans, opt_output = GlobalRegistration(xyz0[corres_idx0],
xyz1[corres_idx1],
weights=weights.detach(),
break_threshold_ratio=1e-4,
quantization_size=2 *
self.voxel_size,
verbose=False)
T[0:3, 0:3] = rot.detach().cpu().numpy()
T[0:3, 3] = trans.detach().cpu().numpy()
dgr_time = self.reg_timer.toc()
print(f'=> DGR takes {dgr_time:.2} s')
except RuntimeError:
# Will directly go to Safeguard
print('###############################################')
print('# WARNING: SVD failed, weights sum: ', wsum)
print('# Falling back to Safeguard')
print('###############################################')
else:
# > Case 1: Safeguard RANSAC + (Optional) ICP
pcd0 = make_open3d_point_cloud(xyz0)
pcd1 = make_open3d_point_cloud(xyz1)
T = self.safeguard_registration(pcd0,
pcd1,
corres_idx0,
corres_idx1,
feats0,
feats1,
2 * self.voxel_size,
num_iterations=80000)
safeguard_time = self.reg_timer.toc()
print(f'=> Safeguard takes {safeguard_time:.2} s')
if self.use_icp:
T = o3d.pipelines.registration.registration_icp(
source=make_open3d_point_cloud(xyz0),
target=make_open3d_point_cloud(xyz1),
max_correspondence_distance=self.voxel_size * 2,
init=T).transformation
return T
================================================
FILE: core/knn.py
================================================
# Copyright (c) Chris Choy (chrischoy@ai.stanford.edu) and Wei Dong (weidong@andrew.cmu.edu)
#
# Please cite the following papers if you use any part of the code.
# - Christopher Choy, Wei Dong, Vladlen Koltun, Deep Global Registration, CVPR 2020
# - Christopher Choy, Jaesik Park, Vladlen Koltun, Fully Convolutional Geometric Features, ICCV 2019
# - Christopher Choy, JunYoung Gwak, Silvio Savarese, 4D Spatio-Temporal ConvNets: Minkowski Convolutional Neural Networks, CVPR 2019
import torch
import numpy as np
from scipy.spatial import cKDTree
from core.metrics import pdist
def find_knn_cpu(feat0, feat1, knn=1, return_distance=False):
feat1tree = cKDTree(feat1)
dists, nn_inds = feat1tree.query(feat0, k=knn, n_jobs=-1)
if return_distance:
return nn_inds, dists
else:
return nn_inds
def find_knn_gpu(F0, F1, nn_max_n=-1, knn=1, return_distance=False):
def knn_dist(f0, f1, knn=1, dist_type='L2'):
knn_dists, knn_inds = [], []
with torch.no_grad():
dist = pdist(f0, f1, dist_type=dist_type)
min_dist, ind = dist.min(dim=1, keepdim=True)
knn_dists.append(min_dist)
knn_inds.append(ind)
if knn > 1:
for k in range(knn - 1):
NR, NC = dist.shape
flat_ind = (torch.arange(NR) * NC).type_as(ind) + ind.squeeze()
dist.view(-1)[flat_ind] = np.inf
min_dist, ind = dist.min(dim=1, keepdim=True)
knn_dists.append(min_dist)
knn_inds.append(ind)
min_dist = torch.cat(knn_dists, 1)
ind = torch.cat(knn_inds, 1)
return min_dist, ind
# Too much memory if F0 or F1 large. Divide the F0
if nn_max_n > 1:
N = len(F0)
C = int(np.ceil(N / nn_max_n))
stride = nn_max_n
dists, inds = [], []
for i in range(C):
with torch.no_grad():
dist, ind = knn_dist(F0[i * stride:(i + 1) * stride], F1, knn=knn, dist_type='L2')
dists.append(dist)
inds.append(ind)
dists = torch.cat(dists)
inds = torch.cat(inds)
assert len(inds) == N
else:
dist = pdist(F0, F1, dist_type='SquareL2')
min_dist, inds = dist.min(dim=1)
dists = min_dist.detach().unsqueeze(1) #.cpu()
# inds = inds.cpu()
if return_distance:
return inds, dists
else:
return inds
def find_knn_batch(F0,
F1,
len_batch,
return_distance=False,
nn_max_n=-1,
knn=1,
search_method=None,
concat_results=False):
if search_method is None or search_method == 'gpu':
return find_knn_gpu_batch(
F0,
F1,
len_batch=len_batch,
nn_max_n=nn_max_n,
knn=knn,
return_distance=return_distance,
concat_results=concat_results)
elif search_method == 'cpu':
return find_knn_cpu_batch(
F0,
F1,
len_batch=len_batch,
knn=knn,
return_distance=return_distance,
concat_results=concat_results)
else:
raise ValueError(f'Search method {search_method} not defined')
def find_knn_gpu_batch(F0,
F1,
len_batch,
nn_max_n=-1,
knn=1,
return_distance=False,
concat_results=False):
dists, nns = [], []
start0, start1 = 0, 0
for N0, N1 in len_batch:
nn = find_knn_gpu(
F0[start0:start0 + N0],
F1[start1:start1 + N1],
nn_max_n=nn_max_n,
knn=knn,
return_distance=return_distance)
if return_distance:
nn, dist = nn
dists.append(dist)
if concat_results:
nns.append(nn + start1)
else:
nns.append(nn)
start0 += N0
start1 += N1
if concat_results:
nns = torch.cat(nns)
if return_distance:
dists = torch.cat(dists)
if return_distance:
return nns, dists
else:
return nns
def find_knn_cpu_batch(F0,
F1,
len_batch,
knn=1,
return_distance=False,
concat_results=False):
if not isinstance(F0, np.ndarray):
F0 = F0.detach().cpu().numpy()
F1 = F1.detach().cpu().numpy()
dists, nns = [], []
start0, start1 = 0, 0
for N0, N1 in len_batch:
nn = find_knn_cpu(
F0[start0:start0 + N0], F1[start1:start1 + N1], return_distance=return_distance)
if return_distance:
nn, dist = nn
dists.append(dist)
if concat_results:
nns.append(nn + start1)
else:
nns.append(nn + start1)
start0 += N0
start1 += N1
if concat_results:
nns = np.hstack(nns)
if return_distance:
dists = np.hstack(dists)
if return_distance:
return torch.from_numpy(nns), torch.from_numpy(dists)
else:
return torch.from_numpy(nns)
================================================
FILE: core/loss.py
================================================
# Copyright (c) Chris Choy (chrischoy@ai.stanford.edu) and Wei Dong (weidong@andrew.cmu.edu)
#
# Please cite the following papers if you use any part of the code.
# - Christopher Choy, Wei Dong, Vladlen Koltun, Deep Global Registration, CVPR 2020
# - Christopher Choy, Jaesik Park, Vladlen Koltun, Fully Convolutional Geometric Features, ICCV 2019
# - Christopher Choy, JunYoung Gwak, Silvio Savarese, 4D Spatio-Temporal ConvNets: Minkowski Convolutional Neural Networks, CVPR 2019
import torch
import torch.nn as nn
import numpy as np
class UnbalancedLoss(nn.Module):
NUM_LABELS = 2
def __init__(self):
super().__init__()
self.crit = nn.BCEWithLogitsLoss()
def forward(self, logits, label):
return self.crit(logits, label.to(torch.float))
class BalancedLoss(nn.Module):
NUM_LABELS = 2
def __init__(self):
super().__init__()
self.crit = nn.BCEWithLogitsLoss()
def forward(self, logits, label):
assert torch.all(label < self.NUM_LABELS)
loss = torch.scalar_tensor(0.).to(logits)
for i in range(self.NUM_LABELS):
target_mask = label == i
if torch.any(target_mask):
loss += self.crit(logits[target_mask], label[target_mask].to(
torch.float)) / self.NUM_LABELS
return loss
class HighDimSmoothL1Loss:
def __init__(self, weights, quantization_size=1, eps=np.finfo(np.float32).eps):
self.eps = eps
self.quantization_size = quantization_size
self.weights = weights
if self.weights is not None:
self.w1 = weights.sum()
def __call__(self, X, Y):
sq_dist = torch.sum(((X - Y) / self.quantization_size)**2, axis=1, keepdim=True)
use_sq_half = 0.5 * (sq_dist < 1).float()
loss = (0.5 - use_sq_half) * (torch.sqrt(sq_dist + self.eps) -
0.5) + use_sq_half * sq_dist
if self.weights is None:
return loss.mean()
else:
return (loss * self.weights).sum() / self.w1
================================================
FILE: core/metrics.py
================================================
# Copyright (c) Chris Choy (chrischoy@ai.stanford.edu) and Wei Dong (weidong@andrew.cmu.edu)
#
# Please cite the following papers if you use any part of the code.
# - Christopher Choy, Wei Dong, Vladlen Koltun, Deep Global Registration, CVPR 2020
# - Christopher Choy, Jaesik Park, Vladlen Koltun, Fully Convolutional Geometric Features, ICCV 2019
# - Christopher Choy, JunYoung Gwak, Silvio Savarese, 4D Spatio-Temporal ConvNets: Minkowski Convolutional Neural Networks, CVPR 2019
import torch
import torch.functional as F
def rotation_mat2angle(R):
return torch.acos(torch.clamp((torch.trace(R) - 1) / 2, -0.9999, 0.9999))
def rotation_error(R1, R2):
assert R1.shape == R2.shape
return torch.acos(torch.clamp((torch.trace(torch.mm(R1.t(), R2)) - 1) / 2, -0.9999, 0.9999))
def translation_error(t1, t2):
assert t1.shape == t2.shape
return torch.sqrt(((t1 - t2)**2).sum())
def batch_rotation_error(rots1, rots2):
r"""
arccos( (tr(R_1^T R_2) - 1) / 2 )
rots1: B x 3 x 3 or B x 9
rots1: B x 3 x 3 or B x 9
"""
assert len(rots1) == len(rots2)
trace_r1Tr2 = (rots1.reshape(-1, 9) * rots2.reshape(-1, 9)).sum(1)
side = (trace_r1Tr2 - 1) / 2
return torch.acos(torch.clamp(side, min=-0.999, max=0.999))
def batch_translation_error(trans1, trans2):
r"""
trans1: B x 3
trans2: B x 3
"""
assert len(trans1) == len(trans2)
return torch.norm(trans1 - trans2, p=2, dim=1, keepdim=False)
def eval_metrics(output, target):
output = (F.sigmoid(output) > 0.5)
target = target
return torch.norm(output - target)
def corr_dist(est, gth, xyz0, xyz1, weight=None, max_dist=1):
xyz0_est = xyz0 @ est[:3, :3].t() + est[:3, 3]
xyz0_gth = xyz0 @ gth[:3, :3].t() + gth[:3, 3]
dists = torch.clamp(torch.sqrt(((xyz0_est - xyz0_gth).pow(2)).sum(1)), max=max_dist)
if weight is not None:
dists = weight * dists
return dists.mean()
def pdist(A, B, dist_type='L2'):
if dist_type == 'L2':
D2 = torch.sum((A.unsqueeze(1) - B.unsqueeze(0)).pow(2), 2)
return torch.sqrt(D2 + 1e-7)
elif dist_type == 'SquareL2':
return torch.sum((A.unsqueeze(1) - B.unsqueeze(0)).pow(2), 2)
else:
raise NotImplementedError('Not implemented')
def get_loss_fn(loss):
if loss == 'corr_dist':
return corr_dist
else:
raise ValueError(f'Loss {loss}, not defined')
================================================
FILE: core/registration.py
================================================
# Copyright (c) Chris Choy (chrischoy@ai.stanford.edu) and Wei Dong (weidong@andrew.cmu.edu)
#
# Please cite the following papers if you use any part of the code.
# - Christopher Choy, Wei Dong, Vladlen Koltun, Deep Global Registration, CVPR 2020
# - Christopher Choy, Jaesik Park, Vladlen Koltun, Fully Convolutional Geometric Features, ICCV 2019
# - Christopher Choy, JunYoung Gwak, Silvio Savarese, 4D Spatio-Temporal ConvNets: Minkowski Convolutional Neural Networks, CVPR 2019
import numpy as np
import torch
import torch.optim as optim
from core.knn import pdist
from core.loss import HighDimSmoothL1Loss
def ortho2rotation(poses):
r"""
poses: batch x 6
"""
def normalize_vector(v):
r"""
Batch x 3
"""
v_mag = torch.sqrt((v**2).sum(1, keepdim=True))
v_mag = torch.clamp(v_mag, min=1e-8)
v = v / v_mag
return v
def cross_product(u, v):
r"""
u: batch x 3
v: batch x 3
"""
i = u[:, 1] * v[:, 2] - u[:, 2] * v[:, 1]
j = u[:, 2] * v[:, 0] - u[:, 0] * v[:, 2]
k = u[:, 0] * v[:, 1] - u[:, 1] * v[:, 0]
i = i[:, None]
j = j[:, None]
k = k[:, None]
return torch.cat((i, j, k), 1)
def proj_u2a(u, a):
r"""
u: batch x 3
a: batch x 3
"""
inner_prod = (u * a).sum(1, keepdim=True)
norm2 = (u**2).sum(1, keepdim=True)
norm2 = torch.clamp(norm2, min=1e-8)
factor = inner_prod / norm2
return factor * u
x_raw = poses[:, 0:3]
y_raw = poses[:, 3:6]
x = normalize_vector(x_raw)
y = normalize_vector(y_raw - proj_u2a(x, y_raw))
z = cross_product(x, y)
x = x[:, :, None]
y = y[:, :, None]
z = z[:, :, None]
return torch.cat((x, y, z), 2)
def argmin_se3_squared_dist(X, Y):
"""
X: torch tensor N x 3
Y: torch tensor N x 3
"""
# https://ieeexplore.ieee.org/document/88573
assert len(X) == len(Y)
mux = X.mean(0, keepdim=True)
muy = Y.mean(0, keepdim=True)
Sxy = (Y - muy).t().mm(X - mux) / len(X)
U, D, V = Sxy.svd()
# svd = gesvd.GESVDFunction()
# U, S, V = svd.apply(Sxy)
# S[-1, -1] = U.det() * V.det()
S = torch.eye(3)
if U.det() * V.det() < 0:
S[-1, -1] = -1
R = U.mm(S.mm(V.t()))
t = muy.squeeze() - R.mm(mux.t()).squeeze()
return R, t
def weighted_procrustes(X, Y, w, eps):
"""
X: torch tensor N x 3
Y: torch tensor N x 3
w: torch tensor N
"""
# https://ieeexplore.ieee.org/document/88573
assert len(X) == len(Y)
W1 = torch.abs(w).sum()
w_norm = w / (W1 + eps)
mux = (w_norm * X).sum(0, keepdim=True)
muy = (w_norm * Y).sum(0, keepdim=True)
# Use CPU for small arrays
Sxy = (Y - muy).t().mm(w_norm * (X - mux)).cpu().double()
U, D, V = Sxy.svd()
S = torch.eye(3).double()
if U.det() * V.det() < 0:
S[-1, -1] = -1
R = U.mm(S.mm(V.t())).float()
t = (muy.cpu().squeeze() - R.mm(mux.cpu().t()).squeeze()).float()
return R, t
class Transformation(torch.nn.Module):
def __init__(self, R_init=None, t_init=None):
torch.nn.Module.__init__(self)
rot_init = torch.rand(1, 6)
trans_init = torch.zeros(1, 3)
if R_init is not None:
rot_init[0, :3] = R_init[:, 0]
rot_init[0, 3:] = R_init[:, 1]
if t_init is not None:
trans_init[0] = t_init
self.rot6d = torch.nn.Parameter(rot_init)
self.trans = torch.nn.Parameter(trans_init)
def forward(self, points):
rot_mat = ortho2rotation(self.rot6d)
return points @ rot_mat[0].t() + self.trans
def GlobalRegistration(points,
trans_points,
weights=None,
max_iter=1000,
verbose=False,
stat_freq=20,
max_break_count=20,
break_threshold_ratio=1e-5,
loss_fn=None,
quantization_size=1):
if isinstance(points, np.ndarray):
points = torch.from_numpy(points).float()
if isinstance(trans_points, np.ndarray):
trans_points = torch.from_numpy(trans_points).float()
if loss_fn is None:
if weights is not None:
weights.requires_grad = False
loss_fn = HighDimSmoothL1Loss(weights, quantization_size)
if weights is None:
# Get the initialization using https://ieeexplore.ieee.org/document/88573
R, t = argmin_se3_squared_dist(points, trans_points)
else:
R, t = weighted_procrustes(points, trans_points, weights, loss_fn.eps)
transformation = Transformation(R, t).to(points.device)
optimizer = optim.Adam(transformation.parameters(), lr=1e-1)
scheduler = optim.lr_scheduler.ExponentialLR(optimizer, gamma=0.999)
loss_prev = loss_fn(transformation(points), trans_points).item()
break_counter = 0
# Transform points
for i in range(max_iter):
new_points = transformation(points)
loss = loss_fn(new_points, trans_points)
if loss.item() < 1e-7:
break
optimizer.zero_grad()
loss.backward()
optimizer.step()
scheduler.step()
if i % stat_freq == 0 and verbose:
print(i, scheduler.get_lr(), loss.item())
if abs(loss_prev - loss.item()) < loss_prev * break_threshold_ratio:
break_counter += 1
if break_counter >= max_break_count:
break
loss_prev = loss.item()
rot6d = transformation.rot6d.detach()
trans = transformation.trans.detach()
opt_result = {'iterations': i, 'loss': loss.item(), 'break_count': break_counter}
return ortho2rotation(rot6d)[0], trans, opt_result
================================================
FILE: core/trainer.py
================================================
# Copyright (c) Chris Choy (chrischoy@ai.stanford.edu) and Wei Dong (weidong@andrew.cmu.edu)
#
# Please cite the following papers if you use any part of the code.
# - Christopher Choy, Wei Dong, Vladlen Koltun, Deep Global Registration, CVPR 2020
# - Christopher Choy, Jaesik Park, Vladlen Koltun, Fully Convolutional Geometric Features, ICCV 2019
# - Christopher Choy, JunYoung Gwak, Silvio Savarese, 4D Spatio-Temporal ConvNets: Minkowski Convolutional Neural Networks, CVPR 2019
# Written by Chris Choy
# Distributed under MIT License
import time
import os
import os.path as osp
import gc
import logging
import numpy as np
import json
import torch
import torch.optim as optim
import torch.nn.functional as F
from tensorboardX import SummaryWriter
from model import load_model
from core.knn import find_knn_batch
from core.correspondence import find_correct_correspondence
from core.loss import UnbalancedLoss, BalancedLoss
from core.metrics import batch_rotation_error, batch_translation_error
import core.registration as GlobalRegistration
from util.timer import Timer, AverageMeter
from util.file import ensure_dir
import MinkowskiEngine as ME
eps = np.finfo(float).eps
np2th = torch.from_numpy
class WeightedProcrustesTrainer:
def __init__(self, config, data_loader, val_data_loader=None):
# occupancy only for 3D Match dataset. For ScanNet, use RGB 3 channels.
num_feats = 3 if config.use_xyz_feature else 1
# Feature model initialization
if config.use_gpu and not torch.cuda.is_available():
logging.warning('Warning: There\'s no CUDA support on this machine, '
'training is performed on CPU.')
raise ValueError('GPU not available, but cuda flag set')
self.device = torch.device('cuda' if torch.cuda.is_available() else 'cpu')
self.config = config
# Training config
self.max_epoch = config.max_epoch
self.start_epoch = 1
self.checkpoint_dir = config.out_dir
self.data_loader = data_loader
self.train_data_loader_iter = self.data_loader.__iter__()
self.iter_size = config.iter_size
self.batch_size = data_loader.batch_size
# Validation config
self.val_max_iter = config.val_max_iter
self.val_epoch_freq = config.val_epoch_freq
self.best_val_metric = config.best_val_metric
self.best_val_epoch = -np.inf
self.best_val = -np.inf
self.val_data_loader = val_data_loader
self.test_valid = True if self.val_data_loader is not None else False
# Logging
self.log_step = int(np.sqrt(self.config.batch_size))
self.writer = SummaryWriter(config.out_dir)
# Model
FeatModel = load_model(config.feat_model)
InlierModel = load_model(config.inlier_model)
num_feats = 6 if self.config.inlier_feature_type == 'coords' else 1
self.feat_model = FeatModel(num_feats,
config.feat_model_n_out,
bn_momentum=config.bn_momentum,
conv1_kernel_size=config.feat_conv1_kernel_size,
normalize_feature=config.normalize_feature).to(
self.device)
logging.info(self.feat_model)
self.inlier_model = InlierModel(num_feats,
1,
bn_momentum=config.bn_momentum,
conv1_kernel_size=config.inlier_conv1_kernel_size,
normalize_feature=False,
D=6).to(self.device)
logging.info(self.inlier_model)
# Loss and optimizer
self.clip_weight_thresh = self.config.clip_weight_thresh
if self.config.use_balanced_loss:
self.crit = BalancedLoss()
else:
self.crit = UnbalancedLoss()
self.optimizer = getattr(optim, config.optimizer)(self.inlier_model.parameters(),
lr=config.lr,
momentum=config.momentum,
weight_decay=config.weight_decay)
self.scheduler = optim.lr_scheduler.ExponentialLR(self.optimizer, config.exp_gamma)
# Output preparation
ensure_dir(self.checkpoint_dir)
json.dump(config,
open(os.path.join(self.checkpoint_dir, 'config.json'), 'w'),
indent=4,
sort_keys=False)
self._load_weights(config)
def train(self):
"""
Major interface
Full training logic: train, valid, and save
"""
# Baseline random feature performance
if self.test_valid:
val_dict = self._valid_epoch()
for k, v in val_dict.items():
self.writer.add_scalar(f'val/{k}', v, 0)
# Train and valid
for epoch in range(self.start_epoch, self.max_epoch + 1):
lr = self.scheduler.get_lr()
logging.info(f" Epoch: {epoch}, LR: {lr}")
self._train_epoch(epoch)
self._save_checkpoint(epoch)
self.scheduler.step()
if self.test_valid and epoch % self.val_epoch_freq == 0:
val_dict = self._valid_epoch()
for k, v in val_dict.items():
self.writer.add_scalar(f'val/{k}', v, epoch)
if self.best_val < val_dict[self.best_val_metric]:
logging.info(
f'Saving the best val model with {self.best_val_metric}: {val_dict[self.best_val_metric]}'
)
self.best_val = val_dict[self.best_val_metric]
self.best_val_epoch = epoch
self._save_checkpoint(epoch, 'best_val_checkpoint')
else:
logging.info(
f'Current best val model with {self.best_val_metric}: {self.best_val} at epoch {self.best_val_epoch}'
)
def _train_epoch(self, epoch):
gc.collect()
# Fix the feature model and train the inlier model
self.feat_model.eval()
self.inlier_model.train()
# Epoch starts from 1
total_loss, total_num = 0, 0.0
data_loader = self.data_loader
iter_size = self.iter_size
# Meters for statistics
average_valid_meter = AverageMeter()
loss_meter = AverageMeter()
data_meter = AverageMeter()
regist_succ_meter = AverageMeter()
regist_rte_meter = AverageMeter()
regist_rre_meter = AverageMeter()
# Timers for profiling
data_timer = Timer()
nn_timer = Timer()
inlier_timer = Timer()
total_timer = Timer()
if self.config.num_train_iter > 0:
num_train_iter = self.config.num_train_iter
else:
num_train_iter = len(data_loader) // iter_size
start_iter = (epoch - 1) * num_train_iter
tp, fp, tn, fn = 0, 0, 0, 0
# Iterate over batches
for curr_iter in range(num_train_iter):
self.optimizer.zero_grad()
batch_loss, data_time = 0, 0
total_timer.tic()
for iter_idx in range(iter_size):
data_timer.tic()
input_dict = self.get_data(self.train_data_loader_iter)
data_time += data_timer.toc(average=False)
# Initial inlier prediction with FCGF and KNN matching
reg_coords, reg_feats, pred_pairs, is_correct, feat_time, nn_time = self.generate_inlier_input(
xyz0=input_dict['pcd0'],
xyz1=input_dict['pcd1'],
iC0=input_dict['sinput0_C'],
iC1=input_dict['sinput1_C'],
iF0=input_dict['sinput0_F'],
iF1=input_dict['sinput1_F'],
len_batch=input_dict['len_batch'],
pos_pairs=input_dict['correspondences'])
nn_timer.update(nn_time)
# Inlier prediction with 6D ConvNet
inlier_timer.tic()
reg_sinput = ME.SparseTensor(reg_feats.contiguous(),
coords=reg_coords.int()).to(self.device)
reg_soutput = self.inlier_model(reg_sinput)
inlier_timer.toc()
logits = reg_soutput.F
weights = logits.sigmoid()
# Truncate weights too low
# For training, inplace modification is prohibited for backward
if self.clip_weight_thresh > 0:
weights_tmp = torch.zeros_like(weights)
valid_mask = weights > self.clip_weight_thresh
weights_tmp[valid_mask] = weights[valid_mask]
weights = weights_tmp
# Weighted Procrustes
pred_rots, pred_trans, ws = self.weighted_procrustes(xyz0s=input_dict['pcd0'],
xyz1s=input_dict['pcd1'],
pred_pairs=pred_pairs,
weights=weights)
# Get batch registration loss
gt_rots, gt_trans = self.decompose_rotation_translation(input_dict['T_gt'])
rot_error = batch_rotation_error(pred_rots, gt_rots)
trans_error = batch_translation_error(pred_trans, gt_trans)
individual_loss = rot_error + self.config.trans_weight * trans_error
# Select batches with at least 10 valid correspondences
valid_mask = ws > 10
num_valid = valid_mask.sum().item()
average_valid_meter.update(num_valid)
# Registration loss against registration GT
loss = self.config.procrustes_loss_weight * individual_loss[valid_mask].mean()
if not np.isfinite(loss.item()):
max_val = loss.item()
logging.info('Loss is infinite, abort ')
continue
# Direct inlier loss against nearest neighbor searched GT
target = torch.from_numpy(is_correct).squeeze()
if self.config.inlier_use_direct_loss:
inlier_loss = self.config.inlier_direct_loss_weight * self.crit(
logits.cpu().squeeze(), target.to(torch.float)) / iter_size
loss += inlier_loss
loss.backward()
# Update statistics before backprop
with torch.no_grad():
regist_rre_meter.update(rot_error.squeeze() * 180 / np.pi)
regist_rte_meter.update(trans_error.squeeze())
success = (trans_error.squeeze() < self.config.success_rte_thresh) * (
rot_error.squeeze() * 180 / np.pi < self.config.success_rre_thresh)
regist_succ_meter.update(success.float())
batch_loss += loss.mean().item()
neg_target = (~target).to(torch.bool)
pred = logits > 0 # todo thresh
pred_on_pos, pred_on_neg = pred[target], pred[neg_target]
tp += pred_on_pos.sum().item()
fp += pred_on_neg.sum().item()
tn += (~pred_on_neg).sum().item()
fn += (~pred_on_pos).sum().item()
# Check gradient and avoid backprop of inf values
max_grad = torch.abs(self.inlier_model.final.kernel.grad).max().cpu().item()
# Backprop only if gradient is finite
if not np.isfinite(max_grad):
self.optimizer.zero_grad()
logging.info(f'Clearing the NaN gradient at iter {curr_iter}')
else:
self.optimizer.step()
gc.collect()
torch.cuda.empty_cache()
total_loss += batch_loss
total_num += 1.0
total_timer.toc()
data_meter.update(data_time)
loss_meter.update(batch_loss)
# Output to logs
if curr_iter % self.config.stat_freq == 0:
precision = tp / (tp + fp + eps)
recall = tp / (tp + fn + eps)
f1 = 2 * (precision * recall) / (precision + recall + eps)
tpr = tp / (tp + fn + eps)
tnr = tn / (tn + fp + eps)
balanced_accuracy = (tpr + tnr) / 2
correspondence_accuracy = is_correct.sum() / len(is_correct)
stat = {
'loss': loss_meter.avg,
'precision': precision,
'recall': recall,
'tpr': tpr,
'tnr': tnr,
'balanced_accuracy': balanced_accuracy,
'f1': f1,
'num_valid': average_valid_meter.avg,
}
for k, v in stat.items():
self.writer.add_scalar(f'train/{k}', v, start_iter + curr_iter)
logging.info(' '.join([
f"Train Epoch: {epoch} [{curr_iter}/{num_train_iter}],",
f"Current Loss: {loss_meter.avg:.3e},",
f"Correspondence acc: {correspondence_accuracy:.3e}",
f", Precision: {precision:.4f}, Recall: {recall:.4f}, F1: {f1:.4f},",
f"TPR: {tpr:.4f}, TNR: {tnr:.4f}, BAcc: {balanced_accuracy:.4f}",
f"RTE: {regist_rte_meter.avg:.3e}, RRE: {regist_rre_meter.avg:.3e},",
f"Succ rate: {regist_succ_meter.avg:3e}",
f"Avg num valid: {average_valid_meter.avg:3e}",
f"\tData time: {data_meter.avg:.4f}, Train time: {total_timer.avg - data_meter.avg:.4f},",
f"NN search time: {nn_timer.avg:.3e}, Total time: {total_timer.avg:.4f}"
]))
loss_meter.reset()
regist_rte_meter.reset()
regist_rre_meter.reset()
regist_succ_meter.reset()
average_valid_meter.reset()
data_meter.reset()
total_timer.reset()
tp, fp, tn, fn = 0, 0, 0, 0
def _valid_epoch(self):
# Change the network to evaluation mode
self.feat_model.eval()
self.inlier_model.eval()
self.val_data_loader.dataset.reset_seed(0)
num_data = 0
loss_meter = AverageMeter()
hit_ratio_meter = AverageMeter()
regist_succ_meter = AverageMeter()
regist_rte_meter = AverageMeter()
regist_rre_meter = AverageMeter()
data_timer = Timer()
feat_timer = Timer()
inlier_timer = Timer()
nn_timer = Timer()
dgr_timer = Timer()
tot_num_data = len(self.val_data_loader.dataset)
if self.val_max_iter > 0:
tot_num_data = min(self.val_max_iter, tot_num_data)
tot_num_data = int(tot_num_data / self.val_data_loader.batch_size)
data_loader_iter = self.val_data_loader.__iter__()
tp, fp, tn, fn = 0, 0, 0, 0
for batch_idx in range(tot_num_data):
data_timer.tic()
input_dict = self.get_data(data_loader_iter)
data_timer.toc()
reg_coords, reg_feats, pred_pairs, is_correct, feat_time, nn_time = self.generate_inlier_input(
xyz0=input_dict['pcd0'],
xyz1=input_dict['pcd1'],
iC0=input_dict['sinput0_C'],
iC1=input_dict['sinput1_C'],
iF0=input_dict['sinput0_F'],
iF1=input_dict['sinput1_F'],
len_batch=input_dict['len_batch'],
pos_pairs=input_dict['correspondences'])
feat_timer.update(feat_time)
nn_timer.update(nn_time)
hit_ratio_meter.update(is_correct.sum().item() / len(is_correct))
inlier_timer.tic()
reg_sinput = ME.SparseTensor(reg_feats.contiguous(),
coords=reg_coords.int()).to(self.device)
reg_soutput = self.inlier_model(reg_sinput)
inlier_timer.toc()
dgr_timer.tic()
logits = reg_soutput.F
weights = logits.sigmoid()
if self.clip_weight_thresh > 0:
weights[weights < self.clip_weight_thresh] = 0
# Weighted Procrustes
pred_rots, pred_trans, ws = self.weighted_procrustes(xyz0s=input_dict['pcd0'],
xyz1s=input_dict['pcd1'],
pred_pairs=pred_pairs,
weights=weights)
dgr_timer.toc()
valid_mask = ws > 10
gt_rots, gt_trans = self.decompose_rotation_translation(input_dict['T_gt'])
rot_error = batch_rotation_error(pred_rots, gt_rots) * 180 / np.pi
trans_error = batch_translation_error(pred_trans, gt_trans)
regist_rre_meter.update(rot_error.squeeze())
regist_rte_meter.update(trans_error.squeeze())
# Compute success
success = (trans_error < self.config.success_rte_thresh) * (
rot_error < self.config.success_rre_thresh) * valid_mask
regist_succ_meter.update(success.float())
target = torch.from_numpy(is_correct).squeeze()
neg_target = (~target).to(torch.bool)
pred = weights > 0.5 # TODO thresh
pred_on_pos, pred_on_neg = pred[target], pred[neg_target]
tp += pred_on_pos.sum().item()
fp += pred_on_neg.sum().item()
tn += (~pred_on_neg).sum().item()
fn += (~pred_on_pos).sum().item()
num_data += 1
torch.cuda.empty_cache()
if batch_idx % self.config.stat_freq == 0:
precision = tp / (tp + fp + eps)
recall = tp / (tp + fn + eps)
f1 = 2 * (precision * recall) / (precision + recall + eps)
tpr = tp / (tp + fn + eps)
tnr = tn / (tn + fp + eps)
balanced_accuracy = (tpr + tnr) / 2
logging.info(' '.join([
f"Validation iter {num_data} / {tot_num_data} : Data Loading Time: {data_timer.avg:.3e},",
f"NN search time: {nn_timer.avg:.3e}",
f"Feature Extraction Time: {feat_timer.avg:.3e}, Inlier Time: {inlier_timer.avg:.3e},",
f"Loss: {loss_meter.avg:.4f}, Hit Ratio: {hit_ratio_meter.avg:.4f}, Precision: {precision:.4f}, Recall: {recall:.4f}, F1: {f1:.4f}, ",
f"TPR: {tpr:.4f}, TNR: {tnr:.4f}, BAcc: {balanced_accuracy:.4f}, ",
f"DGR RTE: {regist_rte_meter.avg:.3e}, DGR RRE: {regist_rre_meter.avg:.3e}, DGR Time: {dgr_timer.avg:.3e}",
f"DGR Succ rate: {regist_succ_meter.avg:3e}",
]))
data_timer.reset()
precision = tp / (tp + fp + eps)
recall = tp / (tp + fn + eps)
f1 = 2 * (precision * recall) / (precision + recall + eps)
tpr = tp / (tp + fn + eps)
tnr = tn / (tn + fp + eps)
balanced_accuracy = (tpr + tnr) / 2
logging.info(' '.join([
f"Feature Extraction Time: {feat_timer.avg:.3e}, NN search time: {nn_timer.avg:.3e}",
f"Inlier Time: {inlier_timer.avg:.3e}, Final Loss: {loss_meter.avg}, ",
f"Loss: {loss_meter.avg}, Hit Ratio: {hit_ratio_meter.avg:.4f}, Precision: {precision}, Recall: {recall}, F1: {f1}, ",
f"TPR: {tpr}, TNR: {tnr}, BAcc: {balanced_accuracy}, ",
f"RTE: {regist_rte_meter.avg:.3e}, RRE: {regist_rre_meter.avg:.3e}, DGR Time: {dgr_timer.avg:.3e}",
f"DGR Succ rate: {regist_succ_meter.avg:3e}",
]))
stat = {
'loss': loss_meter.avg,
'precision': precision,
'recall': recall,
'tpr': tpr,
'tnr': tnr,
'balanced_accuracy': balanced_accuracy,
'f1': f1,
'regist_rte': regist_rte_meter.avg,
'regist_rre': regist_rre_meter.avg,
'succ_rate': regist_succ_meter.avg
}
return stat
def _load_weights(self, config):
if config.resume is None and config.weights:
logging.info("=> loading weights for inlier model '{}'".format(config.weights))
checkpoint = torch.load(config.weights)
self.feat_model.load_state_dict(checkpoint['state_dict'])
logging.info("=> Loaded base model weights from '{}'".format(config.weights))
if 'state_dict_inlier' in checkpoint:
self.inlier_model.load_state_dict(checkpoint['state_dict_inlier'])
logging.info("=> Loaded inlier weights from '{}'".format(config.weights))
else:
logging.warn("Inlier weight not found in '{}'".format(config.weights))
if config.resume is not None:
if osp.isfile(config.resume):
logging.info("=> loading checkpoint '{}'".format(config.resume))
state = torch.load(config.resume)
self.start_epoch = state['epoch']
self.feat_model.load_state_dict(state['state_dict'])
self.feat_model = self.feat_model.to(self.device)
self.scheduler.load_state_dict(state['scheduler'])
self.optimizer.load_state_dict(state['optimizer'])
if 'best_val' in state.keys():
self.best_val = state['best_val']
self.best_val_epoch = state['best_val_epoch']
self.best_val_metric = state['best_val_metric']
if 'state_dict_inlier' in state:
self.inlier_model.load_state_dict(state['state_dict_inlier'])
self.inlier_model = self.inlier_model.to(self.device)
else:
logging.warn("Inlier weights not found in '{}'".format(config.resume))
else:
logging.warn("Inlier weights does not exist at '{}'".format(config.resume))
def _save_checkpoint(self, epoch, filename='checkpoint'):
"""
Saving checkpoints
:param epoch: current epoch number
:param log: logging information of the epoch
:param save_best: if True, rename the saved checkpoint to 'model_best.pth'
"""
print('_save_checkpoint from inlier_trainer')
state = {
'epoch': epoch,
'state_dict': self.feat_model.state_dict(),
'state_dict_inlier': self.inlier_model.state_dict(),
'optimizer': self.optimizer.state_dict(),
'scheduler': self.scheduler.state_dict(),
'config': self.config,
'best_val': self.best_val,
'best_val_epoch': self.best_val_epoch,
'best_val_metric': self.best_val_metric
}
filename = os.path.join(self.checkpoint_dir, f'{filename}.pth')
logging.info("Saving checkpoint: {} ...".format(filename))
torch.save(state, filename)
def get_data(self, iterator):
while True:
try:
input_data = iterator.next()
except ValueError as e:
logging.info('Skipping an empty batch')
continue
return input_data
def decompose_by_length(self, tensor, reference_tensors):
decomposed_tensors = []
start_ind = 0
for r in reference_tensors:
N = len(r)
decomposed_tensors.append(tensor[start_ind:start_ind + N])
start_ind += N
return decomposed_tensors
def decompose_rotation_translation(self, Ts):
Ts = Ts.float()
Rs = Ts[:, :3, :3]
ts = Ts[:, :3, 3]
Rs.require_grad = False
ts.require_grad = False
return Rs, ts
def weighted_procrustes(self, xyz0s, xyz1s, pred_pairs, weights):
decomposed_weights = self.decompose_by_length(weights, pred_pairs)
RT = []
ws = []
for xyz0, xyz1, pred_pair, w in zip(xyz0s, xyz1s, pred_pairs, decomposed_weights):
xyz0.requires_grad = False
xyz1.requires_grad = False
ws.append(w.sum().item())
predT = GlobalRegistration.weighted_procrustes(
X=xyz0[pred_pair[:, 0]].to(self.device),
Y=xyz1[pred_pair[:, 1]].to(self.device),
w=w,
eps=np.finfo(np.float32).eps)
RT.append(predT)
Rs, ts = list(zip(*RT))
Rs = torch.stack(Rs, 0)
ts = torch.stack(ts, 0)
ws = torch.Tensor(ws)
return Rs, ts, ws
def generate_inlier_features(self, xyz0, xyz1, C0, C1, F0, F1, pair_ind0, pair_ind1):
"""
Assume that the indices 0 and indices 1 gives the pairs in the
(downsampled) correspondences.
"""
assert len(pair_ind0) == len(pair_ind1)
reg_feat_type = self.config.inlier_feature_type
assert reg_feat_type in ['ones', 'coords', 'counts', 'feats']
# Move coordinates and indices to the device
if 'coords' in reg_feat_type:
C0 = C0.to(self.device)
C1 = C1.to(self.device)
# TODO: change it to append the features and then concat at last
if reg_feat_type == 'ones':
reg_feat = torch.ones((len(pair_ind0), 1)).to(torch.float32)
elif reg_feat_type == 'feats':
reg_feat = torch.cat((F0[pair_ind0], F1[pair_ind1]), dim=1)
elif reg_feat_type == 'coords':
reg_feat = torch.cat((torch.cos(torch.cat(
xyz0, 0)[pair_ind0]), torch.cos(torch.cat(xyz1, 0)[pair_ind1])),
dim=1)
else:
raise ValueError('Inlier feature type not defined')
return reg_feat
def generate_inlier_input(self, xyz0, xyz1, iC0, iC1, iF0, iF1, len_batch, pos_pairs):
# pairs consist of (xyz1 index, xyz0 index)
stime = time.time()
sinput0 = ME.SparseTensor(iF0, coords=iC0).to(self.device)
oF0 = self.feat_model(sinput0).F
sinput1 = ME.SparseTensor(iF1, coords=iC1).to(self.device)
oF1 = self.feat_model(sinput1).F
feat_time = time.time() - stime
stime = time.time()
pred_pairs = self.find_pairs(oF0, oF1, len_batch)
nn_time = time.time() - stime
is_correct = find_correct_correspondence(pos_pairs, pred_pairs, len_batch=len_batch)
cat_pred_pairs = []
start_inds = torch.zeros((1, 2)).long()
for lens, pred_pair in zip(len_batch, pred_pairs):
cat_pred_pairs.append(pred_pair + start_inds)
start_inds += torch.LongTensor(lens)
cat_pred_pairs = torch.cat(cat_pred_pairs, 0)
pred_pair_inds0, pred_pair_inds1 = cat_pred_pairs.t()
reg_coords = torch.cat((iC0[pred_pair_inds0], iC1[pred_pair_inds1, 1:]), 1)
reg_feats = self.generate_inlier_features(xyz0, xyz1, iC0, iC1, oF0, oF1,
pred_pair_inds0, pred_pair_inds1).float()
return reg_coords, reg_feats, pred_pairs, is_correct, feat_time, nn_time
def find_pairs(self, F0, F1, len_batch):
nn_batch = find_knn_batch(F0,
F1,
len_batch,
nn_max_n=self.config.nn_max_n,
knn=self.config.inlier_knn,
return_distance=False,
search_method=self.config.knn_search_method)
pred_pairs = []
for nns, lens in zip(nn_batch, len_batch):
pred_pair_ind0, pred_pair_ind1 = torch.arange(
len(nns)).long()[:, None], nns.long().cpu()
nn_pairs = []
for j in range(nns.shape[1]):
nn_pairs.append(
torch.cat((pred_pair_ind0.cpu(), pred_pair_ind1[:, j].unsqueeze(1)), 1))
pred_pairs.append(torch.cat(nn_pairs, 0))
return pred_pairs
================================================
FILE: dataloader/base_loader.py
================================================
# Copyright (c) Chris Choy (chrischoy@ai.stanford.edu) and Wei Dong (weidong@andrew.cmu.edu)
#
# Please cite the following papers if you use any part of the code.
# - Christopher Choy, Wei Dong, Vladlen Koltun, Deep Global Registration, CVPR 2020
# - Christopher Choy, Jaesik Park, Vladlen Koltun, Fully Convolutional Geometric Features, ICCV 2019
# - Christopher Choy, JunYoung Gwak, Silvio Savarese, 4D Spatio-Temporal ConvNets: Minkowski Convolutional Neural Networks, CVPR 2019
#
# Written by Chris Choy
# Distributed under MIT License
import os
import logging
import random
import torch
import torch.utils.data
import numpy as np
import dataloader.transforms as t
from dataloader.inf_sampler import InfSampler
import MinkowskiEngine as ME
import open3d as o3d
class CollationFunctionFactory:
def __init__(self, concat_correspondences=True, collation_type='default'):
self.concat_correspondences = concat_correspondences
if collation_type == 'default':
self.collation_fn = self.collate_default
elif collation_type == 'collate_pair':
self.collation_fn = self.collate_pair_fn
else:
raise ValueError(f'collation_type {collation_type} not found')
def __call__(self, list_data):
return self.collation_fn(list_data)
def collate_default(self, list_data):
return list_data
def collate_pair_fn(self, list_data):
N = len(list_data)
list_data = [data for data in list_data if data is not None]
if N != len(list_data):
logging.info(f"Retain {len(list_data)} from {N} data.")
if len(list_data) == 0:
raise ValueError('No data in the batch')
xyz0, xyz1, coords0, coords1, feats0, feats1, matching_inds, trans, extra_packages = list(
zip(*list_data))
matching_inds_batch, trans_batch, len_batch = [], [], []
coords_batch0 = ME.utils.batched_coordinates(coords0)
coords_batch1 = ME.utils.batched_coordinates(coords1)
trans_batch = torch.from_numpy(np.stack(trans)).float()
curr_start_inds = torch.zeros((1, 2), dtype=torch.int32)
for batch_id, _ in enumerate(coords0):
# For scan2cad there will be empty matching_inds even after filtering
# This check will skip these pairs while not affecting other datasets
if (len(matching_inds[batch_id]) == 0):
continue
N0 = coords0[batch_id].shape[0]
N1 = coords1[batch_id].shape[0]
if self.concat_correspondences:
matching_inds_batch.append(
torch.IntTensor(matching_inds[batch_id]) + curr_start_inds)
else:
matching_inds_batch.append(torch.IntTensor(matching_inds[batch_id]))
len_batch.append([N0, N1])
# Move the head
curr_start_inds[0, 0] += N0
curr_start_inds[0, 1] += N1
# Concatenate all lists
feats_batch0 = torch.cat(feats0, 0).float()
feats_batch1 = torch.cat(feats1, 0).float()
# xyz_batch0 = torch.cat(xyz0, 0).float()
# xyz_batch1 = torch.cat(xyz1, 0).float()
# trans_batch = torch.cat(trans_batch, 0).float()
if self.concat_correspondences:
matching_inds_batch = torch.cat(matching_inds_batch, 0).int()
return {
'pcd0': xyz0,
'pcd1': xyz1,
'sinput0_C': coords_batch0,
'sinput0_F': feats_batch0,
'sinput1_C': coords_batch1,
'sinput1_F': feats_batch1,
'correspondences': matching_inds_batch,
'T_gt': trans_batch,
'len_batch': len_batch,
'extra_packages': extra_packages,
}
class PairDataset(torch.utils.data.Dataset):
AUGMENT = None
def __init__(self,
phase,
transform=None,
random_rotation=True,
random_scale=True,
manual_seed=False,
config=None):
self.phase = phase
self.files = []
self.data_objects = []
self.transform = transform
self.voxel_size = config.voxel_size
self.matching_search_voxel_size = \
config.voxel_size * config.positive_pair_search_voxel_size_multiplier
self.random_scale = random_scale
self.min_scale = config.min_scale
self.max_scale = config.max_scale
self.random_rotation = random_rotation
self.rotation_range = config.rotation_range
self.randg = np.random.RandomState()
if manual_seed:
self.reset_seed()
def reset_seed(self, seed=0):
logging.info(f"Resetting the data loader seed to {seed}")
self.randg.seed(seed)
def apply_transform(self, pts, trans):
R = trans[:3, :3]
T = trans[:3, 3]
pts = pts @ R.T + T
return pts
def __len__(self):
return len(self.files)
================================================
FILE: dataloader/data_loaders.py
================================================
# Copyright (c) Chris Choy (chrischoy@ai.stanford.edu) and Wei Dong (weidong@andrew.cmu.edu)
#
# Please cite the following papers if you use any part of the code.
# - Christopher Choy, Wei Dong, Vladlen Koltun, Deep Global Registration, CVPR 2020
# - Christopher Choy, Jaesik Park, Vladlen Koltun, Fully Convolutional Geometric Features, ICCV 2019
# - Christopher Choy, JunYoung Gwak, Silvio Savarese, 4D Spatio-Temporal ConvNets: Minkowski Convolutional Neural Networks, CVPR 2019
from dataloader.threedmatch_loader import *
from dataloader.kitti_loader import *
ALL_DATASETS = [
ThreeDMatchPairDataset07, ThreeDMatchPairDataset05, ThreeDMatchPairDataset03,
ThreeDMatchTrajectoryDataset, KITTIPairDataset, KITTINMPairDataset
]
dataset_str_mapping = {d.__name__: d for d in ALL_DATASETS}
def make_data_loader(config, phase, batch_size, num_workers=0, shuffle=None):
assert phase in ['train', 'trainval', 'val', 'test']
if shuffle is None:
shuffle = phase != 'test'
if config.dataset not in dataset_str_mapping.keys():
logging.error(f'Dataset {config.dataset}, does not exists in ' +
', '.join(dataset_str_mapping.keys()))
Dataset = dataset_str_mapping[config.dataset]
use_random_scale = False
use_random_rotation = False
transforms = []
if phase in ['train', 'trainval']:
use_random_rotation = config.use_random_rotation
use_random_scale = config.use_random_scale
transforms += [t.Jitter()]
if phase in ['val', 'test']:
use_random_rotation = config.test_random_rotation
dset = Dataset(phase,
transform=t.Compose(transforms),
random_scale=use_random_scale,
random_rotation=use_random_rotation,
config=config)
collation_fn = CollationFunctionFactory(concat_correspondences=False,
collation_type='collate_pair')
loader = torch.utils.data.DataLoader(dset,
batch_size=batch_size,
collate_fn=collation_fn,
num_workers=num_workers,
sampler=InfSampler(dset, shuffle))
return loader
================================================
FILE: dataloader/inf_sampler.py
================================================
# Copyright (c) Chris Choy (chrischoy@ai.stanford.edu) and Wei Dong (weidong@andrew.cmu.edu)
#
# Please cite the following papers if you use any part of the code.
# - Christopher Choy, Wei Dong, Vladlen Koltun, Deep Global Registration, CVPR 2020
# - Christopher Choy, Jaesik Park, Vladlen Koltun, Fully Convolutional Geometric Features, ICCV 2019
# - Christopher Choy, JunYoung Gwak, Silvio Savarese, 4D Spatio-Temporal ConvNets: Minkowski Convolutional Neural Networks, CVPR 2019
import torch
from torch.utils.data.sampler import Sampler
class InfSampler(Sampler):
"""Samples elements randomly, without replacement.
Arguments:
data_source (Dataset): dataset to sample from
"""
def __init__(self, data_source, shuffle=False):
self.data_source = data_source
self.shuffle = shuffle
self.reset_permutation()
def reset_permutation(self):
perm = len(self.data_source)
if self.shuffle:
perm = torch.randperm(perm)
self._perm = perm.tolist()
def __iter__(self):
return self
def __next__(self):
if len(self._perm) == 0:
self.reset_permutation()
return self._perm.pop()
def __len__(self):
return len(self.data_source)
================================================
FILE: dataloader/kitti_loader.py
================================================
# Copyright (c) Chris Choy (chrischoy@ai.stanford.edu) and Wei Dong (weidong@andrew.cmu.edu)
#
# Please cite the following papers if you use any part of the code.
# - Christopher Choy, Wei Dong, Vladlen Koltun, Deep Global Registration, CVPR 2020
# - Christopher Choy, Jaesik Park, Vladlen Koltun, Fully Convolutional Geometric Features, ICCV 2019
# - Christopher Choy, JunYoung Gwak, Silvio Savarese, 4D Spatio-Temporal ConvNets: Minkowski Convolutional Neural Networks, CVPR 2019
import os
import glob
from dataloader.base_loader import *
from dataloader.transforms import *
from util.pointcloud import get_matching_indices, make_open3d_point_cloud
kitti_cache = {}
kitti_icp_cache = {}
class KITTIPairDataset(PairDataset):
AUGMENT = None
DATA_FILES = {
'train': './dataloader/split/train_kitti.txt',
'val': './dataloader/split/val_kitti.txt',
'test': './dataloader/split/test_kitti.txt'
}
TEST_RANDOM_ROTATION = False
IS_ODOMETRY = True
def __init__(self,
phase,
transform=None,
random_rotation=True,
random_scale=True,
manual_seed=False,
config=None):
# For evaluation, use the odometry dataset training following the 3DFeat eval method
self.root = root = config.kitti_dir + '/dataset'
random_rotation = self.TEST_RANDOM_ROTATION
self.icp_path = config.icp_cache_path
try:
os.mkdir(self.icp_path)
except OSError as error:
pass
PairDataset.__init__(self, phase, transform, random_rotation, random_scale,
manual_seed, config)
logging.info(f"Loading the subset {phase} from {root}")
# Use the kitti root
self.max_time_diff = max_time_diff = config.kitti_max_time_diff
subset_names = open(self.DATA_FILES[phase]).read().split()
for dirname in subset_names:
drive_id = int(dirname)
inames = self.get_all_scan_ids(drive_id)
for start_time in inames:
for time_diff in range(2, max_time_diff):
pair_time = time_diff + start_time
if pair_time in inames:
self.files.append((drive_id, start_time, pair_time))
def get_all_scan_ids(self, drive_id):
fnames = glob.glob(self.root + '/sequences/%02d/velodyne/*.bin' % drive_id)
assert len(
fnames) > 0, f"Make sure that the path {self.root} has drive id: {drive_id}"
inames = [int(os.path.split(fname)[-1][:-4]) for fname in fnames]
return inames
@property
def velo2cam(self):
try:
velo2cam = self._velo2cam
except AttributeError:
R = np.array([
7.533745e-03, -9.999714e-01, -6.166020e-04, 1.480249e-02, 7.280733e-04,
-9.998902e-01, 9.998621e-01, 7.523790e-03, 1.480755e-02
]).reshape(3, 3)
T = np.array([-4.069766e-03, -7.631618e-02, -2.717806e-01]).reshape(3, 1)
velo2cam = np.hstack([R, T])
self._velo2cam = np.vstack((velo2cam, [0, 0, 0, 1])).T
return self._velo2cam
def get_video_odometry(self, drive, indices=None, ext='.txt', return_all=False):
data_path = self.root + '/poses/%02d.txt' % drive
if data_path not in kitti_cache:
kitti_cache[data_path] = np.genfromtxt(data_path)
if return_all:
return kitti_cache[data_path]
else:
return kitti_cache[data_path][indices]
def odometry_to_positions(self, odometry):
T_w_cam0 = odometry.reshape(3, 4)
T_w_cam0 = np.vstack((T_w_cam0, [0, 0, 0, 1]))
return T_w_cam0
def rot3d(self, axis, angle):
ei = np.ones(3, dtype='bool')
ei[axis] = 0
i = np.nonzero(ei)[0]
m = np.eye(3)
c, s = np.cos(angle), np.sin(angle)
m[i[0], i[0]] = c
m[i[0], i[1]] = -s
m[i[1], i[0]] = s
m[i[1], i[1]] = c
return m
def pos_transform(self, pos):
x, y, z, rx, ry, rz, _ = pos[0]
RT = np.eye(4)
RT[:3, :3] = np.dot(np.dot(self.rot3d(0, rx), self.rot3d(1, ry)), self.rot3d(2, rz))
RT[:3, 3] = [x, y, z]
return RT
def get_position_transform(self, pos0, pos1, invert=False):
T0 = self.pos_transform(pos0)
T1 = self.pos_transform(pos1)
return (np.dot(T1, np.linalg.inv(T0)).T if not invert else np.dot(
np.linalg.inv(T1), T0).T)
def _get_velodyne_fn(self, drive, t):
fname = self.root + '/sequences/%02d/velodyne/%06d.bin' % (drive, t)
return fname
def __getitem__(self, idx):
drive = self.files[idx][0]
t0, t1 = self.files[idx][1], self.files[idx][2]
all_odometry = self.get_video_odometry(drive, [t0, t1])
positions = [self.odometry_to_positions(odometry) for odometry in all_odometry]
fname0 = self._get_velodyne_fn(drive, t0)
fname1 = self._get_velodyne_fn(drive, t1)
# XYZ and reflectance
xyzr0 = np.fromfile(fname0, dtype=np.float32).reshape(-1, 4)
xyzr1 = np.fromfile(fname1, dtype=np.float32).reshape(-1, 4)
xyz0 = xyzr0[:, :3]
xyz1 = xyzr1[:, :3]
key = '%d_%d_%d' % (drive, t0, t1)
filename = self.icp_path + '/' + key + '.npy'
if key not in kitti_icp_cache:
if not os.path.exists(filename):
# work on the downsampled xyzs, 0.05m == 5cm
sel0 = ME.utils.sparse_quantize(xyz0 / 0.05, return_index=True)
sel1 = ME.utils.sparse_quantize(xyz1 / 0.05, return_index=True)
M = (self.velo2cam @ positions[0].T @ np.linalg.inv(positions[1].T)
@ np.linalg.inv(self.velo2cam)).T
xyz0_t = self.apply_transform(xyz0[sel0], M)
pcd0 = make_open3d_point_cloud(xyz0_t)
pcd1 = make_open3d_point_cloud(xyz1[sel1])
reg = o3d.registration.registration_icp(pcd0, pcd1, 0.2, np.eye(4),
o3d.registration.TransformationEstimationPointToPoint(),
o3d.registration.ICPConvergenceCriteria(max_iteration=200))
pcd0.transform(reg.transformation)
# pcd0.transform(M2) or self.apply_transform(xyz0, M2)
M2 = M @ reg.transformation
# o3d.draw_geometries([pcd0, pcd1])
# write to a file
np.save(filename, M2)
else:
M2 = np.load(filename)
kitti_icp_cache[key] = M2
else:
M2 = kitti_icp_cache[key]
if self.random_rotation:
T0 = sample_random_trans(xyz0, self.randg, np.pi / 4)
T1 = sample_random_trans(xyz1, self.randg, np.pi / 4)
trans = T1 @ M2 @ np.linalg.inv(T0)
xyz0 = self.apply_transform(xyz0, T0)
xyz1 = self.apply_transform(xyz1, T1)
else:
trans = M2
matching_search_voxel_size = self.matching_search_voxel_size
if self.random_scale and random.random() < 0.95:
scale = self.min_scale + \
(self.max_scale - self.min_scale) * random.random()
matching_search_voxel_size *= scale
xyz0 = scale * xyz0
xyz1 = scale * xyz1
# Voxelization
xyz0_th = torch.from_numpy(xyz0)
xyz1_th = torch.from_numpy(xyz1)
sel0 = ME.utils.sparse_quantize(xyz0_th / self.voxel_size, return_index=True)
sel1 = ME.utils.sparse_quantize(xyz1_th / self.voxel_size, return_index=True)
# Make point clouds using voxelized points
pcd0 = make_open3d_point_cloud(xyz0[sel0])
pcd1 = make_open3d_point_cloud(xyz1[sel1])
# Get matches
matches = get_matching_indices(pcd0, pcd1, trans, matching_search_voxel_size)
if len(matches) < 1000:
raise ValueError(f"Insufficient matches in {drive}, {t0}, {t1}")
# Get features
npts0 = len(sel0)
npts1 = len(sel1)
feats_train0, feats_train1 = [], []
unique_xyz0_th = xyz0_th[sel0]
unique_xyz1_th = xyz1_th[sel1]
feats_train0.append(torch.ones((npts0, 1)))
feats_train1.append(torch.ones((npts1, 1)))
feats0 = torch.cat(feats_train0, 1)
feats1 = torch.cat(feats_train1, 1)
coords0 = torch.floor(unique_xyz0_th / self.voxel_size)
coords1 = torch.floor(unique_xyz1_th / self.voxel_size)
if self.transform:
coords0, feats0 = self.transform(coords0, feats0)
coords1, feats1 = self.transform(coords1, feats1)
extra_package = {'drive': drive, 't0': t0, 't1': t1}
return (unique_xyz0_th.float(),
unique_xyz1_th.float(), coords0.int(), coords1.int(), feats0.float(),
feats1.float(), matches, trans, extra_package)
class KITTINMPairDataset(KITTIPairDataset):
r"""
Generate KITTI pairs within N meter distance
"""
MIN_DIST = 10
def __init__(self,
phase,
transform=None,
random_rotation=True,
random_scale=True,
manual_seed=False,
config=None):
self.root = root = os.path.join(config.kitti_dir, 'dataset')
self.icp_path = os.path.join(config.kitti_dir, config.icp_cache_path)
try:
os.mkdir(self.icp_path)
except OSError as error:
pass
random_rotation = self.TEST_RANDOM_ROTATION
PairDataset.__init__(self, phase, transform, random_rotation, random_scale,
manual_seed, config)
logging.info(f"Loading the subset {phase} from {root}")
subset_names = open(self.DATA_FILES[phase]).read().split()
for dirname in subset_names:
drive_id = int(dirname)
fnames = glob.glob(root + '/sequences/%02d/velodyne/*.bin' % drive_id)
assert len(fnames) > 0, f"Make sure that the path {root} has data {dirname}"
inames = sorted([int(os.path.split(fname)[-1][:-4]) for fname in fnames])
all_odo = self.get_video_odometry(drive_id, return_all=True)
all_pos = np.array([self.odometry_to_positions(odo) for odo in all_odo])
Ts = all_pos[:, :3, 3]
pdist = (Ts.reshape(1, -1, 3) - Ts.reshape(-1, 1, 3))**2
pdist = np.sqrt(pdist.sum(-1))
more_than_10 = pdist > self.MIN_DIST
curr_time = inames[0]
while curr_time in inames:
# Find the min index
next_time = np.where(more_than_10[curr_time][curr_time:curr_time + 100])[0]
if len(next_time) == 0:
curr_time += 1
else:
# Follow https://github.com/yewzijian/3DFeatNet/blob/master/scripts_data_processing/kitti/process_kitti_data.m#L44
next_time = next_time[0] + curr_time - 1
if next_time in inames:
self.files.append((drive_id, curr_time, next_time))
curr_time = next_time + 1
# Remove problematic sequence
for item in [
(8, 15, 58),
]:
if item in self.files:
self.files.pop(self.files.index(item))
================================================
FILE: dataloader/split/test_3dmatch.txt
================================================
7-scenes-redkitchen
sun3d-home_at-home_at_scan1_2013_jan_1
sun3d-home_md-home_md_scan9_2012_sep_30
sun3d-hotel_uc-scan3
sun3d-hotel_umd-maryland_hotel1
sun3d-hotel_umd-maryland_hotel3
sun3d-mit_76_studyroom-76-1studyroom2
sun3d-mit_lab_hj-lab_hj_tea_nov_2_2012_scan1_erika
================================================
FILE: dataloader/split/test_kitti.txt
================================================
8
9
10
================================================
FILE: dataloader/split/test_modelnet40.txt
================================================
glass_box/test/glass_box_0172.off
glass_box/test/glass_box_0173.off
glass_box/test/glass_box_0174.off
glass_box/test/glass_box_0175.off
glass_box/test/glass_box_0176.off
glass_box/test/glass_box_0177.off
glass_box/test/glass_box_0178.off
glass_box/test/glass_box_0179.off
glass_box/test/glass_box_0180.off
glass_box/test/glass_box_0181.off
glass_box/test/glass_box_0182.off
glass_box/test/glass_box_0183.off
glass_box/test/glass_box_0184.off
glass_box/test/glass_box_0185.off
glass_box/test/glass_box_0186.off
glass_box/test/glass_box_0187.off
glass_box/test/glass_box_0188.off
glass_box/test/glass_box_0189.off
glass_box/test/glass_box_0190.off
glass_box/test/glass_box_0191.off
glass_box/test/glass_box_0192.off
glass_box/test/glass_box_0193.off
glass_box/test/glass_box_0194.off
glass_box/test/glass_box_0195.off
glass_box/test/glass_box_0196.off
glass_box/test/glass_box_0197.off
glass_box/test/glass_box_0198.off
glass_box/test/glass_box_0199.off
glass_box/test/glass_box_0200.off
glass_box/test/glass_box_0201.off
glass_box/test/glass_box_0202.off
glass_box/test/glass_box_0203.off
glass_box/test/glass_box_0204.off
glass_box/test/glass_box_0205.off
glass_box/test/glass_box_0206.off
glass_box/test/glass_box_0207.off
glass_box/test/glass_box_0208.off
glass_box/test/glass_box_0209.off
glass_box/test/glass_box_0210.off
glass_box/test/glass_box_0211.off
glass_box/test/glass_box_0212.off
glass_box/test/glass_box_0213.off
glass_box/test/glass_box_0214.off
glass_box/test/glass_box_0215.off
glass_box/test/glass_box_0216.off
glass_box/test/glass_box_0217.off
glass_box/test/glass_box_0218.off
glass_box/test/glass_box_0219.off
glass_box/test/glass_box_0220.off
glass_box/test/glass_box_0221.off
glass_box/test/glass_box_0222.off
glass_box/test/glass_box_0223.off
glass_box/test/glass_box_0224.off
glass_box/test/glass_box_0225.off
glass_box/test/glass_box_0226.off
glass_box/test/glass_box_0227.off
glass_box/test/glass_box_0228.off
glass_box/test/glass_box_0229.off
glass_box/test/glass_box_0230.off
glass_box/test/glass_box_0231.off
glass_box/test/glass_box_0232.off
glass_box/test/glass_box_0233.off
glass_box/test/glass_box_0234.off
glass_box/test/glass_box_0235.off
glass_box/test/glass_box_0236.off
glass_box/test/glass_box_0237.off
glass_box/test/glass_box_0238.off
glass_box/test/glass_box_0239.off
glass_box/test/glass_box_0240.off
glass_box/test/glass_box_0241.off
glass_box/test/glass_box_0242.off
glass_box/test/glass_box_0243.off
glass_box/test/glass_box_0244.off
glass_box/test/glass_box_0245.off
glass_box/test/glass_box_0246.off
glass_box/test/glass_box_0247.off
glass_box/test/glass_box_0248.off
glass_box/test/glass_box_0249.off
glass_box/test/glass_box_0250.off
glass_box/test/glass_box_0251.off
glass_box/test/glass_box_0252.off
glass_box/test/glass_box_0253.off
glass_box/test/glass_box_0254.off
glass_box/test/glass_box_0255.off
glass_box/test/glass_box_0256.off
glass_box/test/glass_box_0257.off
glass_box/test/glass_box_0258.off
glass_box/test/glass_box_0259.off
glass_box/test/glass_box_0260.off
glass_box/test/glass_box_0261.off
glass_box/test/glass_box_0262.off
glass_box/test/glass_box_0263.off
glass_box/test/glass_box_0264.off
glass_box/test/glass_box_0265.off
glass_box/test/glass_box_0266.off
glass_box/test/glass_box_0267.off
glass_box/test/glass_box_0268.off
glass_box/test/glass_box_0269.off
glass_box/test/glass_box_0270.off
glass_box/test/glass_box_0271.off
laptop/test/laptop_0150.off
laptop/test/laptop_0151.off
laptop/test/laptop_0152.off
laptop/test/laptop_0153.off
laptop/test/laptop_0154.off
laptop/test/laptop_0155.off
laptop/test/laptop_0156.off
laptop/test/laptop_0157.off
laptop/test/laptop_0158.off
laptop/test/laptop_0159.off
laptop/test/laptop_0160.off
laptop/test/laptop_0161.off
laptop/test/laptop_0162.off
laptop/test/laptop_0163.off
laptop/test/laptop_0164.off
laptop/test/laptop_0165.off
laptop/test/laptop_0166.off
laptop/test/laptop_0167.off
laptop/test/laptop_0168.off
laptop/test/laptop_0169.off
sink/test/sink_0129.off
sink/test/sink_0130.off
sink/test/sink_0131.off
sink/test/sink_0132.off
sink/test/sink_0133.off
sink/test/sink_0134.off
sink/test/sink_0135.off
sink/test/sink_0136.off
sink/test/sink_0137.off
sink/test/sink_0138.off
sink/test/sink_0139.off
sink/test/sink_0140.off
sink/test/sink_0141.off
sink/test/sink_0142.off
sink/test/sink_0143.off
sink/test/sink_0144.off
sink/test/sink_0145.off
sink/test/sink_0146.off
sink/test/sink_0147.off
sink/test/sink_0148.off
night_stand/test/night_stand_0201.off
night_stand/test/night_stand_0202.off
night_stand/test/night_stand_0203.off
night_stand/test/night_stand_0204.off
night_stand/test/night_stand_0205.off
night_stand/test/night_stand_0206.off
night_stand/test/night_stand_0207.off
night_stand/test/night_stand_0208.off
night_stand/test/night_stand_0209.off
night_stand/test/night_stand_0210.off
night_stand/test/night_stand_0211.off
night_stand/test/night_stand_0212.off
night_stand/test/night_stand_0213.off
night_stand/test/night_stand_0214.off
night_stand/test/night_stand_0215.off
night_stand/test/night_stand_0216.off
night_stand/test/night_stand_0217.off
night_stand/test/night_stand_0218.off
night_stand/test/night_stand_0219.off
night_stand/test/night_stand_0220.off
night_stand/test/night_stand_0221.off
night_stand/test/night_stand_0222.off
night_stand/test/night_stand_0223.off
night_stand/test/night_stand_0224.off
night_stand/test/night_stand_0225.off
night_stand/test/night_stand_0226.off
night_stand/test/night_stand_0227.off
night_stand/test/night_stand_0228.off
night_stand/test/night_stand_0229.off
night_stand/test/night_stand_0230.off
night_stand/test/night_stand_0231.off
night_stand/test/night_stand_0232.off
night_stand/test/night_stand_0233.off
night_stand/test/night_stand_0234.off
night_stand/test/night_stand_0235.off
night_stand/test/night_stand_0236.off
night_stand/test/night_stand_0237.off
night_stand/test/night_stand_0238.off
night_stand/test/night_stand_0239.off
night_stand/test/night_stand_0240.off
night_stand/test/night_stand_0241.off
night_stand/test/night_stand_0242.off
night_stand/test/night_stand_0243.off
night_stand/test/night_stand_0244.off
night_stand/test/night_stand_0245.off
night_stand/test/night_stand_0246.off
night_stand/test/night_stand_0247.off
night_stand/test/night_stand_0248.off
night_stand/test/night_stand_0249.off
night_stand/test/night_stand_0250.off
night_stand/test/night_stand_0251.off
night_stand/test/night_stand_0252.off
night_stand/test/night_stand_0253.off
night_stand/test/night_stand_0254.off
night_stand/test/night_stand_0255.off
night_stand/test/night_stand_0256.off
night_stand/test/night_stand_0257.off
night_stand/test/night_stand_0258.off
night_stand/test/night_stand_0259.off
night_stand/test/night_stand_0260.off
night_stand/test/night_stand_0261.off
night_stand/test/night_stand_0262.off
night_stand/test/night_stand_0263.off
night_stand/test/night_stand_0264.off
night_stand/test/night_stand_0265.off
night_stand/test/night_stand_0266.off
night_stand/test/night_stand_0267.off
night_stand/test/night_stand_0268.off
night_stand/test/night_stand_0269.off
night_stand/test/night_stand_0270.off
night_stand/test/night_stand_0271.off
night_stand/test/night_stand_0272.off
night_stand/test/night_stand_0273.off
night_stand/test/night_stand_0274.off
night_stand/test/night_stand_0275.off
night_stand/test/night_stand_0276.off
night_stand/test/night_stand_0277.off
night_stand/test/night_stand_0278.off
night_stand/test/night_stand_0279.off
night_stand/test/night_stand_0280.off
night_stand/test/night_stand_0281.off
night_stand/test/night_stand_0282.off
night_stand/test/night_stand_0283.off
night_stand/test/night_stand_0284.off
night_stand/test/night_stand_0285.off
night_stand/test/night_stand_0286.off
car/test/car_0198.off
car/test/car_0199.off
car/test/car_0200.off
car/test/car_0201.off
car/test/car_0202.off
car/test/car_0203.off
car/test/car_0204.off
car/test/car_0205.off
car/test/car_0206.off
car/test/car_0207.off
car/test/car_0208.off
car/test/car_0209.off
car/test/car_0210.off
car/test/car_0211.off
car/test/car_0212.off
car/test/car_0213.off
car/test/car_0214.off
car/test/car_0215.off
car/test/car_0216.off
car/test/car_0217.off
car/test/car_0218.off
car/test/car_0219.off
car/test/car_0220.off
car/test/car_0221.off
car/test/car_0222.off
car/test/car_0223.off
car/test/car_0224.off
car/test/car_0225.off
car/test/car_0226.off
car/test/car_0227.off
car/test/car_0228.off
car/test/car_0229.off
car/test/car_0230.off
car/test/car_0231.off
car/test/car_0232.off
car/test/car_0233.off
car/test/car_0234.off
car/test/car_0235.off
car/test/car_0236.off
car/test/car_0237.off
car/test/car_0238.off
car/test/car_0239.off
car/test/car_0240.off
car/test/car_0241.off
car/test/car_0242.off
car/test/car_0243.off
car/test/car_0244.off
car/test/car_0245.off
car/test/car_0246.off
car/test/car_0247.off
car/test/car_0248.off
car/test/car_0249.off
car/test/car_0250.off
car/test/car_0251.off
car/test/car_0252.off
car/test/car_0253.off
car/test/car_0254.off
car/test/car_0255.off
car/test/car_0256.off
car/test/car_0257.off
car/test/car_0258.off
car/test/car_0259.off
car/test/car_0260.off
car/test/car_0261.off
car/test/car_0262.off
car/test/car_0263.off
car/test/car_0264.off
car/test/car_0265.off
car/test/car_0266.off
car/test/car_0267.off
car/test/car_0268.off
car/test/car_0269.off
car/test/car_0270.off
car/test/car_0271.off
car/test/car_0272.off
car/test/car_0273.off
car/test/car_0274.off
car/test/car_0275.off
car/test/car_0276.off
car/test/car_0277.off
car/test/car_0278.off
car/test/car_0279.off
car/test/car_0280.off
car/test/car_0281.off
car/test/car_0282.off
car/test/car_0283.off
car/test/car_0284.off
car/test/car_0285.off
car/test/car_0286.off
car/test/car_0287.off
car/test/car_0288.off
car/test/car_0289.off
car/test/car_0290.off
car/test/car_0291.off
car/test/car_0292.off
car/test/car_0293.off
car/test/car_0294.off
car/test/car_0295.off
car/test/car_0296.off
car/test/car_0297.off
dresser/test/dresser_0201.off
dresser/test/dresser_0202.off
dresser/test/dresser_0203.off
dresser/test/dresser_0204.off
dresser/test/dresser_0205.off
dresser/test/dresser_0206.off
dresser/test/dresser_0207.off
dresser/test/dresser_0208.off
dresser/test/dresser_0209.off
dresser/test/dresser_0210.off
dresser/test/dresser_0211.off
dresser/test/dresser_0212.off
dresser/test/dresser_0213.off
dresser/test/dresser_0214.off
dresser/test/dresser_0215.off
dresser/test/dresser_0216.off
dresser/test/dresser_0217.off
dresser/test/dresser_0218.off
dresser/test/dresser_0219.off
dresser/test/dresser_0220.off
dresser/test/dresser_0221.off
dresser/test/dresser_0222.off
dresser/test/dresser_0223.off
dresser/test/dresser_0224.off
dresser/test/dresser_0225.off
dresser/test/dresser_0226.off
dresser/test/dresser_0227.off
dresser/test/dresser_0228.off
dresser/test/dresser_0229.off
dresser/test/dresser_0230.off
dresser/test/dresser_0231.off
dresser/test/dresser_0232.off
dresser/test/dresser_0233.off
dresser/test/dresser_0234.off
dresser/test/dresser_0235.off
dresser/test/dresser_0236.off
dresser/test/dresser_0237.off
dresser/test/dresser_0238.off
dresser/test/dresser_0239.off
dresser/test/dresser_0240.off
dresser/test/dresser_0241.off
dresser/test/dresser_0242.off
dresser/test/dresser_0243.off
dresser/test/dresser_0244.off
dresser/test/dresser_0245.off
dresser/test/dresser_0246.off
dresser/test/dresser_0247.off
dresser/test/dresser_0248.off
dresser/test/dresser_0249.off
dresser/test/dresser_0250.off
dresser/test/dresser_0251.off
dresser/test/dresser_0252.off
dresser/test/dresser_0253.off
dresser/test/dresser_0254.off
dresser/test/dresser_0255.off
dresser/test/dresser_0256.off
dresser/test/dresser_0257.off
dresser/test/dresser_0258.off
dresser/test/dresser_0259.off
dresser/test/dresser_0260.off
dresser/test/dresser_0261.off
dresser/test/dresser_0262.off
dresser/test/dresser_0263.off
dresser/test/dresser_0264.off
dresser/test/dresser_0265.off
dresser/test/dresser_0266.off
dresser/test/dresser_0267.off
dresser/test/dresser_0268.off
dresser/test/dresser_0269.off
dresser/test/dresser_0270.off
dresser/test/dresser_0271.off
dresser/test/dresser_0272.off
dresser/test/dresser_0273.off
dresser/test/dresser_0274.off
dresser/test/dresser_0275.off
dresser/test/dresser_0276.off
dresser/test/dresser_0277.off
dresser/test/dresser_0278.off
dresser/test/dresser_0279.off
dresser/test/dresser_0280.off
dresser/test/dresser_0281.off
dresser/test/dresser_0282.off
dresser/test/dresser_0283.off
dresser/test/dresser_0284.off
dresser/test/dresser_0285.off
dresser/test/dresser_0286.off
toilet/test/toilet_0345.off
toilet/test/toilet_0346.off
toilet/test/toilet_0347.off
toilet/test/toilet_0348.off
toilet/test/toilet_0349.off
toilet/test/toilet_0350.off
toilet/test/toilet_0351.off
toilet/test/toilet_0352.off
toilet/test/toilet_0353.off
toilet/test/toilet_0354.off
toilet/test/toilet_0355.off
toilet/test/toilet_0356.off
toilet/test/toilet_0357.off
toilet/test/toilet_0358.off
toilet/test/toilet_0359.off
toilet/test/toilet_0360.off
toilet/test/toilet_0361.off
toilet/test/toilet_0362.off
toilet/test/toilet_0363.off
toilet/test/toilet_0364.off
toilet/test/toilet_0365.off
toilet/test/toilet_0366.off
toilet/test/toilet_0367.off
toilet/test/toilet_0368.off
toilet/test/toilet_0369.off
toilet/test/toilet_0370.off
toilet/test/toilet_0371.off
toilet/test/toilet_0372.off
toilet/test/toilet_0373.off
toilet/test/toilet_0374.off
toilet/test/toilet_0375.off
toilet/test/toilet_0376.off
toilet/test/toilet_0377.off
toilet/test/toilet_0378.off
toilet/test/toilet_0379.off
toilet/test/toilet_0380.off
toilet/test/toilet_0381.off
toilet/test/toilet_0382.off
toilet/test/toilet_0383.off
toilet/test/toilet_0384.off
toilet/test/toilet_0385.off
toilet/test/toilet_0386.off
toilet/test/toilet_0387.off
toilet/test/toilet_0388.off
toilet/test/toilet_0389.off
toilet/test/toilet_0390.off
toilet/test/toilet_0391.off
toilet/test/toilet_0392.off
toilet/test/toilet_0393.off
toilet/test/toilet_0394.off
toilet/test/toilet_0395.off
toilet/test/toilet_0396.off
toilet/test/toilet_0397.off
toilet/test/toilet_0398.off
toilet/test/toilet_0399.off
toilet/test/toilet_0400.off
toilet/test/toilet_0401.off
toilet/test/toilet_0402.off
toilet/test/toilet_0403.off
toilet/test/toilet_0404.off
toilet/test/toilet_0405.off
toilet/test/toilet_0406.off
toilet/test/toilet_0407.off
toilet/test/toilet_0408.off
toilet/test/toilet_0409.off
toilet/test/toilet_0410.off
toilet/test/toilet_0411.off
toilet/test/toilet_0412.off
toilet/test/toilet_0413.off
toilet/test/toilet_0414.off
toilet/test/toilet_0415.off
toilet/test/toilet_0416.off
toilet/test/toilet_0417.off
toilet/test/toilet_0418.off
toilet/test/toilet_0419.off
toilet/test/toilet_0420.off
toilet/test/toilet_0421.off
toilet/test/toilet_0422.off
toilet/test/toilet_0423.off
toilet/test/toilet_0424.off
toilet/test/toilet_0425.off
toilet/test/toilet_0426.off
toilet/test/toilet_0427.off
toilet/test/toilet_0428.off
toilet/test/toilet_0429.off
toilet/test/toilet_0430.off
toilet/test/toilet_0431.off
toilet/test/toilet_0432.off
toilet/test/toilet_0433.off
toilet/test/toilet_0434.off
toilet/test/toilet_0435.off
toilet/test/toilet_0436.off
toilet/test/toilet_0437.off
toilet/test/toilet_0438.off
toilet/test/toilet_0439.off
toilet/test/toilet_0440.off
toilet/test/toilet_0441.off
toilet/test/toilet_0442.off
toilet/test/toilet_0443.off
toilet/test/toilet_0444.off
curtain/test/curtain_0139.off
curtain/test/curtain_0140.off
curtain/test/curtain_0141.off
curtain/test/curtain_0142.off
curtain/test/curtain_0143.off
curtain/test/curtain_0144.off
curtain/test/curtain_0145.off
curtain/test/curtain_0146.off
curtain/test/curtain_0147.off
curtain/test/curtain_0148.off
curtain/test/curtain_0149.off
curtain/test/curtain_0150.off
curtain/test/curtain_0151.off
curtain/test/curtain_0152.off
curtain/test/curtain_0153.off
curtain/test/curtain_0154.off
curtain/test/curtain_0155.off
curtain/test/curtain_0156.off
curtain/test/curtain_0157.off
curtain/test/curtain_0158.off
wardrobe/test/wardrobe_0088.off
wardrobe/test/wardrobe_0089.off
wardrobe/test/wardrobe_0090.off
wardrobe/test/wardrobe_0091.off
wardrobe/test/wardrobe_0092.off
wardrobe/test/wardrobe_0093.off
wardrobe/test/wardrobe_0094.off
wardrobe/test/wardrobe_0095.off
wardrobe/test/wardrobe_0096.off
wardrobe/test/wardrobe_0097.off
wardrobe/test/wardrobe_0098.off
wardrobe/test/wardrobe_0099.off
wardrobe/test/wardrobe_0100.off
wardrobe/test/wardrobe_0101.off
wardrobe/test/wardrobe_0102.off
wardrobe/test/wardrobe_0103.off
wardrobe/test/wardrobe_0104.off
wardrobe/test/wardrobe_0105.off
wardrobe/test/wardrobe_0106.off
wardrobe/test/wardrobe_0107.off
stool/test/stool_0091.off
stool/test/stool_0092.off
stool/test/stool_0093.off
stool/test/stool_0094.off
stool/test/stool_0095.off
stool/test/stool_0096.off
stool/test/stool_0097.off
stool/test/stool_0098.off
stool/test/stool_0099.off
stool/test/stool_0100.off
stool/test/stool_0101.off
stool/test/stool_0102.off
stool/test/stool_0103.off
stool/test/stool_0104.off
stool/test/stool_0105.off
stool/test/stool_0106.off
stool/test/stool_0107.off
stool/test/stool_0108.off
stool/test/stool_0109.off
stool/test/stool_0110.off
mantel/test/mantel_0285.off
mantel/test/mantel_0286.off
mantel/test/mantel_0287.off
mantel/test/mantel_0288.off
mantel/test/mantel_0289.off
mantel/test/mantel_0290.off
mantel/test/mantel_0291.off
mantel/test/mantel_0292.off
mantel/test/mantel_0293.off
mantel/test/mantel_0294.off
mantel/test/mantel_0295.off
mantel/test/mantel_0296.off
mantel/test/mantel_0297.off
mantel/test/mantel_0298.off
mantel/test/mantel_0299.off
mantel/test/mantel_0300.off
mantel/test/mantel_0301.off
mantel/test/mantel_0302.off
mantel/test/mantel_0303.off
mantel/test/mantel_0304.off
mantel/test/mantel_0305.off
mantel/test/mantel_0306.off
mantel/test/mantel_0307.off
mantel/test/mantel_0308.off
mantel/test/mantel_0309.off
mantel/test/mantel_0310.off
mantel/test/mantel_0311.off
mantel/test/mantel_0312.off
mantel/test/mantel_0313.off
mantel/test/mantel_0314.off
mantel/test/mantel_0315.off
mantel/test/mantel_0316.off
mantel/test/mantel_0317.off
mantel/test/mantel_0318.off
mantel/test/mantel_0319.off
mantel/test/mantel_0320.off
mantel/test/mantel_0321.off
mantel/test/mantel_0322.off
mantel/test/mantel_0323.off
mantel/test/mantel_0324.off
mantel/test/mantel_0325.off
mantel/test/mantel_0326.off
mantel/test/mantel_0327.off
mantel/test/mantel_0328.off
mantel/test/mantel_0329.off
mantel/test/mantel_0330.off
mantel/test/mantel_0331.off
mantel/test/mantel_0332.off
mantel/test/mantel_0333.off
mantel/test/mantel_0334.off
mantel/test/mantel_0335.off
mantel/test/mantel_0336.off
mantel/test/mantel_0337.off
mantel/test/mantel_0338.off
mantel/test/mantel_0339.off
mantel/test/mantel_0340.off
mantel/test/mantel_0341.off
mantel/test/mantel_0342.off
mantel/test/mantel_0343.off
mantel/test/mantel_0344.off
mantel/test/mantel_0345.off
mantel/test/mantel_0346.off
mantel/test/mantel_0347.off
mantel/test/mantel_0348.off
mantel/test/mantel_0349.off
mantel/test/mantel_0350.off
mantel/test/mantel_0351.off
mantel/test/mantel_0352.off
mantel/test/mantel_0353.off
mantel/test/mantel_0354.off
mantel/test/mantel_0355.off
mantel/test/mantel_0356.off
mantel/test/mantel_0357.off
mantel/test/mantel_0358.off
mantel/test/mantel_0359.off
mantel/test/mantel_0360.off
mantel/test/mantel_0361.off
mantel/test/mantel_0362.off
mantel/test/mantel_0363.off
mantel/test/mantel_0364.off
mantel/test/mantel_0365.off
mantel/test/mantel_0366.off
mantel/test/mantel_0367.off
mantel/test/mantel_0368.off
mantel/test/mantel_0369.off
mantel/test/mantel_0370.off
mantel/test/mantel_0371.off
mantel/test/mantel_0372.off
mantel/test/mantel_0373.off
mantel/test/mantel_0374.off
mantel/test/mantel_0375.off
mantel/test/mantel_0376.off
mantel/test/mantel_0377.off
mantel/test/mantel_0378.off
mantel/test/mantel_0379.off
mantel/test/mantel_0380.off
mantel/test/mantel_0381.off
mantel/test/mantel_0382.off
mantel/test/mantel_0383.off
mantel/test/mantel_0384.off
cup/test/cup_0080.off
cup/test/cup_0081.off
cup/test/cup_0082.off
cup/test/cup_0083.off
cup/test/cup_0084.off
cup/test/cup_0085.off
cup/test/cup_0086.off
cup/test/cup_0087.off
cup/test/cup_0088.off
cup/test/cup_0089.off
cup/test/cup_0090.off
cup/test/cup_0091.off
cup/test/cup_0092.off
cup/test/cup_0093.off
cup/test/cup_0094.off
cup/test/cup_0095.off
cup/test/cup_0096.off
cup/test/cup_0097.off
cup/test/cup_0098.off
cup/test/cup_0099.off
radio/test/radio_0105.off
radio/test/radio_0106.off
radio/test/radio_0107.off
radio/test/radio_0108.off
radio/test/radio_0109.off
radio/test/radio_0110.off
radio/test/radio_0111.off
radio/test/radio_0112.off
radio/test/radio_0113.off
radio/test/radio_0114.off
radio/test/radio_0115.off
radio/test/radio_0116.off
radio/test/radio_0117.off
radio/test/radio_0118.off
radio/test/radio_0119.off
radio/test/radio_0120.off
radio/test/radio_0121.off
radio/test/radio_0122.off
radio/test/radio_0123.off
radio/test/radio_0124.off
airplane/test/airplane_0627.off
airplane/test/airplane_0628.off
airplane/test/airplane_0629.off
airplane/test/airplane_0630.off
airplane/test/airplane_0631.off
airplane/test/airplane_0632.off
airplane/test/airplane_0633.off
airplane/test/airplane_0634.off
airplane/test/airplane_0635.off
airplane/test/airplane_0636.off
airplane/test/airplane_0637.off
airplane/test/airplane_0638.off
airplane/test/airplane_0639.off
airplane/test/airplane_0640.off
airplane/test/airplane_0641.off
airplane/test/airplane_0642.off
airplane/test/airplane_0643.off
airplane/test/airplane_0644.off
airplane/test/airplane_0645.off
airplane/test/airplane_0646.off
airplane/test/airplane_0647.off
airplane/test/airplane_0648.off
airplane/test/airplane_0649.off
airplane/test/airplane_0650.off
airplane/test/airplane_0651.off
airplane/test/airplane_0652.off
airplane/test/airplane_0653.off
airplane/test/airplane_0654.off
airplane/test/airplane_0655.off
airplane/test/airplane_0656.off
airplane/test/airplane_0657.off
airplane/test/airplane_0658.off
airplane/test/airplane_0659.off
airplane/test/airplane_0660.off
airplane/test/airplane_0661.off
airplane/test/airplane_0662.off
airplane/test/airplane_0663.off
airplane/test/airplane_0664.off
airplane/test/airplane_0665.off
airplane/test/airplane_0666.off
airplane/test/airplane_0667.off
airplane/test/airplane_0668.off
airplane/test/airplane_0669.off
airplane/test/airplane_0670.off
airplane/test/airplane_0671.off
airplane/test/airplane_0672.off
airplane/test/airplane_0673.off
airplane/test/airplane_0674.off
airplane/test/airplane_0675.off
airplane/test/airplane_0676.off
airplane/test/airplane_0677.off
airplane/test/airplane_0678.off
airplane/test/airplane_0679.off
airplane/test/airplane_0680.off
airplane/test/airplane_0681.off
airplane/test/airplane_0682.off
airplane/test/airplane_0683.off
airplane/test/airplane_0684.off
airplane/test/airplane_0685.off
airplane/test/airplane_0686.off
airplane/test/airplane_0687.off
airplane/test/airplane_0688.off
airplane/test/airplane_0689.off
airplane/test/airplane_0690.off
airplane/test/airplane_0691.off
airplane/test/airplane_0692.off
airplane/test/airplane_0693.off
airplane/test/airplane_0694.off
airplane/test/airplane_0695.off
airplane/test/airplane_0696.off
airplane/test/airplane_0697.off
airplane/test/airplane_0698.off
airplane/test/airplane_0699.off
airplane/test/airplane_0700.off
airplane/test/airplane_0701.off
airplane/test/airplane_0702.off
airplane/test/airplane_0703.off
airplane/test/airplane_0704.off
airplane/test/airplane_0705.off
airplane/test/airplane_0706.off
airplane/test/airplane_0707.off
airplane/test/airplane_0708.off
airplane/test/airplane_0709.off
airplane/test/airplane_0710.off
airplane/test/airplane_0711.off
airplane/test/airplane_0712.off
airplane/test/airplane_0713.off
airplane/test/airplane_0714.off
airplane/test/airplane_0715.off
airplane/test/airplane_0716.off
airplane/test/airplane_0717.off
airplane/test/airplane_0718.off
airplane/test/airplane_0719.off
airplane/test/airplane_0720.off
airplane/test/airplane_0721.off
airplane/test/airplane_0722.off
airplane/test/airplane_0723.off
airplane/test/airplane_0724.off
airplane/test/airplane_0725.off
airplane/test/airplane_0726.off
table/test/table_0393.off
table/test/table_0394.off
table/test/table_0395.off
table/test/table_0396.off
table/test/table_0397.off
table/test/table_0398.off
table/test/table_0399.off
table/test/table_0400.off
table/test/table_0401.off
table/test/table_0402.off
table/test/table_0403.off
table/test/table_0404.off
table/test/table_0405.off
table/test/table_0406.off
table/test/table_0407.off
table/test/table_0408.off
table/test/table_0409.off
table/test/table_0410.off
table/test/table_0411.off
table/test/table_0412.off
table/test/table_0413.off
table/test/table_0414.off
table/test/table_0415.off
table/test/table_0416.off
table/test/table_0417.off
table/test/table_0418.off
table/test/table_0419.off
table/test/table_0420.off
table/test/table_0421.off
table/test/table_0422.off
table/test/table_0423.off
table/test/table_0424.off
table/test/table_0425.off
table/test/table_0426.off
table/test/table_0427.off
table/test/table_0428.off
table/test/table_0429.off
table/test/table_0430.off
table/test/table_0431.off
table/test/table_0432.off
table/test/table_0433.off
table/test/table_0434.off
table/test/table_0435.off
table/test/table_0436.off
table/test/table_0437.off
table/test/table_0438.off
table/test/table_0439.off
table/test/table_0440.off
table/test/table_0441.off
table/test/table_0442.off
table/test/table_0443.off
table/test/table_0444.off
table/test/table_0445.off
table/test/table_0446.off
table/test/table_0447.off
table/test/table_0448.off
table/test/table_0449.off
table/test/table_0450.off
table/test/table_0451.off
table/test/table_0452.off
table/test/table_0453.off
table/test/table_0454.off
table/test/table_0455.off
table/test/table_0456.off
table/test/table_0457.off
table/test/table_0458.off
table/test/table_0459.off
table/test/table_0460.off
table/test/table_0461.off
table/test/table_0462.off
table/test/table_0463.off
table/test/table_0464.off
table/test/table_0465.off
table/test/table_0466.off
table/test/table_0467.off
table/test/table_0468.off
table/test/table_0469.off
table/test/table_0470.off
table/test/table_0471.off
table/test/table_0472.off
table/test/table_0473.off
table/test/table_0474.off
table/test/table_0475.off
table/test/table_0476.off
table/test/table_0477.off
table/test/table_0478.off
table/test/table_0479.off
table/test/table_0480.off
table/test/table_0481.off
table/test/table_0482.off
table/test/table_0483.off
table/test/table_0484.off
table/test/table_0485.off
table/test/table_0486.off
table/test/table_0487.off
table/test/table_0488.off
table/test/table_0489.off
table/test/table_0490.off
table/test/table_0491.off
table/test/table_0492.off
bench/test/bench_0174.off
bench/test/bench_0175.off
bench/test/bench_0176.off
bench/test/bench_0177.off
bench/test/bench_0178.off
bench/test/bench_0179.off
bench/test/bench_0180.off
bench/test/bench_0181.off
bench/test/bench_0182.off
bench/test/bench_0183.off
bench/test/bench_0184.off
bench/test/bench_0185.off
bench/test/bench_0186.off
bench/test/bench_0187.off
bench/test/bench_0188.off
bench/test/bench_0189.off
bench/test/bench_0190.off
bench/test/bench_0191.off
bench/test/bench_0192.off
bench/test/bench_0193.off
plant/test/plant_0241.off
plant/test/plant_0242.off
plant/test/plant_0243.off
plant/test/plant_0244.off
plant/test/plant_0245.off
plant/test/plant_0246.off
plant/test/plant_0247.off
plant/test/plant_0248.off
plant/test/plant_0249.off
plant/test/plant_0250.off
plant/test/plant_0251.off
plant/test/plant_0252.off
plant/test/plant_0253.off
plant/test/plant_0254.off
plant/test/plant_0255.off
plant/test/plant_0256.off
plant/test/plant_0257.off
plant/test/plant_0258.off
plant/test/plant_0259.off
plant/test/plant_0260.off
plant/test/plant_0261.off
plant/test/plant_0262.off
plant/test/plant_0263.off
plant/test/plant_0264.off
plant/test/plant_0265.off
plant/test/plant_0266.off
plant/test/plant_0267.off
plant/test/plant_0268.off
plant/test/plant_0269.off
plant/test/plant_0270.off
plant/test/plant_0271.off
plant/test/plant_0272.off
plant/test/plant_0273.off
plant/test/plant_0274.off
plant/test/plant_0275.off
plant/test/plant_0276.off
plant/test/plant_0277.off
plant/test/plant_0278.off
plant/test/plant_0279.off
plant/test/plant_0280.off
plant/test/plant_0281.off
plant/test/plant_0282.off
plant/test/plant_0283.off
plant/test/plant_0284.off
plant/test/plant_0285.off
plant/test/plant_0286.off
plant/test/plant_0287.off
plant/test/plant_0288.off
plant/test/plant_0289.off
plant/test/plant_0290.off
plant/test/plant_0291.off
plant/test/plant_0292.off
plant/test/plant_0293.off
plant/test/plant_0294.off
plant/test/plant_0295.off
plant/test/plant_0296.off
plant/test/plant_0297.off
plant/test/plant_0298.off
plant/test/plant_0299.off
plant/test/plant_0300.off
plant/test/plant_0301.off
plant/test/plant_0302.off
plant/test/plant_0303.off
plant/test/plant_0304.off
plant/test/plant_0305.off
plant/test/plant_0306.off
plant/test/plant_0307.off
plant/test/plant_0308.off
plant/test/plant_0309.off
plant/test/plant_0310.off
plant/test/plant_0311.off
plant/test/plant_0312.off
plant/test/plant_0313.off
plant/test/plant_0314.off
plant/test/plant_0315.off
plant/test/plant_0316.off
plant/test/plant_0317.off
plant/test/plant_0318.off
plant/test/plant_0319.off
plant/test/plant_0320.off
plant/test/plant_0321.off
plant/test/plant_0322.off
plant/test/plant_0323.off
plant/test/plant_0324.off
plant/test/plant_0325.off
plant/test/plant_0326.off
plant/test/plant_0327.off
plant/test/plant_0328.off
plant/test/plant_0329.off
plant/test/plant_0330.off
plant/test/plant_0331.off
plant/test/plant_0332.off
plant/test/plant_0333.off
plant/test/plant_0334.off
plant/test/plant_0335.off
plant/test/plant_0336.off
plant/test/plant_0337.off
plant/test/plant_0338.off
plant/test/plant_0339.off
plant/test/plant_0340.off
chair/test/chair_0890.off
chair/test/chair_0891.off
chair/test/chair_0892.off
chair/test/chair_0893.off
chair/test/chair_0894.off
chair/test/chair_0895.off
chair/test/chair_0896.off
chair/test/chair_0897.off
chair/test/chair_0898.off
chair/test/chair_0899.off
chair/test/chair_0900.off
chair/test/chair_0901.off
chair/test/chair_0902.off
chair/test/chair_0903.off
chair/test/chair_0904.off
chair/test/chair_0905.off
chair/test/chair_0906.off
chair/test/chair_0907.off
chair/test/chair_0908.off
chair/test/chair_0909.off
chair/test/chair_0910.off
chair/test/chair_0911.off
chair/test/chair_0912.off
chair/test/chair_0913.off
chair/test/chair_0914.off
chair/test/chair_0915.off
chair/test/chair_0916.off
chair/test/chair_0917.off
chair/test/chair_0918.off
chair/test/chair_0919.off
chair/test/chair_0920.off
chair/test/chair_0921.off
chair/test/chair_0922.off
chair/test/chair_0923.off
chair/test/chair_0924.off
chair/test/chair_0925.off
chair/test/chair_0926.off
chair/test/chair_0927.off
chair/test/chair_0928.off
chair/test/chair_0929.off
chair/test/chair_0930.off
chair/test/chair_0931.off
chair/test/chair_0932.off
chair/test/chair_0933.off
chair/test/chair_0934.off
chair/test/chair_0935.off
chair/test/chair_0936.off
chair/test/chair_0937.off
chair/test/chair_0938.off
chair/test/chair_0939.off
chair/test/chair_0940.off
chair/test/chair_0941.off
chair/test/chair_0942.off
chair/test/chair_0943.off
chair/test/chair_0944.off
chair/test/chair_0945.off
chair/test/chair_0946.off
chair/test/chair_0947.off
chair/test/chair_0948.off
chair/test/chair_0949.off
chair/test/chair_0950.off
chair/test/chair_0951.off
chair/test/chair_0952.off
chair/test/chair_0953.off
chair/test/chair_0954.off
chair/test/chair_0955.off
chair/test/chair_0956.off
chair/test/chair_0957.off
chair/test/chair_0958.off
chair/test/chair_0959.off
chair/test/chair_0960.off
chair/test/chair_0961.off
chair/test/chair_0962.off
chair/test/chair_0963.off
chair/test/chair_0964.off
chair/test/chair_0965.off
chair/test/chair_0966.off
chair/test/chair_0967.off
chair/test/chair_0968.off
chair/test/chair_0969.off
chair/test/chair_0970.off
chair/test/chair_0971.off
chair/test/chair_0972.off
chair/test/chair_0973.off
chair/test/chair_0974.off
chair/test/chair_0975.off
chair/test/chair_0976.off
chair/test/chair_0977.off
chair/test/chair_0978.off
chair/test/chair_0979.off
chair/test/chair_0980.off
chair/test/chair_0981.off
chair/test/chair_0982.off
chair/test/chair_0983.off
chair/test/chair_0984.off
chair/test/chair_0985.off
chair/test/chair_0986.off
chair/test/chair_0987.off
chair/test/chair_0988.off
chair/test/chair_0989.off
vase/test/vase_0476.off
vase/test/vase_0477.off
vase/test/vase_0478.off
vase/test/vase_0479.off
vase/test/vase_0480.off
vase/test/vase_0481.off
vase/test/vase_0482.off
vase/test/vase_0483.off
vase/test/vase_0484.off
vase/test/vase_0485.off
vase/test/vase_0486.off
vase/test/vase_0487.off
vase/test/vase_0488.off
vase/test/vase_0489.off
vase/test/vase_0490.off
vase/test/vase_0491.off
vase/test/vase_0492.off
vase/test/vase_0493.off
vase/test/vase_0494.off
vase/test/vase_0495.off
vase/test/vase_0496.off
vase/test/vase_0497.off
vase/test/vase_0498.off
vase/test/vase_0499.off
vase/test/vase_0500.off
vase/test/vase_0501.off
vase/test/vase_0502.off
vase/test/vase_0503.off
vase/test/vase_0504.off
vase/test/vase_0505.off
vase/test/vase_0506.off
vase/test/vase_0507.off
vase/test/vase_0508.off
vase/test/vase_0509.off
vase/test/vase_0510.off
vase/test/vase_0511.off
vase/test/vase_0512.off
vase/test/vase_0513.off
vase/test/vase_0514.off
vase/test/vase_0515.off
vase/test/vase_0516.off
vase/test/vase_0517.off
vase/test/vase_0518.off
vase/test/vase_0519.off
vase/test/vase_0520.off
vase/test/vase_0521.off
vase/test/vase_0522.off
vase/test/vase_0523.off
vase/test/vase_0524.off
vase/test/vase_0525.off
vase/test/vase_0526.off
vase/test/vase_0527.off
vase/test/vase_0528.off
vase/test/vase_0529.off
vase/test/vase_0530.off
vase/test/vase_0531.off
vase/test/vase_0532.off
vase/test/vase_0533.off
vase/test/vase_0534.off
vase/test/vase_0535.off
vase/test/vase_0536.off
vase/test/vase_0537.off
vase/test/vase_0538.off
vase/test/vase_0539.off
vase/test/vase_0540.off
vase/test/vase_0541.off
vase/test/vase_0542.off
vase/test/vase_0543.off
vase/test/vase_0544.off
vase/test/vase_0545.off
vase/test/vase_0546.off
vase/test/vase_0547.off
vase/test/vase_0548.off
vase/test/vase_0549.off
vase/test/vase_0550.off
vase/test/vase_0551.off
vase/test/vase_0552.off
vase/test/vase_0553.off
vase/test/vase_0554.off
vase/test/vase_0555.off
vase/test/vase_0556.off
vase/test/vase_0557.off
vase/test/vase_0558.off
vase/test/vase_0559.off
vase/test/vase_0560.off
vase/test/vase_0561.off
vase/test/vase_0562.off
vase/test/vase_0563.off
vase/test/vase_0564.off
vase/test/vase_0565.off
vase/test/vase_0566.off
vase/test/vase_0567.off
vase/test/vase_0568.off
vase/test/vase_0569.off
vase/test/vase_0570.off
vase/test/vase_0571.off
vase/test/vase_0572.off
vase/test/vase_0573.off
vase/test/vase_0574.off
vase/test/vase_0575.off
bookshelf/test/bookshelf_0573.off
bookshelf/test/bookshelf_0574.off
bookshelf/test/bookshelf_0575.off
bookshelf/test/bookshelf_0576.off
bookshelf/test/bookshelf_0577.off
bookshelf/test/bookshelf_0578.off
bookshelf/test/bookshelf_0579.off
bookshelf/test/bookshelf_0580.off
bookshelf/test/bookshelf_0581.off
bookshelf/test/bookshelf_0582.off
bookshelf/test/bookshelf_0583.off
bookshelf/test/bookshelf_0584.off
bookshelf/test/bookshelf_0585.off
bookshelf/test/bookshelf_0586.off
bookshelf/test/bookshelf_0587.off
bookshelf/test/bookshelf_0588.off
bookshelf/test/bookshelf_0589.off
bookshelf/test/bookshelf_0590.off
bookshelf/test/bookshelf_0591.off
bookshelf/test/bookshelf_0592.off
bookshelf/test/bookshelf_0593.off
bookshelf/test/bookshelf_0594.off
bookshelf/test/bookshelf_0595.off
bookshelf/test/bookshelf_0596.off
bookshelf/test/bookshelf_0597.off
bookshelf/test/bookshelf_0598.off
bookshelf/test/bookshelf_0599.off
bookshelf/test/bookshelf_0600.off
bookshelf/test/bookshelf_0601.off
bookshelf/test/bookshelf_0602.off
bookshelf/test/bookshelf_0603.off
bookshelf/test/bookshelf_0604.off
bookshelf/test/bookshelf_0605.off
bookshelf/test/bookshelf_0606.off
bookshelf/test/bookshelf_0607.off
bookshelf/test/bookshelf_0608.off
bookshelf/test/bookshelf_0609.off
bookshelf/test/bookshelf_0610.off
bookshelf/test/bookshelf_0611.off
bookshelf/test/bookshelf_0612.off
bookshelf/test/bookshelf_0613.off
bookshelf/test/bookshelf_0614.off
bookshelf/test/bookshelf_0615.off
bookshelf/test/bookshelf_0616.off
bookshelf/test/bookshelf_0617.off
bookshelf/test/bookshelf_0618.off
bookshelf/test/bookshelf_0619.off
bookshelf/test/bookshelf_0620.off
bookshelf/test/bookshelf_0621.off
bookshelf/test/bookshelf_0622.off
bookshelf/test/bookshelf_0623.off
bookshelf/test/bookshelf_0624.off
bookshelf/test/bookshelf_0625.off
bookshelf/test/bookshelf_0626.off
bookshelf/test/bookshelf_0627.off
bookshelf/test/bookshelf_0628.off
bookshelf/test/bookshelf_0629.off
bookshelf/test/bookshelf_0630.off
bookshelf/test/bookshelf_0631.off
bookshelf/test/bookshelf_0632.off
bookshelf/test/bookshelf_0633.off
bookshelf/test/bookshelf_0634.off
bookshelf/test/bookshelf_0635.off
bookshelf/test/bookshelf_0636.off
bookshelf/test/bookshelf_0637.off
bookshelf/test/bookshelf_0638.off
bookshelf/test/bookshelf_0639.off
bookshelf/test/bookshelf_0640.off
bookshelf/test/bookshelf_0641.off
bookshelf/test/bookshelf_0642.off
bookshelf/test/bookshelf_0643.off
bookshelf/test/bookshelf_0644.off
bookshelf/test/bookshelf_0645.off
bookshelf/test/bookshelf_0646.off
bookshelf/test/bookshelf_0647.off
bookshelf/test/bookshelf_0648.off
bookshelf/test/bookshelf_0649.off
bookshelf/test/bookshelf_0650.off
bookshelf/test/bookshelf_0651.off
bookshelf/test/bookshelf_0652.off
bookshelf/test/bookshelf_0653.off
bookshelf/test/bookshelf_0654.off
bookshelf/test/bookshelf_0655.off
bookshelf/test/bookshelf_0656.off
bookshelf/test/bookshelf_0657.off
bookshelf/test/bookshelf_0658.off
bookshelf/test/bookshelf_0659.off
bookshelf/test/bookshelf_0660.off
bookshelf/test/bookshelf_0661.off
bookshelf/test/bookshelf_0662.off
bookshelf/test/bookshelf_0663.off
bookshelf/test/bookshelf_0664.off
bookshelf/test/bookshelf_0665.off
bookshelf/test/bookshelf_0666.off
bookshelf/test/bookshelf_0667.off
bookshelf/test/bookshelf_0668.off
bookshelf/test/bookshelf_0669.off
bookshelf/test/bookshelf_0670.off
bookshelf/test/bookshelf_0671.off
bookshelf/test/bookshelf_0672.off
guitar/test/guitar_0156.off
guitar/test/guitar_0157.off
guitar/test/guitar_0158.off
guitar/test/guitar_0159.off
guitar/test/guitar_0160.off
guitar/test/guitar_0161.off
guitar/test/guitar_0162.off
guitar/test/guitar_0163.off
guitar/test/guitar_0164.off
guitar/test/guitar_0165.off
guitar/test/guitar_0166.off
guitar/test/guitar_0167.off
guitar/test/guitar_0168.off
guitar/test/guitar_0169.off
guitar/test/guitar_0170.off
guitar/test/guitar_0171.off
guitar/test/guitar_0172.off
guitar/test/guitar_0173.off
guitar/test/guitar_0174.off
guitar/test/guitar_0175.off
guitar/test/guitar_0176.off
guitar/test/guitar_0177.off
guitar/test/guitar_0178.off
guitar/test/guitar_0179.off
guitar/test/guitar_0180.off
guitar/test/guitar_0181.off
guitar/test/guitar_0182.off
guitar/test/guitar_0183.off
guitar/test/guitar_0184.off
guitar/test/guitar_0185.off
guitar/test/guitar_0186.off
guitar/test/guitar_0187.off
guitar/test/guitar_0188.off
guitar/test/guitar_0189.off
guitar/test/guitar_0190.off
guitar/test/guitar_0191.off
guitar/test/guitar_0192.off
guitar/test/guitar_0193.off
guitar/test/guitar_0194.off
guitar/test/guitar_0195.off
guitar/test/guitar_0196.off
guitar/test/guitar_0197.off
guitar/test/guitar_0198.off
guitar/test/guitar_0199.off
guitar/test/guitar_0200.off
guitar/test/guitar_0201.off
guitar/test/guitar_0202.off
guitar/test/guitar_0203.off
guitar/test/guitar_0204.off
guitar/test/guitar_0205.off
guitar/test/guitar_0206.off
guitar/test/guitar_0207.off
guitar/test/guitar_0208.off
guitar/test/guitar_0209.off
guitar/test/guitar_0210.off
guitar/test/guitar_0211.off
guitar/test/guitar_0212.off
guitar/test/guitar_0213.off
guitar/test/guitar_0214.off
guitar/test/guitar_0215.off
guitar/test/guitar_0216.off
guitar/test/guitar_0217.off
guitar/test/guitar_0218.off
guitar/test/guitar_0219.off
guitar/test/guitar_0220.off
guitar/test/guitar_0221.off
guitar/test/guitar_0222.off
guitar/test/guitar_0223.off
guitar/test/guitar_0224.off
guitar/test/guitar_0225.off
guitar/test/guitar_0226.off
guitar/test/guitar_0227.off
guitar/test/guitar_0228.off
guitar/test/guitar_0229.off
guitar/test/guitar_0230.off
guitar/test/guitar_0231.off
guitar/test/guitar_0232.off
guitar/test/guitar_0233.off
guitar/test/guitar_0234.off
guitar/test/guitar_0235.off
guitar/test/guitar_0236.off
guitar/test/guitar_0237.off
guitar/test/guitar_0238.off
guitar/test/guitar_0239.off
guitar/test/guitar_0240.off
guitar/test/guitar_0241.off
guitar/test/guitar_0242.off
guitar/test/guitar_0243.off
guitar/test/guitar_0244.off
guitar/test/guitar_0245.off
guitar/test/guitar_0246.off
guitar/test/guitar_0247.off
guitar/test/guitar_0248.off
guitar/test/guitar_0249.off
guitar/test/guitar_0250.off
guitar/test/guitar_0251.off
guitar/test/guitar_0252.off
guitar/test/guitar_0253.off
guitar/test/guitar_0254.off
guitar/test/guitar_0255.off
tv_stand/test/tv_stand_0268.off
tv_stand/test/tv_stand_0269.off
tv_stand/test/tv_stand_0270.off
tv_stand/test/tv_stand_0271.off
tv_stand/test/tv_stand_0272.off
tv_stand/test/tv_stand_0273.off
tv_stand/test/tv_stand_0274.off
tv_stand/test/tv_stand_0275.off
tv_stand/test/tv_stand_0276.off
tv_stand/test/tv_stand_0277.off
tv_stand/test/tv_stand_0278.off
tv_stand/test/tv_stand_0279.off
tv_stand/test/tv_stand_0280.off
tv_stand/test/tv_stand_0281.off
tv_stand/test/tv_stand_0282.off
tv_stand/test/tv_stand_0283.off
tv_stand/test/tv_stand_0284.off
tv_stand/test/tv_stand_0285.off
tv_stand/test/tv_stand_0286.off
tv_stand/test/tv_stand_0287.off
tv_stand/test/tv_stand_0288.off
tv_stand/test/tv_stand_0289.off
tv_stand/test/tv_stand_0290.off
tv_stand/test/tv_stand_0291.off
tv_stand/test/tv_stand_0292.off
tv_stand/test/tv_stand_0293.off
tv_stand/test/tv_stand_0294.off
tv_stand/test/tv_stand_0295.off
tv_stand/test/tv_stand_0296.off
tv_stand/test/tv_stand_0297.off
tv_stand/test/tv_stand_0298.off
tv_stand/test/tv_stand_0299.off
tv_stand/test/tv_stand_0300.off
tv_stand/test/tv_stand_0301.off
tv_stand/test/tv_stand_0302.off
tv_stand/test/tv_stand_0303.off
tv_stand/test/tv_stand_0304.off
tv_stand/test/tv_stand_0305.off
tv_stand/test/tv_stand_0306.off
tv_stand/test/tv_stand_0307.off
tv_stand/test/tv_stand_0308.off
tv_stand/test/tv_stand_0309.off
tv_stand/test/tv_stand_0310.off
tv_stand/test/tv_stand_0311.off
tv_stand/test/tv_stand_0312.off
tv_stand/test/tv_stand_0313.off
tv_stand/test/tv_stand_0314.off
tv_stand/test/tv_stand_0315.off
tv_stand/test/tv_stand_0316.off
tv_stand/test/tv_stand_0317.off
tv_stand/test/tv_stand_0318.off
tv_stand/test/tv_stand_0319.off
tv_stand/test/tv_stand_0320.off
tv_stand/test/tv_stand_0321.off
tv_stand/test/tv_stand_0322.off
tv_stand/test/tv_stand_0323.off
tv_stand/test/tv_stand_0324.off
tv_stand/test/tv_stand_0325.off
tv_stand/test/tv_stand_0326.off
tv_stand/test/tv_stand_0327.off
tv_stand/test/tv_stand_0328.off
tv_stand/test/tv_stand_0329.off
tv_stand/test/tv_stand_0330.off
tv_stand/test/tv_stand_0331.off
tv_stand/test/tv_stand_0332.off
tv_stand/test/tv_stand_0333.off
tv_stand/test/tv_stand_0334.off
tv_stand/test/tv_stand_0335.off
tv_stand/test/tv_stand_0336.off
tv_stand/test/tv_stand_0337.off
tv_stand/test/tv_stand_0338.off
tv_stand/test/tv_stand_0339.off
tv_stand/test/tv_stand_0340.off
tv_stand/test/tv_stand_0341.off
tv_stand/test/tv_stand_0342.off
tv_stand/test/tv_stand_0343.off
tv_stand/test/tv_stand_0344.off
tv_stand/test/tv_stand_0345.off
tv_stand/test/tv_stand_0346.off
tv_stand/test/tv_stand_0347.off
tv_stand/test/tv_stand_0348.off
tv_stand/test/tv_stand_0349.off
tv_stand/test/tv_stand_0350.off
tv_stand/test/tv_stand_0351.off
tv_stand/test/tv_stand_0352.off
tv_stand/test/tv_stand_0353.off
tv_stand/test/tv_stand_0354.off
tv_stand/test/tv_stand_0355.off
tv_stand/test/tv_stand_0356.off
tv_stand/test/tv_stand_0357.off
tv_stand/test/tv_stand_0358.off
tv_stand/test/tv_stand_0359.off
tv_stand/test/tv_stand_0360.off
tv_stand/test/tv_stand_0361.off
tv_stand/test/tv_stand_0362.off
tv_stand/test/tv_stand_0363.off
tv_stand/test/tv_stand_0364.off
tv_stand/test/tv_stand_0365.off
tv_stand/test/tv_stand_0366.off
tv_stand/test/tv_stand_0367.off
bathtub/test/bathtub_0107.off
bathtub/test/bathtub_0108.off
bathtub/test/bathtub_0109.off
bathtub/test/bathtub_0110.off
bathtub/test/bathtub_0111.off
bathtub/test/bathtub_0112.off
bathtub/test/bathtub_0113.off
bathtub/test/bathtub_0114.off
bathtub/test/bathtub_0115.off
bathtub/test/bathtub_0116.off
bathtub/test/bathtub_0117.off
bathtub/test/bathtub_0118.off
bathtub/test/bathtub_0119.off
bathtub/test/bathtub_0120.off
bathtub/test/bathtub_0121.off
bathtub/test/bathtub_0122.off
bathtub/test/bathtub_0123.off
bathtub/test/bathtub_0124.off
bathtub/test/bathtub_0125.off
bathtub/test/bathtub_0126.off
bathtub/test/bathtub_0127.off
bathtub/test/bathtub_0128.off
bathtub/test/bathtub_0129.off
bathtub/test/bathtub_0130.off
bathtub/test/bathtub_0131.off
bathtub/test/bathtub_0132.off
bathtub/test/bathtub_0133.off
bathtub/test/bathtub_0134.off
bathtub/test/bathtub_0135.off
bathtub/test/bathtub_0136.off
bathtub/test/bathtub_0137.off
bathtub/test/bathtub_0138.off
bathtub/test/bathtub_0139.off
bathtub/test/bathtub_0140.off
bathtub/test/bathtub_0141.off
bathtub/test/bathtub_0142.off
bathtub/test/bathtub_0143.off
bathtub/test/bathtub_0144.off
bathtub/test/bathtub_0145.off
bathtub/test/bathtub_0146.off
bathtub/test/bathtub_0147.off
bathtub/test/bathtub_0148.off
bathtub/test/bathtub_0149.off
bathtub/test/bathtub_0150.off
bathtub/test/bathtub_0151.off
bathtub/test/bathtub_0152.off
bathtub/test/bathtub_0153.off
bathtub/test/bathtub_0154.off
bathtub/test/bathtub_0155.off
bathtub/test/bathtub_0156.off
monitor/test/monitor_0466.off
monitor/test/monitor_0467.off
monitor/test/monitor_0468.off
monitor/test/monitor_0469.off
monitor/test/monitor_0470.off
monitor/test/monitor_0471.off
monitor/test/monitor_0472.off
monitor/test/monitor_0473.off
monitor/test/monitor_0474.off
monitor/test/monitor_0475.off
monitor/test/monitor_0476.off
monitor/test/monitor_0477.off
monitor/test/monitor_0478.off
monitor/test/monitor_0479.off
monitor/test/monitor_0480.off
monitor/test/monitor_0481.off
monitor/test/monitor_0482.off
monitor/test/monitor_0483.off
monitor/test/monitor_0484.off
monitor/test/monitor_0485.off
monitor/test/monitor_0486.off
monitor/test/monitor_0487.off
monitor/test/monitor_0488.off
monitor/test/monitor_0489.off
monitor/test/monitor_0490.off
monitor/test/monitor_0491.off
monitor/test/monitor_0492.off
monitor/test/monitor_0493.off
monitor/test/monitor_0494.off
monitor/test/monitor_0495.off
monitor/test/monitor_0496.off
monitor/test/monitor_0497.off
monitor/test/monitor_0498.off
monitor/test/monitor_0499.off
monitor/test/monitor_0500.off
monitor/test/monitor_0501.off
monitor/test/monitor_0502.off
monitor/test/monitor_0503.off
monitor/test/monitor_0504.off
monitor/test/monitor_0505.off
monitor/test/monitor_0506.off
monitor/test/monitor_0507.off
monitor/test/monitor_0508.off
monitor/test/monitor_0509.off
monitor/test/monitor_0510.off
monitor/test/monitor_0511.off
monitor/test/monitor_0512.off
monitor/test/monitor_0513.off
monitor/test/monitor_0514.off
monitor/test/monitor_0515.off
monitor/test/monitor_0516.off
monitor/test/monitor_0517.off
monitor/test/monitor_0518.off
monitor/test/monitor_0519.off
monitor/test/monitor_0520.off
monitor/test/monitor_0521.off
monitor/test/monitor_0522.off
monitor/test/monitor_0523.off
monitor/test/monitor_0524.off
monitor/test/monitor_0525.off
monitor/test/monitor_0526.off
monitor/test/monitor_0527.off
monitor/test/monitor_0528.off
monitor/test/monitor_0529.off
monitor/test/monitor_0530.off
monitor/test/monitor_0531.off
monitor/test/monitor_0532.off
monitor/test/monitor_0533.off
monitor/test/monitor_0534.off
monitor/test/monitor_0535.off
monitor/test/monitor_0536.off
monitor/test/monitor_0537.off
monitor/test/monitor_0538.off
monitor/test/monitor_0539.off
monitor/test/monitor_0540.off
monitor/test/monitor_0541.off
monitor/test/monitor_0542.off
monitor/test/monitor_0543.off
monitor/test/monitor_0544.off
monitor/test/monitor_0545.off
monitor/test/monitor_0546.off
monitor/test/monitor_0547.off
monitor/test/monitor_0548.off
monitor/test/monitor_0549.off
monitor/test/monitor_0550.off
monitor/test/monitor_0551.off
monitor/test/monitor_0552.off
monitor/test/monitor_0553.off
monitor/test/monitor_0554.off
monitor/test/monitor_0555.off
monitor/test/monitor_0556.off
monitor/test/monitor_0557.off
monitor/test/monitor_0558.off
monitor/test/monitor_0559.off
monitor/test/monitor_0560.off
monitor/test/monitor_0561.off
monitor/test/monitor_0562.off
monitor/test/monitor_0563.off
monitor/test/monitor_0564.off
monitor/test/monitor_0565.off
bottle/test/bottle_0336.off
bottle/test/bottle_0337.off
bottle/test/bottle_0338.off
bottle/test/bottle_0339.off
bottle/test/bottle_0340.off
bottle/test/bottle_0341.off
bottle/test/bottle_0342.off
bottle/test/bottle_0343.off
bottle/test/bottle_0344.off
bottle/test/bottle_0345.off
bottle/test/bottle_0346.off
bottle/test/bottle_0347.off
bottle/test/bottle_0348.off
bottle/test/bottle_0349.off
bottle/test/bottle_0350.off
bottle/test/bottle_0351.off
bottle/test/bottle_0352.off
bottle/test/bottle_0353.off
bottle/test/bottle_0354.off
bottle/test/bottle_0355.off
bottle/test/bottle_0356.off
bottle/test/bottle_0357.off
bottle/test/bottle_0358.off
bottle/test/bottle_0359.off
bottle/test/bottle_0360.off
bottle/test/bottle_0361.off
bottle/test/bottle_0362.off
bottle/test/bottle_0363.off
bottle/test/bottle_0364.off
bottle/test/bottle_0365.off
bottle/test/bottle_0366.off
bottle/test/bottle_0367.off
bottle/test/bottle_0368.off
bottle/test/bottle_0369.off
bottle/test/bottle_0370.off
bottle/test/bottle_0371.off
bottle/test/bottle_0372.off
bottle/test/bottle_0373.off
bottle/test/bottle_0374.off
bottle/test/bottle_0375.off
bottle/test/bottle_0376.off
bottle/test/bottle_0377.off
bottle/test/bottle_0378.off
bottle/test/bottle_0379.off
bottle/test/bottle_0380.off
bottle/test/bottle_0381.off
bottle/test/bottle_0382.off
bottle/test/bottle_0383.off
bottle/test/bottle_0384.off
bottle/test/bottle_0385.off
bottle/test/bottle_0386.off
bottle/test/bottle_0387.off
bottle/test/bottle_0388.off
bottle/test/bottle_0389.off
bottle/test/bottle_0390.off
bottle/test/bottle_0391.off
bottle/test/bottle_0392.off
bottle/test/bottle_0393.off
bottle/test/bottle_0394.off
bottle/test/bottle_0395.off
bottle/test/bottle_0396.off
bottle/test/bottle_0397.off
bottle/test/bottle_0398.off
bottle/test/bottle_0399.off
bottle/test/bottle_0400.off
bottle/test/bottle_0401.off
bottle/test/bottle_0402.off
bottle/test/bottle_0403.off
bottle/test/bottle_0404.off
bottle/test/bottle_0405.off
bottle/test/bottle_0406.off
bottle/test/bottle_0407.off
bottle/test/bottle_0408.off
bottle/test/bottle_0409.off
bottle/test/bottle_0410.off
bottle/test/bottle_0411.off
bottle/test/bottle_0412.off
bottle/test/bottle_0413.off
bottle/test/bottle_0414.off
bottle/test/bottle_0415.off
bottle/test/bottle_0416.off
bottle/test/bottle_0417.off
bottle/test/bottle_0418.off
bottle/test/bottle_0419.off
bottle/test/bottle_0420.off
bottle/test/bottle_0421.off
bottle/test/bottle_0422.off
bottle/test/bottle_0423.off
bottle/test/bottle_0424.off
bottle/test/bottle_0425.off
bottle/test/bottle_0426.off
bottle/test/bottle_0427.off
bottle/test/bottle_0428.off
bottle/test/bottle_0429.off
bottle/test/bottle_0430.off
bottle/test/bottle_0431.off
bottle/test/bottle_0432.off
bottle/test/bottle_0433.off
bottle/test/bottle_0434.off
bottle/test/bottle_0435.off
bowl/test/bowl_0065.off
bowl/test/bowl_0066.off
bowl/test/bowl_0067.off
bowl/test/bowl_0068.off
bowl/test/bowl_0069.off
bowl/test/bowl_0070.off
bowl/test/bowl_0071.off
bowl/test/bowl_0072.off
bowl/test/bowl_0073.off
bowl/test/bowl_0074.off
bowl/test/bowl_0075.off
bowl/test/bowl_0076.off
bowl/test/bowl_0077.off
bowl/test/bowl_0078.off
bowl/test/bowl_0079.off
bowl/test/bowl_0080.off
bowl/test/bowl_0081.off
bowl/test/bowl_0082.off
bowl/test/bowl_0083.off
bowl/test/bowl_0084.off
keyboard/test/keyboard_0146.off
keyboard/test/keyboard_0147.off
keyboard/test/keyboard_0148.off
keyboard/test/keyboard_0149.off
keyboard/test/keyboard_0150.off
keyboard/test/keyboard_0151.off
keyboard/test/keyboard_0152.off
keyboard/test/keyboard_0153.off
keyboard/test/keyboard_0154.off
keyboard/test/keyboard_0155.off
keyboard/test/keyboard_0156.off
keyboard/test/keyboard_0157.off
keyboard/test/keyboard_0158.off
keyboard/test/keyboard_0159.off
keyboard/test/keyboard_0160.off
keyboard/test/keyboard_0161.off
keyboard/test/keyboard_0162.off
keyboard/test/keyboard_0163.off
keyboard/test/keyboard_0164.off
keyboard/test/keyboard_0165.off
desk/test/desk_0201.off
desk/test/desk_0202.off
desk/test/desk_0203.off
desk/test/desk_0204.off
desk/test/desk_0205.off
desk/test/desk_0206.off
desk/test/desk_0207.off
desk/test/desk_0208.off
desk/test/desk_0209.off
desk/test/desk_0210.off
desk/test/desk_0211.off
desk/test/desk_0212.off
desk/test/desk_0213.off
desk/test/desk_0214.off
desk/test/desk_0215.off
desk/test/desk_0216.off
desk/test/desk_0217.off
desk/test/desk_0218.off
desk/test/desk_0219.off
desk/test/desk_0220.off
desk/test/desk_0221.off
desk/test/desk_0222.off
desk/test/desk_0223.off
desk/test/desk_0224.off
desk/test/desk_0225.off
desk/test/desk_0226.off
desk/test/desk_0227.off
desk/test/desk_0228.off
desk/test/desk_0229.off
desk/test/desk_0230.off
desk/test/desk_0231.off
desk/test/desk_0232.off
desk/test/desk_0233.off
desk/test/desk_0234.off
desk/test/desk_0235.off
desk/test/desk_0236.off
desk/test/desk_0237.off
desk/test/desk_0238.off
desk/test/desk_0239.off
desk/test/desk_0240.off
desk/test/desk_0241.off
desk/test/desk_0242.off
desk/test/desk_0243.off
desk/test/desk_0244.off
desk/test/desk_0245.off
desk/test/desk_0246.off
desk/test/desk_0247.off
desk/test/desk_0248.off
desk/test/desk_0249.off
desk/test/desk_0250.off
desk/test/desk_0251.off
desk/test/desk_0252.off
desk/test/desk_0253.off
desk/test/desk_0254.off
desk/test/desk_0255.off
desk/test/desk_0256.off
desk/test/desk_0257.off
desk/test/desk_0258.off
desk/test/desk_0259.off
desk/test/desk_0260.off
desk/test/desk_0261.off
desk/test/desk_0262.off
desk/test/desk_0263.off
desk/test/desk_0264.off
desk/test/desk_0265.off
desk/test/desk_0266.off
desk/test/desk_0267.off
desk/test/desk_0268.off
desk/test/desk_0269.off
desk/test/desk_0270.off
desk/test/desk_0271.off
desk/test/desk_0272.off
desk/test/desk_0273.off
desk/test/desk_0274.off
desk/test/desk_0275.off
desk/test/desk_0276.off
desk/test/desk_0277.off
desk/test/desk_0278.off
desk/test/desk_0279.off
desk/test/desk_0280.off
desk/test/desk_0281.off
desk/test/desk_0282.off
desk/test/desk_0283.off
desk/test/desk_0284.off
desk/test/desk_0285.off
desk/test/desk_0286.off
bed/test/bed_0516.off
bed/test/bed_0517.off
bed/test/bed_0518.off
bed/test/bed_0519.off
bed/test/bed_0520.off
bed/test/bed_0521.off
bed/test/bed_0522.off
bed/test/bed_0523.off
bed/test/bed_0524.off
bed/test/bed_0525.off
bed/test/bed_0526.off
bed/test/bed_0527.off
bed/test/bed_0528.off
bed/test/bed_0529.off
bed/test/bed_0530.off
bed/test/bed_0531.off
bed/test/bed_0532.off
bed/test/bed_0533.off
bed/test/bed_0534.off
bed/test/bed_0535.off
bed/test/bed_0536.off
bed/test/bed_0537.off
bed/test/bed_0538.off
bed/test/bed_0539.off
bed/test/bed_0540.off
bed/test/bed_0541.off
bed/test/bed_0542.off
bed/test/bed_0543.off
bed/test/bed_0544.off
bed/test/bed_0545.off
bed/test/bed_0546.off
bed/test/bed_0547.off
bed/test/bed_0548.off
bed/test/bed_0549.off
bed/test/bed_0550.off
bed/test/bed_0551.off
bed/test/bed_0552.off
bed/test/bed_0553.off
bed/test/bed_0554.off
bed/test/bed_0555.off
bed/test/bed_0556.off
bed/test/bed_0557.off
bed/test/bed_0558.off
bed/test/bed_0559.off
bed/test/bed_0560.off
bed/test/bed_0561.off
bed/test/bed_0562.off
bed/test/bed_0563.off
bed/test/bed_0564.off
bed/test/bed_0565.off
bed/test/bed_0566.off
bed/test/bed_0567.off
bed/test/bed_0568.off
bed/test/bed_0569.off
bed/test/bed_0570.off
bed/test/bed_0571.off
bed/test/bed_0572.off
bed/test/bed_0573.off
bed/test/bed_0574.off
bed/test/bed_0575.off
bed/test/bed_0576.off
bed/test/bed_0577.off
bed/test/bed_0578.off
bed/test/bed_0579.off
bed/test/bed_0580.off
bed/test/bed_0581.off
bed/test/bed_0582.off
bed/test/bed_0583.off
bed/test/bed_0584.off
bed/test/bed_0585.off
bed/test/bed_0586.off
bed/test/bed_0587.off
bed/test/bed_0588.off
bed/test/bed_0589.off
bed/test/bed_0590.off
bed/test/bed_0591.off
bed/test/bed_0592.off
bed/test/bed_0593.off
bed/test/bed_0594.off
bed/test/bed_0595.off
bed/test/bed_0596.off
bed/test/bed_0597.off
bed/test/bed_0598.off
bed/test/bed_0599.off
bed/test/bed_0600.off
bed/test/bed_0601.off
bed/test/bed_0602.off
bed/test/bed_0603.off
bed/test/bed_0604.off
bed/test/bed_0605.off
bed/test/bed_0606.off
bed/test/bed_0607.off
bed/test/bed_0608.off
bed/test/bed_0609.off
bed/test/bed_0610.off
bed/test/bed_0611.off
bed/test/bed_0612.off
bed/test/bed_0613.off
bed/test/bed_0614.off
bed/test/bed_0615.off
tent/test/tent_0164.off
tent/test/tent_0165.off
tent/test/tent_0166.off
tent/test/tent_0167.off
tent/test/tent_0168.off
tent/test/tent_0169.off
tent/test/tent_0170.off
tent/test/tent_0171.off
tent/test/tent_0172.off
tent/test/tent_0173.off
tent/test/tent_0174.off
tent/test/tent_0175.off
tent/test/tent_0176.off
tent/test/tent_0177.off
tent/test/tent_0178.off
tent/test/tent_0179.off
tent/test/tent_0180.off
tent/test/tent_0181.off
tent/test/tent_0182.off
tent/test/tent_0183.off
piano/test/piano_0232.off
piano/test/piano_0233.off
piano/test/piano_0234.off
piano/test/piano_0235.off
piano/test/piano_0236.off
piano/test/piano_0237.off
piano/test/piano_0238.off
piano/test/piano_0239.off
piano/test/piano_0240.off
piano/test/piano_0241.off
piano/test/piano_0242.off
piano/test/piano_0243.off
piano/test/piano_0244.off
piano/test/piano_0245.off
piano/test/piano_0246.off
piano/test/piano_0247.off
piano/test/piano_0248.off
piano/test/piano_0249.off
piano/test/piano_0250.off
piano/test/piano_0251.off
piano/test/piano_0252.off
piano/test/piano_0253.off
piano/test/piano_0254.off
piano/test/piano_0255.off
piano/test/piano_0256.off
piano/test/piano_0257.off
piano/test/piano_0258.off
piano/test/piano_0259.off
piano/test/piano_0260.off
piano/test/piano_0261.off
piano/test/piano_0262.off
piano/test/piano_0263.off
piano/test/piano_0264.off
piano/test/piano_0265.off
piano/test/piano_0266.off
piano/test/piano_0267.off
piano/test/piano_0268.off
piano/test/piano_0269.off
piano/test/piano_0270.off
piano/test/piano_0271.off
piano/test/piano_0272.off
piano/test/piano_0273.off
piano/test/piano_0274.off
piano/test/piano_0275.off
piano/test/piano_0276.off
piano/test/piano_0277.off
piano/test/piano_0278.off
piano/test/piano_0279.off
piano/test/piano_0280.off
piano/test/piano_0281.off
piano/test/piano_0282.off
piano/test/piano_0283.off
piano/test/piano_0284.off
piano/test/piano_0285.off
piano/test/piano_0286.off
piano/test/piano_0287.off
piano/test/piano_0288.off
piano/test/piano_0289.off
piano/test/piano_0290.off
piano/test/piano_0291.off
piano/test/piano_0292.off
piano/test/piano_0293.off
piano/test/piano_0294.off
piano/test/piano_0295.off
piano/test/piano_0296.off
piano/test/piano_0297.off
piano/test/piano_0298.off
piano/test/piano_0299.off
piano/test/piano_0300.off
piano/test/piano_0301.off
piano/test/piano_0302.off
piano/test/piano_0303.off
piano/test/piano_0304.off
piano/test/piano_0305.off
piano/test/piano_0306.off
piano/test/piano_0307.off
piano/test/piano_0308.off
piano/test/piano_0309.off
piano/test/piano_0310.off
piano/test/piano_0311.off
piano/test/piano_0312.off
piano/test/piano_0313.off
piano/test/piano_0314.off
piano/test/piano_0315.off
piano/test/piano_0316.off
piano/test/piano_0317.off
piano/test/piano_0318.off
piano/test/piano_0319.off
piano/test/piano_0320.off
piano/test/piano_0321.off
piano/test/piano_0322.off
piano/test/piano_0323.off
piano/test/piano_0324.off
piano/test/piano_0325.off
piano/test/piano_0326.off
piano/test/piano_0327.off
piano/test/piano_0328.off
piano/test/piano_0329.off
piano/test/piano_0330.off
piano/test/piano_0331.off
sofa/test/sofa_0681.off
sofa/test/sofa_0682.off
sofa/test/sofa_0683.off
sofa/test/sofa_0684.off
sofa/test/sofa_0685.off
sofa/test/sofa_0686.off
sofa/test/sofa_0687.off
sofa/test/sofa_0688.off
sofa/test/sofa_0689.off
sofa/test/sofa_0690.off
sofa/test/sofa_0691.off
sofa/test/sofa_0692.off
sofa/test/sofa_0693.off
sofa/test/sofa_0694.off
sofa/test/sofa_0695.off
sofa/test/sofa_0696.off
sofa/test/sofa_0697.off
sofa/test/sofa_0698.off
sofa/test/sofa_0699.off
sofa/test/sofa_0700.off
sofa/test/sofa_0701.off
sofa/test/sofa_0702.off
sofa/test/sofa_0703.off
sofa/test/sofa_0704.off
sofa/test/sofa_0705.off
sofa/test/sofa_0706.off
sofa/test/sofa_0707.off
sofa/test/sofa_0708.off
sofa/test/sofa_0709.off
sofa/test/sofa_0710.off
sofa/test/sofa_0711.off
sofa/test/sofa_0712.off
sofa/test/sofa_0713.off
sofa/test/sofa_0714.off
sofa/test/sofa_0715.off
sofa/test/sofa_0716.off
sofa/test/sofa_0717.off
sofa/test/sofa_0718.off
sofa/test/sofa_0719.off
sofa/test/sofa_0720.off
sofa/test/sofa_0721.off
sofa/test/sofa_0722.off
sofa/test/sofa_0723.off
sofa/test/sofa_0724.off
sofa/test/sofa_0725.off
sofa/test/sofa_0726.off
sofa/test/sofa_0727.off
sofa/test/sofa_0728.off
sofa/test/sofa_0729.off
sofa/test/sofa_0730.off
sofa/test/sofa_0731.off
sofa/test/sofa_0732.off
sofa/test/sofa_0733.off
sofa/test/sofa_0734.off
sofa/test/sofa_0735.off
sofa/test/sofa_0736.off
sofa/test/sofa_0737.off
sofa/test/sofa_0738.off
sofa/test/sofa_0739.off
sofa/test/sofa_0740.off
sofa/test/sofa_0741.off
sofa/test/sofa_0742.off
sofa/test/sofa_0743.off
sofa/test/sofa_0744.off
sofa/test/sofa_0745.off
sofa/test/sofa_0746.off
sofa/test/sofa_0747.off
sofa/test/sofa_0748.off
sofa/test/sofa_0749.off
sofa/test/sofa_0750.off
sofa/test/sofa_0751.off
sofa/test/sofa_0752.off
sofa/test/sofa_0753.off
sofa/test/sofa_0754.off
sofa/test/sofa_0755.off
sofa/test/sofa_0756.off
sofa/test/sofa_0757.off
sofa/test/sofa_0758.off
sofa/test/sofa_0759.off
sofa/test/sofa_0760.off
sofa/test/sofa_0761.off
sofa/test/sofa_0762.off
sofa/test/sofa_0763.off
sofa/test/sofa_0764.off
sofa/test/sofa_0765.off
sofa/test/sofa_0766.off
sofa/test/sofa_0767.off
sofa/test/sofa_0768.off
sofa/test/sofa_0769.off
sofa/test/sofa_0770.off
sofa/test/sofa_0771.off
sofa/test/sofa_0772.off
sofa/test/sofa_0773.off
sofa/test/sofa_0774.off
sofa/test/sofa_0775.off
sofa/test/sofa_0776.off
sofa/test/sofa_0777.off
sofa/test/sofa_0778.off
sofa/test/sofa_0779.off
sofa/test/sofa_0780.off
person/test/person_0089.off
person/test/person_0090.off
person/test/person_0091.off
person/test/person_0092.off
person/test/person_0093.off
person/test/person_0094.off
person/test/person_0095.off
person/test/person_0096.off
person/test/person_0097.off
person/test/person_0098.off
person/test/person_0099.off
person/test/person_0100.off
person/test/person_0101.off
person/test/person_0102.off
person/test/person_0103.off
person/test/person_0104.off
person/test/person_0105.off
person/test/person_0106.off
person/test/person_0107.off
person/test/person_0108.off
xbox/test/xbox_0104.off
xbox/test/xbox_0105.off
xbox/test/xbox_0106.off
xbox/test/xbox_0107.off
xbox/test/xbox_0108.off
xbox/test/xbox_0109.off
xbox/test/xbox_0110.off
xbox/test/xbox_0111.off
xbox/test/xbox_0112.off
xbox/test/xbox_0113.off
xbox/test/xbox_0114.off
xbox/test/xbox_0115.off
xbox/test/xbox_0116.off
xbox/test/xbox_0117.off
xbox/test/xbox_0118.off
xbox/test/xbox_0119.off
xbox/test/xbox_0120.off
xbox/test/xbox_0121.off
xbox/test/xbox_0122.off
xbox/test/xbox_0123.off
stairs/test/stairs_0125.off
stairs/test/stairs_0126.off
stairs/test/stairs_0127.off
stairs/test/stairs_0128.off
stairs/test/stairs_0129.off
stairs/test/stairs_0130.off
stairs/test/stairs_0131.off
stairs/test/stairs_0132.off
stairs/test/stairs_0133.off
stairs/test/stairs_0134.off
stairs/test/stairs_0135.off
stairs/test/stairs_0136.off
stairs/test/stairs_0137.off
stairs/test/stairs_0138.off
stairs/test/stairs_0139.off
stairs/test/stairs_0140.off
stairs/test/stairs_0141.off
stairs/test/stairs_0142.off
stairs/test/stairs_0143.off
stairs/test/stairs_0144.off
cone/test/cone_0168.off
cone/test/cone_0169.off
cone/test/cone_0170.off
cone/test/cone_0171.off
cone/test/cone_0172.off
cone/test/cone_0173.off
cone/test/cone_0174.off
cone/test/cone_0175.off
cone/test/cone_0176.off
cone/test/cone_0177.off
cone/test/cone_0178.off
cone/test/cone_0179.off
cone/test/cone_0180.off
cone/test/cone_0181.off
cone/test/cone_0182.off
cone/test/cone_0183.off
cone/test/cone_0184.off
cone/test/cone_0185.off
cone/test/cone_0186.off
cone/test/cone_0187.off
lamp/test/lamp_0125.off
lamp/test/lamp_0126.off
lamp/test/lamp_0127.off
lamp/test/lamp_0128.off
lamp/test/lamp_0129.off
lamp/test/lamp_0130.off
lamp/test/lamp_0131.off
lamp/test/lamp_0132.off
lamp/test/lamp_0133.off
lamp/test/lamp_0134.off
lamp/test/lamp_0135.off
lamp/test/lamp_0136.off
lamp/test/lamp_0137.off
lamp/test/lamp_0138.off
lamp/test/lamp_0139.off
lamp/test/lamp_0140.off
lamp/test/lamp_0141.off
lamp/test/lamp_0142.off
lamp/test/lamp_0143.off
lamp/test/lamp_0144.off
door/test/door_0110.off
door/test/door_0111.off
door/test/door_0112.off
door/test/door_0113.off
door/test/door_0114.off
door/test/door_0115.off
door/test/door_0116.off
door/test/door_0117.off
door/test/door_0118.off
door/test/door_0119.off
door/test/door_0120.off
door/test/door_0121.off
door/test/door_0122.off
door/test/door_0123.off
door/test/door_0124.off
door/test/door_0125.off
door/test/door_0126.off
door/test/door_0127.off
door/test/door_0128.off
door/test/door_0129.off
range_hood/test/range_hood_0116.off
range_hood/test/range_hood_0117.off
range_hood/test/range_hood_0118.off
range_hood/test/range_hood_0119.off
range_hood/test/range_hood_0120.off
range_hood/test/range_hood_0121.off
range_hood/test/range_hood_0122.off
range_hood/test/range_hood_0123.off
range_hood/test/range_hood_0124.off
range_hood/test/range_hood_0125.off
range_hood/test/range_hood_0126.off
range_hood/test/range_hood_0127.off
range_hood/test/range_hood_0128.off
range_hood/test/range_hood_0129.off
range_hood/test/range_hood_0130.off
range_hood/test/range_hood_0131.off
range_hood/test/range_hood_0132.off
range_hood/test/range_hood_0133.off
range_hood/test/range_hood_0134.off
range_hood/test/range_hood_0135.off
range_hood/test/range_hood_0136.off
range_hood/test/range_hood_0137.off
range_hood/test/range_hood_0138.off
range_hood/test/range_hood_0139.off
range_hood/test/range_hood_0140.off
range_hood/test/range_hood_0141.off
range_hood/test/range_hood_0142.off
range_hood/test/range_hood_0143.off
range_hood/test/range_hood_0144.off
range_hood/test/range_hood_0145.off
range_hood/test/range_hood_0146.off
range_hood/test/range_hood_0147.off
range_hood/test/range_hood_0148.off
range_hood/test/range_hood_0149.off
range_hood/test/range_hood_0150.off
range_hood/test/range_hood_0151.off
range_hood/test/range_hood_0152.off
range_hood/test/range_hood_0153.off
range_hood/test/range_hood_0154.off
range_hood/test/range_hood_0155.off
range_hood/test/range_hood_0156.off
range_hood/test/range_hood_0157.off
range_hood/test/range_hood_0158.off
range_hood/test/range_hood_0159.off
range_hood/test/range_hood_0160.off
range_hood/test/range_hood_0161.off
range_hood/test/range_hood_0162.off
range_hood/test/range_hood_0163.off
range_hood/test/range_hood_0164.off
range_hood/test/range_hood_0165.off
range_hood/test/range_hood_0166.off
range_hood/test/range_hood_0167.off
range_hood/test/range_hood_0168.off
range_hood/test/range_hood_0169.off
range_hood/test/range_hood_0170.off
range_hood/test/range_hood_0171.off
range_hood/test/range_hood_0172.off
range_hood/test/range_hood_0173.off
range_hood/test/range_hood_0174.off
range_hood/test/range_hood_0175.off
range_hood/test/range_hood_0176.off
range_hood/test/range_hood_0177.off
range_hood/test/range_hood_0178.off
range_hood/test/range_hood_0179.off
range_hood/test/range_hood_0180.off
range_hood/test/range_hood_0181.off
range_hood/test/range_hood_0182.off
range_hood/test/range_hood_0183.off
range_hood/test/range_hood_0184.off
range_hood/test/range_hood_0185.off
range_hood/test/range_hood_0186.off
range_hood/test/range_hood_0187.off
range_hood/test/range_hood_0188.off
range_hood/test/range_hood_0189.off
range_hood/test/range_hood_0190.off
range_hood/test/range_hood_0191.off
range_hood/test/range_hood_0192.off
range_hood/test/range_hood_0193.off
range_hood/test/range_hood_0194.off
range_hood/test/range_hood_0195.off
range_hood/test/range_hood_0196.off
range_hood/test/range_hood_0197.off
range_hood/test/range_hood_0198.off
range_hood/test/range_hood_0199.off
range_hood/test/range_hood_0200.off
range_hood/test/range_hood_0201.off
range_hood/test/range_hood_0202.off
range_hood/test/range_hood_0203.off
range_hood/test/range_hood_0204.off
range_hood/test/range_hood_0205.off
range_hood/test/range_hood_0206.off
range_hood/test/range_hood_0207.off
range_hood/test/range_hood_0208.off
range_hood/test/range_hood_0209.off
range_hood/test/range_hood_0210.off
range_hood/test/range_hood_0211.off
range_hood/test/range_hood_0212.off
range_hood/test/range_hood_0213.off
range_hood/test/range_hood_0214.off
range_hood/test/range_hood_0215.off
flower_pot/test/flower_pot_0150.off
flower_pot/test/flower_pot_0151.off
flower_pot/test/flower_pot_0152.off
flower_pot/test/flower_pot_0153.off
flower_pot/test/flower_pot_0154.off
flower_pot/test/flower_pot_0155.off
flower_pot/test/flower_pot_0156.off
flower_pot/test/flower_pot_0157.off
flower_pot/test/flower_pot_0158.off
flower_pot/test/flower_pot_0159.off
flower_pot/test/flower_pot_0160.off
flower_pot/test/flower_pot_0161.off
flower_pot/test/flower_pot_0162.off
flower_pot/test/flower_pot_0163.off
flower_pot/test/flower_pot_0164.off
flower_pot/test/flower_pot_0165.off
flower_pot/test/flower_pot_0166.off
flower_pot/test/flower_pot_0167.off
flower_pot/test/flower_pot_0168.off
flower_pot/test/flower_pot_0169.off
================================================
FILE: dataloader/split/test_scan2cad.txt
================================================
full_annotations_clean_test.json
================================================
FILE: dataloader/split/train_3dmatch.txt
================================================
sun3d-brown_bm_1-brown_bm_1
sun3d-brown_cogsci_1-brown_cogsci_1
sun3d-brown_cs_2-brown_cs2
sun3d-brown_cs_3-brown_cs3
sun3d-harvard_c3-hv_c3_1
sun3d-harvard_c5-hv_c5_1
sun3d-harvard_c6-hv_c6_1
sun3d-harvard_c8-hv_c8_3
sun3d-home_bksh-home_bksh_oct_30_2012_scan2_erika
sun3d-hotel_nips2012-nips_4
sun3d-hotel_sf-scan1
sun3d-mit_32_d507-d507_2
sun3d-mit_46_ted_lab1-ted_lab_2
sun3d-mit_76_417-76-417b
sun3d-mit_dorm_next_sj-dorm_next_sj_oct_30_2012_scan1_erika
sun3d-mit_w20_athena-sc_athena_oct_29_2012_scan1_erika
7-scenes-chess
7-scenes-fire
7-scenes-office
7-scenes-pumpkin
7-scenes-stairs
rgbd-scenes-v2-scene_01
rgbd-scenes-v2-scene_02
rgbd-scenes-v2-scene_03
rgbd-scenes-v2-scene_04
rgbd-scenes-v2-scene_05
rgbd-scenes-v2-scene_06
rgbd-scenes-v2-scene_07
rgbd-scenes-v2-scene_08
rgbd-scenes-v2-scene_09
rgbd-scenes-v2-scene_11
rgbd-scenes-v2-scene_12
rgbd-scenes-v2-scene_13
rgbd-scenes-v2-scene_14
bundlefusion-apt0
bundlefusion-apt1
bundlefusion-apt2
bundlefusion-copyroom
bundlefusion-office1
bundlefusion-office2
bundlefusion-office3
analysis-by-synthesis-apt1-kitchen
analysis-by-synthesis-apt1-living
analysis-by-synthesis-apt2-bed
analysis-by-synthesis-apt2-living
analysis-by-synthesis-apt2-luke
analysis-by-synthesis-office2-5a
analysis-by-synthesis-office2-5b
================================================
FILE: dataloader/split/train_kitti.txt
================================================
0
1
2
3
4
5
================================================
FILE: dataloader/split/train_modelnet40.txt
================================================
glass_box/train/glass_box_0001.off
glass_box/train/glass_box_0002.off
glass_box/train/glass_box_0003.off
glass_box/train/glass_box_0004.off
glass_box/train/glass_box_0005.off
glass_box/train/glass_box_0006.off
glass_box/train/glass_box_0007.off
glass_box/train/glass_box_0008.off
glass_box/train/glass_box_0009.off
glass_box/train/glass_box_0010.off
glass_box/train/glass_box_0011.off
glass_box/train/glass_box_0012.off
glass_box/train/glass_box_0013.off
glass_box/train/glass_box_0014.off
glass_box/train/glass_box_0015.off
glass_box/train/glass_box_0016.off
glass_box/train/glass_box_0017.off
glass_box/train/glass_box_0018.off
glass_box/train/glass_box_0019.off
glass_box/train/glass_box_0020.off
glass_box/train/glass_box_0021.off
glass_box/train/glass_box_0022.off
glass_box/train/glass_box_0023.off
glass_box/train/glass_box_0024.off
glass_box/train/glass_box_0025.off
glass_box/train/glass_box_0026.off
glass_box/train/glass_box_0027.off
glass_box/train/glass_box_0028.off
glass_box/train/glass_box_0029.off
glass_box/train/glass_box_0030.off
glass_box/train/glass_box_0031.off
glass_box/train/glass_box_0032.off
glass_box/train/glass_box_0033.off
glass_box/train/glass_box_0034.off
glass_box/train/glass_box_0035.off
glass_box/train/glass_box_0036.off
glass_box/train/glass_box_0037.off
glass_box/train/glass_box_0038.off
glass_box/train/glass_box_0039.off
glass_box/train/glass_box_0040.off
glass_box/train/glass_box_0041.off
glass_box/train/glass_box_0042.off
glass_box/train/glass_box_0043.off
glass_box/train/glass_box_0044.off
glass_box/train/glass_box_0045.off
glass_box/train/glass_box_0046.off
glass_box/train/glass_box_0047.off
glass_box/train/glass_box_0048.off
glass_box/train/glass_box_0049.off
glass_box/train/glass_box_0050.off
glass_box/train/glass_box_0051.off
glass_box/train/glass_box_0052.off
glass_box/train/glass_box_0053.off
glass_box/train/glass_box_0054.off
glass_box/train/glass_box_0055.off
glass_box/train/glass_box_0056.off
glass_box/train/glass_box_0057.off
glass_box/train/glass_box_0058.off
glass_box/train/glass_box_0059.off
glass_box/train/glass_box_0060.off
glass_box/train/glass_box_0061.off
glass_box/train/glass_box_0062.off
glass_box/train/glass_box_0063.off
glass_box/train/glass_box_0064.off
glass_box/train/glass_box_0065.off
glass_box/train/glass_box_0066.off
glass_box/train/glass_box_0067.off
glass_box/train/glass_box_0068.off
glass_box/train/glass_box_0069.off
glass_box/train/glass_box_0070.off
glass_box/train/glass_box_0071.off
glass_box/train/glass_box_0072.off
glass_box/train/glass_box_0073.off
glass_box/train/glass_box_0074.off
glass_box/train/glass_box_0075.off
glass_box/train/glass_box_0076.off
glass_box/train/glass_box_0077.off
glass_box/train/glass_box_0078.off
glass_box/train/glass_box_0079.off
glass_box/train/glass_box_0080.off
glass_box/train/glass_box_0081.off
glass_box/train/glass_box_0082.off
glass_box/train/glass_box_0083.off
glass_box/train/glass_box_0084.off
glass_box/train/glass_box_0085.off
glass_box/train/glass_box_0086.off
glass_box/train/glass_box_0087.off
glass_box/train/glass_box_0088.off
glass_box/train/glass_box_0089.off
glass_box/train/glass_box_0090.off
glass_box/train/glass_box_0091.off
glass_box/train/glass_box_0092.off
glass_box/train/glass_box_0093.off
glass_box/train/glass_box_0094.off
glass_box/train/glass_box_0095.off
glass_box/train/glass_box_0096.off
glass_box/train/glass_box_0097.off
glass_box/train/glass_box_0098.off
glass_box/train/glass_box_0099.off
glass_box/train/glass_box_0100.off
glass_box/train/glass_box_0101.off
glass_box/train/glass_box_0102.off
glass_box/train/glass_box_0103.off
glass_box/train/glass_box_0104.off
glass_box/train/glass_box_0105.off
glass_box/train/glass_box_0106.off
glass_box/train/glass_box_0107.off
glass_box/train/glass_box_0108.off
glass_box/train/glass_box_0109.off
glass_box/train/glass_box_0110.off
glass_box/train/glass_box_0111.off
glass_box/train/glass_box_0112.off
glass_box/train/glass_box_0113.off
glass_box/train/glass_box_0114.off
glass_box/train/glass_box_0115.off
glass_box/train/glass_box_0116.off
glass_box/train/glass_box_0117.off
glass_box/train/glass_box_0118.off
glass_box/train/glass_box_0119.off
glass_box/train/glass_box_0120.off
glass_box/train/glass_box_0121.off
glass_box/train/glass_box_0122.off
glass_box/train/glass_box_0123.off
glass_box/train/glass_box_0124.off
glass_box/train/glass_box_0125.off
glass_box/train/glass_box_0126.off
glass_box/train/glass_box_0127.off
glass_box/train/glass_box_0128.off
glass_box/train/glass_box_0129.off
glass_box/train/glass_box_0130.off
glass_box/train/glass_box_0131.off
glass_box/train/glass_box_0132.off
glass_box/train/glass_box_0133.off
glass_box/train/glass_box_0134.off
glass_box/train/glass_box_0135.off
glass_box/train/glass_box_0136.off
glass_box/train/glass_box_0137.off
glass_box/train/glass_box_0138.off
glass_box/train/glass_box_0139.off
glass_box/train/glass_box_0140.off
glass_box/train/glass_box_0141.off
glass_box/train/glass_box_0142.off
glass_box/train/glass_box_0143.off
glass_box/train/glass_box_0144.off
glass_box/train/glass_box_0145.off
glass_box/train/glass_box_0146.off
glass_box/train/glass_box_0147.off
glass_box/train/glass_box_0148.off
glass_box/train/glass_box_0149.off
glass_box/train/glass_box_0150.off
glass_box/train/glass_box_0151.off
glass_box/train/glass_box_0152.off
glass_box/train/glass_box_0153.off
glass_box/train/glass_box_0154.off
laptop/train/laptop_0001.off
laptop/train/laptop_0002.off
laptop/train/laptop_0003.off
laptop/train/laptop_0004.off
laptop/train/laptop_0005.off
laptop/train/laptop_0006.off
laptop/train/laptop_0007.off
laptop/train/laptop_0008.off
laptop/train/laptop_0009.off
laptop/train/laptop_0010.off
laptop/train/laptop_0011.off
laptop/train/laptop_0012.off
laptop/train/laptop_0013.off
laptop/train/laptop_0014.off
laptop/train/laptop_0015.off
laptop/train/laptop_0016.off
laptop/train/laptop_0017.off
laptop/train/laptop_0018.off
laptop/train/laptop_0019.off
laptop/train/laptop_0020.off
laptop/train/laptop_0021.off
laptop/train/laptop_0022.off
laptop/train/laptop_0023.off
laptop/train/laptop_0024.off
laptop/train/laptop_0025.off
laptop/train/laptop_0026.off
laptop/train/laptop_0027.off
laptop/train/laptop_0028.off
laptop/train/laptop_0029.off
laptop/train/laptop_0030.off
laptop/train/laptop_0031.off
laptop/train/laptop_0032.off
laptop/train/laptop_0033.off
laptop/train/laptop_0034.off
laptop/train/laptop_0035.off
laptop/train/laptop_0036.off
laptop/train/laptop_0037.off
laptop/train/laptop_0038.off
laptop/train/laptop_0039.off
laptop/train/laptop_0040.off
laptop/train/laptop_0041.off
laptop/train/laptop_0042.off
laptop/train/laptop_0043.off
laptop/train/laptop_0044.off
laptop/train/laptop_0045.off
laptop/train/laptop_0046.off
laptop/train/laptop_0047.off
laptop/train/laptop_0048.off
laptop/train/laptop_0049.off
laptop/train/laptop_0050.off
laptop/train/laptop_0051.off
laptop/train/laptop_0052.off
laptop/train/laptop_0053.off
laptop/train/laptop_0054.off
laptop/train/laptop_0055.off
laptop/train/laptop_0056.off
laptop/train/laptop_0057.off
laptop/train/laptop_0058.off
laptop/train/laptop_0059.off
laptop/train/laptop_0060.off
laptop/train/laptop_0061.off
laptop/train/laptop_0062.off
laptop/train/laptop_0063.off
laptop/train/laptop_0064.off
laptop/train/laptop_0065.off
laptop/train/laptop_0066.off
laptop/train/laptop_0067.off
laptop/train/laptop_0068.off
laptop/train/laptop_0069.off
laptop/train/laptop_0070.off
laptop/train/laptop_0071.off
laptop/train/laptop_0072.off
laptop/train/laptop_0073.off
laptop/train/laptop_0074.off
laptop/train/laptop_0075.off
laptop/train/laptop_0076.off
laptop/train/laptop_0077.off
laptop/train/laptop_0078.off
laptop/train/laptop_0079.off
laptop/train/laptop_0080.off
laptop/train/laptop_0081.off
laptop/train/laptop_0082.off
laptop/train/laptop_0083.off
laptop/train/laptop_0084.off
laptop/train/laptop_0085.off
laptop/train/laptop_0086.off
laptop/train/laptop_0087.off
laptop/train/laptop_0088.off
laptop/train/laptop_0089.off
laptop/train/laptop_0090.off
laptop/train/laptop_0091.off
laptop/train/laptop_0092.off
laptop/train/laptop_0093.off
laptop/train/laptop_0094.off
laptop/train/laptop_0095.off
laptop/train/laptop_0096.off
laptop/train/laptop_0097.off
laptop/train/laptop_0098.off
laptop/train/laptop_0099.off
laptop/train/laptop_0100.off
laptop/train/laptop_0101.off
laptop/train/laptop_0102.off
laptop/train/laptop_0103.off
laptop/train/laptop_0104.off
laptop/train/laptop_0105.off
laptop/train/laptop_0106.off
laptop/train/laptop_0107.off
laptop/train/laptop_0108.off
laptop/train/laptop_0109.off
laptop/train/laptop_0110.off
laptop/train/laptop_0111.off
laptop/train/laptop_0112.off
laptop/train/laptop_0113.off
laptop/train/laptop_0114.off
laptop/train/laptop_0115.off
laptop/train/laptop_0116.off
laptop/train/laptop_0117.off
laptop/train/laptop_0118.off
laptop/train/laptop_0119.off
laptop/train/laptop_0120.off
laptop/train/laptop_0121.off
laptop/train/laptop_0122.off
laptop/train/laptop_0123.off
laptop/train/laptop_0124.off
laptop/train/laptop_0125.off
laptop/train/laptop_0126.off
laptop/train/laptop_0127.off
laptop/train/laptop_0128.off
laptop/train/laptop_0129.off
laptop/train/laptop_0130.off
laptop/train/laptop_0131.off
laptop/train/laptop_0132.off
laptop/train/laptop_0133.off
laptop/train/laptop_0134.off
laptop/train/laptop_0135.off
sink/train/sink_0001.off
sink/train/sink_0002.off
sink/train/sink_0003.off
sink/train/sink_0004.off
sink/train/sink_0005.off
sink/train/sink_0006.off
sink/train/sink_0007.off
sink/train/sink_0008.off
sink/train/sink_0009.off
sink/train/sink_0010.off
sink/train/sink_0011.off
sink/train/sink_0012.off
sink/train/sink_0013.off
sink/train/sink_0014.off
sink/train/sink_0015.off
sink/train/sink_0016.off
sink/train/sink_0017.off
sink/train/sink_0018.off
sink/train/sink_0019.off
sink/train/sink_0020.off
sink/train/sink_0021.off
sink/train/sink_0022.off
sink/train/sink_0023.off
sink/train/sink_0024.off
sink/train/sink_0025.off
sink/train/sink_0026.off
sink/train/sink_0027.off
sink/train/sink_0028.off
sink/train/sink_0029.off
sink/train/sink_0030.off
sink/train/sink_0031.off
sink/train/sink_0032.off
sink/train/sink_0033.off
sink/train/sink_0034.off
sink/train/sink_0035.off
sink/train/sink_0036.off
sink/train/sink_0037.off
sink/train/sink_0038.off
sink/train/sink_0039.off
sink/train/sink_0040.off
sink/train/sink_0041.off
sink/train/sink_0042.off
sink/train/sink_0043.off
sink/train/sink_0044.off
sink/train/sink_0045.off
sink/train/sink_0046.off
sink/train/sink_0047.off
sink/train/sink_0048.off
sink/train/sink_0049.off
sink/train/sink_0050.off
sink/train/sink_0051.off
sink/train/sink_0052.off
sink/train/sink_0053.off
sink/train/sink_0054.off
sink/train/sink_0055.off
sink/train/sink_0056.off
sink/train/sink_0057.off
sink/train/sink_0058.off
sink/train/sink_0059.off
sink/train/sink_0060.off
sink/train/sink_0061.off
sink/train/sink_0062.off
sink/train/sink_0063.off
sink/train/sink_0064.off
sink/train/sink_0065.off
sink/train/sink_0066.off
sink/train/sink_0067.off
sink/train/sink_0068.off
sink/train/sink_0069.off
sink/train/sink_0070.off
sink/train/sink_0071.off
sink/train/sink_0072.off
sink/train/sink_0073.off
sink/train/sink_0074.off
sink/train/sink_0075.off
sink/train/sink_0076.off
sink/train/sink_0077.off
sink/train/sink_0078.off
sink/train/sink_0079.off
sink/train/sink_0080.off
sink/train/sink_0081.off
sink/train/sink_0082.off
sink/train/sink_0083.off
sink/train/sink_0084.off
sink/train/sink_0085.off
sink/train/sink_0086.off
sink/train/sink_0087.off
sink/train/sink_0088.off
sink/train/sink_0089.off
sink/train/sink_0090.off
sink/train/sink_0091.off
sink/train/sink_0092.off
sink/train/sink_0093.off
sink/train/sink_0094.off
sink/train/sink_0095.off
sink/train/sink_0096.off
sink/train/sink_0097.off
sink/train/sink_0098.off
sink/train/sink_0099.off
sink/train/sink_0100.off
sink/train/sink_0101.off
sink/train/sink_0102.off
sink/train/sink_0103.off
sink/train/sink_0104.off
sink/train/sink_0105.off
sink/train/sink_0106.off
sink/train/sink_0107.off
sink/train/sink_0108.off
sink/train/sink_0109.off
sink/train/sink_0110.off
sink/train/sink_0111.off
sink/train/sink_0112.off
sink/train/sink_0113.off
sink/train/sink_0114.off
sink/train/sink_0115.off
sink/train/sink_0116.off
night_stand/train/night_stand_0001.off
night_stand/train/night_stand_0002.off
night_stand/train/night_stand_0003.off
night_stand/train/night_stand_0004.off
night_stand/train/night_stand_0005.off
night_stand/train/night_stand_0006.off
night_stand/train/night_stand_0007.off
night_stand/train/night_stand_0008.off
night_stand/train/night_stand_0009.off
night_stand/train/night_stand_0010.off
night_stand/train/night_stand_0011.off
night_stand/train/night_stand_0012.off
night_stand/train/night_stand_0013.off
night_stand/train/night_stand_0014.off
night_stand/train/night_stand_0015.off
night_stand/train/night_stand_0016.off
night_stand/train/night_stand_0017.off
night_stand/train/night_stand_0018.off
night_stand/train/night_stand_0019.off
night_stand/train/night_stand_0020.off
night_stand/train/night_stand_0021.off
night_stand/train/night_stand_0022.off
night_stand/train/night_stand_0023.off
night_stand/train/night_stand_0024.off
night_stand/train/night_stand_0025.off
night_stand/train/night_stand_0026.off
night_stand/train/night_stand_0027.off
night_stand/train/night_stand_0028.off
night_stand/train/night_stand_0029.off
night_stand/train/night_stand_0030.off
night_stand/train/night_stand_0031.off
night_stand/train/night_stand_0032.off
night_stand/train/night_stand_0033.off
night_stand/train/night_stand_0034.off
night_stand/train/night_stand_0035.off
night_stand/train/night_stand_0036.off
night_stand/train/night_stand_0037.off
night_stand/train/night_stand_0038.off
night_stand/train/night_stand_0039.off
night_stand/train/night_stand_0040.off
night_stand/train/night_stand_0041.off
night_stand/train/night_stand_0042.off
night_stand/train/night_stand_0043.off
night_stand/train/night_stand_0044.off
night_stand/train/night_stand_0045.off
night_stand/train/night_stand_0046.off
night_stand/train/night_stand_0047.off
night_stand/train/night_stand_0048.off
night_stand/train/night_stand_0049.off
night_stand/train/night_stand_0050.off
night_stand/train/night_stand_0051.off
night_stand/train/night_stand_0052.off
night_stand/train/night_stand_0053.off
night_stand/train/night_stand_0054.off
night_stand/train/night_stand_0055.off
night_stand/train/night_stand_0056.off
night_stand/train/night_stand_0057.off
night_stand/train/night_stand_0058.off
night_stand/train/night_stand_0059.off
night_stand/train/night_stand_0060.off
night_stand/train/night_stand_0061.off
night_stand/train/night_stand_0062.off
night_stand/train/night_stand_0063.off
night_stand/train/night_stand_0064.off
night_stand/train/night_stand_0065.off
night_stand/train/night_stand_0066.off
night_stand/train/night_stand_0067.off
night_stand/train/night_stand_0068.off
night_stand/train/night_stand_0069.off
night_stand/train/night_stand_0070.off
night_stand/train/night_stand_0071.off
night_stand/train/night_stand_0072.off
night_stand/train/night_stand_0073.off
night_stand/train/night_stand_0074.off
night_stand/train/night_stand_0075.off
night_stand/train/night_stand_0076.off
night_stand/train/night_stand_0077.off
night_stand/train/night_stand_0078.off
night_stand/train/night_stand_0079.off
night_stand/train/night_stand_0080.off
night_stand/train/night_stand_0081.off
night_stand/train/night_stand_0082.off
night_stand/train/night_stand_0083.off
night_stand/train/night_stand_0084.off
night_stand/train/night_stand_0085.off
night_stand/train/night_stand_0086.off
night_stand/train/night_stand_0087.off
night_stand/train/night_stand_0088.off
night_stand/train/night_stand_0089.off
night_stand/train/night_stand_0090.off
night_stand/train/night_stand_0091.off
night_stand/train/night_stand_0092.off
night_stand/train/night_stand_0093.off
night_stand/train/night_stand_0094.off
night_stand/train/night_stand_0095.off
night_stand/train/night_stand_0096.off
night_stand/train/night_stand_0097.off
night_stand/train/night_stand_0098.off
night_stand/train/night_stand_0099.off
night_stand/train/night_stand_0100.off
night_stand/train/night_stand_0101.off
night_stand/train/night_stand_0102.off
night_stand/train/night_stand_0103.off
night_stand/train/night_stand_0104.off
night_stand/train/night_stand_0105.off
night_stand/train/night_stand_0106.off
night_stand/train/night_stand_0107.off
night_stand/train/night_stand_0108.off
night_stand/train/night_stand_0109.off
night_stand/train/night_stand_0110.off
night_stand/train/night_stand_0111.off
night_stand/train/night_stand_0112.off
night_stand/train/night_stand_0113.off
night_stand/train/night_stand_0114.off
night_stand/train/night_stand_0115.off
night_stand/train/night_stand_0116.off
night_stand/train/night_stand_0117.off
night_stand/train/night_stand_0118.off
night_stand/train/night_stand_0119.off
night_stand/train/night_stand_0120.off
night_stand/train/night_stand_0121.off
night_stand/train/night_stand_0122.off
night_stand/train/night_stand_0123.off
night_stand/train/night_stand_0124.off
night_stand/train/night_stand_0125.off
night_stand/train/night_stand_0126.off
night_stand/train/night_stand_0127.off
night_stand/train/night_stand_0128.off
night_stand/train/night_stand_0129.off
night_stand/train/night_stand_0130.off
night_stand/train/night_stand_0131.off
night_stand/train/night_stand_0132.off
night_stand/train/night_stand_0133.off
night_stand/train/night_stand_0134.off
night_stand/train/night_stand_0135.off
night_stand/train/night_stand_0136.off
night_stand/train/night_stand_0137.off
night_stand/train/night_stand_0138.off
night_stand/train/night_stand_0139.off
night_stand/train/night_stand_0140.off
night_stand/train/night_stand_0141.off
night_stand/train/night_stand_0142.off
night_stand/train/night_stand_0143.off
night_stand/train/night_stand_0144.off
night_stand/train/night_stand_0145.off
night_stand/train/night_stand_0146.off
night_stand/train/night_stand_0147.off
night_stand/train/night_stand_0148.off
night_stand/train/night_stand_0149.off
night_stand/train/night_stand_0150.off
night_stand/train/night_stand_0151.off
night_stand/train/night_stand_0152.off
night_stand/train/night_stand_0153.off
night_stand/train/night_stand_0154.off
night_stand/train/night_stand_0155.off
night_stand/train/night_stand_0156.off
night_stand/train/night_stand_0157.off
night_stand/train/night_stand_0158.off
night_stand/train/night_stand_0159.off
night_stand/train/night_stand_0160.off
night_stand/train/night_stand_0161.off
night_stand/train/night_stand_0162.off
night_stand/train/night_stand_0163.off
night_stand/train/night_stand_0164.off
night_stand/train/night_stand_0165.off
night_stand/train/night_stand_0166.off
night_stand/train/night_stand_0167.off
night_stand/train/night_stand_0168.off
night_stand/train/night_stand_0169.off
night_stand/train/night_stand_0170.off
night_stand/train/night_stand_0171.off
night_stand/train/night_stand_0172.off
night_stand/train/night_stand_0173.off
night_stand/train/night_stand_0174.off
night_stand/train/night_stand_0175.off
night_stand/train/night_stand_0176.off
night_stand/train/night_stand_0177.off
night_stand/train/night_stand_0178.off
night_stand/train/night_stand_0179.off
night_stand/train/night_stand_0180.off
car/train/car_0001.off
car/train/car_0002.off
car/train/car_0003.off
car/train/car_0004.off
car/train/car_0005.off
car/train/car_0006.off
car/train/car_0007.off
car/train/car_0008.off
car/train/car_0009.off
car/train/car_0010.off
car/train/car_0011.off
car/train/car_0012.off
car/train/car_0013.off
car/train/car_0014.off
car/train/car_0015.off
car/train/car_0016.off
car/train/car_0017.off
car/train/car_0018.off
car/train/car_0019.off
car/train/car_0020.off
car/train/car_0021.off
car/train/car_0022.off
car/train/car_0023.off
car/train/car_0024.off
car/train/car_0025.off
car/train/car_0026.off
car/train/car_0027.off
car/train/car_0028.off
car/train/car_0029.off
car/train/car_0030.off
car/train/car_0031.off
car/train/car_0032.off
car/train/car_0033.off
car/train/car_0034.off
car/train/car_0035.off
car/train/car_0036.off
car/train/car_0037.off
car/train/car_0038.off
car/train/car_0039.off
car/train/car_0040.off
car/train/car_0041.off
car/train/car_0042.off
car/train/car_0043.off
car/train/car_0044.off
car/train/car_0045.off
car/train/car_0046.off
car/train/car_0047.off
car/train/car_0048.off
car/train/car_0049.off
car/train/car_0050.off
car/train/car_0051.off
car/train/car_0052.off
car/train/car_0053.off
car/train/car_0054.off
car/train/car_0055.off
car/train/car_0056.off
car/train/car_0057.off
car/train/car_0058.off
car/train/car_0059.off
car/train/car_0060.off
car/train/car_0061.off
car/train/car_0062.off
car/train/car_0063.off
car/train/car_0064.off
car/train/car_0065.off
car/train/car_0066.off
car/train/car_0067.off
car/train/car_0068.off
car/train/car_0069.off
car/train/car_0070.off
car/train/car_0071.off
car/train/car_0072.off
car/train/car_0073.off
car/train/car_0074.off
car/train/car_0075.off
car/train/car_0076.off
car/train/car_0077.off
car/train/car_0078.off
car/train/car_0079.off
car/train/car_0080.off
car/train/car_0081.off
car/train/car_0082.off
car/train/car_0083.off
car/train/car_0084.off
car/train/car_0085.off
car/train/car_0086.off
car/train/car_0087.off
car/train/car_0088.off
car/train/car_0089.off
car/train/car_0090.off
car/train/car_0091.off
car/train/car_0092.off
car/train/car_0093.off
car/train/car_0094.off
car/train/car_0095.off
car/train/car_0096.off
car/train/car_0097.off
car/train/car_0098.off
car/train/car_0099.off
car/train/car_0100.off
car/train/car_0101.off
car/train/car_0102.off
car/train/car_0103.off
car/train/car_0104.off
car/train/car_0105.off
car/train/car_0106.off
car/train/car_0107.off
car/train/car_0108.off
car/train/car_0109.off
car/train/car_0110.off
car/train/car_0111.off
car/train/car_0112.off
car/train/car_0113.off
car/train/car_0114.off
car/train/car_0115.off
car/train/car_0116.off
car/train/car_0117.off
car/train/car_0118.off
car/train/car_0119.off
car/train/car_0120.off
car/train/car_0121.off
car/train/car_0122.off
car/train/car_0123.off
car/train/car_0124.off
car/train/car_0125.off
car/train/car_0126.off
car/train/car_0127.off
car/train/car_0128.off
car/train/car_0129.off
car/train/car_0130.off
car/train/car_0131.off
car/train/car_0132.off
car/train/car_0133.off
car/train/car_0134.off
car/train/car_0135.off
car/train/car_0136.off
car/train/car_0137.off
car/train/car_0138.off
car/train/car_0139.off
car/train/car_0140.off
car/train/car_0141.off
car/train/car_0142.off
car/train/car_0143.off
car/train/car_0144.off
car/train/car_0145.off
car/train/car_0146.off
car/train/car_0147.off
car/train/car_0148.off
car/train/car_0149.off
car/train/car_0150.off
car/train/car_0151.off
car/train/car_0152.off
car/train/car_0153.off
car/train/car_0154.off
car/train/car_0155.off
car/train/car_0156.off
car/train/car_0157.off
car/train/car_0158.off
car/train/car_0159.off
car/train/car_0160.off
car/train/car_0161.off
car/train/car_0162.off
car/train/car_0163.off
car/train/car_0164.off
car/train/car_0165.off
car/train/car_0166.off
car/train/car_0167.off
car/train/car_0168.off
car/train/car_0169.off
car/train/car_0170.off
car/train/car_0171.off
car/train/car_0172.off
car/train/car_0173.off
car/train/car_0174.off
car/train/car_0175.off
car/train/car_0176.off
car/train/car_0177.off
car/train/car_0178.off
dresser/train/dresser_0001.off
dresser/train/dresser_0002.off
dresser/train/dresser_0003.off
dresser/train/dresser_0004.off
dresser/train/dresser_0005.off
dresser/train/dresser_0006.off
dresser/train/dresser_0007.off
dresser/train/dresser_0008.off
dresser/train/dresser_0009.off
dresser/train/dresser_0010.off
dresser/train/dresser_0011.off
dresser/train/dresser_0012.off
dresser/train/dresser_0013.off
dresser/train/dresser_0014.off
dresser/train/dresser_0015.off
dresser/train/dresser_0016.off
dresser/train/dresser_0017.off
dresser/train/dresser_0018.off
dresser/train/dresser_0019.off
dresser/train/dresser_0020.off
dresser/train/dresser_0021.off
dresser/train/dresser_0022.off
dresser/train/dresser_0023.off
dresser/train/dresser_0024.off
dresser/train/dresser_0025.off
dresser/train/dresser_0026.off
dresser/train/dresser_0027.off
dresser/train/dresser_0028.off
dresser/train/dresser_0029.off
dresser/train/dresser_0030.off
dresser/train/dresser_0031.off
dresser/train/dresser_0032.off
dresser/train/dresser_0033.off
dresser/train/dresser_0034.off
dresser/train/dresser_0035.off
dresser/train/dresser_0036.off
dresser/train/dresser_0037.off
dresser/train/dresser_0038.off
dresser/train/dresser_0039.off
dresser/train/dresser_0040.off
dresser/train/dresser_0041.off
dresser/train/dresser_0042.off
dresser/train/dresser_0043.off
dresser/train/dresser_0044.off
dresser/train/dresser_0045.off
dresser/train/dresser_0046.off
dresser/train/dresser_0047.off
dresser/train/dresser_0048.off
dresser/train/dresser_0049.off
dresser/train/dresser_0050.off
dresser/train/dresser_0051.off
dresser/train/dresser_0052.off
dresser/train/dresser_0053.off
dresser/train/dresser_0054.off
dresser/train/dresser_0055.off
dresser/train/dresser_0056.off
dresser/train/dresser_0057.off
dresser/train/dresser_0058.off
dresser/train/dresser_0059.off
dresser/train/dresser_0060.off
dresser/train/dresser_0061.off
dresser/train/dresser_0062.off
dresser/train/dresser_0063.off
dresser/train/dresser_0064.off
dresser/train/dresser_0065.off
dresser/train/dresser_0066.off
dresser/train/dresser_0067.off
dresser/train/dresser_0068.off
dresser/train/dresser_0069.off
dresser/train/dresser_0070.off
dresser/train/dresser_0071.off
dresser/train/dresser_0072.off
dresser/train/dresser_0073.off
dresser/train/dresser_0074.off
dresser/train/dresser_0075.off
dresser/train/dresser_0076.off
dresser/train/dresser_0077.off
dresser/train/dresser_0078.off
dresser/train/dresser_0079.off
dresser/train/dresser_0080.off
dresser/train/dresser_0081.off
dresser/train/dresser_0082.off
dresser/train/dresser_0083.off
dresser/train/dresser_0084.off
dresser/train/dresser_0085.off
dresser/train/dresser_0086.off
dresser/train/dresser_0087.off
dresser/train/dresser_0088.off
dresser/train/dresser_0089.off
dresser/train/dresser_0090.off
dresser/train/dresser_0091.off
dresser/train/dresser_0092.off
dresser/train/dresser_0093.off
dresser/train/dresser_0094.off
dresser/train/dresser_0095.off
dresser/train/dresser_0096.off
dresser/train/dresser_0097.off
dresser/train/dresser_0098.off
dresser/train/dresser_0099.off
dresser/train/dresser_0100.off
dresser/train/dresser_0101.off
dresser/train/dresser_0102.off
dresser/train/dresser_0103.off
dresser/train/dresser_0104.off
dresser/train/dresser_0105.off
dresser/train/dresser_0106.off
dresser/train/dresser_0107.off
dresser/train/dresser_0108.off
dresser/train/dresser_0109.off
dresser/train/dresser_0110.off
dresser/train/dresser_0111.off
dresser/train/dresser_0112.off
dresser/train/dresser_0113.off
dresser/train/dresser_0114.off
dresser/train/dresser_0115.off
dresser/train/dresser_0116.off
dresser/train/dresser_0117.off
dresser/train/dresser_0118.off
dresser/train/dresser_0119.off
dresser/train/dresser_0120.off
dresser/train/dresser_0121.off
dresser/train/dresser_0122.off
dresser/train/dresser_0123.off
dresser/train/dresser_0124.off
dresser/train/dresser_0125.off
dresser/train/dresser_0126.off
dresser/train/dresser_0127.off
dresser/train/dresser_0128.off
dresser/train/dresser_0129.off
dresser/train/dresser_0130.off
dresser/train/dresser_0131.off
dresser/train/dresser_0132.off
dresser/train/dresser_0133.off
dresser/train/dresser_0134.off
dresser/train/dresser_0135.off
dresser/train/dresser_0136.off
dresser/train/dresser_0137.off
dresser/train/dresser_0138.off
dresser/train/dresser_0139.off
dresser/train/dresser_0140.off
dresser/train/dresser_0141.off
dresser/train/dresser_0142.off
dresser/train/dresser_0143.off
dresser/train/dresser_0144.off
dresser/train/dresser_0145.off
dresser/train/dresser_0146.off
dresser/train/dresser_0147.off
dresser/train/dresser_0148.off
dresser/train/dresser_0149.off
dresser/train/dresser_0150.off
dresser/train/dresser_0151.off
dresser/train/dresser_0152.off
dresser/train/dresser_0153.off
dresser/train/dresser_0154.off
dresser/train/dresser_0155.off
dresser/train/dresser_0156.off
dresser/train/dresser_0157.off
dresser/train/dresser_0158.off
dresser/train/dresser_0159.off
dresser/train/dresser_0160.off
dresser/train/dresser_0161.off
dresser/train/dresser_0162.off
dresser/train/dresser_0163.off
dresser/train/dresser_0164.off
dresser/train/dresser_0165.off
dresser/train/dresser_0166.off
dresser/train/dresser_0167.off
dresser/train/dresser_0168.off
dresser/train/dresser_0169.off
dresser/train/dresser_0170.off
dresser/train/dresser_0171.off
dresser/train/dresser_0172.off
dresser/train/dresser_0173.off
dresser/train/dresser_0174.off
dresser/train/dresser_0175.off
dresser/train/dresser_0176.off
dresser/train/dresser_0177.off
dresser/train/dresser_0178.off
dresser/train/dresser_0179.off
dresser/train/dresser_0180.off
toilet/train/toilet_0001.off
toilet/train/toilet_0002.off
toilet/train/toilet_0003.off
toilet/train/toilet_0004.off
toilet/train/toilet_0005.off
toilet/train/toilet_0006.off
toilet/train/toilet_0007.off
toilet/train/toilet_0008.off
toilet/train/toilet_0009.off
toilet/train/toilet_0010.off
toilet/train/toilet_0011.off
toilet/train/toilet_0012.off
toilet/train/toilet_0013.off
toilet/train/toilet_0014.off
toilet/train/toilet_0015.off
toilet/train/toilet_0016.off
toilet/train/toilet_0017.off
toilet/train/toilet_0018.off
toilet/train/toilet_0019.off
toilet/train/toilet_0020.off
toilet/train/toilet_0021.off
toilet/train/toilet_0022.off
toilet/train/toilet_0023.off
toilet/train/toilet_0024.off
toilet/train/toilet_0025.off
toilet/train/toilet_0026.off
toilet/train/toilet_0027.off
toilet/train/toilet_0028.off
toilet/train/toilet_0029.off
toilet/train/toilet_0030.off
toilet/train/toilet_0031.off
toilet/train/toilet_0032.off
toilet/train/toilet_0033.off
toilet/train/toilet_0034.off
toilet/train/toilet_0035.off
toilet/train/toilet_0036.off
toilet/train/toilet_0037.off
toilet/train/toilet_0038.off
toilet/train/toilet_0039.off
toilet/train/toilet_0040.off
toilet/train/toilet_0041.off
toilet/train/toilet_0042.off
toilet/train/toilet_0043.off
toilet/train/toilet_0044.off
toilet/train/toilet_0045.off
toilet/train/toilet_0046.off
toilet/train/toilet_0047.off
toilet/train/toilet_0048.off
toilet/train/toilet_0049.off
toilet/train/toilet_0050.off
toilet/train/toilet_0051.off
toilet/train/toilet_0052.off
toilet/train/toilet_0053.off
toilet/train/toilet_0054.off
toilet/train/toilet_0055.off
toilet/train/toilet_0056.off
toilet/train/toilet_0057.off
toilet/train/toilet_0058.off
toilet/train/toilet_0059.off
toilet/train/toilet_0060.off
toilet/train/toilet_0061.off
toilet/train/toilet_0062.off
toilet/train/toilet_0063.off
toilet/train/toilet_0064.off
toilet/train/toilet_0065.off
toilet/train/toilet_0066.off
toilet/train/toilet_0067.off
toilet/train/toilet_0068.off
toilet/train/toilet_0069.off
toilet/train/toilet_0070.off
toilet/train/toilet_0071.off
toilet/train/toilet_0072.off
toilet/train/toilet_0073.off
toilet/train/toilet_0074.off
toilet/train/toilet_0075.off
toilet/train/toilet_0076.off
toilet/train/toilet_0077.off
toilet/train/toilet_0078.off
toilet/train/toilet_0079.off
toilet/train/toilet_0080.off
toilet/train/toilet_0081.off
toilet/train/toilet_0082.off
toilet/train/toilet_0083.off
toilet/train/toilet_0084.off
toilet/train/toilet_0085.off
toilet/train/toilet_0086.off
toilet/train/toilet_0087.off
toilet/train/toilet_0088.off
toilet/train/toilet_0089.off
toilet/train/toilet_0090.off
toilet/train/toilet_0091.off
toilet/train/toilet_0092.off
toilet/train/toilet_0093.off
toilet/train/toilet_0094.off
toilet/train/toilet_0095.off
toilet/train/toilet_0096.off
toilet/train/toilet_0097.off
toilet/train/toilet_0098.off
toilet/train/toilet_0099.off
toilet/train/toilet_0100.off
toilet/train/toilet_0101.off
toilet/train/toilet_0102.off
toilet/train/toilet_0103.off
toilet/train/toilet_0104.off
toilet/train/toilet_0105.off
toilet/train/toilet_0106.off
toilet/train/toilet_0107.off
toilet/train/toilet_0108.off
toilet/train/toilet_0109.off
toilet/train/toilet_0110.off
toilet/train/toilet_0111.off
toilet/train/toilet_0112.off
toilet/train/toilet_0113.off
toilet/train/toilet_0114.off
toilet/train/toilet_0115.off
toilet/train/toilet_0116.off
toilet/train/toilet_0117.off
toilet/train/toilet_0118.off
toilet/train/toilet_0119.off
toilet/train/toilet_0120.off
toilet/train/toilet_0121.off
toilet/train/toilet_0122.off
toilet/train/toilet_0123.off
toilet/train/toilet_0124.off
toilet/train/toilet_0125.off
toilet/train/toilet_0126.off
toilet/train/toilet_0127.off
toilet/train/toilet_0128.off
toilet/train/toilet_0129.off
toilet/train/toilet_0130.off
toilet/train/toilet_0131.off
toilet/train/toilet_0132.off
toilet/train/toilet_0133.off
toilet/train/toilet_0134.off
toilet/train/toilet_0135.off
toilet/train/toilet_0136.off
toilet/train/toilet_0137.off
toilet/train/toilet_0138.off
toilet/train/toilet_0139.off
toilet/train/toilet_0140.off
toilet/train/toilet_0141.off
toilet/train/toilet_0142.off
toilet/train/toilet_0143.off
toilet/train/toilet_0144.off
toilet/train/toilet_0145.off
toilet/train/toilet_0146.off
toilet/train/toilet_0147.off
toilet/train/toilet_0148.off
toilet/train/toilet_0149.off
toilet/train/toilet_0150.off
toilet/train/toilet_0151.off
toilet/train/toilet_0152.off
toilet/train/toilet_0153.off
toilet/train/toilet_0154.off
toilet/train/toilet_0155.off
toilet/train/toilet_0156.off
toilet/train/toilet_0157.off
toilet/train/toilet_0158.off
toilet/train/toilet_0159.off
toilet/train/toilet_0160.off
toilet/train/toilet_0161.off
toilet/train/toilet_0162.off
toilet/train/toilet_0163.off
toilet/train/toilet_0164.off
toilet/train/toilet_0165.off
toilet/train/toilet_0166.off
toilet/train/toilet_0167.off
toilet/train/toilet_0168.off
toilet/train/toilet_0169.off
toilet/train/toilet_0170.off
toilet/train/toilet_0171.off
toilet/train/toilet_0172.off
toilet/train/toilet_0173.off
toilet/train/toilet_0174.off
toilet/train/toilet_0175.off
toilet/train/toilet_0176.off
toilet/train/toilet_0177.off
toilet/train/toilet_0178.off
toilet/train/toilet_0179.off
toilet/train/toilet_0180.off
toilet/train/toilet_0181.off
toilet/train/toilet_0182.off
toilet/train/toilet_0183.off
toilet/train/toilet_0184.off
toilet/train/toilet_0185.off
toilet/train/toilet_0186.off
toilet/train/toilet_0187.off
toilet/train/toilet_0188.off
toilet/train/toilet_0189.off
toilet/train/toilet_0190.off
toilet/train/toilet_0191.off
toilet/train/toilet_0192.off
toilet/train/toilet_0193.off
toilet/train/toilet_0194.off
toilet/train/toilet_0195.off
toilet/train/toilet_0196.off
toilet/train/toilet_0197.off
toilet/train/toilet_0198.off
toilet/train/toilet_0199.off
toilet/train/toilet_0200.off
toilet/train/toilet_0201.off
toilet/train/toilet_0202.off
toilet/train/toilet_0203.off
toilet/train/toilet_0204.off
toilet/train/toilet_0205.off
toilet/train/toilet_0206.off
toilet/train/toilet_0207.off
toilet/train/toilet_0208.off
toilet/train/toilet_0209.off
toilet/train/toilet_0210.off
toilet/train/toilet_0211.off
toilet/train/toilet_0212.off
toilet/train/toilet_0213.off
toilet/train/toilet_0214.off
toilet/train/toilet_0215.off
toilet/train/toilet_0216.off
toilet/train/toilet_0217.off
toilet/train/toilet_0218.off
toilet/train/toilet_0219.off
toilet/train/toilet_0220.off
toilet/train/toilet_0221.off
toilet/train/toilet_0222.off
toilet/train/toilet_0223.off
toilet/train/toilet_0224.off
toilet/train/toilet_0225.off
toilet/train/toilet_0226.off
toilet/train/toilet_0227.off
toilet/train/toilet_0228.off
toilet/train/toilet_0229.off
toilet/train/toilet_0230.off
toilet/train/toilet_0231.off
toilet/train/toilet_0232.off
toilet/train/toilet_0233.off
toilet/train/toilet_0234.off
toilet/train/toilet_0235.off
toilet/train/toilet_0236.off
toilet/train/toilet_0237.off
toilet/train/toilet_0238.off
toilet/train/toilet_0239.off
toilet/train/toilet_0240.off
toilet/train/toilet_0241.off
toilet/train/toilet_0242.off
toilet/train/toilet_0243.off
toilet/train/toilet_0244.off
toilet/train/toilet_0245.off
toilet/train/toilet_0246.off
toilet/train/toilet_0247.off
toilet/train/toilet_0248.off
toilet/train/toilet_0249.off
toilet/train/toilet_0250.off
toilet/train/toilet_0251.off
toilet/train/toilet_0252.off
toilet/train/toilet_0253.off
toilet/train/toilet_0254.off
toilet/train/toilet_0255.off
toilet/train/toilet_0256.off
toilet/train/toilet_0257.off
toilet/train/toilet_0258.off
toilet/train/toilet_0259.off
toilet/train/toilet_0260.off
toilet/train/toilet_0261.off
toilet/train/toilet_0262.off
toilet/train/toilet_0263.off
toilet/train/toilet_0264.off
toilet/train/toilet_0265.off
toilet/train/toilet_0266.off
toilet/train/toilet_0267.off
toilet/train/toilet_0268.off
toilet/train/toilet_0269.off
toilet/train/toilet_0270.off
toilet/train/toilet_0271.off
toilet/train/toilet_0272.off
toilet/train/toilet_0273.off
toilet/train/toilet_0274.off
toilet/train/toilet_0275.off
toilet/train/toilet_0276.off
toilet/train/toilet_0277.off
toilet/train/toilet_0278.off
toilet/train/toilet_0279.off
toilet/train/toilet_0280.off
toilet/train/toilet_0281.off
toilet/train/toilet_0282.off
toilet/train/toilet_0283.off
toilet/train/toilet_0284.off
toilet/train/toilet_0285.off
toilet/train/toilet_0286.off
toilet/train/toilet_0287.off
toilet/train/toilet_0288.off
toilet/train/toilet_0289.off
toilet/train/toilet_0290.off
toilet/train/toilet_0291.off
toilet/train/toilet_0292.off
toilet/train/toilet_0293.off
toilet/train/toilet_0294.off
toilet/train/toilet_0295.off
toilet/train/toilet_0296.off
toilet/train/toilet_0297.off
toilet/train/toilet_0298.off
toilet/train/toilet_0299.off
toilet/train/toilet_0300.off
toilet/train/toilet_0301.off
toilet/train/toilet_0302.off
toilet/train/toilet_0303.off
toilet/train/toilet_0304.off
toilet/train/toilet_0305.off
toilet/train/toilet_0306.off
toilet/train/toilet_0307.off
toilet/train/toilet_0308.off
toilet/train/toilet_0309.off
toilet/train/toilet_0310.off
curtain/train/curtain_0001.off
curtain/train/curtain_0002.off
curtain/train/curtain_0003.off
curtain/train/curtain_0004.off
curtain/train/curtain_0005.off
curtain/train/curtain_0006.off
curtain/train/curtain_0007.off
curtain/train/curtain_0008.off
curtain/train/curtain_0009.off
curtain/train/curtain_0010.off
curtain/train/curtain_0011.off
curtain/train/curtain_0012.off
curtain/train/curtain_0013.off
curtain/train/curtain_0014.off
curtain/train/curtain_0015.off
curtain/train/curtain_0016.off
curtain/train/curtain_0017.off
curtain/train/curtain_0018.off
curtain/train/curtain_0019.off
curtain/train/curtain_0020.off
curtain/train/curtain_0021.off
curtain/train/curtain_0022.off
curtain/train/curtain_0023.off
curtain/train/curtain_0024.off
curtain/train/curtain_0025.off
curtain/train/curtain_0026.off
curtain/train/curtain_0027.off
curtain/train/curtain_0028.off
curtain/train/curtain_0029.off
curtain/train/curtain_0030.off
curtain/train/curtain_0031.off
curtain/train/curtain_0032.off
curtain/train/curtain_0033.off
curtain/train/curtain_0034.off
curtain/train/curtain_0035.off
curtain/train/curtain_0036.off
curtain/train/curtain_0037.off
curtain/train/curtain_0038.off
curtain/train/curtain_0039.off
curtain/train/curtain_0040.off
curtain/train/curtain_0041.off
curtain/train/curtain_0042.off
curtain/train/curtain_0043.off
curtain/train/curtain_0044.off
curtain/train/curtain_0045.off
curtain/train/curtain_0046.off
curtain/train/curtain_0047.off
curtain/train/curtain_0048.off
curtain/train/curtain_0049.off
curtain/train/curtain_0050.off
curtain/train/curtain_0051.off
curtain/train/curtain_0052.off
curtain/train/curtain_0053.off
curtain/train/curtain_0054.off
curtain/train/curtain_0055.off
curtain/train/curtain_0056.off
curtain/train/curtain_0057.off
curtain/train/curtain_0058.off
curtain/train/curtain_0059.off
curtain/train/curtain_0060.off
curtain/train/curtain_0061.off
curtain/train/curtain_0062.off
curtain/train/curtain_0063.off
curtain/train/curtain_0064.off
curtain/train/curtain_0065.off
curtain/train/curtain_0066.off
curtain/train/curtain_0067.off
curtain/train/curtain_0068.off
curtain/train/curtain_0069.off
curtain/train/curtain_0070.off
curtain/train/curtain_0071.off
curtain/train/curtain_0072.off
curtain/train/curtain_0073.off
curtain/train/curtain_0074.off
curtain/train/curtain_0075.off
curtain/train/curtain_0076.off
curtain/train/curtain_0077.off
curtain/train/curtain_0078.off
curtain/train/curtain_0079.off
curtain/train/curtain_0080.off
curtain/train/curtain_0081.off
curtain/train/curtain_0082.off
curtain/train/curtain_0083.off
curtain/train/curtain_0084.off
curtain/train/curtain_0085.off
curtain/train/curtain_0086.off
curtain/train/curtain_0087.off
curtain/train/curtain_0088.off
curtain/train/curtain_0089.off
curtain/train/curtain_0090.off
curtain/train/curtain_0091.off
curtain/train/curtain_0092.off
curtain/train/curtain_0093.off
curtain/train/curtain_0094.off
curtain/train/curtain_0095.off
curtain/train/curtain_0096.off
curtain/train/curtain_0097.off
curtain/train/curtain_0098.off
curtain/train/curtain_0099.off
curtain/train/curtain_0100.off
curtain/train/curtain_0101.off
curtain/train/curtain_0102.off
curtain/train/curtain_0103.off
curtain/train/curtain_0104.off
curtain/train/curtain_0105.off
curtain/train/curtain_0106.off
curtain/train/curtain_0107.off
curtain/train/curtain_0108.off
curtain/train/curtain_0109.off
curtain/train/curtain_0110.off
curtain/train/curtain_0111.off
curtain/train/curtain_0112.off
curtain/train/curtain_0113.off
curtain/train/curtain_0114.off
curtain/train/curtain_0115.off
curtain/train/curtain_0116.off
curtain/train/curtain_0117.off
curtain/train/curtain_0118.off
curtain/train/curtain_0119.off
curtain/train/curtain_0120.off
curtain/train/curtain_0121.off
curtain/train/curtain_0122.off
curtain/train/curtain_0123.off
curtain/train/curtain_0124.off
curtain/train/curtain_0125.off
wardrobe/train/wardrobe_0001.off
wardrobe/train/wardrobe_0002.off
wardrobe/train/wardrobe_0003.off
wardrobe/train/wardrobe_0004.off
wardrobe/train/wardrobe_0005.off
wardrobe/train/wardrobe_0006.off
wardrobe/train/wardrobe_0007.off
wardrobe/train/wardrobe_0008.off
wardrobe/train/wardrobe_0009.off
wardrobe/train/wardrobe_0010.off
wardrobe/train/wardrobe_0011.off
wardrobe/train/wardrobe_0012.off
wardrobe/train/wardrobe_0013.off
wardrobe/train/wardrobe_0014.off
wardrobe/train/wardrobe_0015.off
wardrobe/train/wardrobe_0016.off
wardrobe/train/wardrobe_0017.off
wardrobe/train/wardrobe_0018.off
wardrobe/train/wardrobe_0019.off
wardrobe/train/wardrobe_0020.off
wardrobe/train/wardrobe_0021.off
wardrobe/train/wardrobe_0022.off
wardrobe/train/wardrobe_0023.off
wardrobe/train/wardrobe_0024.off
wardrobe/train/wardrobe_0025.off
wardrobe/train/wardrobe_0026.off
wardrobe/train/wardrobe_0027.off
wardrobe/train/wardrobe_0028.off
wardrobe/train/wardrobe_0029.off
wardrobe/train/wardrobe_0030.off
wardrobe/train/wardrobe_0031.off
wardrobe/train/wardrobe_0032.off
wardrobe/train/wardrobe_0033.off
wardrobe/train/wardrobe_0034.off
wardrobe/train/wardrobe_0035.off
wardrobe/train/wardrobe_0036.off
wardrobe/train/wardrobe_0037.off
wardrobe/train/wardrobe_0038.off
wardrobe/train/wardrobe_0039.off
wardrobe/train/wardrobe_0040.off
wardrobe/train/wardrobe_0041.off
wardrobe/train/wardrobe_0042.off
wardrobe/train/wardrobe_0043.off
wardrobe/train/wardrobe_0044.off
wardrobe/train/wardrobe_0045.off
wardrobe/train/wardrobe_0046.off
wardrobe/train/wardrobe_0047.off
wardrobe/train/wardrobe_0048.off
wardrobe/train/wardrobe_0049.off
wardrobe/train/wardrobe_0050.off
wardrobe/train/wardrobe_0051.off
wardrobe/train/wardrobe_0052.off
wardrobe/train/wardrobe_0053.off
wardrobe/train/wardrobe_0054.off
wardrobe/train/wardrobe_0055.off
wardrobe/train/wardrobe_0056.off
wardrobe/train/wardrobe_0057.off
wardrobe/train/wardrobe_0058.off
wardrobe/train/wardrobe_0059.off
wardrobe/train/wardrobe_0060.off
wardrobe/train/wardrobe_0061.off
wardrobe/train/wardrobe_0062.off
wardrobe/train/wardrobe_0063.off
wardrobe/train/wardrobe_0064.off
wardrobe/train/wardrobe_0065.off
wardrobe/train/wardrobe_0066.off
wardrobe/train/wardrobe_0067.off
wardrobe/train/wardrobe_0068.off
wardrobe/train/wardrobe_0069.off
wardrobe/train/wardrobe_0070.off
wardrobe/train/wardrobe_0071.off
wardrobe/train/wardrobe_0072.off
wardrobe/train/wardrobe_0073.off
wardrobe/train/wardrobe_0074.off
wardrobe/train/wardrobe_0075.off
wardrobe/train/wardrobe_0076.off
wardrobe/train/wardrobe_0077.off
wardrobe/train/wardrobe_0078.off
wardrobe/train/wardrobe_0079.off
stool/train/stool_0001.off
stool/train/stool_0002.off
stool/train/stool_0003.off
stool/train/stool_0004.off
stool/train/stool_0005.off
stool/train/stool_0006.off
stool/train/stool_0007.off
stool/train/stool_0008.off
stool/train/stool_0009.off
stool/train/stool_0010.off
stool/train/stool_0011.off
stool/train/stool_0012.off
stool/train/stool_0013.off
stool/train/stool_0014.off
stool/train/stool_0015.off
stool/train/stool_0016.off
stool/train/stool_0017.off
stool/train/stool_0018.off
stool/train/stool_0019.off
stool/train/stool_0020.off
stool/train/stool_0021.off
stool/train/stool_0022.off
stool/train/stool_0023.off
stool/train/stool_0024.off
stool/train/stool_0025.off
stool/train/stool_0026.off
stool/train/stool_0027.off
stool/train/stool_0028.off
stool/train/stool_0029.off
stool/train/stool_0030.off
stool/train/stool_0031.off
stool/train/stool_0032.off
stool/train/stool_0033.off
stool/train/stool_0034.off
stool/train/stool_0035.off
stool/train/stool_0036.off
stool/train/stool_0037.off
stool/train/stool_0038.off
stool/train/stool_0039.off
stool/train/stool_0040.off
stool/train/stool_0041.off
stool/train/stool_0042.off
stool/train/stool_0043.off
stool/train/stool_0044.off
stool/train/stool_0045.off
stool/train/stool_0046.off
stool/train/stool_0047.off
stool/train/stool_0048.off
stool/train/stool_0049.off
stool/train/stool_0050.off
stool/train/stool_0051.off
stool/train/stool_0052.off
stool/train/stool_0053.off
stool/train/stool_0054.off
stool/train/stool_0055.off
stool/train/stool_0056.off
stool/train/stool_0057.off
stool/train/stool_0058.off
stool/train/stool_0059.off
stool/train/stool_0060.off
stool/train/stool_0061.off
stool/train/stool_0062.off
stool/train/stool_0063.off
stool/train/stool_0064.off
stool/train/stool_0065.off
stool/train/stool_0066.off
stool/train/stool_0067.off
stool/train/stool_0068.off
stool/train/stool_0069.off
stool/train/stool_0070.off
stool/train/stool_0071.off
stool/train/stool_0072.off
stool/train/stool_0073.off
stool/train/stool_0074.off
stool/train/stool_0075.off
stool/train/stool_0076.off
stool/train/stool_0077.off
stool/train/stool_0078.off
stool/train/stool_0079.off
stool/train/stool_0080.off
stool/train/stool_0081.off
mantel/train/mantel_0001.off
mantel/train/mantel_0002.off
mantel/train/mantel_0003.off
mantel/train/mantel_0004.off
mantel/train/mantel_0005.off
mantel/train/mantel_0006.off
mantel/train/mantel_0007.off
mantel/train/mantel_0008.off
mantel/train/mantel_0009.off
mantel/train/mantel_0010.off
mantel/train/mantel_0011.off
mantel/train/mantel_0012.off
mantel/train/mantel_0013.off
mantel/train/mantel_0014.off
mantel/train/mantel_0015.off
mantel/train/mantel_0016.off
mantel/train/mantel_0017.off
mantel/train/mantel_0018.off
mantel/train/mantel_0019.off
mantel/train/mantel_0020.off
mantel/train/mantel_0021.off
mantel/train/mantel_0022.off
mantel/train/mantel_0023.off
mantel/train/mantel_0024.off
mantel/train/mantel_0025.off
mantel/train/mantel_0026.off
mantel/train/mantel_0027.off
mantel/train/mantel_0028.off
mantel/train/mantel_0029.off
mantel/train/mantel_0030.off
mantel/train/mantel_0031.off
mantel/train/mantel_0032.off
mantel/train/mantel_0033.off
mantel/train/mantel_0034.off
mantel/train/mantel_0035.off
mantel/train/mantel_0036.off
mantel/train/mantel_0037.off
mantel/train/mantel_0038.off
mantel/train/mantel_0039.off
mantel/train/mantel_0040.off
mantel/train/mantel_0041.off
mantel/train/mantel_0042.off
mantel/train/mantel_0043.off
mantel/train/mantel_0044.off
mantel/train/mantel_0045.off
mantel/train/mantel_0046.off
mantel/train/mantel_0047.off
mantel/train/mantel_0048.off
mantel/train/mantel_0049.off
mantel/train/mantel_0050.off
mantel/train/mantel_0051.off
mantel/train/mantel_0052.off
mantel/train/mantel_0053.off
mantel/train/mantel_0054.off
mantel/train/mantel_0055.off
mantel/train/mantel_0056.off
mantel/train/mantel_0057.off
mantel/train/mantel_0058.off
mantel/train/mantel_0059.off
mantel/train/mantel_0060.off
mantel/train/mantel_0061.off
mantel/train/mantel_0062.off
mantel/train/mantel_0063.off
mantel/train/mantel_0064.off
mantel/train/mantel_0065.off
mantel/train/mantel_0066.off
mantel/train/mantel_0067.off
mantel/train/mantel_0068.off
mantel/train/mantel_0069.off
mantel/train/mantel_0070.off
mantel/train/mantel_0071.off
mantel/train/mantel_0072.off
mantel/train/mantel_0073.off
mantel/train/mantel_0074.off
mantel/train/mantel_0075.off
mantel/train/mantel_0076.off
mantel/train/mantel_0077.off
mantel/train/mantel_0078.off
mantel/train/mantel_0079.off
mantel/train/mantel_0080.off
mantel/train/mantel_0081.off
mantel/train/mantel_0082.off
mantel/train/mantel_0083.off
mantel/train/mantel_0084.off
mantel/train/mantel_0085.off
mantel/train/mantel_0086.off
mantel/train/mantel_0087.off
mantel/train/mantel_0088.off
mantel/train/mantel_0089.off
mantel/train/mantel_0090.off
mantel/train/mantel_0091.off
mantel/train/mantel_0092.off
mantel/train/mantel_0093.off
mantel/train/mantel_0094.off
mantel/train/mantel_0095.off
mantel/train/mantel_0096.off
mantel/train/mantel_0097.off
mantel/train/mantel_0098.off
mantel/train/mantel_0099.off
mantel/train/mantel_0100.off
mantel/train/mantel_0101.off
mantel/train/mantel_0102.off
mantel/train/mantel_0103.off
mantel/train/mantel_0104.off
mantel/train/mantel_0105.off
mantel/train/mantel_0106.off
mantel/train/mantel_0107.off
mantel/train/mantel_0108.off
mantel/train/mantel_0109.off
mantel/train/mantel_0110.off
mantel/train/mantel_0111.off
mantel/train/mantel_0112.off
mantel/train/mantel_0113.off
mantel/train/mantel_0114.off
mantel/train/mantel_0115.off
mantel/train/mantel_0116.off
mantel/train/mantel_0117.off
mantel/train/mantel_0118.off
mantel/train/mantel_0119.off
mantel/train/mantel_0120.off
mantel/train/mantel_0121.off
mantel/train/mantel_0122.off
mantel/train/mantel_0123.off
mantel/train/mantel_0124.off
mantel/train/mantel_0125.off
mantel/train/mantel_0126.off
mantel/train/mantel_0127.off
mantel/train/mantel_0128.off
mantel/train/mantel_0129.off
mantel/train/mantel_0130.off
mantel/train/mantel_0131.off
mantel/train/mantel_0132.off
mantel/train/mantel_0133.off
mantel/train/mantel_0134.off
mantel/train/mantel_0135.off
mantel/train/mantel_0136.off
mantel/train/mantel_0137.off
mantel/train/mantel_0138.off
mantel/train/mantel_0139.off
mantel/train/mantel_0140.off
mantel/train/mantel_0141.off
mantel/train/mantel_0142.off
mantel/train/mantel_0143.off
mantel/train/mantel_0144.off
mantel/train/mantel_0145.off
mantel/train/mantel_0146.off
mantel/train/mantel_0147.off
mantel/train/mantel_0148.off
mantel/train/mantel_0149.off
mantel/train/mantel_0150.off
mantel/train/mantel_0151.off
mantel/train/mantel_0152.off
mantel/train/mantel_0153.off
mantel/train/mantel_0154.off
mantel/train/mantel_0155.off
mantel/train/mantel_0156.off
mantel/train/mantel_0157.off
mantel/train/mantel_0158.off
mantel/train/mantel_0159.off
mantel/train/mantel_0160.off
mantel/train/mantel_0161.off
mantel/train/mantel_0162.off
mantel/train/mantel_0163.off
mantel/train/mantel_0164.off
mantel/train/mantel_0165.off
mantel/train/mantel_0166.off
mantel/train/mantel_0167.off
mantel/train/mantel_0168.off
mantel/train/mantel_0169.off
mantel/train/mantel_0170.off
mantel/train/mantel_0171.off
mantel/train/mantel_0172.off
mantel/train/mantel_0173.off
mantel/train/mantel_0174.off
mantel/train/mantel_0175.off
mantel/train/mantel_0176.off
mantel/train/mantel_0177.off
mantel/train/mantel_0178.off
mantel/train/mantel_0179.off
mantel/train/mantel_0180.off
mantel/train/mantel_0181.off
mantel/train/mantel_0182.off
mantel/train/mantel_0183.off
mantel/train/mantel_0184.off
mantel/train/mantel_0185.off
mantel/train/mantel_0186.off
mantel/train/mantel_0187.off
mantel/train/mantel_0188.off
mantel/train/mantel_0189.off
mantel/train/mantel_0190.off
mantel/train/mantel_0191.off
mantel/train/mantel_0192.off
mantel/train/mantel_0193.off
mantel/train/mantel_0194.off
mantel/train/mantel_0195.off
mantel/train/mantel_0196.off
mantel/train/mantel_0197.off
mantel/train/mantel_0198.off
mantel/train/mantel_0199.off
mantel/train/mantel_0200.off
mantel/train/mantel_0201.off
mantel/train/mantel_0202.off
mantel/train/mantel_0203.off
mantel/train/mantel_0204.off
mantel/train/mantel_0205.off
mantel/train/mantel_0206.off
mantel/train/mantel_0207.off
mantel/train/mantel_0208.off
mantel/train/mantel_0209.off
mantel/train/mantel_0210.off
mantel/train/mantel_0211.off
mantel/train/mantel_0212.off
mantel/train/mantel_0213.off
mantel/train/mantel_0214.off
mantel/train/mantel_0215.off
mantel/train/mantel_0216.off
mantel/train/mantel_0217.off
mantel/train/mantel_0218.off
mantel/train/mantel_0219.off
mantel/train/mantel_0220.off
mantel/train/mantel_0221.off
mantel/train/mantel_0222.off
mantel/train/mantel_0223.off
mantel/train/mantel_0224.off
mantel/train/mantel_0225.off
mantel/train/mantel_0226.off
mantel/train/mantel_0227.off
mantel/train/mantel_0228.off
mantel/train/mantel_0229.off
mantel/train/mantel_0230.off
mantel/train/mantel_0231.off
mantel/train/mantel_0232.off
mantel/train/mantel_0233.off
mantel/train/mantel_0234.off
mantel/train/mantel_0235.off
mantel/train/mantel_0236.off
mantel/train/mantel_0237.off
mantel/train/mantel_0238.off
mantel/train/mantel_0239.off
mantel/train/mantel_0240.off
mantel/train/mantel_0241.off
mantel/train/mantel_0242.off
mantel/train/mantel_0243.off
mantel/train/mantel_0244.off
mantel/train/mantel_0245.off
mantel/train/mantel_0246.off
mantel/train/mantel_0247.off
mantel/train/mantel_0248.off
mantel/train/mantel_0249.off
mantel/train/mantel_0250.off
mantel/train/mantel_0251.off
mantel/train/mantel_0252.off
mantel/train/mantel_0253.off
mantel/train/mantel_0254.off
mantel/train/mantel_0255.off
mantel/train/mantel_0256.off
cup/train/cup_0001.off
cup/train/cup_0002.off
cup/train/cup_0003.off
cup/train/cup_0004.off
cup/train/cup_0005.off
cup/train/cup_0006.off
cup/train/cup_0007.off
cup/train/cup_0008.off
cup/train/cup_0009.off
cup/train/cup_0010.off
cup/train/cup_0011.off
cup/train/cup_0012.off
cup/train/cup_0013.off
cup/train/cup_0014.off
cup/train/cup_0015.off
cup/train/cup_0016.off
cup/train/cup_0017.off
cup/train/cup_0018.off
cup/train/cup_0019.off
cup/train/cup_0020.off
cup/train/cup_0021.off
cup/train/cup_0022.off
cup/train/cup_0023.off
cup/train/cup_0024.off
cup/train/cup_0025.off
cup/train/cup_0026.off
cup/train/cup_0027.off
cup/train/cup_0028.off
cup/train/cup_0029.off
cup/train/cup_0030.off
cup/train/cup_0031.off
cup/train/cup_0032.off
cup/train/cup_0033.off
cup/train/cup_0034.off
cup/train/cup_0035.off
cup/train/cup_0036.off
cup/train/cup_0037.off
cup/train/cup_0038.off
cup/train/cup_0039.off
cup/train/cup_0040.off
cup/train/cup_0041.off
cup/train/cup_0042.off
cup/train/cup_0043.off
cup/train/cup_0044.off
cup/train/cup_0045.off
cup/train/cup_0046.off
cup/train/cup_0047.off
cup/train/cup_0048.off
cup/train/cup_0049.off
cup/train/cup_0050.off
cup/train/cup_0051.off
cup/train/cup_0052.off
cup/train/cup_0053.off
cup/train/cup_0054.off
cup/train/cup_0055.off
cup/train/cup_0056.off
cup/train/cup_0057.off
cup/train/cup_0058.off
cup/train/cup_0059.off
cup/train/cup_0060.off
cup/train/cup_0061.off
cup/train/cup_0062.off
cup/train/cup_0063.off
cup/train/cup_0064.off
cup/train/cup_0065.off
cup/train/cup_0066.off
cup/train/cup_0067.off
cup/train/cup_0068.off
cup/train/cup_0069.off
cup/train/cup_0070.off
cup/train/cup_0071.off
cup/train/cup_0072.off
radio/train/radio_0001.off
radio/train/radio_0002.off
radio/train/radio_0003.off
radio/train/radio_0004.off
radio/train/radio_0005.off
radio/train/radio_0006.off
radio/train/radio_0007.off
radio/train/radio_0008.off
radio/train/radio_0009.off
radio/train/radio_0010.off
radio/train/radio_0011.off
radio/train/radio_0012.off
radio/train/radio_0013.off
radio/train/radio_0014.off
radio/train/radio_0015.off
radio/train/radio_0016.off
radio/train/radio_0017.off
radio/train/radio_0018.off
radio/train/radio_0019.off
radio/train/radio_0020.off
radio/train/radio_0021.off
radio/train/radio_0022.off
radio/train/radio_0023.off
radio/train/radio_0024.off
radio/train/radio_0025.off
radio/train/radio_0026.off
radio/train/radio_0027.off
radio/train/radio_0028.off
radio/train/radio_0029.off
radio/train/radio_0030.off
radio/train/radio_0031.off
radio/train/radio_0032.off
radio/train/radio_0033.off
radio/train/radio_0034.off
radio/train/radio_0035.off
radio/train/radio_0036.off
radio/train/radio_0037.off
radio/train/radio_0038.off
radio/train/radio_0039.off
radio/train/radio_0040.off
radio/train/radio_0041.off
radio/train/radio_0042.off
radio/train/radio_0043.off
radio/train/radio_0044.off
radio/train/radio_0045.off
radio/train/radio_0046.off
radio/train/radio_0047.off
radio/train/radio_0048.off
radio/train/radio_0049.off
radio/train/radio_0050.off
radio/train/radio_0051.off
radio/train/radio_0052.off
radio/train/radio_0053.off
radio/train/radio_0054.off
radio/train/radio_0055.off
radio/train/radio_0056.off
radio/train/radio_0057.off
radio/train/radio_0058.off
radio/train/radio_0059.off
radio/train/radio_0060.off
radio/train/radio_0061.off
radio/train/radio_0062.off
radio/train/radio_0063.off
radio/train/radio_0064.off
radio/train/radio_0065.off
radio/train/radio_0066.off
radio/train/radio_0067.off
radio/train/radio_0068.off
radio/train/radio_0069.off
radio/train/radio_0070.off
radio/train/radio_0071.off
radio/train/radio_0072.off
radio/train/radio_0073.off
radio/train/radio_0074.off
radio/train/radio_0075.off
radio/train/radio_0076.off
radio/train/radio_0077.off
radio/train/radio_0078.off
radio/train/radio_0079.off
radio/train/radio_0080.off
radio/train/radio_0081.off
radio/train/radio_0082.off
radio/train/radio_0083.off
radio/train/radio_0084.off
radio/train/radio_0085.off
radio/train/radio_0086.off
radio/train/radio_0087.off
radio/train/radio_0088.off
radio/train/radio_0089.off
radio/train/radio_0090.off
radio/train/radio_0091.off
radio/train/radio_0092.off
radio/train/radio_0093.off
radio/train/radio_0094.off
airplane/train/airplane_0001.off
airplane/train/airplane_0002.off
airplane/train/airplane_0003.off
airplane/train/airplane_0004.off
airplane/train/airplane_0005.off
airplane/train/airplane_0006.off
airplane/train/airplane_0007.off
airplane/train/airplane_0008.off
airplane/train/airplane_0009.off
airplane/train/airplane_0010.off
airplane/train/airplane_0011.off
airplane/train/airplane_0012.off
airplane/train/airplane_0013.off
airplane/train/airplane_0014.off
airplane/train/airplane_0015.off
airplane/train/airplane_0016.off
airplane/train/airplane_0017.off
airplane/train/airplane_0018.off
airplane/train/airplane_0019.off
airplane/train/airplane_0020.off
airplane/train/airplane_0021.off
airplane/train/airplane_0022.off
airplane/train/airplane_0023.off
airplane/train/airplane_0024.off
airplane/train/airplane_0025.off
airplane/train/airplane_0026.off
airplane/train/airplane_0027.off
airplane/train/airplane_0028.off
airplane/train/airplane_0029.off
airplane/train/airplane_0030.off
airplane/train/airplane_0031.off
airplane/train/airplane_0032.off
airplane/train/airplane_0033.off
airplane/train/airplane_0034.off
airplane/train/airplane_0035.off
airplane/train/airplane_0036.off
airplane/train/airplane_0037.off
airplane/train/airplane_0038.off
airplane/train/airplane_0039.off
airplane/train/airplane_0040.off
airplane/train/airplane_0041.off
airplane/train/airplane_0042.off
airplane/train/airplane_0043.off
airplane/train/airplane_0044.off
airplane/train/airplane_0045.off
airplane/train/airplane_0046.off
airplane/train/airplane_0047.off
airplane/train/airplane_0048.off
airplane/train/airplane_0049.off
airplane/train/airplane_0050.off
airplane/train/airplane_0051.off
airplane/train/airplane_0052.off
airplane/train/airplane_0053.off
airplane/train/airplane_0054.off
airplane/train/airplane_0055.off
airplane/train/airplane_0056.off
airplane/train/airplane_0057.off
airplane/train/airplane_0058.off
airplane/train/airplane_0059.off
airplane/train/airplane_0060.off
airplane/train/airplane_0061.off
airplane/train/airplane_0062.off
airplane/train/airplane_0063.off
airplane/train/airplane_0064.off
airplane/train/airplane_0065.off
airplane/train/airplane_0066.off
airplane/train/airplane_0067.off
airplane/train/airplane_0068.off
airplane/train/airplane_0069.off
airplane/train/airplane_0070.off
airplane/train/airplane_0071.off
airplane/train/airplane_0072.off
airplane/train/airplane_0073.off
airplane/train/airplane_0074.off
airplane/train/airplane_0075.off
airplane/train/airplane_0076.off
airplane/train/airplane_0077.off
airplane/train/airplane_0078.off
airplane/train/airplane_0079.off
airplane/train/airplane_0080.off
airplane/train/airplane_0081.off
airplane/train/airplane_0082.off
airplane/train/airplane_0083.off
airplane/train/airplane_0084.off
airplane/train/airplane_0085.off
airplane/train/airplane_0086.off
airplane/train/airplane_0087.off
airplane/train/airplane_0088.off
airplane/train/airplane_0089.off
airplane/train/airplane_0090.off
airplane/train/airplane_0091.off
airplane/train/airplane_0092.off
airplane/train/airplane_0093.off
airplane/train/airplane_0094.off
airplane/train/airplane_0095.off
airplane/train/airplane_0096.off
airplane/train/airplane_0097.off
airplane/train/airplane_0098.off
airplane/train/airplane_0099.off
airplane/train/airplane_0100.off
airplane/train/airplane_0101.off
airplane/train/airplane_0102.off
airplane/train/airplane_0103.off
airplane/train/airplane_0104.off
airplane/train/airplane_0105.off
airplane/train/airplane_0106.off
airplane/train/airplane_0107.off
airplane/train/airplane_0108.off
airplane/train/airplane_0109.off
airplane/train/airplane_0110.off
airplane/train/airplane_0111.off
airplane/train/airplane_0112.off
airplane/train/airplane_0113.off
airplane/train/airplane_0114.off
airplane/train/airplane_0115.off
airplane/train/airplane_0116.off
airplane/train/airplane_0117.off
airplane/train/airplane_0118.off
airplane/train/airplane_0119.off
airplane/train/airplane_0120.off
airplane/train/airplane_0121.off
airplane/train/airplane_0122.off
airplane/train/airplane_0123.off
airplane/train/airplane_0124.off
airplane/train/airplane_0125.off
airplane/train/airplane_0126.off
airplane/train/airplane_0127.off
airplane/train/airplane_0128.off
airplane/train/airplane_0129.off
airplane/train/airplane_0130.off
airplane/train/airplane_0131.off
airplane/train/airplane_0132.off
airplane/train/airplane_0133.off
airplane/train/airplane_0134.off
airplane/train/airplane_0135.off
airplane/train/airplane_0136.off
airplane/train/airplane_0137.off
airplane/train/airplane_0138.off
airplane/train/airplane_0139.off
airplane/train/airplane_0140.off
airplane/train/airplane_0141.off
airplane/train/airplane_0142.off
airplane/train/airplane_0143.off
airplane/train/airplane_0144.off
airplane/train/airplane_0145.off
airplane/train/airplane_0146.off
airplane/train/airplane_0147.off
airplane/train/airplane_0148.off
airplane/train/airplane_0149.off
airplane/train/airplane_0150.off
airplane/train/airplane_0151.off
airplane/train/airplane_0152.off
airplane/train/airplane_0153.off
airplane/train/airplane_0154.off
airplane/train/airplane_0155.off
airplane/train/airplane_0156.off
airplane/train/airplane_0157.off
airplane/train/airplane_0158.off
airplane/train/airplane_0159.off
airplane/train/airplane_0160.off
airplane/train/airplane_0161.off
airplane/train/airplane_0162.off
airplane/train/airplane_0163.off
airplane/train/airplane_0164.off
airplane/train/airplane_0165.off
airplane/train/airplane_0166.off
airplane/train/airplane_0167.off
airplane/train/airplane_0168.off
airplane/train/airplane_0169.off
airplane/train/airplane_0170.off
airplane/train/airplane_0171.off
airplane/train/airplane_0172.off
airplane/train/airplane_0173.off
airplane/train/airplane_0174.off
airplane/train/airplane_0175.off
airplane/train/airplane_0176.off
airplane/train/airplane_0177.off
airplane/train/airplane_0178.off
airplane/train/airplane_0179.off
airplane/train/airplane_0180.off
airplane/train/airplane_0181.off
airplane/train/airplane_0182.off
airplane/train/airplane_0183.off
airplane/train/airplane_0184.off
airplane/train/airplane_0185.off
airplane/train/airplane_0186.off
airplane/train/airplane_0187.off
airplane/train/airplane_0188.off
airplane/train/airplane_0189.off
airplane/train/airplane_0190.off
airplane/train/airplane_0191.off
airplane/train/airplane_0192.off
airplane/train/airplane_0193.off
airplane/train/airplane_0194.off
airplane/train/airplane_0195.off
airplane/train/airplane_0196.off
airplane/train/airplane_0197.off
airplane/train/airplane_0198.off
airplane/train/airplane_0199.off
airplane/train/airplane_0200.off
airplane/train/airplane_0201.off
airplane/train/airplane_0202.off
airplane/train/airplane_0203.off
airplane/train/airplane_0204.off
airplane/train/airplane_0205.off
airplane/train/airplane_0206.off
airplane/train/airplane_0207.off
airplane/train/airplane_0208.off
airplane/train/airplane_0209.off
airplane/train/airplane_0210.off
airplane/train/airplane_0211.off
airplane/train/airplane_0212.off
airplane/train/airplane_0213.off
airplane/train/airplane_0214.off
airplane/train/airplane_0215.off
airplane/train/airplane_0216.off
airplane/train/airplane_0217.off
airplane/train/airplane_0218.off
airplane/train/airplane_0219.off
airplane/train/airplane_0220.off
airplane/train/airplane_0221.off
airplane/train/airplane_0222.off
airplane/train/airplane_0223.off
airplane/train/airplane_0224.off
airplane/train/airplane_0225.off
airplane/train/airplane_0226.off
airplane/train/airplane_0227.off
airplane/train/airplane_0228.off
airplane/train/airplane_0229.off
airplane/train/airplane_0230.off
airplane/train/airplane_0231.off
airplane/train/airplane_0232.off
airplane/train/airplane_0233.off
airplane/train/airplane_0234.off
airplane/train/airplane_0235.off
airplane/train/airplane_0236.off
airplane/train/airplane_0237.off
airplane/train/airplane_0238.off
airplane/train/airplane_0239.off
airplane/train/airplane_0240.off
airplane/train/airplane_0241.off
airplane/train/airplane_0242.off
airplane/train/airplane_0243.off
airplane/train/airplane_0244.off
airplane/train/airplane_0245.off
airplane/train/airplane_0246.off
airplane/train/airplane_0247.off
airplane/train/airplane_0248.off
airplane/train/airplane_0249.off
airplane/train/airplane_0250.off
airplane/train/airplane_0251.off
airplane/train/airplane_0252.off
airplane/train/airplane_0253.off
airplane/train/airplane_0254.off
airplane/train/airplane_0255.off
airplane/train/airplane_0256.off
airplane/train/airplane_0257.off
airplane/train/airplane_0258.off
airplane/train/airplane_0259.off
airplane/train/airplane_0260.off
airplane/train/airplane_0261.off
airplane/train/airplane_0262.off
airplane/train/airplane_0263.off
airplane/train/airplane_0264.off
airplane/train/airplane_0265.off
airplane/train/airplane_0266.off
airplane/train/airplane_0267.off
airplane/train/airplane_0268.off
airplane/train/airplane_0269.off
airplane/train/airplane_0270.off
airplane/train/airplane_0271.off
airplane/train/airplane_0272.off
airplane/train/airplane_0273.off
airplane/train/airplane_0274.off
airplane/train/airplane_0275.off
airplane/train/airplane_0276.off
airplane/train/airplane_0277.off
airplane/train/airplane_0278.off
airplane/train/airplane_0279.off
airplane/train/airplane_0280.off
airplane/train/airplane_0281.off
airplane/train/airplane_0282.off
airplane/train/airplane_0283.off
airplane/train/airplane_0284.off
airplane/train/airplane_0285.off
airplane/train/airplane_0286.off
airplane/train/airplane_0287.off
airplane/train/airplane_0288.off
airplane/train/airplane_0289.off
airplane/train/airplane_0290.off
airplane/train/airplane_0291.off
airplane/train/airplane_0292.off
airplane/train/airplane_0293.off
airplane/train/airplane_0294.off
airplane/train/airplane_0295.off
airplane/train/airplane_0296.off
airplane/train/airplane_0297.off
airplane/train/airplane_0298.off
airplane/train/airplane_0299.off
airplane/train/airplane_0300.off
airplane/train/airplane_0301.off
airplane/train/airplane_0302.off
airplane/train/airplane_0303.off
airplane/train/airplane_0304.off
airplane/train/airplane_0305.off
airplane/train/airplane_0306.off
airplane/train/airplane_0307.off
airplane/train/airplane_0308.off
airplane/train/airplane_0309.off
airplane/train/airplane_0310.off
airplane/train/airplane_0311.off
airplane/train/airplane_0312.off
airplane/train/airplane_0313.off
airplane/train/airplane_0314.off
airplane/train/airplane_0315.off
airplane/train/airplane_0316.off
airplane/train/airplane_0317.off
airplane/train/airplane_0318.off
airplane/train/airplane_0319.off
airplane/train/airplane_0320.off
airplane/train/airplane_0321.off
airplane/train/airplane_0322.off
airplane/train/airplane_0323.off
airplane/train/airplane_0324.off
airplane/train/airplane_0325.off
airplane/train/airplane_0326.off
airplane/train/airplane_0327.off
airplane/train/airplane_0328.off
airplane/train/airplane_0329.off
airplane/train/airplane_0330.off
airplane/train/airplane_0331.off
airplane/train/airplane_0332.off
airplane/train/airplane_0333.off
airplane/train/airplane_0334.off
airplane/train/airplane_0335.off
airplane/train/airplane_0336.off
airplane/train/airplane_0337.off
airplane/train/airplane_0338.off
airplane/train/airplane_0339.off
airplane/train/airplane_0340.off
airplane/train/airplane_0341.off
airplane/train/airplane_0342.off
airplane/train/airplane_0343.off
airplane/train/airplane_0344.off
airplane/train/airplane_0345.off
airplane/train/airplane_0346.off
airplane/train/airplane_0347.off
airplane/train/airplane_0348.off
airplane/train/airplane_0349.off
airplane/train/airplane_0350.off
airplane/train/airplane_0351.off
airplane/train/airplane_0352.off
airplane/train/airplane_0353.off
airplane/train/airplane_0354.off
airplane/train/airplane_0355.off
airplane/train/airplane_0356.off
airplane/train/airplane_0357.off
airplane/train/airplane_0358.off
airplane/train/airplane_0359.off
airplane/train/airplane_0360.off
airplane/train/airplane_0361.off
airplane/train/airplane_0362.off
airplane/train/airplane_0363.off
airplane/train/airplane_0364.off
airplane/train/airplane_0365.off
airplane/train/airplane_0366.off
airplane/train/airplane_0367.off
airplane/train/airplane_0368.off
airplane/train/airplane_0369.off
airplane/train/airplane_0370.off
airplane/train/airplane_0371.off
airplane/train/airplane_0372.off
airplane/train/airplane_0373.off
airplane/train/airplane_0374.off
airplane/train/airplane_0375.off
airplane/train/airplane_0376.off
airplane/train/airplane_0377.off
airplane/train/airplane_0378.off
airplane/train/airplane_0379.off
airplane/train/airplane_0380.off
airplane/train/airplane_0381.off
airplane/train/airplane_0382.off
airplane/train/airplane_0383.off
airplane/train/airplane_0384.off
airplane/train/airplane_0385.off
airplane/train/airplane_0386.off
airplane/train/airplane_0387.off
airplane/train/airplane_0388.off
airplane/train/airplane_0389.off
airplane/train/airplane_0390.off
airplane/train/airplane_0391.off
airplane/train/airplane_0392.off
airplane/train/airplane_0393.off
airplane/train/airplane_0394.off
airplane/train/airplane_0395.off
airplane/train/airplane_0396.off
airplane/train/airplane_0397.off
airplane/train/airplane_0398.off
airplane/train/airplane_0399.off
airplane/train/airplane_0400.off
airplane/train/airplane_0401.off
airplane/train/airplane_0402.off
airplane/train/airplane_0403.off
airplane/train/airplane_0404.off
airplane/train/airplane_0405.off
airplane/train/airplane_0406.off
airplane/train/airplane_0407.off
airplane/train/airplane_0408.off
airplane/train/airplane_0409.off
airplane/train/airplane_0410.off
airplane/train/airplane_0411.off
airplane/train/airplane_0412.off
airplane/train/airplane_0413.off
airplane/train/airplane_0414.off
airplane/train/airplane_0415.off
airplane/train/airplane_0416.off
airplane/train/airplane_0417.off
airplane/train/airplane_0418.off
airplane/train/airplane_0419.off
airplane/train/airplane_0420.off
airplane/train/airplane_0421.off
airplane/train/airplane_0422.off
airplane/train/airplane_0423.off
airplane/train/airplane_0424.off
airplane/train/airplane_0425.off
airplane/train/airplane_0426.off
airplane/train/airplane_0427.off
airplane/train/airplane_0428.off
airplane/train/airplane_0429.off
airplane/train/airplane_0430.off
airplane/train/airplane_0431.off
airplane/train/airplane_0432.off
airplane/train/airplane_0433.off
airplane/train/airplane_0434.off
airplane/train/airplane_0435.off
airplane/train/airplane_0436.off
airplane/train/airplane_0437.off
airplane/train/airplane_0438.off
airplane/train/airplane_0439.off
airplane/train/airplane_0440.off
airplane/train/airplane_0441.off
airplane/train/airplane_0442.off
airplane/train/airplane_0443.off
airplane/train/airplane_0444.off
airplane/train/airplane_0445.off
airplane/train/airplane_0446.off
airplane/train/airplane_0447.off
airplane/train/airplane_0448.off
airplane/train/airplane_0449.off
airplane/train/airplane_0450.off
airplane/train/airplane_0451.off
airplane/train/airplane_0452.off
airplane/train/airplane_0453.off
airplane/train/airplane_0454.off
airplane/train/airplane_0455.off
airplane/train/airplane_0456.off
airplane/train/airplane_0457.off
airplane/train/airplane_0458.off
airplane/train/airplane_0459.off
airplane/train/airplane_0460.off
airplane/train/airplane_0461.off
airplane/train/airplane_0462.off
airplane/train/airplane_0463.off
airplane/train/airplane_0464.off
airplane/train/airplane_0465.off
airplane/train/airplane_0466.off
airplane/train/airplane_0467.off
airplane/train/airplane_0468.off
airplane/train/airplane_0469.off
airplane/train/airplane_0470.off
airplane/train/airplane_0471.off
airplane/train/airplane_0472.off
airplane/train/airplane_0473.off
airplane/train/airplane_0474.off
airplane/train/airplane_0475.off
airplane/train/airplane_0476.off
airplane/train/airplane_0477.off
airplane/train/airplane_0478.off
airplane/train/airplane_0479.off
airplane/train/airplane_0480.off
airplane/train/airplane_0481.off
airplane/train/airplane_0482.off
airplane/train/airplane_0483.off
airplane/train/airplane_0484.off
airplane/train/airplane_0485.off
airplane/train/airplane_0486.off
airplane/train/airplane_0487.off
airplane/train/airplane_0488.off
airplane/train/airplane_0489.off
airplane/train/airplane_0490.off
airplane/train/airplane_0491.off
airplane/train/airplane_0492.off
airplane/train/airplane_0493.off
airplane/train/airplane_0494.off
airplane/train/airplane_0495.off
airplane/train/airplane_0496.off
airplane/train/airplane_0497.off
airplane/train/airplane_0498.off
airplane/train/airplane_0499.off
airplane/train/airplane_0500.off
airplane/train/airplane_0501.off
airplane/train/airplane_0502.off
airplane/train/airplane_0503.off
airplane/train/airplane_0504.off
airplane/train/airplane_0505.off
airplane/train/airplane_0506.off
airplane/train/airplane_0507.off
airplane/train/airplane_0508.off
airplane/train/airplane_0509.off
airplane/train/airplane_0510.off
airplane/train/airplane_0511.off
airplane/train/airplane_0512.off
airplane/train/airplane_0513.off
airplane/train/airplane_0514.off
airplane/train/airplane_0515.off
airplane/train/airplane_0516.off
airplane/train/airplane_0517.off
airplane/train/airplane_0518.off
airplane/train/airplane_0519.off
airplane/train/airplane_0520.off
airplane/train/airplane_0521.off
airplane/train/airplane_0522.off
airplane/train/airplane_0523.off
airplane/train/airplane_0524.off
airplane/train/airplane_0525.off
airplane/train/airplane_0526.off
airplane/train/airplane_0527.off
airplane/train/airplane_0528.off
airplane/train/airplane_0529.off
airplane/train/airplane_0530.off
airplane/train/airplane_0531.off
airplane/train/airplane_0532.off
airplane/train/airplane_0533.off
airplane/train/airplane_0534.off
airplane/train/airplane_0535.off
airplane/train/airplane_0536.off
airplane/train/airplane_0537.off
airplane/train/airplane_0538.off
airplane/train/airplane_0539.off
airplane/train/airplane_0540.off
airplane/train/airplane_0541.off
airplane/train/airplane_0542.off
airplane/train/airplane_0543.off
airplane/train/airplane_0544.off
airplane/train/airplane_0545.off
airplane/train/airplane_0546.off
airplane/train/airplane_0547.off
airplane/train/airplane_0548.off
airplane/train/airplane_0549.off
airplane/train/airplane_0550.off
airplane/train/airplane_0551.off
airplane/train/airplane_0552.off
airplane/train/airplane_0553.off
airplane/train/airplane_0554.off
airplane/train/airplane_0555.off
airplane/train/airplane_0556.off
airplane/train/airplane_0557.off
airplane/train/airplane_0558.off
airplane/train/airplane_0559.off
airplane/train/airplane_0560.off
airplane/train/airplane_0561.off
airplane/train/airplane_0562.off
airplane/train/airplane_0563.off
airplane/train/airplane_0564.off
table/train/table_0001.off
table/train/table_0002.off
table/train/table_0003.off
table/train/table_0004.off
table/train/table_0005.off
table/train/table_0006.off
table/train/table_0007.off
table/train/table_0008.off
table/train/table_0009.off
table/train/table_0010.off
table/train/table_0011.off
table/train/table_0012.off
table/train/table_0013.off
table/train/table_0014.off
table/train/table_0015.off
table/train/table_0016.off
table/train/table_0017.off
table/train/table_0018.off
table/train/table_0019.off
table/train/table_0020.off
table/train/table_0021.off
table/train/table_0022.off
table/train/table_0023.off
table/train/table_0024.off
table/train/table_0025.off
table/train/table_0026.off
table/train/table_0027.off
table/train/table_0028.off
table/train/table_0029.off
table/train/table_0030.off
table/train/table_0031.off
table/train/table_0032.off
table/train/table_0033.off
table/train/table_0034.off
table/train/table_0035.off
table/train/table_0036.off
table/train/table_0037.off
table/train/table_0038.off
table/train/table_0039.off
table/train/table_0040.off
table/train/table_0041.off
table/train/table_0042.off
table/train/table_0043.off
table/train/table_0044.off
table/train/table_0045.off
table/train/table_0046.off
table/train/table_0047.off
table/train/table_0048.off
table/train/table_0049.off
table/train/table_0050.off
table/train/table_0051.off
table/train/table_0052.off
table/train/table_0053.off
table/train/table_0054.off
table/train/table_0055.off
table/train/table_0056.off
table/train/table_0057.off
table/train/table_0058.off
table/train/table_0059.off
table/train/table_0060.off
table/train/table_0061.off
table/train/table_0062.off
table/train/table_0063.off
table/train/table_0064.off
table/train/table_0065.off
table/train/table_0066.off
table/train/table_0067.off
table/train/table_0068.off
table/train/table_0069.off
table/train/table_0070.off
table/train/table_0071.off
table/train/table_0072.off
table/train/table_0073.off
table/train/table_0074.off
table/train/table_0075.off
table/train/table_0076.off
table/train/table_0077.off
table/train/table_0078.off
table/train/table_0079.off
table/train/table_0080.off
table/train/table_0081.off
table/train/table_0082.off
table/train/table_0083.off
table/train/table_0084.off
table/train/table_0085.off
table/train/table_0086.off
table/train/table_0087.off
table/train/table_0088.off
table/train/table_0089.off
table/train/table_0090.off
table/train/table_0091.off
table/train/table_0092.off
table/train/table_0093.off
table/train/table_0094.off
table/train/table_0095.off
table/train/table_0096.off
table/train/table_0097.off
table/train/table_0098.off
table/train/table_0099.off
table/train/table_0100.off
table/train/table_0101.off
table/train/table_0102.off
table/train/table_0103.off
table/train/table_0104.off
table/train/table_0105.off
table/train/table_0106.off
table/train/table_0107.off
table/train/table_0108.off
table/train/table_0109.off
table/train/table_0110.off
table/train/table_0111.off
table/train/table_0112.off
table/train/table_0113.off
table/train/table_0114.off
table/train/table_0115.off
table/train/table_0116.off
table/train/table_0117.off
table/train/table_0118.off
table/train/table_0119.off
table/train/table_0120.off
table/train/table_0121.off
table/train/table_0122.off
table/train/table_0123.off
table/train/table_0124.off
table/train/table_0125.off
table/train/table_0126.off
table/train/table_0127.off
table/train/table_0128.off
table/train/table_0129.off
table/train/table_0130.off
table/train/table_0131.off
table/train/table_0132.off
table/train/table_0133.off
table/train/table_0134.off
table/train/table_0135.off
table/train/table_0136.off
table/train/table_0137.off
table/train/table_0138.off
table/train/table_0139.off
table/train/table_0140.off
table/train/table_0141.off
table/train/table_0142.off
table/train/table_0143.off
table/train/table_0144.off
table/train/table_0145.off
table/train/table_0146.off
table/train/table_0147.off
table/train/table_0148.off
table/train/table_0149.off
table/train/table_0150.off
table/train/table_0151.off
table/train/table_0152.off
table/train/table_0153.off
table/train/table_0154.off
table/train/table_0155.off
table/train/table_0156.off
table/train/table_0157.off
table/train/table_0158.off
table/train/table_0159.off
table/train/table_0160.off
table/train/table_0161.off
table/train/table_0162.off
table/train/table_0163.off
table/train/table_0164.off
table/train/table_0165.off
table/train/table_0166.off
table/train/table_0167.off
table/train/table_0168.off
table/train/table_0169.off
table/train/table_0170.off
table/train/table_0171.off
table/train/table_0172.off
table/train/table_0173.off
table/train/table_0174.off
table/train/table_0175.off
table/train/table_0176.off
table/train/table_0177.off
table/train/table_0178.off
table/train/table_0179.off
table/train/table_0180.off
table/train/table_0181.off
table/train/table_0182.off
table/train/table_0183.off
table/train/table_0184.off
table/train/table_0185.off
table/train/table_0186.off
table/train/table_0187.off
table/train/table_0188.off
table/train/table_0189.off
table/train/table_0190.off
table/train/table_0191.off
table/train/table_0192.off
table/train/table_0193.off
table/train/table_0194.off
table/train/table_0195.off
table/train/table_0196.off
table/train/table_0197.off
table/train/table_0198.off
table/train/table_0199.off
table/train/table_0200.off
table/train/table_0201.off
table/train/table_0202.off
table/train/table_0203.off
table/train/table_0204.off
table/train/table_0205.off
table/train/table_0206.off
table/train/table_0207.off
table/train/table_0208.off
table/train/table_0209.off
table/train/table_0210.off
table/train/table_0211.off
table/train/table_0212.off
table/train/table_0213.off
table/train/table_0214.off
table/train/table_0215.off
table/train/table_0216.off
table/train/table_0217.off
table/train/table_0218.off
table/train/table_0219.off
table/train/table_0220.off
table/train/table_0221.off
table/train/table_0222.off
table/train/table_0223.off
table/train/table_0224.off
table/train/table_0225.off
table/train/table_0226.off
table/train/table_0227.off
table/train/table_0228.off
table/train/table_0229.off
table/train/table_0230.off
table/train/table_0231.off
table/train/table_0232.off
table/train/table_0233.off
table/train/table_0234.off
table/train/table_0235.off
table/train/table_0236.off
table/train/table_0237.off
table/train/table_0238.off
table/train/table_0239.off
table/train/table_0240.off
table/train/table_0241.off
table/train/table_0242.off
table/train/table_0243.off
table/train/table_0244.off
table/train/table_0245.off
table/train/table_0246.off
table/train/table_0247.off
table/train/table_0248.off
table/train/table_0249.off
table/train/table_0250.off
table/train/table_0251.off
table/train/table_0252.off
table/train/table_0253.off
table/train/table_0254.off
table/train/table_0255.off
table/train/table_0256.off
table/train/table_0257.off
table/train/table_0258.off
table/train/table_0259.off
table/train/table_0260.off
table/train/table_0261.off
table/train/table_0262.off
table/train/table_0263.off
table/train/table_0264.off
table/train/table_0265.off
table/train/table_0266.off
table/train/table_0267.off
table/train/table_0268.off
table/train/table_0269.off
table/train/table_0270.off
table/train/table_0271.off
table/train/table_0272.off
table/train/table_0273.off
table/train/table_0274.off
table/train/table_0275.off
table/train/table_0276.off
table/train/table_0277.off
table/train/table_0278.off
table/train/table_0279.off
table/train/table_0280.off
table/train/table_0281.off
table/train/table_0282.off
table/train/table_0283.off
table/train/table_0284.off
table/train/table_0285.off
table/train/table_0286.off
table/train/table_0287.off
table/train/table_0288.off
table/train/table_0289.off
table/train/table_0290.off
table/train/table_0291.off
table/train/table_0292.off
table/train/table_0293.off
table/train/table_0294.off
table/train/table_0295.off
table/train/table_0296.off
table/train/table_0297.off
table/train/table_0298.off
table/train/table_0299.off
table/train/table_0300.off
table/train/table_0301.off
table/train/table_0302.off
table/train/table_0303.off
table/train/table_0304.off
table/train/table_0305.off
table/train/table_0306.off
table/train/table_0307.off
table/train/table_0308.off
table/train/table_0309.off
table/train/table_0310.off
table/train/table_0311.off
table/train/table_0312.off
table/train/table_0313.off
table/train/table_0314.off
table/train/table_0315.off
table/train/table_0316.off
table/train/table_0317.off
table/train/table_0318.off
table/train/table_0319.off
table/train/table_0320.off
table/train/table_0321.off
table/train/table_0322.off
table/train/table_0323.off
table/train/table_0324.off
table/train/table_0325.off
table/train/table_0326.off
table/train/table_0327.off
table/train/table_0328.off
table/train/table_0329.off
table/train/table_0330.off
table/train/table_0331.off
table/train/table_0332.off
table/train/table_0333.off
table/train/table_0334.off
table/train/table_0335.off
table/train/table_0336.off
table/train/table_0337.off
table/train/table_0338.off
table/train/table_0339.off
table/train/table_0340.off
table/train/table_0341.off
table/train/table_0342.off
table/train/table_0343.off
table/train/table_0344.off
table/train/table_0345.off
table/train/table_0346.off
table/train/table_0347.off
table/train/table_0348.off
table/train/table_0349.off
table/train/table_0350.off
table/train/table_0351.off
table/train/table_0352.off
table/train/table_0353.off
bench/train/bench_0001.off
bench/train/bench_0002.off
bench/train/bench_0003.off
bench/train/bench_0004.off
bench/train/bench_0005.off
bench/train/bench_0006.off
bench/train/bench_0007.off
bench/train/bench_0008.off
bench/train/bench_0009.off
bench/train/bench_0010.off
bench/train/bench_0011.off
bench/train/bench_0012.off
bench/train/bench_0013.off
bench/train/bench_0014.off
bench/train/bench_0015.off
bench/train/bench_0016.off
bench/train/bench_0017.off
bench/train/bench_0018.off
bench/train/bench_0019.off
bench/train/bench_0020.off
bench/train/bench_0021.off
bench/train/bench_0022.off
bench/train/bench_0023.off
bench/train/bench_0024.off
bench/train/bench_0025.off
bench/train/bench_0026.off
bench/train/bench_0027.off
bench/train/bench_0028.off
bench/train/bench_0029.off
bench/train/bench_0030.off
bench/train/bench_0031.off
bench/train/bench_0032.off
bench/train/bench_0033.off
bench/train/bench_0034.off
bench/train/bench_0035.off
bench/train/bench_0036.off
bench/train/bench_0037.off
bench/train/bench_0038.off
bench/train/bench_0039.off
bench/train/bench_0040.off
bench/train/bench_0041.off
bench/train/bench_0042.off
bench/train/bench_0043.off
bench/train/bench_0044.off
bench/train/bench_0045.off
bench/train/bench_0046.off
bench/train/bench_0047.off
bench/train/bench_0048.off
bench/train/bench_0049.off
bench/train/bench_0050.off
bench/train/bench_0051.off
bench/train/bench_0052.off
bench/train/bench_0053.off
bench/train/bench_0054.off
bench/train/bench_0055.off
bench/train/bench_0056.off
bench/train/bench_0057.off
bench/train/bench_0058.off
bench/train/bench_0059.off
bench/train/bench_0060.off
bench/train/bench_0061.off
bench/train/bench_0062.off
bench/train/bench_0063.off
bench/train/bench_0064.off
bench/train/bench_0065.off
bench/train/bench_0066.off
bench/train/bench_0067.off
bench/train/bench_0068.off
bench/train/bench_0069.off
bench/train/bench_0070.off
bench/train/bench_0071.off
bench/train/bench_0072.off
bench/train/bench_0073.off
bench/train/bench_0074.off
bench/train/bench_0075.off
bench/train/bench_0076.off
bench/train/bench_0077.off
bench/train/bench_0078.off
bench/train/bench_0079.off
bench/train/bench_0080.off
bench/train/bench_0081.off
bench/train/bench_0082.off
bench/train/bench_0083.off
bench/train/bench_0084.off
bench/train/bench_0085.off
bench/train/bench_0086.off
bench/train/bench_0087.off
bench/train/bench_0088.off
bench/train/bench_0089.off
bench/train/bench_0090.off
bench/train/bench_0091.off
bench/train/bench_0092.off
bench/train/bench_0093.off
bench/train/bench_0094.off
bench/train/bench_0095.off
bench/train/bench_0096.off
bench/train/bench_0097.off
bench/train/bench_0098.off
bench/train/bench_0099.off
bench/train/bench_0100.off
bench/train/bench_0101.off
bench/train/bench_0102.off
bench/train/bench_0103.off
bench/train/bench_0104.off
bench/train/bench_0105.off
bench/train/bench_0106.off
bench/train/bench_0107.off
bench/train/bench_0108.off
bench/train/bench_0109.off
bench/train/bench_0110.off
bench/train/bench_0111.off
bench/train/bench_0112.off
bench/train/bench_0113.off
bench/train/bench_0114.off
bench/train/bench_0115.off
bench/train/bench_0116.off
bench/train/bench_0117.off
bench/train/bench_0118.off
bench/train/bench_0119.off
bench/train/bench_0120.off
bench/train/bench_0121.off
bench/train/bench_0122.off
bench/train/bench_0123.off
bench/train/bench_0124.off
bench/train/bench_0125.off
bench/train/bench_0126.off
bench/train/bench_0127.off
bench/train/bench_0128.off
bench/train/bench_0129.off
bench/train/bench_0130.off
bench/train/bench_0131.off
bench/train/bench_0132.off
bench/train/bench_0133.off
bench/train/bench_0134.off
bench/train/bench_0135.off
bench/train/bench_0136.off
bench/train/bench_0137.off
bench/train/bench_0138.off
bench/train/bench_0139.off
bench/train/bench_0140.off
bench/train/bench_0141.off
bench/train/bench_0142.off
bench/train/bench_0143.off
bench/train/bench_0144.off
bench/train/bench_0145.off
bench/train/bench_0146.off
bench/train/bench_0147.off
bench/train/bench_0148.off
bench/train/bench_0149.off
bench/train/bench_0150.off
bench/train/bench_0151.off
bench/train/bench_0152.off
bench/train/bench_0153.off
bench/train/bench_0154.off
bench/train/bench_0155.off
bench/train/bench_0156.off
plant/train/plant_0001.off
plant/train/plant_0002.off
plant/train/plant_0003.off
plant/train/plant_0004.off
plant/train/plant_0005.off
plant/train/plant_0006.off
plant/train/plant_0007.off
plant/train/plant_0008.off
plant/train/plant_0009.off
plant/train/plant_0010.off
plant/train/plant_0011.off
plant/train/plant_0012.off
plant/train/plant_0013.off
plant/train/plant_0014.off
plant/train/plant_0015.off
plant/train/plant_0016.off
plant/train/plant_0017.off
plant/train/plant_0018.off
plant/train/plant_0019.off
plant/train/plant_0020.off
plant/train/plant_0021.off
plant/train/plant_0022.off
plant/train/plant_0023.off
plant/train/plant_0024.off
plant/train/plant_0025.off
plant/train/plant_0026.off
plant/train/plant_0027.off
plant/train/plant_0028.off
plant/train/plant_0029.off
plant/train/plant_0030.off
plant/train/plant_0031.off
plant/train/plant_0032.off
plant/train/plant_0033.off
plant/train/plant_0034.off
plant/train/plant_0035.off
plant/train/plant_0036.off
plant/train/plant_0037.off
plant/train/plant_0038.off
plant/train/plant_0039.off
plant/train/plant_0040.off
plant/train/plant_0041.off
plant/train/plant_0042.off
plant/train/plant_0043.off
plant/train/plant_0044.off
plant/train/plant_0045.off
plant/train/plant_0046.off
plant/train/plant_0047.off
plant/train/plant_0048.off
plant/train/plant_0049.off
plant/train/plant_0050.off
plant/train/plant_0051.off
plant/train/plant_0052.off
plant/train/plant_0053.off
plant/train/plant_0054.off
plant/train/plant_0055.off
plant/train/plant_0056.off
plant/train/plant_0057.off
plant/train/plant_0058.off
plant/train/plant_0059.off
plant/train/plant_0060.off
plant/train/plant_0061.off
plant/train/plant_0062.off
plant/train/plant_0063.off
plant/train/plant_0064.off
plant/train/plant_0065.off
plant/train/plant_0066.off
plant/train/plant_0067.off
plant/train/plant_0068.off
plant/train/plant_0069.off
plant/train/plant_0070.off
plant/train/plant_0071.off
plant/train/plant_0072.off
plant/train/plant_0073.off
plant/train/plant_0074.off
plant/train/plant_0075.off
plant/train/plant_0076.off
plant/train/plant_0077.off
plant/train/plant_0078.off
plant/train/plant_0079.off
plant/train/plant_0080.off
plant/train/plant_0081.off
plant/train/plant_0082.off
plant/train/plant_0083.off
plant/train/plant_0084.off
plant/train/plant_0085.off
plant/train/plant_0086.off
plant/train/plant_0087.off
plant/train/plant_0088.off
plant/train/plant_0089.off
plant/train/plant_0090.off
plant/train/plant_0091.off
plant/train/plant_0092.off
plant/train/plant_0093.off
plant/train/plant_0094.off
plant/train/plant_0095.off
plant/train/plant_0096.off
plant/train/plant_0097.off
plant/train/plant_0098.off
plant/train/plant_0099.off
plant/train/plant_0100.off
plant/train/plant_0101.off
plant/train/plant_0102.off
plant/train/plant_0103.off
plant/train/plant_0104.off
plant/train/plant_0105.off
plant/train/plant_0106.off
plant/train/plant_0107.off
plant/train/plant_0108.off
plant/train/plant_0109.off
plant/train/plant_0110.off
plant/train/plant_0111.off
plant/train/plant_0112.off
plant/train/plant_0113.off
plant/train/plant_0114.off
plant/train/plant_0115.off
plant/train/plant_0116.off
plant/train/plant_0117.off
plant/train/plant_0118.off
plant/train/plant_0119.off
plant/train/plant_0120.off
plant/train/plant_0121.off
plant/train/plant_0122.off
plant/train/plant_0123.off
plant/train/plant_0124.off
plant/train/plant_0125.off
plant/train/plant_0126.off
plant/train/plant_0127.off
plant/train/plant_0128.off
plant/train/plant_0129.off
plant/train/plant_0130.off
plant/train/plant_0131.off
plant/train/plant_0132.off
plant/train/plant_0133.off
plant/train/plant_0134.off
plant/train/plant_0135.off
plant/train/plant_0136.off
plant/train/plant_0137.off
plant/train/plant_0138.off
plant/train/plant_0139.off
plant/train/plant_0140.off
plant/train/plant_0141.off
plant/train/plant_0142.off
plant/train/plant_0143.off
plant/train/plant_0144.off
plant/train/plant_0145.off
plant/train/plant_0146.off
plant/train/plant_0147.off
plant/train/plant_0148.off
plant/train/plant_0149.off
plant/train/plant_0150.off
plant/train/plant_0151.off
plant/train/plant_0152.off
plant/train/plant_0153.off
plant/train/plant_0154.off
plant/train/plant_0155.off
plant/train/plant_0156.off
plant/train/plant_0157.off
plant/train/plant_0158.off
plant/train/plant_0159.off
plant/train/plant_0160.off
plant/train/plant_0161.off
plant/train/plant_0162.off
plant/train/plant_0163.off
plant/train/plant_0164.off
plant/train/plant_0165.off
plant/train/plant_0166.off
plant/train/plant_0167.off
plant/train/plant_0168.off
plant/train/plant_0169.off
plant/train/plant_0170.off
plant/train/plant_0171.off
plant/train/plant_0172.off
plant/train/plant_0173.off
plant/train/plant_0174.off
plant/train/plant_0175.off
plant/train/plant_0176.off
plant/train/plant_0177.off
plant/train/plant_0178.off
plant/train/plant_0179.off
plant/train/plant_0180.off
plant/train/plant_0181.off
plant/train/plant_0182.off
plant/train/plant_0183.off
plant/train/plant_0184.off
plant/train/plant_0185.off
plant/train/plant_0186.off
plant/train/plant_0187.off
plant/train/plant_0188.off
plant/train/plant_0189.off
plant/train/plant_0190.off
plant/train/plant_0191.off
plant/train/plant_0192.off
plant/train/plant_0193.off
plant/train/plant_0194.off
plant/train/plant_0195.off
plant/train/plant_0196.off
plant/train/plant_0197.off
plant/train/plant_0198.off
plant/train/plant_0199.off
plant/train/plant_0200.off
plant/train/plant_0201.off
plant/train/plant_0202.off
plant/train/plant_0203.off
plant/train/plant_0204.off
plant/train/plant_0205.off
plant/train/plant_0206.off
plant/train/plant_0207.off
plant/train/plant_0208.off
plant/train/plant_0209.off
plant/train/plant_0210.off
plant/train/plant_0211.off
plant/train/plant_0212.off
plant/train/plant_0213.off
plant/train/plant_0214.off
plant/train/plant_0215.off
plant/train/plant_0216.off
chair/train/chair_0001.off
chair/train/chair_0002.off
chair/train/chair_0003.off
chair/train/chair_0004.off
chair/train/chair_0005.off
chair/train/chair_0006.off
chair/train/chair_0007.off
chair/train/chair_0008.off
chair/train/chair_0009.off
chair/train/chair_0010.off
chair/train/chair_0011.off
chair/train/chair_0012.off
chair/train/chair_0013.off
chair/train/chair_0014.off
chair/train/chair_0015.off
chair/train/chair_0016.off
chair/train/chair_0017.off
chair/train/chair_0018.off
chair/train/chair_0019.off
chair/train/chair_0020.off
chair/train/chair_0021.off
chair/train/chair_0022.off
chair/train/chair_0023.off
chair/train/chair_0024.off
chair/train/chair_0025.off
chair/train/chair_0026.off
chair/train/chair_0027.off
chair/train/chair_0028.off
chair/train/chair_0029.off
chair/train/chair_0030.off
chair/train/chair_0031.off
chair/train/chair_0032.off
chair/train/chair_0033.off
chair/train/chair_0034.off
chair/train/chair_0035.off
chair/train/chair_0036.off
chair/train/chair_0037.off
chair/train/chair_0038.off
chair/train/chair_0039.off
chair/train/chair_0040.off
chair/train/chair_0041.off
chair/train/chair_0042.off
chair/train/chair_0043.off
chair/train/chair_0044.off
chair/train/chair_0045.off
chair/train/chair_0046.off
chair/train/chair_0047.off
chair/train/chair_0048.off
chair/train/chair_0049.off
chair/train/chair_0050.off
chair/train/chair_0051.off
chair/train/chair_0052.off
chair/train/chair_0053.off
chair/train/chair_0054.off
chair/train/chair_0055.off
chair/train/chair_0056.off
chair/train/chair_0057.off
chair/train/chair_0058.off
chair/train/chair_0059.off
chair/train/chair_0060.off
chair/train/chair_0061.off
chair/train/chair_0062.off
chair/train/chair_0063.off
chair/train/chair_0064.off
chair/train/chair_0065.off
chair/train/chair_0066.off
chair/train/chair_0067.off
chair/train/chair_0068.off
chair/train/chair_0069.off
chair/train/chair_0070.off
chair/train/chair_0071.off
chair/train/chair_0072.off
chair/train/chair_0073.off
chair/train/chair_0074.off
chair/train/chair_0075.off
chair/train/chair_0076.off
chair/train/chair_0077.off
chair/train/chair_0078.off
chair/train/chair_0079.off
chair/train/chair_0080.off
chair/train/chair_0081.off
chair/train/chair_0082.off
chair/train/chair_0083.off
chair/train/chair_0084.off
chair/train/chair_0085.off
chair/train/chair_0086.off
chair/train/chair_0087.off
chair/train/chair_0088.off
chair/train/chair_0089.off
chair/train/chair_0090.off
chair/train/chair_0091.off
chair/train/chair_0092.off
chair/train/chair_0093.off
chair/train/chair_0094.off
chair/train/chair_0095.off
chair/train/chair_0096.off
chair/train/chair_0097.off
chair/train/chair_0098.off
chair/train/chair_0099.off
chair/train/chair_0100.off
chair/train/chair_0101.off
chair/train/chair_0102.off
chair/train/chair_0103.off
chair/train/chair_0104.off
chair/train/chair_0105.off
chair/train/chair_0106.off
chair/train/chair_0107.off
chair/train/chair_0108.off
chair/train/chair_0109.off
chair/train/chair_0110.off
chair/train/chair_0111.off
chair/train/chair_0112.off
chair/train/chair_0113.off
chair/train/chair_0114.off
chair/train/chair_0115.off
chair/train/chair_0116.off
chair/train/chair_0117.off
chair/train/chair_0118.off
chair/train/chair_0119.off
chair/train/chair_0120.off
chair/train/chair_0121.off
chair/train/chair_0122.off
chair/train/chair_0123.off
chair/train/chair_0124.off
chair/train/chair_0125.off
chair/train/chair_0126.off
chair/train/chair_0127.off
chair/train/chair_0128.off
chair/train/chair_0129.off
chair/train/chair_0130.off
chair/train/chair_0131.off
chair/train/chair_0132.off
chair/train/chair_0133.off
chair/train/chair_0134.off
chair/train/chair_0135.off
chair/train/chair_0136.off
chair/train/chair_0137.off
chair/train/chair_0138.off
chair/train/chair_0139.off
chair/train/chair_0140.off
chair/train/chair_0141.off
chair/train/chair_0142.off
chair/train/chair_0143.off
chair/train/chair_0144.off
chair/train/chair_0145.off
chair/train/chair_0146.off
chair/train/chair_0147.off
chair/train/chair_0148.off
chair/train/chair_0149.off
chair/train/chair_0150.off
chair/train/chair_0151.off
chair/train/chair_0152.off
chair/train/chair_0153.off
chair/train/chair_0154.off
chair/train/chair_0155.off
chair/train/chair_0156.off
chair/train/chair_0157.off
chair/train/chair_0158.off
chair/train/chair_0159.off
chair/train/chair_0160.off
chair/train/chair_0161.off
chair/train/chair_0162.off
chair/train/chair_0163.off
chair/train/chair_0164.off
chair/train/chair_0165.off
chair/train/chair_0166.off
chair/train/chair_0167.off
chair/train/chair_0168.off
chair/train/chair_0169.off
chair/train/chair_0170.off
chair/train/chair_0171.off
chair/train/chair_0172.off
chair/train/chair_0173.off
chair/train/chair_0174.off
chair/train/chair_0175.off
chair/train/chair_0176.off
chair/train/chair_0177.off
chair/train/chair_0178.off
chair/train/chair_0179.off
chair/train/chair_0180.off
chair/train/chair_0181.off
chair/train/chair_0182.off
chair/train/chair_0183.off
chair/train/chair_0184.off
chair/train/chair_0185.off
chair/train/chair_0186.off
chair/train/chair_0187.off
chair/train/chair_0188.off
chair/train/chair_0189.off
chair/train/chair_0190.off
chair/train/chair_0191.off
chair/train/chair_0192.off
chair/train/chair_0193.off
chair/train/chair_0194.off
chair/train/chair_0195.off
chair/train/chair_0196.off
chair/train/chair_0197.off
chair/train/chair_0198.off
chair/train/chair_0199.off
chair/train/chair_0200.off
chair/train/chair_0201.off
chair/train/chair_0202.off
chair/train/chair_0203.off
chair/train/chair_0204.off
chair/train/chair_0205.off
chair/train/chair_0206.off
chair/train/chair_0207.off
chair/train/chair_0208.off
chair/train/chair_0209.off
chair/train/chair_0210.off
chair/train/chair_0211.off
chair/train/chair_0212.off
chair/train/chair_0213.off
chair/train/chair_0214.off
chair/train/chair_0215.off
chair/train/chair_0216.off
chair/train/chair_0217.off
chair/train/chair_0218.off
chair/train/chair_0219.off
chair/train/chair_0220.off
chair/train/chair_0221.off
chair/train/chair_0222.off
chair/train/chair_0223.off
chair/train/chair_0224.off
chair/train/chair_0225.off
chair/train/chair_0226.off
chair/train/chair_0227.off
chair/train/chair_0228.off
chair/train/chair_0229.off
chair/train/chair_0230.off
chair/train/chair_0231.off
chair/train/chair_0232.off
chair/train/chair_0233.off
chair/train/chair_0234.off
chair/train/chair_0235.off
chair/train/chair_0236.off
chair/train/chair_0237.off
chair/train/chair_0238.off
chair/train/chair_0239.off
chair/train/chair_0240.off
chair/train/chair_0241.off
chair/train/chair_0242.off
chair/train/chair_0243.off
chair/train/chair_0244.off
chair/train/chair_0245.off
chair/train/chair_0246.off
chair/train/chair_0247.off
chair/train/chair_0248.off
chair/train/chair_0249.off
chair/train/chair_0250.off
chair/train/chair_0251.off
chair/train/chair_0252.off
chair/train/chair_0253.off
chair/train/chair_0254.off
chair/train/chair_0255.off
chair/train/chair_0256.off
chair/train/chair_0257.off
chair/train/chair_0258.off
chair/train/chair_0259.off
chair/train/chair_0260.off
chair/train/chair_0261.off
chair/train/chair_0262.off
chair/train/chair_0263.off
chair/train/chair_0264.off
chair/train/chair_0265.off
chair/train/chair_0266.off
chair/train/chair_0267.off
chair/train/chair_0268.off
chair/train/chair_0269.off
chair/train/chair_0270.off
chair/train/chair_0271.off
chair/train/chair_0272.off
chair/train/chair_0273.off
chair/train/chair_0274.off
chair/train/chair_0275.off
chair/train/chair_0276.off
chair/train/chair_0277.off
chair/train/chair_0278.off
chair/train/chair_0279.off
chair/train/chair_0280.off
chair/train/chair_0281.off
chair/train/chair_0282.off
chair/train/chair_0283.off
chair/train/chair_0284.off
chair/train/chair_0285.off
chair/train/chair_0286.off
chair/train/chair_0287.off
chair/train/chair_0288.off
chair/train/chair_0289.off
chair/train/chair_0290.off
chair/train/chair_0291.off
chair/train/chair_0292.off
chair/train/chair_0293.off
chair/train/chair_0294.off
chair/train/chair_0295.off
chair/train/chair_0296.off
chair/train/chair_0297.off
chair/train/chair_0298.off
chair/train/chair_0299.off
chair/train/chair_0300.off
chair/train/chair_0301.off
chair/train/chair_0302.off
chair/train/chair_0303.off
chair/train/chair_0304.off
chair/train/chair_0305.off
chair/train/chair_0306.off
chair/train/chair_0307.off
chair/train/chair_0308.off
chair/train/chair_0309.off
chair/train/chair_0310.off
chair/train/chair_0311.off
chair/train/chair_0312.off
chair/train/chair_0313.off
chair/train/chair_0314.off
chair/train/chair_0315.off
chair/train/chair_0316.off
chair/train/chair_0317.off
chair/train/chair_0318.off
chair/train/chair_0319.off
chair/train/chair_0320.off
chair/train/chair_0321.off
chair/train/chair_0322.off
chair/train/chair_0323.off
chair/train/chair_0324.off
chair/train/chair_0325.off
chair/train/chair_0326.off
chair/train/chair_0327.off
chair/train/chair_0328.off
chair/train/chair_0329.off
chair/train/chair_0330.off
chair/train/chair_0331.off
chair/train/chair_0332.off
chair/train/chair_0333.off
chair/train/chair_0334.off
chair/train/chair_0335.off
chair/train/chair_0336.off
chair/train/chair_0337.off
chair/train/chair_0338.off
chair/train/chair_0339.off
chair/train/chair_0340.off
chair/train/chair_0341.off
chair/train/chair_0342.off
chair/train/chair_0343.off
chair/train/chair_0344.off
chair/train/chair_0345.off
chair/train/chair_0346.off
chair/train/chair_0347.off
chair/train/chair_0348.off
chair/train/chair_0349.off
chair/train/chair_0350.off
chair/train/chair_0351.off
chair/train/chair_0352.off
chair/train/chair_0353.off
chair/train/chair_0354.off
chair/train/chair_0355.off
chair/train/chair_0356.off
chair/train/chair_0357.off
chair/train/chair_0358.off
chair/train/chair_0359.off
chair/train/chair_0360.off
chair/train/chair_0361.off
chair/train/chair_0362.off
chair/train/chair_0363.off
chair/train/chair_0364.off
chair/train/chair_0365.off
chair/train/chair_0366.off
chair/train/chair_0367.off
chair/train/chair_0368.off
chair/train/chair_0369.off
chair/train/chair_0370.off
chair/train/chair_0371.off
chair/train/chair_0372.off
chair/train/chair_0373.off
chair/train/chair_0374.off
chair/train/chair_0375.off
chair/train/chair_0376.off
chair/train/chair_0377.off
chair/train/chair_0378.off
chair/train/chair_0379.off
chair/train/chair_0380.off
chair/train/chair_0381.off
chair/train/chair_0382.off
chair/train/chair_0383.off
chair/train/chair_0384.off
chair/train/chair_0385.off
chair/train/chair_0386.off
chair/train/chair_0387.off
chair/train/chair_0388.off
chair/train/chair_0389.off
chair/train/chair_0390.off
chair/train/chair_0391.off
chair/train/chair_0392.off
chair/train/chair_0393.off
chair/train/chair_0394.off
chair/train/chair_0395.off
chair/train/chair_0396.off
chair/train/chair_0397.off
chair/train/chair_0398.off
chair/train/chair_0399.off
chair/train/chair_0400.off
chair/train/chair_0401.off
chair/train/chair_0402.off
chair/train/chair_0403.off
chair/train/chair_0404.off
chair/train/chair_0405.off
chair/train/chair_0406.off
chair/train/chair_0407.off
chair/train/chair_0408.off
chair/train/chair_0409.off
chair/train/chair_0410.off
chair/train/chair_0411.off
chair/train/chair_0412.off
chair/train/chair_0413.off
chair/train/chair_0414.off
chair/train/chair_0415.off
chair/train/chair_0416.off
chair/train/chair_0417.off
chair/train/chair_0418.off
chair/train/chair_0419.off
chair/train/chair_0420.off
chair/train/chair_0421.off
chair/train/chair_0422.off
chair/train/chair_0423.off
chair/train/chair_0424.off
chair/train/chair_0425.off
chair/train/chair_0426.off
chair/train/chair_0427.off
chair/train/chair_0428.off
chair/train/chair_0429.off
chair/train/chair_0430.off
chair/train/chair_0431.off
chair/train/chair_0432.off
chair/train/chair_0433.off
chair/train/chair_0434.off
chair/train/chair_0435.off
chair/train/chair_0436.off
chair/train/chair_0437.off
chair/train/chair_0438.off
chair/train/chair_0439.off
chair/train/chair_0440.off
chair/train/chair_0441.off
chair/train/chair_0442.off
chair/train/chair_0443.off
chair/train/chair_0444.off
chair/train/chair_0445.off
chair/train/chair_0446.off
chair/train/chair_0447.off
chair/train/chair_0448.off
chair/train/chair_0449.off
chair/train/chair_0450.off
chair/train/chair_0451.off
chair/train/chair_0452.off
chair/train/chair_0453.off
chair/train/chair_0454.off
chair/train/chair_0455.off
chair/train/chair_0456.off
chair/train/chair_0457.off
chair/train/chair_0458.off
chair/train/chair_0459.off
chair/train/chair_0460.off
chair/train/chair_0461.off
chair/train/chair_0462.off
chair/train/chair_0463.off
chair/train/chair_0464.off
chair/train/chair_0465.off
chair/train/chair_0466.off
chair/train/chair_0467.off
chair/train/chair_0468.off
chair/train/chair_0469.off
chair/train/chair_0470.off
chair/train/chair_0471.off
chair/train/chair_0472.off
chair/train/chair_0473.off
chair/train/chair_0474.off
chair/train/chair_0475.off
chair/train/chair_0476.off
chair/train/chair_0477.off
chair/train/chair_0478.off
chair/train/chair_0479.off
chair/train/chair_0480.off
chair/train/chair_0481.off
chair/train/chair_0482.off
chair/train/chair_0483.off
chair/train/chair_0484.off
chair/train/chair_0485.off
chair/train/chair_0486.off
chair/train/chair_0487.off
chair/train/chair_0488.off
chair/train/chair_0489.off
chair/train/chair_0490.off
chair/train/chair_0491.off
chair/train/chair_0492.off
chair/train/chair_0493.off
chair/train/chair_0494.off
chair/train/chair_0495.off
chair/train/chair_0496.off
chair/train/chair_0497.off
chair/train/chair_0498.off
chair/train/chair_0499.off
chair/train/chair_0500.off
chair/train/chair_0501.off
chair/train/chair_0502.off
chair/train/chair_0503.off
chair/train/chair_0504.off
chair/train/chair_0505.off
chair/train/chair_0506.off
chair/train/chair_0507.off
chair/train/chair_0508.off
chair/train/chair_0509.off
chair/train/chair_0510.off
chair/train/chair_0511.off
chair/train/chair_0512.off
chair/train/chair_0513.off
chair/train/chair_0514.off
chair/train/chair_0515.off
chair/train/chair_0516.off
chair/train/chair_0517.off
chair/train/chair_0518.off
chair/train/chair_0519.off
chair/train/chair_0520.off
chair/train/chair_0521.off
chair/train/chair_0522.off
chair/train/chair_0523.off
chair/train/chair_0524.off
chair/train/chair_0525.off
chair/train/chair_0526.off
chair/train/chair_0527.off
chair/train/chair_0528.off
chair/train/chair_0529.off
chair/train/chair_0530.off
chair/train/chair_0531.off
chair/train/chair_0532.off
chair/train/chair_0533.off
chair/train/chair_0534.off
chair/train/chair_0535.off
chair/train/chair_0536.off
chair/train/chair_0537.off
chair/train/chair_0538.off
chair/train/chair_0539.off
chair/train/chair_0540.off
chair/train/chair_0541.off
chair/train/chair_0542.off
chair/train/chair_0543.off
chair/train/chair_0544.off
chair/train/chair_0545.off
chair/train/chair_0546.off
chair/train/chair_0547.off
chair/train/chair_0548.off
chair/train/chair_0549.off
chair/train/chair_0550.off
chair/train/chair_0551.off
chair/train/chair_0552.off
chair/train/chair_0553.off
chair/train/chair_0554.off
chair/train/chair_0555.off
chair/train/chair_0556.off
chair/train/chair_0557.off
chair/train/chair_0558.off
chair/train/chair_0559.off
chair/train/chair_0560.off
chair/train/chair_0561.off
chair/train/chair_0562.off
chair/train/chair_0563.off
chair/train/chair_0564.off
chair/train/chair_0565.off
chair/train/chair_0566.off
chair/train/chair_0567.off
chair/train/chair_0568.off
chair/train/chair_0569.off
chair/train/chair_0570.off
chair/train/chair_0571.off
chair/train/chair_0572.off
chair/train/chair_0573.off
chair/train/chair_0574.off
chair/train/chair_0575.off
chair/train/chair_0576.off
chair/train/chair_0577.off
chair/train/chair_0578.off
chair/train/chair_0579.off
chair/train/chair_0580.off
chair/train/chair_0581.off
chair/train/chair_0582.off
chair/train/chair_0583.off
chair/train/chair_0584.off
chair/train/chair_0585.off
chair/train/chair_0586.off
chair/train/chair_0587.off
chair/train/chair_0588.off
chair/train/chair_0589.off
chair/train/chair_0590.off
chair/train/chair_0591.off
chair/train/chair_0592.off
chair/train/chair_0593.off
chair/train/chair_0594.off
chair/train/chair_0595.off
chair/train/chair_0596.off
chair/train/chair_0597.off
chair/train/chair_0598.off
chair/train/chair_0599.off
chair/train/chair_0600.off
chair/train/chair_0601.off
chair/train/chair_0602.off
chair/train/chair_0603.off
chair/train/chair_0604.off
chair/train/chair_0605.off
chair/train/chair_0606.off
chair/train/chair_0607.off
chair/train/chair_0608.off
chair/train/chair_0609.off
chair/train/chair_0610.off
chair/train/chair_0611.off
chair/train/chair_0612.off
chair/train/chair_0613.off
chair/train/chair_0614.off
chair/train/chair_0615.off
chair/train/chair_0616.off
chair/train/chair_0617.off
chair/train/chair_0618.off
chair/train/chair_0619.off
chair/train/chair_0620.off
chair/train/chair_0621.off
chair/train/chair_0622.off
chair/train/chair_0623.off
chair/train/chair_0624.off
chair/train/chair_0625.off
chair/train/chair_0626.off
chair/train/chair_0627.off
chair/train/chair_0628.off
chair/train/chair_0629.off
chair/train/chair_0630.off
chair/train/chair_0631.off
chair/train/chair_0632.off
chair/train/chair_0633.off
chair/train/chair_0634.off
chair/train/chair_0635.off
chair/train/chair_0636.off
chair/train/chair_0637.off
chair/train/chair_0638.off
chair/train/chair_0639.off
chair/train/chair_0640.off
chair/train/chair_0641.off
chair/train/chair_0642.off
chair/train/chair_0643.off
chair/train/chair_0644.off
chair/train/chair_0645.off
chair/train/chair_0646.off
chair/train/chair_0647.off
chair/train/chair_0648.off
chair/train/chair_0649.off
chair/train/chair_0650.off
chair/train/chair_0651.off
chair/train/chair_0652.off
chair/train/chair_0653.off
chair/train/chair_0654.off
chair/train/chair_0655.off
chair/train/chair_0656.off
chair/train/chair_0657.off
chair/train/chair_0658.off
chair/train/chair_0659.off
chair/train/chair_0660.off
chair/train/chair_0661.off
chair/train/chair_0662.off
chair/train/chair_0663.off
chair/train/chair_0664.off
chair/train/chair_0665.off
chair/train/chair_0666.off
chair/train/chair_0667.off
chair/train/chair_0668.off
chair/train/chair_0669.off
chair/train/chair_0670.off
chair/train/chair_0671.off
chair/train/chair_0672.off
chair/train/chair_0673.off
chair/train/chair_0674.off
chair/train/chair_0675.off
chair/train/chair_0676.off
chair/train/chair_0677.off
chair/train/chair_0678.off
chair/train/chair_0679.off
chair/train/chair_0680.off
chair/train/chair_0681.off
chair/train/chair_0682.off
chair/train/chair_0683.off
chair/train/chair_0684.off
chair/train/chair_0685.off
chair/train/chair_0686.off
chair/train/chair_0687.off
chair/train/chair_0688.off
chair/train/chair_0689.off
chair/train/chair_0690.off
chair/train/chair_0691.off
chair/train/chair_0692.off
chair/train/chair_0693.off
chair/train/chair_0694.off
chair/train/chair_0695.off
chair/train/chair_0696.off
chair/train/chair_0697.off
chair/train/chair_0698.off
chair/train/chair_0699.off
chair/train/chair_0700.off
chair/train/chair_0701.off
chair/train/chair_0702.off
chair/train/chair_0703.off
chair/train/chair_0704.off
chair/train/chair_0705.off
chair/train/chair_0706.off
chair/train/chair_0707.off
chair/train/chair_0708.off
chair/train/chair_0709.off
chair/train/chair_0710.off
chair/train/chair_0711.off
chair/train/chair_0712.off
chair/train/chair_0713.off
chair/train/chair_0714.off
chair/train/chair_0715.off
chair/train/chair_0716.off
chair/train/chair_0717.off
chair/train/chair_0718.off
chair/train/chair_0719.off
chair/train/chair_0720.off
chair/train/chair_0721.off
chair/train/chair_0722.off
chair/train/chair_0723.off
chair/train/chair_0724.off
chair/train/chair_0725.off
chair/train/chair_0726.off
chair/train/chair_0727.off
chair/train/chair_0728.off
chair/train/chair_0729.off
chair/train/chair_0730.off
chair/train/chair_0731.off
chair/train/chair_0732.off
chair/train/chair_0733.off
chair/train/chair_0734.off
chair/train/chair_0735.off
chair/train/chair_0736.off
chair/train/chair_0737.off
chair/train/chair_0738.off
chair/train/chair_0739.off
chair/train/chair_0740.off
chair/train/chair_0741.off
chair/train/chair_0742.off
chair/train/chair_0743.off
chair/train/chair_0744.off
chair/train/chair_0745.off
chair/train/chair_0746.off
chair/train/chair_0747.off
chair/train/chair_0748.off
chair/train/chair_0749.off
chair/train/chair_0750.off
chair/train/chair_0751.off
chair/train/chair_0752.off
chair/train/chair_0753.off
chair/train/chair_0754.off
chair/train/chair_0755.off
chair/train/chair_0756.off
chair/train/chair_0757.off
chair/train/chair_0758.off
chair/train/chair_0759.off
chair/train/chair_0760.off
chair/train/chair_0761.off
chair/train/chair_0762.off
chair/train/chair_0763.off
chair/train/chair_0764.off
chair/train/chair_0765.off
chair/train/chair_0766.off
chair/train/chair_0767.off
chair/train/chair_0768.off
chair/train/chair_0769.off
chair/train/chair_0770.off
chair/train/chair_0771.off
chair/train/chair_0772.off
chair/train/chair_0773.off
chair/train/chair_0774.off
chair/train/chair_0775.off
chair/train/chair_0776.off
chair/train/chair_0777.off
chair/train/chair_0778.off
chair/train/chair_0779.off
chair/train/chair_0780.off
chair/train/chair_0781.off
chair/train/chair_0782.off
chair/train/chair_0783.off
chair/train/chair_0784.off
chair/train/chair_0785.off
chair/train/chair_0786.off
chair/train/chair_0787.off
chair/train/chair_0788.off
chair/train/chair_0789.off
chair/train/chair_0790.off
chair/train/chair_0791.off
chair/train/chair_0792.off
chair/train/chair_0793.off
chair/train/chair_0794.off
chair/train/chair_0795.off
chair/train/chair_0796.off
chair/train/chair_0797.off
chair/train/chair_0798.off
chair/train/chair_0799.off
chair/train/chair_0800.off
chair/train/chair_0801.off
vase/train/vase_0001.off
vase/train/vase_0002.off
vase/train/vase_0003.off
vase/train/vase_0004.off
vase/train/vase_0005.off
vase/train/vase_0006.off
vase/train/vase_0007.off
vase/train/vase_0008.off
vase/train/vase_0009.off
vase/train/vase_0010.off
vase/train/vase_0011.off
vase/train/vase_0012.off
vase/train/vase_0013.off
vase/train/vase_0014.off
vase/train/vase_0015.off
vase/train/vase_0016.off
vase/train/vase_0017.off
vase/train/vase_0018.off
vase/train/vase_0019.off
vase/train/vase_0020.off
vase/train/vase_0021.off
vase/train/vase_0022.off
vase/train/vase_0023.off
vase/train/vase_0024.off
vase/train/vase_0025.off
vase/train/vase_0026.off
vase/train/vase_0027.off
vase/train/vase_0028.off
vase/train/vase_0029.off
vase/train/vase_0030.off
vase/train/vase_0031.off
vase/train/vase_0032.off
vase/train/vase_0033.off
vase/train/vase_0034.off
vase/train/vase_0035.off
vase/train/vase_0036.off
vase/train/vase_0037.off
vase/train/vase_0038.off
vase/train/vase_0039.off
vase/train/vase_0040.off
vase/train/vase_0041.off
vase/train/vase_0042.off
vase/train/vase_0043.off
vase/train/vase_0044.off
vase/train/vase_0045.off
vase/train/vase_0046.off
vase/train/vase_0047.off
vase/train/vase_0048.off
vase/train/vase_0049.off
vase/train/vase_0050.off
vase/train/vase_0051.off
vase/train/vase_0052.off
vase/train/vase_0053.off
vase/train/vase_0054.off
vase/train/vase_0055.off
vase/train/vase_0056.off
vase/train/vase_0057.off
vase/train/vase_0058.off
vase/train/vase_0059.off
vase/train/vase_0060.off
vase/train/vase_0061.off
vase/train/vase_0062.off
vase/train/vase_0063.off
vase/train/vase_0064.off
vase/train/vase_0065.off
vase/train/vase_0066.off
vase/train/vase_0067.off
vase/train/vase_0068.off
vase/train/vase_0069.off
vase/train/vase_0070.off
vase/train/vase_0071.off
vase/train/vase_0072.off
vase/train/vase_0073.off
vase/train/vase_0074.off
vase/train/vase_0075.off
vase/train/vase_0076.off
vase/train/vase_0077.off
vase/train/vase_0078.off
vase/train/vase_0079.off
vase/train/vase_0080.off
vase/train/vase_0081.off
vase/train/vase_0082.off
vase/train/vase_0083.off
vase/train/vase_0084.off
vase/train/vase_0085.off
vase/train/vase_0086.off
vase/train/vase_0087.off
vase/train/vase_0088.off
vase/train/vase_0089.off
vase/train/vase_0090.off
vase/train/vase_0091.off
vase/train/vase_0092.off
vase/train/vase_0093.off
vase/train/vase_0094.off
vase/train/vase_0095.off
vase/train/vase_0096.off
vase/train/vase_0097.off
vase/train/vase_0098.off
vase/train/vase_0099.off
vase/train/vase_0100.off
vase/train/vase_0101.off
vase/train/vase_0102.off
vase/train/vase_0103.off
vase/train/vase_0104.off
vase/train/vase_0105.off
vase/train/vase_0106.off
vase/train/vase_0107.off
vase/train/vase_0108.off
vase/train/vase_0109.off
vase/train/vase_0110.off
vase/train/vase_0111.off
vase/train/vase_0112.off
vase/train/vase_0113.off
vase/train/vase_0114.off
vase/train/vase_0115.off
vase/train/vase_0116.off
vase/train/vase_0117.off
vase/train/vase_0118.off
vase/train/vase_0119.off
vase/train/vase_0120.off
vase/train/vase_0121.off
vase/train/vase_0122.off
vase/train/vase_0123.off
vase/train/vase_0124.off
vase/train/vase_0125.off
vase/train/vase_0126.off
vase/train/vase_0127.off
vase/train/vase_0128.off
vase/train/vase_0129.off
vase/train/vase_0130.off
vase/train/vase_0131.off
vase/train/vase_0132.off
vase/train/vase_0133.off
vase/train/vase_0134.off
vase/train/vase_0135.off
vase/train/vase_0136.off
vase/train/vase_0137.off
vase/train/vase_0138.off
vase/train/vase_0139.off
vase/train/vase_0140.off
vase/train/vase_0141.off
vase/train/vase_0142.off
vase/train/vase_0143.off
vase/train/vase_0144.off
vase/train/vase_0145.off
vase/train/vase_0146.off
vase/train/vase_0147.off
vase/train/vase_0148.off
vase/train/vase_0149.off
vase/train/vase_0150.off
vase/train/vase_0151.off
vase/train/vase_0152.off
vase/train/vase_0153.off
vase/train/vase_0154.off
vase/train/vase_0155.off
vase/train/vase_0156.off
vase/train/vase_0157.off
vase/train/vase_0158.off
vase/train/vase_0159.off
vase/train/vase_0160.off
vase/train/vase_0161.off
vase/train/vase_0162.off
vase/train/vase_0163.off
vase/train/vase_0164.off
vase/train/vase_0165.off
vase/train/vase_0166.off
vase/train/vase_0167.off
vase/train/vase_0168.off
vase/train/vase_0169.off
vase/train/vase_0170.off
vase/train/vase_0171.off
vase/train/vase_0172.off
vase/train/vase_0173.off
vase/train/vase_0174.off
vase/train/vase_0175.off
vase/train/vase_0176.off
vase/train/vase_0177.off
vase/train/vase_0178.off
vase/train/vase_0179.off
vase/train/vase_0180.off
vase/train/vase_0181.off
vase/train/vase_0182.off
vase/train/vase_0183.off
vase/train/vase_0184.off
vase/train/vase_0185.off
vase/train/vase_0186.off
vase/train/vase_0187.off
vase/train/vase_0188.off
vase/train/vase_0189.off
vase/train/vase_0190.off
vase/train/vase_0191.off
vase/train/vase_0192.off
vase/train/vase_0193.off
vase/train/vase_0194.off
vase/train/vase_0195.off
vase/train/vase_0196.off
vase/train/vase_0197.off
vase/train/vase_0198.off
vase/train/vase_0199.off
vase/train/vase_0200.off
vase/train/vase_0201.off
vase/train/vase_0202.off
vase/train/vase_0203.off
vase/train/vase_0204.off
vase/train/vase_0205.off
vase/train/vase_0206.off
vase/train/vase_0207.off
vase/train/vase_0208.off
vase/train/vase_0209.off
vase/train/vase_0210.off
vase/train/vase_0211.off
vase/train/vase_0212.off
vase/train/vase_0213.off
vase/train/vase_0214.off
vase/train/vase_0215.off
vase/train/vase_0216.off
vase/train/vase_0217.off
vase/train/vase_0218.off
vase/train/vase_0219.off
vase/train/vase_0220.off
vase/train/vase_0221.off
vase/train/vase_0222.off
vase/train/vase_0223.off
vase/train/vase_0224.off
vase/train/vase_0225.off
vase/train/vase_0226.off
vase/train/vase_0227.off
vase/train/vase_0228.off
vase/train/vase_0229.off
vase/train/vase_0230.off
vase/train/vase_0231.off
vase/train/vase_0232.off
vase/train/vase_0233.off
vase/train/vase_0234.off
vase/train/vase_0235.off
vase/train/vase_0236.off
vase/train/vase_0237.off
vase/train/vase_0238.off
vase/train/vase_0239.off
vase/train/vase_0240.off
vase/train/vase_0241.off
vase/train/vase_0242.off
vase/train/vase_0243.off
vase/train/vase_0244.off
vase/train/vase_0245.off
vase/train/vase_0246.off
vase/train/vase_0247.off
vase/train/vase_0248.off
vase/train/vase_0249.off
vase/train/vase_0250.off
vase/train/vase_0251.off
vase/train/vase_0252.off
vase/train/vase_0253.off
vase/train/vase_0254.off
vase/train/vase_0255.off
vase/train/vase_0256.off
vase/train/vase_0257.off
vase/train/vase_0258.off
vase/train/vase_0259.off
vase/train/vase_0260.off
vase/train/vase_0261.off
vase/train/vase_0262.off
vase/train/vase_0263.off
vase/train/vase_0264.off
vase/train/vase_0265.off
vase/train/vase_0266.off
vase/train/vase_0267.off
vase/train/vase_0268.off
vase/train/vase_0269.off
vase/train/vase_0270.off
vase/train/vase_0271.off
vase/train/vase_0272.off
vase/train/vase_0273.off
vase/train/vase_0274.off
vase/train/vase_0275.off
vase/train/vase_0276.off
vase/train/vase_0277.off
vase/train/vase_0278.off
vase/train/vase_0279.off
vase/train/vase_0280.off
vase/train/vase_0281.off
vase/train/vase_0282.off
vase/train/vase_0283.off
vase/train/vase_0284.off
vase/train/vase_0285.off
vase/train/vase_0286.off
vase/train/vase_0287.off
vase/train/vase_0288.off
vase/train/vase_0289.off
vase/train/vase_0290.off
vase/train/vase_0291.off
vase/train/vase_0292.off
vase/train/vase_0293.off
vase/train/vase_0294.off
vase/train/vase_0295.off
vase/train/vase_0296.off
vase/train/vase_0297.off
vase/train/vase_0298.off
vase/train/vase_0299.off
vase/train/vase_0300.off
vase/train/vase_0301.off
vase/train/vase_0302.off
vase/train/vase_0303.off
vase/train/vase_0304.off
vase/train/vase_0305.off
vase/train/vase_0306.off
vase/train/vase_0307.off
vase/train/vase_0308.off
vase/train/vase_0309.off
vase/train/vase_0310.off
vase/train/vase_0311.off
vase/train/vase_0312.off
vase/train/vase_0313.off
vase/train/vase_0314.off
vase/train/vase_0315.off
vase/train/vase_0316.off
vase/train/vase_0317.off
vase/train/vase_0318.off
vase/train/vase_0319.off
vase/train/vase_0320.off
vase/train/vase_0321.off
vase/train/vase_0322.off
vase/train/vase_0323.off
vase/train/vase_0324.off
vase/train/vase_0325.off
vase/train/vase_0326.off
vase/train/vase_0327.off
vase/train/vase_0328.off
vase/train/vase_0329.off
vase/train/vase_0330.off
vase/train/vase_0331.off
vase/train/vase_0332.off
vase/train/vase_0333.off
vase/train/vase_0334.off
vase/train/vase_0335.off
vase/train/vase_0336.off
vase/train/vase_0337.off
vase/train/vase_0338.off
vase/train/vase_0339.off
vase/train/vase_0340.off
vase/train/vase_0341.off
vase/train/vase_0342.off
vase/train/vase_0343.off
vase/train/vase_0344.off
vase/train/vase_0345.off
vase/train/vase_0346.off
vase/train/vase_0347.off
vase/train/vase_0348.off
vase/train/vase_0349.off
vase/train/vase_0350.off
vase/train/vase_0351.off
vase/train/vase_0352.off
vase/train/vase_0353.off
vase/train/vase_0354.off
vase/train/vase_0355.off
vase/train/vase_0356.off
vase/train/vase_0357.off
vase/train/vase_0358.off
vase/train/vase_0359.off
vase/train/vase_0360.off
vase/train/vase_0361.off
vase/train/vase_0362.off
vase/train/vase_0363.off
vase/train/vase_0364.off
vase/train/vase_0365.off
vase/train/vase_0366.off
vase/train/vase_0367.off
vase/train/vase_0368.off
vase/train/vase_0369.off
vase/train/vase_0370.off
vase/train/vase_0371.off
vase/train/vase_0372.off
vase/train/vase_0373.off
vase/train/vase_0374.off
vase/train/vase_0375.off
vase/train/vase_0376.off
vase/train/vase_0377.off
vase/train/vase_0378.off
vase/train/vase_0379.off
vase/train/vase_0380.off
vase/train/vase_0381.off
vase/train/vase_0382.off
vase/train/vase_0383.off
vase/train/vase_0384.off
vase/train/vase_0385.off
vase/train/vase_0386.off
vase/train/vase_0387.off
vase/train/vase_0388.off
vase/train/vase_0389.off
vase/train/vase_0390.off
vase/train/vase_0391.off
vase/train/vase_0392.off
vase/train/vase_0393.off
vase/train/vase_0394.off
vase/train/vase_0395.off
vase/train/vase_0396.off
vase/train/vase_0397.off
vase/train/vase_0398.off
vase/train/vase_0399.off
vase/train/vase_0400.off
vase/train/vase_0401.off
vase/train/vase_0402.off
vase/train/vase_0403.off
vase/train/vase_0404.off
vase/train/vase_0405.off
vase/train/vase_0406.off
vase/train/vase_0407.off
vase/train/vase_0408.off
vase/train/vase_0409.off
vase/train/vase_0410.off
vase/train/vase_0411.off
vase/train/vase_0412.off
vase/train/vase_0413.off
vase/train/vase_0414.off
vase/train/vase_0415.off
vase/train/vase_0416.off
vase/train/vase_0417.off
vase/train/vase_0418.off
vase/train/vase_0419.off
vase/train/vase_0420.off
vase/train/vase_0421.off
vase/train/vase_0422.off
vase/train/vase_0423.off
vase/train/vase_0424.off
vase/train/vase_0425.off
vase/train/vase_0426.off
vase/train/vase_0427.off
vase/train/vase_0428.off
bookshelf/train/bookshelf_0001.off
bookshelf/train/bookshelf_0002.off
bookshelf/train/bookshelf_0003.off
bookshelf/train/bookshelf_0004.off
bookshelf/train/bookshelf_0005.off
bookshelf/train/bookshelf_0006.off
bookshelf/train/bookshelf_0007.off
bookshelf/train/bookshelf_0008.off
bookshelf/train/bookshelf_0009.off
bookshelf/train/bookshelf_0010.off
bookshelf/train/bookshelf_0011.off
bookshelf/train/bookshelf_0012.off
bookshelf/train/bookshelf_0013.off
bookshelf/train/bookshelf_0014.off
bookshelf/train/bookshelf_0015.off
bookshelf/train/bookshelf_0016.off
bookshelf/train/bookshelf_0017.off
bookshelf/train/bookshelf_0018.off
bookshelf/train/bookshelf_0019.off
bookshelf/train/bookshelf_0020.off
bookshelf/train/bookshelf_0021.off
bookshelf/train/bookshelf_0022.off
bookshelf/train/bookshelf_0023.off
bookshelf/train/bookshelf_0024.off
bookshelf/train/bookshelf_0025.off
bookshelf/train/bookshelf_0026.off
bookshelf/train/bookshelf_0027.off
bookshelf/train/bookshelf_0028.off
bookshelf/train/bookshelf_0029.off
bookshelf/train/bookshelf_0030.off
bookshelf/train/bookshelf_0031.off
bookshelf/train/bookshelf_0032.off
bookshelf/train/bookshelf_0033.off
bookshelf/train/bookshelf_0034.off
bookshelf/train/bookshelf_0035.off
bookshelf/train/bookshelf_0036.off
bookshelf/train/bookshelf_0037.off
bookshelf/train/bookshelf_0038.off
bookshelf/train/bookshelf_0039.off
bookshelf/train/bookshelf_0040.off
bookshelf/train/bookshelf_0041.off
bookshelf/train/bookshelf_0042.off
bookshelf/train/bookshelf_0043.off
bookshelf/train/bookshelf_0044.off
bookshelf/train/bookshelf_0045.off
bookshelf/train/bookshelf_0046.off
bookshelf/train/bookshelf_0047.off
bookshelf/train/bookshelf_0048.off
bookshelf/train/bookshelf_0049.off
bookshelf/train/bookshelf_0050.off
bookshelf/train/bookshelf_0051.off
bookshelf/train/bookshelf_0052.off
bookshelf/train/bookshelf_0053.off
bookshelf/train/bookshelf_0054.off
bookshelf/train/bookshelf_0055.off
bookshelf/train/bookshelf_0056.off
bookshelf/train/bookshelf_0057.off
bookshelf/train/bookshelf_0058.off
bookshelf/train/bookshelf_0059.off
bookshelf/train/bookshelf_0060.off
bookshelf/train/bookshelf_0061.off
bookshelf/train/bookshelf_0062.off
bookshelf/train/bookshelf_0063.off
bookshelf/train/bookshelf_0064.off
bookshelf/train/bookshelf_0065.off
bookshelf/train/bookshelf_0066.off
bookshelf/train/bookshelf_0067.off
bookshelf/train/bookshelf_0068.off
bookshelf/train/bookshelf_0069.off
bookshelf/train/bookshelf_0070.off
bookshelf/train/bookshelf_0071.off
bookshelf/train/bookshelf_0072.off
bookshelf/train/bookshelf_0073.off
bookshelf/train/bookshelf_0074.off
bookshelf/train/bookshelf_0075.off
bookshelf/train/bookshelf_0076.off
bookshelf/train/bookshelf_0077.off
bookshelf/train/bookshelf_0078.off
bookshelf/train/bookshelf_0079.off
bookshelf/train/bookshelf_0080.off
bookshelf/train/bookshelf_0081.off
bookshelf/train/bookshelf_0082.off
bookshelf/train/bookshelf_0083.off
bookshelf/train/bookshelf_0084.off
bookshelf/train/bookshelf_0085.off
bookshelf/train/bookshelf_0086.off
bookshelf/train/bookshelf_0087.off
bookshelf/train/bookshelf_0088.off
bookshelf/train/bookshelf_0089.off
bookshelf/train/bookshelf_0090.off
bookshelf/train/bookshelf_0091.off
bookshelf/train/bookshelf_0092.off
bookshelf/train/bookshelf_0093.off
bookshelf/train/bookshelf_0094.off
bookshelf/train/bookshelf_0095.off
bookshelf/train/bookshelf_0096.off
bookshelf/train/bookshelf_0097.off
bookshelf/train/bookshelf_0098.off
bookshelf/train/bookshelf_0099.off
bookshelf/train/bookshelf_0100.off
bookshelf/train/bookshelf_0101.off
bookshelf/train/bookshelf_0102.off
bookshelf/train/bookshelf_0103.off
bookshelf/train/bookshelf_0104.off
bookshelf/train/bookshelf_0105.off
bookshelf/train/bookshelf_0106.off
bookshelf/train/bookshelf_0107.off
bookshelf/train/bookshelf_0108.off
bookshelf/train/bookshelf_0109.off
bookshelf/train/bookshelf_0110.off
bookshelf/train/bookshelf_0111.off
bookshelf/train/bookshelf_0112.off
bookshelf/train/bookshelf_0113.off
bookshelf/train/bookshelf_0114.off
bookshelf/train/bookshelf_0115.off
bookshelf/train/bookshelf_0116.off
bookshelf/train/bookshelf_0117.off
bookshelf/train/bookshelf_0118.off
bookshelf/train/bookshelf_0119.off
bookshelf/train/bookshelf_0120.off
bookshelf/train/bookshelf_0121.off
bookshelf/train/bookshelf_0122.off
bookshelf/train/bookshelf_0123.off
bookshelf/train/bookshelf_0124.off
bookshelf/train/bookshelf_0125.off
bookshelf/train/bookshelf_0126.off
bookshelf/train/bookshelf_0127.off
bookshelf/train/bookshelf_0128.off
bookshelf/train/bookshelf_0129.off
bookshelf/train/bookshelf_0130.off
bookshelf/train/bookshelf_0131.off
bookshelf/train/bookshelf_0132.off
bookshelf/train/bookshelf_0133.off
bookshelf/train/bookshelf_0134.off
bookshelf/train/bookshelf_0135.off
bookshelf/train/bookshelf_0136.off
bookshelf/train/bookshelf_0137.off
bookshelf/train/bookshelf_0138.off
bookshelf/train/bookshelf_0139.off
bookshelf/train/bookshelf_0140.off
bookshelf/train/bookshelf_0141.off
bookshelf/train/bookshelf_0142.off
bookshelf/train/bookshelf_0143.off
bookshelf/train/bookshelf_0144.off
bookshelf/train/bookshelf_0145.off
bookshelf/train/bookshelf_0146.off
bookshelf/train/bookshelf_0147.off
bookshelf/train/bookshelf_0148.off
bookshelf/train/bookshelf_0149.off
bookshelf/train/bookshelf_0150.off
bookshelf/train/bookshelf_0151.off
bookshelf/train/bookshelf_0152.off
bookshelf/train/bookshelf_0153.off
bookshelf/train/bookshelf_0154.off
bookshelf/train/bookshelf_0155.off
bookshelf/train/bookshelf_0156.off
bookshelf/train/bookshelf_0157.off
bookshelf/train/bookshelf_0158.off
bookshelf/train/bookshelf_0159.off
bookshelf/train/bookshelf_0160.off
bookshelf/train/bookshelf_0161.off
bookshelf/train/bookshelf_0162.off
bookshelf/train/bookshelf_0163.off
bookshelf/train/bookshelf_0164.off
bookshelf/train/bookshelf_0165.off
bookshelf/train/bookshelf_0166.off
bookshelf/train/bookshelf_0167.off
bookshelf/train/bookshelf_0168.off
bookshelf/train/bookshelf_0169.off
bookshelf/train/bookshelf_0170.off
bookshelf/train/bookshelf_0171.off
bookshelf/train/bookshelf_0172.off
bookshelf/train/bookshelf_0173.off
bookshelf/train/bookshelf_0174.off
bookshelf/train/bookshelf_0175.off
bookshelf/train/bookshelf_0176.off
bookshelf/train/bookshelf_0177.off
bookshelf/train/bookshelf_0178.off
bookshelf/train/bookshelf_0179.off
bookshelf/train/bookshelf_0180.off
bookshelf/train/bookshelf_0181.off
bookshelf/train/bookshelf_0182.off
bookshelf/train/bookshelf_0183.off
bookshelf/train/bookshelf_0184.off
bookshelf/train/bookshelf_0185.off
bookshelf/train/bookshelf_0186.off
bookshelf/train/bookshelf_0187.off
bookshelf/train/bookshelf_0188.off
bookshelf/train/bookshelf_0189.off
bookshelf/train/bookshelf_0190.off
bookshelf/train/bookshelf_0191.off
bookshelf/train/bookshelf_0192.off
bookshelf/train/bookshelf_0193.off
bookshelf/train/bookshelf_0194.off
bookshelf/train/bookshelf_0195.off
bookshelf/train/bookshelf_0196.off
bookshelf/train/bookshelf_0197.off
bookshelf/train/bookshelf_0198.off
bookshelf/train/bookshelf_0199.off
bookshelf/train/bookshelf_0200.off
bookshelf/train/bookshelf_0201.off
bookshelf/train/bookshelf_0202.off
bookshelf/train/bookshelf_0203.off
bookshelf/train/bookshelf_0204.off
bookshelf/train/bookshelf_0205.off
bookshelf/train/bookshelf_0206.off
bookshelf/train/bookshelf_0207.off
bookshelf/train/bookshelf_0208.off
bookshelf/train/bookshelf_0209.off
bookshelf/train/bookshelf_0210.off
bookshelf/train/bookshelf_0211.off
bookshelf/train/bookshelf_0212.off
bookshelf/train/bookshelf_0213.off
bookshelf/train/bookshelf_0214.off
bookshelf/train/bookshelf_0215.off
bookshelf/train/bookshelf_0216.off
bookshelf/train/bookshelf_0217.off
bookshelf/train/bookshelf_0218.off
bookshelf/train/bookshelf_0219.off
bookshelf/train/bookshelf_0220.off
bookshelf/train/bookshelf_0221.off
bookshelf/train/bookshelf_0222.off
bookshelf/train/bookshelf_0223.off
bookshelf/train/bookshelf_0224.off
bookshelf/train/bookshelf_0225.off
bookshelf/train/bookshelf_0226.off
bookshelf/train/bookshelf_0227.off
bookshelf/train/bookshelf_0228.off
bookshelf/train/bookshelf_0229.off
bookshelf/train/bookshelf_0230.off
bookshelf/train/bookshelf_0231.off
bookshelf/train/bookshelf_0232.off
bookshelf/train/bookshelf_0233.off
bookshelf/train/bookshelf_0234.off
bookshelf/train/bookshelf_0235.off
bookshelf/train/bookshelf_0236.off
bookshelf/train/bookshelf_0237.off
bookshelf/train/bookshelf_0238.off
bookshelf/train/bookshelf_0239.off
bookshelf/train/bookshelf_0240.off
bookshelf/train/bookshelf_0241.off
bookshelf/train/bookshelf_0242.off
bookshelf/train/bookshelf_0243.off
bookshelf/train/bookshelf_0244.off
bookshelf/train/bookshelf_0245.off
bookshelf/train/bookshelf_0246.off
bookshelf/train/bookshelf_0247.off
bookshelf/train/bookshelf_0248.off
bookshelf/train/bookshelf_0249.off
bookshelf/train/bookshelf_0250.off
bookshelf/train/bookshelf_0251.off
bookshelf/train/bookshelf_0252.off
bookshelf/train/bookshelf_0253.off
bookshelf/train/bookshelf_0254.off
bookshelf/train/bookshelf_0255.off
bookshelf/train/bookshelf_0256.off
bookshelf/train/bookshelf_0257.off
bookshelf/train/bookshelf_0258.off
bookshelf/train/bookshelf_0259.off
bookshelf/train/bookshelf_0260.off
bookshelf/train/bookshelf_0261.off
bookshelf/train/bookshelf_0262.off
bookshelf/train/bookshelf_0263.off
bookshelf/train/bookshelf_0264.off
bookshelf/train/bookshelf_0265.off
bookshelf/train/bookshelf_0266.off
bookshelf/train/bookshelf_0267.off
bookshelf/train/bookshelf_0268.off
bookshelf/train/bookshelf_0269.off
bookshelf/train/bookshelf_0270.off
bookshelf/train/bookshelf_0271.off
bookshelf/train/bookshelf_0272.off
bookshelf/train/bookshelf_0273.off
bookshelf/train/bookshelf_0274.off
bookshelf/train/bookshelf_0275.off
bookshelf/train/bookshelf_0276.off
bookshelf/train/bookshelf_0277.off
bookshelf/train/bookshelf_0278.off
bookshelf/train/bookshelf_0279.off
bookshelf/train/bookshelf_0280.off
bookshelf/train/bookshelf_0281.off
bookshelf/train/bookshelf_0282.off
bookshelf/train/bookshelf_0283.off
bookshelf/train/bookshelf_0284.off
bookshelf/train/bookshelf_0285.off
bookshelf/train/bookshelf_0286.off
bookshelf/train/bookshelf_0287.off
bookshelf/train/bookshelf_0288.off
bookshelf/train/bookshelf_0289.off
bookshelf/train/bookshelf_0290.off
bookshelf/train/bookshelf_0291.off
bookshelf/train/bookshelf_0292.off
bookshelf/train/bookshelf_0293.off
bookshelf/train/bookshelf_0294.off
bookshelf/train/bookshelf_0295.off
bookshelf/train/bookshelf_0296.off
bookshelf/train/bookshelf_0297.off
bookshelf/train/bookshelf_0298.off
bookshelf/train/bookshelf_0299.off
bookshelf/train/bookshelf_0300.off
bookshelf/train/bookshelf_0301.off
bookshelf/train/bookshelf_0302.off
bookshelf/train/bookshelf_0303.off
bookshelf/train/bookshelf_0304.off
bookshelf/train/bookshelf_0305.off
bookshelf/train/bookshelf_0306.off
bookshelf/train/bookshelf_0307.off
bookshelf/train/bookshelf_0308.off
bookshelf/train/bookshelf_0309.off
bookshelf/train/bookshelf_0310.off
bookshelf/train/bookshelf_0311.off
bookshelf/train/bookshelf_0312.off
bookshelf/train/bookshelf_0313.off
bookshelf/train/bookshelf_0314.off
bookshelf/train/bookshelf_0315.off
bookshelf/train/bookshelf_0316.off
bookshelf/train/bookshelf_0317.off
bookshelf/train/bookshelf_0318.off
bookshelf/train/bookshelf_0319.off
bookshelf/train/bookshelf_0320.off
bookshelf/train/bookshelf_0321.off
bookshelf/train/bookshelf_0322.off
bookshelf/train/bookshelf_0323.off
bookshelf/train/bookshelf_0324.off
bookshelf/train/bookshelf_0325.off
bookshelf/train/bookshelf_0326.off
bookshelf/train/bookshelf_0327.off
bookshelf/train/bookshelf_0328.off
bookshelf/train/bookshelf_0329.off
bookshelf/train/bookshelf_0330.off
bookshelf/train/bookshelf_0331.off
bookshelf/train/bookshelf_0332.off
bookshelf/train/bookshelf_0333.off
bookshelf/train/bookshelf_0334.off
bookshelf/train/bookshelf_0335.off
bookshelf/train/bookshelf_0336.off
bookshelf/train/bookshelf_0337.off
bookshelf/train/bookshelf_0338.off
bookshelf/train/bookshelf_0339.off
bookshelf/train/bookshelf_0340.off
bookshelf/train/bookshelf_0341.off
bookshelf/train/bookshelf_0342.off
bookshelf/train/bookshelf_0343.off
bookshelf/train/bookshelf_0344.off
bookshelf/train/bookshelf_0345.off
bookshelf/train/bookshelf_0346.off
bookshelf/train/bookshelf_0347.off
bookshelf/train/bookshelf_0348.off
bookshelf/train/bookshelf_0349.off
bookshelf/train/bookshelf_0350.off
bookshelf/train/bookshelf_0351.off
bookshelf/train/bookshelf_0352.off
bookshelf/train/bookshelf_0353.off
bookshelf/train/bookshelf_0354.off
bookshelf/train/bookshelf_0355.off
bookshelf/train/bookshelf_0356.off
bookshelf/train/bookshelf_0357.off
bookshelf/train/bookshelf_0358.off
bookshelf/train/bookshelf_0359.off
bookshelf/train/bookshelf_0360.off
bookshelf/train/bookshelf_0361.off
bookshelf/train/bookshelf_0362.off
bookshelf/train/bookshelf_0363.off
bookshelf/train/bookshelf_0364.off
bookshelf/train/bookshelf_0365.off
bookshelf/train/bookshelf_0366.off
bookshelf/train/bookshelf_0367.off
bookshelf/train/bookshelf_0368.off
bookshelf/train/bookshelf_0369.off
bookshelf/train/bookshelf_0370.off
bookshelf/train/bookshelf_0371.off
bookshelf/train/bookshelf_0372.off
bookshelf/train/bookshelf_0373.off
bookshelf/train/bookshelf_0374.off
bookshelf/train/bookshelf_0375.off
bookshelf/train/bookshelf_0376.off
bookshelf/train/bookshelf_0377.off
bookshelf/train/bookshelf_0378.off
bookshelf/train/bookshelf_0379.off
bookshelf/train/bookshelf_0380.off
bookshelf/train/bookshelf_0381.off
bookshelf/train/bookshelf_0382.off
bookshelf/train/bookshelf_0383.off
bookshelf/train/bookshelf_0384.off
bookshelf/train/bookshelf_0385.off
bookshelf/train/bookshelf_0386.off
bookshelf/train/bookshelf_0387.off
bookshelf/train/bookshelf_0388.off
bookshelf/train/bookshelf_0389.off
bookshelf/train/bookshelf_0390.off
bookshelf/train/bookshelf_0391.off
bookshelf/train/bookshelf_0392.off
bookshelf/train/bookshelf_0393.off
bookshelf/train/bookshelf_0394.off
bookshelf/train/bookshelf_0395.off
bookshelf/train/bookshelf_0396.off
bookshelf/train/bookshelf_0397.off
bookshelf/train/bookshelf_0398.off
bookshelf/train/bookshelf_0399.off
bookshelf/train/bookshelf_0400.off
bookshelf/train/bookshelf_0401.off
bookshelf/train/bookshelf_0402.off
bookshelf/train/bookshelf_0403.off
bookshelf/train/bookshelf_0404.off
bookshelf/train/bookshelf_0405.off
bookshelf/train/bookshelf_0406.off
bookshelf/train/bookshelf_0407.off
bookshelf/train/bookshelf_0408.off
bookshelf/train/bookshelf_0409.off
bookshelf/train/bookshelf_0410.off
bookshelf/train/bookshelf_0411.off
bookshelf/train/bookshelf_0412.off
bookshelf/train/bookshelf_0413.off
bookshelf/train/bookshelf_0414.off
bookshelf/train/bookshelf_0415.off
bookshelf/train/bookshelf_0416.off
bookshelf/train/bookshelf_0417.off
bookshelf/train/bookshelf_0418.off
bookshelf/train/bookshelf_0419.off
bookshelf/train/bookshelf_0420.off
bookshelf/train/bookshelf_0421.off
bookshelf/train/bookshelf_0422.off
bookshelf/train/bookshelf_0423.off
bookshelf/train/bookshelf_0424.off
bookshelf/train/bookshelf_0425.off
bookshelf/train/bookshelf_0426.off
bookshelf/train/bookshelf_0427.off
bookshelf/train/bookshelf_0428.off
bookshelf/train/bookshelf_0429.off
bookshelf/train/bookshelf_0430.off
bookshelf/train/bookshelf_0431.off
bookshelf/train/bookshelf_0432.off
bookshelf/train/bookshelf_0433.off
bookshelf/train/bookshelf_0434.off
bookshelf/train/bookshelf_0435.off
bookshelf/train/bookshelf_0436.off
bookshelf/train/bookshelf_0437.off
bookshelf/train/bookshelf_0438.off
bookshelf/train/bookshelf_0439.off
bookshelf/train/bookshelf_0440.off
bookshelf/train/bookshelf_0441.off
bookshelf/train/bookshelf_0442.off
bookshelf/train/bookshelf_0443.off
bookshelf/train/bookshelf_0444.off
bookshelf/train/bookshelf_0445.off
bookshelf/train/bookshelf_0446.off
bookshelf/train/bookshelf_0447.off
bookshelf/train/bookshelf_0448.off
bookshelf/train/bookshelf_0449.off
bookshelf/train/bookshelf_0450.off
bookshelf/train/bookshelf_0451.off
bookshelf/train/bookshelf_0452.off
bookshelf/train/bookshelf_0453.off
bookshelf/train/bookshelf_0454.off
bookshelf/train/bookshelf_0455.off
bookshelf/train/bookshelf_0456.off
bookshelf/train/bookshelf_0457.off
bookshelf/train/bookshelf_0458.off
bookshelf/train/bookshelf_0459.off
bookshelf/train/bookshelf_0460.off
bookshelf/train/bookshelf_0461.off
bookshelf/train/bookshelf_0462.off
bookshelf/train/bookshelf_0463.off
bookshelf/train/bookshelf_0464.off
bookshelf/train/bookshelf_0465.off
bookshelf/train/bookshelf_0466.off
bookshelf/train/bookshelf_0467.off
bookshelf/train/bookshelf_0468.off
bookshelf/train/bookshelf_0469.off
bookshelf/train/bookshelf_0470.off
bookshelf/train/bookshelf_0471.off
bookshelf/train/bookshelf_0472.off
bookshelf/train/bookshelf_0473.off
bookshelf/train/bookshelf_0474.off
bookshelf/train/bookshelf_0475.off
bookshelf/train/bookshelf_0476.off
bookshelf/train/bookshelf_0477.off
bookshelf/train/bookshelf_0478.off
bookshelf/train/bookshelf_0479.off
bookshelf/train/bookshelf_0480.off
bookshelf/train/bookshelf_0481.off
bookshelf/train/bookshelf_0482.off
bookshelf/train/bookshelf_0483.off
bookshelf/train/bookshelf_0484.off
bookshelf/train/bookshelf_0485.off
bookshelf/train/bookshelf_0486.off
bookshelf/train/bookshelf_0487.off
bookshelf/train/bookshelf_0488.off
bookshelf/train/bookshelf_0489.off
bookshelf/train/bookshelf_0490.off
bookshelf/train/bookshelf_0491.off
bookshelf/train/bookshelf_0492.off
bookshelf/train/bookshelf_0493.off
bookshelf/train/bookshelf_0494.off
bookshelf/train/bookshelf_0495.off
bookshelf/train/bookshelf_0496.off
bookshelf/train/bookshelf_0497.off
bookshelf/train/bookshelf_0498.off
bookshelf/train/bookshelf_0499.off
bookshelf/train/bookshelf_0500.off
bookshelf/train/bookshelf_0501.off
bookshelf/train/bookshelf_0502.off
bookshelf/train/bookshelf_0503.off
bookshelf/train/bookshelf_0504.off
bookshelf/train/bookshelf_0505.off
bookshelf/train/bookshelf_0506.off
bookshelf/train/bookshelf_0507.off
bookshelf/train/bookshelf_0508.off
bookshelf/train/bookshelf_0509.off
bookshelf/train/bookshelf_0510.off
bookshelf/train/bookshelf_0511.off
bookshelf/train/bookshelf_0512.off
bookshelf/train/bookshelf_0513.off
bookshelf/train/bookshelf_0514.off
bookshelf/train/bookshelf_0515.off
guitar/train/guitar_0001.off
guitar/train/guitar_0002.off
guitar/train/guitar_0003.off
guitar/train/guitar_0004.off
guitar/train/guitar_0005.off
guitar/train/guitar_0006.off
guitar/train/guitar_0007.off
guitar/train/guitar_0008.off
guitar/train/guitar_0009.off
guitar/train/guitar_0010.off
guitar/train/guitar_0011.off
guitar/train/guitar_0012.off
guitar/train/guitar_0013.off
guitar/train/guitar_0014.off
guitar/train/guitar_0015.off
guitar/train/guitar_0016.off
guitar/train/guitar_0017.off
guitar/train/guitar_0018.off
guitar/train/guitar_0019.off
guitar/train/guitar_0020.off
guitar/train/guitar_0021.off
guitar/train/guitar_0022.off
guitar/train/guitar_0023.off
guitar/train/guitar_0024.off
guitar/train/guitar_0025.off
guitar/train/guitar_0026.off
guitar/train/guitar_0027.off
guitar/train/guitar_0028.off
guitar/train/guitar_0029.off
guitar/train/guitar_0030.off
guitar/train/guitar_0031.off
guitar/train/guitar_0032.off
guitar/train/guitar_0033.off
guitar/train/guitar_0034.off
guitar/train/guitar_0035.off
guitar/train/guitar_0036.off
guitar/train/guitar_0037.off
guitar/train/guitar_0038.off
guitar/train/guitar_0039.off
guitar/train/guitar_0040.off
guitar/train/guitar_0041.off
guitar/train/guitar_0042.off
guitar/train/guitar_0043.off
guitar/train/guitar_0044.off
guitar/train/guitar_0045.off
guitar/train/guitar_0046.off
guitar/train/guitar_0047.off
guitar/train/guitar_0048.off
guitar/train/guitar_0049.off
guitar/train/guitar_0050.off
guitar/train/guitar_0051.off
guitar/train/guitar_0052.off
guitar/train/guitar_0053.off
guitar/train/guitar_0054.off
guitar/train/guitar_0055.off
guitar/train/guitar_0056.off
guitar/train/guitar_0057.off
guitar/train/guitar_0058.off
guitar/train/guitar_0059.off
guitar/train/guitar_0060.off
guitar/train/guitar_0061.off
guitar/train/guitar_0062.off
guitar/train/guitar_0063.off
guitar/train/guitar_0064.off
guitar/train/guitar_0065.off
guitar/train/guitar_0066.off
guitar/train/guitar_0067.off
guitar/train/guitar_0068.off
guitar/train/guitar_0069.off
guitar/train/guitar_0070.off
guitar/train/guitar_0071.off
guitar/train/guitar_0072.off
guitar/train/guitar_0073.off
guitar/train/guitar_0074.off
guitar/train/guitar_0075.off
guitar/train/guitar_0076.off
guitar/train/guitar_0077.off
guitar/train/guitar_0078.off
guitar/train/guitar_0079.off
guitar/train/guitar_0080.off
guitar/train/guitar_0081.off
guitar/train/guitar_0082.off
guitar/train/guitar_0083.off
guitar/train/guitar_0084.off
guitar/train/guitar_0085.off
guitar/train/guitar_0086.off
guitar/train/guitar_0087.off
guitar/train/guitar_0088.off
guitar/train/guitar_0089.off
guitar/train/guitar_0090.off
guitar/train/guitar_0091.off
guitar/train/guitar_0092.off
guitar/train/guitar_0093.off
guitar/train/guitar_0094.off
guitar/train/guitar_0095.off
guitar/train/guitar_0096.off
guitar/train/guitar_0097.off
guitar/train/guitar_0098.off
guitar/train/guitar_0099.off
guitar/train/guitar_0100.off
guitar/train/guitar_0101.off
guitar/train/guitar_0102.off
guitar/train/guitar_0103.off
guitar/train/guitar_0104.off
guitar/train/guitar_0105.off
guitar/train/guitar_0106.off
guitar/train/guitar_0107.off
guitar/train/guitar_0108.off
guitar/train/guitar_0109.off
guitar/train/guitar_0110.off
guitar/train/guitar_0111.off
guitar/train/guitar_0112.off
guitar/train/guitar_0113.off
guitar/train/guitar_0114.off
guitar/train/guitar_0115.off
guitar/train/guitar_0116.off
guitar/train/guitar_0117.off
guitar/train/guitar_0118.off
guitar/train/guitar_0119.off
guitar/train/guitar_0120.off
guitar/train/guitar_0121.off
guitar/train/guitar_0122.off
guitar/train/guitar_0123.off
guitar/train/guitar_0124.off
guitar/train/guitar_0125.off
guitar/train/guitar_0126.off
guitar/train/guitar_0127.off
guitar/train/guitar_0128.off
guitar/train/guitar_0129.off
guitar/train/guitar_0130.off
guitar/train/guitar_0131.off
guitar/train/guitar_0132.off
guitar/train/guitar_0133.off
guitar/train/guitar_0134.off
guitar/train/guitar_0135.off
guitar/train/guitar_0136.off
guitar/train/guitar_0137.off
guitar/train/guitar_0138.off
guitar/train/guitar_0139.off
guitar/train/guitar_0140.off
tv_stand/train/tv_stand_0001.off
tv_stand/train/tv_stand_0002.off
tv_stand/train/tv_stand_0003.off
tv_stand/train/tv_stand_0004.off
tv_stand/train/tv_stand_0005.off
tv_stand/train/tv_stand_0006.off
tv_stand/train/tv_stand_0007.off
tv_stand/train/tv_stand_0008.off
tv_stand/train/tv_stand_0009.off
tv_stand/train/tv_stand_0010.off
tv_stand/train/tv_stand_0011.off
tv_stand/train/tv_stand_0012.off
tv_stand/train/tv_stand_0013.off
tv_stand/train/tv_stand_0014.off
tv_stand/train/tv_stand_0015.off
tv_stand/train/tv_stand_0016.off
tv_stand/train/tv_stand_0017.off
tv_stand/train/tv_stand_0018.off
tv_stand/train/tv_stand_0019.off
tv_stand/train/tv_stand_0020.off
tv_stand/train/tv_stand_0021.off
tv_stand/train/tv_stand_0022.off
tv_stand/train/tv_stand_0023.off
tv_stand/train/tv_stand_0024.off
tv_stand/train/tv_stand_0025.off
tv_stand/train/tv_stand_0026.off
tv_stand/train/tv_stand_0027.off
tv_stand/train/tv_stand_0028.off
tv_stand/train/tv_stand_0029.off
tv_stand/train/tv_stand_0030.off
tv_stand/train/tv_stand_0031.off
tv_stand/train/tv_stand_0032.off
tv_stand/train/tv_stand_0033.off
tv_stand/train/tv_stand_0034.off
tv_stand/train/tv_stand_0035.off
tv_stand/train/tv_stand_0036.off
tv_stand/train/tv_stand_0037.off
tv_stand/train/tv_stand_0038.off
tv_stand/train/tv_stand_0039.off
tv_stand/train/tv_stand_0040.off
tv_stand/train/tv_stand_0041.off
tv_stand/train/tv_stand_0042.off
tv_stand/train/tv_stand_0043.off
tv_stand/train/tv_stand_0044.off
tv_stand/train/tv_stand_0045.off
tv_stand/train/tv_stand_0046.off
tv_stand/train/tv_stand_0047.off
tv_stand/train/tv_stand_0048.off
tv_stand/train/tv_stand_0049.off
tv_stand/train/tv_stand_0050.off
tv_stand/train/tv_stand_0051.off
tv_stand/train/tv_stand_0052.off
tv_stand/train/tv_stand_0053.off
tv_stand/train/tv_stand_0054.off
tv_stand/train/tv_stand_0055.off
tv_stand/train/tv_stand_0056.off
tv_stand/train/tv_stand_0057.off
tv_stand/train/tv_stand_0058.off
tv_stand/train/tv_stand_0059.off
tv_stand/train/tv_stand_0060.off
tv_stand/train/tv_stand_0061.off
tv_stand/train/tv_stand_0062.off
tv_stand/train/tv_stand_0063.off
tv_stand/train/tv_stand_0064.off
tv_stand/train/tv_stand_0065.off
tv_stand/train/tv_stand_0066.off
tv_stand/train/tv_stand_0067.off
tv_stand/train/tv_stand_0068.off
tv_stand/train/tv_stand_0069.off
tv_stand/train/tv_stand_0070.off
tv_stand/train/tv_stand_0071.off
tv_stand/train/tv_stand_0072.off
tv_stand/train/tv_stand_0073.off
tv_stand/train/tv_stand_0074.off
tv_stand/train/tv_stand_0075.off
tv_stand/train/tv_stand_0076.off
tv_stand/train/tv_stand_0077.off
tv_stand/train/tv_stand_0078.off
tv_stand/train/tv_stand_0079.off
tv_stand/train/tv_stand_0080.off
tv_stand/train/tv_stand_0081.off
tv_stand/train/tv_stand_0082.off
tv_stand/train/tv_stand_0083.off
tv_stand/train/tv_stand_0084.off
tv_stand/train/tv_stand_0085.off
tv_stand/train/tv_stand_0086.off
tv_stand/train/tv_stand_0087.off
tv_stand/train/tv_stand_0088.off
tv_stand/train/tv_stand_0089.off
tv_stand/train/tv_stand_0090.off
tv_stand/train/tv_stand_0091.off
tv_stand/train/tv_stand_0092.off
tv_stand/train/tv_stand_0093.off
tv_stand/train/tv_stand_0094.off
tv_stand/train/tv_stand_0095.off
tv_stand/train/tv_stand_0096.off
tv_stand/train/tv_stand_0097.off
tv_stand/train/tv_stand_0098.off
tv_stand/train/tv_stand_0099.off
tv_stand/train/tv_stand_0100.off
tv_stand/train/tv_stand_0101.off
tv_stand/train/tv_stand_0102.off
tv_stand/train/tv_stand_0103.off
tv_stand/train/tv_stand_0104.off
tv_stand/train/tv_stand_0105.off
tv_stand/train/tv_stand_0106.off
tv_stand/train/tv_stand_0107.off
tv_stand/train/tv_stand_0108.off
tv_stand/train/tv_stand_0109.off
tv_stand/train/tv_stand_0110.off
tv_stand/train/tv_stand_0111.off
tv_stand/train/tv_stand_0112.off
tv_stand/train/tv_stand_0113.off
tv_stand/train/tv_stand_0114.off
tv_stand/train/tv_stand_0115.off
tv_stand/train/tv_stand_0116.off
tv_stand/train/tv_stand_0117.off
tv_stand/train/tv_stand_0118.off
tv_stand/train/tv_stand_0119.off
tv_stand/train/tv_stand_0120.off
tv_stand/train/tv_stand_0121.off
tv_stand/train/tv_stand_0122.off
tv_stand/train/tv_stand_0123.off
tv_stand/train/tv_stand_0124.off
tv_stand/train/tv_stand_0125.off
tv_stand/train/tv_stand_0126.off
tv_stand/train/tv_stand_0127.off
tv_stand/train/tv_stand_0128.off
tv_stand/train/tv_stand_0129.off
tv_stand/train/tv_stand_0130.off
tv_stand/train/tv_stand_0131.off
tv_stand/train/tv_stand_0132.off
tv_stand/train/tv_stand_0133.off
tv_stand/train/tv_stand_0134.off
tv_stand/train/tv_stand_0135.off
tv_stand/train/tv_stand_0136.off
tv_stand/train/tv_stand_0137.off
tv_stand/train/tv_stand_0138.off
tv_stand/train/tv_stand_0139.off
tv_stand/train/tv_stand_0140.off
tv_stand/train/tv_stand_0141.off
tv_stand/train/tv_stand_0142.off
tv_stand/train/tv_stand_0143.off
tv_stand/train/tv_stand_0144.off
tv_stand/train/tv_stand_0145.off
tv_stand/train/tv_stand_0146.off
tv_stand/train/tv_stand_0147.off
tv_stand/train/tv_stand_0148.off
tv_stand/train/tv_stand_0149.off
tv_stand/train/tv_stand_0150.off
tv_stand/train/tv_stand_0151.off
tv_stand/train/tv_stand_0152.off
tv_stand/train/tv_stand_0153.off
tv_stand/train/tv_stand_0154.off
tv_stand/train/tv_stand_0155.off
tv_stand/train/tv_stand_0156.off
tv_stand/train/tv_stand_0157.off
tv_stand/train/tv_stand_0158.off
tv_stand/train/tv_stand_0159.off
tv_stand/train/tv_stand_0160.off
tv_stand/train/tv_stand_0161.off
tv_stand/train/tv_stand_0162.off
tv_stand/train/tv_stand_0163.off
tv_stand/train/tv_stand_0164.off
tv_stand/train/tv_stand_0165.off
tv_stand/train/tv_stand_0166.off
tv_stand/train/tv_stand_0167.off
tv_stand/train/tv_stand_0168.off
tv_stand/train/tv_stand_0169.off
tv_stand/train/tv_stand_0170.off
tv_stand/train/tv_stand_0171.off
tv_stand/train/tv_stand_0172.off
tv_stand/train/tv_stand_0173.off
tv_stand/train/tv_stand_0174.off
tv_stand/train/tv_stand_0175.off
tv_stand/train/tv_stand_0176.off
tv_stand/train/tv_stand_0177.off
tv_stand/train/tv_stand_0178.off
tv_stand/train/tv_stand_0179.off
tv_stand/train/tv_stand_0180.off
tv_stand/train/tv_stand_0181.off
tv_stand/train/tv_stand_0182.off
tv_stand/train/tv_stand_0183.off
tv_stand/train/tv_stand_0184.off
tv_stand/train/tv_stand_0185.off
tv_stand/train/tv_stand_0186.off
tv_stand/train/tv_stand_0187.off
tv_stand/train/tv_stand_0188.off
tv_stand/train/tv_stand_0189.off
tv_stand/train/tv_stand_0190.off
tv_stand/train/tv_stand_0191.off
tv_stand/train/tv_stand_0192.off
tv_stand/train/tv_stand_0193.off
tv_stand/train/tv_stand_0194.off
tv_stand/train/tv_stand_0195.off
tv_stand/train/tv_stand_0196.off
tv_stand/train/tv_stand_0197.off
tv_stand/train/tv_stand_0198.off
tv_stand/train/tv_stand_0199.off
tv_stand/train/tv_stand_0200.off
tv_stand/train/tv_stand_0201.off
tv_stand/train/tv_stand_0202.off
tv_stand/train/tv_stand_0203.off
tv_stand/train/tv_stand_0204.off
tv_stand/train/tv_stand_0205.off
tv_stand/train/tv_stand_0206.off
tv_stand/train/tv_stand_0207.off
tv_stand/train/tv_stand_0208.off
tv_stand/train/tv_stand_0209.off
tv_stand/train/tv_stand_0210.off
tv_stand/train/tv_stand_0211.off
tv_stand/train/tv_stand_0212.off
tv_stand/train/tv_stand_0213.off
tv_stand/train/tv_stand_0214.off
tv_stand/train/tv_stand_0215.off
tv_stand/train/tv_stand_0216.off
tv_stand/train/tv_stand_0217.off
tv_stand/train/tv_stand_0218.off
tv_stand/train/tv_stand_0219.off
tv_stand/train/tv_stand_0220.off
tv_stand/train/tv_stand_0221.off
tv_stand/train/tv_stand_0222.off
tv_stand/train/tv_stand_0223.off
tv_stand/train/tv_stand_0224.off
tv_stand/train/tv_stand_0225.off
tv_stand/train/tv_stand_0226.off
tv_stand/train/tv_stand_0227.off
tv_stand/train/tv_stand_0228.off
tv_stand/train/tv_stand_0229.off
tv_stand/train/tv_stand_0230.off
tv_stand/train/tv_stand_0231.off
tv_stand/train/tv_stand_0232.off
tv_stand/train/tv_stand_0233.off
tv_stand/train/tv_stand_0234.off
tv_stand/train/tv_stand_0235.off
tv_stand/train/tv_stand_0236.off
tv_stand/train/tv_stand_0237.off
tv_stand/train/tv_stand_0238.off
tv_stand/train/tv_stand_0239.off
tv_stand/train/tv_stand_0240.off
tv_stand/train/tv_stand_0241.off
bathtub/train/bathtub_0001.off
bathtub/train/bathtub_0002.off
bathtub/train/bathtub_0003.off
bathtub/train/bathtub_0004.off
bathtub/train/bathtub_0005.off
bathtub/train/bathtub_0006.off
bathtub/train/bathtub_0007.off
bathtub/train/bathtub_0008.off
bathtub/train/bathtub_0009.off
bathtub/train/bathtub_0010.off
bathtub/train/bathtub_0011.off
bathtub/train/bathtub_0012.off
bathtub/train/bathtub_0013.off
bathtub/train/bathtub_0014.off
bathtub/train/bathtub_0015.off
bathtub/train/bathtub_0016.off
bathtub/train/bathtub_0017.off
bathtub/train/bathtub_0018.off
bathtub/train/bathtub_0019.off
bathtub/train/bathtub_0020.off
bathtub/train/bathtub_0021.off
bathtub/train/bathtub_0022.off
bathtub/train/bathtub_0023.off
bathtub/train/bathtub_0024.off
bathtub/train/bathtub_0025.off
bathtub/train/bathtub_0026.off
bathtub/train/bathtub_0027.off
bathtub/train/bathtub_0028.off
bathtub/train/bathtub_0029.off
bathtub/train/bathtub_0030.off
bathtub/train/bathtub_0031.off
bathtub/train/bathtub_0032.off
bathtub/train/bathtub_0033.off
bathtub/train/bathtub_0034.off
bathtub/train/bathtub_0035.off
bathtub/train/bathtub_0036.off
bathtub/train/bathtub_0037.off
bathtub/train/bathtub_0038.off
bathtub/train/bathtub_0039.off
bathtub/train/bathtub_0040.off
bathtub/train/bathtub_0041.off
bathtub/train/bathtub_0042.off
bathtub/train/bathtub_0043.off
bathtub/train/bathtub_0044.off
bathtub/train/bathtub_0045.off
bathtub/train/bathtub_0046.off
bathtub/train/bathtub_0047.off
bathtub/train/bathtub_0048.off
bathtub/train/bathtub_0049.off
bathtub/train/bathtub_0050.off
bathtub/train/bathtub_0051.off
bathtub/train/bathtub_0052.off
bathtub/train/bathtub_0053.off
bathtub/train/bathtub_0054.off
bathtub/train/bathtub_0055.off
bathtub/train/bathtub_0056.off
bathtub/train/bathtub_0057.off
bathtub/train/bathtub_0058.off
bathtub/train/bathtub_0059.off
bathtub/train/bathtub_0060.off
bathtub/train/bathtub_0061.off
bathtub/train/bathtub_0062.off
bathtub/train/bathtub_0063.off
bathtub/train/bathtub_0064.off
bathtub/train/bathtub_0065.off
bathtub/train/bathtub_0066.off
bathtub/train/bathtub_0067.off
bathtub/train/bathtub_0068.off
bathtub/train/bathtub_0069.off
bathtub/train/bathtub_0070.off
bathtub/train/bathtub_0071.off
bathtub/train/bathtub_0072.off
bathtub/train/bathtub_0073.off
bathtub/train/bathtub_0074.off
bathtub/train/bathtub_0075.off
bathtub/train/bathtub_0076.off
bathtub/train/bathtub_0077.off
bathtub/train/bathtub_0078.off
bathtub/train/bathtub_0079.off
bathtub/train/bathtub_0080.off
bathtub/train/bathtub_0081.off
bathtub/train/bathtub_0082.off
bathtub/train/bathtub_0083.off
bathtub/train/bathtub_0084.off
bathtub/train/bathtub_0085.off
bathtub/train/bathtub_0086.off
bathtub/train/bathtub_0087.off
bathtub/train/bathtub_0088.off
bathtub/train/bathtub_0089.off
bathtub/train/bathtub_0090.off
bathtub/train/bathtub_0091.off
bathtub/train/bathtub_0092.off
bathtub/train/bathtub_0093.off
bathtub/train/bathtub_0094.off
bathtub/train/bathtub_0095.off
bathtub/train/bathtub_0096.off
monitor/train/monitor_0001.off
monitor/train/monitor_0002.off
monitor/train/monitor_0003.off
monitor/train/monitor_0004.off
monitor/train/monitor_0005.off
monitor/train/monitor_0006.off
monitor/train/monitor_0007.off
monitor/train/monitor_0008.off
monitor/train/monitor_0009.off
monitor/train/monitor_0010.off
monitor/train/monitor_0011.off
monitor/train/monitor_0012.off
monitor/train/monitor_0013.off
monitor/train/monitor_0014.off
monitor/train/monitor_0015.off
monitor/train/monitor_0016.off
monitor/train/monitor_0017.off
monitor/train/monitor_0018.off
monitor/train/monitor_0019.off
monitor/train/monitor_0020.off
monitor/train/monitor_0021.off
monitor/train/monitor_0022.off
monitor/train/monitor_0023.off
monitor/train/monitor_0024.off
monitor/train/monitor_0025.off
monitor/train/monitor_0026.off
monitor/train/monitor_0027.off
monitor/train/monitor_0028.off
monitor/train/monitor_0029.off
monitor/train/monitor_0030.off
monitor/train/monitor_0031.off
monitor/train/monitor_0032.off
monitor/train/monitor_0033.off
monitor/train/monitor_0034.off
monitor/train/monitor_0035.off
monitor/train/monitor_0036.off
monitor/train/monitor_0037.off
monitor/train/monitor_0038.off
monitor/train/monitor_0039.off
monitor/train/monitor_0040.off
monitor/train/monitor_0041.off
monitor/train/monitor_0042.off
monitor/train/monitor_0043.off
monitor/train/monitor_0044.off
monitor/train/monitor_0045.off
monitor/train/monitor_0046.off
monitor/train/monitor_0047.off
monitor/train/monitor_0048.off
monitor/train/monitor_0049.off
monitor/train/monitor_0050.off
monitor/train/monitor_0051.off
monitor/train/monitor_0052.off
monitor/train/monitor_0053.off
monitor/train/monitor_0054.off
monitor/train/monitor_0055.off
monitor/train/monitor_0056.off
monitor/train/monitor_0057.off
monitor/train/monitor_0058.off
monitor/train/monitor_0059.off
monitor/train/monitor_0060.off
monitor/train/monitor_0061.off
monitor/train/monitor_0062.off
monitor/train/monitor_0063.off
monitor/train/monitor_0064.off
monitor/train/monitor_0065.off
monitor/train/monitor_0066.off
monitor/train/monitor_0067.off
monitor/train/monitor_0068.off
monitor/train/monitor_0069.off
monitor/train/monitor_0070.off
monitor/train/monitor_0071.off
monitor/train/monitor_0072.off
monitor/train/monitor_0073.off
monitor/train/monitor_0074.off
monitor/train/monitor_0075.off
monitor/train/monitor_0076.off
monitor/train/monitor_0077.off
monitor/train/monitor_0078.off
monitor/train/monitor_0079.off
monitor/train/monitor_0080.off
monitor/train/monitor_0081.off
monitor/train/monitor_0082.off
monitor/train/monitor_0083.off
monitor/train/monitor_0084.off
monitor/train/monitor_0085.off
monitor/train/monitor_0086.off
monitor/train/monitor_0087.off
monitor/train/monitor_0088.off
monitor/train/monitor_0089.off
monitor/train/monitor_0090.off
monitor/train/monitor_0091.off
monitor/train/monitor_0092.off
monitor/train/monitor_0093.off
monitor/train/monitor_0094.off
monitor/train/monitor_0095.off
monitor/train/monitor_0096.off
monitor/train/monitor_0097.off
monitor/train/monitor_0098.off
monitor/train/monitor_0099.off
monitor/train/monitor_0100.off
monitor/train/monitor_0101.off
monitor/train/monitor_0102.off
monitor/train/monitor_0103.off
monitor/train/monitor_0104.off
monitor/train/monitor_0105.off
monitor/train/monitor_0106.off
monitor/train/monitor_0107.off
monitor/train/monitor_0108.off
monitor/train/monitor_0109.off
monitor/train/monitor_0110.off
monitor/train/monitor_0111.off
monitor/train/monitor_0112.off
monitor/train/monitor_0113.off
monitor/train/monitor_0114.off
monitor/train/monitor_0115.off
monitor/train/monitor_0116.off
monitor/train/monitor_0117.off
monitor/train/monitor_0118.off
monitor/train/monitor_0119.off
monitor/train/monitor_0120.off
monitor/train/monitor_0121.off
monitor/train/monitor_0122.off
monitor/train/monitor_0123.off
monitor/train/monitor_0124.off
monitor/train/monitor_0125.off
monitor/train/monitor_0126.off
monitor/train/monitor_0127.off
monitor/train/monitor_0128.off
monitor/train/monitor_0129.off
monitor/train/monitor_0130.off
monitor/train/monitor_0131.off
monitor/train/monitor_0132.off
monitor/train/monitor_0133.off
monitor/train/monitor_0134.off
monitor/train/monitor_0135.off
monitor/train/monitor_0136.off
monitor/train/monitor_0137.off
monitor/train/monitor_0138.off
monitor/train/monitor_0139.off
monitor/train/monitor_0140.off
monitor/train/monitor_0141.off
monitor/train/monitor_0142.off
monitor/train/monitor_0143.off
monitor/train/monitor_0144.off
monitor/train/monitor_0145.off
monitor/train/monitor_0146.off
monitor/train/monitor_0147.off
monitor/train/monitor_0148.off
monitor/train/monitor_0149.off
monitor/train/monitor_0150.off
monitor/train/monitor_0151.off
monitor/train/monitor_0152.off
monitor/train/monitor_0153.off
monitor/train/monitor_0154.off
monitor/train/monitor_0155.off
monitor/train/monitor_0156.off
monitor/train/monitor_0157.off
monitor/train/monitor_0158.off
monitor/train/monitor_0159.off
monitor/train/monitor_0160.off
monitor/train/monitor_0161.off
monitor/train/monitor_0162.off
monitor/train/monitor_0163.off
monitor/train/monitor_0164.off
monitor/train/monitor_0165.off
monitor/train/monitor_0166.off
monitor/train/monitor_0167.off
monitor/train/monitor_0168.off
monitor/train/monitor_0169.off
monitor/train/monitor_0170.off
monitor/train/monitor_0171.off
monitor/train/monitor_0172.off
monitor/train/monitor_0173.off
monitor/train/monitor_0174.off
monitor/train/monitor_0175.off
monitor/train/monitor_0176.off
monitor/train/monitor_0177.off
monitor/train/monitor_0178.off
monitor/train/monitor_0179.off
monitor/train/monitor_0180.off
monitor/train/monitor_0181.off
monitor/train/monitor_0182.off
monitor/train/monitor_0183.off
monitor/train/monitor_0184.off
monitor/train/monitor_0185.off
monitor/train/monitor_0186.off
monitor/train/monitor_0187.off
monitor/train/monitor_0188.off
monitor/train/monitor_0189.off
monitor/train/monitor_0190.off
monitor/train/monitor_0191.off
monitor/train/monitor_0192.off
monitor/train/monitor_0193.off
monitor/train/monitor_0194.off
monitor/train/monitor_0195.off
monitor/train/monitor_0196.off
monitor/train/monitor_0197.off
monitor/train/monitor_0198.off
monitor/train/monitor_0199.off
monitor/train/monitor_0200.off
monitor/train/monitor_0201.off
monitor/train/monitor_0202.off
monitor/train/monitor_0203.off
monitor/train/monitor_0204.off
monitor/train/monitor_0205.off
monitor/train/monitor_0206.off
monitor/train/monitor_0207.off
monitor/train/monitor_0208.off
monitor/train/monitor_0209.off
monitor/train/monitor_0210.off
monitor/train/monitor_0211.off
monitor/train/monitor_0212.off
monitor/train/monitor_0213.off
monitor/train/monitor_0214.off
monitor/train/monitor_0215.off
monitor/train/monitor_0216.off
monitor/train/monitor_0217.off
monitor/train/monitor_0218.off
monitor/train/monitor_0219.off
monitor/train/monitor_0220.off
monitor/train/monitor_0221.off
monitor/train/monitor_0222.off
monitor/train/monitor_0223.off
monitor/train/monitor_0224.off
monitor/train/monitor_0225.off
monitor/train/monitor_0226.off
monitor/train/monitor_0227.off
monitor/train/monitor_0228.off
monitor/train/monitor_0229.off
monitor/train/monitor_0230.off
monitor/train/monitor_0231.off
monitor/train/monitor_0232.off
monitor/train/monitor_0233.off
monitor/train/monitor_0234.off
monitor/train/monitor_0235.off
monitor/train/monitor_0236.off
monitor/train/monitor_0237.off
monitor/train/monitor_0238.off
monitor/train/monitor_0239.off
monitor/train/monitor_0240.off
monitor/train/monitor_0241.off
monitor/train/monitor_0242.off
monitor/train/monitor_0243.off
monitor/train/monitor_0244.off
monitor/train/monitor_0245.off
monitor/train/monitor_0246.off
monitor/train/monitor_0247.off
monitor/train/monitor_0248.off
monitor/train/monitor_0249.off
monitor/train/monitor_0250.off
monitor/train/monitor_0251.off
monitor/train/monitor_0252.off
monitor/train/monitor_0253.off
monitor/train/monitor_0254.off
monitor/train/monitor_0255.off
monitor/train/monitor_0256.off
monitor/train/monitor_0257.off
monitor/train/monitor_0258.off
monitor/train/monitor_0259.off
monitor/train/monitor_0260.off
monitor/train/monitor_0261.off
monitor/train/monitor_0262.off
monitor/train/monitor_0263.off
monitor/train/monitor_0264.off
monitor/train/monitor_0265.off
monitor/train/monitor_0266.off
monitor/train/monitor_0267.off
monitor/train/monitor_0268.off
monitor/train/monitor_0269.off
monitor/train/monitor_0270.off
monitor/train/monitor_0271.off
monitor/train/monitor_0272.off
monitor/train/monitor_0273.off
monitor/train/monitor_0274.off
monitor/train/monitor_0275.off
monitor/train/monitor_0276.off
monitor/train/monitor_0277.off
monitor/train/monitor_0278.off
monitor/train/monitor_0279.off
monitor/train/monitor_0280.off
monitor/train/monitor_0281.off
monitor/train/monitor_0282.off
monitor/train/monitor_0283.off
monitor/train/monitor_0284.off
monitor/train/monitor_0285.off
monitor/train/monitor_0286.off
monitor/train/monitor_0287.off
monitor/train/monitor_0288.off
monitor/train/monitor_0289.off
monitor/train/monitor_0290.off
monitor/train/monitor_0291.off
monitor/train/monitor_0292.off
monitor/train/monitor_0293.off
monitor/train/monitor_0294.off
monitor/train/monitor_0295.off
monitor/train/monitor_0296.off
monitor/train/monitor_0297.off
monitor/train/monitor_0298.off
monitor/train/monitor_0299.off
monitor/train/monitor_0300.off
monitor/train/monitor_0301.off
monitor/train/monitor_0302.off
monitor/train/monitor_0303.off
monitor/train/monitor_0304.off
monitor/train/monitor_0305.off
monitor/train/monitor_0306.off
monitor/train/monitor_0307.off
monitor/train/monitor_0308.off
monitor/train/monitor_0309.off
monitor/train/monitor_0310.off
monitor/train/monitor_0311.off
monitor/train/monitor_0312.off
monitor/train/monitor_0313.off
monitor/train/monitor_0314.off
monitor/train/monitor_0315.off
monitor/train/monitor_0316.off
monitor/train/monitor_0317.off
monitor/train/monitor_0318.off
monitor/train/monitor_0319.off
monitor/train/monitor_0320.off
monitor/train/monitor_0321.off
monitor/train/monitor_0322.off
monitor/train/monitor_0323.off
monitor/train/monitor_0324.off
monitor/train/monitor_0325.off
monitor/train/monitor_0326.off
monitor/train/monitor_0327.off
monitor/train/monitor_0328.off
monitor/train/monitor_0329.off
monitor/train/monitor_0330.off
monitor/train/monitor_0331.off
monitor/train/monitor_0332.off
monitor/train/monitor_0333.off
monitor/train/monitor_0334.off
monitor/train/monitor_0335.off
monitor/train/monitor_0336.off
monitor/train/monitor_0337.off
monitor/train/monitor_0338.off
monitor/train/monitor_0339.off
monitor/train/monitor_0340.off
monitor/train/monitor_0341.off
monitor/train/monitor_0342.off
monitor/train/monitor_0343.off
monitor/train/monitor_0344.off
monitor/train/monitor_0345.off
monitor/train/monitor_0346.off
monitor/train/monitor_0347.off
monitor/train/monitor_0348.off
monitor/train/monitor_0349.off
monitor/train/monitor_0350.off
monitor/train/monitor_0351.off
monitor/train/monitor_0352.off
monitor/train/monitor_0353.off
monitor/train/monitor_0354.off
monitor/train/monitor_0355.off
monitor/train/monitor_0356.off
monitor/train/monitor_0357.off
monitor/train/monitor_0358.off
monitor/train/monitor_0359.off
monitor/train/monitor_0360.off
monitor/train/monitor_0361.off
monitor/train/monitor_0362.off
monitor/train/monitor_0363.off
monitor/train/monitor_0364.off
monitor/train/monitor_0365.off
monitor/train/monitor_0366.off
monitor/train/monitor_0367.off
monitor/train/monitor_0368.off
monitor/train/monitor_0369.off
monitor/train/monitor_0370.off
monitor/train/monitor_0371.off
monitor/train/monitor_0372.off
monitor/train/monitor_0373.off
monitor/train/monitor_0374.off
monitor/train/monitor_0375.off
monitor/train/monitor_0376.off
monitor/train/monitor_0377.off
monitor/train/monitor_0378.off
monitor/train/monitor_0379.off
monitor/train/monitor_0380.off
monitor/train/monitor_0381.off
monitor/train/monitor_0382.off
monitor/train/monitor_0383.off
monitor/train/monitor_0384.off
monitor/train/monitor_0385.off
monitor/train/monitor_0386.off
monitor/train/monitor_0387.off
monitor/train/monitor_0388.off
monitor/train/monitor_0389.off
monitor/train/monitor_0390.off
monitor/train/monitor_0391.off
monitor/train/monitor_0392.off
monitor/train/monitor_0393.off
monitor/train/monitor_0394.off
monitor/train/monitor_0395.off
monitor/train/monitor_0396.off
monitor/train/monitor_0397.off
monitor/train/monitor_0398.off
monitor/train/monitor_0399.off
monitor/train/monitor_0400.off
monitor/train/monitor_0401.off
monitor/train/monitor_0402.off
monitor/train/monitor_0403.off
monitor/train/monitor_0404.off
monitor/train/monitor_0405.off
monitor/train/monitor_0406.off
monitor/train/monitor_0407.off
monitor/train/monitor_0408.off
monitor/train/monitor_0409.off
monitor/train/monitor_0410.off
monitor/train/monitor_0411.off
monitor/train/monitor_0412.off
monitor/train/monitor_0413.off
monitor/train/monitor_0414.off
monitor/train/monitor_0415.off
monitor/train/monitor_0416.off
monitor/train/monitor_0417.off
monitor/train/monitor_0418.off
monitor/train/monitor_0419.off
bottle/train/bottle_0001.off
bottle/train/bottle_0002.off
bottle/train/bottle_0003.off
bottle/train/bottle_0004.off
bottle/train/bottle_0005.off
bottle/train/bottle_0006.off
bottle/train/bottle_0007.off
bottle/train/bottle_0008.off
bottle/train/bottle_0009.off
bottle/train/bottle_0010.off
bottle/train/bottle_0011.off
bottle/train/bottle_0012.off
bottle/train/bottle_0013.off
bottle/train/bottle_0014.off
bottle/train/bottle_0015.off
bottle/train/bottle_0016.off
bottle/train/bottle_0017.off
bottle/train/bottle_0018.off
bottle/train/bottle_0019.off
bottle/train/bottle_0020.off
bottle/train/bottle_0021.off
bottle/train/bottle_0022.off
bottle/train/bottle_0023.off
bottle/train/bottle_0024.off
bottle/train/bottle_0025.off
bottle/train/bottle_0026.off
bottle/train/bottle_0027.off
bottle/train/bottle_0028.off
bottle/train/bottle_0029.off
bottle/train/bottle_0030.off
bottle/train/bottle_0031.off
bottle/train/bottle_0032.off
bottle/train/bottle_0033.off
bottle/train/bottle_0034.off
bottle/train/bottle_0035.off
bottle/train/bottle_0036.off
bottle/train/bottle_0037.off
bottle/train/bottle_0038.off
bottle/train/bottle_0039.off
bottle/train/bottle_0040.off
bottle/train/bottle_0041.off
bottle/train/bottle_0042.off
bottle/train/bottle_0043.off
bottle/train/bottle_0044.off
bottle/train/bottle_0045.off
bottle/train/bottle_0046.off
bottle/train/bottle_0047.off
bottle/train/bottle_0048.off
bottle/train/bottle_0049.off
bottle/train/bottle_0050.off
bottle/train/bottle_0051.off
bottle/train/bottle_0052.off
bottle/train/bottle_0053.off
bottle/train/bottle_0054.off
bottle/train/bottle_0055.off
bottle/train/bottle_0056.off
bottle/train/bottle_0057.off
bottle/train/bottle_0058.off
bottle/train/bottle_0059.off
bottle/train/bottle_0060.off
bottle/train/bottle_0061.off
bottle/train/bottle_0062.off
bottle/train/bottle_0063.off
bottle/train/bottle_0064.off
bottle/train/bottle_0065.off
bottle/train/bottle_0066.off
bottle/train/bottle_0067.off
bottle/train/bottle_0068.off
bottle/train/bottle_0069.off
bottle/train/bottle_0070.off
bottle/train/bottle_0071.off
bottle/train/bottle_0072.off
bottle/train/bottle_0073.off
bottle/train/bottle_0074.off
bottle/train/bottle_0075.off
bottle/train/bottle_0076.off
bottle/train/bottle_0077.off
bottle/train/bottle_0078.off
bottle/train/bottle_0079.off
bottle/train/bottle_0080.off
bottle/train/bottle_0081.off
bottle/train/bottle_0082.off
bottle/train/bottle_0083.off
bottle/train/bottle_0084.off
bottle/train/bottle_0085.off
bottle/train/bottle_0086.off
bottle/train/bottle_0087.off
bottle/train/bottle_0088.off
bottle/train/bottle_0089.off
bottle/train/bottle_0090.off
bottle/train/bottle_0091.off
bottle/train/bottle_0092.off
bottle/train/bottle_0093.off
bottle/train/bottle_0094.off
bottle/train/bottle_0095.off
bottle/train/bottle_0096.off
bottle/train/bottle_0097.off
bottle/train/bottle_0098.off
bottle/train/bottle_0099.off
bottle/train/bottle_0100.off
bottle/train/bottle_0101.off
bottle/train/bottle_0102.off
bottle/train/bottle_0103.off
bottle/train/bottle_0104.off
bottle/train/bottle_0105.off
bottle/train/bottle_0106.off
bottle/train/bottle_0107.off
bottle/train/bottle_0108.off
bottle/train/bottle_0109.off
bottle/train/bottle_0110.off
bottle/train/bottle_0111.off
bottle/train/bottle_0112.off
bottle/train/bottle_0113.off
bottle/train/bottle_0114.off
bottle/train/bottle_0115.off
bottle/train/bottle_0116.off
bottle/train/bottle_0117.off
bottle/train/bottle_0118.off
bottle/train/bottle_0119.off
bottle/train/bottle_0120.off
bottle/train/bottle_0121.off
bottle/train/bottle_0122.off
bottle/train/bottle_0123.off
bottle/train/bottle_0124.off
bottle/train/bottle_0125.off
bottle/train/bottle_0126.off
bottle/train/bottle_0127.off
bottle/train/bottle_0128.off
bottle/train/bottle_0129.off
bottle/train/bottle_0130.off
bottle/train/bottle_0131.off
bottle/train/bottle_0132.off
bottle/train/bottle_0133.off
bottle/train/bottle_0134.off
bottle/train/bottle_0135.off
bottle/train/bottle_0136.off
bottle/train/bottle_0137.off
bottle/train/bottle_0138.off
bottle/train/bottle_0139.off
bottle/train/bottle_0140.off
bottle/train/bottle_0141.off
bottle/train/bottle_0142.off
bottle/train/bottle_0143.off
bottle/train/bottle_0144.off
bottle/train/bottle_0145.off
bottle/train/bottle_0146.off
bottle/train/bottle_0147.off
bottle/train/bottle_0148.off
bottle/train/bottle_0149.off
bottle/train/bottle_0150.off
bottle/train/bottle_0151.off
bottle/train/bottle_0152.off
bottle/train/bottle_0153.off
bottle/train/bottle_0154.off
bottle/train/bottle_0155.off
bottle/train/bottle_0156.off
bottle/train/bottle_0157.off
bottle/train/bottle_0158.off
bottle/train/bottle_0159.off
bottle/train/bottle_0160.off
bottle/train/bottle_0161.off
bottle/train/bottle_0162.off
bottle/train/bottle_0163.off
bottle/train/bottle_0164.off
bottle/train/bottle_0165.off
bottle/train/bottle_0166.off
bottle/train/bottle_0167.off
bottle/train/bottle_0168.off
bottle/train/bottle_0169.off
bottle/train/bottle_0170.off
bottle/train/bottle_0171.off
bottle/train/bottle_0172.off
bottle/train/bottle_0173.off
bottle/train/bottle_0174.off
bottle/train/bottle_0175.off
bottle/train/bottle_0176.off
bottle/train/bottle_0177.off
bottle/train/bottle_0178.off
bottle/train/bottle_0179.off
bottle/train/bottle_0180.off
bottle/train/bottle_0181.off
bottle/train/bottle_0182.off
bottle/train/bottle_0183.off
bottle/train/bottle_0184.off
bottle/train/bottle_0185.off
bottle/train/bottle_0186.off
bottle/train/bottle_0187.off
bottle/train/bottle_0188.off
bottle/train/bottle_0189.off
bottle/train/bottle_0190.off
bottle/train/bottle_0191.off
bottle/train/bottle_0192.off
bottle/train/bottle_0193.off
bottle/train/bottle_0194.off
bottle/train/bottle_0195.off
bottle/train/bottle_0196.off
bottle/train/bottle_0197.off
bottle/train/bottle_0198.off
bottle/train/bottle_0199.off
bottle/train/bottle_0200.off
bottle/train/bottle_0201.off
bottle/train/bottle_0202.off
bottle/train/bottle_0203.off
bottle/train/bottle_0204.off
bottle/train/bottle_0205.off
bottle/train/bottle_0206.off
bottle/train/bottle_0207.off
bottle/train/bottle_0208.off
bottle/train/bottle_0209.off
bottle/train/bottle_0210.off
bottle/train/bottle_0211.off
bottle/train/bottle_0212.off
bottle/train/bottle_0213.off
bottle/train/bottle_0214.off
bottle/train/bottle_0215.off
bottle/train/bottle_0216.off
bottle/train/bottle_0217.off
bottle/train/bottle_0218.off
bottle/train/bottle_0219.off
bottle/train/bottle_0220.off
bottle/train/bottle_0221.off
bottle/train/bottle_0222.off
bottle/train/bottle_0223.off
bottle/train/bottle_0224.off
bottle/train/bottle_0225.off
bottle/train/bottle_0226.off
bottle/train/bottle_0227.off
bottle/train/bottle_0228.off
bottle/train/bottle_0229.off
bottle/train/bottle_0230.off
bottle/train/bottle_0231.off
bottle/train/bottle_0232.off
bottle/train/bottle_0233.off
bottle/train/bottle_0234.off
bottle/train/bottle_0235.off
bottle/train/bottle_0236.off
bottle/train/bottle_0237.off
bottle/train/bottle_0238.off
bottle/train/bottle_0239.off
bottle/train/bottle_0240.off
bottle/train/bottle_0241.off
bottle/train/bottle_0242.off
bottle/train/bottle_0243.off
bottle/train/bottle_0244.off
bottle/train/bottle_0245.off
bottle/train/bottle_0246.off
bottle/train/bottle_0247.off
bottle/train/bottle_0248.off
bottle/train/bottle_0249.off
bottle/train/bottle_0250.off
bottle/train/bottle_0251.off
bottle/train/bottle_0252.off
bottle/train/bottle_0253.off
bottle/train/bottle_0254.off
bottle/train/bottle_0255.off
bottle/train/bottle_0256.off
bottle/train/bottle_0257.off
bottle/train/bottle_0258.off
bottle/train/bottle_0259.off
bottle/train/bottle_0260.off
bottle/train/bottle_0261.off
bottle/train/bottle_0262.off
bottle/train/bottle_0263.off
bottle/train/bottle_0264.off
bottle/train/bottle_0265.off
bottle/train/bottle_0266.off
bottle/train/bottle_0267.off
bottle/train/bottle_0268.off
bottle/train/bottle_0269.off
bottle/train/bottle_0270.off
bottle/train/bottle_0271.off
bottle/train/bottle_0272.off
bottle/train/bottle_0273.off
bottle/train/bottle_0274.off
bottle/train/bottle_0275.off
bottle/train/bottle_0276.off
bottle/train/bottle_0277.off
bottle/train/bottle_0278.off
bottle/train/bottle_0279.off
bottle/train/bottle_0280.off
bottle/train/bottle_0281.off
bottle/train/bottle_0282.off
bottle/train/bottle_0283.off
bottle/train/bottle_0284.off
bottle/train/bottle_0285.off
bottle/train/bottle_0286.off
bottle/train/bottle_0287.off
bottle/train/bottle_0288.off
bottle/train/bottle_0289.off
bottle/train/bottle_0290.off
bottle/train/bottle_0291.off
bottle/train/bottle_0292.off
bottle/train/bottle_0293.off
bottle/train/bottle_0294.off
bottle/train/bottle_0295.off
bottle/train/bottle_0296.off
bottle/train/bottle_0297.off
bottle/train/bottle_0298.off
bottle/train/bottle_0299.off
bottle/train/bottle_0300.off
bottle/train/bottle_0301.off
bottle/train/bottle_0302.off
bowl/train/bowl_0001.off
bowl/train/bowl_0002.off
bowl/train/bowl_0003.off
bowl/train/bowl_0004.off
bowl/train/bowl_0005.off
bowl/train/bowl_0006.off
bowl/train/bowl_0007.off
bowl/train/bowl_0008.off
bowl/train/bowl_0009.off
bowl/train/bowl_0010.off
bowl/train/bowl_0011.off
bowl/train/bowl_0012.off
bowl/train/bowl_0013.off
bowl/train/bowl_0014.off
bowl/train/bowl_0015.off
bowl/train/bowl_0016.off
bowl/train/bowl_0017.off
bowl/train/bowl_0018.off
bowl/train/bowl_0019.off
bowl/train/bowl_0020.off
bowl/train/bowl_0021.off
bowl/train/bowl_0022.off
bowl/train/bowl_0023.off
bowl/train/bowl_0024.off
bowl/train/bowl_0025.off
bowl/train/bowl_0026.off
bowl/train/bowl_0027.off
bowl/train/bowl_0028.off
bowl/train/bowl_0029.off
bowl/train/bowl_0030.off
bowl/train/bowl_0031.off
bowl/train/bowl_0032.off
bowl/train/bowl_0033.off
bowl/train/bowl_0034.off
bowl/train/bowl_0035.off
bowl/train/bowl_0036.off
bowl/train/bowl_0037.off
bowl/train/bowl_0038.off
bowl/train/bowl_0039.off
bowl/train/bowl_0040.off
bowl/train/bowl_0041.off
bowl/train/bowl_0042.off
bowl/train/bowl_0043.off
bowl/train/bowl_0044.off
bowl/train/bowl_0045.off
bowl/train/bowl_0046.off
bowl/train/bowl_0047.off
bowl/train/bowl_0048.off
bowl/train/bowl_0049.off
bowl/train/bowl_0050.off
bowl/train/bowl_0051.off
bowl/train/bowl_0052.off
bowl/train/bowl_0053.off
bowl/train/bowl_0054.off
bowl/train/bowl_0055.off
bowl/train/bowl_0056.off
bowl/train/bowl_0057.off
bowl/train/bowl_0058.off
keyboard/train/keyboard_0001.off
keyboard/train/keyboard_0002.off
keyboard/train/keyboard_0003.off
keyboard/train/keyboard_0004.off
keyboard/train/keyboard_0005.off
keyboard/train/keyboard_0006.off
keyboard/train/keyboard_0007.off
keyboard/train/keyboard_0008.off
keyboard/train/keyboard_0009.off
keyboard/train/keyboard_0010.off
keyboard/train/keyboard_0011.off
keyboard/train/keyboard_0012.off
keyboard/train/keyboard_0013.off
keyboard/train/keyboard_0014.off
keyboard/train/keyboard_0015.off
keyboard/train/keyboard_0016.off
keyboard/train/keyboard_0017.off
keyboard/train/keyboard_0018.off
keyboard/train/keyboard_0019.off
keyboard/train/keyboard_0020.off
keyboard/train/keyboard_0021.off
keyboard/train/keyboard_0022.off
keyboard/train/keyboard_0023.off
keyboard/train/keyboard_0024.off
keyboard/train/keyboard_0025.off
keyboard/train/keyboard_0026.off
keyboard/train/keyboard_0027.off
keyboard/train/keyboard_0028.off
keyboard/train/keyboard_0029.off
keyboard/train/keyboard_0030.off
keyboard/train/keyboard_0031.off
keyboard/train/keyboard_0032.off
keyboard/train/keyboard_0033.off
keyboard/train/keyboard_0034.off
keyboard/train/keyboard_0035.off
keyboard/train/keyboard_0036.off
keyboard/train/keyboard_0037.off
keyboard/train/keyboard_0038.off
keyboard/train/keyboard_0039.off
keyboard/train/keyboard_0040.off
keyboard/train/keyboard_0041.off
keyboard/train/keyboard_0042.off
keyboard/train/keyboard_0043.off
keyboard/train/keyboard_0044.off
keyboard/train/keyboard_0045.off
keyboard/train/keyboard_0046.off
keyboard/train/keyboard_0047.off
keyboard/train/keyboard_0048.off
keyboard/train/keyboard_0049.off
keyboard/train/keyboard_0050.off
keyboard/train/keyboard_0051.off
keyboard/train/keyboard_0052.off
keyboard/train/keyboard_0053.off
keyboard/train/keyboard_0054.off
keyboard/train/keyboard_0055.off
keyboard/train/keyboard_0056.off
keyboard/train/keyboard_0057.off
keyboard/train/keyboard_0058.off
keyboard/train/keyboard_0059.off
keyboard/train/keyboard_0060.off
keyboard/train/keyboard_0061.off
keyboard/train/keyboard_0062.off
keyboard/train/keyboard_0063.off
keyboard/train/keyboard_0064.off
keyboard/train/keyboard_0065.off
keyboard/train/keyboard_0066.off
keyboard/train/keyboard_0067.off
keyboard/train/keyboard_0068.off
keyboard/train/keyboard_0069.off
keyboard/train/keyboard_0070.off
keyboard/train/keyboard_0071.off
keyboard/train/keyboard_0072.off
keyboard/train/keyboard_0073.off
keyboard/train/keyboard_0074.off
keyboard/train/keyboard_0075.off
keyboard/train/keyboard_0076.off
keyboard/train/keyboard_0077.off
keyboard/train/keyboard_0078.off
keyboard/train/keyboard_0079.off
keyboard/train/keyboard_0080.off
keyboard/train/keyboard_0081.off
keyboard/train/keyboard_0082.off
keyboard/train/keyboard_0083.off
keyboard/train/keyboard_0084.off
keyboard/train/keyboard_0085.off
keyboard/train/keyboard_0086.off
keyboard/train/keyboard_0087.off
keyboard/train/keyboard_0088.off
keyboard/train/keyboard_0089.off
keyboard/train/keyboard_0090.off
keyboard/train/keyboard_0091.off
keyboard/train/keyboard_0092.off
keyboard/train/keyboard_0093.off
keyboard/train/keyboard_0094.off
keyboard/train/keyboard_0095.off
keyboard/train/keyboard_0096.off
keyboard/train/keyboard_0097.off
keyboard/train/keyboard_0098.off
keyboard/train/keyboard_0099.off
keyboard/train/keyboard_0100.off
keyboard/train/keyboard_0101.off
keyboard/train/keyboard_0102.off
keyboard/train/keyboard_0103.off
keyboard/train/keyboard_0104.off
keyboard/train/keyboard_0105.off
keyboard/train/keyboard_0106.off
keyboard/train/keyboard_0107.off
keyboard/train/keyboard_0108.off
keyboard/train/keyboard_0109.off
keyboard/train/keyboard_0110.off
keyboard/train/keyboard_0111.off
keyboard/train/keyboard_0112.off
keyboard/train/keyboard_0113.off
keyboard/train/keyboard_0114.off
keyboard/train/keyboard_0115.off
keyboard/train/keyboard_0116.off
keyboard/train/keyboard_0117.off
keyboard/train/keyboard_0118.off
keyboard/train/keyboard_0119.off
keyboard/train/keyboard_0120.off
keyboard/train/keyboard_0121.off
keyboard/train/keyboard_0122.off
keyboard/train/keyboard_0123.off
keyboard/train/keyboard_0124.off
keyboard/train/keyboard_0125.off
keyboard/train/keyboard_0126.off
keyboard/train/keyboard_0127.off
keyboard/train/keyboard_0128.off
keyboard/train/keyboard_0129.off
keyboard/train/keyboard_0130.off
keyboard/train/keyboard_0131.off
desk/train/desk_0001.off
desk/train/desk_0002.off
desk/train/desk_0003.off
desk/train/desk_0004.off
desk/train/desk_0005.off
desk/train/desk_0006.off
desk/train/desk_0007.off
desk/train/desk_0008.off
desk/train/desk_0009.off
desk/train/desk_0010.off
desk/train/desk_0011.off
desk/train/desk_0012.off
desk/train/desk_0013.off
desk/train/desk_0014.off
desk/train/desk_0015.off
desk/train/desk_0016.off
desk/train/desk_0017.off
desk/train/desk_0018.off
desk/train/desk_0019.off
desk/train/desk_0020.off
desk/train/desk_0021.off
desk/train/desk_0022.off
desk/train/desk_0023.off
desk/train/desk_0024.off
desk/train/desk_0025.off
desk/train/desk_0026.off
desk/train/desk_0027.off
desk/train/desk_0028.off
desk/train/desk_0029.off
desk/train/desk_0030.off
desk/train/desk_0031.off
desk/train/desk_0032.off
desk/train/desk_0033.off
desk/train/desk_0034.off
desk/train/desk_0035.off
desk/train/desk_0036.off
desk/train/desk_0037.off
desk/train/desk_0038.off
desk/train/desk_0039.off
desk/train/desk_0040.off
desk/train/desk_0041.off
desk/train/desk_0042.off
desk/train/desk_0043.off
desk/train/desk_0044.off
desk/train/desk_0045.off
desk/train/desk_0046.off
desk/train/desk_0047.off
desk/train/desk_0048.off
desk/train/desk_0049.off
desk/train/desk_0050.off
desk/train/desk_0051.off
desk/train/desk_0052.off
desk/train/desk_0053.off
desk/train/desk_0054.off
desk/train/desk_0055.off
desk/train/desk_0056.off
desk/train/desk_0057.off
desk/train/desk_0058.off
desk/train/desk_0059.off
desk/train/desk_0060.off
desk/train/desk_0061.off
desk/train/desk_0062.off
desk/train/desk_0063.off
desk/train/desk_0064.off
desk/train/desk_0065.off
desk/train/desk_0066.off
desk/train/desk_0067.off
desk/train/desk_0068.off
desk/train/desk_0069.off
desk/train/desk_0070.off
desk/train/desk_0071.off
desk/train/desk_0072.off
desk/train/desk_0073.off
desk/train/desk_0074.off
desk/train/desk_0075.off
desk/train/desk_0076.off
desk/train/desk_0077.off
desk/train/desk_0078.off
desk/train/desk_0079.off
desk/train/desk_0080.off
desk/train/desk_0081.off
desk/train/desk_0082.off
desk/train/desk_0083.off
desk/train/desk_0084.off
desk/train/desk_0085.off
desk/train/desk_0086.off
desk/train/desk_0087.off
desk/train/desk_0088.off
desk/train/desk_0089.off
desk/train/desk_0090.off
desk/train/desk_0091.off
desk/train/desk_0092.off
desk/train/desk_0093.off
desk/train/desk_0094.off
desk/train/desk_0095.off
desk/train/desk_0096.off
desk/train/desk_0097.off
desk/train/desk_0098.off
desk/train/desk_0099.off
desk/train/desk_0100.off
desk/train/desk_0101.off
desk/train/desk_0102.off
desk/train/desk_0103.off
desk/train/desk_0104.off
desk/train/desk_0105.off
desk/train/desk_0106.off
desk/train/desk_0107.off
desk/train/desk_0108.off
desk/train/desk_0109.off
desk/train/desk_0110.off
desk/train/desk_0111.off
desk/train/desk_0112.off
desk/train/desk_0113.off
desk/train/desk_0114.off
desk/train/desk_0115.off
desk/train/desk_0116.off
desk/train/desk_0117.off
desk/train/desk_0118.off
desk/train/desk_0119.off
desk/train/desk_0120.off
desk/train/desk_0121.off
desk/train/desk_0122.off
desk/train/desk_0123.off
desk/train/desk_0124.off
desk/train/desk_0125.off
desk/train/desk_0126.off
desk/train/desk_0127.off
desk/train/desk_0128.off
desk/train/desk_0129.off
desk/train/desk_0130.off
desk/train/desk_0131.off
desk/train/desk_0132.off
desk/train/desk_0133.off
desk/train/desk_0134.off
desk/train/desk_0135.off
desk/train/desk_0136.off
desk/train/desk_0137.off
desk/train/desk_0138.off
desk/train/desk_0139.off
desk/train/desk_0140.off
desk/train/desk_0141.off
desk/train/desk_0142.off
desk/train/desk_0143.off
desk/train/desk_0144.off
desk/train/desk_0145.off
desk/train/desk_0146.off
desk/train/desk_0147.off
desk/train/desk_0148.off
desk/train/desk_0149.off
desk/train/desk_0150.off
desk/train/desk_0151.off
desk/train/desk_0152.off
desk/train/desk_0153.off
desk/train/desk_0154.off
desk/train/desk_0155.off
desk/train/desk_0156.off
desk/train/desk_0157.off
desk/train/desk_0158.off
desk/train/desk_0159.off
desk/train/desk_0160.off
desk/train/desk_0161.off
desk/train/desk_0162.off
desk/train/desk_0163.off
desk/train/desk_0164.off
desk/train/desk_0165.off
desk/train/desk_0166.off
desk/train/desk_0167.off
desk/train/desk_0168.off
desk/train/desk_0169.off
desk/train/desk_0170.off
desk/train/desk_0171.off
desk/train/desk_0172.off
desk/train/desk_0173.off
desk/train/desk_0174.off
desk/train/desk_0175.off
desk/train/desk_0176.off
desk/train/desk_0177.off
desk/train/desk_0178.off
desk/train/desk_0179.off
desk/train/desk_0180.off
bed/train/bed_0001.off
bed/train/bed_0002.off
bed/train/bed_0003.off
bed/train/bed_0004.off
bed/train/bed_0005.off
bed/train/bed_0006.off
bed/train/bed_0007.off
bed/train/bed_0008.off
bed/train/bed_0009.off
bed/train/bed_0010.off
bed/train/bed_0011.off
bed/train/bed_0012.off
bed/train/bed_0013.off
bed/train/bed_0014.off
bed/train/bed_0015.off
bed/train/bed_0016.off
bed/train/bed_0017.off
bed/train/bed_0018.off
bed/train/bed_0019.off
bed/train/bed_0020.off
bed/train/bed_0021.off
bed/train/bed_0022.off
bed/train/bed_0023.off
bed/train/bed_0024.off
bed/train/bed_0025.off
bed/train/bed_0026.off
bed/train/bed_0027.off
bed/train/bed_0028.off
bed/train/bed_0029.off
bed/train/bed_0030.off
bed/train/bed_0031.off
bed/train/bed_0032.off
bed/train/bed_0033.off
bed/train/bed_0034.off
bed/train/bed_0035.off
bed/train/bed_0036.off
bed/train/bed_0037.off
bed/train/bed_0038.off
bed/train/bed_0039.off
bed/train/bed_0040.off
bed/train/bed_0041.off
bed/train/bed_0042.off
bed/train/bed_0043.off
bed/train/bed_0044.off
bed/train/bed_0045.off
bed/train/bed_0046.off
bed/train/bed_0047.off
bed/train/bed_0048.off
bed/train/bed_0049.off
bed/train/bed_0050.off
bed/train/bed_0051.off
bed/train/bed_0052.off
bed/train/bed_0053.off
bed/train/bed_0054.off
bed/train/bed_0055.off
bed/train/bed_0056.off
bed/train/bed_0057.off
bed/train/bed_0058.off
bed/train/bed_0059.off
bed/train/bed_0060.off
bed/train/bed_0061.off
bed/train/bed_0062.off
bed/train/bed_0063.off
bed/train/bed_0064.off
bed/train/bed_0065.off
bed/train/bed_0066.off
bed/train/bed_0067.off
bed/train/bed_0068.off
bed/train/bed_0069.off
bed/train/bed_0070.off
bed/train/bed_0071.off
bed/train/bed_0072.off
bed/train/bed_0073.off
bed/train/bed_0074.off
bed/train/bed_0075.off
bed/train/bed_0076.off
bed/train/bed_0077.off
bed/train/bed_0078.off
bed/train/bed_0079.off
bed/train/bed_0080.off
bed/train/bed_0081.off
bed/train/bed_0082.off
bed/train/bed_0083.off
bed/train/bed_0084.off
bed/train/bed_0085.off
bed/train/bed_0086.off
bed/train/bed_0087.off
bed/train/bed_0088.off
bed/train/bed_0089.off
bed/train/bed_0090.off
bed/train/bed_0091.off
bed/train/bed_0092.off
bed/train/bed_0093.off
bed/train/bed_0094.off
bed/train/bed_0095.off
bed/train/bed_0096.off
bed/train/bed_0097.off
bed/train/bed_0098.off
bed/train/bed_0099.off
bed/train/bed_0100.off
bed/train/bed_0101.off
bed/train/bed_0102.off
bed/train/bed_0103.off
bed/train/bed_0104.off
bed/train/bed_0105.off
bed/train/bed_0106.off
bed/train/bed_0107.off
bed/train/bed_0108.off
bed/train/bed_0109.off
bed/train/bed_0110.off
bed/train/bed_0111.off
bed/train/bed_0112.off
bed/train/bed_0113.off
bed/train/bed_0114.off
bed/train/bed_0115.off
bed/train/bed_0116.off
bed/train/bed_0117.off
bed/train/bed_0118.off
bed/train/bed_0119.off
bed/train/bed_0120.off
bed/train/bed_0121.off
bed/train/bed_0122.off
bed/train/bed_0123.off
bed/train/bed_0124.off
bed/train/bed_0125.off
bed/train/bed_0126.off
bed/train/bed_0127.off
bed/train/bed_0128.off
bed/train/bed_0129.off
bed/train/bed_0130.off
bed/train/bed_0131.off
bed/train/bed_0132.off
bed/train/bed_0133.off
bed/train/bed_0134.off
bed/train/bed_0135.off
bed/train/bed_0136.off
bed/train/bed_0137.off
bed/train/bed_0138.off
bed/train/bed_0139.off
bed/train/bed_0140.off
bed/train/bed_0141.off
bed/train/bed_0142.off
bed/train/bed_0143.off
bed/train/bed_0144.off
bed/train/bed_0145.off
bed/train/bed_0146.off
bed/train/bed_0147.off
bed/train/bed_0148.off
bed/train/bed_0149.off
bed/train/bed_0150.off
bed/train/bed_0151.off
bed/train/bed_0152.off
bed/train/bed_0153.off
bed/train/bed_0154.off
bed/train/bed_0155.off
bed/train/bed_0156.off
bed/train/bed_0157.off
bed/train/bed_0158.off
bed/train/bed_0159.off
bed/train/bed_0160.off
bed/train/bed_0161.off
bed/train/bed_0162.off
bed/train/bed_0163.off
bed/train/bed_0164.off
bed/train/bed_0165.off
bed/train/bed_0166.off
bed/train/bed_0167.off
bed/train/bed_0168.off
bed/train/bed_0169.off
bed/train/bed_0170.off
bed/train/bed_0171.off
bed/train/bed_0172.off
bed/train/bed_0173.off
bed/train/bed_0174.off
bed/train/bed_0175.off
bed/train/bed_0176.off
bed/train/bed_0177.off
bed/train/bed_0178.off
bed/train/bed_0179.off
bed/train/bed_0180.off
bed/train/bed_0181.off
bed/train/bed_0182.off
bed/train/bed_0183.off
bed/train/bed_0184.off
bed/train/bed_0185.off
bed/train/bed_0186.off
bed/train/bed_0187.off
bed/train/bed_0188.off
bed/train/bed_0189.off
bed/train/bed_0190.off
bed/train/bed_0191.off
bed/train/bed_0192.off
bed/train/bed_0193.off
bed/train/bed_0194.off
bed/train/bed_0195.off
bed/train/bed_0196.off
bed/train/bed_0197.off
bed/train/bed_0198.off
bed/train/bed_0199.off
bed/train/bed_0200.off
bed/train/bed_0201.off
bed/train/bed_0202.off
bed/train/bed_0203.off
bed/train/bed_0204.off
bed/train/bed_0205.off
bed/train/bed_0206.off
bed/train/bed_0207.off
bed/train/bed_0208.off
bed/train/bed_0209.off
bed/train/bed_0210.off
bed/train/bed_0211.off
bed/train/bed_0212.off
bed/train/bed_0213.off
bed/train/bed_0214.off
bed/train/bed_0215.off
bed/train/bed_0216.off
bed/train/bed_0217.off
bed/train/bed_0218.off
bed/train/bed_0219.off
bed/train/bed_0220.off
bed/train/bed_0221.off
bed/train/bed_0222.off
bed/train/bed_0223.off
bed/train/bed_0224.off
bed/train/bed_0225.off
bed/train/bed_0226.off
bed/train/bed_0227.off
bed/train/bed_0228.off
bed/train/bed_0229.off
bed/train/bed_0230.off
bed/train/bed_0231.off
bed/train/bed_0232.off
bed/train/bed_0233.off
bed/train/bed_0234.off
bed/train/bed_0235.off
bed/train/bed_0236.off
bed/train/bed_0237.off
bed/train/bed_0238.off
bed/train/bed_0239.off
bed/train/bed_0240.off
bed/train/bed_0241.off
bed/train/bed_0242.off
bed/train/bed_0243.off
bed/train/bed_0244.off
bed/train/bed_0245.off
bed/train/bed_0246.off
bed/train/bed_0247.off
bed/train/bed_0248.off
bed/train/bed_0249.off
bed/train/bed_0250.off
bed/train/bed_0251.off
bed/train/bed_0252.off
bed/train/bed_0253.off
bed/train/bed_0254.off
bed/train/bed_0255.off
bed/train/bed_0256.off
bed/train/bed_0257.off
bed/train/bed_0258.off
bed/train/bed_0259.off
bed/train/bed_0260.off
bed/train/bed_0261.off
bed/train/bed_0262.off
bed/train/bed_0263.off
bed/train/bed_0264.off
bed/train/bed_0265.off
bed/train/bed_0266.off
bed/train/bed_0267.off
bed/train/bed_0268.off
bed/train/bed_0269.off
bed/train/bed_0270.off
bed/train/bed_0271.off
bed/train/bed_0272.off
bed/train/bed_0273.off
bed/train/bed_0274.off
bed/train/bed_0275.off
bed/train/bed_0276.off
bed/train/bed_0277.off
bed/train/bed_0278.off
bed/train/bed_0279.off
bed/train/bed_0280.off
bed/train/bed_0281.off
bed/train/bed_0282.off
bed/train/bed_0283.off
bed/train/bed_0284.off
bed/train/bed_0285.off
bed/train/bed_0286.off
bed/train/bed_0287.off
bed/train/bed_0288.off
bed/train/bed_0289.off
bed/train/bed_0290.off
bed/train/bed_0291.off
bed/train/bed_0292.off
bed/train/bed_0293.off
bed/train/bed_0294.off
bed/train/bed_0295.off
bed/train/bed_0296.off
bed/train/bed_0297.off
bed/train/bed_0298.off
bed/train/bed_0299.off
bed/train/bed_0300.off
bed/train/bed_0301.off
bed/train/bed_0302.off
bed/train/bed_0303.off
bed/train/bed_0304.off
bed/train/bed_0305.off
bed/train/bed_0306.off
bed/train/bed_0307.off
bed/train/bed_0308.off
bed/train/bed_0309.off
bed/train/bed_0310.off
bed/train/bed_0311.off
bed/train/bed_0312.off
bed/train/bed_0313.off
bed/train/bed_0314.off
bed/train/bed_0315.off
bed/train/bed_0316.off
bed/train/bed_0317.off
bed/train/bed_0318.off
bed/train/bed_0319.off
bed/train/bed_0320.off
bed/train/bed_0321.off
bed/train/bed_0322.off
bed/train/bed_0323.off
bed/train/bed_0324.off
bed/train/bed_0325.off
bed/train/bed_0326.off
bed/train/bed_0327.off
bed/train/bed_0328.off
bed/train/bed_0329.off
bed/train/bed_0330.off
bed/train/bed_0331.off
bed/train/bed_0332.off
bed/train/bed_0333.off
bed/train/bed_0334.off
bed/train/bed_0335.off
bed/train/bed_0336.off
bed/train/bed_0337.off
bed/train/bed_0338.off
bed/train/bed_0339.off
bed/train/bed_0340.off
bed/train/bed_0341.off
bed/train/bed_0342.off
bed/train/bed_0343.off
bed/train/bed_0344.off
bed/train/bed_0345.off
bed/train/bed_0346.off
bed/train/bed_0347.off
bed/train/bed_0348.off
bed/train/bed_0349.off
bed/train/bed_0350.off
bed/train/bed_0351.off
bed/train/bed_0352.off
bed/train/bed_0353.off
bed/train/bed_0354.off
bed/train/bed_0355.off
bed/train/bed_0356.off
bed/train/bed_0357.off
bed/train/bed_0358.off
bed/train/bed_0359.off
bed/train/bed_0360.off
bed/train/bed_0361.off
bed/train/bed_0362.off
bed/train/bed_0363.off
bed/train/bed_0364.off
bed/train/bed_0365.off
bed/train/bed_0366.off
bed/train/bed_0367.off
bed/train/bed_0368.off
bed/train/bed_0369.off
bed/train/bed_0370.off
bed/train/bed_0371.off
bed/train/bed_0372.off
bed/train/bed_0373.off
bed/train/bed_0374.off
bed/train/bed_0375.off
bed/train/bed_0376.off
bed/train/bed_0377.off
bed/train/bed_0378.off
bed/train/bed_0379.off
bed/train/bed_0380.off
bed/train/bed_0381.off
bed/train/bed_0382.off
bed/train/bed_0383.off
bed/train/bed_0384.off
bed/train/bed_0385.off
bed/train/bed_0386.off
bed/train/bed_0387.off
bed/train/bed_0388.off
bed/train/bed_0389.off
bed/train/bed_0390.off
bed/train/bed_0391.off
bed/train/bed_0392.off
bed/train/bed_0393.off
bed/train/bed_0394.off
bed/train/bed_0395.off
bed/train/bed_0396.off
bed/train/bed_0397.off
bed/train/bed_0398.off
bed/train/bed_0399.off
bed/train/bed_0400.off
bed/train/bed_0401.off
bed/train/bed_0402.off
bed/train/bed_0403.off
bed/train/bed_0404.off
bed/train/bed_0405.off
bed/train/bed_0406.off
bed/train/bed_0407.off
bed/train/bed_0408.off
bed/train/bed_0409.off
bed/train/bed_0410.off
bed/train/bed_0411.off
bed/train/bed_0412.off
bed/train/bed_0413.off
bed/train/bed_0414.off
bed/train/bed_0415.off
bed/train/bed_0416.off
bed/train/bed_0417.off
bed/train/bed_0418.off
bed/train/bed_0419.off
bed/train/bed_0420.off
bed/train/bed_0421.off
bed/train/bed_0422.off
bed/train/bed_0423.off
bed/train/bed_0424.off
bed/train/bed_0425.off
bed/train/bed_0426.off
bed/train/bed_0427.off
bed/train/bed_0428.off
bed/train/bed_0429.off
bed/train/bed_0430.off
bed/train/bed_0431.off
bed/train/bed_0432.off
bed/train/bed_0433.off
bed/train/bed_0434.off
bed/train/bed_0435.off
bed/train/bed_0436.off
bed/train/bed_0437.off
bed/train/bed_0438.off
bed/train/bed_0439.off
bed/train/bed_0440.off
bed/train/bed_0441.off
bed/train/bed_0442.off
bed/train/bed_0443.off
bed/train/bed_0444.off
bed/train/bed_0445.off
bed/train/bed_0446.off
bed/train/bed_0447.off
bed/train/bed_0448.off
bed/train/bed_0449.off
bed/train/bed_0450.off
bed/train/bed_0451.off
bed/train/bed_0452.off
bed/train/bed_0453.off
bed/train/bed_0454.off
bed/train/bed_0455.off
bed/train/bed_0456.off
bed/train/bed_0457.off
bed/train/bed_0458.off
bed/train/bed_0459.off
bed/train/bed_0460.off
bed/train/bed_0461.off
bed/train/bed_0462.off
bed/train/bed_0463.off
bed/train/bed_0464.off
tent/train/tent_0001.off
tent/train/tent_0002.off
tent/train/tent_0003.off
tent/train/tent_0004.off
tent/train/tent_0005.off
tent/train/tent_0006.off
tent/train/tent_0007.off
tent/train/tent_0008.off
tent/train/tent_0009.off
tent/train/tent_0010.off
tent/train/tent_0011.off
tent/train/tent_0012.off
tent/train/tent_0013.off
tent/train/tent_0014.off
tent/train/tent_0015.off
tent/train/tent_0016.off
tent/train/tent_0017.off
tent/train/tent_0018.off
tent/train/tent_0019.off
tent/train/tent_0020.off
tent/train/tent_0021.off
tent/train/tent_0022.off
tent/train/tent_0023.off
tent/train/tent_0024.off
tent/train/tent_0025.off
tent/train/tent_0026.off
tent/train/tent_0027.off
tent/train/tent_0028.off
tent/train/tent_0029.off
tent/train/tent_0030.off
tent/train/tent_0031.off
tent/train/tent_0032.off
tent/train/tent_0033.off
tent/train/tent_0034.off
tent/train/tent_0035.off
tent/train/tent_0036.off
tent/train/tent_0037.off
tent/train/tent_0038.off
tent/train/tent_0039.off
tent/train/tent_0040.off
tent/train/tent_0041.off
tent/train/tent_0042.off
tent/train/tent_0043.off
tent/train/tent_0044.off
tent/train/tent_0045.off
tent/train/tent_0046.off
tent/train/tent_0047.off
tent/train/tent_0048.off
tent/train/tent_0049.off
tent/train/tent_0050.off
tent/train/tent_0051.off
tent/train/tent_0052.off
tent/train/tent_0053.off
tent/train/tent_0054.off
tent/train/tent_0055.off
tent/train/tent_0056.off
tent/train/tent_0057.off
tent/train/tent_0058.off
tent/train/tent_0059.off
tent/train/tent_0060.off
tent/train/tent_0061.off
tent/train/tent_0062.off
tent/train/tent_0063.off
tent/train/tent_0064.off
tent/train/tent_0065.off
tent/train/tent_0066.off
tent/train/tent_0067.off
tent/train/tent_0068.off
tent/train/tent_0069.off
tent/train/tent_0070.off
tent/train/tent_0071.off
tent/train/tent_0072.off
tent/train/tent_0073.off
tent/train/tent_0074.off
tent/train/tent_0075.off
tent/train/tent_0076.off
tent/train/tent_0077.off
tent/train/tent_0078.off
tent/train/tent_0079.off
tent/train/tent_0080.off
tent/train/tent_0081.off
tent/train/tent_0082.off
tent/train/tent_0083.off
tent/train/tent_0084.off
tent/train/tent_0085.off
tent/train/tent_0086.off
tent/train/tent_0087.off
tent/train/tent_0088.off
tent/train/tent_0089.off
tent/train/tent_0090.off
tent/train/tent_0091.off
tent/train/tent_0092.off
tent/train/tent_0093.off
tent/train/tent_0094.off
tent/train/tent_0095.off
tent/train/tent_0096.off
tent/train/tent_0097.off
tent/train/tent_0098.off
tent/train/tent_0099.off
tent/train/tent_0100.off
tent/train/tent_0101.off
tent/train/tent_0102.off
tent/train/tent_0103.off
tent/train/tent_0104.off
tent/train/tent_0105.off
tent/train/tent_0106.off
tent/train/tent_0107.off
tent/train/tent_0108.off
tent/train/tent_0109.off
tent/train/tent_0110.off
tent/train/tent_0111.off
tent/train/tent_0112.off
tent/train/tent_0113.off
tent/train/tent_0114.off
tent/train/tent_0115.off
tent/train/tent_0116.off
tent/train/tent_0117.off
tent/train/tent_0118.off
tent/train/tent_0119.off
tent/train/tent_0120.off
tent/train/tent_0121.off
tent/train/tent_0122.off
tent/train/tent_0123.off
tent/train/tent_0124.off
tent/train/tent_0125.off
tent/train/tent_0126.off
tent/train/tent_0127.off
tent/train/tent_0128.off
tent/train/tent_0129.off
tent/train/tent_0130.off
tent/train/tent_0131.off
tent/train/tent_0132.off
tent/train/tent_0133.off
tent/train/tent_0134.off
tent/train/tent_0135.off
tent/train/tent_0136.off
tent/train/tent_0137.off
tent/train/tent_0138.off
tent/train/tent_0139.off
tent/train/tent_0140.off
tent/train/tent_0141.off
tent/train/tent_0142.off
tent/train/tent_0143.off
tent/train/tent_0144.off
tent/train/tent_0145.off
tent/train/tent_0146.off
tent/train/tent_0147.off
piano/train/piano_0001.off
piano/train/piano_0002.off
piano/train/piano_0003.off
piano/train/piano_0004.off
piano/train/piano_0005.off
piano/train/piano_0006.off
piano/train/piano_0007.off
piano/train/piano_0008.off
piano/train/piano_0009.off
piano/train/piano_0010.off
piano/train/piano_0011.off
piano/train/piano_0012.off
piano/train/piano_0013.off
piano/train/piano_0014.off
piano/train/piano_0015.off
piano/train/piano_0016.off
piano/train/piano_0017.off
piano/train/piano_0018.off
piano/train/piano_0019.off
piano/train/piano_0020.off
piano/train/piano_0021.off
piano/train/piano_0022.off
piano/train/piano_0023.off
piano/train/piano_0024.off
piano/train/piano_0025.off
piano/train/piano_0026.off
piano/train/piano_0027.off
piano/train/piano_0028.off
piano/train/piano_0029.off
piano/train/piano_0030.off
piano/train/piano_0031.off
piano/train/piano_0032.off
piano/train/piano_0033.off
piano/train/piano_0034.off
piano/train/piano_0035.off
piano/train/piano_0036.off
piano/train/piano_0037.off
piano/train/piano_0038.off
piano/train/piano_0039.off
piano/train/piano_0040.off
piano/train/piano_0041.off
piano/train/piano_0042.off
piano/train/piano_0043.off
piano/train/piano_0044.off
piano/train/piano_0045.off
piano/train/piano_0046.off
piano/train/piano_0047.off
piano/train/piano_0048.off
piano/train/piano_0049.off
piano/train/piano_0050.off
piano/train/piano_0051.off
piano/train/piano_0052.off
piano/train/piano_0053.off
piano/train/piano_0054.off
piano/train/piano_0055.off
piano/train/piano_0056.off
piano/train/piano_0057.off
piano/train/piano_0058.off
piano/train/piano_0059.off
piano/train/piano_0060.off
piano/train/piano_0061.off
piano/train/piano_0062.off
piano/train/piano_0063.off
piano/train/piano_0064.off
piano/train/piano_0065.off
piano/train/piano_0066.off
piano/train/piano_0067.off
piano/train/piano_0068.off
piano/train/piano_0069.off
piano/train/piano_0070.off
piano/train/piano_0071.off
piano/train/piano_0072.off
piano/train/piano_0073.off
piano/train/piano_0074.off
piano/train/piano_0075.off
piano/train/piano_0076.off
piano/train/piano_0077.off
piano/train/piano_0078.off
piano/train/piano_0079.off
piano/train/piano_0080.off
piano/train/piano_0081.off
piano/train/piano_0082.off
piano/train/piano_0083.off
piano/train/piano_0084.off
piano/train/piano_0085.off
piano/train/piano_0086.off
piano/train/piano_0087.off
piano/train/piano_0088.off
piano/train/piano_0089.off
piano/train/piano_0090.off
piano/train/piano_0091.off
piano/train/piano_0092.off
piano/train/piano_0093.off
piano/train/piano_0094.off
piano/train/piano_0095.off
piano/train/piano_0096.off
piano/train/piano_0097.off
piano/train/piano_0098.off
piano/train/piano_0099.off
piano/train/piano_0100.off
piano/train/piano_0101.off
piano/train/piano_0102.off
piano/train/piano_0103.off
piano/train/piano_0104.off
piano/train/piano_0105.off
piano/train/piano_0106.off
piano/train/piano_0107.off
piano/train/piano_0108.off
piano/train/piano_0109.off
piano/train/piano_0110.off
piano/train/piano_0111.off
piano/train/piano_0112.off
piano/train/piano_0113.off
piano/train/piano_0114.off
piano/train/piano_0115.off
piano/train/piano_0116.off
piano/train/piano_0117.off
piano/train/piano_0118.off
piano/train/piano_0119.off
piano/train/piano_0120.off
piano/train/piano_0121.off
piano/train/piano_0122.off
piano/train/piano_0123.off
piano/train/piano_0124.off
piano/train/piano_0125.off
piano/train/piano_0126.off
piano/train/piano_0127.off
piano/train/piano_0128.off
piano/train/piano_0129.off
piano/train/piano_0130.off
piano/train/piano_0131.off
piano/train/piano_0132.off
piano/train/piano_0133.off
piano/train/piano_0134.off
piano/train/piano_0135.off
piano/train/piano_0136.off
piano/train/piano_0137.off
piano/train/piano_0138.off
piano/train/piano_0139.off
piano/train/piano_0140.off
piano/train/piano_0141.off
piano/train/piano_0142.off
piano/train/piano_0143.off
piano/train/piano_0144.off
piano/train/piano_0145.off
piano/train/piano_0146.off
piano/train/piano_0147.off
piano/train/piano_0148.off
piano/train/piano_0149.off
piano/train/piano_0150.off
piano/train/piano_0151.off
piano/train/piano_0152.off
piano/train/piano_0153.off
piano/train/piano_0154.off
piano/train/piano_0155.off
piano/train/piano_0156.off
piano/train/piano_0157.off
piano/train/piano_0158.off
piano/train/piano_0159.off
piano/train/piano_0160.off
piano/train/piano_0161.off
piano/train/piano_0162.off
piano/train/piano_0163.off
piano/train/piano_0164.off
piano/train/piano_0165.off
piano/train/piano_0166.off
piano/train/piano_0167.off
piano/train/piano_0168.off
piano/train/piano_0169.off
piano/train/piano_0170.off
piano/train/piano_0171.off
piano/train/piano_0172.off
piano/train/piano_0173.off
piano/train/piano_0174.off
piano/train/piano_0175.off
piano/train/piano_0176.off
piano/train/piano_0177.off
piano/train/piano_0178.off
piano/train/piano_0179.off
piano/train/piano_0180.off
piano/train/piano_0181.off
piano/train/piano_0182.off
piano/train/piano_0183.off
piano/train/piano_0184.off
piano/train/piano_0185.off
piano/train/piano_0186.off
piano/train/piano_0187.off
piano/train/piano_0188.off
piano/train/piano_0189.off
piano/train/piano_0190.off
piano/train/piano_0191.off
piano/train/piano_0192.off
piano/train/piano_0193.off
piano/train/piano_0194.off
piano/train/piano_0195.off
piano/train/piano_0196.off
piano/train/piano_0197.off
piano/train/piano_0198.off
piano/train/piano_0199.off
piano/train/piano_0200.off
piano/train/piano_0201.off
piano/train/piano_0202.off
piano/train/piano_0203.off
piano/train/piano_0204.off
piano/train/piano_0205.off
piano/train/piano_0206.off
piano/train/piano_0207.off
piano/train/piano_0208.off
sofa/train/sofa_0001.off
sofa/train/sofa_0002.off
sofa/train/sofa_0003.off
sofa/train/sofa_0004.off
sofa/train/sofa_0005.off
sofa/train/sofa_0006.off
sofa/train/sofa_0007.off
sofa/train/sofa_0008.off
sofa/train/sofa_0009.off
sofa/train/sofa_0010.off
sofa/train/sofa_0011.off
sofa/train/sofa_0012.off
sofa/train/sofa_0013.off
sofa/train/sofa_0014.off
sofa/train/sofa_0015.off
sofa/train/sofa_0016.off
sofa/train/sofa_0017.off
sofa/train/sofa_0018.off
sofa/train/sofa_0019.off
sofa/train/sofa_0020.off
sofa/train/sofa_0021.off
sofa/train/sofa_0022.off
sofa/train/sofa_0023.off
sofa/train/sofa_0024.off
sofa/train/sofa_0025.off
sofa/train/sofa_0026.off
sofa/train/sofa_0027.off
sofa/train/sofa_0028.off
sofa/train/sofa_0029.off
sofa/train/sofa_0030.off
sofa/train/sofa_0031.off
sofa/train/sofa_0032.off
sofa/train/sofa_0033.off
sofa/train/sofa_0034.off
sofa/train/sofa_0035.off
sofa/train/sofa_0036.off
sofa/train/sofa_0037.off
sofa/train/sofa_0038.off
sofa/train/sofa_0039.off
sofa/train/sofa_0040.off
sofa/train/sofa_0041.off
sofa/train/sofa_0042.off
sofa/train/sofa_0043.off
sofa/train/sofa_0044.off
sofa/train/sofa_0045.off
sofa/train/sofa_0046.off
sofa/train/sofa_0047.off
sofa/train/sofa_0048.off
sofa/train/sofa_0049.off
sofa/train/sofa_0050.off
sofa/train/sofa_0051.off
sofa/train/sofa_0052.off
sofa/train/sofa_0053.off
sofa/train/sofa_0054.off
sofa/train/sofa_0055.off
sofa/train/sofa_0056.off
sofa/train/sofa_0057.off
sofa/train/sofa_0058.off
sofa/train/sofa_0059.off
sofa/train/sofa_0060.off
sofa/train/sofa_0061.off
sofa/train/sofa_0062.off
sofa/train/sofa_0063.off
sofa/train/sofa_0064.off
sofa/train/sofa_0065.off
sofa/train/sofa_0066.off
sofa/train/sofa_0067.off
sofa/train/sofa_0068.off
sofa/train/sofa_0069.off
sofa/train/sofa_0070.off
sofa/train/sofa_0071.off
sofa/train/sofa_0072.off
sofa/train/sofa_0073.off
sofa/train/sofa_0074.off
sofa/train/sofa_0075.off
sofa/train/sofa_0076.off
sofa/train/sofa_0077.off
sofa/train/sofa_0078.off
sofa/train/sofa_0079.off
sofa/train/sofa_0080.off
sofa/train/sofa_0081.off
sofa/train/sofa_0082.off
sofa/train/sofa_0083.off
sofa/train/sofa_0084.off
sofa/train/sofa_0085.off
sofa/train/sofa_0086.off
sofa/train/sofa_0087.off
sofa/train/sofa_0088.off
sofa/train/sofa_0089.off
sofa/train/sofa_0090.off
sofa/train/sofa_0091.off
sofa/train/sofa_0092.off
sofa/train/sofa_0093.off
sofa/train/sofa_0094.off
sofa/train/sofa_0095.off
sofa/train/sofa_0096.off
sofa/train/sofa_0097.off
sofa/train/sofa_0098.off
sofa/train/sofa_0099.off
sofa/train/sofa_0100.off
sofa/train/sofa_0101.off
sofa/train/sofa_0102.off
sofa/train/sofa_0103.off
sofa/train/sofa_0104.off
sofa/train/sofa_0105.off
sofa/train/sofa_0106.off
sofa/train/sofa_0107.off
sofa/train/sofa_0108.off
sofa/train/sofa_0109.off
sofa/train/sofa_0110.off
sofa/train/sofa_0111.off
sofa/train/sofa_0112.off
sofa/train/sofa_0113.off
sofa/train/sofa_0114.off
sofa/train/sofa_0115.off
sofa/train/sofa_0116.off
sofa/train/sofa_0117.off
sofa/train/sofa_0118.off
sofa/train/sofa_0119.off
sofa/train/sofa_0120.off
sofa/train/sofa_0121.off
sofa/train/sofa_0122.off
sofa/train/sofa_0123.off
sofa/train/sofa_0124.off
sofa/train/sofa_0125.off
sofa/train/sofa_0126.off
sofa/train/sofa_0127.off
sofa/train/sofa_0128.off
sofa/train/sofa_0129.off
sofa/train/sofa_0130.off
sofa/train/sofa_0131.off
sofa/train/sofa_0132.off
sofa/train/sofa_0133.off
sofa/train/sofa_0134.off
sofa/train/sofa_0135.off
sofa/train/sofa_0136.off
sofa/train/sofa_0137.off
sofa/train/sofa_0138.off
sofa/train/sofa_0139.off
sofa/train/sofa_0140.off
sofa/train/sofa_0141.off
sofa/train/sofa_0142.off
sofa/train/sofa_0143.off
sofa/train/sofa_0144.off
sofa/train/sofa_0145.off
sofa/train/sofa_0146.off
sofa/train/sofa_0147.off
sofa/train/sofa_0148.off
sofa/train/sofa_0149.off
sofa/train/sofa_0150.off
sofa/train/sofa_0151.off
sofa/train/sofa_0152.off
sofa/train/sofa_0153.off
sofa/train/sofa_0154.off
sofa/train/sofa_0155.off
sofa/train/sofa_0156.off
sofa/train/sofa_0157.off
sofa/train/sofa_0158.off
sofa/train/sofa_0159.off
sofa/train/sofa_0160.off
sofa/train/sofa_0161.off
sofa/train/sofa_0162.off
sofa/train/sofa_0163.off
sofa/train/sofa_0164.off
sofa/train/sofa_0165.off
sofa/train/sofa_0166.off
sofa/train/sofa_0167.off
sofa/train/sofa_0168.off
sofa/train/sofa_0169.off
sofa/train/sofa_0170.off
sofa/train/sofa_0171.off
sofa/train/sofa_0172.off
sofa/train/sofa_0173.off
sofa/train/sofa_0174.off
sofa/train/sofa_0175.off
sofa/train/sofa_0176.off
sofa/train/sofa_0177.off
sofa/train/sofa_0178.off
sofa/train/sofa_0179.off
sofa/train/sofa_0180.off
sofa/train/sofa_0181.off
sofa/train/sofa_0182.off
sofa/train/sofa_0183.off
sofa/train/sofa_0184.off
sofa/train/sofa_0185.off
sofa/train/sofa_0186.off
sofa/train/sofa_0187.off
sofa/train/sofa_0188.off
sofa/train/sofa_0189.off
sofa/train/sofa_0190.off
sofa/train/sofa_0191.off
sofa/train/sofa_0192.off
sofa/train/sofa_0193.off
sofa/train/sofa_0194.off
sofa/train/sofa_0195.off
sofa/train/sofa_0196.off
sofa/train/sofa_0197.off
sofa/train/sofa_0198.off
sofa/train/sofa_0199.off
sofa/train/sofa_0200.off
sofa/train/sofa_0201.off
sofa/train/sofa_0202.off
sofa/train/sofa_0203.off
sofa/train/sofa_0204.off
sofa/train/sofa_0205.off
sofa/train/sofa_0206.off
sofa/train/sofa_0207.off
sofa/train/sofa_0208.off
sofa/train/sofa_0209.off
sofa/train/sofa_0210.off
sofa/train/sofa_0211.off
sofa/train/sofa_0212.off
sofa/train/sofa_0213.off
sofa/train/sofa_0214.off
sofa/train/sofa_0215.off
sofa/train/sofa_0216.off
sofa/train/sofa_0217.off
sofa/train/sofa_0218.off
sofa/train/sofa_0219.off
sofa/train/sofa_0220.off
sofa/train/sofa_0221.off
sofa/train/sofa_0222.off
sofa/train/sofa_0223.off
sofa/train/sofa_0224.off
sofa/train/sofa_0225.off
sofa/train/sofa_0226.off
sofa/train/sofa_0227.off
sofa/train/sofa_0228.off
sofa/train/sofa_0229.off
sofa/train/sofa_0230.off
sofa/train/sofa_0231.off
sofa/train/sofa_0232.off
sofa/train/sofa_0233.off
sofa/train/sofa_0234.off
sofa/train/sofa_0235.off
sofa/train/sofa_0236.off
sofa/train/sofa_0237.off
sofa/train/sofa_0238.off
sofa/train/sofa_0239.off
sofa/train/sofa_0240.off
sofa/train/sofa_0241.off
sofa/train/sofa_0242.off
sofa/train/sofa_0243.off
sofa/train/sofa_0244.off
sofa/train/sofa_0245.off
sofa/train/sofa_0246.off
sofa/train/sofa_0247.off
sofa/train/sofa_0248.off
sofa/train/sofa_0249.off
sofa/train/sofa_0250.off
sofa/train/sofa_0251.off
sofa/train/sofa_0252.off
sofa/train/sofa_0253.off
sofa/train/sofa_0254.off
sofa/train/sofa_0255.off
sofa/train/sofa_0256.off
sofa/train/sofa_0257.off
sofa/train/sofa_0258.off
sofa/train/sofa_0259.off
sofa/train/sofa_0260.off
sofa/train/sofa_0261.off
sofa/train/sofa_0262.off
sofa/train/sofa_0263.off
sofa/train/sofa_0264.off
sofa/train/sofa_0265.off
sofa/train/sofa_0266.off
sofa/train/sofa_0267.off
sofa/train/sofa_0268.off
sofa/train/sofa_0269.off
sofa/train/sofa_0270.off
sofa/train/sofa_0271.off
sofa/train/sofa_0272.off
sofa/train/sofa_0273.off
sofa/train/sofa_0274.off
sofa/train/sofa_0275.off
sofa/train/sofa_0276.off
sofa/train/sofa_0277.off
sofa/train/sofa_0278.off
sofa/train/sofa_0279.off
sofa/train/sofa_0280.off
sofa/train/sofa_0281.off
sofa/train/sofa_0282.off
sofa/train/sofa_0283.off
sofa/train/sofa_0284.off
sofa/train/sofa_0285.off
sofa/train/sofa_0286.off
sofa/train/sofa_0287.off
sofa/train/sofa_0288.off
sofa/train/sofa_0289.off
sofa/train/sofa_0290.off
sofa/train/sofa_0291.off
sofa/train/sofa_0292.off
sofa/train/sofa_0293.off
sofa/train/sofa_0294.off
sofa/train/sofa_0295.off
sofa/train/sofa_0296.off
sofa/train/sofa_0297.off
sofa/train/sofa_0298.off
sofa/train/sofa_0299.off
sofa/train/sofa_0300.off
sofa/train/sofa_0301.off
sofa/train/sofa_0302.off
sofa/train/sofa_0303.off
sofa/train/sofa_0304.off
sofa/train/sofa_0305.off
sofa/train/sofa_0306.off
sofa/train/sofa_0307.off
sofa/train/sofa_0308.off
sofa/train/sofa_0309.off
sofa/train/sofa_0310.off
sofa/train/sofa_0311.off
sofa/train/sofa_0312.off
sofa/train/sofa_0313.off
sofa/train/sofa_0314.off
sofa/train/sofa_0315.off
sofa/train/sofa_0316.off
sofa/train/sofa_0317.off
sofa/train/sofa_0318.off
sofa/train/sofa_0319.off
sofa/train/sofa_0320.off
sofa/train/sofa_0321.off
sofa/train/sofa_0322.off
sofa/train/sofa_0323.off
sofa/train/sofa_0324.off
sofa/train/sofa_0325.off
sofa/train/sofa_0326.off
sofa/train/sofa_0327.off
sofa/train/sofa_0328.off
sofa/train/sofa_0329.off
sofa/train/sofa_0330.off
sofa/train/sofa_0331.off
sofa/train/sofa_0332.off
sofa/train/sofa_0333.off
sofa/train/sofa_0334.off
sofa/train/sofa_0335.off
sofa/train/sofa_0336.off
sofa/train/sofa_0337.off
sofa/train/sofa_0338.off
sofa/train/sofa_0339.off
sofa/train/sofa_0340.off
sofa/train/sofa_0341.off
sofa/train/sofa_0342.off
sofa/train/sofa_0343.off
sofa/train/sofa_0344.off
sofa/train/sofa_0345.off
sofa/train/sofa_0346.off
sofa/train/sofa_0347.off
sofa/train/sofa_0348.off
sofa/train/sofa_0349.off
sofa/train/sofa_0350.off
sofa/train/sofa_0351.off
sofa/train/sofa_0352.off
sofa/train/sofa_0353.off
sofa/train/sofa_0354.off
sofa/train/sofa_0355.off
sofa/train/sofa_0356.off
sofa/train/sofa_0357.off
sofa/train/sofa_0358.off
sofa/train/sofa_0359.off
sofa/train/sofa_0360.off
sofa/train/sofa_0361.off
sofa/train/sofa_0362.off
sofa/train/sofa_0363.off
sofa/train/sofa_0364.off
sofa/train/sofa_0365.off
sofa/train/sofa_0366.off
sofa/train/sofa_0367.off
sofa/train/sofa_0368.off
sofa/train/sofa_0369.off
sofa/train/sofa_0370.off
sofa/train/sofa_0371.off
sofa/train/sofa_0372.off
sofa/train/sofa_0373.off
sofa/train/sofa_0374.off
sofa/train/sofa_0375.off
sofa/train/sofa_0376.off
sofa/train/sofa_0377.off
sofa/train/sofa_0378.off
sofa/train/sofa_0379.off
sofa/train/sofa_0380.off
sofa/train/sofa_0381.off
sofa/train/sofa_0382.off
sofa/train/sofa_0383.off
sofa/train/sofa_0384.off
sofa/train/sofa_0385.off
sofa/train/sofa_0386.off
sofa/train/sofa_0387.off
sofa/train/sofa_0388.off
sofa/train/sofa_0389.off
sofa/train/sofa_0390.off
sofa/train/sofa_0391.off
sofa/train/sofa_0392.off
sofa/train/sofa_0393.off
sofa/train/sofa_0394.off
sofa/train/sofa_0395.off
sofa/train/sofa_0396.off
sofa/train/sofa_0397.off
sofa/train/sofa_0398.off
sofa/train/sofa_0399.off
sofa/train/sofa_0400.off
sofa/train/sofa_0401.off
sofa/train/sofa_0402.off
sofa/train/sofa_0403.off
sofa/train/sofa_0404.off
sofa/train/sofa_0405.off
sofa/train/sofa_0406.off
sofa/train/sofa_0407.off
sofa/train/sofa_0408.off
sofa/train/sofa_0409.off
sofa/train/sofa_0410.off
sofa/train/sofa_0411.off
sofa/train/sofa_0412.off
sofa/train/sofa_0413.off
sofa/train/sofa_0414.off
sofa/train/sofa_0415.off
sofa/train/sofa_0416.off
sofa/train/sofa_0417.off
sofa/train/sofa_0418.off
sofa/train/sofa_0419.off
sofa/train/sofa_0420.off
sofa/train/sofa_0421.off
sofa/train/sofa_0422.off
sofa/train/sofa_0423.off
sofa/train/sofa_0424.off
sofa/train/sofa_0425.off
sofa/train/sofa_0426.off
sofa/train/sofa_0427.off
sofa/train/sofa_0428.off
sofa/train/sofa_0429.off
sofa/train/sofa_0430.off
sofa/train/sofa_0431.off
sofa/train/sofa_0432.off
sofa/train/sofa_0433.off
sofa/train/sofa_0434.off
sofa/train/sofa_0435.off
sofa/train/sofa_0436.off
sofa/train/sofa_0437.off
sofa/train/sofa_0438.off
sofa/train/sofa_0439.off
sofa/train/sofa_0440.off
sofa/train/sofa_0441.off
sofa/train/sofa_0442.off
sofa/train/sofa_0443.off
sofa/train/sofa_0444.off
sofa/train/sofa_0445.off
sofa/train/sofa_0446.off
sofa/train/sofa_0447.off
sofa/train/sofa_0448.off
sofa/train/sofa_0449.off
sofa/train/sofa_0450.off
sofa/train/sofa_0451.off
sofa/train/sofa_0452.off
sofa/train/sofa_0453.off
sofa/train/sofa_0454.off
sofa/train/sofa_0455.off
sofa/train/sofa_0456.off
sofa/train/sofa_0457.off
sofa/train/sofa_0458.off
sofa/train/sofa_0459.off
sofa/train/sofa_0460.off
sofa/train/sofa_0461.off
sofa/train/sofa_0462.off
sofa/train/sofa_0463.off
sofa/train/sofa_0464.off
sofa/train/sofa_0465.off
sofa/train/sofa_0466.off
sofa/train/sofa_0467.off
sofa/train/sofa_0468.off
sofa/train/sofa_0469.off
sofa/train/sofa_0470.off
sofa/train/sofa_0471.off
sofa/train/sofa_0472.off
sofa/train/sofa_0473.off
sofa/train/sofa_0474.off
sofa/train/sofa_0475.off
sofa/train/sofa_0476.off
sofa/train/sofa_0477.off
sofa/train/sofa_0478.off
sofa/train/sofa_0479.off
sofa/train/sofa_0480.off
sofa/train/sofa_0481.off
sofa/train/sofa_0482.off
sofa/train/sofa_0483.off
sofa/train/sofa_0484.off
sofa/train/sofa_0485.off
sofa/train/sofa_0486.off
sofa/train/sofa_0487.off
sofa/train/sofa_0488.off
sofa/train/sofa_0489.off
sofa/train/sofa_0490.off
sofa/train/sofa_0491.off
sofa/train/sofa_0492.off
sofa/train/sofa_0493.off
sofa/train/sofa_0494.off
sofa/train/sofa_0495.off
sofa/train/sofa_0496.off
sofa/train/sofa_0497.off
sofa/train/sofa_0498.off
sofa/train/sofa_0499.off
sofa/train/sofa_0500.off
sofa/train/sofa_0501.off
sofa/train/sofa_0502.off
sofa/train/sofa_0503.off
sofa/train/sofa_0504.off
sofa/train/sofa_0505.off
sofa/train/sofa_0506.off
sofa/train/sofa_0507.off
sofa/train/sofa_0508.off
sofa/train/sofa_0509.off
sofa/train/sofa_0510.off
sofa/train/sofa_0511.off
sofa/train/sofa_0512.off
sofa/train/sofa_0513.off
sofa/train/sofa_0514.off
sofa/train/sofa_0515.off
sofa/train/sofa_0516.off
sofa/train/sofa_0517.off
sofa/train/sofa_0518.off
sofa/train/sofa_0519.off
sofa/train/sofa_0520.off
sofa/train/sofa_0521.off
sofa/train/sofa_0522.off
sofa/train/sofa_0523.off
sofa/train/sofa_0524.off
sofa/train/sofa_0525.off
sofa/train/sofa_0526.off
sofa/train/sofa_0527.off
sofa/train/sofa_0528.off
sofa/train/sofa_0529.off
sofa/train/sofa_0530.off
sofa/train/sofa_0531.off
sofa/train/sofa_0532.off
sofa/train/sofa_0533.off
sofa/train/sofa_0534.off
sofa/train/sofa_0535.off
sofa/train/sofa_0536.off
sofa/train/sofa_0537.off
sofa/train/sofa_0538.off
sofa/train/sofa_0539.off
sofa/train/sofa_0540.off
sofa/train/sofa_0541.off
sofa/train/sofa_0542.off
sofa/train/sofa_0543.off
sofa/train/sofa_0544.off
sofa/train/sofa_0545.off
sofa/train/sofa_0546.off
sofa/train/sofa_0547.off
sofa/train/sofa_0548.off
sofa/train/sofa_0549.off
sofa/train/sofa_0550.off
sofa/train/sofa_0551.off
sofa/train/sofa_0552.off
sofa/train/sofa_0553.off
sofa/train/sofa_0554.off
sofa/train/sofa_0555.off
sofa/train/sofa_0556.off
sofa/train/sofa_0557.off
sofa/train/sofa_0558.off
sofa/train/sofa_0559.off
sofa/train/sofa_0560.off
sofa/train/sofa_0561.off
sofa/train/sofa_0562.off
sofa/train/sofa_0563.off
sofa/train/sofa_0564.off
sofa/train/sofa_0565.off
sofa/train/sofa_0566.off
sofa/train/sofa_0567.off
sofa/train/sofa_0568.off
sofa/train/sofa_0569.off
sofa/train/sofa_0570.off
sofa/train/sofa_0571.off
sofa/train/sofa_0572.off
sofa/train/sofa_0573.off
sofa/train/sofa_0574.off
sofa/train/sofa_0575.off
sofa/train/sofa_0576.off
sofa/train/sofa_0577.off
sofa/train/sofa_0578.off
sofa/train/sofa_0579.off
sofa/train/sofa_0580.off
sofa/train/sofa_0581.off
sofa/train/sofa_0582.off
sofa/train/sofa_0583.off
sofa/train/sofa_0584.off
sofa/train/sofa_0585.off
sofa/train/sofa_0586.off
sofa/train/sofa_0587.off
sofa/train/sofa_0588.off
sofa/train/sofa_0589.off
sofa/train/sofa_0590.off
sofa/train/sofa_0591.off
sofa/train/sofa_0592.off
sofa/train/sofa_0593.off
sofa/train/sofa_0594.off
sofa/train/sofa_0595.off
sofa/train/sofa_0596.off
sofa/train/sofa_0597.off
sofa/train/sofa_0598.off
sofa/train/sofa_0599.off
sofa/train/sofa_0600.off
sofa/train/sofa_0601.off
sofa/train/sofa_0602.off
sofa/train/sofa_0603.off
sofa/train/sofa_0604.off
sofa/train/sofa_0605.off
sofa/train/sofa_0606.off
sofa/train/sofa_0607.off
sofa/train/sofa_0608.off
sofa/train/sofa_0609.off
sofa/train/sofa_0610.off
sofa/train/sofa_0611.off
sofa/train/sofa_0612.off
person/train/person_0001.off
person/train/person_0002.off
person/train/person_0003.off
person/train/person_0004.off
person/train/person_0005.off
person/train/person_0006.off
person/train/person_0007.off
person/train/person_0008.off
person/train/person_0009.off
person/train/person_0010.off
person/train/person_0011.off
person/train/person_0012.off
person/train/person_0013.off
person/train/person_0014.off
person/train/person_0015.off
person/train/person_0016.off
person/train/person_0017.off
person/train/person_0018.off
person/train/person_0019.off
person/train/person_0020.off
person/train/person_0021.off
person/train/person_0022.off
person/train/person_0023.off
person/train/person_0024.off
person/train/person_0025.off
person/train/person_0026.off
person/train/person_0027.off
person/train/person_0028.off
person/train/person_0029.off
person/train/person_0030.off
person/train/person_0031.off
person/train/person_0032.off
person/train/person_0033.off
person/train/person_0034.off
person/train/person_0035.off
person/train/person_0036.off
person/train/person_0037.off
person/train/person_0038.off
person/train/person_0039.off
person/train/person_0040.off
person/train/person_0041.off
person/train/person_0042.off
person/train/person_0043.off
person/train/person_0044.off
person/train/person_0045.off
person/train/person_0046.off
person/train/person_0047.off
person/train/person_0048.off
person/train/person_0049.off
person/train/person_0050.off
person/train/person_0051.off
person/train/person_0052.off
person/train/person_0053.off
person/train/person_0054.off
person/train/person_0055.off
person/train/person_0056.off
person/train/person_0057.off
person/train/person_0058.off
person/train/person_0059.off
person/train/person_0060.off
person/train/person_0061.off
person/train/person_0062.off
person/train/person_0063.off
person/train/person_0064.off
person/train/person_0065.off
person/train/person_0066.off
person/train/person_0067.off
person/train/person_0068.off
person/train/person_0069.off
person/train/person_0070.off
person/train/person_0071.off
person/train/person_0072.off
person/train/person_0073.off
person/train/person_0074.off
person/train/person_0075.off
person/train/person_0076.off
person/train/person_0077.off
person/train/person_0078.off
person/train/person_0079.off
person/train/person_0080.off
xbox/train/xbox_0001.off
xbox/train/xbox_0002.off
xbox/train/xbox_0003.off
xbox/train/xbox_0004.off
xbox/train/xbox_0005.off
xbox/train/xbox_0006.off
xbox/train/xbox_0007.off
xbox/train/xbox_0008.off
xbox/train/xbox_0009.off
xbox/train/xbox_0010.off
xbox/train/xbox_0011.off
xbox/train/xbox_0012.off
xbox/train/xbox_0013.off
xbox/train/xbox_0014.off
xbox/train/xbox_0015.off
xbox/train/xbox_0016.off
xbox/train/xbox_0017.off
xbox/train/xbox_0018.off
xbox/train/xbox_0019.off
xbox/train/xbox_0020.off
xbox/train/xbox_0021.off
xbox/train/xbox_0022.off
xbox/train/xbox_0023.off
xbox/train/xbox_0024.off
xbox/train/xbox_0025.off
xbox/train/xbox_0026.off
xbox/train/xbox_0027.off
xbox/train/xbox_0028.off
xbox/train/xbox_0029.off
xbox/train/xbox_0030.off
xbox/train/xbox_0031.off
xbox/train/xbox_0032.off
xbox/train/xbox_0033.off
xbox/train/xbox_0034.off
xbox/train/xbox_0035.off
xbox/train/xbox_0036.off
xbox/train/xbox_0037.off
xbox/train/xbox_0038.off
xbox/train/xbox_0039.off
xbox/train/xbox_0040.off
xbox/train/xbox_0041.off
xbox/train/xbox_0042.off
xbox/train/xbox_0043.off
xbox/train/xbox_0044.off
xbox/train/xbox_0045.off
xbox/train/xbox_0046.off
xbox/train/xbox_0047.off
xbox/train/xbox_0048.off
xbox/train/xbox_0049.off
xbox/train/xbox_0050.off
xbox/train/xbox_0051.off
xbox/train/xbox_0052.off
xbox/train/xbox_0053.off
xbox/train/xbox_0054.off
xbox/train/xbox_0055.off
xbox/train/xbox_0056.off
xbox/train/xbox_0057.off
xbox/train/xbox_0058.off
xbox/train/xbox_0059.off
xbox/train/xbox_0060.off
xbox/train/xbox_0061.off
xbox/train/xbox_0062.off
xbox/train/xbox_0063.off
xbox/train/xbox_0064.off
xbox/train/xbox_0065.off
xbox/train/xbox_0066.off
xbox/train/xbox_0067.off
xbox/train/xbox_0068.off
xbox/train/xbox_0069.off
xbox/train/xbox_0070.off
xbox/train/xbox_0071.off
xbox/train/xbox_0072.off
xbox/train/xbox_0073.off
xbox/train/xbox_0074.off
xbox/train/xbox_0075.off
xbox/train/xbox_0076.off
xbox/train/xbox_0077.off
xbox/train/xbox_0078.off
xbox/train/xbox_0079.off
xbox/train/xbox_0080.off
xbox/train/xbox_0081.off
xbox/train/xbox_0082.off
xbox/train/xbox_0083.off
xbox/train/xbox_0084.off
xbox/train/xbox_0085.off
xbox/train/xbox_0086.off
xbox/train/xbox_0087.off
xbox/train/xbox_0088.off
xbox/train/xbox_0089.off
xbox/train/xbox_0090.off
xbox/train/xbox_0091.off
xbox/train/xbox_0092.off
xbox/train/xbox_0093.off
stairs/train/stairs_0001.off
stairs/train/stairs_0002.off
stairs/train/stairs_0003.off
stairs/train/stairs_0004.off
stairs/train/stairs_0005.off
stairs/train/stairs_0006.off
stairs/train/stairs_0007.off
stairs/train/stairs_0008.off
stairs/train/stairs_0009.off
stairs/train/stairs_0010.off
stairs/train/stairs_0011.off
stairs/train/stairs_0012.off
stairs/train/stairs_0013.off
stairs/train/stairs_0014.off
stairs/train/stairs_0015.off
stairs/train/stairs_0016.off
stairs/train/stairs_0017.off
stairs/train/stairs_0018.off
stairs/train/stairs_0019.off
stairs/train/stairs_0020.off
stairs/train/stairs_0021.off
stairs/train/stairs_0022.off
stairs/train/stairs_0023.off
stairs/train/stairs_0024.off
stairs/train/stairs_0025.off
stairs/train/stairs_0026.off
stairs/train/stairs_0027.off
stairs/train/stairs_0028.off
stairs/train/stairs_0029.off
stairs/train/stairs_0030.off
stairs/train/stairs_0031.off
stairs/train/stairs_0032.off
stairs/train/stairs_0033.off
stairs/train/stairs_0034.off
stairs/train/stairs_0035.off
stairs/train/stairs_0036.off
stairs/train/stairs_0037.off
stairs/train/stairs_0038.off
stairs/train/stairs_0039.off
stairs/train/stairs_0040.off
stairs/train/stairs_0041.off
stairs/train/stairs_0042.off
stairs/train/stairs_0043.off
stairs/train/stairs_0044.off
stairs/train/stairs_0045.off
stairs/train/stairs_0046.off
stairs/train/stairs_0047.off
stairs/train/stairs_0048.off
stairs/train/stairs_0049.off
stairs/train/stairs_0050.off
stairs/train/stairs_0051.off
stairs/train/stairs_0052.off
stairs/train/stairs_0053.off
stairs/train/stairs_0054.off
stairs/train/stairs_0055.off
stairs/train/stairs_0056.off
stairs/train/stairs_0057.off
stairs/train/stairs_0058.off
stairs/train/stairs_0059.off
stairs/train/stairs_0060.off
stairs/train/stairs_0061.off
stairs/train/stairs_0062.off
stairs/train/stairs_0063.off
stairs/train/stairs_0064.off
stairs/train/stairs_0065.off
stairs/train/stairs_0066.off
stairs/train/stairs_0067.off
stairs/train/stairs_0068.off
stairs/train/stairs_0069.off
stairs/train/stairs_0070.off
stairs/train/stairs_0071.off
stairs/train/stairs_0072.off
stairs/train/stairs_0073.off
stairs/train/stairs_0074.off
stairs/train/stairs_0075.off
stairs/train/stairs_0076.off
stairs/train/stairs_0077.off
stairs/train/stairs_0078.off
stairs/train/stairs_0079.off
stairs/train/stairs_0080.off
stairs/train/stairs_0081.off
stairs/train/stairs_0082.off
stairs/train/stairs_0083.off
stairs/train/stairs_0084.off
stairs/train/stairs_0085.off
stairs/train/stairs_0086.off
stairs/train/stairs_0087.off
stairs/train/stairs_0088.off
stairs/train/stairs_0089.off
stairs/train/stairs_0090.off
stairs/train/stairs_0091.off
stairs/train/stairs_0092.off
stairs/train/stairs_0093.off
stairs/train/stairs_0094.off
stairs/train/stairs_0095.off
stairs/train/stairs_0096.off
stairs/train/stairs_0097.off
stairs/train/stairs_0098.off
stairs/train/stairs_0099.off
stairs/train/stairs_0100.off
stairs/train/stairs_0101.off
stairs/train/stairs_0102.off
stairs/train/stairs_0103.off
stairs/train/stairs_0104.off
stairs/train/stairs_0105.off
stairs/train/stairs_0106.off
stairs/train/stairs_0107.off
stairs/train/stairs_0108.off
stairs/train/stairs_0109.off
stairs/train/stairs_0110.off
stairs/train/stairs_0111.off
stairs/train/stairs_0112.off
cone/train/cone_0001.off
cone/train/cone_0002.off
cone/train/cone_0003.off
cone/train/cone_0004.off
cone/train/cone_0005.off
cone/train/cone_0006.off
cone/train/cone_0007.off
cone/train/cone_0008.off
cone/train/cone_0009.off
cone/train/cone_0010.off
cone/train/cone_0011.off
cone/train/cone_0012.off
cone/train/cone_0013.off
cone/train/cone_0014.off
cone/train/cone_0015.off
cone/train/cone_0016.off
cone/train/cone_0017.off
cone/train/cone_0018.off
cone/train/cone_0019.off
cone/train/cone_0020.off
cone/train/cone_0021.off
cone/train/cone_0022.off
cone/train/cone_0023.off
cone/train/cone_0024.off
cone/train/cone_0025.off
cone/train/cone_0026.off
cone/train/cone_0027.off
cone/train/cone_0028.off
cone/train/cone_0029.off
cone/train/cone_0030.off
cone/train/cone_0031.off
cone/train/cone_0032.off
cone/train/cone_0033.off
cone/train/cone_0034.off
cone/train/cone_0035.off
cone/train/cone_0036.off
cone/train/cone_0037.off
cone/train/cone_0038.off
cone/train/cone_0039.off
cone/train/cone_0040.off
cone/train/cone_0041.off
cone/train/cone_0042.off
cone/train/cone_0043.off
cone/train/cone_0044.off
cone/train/cone_0045.off
cone/train/cone_0046.off
cone/train/cone_0047.off
cone/train/cone_0048.off
cone/train/cone_0049.off
cone/train/cone_0050.off
cone/train/cone_0051.off
cone/train/cone_0052.off
cone/train/cone_0053.off
cone/train/cone_0054.off
cone/train/cone_0055.off
cone/train/cone_0056.off
cone/train/cone_0057.off
cone/train/cone_0058.off
cone/train/cone_0059.off
cone/train/cone_0060.off
cone/train/cone_0061.off
cone/train/cone_0062.off
cone/train/cone_0063.off
cone/train/cone_0064.off
cone/train/cone_0065.off
cone/train/cone_0066.off
cone/train/cone_0067.off
cone/train/cone_0068.off
cone/train/cone_0069.off
cone/train/cone_0070.off
cone/train/cone_0071.off
cone/train/cone_0072.off
cone/train/cone_0073.off
cone/train/cone_0074.off
cone/train/cone_0075.off
cone/train/cone_0076.off
cone/train/cone_0077.off
cone/train/cone_0078.off
cone/train/cone_0079.off
cone/train/cone_0080.off
cone/train/cone_0081.off
cone/train/cone_0082.off
cone/train/cone_0083.off
cone/train/cone_0084.off
cone/train/cone_0085.off
cone/train/cone_0086.off
cone/train/cone_0087.off
cone/train/cone_0088.off
cone/train/cone_0089.off
cone/train/cone_0090.off
cone/train/cone_0091.off
cone/train/cone_0092.off
cone/train/cone_0093.off
cone/train/cone_0094.off
cone/train/cone_0095.off
cone/train/cone_0096.off
cone/train/cone_0097.off
cone/train/cone_0098.off
cone/train/cone_0099.off
cone/train/cone_0100.off
cone/train/cone_0101.off
cone/train/cone_0102.off
cone/train/cone_0103.off
cone/train/cone_0104.off
cone/train/cone_0105.off
cone/train/cone_0106.off
cone/train/cone_0107.off
cone/train/cone_0108.off
cone/train/cone_0109.off
cone/train/cone_0110.off
cone/train/cone_0111.off
cone/train/cone_0112.off
cone/train/cone_0113.off
cone/train/cone_0114.off
cone/train/cone_0115.off
cone/train/cone_0116.off
cone/train/cone_0117.off
cone/train/cone_0118.off
cone/train/cone_0119.off
cone/train/cone_0120.off
cone/train/cone_0121.off
cone/train/cone_0122.off
cone/train/cone_0123.off
cone/train/cone_0124.off
cone/train/cone_0125.off
cone/train/cone_0126.off
cone/train/cone_0127.off
cone/train/cone_0128.off
cone/train/cone_0129.off
cone/train/cone_0130.off
cone/train/cone_0131.off
cone/train/cone_0132.off
cone/train/cone_0133.off
cone/train/cone_0134.off
cone/train/cone_0135.off
cone/train/cone_0136.off
cone/train/cone_0137.off
cone/train/cone_0138.off
cone/train/cone_0139.off
cone/train/cone_0140.off
cone/train/cone_0141.off
cone/train/cone_0142.off
cone/train/cone_0143.off
cone/train/cone_0144.off
cone/train/cone_0145.off
cone/train/cone_0146.off
cone/train/cone_0147.off
cone/train/cone_0148.off
cone/train/cone_0149.off
cone/train/cone_0150.off
cone/train/cone_0151.off
lamp/train/lamp_0001.off
lamp/train/lamp_0002.off
lamp/train/lamp_0003.off
lamp/train/lamp_0004.off
lamp/train/lamp_0005.off
lamp/train/lamp_0006.off
lamp/train/lamp_0007.off
lamp/train/lamp_0008.off
lamp/train/lamp_0009.off
lamp/train/lamp_0010.off
lamp/train/lamp_0011.off
lamp/train/lamp_0012.off
lamp/train/lamp_0013.off
lamp/train/lamp_0014.off
lamp/train/lamp_0015.off
lamp/train/lamp_0016.off
lamp/train/lamp_0017.off
lamp/train/lamp_0018.off
lamp/train/lamp_0019.off
lamp/train/lamp_0020.off
lamp/train/lamp_0021.off
lamp/train/lamp_0022.off
lamp/train/lamp_0023.off
lamp/train/lamp_0024.off
lamp/train/lamp_0025.off
lamp/train/lamp_0026.off
lamp/train/lamp_0027.off
lamp/train/lamp_0028.off
lamp/train/lamp_0029.off
lamp/train/lamp_0030.off
lamp/train/lamp_0031.off
lamp/train/lamp_0032.off
lamp/train/lamp_0033.off
lamp/train/lamp_0034.off
lamp/train/lamp_0035.off
lamp/train/lamp_0036.off
lamp/train/lamp_0037.off
lamp/train/lamp_0038.off
lamp/train/lamp_0039.off
lamp/train/lamp_0040.off
lamp/train/lamp_0041.off
lamp/train/lamp_0042.off
lamp/train/lamp_0043.off
lamp/train/lamp_0044.off
lamp/train/lamp_0045.off
lamp/train/lamp_0046.off
lamp/train/lamp_0047.off
lamp/train/lamp_0048.off
lamp/train/lamp_0049.off
lamp/train/lamp_0050.off
lamp/train/lamp_0051.off
lamp/train/lamp_0052.off
lamp/train/lamp_0053.off
lamp/train/lamp_0054.off
lamp/train/lamp_0055.off
lamp/train/lamp_0056.off
lamp/train/lamp_0057.off
lamp/train/lamp_0058.off
lamp/train/lamp_0059.off
lamp/train/lamp_0060.off
lamp/train/lamp_0061.off
lamp/train/lamp_0062.off
lamp/train/lamp_0063.off
lamp/train/lamp_0064.off
lamp/train/lamp_0065.off
lamp/train/lamp_0066.off
lamp/train/lamp_0067.off
lamp/train/lamp_0068.off
lamp/train/lamp_0069.off
lamp/train/lamp_0070.off
lamp/train/lamp_0071.off
lamp/train/lamp_0072.off
lamp/train/lamp_0073.off
lamp/train/lamp_0074.off
lamp/train/lamp_0075.off
lamp/train/lamp_0076.off
lamp/train/lamp_0077.off
lamp/train/lamp_0078.off
lamp/train/lamp_0079.off
lamp/train/lamp_0080.off
lamp/train/lamp_0081.off
lamp/train/lamp_0082.off
lamp/train/lamp_0083.off
lamp/train/lamp_0084.off
lamp/train/lamp_0085.off
lamp/train/lamp_0086.off
lamp/train/lamp_0087.off
lamp/train/lamp_0088.off
lamp/train/lamp_0089.off
lamp/train/lamp_0090.off
lamp/train/lamp_0091.off
lamp/train/lamp_0092.off
lamp/train/lamp_0093.off
lamp/train/lamp_0094.off
lamp/train/lamp_0095.off
lamp/train/lamp_0096.off
lamp/train/lamp_0097.off
lamp/train/lamp_0098.off
lamp/train/lamp_0099.off
lamp/train/lamp_0100.off
lamp/train/lamp_0101.off
lamp/train/lamp_0102.off
lamp/train/lamp_0103.off
lamp/train/lamp_0104.off
lamp/train/lamp_0105.off
lamp/train/lamp_0106.off
lamp/train/lamp_0107.off
lamp/train/lamp_0108.off
lamp/train/lamp_0109.off
lamp/train/lamp_0110.off
lamp/train/lamp_0111.off
lamp/train/lamp_0112.off
door/train/door_0001.off
door/train/door_0002.off
door/train/door_0003.off
door/train/door_0004.off
door/train/door_0005.off
door/train/door_0006.off
door/train/door_0007.off
door/train/door_0008.off
door/train/door_0009.off
door/train/door_0010.off
door/train/door_0011.off
door/train/door_0012.off
door/train/door_0013.off
door/train/door_0014.off
door/train/door_0015.off
door/train/door_0016.off
door/train/door_0017.off
door/train/door_0018.off
door/train/door_0019.off
door/train/door_0020.off
door/train/door_0021.off
door/train/door_0022.off
door/train/door_0023.off
door/train/door_0024.off
door/train/door_0025.off
door/train/door_0026.off
door/train/door_0027.off
door/train/door_0028.off
door/train/door_0029.off
door/train/door_0030.off
door/train/door_0031.off
door/train/door_0032.off
door/train/door_0033.off
door/train/door_0034.off
door/train/door_0035.off
door/train/door_0036.off
door/train/door_0037.off
door/train/door_0038.off
door/train/door_0039.off
door/train/door_0040.off
door/train/door_0041.off
door/train/door_0042.off
door/train/door_0043.off
door/train/door_0044.off
door/train/door_0045.off
door/train/door_0046.off
door/train/door_0047.off
door/train/door_0048.off
door/train/door_0049.off
door/train/door_0050.off
door/train/door_0051.off
door/train/door_0052.off
door/train/door_0053.off
door/train/door_0054.off
door/train/door_0055.off
door/train/door_0056.off
door/train/door_0057.off
door/train/door_0058.off
door/train/door_0059.off
door/train/door_0060.off
door/train/door_0061.off
door/train/door_0062.off
door/train/door_0063.off
door/train/door_0064.off
door/train/door_0065.off
door/train/door_0066.off
door/train/door_0067.off
door/train/door_0068.off
door/train/door_0069.off
door/train/door_0070.off
door/train/door_0071.off
door/train/door_0072.off
door/train/door_0073.off
door/train/door_0074.off
door/train/door_0075.off
door/train/door_0076.off
door/train/door_0077.off
door/train/door_0078.off
door/train/door_0079.off
door/train/door_0080.off
door/train/door_0081.off
door/train/door_0082.off
door/train/door_0083.off
door/train/door_0084.off
door/train/door_0085.off
door/train/door_0086.off
door/train/door_0087.off
door/train/door_0088.off
door/train/door_0089.off
door/train/door_0090.off
door/train/door_0091.off
door/train/door_0092.off
door/train/door_0093.off
door/train/door_0094.off
door/train/door_0095.off
door/train/door_0096.off
door/train/door_0097.off
door/train/door_0098.off
door/train/door_0099.off
range_hood/train/range_hood_0001.off
range_hood/train/range_hood_0002.off
range_hood/train/range_hood_0003.off
range_hood/train/range_hood_0004.off
range_hood/train/range_hood_0005.off
range_hood/train/range_hood_0006.off
range_hood/train/range_hood_0007.off
range_hood/train/range_hood_0008.off
range_hood/train/range_hood_0009.off
range_hood/train/range_hood_0010.off
range_hood/train/range_hood_0011.off
range_hood/train/range_hood_0012.off
range_hood/train/range_hood_0013.off
range_hood/train/range_hood_0014.off
range_hood/train/range_hood_0015.off
range_hood/train/range_hood_0016.off
range_hood/train/range_hood_0017.off
range_hood/train/range_hood_0018.off
range_hood/train/range_hood_0019.off
range_hood/train/range_hood_0020.off
range_hood/train/range_hood_0021.off
range_hood/train/range_hood_0022.off
range_hood/train/range_hood_0023.off
range_hood/train/range_hood_0024.off
range_hood/train/range_hood_0025.off
range_hood/train/range_hood_0026.off
range_hood/train/range_hood_0027.off
range_hood/train/range_hood_0028.off
range_hood/train/range_hood_0029.off
range_hood/train/range_hood_0030.off
range_hood/train/range_hood_0031.off
range_hood/train/range_hood_0032.off
range_hood/train/range_hood_0033.off
range_hood/train/range_hood_0034.off
range_hood/train/range_hood_0035.off
range_hood/train/range_hood_0036.off
range_hood/train/range_hood_0037.off
range_hood/train/range_hood_0038.off
range_hood/train/range_hood_0039.off
range_hood/train/range_hood_0040.off
range_hood/train/range_hood_0041.off
range_hood/train/range_hood_0042.off
range_hood/train/range_hood_0043.off
range_hood/train/range_hood_0044.off
range_hood/train/range_hood_0045.off
range_hood/train/range_hood_0046.off
range_hood/train/range_hood_0047.off
range_hood/train/range_hood_0048.off
range_hood/train/range_hood_0049.off
range_hood/train/range_hood_0050.off
range_hood/train/range_hood_0051.off
range_hood/train/range_hood_0052.off
range_hood/train/range_hood_0053.off
range_hood/train/range_hood_0054.off
range_hood/train/range_hood_0055.off
range_hood/train/range_hood_0056.off
range_hood/train/range_hood_0057.off
range_hood/train/range_hood_0058.off
range_hood/train/range_hood_0059.off
range_hood/train/range_hood_0060.off
range_hood/train/range_hood_0061.off
range_hood/train/range_hood_0062.off
range_hood/train/range_hood_0063.off
range_hood/train/range_hood_0064.off
range_hood/train/range_hood_0065.off
range_hood/train/range_hood_0066.off
range_hood/train/range_hood_0067.off
range_hood/train/range_hood_0068.off
range_hood/train/range_hood_0069.off
range_hood/train/range_hood_0070.off
range_hood/train/range_hood_0071.off
range_hood/train/range_hood_0072.off
range_hood/train/range_hood_0073.off
range_hood/train/range_hood_0074.off
range_hood/train/range_hood_0075.off
range_hood/train/range_hood_0076.off
range_hood/train/range_hood_0077.off
range_hood/train/range_hood_0078.off
range_hood/train/range_hood_0079.off
range_hood/train/range_hood_0080.off
range_hood/train/range_hood_0081.off
range_hood/train/range_hood_0082.off
range_hood/train/range_hood_0083.off
range_hood/train/range_hood_0084.off
range_hood/train/range_hood_0085.off
range_hood/train/range_hood_0086.off
range_hood/train/range_hood_0087.off
range_hood/train/range_hood_0088.off
range_hood/train/range_hood_0089.off
range_hood/train/range_hood_0090.off
range_hood/train/range_hood_0091.off
range_hood/train/range_hood_0092.off
range_hood/train/range_hood_0093.off
range_hood/train/range_hood_0094.off
range_hood/train/range_hood_0095.off
range_hood/train/range_hood_0096.off
range_hood/train/range_hood_0097.off
range_hood/train/range_hood_0098.off
range_hood/train/range_hood_0099.off
range_hood/train/range_hood_0100.off
range_hood/train/range_hood_0101.off
range_hood/train/range_hood_0102.off
range_hood/train/range_hood_0103.off
range_hood/train/range_hood_0104.off
flower_pot/train/flower_pot_0001.off
flower_pot/train/flower_pot_0002.off
flower_pot/train/flower_pot_0003.off
flower_pot/train/flower_pot_0004.off
flower_pot/train/flower_pot_0005.off
flower_pot/train/flower_pot_0006.off
flower_pot/train/flower_pot_0007.off
flower_pot/train/flower_pot_0008.off
flower_pot/train/flower_pot_0009.off
flower_pot/train/flower_pot_0010.off
flower_pot/train/flower_pot_0011.off
flower_pot/train/flower_pot_0012.off
flower_pot/train/flower_pot_0013.off
flower_pot/train/flower_pot_0014.off
flower_pot/train/flower_pot_0015.off
flower_pot/train/flower_pot_0016.off
flower_pot/train/flower_pot_0017.off
flower_pot/train/flower_pot_0018.off
flower_pot/train/flower_pot_0019.off
flower_pot/train/flower_pot_0020.off
flower_pot/train/flower_pot_0021.off
flower_pot/train/flower_pot_0022.off
flower_pot/train/flower_pot_0023.off
flower_pot/train/flower_pot_0024.off
flower_pot/train/flower_pot_0025.off
flower_pot/train/flower_pot_0026.off
flower_pot/train/flower_pot_0027.off
flower_pot/train/flower_pot_0028.off
flower_pot/train/flower_pot_0029.off
flower_pot/train/flower_pot_0030.off
flower_pot/train/flower_pot_0031.off
flower_pot/train/flower_pot_0032.off
flower_pot/train/flower_pot_0033.off
flower_pot/train/flower_pot_0034.off
flower_pot/train/flower_pot_0035.off
flower_pot/train/flower_pot_0036.off
flower_pot/train/flower_pot_0037.off
flower_pot/train/flower_pot_0038.off
flower_pot/train/flower_pot_0039.off
flower_pot/train/flower_pot_0040.off
flower_pot/train/flower_pot_0041.off
flower_pot/train/flower_pot_0042.off
flower_pot/train/flower_pot_0043.off
flower_pot/train/flower_pot_0044.off
flower_pot/train/flower_pot_0045.off
flower_pot/train/flower_pot_0046.off
flower_pot/train/flower_pot_0047.off
flower_pot/train/flower_pot_0048.off
flower_pot/train/flower_pot_0049.off
flower_pot/train/flower_pot_0050.off
flower_pot/train/flower_pot_0051.off
flower_pot/train/flower_pot_0052.off
flower_pot/train/flower_pot_0053.off
flower_pot/train/flower_pot_0054.off
flower_pot/train/flower_pot_0055.off
flower_pot/train/flower_pot_0056.off
flower_pot/train/flower_pot_0057.off
flower_pot/train/flower_pot_0058.off
flower_pot/train/flower_pot_0059.off
flower_pot/train/flower_pot_0060.off
flower_pot/train/flower_pot_0061.off
flower_pot/train/flower_pot_0062.off
flower_pot/train/flower_pot_0063.off
flower_pot/train/flower_pot_0064.off
flower_pot/train/flower_pot_0065.off
flower_pot/train/flower_pot_0066.off
flower_pot/train/flower_pot_0067.off
flower_pot/train/flower_pot_0068.off
flower_pot/train/flower_pot_0069.off
flower_pot/train/flower_pot_0070.off
flower_pot/train/flower_pot_0071.off
flower_pot/train/flower_pot_0072.off
flower_pot/train/flower_pot_0073.off
flower_pot/train/flower_pot_0074.off
flower_pot/train/flower_pot_0075.off
flower_pot/train/flower_pot_0076.off
flower_pot/train/flower_pot_0077.off
flower_pot/train/flower_pot_0078.off
flower_pot/train/flower_pot_0079.off
flower_pot/train/flower_pot_0080.off
flower_pot/train/flower_pot_0081.off
flower_pot/train/flower_pot_0082.off
flower_pot/train/flower_pot_0083.off
flower_pot/train/flower_pot_0084.off
flower_pot/train/flower_pot_0085.off
flower_pot/train/flower_pot_0086.off
flower_pot/train/flower_pot_0087.off
flower_pot/train/flower_pot_0088.off
flower_pot/train/flower_pot_0089.off
flower_pot/train/flower_pot_0090.off
flower_pot/train/flower_pot_0091.off
flower_pot/train/flower_pot_0092.off
flower_pot/train/flower_pot_0093.off
flower_pot/train/flower_pot_0094.off
flower_pot/train/flower_pot_0095.off
flower_pot/train/flower_pot_0096.off
flower_pot/train/flower_pot_0097.off
flower_pot/train/flower_pot_0098.off
flower_pot/train/flower_pot_0099.off
flower_pot/train/flower_pot_0100.off
flower_pot/train/flower_pot_0101.off
flower_pot/train/flower_pot_0102.off
flower_pot/train/flower_pot_0103.off
flower_pot/train/flower_pot_0104.off
flower_pot/train/flower_pot_0105.off
flower_pot/train/flower_pot_0106.off
flower_pot/train/flower_pot_0107.off
flower_pot/train/flower_pot_0108.off
flower_pot/train/flower_pot_0109.off
flower_pot/train/flower_pot_0110.off
flower_pot/train/flower_pot_0111.off
flower_pot/train/flower_pot_0112.off
flower_pot/train/flower_pot_0113.off
flower_pot/train/flower_pot_0114.off
flower_pot/train/flower_pot_0115.off
flower_pot/train/flower_pot_0116.off
flower_pot/train/flower_pot_0117.off
flower_pot/train/flower_pot_0118.off
flower_pot/train/flower_pot_0119.off
flower_pot/train/flower_pot_0120.off
flower_pot/train/flower_pot_0121.off
flower_pot/train/flower_pot_0122.off
flower_pot/train/flower_pot_0123.off
flower_pot/train/flower_pot_0124.off
flower_pot/train/flower_pot_0125.off
flower_pot/train/flower_pot_0126.off
flower_pot/train/flower_pot_0127.off
flower_pot/train/flower_pot_0128.off
flower_pot/train/flower_pot_0129.off
flower_pot/train/flower_pot_0130.off
flower_pot/train/flower_pot_0131.off
flower_pot/train/flower_pot_0132.off
flower_pot/train/flower_pot_0133.off
flower_pot/train/flower_pot_0134.off
flower_pot/train/flower_pot_0135.off
================================================
FILE: dataloader/split/train_scan2cad.txt
================================================
full_annotations_clean_train.json
================================================
FILE: dataloader/split/val_3dmatch.txt
================================================
sun3d-brown_bm_4-brown_bm_4
sun3d-harvard_c11-hv_c11_2
7-scenes-heads
rgbd-scenes-v2-scene_10
bundlefusion-office0
analysis-by-synthesis-apt2-kitchen
================================================
FILE: dataloader/split/val_kitti.txt
================================================
6
7
================================================
FILE: dataloader/split/val_modelnet40.txt
================================================
glass_box/train/glass_box_0155.off
glass_box/train/glass_box_0156.off
glass_box/train/glass_box_0157.off
glass_box/train/glass_box_0158.off
glass_box/train/glass_box_0159.off
glass_box/train/glass_box_0160.off
glass_box/train/glass_box_0161.off
glass_box/train/glass_box_0162.off
glass_box/train/glass_box_0163.off
glass_box/train/glass_box_0164.off
glass_box/train/glass_box_0165.off
glass_box/train/glass_box_0166.off
glass_box/train/glass_box_0167.off
glass_box/train/glass_box_0168.off
glass_box/train/glass_box_0169.off
glass_box/train/glass_box_0170.off
glass_box/train/glass_box_0171.off
laptop/train/laptop_0136.off
laptop/train/laptop_0137.off
laptop/train/laptop_0138.off
laptop/train/laptop_0139.off
laptop/train/laptop_0140.off
laptop/train/laptop_0141.off
laptop/train/laptop_0142.off
laptop/train/laptop_0143.off
laptop/train/laptop_0144.off
laptop/train/laptop_0145.off
laptop/train/laptop_0146.off
laptop/train/laptop_0147.off
laptop/train/laptop_0148.off
laptop/train/laptop_0149.off
sink/train/sink_0117.off
sink/train/sink_0118.off
sink/train/sink_0119.off
sink/train/sink_0120.off
sink/train/sink_0121.off
sink/train/sink_0122.off
sink/train/sink_0123.off
sink/train/sink_0124.off
sink/train/sink_0125.off
sink/train/sink_0126.off
sink/train/sink_0127.off
sink/train/sink_0128.off
night_stand/train/night_stand_0181.off
night_stand/train/night_stand_0182.off
night_stand/train/night_stand_0183.off
night_stand/train/night_stand_0184.off
night_stand/train/night_stand_0185.off
night_stand/train/night_stand_0186.off
night_stand/train/night_stand_0187.off
night_stand/train/night_stand_0188.off
night_stand/train/night_stand_0189.off
night_stand/train/night_stand_0190.off
night_stand/train/night_stand_0191.off
night_stand/train/night_stand_0192.off
night_stand/train/night_stand_0193.off
night_stand/train/night_stand_0194.off
night_stand/train/night_stand_0195.off
night_stand/train/night_stand_0196.off
night_stand/train/night_stand_0197.off
night_stand/train/night_stand_0198.off
night_stand/train/night_stand_0199.off
night_stand/train/night_stand_0200.off
car/train/car_0179.off
car/train/car_0180.off
car/train/car_0181.off
car/train/car_0182.off
car/train/car_0183.off
car/train/car_0184.off
car/train/car_0185.off
car/train/car_0186.off
car/train/car_0187.off
car/train/car_0188.off
car/train/car_0189.off
car/train/car_0190.off
car/train/car_0191.off
car/train/car_0192.off
car/train/car_0193.off
car/train/car_0194.off
car/train/car_0195.off
car/train/car_0196.off
car/train/car_0197.off
dresser/train/dresser_0181.off
dresser/train/dresser_0182.off
dresser/train/dresser_0183.off
dresser/train/dresser_0184.off
dresser/train/dresser_0185.off
dresser/train/dresser_0186.off
dresser/train/dresser_0187.off
dresser/train/dresser_0188.off
dresser/train/dresser_0189.off
dresser/train/dresser_0190.off
dresser/train/dresser_0191.off
dresser/train/dresser_0192.off
dresser/train/dresser_0193.off
dresser/train/dresser_0194.off
dresser/train/dresser_0195.off
dresser/train/dresser_0196.off
dresser/train/dresser_0197.off
dresser/train/dresser_0198.off
dresser/train/dresser_0199.off
dresser/train/dresser_0200.off
toilet/train/toilet_0311.off
toilet/train/toilet_0312.off
toilet/train/toilet_0313.off
toilet/train/toilet_0314.off
toilet/train/toilet_0315.off
toilet/train/toilet_0316.off
toilet/train/toilet_0317.off
toilet/train/toilet_0318.off
toilet/train/toilet_0319.off
toilet/train/toilet_0320.off
toilet/train/toilet_0321.off
toilet/train/toilet_0322.off
toilet/train/toilet_0323.off
toilet/train/toilet_0324.off
toilet/train/toilet_0325.off
toilet/train/toilet_0326.off
toilet/train/toilet_0327.off
toilet/train/toilet_0328.off
toilet/train/toilet_0329.off
toilet/train/toilet_0330.off
toilet/train/toilet_0331.off
toilet/train/toilet_0332.off
toilet/train/toilet_0333.off
toilet/train/toilet_0334.off
toilet/train/toilet_0335.off
toilet/train/toilet_0336.off
toilet/train/toilet_0337.off
toilet/train/toilet_0338.off
toilet/train/toilet_0339.off
toilet/train/toilet_0340.off
toilet/train/toilet_0341.off
toilet/train/toilet_0342.off
toilet/train/toilet_0343.off
toilet/train/toilet_0344.off
curtain/train/curtain_0126.off
curtain/train/curtain_0127.off
curtain/train/curtain_0128.off
curtain/train/curtain_0129.off
curtain/train/curtain_0130.off
curtain/train/curtain_0131.off
curtain/train/curtain_0132.off
curtain/train/curtain_0133.off
curtain/train/curtain_0134.off
curtain/train/curtain_0135.off
curtain/train/curtain_0136.off
curtain/train/curtain_0137.off
curtain/train/curtain_0138.off
wardrobe/train/wardrobe_0080.off
wardrobe/train/wardrobe_0081.off
wardrobe/train/wardrobe_0082.off
wardrobe/train/wardrobe_0083.off
wardrobe/train/wardrobe_0084.off
wardrobe/train/wardrobe_0085.off
wardrobe/train/wardrobe_0086.off
wardrobe/train/wardrobe_0087.off
stool/train/stool_0082.off
stool/train/stool_0083.off
stool/train/stool_0084.off
stool/train/stool_0085.off
stool/train/stool_0086.off
stool/train/stool_0087.off
stool/train/stool_0088.off
stool/train/stool_0089.off
stool/train/stool_0090.off
mantel/train/mantel_0257.off
mantel/train/mantel_0258.off
mantel/train/mantel_0259.off
mantel/train/mantel_0260.off
mantel/train/mantel_0261.off
mantel/train/mantel_0262.off
mantel/train/mantel_0263.off
mantel/train/mantel_0264.off
mantel/train/mantel_0265.off
mantel/train/mantel_0266.off
mantel/train/mantel_0267.off
mantel/train/mantel_0268.off
mantel/train/mantel_0269.off
mantel/train/mantel_0270.off
mantel/train/mantel_0271.off
mantel/train/mantel_0272.off
mantel/train/mantel_0273.off
mantel/train/mantel_0274.off
mantel/train/mantel_0275.off
mantel/train/mantel_0276.off
mantel/train/mantel_0277.off
mantel/train/mantel_0278.off
mantel/train/mantel_0279.off
mantel/train/mantel_0280.off
mantel/train/mantel_0281.off
mantel/train/mantel_0282.off
mantel/train/mantel_0283.off
mantel/train/mantel_0284.off
cup/train/cup_0073.off
cup/train/cup_0074.off
cup/train/cup_0075.off
cup/train/cup_0076.off
cup/train/cup_0077.off
cup/train/cup_0078.off
cup/train/cup_0079.off
radio/train/radio_0095.off
radio/train/radio_0096.off
radio/train/radio_0097.off
radio/train/radio_0098.off
radio/train/radio_0099.off
radio/train/radio_0100.off
radio/train/radio_0101.off
radio/train/radio_0102.off
radio/train/radio_0103.off
radio/train/radio_0104.off
airplane/train/airplane_0565.off
airplane/train/airplane_0566.off
airplane/train/airplane_0567.off
airplane/train/airplane_0568.off
airplane/train/airplane_0569.off
airplane/train/airplane_0570.off
airplane/train/airplane_0571.off
airplane/train/airplane_0572.off
airplane/train/airplane_0573.off
airplane/train/airplane_0574.off
airplane/train/airplane_0575.off
airplane/train/airplane_0576.off
airplane/train/airplane_0577.off
airplane/train/airplane_0578.off
airplane/train/airplane_0579.off
airplane/train/airplane_0580.off
airplane/train/airplane_0581.off
airplane/train/airplane_0582.off
airplane/train/airplane_0583.off
airplane/train/airplane_0584.off
airplane/train/airplane_0585.off
airplane/train/airplane_0586.off
airplane/train/airplane_0587.off
airplane/train/airplane_0588.off
airplane/train/airplane_0589.off
airplane/train/airplane_0590.off
airplane/train/airplane_0591.off
airplane/train/airplane_0592.off
airplane/train/airplane_0593.off
airplane/train/airplane_0594.off
airplane/train/airplane_0595.off
airplane/train/airplane_0596.off
airplane/train/airplane_0597.off
airplane/train/airplane_0598.off
airplane/train/airplane_0599.off
airplane/train/airplane_0600.off
airplane/train/airplane_0601.off
airplane/train/airplane_0602.off
airplane/train/airplane_0603.off
airplane/train/airplane_0604.off
airplane/train/airplane_0605.off
airplane/train/airplane_0606.off
airplane/train/airplane_0607.off
airplane/train/airplane_0608.off
airplane/train/airplane_0609.off
airplane/train/airplane_0610.off
airplane/train/airplane_0611.off
airplane/train/airplane_0612.off
airplane/train/airplane_0613.off
airplane/train/airplane_0614.off
airplane/train/airplane_0615.off
airplane/train/airplane_0616.off
airplane/train/airplane_0617.off
airplane/train/airplane_0618.off
airplane/train/airplane_0619.off
airplane/train/airplane_0620.off
airplane/train/airplane_0621.off
airplane/train/airplane_0622.off
airplane/train/airplane_0623.off
airplane/train/airplane_0624.off
airplane/train/airplane_0625.off
airplane/train/airplane_0626.off
table/train/table_0354.off
table/train/table_0355.off
table/train/table_0356.off
table/train/table_0357.off
table/train/table_0358.off
table/train/table_0359.off
table/train/table_0360.off
table/train/table_0361.off
table/train/table_0362.off
table/train/table_0363.off
table/train/table_0364.off
table/train/table_0365.off
table/train/table_0366.off
table/train/table_0367.off
table/train/table_0368.off
table/train/table_0369.off
table/train/table_0370.off
table/train/table_0371.off
table/train/table_0372.off
table/train/table_0373.off
table/train/table_0374.off
table/train/table_0375.off
table/train/table_0376.off
table/train/table_0377.off
table/train/table_0378.off
table/train/table_0379.off
table/train/table_0380.off
table/train/table_0381.off
table/train/table_0382.off
table/train/table_0383.off
table/train/table_0384.off
table/train/table_0385.off
table/train/table_0386.off
table/train/table_0387.off
table/train/table_0388.off
table/train/table_0389.off
table/train/table_0390.off
table/train/table_0391.off
table/train/table_0392.off
bench/train/bench_0157.off
bench/train/bench_0158.off
bench/train/bench_0159.off
bench/train/bench_0160.off
bench/train/bench_0161.off
bench/train/bench_0162.off
bench/train/bench_0163.off
bench/train/bench_0164.off
bench/train/bench_0165.off
bench/train/bench_0166.off
bench/train/bench_0167.off
bench/train/bench_0168.off
bench/train/bench_0169.off
bench/train/bench_0170.off
bench/train/bench_0171.off
bench/train/bench_0172.off
bench/train/bench_0173.off
plant/train/plant_0217.off
plant/train/plant_0218.off
plant/train/plant_0219.off
plant/train/plant_0220.off
plant/train/plant_0221.off
plant/train/plant_0222.off
plant/train/plant_0223.off
plant/train/plant_0224.off
plant/train/plant_0225.off
plant/train/plant_0226.off
plant/train/plant_0227.off
plant/train/plant_0228.off
plant/train/plant_0229.off
plant/train/plant_0230.off
plant/train/plant_0231.off
plant/train/plant_0232.off
plant/train/plant_0233.off
plant/train/plant_0234.off
plant/train/plant_0235.off
plant/train/plant_0236.off
plant/train/plant_0237.off
plant/train/plant_0238.off
plant/train/plant_0239.off
plant/train/plant_0240.off
chair/train/chair_0802.off
chair/train/chair_0803.off
chair/train/chair_0804.off
chair/train/chair_0805.off
chair/train/chair_0806.off
chair/train/chair_0807.off
chair/train/chair_0808.off
chair/train/chair_0809.off
chair/train/chair_0810.off
chair/train/chair_0811.off
chair/train/chair_0812.off
chair/train/chair_0813.off
chair/train/chair_0814.off
chair/train/chair_0815.off
chair/train/chair_0816.off
chair/train/chair_0817.off
chair/train/chair_0818.off
chair/train/chair_0819.off
chair/train/chair_0820.off
chair/train/chair_0821.off
chair/train/chair_0822.off
chair/train/chair_0823.off
chair/train/chair_0824.off
chair/train/chair_0825.off
chair/train/chair_0826.off
chair/train/chair_0827.off
chair/train/chair_0828.off
chair/train/chair_0829.off
chair/train/chair_0830.off
chair/train/chair_0831.off
chair/train/chair_0832.off
chair/train/chair_0833.off
chair/train/chair_0834.off
chair/train/chair_0835.off
chair/train/chair_0836.off
chair/train/chair_0837.off
chair/train/chair_0838.off
chair/train/chair_0839.off
chair/train/chair_0840.off
chair/train/chair_0841.off
chair/train/chair_0842.off
chair/train/chair_0843.off
chair/train/chair_0844.off
chair/train/chair_0845.off
chair/train/chair_0846.off
chair/train/chair_0847.off
chair/train/chair_0848.off
chair/train/chair_0849.off
chair/train/chair_0850.off
chair/train/chair_0851.off
chair/train/chair_0852.off
chair/train/chair_0853.off
chair/train/chair_0854.off
chair/train/chair_0855.off
chair/train/chair_0856.off
chair/train/chair_0857.off
chair/train/chair_0858.off
chair/train/chair_0859.off
chair/train/chair_0860.off
chair/train/chair_0861.off
chair/train/chair_0862.off
chair/train/chair_0863.off
chair/train/chair_0864.off
chair/train/chair_0865.off
chair/train/chair_0866.off
chair/train/chair_0867.off
chair/train/chair_0868.off
chair/train/chair_0869.off
chair/train/chair_0870.off
chair/train/chair_0871.off
chair/train/chair_0872.off
chair/train/chair_0873.off
chair/train/chair_0874.off
chair/train/chair_0875.off
chair/train/chair_0876.off
chair/train/chair_0877.off
chair/train/chair_0878.off
chair/train/chair_0879.off
chair/train/chair_0880.off
chair/train/chair_0881.off
chair/train/chair_0882.off
chair/train/chair_0883.off
chair/train/chair_0884.off
chair/train/chair_0885.off
chair/train/chair_0886.off
chair/train/chair_0887.off
chair/train/chair_0888.off
chair/train/chair_0889.off
vase/train/vase_0429.off
vase/train/vase_0430.off
vase/train/vase_0431.off
vase/train/vase_0432.off
vase/train/vase_0433.off
vase/train/vase_0434.off
vase/train/vase_0435.off
vase/train/vase_0436.off
vase/train/vase_0437.off
vase/train/vase_0438.off
vase/train/vase_0439.off
vase/train/vase_0440.off
vase/train/vase_0441.off
vase/train/vase_0442.off
vase/train/vase_0443.off
vase/train/vase_0444.off
vase/train/vase_0445.off
vase/train/vase_0446.off
vase/train/vase_0447.off
vase/train/vase_0448.off
vase/train/vase_0449.off
vase/train/vase_0450.off
vase/train/vase_0451.off
vase/train/vase_0452.off
vase/train/vase_0453.off
vase/train/vase_0454.off
vase/train/vase_0455.off
vase/train/vase_0456.off
vase/train/vase_0457.off
vase/train/vase_0458.off
vase/train/vase_0459.off
vase/train/vase_0460.off
vase/train/vase_0461.off
vase/train/vase_0462.off
vase/train/vase_0463.off
vase/train/vase_0464.off
vase/train/vase_0465.off
vase/train/vase_0466.off
vase/train/vase_0467.off
vase/train/vase_0468.off
vase/train/vase_0469.off
vase/train/vase_0470.off
vase/train/vase_0471.off
vase/train/vase_0472.off
vase/train/vase_0473.off
vase/train/vase_0474.off
vase/train/vase_0475.off
bookshelf/train/bookshelf_0516.off
bookshelf/train/bookshelf_0517.off
bookshelf/train/bookshelf_0518.off
bookshelf/train/bookshelf_0519.off
bookshelf/train/bookshelf_0520.off
bookshelf/train/bookshelf_0521.off
bookshelf/train/bookshelf_0522.off
bookshelf/train/bookshelf_0523.off
bookshelf/train/bookshelf_0524.off
bookshelf/train/bookshelf_0525.off
bookshelf/train/bookshelf_0526.off
bookshelf/train/bookshelf_0527.off
bookshelf/train/bookshelf_0528.off
bookshelf/train/bookshelf_0529.off
bookshelf/train/bookshelf_0530.off
bookshelf/train/bookshelf_0531.off
bookshelf/train/bookshelf_0532.off
bookshelf/train/bookshelf_0533.off
bookshelf/train/bookshelf_0534.off
bookshelf/train/bookshelf_0535.off
bookshelf/train/bookshelf_0536.off
bookshelf/train/bookshelf_0537.off
bookshelf/train/bookshelf_0538.off
bookshelf/train/bookshelf_0539.off
bookshelf/train/bookshelf_0540.off
bookshelf/train/bookshelf_0541.off
bookshelf/train/bookshelf_0542.off
bookshelf/train/bookshelf_0543.off
bookshelf/train/bookshelf_0544.off
bookshelf/train/bookshelf_0545.off
bookshelf/train/bookshelf_0546.off
bookshelf/train/bookshelf_0547.off
bookshelf/train/bookshelf_0548.off
bookshelf/train/bookshelf_0549.off
bookshelf/train/bookshelf_0550.off
bookshelf/train/bookshelf_0551.off
bookshelf/train/bookshelf_0552.off
bookshelf/train/bookshelf_0553.off
bookshelf/train/bookshelf_0554.off
bookshelf/train/bookshelf_0555.off
bookshelf/train/bookshelf_0556.off
bookshelf/train/bookshelf_0557.off
bookshelf/train/bookshelf_0558.off
bookshelf/train/bookshelf_0559.off
bookshelf/train/bookshelf_0560.off
bookshelf/train/bookshelf_0561.off
bookshelf/train/bookshelf_0562.off
bookshelf/train/bookshelf_0563.off
bookshelf/train/bookshelf_0564.off
bookshelf/train/bookshelf_0565.off
bookshelf/train/bookshelf_0566.off
bookshelf/train/bookshelf_0567.off
bookshelf/train/bookshelf_0568.off
bookshelf/train/bookshelf_0569.off
bookshelf/train/bookshelf_0570.off
bookshelf/train/bookshelf_0571.off
bookshelf/train/bookshelf_0572.off
guitar/train/guitar_0141.off
guitar/train/guitar_0142.off
guitar/train/guitar_0143.off
guitar/train/guitar_0144.off
guitar/train/guitar_0145.off
guitar/train/guitar_0146.off
guitar/train/guitar_0147.off
guitar/train/guitar_0148.off
guitar/train/guitar_0149.off
guitar/train/guitar_0150.off
guitar/train/guitar_0151.off
guitar/train/guitar_0152.off
guitar/train/guitar_0153.off
guitar/train/guitar_0154.off
guitar/train/guitar_0155.off
tv_stand/train/tv_stand_0242.off
tv_stand/train/tv_stand_0243.off
tv_stand/train/tv_stand_0244.off
tv_stand/train/tv_stand_0245.off
tv_stand/train/tv_stand_0246.off
tv_stand/train/tv_stand_0247.off
tv_stand/train/tv_stand_0248.off
tv_stand/train/tv_stand_0249.off
tv_stand/train/tv_stand_0250.off
tv_stand/train/tv_stand_0251.off
tv_stand/train/tv_stand_0252.off
tv_stand/train/tv_stand_0253.off
tv_stand/train/tv_stand_0254.off
tv_stand/train/tv_stand_0255.off
tv_stand/train/tv_stand_0256.off
tv_stand/train/tv_stand_0257.off
tv_stand/train/tv_stand_0258.off
tv_stand/train/tv_stand_0259.off
tv_stand/train/tv_stand_0260.off
tv_stand/train/tv_stand_0261.off
tv_stand/train/tv_stand_0262.off
tv_stand/train/tv_stand_0263.off
tv_stand/train/tv_stand_0264.off
tv_stand/train/tv_stand_0265.off
tv_stand/train/tv_stand_0266.off
tv_stand/train/tv_stand_0267.off
bathtub/train/bathtub_0097.off
bathtub/train/bathtub_0098.off
bathtub/train/bathtub_0099.off
bathtub/train/bathtub_0100.off
bathtub/train/bathtub_0101.off
bathtub/train/bathtub_0102.off
bathtub/train/bathtub_0103.off
bathtub/train/bathtub_0104.off
bathtub/train/bathtub_0105.off
bathtub/train/bathtub_0106.off
monitor/train/monitor_0420.off
monitor/train/monitor_0421.off
monitor/train/monitor_0422.off
monitor/train/monitor_0423.off
monitor/train/monitor_0424.off
monitor/train/monitor_0425.off
monitor/train/monitor_0426.off
monitor/train/monitor_0427.off
monitor/train/monitor_0428.off
monitor/train/monitor_0429.off
monitor/train/monitor_0430.off
monitor/train/monitor_0431.off
monitor/train/monitor_0432.off
monitor/train/monitor_0433.off
monitor/train/monitor_0434.off
monitor/train/monitor_0435.off
monitor/train/monitor_0436.off
monitor/train/monitor_0437.off
monitor/train/monitor_0438.off
monitor/train/monitor_0439.off
monitor/train/monitor_0440.off
monitor/train/monitor_0441.off
monitor/train/monitor_0442.off
monitor/train/monitor_0443.off
monitor/train/monitor_0444.off
monitor/train/monitor_0445.off
monitor/train/monitor_0446.off
monitor/train/monitor_0447.off
monitor/train/monitor_0448.off
monitor/train/monitor_0449.off
monitor/train/monitor_0450.off
monitor/train/monitor_0451.off
monitor/train/monitor_0452.off
monitor/train/monitor_0453.off
monitor/train/monitor_0454.off
monitor/train/monitor_0455.off
monitor/train/monitor_0456.off
monitor/train/monitor_0457.off
monitor/train/monitor_0458.off
monitor/train/monitor_0459.off
monitor/train/monitor_0460.off
monitor/train/monitor_0461.off
monitor/train/monitor_0462.off
monitor/train/monitor_0463.off
monitor/train/monitor_0464.off
monitor/train/monitor_0465.off
bottle/train/bottle_0303.off
bottle/train/bottle_0304.off
bottle/train/bottle_0305.off
bottle/train/bottle_0306.off
bottle/train/bottle_0307.off
bottle/train/bottle_0308.off
bottle/train/bottle_0309.off
bottle/train/bottle_0310.off
bottle/train/bottle_0311.off
bottle/train/bottle_0312.off
bottle/train/bottle_0313.off
bottle/train/bottle_0314.off
bottle/train/bottle_0315.off
bottle/train/bottle_0316.off
bottle/train/bottle_0317.off
bottle/train/bottle_0318.off
bottle/train/bottle_0319.off
bottle/train/bottle_0320.off
bottle/train/bottle_0321.off
bottle/train/bottle_0322.off
bottle/train/bottle_0323.off
bottle/train/bottle_0324.off
bottle/train/bottle_0325.off
bottle/train/bottle_0326.off
bottle/train/bottle_0327.off
bottle/train/bottle_0328.off
bottle/train/bottle_0329.off
bottle/train/bottle_0330.off
bottle/train/bottle_0331.off
bottle/train/bottle_0332.off
bottle/train/bottle_0333.off
bottle/train/bottle_0334.off
bottle/train/bottle_0335.off
bowl/train/bowl_0059.off
bowl/train/bowl_0060.off
bowl/train/bowl_0061.off
bowl/train/bowl_0062.off
bowl/train/bowl_0063.off
bowl/train/bowl_0064.off
keyboard/train/keyboard_0132.off
keyboard/train/keyboard_0133.off
keyboard/train/keyboard_0134.off
keyboard/train/keyboard_0135.off
keyboard/train/keyboard_0136.off
keyboard/train/keyboard_0137.off
keyboard/train/keyboard_0138.off
keyboard/train/keyboard_0139.off
keyboard/train/keyboard_0140.off
keyboard/train/keyboard_0141.off
keyboard/train/keyboard_0142.off
keyboard/train/keyboard_0143.off
keyboard/train/keyboard_0144.off
keyboard/train/keyboard_0145.off
desk/train/desk_0181.off
desk/train/desk_0182.off
desk/train/desk_0183.off
desk/train/desk_0184.off
desk/train/desk_0185.off
desk/train/desk_0186.off
desk/train/desk_0187.off
desk/train/desk_0188.off
desk/train/desk_0189.off
desk/train/desk_0190.off
desk/train/desk_0191.off
desk/train/desk_0192.off
desk/train/desk_0193.off
desk/train/desk_0194.off
desk/train/desk_0195.off
desk/train/desk_0196.off
desk/train/desk_0197.off
desk/train/desk_0198.off
desk/train/desk_0199.off
desk/train/desk_0200.off
bed/train/bed_0465.off
bed/train/bed_0466.off
bed/train/bed_0467.off
bed/train/bed_0468.off
bed/train/bed_0469.off
bed/train/bed_0470.off
bed/train/bed_0471.off
bed/train/bed_0472.off
bed/train/bed_0473.off
bed/train/bed_0474.off
bed/train/bed_0475.off
bed/train/bed_0476.off
bed/train/bed_0477.off
bed/train/bed_0478.off
bed/train/bed_0479.off
bed/train/bed_0480.off
bed/train/bed_0481.off
bed/train/bed_0482.off
bed/train/bed_0483.off
bed/train/bed_0484.off
bed/train/bed_0485.off
bed/train/bed_0486.off
bed/train/bed_0487.off
bed/train/bed_0488.off
bed/train/bed_0489.off
bed/train/bed_0490.off
bed/train/bed_0491.off
bed/train/bed_0492.off
bed/train/bed_0493.off
bed/train/bed_0494.off
bed/train/bed_0495.off
bed/train/bed_0496.off
bed/train/bed_0497.off
bed/train/bed_0498.off
bed/train/bed_0499.off
bed/train/bed_0500.off
bed/train/bed_0501.off
bed/train/bed_0502.off
bed/train/bed_0503.off
bed/train/bed_0504.off
bed/train/bed_0505.off
bed/train/bed_0506.off
bed/train/bed_0507.off
bed/train/bed_0508.off
bed/train/bed_0509.off
bed/train/bed_0510.off
bed/train/bed_0511.off
bed/train/bed_0512.off
bed/train/bed_0513.off
bed/train/bed_0514.off
bed/train/bed_0515.off
tent/train/tent_0148.off
tent/train/tent_0149.off
tent/train/tent_0150.off
tent/train/tent_0151.off
tent/train/tent_0152.off
tent/train/tent_0153.off
tent/train/tent_0154.off
tent/train/tent_0155.off
tent/train/tent_0156.off
tent/train/tent_0157.off
tent/train/tent_0158.off
tent/train/tent_0159.off
tent/train/tent_0160.off
tent/train/tent_0161.off
tent/train/tent_0162.off
tent/train/tent_0163.off
piano/train/piano_0209.off
piano/train/piano_0210.off
piano/train/piano_0211.off
piano/train/piano_0212.off
piano/train/piano_0213.off
piano/train/piano_0214.off
piano/train/piano_0215.off
piano/train/piano_0216.off
piano/train/piano_0217.off
piano/train/piano_0218.off
piano/train/piano_0219.off
piano/train/piano_0220.off
piano/train/piano_0221.off
piano/train/piano_0222.off
piano/train/piano_0223.off
piano/train/piano_0224.off
piano/train/piano_0225.off
piano/train/piano_0226.off
piano/train/piano_0227.off
piano/train/piano_0228.off
piano/train/piano_0229.off
piano/train/piano_0230.off
piano/train/piano_0231.off
sofa/train/sofa_0613.off
sofa/train/sofa_0614.off
sofa/train/sofa_0615.off
sofa/train/sofa_0616.off
sofa/train/sofa_0617.off
sofa/train/sofa_0618.off
sofa/train/sofa_0619.off
sofa/train/sofa_0620.off
sofa/train/sofa_0621.off
sofa/train/sofa_0622.off
sofa/train/sofa_0623.off
sofa/train/sofa_0624.off
sofa/train/sofa_0625.off
sofa/train/sofa_0626.off
sofa/train/sofa_0627.off
sofa/train/sofa_0628.off
sofa/train/sofa_0629.off
sofa/train/sofa_0630.off
sofa/train/sofa_0631.off
sofa/train/sofa_0632.off
sofa/train/sofa_0633.off
sofa/train/sofa_0634.off
sofa/train/sofa_0635.off
sofa/train/sofa_0636.off
sofa/train/sofa_0637.off
sofa/train/sofa_0638.off
sofa/train/sofa_0639.off
sofa/train/sofa_0640.off
sofa/train/sofa_0641.off
sofa/train/sofa_0642.off
sofa/train/sofa_0643.off
sofa/train/sofa_0644.off
sofa/train/sofa_0645.off
sofa/train/sofa_0646.off
sofa/train/sofa_0647.off
sofa/train/sofa_0648.off
sofa/train/sofa_0649.off
sofa/train/sofa_0650.off
sofa/train/sofa_0651.off
sofa/train/sofa_0652.off
sofa/train/sofa_0653.off
sofa/train/sofa_0654.off
sofa/train/sofa_0655.off
sofa/train/sofa_0656.off
sofa/train/sofa_0657.off
sofa/train/sofa_0658.off
sofa/train/sofa_0659.off
sofa/train/sofa_0660.off
sofa/train/sofa_0661.off
sofa/train/sofa_0662.off
sofa/train/sofa_0663.off
sofa/train/sofa_0664.off
sofa/train/sofa_0665.off
sofa/train/sofa_0666.off
sofa/train/sofa_0667.off
sofa/train/sofa_0668.off
sofa/train/sofa_0669.off
sofa/train/sofa_0670.off
sofa/train/sofa_0671.off
sofa/train/sofa_0672.off
sofa/train/sofa_0673.off
sofa/train/sofa_0674.off
sofa/train/sofa_0675.off
sofa/train/sofa_0676.off
sofa/train/sofa_0677.off
sofa/train/sofa_0678.off
sofa/train/sofa_0679.off
sofa/train/sofa_0680.off
person/train/person_0081.off
person/train/person_0082.off
person/train/person_0083.off
person/train/person_0084.off
person/train/person_0085.off
person/train/person_0086.off
person/train/person_0087.off
person/train/person_0088.off
xbox/train/xbox_0094.off
xbox/train/xbox_0095.off
xbox/train/xbox_0096.off
xbox/train/xbox_0097.off
xbox/train/xbox_0098.off
xbox/train/xbox_0099.off
xbox/train/xbox_0100.off
xbox/train/xbox_0101.off
xbox/train/xbox_0102.off
xbox/train/xbox_0103.off
stairs/train/stairs_0113.off
stairs/train/stairs_0114.off
stairs/train/stairs_0115.off
stairs/train/stairs_0116.off
stairs/train/stairs_0117.off
stairs/train/stairs_0118.off
stairs/train/stairs_0119.off
stairs/train/stairs_0120.off
stairs/train/stairs_0121.off
stairs/train/stairs_0122.off
stairs/train/stairs_0123.off
stairs/train/stairs_0124.off
cone/train/cone_0152.off
cone/train/cone_0153.off
cone/train/cone_0154.off
cone/train/cone_0155.off
cone/train/cone_0156.off
cone/train/cone_0157.off
cone/train/cone_0158.off
cone/train/cone_0159.off
cone/train/cone_0160.off
cone/train/cone_0161.off
cone/train/cone_0162.off
cone/train/cone_0163.off
cone/train/cone_0164.off
cone/train/cone_0165.off
cone/train/cone_0166.off
cone/train/cone_0167.off
lamp/train/lamp_0113.off
lamp/train/lamp_0114.off
lamp/train/lamp_0115.off
lamp/train/lamp_0116.off
lamp/train/lamp_0117.off
lamp/train/lamp_0118.off
lamp/train/lamp_0119.off
lamp/train/lamp_0120.off
lamp/train/lamp_0121.off
lamp/train/lamp_0122.off
lamp/train/lamp_0123.off
lamp/train/lamp_0124.off
door/train/door_0100.off
door/train/door_0101.off
door/train/door_0102.off
door/train/door_0103.off
door/train/door_0104.off
door/train/door_0105.off
door/train/door_0106.off
door/train/door_0107.off
door/train/door_0108.off
door/train/door_0109.off
range_hood/train/range_hood_0105.off
range_hood/train/range_hood_0106.off
range_hood/train/range_hood_0107.off
range_hood/train/range_hood_0108.off
range_hood/train/range_hood_0109.off
range_hood/train/range_hood_0110.off
range_hood/train/range_hood_0111.off
range_hood/train/range_hood_0112.off
range_hood/train/range_hood_0113.off
range_hood/train/range_hood_0114.off
range_hood/train/range_hood_0115.off
flower_pot/train/flower_pot_0136.off
flower_pot/train/flower_pot_0137.off
flower_pot/train/flower_pot_0138.off
flower_pot/train/flower_pot_0139.off
flower_pot/train/flower_pot_0140.off
flower_pot/train/flower_pot_0141.off
flower_pot/train/flower_pot_0142.off
flower_pot/train/flower_pot_0143.off
flower_pot/train/flower_pot_0144.off
flower_pot/train/flower_pot_0145.off
flower_pot/train/flower_pot_0146.off
flower_pot/train/flower_pot_0147.off
flower_pot/train/flower_pot_0148.off
flower_pot/train/flower_pot_0149.off
================================================
FILE: dataloader/split/val_scan2cad.txt
================================================
full_annotations_clean_val.json
================================================
FILE: dataloader/threedmatch_loader.py
================================================
# Copyright (c) Chris Choy (chrischoy@ai.stanford.edu) and Wei Dong (weidong@andrew.cmu.edu)
#
# Please cite the following papers if you use any part of the code.
# - Christopher Choy, Wei Dong, Vladlen Koltun, Deep Global Registration, CVPR 2020
# - Christopher Choy, Jaesik Park, Vladlen Koltun, Fully Convolutional Geometric Features, ICCV 2019
# - Christopher Choy, JunYoung Gwak, Silvio Savarese, 4D Spatio-Temporal ConvNets: Minkowski Convolutional Neural Networks, CVPR 2019
import glob
from dataloader.base_loader import *
from dataloader.transforms import *
from util.pointcloud import get_matching_indices, make_open3d_point_cloud
from util.file import read_trajectory
class IndoorPairDataset(PairDataset):
'''
Train dataset
'''
OVERLAP_RATIO = None
AUGMENT = None
def __init__(self,
phase,
transform=None,
random_rotation=True,
random_scale=True,
manual_seed=False,
config=None):
PairDataset.__init__(self, phase, transform, random_rotation, random_scale,
manual_seed, config)
self.root = root = config.threed_match_dir
self.use_xyz_feature = config.use_xyz_feature
logging.info(f"Loading the subset {phase} from {root}")
subset_names = open(self.DATA_FILES[phase]).read().split()
for name in subset_names:
fname = name + "*%.2f.txt" % self.OVERLAP_RATIO
fnames_txt = glob.glob(root + "/" + fname)
assert len(fnames_txt) > 0, f"Make sure that the path {root} has data {fname}"
for fname_txt in fnames_txt:
with open(fname_txt) as f:
content = f.readlines()
fnames = [x.strip().split() for x in content]
for fname in fnames:
self.files.append([fname[0], fname[1]])
def __getitem__(self, idx):
file0 = os.path.join(self.root, self.files[idx][0])
file1 = os.path.join(self.root, self.files[idx][1])
data0 = np.load(file0)
data1 = np.load(file1)
xyz0 = data0["pcd"]
xyz1 = data1["pcd"]
matching_search_voxel_size = self.matching_search_voxel_size
if self.random_scale and random.random() < 0.95:
scale = self.min_scale + \
(self.max_scale - self.min_scale) * random.random()
matching_search_voxel_size *= scale
xyz0 = scale * xyz0
xyz1 = scale * xyz1
if self.random_rotation:
T0 = sample_random_trans(xyz0, self.randg, self.rotation_range)
T1 = sample_random_trans(xyz1, self.randg, self.rotation_range)
trans = T1 @ np.linalg.inv(T0)
xyz0 = self.apply_transform(xyz0, T0)
xyz1 = self.apply_transform(xyz1, T1)
else:
trans = np.identity(4)
# Voxelization
xyz0_th = torch.from_numpy(xyz0)
xyz1_th = torch.from_numpy(xyz1)
sel0 = ME.utils.sparse_quantize(xyz0_th / self.voxel_size, return_index=True)
sel1 = ME.utils.sparse_quantize(xyz1_th / self.voxel_size, return_index=True)
# Make point clouds using voxelized points
pcd0 = make_open3d_point_cloud(xyz0[sel0])
pcd1 = make_open3d_point_cloud(xyz1[sel1])
# Select features and points using the returned voxelized indices
# 3DMatch color is not helpful
# pcd0.colors = o3d.utility.Vector3dVector(color0[sel0])
# pcd1.colors = o3d.utility.Vector3dVector(color1[sel1])
# Get matches
matches = get_matching_indices(pcd0, pcd1, trans, matching_search_voxel_size)
# Get features
npts0 = len(sel0)
npts1 = len(sel1)
feats_train0, feats_train1 = [], []
unique_xyz0_th = xyz0_th[sel0]
unique_xyz1_th = xyz1_th[sel1]
# xyz as feats
if self.use_xyz_feature:
feats_train0.append(unique_xyz0_th - unique_xyz0_th.mean(0))
feats_train1.append(unique_xyz1_th - unique_xyz1_th.mean(0))
else:
feats_train0.append(torch.ones((npts0, 1)))
feats_train1.append(torch.ones((npts1, 1)))
feats0 = torch.cat(feats_train0, 1)
feats1 = torch.cat(feats_train1, 1)
coords0 = torch.floor(unique_xyz0_th / self.voxel_size)
coords1 = torch.floor(unique_xyz1_th / self.voxel_size)
if self.transform:
coords0, feats0 = self.transform(coords0, feats0)
coords1, feats1 = self.transform(coords1, feats1)
extra_package = {'idx': idx, 'file0': file0, 'file1': file1}
return (unique_xyz0_th.float(),
unique_xyz1_th.float(), coords0.int(), coords1.int(), feats0.float(),
feats1.float(), matches, trans, extra_package)
class ThreeDMatchPairDataset03(IndoorPairDataset):
OVERLAP_RATIO = 0.3
DATA_FILES = {
'train': './dataloader/split/train_3dmatch.txt',
'val': './dataloader/split/val_3dmatch.txt',
'test': './dataloader/split/test_3dmatch.txt'
}
class ThreeDMatchPairDataset05(ThreeDMatchPairDataset03):
OVERLAP_RATIO = 0.5
class ThreeDMatchPairDataset07(ThreeDMatchPairDataset03):
OVERLAP_RATIO = 0.7
class ThreeDMatchTrajectoryDataset(PairDataset):
'''
Test dataset
'''
DATA_FILES = {
'train': './dataloader/split/train_3dmatch.txt',
'val': './dataloader/split/val_3dmatch.txt',
'test': './dataloader/split/test_3dmatch.txt'
}
def __init__(self,
phase,
transform=None,
random_rotation=True,
random_scale=True,
manual_seed=False,
scene_id=None,
config=None,
return_ply_names=False):
PairDataset.__init__(self, phase, transform, random_rotation, random_scale,
manual_seed, config)
self.root = config.threed_match_dir
subset_names = open(self.DATA_FILES[phase]).read().split()
if scene_id is not None:
subset_names = [subset_names[scene_id]]
for sname in subset_names:
traj_file = os.path.join(self.root, sname + '-evaluation/gt.log')
assert os.path.exists(traj_file)
traj = read_trajectory(traj_file)
for ctraj in traj:
i = ctraj.metadata[0]
j = ctraj.metadata[1]
T_gt = ctraj.pose
self.files.append((sname, i, j, T_gt))
self.return_ply_names = return_ply_names
def __getitem__(self, pair_index):
sname, i, j, T_gt = self.files[pair_index]
ply_name0 = os.path.join(self.root, sname, f'cloud_bin_{i}.ply')
ply_name1 = os.path.join(self.root, sname, f'cloud_bin_{j}.ply')
if self.return_ply_names:
return sname, ply_name0, ply_name1, T_gt
pcd0 = o3d.io.read_point_cloud(ply_name0)
pcd1 = o3d.io.read_point_cloud(ply_name1)
pcd0 = np.asarray(pcd0.points)
pcd1 = np.asarray(pcd1.points)
return sname, pcd0, pcd1, T_gt
================================================
FILE: dataloader/transforms.py
================================================
# Copyright (c) Chris Choy (chrischoy@ai.stanford.edu) and Wei Dong (weidong@andrew.cmu.edu)
#
# Please cite the following papers if you use any part of the code.
# - Christopher Choy, Wei Dong, Vladlen Koltun, Deep Global Registration, CVPR 2020
# - Christopher Choy, Jaesik Park, Vladlen Koltun, Fully Convolutional Geometric Features, ICCV 2019
# - Christopher Choy, JunYoung Gwak, Silvio Savarese, 4D Spatio-Temporal ConvNets: Minkowski Convolutional Neural Networks, CVPR 2019
import torch
import numpy as np
import random
from scipy.linalg import expm, norm
# Rotation matrix along axis with angle theta
def M(axis, theta):
return expm(np.cross(np.eye(3), axis / norm(axis) * theta))
def sample_random_trans(pcd, randg, rotation_range=360):
T = np.eye(4)
R = M(randg.rand(3) - 0.5, rotation_range * np.pi / 180.0 * (randg.rand(1) - 0.5))
T[:3, :3] = R
T[:3, 3] = R.dot(-np.mean(pcd, axis=0))
return T
class Compose:
def __init__(self, transforms):
self.transforms = transforms
def __call__(self, coords, feats):
for transform in self.transforms:
coords, feats = transform(coords, feats)
return coords, feats
class Jitter:
def __init__(self, mu=0, sigma=0.01):
self.mu = mu
self.sigma = sigma
def __call__(self, coords, feats):
if random.random() < 0.95:
feats += self.sigma * torch.randn(feats.shape[0], feats.shape[1])
if self.mu != 0:
feats += self.mu
return coords, feats
class ChromaticShift:
def __init__(self, mu=0, sigma=0.1):
self.mu = mu
self.sigma = sigma
def __call__(self, coords, feats):
if random.random() < 0.95:
feats[:, :3] += torch.randn(self.mu, self.sigma, (1, 3))
return coords, feats
================================================
FILE: demo.py
================================================
# Copyright (c) Chris Choy (chrischoy@ai.stanford.edu) and Wei Dong (weidong@andrew.cmu.edu)
#
# Please cite the following papers if you use any part of the code.
# - Christopher Choy, Wei Dong, Vladlen Koltun, Deep Global Registration, CVPR 2020
# - Christopher Choy, Jaesik Park, Vladlen Koltun, Fully Convolutional Geometric Features, ICCV 2019
# - Christopher Choy, JunYoung Gwak, Silvio Savarese, 4D Spatio-Temporal ConvNets: Minkowski Convolutional Neural Networks, CVPR 2019
import os
from urllib.request import urlretrieve
import open3d as o3d
from core.deep_global_registration import DeepGlobalRegistration
from config import get_config
BASE_URL = "http://node2.chrischoy.org/data/"
DOWNLOAD_LIST = [
(BASE_URL + "datasets/registration/", "redkitchen_000.ply"),
(BASE_URL + "datasets/registration/", "redkitchen_010.ply"),
(BASE_URL + "projects/DGR/", "ResUNetBN2C-feat32-3dmatch-v0.05.pth")
]
# Check if the weights and file exist and download
if not os.path.isfile('redkitchen_000.ply'):
print('Downloading weights and pointcloud files...')
for f in DOWNLOAD_LIST:
print(f"Downloading {f}")
urlretrieve(f[0] + f[1], f[1])
if __name__ == '__main__':
config = get_config()
if config.weights is None:
config.weights = DOWNLOAD_LIST[-1][-1]
# preprocessing
pcd0 = o3d.io.read_point_cloud(config.pcd0)
pcd0.estimate_normals()
pcd1 = o3d.io.read_point_cloud(config.pcd1)
pcd1.estimate_normals()
# registration
dgr = DeepGlobalRegistration(config)
T01 = dgr.register(pcd0, pcd1)
o3d.visualization.draw_geometries([pcd0, pcd1])
pcd0.transform(T01)
print(T01)
o3d.visualization.draw_geometries([pcd0, pcd1])
================================================
FILE: model/__init__.py
================================================
# Copyright (c) Chris Choy (chrischoy@ai.stanford.edu) and Wei Dong (weidong@andrew.cmu.edu)
#
# Please cite the following papers if you use any part of the code.
# - Christopher Choy, Wei Dong, Vladlen Koltun, Deep Global Registration, CVPR 2020
# - Christopher Choy, Jaesik Park, Vladlen Koltun, Fully Convolutional Geometric Features, ICCV 2019
# - Christopher Choy, JunYoung Gwak, Silvio Savarese, 4D Spatio-Temporal ConvNets: Minkowski Convolutional Neural Networks, CVPR 2019
import logging
import model.simpleunet as simpleunets
import model.resunet as resunets
import model.pyramidnet as pyramids
MODELS = []
def add_models(module):
MODELS.extend([getattr(module, a) for a in dir(module) if 'Net' in a or 'MLP' in a])
add_models(simpleunets)
add_models(resunets)
add_models(pyramids)
def load_model(name):
'''Creates and returns an instance of the model given its class name.
'''
# Find the model class from its name
all_models = MODELS
mdict = {model.__name__: model for model in all_models}
if name not in mdict:
logging.info(f'Invalid model index. You put {name}. Options are:')
# Display a list of valid model names
for model in all_models:
logging.info('\t* {}'.format(model.__name__))
return None
NetClass = mdict[name]
return NetClass
================================================
FILE: model/common.py
================================================
# Copyright (c) Chris Choy (chrischoy@ai.stanford.edu) and Wei Dong (weidong@andrew.cmu.edu)
#
# Please cite the following papers if you use any part of the code.
# - Christopher Choy, Wei Dong, Vladlen Koltun, Deep Global Registration, CVPR 2020
# - Christopher Choy, Jaesik Park, Vladlen Koltun, Fully Convolutional Geometric Features, ICCV 2019
# - Christopher Choy, JunYoung Gwak, Silvio Savarese, 4D Spatio-Temporal ConvNets: Minkowski Convolutional Neural Networks, CVPR 2019
import torch.nn as nn
import MinkowskiEngine as ME
def get_norm(norm_type, num_feats, bn_momentum=0.05, dimension=-1):
if norm_type == 'BN':
return ME.MinkowskiBatchNorm(num_feats, momentum=bn_momentum)
elif norm_type == 'IN':
return ME.MinkowskiInstanceNorm(num_feats)
elif norm_type == 'INBN':
return nn.Sequential(
ME.MinkowskiInstanceNorm(num_feats),
ME.MinkowskiBatchNorm(num_feats, momentum=bn_momentum))
else:
raise ValueError(f'Type {norm_type}, not defined')
def get_nonlinearity(non_type):
if non_type == 'ReLU':
return ME.MinkowskiReLU()
elif non_type == 'ELU':
# return ME.MinkowskiInstanceNorm(num_feats, dimension=dimension)
return ME.MinkowskiELU()
else:
raise ValueError(f'Type {non_type}, not defined')
================================================
FILE: model/pyramidnet.py
================================================
# Copyright (c) Chris Choy (chrischoy@ai.stanford.edu) and Wei Dong (weidong@andrew.cmu.edu)
#
# Please cite the following papers if you use any part of the code.
# - Christopher Choy, Wei Dong, Vladlen Koltun, Deep Global Registration, CVPR 2020
# - Christopher Choy, Jaesik Park, Vladlen Koltun, Fully Convolutional Geometric Features, ICCV 2019
# - Christopher Choy, JunYoung Gwak, Silvio Savarese, 4D Spatio-Temporal ConvNets: Minkowski Convolutional Neural Networks, CVPR 2019
import torch
import torch.nn as nn
import MinkowskiEngine as ME
from model.common import get_norm, get_nonlinearity
from model.residual_block import get_block, conv, conv_tr, conv_norm_non
class PyramidModule(ME.MinkowskiNetwork):
NONLINEARITY = 'ELU'
NORM_TYPE = 'BN'
REGION_TYPE = ME.RegionType.HYPER_CUBE
def __init__(self,
inc,
outc,
inner_inc,
inner_outc,
inner_module=None,
depth=1,
bn_momentum=0.05,
dimension=-1):
ME.MinkowskiNetwork.__init__(self, dimension)
self.depth = depth
self.conv = nn.Sequential(
conv_norm_non(
inc,
inner_inc,
3,
2,
dimension,
region_type=self.REGION_TYPE,
norm_type=self.NORM_TYPE,
nonlinearity=self.NONLINEARITY), *[
get_block(
self.NORM_TYPE,
inner_inc,
inner_inc,
bn_momentum=bn_momentum,
region_type=self.REGION_TYPE,
dimension=dimension) for d in range(depth)
])
self.inner_module = inner_module
self.convtr = nn.Sequential(
conv_tr(
in_channels=inner_outc,
out_channels=inner_outc,
kernel_size=3,
stride=2,
dilation=1,
has_bias=False,
region_type=self.REGION_TYPE,
dimension=dimension),
get_norm(
self.NORM_TYPE, inner_outc, bn_momentum=bn_momentum, dimension=dimension),
get_nonlinearity(self.NONLINEARITY))
self.cat_conv = conv_norm_non(
inner_outc + inc,
outc,
1,
1,
dimension,
norm_type=self.NORM_TYPE,
nonlinearity=self.NONLINEARITY)
def forward(self, x):
y = self.conv(x)
if self.inner_module:
y = self.inner_module(y)
y = self.convtr(y)
y = ME.cat(x, y)
return self.cat_conv(y)
class PyramidModuleINBN(PyramidModule):
NORM_TYPE = 'INBN'
class PyramidNet(ME.MinkowskiNetwork):
NORM_TYPE = 'BN'
NONLINEARITY = 'ELU'
PYRAMID_MODULE = PyramidModule
CHANNELS = [32, 64, 128, 128]
TR_CHANNELS = [64, 128, 128, 128]
DEPTHS = [1, 1, 1, 1]
# None b1, b2, b3, btr3, btr2
# 1 2 3 -3 -2 -1
REGION_TYPE = ME.RegionType.HYPER_CUBE
# To use the model, must call initialize_coords before forward pass.
# Once data is processed, call clear to reset the model before calling initialize_coords
def __init__(self,
in_channels=3,
out_channels=32,
bn_momentum=0.1,
conv1_kernel_size=3,
normalize_feature=False,
D=3):
ME.MinkowskiNetwork.__init__(self, D)
self.conv1_kernel_size = conv1_kernel_size
self.normalize_feature = normalize_feature
self.initialize_network(in_channels, out_channels, bn_momentum, D)
def initialize_network(self, in_channels, out_channels, bn_momentum, dimension):
NORM_TYPE = self.NORM_TYPE
NONLINEARITY = self.NONLINEARITY
CHANNELS = self.CHANNELS
TR_CHANNELS = self.TR_CHANNELS
DEPTHS = self.DEPTHS
REGION_TYPE = self.REGION_TYPE
self.conv = conv_norm_non(
in_channels,
CHANNELS[0],
kernel_size=self.conv1_kernel_size,
stride=1,
dimension=dimension,
bn_momentum=bn_momentum,
region_type=REGION_TYPE,
norm_type=NORM_TYPE,
nonlinearity=NONLINEARITY)
pyramid = None
for d in range(len(DEPTHS) - 1, 0, -1):
pyramid = self.PYRAMID_MODULE(
CHANNELS[d - 1],
TR_CHANNELS[d - 1],
CHANNELS[d],
TR_CHANNELS[d],
pyramid,
DEPTHS[d],
dimension=dimension)
self.pyramid = pyramid
self.final = nn.Sequential(
conv_norm_non(
TR_CHANNELS[0],
TR_CHANNELS[0],
kernel_size=3,
stride=1,
dimension=dimension),
conv(TR_CHANNELS[0], out_channels, 1, 1, dimension=dimension))
def forward(self, x):
out = self.conv(x)
out = self.pyramid(out)
out = self.final(out)
if self.normalize_feature:
return ME.SparseTensor(
out.F / (torch.norm(out.F, p=2, dim=1, keepdim=True) + 1e-8),
coords_key=out.coords_key,
coords_manager=out.coords_man)
else:
return out
class PyramidNet6(PyramidNet):
CHANNELS = [32, 64, 128, 192, 256, 256]
TR_CHANNELS = [64, 128, 192, 192, 256, 256]
DEPTHS = [1, 1, 1, 1, 1, 1]
class PyramidNet6NoBlock(PyramidNet6):
DEPTHS = [0, 0, 0, 0, 0, 0]
class PyramidNet6INBN(PyramidNet6):
NORM_TYPE = 'INBN'
PYRAMID_MODULE = PyramidModuleINBN
class PyramidNet6INBNNoBlock(PyramidNet6INBN):
NORM_TYPE = 'INBN'
class PyramidNet8(PyramidNet):
CHANNELS = [32, 64, 128, 128, 192, 192, 256, 256]
TR_CHANNELS = [64, 128, 128, 192, 192, 192, 256, 256]
DEPTHS = [1, 1, 1, 1, 1, 1, 1, 1]
class PyramidNet8INBN(PyramidNet8):
NORM_TYPE = 'INBN'
PYRAMID_MODULE = PyramidModuleINBN
================================================
FILE: model/residual_block.py
================================================
# Copyright (c) Chris Choy (chrischoy@ai.stanford.edu) and Wei Dong (weidong@andrew.cmu.edu)
#
# Please cite the following papers if you use any part of the code.
# - Christopher Choy, Wei Dong, Vladlen Koltun, Deep Global Registration, CVPR 2020
# - Christopher Choy, Jaesik Park, Vladlen Koltun, Fully Convolutional Geometric Features, ICCV 2019
# - Christopher Choy, JunYoung Gwak, Silvio Savarese, 4D Spatio-Temporal ConvNets: Minkowski Convolutional Neural Networks, CVPR 2019
import torch.nn as nn
from model.common import get_norm, get_nonlinearity
import MinkowskiEngine as ME
import MinkowskiEngine.MinkowskiFunctional as MEF
def conv(in_channels,
out_channels,
kernel_size=3,
stride=1,
dilation=1,
has_bias=False,
region_type=0,
dimension=3):
if not isinstance(region_type, ME.RegionType):
if region_type == 0:
region_type = ME.RegionType.HYPER_CUBE
elif region_type == 1:
region_type = ME.RegionType.HYPER_CROSS
else:
raise ValueError('Unsupported region type')
kernel_generator = ME.KernelGenerator(
kernel_size=kernel_size,
stride=stride,
dilation=dilation,
region_type=region_type,
dimension=dimension)
return ME.MinkowskiConvolution(
in_channels,
out_channels,
kernel_size=kernel_size,
stride=stride,
kernel_generator=kernel_generator,
dimension=dimension)
def conv_tr(in_channels,
out_channels,
kernel_size,
stride=1,
dilation=1,
has_bias=False,
region_type=ME.RegionType.HYPER_CUBE,
dimension=-1):
assert dimension > 0, 'Dimension must be a positive integer'
kernel_generator = ME.KernelGenerator(
kernel_size,
stride,
dilation,
is_transpose=True,
region_type=region_type,
dimension=dimension)
kernel_generator = ME.KernelGenerator(
kernel_size,
stride,
dilation,
is_transpose=True,
region_type=region_type,
dimension=dimension)
return ME.MinkowskiConvolutionTranspose(
in_channels=in_channels,
out_channels=out_channels,
kernel_size=kernel_size,
stride=stride,
dilation=dilation,
bias=has_bias,
kernel_generator=kernel_generator,
dimension=dimension)
class BasicBlockBase(nn.Module):
expansion = 1
NORM_TYPE = 'BN'
def __init__(self,
inplanes,
planes,
stride=1,
dilation=1,
downsample=None,
bn_momentum=0.1,
region_type=0,
D=3):
super(BasicBlockBase, self).__init__()
self.conv1 = conv(
inplanes,
planes,
kernel_size=3,
stride=stride,
dilation=dilation,
region_type=region_type,
dimension=D)
self.norm1 = get_norm(self.NORM_TYPE, planes, bn_momentum=bn_momentum, dimension=D)
self.conv2 = conv(
planes,
planes,
kernel_size=3,
stride=1,
dilation=dilation,
region_type=region_type,
dimension=D)
self.norm2 = get_norm(self.NORM_TYPE, planes, bn_momentum=bn_momentum, dimension=D)
self.downsample = downsample
def forward(self, x):
residual = x
out = self.conv1(x)
out = self.norm1(out)
out = MEF.relu(out)
out = self.conv2(out)
out = self.norm2(out)
if self.downsample is not None:
residual = self.downsample(x)
out += residual
out = MEF.relu(out)
return out
class BasicBlockBN(BasicBlockBase):
NORM_TYPE = 'BN'
class BasicBlockIN(BasicBlockBase):
NORM_TYPE = 'IN'
class BasicBlockINBN(BasicBlockBase):
NORM_TYPE = 'INBN'
def get_block(norm_type,
inplanes,
planes,
stride=1,
dilation=1,
downsample=None,
bn_momentum=0.1,
region_type=0,
dimension=3):
if norm_type == 'BN':
Block = BasicBlockBN
elif norm_type == 'IN':
Block = BasicBlockIN
elif norm_type == 'INBN':
Block = BasicBlockINBN
else:
raise ValueError(f'Type {norm_type}, not defined')
return Block(inplanes, planes, stride, dilation, downsample, bn_momentum, region_type,
dimension)
def conv_norm_non(inc,
outc,
kernel_size,
stride,
dimension,
bn_momentum=0.05,
region_type=ME.RegionType.HYPER_CUBE,
norm_type='BN',
nonlinearity='ELU'):
return nn.Sequential(
conv(
in_channels=inc,
out_channels=outc,
kernel_size=kernel_size,
stride=stride,
dilation=1,
has_bias=False,
region_type=region_type,
dimension=dimension),
get_norm(norm_type, outc, bn_momentum=bn_momentum, dimension=dimension),
get_nonlinearity(nonlinearity))
================================================
FILE: model/resunet.py
================================================
# Copyright (c) Chris Choy (chrischoy@ai.stanford.edu) and Wei Dong (weidong@andrew.cmu.edu)
#
# Please cite the following papers if you use any part of the code.
# - Christopher Choy, Wei Dong, Vladlen Koltun, Deep Global Registration, CVPR 2020
# - Christopher Choy, Jaesik Park, Vladlen Koltun, Fully Convolutional Geometric Features, ICCV 2019
# - Christopher Choy, JunYoung Gwak, Silvio Savarese, 4D Spatio-Temporal ConvNets: Minkowski Convolutional Neural Networks, CVPR 2019
import torch
import torch.nn as nn
import MinkowskiEngine as ME
import MinkowskiEngine.MinkowskiFunctional as MEF
from model.common import get_norm
from model.residual_block import conv, conv_tr, get_block
class ResUNet(ME.MinkowskiNetwork):
NORM_TYPE = None
BLOCK_NORM_TYPE = 'BN'
CHANNELS = [None, 32, 64, 128]
TR_CHANNELS = [None, 32, 64, 64]
REGION_TYPE = ME.RegionType.HYPER_CUBE
# To use the model, must call initialize_coords before forward pass.
# Once data is processed, call clear to reset the model before calling initialize_coords
def __init__(self,
in_channels=3,
out_channels=32,
bn_momentum=0.1,
conv1_kernel_size=3,
normalize_feature=False,
D=3):
ME.MinkowskiNetwork.__init__(self, D)
NORM_TYPE = self.NORM_TYPE
BLOCK_NORM_TYPE = self.BLOCK_NORM_TYPE
CHANNELS = self.CHANNELS
TR_CHANNELS = self.TR_CHANNELS
REGION_TYPE = self.REGION_TYPE
self.normalize_feature = normalize_feature
self.conv1 = ME.MinkowskiConvolution(
in_channels=in_channels,
out_channels=CHANNELS[1],
kernel_size=conv1_kernel_size,
stride=1,
dilation=1,
has_bias=False,
dimension=D)
self.norm1 = get_norm(NORM_TYPE, CHANNELS[1], bn_momentum=bn_momentum, dimension=D)
self.block1 = get_block(
BLOCK_NORM_TYPE,
CHANNELS[1],
CHANNELS[1],
bn_momentum=bn_momentum,
region_type=REGION_TYPE,
dimension=D)
self.conv2 = ME.MinkowskiConvolution(
in_channels=CHANNELS[1],
out_channels=CHANNELS[2],
kernel_size=3,
stride=2,
dilation=1,
has_bias=False,
dimension=D)
self.norm2 = get_norm(NORM_TYPE, CHANNELS[2], bn_momentum=bn_momentum, dimension=D)
self.block2 = get_block(
BLOCK_NORM_TYPE,
CHANNELS[2],
CHANNELS[2],
bn_momentum=bn_momentum,
region_type=REGION_TYPE,
dimension=D)
self.conv3 = ME.MinkowskiConvolution(
in_channels=CHANNELS[2],
out_channels=CHANNELS[3],
kernel_size=3,
stride=2,
dilation=1,
has_bias=False,
dimension=D)
self.norm3 = get_norm(NORM_TYPE, CHANNELS[3], bn_momentum=bn_momentum, dimension=D)
self.block3 = get_block(
BLOCK_NORM_TYPE,
CHANNELS[3],
CHANNELS[3],
bn_momentum=bn_momentum,
region_type=REGION_TYPE,
dimension=D)
self.conv3_tr = ME.MinkowskiConvolutionTranspose(
in_channels=CHANNELS[3],
out_channels=TR_CHANNELS[3],
kernel_size=3,
stride=2,
dilation=1,
has_bias=False,
dimension=D)
self.norm3_tr = get_norm(
NORM_TYPE, TR_CHANNELS[3], bn_momentum=bn_momentum, dimension=D)
self.block3_tr = get_block(
BLOCK_NORM_TYPE,
TR_CHANNELS[3],
TR_CHANNELS[3],
bn_momentum=bn_momentum,
region_type=REGION_TYPE,
dimension=D)
self.conv2_tr = ME.MinkowskiConvolutionTranspose(
in_channels=CHANNELS[2] + TR_CHANNELS[3],
out_channels=TR_CHANNELS[2],
kernel_size=3,
stride=2,
dilation=1,
has_bias=False,
dimension=D)
self.norm2_tr = get_norm(
NORM_TYPE, TR_CHANNELS[2], bn_momentum=bn_momentum, dimension=D)
self.block2_tr = get_block(
BLOCK_NORM_TYPE,
TR_CHANNELS[2],
TR_CHANNELS[2],
bn_momentum=bn_momentum,
region_type=REGION_TYPE,
dimension=D)
self.conv1_tr = ME.MinkowskiConvolution(
in_channels=CHANNELS[1] + TR_CHANNELS[2],
out_channels=TR_CHANNELS[1],
kernel_size=1,
stride=1,
dilation=1,
has_bias=False,
dimension=D)
# self.block1_tr = BasicBlockBN(TR_CHANNELS[1], TR_CHANNELS[1], bn_momentum=bn_momentum, D=D)
self.final = ME.MinkowskiConvolution(
in_channels=TR_CHANNELS[1],
out_channels=out_channels,
kernel_size=1,
stride=1,
dilation=1,
has_bias=True,
dimension=D)
def forward(self, x):
out_s1 = self.conv1(x)
out_s1 = self.norm1(out_s1)
out_s1 = self.block1(out_s1)
out = MEF.relu(out_s1)
out_s2 = self.conv2(out)
out_s2 = self.norm2(out_s2)
out_s2 = self.block2(out_s2)
out = MEF.relu(out_s2)
out_s4 = self.conv3(out)
out_s4 = self.norm3(out_s4)
out_s4 = self.block3(out_s4)
out = MEF.relu(out_s4)
out = self.conv3_tr(out)
out = self.norm3_tr(out)
out = self.block3_tr(out)
out_s2_tr = MEF.relu(out)
out = ME.cat(out_s2_tr, out_s2)
out = self.conv2_tr(out)
out = self.norm2_tr(out)
out = self.block2_tr(out)
out_s1_tr = MEF.relu(out)
out = ME.cat(out_s1_tr, out_s1)
out = self.conv1_tr(out)
out = MEF.relu(out)
out = self.final(out)
if self.normalize_feature:
return ME.SparseTensor(
out.F / (torch.norm(out.F, p=2, dim=1, keepdim=True) + 1e-8),
coords_key=out.coords_key,
coords_manager=out.coords_man)
else:
return out
class ResUNetBN(ResUNet):
NORM_TYPE = 'BN'
class ResUNetBNF(ResUNet):
NORM_TYPE = 'BN'
CHANNELS = [None, 16, 32, 64]
TR_CHANNELS = [None, 16, 32, 64]
class ResUNetBNFX(ResUNetBNF):
REGION_TYPE = ME.RegionType.HYPER_CROSS
class ResUNetSP(ME.MinkowskiNetwork):
NORM_TYPE = 'BN'
BLOCK_NORM_TYPE = 'BN'
CHANNELS = [None, 32, 64, 128]
TR_CHANNELS = [None, 32, 64, 64]
# None b1, b2, b3, btr3, btr2
# 1 2 3 -3 -2 -1
DEPTHS = [None, 1, 1, 1, 1, 1, None]
REGION_TYPE = ME.RegionType.HYPER_CUBE
# To use the model, must call initialize_coords before forward pass.
# Once data is processed, call clear to reset the model before calling initialize_coords
def __init__(self,
in_channels=3,
out_channels=32,
bn_momentum=0.1,
conv1_kernel_size=3,
normalize_feature=False,
D=3):
ME.MinkowskiNetwork.__init__(self, D)
NORM_TYPE = self.NORM_TYPE
BLOCK_NORM_TYPE = self.BLOCK_NORM_TYPE
CHANNELS = self.CHANNELS
TR_CHANNELS = self.TR_CHANNELS
DEPTHS = self.DEPTHS
REGION_TYPE = self.REGION_TYPE
self.normalize_feature = normalize_feature
self.conv1 = conv(
in_channels=in_channels,
out_channels=CHANNELS[1],
kernel_size=conv1_kernel_size,
stride=1,
dilation=1,
has_bias=False,
region_type=REGION_TYPE,
dimension=D)
self.norm1 = get_norm(NORM_TYPE, CHANNELS[1], bn_momentum=bn_momentum, dimension=D)
self.block1 = nn.Sequential(*[
get_block(
BLOCK_NORM_TYPE,
CHANNELS[1],
CHANNELS[1],
bn_momentum=bn_momentum,
region_type=REGION_TYPE,
dimension=D) for d in range(DEPTHS[1])
])
self.pool2 = ME.MinkowskiSumPooling(kernel_size=2, stride=2, dimension=D)
self.conv2 = conv(
in_channels=CHANNELS[1],
out_channels=CHANNELS[2],
kernel_size=1,
stride=1,
dilation=1,
has_bias=False,
dimension=D)
self.norm2 = get_norm(NORM_TYPE, CHANNELS[2], bn_momentum=bn_momentum, dimension=D)
self.block2 = nn.Sequential(*[
get_block(
BLOCK_NORM_TYPE,
CHANNELS[2],
CHANNELS[2],
bn_momentum=bn_momentum,
region_type=REGION_TYPE,
dimension=D) for d in range(DEPTHS[2])
])
self.pool3 = ME.MinkowskiSumPooling(kernel_size=2, stride=2, dimension=D)
self.conv3 = conv(
in_channels=CHANNELS[2],
out_channels=CHANNELS[3],
kernel_size=1,
stride=1,
dilation=1,
has_bias=False,
dimension=D)
self.norm3 = get_norm(NORM_TYPE, CHANNELS[3], bn_momentum=bn_momentum, dimension=D)
self.block3 = nn.Sequential(*[
get_block(
BLOCK_NORM_TYPE,
CHANNELS[3],
CHANNELS[3],
bn_momentum=bn_momentum,
region_type=REGION_TYPE,
dimension=D) for d in range(DEPTHS[3])
])
self.pool3_tr = ME.MinkowskiPoolingTranspose(kernel_size=2, stride=2, dimension=D)
self.conv3_tr = conv_tr(
in_channels=CHANNELS[3],
out_channels=TR_CHANNELS[3],
kernel_size=1,
stride=1,
dilation=1,
has_bias=False,
dimension=D)
self.norm3_tr = get_norm(
NORM_TYPE, TR_CHANNELS[3], bn_momentum=bn_momentum, dimension=D)
self.block3_tr = nn.Sequential(*[
get_block(
BLOCK_NORM_TYPE,
TR_CHANNELS[3],
TR_CHANNELS[3],
bn_momentum=bn_momentum,
region_type=REGION_TYPE,
dimension=D) for d in range(DEPTHS[-3])
])
self.pool2_tr = ME.MinkowskiPoolingTranspose(kernel_size=2, stride=2, dimension=D)
self.conv2_tr = conv_tr(
in_channels=CHANNELS[2] + TR_CHANNELS[3],
out_channels=TR_CHANNELS[2],
kernel_size=1,
stride=1,
dilation=1,
has_bias=False,
region_type=REGION_TYPE,
dimension=D)
self.norm2_tr = get_norm(
NORM_TYPE, TR_CHANNELS[2], bn_momentum=bn_momentum, dimension=D)
self.block2_tr = nn.Sequential(*[
get_block(
BLOCK_NORM_TYPE,
TR_CHANNELS[2],
TR_CHANNELS[2],
bn_momentum=bn_momentum,
region_type=REGION_TYPE,
dimension=D) for d in range(DEPTHS[-2])
])
self.conv1_tr = conv_tr(
in_channels=CHANNELS[1] + TR_CHANNELS[2],
out_channels=TR_CHANNELS[1],
kernel_size=1,
stride=1,
dilation=1,
has_bias=False,
region_type=REGION_TYPE,
dimension=D)
# self.block1_tr = BasicBlockBN(TR_CHANNELS[1], TR_CHANNELS[1], bn_momentum=bn_momentum, dimension=D)
self.final = conv(
in_channels=TR_CHANNELS[1],
out_channels=out_channels,
kernel_size=1,
stride=1,
dilation=1,
has_bias=True,
dimension=D)
def forward(self, x):
out_s1 = self.conv1(x)
out_s1 = self.norm1(out_s1)
out_s1 = MEF.relu(out_s1)
out_s1 = self.block1(out_s1)
out_s2 = self.pool2(out_s1)
out_s2 = self.conv2(out_s2)
out_s2 = self.norm2(out_s2)
out_s2 = MEF.relu(out_s2)
out_s2 = self.block2(out_s2)
out_s4 = self.pool3(out_s2)
out_s4 = self.conv3(out_s4)
out_s4 = self.norm3(out_s4)
out_s4 = MEF.relu(out_s4)
out_s4 = self.block3(out_s4)
out_s2t = self.pool3_tr(out_s4)
out_s2t = self.conv3_tr(out_s2t)
out_s2t = self.norm3_tr(out_s2t)
out_s2t = MEF.relu(out_s2t)
out_s2t = self.block3_tr(out_s2t)
out = ME.cat(out_s2t, out_s2)
out_s1t = self.conv2_tr(out)
out_s1t = self.pool3_tr(out_s1t)
out_s1t = self.norm2_tr(out_s1t)
out_s1t = MEF.relu(out_s1t)
out_s1t = self.block2_tr(out_s1t)
out = ME.cat(out_s1t, out_s1)
out = self.conv1_tr(out)
out = MEF.relu(out)
out = self.final(out)
if self.normalize_feature:
return ME.SparseTensor(
out.F / (torch.norm(out.F, p=2, dim=1, keepdim=True) + 1e-8),
coords_key=out.coords_key,
coords_manager=out.coords_man)
else:
return out
class ResUNetBNSPC(ResUNetSP):
REGION_TYPE = ME.RegionType.HYPER_CROSS
class ResUNetINBNSPC(ResUNetBNSPC):
NORM_TYPE = 'INBN'
class ResUNet2(ME.MinkowskiNetwork):
NORM_TYPE = None
BLOCK_NORM_TYPE = 'BN'
CHANNELS = [None, 32, 64, 128, 256]
TR_CHANNELS = [None, 32, 64, 64, 128]
REGION_TYPE = ME.RegionType.HYPER_CUBE
# To use the model, must call initialize_coords before forward pass.
# Once data is processed, call clear to reset the model before calling initialize_coords
def __init__(self,
in_channels=3,
out_channels=32,
bn_momentum=0.1,
conv1_kernel_size=3,
normalize_feature=False,
D=3):
ME.MinkowskiNetwork.__init__(self, D)
NORM_TYPE = self.NORM_TYPE
BLOCK_NORM_TYPE = self.BLOCK_NORM_TYPE
CHANNELS = self.CHANNELS
TR_CHANNELS = self.TR_CHANNELS
REGION_TYPE = self.REGION_TYPE
self.normalize_feature = normalize_feature
self.conv1 = conv(
in_channels=in_channels,
out_channels=CHANNELS[1],
kernel_size=conv1_kernel_size,
stride=1,
dilation=1,
has_bias=False,
region_type=REGION_TYPE,
dimension=D)
self.norm1 = get_norm(NORM_TYPE, CHANNELS[1], bn_momentum=bn_momentum, dimension=D)
self.block1 = get_block(
BLOCK_NORM_TYPE,
CHANNELS[1],
CHANNELS[1],
bn_momentum=bn_momentum,
region_type=REGION_TYPE,
dimension=D)
self.conv2 = conv(
in_channels=CHANNELS[1],
out_channels=CHANNELS[2],
kernel_size=3,
stride=2,
dilation=1,
has_bias=False,
region_type=REGION_TYPE,
dimension=D)
self.norm2 = get_norm(NORM_TYPE, CHANNELS[2], bn_momentum=bn_momentum, dimension=D)
self.block2 = get_block(
BLOCK_NORM_TYPE,
CHANNELS[2],
CHANNELS[2],
bn_momentum=bn_momentum,
region_type=REGION_TYPE,
dimension=D)
self.conv3 = conv(
in_channels=CHANNELS[2],
out_channels=CHANNELS[3],
kernel_size=3,
stride=2,
dilation=1,
has_bias=False,
region_type=REGION_TYPE,
dimension=D)
self.norm3 = get_norm(NORM_TYPE, CHANNELS[3], bn_momentum=bn_momentum, dimension=D)
self.block3 = get_block(
BLOCK_NORM_TYPE,
CHANNELS[3],
CHANNELS[3],
bn_momentum=bn_momentum,
region_type=REGION_TYPE,
dimension=D)
self.conv4 = conv(
in_channels=CHANNELS[3],
out_channels=CHANNELS[4],
kernel_size=3,
stride=2,
dilation=1,
has_bias=False,
region_type=REGION_TYPE,
dimension=D)
self.norm4 = get_norm(NORM_TYPE, CHANNELS[4], bn_momentum=bn_momentum, dimension=D)
self.block4 = get_block(
BLOCK_NORM_TYPE,
CHANNELS[4],
CHANNELS[4],
bn_momentum=bn_momentum,
region_type=REGION_TYPE,
dimension=D)
self.conv4_tr = conv_tr(
in_channels=CHANNELS[4],
out_channels=TR_CHANNELS[4],
kernel_size=3,
stride=2,
dilation=1,
has_bias=False,
region_type=REGION_TYPE,
dimension=D)
self.norm4_tr = get_norm(
NORM_TYPE, TR_CHANNELS[4], bn_momentum=bn_momentum, dimension=D)
self.block4_tr = get_block(
BLOCK_NORM_TYPE,
TR_CHANNELS[4],
TR_CHANNELS[4],
bn_momentum=bn_momentum,
region_type=REGION_TYPE,
dimension=D)
self.conv3_tr = conv_tr(
in_channels=CHANNELS[3] + TR_CHANNELS[4],
out_channels=TR_CHANNELS[3],
kernel_size=3,
stride=2,
dilation=1,
has_bias=False,
region_type=REGION_TYPE,
dimension=D)
self.norm3_tr = get_norm(
NORM_TYPE, TR_CHANNELS[3], bn_momentum=bn_momentum, dimension=D)
self.block3_tr = get_block(
BLOCK_NORM_TYPE,
TR_CHANNELS[3],
TR_CHANNELS[3],
bn_momentum=bn_momentum,
region_type=REGION_TYPE,
dimension=D)
self.conv2_tr = conv_tr(
in_channels=CHANNELS[2] + TR_CHANNELS[3],
out_channels=TR_CHANNELS[2],
kernel_size=3,
stride=2,
dilation=1,
has_bias=False,
region_type=REGION_TYPE,
dimension=D)
self.norm2_tr = get_norm(
NORM_TYPE, TR_CHANNELS[2], bn_momentum=bn_momentum, dimension=D)
self.block2_tr = get_block(
BLOCK_NORM_TYPE,
TR_CHANNELS[2],
TR_CHANNELS[2],
bn_momentum=bn_momentum,
region_type=REGION_TYPE,
dimension=D)
self.conv1_tr = conv(
in_channels=CHANNELS[1] + TR_CHANNELS[2],
out_channels=TR_CHANNELS[1],
kernel_size=1,
stride=1,
dilation=1,
has_bias=False,
dimension=D)
# self.block1_tr = BasicBlockBN(TR_CHANNELS[1], TR_CHANNELS[1], bn_momentum=bn_momentum, D=D)
self.final = ME.MinkowskiConvolution(
in_channels=TR_CHANNELS[1],
out_channels=out_channels,
kernel_size=1,
stride=1,
dilation=1,
bias=True,
dimension=D)
def forward(self, x):
out_s1 = self.conv1(x)
out_s1 = self.norm1(out_s1)
out_s1 = self.block1(out_s1)
out = MEF.relu(out_s1)
out_s2 = self.conv2(out)
out_s2 = self.norm2(out_s2)
out_s2 = self.block2(out_s2)
out = MEF.relu(out_s2)
out_s4 = self.conv3(out)
out_s4 = self.norm3(out_s4)
out_s4 = self.block3(out_s4)
out = MEF.relu(out_s4)
out_s8 = self.conv4(out)
out_s8 = self.norm4(out_s8)
out_s8 = self.block4(out_s8)
out = MEF.relu(out_s8)
out = self.conv4_tr(out)
out = self.norm4_tr(out)
out = self.block4_tr(out)
out_s4_tr = MEF.relu(out)
out = ME.cat(out_s4_tr, out_s4)
out = self.conv3_tr(out)
out = self.norm3_tr(out)
out = self.block3_tr(out)
out_s2_tr = MEF.relu(out)
out = ME.cat(out_s2_tr, out_s2)
out = self.conv2_tr(out)
out = self.norm2_tr(out)
out = self.block2_tr(out)
out_s1_tr = MEF.relu(out)
out = ME.cat(out_s1_tr, out_s1)
out = self.conv1_tr(out)
out = MEF.relu(out)
out = self.final(out)
if self.normalize_feature:
return ME.SparseTensor(
out.F / (torch.norm(out.F, p=2, dim=1, keepdim=True) + 1e-8),
coordinate_map_key=out.coordinate_map_key,
coordinate_manager=out.coordinate_manager)
else:
return out
class ResUNetBN2(ResUNet2):
NORM_TYPE = 'BN'
class ResUNetBN2B(ResUNet2):
NORM_TYPE = 'BN'
CHANNELS = [None, 32, 64, 128, 256]
TR_CHANNELS = [None, 64, 64, 64, 64]
class ResUNetBN2C(ResUNet2):
NORM_TYPE = 'BN'
CHANNELS = [None, 32, 64, 128, 256]
TR_CHANNELS = [None, 64, 64, 64, 128]
class ResUNetBN2CX(ResUNetBN2C):
REGION_TYPE = ME.RegionType.HYPER_CROSS
class ResUNetBN2D(ResUNet2):
NORM_TYPE = 'BN'
CHANNELS = [None, 32, 64, 128, 256]
TR_CHANNELS = [None, 64, 64, 128, 128]
class ResUNetBN2E(ResUNet2):
NORM_TYPE = 'BN'
CHANNELS = [None, 128, 128, 128, 256]
TR_CHANNELS = [None, 64, 128, 128, 128]
class ResUNetBN2F(ResUNet2):
NORM_TYPE = 'BN'
CHANNELS = [None, 16, 32, 64, 128]
TR_CHANNELS = [None, 16, 32, 64, 128]
class ResUNetBN2FX(ResUNetBN2F):
REGION_TYPE = ME.RegionType.HYPER_CROSS
class ResUNet2v2(ME.MinkowskiNetwork):
NORM_TYPE = None
BLOCK_NORM_TYPE = 'BN'
CHANNELS = [None, 32, 64, 128, 256]
TR_CHANNELS = [None, 32, 64, 64, 128]
# None b1, b2, b3, b4, btr4, btr3, btr2
# 1 2 3 4,-4,-3,-2,-1
DEPTHS = [None, 1, 1, 1, 1, 1, 1, 1, None]
REGION_TYPE = ME.RegionType.HYPER_CUBE
# To use the model, must call initialize_coords before forward pass.
# Once data is processed, call clear to reset the model before calling initialize_coords
def __init__(self,
in_channels=3,
out_channels=32,
bn_momentum=0.1,
conv1_kernel_size=3,
normalize_feature=False,
D=3):
ME.MinkowskiNetwork.__init__(self, D)
NORM_TYPE = self.NORM_TYPE
BLOCK_NORM_TYPE = self.BLOCK_NORM_TYPE
CHANNELS = self.CHANNELS
TR_CHANNELS = self.TR_CHANNELS
DEPTHS = self.DEPTHS
self.normalize_feature = normalize_feature
self.conv1 = ME.MinkowskiConvolution(
in_channels=in_channels,
out_channels=CHANNELS[1],
kernel_size=conv1_kernel_size,
stride=1,
dilation=1,
has_bias=False,
dimension=D)
self.norm1 = get_norm(NORM_TYPE, CHANNELS[1], bn_momentum=bn_momentum, dimension=D)
self.block1 = nn.Sequential(*[
get_block(
BLOCK_NORM_TYPE,
CHANNELS[1],
CHANNELS[1],
bn_momentum=bn_momentum,
dimension=D) for d in range(DEPTHS[1])
])
self.conv2 = ME.MinkowskiConvolution(
in_channels=CHANNELS[1],
out_channels=CHANNELS[2],
kernel_size=3,
stride=2,
dilation=1,
has_bias=False,
dimension=D)
self.norm2 = get_norm(NORM_TYPE, CHANNELS[2], bn_momentum=bn_momentum, dimension=D)
self.block2 = nn.Sequential(*[
get_block(
BLOCK_NORM_TYPE,
CHANNELS[2],
CHANNELS[2],
bn_momentum=bn_momentum,
dimension=D) for d in range(DEPTHS[2])
])
self.conv3 = ME.MinkowskiConvolution(
in_channels=CHANNELS[2],
out_channels=CHANNELS[3],
kernel_size=3,
stride=2,
dilation=1,
has_bias=False,
dimension=D)
self.norm3 = get_norm(NORM_TYPE, CHANNELS[3], bn_momentum=bn_momentum, dimension=D)
self.block3 = nn.Sequential(*[
get_block(
BLOCK_NORM_TYPE,
CHANNELS[3],
CHANNELS[3],
bn_momentum=bn_momentum,
dimension=D) for d in range(DEPTHS[3])
])
self.conv4 = ME.MinkowskiConvolution(
in_channels=CHANNELS[3],
out_channels=CHANNELS[4],
kernel_size=3,
stride=2,
dilation=1,
has_bias=False,
dimension=D)
self.norm4 = get_norm(NORM_TYPE, CHANNELS[4], bn_momentum=bn_momentum, dimension=D)
self.block4 = nn.Sequential(*[
get_block(
BLOCK_NORM_TYPE,
CHANNELS[4],
CHANNELS[4],
bn_momentum=bn_momentum,
dimension=D) for d in range(DEPTHS[4])
])
self.conv4_tr = ME.MinkowskiConvolutionTranspose(
in_channels=CHANNELS[4],
out_channels=TR_CHANNELS[4],
kernel_size=3,
stride=2,
dilation=1,
has_bias=False,
dimension=D)
self.norm4_tr = get_norm(
NORM_TYPE, TR_CHANNELS[4], bn_momentum=bn_momentum, dimension=D)
self.block4_tr = nn.Sequential(*[
get_block(
BLOCK_NORM_TYPE,
TR_CHANNELS[4],
TR_CHANNELS[4],
bn_momentum=bn_momentum,
dimension=D) for d in range(DEPTHS[-4])
])
self.conv3_tr = ME.MinkowskiConvolutionTranspose(
in_channels=CHANNELS[3] + TR_CHANNELS[4],
out_channels=TR_CHANNELS[3],
kernel_size=3,
stride=2,
dilation=1,
has_bias=False,
dimension=D)
self.norm3_tr = get_norm(
NORM_TYPE, TR_CHANNELS[3], bn_momentum=bn_momentum, dimension=D)
self.block3_tr = nn.Sequential(*[
get_block(
BLOCK_NORM_TYPE,
TR_CHANNELS[3],
TR_CHANNELS[3],
bn_momentum=bn_momentum,
dimension=D) for d in range(DEPTHS[-3])
])
self.conv2_tr = ME.MinkowskiConvolutionTranspose(
in_channels=CHANNELS[2] + TR_CHANNELS[3],
out_channels=TR_CHANNELS[2],
kernel_size=3,
stride=2,
dilation=1,
has_bias=False,
dimension=D)
self.norm2_tr = get_norm(
NORM_TYPE, TR_CHANNELS[2], bn_momentum=bn_momentum, dimension=D)
self.block2_tr = nn.Sequential(*[
get_block(
BLOCK_NORM_TYPE,
TR_CHANNELS[2],
TR_CHANNELS[2],
bn_momentum=bn_momentum,
dimension=D) for d in range(DEPTHS[-2])
])
self.conv1_tr = ME.MinkowskiConvolution(
in_channels=CHANNELS[1] + TR_CHANNELS[2],
out_channels=TR_CHANNELS[1],
kernel_size=1,
stride=1,
dilation=1,
has_bias=False,
dimension=D)
# self.block1_tr = BasicBlockBN(TR_CHANNELS[1], TR_CHANNELS[1], bn_momentum=bn_momentum, dimension=D)
self.final = ME.MinkowskiConvolution(
in_channels=TR_CHANNELS[1],
out_channels=out_channels,
kernel_size=1,
stride=1,
dilation=1,
has_bias=True,
dimension=D)
self.weight_initialization()
def weight_initialization(self):
for m in self.modules():
if isinstance(m, ME.MinkowskiConvolution):
ME.utils.kaiming_normal_(m.kernel, mode='fan_out', nonlinearity='relu')
if isinstance(m, ME.MinkowskiBatchNorm):
nn.init.constant_(m.bn.weight, 1)
nn.init.constant_(m.bn.bias, 0)
def forward(self, x): # Receptive field size
out_s1 = self.conv1(x) # 7
out_s1 = self.norm1(out_s1)
out_s1 = MEF.relu(out_s1)
out_s1 = self.block1(out_s1)
out_s2 = self.conv2(out_s1) # 7 + 2 * 2 = 11
out_s2 = self.norm2(out_s2)
out_s2 = MEF.relu(out_s2)
out_s2 = self.block2(out_s2) # 11 + 2 * (2 + 2) = 19
out_s4 = self.conv3(out_s2) # 19 + 4 * 2 = 27
out_s4 = self.norm3(out_s4)
out_s4 = MEF.relu(out_s4)
out_s4 = self.block3(out_s4) # 27 + 4 * (2 + 2) = 43
out_s8 = self.conv4(out_s4) # 43 + 8 * 2 = 59
out_s8 = self.norm4(out_s8)
out_s8 = MEF.relu(out_s8)
out_s8 = self.block4(out_s8) # 59 + 8 * (2 + 2) = 91
out = self.conv4_tr(out_s8) # 91 + 4 * 2 = 99
out = self.norm4_tr(out)
out = MEF.relu(out)
out = self.block4_tr(out) # 99 + 4 * (2 + 2) = 115
out = ME.cat(out, out_s4)
out = self.conv3_tr(out) # 115 + 2 * 2 = 119
out = self.norm3_tr(out)
out = MEF.relu(out)
out = self.block3_tr(out) # 119 + 2 * (2 + 2) = 127
out = ME.cat(out, out_s2)
out = self.conv2_tr(out) # 127 + 2 = 129
out = self.norm2_tr(out)
out = MEF.relu(out)
out = self.block2_tr(out) # 129 + 1 * (2 + 2) = 133
out = ME.cat(out, out_s1)
out = self.conv1_tr(out)
out = MEF.relu(out)
out = self.final(out)
if self.normalize_feature:
return ME.SparseTensor(
out.F / (torch.norm(out.F, p=2, dim=1, keepdim=True) + 1e-8),
coords_key=out.coords_key,
coords_manager=out.coords_man)
else:
return out
class ResUNetBN2v2(ResUNet2v2):
NORM_TYPE = 'BN'
class ResUNetBN2Bv2(ResUNet2v2):
NORM_TYPE = 'BN'
CHANNELS = [None, 32, 64, 128, 256]
TR_CHANNELS = [None, 64, 64, 64, 64]
class ResUNetBN2Cv2(ResUNet2v2):
NORM_TYPE = 'BN'
CHANNELS = [None, 32, 64, 128, 256]
TR_CHANNELS = [None, 64, 64, 64, 128]
class ResUNetBN2Dv2(ResUNet2v2):
NORM_TYPE = 'BN'
CHANNELS = [None, 32, 64, 128, 256]
TR_CHANNELS = [None, 64, 64, 128, 128]
class ResUNetBN2Ev2(ResUNet2v2):
NORM_TYPE = 'BN'
CHANNELS = [None, 128, 128, 128, 256]
TR_CHANNELS = [None, 64, 128, 128, 128]
class ResUNetBN2Fv2(ResUNet2v2):
NORM_TYPE = 'BN'
CHANNELS = [None, 16, 32, 64, 128]
TR_CHANNELS = [None, 16, 32, 64, 128]
class ResUNet2SP(ME.MinkowskiNetwork):
NORM_TYPE = None
BLOCK_NORM_TYPE = 'BN'
CHANNELS = [None, 32, 64, 128, 256]
TR_CHANNELS = [None, 32, 64, 64, 128]
REGION_TYPE = ME.RegionType.HYPER_CUBE
# To use the model, must call initialize_coords before forward pass.
# Once data is processed, call clear to reset the model before calling initialize_coords
def __init__(self,
in_channels=3,
out_channels=32,
bn_momentum=0.1,
conv1_kernel_size=3,
normalize_feature=False,
D=3):
ME.MinkowskiNetwork.__init__(self, D)
NORM_TYPE = self.NORM_TYPE
BLOCK_NORM_TYPE = self.BLOCK_NORM_TYPE
CHANNELS = self.CHANNELS
TR_CHANNELS = self.TR_CHANNELS
REGION_TYPE = self.REGION_TYPE
self.normalize_feature = normalize_feature
self.conv1 = conv(
in_channels=in_channels,
out_channels=CHANNELS[1],
kernel_size=conv1_kernel_size,
stride=1,
dilation=1,
has_bias=False,
region_type=ME.RegionType.HYPER_CUBE,
dimension=D)
self.norm1 = get_norm(NORM_TYPE, CHANNELS[1], bn_momentum=bn_momentum, dimension=D)
self.block1 = get_block(
BLOCK_NORM_TYPE,
CHANNELS[1],
CHANNELS[1],
bn_momentum=bn_momentum,
region_type=REGION_TYPE,
dimension=D)
self.pool2 = ME.MinkowskiSumPooling(kernel_size=2, stride=2, dimension=D)
self.conv2 = conv(
in_channels=CHANNELS[1],
out_channels=CHANNELS[2],
kernel_size=3,
stride=1,
dilation=1,
has_bias=False,
region_type=REGION_TYPE,
dimension=D)
self.norm2 = get_norm(NORM_TYPE, CHANNELS[2], bn_momentum=bn_momentum, dimension=D)
self.block2 = get_block(
BLOCK_NORM_TYPE,
CHANNELS[2],
CHANNELS[2],
bn_momentum=bn_momentum,
region_type=REGION_TYPE,
dimension=D)
self.pool3 = ME.MinkowskiSumPooling(kernel_size=2, stride=2, dimension=D)
self.conv3 = conv(
in_channels=CHANNELS[2],
out_channels=CHANNELS[3],
kernel_size=3,
stride=1,
dilation=1,
has_bias=False,
region_type=REGION_TYPE,
dimension=D)
self.norm3 = get_norm(NORM_TYPE, CHANNELS[3], bn_momentum=bn_momentum, dimension=D)
self.block3 = get_block(
BLOCK_NORM_TYPE,
CHANNELS[3],
CHANNELS[3],
bn_momentum=bn_momentum,
region_type=REGION_TYPE,
dimension=D)
self.pool4 = ME.MinkowskiSumPooling(kernel_size=2, stride=2, dimension=D)
self.conv4 = conv(
in_channels=CHANNELS[3],
out_channels=CHANNELS[4],
kernel_size=3,
stride=1,
dilation=1,
has_bias=False,
region_type=ME.RegionType.HYPER_CUBE,
dimension=D)
self.norm4 = get_norm(NORM_TYPE, CHANNELS[4], bn_momentum=bn_momentum, dimension=D)
self.block4 = get_block(
BLOCK_NORM_TYPE,
CHANNELS[4],
CHANNELS[4],
bn_momentum=bn_momentum,
region_type=ME.RegionType.HYPER_CUBE,
dimension=D)
self.conv4_tr = conv_tr(
in_channels=CHANNELS[4],
out_channels=TR_CHANNELS[4],
kernel_size=3,
stride=2,
dilation=1,
has_bias=False,
region_type=ME.RegionType.HYPER_CUBE,
dimension=D)
self.norm4_tr = get_norm(
NORM_TYPE, TR_CHANNELS[4], bn_momentum=bn_momentum, dimension=D)
self.block4_tr = get_block(
BLOCK_NORM_TYPE,
TR_CHANNELS[4],
TR_CHANNELS[4],
bn_momentum=bn_momentum,
region_type=REGION_TYPE,
dimension=D)
self.conv3_tr = conv_tr(
in_channels=CHANNELS[3] + TR_CHANNELS[4],
out_channels=TR_CHANNELS[3],
kernel_size=3,
stride=2,
dilation=1,
has_bias=False,
region_type=REGION_TYPE,
dimension=D)
self.norm3_tr = get_norm(
NORM_TYPE, TR_CHANNELS[3], bn_momentum=bn_momentum, dimension=D)
self.block3_tr = get_block(
BLOCK_NORM_TYPE,
TR_CHANNELS[3],
TR_CHANNELS[3],
bn_momentum=bn_momentum,
region_type=REGION_TYPE,
dimension=D)
self.conv2_tr = conv_tr(
in_channels=CHANNELS[2] + TR_CHANNELS[3],
out_channels=TR_CHANNELS[2],
kernel_size=3,
stride=2,
dilation=1,
has_bias=False,
region_type=REGION_TYPE,
dimension=D)
self.norm2_tr = get_norm(
NORM_TYPE, TR_CHANNELS[2], bn_momentum=bn_momentum, dimension=D)
self.block2_tr = get_block(
BLOCK_NORM_TYPE,
TR_CHANNELS[2],
TR_CHANNELS[2],
bn_momentum=bn_momentum,
region_type=REGION_TYPE,
dimension=D)
self.conv1_tr = conv(
in_channels=CHANNELS[1] + TR_CHANNELS[2],
out_channels=TR_CHANNELS[1],
kernel_size=1,
stride=1,
dilation=1,
has_bias=False,
dimension=D)
# self.block1_tr = BasicBlockBN(TR_CHANNELS[1], TR_CHANNELS[1], bn_momentum=bn_momentum, D=D)
self.final = ME.MinkowskiConvolution(
in_channels=TR_CHANNELS[1],
out_channels=out_channels,
kernel_size=1,
stride=1,
dilation=1,
has_bias=True,
dimension=D)
def forward(self, x):
out_s1 = self.conv1(x)
out_s1 = self.norm1(out_s1)
out_s1 = self.block1(out_s1)
out = MEF.relu(out_s1)
out_s2 = self.pool2(out)
out_s2 = self.conv2(out_s2)
out_s2 = self.norm2(out_s2)
out_s2 = self.block2(out_s2)
out = MEF.relu(out_s2)
out_s4 = self.pool3(out)
out_s4 = self.conv3(out_s4)
out_s4 = self.norm3(out_s4)
out_s4 = self.block3(out_s4)
out = MEF.relu(out_s4)
out_s8 = self.pool4(out)
out_s8 = self.conv4(out_s8)
out_s8 = self.norm4(out_s8)
out_s8 = self.block4(out_s8)
out = MEF.relu(out_s8)
out = self.conv4_tr(out)
out = self.norm4_tr(out)
out = self.block4_tr(out)
out_s4_tr = MEF.relu(out)
out = ME.cat(out_s4_tr, out_s4)
out = self.conv3_tr(out)
out = self.norm3_tr(out)
out = self.block3_tr(out)
out_s2_tr = MEF.relu(out)
out = ME.cat(out_s2_tr, out_s2)
out = self.conv2_tr(out)
out = self.norm2_tr(out)
out = self.block2_tr(out)
out_s1_tr = MEF.relu(out)
out = ME.cat(out_s1_tr, out_s1)
out = self.conv1_tr(out)
out = MEF.relu(out)
out = self.final(out)
if self.normalize_feature:
return ME.SparseTensor(
out.F / (torch.norm(out.F, p=2, dim=1, keepdim=True) + 1e-8),
coords_key=out.coords_key,
coords_manager=out.coords_man)
else:
return out
class ResUNetBN2SPC(ResUNet2SP):
NORM_TYPE = 'BN'
CHANNELS = [None, 32, 64, 128, 256]
TR_CHANNELS = [None, 64, 64, 64, 128]
class ResUNetBN2SPCX(ResUNetBN2SPC):
REGION_TYPE = ME.RegionType.HYPER_CROSS
================================================
FILE: model/simpleunet.py
================================================
# Copyright (c) Chris Choy (chrischoy@ai.stanford.edu) and Wei Dong (weidong@andrew.cmu.edu)
#
# Please cite the following papers if you use any part of the code.
# - Christopher Choy, Wei Dong, Vladlen Koltun, Deep Global Registration, CVPR 2020
# - Christopher Choy, Jaesik Park, Vladlen Koltun, Fully Convolutional Geometric Features, ICCV 2019
# - Christopher Choy, JunYoung Gwak, Silvio Savarese, 4D Spatio-Temporal ConvNets: Minkowski Convolutional Neural Networks, CVPR 2019
import torch
import MinkowskiEngine as ME
import MinkowskiEngine.MinkowskiFunctional as MEF
from model.common import get_norm
class SimpleNet(ME.MinkowskiNetwork):
NORM_TYPE = None
CHANNELS = [None, 32, 64, 128]
TR_CHANNELS = [None, 32, 32, 64]
# To use the model, must call initialize_coords before forward pass.
# Once data is processed, call clear to reset the model before calling initialize_coords
def __init__(self,
in_channels=3,
out_channels=32,
bn_momentum=0.1,
conv1_kernel_size=3,
normalize_feature=False,
D=3):
super(SimpleNet, self).__init__(D)
NORM_TYPE = self.NORM_TYPE
CHANNELS = self.CHANNELS
TR_CHANNELS = self.TR_CHANNELS
self.normalize_feature = normalize_feature
self.conv1 = ME.MinkowskiConvolution(
in_channels=in_channels,
out_channels=CHANNELS[1],
kernel_size=conv1_kernel_size,
stride=1,
dilation=1,
has_bias=False,
dimension=D)
self.norm1 = get_norm(NORM_TYPE, CHANNELS[1], bn_momentum=bn_momentum, D=D)
self.conv2 = ME.MinkowskiConvolution(
in_channels=CHANNELS[1],
out_channels=CHANNELS[2],
kernel_size=3,
stride=2,
dilation=1,
has_bias=False,
dimension=D)
self.norm2 = get_norm(NORM_TYPE, CHANNELS[2], bn_momentum=bn_momentum, D=D)
self.conv3 = ME.MinkowskiConvolution(
in_channels=CHANNELS[2],
out_channels=CHANNELS[3],
kernel_size=3,
stride=2,
dilation=1,
has_bias=False,
dimension=D)
self.norm3 = get_norm(NORM_TYPE, CHANNELS[3], bn_momentum=bn_momentum, D=D)
self.conv3_tr = ME.MinkowskiConvolutionTranspose(
in_channels=CHANNELS[3],
out_channels=TR_CHANNELS[3],
kernel_size=3,
stride=2,
dilation=1,
has_bias=False,
dimension=D)
self.norm3_tr = get_norm(NORM_TYPE, TR_CHANNELS[3], bn_momentum=bn_momentum, D=D)
self.conv2_tr = ME.MinkowskiConvolutionTranspose(
in_channels=CHANNELS[2] + TR_CHANNELS[3],
out_channels=TR_CHANNELS[2],
kernel_size=3,
stride=2,
dilation=1,
has_bias=False,
dimension=D)
self.norm2_tr = get_norm(NORM_TYPE, TR_CHANNELS[2], bn_momentum=bn_momentum, D=D)
self.conv1_tr = ME.MinkowskiConvolution(
in_channels=CHANNELS[1] + TR_CHANNELS[2],
out_channels=TR_CHANNELS[1],
kernel_size=3,
stride=1,
dilation=1,
has_bias=False,
dimension=D)
self.norm1_tr = get_norm(NORM_TYPE, TR_CHANNELS[1], bn_momentum=bn_momentum, D=D)
self.final = ME.MinkowskiConvolution(
in_channels=TR_CHANNELS[1],
out_channels=out_channels,
kernel_size=1,
stride=1,
dilation=1,
has_bias=True,
dimension=D)
def forward(self, x):
out_s1 = self.conv1(x)
out_s1 = self.norm1(out_s1)
out = MEF.relu(out_s1)
out_s2 = self.conv2(out)
out_s2 = self.norm2(out_s2)
out = MEF.relu(out_s2)
out_s4 = self.conv3(out)
out_s4 = self.norm3(out_s4)
out = MEF.relu(out_s4)
out = self.conv3_tr(out)
out = self.norm3_tr(out)
out_s2_tr = MEF.relu(out)
out = ME.cat(out_s2_tr, out_s2)
out = self.conv2_tr(out)
out = self.norm2_tr(out)
out_s1_tr = MEF.relu(out)
out = ME.cat(out_s1_tr, out_s1)
out = self.conv1_tr(out)
out = self.norm1_tr(out)
out = MEF.relu(out)
out = self.final(out)
if self.normalize_feature:
return ME.SparseTensor(
out.F / torch.norm(out.F, p=2, dim=1, keepdim=True),
coords_key=out.coords_key,
coords_manager=out.coords_man)
else:
return out
class SimpleNetIN(SimpleNet):
NORM_TYPE = 'IN'
class SimpleNetBN(SimpleNet):
NORM_TYPE = 'BN'
class SimpleNetBNE(SimpleNetBN):
CHANNELS = [None, 16, 32, 32]
TR_CHANNELS = [None, 16, 16, 32]
class SimpleNetINE(SimpleNetBNE):
NORM_TYPE = 'IN'
class SimpleNet2(ME.MinkowskiNetwork):
NORM_TYPE = None
CHANNELS = [None, 32, 64, 128, 256]
TR_CHANNELS = [None, 32, 32, 64, 64]
# To use the model, must call initialize_coords before forward pass.
# Once data is processed, call clear to reset the model before calling initialize_coords
def __init__(self,
in_channels=3,
out_channels=32,
bn_momentum=0.1,
conv1_kernel_size=3,
normalize_feature=False,
D=3):
ME.MinkowskiNetwork.__init__(self, D)
NORM_TYPE = self.NORM_TYPE
CHANNELS = self.CHANNELS
TR_CHANNELS = self.TR_CHANNELS
self.normalize_feature = normalize_feature
self.conv1 = ME.MinkowskiConvolution(
in_channels=in_channels,
out_channels=CHANNELS[1],
kernel_size=conv1_kernel_size,
stride=1,
dilation=1,
has_bias=False,
dimension=D)
self.norm1 = get_norm(NORM_TYPE, CHANNELS[1], bn_momentum=bn_momentum, dimension=D)
self.conv2 = ME.MinkowskiConvolution(
in_channels=CHANNELS[1],
out_channels=CHANNELS[2],
kernel_size=3,
stride=2,
dilation=1,
has_bias=False,
dimension=D)
self.norm2 = get_norm(NORM_TYPE, CHANNELS[2], bn_momentum=bn_momentum, dimension=D)
self.conv3 = ME.MinkowskiConvolution(
in_channels=CHANNELS[2],
out_channels=CHANNELS[3],
kernel_size=3,
stride=2,
dilation=1,
has_bias=False,
dimension=D)
self.norm3 = get_norm(NORM_TYPE, CHANNELS[3], bn_momentum=bn_momentum, dimension=D)
self.conv4 = ME.MinkowskiConvolution(
in_channels=CHANNELS[3],
out_channels=CHANNELS[4],
kernel_size=3,
stride=2,
dilation=1,
has_bias=False,
dimension=D)
self.norm4 = get_norm(NORM_TYPE, CHANNELS[4], bn_momentum=bn_momentum, dimension=D)
self.conv4_tr = ME.MinkowskiConvolutionTranspose(
in_channels=CHANNELS[4],
out_channels=TR_CHANNELS[4],
kernel_size=3,
stride=2,
dilation=1,
has_bias=False,
dimension=D)
self.norm4_tr = get_norm(
NORM_TYPE, TR_CHANNELS[4], bn_momentum=bn_momentum, dimension=D)
self.conv3_tr = ME.MinkowskiConvolutionTranspose(
in_channels=CHANNELS[3] + TR_CHANNELS[4],
out_channels=TR_CHANNELS[3],
kernel_size=3,
stride=2,
dilation=1,
has_bias=False,
dimension=D)
self.norm3_tr = get_norm(
NORM_TYPE, TR_CHANNELS[3], bn_momentum=bn_momentum, dimension=D)
self.conv2_tr = ME.MinkowskiConvolutionTranspose(
in_channels=CHANNELS[2] + TR_CHANNELS[3],
out_channels=TR_CHANNELS[2],
kernel_size=3,
stride=2,
dilation=1,
has_bias=False,
dimension=D)
self.norm2_tr = get_norm(
NORM_TYPE, TR_CHANNELS[2], bn_momentum=bn_momentum, dimension=D)
self.conv1_tr = ME.MinkowskiConvolution(
in_channels=CHANNELS[1] + TR_CHANNELS[2],
out_channels=TR_CHANNELS[1],
kernel_size=3,
stride=1,
dilation=1,
has_bias=False,
dimension=D)
self.norm1_tr = get_norm(
NORM_TYPE, TR_CHANNELS[1], bn_momentum=bn_momentum, dimension=D)
self.final = ME.MinkowskiConvolution(
in_channels=TR_CHANNELS[1],
out_channels=out_channels,
kernel_size=1,
stride=1,
dilation=1,
has_bias=True,
dimension=D)
def forward(self, x):
out_s1 = self.conv1(x)
out_s1 = self.norm1(out_s1)
out = MEF.relu(out_s1)
out_s2 = self.conv2(out)
out_s2 = self.norm2(out_s2)
out = MEF.relu(out_s2)
out_s4 = self.conv3(out)
out_s4 = self.norm3(out_s4)
out = MEF.relu(out_s4)
out_s8 = self.conv4(out)
out_s8 = self.norm4(out_s8)
out = MEF.relu(out_s8)
out = self.conv4_tr(out)
out = self.norm4_tr(out)
out_s4_tr = MEF.relu(out)
out = ME.cat(out_s4_tr, out_s4)
out = self.conv3_tr(out)
out = self.norm3_tr(out)
out_s2_tr = MEF.relu(out)
out = ME.cat(out_s2_tr, out_s2)
out = self.conv2_tr(out)
out = self.norm2_tr(out)
out_s1_tr = MEF.relu(out)
out = ME.cat(out_s1_tr, out_s1)
out = self.conv1_tr(out)
out = self.norm1_tr(out)
out = MEF.relu(out)
out = self.final(out)
if self.normalize_feature:
return ME.SparseTensor(
out.F / torch.norm(out.F, p=2, dim=1, keepdim=True),
coords_key=out.coords_key,
coords_manager=out.coords_man)
else:
return out
class SimpleNetIN2(SimpleNet2):
NORM_TYPE = 'IN'
class SimpleNetBN2(SimpleNet2):
NORM_TYPE = 'BN'
class SimpleNetBN2B(SimpleNet2):
NORM_TYPE = 'BN'
CHANNELS = [None, 32, 64, 128, 256]
TR_CHANNELS = [None, 64, 64, 64, 64]
class SimpleNetBN2C(SimpleNet2):
NORM_TYPE = 'BN'
CHANNELS = [None, 32, 64, 128, 256]
TR_CHANNELS = [None, 32, 64, 64, 128]
class SimpleNetBN2D(SimpleNet2):
NORM_TYPE = 'BN'
CHANNELS = [None, 32, 64, 128, 256]
TR_CHANNELS = [None, 32, 64, 64, 128]
class SimpleNetBN2E(SimpleNet2):
NORM_TYPE = 'BN'
CHANNELS = [None, 16, 32, 64, 128]
TR_CHANNELS = [None, 16, 32, 32, 64]
class SimpleNetIN2E(SimpleNetBN2E):
NORM_TYPE = 'IN'
class SimpleNet3(ME.MinkowskiNetwork):
NORM_TYPE = None
CHANNELS = [None, 32, 64, 128, 256, 512]
TR_CHANNELS = [None, 32, 32, 64, 64, 128]
# To use the model, must call initialize_coords before forward pass.
# Once data is processed, call clear to reset the model before calling initialize_coords
def __init__(self,
in_channels=3,
out_channels=32,
bn_momentum=0.1,
conv1_kernel_size=3,
normalize_feature=False,
D=3):
ME.MinkowskiNetwork.__init__(self, D)
NORM_TYPE = self.NORM_TYPE
CHANNELS = self.CHANNELS
TR_CHANNELS = self.TR_CHANNELS
self.normalize_feature = normalize_feature
self.conv1 = ME.MinkowskiConvolution(
in_channels=in_channels,
out_channels=CHANNELS[1],
kernel_size=conv1_kernel_size,
stride=1,
dilation=1,
has_bias=False,
dimension=D)
self.norm1 = get_norm(NORM_TYPE, CHANNELS[1], bn_momentum=bn_momentum, dimension=D)
self.conv2 = ME.MinkowskiConvolution(
in_channels=CHANNELS[1],
out_channels=CHANNELS[2],
kernel_size=3,
stride=2,
dilation=1,
has_bias=False,
dimension=D)
self.norm2 = get_norm(NORM_TYPE, CHANNELS[2], bn_momentum=bn_momentum, dimension=D)
self.conv3 = ME.MinkowskiConvolution(
in_channels=CHANNELS[2],
out_channels=CHANNELS[3],
kernel_size=3,
stride=2,
dilation=1,
has_bias=False,
dimension=D)
self.norm3 = get_norm(NORM_TYPE, CHANNELS[3], bn_momentum=bn_momentum, dimension=D)
self.conv4 = ME.MinkowskiConvolution(
in_channels=CHANNELS[3],
out_channels=CHANNELS[4],
kernel_size=3,
stride=2,
dilation=1,
has_bias=False,
dimension=D)
self.norm4 = get_norm(NORM_TYPE, CHANNELS[4], bn_momentum=bn_momentum, dimension=D)
self.conv5 = ME.MinkowskiConvolution(
in_channels=CHANNELS[4],
out_channels=CHANNELS[5],
kernel_size=3,
stride=2,
dilation=1,
has_bias=False,
dimension=D)
self.norm5 = get_norm(NORM_TYPE, CHANNELS[5], bn_momentum=bn_momentum, dimension=D)
self.conv5_tr = ME.MinkowskiConvolutionTranspose(
in_channels=CHANNELS[5],
out_channels=TR_CHANNELS[5],
kernel_size=3,
stride=2,
dilation=1,
has_bias=False,
dimension=D)
self.norm5_tr = get_norm(
NORM_TYPE, TR_CHANNELS[5], bn_momentum=bn_momentum, dimension=D)
self.conv4_tr = ME.MinkowskiConvolutionTranspose(
in_channels=CHANNELS[4] + TR_CHANNELS[5],
out_channels=TR_CHANNELS[4],
kernel_size=3,
stride=2,
dilation=1,
has_bias=False,
dimension=D)
self.norm4_tr = get_norm(
NORM_TYPE, TR_CHANNELS[4], bn_momentum=bn_momentum, dimension=D)
self.conv3_tr = ME.MinkowskiConvolutionTranspose(
in_channels=CHANNELS[3] + TR_CHANNELS[4],
out_channels=TR_CHANNELS[3],
kernel_size=3,
stride=2,
dilation=1,
has_bias=False,
dimension=D)
self.norm3_tr = get_norm(
NORM_TYPE, TR_CHANNELS[3], bn_momentum=bn_momentum, dimension=D)
self.conv2_tr = ME.MinkowskiConvolutionTranspose(
in_channels=CHANNELS[2] + TR_CHANNELS[3],
out_channels=TR_CHANNELS[2],
kernel_size=3,
stride=2,
dilation=1,
has_bias=False,
dimension=D)
self.norm2_tr = get_norm(
NORM_TYPE, TR_CHANNELS[2], bn_momentum=bn_momentum, dimension=D)
self.conv1_tr = ME.MinkowskiConvolution(
in_channels=CHANNELS[1] + TR_CHANNELS[2],
out_channels=TR_CHANNELS[1],
kernel_size=1,
stride=1,
dilation=1,
has_bias=True,
dimension=D)
def forward(self, x):
out_s1 = self.conv1(x)
out_s1 = self.norm1(out_s1)
out = MEF.relu(out_s1)
out_s2 = self.conv2(out)
out_s2 = self.norm2(out_s2)
out = MEF.relu(out_s2)
out_s4 = self.conv3(out)
out_s4 = self.norm3(out_s4)
out = MEF.relu(out_s4)
out_s8 = self.conv4(out)
out_s8 = self.norm4(out_s8)
out = MEF.relu(out_s8)
out_s16 = self.conv5(out)
out_s16 = self.norm5(out_s16)
out = MEF.relu(out_s16)
out = self.conv5_tr(out)
out = self.norm5_tr(out)
out_s8_tr = MEF.relu(out)
out = ME.cat(out_s8_tr, out_s8)
out = self.conv4_tr(out)
out = self.norm4_tr(out)
out_s4_tr = MEF.relu(out)
out = ME.cat(out_s4_tr, out_s4)
out = self.conv3_tr(out)
out = self.norm3_tr(out)
out_s2_tr = MEF.relu(out)
out = ME.cat(out_s2_tr, out_s2)
out = self.conv2_tr(out)
out = self.norm2_tr(out)
out_s1_tr = MEF.relu(out)
out = ME.cat(out_s1_tr, out_s1)
out = self.conv1_tr(out)
if self.normalize_feature:
return ME.SparseTensor(
out.F / torch.norm(out.F, p=2, dim=1, keepdim=True),
coords_key=out.coords_key,
coords_manager=out.coords_man)
else:
return out
class SimpleNetIN3(SimpleNet3):
NORM_TYPE = 'IN'
class SimpleNetBN3(SimpleNet3):
NORM_TYPE = 'BN'
class SimpleNetBN3B(SimpleNet3):
NORM_TYPE = 'BN'
CHANNELS = [None, 32, 64, 128, 256, 512]
TR_CHANNELS = [None, 32, 64, 64, 64, 128]
class SimpleNetBN3C(SimpleNet3):
NORM_TYPE = 'BN'
CHANNELS = [None, 32, 64, 128, 256, 512]
TR_CHANNELS = [None, 32, 32, 64, 128, 128]
class SimpleNetBN3D(SimpleNet3):
NORM_TYPE = 'BN'
CHANNELS = [None, 32, 64, 128, 256, 512]
TR_CHANNELS = [None, 32, 64, 64, 128, 128]
class SimpleNetBN3E(SimpleNet3):
NORM_TYPE = 'BN'
CHANNELS = [None, 16, 32, 64, 128, 256]
TR_CHANNELS = [None, 16, 32, 32, 64, 128]
class SimpleNetIN3E(SimpleNetBN3E):
NORM_TYPE = 'IN'
================================================
FILE: requirements.txt
================================================
ansi2html==1.8.0
attrs==23.1.0
certifi==2023.7.22
charset-normalizer==3.1.0
click==8.1.3
cmake==3.26.4
ConfigArgParse==1.5.3
dash==2.11.0
dash-core-components==2.0.0
dash-html-components==2.0.0
dash-table==5.0.0
easydict==1.10
fastjsonschema==2.17.1
filelock==3.12.2
Flask==2.2.5
idna==3.4
intel-openmp==2023.1.0
itsdangerous==2.1.2
Jinja2==3.1.2
jsonschema==4.17.3
jupyter_core==5.3.1
lit==16.0.6
MarkupSafe==2.1.3
MinkowskiEngine==0.5.4
mkl==2023.1.0
mpmath==1.3.0
nbformat==5.7.0
nest-asyncio==1.5.6
networkx==3.1
numpy==1.25.0
nvidia-cublas-cu11==11.10.3.66
nvidia-cuda-cupti-cu11==11.7.101
nvidia-cuda-nvrtc-cu11==11.7.99
nvidia-cuda-runtime-cu11==11.7.99
nvidia-cudnn-cu11==8.5.0.96
nvidia-cufft-cu11==10.9.0.58
nvidia-curand-cu11==10.2.10.91
nvidia-cusolver-cu11==11.4.0.1
nvidia-cusparse-cu11==11.7.4.91
nvidia-nccl-cu11==2.14.3
nvidia-nvtx-cu11==11.7.91
open3d-cpu @ file:///home/ibrahim/tmp/Open3D/build/lib/python_package/pip_package/open3d_cpu-0.17.0%2B9238339b9-cp310-cp310-manylinux_2_37_x86_64.whl
packaging==23.1
Pillow==9.5.0
platformdirs==3.8.0
plotly==5.15.0
pyrsistent==0.19.3
requests==2.31.0
retrying==1.3.4
scipy==1.11.0
six==1.16.0
sympy==1.12
tbb==2021.9.0
tenacity==8.2.2
torch==2.0.1
torchaudio==2.0.2
torchvision==0.15.2
traitlets==5.9.0
triton==2.0.0
typing_extensions==4.6.3
urllib3==2.0.3
Werkzeug==2.2.3
================================================
FILE: scripts/analyze_stats.py
================================================
# Copyright (c) Chris Choy (chrischoy@ai.stanford.edu) and Wei Dong (weidong@andrew.cmu.edu)
#
# Please cite the following papers if you use any part of the code.
# - Christopher Choy, Wei Dong, Vladlen Koltun, Deep Global Registration, CVPR 2020
# - Christopher Choy, Jaesik Park, Vladlen Koltun, Fully Convolutional Geometric Features, ICCV 2019
# - Christopher Choy, JunYoung Gwak, Silvio Savarese, 4D Spatio-Temporal ConvNets: Minkowski Convolutional Neural Networks, CVPR 2019
from matplotlib.patches import Rectangle
import matplotlib.pyplot as plt
import numpy as np
import argparse
PROPERTY_IDX_MAP = {
'Recall': 0,
'TE (m)': 1,
'RE (deg)': 2,
'log Time (s)': 3,
'Scene ID': 4
}
def analyze_by_pair(stats, rte_thresh, rre_thresh):
'''
\input stats: (num_methods, num_pairs, num_pairwise_stats=5)
\return valid mean_stats: (num_methods, 4)
4 properties: recall, rte, rre, time
'''
num_methods, num_pairs, num_pairwise_stats = stats.shape
pairwise_stats = np.zeros((num_methods, 4))
for m in range(num_methods):
# Filter valid registrations by rte / rre thresholds
mask_rte = stats[m, :, 1] < rte_thresh
mask_rre = stats[m, :, 2] < rre_thresh
mask_valid = mask_rte * mask_rre
# Recall, RTE, RRE, Time
pairwise_stats[m, 0] = mask_valid.mean()
pairwise_stats[m, 1] = stats[m, mask_valid, 1].mean()
pairwise_stats[m, 2] = stats[m, mask_valid, 2].mean()
pairwise_stats[m, 3] = stats[m, mask_valid, 3].mean()
return pairwise_stats
def analyze_by_scene(stats, scene_id_list, rte_thresh=0.3, rre_thresh=15):
'''
\input stats: (num_methods, num_pairs, num_pairwise_stats=5)
\return scene_wise mean stats: (num_methods, num_scenes, 4)
4 properties: recall, rte, rre, time
'''
num_methods, num_pairs, num_pairwise_stats = stats.shape
num_scenes = len(scene_id_list)
scene_wise_stats = np.zeros((num_methods, len(scene_id_list), 4))
for m in range(num_methods):
# Filter valid registrations by rte / rre thresholds
mask_rte = stats[m, :, 1] < rte_thresh
mask_rre = stats[m, :, 2] < rre_thresh
mask_valid = mask_rte * mask_rre
for s in scene_id_list:
mask_scene = stats[m, :, 4] == s
# Valid registrations in the scene
mask = mask_scene * mask_valid
# Recall, RTE, RRE, Time
scene_wise_stats[m, s, 0] = 0 if np.sum(mask_scene) == 0 else float(
np.sum(mask)) / float(np.sum(mask_scene))
scene_wise_stats[m, s, 1] = stats[m, mask, 1].mean()
scene_wise_stats[m, s, 2] = stats[m, mask, 2].mean()
scene_wise_stats[m, s, 3] = stats[m, mask, 3].mean()
return scene_wise_stats
def plot_precision_recall_curves(stats, method_names, rte_precisions, rre_precisions,
output_postfix, cmap):
'''
\input stats: (num_methods, num_pairs, 5)
\input method_names: (num_methods) string, shown as xticks
'''
num_methods, num_pairs, _ = stats.shape
rre_precision_curves = np.zeros((num_methods, len(rre_precisions)))
rte_precision_curves = np.zeros((num_methods, len(rte_precisions)))
for i, rre_thresh in enumerate(rre_precisions):
pairwise_stats = analyze_by_pair(stats, rte_thresh=np.inf, rre_thresh=rre_thresh)
rre_precision_curves[:, i] = pairwise_stats[:, 0]
for i, rte_thresh in enumerate(rte_precisions):
pairwise_stats = analyze_by_pair(stats, rte_thresh=rte_thresh, rre_thresh=np.inf)
rte_precision_curves[:, i] = pairwise_stats[:, 0]
fig = plt.figure(figsize=(10, 3))
ax1 = fig.add_subplot(1, 2, 1, aspect=3.0 / np.max(rte_precisions))
ax2 = fig.add_subplot(1, 2, 2, aspect=3.0 / np.max(rre_precisions))
for m, name in enumerate(method_names):
alpha = rre_precision_curves[m].mean()
alpha = 1.0 if alpha > 0 else 0.0
ax1.plot(rre_precisions, rre_precision_curves[m], color=cmap[m], alpha=alpha)
ax2.plot(rte_precisions, rte_precision_curves[m], color=cmap[m], alpha=alpha)
ax1.set_ylabel('Recall')
ax1.set_xlabel('Rotation (deg)')
ax1.set_ylim((0.0, 1.0))
ax2.set_xlabel('Translation (m)')
ax2.set_ylim((0.0, 1.0))
ax2.legend(method_names, loc='center left', bbox_to_anchor=(1, 0.5))
ax1.grid()
ax2.grid()
plt.tight_layout()
plt.savefig('{}_{}.png'.format('precision_recall', output_postfix))
plt.close(fig)
def plot_scene_wise_stats(scene_wise_stats, method_names, scene_names, property_name,
ylim, output_postfix, cmap):
'''
\input scene_wise_stats: (num_methods, num_scenes, 4)
\input method_names: (num_methods) string, shown as xticks
\input scene_names: (num_scenes) string, shown as legends
\input property_name: string, shown as ylabel
'''
num_methods, num_scenes, _ = scene_wise_stats.shape
assert len(method_names) == num_methods
assert len(scene_names) == num_scenes
# Initialize figure
fig = plt.figure(figsize=(14, 3))
ax = fig.add_subplot(1, 1, 1)
# Add some paddings
w = 1.0 / (num_methods + 2)
# Rightmost bar
x = np.arange(0, num_scenes) - 0.5 * w * num_methods
for m in range(num_methods):
m_stats = scene_wise_stats[m, :, PROPERTY_IDX_MAP[property_name]]
valid = not (np.logical_and.reduce(np.isnan(m_stats))
or np.logical_and.reduce(m_stats == 0))
alpha = 1.0 if valid else 0.0
ax.bar(x + m * w, m_stats, w, color=cmap[m], alpha=alpha)
plt.ylim(ylim)
plt.xlim((0 - w * num_methods, num_scenes))
plt.ylabel(property_name)
plt.xticks(np.arange(0, num_scenes), tuple(scene_names))
ax.legend(method_names, loc='center left', bbox_to_anchor=(1, 0.5))
plt.tight_layout()
plt.grid()
plt.savefig('{}_{}.png'.format(property_name, output_postfix))
plt.close(fig)
def plot_pareto_frontier(pairwise_stats, method_names, cmap):
recalls = pairwise_stats[:, 0]
times = 1.0 / pairwise_stats[:, 3]
ind = np.argsort(times)
offset = 0.05
plt.rcParams.update({'font.size': 30})
fig = plt.figure(figsize=(20, 12))
ax = fig.add_subplot(111)
ax.set_xlabel('Number of registrations per second (log scale)')
ax.set_xscale('log')
xmin = np.power(10, -2.2)
xmax = np.power(10, 1.5)
ax.set_xlim(xmin, xmax)
ax.set_ylabel('Registration recall')
ax.set_ylim(-offset, 1)
ax.set_yticks(np.arange(0, 1, step=0.2))
plots = [None for m in ind]
max_gain = -1
for m in ind[::-1]:
# 8, 9: our methods
if (recalls[m] > max_gain):
max_gain = recalls[m]
ax.add_patch(
Rectangle((0, -offset),
times[m],
recalls[m] + offset,
facecolor=(0.94, 0.94, 0.94)))
plot, = ax.plot(times[m], recalls[m], 'o', c=colors[m], markersize=30)
plots[m] = plot
ax.legend(plots, method_names, loc='center left', bbox_to_anchor=(1, 0.5))
plt.tight_layout()
plt.savefig('frontier.png')
if __name__ == '__main__':
'''
Input .npz file to analyze:
\prop npz['stats']: (num_methods, num_pairs, num_pairwise_stats=5)
5 pairwise stats properties consist of
- \bool success: decided by evaluation thresholds, will be ignored in this script
- \float rte: relative translation error (in cm)
- \float rre: relative rotation error (in deg)
- \float time: registration time for the pair (in ms)
- \int scene_id: specific for 3DMatch test sets (8 scenes in total)
\prop npz['names']: (num_methods)
Corresponding method name stored in string
'''
# Setup fonts
from matplotlib import rc
rc('font', **{'family': 'sans-serif', 'sans-serif': ['Helvetica']})
rc('text', usetex=False)
# Parse arguments
parser = argparse.ArgumentParser()
parser.add_argument('npz', help='path to the npz file')
parser.add_argument('--output_postfix', default='', help='postfix of the output')
parser.add_argument('--end_method_index',
default=1000,
type=int,
help='reserved only for making slides')
args = parser.parse_args()
# Load npz file with aformentioned format
npz = np.load(args.npz)
stats = npz['stats']
# Reserved only for making slides, will be skipped by default
stats[args.end_method_index:, :, 1] = np.inf
stats[args.end_method_index:, :, 2] = np.inf
method_names = npz['names']
scene_names = [
'Kitchen', 'Home1', 'Home2', 'Hotel1', 'Hotel2', 'Hotel3', 'Study', 'Lab'
]
cmap = plt.get_cmap('tab20b')
colors = [cmap(i) for i in np.linspace(0, 1, len(method_names))]
colors.reverse()
# Plot scene-wise bar charts
scene_wise_stats = analyze_by_scene(stats,
range(len(scene_names)),
rte_thresh=0.3,
rre_thresh=15)
plot_scene_wise_stats(scene_wise_stats, method_names, scene_names, 'Recall',
(0.0, 1.0), args.output_postfix, colors)
plot_scene_wise_stats(scene_wise_stats, method_names, scene_names, 'TE (m)',
(0.0, 0.3), args.output_postfix, colors)
plot_scene_wise_stats(scene_wise_stats, method_names, scene_names, 'RE (deg)',
(0.0, 15.0), args.output_postfix, colors)
# Plot rte/rre - recall curves
plot_precision_recall_curves(stats,
method_names,
rre_precisions=np.arange(0, 15, 0.05),
rte_precisions=np.arange(0, 0.3, 0.005),
output_postfix=args.output_postfix,
cmap=colors)
pairwise_stats = analyze_by_pair(stats, rte_thresh=0.3, rre_thresh=15)
plot_pareto_frontier(pairwise_stats, method_names, cmap=colors)
================================================
FILE: scripts/download_3dmatch.sh
================================================
#!/usr/bin/env bash
DATA_DIR=$1
function download() {
TMP_PATH="$DATA_DIR/tmp"
echo "#################################"
echo "Data Root Dir: ${DATA_DIR}"
echo "Download Path: ${TMP_PATH}"
echo "#################################"
urls=(
'http://node2.chrischoy.org/data/datasets/registration/threedmatch.tgz'
)
if [ ! -d "$TMP_PATH" ]; then
echo ">> Create temporary directory: ${TMP_PATH}"
mkdir -p "$TMP_PATH"
fi
cd "$TMP_PATH"
echo ">> Start downloading"
echo ${urls[@]} | xargs -n 1 -P 3 wget --no-check-certificate -q -c --show-progress $0
echo ">> Unpack .zip file"
for filename in *.tgz
do
tar -xvzf $filename -C ../
done
echo ">> Clear tmp directory"
cd ..
rm -rf ./tmp
echo "#################################"
echo "Done!"
echo "#################################"
}
function main() {
echo $DATA_DIR
if [ -z "$DATA_DIR" ]; then
echo "DATA_DIR is required config!"
else
download
fi
}
main;
================================================
FILE: scripts/test_3dmatch.py
================================================
# Copyright (c) Chris Choy (chrischoy@ai.stanford.edu) and Wei Dong (weidong@andrew.cmu.edu)
#
# Please cite the following papers if you use any part of the code.
# - Christopher Choy, Wei Dong, Vladlen Koltun, Deep Global Registration, CVPR 2020
# - Christopher Choy, Jaesik Park, Vladlen Koltun, Fully Convolutional Geometric Features, ICCV 2019
# - Christopher Choy, JunYoung Gwak, Silvio Savarese, 4D Spatio-Temporal ConvNets: Minkowski Convolutional Neural Networks, CVPR 2019
# Run with python -m scripts.test_3dmatch_refactor
import os
import sys
import math
import logging
import open3d as o3d
import numpy as np
import time
import torch
import copy
sys.path.append('.')
import MinkowskiEngine as ME
from config import get_config
from model import load_model
from dataloader.data_loaders import ThreeDMatchTrajectoryDataset
from core.knn import find_knn_gpu
from core.deep_global_registration import DeepGlobalRegistration
from util.timer import Timer
from util.pointcloud import make_open3d_point_cloud
o3d.utility.set_verbosity_level(o3d.utility.VerbosityLevel.Warning)
ch = logging.StreamHandler(sys.stdout)
logging.getLogger().setLevel(logging.INFO)
logging.basicConfig(format='%(asctime)s %(message)s',
datefmt='%m/%d %H:%M:%S',
handlers=[ch])
# Criteria
def rte_rre(T_pred, T_gt, rte_thresh, rre_thresh, eps=1e-16):
if T_pred is None:
return np.array([0, np.inf, np.inf])
rte = np.linalg.norm(T_pred[:3, 3] - T_gt[:3, 3])
rre = np.arccos(
np.clip((np.trace(T_pred[:3, :3].T @ T_gt[:3, :3]) - 1) / 2, -1 + eps,
1 - eps)) * 180 / math.pi
return np.array([rte < rte_thresh and rre < rre_thresh, rte, rre])
def analyze_stats(stats, mask, method_names):
mask = (mask > 0).squeeze(1)
stats = stats[:, mask, :]
print('Total result mean')
for i, method_name in enumerate(method_names):
print(method_name)
print(stats[i].mean(0))
print('Total successful result mean')
for i, method_name in enumerate(method_names):
sel = stats[i][:, 0] > 0
sel_stats = stats[i][sel]
print(method_name)
print(sel_stats.mean(0))
def create_pcd(xyz, color):
# n x 3
n = xyz.shape[0]
pcd = o3d.geometry.PointCloud()
pcd.points = o3d.utility.Vector3dVector(xyz)
pcd.colors = o3d.utility.Vector3dVector(np.tile(color, (n, 1)))
pcd.estimate_normals(
search_param=o3d.geometry.KDTreeSearchParamHybrid(radius=0.1, max_nn=30))
return pcd
def draw_geometries_flip(pcds):
pcds_transform = []
flip_transform = [[1, 0, 0, 0], [0, -1, 0, 0], [0, 0, -1, 0], [0, 0, 0, 1]]
for pcd in pcds:
pcd_temp = copy.deepcopy(pcd)
pcd_temp.transform(flip_transform)
pcds_transform.append(pcd_temp)
o3d.visualization.draw_geometries(pcds_transform)
def evaluate(methods, method_names, data_loader, config, debug=False):
tot_num_data = len(data_loader.dataset)
data_loader_iter = iter(data_loader)
# Accumulate success, rre, rte, time, sid
mask = np.zeros((tot_num_data, 1)).astype(int)
stats = np.zeros((len(methods), tot_num_data, 5))
dataset = data_loader.dataset
subset_names = open(dataset.DATA_FILES[dataset.phase]).read().split()
for batch_idx in range(tot_num_data):
batch = data_loader_iter.next()
# Skip too sparse point clouds
sname, xyz0, xyz1, trans = batch[0]
sid = subset_names.index(sname)
T_gt = np.linalg.inv(trans)
for i, method in enumerate(methods):
start = time.time()
T = method.register(xyz0, xyz1)
end = time.time()
# Visualize
if debug:
print(method_names[i])
pcd0 = create_pcd(xyz0, np.array([1, 0.706, 0]))
pcd1 = create_pcd(xyz1, np.array([0, 0.651, 0.929]))
pcd0.transform(T)
draw_geometries_flip([pcd0, pcd1])
pcd0.transform(np.linalg.inv(T))
stats[i, batch_idx, :3] = rte_rre(T, T_gt, config.success_rte_thresh,
config.success_rre_thresh)
stats[i, batch_idx, 3] = end - start
stats[i, batch_idx, 4] = sid
mask[batch_idx] = 1
if stats[i, batch_idx, 0] == 0:
print(f"{method_names[i]}: failed")
if batch_idx % 10 == 9:
print('Summary {} / {}'.format(batch_idx, tot_num_data))
analyze_stats(stats, mask, method_names)
# Save results
filename = f'3dmatch-stats_{method.__class__.__name__}'
if os.path.isdir(config.out_dir):
out_file = os.path.join(config.out_dir, filename)
else:
out_file = filename # save it on the current directory
print(f'Saving the stats to {out_file}')
np.savez(out_file, stats=stats, names=method_names)
analyze_stats(stats, mask, method_names)
# Analysis per scene
for i, method in enumerate(methods):
print(f'Scene-wise mean {method}')
scene_vals = np.zeros((len(subset_names), 3))
for sid, sname in enumerate(subset_names):
curr_scene = stats[i, :, 4] == sid
scene_vals[sid] = (stats[i, curr_scene, :3]).mean(0)
print('All scenes')
print(scene_vals)
print('Scene average')
print(scene_vals.mean(0))
if __name__ == '__main__':
config = get_config()
print(config)
dgr = DeepGlobalRegistration(config)
methods = [dgr]
method_names = ['DGR']
dset = ThreeDMatchTrajectoryDataset(phase='test',
transform=None,
random_scale=False,
random_rotation=False,
config=config)
data_loader = torch.utils.data.DataLoader(dset,
batch_size=1,
shuffle=False,
num_workers=1,
collate_fn=lambda x: x,
pin_memory=False,
drop_last=True)
evaluate(methods, method_names, data_loader, config, debug=False)
================================================
FILE: scripts/test_kitti.py
================================================
# Copyright (c) Chris Choy (chrischoy@ai.stanford.edu) and Wei Dong (weidong@andrew.cmu.edu)
#
# Please cite the following papers if you use any part of the code.
# - Christopher Choy, Wei Dong, Vladlen Koltun, Deep Global Registration, CVPR 2020
# - Christopher Choy, Jaesik Park, Vladlen Koltun, Fully Convolutional Geometric Features, ICCV 2019
# - Christopher Choy, JunYoung Gwak, Silvio Savarese, 4D Spatio-Temporal ConvNets: Minkowski Convolutional Neural Networks, CVPR 2019
import os
import sys
import logging
import argparse
import numpy as np
import open3d as o3d
import torch
from config import get_config
from core.deep_global_registration import DeepGlobalRegistration
from dataloader.kitti_loader import KITTINMPairDataset
from dataloader.base_loader import CollationFunctionFactory
from util.pointcloud import make_open3d_point_cloud, make_open3d_feature, pointcloud_to_spheres
from util.timer import AverageMeter, Timer
from scripts.test_3dmatch import rte_rre
ch = logging.StreamHandler(sys.stdout)
logging.getLogger().setLevel(logging.INFO)
logging.basicConfig(format='%(asctime)s %(message)s',
datefmt='%m/%d %H:%M:%S',
handlers=[ch])
TE_THRESH = 0.6 # m
RE_THRESH = 5 # deg
VISUALIZE = False
def visualize_pair(xyz0, xyz1, T, voxel_size):
pcd0 = pointcloud_to_spheres(xyz0,
voxel_size,
np.array([0, 0, 1]),
sphere_size=0.6)
pcd1 = pointcloud_to_spheres(xyz1,
voxel_size,
np.array([0, 1, 0]),
sphere_size=0.6)
pcd0.transform(T)
o3d.visualization.draw_geometries([pcd0, pcd1])
def analyze_stats(stats):
print('Total result mean')
print(stats.mean(0))
sel_stats = stats[stats[:, 0] > 0]
print(sel_stats.mean(0))
def evaluate(config, data_loader, method):
data_timer = Timer()
test_iter = data_loader.__iter__()
N = len(test_iter)
stats = np.zeros((N, 5)) # bool succ, rte, rre, time, drive id
for i in range(len(data_loader)):
data_timer.tic()
try:
data_dict = test_iter.next()
except ValueError as exc:
pass
data_timer.toc()
drive = data_dict['extra_packages'][0]['drive']
xyz0, xyz1 = data_dict['pcd0'][0], data_dict['pcd1'][0]
T_gt = data_dict['T_gt'][0].numpy()
xyz0np, xyz1np = xyz0.numpy(), xyz1.numpy()
T_pred = method.register(xyz0np, xyz1np)
stats[i, :3] = rte_rre(T_pred, T_gt, TE_THRESH, RE_THRESH)
stats[i, 3] = method.reg_timer.diff + method.feat_timer.diff
stats[i, 4] = drive
if stats[i, 0] == 0:
logging.info(f"Failed with RTE: {stats[i, 1]}, RRE: {stats[i, 2]}")
if i % 10 == 0:
succ_rate, rte, rre, avg_time, _ = stats[:i + 1].mean(0)
logging.info(
f"{i} / {N}: Data time: {data_timer.avg}, Feat time: {method.feat_timer.avg},"
+ f" Reg time: {method.reg_timer.avg}, RTE: {rte}," +
f" RRE: {rre}, Success: {succ_rate * 100} %")
if VISUALIZE and i % 10 == 9:
visualize_pair(xyz0, xyz1, T_pred, config.voxel_size)
succ_rate, rte, rre, avg_time, _ = stats.mean(0)
logging.info(
f"Data time: {data_timer.avg}, Feat time: {method.feat_timer.avg}," +
f" Reg time: {method.reg_timer.avg}, RTE: {rte}," +
f" RRE: {rre}, Success: {succ_rate * 100} %")
# Save results
filename = f'kitti-stats_{method.__class__.__name__}'
if config.out_filename is not None:
filename += f'_{config.out_filename}'
if isinstance(method, FCGFWrapper):
filename += '_' + method.method
if 'ransac' in method.method:
filename += f'_{config.ransac_iter}'
if os.path.isdir(config.out_dir):
out_file = os.path.join(config.out_dir, filename)
else:
out_file = filename # save it on the current directory
print(f'Saving the stats to {out_file}')
np.savez(out_file, stats=stats)
analyze_stats(stats)
if __name__ == '__main__':
config = get_config()
dgr = DeepGlobalRegistration(config)
dset = KITTINMPairDataset('test',
transform=None,
random_rotation=False,
random_scale=False,
config=config)
data_loader = torch.utils.data.DataLoader(
dset,
batch_size=1,
shuffle=False,
num_workers=0,
collate_fn=CollationFunctionFactory(concat_correspondences=False,
collation_type='collate_pair'),
pin_memory=False,
drop_last=False)
evaluate(config, data_loader, dgr)
================================================
FILE: scripts/train_3dmatch.sh
================================================
#! /bin/bash
export PATH_POSTFIX=$1
export MISC_ARGS=$2
export DATA_ROOT="./outputs/Experiment2"
export DATASET=${DATASET:-ThreeDMatchPairDataset03}
export THREED_MATCH_DIR=${THREED_MATCH_DIR}
export MODEL=${MODEL:-ResUNetBN2C}
export MODEL_N_OUT=${MODEL_N_OUT:-32}
export FCGF_WEIGHTS=${FCGF_WEIGHTS:fcgf.pth}
export INLIER_MODEL=${INLIER_MODEL:-ResUNetBNF}
export OPTIMIZER=${OPTIMIZER:-SGD}
export LR=${LR:-1e-1}
export MAX_EPOCH=${MAX_EPOCH:-100}
export BATCH_SIZE=${BATCH_SIZE:-8}
export ITER_SIZE=${ITER_SIZE:-1}
export VOXEL_SIZE=${VOXEL_SIZE:-0.05}
export POSITIVE_PAIR_SEARCH_VOXEL_SIZE_MULTIPLIER=${POSITIVE_PAIR_SEARCH_VOXEL_SIZE_MULTIPLIER:-4}
export CONV1_KERNEL_SIZE=${CONV1_KERNEL_SIZE:-7}
export EXP_GAMMA=${EXP_GAMMA:-0.99}
export RANDOM_SCALE=${RANDOM_SCALE:-True}
export TIME=$(date +"%Y-%m-%d_%H-%M-%S")
export VERSION=$(git rev-parse HEAD)
export OUT_DIR=${DATA_ROOT}/${DATASET}-v${VOXEL_SIZE}/${INLIER_MODEL}/${OPTIMIZER}-lr${LR}-e${MAX_EPOCH}-b${BATCH_SIZE}i${ITER_SIZE}-modelnout${MODEL_N_OUT}${PATH_POSTFIX}/${TIME}
export PYTHONUNBUFFERED="True"
echo $OUT_DIR
mkdir -m 755 -p $OUT_DIR
LOG=${OUT_DIR}/log_${TIME}.txt
echo "Host: " $(hostname) | tee -a $LOG
echo "Conda " $(which conda) | tee -a $LOG
echo $(pwd) | tee -a $LOG
echo "Version: " $VERSION | tee -a $LOG
echo "Git diff" | tee -a $LOG
echo "" | tee -a $LOG
git diff | tee -a $LOG
echo "" | tee -a $LOG
nvidia-smi | tee -a $LOG
# Training
python train.py \
--weights ${FCGF_WEIGHTS} \
--dataset ${DATASET} \
--threed_match_dir ${THREED_MATCH_DIR} \
--feat_model ${MODEL} \
--feat_model_n_out ${MODEL_N_OUT} \
--feat_conv1_kernel_size ${CONV1_KERNEL_SIZE} \
--inlier_model ${INLIER_MODEL} \
--optimizer ${OPTIMIZER} \
--lr ${LR} \
--batch_size ${BATCH_SIZE} \
--val_batch_size ${BATCH_SIZE} \
--iter_size ${ITER_SIZE} \
--max_epoch ${MAX_EPOCH} \
--voxel_size ${VOXEL_SIZE} \
--out_dir ${OUT_DIR} \
--use_random_scale ${RANDOM_SCALE} \
--positive_pair_search_voxel_size_multiplier ${POSITIVE_PAIR_SEARCH_VOXEL_SIZE_MULTIPLIER} \
$MISC_ARGS 2>&1 | tee -a $LOG
# Test
python -m scripts.test_3dmatch \
$MISC_ARGS \
--threed_match_dir ${THREED_MATCH_DIR} \
--weights ${OUT_DIR}/best_val_checkpoint.pth \
2>&1 | tee -a $LOG
================================================
FILE: scripts/train_kitti.sh
================================================
#! /bin/bash
export PATH_POSTFIX=$1
export MISC_ARGS=$2
export DATA_ROOT="./outputs/Experiment3"
export DATASET=${DATASET:-KITTINMPairDataset}
export KITTI_PATH=${KITTI_PATH}
export MODEL=${MODEL:-ResUNetBN2C}
export MODEL_N_OUT=${MODEL_N_OUT:-32}
export FCGF_WEIGHTS=${FCGF_WEIGHTS}
export INLIER_MODEL=${INLIER_MODEL:-ResUNetBN2C}
export OPTIMIZER=${OPTIMIZER:-SGD}
export LR=${LR:-1e-2}
export MAX_EPOCH=${MAX_EPOCH:-100}
export BATCH_SIZE=${BATCH_SIZE:-8}
export ITER_SIZE=${ITER_SIZE:-1}
export VOXEL_SIZE=${VOXEL_SIZE:-0.3}
export POSITIVE_PAIR_SEARCH_VOXEL_SIZE_MULTIPLIER=${POSITIVE_PAIR_SEARCH_VOXEL_SIZE_MULTIPLIER:-4}
export CONV1_KERNEL_SIZE=${CONV1_KERNEL_SIZE:-5}
export EXP_GAMMA=${EXP_GAMMA:-0.99}
export RANDOM_SCALE=${RANDOM_SCALE:-True}
export TIME=$(date +"%Y-%m-%d_%H-%M-%S")
export VERSION=$(git rev-parse HEAD)
export OUT_DIR=${DATA_ROOT}/${DATASET}-v${VOXEL_SIZE}/${INLIER_MODEL}/${OPTIMIZER}-lr${LR}-e${MAX_EPOCH}-b${BATCH_SIZE}i${ITER_SIZE}-modelnout${MODEL_N_OUT}${PATH_POSTFIX}/${TIME}
export PYTHONUNBUFFERED="True"
echo $OUT_DIR
mkdir -m 755 -p $OUT_DIR
LOG=${OUT_DIR}/log_${TIME}.txt
echo "Host: " $(hostname) | tee -a $LOG
echo "Conda " $(which conda) | tee -a $LOG
echo $(pwd) | tee -a $LOG
echo "Version: " $VERSION | tee -a $LOG
echo "Git diff" | tee -a $LOG
echo "" | tee -a $LOG
git diff | tee -a $LOG
echo "" | tee -a $LOG
nvidia-smi | tee -a $LOG
# Training
python train.py \
--weights ${FCGF_WEIGHTS} \
--dataset ${DATASET} \
--feat_model ${MODEL} \
--feat_model_n_out ${MODEL_N_OUT} \
--feat_conv1_kernel_size ${CONV1_KERNEL_SIZE} \
--inlier_model ${INLIER_MODEL} \
--optimizer ${OPTIMIZER} \
--lr ${LR} \
--batch_size ${BATCH_SIZE} \
--val_batch_size ${BATCH_SIZE} \
--iter_size ${ITER_SIZE} \
--max_epoch ${MAX_EPOCH} \
--voxel_size ${VOXEL_SIZE} \
--out_dir ${OUT_DIR} \
--use_random_scale ${RANDOM_SCALE} \
--kitti_dir ${KITTI_PATH} \
--success_rte_thresh 2 \
--success_rre_thresh 5 \
--positive_pair_search_voxel_size_multiplier ${POSITIVE_PAIR_SEARCH_VOXEL_SIZE_MULTIPLIER} \
$MISC_ARGS 2>&1 | tee -a $LOG
# Test
python -m scripts.test_kitti \
--kitti_dir ${KITTI_PATH} \
--save_dir ${OUT_DIR} | tee -a $LOG
================================================
FILE: train.py
================================================
# Copyright (c) Chris Choy (chrischoy@ai.stanford.edu) and Wei Dong (weidong@andrew.cmu.edu)
#
# Please cite the following papers if you use any part of the code.
# - Christopher Choy, Wei Dong, Vladlen Koltun, Deep Global Registration, CVPR 2020
# - Christopher Choy, Jaesik Park, Vladlen Koltun, Fully Convolutional Geometric Features, ICCV 2019
# - Christopher Choy, JunYoung Gwak, Silvio Savarese, 4D Spatio-Temporal ConvNets: Minkowski Convolutional Neural Networks, CVPR 2019
import open3d as o3d # prevent loading error
import sys
import json
import logging
import torch
from easydict import EasyDict as edict
from config import get_config
from dataloader.data_loaders import make_data_loader
from core.trainer import WeightedProcrustesTrainer
ch = logging.StreamHandler(sys.stdout)
logging.getLogger().setLevel(logging.INFO)
logging.basicConfig(format='%(asctime)s %(message)s',
datefmt='%m/%d %H:%M:%S',
handlers=[ch])
torch.manual_seed(0)
torch.cuda.manual_seed(0)
logging.basicConfig(level=logging.INFO, format="")
def main(config, resume=False):
train_loader = make_data_loader(config,
config.train_phase,
config.batch_size,
num_workers=config.train_num_workers,
shuffle=True)
if config.test_valid:
val_loader = make_data_loader(config,
config.val_phase,
config.val_batch_size,
num_workers=config.val_num_workers,
shuffle=True)
else:
val_loader = None
trainer = WeightedProcrustesTrainer(
config=config,
data_loader=train_loader,
val_data_loader=val_loader,
)
trainer.train()
if __name__ == "__main__":
logger = logging.getLogger()
config = get_config()
dconfig = vars(config)
if config.resume_dir:
resume_config = json.load(open(config.resume_dir + '/config.json', 'r'))
for k in dconfig:
if k not in ['resume_dir'] and k in resume_config:
dconfig[k] = resume_config[k]
dconfig['resume'] = resume_config['out_dir'] + '/checkpoint.pth'
logging.info('===> Configurations')
for k in dconfig:
logging.info(' {}: {}'.format(k, dconfig[k]))
# Convert to dict
config = edict(dconfig)
main(config)
================================================
FILE: util/__init__.py
================================================
# Copyright (c) Chris Choy (chrischoy@ai.stanford.edu) and Wei Dong (weidong@andrew.cmu.edu)
#
# Please cite the following papers if you use any part of the code.
# - Christopher Choy, Wei Dong, Vladlen Koltun, Deep Global Registration, CVPR 2020
# - Christopher Choy, Jaesik Park, Vladlen Koltun, Fully Convolutional Geometric Features, ICCV 2019
# - Christopher Choy, JunYoung Gwak, Silvio Savarese, 4D Spatio-Temporal ConvNets: Minkowski Convolutional Neural Networks, CVPR 2019
================================================
FILE: util/file.py
================================================
# Copyright (c) Chris Choy (chrischoy@ai.stanford.edu) and Wei Dong (weidong@andrew.cmu.edu)
#
# Please cite the following papers if you use any part of the code.
# - Christopher Choy, Wei Dong, Vladlen Koltun, Deep Global Registration, CVPR 2020
# - Christopher Choy, Jaesik Park, Vladlen Koltun, Fully Convolutional Geometric Features, ICCV 2019
# - Christopher Choy, JunYoung Gwak, Silvio Savarese, 4D Spatio-Temporal ConvNets: Minkowski Convolutional Neural Networks, CVPR 2019
import os
import re
from os import listdir
from os.path import isfile, isdir, join, splitext
import numpy as np
def read_txt(path):
"""Read txt file into lines.
"""
with open(path) as f:
lines = f.readlines()
lines = [x.strip() for x in lines]
return lines
def ensure_dir(path):
if not os.path.exists(path):
os.makedirs(path, mode=0o755)
def sorted_alphanum(file_list_ordered):
def convert(text):
return int(text) if text.isdigit() else text
def alphanum_key(key):
return [convert(c) for c in re.split('([0-9]+)', key)]
return sorted(file_list_ordered, key=alphanum_key)
def get_file_list(path, extension=None):
if extension is None:
file_list = [join(path, f) for f in listdir(path) if isfile(join(path, f))]
else:
file_list = [
join(path, f) for f in listdir(path)
if isfile(join(path, f)) and splitext(f)[1] == extension
]
file_list = sorted_alphanum(file_list)
return file_list
def get_file_list_specific(path, color_depth, extension=None):
if extension is None:
file_list = [join(path, f) for f in listdir(path) if isfile(join(path, f))]
else:
file_list = [
join(path, f) for f in listdir(path)
if isfile(join(path, f)) and color_depth in f and splitext(f)[1] == extension
]
file_list = sorted_alphanum(file_list)
return file_list
def get_folder_list(path):
folder_list = [join(path, f) for f in listdir(path) if isdir(join(path, f))]
folder_list = sorted_alphanum(folder_list)
return folder_list
def read_trajectory(filename, dim=4):
class CameraPose:
def __init__(self, meta, mat):
self.metadata = meta
self.pose = mat
def __str__(self):
return 'metadata : ' + ' '.join(map(str, self.metadata)) + '\n' + \
"pose : " + "\n" + np.array_str(self.pose)
traj = []
with open(filename, 'r') as f:
metastr = f.readline()
while metastr:
metadata = list(map(int, metastr.split()))
mat = np.zeros(shape=(dim, dim))
for i in range(dim):
matstr = f.readline()
mat[i, :] = np.fromstring(matstr, dtype=float, sep=' \t')
traj.append(CameraPose(metadata, mat))
metastr = f.readline()
return traj
================================================
FILE: util/integration.py
================================================
# Copyright (c) Chris Choy (chrischoy@ai.stanford.edu) and Wei Dong (weidong@andrew.cmu.edu)
#
# Please cite the following papers if you use any part of the code.
# - Christopher Choy, Wei Dong, Vladlen Koltun, Deep Global Registration, CVPR 2020
# - Christopher Choy, Jaesik Park, Vladlen Koltun, Fully Convolutional Geometric Features, ICCV 2019
# - Christopher Choy, JunYoung Gwak, Silvio Savarese, 4D Spatio-Temporal ConvNets: Minkowski Convolutional Neural Networks, CVPR 2019
import open3d as o3d
import argparse
import os, sys
import numpy as np
def read_rgbd_image(color_file, depth_file, max_depth=4.5):
'''
\return RGBD image
'''
color = o3d.io.read_image(color_file)
depth = o3d.io.read_image(depth_file)
# We assume depth scale is always 1000.0
rgbd_image = o3d.geometry.RGBDImage.create_from_color_and_depth(
color, depth, depth_trunc=max_depth, convert_rgb_to_intensity=False)
return rgbd_image
def read_pose(pose_file):
'''
\return 4x4 np matrix
'''
pose = np.loadtxt(pose_file)
assert pose is not None
return pose
def read_intrinsics(intrinsic_file):
'''
\return fx, fy, cx, cy
'''
K = np.loadtxt(intrinsic_file)
assert K is not None
return K[0, 0], K[1, 1], K[0, 2], K[1, 2]
def integrate_rgb_frames_for_fragment(color_files,
depth_files,
pose_files,
seq_path,
intrinsic,
fragment_id,
n_fragments,
n_frames_per_fragment,
voxel_length=0.008):
volume = o3d.integration.ScalableTSDFVolume(
voxel_length=voxel_length,
sdf_trunc=0.04,
color_type=o3d.integration.TSDFVolumeColorType.RGB8)
start = fragment_id * n_frames_per_fragment
end = min(start + n_frames_per_fragment, len(pose_files))
for i_abs in range(start, end):
print("Fragment %03d / %03d :: integrate rgbd frame %d (%d of %d)." %
(fragment_id, n_fragments - 1, i_abs, i_abs - start + 1, end - start))
rgbd = read_rgbd_image(
os.path.join(seq_path, color_files[i_abs]),
os.path.join(seq_path, depth_files[i_abs]))
pose = read_pose(os.path.join(seq_path, pose_files[i_abs]))
volume.integrate(rgbd, intrinsic, np.linalg.inv(pose))
mesh = volume.extract_triangle_mesh()
return mesh
def process_seq(seq_path, output_path, n_frames_per_fragment, display=False):
files = os.listdir(seq_path)
if 'intrinsics.txt' in files:
fx, fy, cx, cy = read_intrinsics(os.path.join(seq_path, 'intrinsics.txt'))
else:
fx, fy, cx, cy = read_intrinsics(os.path.join(seq_path, '../camera-intrinsics.txt'))
rgb_files = sorted(list(filter(lambda x: x.endswith('.color.png'), files)))
depth_files = sorted(list(filter(lambda x: x.endswith('.depth.png'), files)))
pose_files = sorted(list(filter(lambda x: x.endswith('.pose.txt'), files)))
assert len(rgb_files) > 0
assert len(rgb_files) == len(depth_files)
assert len(rgb_files) == len(pose_files)
# get width and height to prepare for intrinsics
rgb_sample = o3d.io.read_image(os.path.join(seq_path, rgb_files[0]))
width, height = rgb_sample.get_max_bound()
intrinsic = o3d.camera.PinholeCameraIntrinsic(int(width), int(height), fx, fy, cx, cy)
n_fragments = ((len(rgb_files) + n_frames_per_fragment - 1)) // n_frames_per_fragment
for fragment_id in range(0, n_fragments):
mesh = integrate_rgb_frames_for_fragment(rgb_files, depth_files, pose_files,
seq_path, intrinsic, fragment_id,
n_fragments, n_frames_per_fragment)
if display:
o3d.visualization.draw_geometries([mesh])
mesh_name = os.path.join(output_seq_path, 'fragment-{}.ply'.format(fragment_id))
o3d.io.write_triangle_mesh(mesh_name, mesh)
if __name__ == '__main__':
parser = argparse.ArgumentParser(
description='RGB-D integration for 3DMatch raw dataset')
parser.add_argument(
'dataset', help='path to dataset that contains colors, depths and poses')
parser.add_argument('output', help='path to output fragments')
args = parser.parse_args()
scene_name = args.dataset.split('/')[-1]
if not os.path.exists(args.output):
os.makedirs(args.output)
output_scene_path = os.path.join(args.output, scene_name)
if os.path.exists(output_scene_path):
choice = input(
'Path {} already exists, continue? (Y / N)'.format(output_scene_path))
if choice != 'Y' and choice != 'y':
print('abort')
exit
else:
os.makedirs(output_scene_path)
seqs = list(filter(lambda x: x.startswith('seq'), os.listdir(args.dataset)))
for seq in seqs:
output_seq_path = os.path.join(output_scene_path, seq)
if not os.path.exists(output_seq_path):
os.makedirs(output_seq_path)
process_seq(
os.path.join(args.dataset, seq),
output_seq_path,
n_frames_per_fragment=50,
display=False)
================================================
FILE: util/pointcloud.py
================================================
# Copyright (c) Chris Choy (chrischoy@ai.stanford.edu) and Wei Dong (weidong@andrew.cmu.edu)
#
# Please cite the following papers if you use any part of the code.
# - Christopher Choy, Wei Dong, Vladlen Koltun, Deep Global Registration, CVPR 2020
# - Christopher Choy, Jaesik Park, Vladlen Koltun, Fully Convolutional Geometric Features, ICCV 2019
# - Christopher Choy, JunYoung Gwak, Silvio Savarese, 4D Spatio-Temporal ConvNets: Minkowski Convolutional Neural Networks, CVPR 2019
import copy
import numpy as np
import math
import open3d as o3d
from core.knn import find_knn_cpu
def make_open3d_point_cloud(xyz, color=None):
pcd = o3d.geometry.PointCloud()
pcd.points = o3d.utility.Vector3dVector(xyz.cpu().detach().numpy())
if color is not None:
if len(color) != len(xyz):
color = np.tile(color, (len(xyz), 1))
pcd.colors = o3d.utility.Vector3dVector(color)
return pcd
def make_open3d_feature(data, dim, npts):
feature = o3d.registration.Feature()
feature.resize(dim, npts)
feature.data = data.cpu().numpy().astype('d').transpose()
return feature
def make_open3d_feature_from_numpy(data):
assert isinstance(data, np.ndarray)
assert data.ndim == 2
feature = o3d.registration.Feature()
feature.resize(data.shape[1], data.shape[0])
feature.data = data.astype('d').transpose()
return feature
def pointcloud_to_spheres(pcd, voxel_size, color, sphere_size=0.6):
spheres = o3d.geometry.TriangleMesh()
s = o3d.geometry.TriangleMesh.create_sphere(radius=voxel_size * sphere_size)
s.compute_vertex_normals()
s.paint_uniform_color(color)
if isinstance(pcd, o3d.geometry.PointCloud):
pcd = np.array(pcd.points)
for i, p in enumerate(pcd):
si = copy.deepcopy(s)
trans = np.identity(4)
trans[:3, 3] = p
si.transform(trans)
# si.paint_uniform_color(pcd.colors[i])
spheres += si
return spheres
def prepare_single_pointcloud(pcd, voxel_size):
pcd.estimate_normals(o3d.KDTreeSearchParamHybrid(radius=voxel_size * 2.0, max_nn=30))
return pcd
def prepare_pointcloud(filename, voxel_size):
pcd = o3d.io.read_point_cloud(filename)
T = get_random_transformation(pcd)
pcd.transform(T)
pcd_down = pcd.voxel_down_sample(voxel_size)
return pcd_down, T
def compute_overlap_ratio(pcd0, pcd1, trans, voxel_size):
pcd0_down = pcd0.voxel_down_sample(voxel_size)
pcd1_down = pcd1.voxel_down_sample(voxel_size)
matching01 = get_matching_indices(pcd0_down, pcd1_down, trans, voxel_size, 1)
matching10 = get_matching_indices(pcd1_down, pcd0_down, np.linalg.inv(trans),
voxel_size, 1)
overlap0 = len(matching01) / len(pcd0_down.points)
overlap1 = len(matching10) / len(pcd1_down.points)
return max(overlap0, overlap1)
def get_matching_indices(source, target, trans, search_voxel_size, K=None):
source_copy = copy.deepcopy(source)
target_copy = copy.deepcopy(target)
source_copy.transform(trans)
pcd_tree = o3d.geometry.KDTreeFlann(target_copy)
match_inds = []
for i, point in enumerate(source_copy.points):
[_, idx, _] = pcd_tree.search_radius_vector_3d(point, search_voxel_size)
if K is not None:
idx = idx[:K]
for j in idx:
match_inds.append((i, j))
return match_inds
def evaluate_feature(pcd0, pcd1, feat0, feat1, trans_gth, search_voxel_size):
match_inds = get_matching_indices(pcd0, pcd1, trans_gth, search_voxel_size)
pcd_tree = o3d.geometry.KDTreeFlann(feat1)
dist = []
for ind in match_inds:
k, idx, _ = pcd_tree.search_knn_vector_xd(feat0.data[:, ind[0]], 1)
dist.append(
np.clip(np.power(pcd1.points[ind[1]] - pcd1.points[idx[0]], 2),
a_min=0.0,
a_max=1.0))
return np.mean(dist)
def valid_feat_ratio(pcd0, pcd1, feat0, feat1, trans_gth, thresh=0.1):
pcd0_copy = copy.deepcopy(pcd0)
pcd0_copy.transform(trans_gth)
inds = find_knn_cpu(feat0, feat1)
dist = np.sqrt(((np.array(pcd0_copy.points) - np.array(pcd1.points)[inds])**2).sum(1))
return np.mean(dist < thresh)
def evaluate_feature_3dmatch(pcd0, pcd1, feat0, feat1, trans_gth, inlier_thresh=0.1):
r"""Return the hit ratio (ratio of inlier correspondences and all correspondences).
inliear_thresh is the inlier_threshold in meter.
"""
if len(pcd0.points) < len(pcd1.points):
hit = valid_feat_ratio(pcd0, pcd1, feat0, feat1, trans_gth, inlier_thresh)
else:
hit = valid_feat_ratio(pcd1, pcd0, feat1, feat0, np.linalg.inv(trans_gth),
inlier_thresh)
return hit
def get_matching_matrix(source, target, trans, voxel_size, debug_mode):
source_copy = copy.deepcopy(source)
target_copy = copy.deepcopy(target)
source_copy.transform(trans)
pcd_tree = o3d.geometry.KDTreeFlann(target_copy)
matching_matrix = np.zeros((len(source_copy.points), len(target_copy.points)))
for i, point in enumerate(source_copy.points):
[k, idx, _] = pcd_tree.search_radius_vector_3d(point, voxel_size * 1.5)
if k >= 1:
matching_matrix[i, idx[0]] = 1 # TODO: only the cloest?
return matching_matrix
def get_random_transformation(pcd_input):
def rot_x(x):
out = np.zeros((3, 3))
c = math.cos(x)
s = math.sin(x)
out[0, 0] = 1
out[1, 1] = c
out[1, 2] = -s
out[2, 1] = s
out[2, 2] = c
return out
def rot_y(x):
out = np.zeros((3, 3))
c = math.cos(x)
s = math.sin(x)
out[0, 0] = c
out[0, 2] = s
out[1, 1] = 1
out[2, 0] = -s
out[2, 2] = c
return out
def rot_z(x):
out = np.zeros((3, 3))
c = math.cos(x)
s = math.sin(x)
out[0, 0] = c
out[0, 1] = -s
out[1, 0] = s
out[1, 1] = c
out[2, 2] = 1
return out
pcd_output = copy.deepcopy(pcd_input)
mean = np.mean(np.asarray(pcd_output.points), axis=0).transpose()
xyz = np.random.uniform(0, 2 * math.pi, 3)
R = np.dot(np.dot(rot_x(xyz[0]), rot_y(xyz[1])), rot_z(xyz[2]))
T = np.zeros((4, 4))
T[:3, :3] = R
T[:3, 3] = np.dot(-R, mean)
T[3, 3] = 1
return T
def draw_registration_result(source, target, transformation):
source_temp = copy.deepcopy(source)
target_temp = copy.deepcopy(target)
source_temp.paint_uniform_color([1, 0.706, 0])
target_temp.paint_uniform_color([0, 0.651, 0.929])
source_temp.transform(transformation)
o3d.visualization.draw_geometries([source_temp, target_temp])
================================================
FILE: util/timer.py
================================================
# Copyright (c) Chris Choy (chrischoy@ai.stanford.edu) and Wei Dong (weidong@andrew.cmu.edu)
#
# Please cite the following papers if you use any part of the code.
# - Christopher Choy, Wei Dong, Vladlen Koltun, Deep Global Registration, CVPR 2020
# - Christopher Choy, Jaesik Park, Vladlen Koltun, Fully Convolutional Geometric Features, ICCV 2019
# - Christopher Choy, JunYoung Gwak, Silvio Savarese, 4D Spatio-Temporal ConvNets: Minkowski Convolutional Neural Networks, CVPR 2019
import time
import numpy as np
import torch
class AverageMeter(object):
"""Computes and stores the average and current value"""
def __init__(self):
self.reset()
def reset(self):
self.val = 0
self.avg = 0
self.sum = 0.0
self.sq_sum = 0.0
self.count = 0
def update(self, val, n=1):
if isinstance(val, np.ndarray):
n = val.size
val = val.mean()
elif isinstance(val, torch.Tensor):
n = val.nelement()
val = val.mean().item()
self.val = val
self.sum += val * n
self.count += n
self.avg = self.sum / self.count
self.sq_sum += val**2 * n
self.var = self.sq_sum / self.count - self.avg ** 2
class Timer(AverageMeter):
"""A simple timer."""
def tic(self):
# using time.time instead of time.clock because time time.clock
# does not normalize for multithreading
self.start_time = time.time()
def toc(self, average=True):
self.diff = time.time() - self.start_time
self.update(self.diff)
if average:
return self.avg
else:
return self.diff